@zhixuan92/multi-model-agent 3.1.7 → 3.3.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 (76) hide show
  1. package/README.md +1 -1
  2. package/dist/cli/install-skill.d.ts +4 -84
  3. package/dist/cli/install-skill.d.ts.map +1 -1
  4. package/dist/cli/install-skill.js +6 -177
  5. package/dist/cli/install-skill.js.map +1 -1
  6. package/dist/http/execution-context.d.ts +3 -6
  7. package/dist/http/execution-context.d.ts.map +1 -1
  8. package/dist/http/execution-context.js +7 -22
  9. package/dist/http/execution-context.js.map +1 -1
  10. package/dist/http/handlers/control/batch-slice.d.ts +4 -0
  11. package/dist/http/handlers/control/batch-slice.d.ts.map +1 -0
  12. package/dist/http/handlers/control/batch-slice.js +40 -0
  13. package/dist/http/handlers/control/batch-slice.js.map +1 -0
  14. package/dist/http/handlers/control/retry.d.ts +4 -0
  15. package/dist/http/handlers/control/retry.d.ts.map +1 -0
  16. package/dist/http/handlers/control/retry.js +60 -0
  17. package/dist/http/handlers/control/retry.js.map +1 -0
  18. package/dist/http/handlers/tools/audit.d.ts.map +1 -1
  19. package/dist/http/handlers/tools/audit.js +2 -0
  20. package/dist/http/handlers/tools/audit.js.map +1 -1
  21. package/dist/http/handlers/tools/debug.d.ts.map +1 -1
  22. package/dist/http/handlers/tools/debug.js +2 -0
  23. package/dist/http/handlers/tools/debug.js.map +1 -1
  24. package/dist/http/handlers/tools/delegate.d.ts.map +1 -1
  25. package/dist/http/handlers/tools/delegate.js +2 -0
  26. package/dist/http/handlers/tools/delegate.js.map +1 -1
  27. package/dist/http/handlers/tools/execute-plan.d.ts.map +1 -1
  28. package/dist/http/handlers/tools/execute-plan.js +2 -0
  29. package/dist/http/handlers/tools/execute-plan.js.map +1 -1
  30. package/dist/http/handlers/tools/review.d.ts.map +1 -1
  31. package/dist/http/handlers/tools/review.js +2 -0
  32. package/dist/http/handlers/tools/review.js.map +1 -1
  33. package/dist/http/handlers/tools/verify.d.ts.map +1 -1
  34. package/dist/http/handlers/tools/verify.js +2 -0
  35. package/dist/http/handlers/tools/verify.js.map +1 -1
  36. package/dist/http/request-observability.d.ts +9 -0
  37. package/dist/http/request-observability.d.ts.map +1 -0
  38. package/dist/http/request-observability.js +36 -0
  39. package/dist/http/request-observability.js.map +1 -0
  40. package/dist/http/request-pipeline.d.ts +10 -0
  41. package/dist/http/request-pipeline.d.ts.map +1 -0
  42. package/dist/http/request-pipeline.js +87 -0
  43. package/dist/http/request-pipeline.js.map +1 -0
  44. package/dist/http/router.d.ts +5 -0
  45. package/dist/http/router.d.ts.map +1 -1
  46. package/dist/http/router.js +10 -0
  47. package/dist/http/router.js.map +1 -1
  48. package/dist/http/server.d.ts.map +1 -1
  49. package/dist/http/server.js +69 -102
  50. package/dist/http/server.js.map +1 -1
  51. package/dist/install/discover.d.ts +19 -0
  52. package/dist/install/discover.d.ts.map +1 -0
  53. package/dist/install/discover.js +52 -0
  54. package/dist/install/discover.js.map +1 -0
  55. package/dist/install/manifest-resolve.d.ts +11 -0
  56. package/dist/install/manifest-resolve.d.ts.map +1 -0
  57. package/dist/install/manifest-resolve.js +54 -0
  58. package/dist/install/manifest-resolve.js.map +1 -0
  59. package/dist/install/orchestrate.d.ts +35 -0
  60. package/dist/install/orchestrate.d.ts.map +1 -0
  61. package/dist/install/orchestrate.js +53 -0
  62. package/dist/install/orchestrate.js.map +1 -0
  63. package/dist/openapi.d.ts.map +1 -1
  64. package/dist/openapi.js +21 -114
  65. package/dist/openapi.js.map +1 -1
  66. package/dist/skills/mma-audit/SKILL.md +1 -1
  67. package/dist/skills/mma-clarifications/SKILL.md +1 -1
  68. package/dist/skills/mma-context-blocks/SKILL.md +1 -1
  69. package/dist/skills/mma-debug/SKILL.md +1 -1
  70. package/dist/skills/mma-delegate/SKILL.md +7 -1
  71. package/dist/skills/mma-execute-plan/SKILL.md +7 -1
  72. package/dist/skills/mma-retry/SKILL.md +1 -1
  73. package/dist/skills/mma-review/SKILL.md +1 -1
  74. package/dist/skills/mma-verify/SKILL.md +1 -1
  75. package/dist/skills/multi-model-agent/SKILL.md +1 -1
  76. package/package.json +2 -2
