@wootsup/yt-builder-mcp 1.6.1 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/README.md +1 -1
  2. package/dist/catalog/tool-catalog-markdown.d.ts +55 -0
  3. package/dist/catalog/tool-catalog-markdown.d.ts.map +1 -0
  4. package/dist/catalog/tool-catalog-markdown.js +84 -0
  5. package/dist/catalog/tool-catalog-markdown.js.map +1 -0
  6. package/dist/index.d.ts +1 -0
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +4 -0
  9. package/dist/index.js.map +1 -1
  10. package/dist/install-skill.d.ts +23 -2
  11. package/dist/install-skill.d.ts.map +1 -1
  12. package/dist/install-skill.js +35 -3
  13. package/dist/install-skill.js.map +1 -1
  14. package/dist/setup-cli.d.ts +7 -3
  15. package/dist/setup-cli.d.ts.map +1 -1
  16. package/dist/setup-cli.js +82 -13
  17. package/dist/setup-cli.js.map +1 -1
  18. package/dist/skill-manifest.d.ts +35 -0
  19. package/dist/skill-manifest.d.ts.map +1 -0
  20. package/dist/skill-manifest.js +91 -0
  21. package/dist/skill-manifest.js.map +1 -0
  22. package/dist/tools/elements/handlers-write.d.ts.map +1 -1
  23. package/dist/tools/elements/handlers-write.js +55 -0
  24. package/dist/tools/elements/handlers-write.js.map +1 -1
  25. package/dist/tools/elements/schema-validation.d.ts +78 -0
  26. package/dist/tools/elements/schema-validation.d.ts.map +1 -0
  27. package/dist/tools/elements/schema-validation.js +205 -0
  28. package/dist/tools/elements/schema-validation.js.map +1 -0
  29. package/dist/tools/format/source-schema-format.d.ts +10 -0
  30. package/dist/tools/format/source-schema-format.d.ts.map +1 -1
  31. package/dist/tools/format/source-schema-format.js +50 -3
  32. package/dist/tools/format/source-schema-format.js.map +1 -1
  33. package/dist/tools/inspection.js +6 -5
  34. package/dist/tools/inspection.js.map +1 -1
  35. package/dist/tools/sources/builders.d.ts.map +1 -1
  36. package/dist/tools/sources/builders.js +4 -3
  37. package/dist/tools/sources/builders.js.map +1 -1
  38. package/dist/tools/sources/handlers.d.ts +2 -0
  39. package/dist/tools/sources/handlers.d.ts.map +1 -1
  40. package/dist/tools/sources/handlers.js +8 -0
  41. package/dist/tools/sources/handlers.js.map +1 -1
  42. package/dist/uninstall-skill.d.ts +6 -0
  43. package/dist/uninstall-skill.d.ts.map +1 -1
  44. package/dist/uninstall-skill.js +20 -2
  45. package/dist/uninstall-skill.js.map +1 -1
  46. package/dist/uninstall.d.ts +2 -0
  47. package/dist/uninstall.d.ts.map +1 -1
  48. package/dist/uninstall.js +1 -1
  49. package/dist/uninstall.js.map +1 -1
  50. package/manifest.json +1 -1
  51. package/package.json +1 -1
  52. package/skills/yt-builder-mcp/SKILL.md +76 -48
package/README.md CHANGED
@@ -196,7 +196,7 @@ exit with code `2` and a clear error to stderr:
196
196
  npx -y @wootsup/yt-builder-mcp setup \
197
197
  --non-interactive \
198
198
  --client cursor --client claude-desktop \
199
- --url https://dev.wootsup.com/wordpress \
199
+ --url https://your-site.example/wordpress \
200
200
  --token "$YTB_TOKEN"
