@zhixuan92/multi-model-agent-core 4.7.9 → 4.7.11
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.
- package/README.md +1 -72
- package/dist/bounded-execution/stall-watchdog.d.ts.map +1 -1
- package/dist/bounded-execution/stall-watchdog.js +28 -4
- package/dist/bounded-execution/stall-watchdog.js.map +1 -1
- package/dist/config/schema.d.ts +0 -2
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +0 -2
- package/dist/config/schema.js.map +1 -1
- package/dist/events/task-envelope.d.ts +11 -1
- package/dist/events/task-envelope.d.ts.map +1 -1
- package/dist/events/task-envelope.js +35 -4
- package/dist/events/task-envelope.js.map +1 -1
- package/dist/index.d.ts +0 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -8
- package/dist/index.js.map +1 -1
- package/dist/{review → lifecycle/handlers}/parse-review-report.d.ts +1 -1
- package/dist/lifecycle/handlers/parse-review-report.d.ts.map +1 -0
- package/dist/{review → lifecycle/handlers}/parse-review-report.js +2 -2
- package/dist/lifecycle/handlers/parse-review-report.js.map +1 -0
- package/dist/lifecycle/handlers/quality-review-prompt.d.ts +6 -0
- package/dist/lifecycle/handlers/quality-review-prompt.d.ts.map +1 -0
- package/dist/lifecycle/handlers/quality-review-prompt.js +42 -0
- package/dist/lifecycle/handlers/quality-review-prompt.js.map +1 -0
- package/dist/lifecycle/handlers/review-stage.js +4 -4
- package/dist/lifecycle/handlers/review-stage.js.map +1 -1
- package/dist/lifecycle/handlers/rework-prompt.d.ts +6 -0
- package/dist/lifecycle/handlers/rework-prompt.d.ts.map +1 -0
- package/dist/lifecycle/handlers/rework-prompt.js +18 -0
- package/dist/lifecycle/handlers/rework-prompt.js.map +1 -0
- package/dist/lifecycle/handlers/rework-stage.js +2 -2
- package/dist/lifecycle/handlers/rework-stage.js.map +1 -1
- package/dist/lifecycle/handlers/spec-review-prompt.d.ts +7 -0
- package/dist/lifecycle/handlers/spec-review-prompt.d.ts.map +1 -0
- package/dist/lifecycle/handlers/spec-review-prompt.js +39 -0
- package/dist/lifecycle/handlers/spec-review-prompt.js.map +1 -0
- package/dist/{review → lifecycle/handlers}/tier-policy.d.ts +1 -1
- package/dist/lifecycle/handlers/tier-policy.d.ts.map +1 -0
- package/dist/lifecycle/handlers/tier-policy.js.map +1 -0
- package/dist/lifecycle/lifecycle-driver.d.ts.map +1 -1
- package/dist/lifecycle/lifecycle-driver.js +14 -4
- package/dist/lifecycle/lifecycle-driver.js.map +1 -1
- package/dist/lifecycle/review-verdict-mapping.d.ts.map +1 -0
- package/dist/lifecycle/review-verdict-mapping.js.map +1 -0
- package/dist/lifecycle/task-executor.js +1 -1
- package/dist/lifecycle/task-executor.js.map +1 -1
- package/dist/lifecycle/tool-config-types.d.ts +0 -6
- package/dist/lifecycle/tool-config-types.d.ts.map +1 -1
- package/dist/providers/codex-cli-session.d.ts.map +1 -1
- package/dist/providers/codex-cli-session.js +39 -22
- package/dist/providers/codex-cli-session.js.map +1 -1
- package/dist/reporting/report-parser-slots/research-report.d.ts +0 -3
- package/dist/reporting/report-parser-slots/research-report.d.ts.map +1 -1
- package/dist/reporting/report-parser-slots/research-report.js +0 -5
- package/dist/reporting/report-parser-slots/research-report.js.map +1 -1
- package/dist/research/web-fetch.d.ts +24 -4
- package/dist/research/web-fetch.d.ts.map +1 -1
- package/dist/research/web-fetch.js +57 -42
- package/dist/research/web-fetch.js.map +1 -1
- package/dist/stores/batch-registry.d.ts +0 -15
- package/dist/stores/batch-registry.d.ts.map +1 -1
- package/dist/stores/batch-registry.js +2 -0
- package/dist/stores/batch-registry.js.map +1 -1
- package/dist/stores/project-context-registry.d.ts +4 -11
- package/dist/stores/project-context-registry.d.ts.map +1 -1
- package/dist/stores/project-context-registry.js +4 -6
- package/dist/stores/project-context-registry.js.map +1 -1
- package/dist/tools/audit/tool-config.d.ts.map +1 -1
- package/dist/tools/audit/tool-config.js +1 -5
- package/dist/tools/audit/tool-config.js.map +1 -1
- package/dist/tools/debug/tool-config.d.ts.map +1 -1
- package/dist/tools/debug/tool-config.js +1 -5
- package/dist/tools/debug/tool-config.js.map +1 -1
- package/dist/tools/delegate/tool-config.d.ts.map +1 -1
- package/dist/tools/delegate/tool-config.js +0 -6
- package/dist/tools/delegate/tool-config.js.map +1 -1
- package/dist/tools/execute-plan/tool-config.d.ts.map +1 -1
- package/dist/tools/execute-plan/tool-config.js +0 -6
- package/dist/tools/execute-plan/tool-config.js.map +1 -1
- package/dist/tools/investigate/tool-config.d.ts.map +1 -1
- package/dist/tools/investigate/tool-config.js +0 -4
- package/dist/tools/investigate/tool-config.js.map +1 -1
- package/dist/tools/review/tool-config.d.ts.map +1 -1
- package/dist/tools/review/tool-config.js +1 -5
- package/dist/tools/review/tool-config.js.map +1 -1
- package/dist/tools/shared/severity-ladder.d.ts +2 -0
- package/dist/tools/shared/severity-ladder.d.ts.map +1 -0
- package/dist/tools/shared/severity-ladder.js +9 -0
- package/dist/tools/shared/severity-ladder.js.map +1 -0
- package/dist/types/config.d.ts +0 -1
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types.d.ts +0 -10
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -49
- package/dist/review/index.d.ts +0 -5
- package/dist/review/index.d.ts.map +0 -1
- package/dist/review/index.js +0 -8
- package/dist/review/index.js.map +0 -1
- package/dist/review/parse-review-report.d.ts.map +0 -1
- package/dist/review/parse-review-report.js.map +0 -1
- package/dist/review/review-types.d.ts +0 -2
- package/dist/review/review-types.d.ts.map +0 -1
- package/dist/review/review-types.js +0 -6
- package/dist/review/review-types.js.map +0 -1
- package/dist/review/review-verdict-mapping.d.ts.map +0 -1
- package/dist/review/review-verdict-mapping.js.map +0 -1
- package/dist/review/skipped-result.d.ts +0 -8
- package/dist/review/skipped-result.d.ts.map +0 -1
- package/dist/review/skipped-result.js +0 -4
- package/dist/review/skipped-result.js.map +0 -1
- package/dist/review/templates/annotator-audit.d.ts +0 -3
- package/dist/review/templates/annotator-audit.d.ts.map +0 -1
- package/dist/review/templates/annotator-audit.js +0 -20
- package/dist/review/templates/annotator-audit.js.map +0 -1
- package/dist/review/templates/annotator-debug.d.ts +0 -3
- package/dist/review/templates/annotator-debug.d.ts.map +0 -1
- package/dist/review/templates/annotator-debug.js +0 -19
- package/dist/review/templates/annotator-debug.js.map +0 -1
- package/dist/review/templates/annotator-investigate.d.ts +0 -3
- package/dist/review/templates/annotator-investigate.d.ts.map +0 -1
- package/dist/review/templates/annotator-investigate.js +0 -17
- package/dist/review/templates/annotator-investigate.js.map +0 -1
- package/dist/review/templates/annotator-review.d.ts +0 -3
- package/dist/review/templates/annotator-review.d.ts.map +0 -1
- package/dist/review/templates/annotator-review.js +0 -22
- package/dist/review/templates/annotator-review.js.map +0 -1
- package/dist/review/templates/annotator-shared.d.ts +0 -23
- package/dist/review/templates/annotator-shared.d.ts.map +0 -1
- package/dist/review/templates/annotator-shared.js +0 -51
- package/dist/review/templates/annotator-shared.js.map +0 -1
- package/dist/review/templates/finding-criteria.d.ts +0 -15
- package/dist/review/templates/finding-criteria.d.ts.map +0 -1
- package/dist/review/templates/finding-criteria.js +0 -39
- package/dist/review/templates/finding-criteria.js.map +0 -1
- package/dist/review/templates/quality-review-audit.d.ts +0 -3
- package/dist/review/templates/quality-review-audit.d.ts.map +0 -1
- package/dist/review/templates/quality-review-audit.js +0 -10
- package/dist/review/templates/quality-review-audit.js.map +0 -1
- package/dist/review/templates/quality-review-debug.d.ts +0 -3
- package/dist/review/templates/quality-review-debug.d.ts.map +0 -1
- package/dist/review/templates/quality-review-debug.js +0 -10
- package/dist/review/templates/quality-review-debug.js.map +0 -1
- package/dist/review/templates/quality-review-investigate.d.ts +0 -3
- package/dist/review/templates/quality-review-investigate.d.ts.map +0 -1
- package/dist/review/templates/quality-review-investigate.js +0 -10
- package/dist/review/templates/quality-review-investigate.js.map +0 -1
- package/dist/review/templates/quality-review-review.d.ts +0 -3
- package/dist/review/templates/quality-review-review.d.ts.map +0 -1
- package/dist/review/templates/quality-review-review.js +0 -10
- package/dist/review/templates/quality-review-review.js.map +0 -1
- package/dist/review/templates/quality-review.d.ts +0 -9
- package/dist/review/templates/quality-review.d.ts.map +0 -1
- package/dist/review/templates/quality-review.js +0 -89
- package/dist/review/templates/quality-review.js.map +0 -1
- package/dist/review/templates/rework.d.ts +0 -3
- package/dist/review/templates/rework.d.ts.map +0 -1
- package/dist/review/templates/rework.js +0 -48
- package/dist/review/templates/rework.js.map +0 -1
- package/dist/review/templates/shared.d.ts +0 -67
- package/dist/review/templates/shared.d.ts.map +0 -1
- package/dist/review/templates/shared.js +0 -2
- package/dist/review/templates/shared.js.map +0 -1
- package/dist/review/templates/spec-review.d.ts +0 -10
- package/dist/review/templates/spec-review.d.ts.map +0 -1
- package/dist/review/templates/spec-review.js +0 -75
- package/dist/review/templates/spec-review.js.map +0 -1
- package/dist/review/tier-policy.d.ts.map +0 -1
- package/dist/review/tier-policy.js.map +0 -1
- package/dist/stores/context-block-project-cap.d.ts +0 -14
- package/dist/stores/context-block-project-cap.d.ts.map +0 -1
- package/dist/stores/context-block-project-cap.js +0 -80
- package/dist/stores/context-block-project-cap.js.map +0 -1
- package/dist/stores/file-backed-context-block-store.d.ts +0 -81
- package/dist/stores/file-backed-context-block-store.d.ts.map +0 -1
- package/dist/stores/file-backed-context-block-store.js +0 -410
- package/dist/stores/file-backed-context-block-store.js.map +0 -1
- package/dist/stores/index.d.ts +0 -4
- package/dist/stores/index.d.ts.map +0 -1
- package/dist/stores/index.js +0 -5
- package/dist/stores/index.js.map +0 -1
- package/dist/tool-surface/discover.d.ts +0 -29
- package/dist/tool-surface/discover.d.ts.map +0 -1
- package/dist/tool-surface/discover.js +0 -102
- package/dist/tool-surface/discover.js.map +0 -1
- package/dist/tool-surface/include-utils.d.ts +0 -27
- package/dist/tool-surface/include-utils.d.ts.map +0 -1
- package/dist/tool-surface/include-utils.js +0 -90
- package/dist/tool-surface/include-utils.js.map +0 -1
- package/dist/tool-surface/index.d.ts +0 -6
- package/dist/tool-surface/index.d.ts.map +0 -1
- package/dist/tool-surface/index.js +0 -7
- package/dist/tool-surface/index.js.map +0 -1
- package/dist/tool-surface/manifest.d.ts +0 -94
- package/dist/tool-surface/manifest.d.ts.map +0 -1
- package/dist/tool-surface/manifest.js +0 -234
- package/dist/tool-surface/manifest.js.map +0 -1
- package/dist/tool-surface/openapi-generator.d.ts +0 -15
- package/dist/tool-surface/openapi-generator.d.ts.map +0 -1
- package/dist/tool-surface/openapi-generator.js +0 -259
- package/dist/tool-surface/openapi-generator.js.map +0 -1
- package/dist/tool-surface/skill-installer-common.d.ts +0 -48
- package/dist/tool-surface/skill-installer-common.d.ts.map +0 -1
- package/dist/tool-surface/skill-installer-common.js +0 -195
- package/dist/tool-surface/skill-installer-common.js.map +0 -1
- package/dist/tool-surface/skill-installer.d.ts +0 -10
- package/dist/tool-surface/skill-installer.d.ts.map +0 -1
- package/dist/tool-surface/skill-installer.js +0 -20
- package/dist/tool-surface/skill-installer.js.map +0 -1
- package/dist/tool-surface/skill-installers/claude-code.d.ts +0 -43
- package/dist/tool-surface/skill-installers/claude-code.d.ts.map +0 -1
- package/dist/tool-surface/skill-installers/claude-code.js +0 -65
- package/dist/tool-surface/skill-installers/claude-code.js.map +0 -1
- package/dist/tool-surface/skill-installers/codex-cli.d.ts +0 -27
- package/dist/tool-surface/skill-installers/codex-cli.d.ts.map +0 -1
- package/dist/tool-surface/skill-installers/codex-cli.js +0 -84
- package/dist/tool-surface/skill-installers/codex-cli.js.map +0 -1
- package/dist/tool-surface/skill-installers/cursor.d.ts +0 -72
- package/dist/tool-surface/skill-installers/cursor.d.ts.map +0 -1
- package/dist/tool-surface/skill-installers/cursor.js +0 -81
- package/dist/tool-surface/skill-installers/cursor.js.map +0 -1
- package/dist/tool-surface/skill-installers/gemini-cli.d.ts +0 -66
- package/dist/tool-surface/skill-installers/gemini-cli.d.ts.map +0 -1
- package/dist/tool-surface/skill-installers/gemini-cli.js +0 -111
- package/dist/tool-surface/skill-installers/gemini-cli.js.map +0 -1
- package/dist/tool-surface/skill-manifest-sync.d.ts +0 -11
- package/dist/tool-surface/skill-manifest-sync.d.ts.map +0 -1
- package/dist/tool-surface/skill-manifest-sync.js +0 -65
- package/dist/tool-surface/skill-manifest-sync.js.map +0 -1
- /package/dist/{review → lifecycle/handlers}/tier-policy.js +0 -0
- /package/dist/{review → lifecycle}/review-verdict-mapping.d.ts +0 -0
- /package/dist/{review → lifecycle}/review-verdict-mapping.js +0 -0
|
@@ -1,259 +0,0 @@
|
|
|
1
|
-
// packages/server/src/openapi.ts
|
|
2
|
-
//
|
|
3
|
-
// Builds the OpenAPI 3.0 document that describes all endpoints of the
|
|
4
|
-
// multi-model-agent HTTP server.
|
|
5
|
-
//
|
|
6
|
-
// Uses @asteasolutions/zod-to-openapi to convert each tool's Zod inputSchema
|
|
7
|
-
// directly into OpenAPI request body schemas.
|
|
8
|
-
import { z } from 'zod';
|
|
9
|
-
import { extendZodWithOpenApi, OpenAPIRegistry, OpenApiGeneratorV3, } from '@asteasolutions/zod-to-openapi';
|
|
10
|
-
import * as delegate from '../tools/delegate/schema.js';
|
|
11
|
-
import * as audit from '../tools/audit/schema.js';
|
|
12
|
-
import * as review from '../tools/review/schema.js';
|
|
13
|
-
import * as debug from '../tools/debug/schema.js';
|
|
14
|
-
import * as executePlan from '../tools/execute-plan/schema.js';
|
|
15
|
-
import * as retry from '../tools/retry/schema.js';
|
|
16
|
-
import * as investigate from '../tools/investigate/schema.js';
|
|
17
|
-
import * as research from '../tools/research/schema.js';
|
|
18
|
-
// Extend Zod once with openapi support.
|
|
19
|
-
extendZodWithOpenApi(z);
|
|
20
|
-
/** Sort an object's keys recursively for deterministic JSON serialization. */
|
|
21
|
-
function sortKeys(obj) {
|
|
22
|
-
if (obj === null || typeof obj !== 'object')
|
|
23
|
-
return obj;
|
|
24
|
-
if (Array.isArray(obj))
|
|
25
|
-
return obj.map(sortKeys);
|
|
26
|
-
const sorted = {};
|
|
27
|
-
for (const key of Object.keys(obj).sort()) {
|
|
28
|
-
sorted[key] = sortKeys(obj[key]);
|
|
29
|
-
}
|
|
30
|
-
return sorted;
|
|
31
|
-
}
|
|
32
|
-
// ── v4.0 component schemas ───────────────────────────────────────────────────
|
|
33
|
-
/** 4-field token usage shape (v4.0). */
|
|
34
|
-
const tokenUsageSchema = z.object({
|
|
35
|
-
inputTokens: z.number().int().min(0).describe('Prompt/input tokens consumed'),
|
|
36
|
-
outputTokens: z.number().int().min(0).describe('Completion/output tokens produced'),
|
|
37
|
-
cachedReadTokens: z.number().int().min(0).describe('Input tokens served from cache read'),
|
|
38
|
-
cachedNonReadTokens: z.number().int().min(0).describe('Input tokens written to cache but not read'),
|
|
39
|
-
});
|
|
40
|
-
/** v4.0 output envelope (terminal response shape). */
|
|
41
|
-
const outputEnvelopeSchema = z.object({
|
|
42
|
-
headline: z.string().min(1).describe('One-line summary of the outcome'),
|
|
43
|
-
results: z.array(z.unknown()).describe('Per-task result items'),
|
|
44
|
-
batchTimings: z.object({}).passthrough().describe('Wall-clock and per-phase timings'),
|
|
45
|
-
costSummary: z.object({
|
|
46
|
-
totalCostUSD: z.number().min(0).describe('Total estimated cost in USD'),
|
|
47
|
-
tokenUsage: tokenUsageSchema.describe('Aggregated token consumption'),
|
|
48
|
-
}).passthrough().describe('Cost and token metering summary'),
|
|
49
|
-
structuredReport: z.object({}).passthrough().describe('Structured report object (tool-specific schema)'),
|
|
50
|
-
error: z.object({
|
|
51
|
-
code: z.string().min(1),
|
|
52
|
-
message: z.string().min(1),
|
|
53
|
-
details: z.unknown().optional(),
|
|
54
|
-
}).optional().describe('Terminal error if the batch failed'),
|
|
55
|
-
annotatorConfidence: z.number().min(0).max(1).optional()
|
|
56
|
-
.describe('Annotator confidence score (0-1) when the review policy produced annotations'),
|
|
57
|
-
specReviewVerdict: z.enum(['approved', 'concerns', 'changes_required', 'annotated', 'error', 'skipped', 'not_applicable']).optional(),
|
|
58
|
-
qualityReviewVerdict: z.enum(['approved', 'concerns', 'changes_required', 'annotated', 'error', 'skipped', 'not_applicable']).optional(),
|
|
59
|
-
roundsUsed: z.number().int().min(0).optional().describe('Number of agent rounds consumed'),
|
|
60
|
-
blockId: z.string().optional().describe('Terminal context block id registered automatically for this task'),
|
|
61
|
-
}).passthrough();
|
|
62
|
-
/** Shared 202 response for async tool endpoints. */
|
|
63
|
-
const asyncResponse202 = {
|
|
64
|
-
description: 'Accepted — batch created',
|
|
65
|
-
content: {
|
|
66
|
-
'application/json': {
|
|
67
|
-
schema: z.object({
|
|
68
|
-
batchId: z.string().describe('Unique batch identifier for polling via GET /batch/:batchId'),
|
|
69
|
-
statusUrl: z.string().describe('Full URL to poll for this batch'),
|
|
70
|
-
}),
|
|
71
|
-
},
|
|
72
|
-
},
|
|
73
|
-
};
|
|
74
|
-
/** Shared `cwd` query parameter (required by all tool endpoints). */
|
|
75
|
-
const cwdQueryParam = {
|
|
76
|
-
name: 'cwd',
|
|
77
|
-
in: 'query',
|
|
78
|
-
required: true,
|
|
79
|
-
description: 'Absolute path to the project working directory',
|
|
80
|
-
schema: { type: 'string' },
|
|
81
|
-
};
|
|
82
|
-
/** Standard 401 error response. */
|
|
83
|
-
const response401 = { description: 'Missing or invalid Bearer token' };
|
|
84
|
-
/** Standard 403 error response. */
|
|
85
|
-
const response403 = { description: 'Forbidden (loopback-only or path traversal)' };
|
|
86
|
-
/** Standard 404 error response. */
|
|
87
|
-
const response404 = { description: 'Resource not found' };
|
|
88
|
-
// Tool-endpoint registration table. Each row contributes one path with the
|
|
89
|
-
// shared shape: POST /<path>?cwd=<abs>, JSON body, async 202 response.
|
|
90
|
-
const TOOL_ENDPOINTS = [
|
|
91
|
-
{ path: '/delegate', summary: 'Dispatch tasks to sub-agents', schema: delegate.inputSchema },
|
|
92
|
-
{ path: '/audit', summary: 'Audit documents or files', schema: audit.inputSchema },
|
|
93
|
-
{ path: '/review', summary: 'Review code for quality and security', schema: review.inputSchema },
|
|
94
|
-
{ path: '/debug', summary: 'Debug a problem with sub-agent assistance', schema: debug.inputSchema },
|
|
95
|
-
{ path: '/execute-plan', summary: 'Execute tasks from a plan file', schema: executePlan.inputSchema },
|
|
96
|
-
{ path: '/retry', summary: 'Retry failed tasks from a previous batch', schema: retry.inputSchema },
|
|
97
|
-
{
|
|
98
|
-
path: '/investigate',
|
|
99
|
-
summary: 'Investigate the codebase and answer a question with structured citations',
|
|
100
|
-
schema: investigate.inputSchema,
|
|
101
|
-
},
|
|
102
|
-
{
|
|
103
|
-
path: '/research',
|
|
104
|
-
summary: 'External multi-source research with citations (arxiv, semantic_scholar, github_search, rss, brave-with-site:-filters)',
|
|
105
|
-
schema: research.inputSchema,
|
|
106
|
-
},
|
|
107
|
-
];
|
|
108
|
-
function registerToolEndpoint(registry, row) {
|
|
109
|
-
registry.registerPath({
|
|
110
|
-
method: 'post',
|
|
111
|
-
path: row.path,
|
|
112
|
-
summary: row.summary,
|
|
113
|
-
tags: ['Tools'],
|
|
114
|
-
request: {
|
|
115
|
-
query: z.object({ cwd: z.string().describe('Project working directory') }),
|
|
116
|
-
body: {
|
|
117
|
-
required: true,
|
|
118
|
-
content: { 'application/json': { schema: row.schema } },
|
|
119
|
-
},
|
|
120
|
-
},
|
|
121
|
-
responses: {
|
|
122
|
-
202: asyncResponse202,
|
|
123
|
-
400: { description: 'Request validation error' },
|
|
124
|
-
401: response401,
|
|
125
|
-
},
|
|
126
|
-
});
|
|
127
|
-
}
|
|
128
|
-
export function buildOpenApiDoc() {
|
|
129
|
-
const registry = new OpenAPIRegistry();
|
|
130
|
-
// ── Component schemas ───────────────────────────────────────────────────────
|
|
131
|
-
registry.register('TokenUsage', tokenUsageSchema);
|
|
132
|
-
registry.register('OutputEnvelope', outputEnvelopeSchema);
|
|
133
|
-
// ── Tool endpoints (POST, require cwd + auth) ───────────────────────────────
|
|
134
|
-
for (const row of TOOL_ENDPOINTS)
|
|
135
|
-
registerToolEndpoint(registry, row);
|
|
136
|
-
// ── Control endpoints ───────────────────────────────────────────────────────
|
|
137
|
-
registry.registerPath({
|
|
138
|
-
method: 'get',
|
|
139
|
-
path: '/batch/{batchId}',
|
|
140
|
-
summary: 'Poll batch status',
|
|
141
|
-
tags: ['Control'],
|
|
142
|
-
request: {
|
|
143
|
-
params: z.object({ batchId: z.string().describe('Batch identifier') }),
|
|
144
|
-
query: z.object({
|
|
145
|
-
taskIndex: z.string().optional().describe('Zero-based task index for result slicing'),
|
|
146
|
-
}),
|
|
147
|
-
},
|
|
148
|
-
responses: {
|
|
149
|
-
200: {
|
|
150
|
-
description: 'Batch state — pending returns { status: "pending" }; complete returns the OutputEnvelope; failed returns OutputEnvelope with error; expired returns { status: "expired" }',
|
|
151
|
-
content: {
|
|
152
|
-
'application/json': {
|
|
153
|
-
schema: z.union([
|
|
154
|
-
z.object({ status: z.enum(['pending', 'expired']) }),
|
|
155
|
-
outputEnvelopeSchema,
|
|
156
|
-
]),
|
|
157
|
-
},
|
|
158
|
-
},
|
|
159
|
-
},
|
|
160
|
-
401: response401,
|
|
161
|
-
404: response404,
|
|
162
|
-
},
|
|
163
|
-
});
|
|
164
|
-
registry.registerPath({
|
|
165
|
-
method: 'post',
|
|
166
|
-
path: '/context-blocks',
|
|
167
|
-
summary: 'Register a context block',
|
|
168
|
-
tags: ['Control'],
|
|
169
|
-
request: {
|
|
170
|
-
query: z.object({ cwd: z.string().describe('Project working directory') }),
|
|
171
|
-
body: {
|
|
172
|
-
required: true,
|
|
173
|
-
content: {
|
|
174
|
-
'application/json': {
|
|
175
|
-
schema: z.object({
|
|
176
|
-
content: z.string().describe('Block content (plain text or markdown)'),
|
|
177
|
-
label: z.string().optional().describe('Human-readable label'),
|
|
178
|
-
}),
|
|
179
|
-
},
|
|
180
|
-
},
|
|
181
|
-
},
|
|
182
|
-
},
|
|
183
|
-
responses: {
|
|
184
|
-
201: { description: 'Block created' },
|
|
185
|
-
400: { description: 'Validation error or content too large' },
|
|
186
|
-
401: response401,
|
|
187
|
-
},
|
|
188
|
-
});
|
|
189
|
-
registry.registerPath({
|
|
190
|
-
method: 'delete',
|
|
191
|
-
path: '/context-blocks/{blockId}',
|
|
192
|
-
summary: 'Delete a context block',
|
|
193
|
-
tags: ['Control'],
|
|
194
|
-
request: {
|
|
195
|
-
params: z.object({ blockId: z.string().describe('Context block identifier') }),
|
|
196
|
-
query: z.object({ cwd: z.string().describe('Project working directory') }),
|
|
197
|
-
},
|
|
198
|
-
responses: {
|
|
199
|
-
200: { description: 'Block deleted (or was already absent)' },
|
|
200
|
-
401: response401,
|
|
201
|
-
},
|
|
202
|
-
});
|
|
203
|
-
// ── Introspection endpoints ─────────────────────────────────────────────────
|
|
204
|
-
registry.registerPath({
|
|
205
|
-
method: 'get',
|
|
206
|
-
path: '/health',
|
|
207
|
-
summary: 'Liveness + skill manifest drift check — no auth required',
|
|
208
|
-
tags: ['Introspection'],
|
|
209
|
-
responses: {
|
|
210
|
-
200: {
|
|
211
|
-
description: 'Server is alive; status=ok when all installed skills match the manifest, status=drift when one or more skills are missing, outdated, or orphaned',
|
|
212
|
-
content: {
|
|
213
|
-
'application/json': {
|
|
214
|
-
schema: z.union([
|
|
215
|
-
z.object({ status: z.literal('ok') }),
|
|
216
|
-
z.object({
|
|
217
|
-
status: z.literal('drift'),
|
|
218
|
-
drift: z.array(z.object({
|
|
219
|
-
skill: z.string(),
|
|
220
|
-
client: z.string(),
|
|
221
|
-
issue: z.enum(['missing', 'outdated', 'orphan']),
|
|
222
|
-
})),
|
|
223
|
-
}),
|
|
224
|
-
]),
|
|
225
|
-
},
|
|
226
|
-
},
|
|
227
|
-
},
|
|
228
|
-
},
|
|
229
|
-
});
|
|
230
|
-
registry.registerPath({
|
|
231
|
-
method: 'get',
|
|
232
|
-
path: '/status',
|
|
233
|
-
summary: 'Operator status — loopback + auth required',
|
|
234
|
-
tags: ['Introspection'],
|
|
235
|
-
responses: {
|
|
236
|
-
200: { description: 'Server status object (§5.10)' },
|
|
237
|
-
401: response401,
|
|
238
|
-
403: response403,
|
|
239
|
-
},
|
|
240
|
-
});
|
|
241
|
-
// ── Generate ────────────────────────────────────────────────────────────────
|
|
242
|
-
const generator = new OpenApiGeneratorV3(registry.definitions);
|
|
243
|
-
const doc = generator.generateDocument({
|
|
244
|
-
openapi: '3.0.3',
|
|
245
|
-
info: {
|
|
246
|
-
title: 'multi-model-agent',
|
|
247
|
-
version: '4.0.0',
|
|
248
|
-
},
|
|
249
|
-
});
|
|
250
|
-
// Return a key-sorted version for deterministic golden comparisons
|
|
251
|
-
return sortKeys(doc);
|
|
252
|
-
}
|
|
253
|
-
/** Utility: serialize the OpenAPI doc with sorted keys for golden snapshots. */
|
|
254
|
-
export function serializeOpenApiDoc(doc) {
|
|
255
|
-
return JSON.stringify(doc, null, 2);
|
|
256
|
-
}
|
|
257
|
-
// Re-export cwdQueryParam for tests / external use
|
|
258
|
-
export { cwdQueryParam };
|
|
259
|
-
//# sourceMappingURL=openapi-generator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"openapi-generator.js","sourceRoot":"","sources":["../../src/tool-surface/openapi-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import type { Client, ManifestEntry } from './manifest.js';
|
|
2
|
-
export type HeaderClientName = 'claude-code' | 'cursor' | 'codex-cli' | 'gemini-cli';
|
|
3
|
-
export declare function clientHeaders(client: HeaderClientName): {
|
|
4
|
-
'X-MMA-Client': HeaderClientName;
|
|
5
|
-
};
|
|
6
|
-
export declare function toHeaderClientName(client: Client): HeaderClientName;
|
|
7
|
-
export declare function notifySkillInstalled(opts: {
|
|
8
|
-
skillId: string;
|
|
9
|
-
client: string;
|
|
10
|
-
fetch?: typeof globalThis.fetch;
|
|
11
|
-
}): void;
|
|
12
|
-
export interface MissingSkill {
|
|
13
|
-
name: string;
|
|
14
|
-
targets: Client[];
|
|
15
|
-
}
|
|
16
|
-
export declare function findMissingSkills(manifestEntries: ManifestEntry[], supportedSkills: readonly string[]): MissingSkill[];
|
|
17
|
-
export declare function findOrphanedSkills(manifestEntries: ManifestEntry[], supportedSkills: readonly string[]): ManifestEntry[];
|
|
18
|
-
export declare function resolveClientInstallDir(target: Client, homeDir: string): string | null;
|
|
19
|
-
export declare class UnknownTargetError extends Error {
|
|
20
|
-
readonly code: "unknown_target";
|
|
21
|
-
constructor(target: string, valid: readonly Client[]);
|
|
22
|
-
}
|
|
23
|
-
export declare function writeSkillToClient(skillName: string, content: string, target: Client, homeDir: string, skillsRoot: string, version?: string, cwd?: string, force?: boolean): void;
|
|
24
|
-
export declare function removeSkillFromClient(skillName: string, target: Client, homeDir: string, cwd?: string): void;
|
|
25
|
-
export interface InstallResult {
|
|
26
|
-
skill: string;
|
|
27
|
-
action: 'installed' | 'uninstalled';
|
|
28
|
-
targets: Client[];
|
|
29
|
-
skipped: Client[];
|
|
30
|
-
dryRun: boolean;
|
|
31
|
-
orphanedSkills?: Partial<Record<Client, string[]>>;
|
|
32
|
-
}
|
|
33
|
-
export declare function activeCleanup(installDir: string, canonicalSkills: readonly string[]): string[];
|
|
34
|
-
export declare function doInstall(skillName: string, targets: Client[], opts: {
|
|
35
|
-
dryRun: boolean;
|
|
36
|
-
homeDir: string;
|
|
37
|
-
skillsRoot?: string;
|
|
38
|
-
version?: string;
|
|
39
|
-
cwd?: string;
|
|
40
|
-
force?: boolean;
|
|
41
|
-
cleanupOrphans?: boolean;
|
|
42
|
-
}): InstallResult;
|
|
43
|
-
export declare function doUninstall(skillName: string, targets: Client[], opts: {
|
|
44
|
-
dryRun: boolean;
|
|
45
|
-
homeDir: string;
|
|
46
|
-
cwd?: string;
|
|
47
|
-
}): InstallResult;
|
|
48
|
-
//# sourceMappingURL=skill-installer-common.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skill-installer-common.d.ts","sourceRoot":"","sources":["../../src/tool-surface/skill-installer-common.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,195 +0,0 @@
|
|
|
1
|
-
// Shared skill-install utilities. Per architecture.md:188-194, each client
|
|
2
|
-
// gets its own writer under skill-installers/; this file holds the dispatch
|
|
3
|
-
// layer, orchestration, missing-skill detection, and outbound headers/notify
|
|
4
|
-
// code that was previously scattered across packages/server/src/install/.
|
|
5
|
-
//
|
|
6
|
-
// @module
|
|
7
|
-
import fs from 'node:fs';
|
|
8
|
-
import path from 'node:path';
|
|
9
|
-
import { SkillNotFoundError, getSkillsRoot, readSkillContent, SUPPORTED_SKILLS, } from './discover.js';
|
|
10
|
-
import { installClaudeCode, uninstallClaudeCode } from './skill-installers/claude-code.js';
|
|
11
|
-
import { installGeminiCli, uninstallGeminiCli } from './skill-installers/gemini-cli.js';
|
|
12
|
-
import { installCodexCli, uninstallCodexCli } from './skill-installers/codex-cli.js';
|
|
13
|
-
import { installCursor, uninstallCursor } from './skill-installers/cursor.js';
|
|
14
|
-
export function clientHeaders(client) {
|
|
15
|
-
return { 'X-MMA-Client': client };
|
|
16
|
-
}
|
|
17
|
-
export function toHeaderClientName(client) {
|
|
18
|
-
switch (client) {
|
|
19
|
-
case 'claude-code': return 'claude-code';
|
|
20
|
-
case 'cursor': return 'cursor';
|
|
21
|
-
case 'codex': return 'codex-cli';
|
|
22
|
-
case 'gemini': return 'gemini-cli';
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
// ── Notify (was server/src/install/notify.ts) ──────────────────────────────
|
|
26
|
-
export function notifySkillInstalled(opts) {
|
|
27
|
-
const headerClient = toHeaderClientName(opts.client);
|
|
28
|
-
const _fetch = opts.fetch ?? globalThis.fetch;
|
|
29
|
-
_fetch('http://localhost:7331/v1/events', {
|
|
30
|
-
method: 'POST',
|
|
31
|
-
headers: { 'X-MMA-Client': headerClient, 'Content-Type': 'application/json' },
|
|
32
|
-
body: JSON.stringify({ event: 'skill_installed', skillId: opts.skillId, client: opts.client }),
|
|
33
|
-
}).catch(() => { });
|
|
34
|
-
}
|
|
35
|
-
export function findMissingSkills(manifestEntries, supportedSkills) {
|
|
36
|
-
if (manifestEntries.length === 0)
|
|
37
|
-
return [];
|
|
38
|
-
const targets = unionTargets(manifestEntries);
|
|
39
|
-
if (targets.length === 0)
|
|
40
|
-
return [];
|
|
41
|
-
const installedNames = new Set(manifestEntries.map((e) => e.name));
|
|
42
|
-
return supportedSkills
|
|
43
|
-
.filter((name) => !installedNames.has(name))
|
|
44
|
-
.map((name) => ({ name, targets: [...targets] }));
|
|
45
|
-
}
|
|
46
|
-
export function findOrphanedSkills(manifestEntries, supportedSkills) {
|
|
47
|
-
return manifestEntries.filter((e) => !supportedSkills.includes(e.name));
|
|
48
|
-
}
|
|
49
|
-
function unionTargets(entries) {
|
|
50
|
-
const seen = new Set();
|
|
51
|
-
const out = [];
|
|
52
|
-
for (const e of entries) {
|
|
53
|
-
for (const t of e.targets) {
|
|
54
|
-
if (!seen.has(t)) {
|
|
55
|
-
seen.add(t);
|
|
56
|
-
out.push(t);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
return out;
|
|
61
|
-
}
|
|
62
|
-
// ── Per-client dispatch (was server/src/install/manifest-resolve.ts) ────────
|
|
63
|
-
export function resolveClientInstallDir(target, homeDir) {
|
|
64
|
-
switch (target) {
|
|
65
|
-
case 'claude-code':
|
|
66
|
-
return path.join(homeDir, '.claude', 'skills');
|
|
67
|
-
case 'codex':
|
|
68
|
-
return path.join(homeDir, '.codex', 'skills');
|
|
69
|
-
default:
|
|
70
|
-
return null;
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
export class UnknownTargetError extends Error {
|
|
74
|
-
code = 'unknown_target';
|
|
75
|
-
constructor(target, valid) {
|
|
76
|
-
super(`Unknown target: ${target}. Valid: ${valid.join(', ')}`);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
export function writeSkillToClient(skillName, content, target, homeDir, skillsRoot, version = '0.0.0', cwd = process.cwd(), force = false) {
|
|
80
|
-
switch (target) {
|
|
81
|
-
case 'claude-code':
|
|
82
|
-
installClaudeCode({ skillName, content, homeDir, skillsRoot });
|
|
83
|
-
notifySkillInstalled({ skillId: skillName, client: target });
|
|
84
|
-
break;
|
|
85
|
-
case 'gemini':
|
|
86
|
-
installGeminiCli({ skillName, content, skillVersion: version, homeDir, skillsRoot });
|
|
87
|
-
notifySkillInstalled({ skillId: skillName, client: target });
|
|
88
|
-
break;
|
|
89
|
-
case 'codex':
|
|
90
|
-
installCodexCli({ skillName, content, homeDir, skillsRoot });
|
|
91
|
-
notifySkillInstalled({ skillId: skillName, client: target });
|
|
92
|
-
break;
|
|
93
|
-
case 'cursor':
|
|
94
|
-
installCursor({ content, cwd, homeDir, skillsRoot, force });
|
|
95
|
-
notifySkillInstalled({ skillId: skillName, client: target });
|
|
96
|
-
break;
|
|
97
|
-
default: {
|
|
98
|
-
const _exhaustive = target;
|
|
99
|
-
throw new Error(`install-skill: unknown target: ${_exhaustive}`);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
export function removeSkillFromClient(skillName, target, homeDir, cwd = process.cwd()) {
|
|
104
|
-
switch (target) {
|
|
105
|
-
case 'claude-code':
|
|
106
|
-
uninstallClaudeCode(skillName, homeDir);
|
|
107
|
-
break;
|
|
108
|
-
case 'gemini':
|
|
109
|
-
uninstallGeminiCli(homeDir);
|
|
110
|
-
break;
|
|
111
|
-
case 'codex':
|
|
112
|
-
uninstallCodexCli(skillName, homeDir);
|
|
113
|
-
break;
|
|
114
|
-
case 'cursor':
|
|
115
|
-
uninstallCursor(cwd);
|
|
116
|
-
break;
|
|
117
|
-
default: {
|
|
118
|
-
const _exhaustive = target;
|
|
119
|
-
throw new Error(`install-skill: unknown target: ${_exhaustive}`);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
export function activeCleanup(installDir, canonicalSkills) {
|
|
124
|
-
let entries;
|
|
125
|
-
try {
|
|
126
|
-
entries = fs.readdirSync(installDir);
|
|
127
|
-
}
|
|
128
|
-
catch {
|
|
129
|
-
return [];
|
|
130
|
-
}
|
|
131
|
-
const present = entries.filter((name) => name.startsWith('mma-'));
|
|
132
|
-
const orphaned = present.filter((name) => !canonicalSkills.includes(name));
|
|
133
|
-
for (const orphan of orphaned) {
|
|
134
|
-
const dirPath = path.join(installDir, orphan);
|
|
135
|
-
fs.rmSync(dirPath, { recursive: true, force: true });
|
|
136
|
-
}
|
|
137
|
-
return orphaned;
|
|
138
|
-
}
|
|
139
|
-
export function doInstall(skillName, targets, opts) {
|
|
140
|
-
const checkedPath = path.join(getSkillsRoot(opts.skillsRoot), skillName, 'SKILL.md');
|
|
141
|
-
const content = readSkillContent(skillName, opts.skillsRoot);
|
|
142
|
-
if (!content) {
|
|
143
|
-
throw new SkillNotFoundError(skillName, checkedPath);
|
|
144
|
-
}
|
|
145
|
-
const skillsRoot = getSkillsRoot(opts.skillsRoot);
|
|
146
|
-
const version = opts.version ?? '0.0.0';
|
|
147
|
-
const cwd = opts.cwd ?? process.cwd();
|
|
148
|
-
const installed = [];
|
|
149
|
-
const skipped = [];
|
|
150
|
-
for (const target of targets) {
|
|
151
|
-
if (opts.dryRun) {
|
|
152
|
-
skipped.push(target);
|
|
153
|
-
}
|
|
154
|
-
else {
|
|
155
|
-
writeSkillToClient(skillName, content, target, opts.homeDir, skillsRoot, version, cwd, opts.force);
|
|
156
|
-
installed.push(target);
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
let orphanedSkills;
|
|
160
|
-
if (opts.cleanupOrphans && !opts.dryRun) {
|
|
161
|
-
orphanedSkills = {};
|
|
162
|
-
for (const target of targets) {
|
|
163
|
-
const installDir = resolveClientInstallDir(target, opts.homeDir);
|
|
164
|
-
if (installDir !== null) {
|
|
165
|
-
const removed = activeCleanup(installDir, SUPPORTED_SKILLS);
|
|
166
|
-
if (removed.length > 0)
|
|
167
|
-
orphanedSkills[target] = removed;
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
return {
|
|
172
|
-
skill: skillName,
|
|
173
|
-
action: 'installed',
|
|
174
|
-
targets: installed,
|
|
175
|
-
skipped,
|
|
176
|
-
dryRun: opts.dryRun,
|
|
177
|
-
...(orphanedSkills ? { orphanedSkills } : {}),
|
|
178
|
-
};
|
|
179
|
-
}
|
|
180
|
-
export function doUninstall(skillName, targets, opts) {
|
|
181
|
-
const cwd = opts.cwd ?? process.cwd();
|
|
182
|
-
const installed = [];
|
|
183
|
-
const skipped = [];
|
|
184
|
-
for (const target of targets) {
|
|
185
|
-
if (opts.dryRun) {
|
|
186
|
-
skipped.push(target);
|
|
187
|
-
}
|
|
188
|
-
else {
|
|
189
|
-
removeSkillFromClient(skillName, target, opts.homeDir, cwd);
|
|
190
|
-
installed.push(target);
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
return { skill: skillName, action: 'uninstalled', targets: installed, skipped, dryRun: opts.dryRun };
|
|
194
|
-
}
|
|
195
|
-
//# sourceMappingURL=skill-installer-common.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skill-installer-common.js","sourceRoot":"","sources":["../../src/tool-surface/skill-installer-common.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export { detectClients, ALL_CLIENTS } from './manifest.js';
|
|
2
|
-
export type { Client, InstallManifest, ManifestEntry } from './manifest.js';
|
|
3
|
-
export { manifestPath, manifestDir, listEntries, getEntry, appendEntry, removeEntry, isInstalled, FutureManifestError, ManifestParseError, ManifestSchemaValidationError, } from './manifest.js';
|
|
4
|
-
export { SUPPORTED_SKILLS, SkillNotFoundError, getSkillsRoot, readSkillContent, discoverPerClientInstallDirs, } from './discover.js';
|
|
5
|
-
export { installClaudeCode, uninstallClaudeCode } from './skill-installers/claude-code.js';
|
|
6
|
-
export { installCodexCli, uninstallCodexCli } from './skill-installers/codex-cli.js';
|
|
7
|
-
export { installCursor, uninstallCursor } from './skill-installers/cursor.js';
|
|
8
|
-
export { installGeminiCli, uninstallGeminiCli } from './skill-installers/gemini-cli.js';
|
|
9
|
-
export { type HeaderClientName, clientHeaders, toHeaderClientName, notifySkillInstalled, type MissingSkill, findMissingSkills, findOrphanedSkills, resolveClientInstallDir, UnknownTargetError, writeSkillToClient, removeSkillFromClient, type InstallResult, activeCleanup, doInstall, doUninstall, } from './skill-installer-common.js';
|
|
10
|
-
//# sourceMappingURL=skill-installer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skill-installer.d.ts","sourceRoot":"","sources":["../../src/tool-surface/skill-installer.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC3D,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,EACL,YAAY,EACZ,WAAW,EACX,WAAW,EACX,QAAQ,EACR,WAAW,EACX,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,kBAAkB,EAClB,6BAA6B,GAC9B,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,4BAA4B,GAC7B,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAC3F,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAExF,OAAO,EACL,KAAK,gBAAgB,EACrB,aAAa,EACb,kBAAkB,EAClB,oBAAoB,EACpB,KAAK,YAAY,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EACrB,KAAK,aAAa,EAClB,aAAa,EACb,SAAS,EACT,WAAW,GACZ,MAAM,6BAA6B,CAAC"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
// packages/core/src/tool-surface/skill-installer.ts
|
|
2
|
-
// Skill-install framework (architecture.md:164).
|
|
3
|
-
//
|
|
4
|
-
// Public surface for skill-install operations. Bundles:
|
|
5
|
-
// - client auto-detection (detectClients)
|
|
6
|
-
// - canonical client list (ALL_CLIENTS) and skill list (SUPPORTED_SKILLS)
|
|
7
|
-
// - skill content discovery (getSkillsRoot, readSkillContent)
|
|
8
|
-
// - per-client writer/remover dispatch
|
|
9
|
-
//
|
|
10
|
-
// Per-CLI orchestration (argv parsing, prompt UX, exit codes) lives in
|
|
11
|
-
// packages/server/src/cli/install-skill.ts which consumes this surface.
|
|
12
|
-
export { detectClients, ALL_CLIENTS } from './manifest.js';
|
|
13
|
-
export { manifestPath, manifestDir, listEntries, getEntry, appendEntry, removeEntry, isInstalled, FutureManifestError, ManifestParseError, ManifestSchemaValidationError, } from './manifest.js';
|
|
14
|
-
export { SUPPORTED_SKILLS, SkillNotFoundError, getSkillsRoot, readSkillContent, discoverPerClientInstallDirs, } from './discover.js';
|
|
15
|
-
export { installClaudeCode, uninstallClaudeCode } from './skill-installers/claude-code.js';
|
|
16
|
-
export { installCodexCli, uninstallCodexCli } from './skill-installers/codex-cli.js';
|
|
17
|
-
export { installCursor, uninstallCursor } from './skill-installers/cursor.js';
|
|
18
|
-
export { installGeminiCli, uninstallGeminiCli } from './skill-installers/gemini-cli.js';
|
|
19
|
-
export { clientHeaders, toHeaderClientName, notifySkillInstalled, findMissingSkills, findOrphanedSkills, resolveClientInstallDir, UnknownTargetError, writeSkillToClient, removeSkillFromClient, activeCleanup, doInstall, doUninstall, } from './skill-installer-common.js';
|
|
20
|
-
//# sourceMappingURL=skill-installer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skill-installer.js","sourceRoot":"","sources":["../../src/tool-surface/skill-installer.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,iDAAiD;AACjD,EAAE;AACF,wDAAwD;AACxD,4CAA4C;AAC5C,4EAA4E;AAC5E,gEAAgE;AAChE,yCAAyC;AACzC,EAAE;AACF,uEAAuE;AACvE,wEAAwE;AAExE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE3D,OAAO,EACL,YAAY,EACZ,WAAW,EACX,WAAW,EACX,QAAQ,EACR,WAAW,EACX,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,kBAAkB,EAClB,6BAA6B,GAC9B,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,4BAA4B,GAC7B,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAC3F,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAExF,OAAO,EAEL,aAAa,EACb,kBAAkB,EAClB,oBAAoB,EAEpB,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EAErB,aAAa,EACb,SAAS,EACT,WAAW,GACZ,MAAM,6BAA6B,CAAC"}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Options for installing a Claude Code skill.
|
|
3
|
-
*/
|
|
4
|
-
export interface ClaudeCodeInstallOpts {
|
|
5
|
-
/** Human-readable name of the skill (used in file path). */
|
|
6
|
-
skillName: string;
|
|
7
|
-
/**
|
|
8
|
-
* Raw skill content. May contain `@include _shared/<file>.md` directives
|
|
9
|
-
* which are inlined before writing.
|
|
10
|
-
*/
|
|
11
|
-
content: string;
|
|
12
|
-
/**
|
|
13
|
-
* Home directory — replaces `os.homedir()` in all file operations.
|
|
14
|
-
* Must NOT default to `os.homedir()`.
|
|
15
|
-
*/
|
|
16
|
-
homeDir: string;
|
|
17
|
-
/** Root of the skills directory for @include resolution. */
|
|
18
|
-
skillsRoot: string;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Write (or overwrite) the SKILL.md file for a Claude Code skill.
|
|
22
|
-
*
|
|
23
|
-
* Target path: `<homeDir>/.claude/skills/<skillName>/SKILL.md`
|
|
24
|
-
*
|
|
25
|
-
* @param opts Installation options (see `ClaudeCodeInstallOpts`).
|
|
26
|
-
*/
|
|
27
|
-
export declare function installClaudeCode(opts: ClaudeCodeInstallOpts): void;
|
|
28
|
-
/**
|
|
29
|
-
* Uninstall a Claude Code skill by removing its directory.
|
|
30
|
-
*
|
|
31
|
-
* Target: `<homeDir>/.claude/skills/<skillName>/`
|
|
32
|
-
*
|
|
33
|
-
* Security: `skillName` is validated against the expected skills directory
|
|
34
|
-
* boundary to prevent path traversal (e.g. `../other-dir`). If `skillName`
|
|
35
|
-
* resolves outside the skills directory, the function is a no-op.
|
|
36
|
-
*
|
|
37
|
-
* This is also a no-op when the directory does not exist (no error is thrown).
|
|
38
|
-
*
|
|
39
|
-
* @param skillName Name of the skill to uninstall.
|
|
40
|
-
* @param homeDir Home directory where the skill directory lives.
|
|
41
|
-
*/
|
|
42
|
-
export declare function uninstallClaudeCode(skillName: string, homeDir: string): void;
|
|
43
|
-
//# sourceMappingURL=claude-code.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../src/tool-surface/skill-installers/claude-code.ts"],"names":[],"mappings":"AAsBA;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,4DAA4D;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,qBAAqB,GAAG,IAAI,CAUnE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAe5E"}
|