@@ -3,11 +3,9 @@ import { readFileSync } from 'node:fs';
3
3
  import { fileURLToPath } from 'node:url';
4
4
  import { join, dirname } from 'node:path';
5
5
  import { Router } from './router.js';
6
- import { sendError } from './errors.js';
7
- import { readBody } from './middleware/body-reader.js';
8
- import { loadToken, validateAuthHeader } from './auth.js';
9
- import { validateCwd } from './cwd-validator.js';
10
- import { isLoopbackAddress } from './loopback.js';
6
+ import { sendError, sendJson } from './errors.js';
7
+ import { loadToken } from './auth.js';
8
+ import { handleRequest } from './request-pipeline.js';
11
9
  /** Server package version — read once at module load time from package.json. */
12
10
  function readServerVersion() {
13
11
  try {
@@ -28,8 +26,8 @@ const LOOPBACK_ONLY_PATHS = new Set(['/health', '/status']);
28
26
  const AUTH_EXEMPT_PATHS = new Set(['/health']);
29
27
  /** Routes that require a `cwd` query parameter (validated by cwd-validator middleware). */
30
28
  const CWD_REQUIRED_PATHS = new Set([
31
- '/delegate', '/audit', '/review', '/verify', '/debug', '/execute-plan', '/retry',
32
- '/context-blocks',
29
+ '/delegate', '/tools/delegate', '/audit', '/review', '/verify', '/debug', '/execute-plan', '/retry',
30
+ '/control/retry', '/control/batch-slice', '/context-blocks',
33
31
  ]);
34
32
  /**
35
33
  * Registers tool handlers (POST /delegate, /audit, /review, /verify, /debug, /execute-plan, /retry).
@@ -44,7 +42,6 @@ async function registerToolHandlers(router, config, batchRegistry, projectRegist
44
42
  const { buildExecutePlanHandler } = await import('./handlers/tools/execute-plan.js');
45
43
  const { buildRetryHandler } = await import('./handlers/tools/retry.js');
46
44
  const { createDiagnosticLogger } = await import('@zhixuan92/multi-model-agent-core');
47
- const logger = createDiagnosticLogger({ enabled: false });
48
45
  // For tool handlers, we need MultiModelConfig which is part of ServerConfig only
49
46
  // when the full mmagent.config.json is loaded. In test/minimal configs that only
50
47
  // have `server:`, we create a stub config. Real CLI startup will load full config.
@@ -64,19 +61,31 @@ async function registerToolHandlers(router, config, batchRegistry, projectRegist
64
61
  }
65
62
  return;
66
63
  }
64
+ const logger = createDiagnosticLogger({
65
+ enabled: multiModelConfig.diagnostics?.log ?? false,
66
+ ...(multiModelConfig.diagnostics?.logDir ? { logDir: multiModelConfig.diagnostics.logDir } : {}),
67
+ });
67
68
  const deps = {
68
69
  config: multiModelConfig,
69
70
  logger,
70
71
  projectRegistry,
71
72
  batchRegistry,
72
73
  };
73
- router.register('POST', '/delegate', buildDelegateHandler(deps));
74
- router.register('POST', '/audit', buildAuditHandler(deps));
75
- router.register('POST', '/review', buildReviewHandler(deps));
76
- router.register('POST', '/verify', buildVerifyHandler(deps));
77
- router.register('POST', '/debug', buildDebugHandler(deps));
78
- router.register('POST', '/execute-plan', buildExecutePlanHandler(deps));
79
- router.register('POST', '/retry', buildRetryHandler(deps));
74
+ const delegateHandler = buildDelegateHandler(deps);
75
+ const auditHandler = buildAuditHandler(deps);
76
+ const reviewHandler = buildReviewHandler(deps);
77
+ const verifyHandler = buildVerifyHandler(deps);
78
+ const debugHandler = buildDebugHandler(deps);
79
+ const executePlanHandler = buildExecutePlanHandler(deps);
80
+ const retryHandler = buildRetryHandler(deps);
81
+ router.register('POST', '/delegate', delegateHandler);
82
+ router.register('POST', '/tools/delegate', delegateHandler);
83
+ router.register('POST', '/audit', auditHandler);
84
+ router.register('POST', '/review', reviewHandler);
85
+ router.register('POST', '/verify', verifyHandler);
86
+ router.register('POST', '/debug', debugHandler);
87
+ router.register('POST', '/execute-plan', executePlanHandler);
88
+ router.register('POST', '/retry', retryHandler);
80
89
  }
81
90
  /**
82
91
  * Registers control handlers (GET /batch/:batchId, POST/DELETE /context-blocks,
@@ -84,9 +93,36 @@ async function registerToolHandlers(router, config, batchRegistry, projectRegist
84
93
  */
85
94
  async function registerControlHandlers(router, config, batchRegistry, projectRegistry) {
86
95
  const { buildBatchHandler } = await import('./handlers/control/batch.js');
96
+ const { buildRetryHandler } = await import('./handlers/control/retry.js');
97
+ const { buildBatchSliceHandler } = await import('./handlers/control/batch-slice.js');
87
98
  const { buildCreateContextBlockHandler, buildDeleteContextBlockHandler } = await import('./handlers/control/context-blocks.js');
88
99
  const { buildClarificationsHandler } = await import('./handlers/control/clarifications.js');
100
+ const { createDiagnosticLogger } = await import('@zhixuan92/multi-model-agent-core');
101
+ const multiModelConfig = config.agents
102
+ ? config
103
+ : undefined;
89
104
  router.register('GET', '/batch/:batchId', buildBatchHandler({ batchRegistry }));
105
+ if (multiModelConfig) {
106
+ const deps = {
107
+ config: multiModelConfig,
108
+ logger: createDiagnosticLogger({
109
+ enabled: multiModelConfig.diagnostics?.log ?? false,
110
+ ...(multiModelConfig.diagnostics?.logDir ? { logDir: multiModelConfig.diagnostics.logDir } : {}),
111
+ }),
112
+ projectRegistry,
113
+ batchRegistry,
114
+ };
115
+ router.register('POST', '/control/retry', buildRetryHandler(deps));
116
+ router.register('POST', '/control/batch-slice', buildBatchSliceHandler(deps));
117
+ }
118
+ else {
119
+ router.register('POST', '/control/retry', (_req, res) => {
120
+ sendError(res, 503, 'no_agent_config', 'Server started without agent configuration; provide a full mmagent.config.json');
121
+ });
122
+ router.register('POST', '/control/batch-slice', (_req, res) => {
123
+ sendError(res, 503, 'no_agent_config', 'Server started without agent configuration; provide a full mmagent.config.json');
124
+ });
125
+ }
90
126
  router.register('POST', '/context-blocks', buildCreateContextBlockHandler({ projectRegistry, config }));
91
127
  router.register('DELETE', '/context-blocks/:blockId', buildDeleteContextBlockHandler({ projectRegistry }));
92
128
  router.register('POST', '/clarifications/confirm', buildClarificationsHandler({ batchRegistry }));
@@ -127,8 +163,17 @@ export async function startServer(config) {
127
163
  // GET /tools — OpenAPI 3.0 document (auth required, NOT loopback-gated)
128
164
  const { buildToolsHandler } = await import('./handlers/introspection/tools-list.js');
129
165
  router.register('GET', '/tools', buildToolsHandler());
166
+ // Test-only: enumerates registered routes. Guarded by env; zero impact on production.
167
+ if (process.env.MMAGENT_TEST_INTROSPECTION === '1') {
168
+ router.register('GET', '/__routes', (_req, res) => {
169
+ sendJson(res, 200, router.listRoutes().map((route) => ({
170
+ method: route.method.toUpperCase(),
171
+ path: route.path,
172
+ })));
173
+ });
174
+ }
130
175
  const server = createServer((req, res) => {
131
- void handleRequest(router, token, req, res, config);
176
+ void handleRequest(router, token, req, res, config, PIPELINE_CFG);
132
177
  });
133
178
  await new Promise((resolve) => {
134
179
  server.listen(config.server.port, config.server.bind, resolve);
@@ -145,90 +190,12 @@ export async function startServer(config) {
145
190
  serverStartedAt,
146
191
  };
147
192
  }
148
- const BODY_METHODS = new Set(['POST', 'PUT', 'PATCH', 'DELETE']);
149
- async function handleRequest(router, token, req, res, cfg) {
150
- const method = req.method ?? 'GET';
151
- const rawUrl = req.url ?? '/';
152
- // ── Step 1: Body size cap (for methods that carry a body) ──────────────────
153
- let rawBody;
154
- if (BODY_METHODS.has(method)) {
155
- const result = await readBody(req, cfg.server.limits.maxBodyBytes);
156
- if (!result.ok) {
157
- // Send 413 then close; include Connection: close so the client knows
158
- res.writeHead(413, { 'content-type': 'application/json', 'connection': 'close' });
159
- res.end(JSON.stringify({ error: { code: 'payload_too_large', message: `Request body exceeds the ${cfg.server.limits.maxBodyBytes}-byte limit` } }), () => { req.socket?.destroy(); });
160
- return;
161
- }
162
- rawBody = result.body;
163
- }
164
- // ── Step 2: Route match (404 not_found / 405 method_not_allowed) ──────────
165
- const match = router.match(method, rawUrl);
166
- if (!match) {
167
- const allowed = router.methodsFor(rawUrl);
168
- if (allowed.length > 0) {
169
- sendError(res, 405, 'method_not_allowed', `Method ${method} not allowed`, { allowed });
170
- }
171
- else {
172
- sendError(res, 404, 'not_found', `Unknown path ${rawUrl.split('?')[0]}`);
173
- }
174
- return;
175
- }
176
- // ── Step 3: Loopback guard for /health and /status ────────────────────────
177
- const pathname = rawUrl.split('?')[0];
178
- if (LOOPBACK_ONLY_PATHS.has(pathname)) {
179
- const remoteAddr = req.socket?.remoteAddress;
180
- if (!isLoopbackAddress(remoteAddr)) {
181
- sendError(res, 403, 'loopback_only', 'This endpoint is only accessible from the loopback interface');
182
- return;
183
- }
184
- }
185
- // ── Step 4: Auth (bearer token) — skip for /health ───────────────────────
186
- if (!AUTH_EXEMPT_PATHS.has(pathname)) {
187
- const header = req.headers['authorization'];
188
- const authResult = validateAuthHeader(header, token);
189
- if (!authResult.ok) {
190
- sendError(res, 401, 'unauthorized', 'Valid Bearer token required');
191
- return;
192
- }
193
- }
194
- // ── Step 5: JSON parse → ctx.body ────────────────────────────────────────
195
- let parsedBody;
196
- if (rawBody !== undefined && rawBody.length > 0) {
197
- try {
198
- parsedBody = JSON.parse(rawBody.toString('utf8'));
199
- }
200
- catch {
201
- sendError(res, 400, 'invalid_json', 'Request body is not valid JSON');
202
- return;
203
- }
204
- }
205
- // ── Step 6: cwd query param → validate → ctx.cwd ─────────────────────────
206
- // cwd is required for tool routes and context-block routes.
207
- // /batch/:batchId and /clarifications/confirm do NOT require cwd.
208
- let cwdValue;
209
- const urlObj = new URL(rawUrl, 'http://localhost');
210
- // Match against pathname prefix patterns for cwd-required routes
211
- const requiresCwd = CWD_REQUIRED_PATHS.has(pathname) ||
212
- pathname === '/context-blocks' ||
213
- /^\/context-blocks\//.test(pathname);
214
- if (requiresCwd) {
215
- const cwdParam = urlObj.searchParams.get('cwd') ?? undefined;
216
- const cwdResult = validateCwd(cwdParam);
217
- if (!cwdResult.ok) {
218
- const statusCode = cwdResult.error === 'forbidden_cwd' ? 403 : 400;
219
- sendError(res, statusCode, cwdResult.error, cwdResult.message);
220
- return;
221
- }
222
- cwdValue = cwdResult.canonicalCwd;
223
- }
224
- // ── Steps 7-9: Zod validation, project registry, and handler run ──────────
225
- // These happen inside each handler (Phase 6+).
226
- const ctx = {
227
- url: urlObj,
228
- cwd: cwdValue,
229
- body: parsedBody,
230
- authed: !AUTH_EXEMPT_PATHS.has(pathname),
231
- };
232
- await match.handler(req, res, match.params, ctx);
233
- }
193
+ // Per-request pipeline lives in request-pipeline.ts. server.ts owns routing
194
+ // table + bootstrap; the pipeline owns body-cap → route → loopback → auth →
195
+ // JSON parse cwd → dispatch.
196
+ const PIPELINE_CFG = {
197
+ loopbackOnlyPaths: LOOPBACK_ONLY_PATHS,
198
+ authExemptPaths: AUTH_EXEMPT_PATHS,
199
+ cwdRequiredPaths: CWD_REQUIRED_PATHS,
200
+ };
234
201
  //# sourceMappingURL=server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/http/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/http/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export declare const SUPPORTED_SKILLS: readonly ["multi-model-agent", "mma-delegate", "mma-audit", "mma-review", "mma-verify", "mma-debug", "mma-execute-plan", "mma-retry", "mma-context-blocks", "mma-clarifications"];
2
+ /** Thrown when a skill's SKILL.md cannot be read from the bundled skills directory. */
3
+ export declare class SkillNotFoundError extends Error {
4
+ readonly code: "skill_not_found";
5
+ constructor(skillName: string, checkedPath: string);
6
+ }
7
+ /**
8
+ * Return the absolute path to the skills root directory. Production: the
9
+ * bundled `packages/server/src/skills/` (or its dist mirror). Tests pass
10
+ * a fixture path explicitly.
11
+ */
12
+ export declare function getSkillsRoot(skillsRoot?: string): string;
13
+ /**
14
+ * Read the content of a skill's SKILL.md file. Returns null if the file
15
+ * does not exist; propagates other I/O errors so callers can distinguish
16
+ * "skill not found" from "can't access skill".
17
+ */
18
+ export declare function readSkillContent(skillName: string, skillsRoot?: string): string | null;
19
+ //# sourceMappingURL=discover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/install/discover.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,gBAAgB,mLAWnB,CAAC;AAEX,uFAAuF;AACvF,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,EAAG,iBAAiB,CAAU;gBAC/B,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM;CAOnD;AAQD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQtF"}
@@ -0,0 +1,52 @@
1
+ // Skill discovery — locates packaged SKILL.md files on disk and reads them.
2
+ // Extracted from cli/install-skill.ts as part of Ch 7 Task 39.
3
+ import fs from 'node:fs';
4
+ import path from 'node:path';
5
+ import { fileURLToPath } from 'node:url';
6
+ export const SUPPORTED_SKILLS = [
7
+ 'multi-model-agent',
8
+ 'mma-delegate',
9
+ 'mma-audit',
10
+ 'mma-review',
11
+ 'mma-verify',
12
+ 'mma-debug',
13
+ 'mma-execute-plan',
14
+ 'mma-retry',
15
+ 'mma-context-blocks',
16
+ 'mma-clarifications',
17
+ ];
18
+ /** Thrown when a skill's SKILL.md cannot be read from the bundled skills directory. */
19
+ export class SkillNotFoundError extends Error {
20
+ code = 'skill_not_found';
21
+ constructor(skillName, checkedPath) {
22
+ super(`Skill '${skillName}' not found. ` +
23
+ `Checked: ${checkedPath}. ` +
24
+ `Available skills: ${SUPPORTED_SKILLS.join(', ')}`);
25
+ }
26
+ }
27
+ const DEFAULT_SKILLS_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..', 'skills');
28
+ /**
29
+ * Return the absolute path to the skills root directory. Production: the
30
+ * bundled `packages/server/src/skills/` (or its dist mirror). Tests pass
31
+ * a fixture path explicitly.
32
+ */
33
+ export function getSkillsRoot(skillsRoot) {
34
+ return skillsRoot ?? DEFAULT_SKILLS_ROOT;
35
+ }
36
+ /**
37
+ * Read the content of a skill's SKILL.md file. Returns null if the file
38
+ * does not exist; propagates other I/O errors so callers can distinguish
39
+ * "skill not found" from "can't access skill".
40
+ */
41
+ export function readSkillContent(skillName, skillsRoot) {
42
+ const skillFile = path.join(getSkillsRoot(skillsRoot), skillName, 'SKILL.md');
43
+ try {
44
+ return fs.readFileSync(skillFile, 'utf-8');
45
+ }
46
+ catch (err) {
47
+ if (err.code === 'ENOENT')
48
+ return null;
49
+ throw err;
50
+ }
51
+ }
52
+ //# sourceMappingURL=discover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/install/discover.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,+DAA+D;AAC/D,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,mBAAmB;IACnB,cAAc;IACd,WAAW;IACX,YAAY;IACZ,YAAY;IACZ,WAAW;IACX,kBAAkB;IAClB,WAAW;IACX,oBAAoB;IACpB,oBAAoB;CACZ,CAAC;AAEX,uFAAuF;AACvF,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAClC,IAAI,GAAG,iBAA0B,CAAC;IAC3C,YAAY,SAAiB,EAAE,WAAmB;QAChD,KAAK,CACH,UAAU,SAAS,eAAe;YAClC,YAAY,WAAW,IAAI;YAC3B,qBAAqB,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACnD,CAAC;IACJ,CAAC;CACF;AAED,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CACtC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAC5C,IAAI,EACJ,QAAQ,CACT,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,UAAmB;IAC/C,OAAO,UAAU,IAAI,mBAAmB,CAAC;AAC3C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAAiB,EAAE,UAAmB;IACrE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IAC9E,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,IAAI,CAAC;QAClE,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { Client } from './manifest.js';
2
+ /** Thrown when a passed `--target` value is not a known client. */
3
+ export declare class UnknownTargetError extends Error {
4
+ readonly code: "unknown_target";
5
+ constructor(target: string, valid: readonly Client[]);
6
+ }
7
+ /** Dispatch a write to the appropriate per-client installer. */
8
+ export declare function writeSkillToClient(skillName: string, content: string, target: Client, homeDir: string, skillsRoot: string, version?: string, cwd?: string, force?: boolean): void;
9
+ /** Dispatch an uninstall to the appropriate per-client remover. */
10
+ export declare function removeSkillFromClient(skillName: string, target: Client, homeDir: string, cwd?: string): void;
11
+ //# sourceMappingURL=manifest-resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-resolve.d.ts","sourceRoot":"","sources":["../../src/install/manifest-resolve.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAM5C,mEAAmE;AACnE,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,EAAG,gBAAgB,CAAU;gBAC9B,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE;CAGrD;AAED,gEAAgE;AAChE,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,MAAgB,EACzB,GAAG,GAAE,MAAsB,EAC3B,KAAK,GAAE,OAAe,GACrB,IAAI,CAmBN;AAED,mEAAmE;AACnE,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,GAAG,GAAE,MAAsB,GAC1B,IAAI,CAmBN"}
@@ -0,0 +1,54 @@
1
+ import { installClaudeCode, uninstallClaudeCode } from './claude-code.js';
2
+ import { installGeminiCli, uninstallGeminiCli } from './gemini-cli.js';
3
+ import { installCodexCli, uninstallCodexCli } from './codex-cli.js';
4
+ import { installCursor, uninstallCursor } from './cursor.js';
5
+ /** Thrown when a passed `--target` value is not a known client. */
6
+ export class UnknownTargetError extends Error {
7
+ code = 'unknown_target';
8
+ constructor(target, valid) {
9
+ super(`Unknown target: ${target}. Valid: ${valid.join(', ')}`);
10
+ }
11
+ }
12
+ /** Dispatch a write to the appropriate per-client installer. */
13
+ export function writeSkillToClient(skillName, content, target, homeDir, skillsRoot, version = '0.0.0', cwd = process.cwd(), force = false) {
14
+ switch (target) {
15
+ case 'claude-code':
16
+ installClaudeCode({ skillName, content, homeDir, skillsRoot });
17
+ break;
18
+ case 'gemini':
19
+ installGeminiCli({ skillName, content, skillVersion: version, homeDir, skillsRoot });
20
+ break;
21
+ case 'codex':
22
+ installCodexCli({ skillName, content, homeDir, skillsRoot });
23
+ break;
24
+ case 'cursor':
25
+ installCursor({ content, cwd, homeDir, skillsRoot, force });
26
+ break;
27
+ default: {
28
+ const _exhaustive = target;
29
+ throw new Error(`install-skill: unknown target: ${_exhaustive}`);
30
+ }
31
+ }
32
+ }
33
+ /** Dispatch an uninstall to the appropriate per-client remover. */
34
+ export function removeSkillFromClient(skillName, target, homeDir, cwd = process.cwd()) {
35
+ switch (target) {
36
+ case 'claude-code':
37
+ uninstallClaudeCode(skillName, homeDir);
38
+ break;
39
+ case 'gemini':
40
+ uninstallGeminiCli(homeDir);
41
+ break;
42
+ case 'codex':
43
+ uninstallCodexCli(homeDir);
44
+ break;
45
+ case 'cursor':
46
+ uninstallCursor(cwd);
47
+ break;
48
+ default: {
49
+ const _exhaustive = target;
50
+ throw new Error(`install-skill: unknown target: ${_exhaustive}`);
51
+ }
52
+ }
53
+ }
54
+ //# sourceMappingURL=manifest-resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-resolve.js","sourceRoot":"","sources":["../../src/install/manifest-resolve.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE7D,mEAAmE;AACnE,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAClC,IAAI,GAAG,gBAAyB,CAAC;IAC1C,YAAY,MAAc,EAAE,KAAwB;QAClD,KAAK,CAAC,mBAAmB,MAAM,YAAY,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjE,CAAC;CACF;AAED,gEAAgE;AAChE,MAAM,UAAU,kBAAkB,CAChC,SAAiB,EACjB,OAAe,EACf,MAAc,EACd,OAAe,EACf,UAAkB,EAClB,UAAkB,OAAO,EACzB,MAAc,OAAO,CAAC,GAAG,EAAE,EAC3B,QAAiB,KAAK;IAEtB,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,aAAa;YAChB,iBAAiB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;YAC/D,MAAM;QACR,KAAK,QAAQ;YACX,gBAAgB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;YACrF,MAAM;QACR,KAAK,OAAO;YACV,eAAe,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;YAC7D,MAAM;QACR,KAAK,QAAQ;YACX,aAAa,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;YAC5D,MAAM;QACR,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,WAAW,GAAU,MAAM,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,kCAAkC,WAAqB,EAAE,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;AACH,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,qBAAqB,CACnC,SAAiB,EACjB,MAAc,EACd,OAAe,EACf,MAAc,OAAO,CAAC,GAAG,EAAE;IAE3B,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,aAAa;YAChB,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACxC,MAAM;QACR,KAAK,QAAQ;YACX,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAC5B,MAAM;QACR,KAAK,OAAO;YACV,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAC3B,MAAM;QACR,KAAK,QAAQ;YACX,eAAe,CAAC,GAAG,CAAC,CAAC;YACrB,MAAM;QACR,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,WAAW,GAAU,MAAM,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,kCAAkC,WAAqB,EAAE,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,35 @@
1
+ import type { Client } from './manifest.js';
2
+ export interface InstallResult {
3
+ skill: string;
4
+ action: 'installed' | 'uninstalled';
5
+ /** Targets for which the operation succeeded. */
6
+ targets: Client[];
7
+ /** Targets that were skipped (dry-run, unknown, or not applicable). */
8
+ skipped: Client[];
9
+ /** Files would be written but were not (dry-run mode). */
10
+ dryRun: boolean;
11
+ }
12
+ /**
13
+ * Install a skill to the specified client targets.
14
+ * - dryRun=true: checks skill existence; does NOT write files or update manifest.
15
+ * - dryRun=false: writes files via the per-client writers.
16
+ */
17
+ export declare function doInstall(skillName: string, targets: Client[], opts: {
18
+ dryRun: boolean;
19
+ homeDir: string;
20
+ skillsRoot?: string;
21
+ version?: string;
22
+ cwd?: string;
23
+ force?: boolean;
24
+ }): InstallResult;
25
+ /**
26
+ * Uninstall a skill from the specified client targets.
27
+ * - dryRun=true: resolves targets; does NOT remove files or update manifest.
28
+ * - dryRun=false: removes files via the per-client removers.
29
+ */
30
+ export declare function doUninstall(skillName: string, targets: Client[], opts: {
31
+ dryRun: boolean;
32
+ homeDir: string;
33
+ cwd?: string;
34
+ }): InstallResult;
35
+ //# sourceMappingURL=orchestrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrate.d.ts","sourceRoot":"","sources":["../../src/install/orchestrate.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAI5C,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,WAAW,GAAG,aAAa,CAAC;IACpC,iDAAiD;IACjD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,uEAAuE;IACvE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,0DAA0D;IAC1D,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CACvB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EAAE,EACjB,IAAI,EAAE;IACJ,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GACA,aAAa,CAwBf;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EAAE,EACjB,IAAI,EAAE;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GACvD,aAAa,CAef"}
@@ -0,0 +1,53 @@
1
+ // Install/uninstall orchestration. Pure logic — no CLI/argv handling.
2
+ // Extracted from cli/install-skill.ts as part of Ch 7 Task 39.
3
+ import path from 'node:path';
4
+ import { SkillNotFoundError, getSkillsRoot, readSkillContent } from './discover.js';
5
+ import { writeSkillToClient, removeSkillFromClient } from './manifest-resolve.js';
6
+ /**
7
+ * Install a skill to the specified client targets.
8
+ * - dryRun=true: checks skill existence; does NOT write files or update manifest.
9
+ * - dryRun=false: writes files via the per-client writers.
10
+ */
11
+ export function doInstall(skillName, targets, opts) {
12
+ const checkedPath = path.join(getSkillsRoot(opts.skillsRoot), skillName, 'SKILL.md');
13
+ const content = readSkillContent(skillName, opts.skillsRoot);
14
+ if (!content) {
15
+ throw new SkillNotFoundError(skillName, checkedPath);
16
+ }
17
+ const skillsRoot = getSkillsRoot(opts.skillsRoot);
18
+ const version = opts.version ?? '0.0.0';
19
+ const cwd = opts.cwd ?? process.cwd();
20
+ const installed = [];
21
+ const skipped = [];
22
+ for (const target of targets) {
23
+ if (opts.dryRun) {
24
+ skipped.push(target);
25
+ }
26
+ else {
27
+ writeSkillToClient(skillName, content, target, opts.homeDir, skillsRoot, version, cwd, opts.force);
28
+ installed.push(target);
29
+ }
30
+ }
31
+ return { skill: skillName, action: 'installed', targets: installed, skipped, dryRun: opts.dryRun };
32
+ }
33
+ /**
34
+ * Uninstall a skill from the specified client targets.
35
+ * - dryRun=true: resolves targets; does NOT remove files or update manifest.
36
+ * - dryRun=false: removes files via the per-client removers.
37
+ */
38
+ export function doUninstall(skillName, targets, opts) {
39
+ const cwd = opts.cwd ?? process.cwd();
40
+ const installed = [];
41
+ const skipped = [];
42
+ for (const target of targets) {
43
+ if (opts.dryRun) {
44
+ skipped.push(target);
45
+ }
46
+ else {
47
+ removeSkillFromClient(skillName, target, opts.homeDir, cwd);
48
+ installed.push(target);
49
+ }
50
+ }
51
+ return { skill: skillName, action: 'uninstalled', targets: installed, skipped, dryRun: opts.dryRun };
52
+ }
53
+ //# sourceMappingURL=orchestrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrate.js","sourceRoot":"","sources":["../../src/install/orchestrate.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,+DAA+D;AAC/D,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACpF,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAalF;;;;GAIG;AACH,MAAM,UAAU,SAAS,CACvB,SAAiB,EACjB,OAAiB,EACjB,IAOC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;IACrF,MAAM,OAAO,GAAG,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC7D,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,kBAAkB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC;IACxC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAEtC,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,kBAAkB,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACnG,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AACrG,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CACzB,SAAiB,EACjB,OAAiB,EACjB,IAAwD;IAExD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACtC,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC5D,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AACvG,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"openapi.d.ts","sourceRoot":"","sources":["../src/openapi.ts"],"names":[],"mappings":"AAgDA,qEAAqE;AACrE,QAAA,MAAM,aAAa;;;;;;;;CAMlB,CAAC;AAWF,wBAAgB,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA6QzD;AAED,gFAAgF;AAChF,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAExE;AAGD,OAAO,EAAE,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"openapi.d.ts","sourceRoot":"","sources":["../src/openapi.ts"],"names":[],"mappings":"AAgDA,qEAAqE;AACrE,QAAA,MAAM,aAAa;;;;;;;;CAMlB,CAAC;AA+CF,wBAAgB,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAyIzD;AAED,gFAAgF;AAChF,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAExE;AAGD,OAAO,EAAE,aAAa,EAAE,CAAC"}