201
201
  ```
202
202
 
@@ -0,0 +1,55 @@
1
+ /**
2
+ * packages/mcp/src/catalog/tool-catalog-markdown.ts — Behavior-Truth ④.
3
+ *
4
+ * The SINGLE source of truth for the SKILL.md "Tool Catalog" appendix
5
+ * Markdown. Previously this rendering logic lived ONLY inline in
6
+ * `scripts/extract-tools.mjs`, so nothing could re-derive the appendix to
7
+ * assert it stayed fresh — a tool description could drift from the committed
8
+ * appendix and every test stayed green (the render_preview/A6 stale-row proved
9
+ * it live).
10
+ *
11
+ * Now BOTH consumers import this one pure function:
12
+ * - `scripts/extract-tools.mjs` (the generator) — via the compiled
13
+ * `dist/index.js` re-export.
14
+ * - `tests/skills/skill-md-behavior-truth.test.ts` (the freshness gate) —
15
+ * re-renders from the live `buildAllTools()` registry and byte-compares
16
+ * against the committed appendix block.
17
+ *
18
+ * Because there is exactly ONE renderer, the generated appendix and the
19
+ * freshness assertion can never disagree about the row format. The output is
20
+ * byte-identical to the prior inline implementation.
21
+ *
22
+ * @license MIT
23
+ */
24
+ /**
25
+ * The minimal tool metadata the catalog row needs. `buildAllTools()` returns
26
+ * `AnyToolDefinition[]`, which is structurally assignable to this — kept as a
27
+ * decoupled structural type so the renderer stays pure and dependency-free.
28
+ */
29
+ export interface CatalogToolEntry {
30
+ readonly name: string;
31
+ readonly description: string;
32
+ readonly inputSchema: Readonly<Record<string, unknown>>;
33
+ readonly annotations: {
34
+ readonly readOnlyHint?: boolean;
35
+ readonly destructiveHint?: boolean;
36
+ readonly idempotentHint?: boolean;
37
+ readonly openWorldHint?: boolean;
38
+ };
39
+ }
40
+ /** Split counts the header line derives from the gateway source-of-truth. */
41
+ export interface CatalogCounts {
42
+ /** `ESSENTIAL_TOOLS.length` — the L1 forwarded essentials. */
43
+ readonly essentialCount: number;
44
+ /** `DIRECT_TOP_LEVEL_TOOLS.length` — the L3 direct top-level tools. */
45
+ readonly directCount: number;
46
+ /** Top-level gateways advertised in `tools/list` (write + read-only). */
47
+ readonly gatewayCount?: number;
48
+ }
49
+ /**
50
+ * Render the deterministic tool-catalog Markdown (header line + table) for the
51
+ * SKILL.md appendix. Pure: identical input ⇒ identical bytes. The trailing
52
+ * newline matches the generator's `lines.join('\n') + '\n'` contract.
53
+ */
54
+ export declare function renderToolCatalogMarkdown(tools: readonly CatalogToolEntry[], counts: CatalogCounts): string;
55
+ //# sourceMappingURL=tool-catalog-markdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-catalog-markdown.d.ts","sourceRoot":"","sources":["../../src/catalog/tool-catalog-markdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACxD,QAAQ,CAAC,WAAW,EAAE;QAClB,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;QAChC,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;QACnC,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;QAClC,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;KACpC,CAAC;CACL;AAED,6EAA6E;AAC7E,MAAM,WAAW,aAAa;IAC1B,8DAA8D;IAC9D,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,uEAAuE;IACvE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,yEAAyE;IACzE,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAClC;AAiCD;;;;GAIG;AACH,wBAAgB,yBAAyB,CACrC,KAAK,EAAE,SAAS,gBAAgB,EAAE,EAClC,MAAM,EAAE,aAAa,GACtB,MAAM,CA+BR"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * packages/mcp/src/catalog/tool-catalog-markdown.ts — Behavior-Truth ④.
3
+ *
4
+ * The SINGLE source of truth for the SKILL.md "Tool Catalog" appendix
5
+ * Markdown. Previously this rendering logic lived ONLY inline in
6
+ * `scripts/extract-tools.mjs`, so nothing could re-derive the appendix to
7
+ * assert it stayed fresh — a tool description could drift from the committed
8
+ * appendix and every test stayed green (the render_preview/A6 stale-row proved
9
+ * it live).
10
+ *
11
+ * Now BOTH consumers import this one pure function:
12
+ * - `scripts/extract-tools.mjs` (the generator) — via the compiled
13
+ * `dist/index.js` re-export.
14
+ * - `tests/skills/skill-md-behavior-truth.test.ts` (the freshness gate) —
15
+ * re-renders from the live `buildAllTools()` registry and byte-compares
16
+ * against the committed appendix block.
17
+ *
18
+ * Because there is exactly ONE renderer, the generated appendix and the
19
+ * freshness assertion can never disagree about the row format. The output is
20
+ * byte-identical to the prior inline implementation.
21
+ *
22
+ * @license MIT
23
+ */
24
+ /**
25
+ * Derive the `Kind` column from the MCP annotation hints. Mirrors the prior
26
+ * inline logic exactly: read flag → 'read', plus destructive / idempotent /
27
+ * openWorld; no flags at all ⇒ 'mutating'.
28
+ */
29
+ function describeAnnotations(a) {
30
+ if (a === null || a === undefined || typeof a !== 'object')
31
+ return 'read';
32
+ const flags = [];
33
+ if (a.readOnlyHint === true)
34
+ flags.push('read');
35
+ if (a.destructiveHint === true)
36
+ flags.push('destructive');
37
+ if (a.idempotentHint === true)
38
+ flags.push('idempotent');
39
+ if (a.openWorldHint === true)
40
+ flags.push('openWorld');
41
+ return flags.length === 0 ? 'mutating' : flags.join('+');
42
+ }
43
+ /** The sorted input-key list for the `Input keys` column. */
44
+ function listInputKeys(schema) {
45
+ if (schema === null || schema === undefined || typeof schema !== 'object') {
46
+ return [];
47
+ }
48
+ return Object.keys(schema).sort();
49
+ }
50
+ /**
51
+ * Render the deterministic tool-catalog Markdown (header line + table) for the
52
+ * SKILL.md appendix. Pure: identical input ⇒ identical bytes. The trailing
53
+ * newline matches the generator's `lines.join('\n') + '\n'` contract.
54
+ */
55
+ export function renderToolCatalogMarkdown(tools, counts) {
56
+ const records = tools
57
+ .map((t) => ({
58
+ name: String(t.name ?? ''),
59
+ description: String(t.description ?? '').replace(/\s+/g, ' ').trim(),
60
+ kind: describeAnnotations(t.annotations),
61
+ inputKeys: listInputKeys(t.inputSchema),
62
+ }))
63
+ .sort((a, b) => a.name.localeCompare(b.name));
64
+ const l1 = counts.essentialCount;
65
+ const l3 = counts.directCount;
66
+ const gateway = counts.gatewayCount ?? 2;
67
+ const advertised = l1 + l3 + gateway;
68
+ const advanced = records.length - l1 - l3;
69
+ const callable = records.length + gateway;
70
+ const lines = [
71
+ `**${records.length} catalogued tools** plus the \`yootheme_builder_advanced\` (write) + \`yootheme_builder_advanced_read\` (read-only) gateways = **${callable} reachable via \`tools/list\`** (${l1} L1 + ${l3} L3 + ${gateway} gateways = ${advertised} advertised; the gateways route to ${advanced} additional advanced tools, bringing the total to ${callable} callable). Generated by \`scripts/extract-tools.mjs\` from the compiled \`buildAllTools()\` registry. Do not hand-edit this section; re-run \`npm run build && node scripts/extract-tools.mjs\` after changing tool definitions.`,
72
+ '',
73
+ '| Tool | Kind | Input keys | Description |',
74
+ '| --- | --- | --- | --- |',
75
+ ];
76
+ for (const r of records) {
77
+ const keys = r.inputKeys.length === 0 ? '_(none)_' : '`' + r.inputKeys.join('`, `') + '`';
78
+ // Escape pipe chars in the description so the table doesn't break.
79
+ const desc = r.description.replace(/\|/g, '\\|');
80
+ lines.push(`| \`${r.name}\` | ${r.kind} | ${keys} | ${desc} |`);
81
+ }
82
+ return lines.join('\n') + '\n';
83
+ }
84
+ //# sourceMappingURL=tool-catalog-markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-catalog-markdown.js","sourceRoot":"","sources":["../../src/catalog/tool-catalog-markdown.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -18,6 +18,7 @@ export { loadConfig, loadRegistry, isTestMode, ENV_SITE_URL, ENV_WP_URL, ENV_BEA
18
18
  export { bootstrapActiveSite } from './sites/bootstrap.js';
