Skip to content

Commit af2b9c4

Browse files
committed
fix: remove the Pythinker Datasource plugin
The plugin proxied every tool call to api.pythinker.com/coding/v1/tools, a gateway backend that was never built — every call returned a plain 404, so the plugin never worked. Rather than run a dead marketplace entry, drop the plugin, its CDN package, and its docs section entirely. build-cdn.mjs now skips a plugin channel directory that doesn't exist instead of throwing, since removing the only official-tier zip makes git drop the now-empty plugins/cdn/official/ directory on checkout. Also move lint-staged's oxlint invocation into .lintstagedrc.mjs so it filters out oxlint-ignored paths before running: oxlint exits non-zero on an all-ignored fileset, which broke committing an isolated change to a script under apps/*/scripts/ (an intentionally oxlint-ignored path).
1 parent 20ae711 commit af2b9c4

18 files changed

Lines changed: 54 additions & 1263 deletions

File tree

.agents/skills/write-tui/DESIGN.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,8 +122,8 @@ For per-row on/off lists (e.g. installed plugins in `/plugins`, MCP server lists
122122
↑↓ navigate · Space toggle · Enter details · Esc cancel
123123
← blank line
124124
Installed plugins (2) ← section title (textStrong / bold)
125-
Pythinker Datasource enabled ← selected row (❯ + primary+bold name) + status label (success)
126-
id pythinker-datasource · 1 skill · MCP 1/1 · via code.pythinker.com · official ← secondary line (textMuted, ` · ` separated)
125+
Example Plugin enabled ← selected row (❯ + primary+bold name) + status label (success)
126+
id example-plugin · 1 skill · MCP 1/1 · via code.pythinker.com · official ← secondary line (textMuted, ` · ` separated)
127127
Superpowers disabled ← unselected row (text name) + off label (textDim)
128128
id superpowers · 14 skills · via code.pythinker.com · curated
129129
```
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@pythoughts/pythinker-code": minor
3+
---
4+
5+
Remove the Pythinker Datasource plugin from the marketplace; its data gateway backend is not available, so every datasource query failed.

.lintstagedrc.mjs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import { relative } from 'node:path';
2+
3+
// Keep this in sync with .oxlintrc.json's "ignorePatterns" — oxlint silently
4+
// treats an all-ignored fileset as an error ("no files to lint", exit 1),
5+
// so lint-staged must filter these out itself before invoking oxlint.
6+
const OXLINT_IGNORE_PATTERNS = [
7+
'dist/',
8+
'coverage/',
9+
'node_modules/',
10+
'apps/*/scripts/',
11+
'docs/smoke-archive/',
12+
'plugins/curated/superpowers/',
13+
'*.generated.ts',
14+
];
15+
16+
const ignoreRegexes = OXLINT_IGNORE_PATTERNS.map((pattern) => {
17+
const isDir = pattern.endsWith('/');
18+
const body = isDir ? pattern.slice(0, -1) : pattern;
19+
const escaped = body.replaceAll(/[.+^${}()|[\]\\]/g, '\\$&').replaceAll(/\*/g, '[^/]*');
20+
return isDir ? new RegExp(`(^|/)${escaped}(/|$)`) : new RegExp(`(^|/)${escaped}$`);
21+
});
22+
23+
function lintableFiles(files) {
24+
return files
25+
.map((file) => relative(process.cwd(), file))
26+
.filter((file) => !ignoreRegexes.some((re) => re.test(file)));
27+
}
28+
29+
export default {
30+
'*.{js,jsx,ts,tsx,mjs,cjs,mts,cts}': (files) => {
31+
const targets = lintableFiles(files);
32+
if (targets.length === 0) return [];
33+
const quoted = targets.map((f) => JSON.stringify(f)).join(' ');
34+
return [`oxlint --fix --quiet ${quoted}`, `oxlint --type-aware --quiet ${quoted}`];
35+
},
36+
};

0 commit comments

Comments
 (0)