@cliangdev/conductor 0.24.1 → 0.26.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 (41) hide show
  1. package/assets/claude/commands/conductor/creative.md +90 -0
  2. package/assets/claude/skills/conductor-creative/SKILL.md +129 -51
  3. package/assets/claude/skills/conductor-creative/references/brand-kit-setup.md +41 -0
  4. package/assets/cli-manifest.json +38 -3
  5. package/dist/commands/init.d.ts.map +1 -1
  6. package/dist/commands/init.js +2 -1
  7. package/dist/commands/init.js.map +1 -1
  8. package/dist/commands/start.d.ts.map +1 -1
  9. package/dist/commands/start.js +2 -0
  10. package/dist/commands/start.js.map +1 -1
  11. package/dist/creative/assertions.js +22 -11
  12. package/dist/creative/frame.js +3 -3
  13. package/dist/creative/job/file-transport.mjs +211 -0
  14. package/dist/creative/job/render.mjs +84 -2
  15. package/dist/creative/job/server.mjs +70 -13
  16. package/dist/lib/creative-render.d.ts +62 -0
  17. package/dist/lib/creative-render.d.ts.map +1 -1
  18. package/dist/lib/creative-render.js +51 -0
  19. package/dist/lib/creative-render.js.map +1 -1
  20. package/dist/lib/plugin-assets.d.ts +48 -1
  21. package/dist/lib/plugin-assets.d.ts.map +1 -1
  22. package/dist/lib/plugin-assets.js +272 -22
  23. package/dist/lib/plugin-assets.js.map +1 -1
  24. package/dist/mcp/api.d.ts +18 -1
  25. package/dist/mcp/api.d.ts.map +1 -1
  26. package/dist/mcp/api.js +20 -2
  27. package/dist/mcp/api.js.map +1 -1
  28. package/dist/mcp/index.d.ts +2414 -471
  29. package/dist/mcp/index.d.ts.map +1 -1
  30. package/dist/mcp/index.js +246 -77
  31. package/dist/mcp/index.js.map +1 -1
  32. package/dist/mcp/tools/creative-drafts.d.ts +134 -0
  33. package/dist/mcp/tools/creative-drafts.d.ts.map +1 -0
  34. package/dist/mcp/tools/creative-drafts.js +405 -0
  35. package/dist/mcp/tools/creative-drafts.js.map +1 -0
  36. package/dist/mcp/tools/creatives.d.ts +60 -0
  37. package/dist/mcp/tools/creatives.d.ts.map +1 -1
  38. package/dist/mcp/tools/creatives.js +219 -23
  39. package/dist/mcp/tools/creatives.js.map +1 -1
  40. package/package.json +1 -1
  41. package/scripts/build-creative.mjs +1 -0
@@ -8,6 +8,7 @@
8
8
  * launched or what browser it gets — that's `job/transport.mjs`'s and this file's job respectively.
9
9
  */
10
10
  import { existsSync } from 'node:fs';
11
+ import { readFile } from 'node:fs/promises';
11
12
  import { dirname, join } from 'node:path';
12
13
  import { fileURLToPath } from 'node:url';
13
14
  import { apiGet, apiPost, ApiError } from '../mcp/api.js';
@@ -110,4 +111,54 @@ export async function renderCreative(params, config, log = () => { }) {
110
111
  };
111
112
  }
112
113
  }