19
19
  export { ConfigError, RestError, NetworkError } from './errors.js';
20
20
  export { buildAllTools } from './tools/index.js';
21
+ export { renderToolCatalogMarkdown, type CatalogToolEntry, type CatalogCounts, } from './catalog/tool-catalog-markdown.js';
21
22
  export { ClientPool, NoDefaultSiteError, UnknownSiteError } from './sites/client-pool.js';
22
23
  export { SiteRegistry } from './sites/registry.js';
23
24
  export { synthesiseFromEnv } from './sites/env-bridge.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,EAAuB,KAAK,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAczF,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACjF,OAAO,EACH,UAAU,EACV,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,UAAU,EACV,UAAU,EACV,cAAc,EACd,YAAY,EACZ,WAAW,EACX,aAAa,GAChB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACxF,OAAO,EACH,eAAe,EACf,sBAAsB,EACtB,WAAW,EACX,gBAAgB,GACnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACH,eAAe,EACf,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,aAAa,GACrB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EACH,yBAAyB,EACzB,QAAQ,EACR,KAAK,aAAa,GACrB,MAAM,2BAA2B,CAAC;AAEnC;;;;GAIG;AACH,MAAM,WAAW,QAAQ;IACrB,+EAA+E;IAC/E,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC;IAC9B,qEAAqE;IACrE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,0EAA0E;IAC1E,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,CAAC;CAC3C;AAED,iBAAe,IAAI,CAAC,IAAI,GAAE,QAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAoJtD;AAkBD,OAAO,EAAE,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,EAAuB,KAAK,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAczF,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACjF,OAAO,EACH,UAAU,EACV,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,UAAU,EACV,UAAU,EACV,cAAc,EACd,YAAY,EACZ,WAAW,EACX,aAAa,GAChB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAIjD,OAAO,EACH,yBAAyB,EACzB,KAAK,gBAAgB,EACrB,KAAK,aAAa,GACrB,MAAM,oCAAoC,CAAC;AAG5C,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACxF,OAAO,EACH,eAAe,EACf,sBAAsB,EACtB,WAAW,EACX,gBAAgB,GACnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACH,eAAe,EACf,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,aAAa,GACrB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EACH,yBAAyB,EACzB,QAAQ,EACR,KAAK,aAAa,GACrB,MAAM,2BAA2B,CAAC;AAEnC;;;;GAIG;AACH,MAAM,WAAW,QAAQ;IACrB,+EAA+E;IAC/E,QAAQ,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC;IAC9B,qEAAqE;IACrE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,0EAA0E;IAC1E,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,CAAC;CAC3C;AAED,iBAAe,IAAI,CAAC,IAAI,GAAE,QAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAoJtD;AAkBD,OAAO,EAAE,IAAI,EAAE,CAAC"}
