agent-plugkit 0.1.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.
- package/LICENSE +21 -0
- package/README.md +295 -0
- package/dist/adapters/agent-plugins.d.ts +35 -0
- package/dist/adapters/agent-plugins.js +57 -0
- package/dist/adapters/agent-plugins.js.map +1 -0
- package/dist/adapters/claude.d.ts +64 -0
- package/dist/adapters/claude.js +123 -0
- package/dist/adapters/claude.js.map +1 -0
- package/dist/adapters/cli-validation.d.ts +12 -0
- package/dist/adapters/cli-validation.js +31 -0
- package/dist/adapters/cli-validation.js.map +1 -0
- package/dist/adapters/codex.d.ts +62 -0
- package/dist/adapters/codex.js +91 -0
- package/dist/adapters/codex.js.map +1 -0
- package/dist/adapters/marketplace-registration.d.ts +17 -0
- package/dist/adapters/marketplace-registration.js +369 -0
- package/dist/adapters/marketplace-registration.js.map +1 -0
- package/dist/adapters/marketplace.d.ts +11 -0
- package/dist/adapters/marketplace.js +96 -0
- package/dist/adapters/marketplace.js.map +1 -0
- package/dist/adapters/mcp.d.ts +17 -0
- package/dist/adapters/mcp.js +28 -0
- package/dist/adapters/mcp.js.map +1 -0
- package/dist/application/artifact-generation.d.ts +58 -0
- package/dist/application/artifact-generation.js +344 -0
- package/dist/application/artifact-generation.js.map +1 -0
- package/dist/application/local-release.d.ts +122 -0
- package/dist/application/local-release.js +940 -0
- package/dist/application/local-release.js.map +1 -0
- package/dist/application/marketplace-document-contract.d.ts +81 -0
- package/dist/application/marketplace-document-contract.js +2 -0
- package/dist/application/marketplace-document-contract.js.map +1 -0
- package/dist/application/marketplace-document.d.ts +45 -0
- package/dist/application/marketplace-document.js +557 -0
- package/dist/application/marketplace-document.js.map +1 -0
- package/dist/application/marketplace-registration-contract.d.ts +51 -0
- package/dist/application/marketplace-registration-contract.js +11 -0
- package/dist/application/marketplace-registration-contract.js.map +1 -0
- package/dist/application/marketplace-registration.d.ts +20 -0
- package/dist/application/marketplace-registration.js +304 -0
- package/dist/application/marketplace-registration.js.map +1 -0
- package/dist/application/marketplace.d.ts +9 -0
- package/dist/application/marketplace.js +32 -0
- package/dist/application/marketplace.js.map +1 -0
- package/dist/application/plugin-components-contract.d.ts +135 -0
- package/dist/application/plugin-components-contract.js +2 -0
- package/dist/application/plugin-components-contract.js.map +1 -0
- package/dist/application/plugin-components.d.ts +17 -0
- package/dist/application/plugin-components.js +1000 -0
- package/dist/application/plugin-components.js.map +1 -0
- package/dist/application/plugin-document-contract.d.ts +115 -0
- package/dist/application/plugin-document-contract.js +2 -0
- package/dist/application/plugin-document-contract.js.map +1 -0
- package/dist/application/plugin-document.d.ts +69 -0
- package/dist/application/plugin-document.js +1037 -0
- package/dist/application/plugin-document.js.map +1 -0
- package/dist/application/plugin-lifecycle-contract.d.ts +230 -0
- package/dist/application/plugin-lifecycle-contract.js +3 -0
- package/dist/application/plugin-lifecycle-contract.js.map +1 -0
- package/dist/application/plugin-lifecycle.d.ts +8 -0
- package/dist/application/plugin-lifecycle.js +1375 -0
- package/dist/application/plugin-lifecycle.js.map +1 -0
- package/dist/application/plugin-scaffold.d.ts +18 -0
- package/dist/application/plugin-scaffold.js +188 -0
- package/dist/application/plugin-scaffold.js.map +1 -0
- package/dist/application/plugin-source.d.ts +39 -0
- package/dist/application/plugin-source.js +59 -0
- package/dist/application/plugin-source.js.map +1 -0
- package/dist/application/skill-document-contract.d.ts +92 -0
- package/dist/application/skill-document-contract.js +8 -0
- package/dist/application/skill-document-contract.js.map +1 -0
- package/dist/application/skill-document-guided.d.ts +3 -0
- package/dist/application/skill-document-guided.js +53 -0
- package/dist/application/skill-document-guided.js.map +1 -0
- package/dist/application/skill-document.d.ts +19 -0
- package/dist/application/skill-document.js +368 -0
- package/dist/application/skill-document.js.map +1 -0
- package/dist/application/workspace-create-contract.d.ts +50 -0
- package/dist/application/workspace-create-contract.js +16 -0
- package/dist/application/workspace-create-contract.js.map +1 -0
- package/dist/application/workspace-create.d.ts +8 -0
- package/dist/application/workspace-create.js +656 -0
- package/dist/application/workspace-create.js.map +1 -0
- package/dist/application/workspace-health-contract.d.ts +133 -0
- package/dist/application/workspace-health-contract.js +272 -0
- package/dist/application/workspace-health-contract.js.map +1 -0
- package/dist/application/workspace-health.d.ts +10 -0
- package/dist/application/workspace-health.js +1114 -0
- package/dist/application/workspace-health.js.map +1 -0
- package/dist/application/workspace-operation-contract.d.ts +99 -0
- package/dist/application/workspace-operation-contract.js +450 -0
- package/dist/application/workspace-operation-contract.js.map +1 -0
- package/dist/application/workspace-operation.d.ts +42 -0
- package/dist/application/workspace-operation.js +517 -0
- package/dist/application/workspace-operation.js.map +1 -0
- package/dist/cli.d.ts +16 -0
- package/dist/cli.js +136 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/add.d.ts +8 -0
- package/dist/commands/add.js +77 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/build.d.ts +7 -0
- package/dist/commands/build.js +29 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/component-scaffold.d.ts +4 -0
- package/dist/commands/component-scaffold.js +14 -0
- package/dist/commands/component-scaffold.js.map +1 -0
- package/dist/commands/import-skill.d.ts +15 -0
- package/dist/commands/import-skill.js +41 -0
- package/dist/commands/import-skill.js.map +1 -0
- package/dist/commands/index-gen.d.ts +12 -0
- package/dist/commands/index-gen.js +33 -0
- package/dist/commands/index-gen.js.map +1 -0
- package/dist/commands/init-repo.d.ts +8 -0
- package/dist/commands/init-repo.js +53 -0
- package/dist/commands/init-repo.js.map +1 -0
- package/dist/commands/init.d.ts +9 -0
- package/dist/commands/init.js +33 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/install-repo.d.ts +20 -0
- package/dist/commands/install-repo.js +200 -0
- package/dist/commands/install-repo.js.map +1 -0
- package/dist/commands/release-local.d.ts +9 -0
- package/dist/commands/release-local.js +27 -0
- package/dist/commands/release-local.js.map +1 -0
- package/dist/commands/validate.d.ts +8 -0
- package/dist/commands/validate.js +45 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/core/errors.d.ts +5 -0
- package/dist/core/errors.js +12 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/generated/skill-content.d.ts +3 -0
- package/dist/generated/skill-content.js +9 -0
- package/dist/generated/skill-content.js.map +1 -0
- package/dist/infrastructure/authorized-path.d.ts +20 -0
- package/dist/infrastructure/authorized-path.js +85 -0
- package/dist/infrastructure/authorized-path.js.map +1 -0
- package/dist/infrastructure/document-commit.d.ts +165 -0
- package/dist/infrastructure/document-commit.js +1352 -0
- package/dist/infrastructure/document-commit.js.map +1 -0
- package/dist/infrastructure/process-runner.d.ts +29 -0
- package/dist/infrastructure/process-runner.js +130 -0
- package/dist/infrastructure/process-runner.js.map +1 -0
- package/dist/infrastructure/vscode-user-settings.d.ts +42 -0
- package/dist/infrastructure/vscode-user-settings.js +509 -0
- package/dist/infrastructure/vscode-user-settings.js.map +1 -0
- package/dist/schema/plugin-yaml.d.ts +89 -0
- package/dist/schema/plugin-yaml.js +241 -0
- package/dist/schema/plugin-yaml.js.map +1 -0
- package/dist/utils/frontmatter.d.ts +30 -0
- package/dist/utils/frontmatter.js +60 -0
- package/dist/utils/frontmatter.js.map +1 -0
- package/dist/utils/helpers.d.ts +44 -0
- package/dist/utils/helpers.js +94 -0
- package/dist/utils/helpers.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,557 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { CST, Document, isAlias, isMap, isScalar, parseDocument, } from 'yaml';
|
|
3
|
+
import { AuthorizedPathError, authorizeExistingDirectory, resolveAuthorizedPath, } from '../infrastructure/authorized-path.js';
|
|
4
|
+
import { commitAuthorizedDocument, documentRevision, } from '../infrastructure/document-commit.js';
|
|
5
|
+
import { MARKETPLACE_FILENAME } from './marketplace-document-contract.js';
|
|
6
|
+
const UTF8_BOM = Buffer.from([0xef, 0xbb, 0xbf]);
|
|
7
|
+
const ownedFields = ['name', 'description', 'organization'];
|
|
8
|
+
function problem(code, technicalDetail) {
|
|
9
|
+
if (code === 'MARKETPLACE_MISSING') {
|
|
10
|
+
return {
|
|
11
|
+
code,
|
|
12
|
+
title: '找不到 Marketplace 基础信息',
|
|
13
|
+
message: '当前文件夹中没有 marketplace.yaml。',
|
|
14
|
+
impact: '无法打开结构化编辑;没有创建或修改任何文件。',
|
|
15
|
+
nextAction: '请重新打开有效的 Marketplace,或在外部确认文件位置。',
|
|
16
|
+
...(technicalDetail === undefined ? {} : { technicalDetail }),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
if (code === 'MARKETPLACE_UNSAFE') {
|
|
20
|
+
return {
|
|
21
|
+
code,
|
|
22
|
+
title: 'Marketplace 基础信息的位置不安全',
|
|
23
|
+
message: 'marketplace.yaml 使用了无法确认授权边界的路径或链接。',
|
|
24
|
+
impact: '结构化编辑已停止,没有覆盖任何文件。',
|
|
25
|
+
nextAction: '请在外部修正文件位置,然后重新打开 Marketplace。',
|
|
26
|
+
...(technicalDetail === undefined ? {} : { technicalDetail }),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
if (code === 'MARKETPLACE_UNAVAILABLE') {
|
|
30
|
+
return {
|
|
31
|
+
code,
|
|
32
|
+
title: '暂时无法读取 Marketplace 基础信息',
|
|
33
|
+
message: '文件夹或 marketplace.yaml 当前不可访问。',
|
|
34
|
+
impact: '结构化编辑已停止,没有覆盖任何文件。',
|
|
35
|
+
nextAction: '请检查本机权限和文件状态后重新加载。',
|
|
36
|
+
...(technicalDetail === undefined ? {} : { technicalDetail }),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
if (code === 'INVALID_ENCODING') {
|
|
40
|
+
return {
|
|
41
|
+
code,
|
|
42
|
+
title: 'Marketplace 基础信息的文字编码无法安全读取',
|
|
43
|
+
message: 'marketplace.yaml 不是有效 UTF-8 文本。',
|
|
44
|
+
impact: '客户端不会用结构化表单覆盖这个文件。',
|
|
45
|
+
nextAction: '请在外部编辑器中转换为 UTF-8,然后重新加载。',
|
|
46
|
+
...(technicalDetail === undefined ? {} : { technicalDetail }),
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
if (code === 'INVALID_YAML') {
|
|
50
|
+
return {
|
|
51
|
+
code,
|
|
52
|
+
title: 'Marketplace 基础信息无法解析',
|
|
53
|
+
message: 'marketplace.yaml 不是可安全解释的 YAML 文档。',
|
|
54
|
+
impact: '客户端不会用结构化表单覆盖原文件。',
|
|
55
|
+
nextAction: '请在外部编辑器中修正 YAML,然后重新加载。',
|
|
56
|
+
...(technicalDetail === undefined ? {} : { technicalDetail }),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
code,
|
|
61
|
+
title: 'Marketplace 基础信息需要修正',
|
|
62
|
+
message: 'marketplace.yaml 的 name、description 或 organization 不是当前契约支持的文字值。',
|
|
63
|
+
impact: '客户端不会用结构化表单覆盖未能可靠理解的内容。',
|
|
64
|
+
nextAction: '请在外部编辑器中修正基础信息,然后重新加载。',
|
|
65
|
+
...(technicalDetail === undefined ? {} : { technicalDetail }),
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
function decodeUtf8(bytes) {
|
|
69
|
+
const bom = bytes.subarray(0, UTF8_BOM.length).equals(UTF8_BOM);
|
|
70
|
+
const content = bom ? bytes.subarray(UTF8_BOM.length) : bytes;
|
|
71
|
+
const decoder = new TextDecoder('utf-8', { fatal: true });
|
|
72
|
+
return { source: decoder.decode(content), bom };
|
|
73
|
+
}
|
|
74
|
+
function lineEnding(source) {
|
|
75
|
+
return source.includes('\r\n') ? 'crlf' : 'lf';
|
|
76
|
+
}
|
|
77
|
+
function metadataFromValue(value, optionalFieldPolicy) {
|
|
78
|
+
if (value === null || typeof value !== 'object' || Array.isArray(value)) {
|
|
79
|
+
return undefined;
|
|
80
|
+
}
|
|
81
|
+
const record = value;
|
|
82
|
+
if (typeof record.name !== 'string' || record.name.trim().length === 0) {
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
85
|
+
if (optionalFieldPolicy === 'strict' &&
|
|
86
|
+
((record.description !== undefined &&
|
|
87
|
+
typeof record.description !== 'string') ||
|
|
88
|
+
(record.organization !== undefined &&
|
|
89
|
+
typeof record.organization !== 'string'))) {
|
|
90
|
+
return undefined;
|
|
91
|
+
}
|
|
92
|
+
return {
|
|
93
|
+
name: record.name.trim(),
|
|
94
|
+
...(typeof record.description === 'string'
|
|
95
|
+
? { description: record.description }
|
|
96
|
+
: {}),
|
|
97
|
+
...(typeof record.organization === 'string'
|
|
98
|
+
? { organization: record.organization }
|
|
99
|
+
: {}),
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
function editableDraft(metadata) {
|
|
103
|
+
return {
|
|
104
|
+
name: metadata.name,
|
|
105
|
+
description: metadata.description ?? '',
|
|
106
|
+
organization: metadata.organization ?? '',
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
function hasUnsupportedOwnedTag(document, map) {
|
|
110
|
+
for (const field of ownedFields) {
|
|
111
|
+
const pair = pairForField(map, field);
|
|
112
|
+
const node = pair?.value;
|
|
113
|
+
if (node == null)
|
|
114
|
+
continue;
|
|
115
|
+
const resolved = isAlias(node) ? node.resolve(document) : node;
|
|
116
|
+
if (!isScalar(resolved))
|
|
117
|
+
continue;
|
|
118
|
+
const tag = resolved.tag;
|
|
119
|
+
if (tag !== undefined && tag !== 'tag:yaml.org,2002:str') {
|
|
120
|
+
return true;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
function parseBytes(bytes, optionalFieldPolicy = 'strict') {
|
|
126
|
+
const revision = documentRevision(bytes);
|
|
127
|
+
let decoded;
|
|
128
|
+
try {
|
|
129
|
+
decoded = decodeUtf8(bytes);
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
return {
|
|
133
|
+
status: 'invalid',
|
|
134
|
+
revision,
|
|
135
|
+
failure: 'invalid-encoding',
|
|
136
|
+
problem: problem('INVALID_ENCODING', error instanceof Error ? error.message : String(error)),
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
const document = parseDocument(decoded.source, {
|
|
140
|
+
keepSourceTokens: true,
|
|
141
|
+
logLevel: 'silent',
|
|
142
|
+
});
|
|
143
|
+
if (document.errors.length > 0) {
|
|
144
|
+
return {
|
|
145
|
+
status: 'invalid',
|
|
146
|
+
revision,
|
|
147
|
+
failure: 'invalid-yaml',
|
|
148
|
+
problem: problem('INVALID_YAML', document.errors.map((error) => error.message).join('\n')),
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
if (optionalFieldPolicy === 'ignore-non-string' &&
|
|
152
|
+
document.warnings.some((warning) => warning.code === 'TAG_RESOLVE_FAILED')) {
|
|
153
|
+
return {
|
|
154
|
+
status: 'invalid',
|
|
155
|
+
revision,
|
|
156
|
+
failure: 'invalid-yaml',
|
|
157
|
+
problem: problem('INVALID_YAML', document.warnings
|
|
158
|
+
.filter((warning) => warning.code === 'TAG_RESOLVE_FAILED')
|
|
159
|
+
.map((warning) => warning.message)
|
|
160
|
+
.join('\n')),
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
if (!isMap(document.contents)) {
|
|
164
|
+
return {
|
|
165
|
+
status: 'invalid',
|
|
166
|
+
revision,
|
|
167
|
+
failure: 'non-mapping',
|
|
168
|
+
problem: problem('INVALID_YAML', 'marketplace.yaml must contain a mapping'),
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
let value;
|
|
172
|
+
try {
|
|
173
|
+
value = document.toJS({ maxAliasCount: 100 });
|
|
174
|
+
}
|
|
175
|
+
catch (error) {
|
|
176
|
+
return {
|
|
177
|
+
status: 'invalid',
|
|
178
|
+
revision,
|
|
179
|
+
failure: 'invalid-yaml',
|
|
180
|
+
problem: problem('INVALID_YAML', error instanceof Error ? error.message : String(error)),
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
const metadata = metadataFromValue(value, optionalFieldPolicy);
|
|
184
|
+
if (metadata === undefined) {
|
|
185
|
+
const record = value !== null && typeof value === 'object' && !Array.isArray(value)
|
|
186
|
+
? value
|
|
187
|
+
: {};
|
|
188
|
+
const invalidName = typeof record.name !== 'string' || record.name.trim().length === 0;
|
|
189
|
+
return {
|
|
190
|
+
status: 'invalid',
|
|
191
|
+
revision,
|
|
192
|
+
failure: invalidName ? 'invalid-name' : 'unsupported-owned-field',
|
|
193
|
+
problem: problem('INVALID_METADATA'),
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
if (optionalFieldPolicy === 'strict' &&
|
|
197
|
+
hasUnsupportedOwnedTag(document, document.contents)) {
|
|
198
|
+
return {
|
|
199
|
+
status: 'invalid',
|
|
200
|
+
revision,
|
|
201
|
+
failure: 'unsupported-owned-field',
|
|
202
|
+
problem: problem('INVALID_METADATA', 'owned metadata field uses an unsupported explicit YAML tag'),
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
return {
|
|
206
|
+
status: 'valid',
|
|
207
|
+
value: {
|
|
208
|
+
sourceBytes: bytes,
|
|
209
|
+
source: decoded.source,
|
|
210
|
+
document,
|
|
211
|
+
map: document.contents,
|
|
212
|
+
metadata,
|
|
213
|
+
draft: editableDraft(metadata),
|
|
214
|
+
revision,
|
|
215
|
+
format: {
|
|
216
|
+
bom: decoded.bom,
|
|
217
|
+
lineEnding: lineEnding(decoded.source),
|
|
218
|
+
},
|
|
219
|
+
},
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
function readMarketplaceBytes(directory) {
|
|
223
|
+
try {
|
|
224
|
+
const authorization = authorizeExistingDirectory(directory);
|
|
225
|
+
const path = resolveAuthorizedPath(authorization, MARKETPLACE_FILENAME);
|
|
226
|
+
if (!existsSync(path)) {
|
|
227
|
+
return {
|
|
228
|
+
status: 'unavailable',
|
|
229
|
+
problem: problem('MARKETPLACE_MISSING'),
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
return { status: 'loaded', bytes: readFileSync(path) };
|
|
233
|
+
}
|
|
234
|
+
catch (error) {
|
|
235
|
+
const unsafe = error instanceof AuthorizedPathError &&
|
|
236
|
+
new Set([
|
|
237
|
+
'ABSOLUTE_PATH',
|
|
238
|
+
'OUTSIDE_AUTHORIZED_ROOT',
|
|
239
|
+
'UNSAFE_SYMLINK',
|
|
240
|
+
]).has(error.code);
|
|
241
|
+
return {
|
|
242
|
+
status: 'unavailable',
|
|
243
|
+
problem: problem(unsafe ? 'MARKETPLACE_UNSAFE' : 'MARKETPLACE_UNAVAILABLE', error instanceof Error ? error.message : String(error)),
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
export function readMarketplaceDocument(directory) {
|
|
248
|
+
const loaded = readMarketplaceBytes(directory);
|
|
249
|
+
if (loaded.status === 'unavailable')
|
|
250
|
+
return loaded;
|
|
251
|
+
const parsed = parseBytes(loaded.bytes);
|
|
252
|
+
if (parsed.status === 'invalid')
|
|
253
|
+
return parsed;
|
|
254
|
+
return {
|
|
255
|
+
status: 'loaded',
|
|
256
|
+
metadata: parsed.value.metadata,
|
|
257
|
+
draft: parsed.value.draft,
|
|
258
|
+
revision: parsed.value.revision,
|
|
259
|
+
format: parsed.value.format,
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Existing CLI/open/health consumers historically ignore non-string optional
|
|
264
|
+
* display fields while still rejecting a non-mapping document or invalid
|
|
265
|
+
* `name`. This compatibility view shares the exact same bytes, UTF-8, YAML
|
|
266
|
+
* Document, alias, and path parser as the strict structured editor, while retaining
|
|
267
|
+
* the former optional-field behavior and unresolved-tag rejection boundary.
|
|
268
|
+
*/
|
|
269
|
+
export function readMarketplaceCompatibilityView(directory) {
|
|
270
|
+
const loaded = readMarketplaceBytes(directory);
|
|
271
|
+
if (loaded.status === 'unavailable')
|
|
272
|
+
return loaded;
|
|
273
|
+
const parsed = parseBytes(loaded.bytes, 'ignore-non-string');
|
|
274
|
+
if (parsed.status === 'invalid') {
|
|
275
|
+
return {
|
|
276
|
+
status: 'invalid',
|
|
277
|
+
revision: parsed.revision,
|
|
278
|
+
problem: parsed.problem,
|
|
279
|
+
compatibilityFailure: parsed.failure === 'non-mapping'
|
|
280
|
+
? 'non-object'
|
|
281
|
+
: parsed.failure === 'invalid-name'
|
|
282
|
+
? 'invalid-name'
|
|
283
|
+
: 'other',
|
|
284
|
+
};
|
|
285
|
+
}
|
|
286
|
+
return {
|
|
287
|
+
status: 'loaded',
|
|
288
|
+
metadata: parsed.value.metadata,
|
|
289
|
+
draft: parsed.value.draft,
|
|
290
|
+
revision: parsed.value.revision,
|
|
291
|
+
format: parsed.value.format,
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
function pairForField(map, field) {
|
|
295
|
+
return map.items.find((pair) => isScalar(pair.key) && pair.key.value === field);
|
|
296
|
+
}
|
|
297
|
+
function encodeScalar(value) {
|
|
298
|
+
const document = new Document(value);
|
|
299
|
+
return document
|
|
300
|
+
.toString({
|
|
301
|
+
blockQuote: false,
|
|
302
|
+
defaultStringType: 'QUOTE_DOUBLE',
|
|
303
|
+
lineWidth: 0,
|
|
304
|
+
})
|
|
305
|
+
.replace(/\n$/, '');
|
|
306
|
+
}
|
|
307
|
+
function insertionForMissingFields(parsed, fields) {
|
|
308
|
+
if (fields.length === 0)
|
|
309
|
+
return undefined;
|
|
310
|
+
const range = parsed.map.range;
|
|
311
|
+
if (range == null) {
|
|
312
|
+
throw new Error('YAML Document API did not provide a map source range');
|
|
313
|
+
}
|
|
314
|
+
if (parsed.map.flow) {
|
|
315
|
+
const close = parsed.source.lastIndexOf('}', range[1] - 1);
|
|
316
|
+
if (close < range[0]) {
|
|
317
|
+
throw new Error('无法定位 flow mapping 的结束位置');
|
|
318
|
+
}
|
|
319
|
+
const token = parsed.map.srcToken;
|
|
320
|
+
if (token === undefined || !CST.isCollection(token)) {
|
|
321
|
+
throw new Error('无法确认 flow mapping 的原始 token');
|
|
322
|
+
}
|
|
323
|
+
const trailingItem = token.items.at(-1);
|
|
324
|
+
const hasTrailingComma = trailingItem !== undefined &&
|
|
325
|
+
trailingItem.key === undefined &&
|
|
326
|
+
trailingItem.value === undefined &&
|
|
327
|
+
trailingItem.start.some((item) => item.type === 'comma');
|
|
328
|
+
const empty = parsed.map.items.length === 0;
|
|
329
|
+
const prefix = hasTrailingComma || empty
|
|
330
|
+
? /\s/.test(parsed.source[close - 1] ?? '')
|
|
331
|
+
? ''
|
|
332
|
+
: ' '
|
|
333
|
+
: ', ';
|
|
334
|
+
return {
|
|
335
|
+
start: close,
|
|
336
|
+
replacement: prefix +
|
|
337
|
+
fields
|
|
338
|
+
.map(({ key, value }) => `${key}: ${encodeScalar(value)}`)
|
|
339
|
+
.join(', '),
|
|
340
|
+
};
|
|
341
|
+
}
|
|
342
|
+
const eol = parsed.format.lineEnding === 'crlf' ? '\r\n' : '\n';
|
|
343
|
+
const start = range[1];
|
|
344
|
+
const needsLeadingLine = start > 0 && parsed.source[start - 1] !== '\n';
|
|
345
|
+
const lines = fields
|
|
346
|
+
.map(({ key, value }) => `${key}: ${encodeScalar(value)}`)
|
|
347
|
+
.join(eol);
|
|
348
|
+
const needsTrailingLine = start < parsed.source.length || parsed.source.endsWith('\n');
|
|
349
|
+
return {
|
|
350
|
+
start,
|
|
351
|
+
replacement: `${needsLeadingLine ? eol : ''}${lines}${needsTrailingLine ? eol : ''}`,
|
|
352
|
+
};
|
|
353
|
+
}
|
|
354
|
+
function patchBytes(parsed, draft) {
|
|
355
|
+
const edits = [];
|
|
356
|
+
const missing = [];
|
|
357
|
+
for (const field of ownedFields) {
|
|
358
|
+
const desired = draft[field];
|
|
359
|
+
const pair = pairForField(parsed.map, field);
|
|
360
|
+
if (pair === undefined) {
|
|
361
|
+
if (field === 'name' || desired.length > 0) {
|
|
362
|
+
missing.push({ key: field, value: desired });
|
|
363
|
+
}
|
|
364
|
+
continue;
|
|
365
|
+
}
|
|
366
|
+
const node = pair.value;
|
|
367
|
+
const range = node?.range;
|
|
368
|
+
if (range == null) {
|
|
369
|
+
throw new Error(`无法定位 ${field} 的原始文字范围`);
|
|
370
|
+
}
|
|
371
|
+
const current = parsed.draft[field];
|
|
372
|
+
if (current === desired)
|
|
373
|
+
continue;
|
|
374
|
+
edits.push({
|
|
375
|
+
start: range[0],
|
|
376
|
+
end: range[1],
|
|
377
|
+
replacement: encodeScalar(desired),
|
|
378
|
+
});
|
|
379
|
+
}
|
|
380
|
+
const insertion = insertionForMissingFields(parsed, missing);
|
|
381
|
+
if (insertion !== undefined) {
|
|
382
|
+
edits.push({
|
|
383
|
+
start: insertion.start,
|
|
384
|
+
end: insertion.start,
|
|
385
|
+
replacement: insertion.replacement,
|
|
386
|
+
});
|
|
387
|
+
}
|
|
388
|
+
let source = parsed.source;
|
|
389
|
+
for (const edit of edits.sort((left, right) => right.start - left.start)) {
|
|
390
|
+
source =
|
|
391
|
+
source.slice(0, edit.start) +
|
|
392
|
+
edit.replacement +
|
|
393
|
+
source.slice(edit.end);
|
|
394
|
+
}
|
|
395
|
+
const encoded = Buffer.from(source, 'utf8');
|
|
396
|
+
return parsed.format.bom
|
|
397
|
+
? Buffer.concat([UTF8_BOM, encoded])
|
|
398
|
+
: encoded;
|
|
399
|
+
}
|
|
400
|
+
function normalizedDraft(draft) {
|
|
401
|
+
return {
|
|
402
|
+
...draft,
|
|
403
|
+
name: draft.name.trim(),
|
|
404
|
+
};
|
|
405
|
+
}
|
|
406
|
+
function prepareValidatedPatch(parsed, draft, buildNextBytes = patchBytes) {
|
|
407
|
+
let bytes;
|
|
408
|
+
try {
|
|
409
|
+
bytes = Buffer.from(buildNextBytes(parsed, draft));
|
|
410
|
+
}
|
|
411
|
+
catch (error) {
|
|
412
|
+
return {
|
|
413
|
+
status: 'invalid',
|
|
414
|
+
problem: problem('INVALID_YAML', error instanceof Error ? error.message : String(error)),
|
|
415
|
+
};
|
|
416
|
+
}
|
|
417
|
+
const reparsed = parseBytes(bytes);
|
|
418
|
+
if (reparsed.status === 'invalid') {
|
|
419
|
+
return { status: 'invalid', problem: reparsed.problem };
|
|
420
|
+
}
|
|
421
|
+
if (reparsed.value.draft.name !== draft.name ||
|
|
422
|
+
reparsed.value.draft.description !== draft.description ||
|
|
423
|
+
reparsed.value.draft.organization !== draft.organization) {
|
|
424
|
+
return {
|
|
425
|
+
status: 'invalid',
|
|
426
|
+
problem: problem('INVALID_METADATA', 'patched document does not project back to the requested metadata'),
|
|
427
|
+
};
|
|
428
|
+
}
|
|
429
|
+
return { status: 'ready', bytes, parsed: reparsed.value };
|
|
430
|
+
}
|
|
431
|
+
export function patchMarketplaceDocumentBytes(bytes, draft) {
|
|
432
|
+
const parsed = parseBytes(Buffer.from(bytes));
|
|
433
|
+
if (parsed.status === 'invalid')
|
|
434
|
+
return parsed;
|
|
435
|
+
const issues = validateDraft(draft);
|
|
436
|
+
if (issues.length > 0) {
|
|
437
|
+
return {
|
|
438
|
+
status: 'invalid',
|
|
439
|
+
revision: parsed.value.revision,
|
|
440
|
+
problem: problem('INVALID_METADATA', issues[0]?.message),
|
|
441
|
+
};
|
|
442
|
+
}
|
|
443
|
+
const prepared = prepareValidatedPatch(parsed.value, normalizedDraft(draft));
|
|
444
|
+
return prepared.status === 'ready'
|
|
445
|
+
? { status: 'patched', bytes: prepared.bytes }
|
|
446
|
+
: {
|
|
447
|
+
status: 'invalid',
|
|
448
|
+
revision: parsed.value.revision,
|
|
449
|
+
problem: prepared.problem,
|
|
450
|
+
};
|
|
451
|
+
}
|
|
452
|
+
function validateDraft(draft) {
|
|
453
|
+
const issues = [];
|
|
454
|
+
if (draft.name.trim().length === 0) {
|
|
455
|
+
issues.push({ field: 'name', message: '插件集合名称不能为空。' });
|
|
456
|
+
}
|
|
457
|
+
return issues;
|
|
458
|
+
}
|
|
459
|
+
export function saveMarketplaceMetadata(request, dependencies = {}) {
|
|
460
|
+
const issues = validateDraft(request.draft);
|
|
461
|
+
if (issues.length > 0) {
|
|
462
|
+
return {
|
|
463
|
+
status: 'invalid-input',
|
|
464
|
+
issues,
|
|
465
|
+
diskChanged: false,
|
|
466
|
+
changedPaths: [],
|
|
467
|
+
cleanupComplete: true,
|
|
468
|
+
};
|
|
469
|
+
}
|
|
470
|
+
const loaded = readMarketplaceBytes(request.directory);
|
|
471
|
+
if (loaded.status === 'unavailable') {
|
|
472
|
+
return {
|
|
473
|
+
status: 'invalid-source',
|
|
474
|
+
problem: loaded.problem,
|
|
475
|
+
diskChanged: false,
|
|
476
|
+
changedPaths: [],
|
|
477
|
+
cleanupComplete: true,
|
|
478
|
+
};
|
|
479
|
+
}
|
|
480
|
+
const parsed = parseBytes(loaded.bytes);
|
|
481
|
+
if (parsed.status === 'invalid') {
|
|
482
|
+
return {
|
|
483
|
+
status: 'invalid-source',
|
|
484
|
+
problem: parsed.problem,
|
|
485
|
+
diskChanged: false,
|
|
486
|
+
changedPaths: [],
|
|
487
|
+
cleanupComplete: true,
|
|
488
|
+
};
|
|
489
|
+
}
|
|
490
|
+
if (parsed.value.revision !== request.expectedRevision) {
|
|
491
|
+
return {
|
|
492
|
+
status: 'conflict',
|
|
493
|
+
currentRevision: parsed.value.revision,
|
|
494
|
+
message: 'marketplace.yaml 已在外部变化;本机草稿仍保留,未覆盖磁盘内容。',
|
|
495
|
+
diskChanged: false,
|
|
496
|
+
changedPaths: [],
|
|
497
|
+
cleanupComplete: true,
|
|
498
|
+
};
|
|
499
|
+
}
|
|
500
|
+
const requestedDraft = normalizedDraft(request.draft);
|
|
501
|
+
const prepared = prepareValidatedPatch(parsed.value, requestedDraft, dependencies.buildNextBytes === undefined
|
|
502
|
+
? patchBytes
|
|
503
|
+
: (source, draft) => dependencies.buildNextBytes(source.sourceBytes, draft));
|
|
504
|
+
if (prepared.status === 'invalid') {
|
|
505
|
+
return {
|
|
506
|
+
status: 'invalid-source',
|
|
507
|
+
problem: prepared.problem,
|
|
508
|
+
diskChanged: false,
|
|
509
|
+
changedPaths: [],
|
|
510
|
+
cleanupComplete: true,
|
|
511
|
+
};
|
|
512
|
+
}
|
|
513
|
+
const nextBytes = prepared.bytes;
|
|
514
|
+
const commit = (dependencies.commit ?? commitAuthorizedDocument)({
|
|
515
|
+
directory: request.directory,
|
|
516
|
+
relativePath: MARKETPLACE_FILENAME,
|
|
517
|
+
expectedRevision: request.expectedRevision,
|
|
518
|
+
nextBytes,
|
|
519
|
+
}, dependencies.commitDependencies);
|
|
520
|
+
if (commit.status === 'conflict') {
|
|
521
|
+
return {
|
|
522
|
+
status: 'conflict',
|
|
523
|
+
currentRevision: commit.currentRevision,
|
|
524
|
+
message: 'marketplace.yaml 在提交前再次发生变化;本机草稿仍保留,未覆盖磁盘内容。',
|
|
525
|
+
diskChanged: false,
|
|
526
|
+
changedPaths: [],
|
|
527
|
+
cleanupComplete: true,
|
|
528
|
+
};
|
|
529
|
+
}
|
|
530
|
+
if (commit.status === 'busy')
|
|
531
|
+
return commit;
|
|
532
|
+
if (commit.status === 'failed')
|
|
533
|
+
return commit;
|
|
534
|
+
if (commit.status === 'verified') {
|
|
535
|
+
return {
|
|
536
|
+
status: 'saved',
|
|
537
|
+
metadata: prepared.parsed.metadata,
|
|
538
|
+
draft: prepared.parsed.draft,
|
|
539
|
+
revision: commit.revision,
|
|
540
|
+
savedAt: (dependencies.now ?? (() => new Date()))().toISOString(),
|
|
541
|
+
diskChanged: false,
|
|
542
|
+
changedPaths: [],
|
|
543
|
+
cleanupComplete: true,
|
|
544
|
+
};
|
|
545
|
+
}
|
|
546
|
+
return {
|
|
547
|
+
status: 'saved',
|
|
548
|
+
metadata: prepared.parsed.metadata,
|
|
549
|
+
draft: prepared.parsed.draft,
|
|
550
|
+
revision: commit.revision,
|
|
551
|
+
savedAt: (dependencies.now ?? (() => new Date()))().toISOString(),
|
|
552
|
+
diskChanged: true,
|
|
553
|
+
changedPaths: commit.changedPaths,
|
|
554
|
+
cleanupComplete: true,
|
|
555
|
+
};
|
|
556
|
+
}
|
|
557
|
+
//# sourceMappingURL=marketplace-document.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marketplace-document.js","sourceRoot":"","sources":["../../src/application/marketplace-document.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export declare const AGENT_TARGET_IDS: readonly ["claude", "codex", "copilot", "vscode", "cursor"];
|
|
2
|
+
export type AgentTargetId = (typeof AGENT_TARGET_IDS)[number];
|
|
3
|
+
export interface LocalMarketplaceSource {
|
|
4
|
+
readonly kind: 'local';
|
|
5
|
+
readonly input: string;
|
|
6
|
+
readonly displayValue: string;
|
|
7
|
+
readonly clientValue: string;
|
|
8
|
+
readonly vscodeValue: string;
|
|
9
|
+
readonly localPath: string;
|
|
10
|
+
}
|
|
11
|
+
export interface GitMarketplaceSource {
|
|
12
|
+
readonly kind: 'git';
|
|
13
|
+
readonly input: string;
|
|
14
|
+
readonly displayValue: string;
|
|
15
|
+
readonly clientValue: string;
|
|
16
|
+
readonly vscodeValue: string;
|
|
17
|
+
}
|
|
18
|
+
export type MarketplaceRegistrationSource = LocalMarketplaceSource | GitMarketplaceSource;
|
|
19
|
+
export interface RegistrationInvocation {
|
|
20
|
+
readonly executable: string;
|
|
21
|
+
readonly args: readonly string[];
|
|
22
|
+
}
|
|
23
|
+
export type TargetInspectionStatus = 'ready' | 'missing-cli' | 'manual-required' | 'failed' | 'interrupted';
|
|
24
|
+
export interface TargetInspection {
|
|
25
|
+
readonly id: AgentTargetId;
|
|
26
|
+
readonly label: string;
|
|
27
|
+
readonly status: TargetInspectionStatus;
|
|
28
|
+
readonly message: string;
|
|
29
|
+
readonly recovery: string;
|
|
30
|
+
readonly invocation?: RegistrationInvocation;
|
|
31
|
+
readonly settingsPath?: string;
|
|
32
|
+
}
|
|
33
|
+
export type TargetRegistrationStatus = 'completed' | 'missing-cli' | 'manual-required' | 'failed' | 'interrupted';
|
|
34
|
+
export interface TargetRegistrationResult {
|
|
35
|
+
readonly id: AgentTargetId;
|
|
36
|
+
readonly label: string;
|
|
37
|
+
readonly status: TargetRegistrationStatus;
|
|
38
|
+
readonly message: string;
|
|
39
|
+
readonly recovery?: string;
|
|
40
|
+
readonly invocation?: RegistrationInvocation;
|
|
41
|
+
}
|
|
42
|
+
export interface MarketplaceRegistrationInspection {
|
|
43
|
+
readonly source: MarketplaceRegistrationSource;
|
|
44
|
+
readonly targets: readonly TargetInspection[];
|
|
45
|
+
}
|
|
46
|
+
export interface MarketplaceRegistrationReport {
|
|
47
|
+
readonly source: MarketplaceRegistrationSource;
|
|
48
|
+
readonly results: readonly TargetRegistrationResult[];
|
|
49
|
+
readonly exitCode: 0 | 1 | 2 | 130;
|
|
50
|
+
}
|
|
51
|
+
export declare function isAgentTargetId(value: string): value is AgentTargetId;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marketplace-registration-contract.js","sourceRoot":"","sources":["../../src/application/marketplace-registration-contract.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,QAAQ;IACR,OAAO;IACP,SAAS;IACT,QAAQ;IACR,QAAQ;CACA,CAAC;AAwEX,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,OAAQ,gBAAsC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACjE,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type MarketplaceRegistrationRuntime } from '../adapters/marketplace-registration.js';
|
|
2
|
+
import { type AgentTargetId, type MarketplaceRegistrationInspection, type MarketplaceRegistrationReport, type MarketplaceRegistrationSource, type TargetInspection, type TargetRegistrationResult } from './marketplace-registration-contract.js';
|
|
3
|
+
export interface NormalizeMarketplaceSourceOptions {
|
|
4
|
+
readonly baseDir?: string;
|
|
5
|
+
readonly homeDir?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function normalizeMarketplaceSource(sourceInput: string, options?: NormalizeMarketplaceSourceOptions): MarketplaceRegistrationSource;
|
|
8
|
+
export interface InspectMarketplaceRegistrationOptions extends NormalizeMarketplaceSourceOptions {
|
|
9
|
+
readonly targetIds?: readonly string[];
|
|
10
|
+
readonly runtime?: MarketplaceRegistrationRuntime;
|
|
11
|
+
}
|
|
12
|
+
export interface ExecuteMarketplaceRegistrationOptions {
|
|
13
|
+
readonly runtime?: MarketplaceRegistrationRuntime;
|
|
14
|
+
readonly onTargetStart?: (inspection: TargetInspection) => void;
|
|
15
|
+
readonly onTargetResult?: (result: TargetRegistrationResult) => void;
|
|
16
|
+
}
|
|
17
|
+
export declare function normalizeTargetIds(values: readonly string[]): AgentTargetId[];
|
|
18
|
+
export declare function inspectMarketplaceRegistration(sourceInput: string, options?: InspectMarketplaceRegistrationOptions): Promise<MarketplaceRegistrationInspection>;
|
|
19
|
+
export declare function marketplaceRegistrationExitCode(results: readonly TargetRegistrationResult[]): 0 | 1 | 2 | 130;
|
|
20
|
+
export declare function executeMarketplaceRegistration(inspection: MarketplaceRegistrationInspection, options?: ExecuteMarketplaceRegistrationOptions): Promise<MarketplaceRegistrationReport>;
|