114
+ /**
115
+ * Renders a DRAFT spec (the backend's `draft-spec` response — nothing about it is saved) with the same
116
+ * render core a saved Creative uses, but through the file transport: the local files behind
117
+ * `local:<key>` are served to the headless browser from this machine, and the frames plus a
118
+ * `manifest.json` land in `outDir`. A `previewOnly` spec also gets `manifest.checks` / `manifest.passed`:
119
+ * the full render's per-placement assertions, run without keeping their frames. Never talks to the Conductor API. A MOTION spec that is not
120
+ * `previewOnly` needs ffmpeg, resolved the same way {@link renderCreative} resolves it.
121
+ */
122
+ export async function renderDraft(params, log = () => { }) {
123
+ const { spec, localFiles, outDir } = params;
124
+ let ffmpegPath;
125
+ if (spec.creative?.kind === 'MOTION' && !spec.previewOnly) {
126
+ try {
127
+ ffmpegPath = await resolveFfmpegPath();
128
+ }
129
+ catch (err) {
130
+ return { ok: false, error: err instanceof Error ? err.message : String(err) };
131
+ }
132
+ }
133
+ const { run } = await loadRenderCore();
134
+ const transportPath = join(jobDir(), 'file-transport.mjs');
135
+ if (!existsSync(transportPath)) {
136
+ throw new Error(`Creative draft transport not found at ${transportPath}. This is a packaging bug in @cliangdev/conductor — reinstall the CLI, or in this repo run \`npm run build\`.`);
137
+ }
138
+ const { createFileTransport } = (await import(transportPath));
139
+ const transport = createFileTransport({ spec, localFiles, outDir });
140
+ const browserFactory = await findBrowserFactory(log);
141
+ let ok;
142
+ try {
143
+ // A preview renders only the contact sheet, which never runs the assertions a full render fails on, so
144
+ // ask the core to run them per placement too (and drop the frames) — otherwise an approved preview can
145
+ // still fail its real render.
146
+ ok = await run({ transport, browserFactory, log, ffmpegPath, fps: MOTION_FPS, checkPlacements: !!spec.previewOnly });
147
+ }
148
+ finally {
149
+ await transport.close();
150
+ }
151
+ let manifest;
152
+ try {
153
+ manifest = JSON.parse(await readFile(join(outDir, 'manifest.json'), 'utf8'));
154
+ }
155
+ catch {
156
+ manifest = undefined;
157
+ }
158
+ if (!ok)
159
+ return { ok: false, error: transport.getError() ?? manifest?.error ?? 'The draft render failed.', manifest };
160
+ if (!manifest)
161
+ return { ok: false, error: 'The draft render finished but wrote no manifest.json.' };
162
+ return { ok: true, manifest };
163
+ }
113
164
  //# sourceMappingURL=creative-render.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"creative-render.js","sourceRoot":"","sources":["../../src/lib/creative-render.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"creative-render.js","sourceRoot":"","sources":["../../src/lib/creative-render.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAExC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAEpD;6DAC6D;AAC7D,MAAM,UAAU,GAAG,EAAE,CAAA;AAsErB;gFACgF;AAChF,SAAS,MAAM;IACb,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IACpD,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,CAAA;AAC5C,CAAC;AAED,KAAK,UAAU,cAAc;IAC3B,MAAM,GAAG,GAAG,MAAM,EAAE,CAAA;IACpB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAA;IAC1C,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAA;IAChD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CACb,wCAAwC,GAAG,oDAAoD;YAC7F,qFAAqF;YACrF,yDAAyD,CAC5D,CAAA;IACH,CAAC;IACD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAClD,MAAM,CAAC,UAAU,CAAwB;QACzC,MAAM,CAAC,aAAa,CAA6B;KAClD,CAAC,CAAA;IACF,OAAO,EAAE,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,kBAAkB,EAAE,YAAY,CAAC,kBAAkB,EAAE,CAAA;AACpF,CAAC;AAED;;;;;GAKG;AACH,KAAK,UAAU,YAAY,CAAC,MAA4B,EAAE,MAAc;IACtE,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAC1B,oBAAoB,MAAM,CAAC,SAAS,wBAAwB,MAAM,CAAC,UAAU,UAAU,EACvF,EAAE,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,EACrG,MAAM,CACP,CAAA;QACD,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,KAAK,KAAK,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,CAAA;IACjJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,QAAQ,EAAE,CAAC;YAC5B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAA;QACtD,CAAC;QACD,MAAM,GAAG,CAAA;IACX,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAA4B,EAC5B,MAAc,EACd,MAAoC,GAAG,EAAE,GAAE,CAAC;IAE5C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAC3B,oBAAoB,MAAM,CAAC,SAAS,wBAAwB,MAAM,CAAC,UAAU,EAAE,EAC/E,MAAM,CACP,CAAA;IACD,IAAI,QAAQ,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC7B,OAAO,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACrC,CAAC;IAED,IAAI,UAA8B,CAAA;IAClC,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACtD,IAAI,CAAC;YACH,UAAU,GAAG,MAAM,iBAAiB,EAAE,CAAA;QACxC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAA;QAC3F,CAAC;IACH,CAAC;IAED,MAAM,EAAE,GAAG,EAAE,kBAAkB,EAAE,GAAG,MAAM,cAAc,EAAE,CAAA;IAC1D,MAAM,SAAS,GAAG,kBAAkB,CAAC;QACnC,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,WAAW;QACjC,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,aAAa,EAAE,MAAM,CAAC,aAAa;KACpC,CAAC,CAAA;IACF,MAAM,cAAc,GAAG,MAAM,kBAAkB,CAAC,GAAG,CAAC,CAAA;IAEpD,sFAAsF;IACtF,oFAAoF;IACpF,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,CAAA;IACrF,MAAM,QAAQ,GAAG,SAAS,CAAC,WAAW,EAAE,CAAA;IACxC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,8FAA8F,EAAE,MAAM,EAAE,EAAE,EAAE,CAAA;IACzI,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CACzB,oBAAoB,MAAM,CAAC,SAAS,wBAAwB,MAAM,CAAC,UAAU,YAAY,QAAQ,EAAE,EACnG,MAAM,CACP,CAAA;QACD,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE,EAAE,CAAA;IACxG,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,EAAE;YACF,QAAQ;YACR,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,yCAAyC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;YACjJ,MAAM,EAAE,EAAE;SACX,CAAA;IACH,CAAC;AACH,CAAC;AAuDD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,MAA6H,EAC7H,MAAoC,GAAG,EAAE,GAAE,CAAC;IAE5C,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;IAE3C,IAAI,UAA8B,CAAA;IAClC,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC1D,IAAI,CAAC;YACH,UAAU,GAAG,MAAM,iBAAiB,EAAE,CAAA;QACxC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAA;QAC/E,CAAC;IACH,CAAC;IAED,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,cAAc,EAAE,CAAA;IACtC,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,oBAAoB,CAAC,CAAA;IAC1D,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,yCAAyC,aAAa,+GAA+G,CACtK,CAAA;IACH,CAAC;IACD,MAAM,EAAE,mBAAmB,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,aAAa,CAAC,CAAwB,CAAA;IACpF,MAAM,SAAS,GAAG,mBAAmB,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAA;IACnE,MAAM,cAAc,GAAG,MAAM,kBAAkB,CAAC,GAAG,CAAC,CAAA;IAEpD,IAAI,EAAW,CAAA;IACf,IAAI,CAAC;QACH,uGAAuG;QACvG,uGAAuG;QACvG,8BAA8B;QAC9B,EAAE,GAAG,MAAM,GAAG,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;IACtH,CAAC;YAAS,CAAC;QACT,MAAM,SAAS,CAAC,KAAK,EAAE,CAAA;IACzB,CAAC;IAED,IAAI,QAAmC,CAAA;IACvC,IAAI,CAAC;QACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,CAAC,CAAkB,CAAA;IAC/F,CAAC;IAAC,MAAM,CAAC;QACP,QAAQ,GAAG,SAAS,CAAA;IACtB,CAAC;IACD,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,QAAQ,EAAE,IAAI,QAAQ,EAAE,KAAK,IAAI,0BAA0B,EAAE,QAAQ,EAAE,CAAA;IACrH,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,uDAAuD,EAAE,CAAA;IACnG,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;AAC/B,CAAC"}