package/dist/index.js CHANGED
@@ -31,6 +31,10 @@ export { loadConfig, loadRegistry, isTestMode, ENV_SITE_URL, ENV_WP_URL, ENV_BEA
31
31
  export { bootstrapActiveSite } from './sites/bootstrap.js';
32
32
  export { ConfigError, RestError, NetworkError } from './errors.js';
33
33
  export { buildAllTools } from './tools/index.js';
34
+ // Behavior-Truth ④ — the SINGLE tool-catalog Markdown renderer, shared by the
35
+ // extract-tools generator (via this dist re-export) and the SKILL.md appendix
36
+ // freshness test, so the generated appendix and the drift gate never disagree.
37
+ export { renderToolCatalogMarkdown, } from './catalog/tool-catalog-markdown.js';
34
38
  // W6 — multi-site primitives exported for dist consumers (scripts,
35
39
  // embedded uses). The `ClientPool` is the new wiring contract.
36
40
  export { ClientPool, NoDefaultSiteError, UnknownSiteError } from './sites/client-pool.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -5,8 +5,11 @@
5
5
  * agent-skill folder (typically `~/.claude/skills/`) and appends a marker
6
6
  * block to `~/AGENTS.md` so other AI clients pick it up automatically.
7
7
  *
8
- * Idempotent: re-running overwrites existing skill files and skips the
9
- * AGENTS.md append when the marker is already present.
8
+ * Idempotent: re-running overwrites an UNMODIFIED skill and skips the
9
+ * AGENTS.md append when the marker is already present. A locally-modified
10
+ * skill is left untouched unless `force` is set (see
11
+ * {@link InstallSkillOptions.force}); an install-manifest records the
12
+ * version + content hash at install time as the modified-detection baseline.
10
13
  *
11
14
  * Mirrors the pattern from `@wootsup/apimapper-mcp install-skill` so users on both
12
15
  * products get the same workflow.
@@ -32,12 +35,30 @@ export interface InstallSkillOptions {
32
35
  readonly removeLegacyDir?: boolean;
33
36
  /** Target AGENTS.md file to append the marker to. */
34
37
  readonly targetAgentsFile?: string;
38
+ /**
39
+ * Overwrite even a locally-modified skill. Default `false`: a skill whose
40
+ * current hash no longer matches its install-manifest is left untouched
41
+ * (the customer edited it) — see {@link InstallSkillResult.modifiedSkipped}.
42
+ */
43
+ readonly force?: boolean;
44
+ /**
45
+ * Version recorded into the install-manifest (the caller injects
46
+ * `SERVER_VERSION`). Default `'0.0.0'` keeps this function free of a
47
+ * server.js import; production callers always pass the real version.
48
+ */
49
+ readonly bundledVersion?: string;
50
+ /** Override the manifest file location (tests). Default: beside the skills dir. */
51
+ readonly manifestPath?: string;
35
52
  }
36
53
  export interface InstallSkillResult {
37
54
  readonly copied: boolean;
38
55
  readonly markerAlreadyPresent: boolean;
39
56
  readonly skillTargetDir: string;
40
57
  readonly agentsFile: string;
58
+ /** True when an install-manifest was written this run. */
59
+ readonly manifestWritten: boolean;
60
+ /** True when the copy was SKIPPED because the installed skill is modified. */
61
+ readonly modifiedSkipped: boolean;
41
62
  }
42
63
  export declare function installSkill(options?: InstallSkillOptions): Promise<InstallSkillResult>;
43
64
  //# sourceMappingURL=install-skill.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"install-skill.d.ts","sourceRoot":"","sources":["../src/install-skill.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAiBH,eAAO,MAAM,WAAW,4CAA4C,CAAC;AAiBrE,MAAM,WAAW,mBAAmB;IAChC;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,qEAAqE;IACrE,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC;;;;;;OAMG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,qDAAqD;IACrD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CACtC;AAED,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;IACvC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC/B;AAwCD,wBAAsB,YAAY,CAC9B,OAAO,GAAE,mBAAwB,GAClC,OAAO,CAAC,kBAAkB,CAAC,CAmD7B"}
1
+ {"version":3,"file":"install-skill.d.ts","sourceRoot":"","sources":["../src/install-skill.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AA0BH,eAAO,MAAM,WAAW,4CAA4C,CAAC;AAiBrE,MAAM,WAAW,mBAAmB;IAChC;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,qEAAqE;IACrE,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC;;;;;;OAMG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,qDAAqD;IACrD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC;;;;OAIG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB;;;;OAIG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,mFAAmF;IACnF,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,kBAAkB;IAC/B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;IACvC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,0DAA0D;IAC1D,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,8EAA8E;IAC9E,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;CACrC;AAwCD,wBAAsB,YAAY,CAC9B,OAAO,GAAE,mBAAwB,GAClC,OAAO,CAAC,kBAAkB,CAAC,CAoF7B"}
@@ -5,8 +5,11 @@
5
5
  * agent-skill folder (typically `~/.claude/skills/`) and appends a marker
6
6
  * block to `~/AGENTS.md` so other AI clients pick it up automatically.
7
7
  *
8
- * Idempotent: re-running overwrites existing skill files and skips the
9
- * AGENTS.md append when the marker is already present.
8
+ * Idempotent: re-running overwrites an UNMODIFIED skill and skips the
9
+ * AGENTS.md append when the marker is already present. A locally-modified
10
+ * skill is left untouched unless `force` is set (see
11
+ * {@link InstallSkillOptions.force}); an install-manifest records the
12
+ * version + content hash at install time as the modified-detection baseline.
10
13
  *
11
14
  * Mirrors the pattern from `@wootsup/apimapper-mcp install-skill` so users on both
12
15
  * products get the same workflow.
@@ -17,6 +20,7 @@ import { appendFileSync, copyFileSync, existsSync, mkdirSync, readdirSync, readF
17
20
  import { homedir } from 'node:os';
18
21
  import { dirname, join, resolve } from 'node:path';
19
22
  import { fileURLToPath } from 'node:url';
23
+ import { computeSkillHash, detectModification, manifestPathFor, MANIFEST_SCHEMA_VERSION, readInstallManifest, writeInstallManifest, } from './skill-manifest.js';
20
24
  export const MARKER_LINE = '<!-- yt-builder-mcp:skill-installed -->';
21
25
  const MARKER_BLOCK = `
22
26
 
@@ -73,15 +77,35 @@ export async function installSkill(options = {}) {
73
77
  const pkgRoot = options.pkgRoot ?? defaultPkgRoot();
74
78
  const targetSkillsDir = options.targetSkillsDir ?? join(homedir(), '.claude', 'skills');
75
79
  const targetAgentsFile = options.targetAgentsFile ?? join(homedir(), 'AGENTS.md');
80
+ const force = options.force ?? false;
81
+ const bundledVersion = options.bundledVersion ?? '0.0.0';
82
+ const manifestPath = options.manifestPath ?? manifestPathFor(targetSkillsDir);
76
83
  const srcSkillDir = findSkillSource(pkgRoot);
77
84
  if (!existsSync(srcSkillDir)) {
78
85
  throw new Error(`Bundled skill not found at ${srcSkillDir}. ` +
79
86
  `Is the package installed correctly? (pkgRoot=${pkgRoot})`);
80
87
  }
88
+ const skillTargetDir = join(targetSkillsDir, 'yt-builder-mcp');
89
+ // ── Modified-Schutz (Spec §8) ─────────────────────────────────────────
90
+ // Vergleich gegen das MANIFEST (Hash zum Install-Zeitpunkt), nicht gegen
91
+ // die gebundelte Version. 'modified' + !force → NICHT überschreiben.
92
+ const existingManifest = readInstallManifest(manifestPath);
93
+ const modState = detectModification(skillTargetDir, existingManifest);
94
+ if (modState === 'modified' && !force) {
95
+ const markerAlreadyPresent = existsSync(targetAgentsFile)
96
+ && readFileSync(targetAgentsFile, 'utf-8').includes(MARKER_LINE);
97
+ return {
98
+ copied: false,
99
+ modifiedSkipped: true,
100
+ manifestWritten: false,
101
+ markerAlreadyPresent,
102
+ skillTargetDir,
103
+ agentsFile: targetAgentsFile,
104
+ };
105
+ }
81
106
  if (!existsSync(targetSkillsDir)) {
82
107
  mkdirSync(targetSkillsDir, { recursive: true });
83
108
  }
84
- const skillTargetDir = join(targetSkillsDir, 'yt-builder-mcp');
85
109
  copyDirRecursive(srcSkillDir, skillTargetDir);
86
110
  // 1.0.1 Wave-R: clean up the legacy directory created by pre-1.0.1
87
111
  // installs so the user doesn't end up with two side-by-side skill
@@ -108,11 +132,19 @@ export async function installSkill(options = {}) {
108
132
  // Create with a sensible top-line and the marker block (trimmed).
109
133
  writeFileSync(targetAgentsFile, MARKER_BLOCK.trimStart(), 'utf-8');
110
134
  }
135
+ // Install-Manifest schreiben: Hash des JETZT installierten Skills + Version.
136
+ writeInstallManifest(manifestPath, {
137
+ schemaVersion: MANIFEST_SCHEMA_VERSION,
138
+ skillVersion: bundledVersion,
139
+ hash: computeSkillHash(skillTargetDir),
140
+ });
111
141
  return {
112
142
  copied: true,
113
143
  markerAlreadyPresent,
114
144
  skillTargetDir,
115
145
  agentsFile: targetAgentsFile,
146
+ manifestWritten: true,
147
+ modifiedSkipped: false,
116
148
  };
117
149
  }
118
150
  //# sourceMappingURL=install-skill.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"install-skill.js","sourceRoot":"","sources":["../src/install-skill.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install-skill.js","sourceRoot":"","sources":["../src/install-skill.ts"],"names":[],"mappings":"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"}
@@ -146,6 +146,10 @@ export interface ParsedUninstallArgs {
146
146
  readonly all: boolean;
147
147
  /** `--yes` / `-y`: skip the final confirmation. */
148
148
  readonly yes: boolean;
149
+ /** `--keep-skill`: leave the installed skill untouched (removeSkill=false). */
150
+ readonly keepSkill: boolean;
151
+ /** `--force`: override the uninstall modified-protection. */
152
+ readonly force: boolean;
149
153
  /** `--help` / `-h` requested. */
150
154
  readonly helpRequested: boolean;
151
155
  /** Validation errors (unknown flags, stray values). Empty when usable. */
@@ -153,9 +157,9 @@ export interface ParsedUninstallArgs {
153
157
  }
154
158
  /**
155
159
  * Parse the `uninstall` / `remove` argv tail. Pure; does no I/O. Accepts
156
- * only boolean flags — `--all`, `--yes`/`-y`, `--help`/`-h`. Any value
157
- * (`--all=x`) or unknown flag is an error so typos don't silently change
158
- * the destructive behaviour.
160
+ * only boolean flags — `--all`, `--keep-skill`, `--force`, `--yes`/`-y`,
161
+ * `--help`/`-h`. Any value (`--all=x`) or unknown flag is an error so typos
162
+ * don't silently change the destructive behaviour.
159
163
  */
160
164
  export declare function parseUninstallArgs(argv: readonly string[]): ParsedUninstallArgs;
161
165
  export interface RunCliDeps {
@@ -1 +1 @@
1
- {"version":3,"file":"setup-cli.d.ts","sourceRoot":"","sources":["../src/setup-cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,EAAE,YAAY,IAAI,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAKzE,OAAO,KAAK,EAAiB,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAIH,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,kBAAkB,EAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAIH,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,aAAa,EACrB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAGH,KAAK,aAAa,EACrB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAIH,KAAK,cAAc,EACtB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAIH,KAAK,cAAc,EACtB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAKH,KAAK,YAAY,EACpB,MAAM,0BAA0B,CAAC;AAKlC,OAAO,EACH,mBAAmB,EACnB,UAAU,EACV,SAAS,EACT,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,WAAW,GACnB,MAAM,mBAAmB,CAAC;AAoJ3B,MAAM,WAAW,eAAe;IAC5B,gEAAgE;IAChE,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,0FAA0F;IAC1F,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,4CAA4C;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,2CAA2C;IAC3C,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,uEAAuE;IACvE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC;IAC3B;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAChC;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC1B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,GAAG,GAAE,MAAM,CAAC,UAAe,GAC5B,eAAe,CAgKjB;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CACnC,MAAM,EAAE,eAAe,EACvB,IAAI,GAAE,UAAgC,GACvC,UAAU,CAmBZ;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAC3B,MAAM,EAAE,eAAe,EACvB,IAAI,GAAE,UAAgC,GACvC,UAAU,CAkCZ;AAID;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;IACpD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,iBAAiB,CAuH3E;AA8ED,0EAA0E;AAC1E,MAAM,WAAW,mBAAmB;IAChC,mDAAmD;IACnD,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,mDAAmD;IACnD,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC;IACtB,iCAAiC;IACjC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,0EAA0E;IAC1E,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,mBAAmB,CAkC/E;AA4ED,MAAM,WAAW,UAAU;IACvB;;;;OAIG;IACH,SAAS,EAAE,CAAC,IAAI,CAAC,EAAE,UAAU,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAClD;;;;;;OAMG;IACH,qBAAqB,CAAC,EAAE,UAAU,CAAC;IACnC,YAAY,EAAE,OAAO,mBAAmB,CAAC;IACzC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,8DAA8D;IAC9D,gBAAgB,CAAC,EAAE,MAAM,MAAM,CAAC;IAChC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAChD;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,CAChB,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,MAAM,KACX,OAAO,CAAC,aAAa,CAAC,CAAC;IAC5B;;;;OAIG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;;;OAIG;IACH,eAAe,CAAC,EAAE,CACd,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,KAChC,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAChC;;;;OAIG;IACH,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE;QACtB,QAAQ,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAC;QAC9C,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;QACjC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;KACvC,KAAK,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAAC;CAC5C;AAED,wBAAsB,MAAM,CACxB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,IAAI,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAC3B,OAAO,CAAC,MAAM,CAAC,CAkejB"}
1
+ {"version":3,"file":"setup-cli.d.ts","sourceRoot":"","sources":["../src/setup-cli.ts"],"names":[],"mappings":"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"}
package/dist/setup-cli.js CHANGED
@@ -612,20 +612,24 @@ const UNINSTALL_HELP = `Usage: yt-builder-mcp uninstall [--all] [--yes]\n` +
612
612
  `Flags:\n` +
613
613
  ` --all Non-interactive: remove from EVERY detected client and\n` +
614
614
  ` remove the skill, with no prompts.\n` +
615
- ` --yes, -y Skip the final confirmation prompt (interactive mode).\n\n` +
615
+ ` --yes, -y Skip the final confirmation prompt (interactive mode).\n` +
616
+ ` --keep-skill Leave the installed skill untouched (remove only client entries).\n` +
617
+ ` --force Remove the skill even if it was locally modified.\n\n` +
616
618
  `Examples:\n` +
617
619
  ` yt-builder-mcp uninstall # interactive checklist\n` +
618
620
  ` yt-builder-mcp uninstall --all # remove everything, no prompts\n` +
619
621
  ` yt-builder-mcp remove --yes # interactive, no final confirm\n`;
620
622
  /**
621
623
  * Parse the `uninstall` / `remove` argv tail. Pure; does no I/O. Accepts
622
- * only boolean flags — `--all`, `--yes`/`-y`, `--help`/`-h`. Any value
623
- * (`--all=x`) or unknown flag is an error so typos don't silently change
624
- * the destructive behaviour.
624
+ * only boolean flags — `--all`, `--keep-skill`, `--force`, `--yes`/`-y`,
625
+ * `--help`/`-h`. Any value (`--all=x`) or unknown flag is an error so typos
626
+ * don't silently change the destructive behaviour.
625
627
  */
626
628
  export function parseUninstallArgs(argv) {
627
629
  let all = false;
628
630
  let yes = false;
631
+ let keepSkill = false;
632
+ let force = false;
629
633
  let helpRequested = false;
630
634
  const errors = [];
631
635
  for (const raw of argv) {
@@ -646,6 +650,18 @@ export function parseUninstallArgs(argv) {
646
650
  errors.push(`Flag ${flag} does not take a value.`);
647
651
  break;
648
652
  }
653
+ case '--keep-skill': {
654
+ keepSkill = true;
655
+ if (hasInline)
656
+ errors.push('Flag --keep-skill does not take a value.');
657
+ break;
658
+ }
659
+ case '--force': {
660
+ force = true;
661
+ if (hasInline)
662
+ errors.push('Flag --force does not take a value.');
663
+ break;
664
+ }
649
665
  case '--help':
650
666
  case '-h': {
651
667
  helpRequested = true;
@@ -656,7 +672,7 @@ export function parseUninstallArgs(argv) {
656
672
  }
657
673
  }
658
674
  }
659
- return { all, yes, helpRequested, errors };
675
+ return { all, yes, keepSkill, force, helpRequested, errors };
660
676
  }
661
677
  function parseIdArgs(argv, allowYes) {
662
678
  let siteId = '';
@@ -760,6 +776,30 @@ export async function runCli(argv, deps) {
760
776
  await addSiteFromWizard(args, path);
761
777
  };
762
778
  };
779
+ // D1: after a SUCCESSFUL wizard (exit 0), install the skill too. A
780
+ // skill-install failure is NON-FATAL — warn, keep the wizard exit code.
781
+ const runSetupThenInstall = async (wizardDeps) => {
782
+ const code = await wizard(wizardDeps);
783
+ if (code === 0) {
784
+ try {
785
+ const result = await install({ bundledVersion: SERVER_VERSION });
786
+ if (result.modifiedSkipped) {
787
+ out(`yt-builder-mcp: skill left untouched at ${result.skillTargetDir} (locally modified; run 'yt-builder-mcp install-skill --force' to overwrite).`);
788
+ }
789
+ else if (result.markerAlreadyPresent) {
790
+ out(`yt-builder-mcp: skill installed/refreshed at ${result.skillTargetDir}.`);
791
+ }
792
+ else {
793
+ out(`yt-builder-mcp: skill installed at ${result.skillTargetDir}; ${result.agentsFile} updated.`);
794
+ }
795
+ }
796
+ catch (e) {
797
+ const msg = e instanceof Error ? e.message : String(e);
798
+ err(`yt-builder-mcp: warning: skill install skipped (${msg}). Run 'yt-builder-mcp install-skill' manually.`);
799
+ }
800
+ }
801
+ return code;
802
+ };
763
803
  if (subcommand === undefined || subcommand === 'setup') {
764
804
  const setupArgs = argv[0] === 'setup' ? argv.slice(1) : argv;
765
805
  const parsed = parseSetupArgs(setupArgs, process.env);
@@ -825,7 +865,7 @@ export async function runCli(argv, deps) {
825
865
  err(HELP_TEXT);
826
866
  return 2;
827
867
  }
828
- return wizard(withPersist(buildPickupDeps(parsed)));
868
+ return runSetupThenInstall(withPersist(buildPickupDeps(parsed)));
829
869
  }
830
870
  if (parsed.nonInteractive) {
831
871
  if (parsed.errors.length > 0) {
@@ -834,7 +874,7 @@ export async function runCli(argv, deps) {
834
874
  err(HELP_TEXT);
835
875
  return 2;
836
876
  }
837
- return wizard(withPersist(buildNonInteractiveDeps(parsed)));
877
+ return runSetupThenInstall(withPersist(buildNonInteractiveDeps(parsed)));
838
878
  }
839
879
  if (parsed.errors.length > 0) {
840
880
  for (const line of parsed.errors)
@@ -842,7 +882,7 @@ export async function runCli(argv, deps) {
842
882
  err(HELP_TEXT);
843
883
  return 1;
844
884
  }
845
- return wizard(withCa(withPin(withPersist(interactiveBase))));
885
+ return runSetupThenInstall(withCa(withPin(withPersist(interactiveBase))));
846
886
  }
847
887
  switch (subcommand) {
848
888
  case 'doctor': {
@@ -851,9 +891,29 @@ export async function runCli(argv, deps) {
851
891
  }
852
892
  case 'install-skill':
853
893
  case 'install': {
894
+ // Only `--force` is accepted here (overwrite a locally-modified
895
+ // skill). Reject anything else so a typo'd flag isn't silently
896
+ // ignored — and so the `install-skill --force` remediation that
897
+ // the setup-path advertises actually works.
898
+ const tail = argv.slice(1);
899
+ if (tail.includes('--help') || tail.includes('-h')) {
900
+ out(HELP_TEXT);
901
+ return 0;
902
+ }
903
+ const unknown = tail.filter((a) => a !== '--force');
904
+ if (unknown.length > 0) {
905
+ for (const u of unknown) {
906
+ err(`yt-builder-mcp: unknown install-skill flag: ${u}`);
907
+ }
908
+ return 2;
909
+ }
910
+ const force = tail.includes('--force');
854
911
  try {
855
- const result = await install();
856
- if (result.markerAlreadyPresent) {
912
+ const result = await install({ bundledVersion: SERVER_VERSION, force });
913
+ if (result.modifiedSkipped) {
914
+ out(`yt-builder-mcp: skill left untouched at ${result.skillTargetDir} (locally modified; re-run with --force to overwrite).`);
915
+ }
916
+ else if (result.markerAlreadyPresent) {
857
917
  out(`yt-builder-mcp: skill refreshed at ${result.skillTargetDir} (marker already in AGENTS.md).`);
858
918
  }
859
919
  else {
@@ -891,10 +951,12 @@ export async function runCli(argv, deps) {
891
951
  let selection;
892
952
  if (parsed.all) {
893
953
  // Non-interactive: remove from every detected client +
894
- // the skill, no prompts.
954
+ // the skill, no prompts. `--keep-skill` opts the skill out;
955
+ // `--force` overrides the modified-protection.
895
956
  selection = {
896
957
  clientIds: detected.map((d) => d.id),
897
- removeSkill: skillInstalled,
958
+ removeSkill: parsed.keepSkill ? false : skillInstalled,
959
+ force: parsed.force,
898
960
  };
899
961
  }
900
962
  else {
@@ -907,7 +969,11 @@ export async function runCli(argv, deps) {
907
969
  // User cancelled — clean exit (SIGINT convention).
908
970
  return 130;
909
971
  }
910
- selection = picked;
972
+ selection = {
973
+ clientIds: picked.clientIds,
974
+ removeSkill: parsed.keepSkill ? false : picked.removeSkill,
975
+ force: parsed.force,
976
+ };
911
977
  }
912
978
  if (selection.clientIds.length === 0 && !selection.removeSkill) {
913
979
  out('Nothing to uninstall — no targets selected.');
@@ -941,6 +1007,9 @@ export async function runCli(argv, deps) {
941
1007
  bits.push(`AGENTS.md marker (${s.agentsFile})`);
942
1008
  out(` ✓ Skill: removed ${bits.join(' + ')}`);
943
1009
  }
1010
+ else if (s.skillModifiedKept) {
1011
+ out(' • Skill: kept — locally modified (use --force to remove).');
1012
+ }
944
1013
  else {
945
1014
  out(' • Skill: nothing to remove');
946
1015
  }