@zhixuan92/multi-model-agent 3.1.6 → 3.2.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 (50) 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/request-pipeline.d.ts +10 -0
  11. package/dist/http/request-pipeline.d.ts.map +1 -0
  12. package/dist/http/request-pipeline.js +87 -0
  13. package/dist/http/request-pipeline.js.map +1 -0
  14. package/dist/http/router.d.ts +5 -0
  15. package/dist/http/router.d.ts.map +1 -1
  16. package/dist/http/router.js +10 -0
  17. package/dist/http/router.js.map +1 -1
  18. package/dist/http/server.d.ts.map +1 -1
  19. package/dist/http/server.js +21 -92
  20. package/dist/http/server.js.map +1 -1
  21. package/dist/http/test-provider-override.d.ts +4 -0
  22. package/dist/http/test-provider-override.d.ts.map +1 -0
  23. package/dist/http/test-provider-override.js +17 -0
  24. package/dist/http/test-provider-override.js.map +1 -0
  25. package/dist/install/discover.d.ts +19 -0
  26. package/dist/install/discover.d.ts.map +1 -0
  27. package/dist/install/discover.js +52 -0
  28. package/dist/install/discover.js.map +1 -0
  29. package/dist/install/manifest-resolve.d.ts +11 -0
  30. package/dist/install/manifest-resolve.d.ts.map +1 -0
  31. package/dist/install/manifest-resolve.js +54 -0
  32. package/dist/install/manifest-resolve.js.map +1 -0
  33. package/dist/install/orchestrate.d.ts +35 -0
  34. package/dist/install/orchestrate.d.ts.map +1 -0
  35. package/dist/install/orchestrate.js +53 -0
  36. package/dist/install/orchestrate.js.map +1 -0
  37. package/dist/openapi.d.ts.map +1 -1
  38. package/dist/openapi.js +21 -114
  39. package/dist/openapi.js.map +1 -1
  40. package/dist/skills/mma-audit/SKILL.md +1 -1
  41. package/dist/skills/mma-clarifications/SKILL.md +1 -1
  42. package/dist/skills/mma-context-blocks/SKILL.md +1 -1
  43. package/dist/skills/mma-debug/SKILL.md +1 -1
  44. package/dist/skills/mma-delegate/SKILL.md +1 -1
  45. package/dist/skills/mma-execute-plan/SKILL.md +1 -1
  46. package/dist/skills/mma-retry/SKILL.md +1 -1
  47. package/dist/skills/mma-review/SKILL.md +1 -1
  48. package/dist/skills/mma-verify/SKILL.md +1 -1
  49. package/dist/skills/multi-model-agent/SKILL.md +1 -1
  50. 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 {
@@ -127,8 +125,17 @@ export async function startServer(config) {
127
125
  // GET /tools — OpenAPI 3.0 document (auth required, NOT loopback-gated)
128
126
  const { buildToolsHandler } = await import('./handlers/introspection/tools-list.js');
129
127
  router.register('GET', '/tools', buildToolsHandler());
128
+ // Test-only: enumerates registered routes. Guarded by env; zero impact on production.
129
+ if (process.env.MMAGENT_TEST_INTROSPECTION === '1') {
130
+ router.register('GET', '/__routes', (_req, res) => {
131
+ sendJson(res, 200, router.listRoutes().map((route) => ({
132
+ method: route.method.toUpperCase(),
133
+ path: route.path,
134
+ })));
135
+ });
136
+ }
130
137
  const server = createServer((req, res) => {
131
- void handleRequest(router, token, req, res, config);
138
+ void handleRequest(router, token, req, res, config, PIPELINE_CFG);
132
139
  });
133
140
  await new Promise((resolve) => {
134
141
  server.listen(config.server.port, config.server.bind, resolve);
@@ -145,90 +152,12 @@ export async function startServer(config) {
145
152
  serverStartedAt,
146
153
  };
147
154
  }
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
- }
155
+ // Per-request pipeline lives in request-pipeline.ts. server.ts owns routing
156
+ // table + bootstrap; the pipeline owns body-cap → route → loopback → auth →
157
+ // JSON parse cwd → dispatch.
158
+ const PIPELINE_CFG = {
159
+ loopbackOnlyPaths: LOOPBACK_ONLY_PATHS,
160
+ authExemptPaths: AUTH_EXEMPT_PATHS,
161
+ cwdRequiredPaths: CWD_REQUIRED_PATHS,
162
+ };
234
163
  //# 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,4 @@
1
+ import type { Provider } from '@zhixuan92/multi-model-agent-core';
2
+ export declare function __setTestProviderOverride(provider: Provider | null): void;
3
+ export declare function __getTestProviderOverride(): Provider | null;
4
+ //# sourceMappingURL=test-provider-override.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-provider-override.d.ts","sourceRoot":"","sources":["../../src/http/test-provider-override.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAUlE,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI,CAGzE;AAED,wBAAgB,yBAAyB,IAAI,QAAQ,GAAG,IAAI,CAK3D"}
@@ -0,0 +1,17 @@
1
+ let testProviderOverride = null;
2
+ function assertEnabled() {
3
+ if (process.env.MMAGENT_TEST_PROVIDER_OVERRIDE !== '1') {
4
+ throw new Error('MMAGENT_TEST_PROVIDER_OVERRIDE must be set to 1 to use the test provider override');
5
+ }
6
+ }
7
+ export function __setTestProviderOverride(provider) {
8
+ assertEnabled();
9
+ testProviderOverride = provider;
10
+ }
11
+ export function __getTestProviderOverride() {
12
+ if (process.env.MMAGENT_TEST_PROVIDER_OVERRIDE !== '1') {
13
+ return null;
14
+ }
15
+ return testProviderOverride;
16
+ }
17
+ //# sourceMappingURL=test-provider-override.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-provider-override.js","sourceRoot":"","sources":["../../src/http/test-provider-override.ts"],"names":[],"mappings":"AAEA,IAAI,oBAAoB,GAAoB,IAAI,CAAC;AAEjD,SAAS,aAAa;IACpB,IAAI,OAAO,CAAC,GAAG,CAAC,8BAA8B,KAAK,GAAG,EAAE,CAAC;QACvD,MAAM,IAAI,KAAK,CAAC,mFAAmF,CAAC,CAAC;IACvG,CAAC;AACH,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,QAAyB;IACjE,aAAa,EAAE,CAAC;IAChB,oBAAoB,GAAG,QAAQ,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,yBAAyB;IACvC,IAAI,OAAO,CAAC,GAAG,CAAC,8BAA8B,KAAK,GAAG,EAAE,CAAC;QACvD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,oBAAoB,CAAC;AAC9B,CAAC"}
@@ -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"}
package/dist/openapi.js CHANGED
@@ -54,127 +54,28 @@ const response401 = { description: 'Missing or invalid Bearer token' };
54
54
  const response403 = { description: 'Forbidden (loopback-only or path traversal)' };
55
55
  /** Standard 404 error response. */
56
56
  const response404 = { description: 'Resource not found' };
57
- export function buildOpenApiDoc() {
58
- const registry = new OpenAPIRegistry();
59
- // ── Tool endpoints (POST, require cwd + auth) ───────────────────────────────
57
+ // Tool-endpoint registration table. Each row contributes one path with the
58
+ // shared shape: POST /<path>?cwd=<abs>, JSON body, async 202 response.
59
+ const TOOL_ENDPOINTS = [
60
+ { path: '/delegate', summary: 'Dispatch tasks to sub-agents', schema: delegate.inputSchema },
61
+ { path: '/audit', summary: 'Audit documents or files', schema: audit.inputSchema },
62
+ { path: '/review', summary: 'Review code for quality and security', schema: review.inputSchema },
63
+ { path: '/verify', summary: 'Verify work against a checklist', schema: verify.inputSchema },
64
+ { path: '/debug', summary: 'Debug a problem with sub-agent assistance', schema: debug.inputSchema },
65
+ { path: '/execute-plan', summary: 'Execute tasks from a plan file', schema: executePlan.inputSchema },
66
+ { path: '/retry', summary: 'Retry failed tasks from a previous batch', schema: retry.inputSchema },
67
+ ];
68
+ function registerToolEndpoint(registry, row) {
60
69
  registry.registerPath({
61
70
  method: 'post',
62
- path: '/delegate',
63
- summary: 'Dispatch tasks to sub-agents',
71
+ path: row.path,
72
+ summary: row.summary,
64
73
  tags: ['Tools'],
65
74
  request: {
66
75
  query: z.object({ cwd: z.string().describe('Project working directory') }),
67
76
  body: {
68
77
  required: true,
69
- content: { 'application/json': { schema: delegate.inputSchema } },
70
- },
71
- },
72
- responses: {
73
- 202: asyncResponse202,
74
- 400: { description: 'Request validation error' },
75
- 401: response401,
76
- },
77
- });
78
- registry.registerPath({
79
- method: 'post',
80
- path: '/audit',
81
- summary: 'Audit documents or files',
82
- tags: ['Tools'],
83
- request: {
84
- query: z.object({ cwd: z.string().describe('Project working directory') }),
85
- body: {
86
- required: true,
87
- content: { 'application/json': { schema: audit.inputSchema } },
88
- },
89
- },
90
- responses: {
91
- 202: asyncResponse202,
92
- 400: { description: 'Request validation error' },
93
- 401: response401,
94
- },
95
- });
96
- registry.registerPath({
97
- method: 'post',
98
- path: '/review',
99
- summary: 'Review code for quality and security',
100
- tags: ['Tools'],
101
- request: {
102
- query: z.object({ cwd: z.string().describe('Project working directory') }),
103
- body: {
104
- required: true,
105
- content: { 'application/json': { schema: review.inputSchema } },
106
- },
107
- },
108
- responses: {
109
- 202: asyncResponse202,
110
- 400: { description: 'Request validation error' },
111
- 401: response401,
112
- },
113
- });
114
- registry.registerPath({
115
- method: 'post',
116
- path: '/verify',
117
- summary: 'Verify work against a checklist',
118
- tags: ['Tools'],
119
- request: {
120
- query: z.object({ cwd: z.string().describe('Project working directory') }),
121
- body: {
122
- required: true,
123
- content: { 'application/json': { schema: verify.inputSchema } },
124
- },
125
- },
126
- responses: {
127
- 202: asyncResponse202,
128
- 400: { description: 'Request validation error' },
129
- 401: response401,
130
- },
131
- });
132
- registry.registerPath({
133
- method: 'post',
134
- path: '/debug',
135
- summary: 'Debug a problem with sub-agent assistance',
136
- tags: ['Tools'],
137
- request: {
138
- query: z.object({ cwd: z.string().describe('Project working directory') }),
139
- body: {
140
- required: true,
141
- content: { 'application/json': { schema: debug.inputSchema } },
142
- },
143
- },
144
- responses: {
145
- 202: asyncResponse202,
146
- 400: { description: 'Request validation error' },
147
- 401: response401,
148
- },
149
- });
150
- registry.registerPath({
151
- method: 'post',
152
- path: '/execute-plan',
153
- summary: 'Execute tasks from a plan file',
154
- tags: ['Tools'],
155
- request: {
156
- query: z.object({ cwd: z.string().describe('Project working directory') }),
157
- body: {
158
- required: true,
159
- content: { 'application/json': { schema: executePlan.inputSchema } },
160
- },
161
- },
162
- responses: {
163
- 202: asyncResponse202,
164
- 400: { description: 'Request validation error' },
165
- 401: response401,
166
- },
167
- });
168
- registry.registerPath({
169
- method: 'post',
170
- path: '/retry',
171
- summary: 'Retry failed tasks from a previous batch',
172
- tags: ['Tools'],
173
- request: {
174
- query: z.object({ cwd: z.string().describe('Project working directory') }),
175
- body: {
176
- required: true,
177
- content: { 'application/json': { schema: retry.inputSchema } },
78
+ content: { 'application/json': { schema: row.schema } },
178
79
  },
179
80
  },
180
81
  responses: {
@@ -183,6 +84,12 @@ export function buildOpenApiDoc() {
183
84
  401: response401,
184
85
  },
185
86
  });
87
+ }
88
+ export function buildOpenApiDoc() {
89
+ const registry = new OpenAPIRegistry();
90
+ // ── Tool endpoints (POST, require cwd + auth) ───────────────────────────────
91
+ for (const row of TOOL_ENDPOINTS)
92
+ registerToolEndpoint(registry, row);
186
93
  // ── Control endpoints ───────────────────────────────────────────────────────
187
94
  registry.registerPath({
188
95
  method: 'get',