@@ -1,7 +1,12 @@
1
1
  export declare function getAssetSrcDir(): string;
2
+ /** The running @cliangdev/conductor package's own version — same resolution path as
3
+ * getAssetSrcDir (dist/lib/plugin-assets.js -> ../../package.json). */
4
+ export declare function getPackageVersion(): string;
2
5
  export type InstallStatus = 'installed' | 'updated' | 'current';
3
6
  /**
4
- * Install or update conductor Claude plugin assets into targetDir.
7
+ * Install or update conductor Claude plugin assets into targetDir. Used only by `conductor init` —
8
+ * this is the one place allowed to touch settings.json/.mcp.json; a background refresh
9
+ * ({@link refreshInstalledPluginAssets}) never calls this.
5
10
  *
6
11
  * @param targetDir Destination .claude/ directory (e.g. ~/.claude/ or projectRoot/.claude/)
7
12
  * @param assetSrcDir Source assets/claude/ directory from the CLI package
@@ -16,4 +21,46 @@ export declare function getPluginInstallStatus(assetSrcDir: string, globalClaude
16
21
  location: 'global' | 'local' | 'none';
17
22
  outdated: boolean;
18
23
  };
24
+ /** Records which package version last (re)installed the plugin assets into targetDir, and — from this
25
+ * version on — a sha256 per installed file, so a later refresh can tell whether the user edited a file
26
+ * (hash mismatch, leave it alone) or it's still exactly what was shipped (safe to overwrite). */
27
+ export declare const PLUGIN_VERSION_MARKER = ".conductor-plugin-version";
28
+ export interface PluginVersionMarker {
29
+ version: string;
30
+ /** relPath (one of PLUGIN_FILES) -> sha256 hex of the content this package wrote there. Present
31
+ * only for the current JSON marker format; absent for a legacy plain-version-string marker (or when
32
+ * no marker exists at all), which carries no hash baseline to check edits against. */
33
+ files?: Record<string, string>;
34
+ }
35
+ /** The sha256 of every currently-installed PLUGIN_FILES entry under targetDir, for stamping into the
36
+ * marker right after a write (install, refresh, or migration) so the next refresh has a baseline. */
37
+ export declare function computeInstalledFileHashes(targetDir: string): Record<string, string>;
38
+ export declare function writePluginVersionMarker(targetDir: string, version: string, files?: Record<string, string>): void;
39
+ /** Reads the marker, transparently handling the legacy format (a bare version string, no JSON) that
40
+ * predates per-file hashes — returned with `files` left undefined so callers can tell the two apart. */
41
+ export declare function readPluginVersionMarker(targetDir: string): PluginVersionMarker | undefined;
42
+ export interface RefreshOptions {
43
+ /** Called once per location actually refreshed, and once if the whole thing fails; defaults to a
44
+ * no-op so callers that don't care about logging don't have to pass anything. */
45
+ log?: (message: string) => void;
46
+ assetSrcDir?: string;
47
+ currentVersion?: string;
48
+ /** Override for tests; production callers omit this and get `~/.claude`. */
49
+ globalClaudeDir?: string;
50
+ /** Override for tests; production callers omit this and let it resolve from `cwd`. */
51
+ localClaudeDir?: string;
52
+ cwd?: string;
53
+ }
54
+ /**
55
+ * Refreshes every existing Claude plugin install — the global one (`~/.claude`) and the project-local
56
+ * one for whichever project `cwd` belongs to — in place, but only the ones that actually exist and
57
+ * only when the running package version is newer than what each install's marker records (equal or
58
+ * older is a no-op, per install). Never touches settings.json or .mcp.json — `conductor init` alone
59
+ * manages those. Writes are atomic (temp file + rename). Swallows every error so a broken refresh can
60
+ * never block the MCP server or the daemon from starting; logs through `log`.
61
+ *
62
+ * Single implementation shared by the MCP server (`mcp/index.ts`) and `conductor start`
63
+ * (`commands/start.ts`) startup — call this instead of duplicating the check.
64
+ */
65
+ export declare function refreshInstalledPluginAssets(opts?: RefreshOptions): void;
19
66
  //# sourceMappingURL=plugin-assets.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-assets.d.ts","sourceRoot":"","sources":["../../src/lib/plugin-assets.ts"],"names":[],"mappings":"AA4CA,wBAAgB,cAAc,IAAI,MAAM,CAKvC;AAmCD,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,CAAA;AAE/D;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,GACnB,aAAa,CA4Cf;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,EACvB,cAAc,EAAE,MAAM,GACrB;IAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CA0B9D"}
1
+ {"version":3,"file":"plugin-assets.d.ts","sourceRoot":"","sources":["../../src/lib/plugin-assets.ts"],"names":[],"mappings":"AAuDA,wBAAgB,cAAc,IAAI,MAAM,CAKvC;AAED;uEACuE;AACvE,wBAAgB,iBAAiB,IAAI,MAAM,CAI1C;AA2CD,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,SAAS,GAAG,SAAS,CAAA;AA6C/D;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,GACnB,aAAa,CASf;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,MAAM,EACvB,cAAc,EAAE,MAAM,GACrB;IAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CA0B9D;AAED;;iGAEiG;AACjG,eAAO,MAAM,qBAAqB,8BAA8B,CAAA;AAEhE,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAA;IACf;;0FAEsF;IACtF,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC/B;AAMD;qGACqG;AACrG,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQpF;AAED,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAGjH;AAED;wGACwG;AACxG,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS,CAmB1F;AAyID,MAAM,WAAW,cAAc;IAC7B;qFACiF;IACjF,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,4EAA4E;IAC5E,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,sFAAsF;IACtF,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,GAAE,cAAmB,GAAG,IAAI,CAyB5E"}
@@ -1,31 +1,57 @@
1
1
  import * as fs from 'fs';
2
2
  import * as path from 'path';
3
+ import * as os from 'os';
4
+ import { execSync } from 'child_process';
5
+ import { createHash } from 'crypto';
3
6
  import { fileURLToPath } from 'url';
7
+ import { createRequire } from 'module';
8
+ import { readConfig as readCliConfig } from './config.js';
9
+ import { resolveProject } from '../mcp/config.js';
4
10
  const PLUGIN_FILES = [
5
11
  'commands/conductor/prd.md',
6
12
  'commands/conductor/implement.md',
7
13
  'commands/conductor/fix.md',
8
14
  'commands/conductor/workflow.md',
15
+ 'commands/conductor/creative.md',
9
16
  'agents/conductor-researcher.md',
10
17
  'skills/conductor-ux-ui-design/SKILL.md',
11
18
  'skills/conductor-ux-ui-design/references/design-tokens.md',
12
19
  'skills/conductor-coder/SKILL.md',
13
20
  'skills/conductor-publisher/SKILL.md',
14
21
  'skills/conductor-creative/SKILL.md',
22
+ 'skills/conductor-creative/references/brand-kit-setup.md',
15
23
  ];
16
- // Paths removed in previous versions — deleted on `conductor init` to clean up stale installs.
24
+ // Paths removed in previous versions — deleted on `conductor init` (and a refresh) to clean up stale installs.
17
25
  const LEGACY_PATHS = [
18
26
  'agents/researcher.md',
19
27
  'skills/ux-ui-design/SKILL.md',
20
28
  'skills/ux-ui-design/references/design-tokens.md',
21
29
  ];
22
30
  const CONDUCTOR_PERMISSIONS = ['mcp__conductor__*'];
31
+ /** Anchor file used to decide whether a `.claude/` dir has the plugin installed at all. */
32
+ const PLUGIN_ANCHOR = path.join('commands', 'conductor', 'prd.md');
23
33
  export function getAssetSrcDir() {
24
34
  const __filename = fileURLToPath(import.meta.url);
25
35
  const __dirname = path.dirname(__filename);
26
36
  // Compiled to dist/lib/plugin-assets.js; assets/claude/ is at ../../assets/claude
27
37
  return path.join(__dirname, '..', '..', 'assets', 'claude');
28
38
  }
39
+ /** The running @cliangdev/conductor package's own version — same resolution path as
40
+ * getAssetSrcDir (dist/lib/plugin-assets.js -> ../../package.json). */
41
+ export function getPackageVersion() {
42
+ const require = createRequire(import.meta.url);
43
+ const pkg = require('../../package.json');
44
+ return pkg.version;
45
+ }
46
+ /** Writes `content` to `destPath` via a temp-file-then-rename, so a reader (or a concurrently
47
+ * starting daemon/MCP server) never observes a partially-written file. */
48
+ function atomicWriteFileSync(destPath, content) {
49
+ const dir = path.dirname(destPath);
50
+ fs.mkdirSync(dir, { recursive: true });
51
+ const tmpPath = path.join(dir, `.${path.basename(destPath)}.tmp-${process.pid}-${Date.now()}-${Math.random().toString(36).slice(2)}`);
52
+ fs.writeFileSync(tmpPath, content, 'utf8');
53
+ fs.renameSync(tmpPath, destPath);
54
+ }
29
55
  function mergeSettingsJson(settingsPath) {
30
56
  let settings = {};
31
57
  try {
@@ -38,8 +64,7 @@ function mergeSettingsJson(settingsPath) {
38
64
  ...(settings.permissions ?? {}),
39
65
  allow: newAllow,
40
66
  };
41
- fs.mkdirSync(path.dirname(settingsPath), { recursive: true });
42
- fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf8');
67
+ atomicWriteFileSync(settingsPath, JSON.stringify(settings, null, 2) + '\n');
43
68
  }
44
69
  function mergeMcpJson(mcpPath) {
45
70
  let mcp = {};
@@ -51,17 +76,14 @@ function mergeMcpJson(mcpPath) {
51
76
  ...(mcp.mcpServers ?? {}),
52
77
  conductor: { command: 'conductor', args: ['mcp'] },
53
78
  };
54
- fs.mkdirSync(path.dirname(mcpPath), { recursive: true });
55
- fs.writeFileSync(mcpPath, JSON.stringify(mcp, null, 2) + '\n', 'utf8');
79
+ atomicWriteFileSync(mcpPath, JSON.stringify(mcp, null, 2) + '\n');
56
80
  }
57
- /**
58
- * Install or update conductor Claude plugin assets into targetDir.
59
- *
60
- * @param targetDir Destination .claude/ directory (e.g. ~/.claude/ or projectRoot/.claude/)
61
- * @param assetSrcDir Source assets/claude/ directory from the CLI package
62
- * @param mcpJsonPath Optional path to .mcp.json to merge; omit if caller handles it separately
63
- */
64
- export function installPluginAssets(targetDir, assetSrcDir, mcpJsonPath) {
81
+ /** Writes every PLUGIN_FILES entry into targetDir (unconditionally overwriting anything already
82
+ * there) and removes LEGACY_PATHS — the file-level half of installing/refreshing the plugin, with no
83
+ * opinion on settings.json or .mcp.json. Shared by {@link installPluginAssets} (which also merges
84
+ * those) and the legacy-marker migration path in {@link refreshInstalledPluginAssets} (which
85
+ * deliberately does not). */
86
+ function writePluginFiles(targetDir, assetSrcDir) {
65
87
  let anyNew = false;
66
88
  let anyUpdated = false;
67
89
  for (const file of PLUGIN_FILES) {
@@ -81,31 +103,42 @@ export function installPluginAssets(targetDir, assetSrcDir, mcpJsonPath) {
81
103
  catch { /* doesn't exist yet */ }
82
104
  if (destContent === null) {
83
105
  anyNew = true;
84
- fs.mkdirSync(path.dirname(destPath), { recursive: true });
85
- fs.writeFileSync(destPath, srcContent, 'utf8');
106
+ atomicWriteFileSync(destPath, srcContent);
86
107
  }
87
108
  else if (destContent !== srcContent) {
88
109
  anyUpdated = true;
89
- fs.writeFileSync(destPath, srcContent, 'utf8');
110
+ atomicWriteFileSync(destPath, srcContent);
90
111
  }
91
112
  }
92
113
  for (const legacy of LEGACY_PATHS) {
93
- const legacyPath = path.join(targetDir, legacy);
94
114
  try {
95
- fs.rmSync(legacyPath);
115
+ fs.rmSync(path.join(targetDir, legacy));
96
116
  }
97
117
  catch { /* already gone */ }
98
118
  }
99
- mergeSettingsJson(path.join(targetDir, 'settings.json'));
100
- if (mcpJsonPath) {
101
- mergeMcpJson(mcpJsonPath);
102
- }
103
119
  if (anyNew)
104
120
  return 'installed';
105
121
  if (anyUpdated)
106
122
  return 'updated';
107
123
  return 'current';
108
124
  }
125
+ /**
126
+ * Install or update conductor Claude plugin assets into targetDir. Used only by `conductor init` —
127
+ * this is the one place allowed to touch settings.json/.mcp.json; a background refresh
128
+ * ({@link refreshInstalledPluginAssets}) never calls this.
129
+ *
130
+ * @param targetDir Destination .claude/ directory (e.g. ~/.claude/ or projectRoot/.claude/)
131
+ * @param assetSrcDir Source assets/claude/ directory from the CLI package
132
+ * @param mcpJsonPath Optional path to .mcp.json to merge; omit if caller handles it separately
133
+ */
134
+ export function installPluginAssets(targetDir, assetSrcDir, mcpJsonPath) {
135
+ const status = writePluginFiles(targetDir, assetSrcDir);
136
+ mergeSettingsJson(path.join(targetDir, 'settings.json'));
137
+ if (mcpJsonPath) {
138
+ mergeMcpJson(mcpJsonPath);
139
+ }
140
+ return status;
141
+ }
109
142
  /**
110
143
  * Return the plugin install status without writing any files.
111
144
  * Used by `conductor doctor`.
@@ -135,4 +168,221 @@ export function getPluginInstallStatus(assetSrcDir, globalClaudeDir, localClaude
135
168
  }
136
169
  return { location, outdated };
137
170
  }
171
+ /** Records which package version last (re)installed the plugin assets into targetDir, and — from this
172
+ * version on — a sha256 per installed file, so a later refresh can tell whether the user edited a file
173
+ * (hash mismatch, leave it alone) or it's still exactly what was shipped (safe to overwrite). */
174
+ export const PLUGIN_VERSION_MARKER = '.conductor-plugin-version';
175
+ function sha256Hex(content) {
176
+ return createHash('sha256').update(content, 'utf8').digest('hex');
177
+ }
178
+ /** The sha256 of every currently-installed PLUGIN_FILES entry under targetDir, for stamping into the
179
+ * marker right after a write (install, refresh, or migration) so the next refresh has a baseline. */
180
+ export function computeInstalledFileHashes(targetDir) {
181
+ const hashes = {};
182
+ for (const file of PLUGIN_FILES) {
183
+ try {
184
+ hashes[file] = sha256Hex(fs.readFileSync(path.join(targetDir, file), 'utf8'));
185
+ }
186
+ catch { /* not installed */ }
187
+ }
188
+ return hashes;
189
+ }
190
+ export function writePluginVersionMarker(targetDir, version, files) {
191
+ const marker = files ? { version, files } : { version };
192
+ atomicWriteFileSync(path.join(targetDir, PLUGIN_VERSION_MARKER), JSON.stringify(marker));
193
+ }
194
+ /** Reads the marker, transparently handling the legacy format (a bare version string, no JSON) that
195
+ * predates per-file hashes — returned with `files` left undefined so callers can tell the two apart. */
196
+ export function readPluginVersionMarker(targetDir) {
197
+ let raw;
198
+ try {
199
+ raw = fs.readFileSync(path.join(targetDir, PLUGIN_VERSION_MARKER), 'utf8').trim();
200
+ }
201
+ catch {
202
+ return undefined;
203
+ }
204
+ if (!raw)
205
+ return undefined;
206
+ try {
207
+ const parsed = JSON.parse(raw);
208
+ if (parsed && typeof parsed.version === 'string') {
209
+ const files = parsed.files && typeof parsed.files === 'object' ? parsed.files : undefined;
210
+ return { version: parsed.version, files };
211
+ }
212
+ }
213
+ catch {
214
+ // Not JSON — a legacy marker written as a bare version string.
215
+ }
216
+ return { version: raw };
217
+ }
218
+ function parseSemverTriple(v) {
219
+ const m = /^(\d+)\.(\d+)\.(\d+)/.exec(v.trim());
220
+ if (!m)
221
+ return [0, 0, 0];
222
+ return [Number(m[1]), Number(m[2]), Number(m[3])];
223
+ }
224
+ /** True only when `a` is strictly newer than `b` (major.minor.patch; pre-release/build tags are
225
+ * ignored — this package only ever compares its own release versions). Equal or older returns false,
226
+ * which is what makes a refresh a no-op instead of silently re-running on every startup. */
227
+ function isNewerVersion(a, b) {
228
+ const [aMaj, aMin, aPatch] = parseSemverTriple(a);
229
+ const [bMaj, bMin, bPatch] = parseSemverTriple(b);
230
+ if (aMaj !== bMaj)
231
+ return aMaj > bMaj;
232
+ if (aMin !== bMin)
233
+ return aMin > bMin;
234
+ return aPatch > bPatch;
235
+ }
236
+ /** Overwrites a plugin file only when it's missing or its current content still hashes to what was
237
+ * recorded at the last install/refresh — i.e. the user hasn't touched it. A file with no recorded hash
238
+ * that still exists is left alone too (unknown provenance); a brand-new PLUGIN_FILES entry with no
239
+ * recorded hash is written because it's simply missing. Never touches settings.json or .mcp.json.
240
+ *
241
+ * Returns the new hash for every file this call actually wrote (or found already matching the bundled
242
+ * content). Files it left alone because the user edited them are NOT included — the caller must keep
243
+ * their previously recorded hash rather than recompute one from the edited content on disk, or the next
244
+ * refresh would see disk-matches-recorded-hash and silently adopt the edit as "clean", overwriting it. */
245
+ function overwriteUneditedFiles(targetDir, assetSrcDir, recordedHashes) {
246
+ const writtenHashes = {};
247
+ for (const file of PLUGIN_FILES) {
248
+ const srcPath = path.join(assetSrcDir, file);
249
+ let srcContent;
250
+ try {
251
+ srcContent = fs.readFileSync(srcPath, 'utf8');
252
+ }
253
+ catch {
254
+ continue; // no longer shipped
255
+ }
256
+ const destPath = path.join(targetDir, file);
257
+ let destContent = null;
258
+ try {
259
+ destContent = fs.readFileSync(destPath, 'utf8');
260
+ }
261
+ catch { /* missing */ }
262
+ if (destContent === null) {
263
+ atomicWriteFileSync(destPath, srcContent);
264
+ writtenHashes[file] = sha256Hex(srcContent);
265
+ continue;
266
+ }
267
+ const recordedHash = recordedHashes[file];
268
+ if (recordedHash !== undefined && sha256Hex(destContent) === recordedHash) {
269
+ if (destContent !== srcContent) {
270
+ atomicWriteFileSync(destPath, srcContent);
271
+ }
272
+ writtenHashes[file] = sha256Hex(srcContent);
273
+ }
274
+ // else: edited by the user (or no baseline to trust) — leave it exactly as it is, and leave its
275
+ // hash out of writtenHashes so the caller keeps the previously recorded one.
276
+ }
277
+ for (const legacy of LEGACY_PATHS) {
278
+ try {
279
+ fs.rmSync(path.join(targetDir, legacy));
280
+ }
281
+ catch { /* already gone */ }
282
+ }
283
+ return writtenHashes;
284
+ }
285
+ /**
286
+ * Refreshes one install location in place, if the running version is newer than what's recorded there.
287
+ * A JSON marker (with `files`) does the selective, edit-preserving overwrite; a legacy marker (a bare
288
+ * version string) or no marker at all has no hash baseline, so this migrates it the same way
289
+ * `installPluginAssets` would — overwrite our own files unconditionally — and starts recording hashes
290
+ * from here on. Never touches settings.json or .mcp.json. Returns whether anything actually changed.
291
+ */
292
+ function refreshOneLocation(targetDir, assetSrcDir, currentVersion) {
293
+ const marker = readPluginVersionMarker(targetDir);
294
+ if (marker && !isNewerVersion(currentVersion, marker.version))
295
+ return false;
296
+ let newHashes;
297
+ if (marker?.files) {
298
+ const written = overwriteUneditedFiles(targetDir, assetSrcDir, marker.files);
299
+ // Files that were skipped (user-edited) keep their previously recorded hash so they're
300
+ // still recognized as edited — and thus left alone — by every future refresh.
301
+ newHashes = { ...marker.files, ...written };
302
+ }
303
+ else {
304
+ writePluginFiles(targetDir, assetSrcDir);
305
+ newHashes = computeInstalledFileHashes(targetDir);
306
+ }
307
+ writePluginVersionMarker(targetDir, currentVersion, newHashes);
308
+ return true;
309
+ }
310
+ /** True if `dir` is inside a git work-tree; returns its root, or undefined outside one (or if `git`
311
+ * itself is unavailable — never throws). */
312
+ function findGitRoot(startDir) {
313
+ try {
314
+ const root = execSync('git rev-parse --show-toplevel', {
315
+ cwd: startDir,
316
+ encoding: 'utf8',
317
+ stdio: ['pipe', 'pipe', 'pipe'],
318
+ }).trim();
319
+ return root || undefined;
320
+ }
321
+ catch {
322
+ return undefined;
323
+ }
324
+ }
325
+ /**
326
+ * Finds the project `.claude/` that `cwd` belongs to — never bare `cwd` itself, which for the MCP
327
+ * server or the daemon is rarely the project root. Prefers the localPath `conductor init` recorded for
328
+ * whichever project this cwd resolves to (the same `projects` map + cwd-matching `resolveProject` uses
329
+ * for MCP tool calls), but only when `resolveProject` actually derived that project *from* this cwd
330
+ * (source `cwd` or `env`) — since that survives cwd being a subdirectory or symlink. A `fallback`
331
+ * source (cwd matched no configured project, or there's no map at all) means the resolved project's
332
+ * localPath has nothing to do with this cwd — using it would silently point the refresh at some other,
333
+ * unrelated project's `.claude/`. In that case (and whenever there's no on-disk config to consult, e.g.
334
+ * an ephemeral container) fall back to walking up to the enclosing git repo's root instead.
335
+ */
336
+ function resolveLocalClaudeDir(cwd) {
337
+ try {
338
+ const config = readCliConfig();
339
+ if (config) {
340
+ const resolution = resolveProject(config, cwd);
341
+ if (resolution.source === 'cwd' || resolution.source === 'env') {
342
+ const localPath = config.projects?.[resolution.projectId]?.localPath;
343
+ if (localPath)
344
+ return path.join(localPath, '.claude');
345
+ }
346
+ }
347
+ }
348
+ catch { /* fall through to git */ }
349
+ const gitRoot = findGitRoot(cwd);
350
+ return gitRoot ? path.join(gitRoot, '.claude') : undefined;
351
+ }
352
+ /**
353
+ * Refreshes every existing Claude plugin install — the global one (`~/.claude`) and the project-local
354
+ * one for whichever project `cwd` belongs to — in place, but only the ones that actually exist and
355
+ * only when the running package version is newer than what each install's marker records (equal or
356
+ * older is a no-op, per install). Never touches settings.json or .mcp.json — `conductor init` alone
357
+ * manages those. Writes are atomic (temp file + rename). Swallows every error so a broken refresh can
358
+ * never block the MCP server or the daemon from starting; logs through `log`.
359
+ *
360
+ * Single implementation shared by the MCP server (`mcp/index.ts`) and `conductor start`
361
+ * (`commands/start.ts`) startup — call this instead of duplicating the check.
362
+ */
363
+ export function refreshInstalledPluginAssets(opts = {}) {
364
+ const log = opts.log ?? (() => { });
365
+ try {
366
+ const assetSrcDir = opts.assetSrcDir ?? getAssetSrcDir();
367
+ const currentVersion = opts.currentVersion ?? getPackageVersion();
368
+ const cwd = opts.cwd ?? process.cwd();
369
+ const globalDir = opts.globalClaudeDir ?? path.join(os.homedir(), '.claude');
370
+ const localDir = opts.localClaudeDir ?? resolveLocalClaudeDir(cwd);
371
+ const targets = [];
372
+ if (fs.existsSync(path.join(globalDir, PLUGIN_ANCHOR))) {
373
+ targets.push({ dir: globalDir, location: 'global' });
374
+ }
375
+ if (localDir && path.resolve(localDir) !== path.resolve(globalDir) && fs.existsSync(path.join(localDir, PLUGIN_ANCHOR))) {
376
+ targets.push({ dir: localDir, location: 'local' });
377
+ }
378
+ for (const { dir, location } of targets) {
379
+ if (refreshOneLocation(dir, assetSrcDir, currentVersion)) {
380
+ log(`conductor: refreshed Claude plugin assets (${location})`);
381
+ }
382
+ }
383
+ }
384
+ catch (err) {
385
+ log(`conductor: could not refresh Claude plugin assets: ${err instanceof Error ? err.message : String(err)}`);
386
+ }
387
+ }
138
388
  //# sourceMappingURL=plugin-assets.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-assets.js","sourceRoot":"","sources":["../../src/lib/plugin-assets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin-assets.js","sourceRoot":"","sources":["../../src/lib/plugin-assets.ts"],"names":[],"mappings":"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"}
package/dist/mcp/api.d.ts CHANGED
@@ -1,19 +1,36 @@
1
1
  import type { Config } from './config.js';
2
+ /** One field-scoped validation failure, as a Brand Kit 422 (`FieldValidationProblem`) reports it. */
3
+ export interface ApiFieldError {
4
+ field?: string;
5
+ message: string;
6
+ }
7
+ /** One rule-scoped validation failure, as a Creative 422 reports it. */
8
+ export interface ApiViolation {
9
+ field?: string;
10
+ ruleId?: string;
11
+ message: string;
12
+ }
2
13
  /**
3
14
  * An HTTP error from the Conductor API. `message` is the server's own sentence — an RFC 7807
4
15
  * problem's `detail`, falling back to `title`, falling back to the raw response body — so a caller
5
16
  * can relay it to a person without re-parsing JSON. `status`, `code`, `detail` and `title` are kept
6
- * as fields for callers that need to branch on more than the message.
17
+ * as fields for callers that need to branch on more than the message. `fieldErrors`/`violations` are
18
+ * kept too, verbatim from the problem body, when the endpoint's 422 shape carries them — so a caller
19
+ * can format its own per-field message instead of re-parsing `message` as JSON (it usually isn't).
7
20
  */
8
21
  export declare class ApiError extends Error {
9
22
  readonly status: number;
10
23
  readonly code?: string;
11
24
  readonly detail?: string;
12
25
  readonly title?: string;
26
+ readonly fieldErrors?: ApiFieldError[];
27
+ readonly violations?: ApiViolation[];
13
28
  constructor(status: number, message: string, opts?: {
14
29
  code?: string;
15
30
  detail?: string;
16
31
  title?: string;
32
+ fieldErrors?: ApiFieldError[];
33
+ violations?: ApiViolation[];
17
34
  });
18
35
  }
19
36
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/mcp/api.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEzC;;;;;GAKG;AACH,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;gBAEX,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO;CAQ3G;AAmED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAInD;AAED,wBAAsB,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAE3E;AAED,wBAAsB,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAE3F;AAED;0GAC0G;AAC1G,wBAAsB,iBAAiB,CAAC,CAAC,EACvC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,IAAI,EAAE,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAEtC;AAED,wBAAsB,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAE5F;AAED,wBAAsB,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAE1F;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9E;AAED;;;;GAIG;AACH,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,UAAU,GAChB,OAAO,CAAC,IAAI,CAAC,CAef;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,CAAC,EACjC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,EACrF,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,CAAC,CAAC,CAyBZ"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/mcp/api.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEzC,qGAAqG;AACrG,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,wEAAwE;AACxE,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;;;;;;GAOG;AACH,qBAAa,QAAS,SAAQ,KAAK;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa,EAAE,CAAA;IACtC,QAAQ,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,CAAA;gBAGlC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,IAAI,GAAE;QACJ,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,WAAW,CAAC,EAAE,aAAa,EAAE,CAAA;QAC7B,UAAU,CAAC,EAAE,YAAY,EAAE,CAAA;KACvB;CAWT;AAwFD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAInD;AAED,wBAAsB,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAE3E;AAED,wBAAsB,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAE3F;AAED;0GAC0G;AAC1G,wBAAsB,iBAAiB,CAAC,CAAC,EACvC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,IAAI,EAAE,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAEtC;AAED,wBAAsB,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAE5F;AAED,wBAAsB,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAE1F;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9E;AAED;;;;GAIG;AACH,wBAAsB,QAAQ,CAC5B,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,UAAU,GAChB,OAAO,CAAC,IAAI,CAAC,CAef;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,CAAC,EACjC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,UAAU,CAAA;CAAE,EACrF,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,CAAC,CAAC,CAyBZ"}