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.
Files changed (156) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +295 -0
  3. package/dist/adapters/agent-plugins.d.ts +35 -0
  4. package/dist/adapters/agent-plugins.js +57 -0
  5. package/dist/adapters/agent-plugins.js.map +1 -0
  6. package/dist/adapters/claude.d.ts +64 -0
  7. package/dist/adapters/claude.js +123 -0
  8. package/dist/adapters/claude.js.map +1 -0
  9. package/dist/adapters/cli-validation.d.ts +12 -0
  10. package/dist/adapters/cli-validation.js +31 -0
  11. package/dist/adapters/cli-validation.js.map +1 -0
  12. package/dist/adapters/codex.d.ts +62 -0
  13. package/dist/adapters/codex.js +91 -0
  14. package/dist/adapters/codex.js.map +1 -0
  15. package/dist/adapters/marketplace-registration.d.ts +17 -0
  16. package/dist/adapters/marketplace-registration.js +369 -0
  17. package/dist/adapters/marketplace-registration.js.map +1 -0
  18. package/dist/adapters/marketplace.d.ts +11 -0
  19. package/dist/adapters/marketplace.js +96 -0
  20. package/dist/adapters/marketplace.js.map +1 -0
  21. package/dist/adapters/mcp.d.ts +17 -0
  22. package/dist/adapters/mcp.js +28 -0
  23. package/dist/adapters/mcp.js.map +1 -0
  24. package/dist/application/artifact-generation.d.ts +58 -0
  25. package/dist/application/artifact-generation.js +344 -0
  26. package/dist/application/artifact-generation.js.map +1 -0
  27. package/dist/application/local-release.d.ts +122 -0
  28. package/dist/application/local-release.js +940 -0
  29. package/dist/application/local-release.js.map +1 -0
  30. package/dist/application/marketplace-document-contract.d.ts +81 -0
  31. package/dist/application/marketplace-document-contract.js +2 -0
  32. package/dist/application/marketplace-document-contract.js.map +1 -0
  33. package/dist/application/marketplace-document.d.ts +45 -0
  34. package/dist/application/marketplace-document.js +557 -0
  35. package/dist/application/marketplace-document.js.map +1 -0
  36. package/dist/application/marketplace-registration-contract.d.ts +51 -0
  37. package/dist/application/marketplace-registration-contract.js +11 -0
  38. package/dist/application/marketplace-registration-contract.js.map +1 -0
  39. package/dist/application/marketplace-registration.d.ts +20 -0
  40. package/dist/application/marketplace-registration.js +304 -0
  41. package/dist/application/marketplace-registration.js.map +1 -0
  42. package/dist/application/marketplace.d.ts +9 -0
  43. package/dist/application/marketplace.js +32 -0
  44. package/dist/application/marketplace.js.map +1 -0
  45. package/dist/application/plugin-components-contract.d.ts +135 -0
  46. package/dist/application/plugin-components-contract.js +2 -0
  47. package/dist/application/plugin-components-contract.js.map +1 -0
  48. package/dist/application/plugin-components.d.ts +17 -0
  49. package/dist/application/plugin-components.js +1000 -0
  50. package/dist/application/plugin-components.js.map +1 -0
  51. package/dist/application/plugin-document-contract.d.ts +115 -0
  52. package/dist/application/plugin-document-contract.js +2 -0
  53. package/dist/application/plugin-document-contract.js.map +1 -0
  54. package/dist/application/plugin-document.d.ts +69 -0
  55. package/dist/application/plugin-document.js +1037 -0
  56. package/dist/application/plugin-document.js.map +1 -0
  57. package/dist/application/plugin-lifecycle-contract.d.ts +230 -0
  58. package/dist/application/plugin-lifecycle-contract.js +3 -0
  59. package/dist/application/plugin-lifecycle-contract.js.map +1 -0
  60. package/dist/application/plugin-lifecycle.d.ts +8 -0
  61. package/dist/application/plugin-lifecycle.js +1375 -0
  62. package/dist/application/plugin-lifecycle.js.map +1 -0
  63. package/dist/application/plugin-scaffold.d.ts +18 -0
  64. package/dist/application/plugin-scaffold.js +188 -0
  65. package/dist/application/plugin-scaffold.js.map +1 -0
  66. package/dist/application/plugin-source.d.ts +39 -0
  67. package/dist/application/plugin-source.js +59 -0
  68. package/dist/application/plugin-source.js.map +1 -0
  69. package/dist/application/skill-document-contract.d.ts +92 -0
  70. package/dist/application/skill-document-contract.js +8 -0
  71. package/dist/application/skill-document-contract.js.map +1 -0
  72. package/dist/application/skill-document-guided.d.ts +3 -0
  73. package/dist/application/skill-document-guided.js +53 -0
  74. package/dist/application/skill-document-guided.js.map +1 -0
  75. package/dist/application/skill-document.d.ts +19 -0
  76. package/dist/application/skill-document.js +368 -0
  77. package/dist/application/skill-document.js.map +1 -0
  78. package/dist/application/workspace-create-contract.d.ts +50 -0
  79. package/dist/application/workspace-create-contract.js +16 -0
  80. package/dist/application/workspace-create-contract.js.map +1 -0
  81. package/dist/application/workspace-create.d.ts +8 -0
  82. package/dist/application/workspace-create.js +656 -0
  83. package/dist/application/workspace-create.js.map +1 -0
  84. package/dist/application/workspace-health-contract.d.ts +133 -0
  85. package/dist/application/workspace-health-contract.js +272 -0
  86. package/dist/application/workspace-health-contract.js.map +1 -0
  87. package/dist/application/workspace-health.d.ts +10 -0
  88. package/dist/application/workspace-health.js +1114 -0
  89. package/dist/application/workspace-health.js.map +1 -0
  90. package/dist/application/workspace-operation-contract.d.ts +99 -0
  91. package/dist/application/workspace-operation-contract.js +450 -0
  92. package/dist/application/workspace-operation-contract.js.map +1 -0
  93. package/dist/application/workspace-operation.d.ts +42 -0
  94. package/dist/application/workspace-operation.js +517 -0
  95. package/dist/application/workspace-operation.js.map +1 -0
  96. package/dist/cli.d.ts +16 -0
  97. package/dist/cli.js +136 -0
  98. package/dist/cli.js.map +1 -0
  99. package/dist/commands/add.d.ts +8 -0
  100. package/dist/commands/add.js +77 -0
  101. package/dist/commands/add.js.map +1 -0
  102. package/dist/commands/build.d.ts +7 -0
  103. package/dist/commands/build.js +29 -0
  104. package/dist/commands/build.js.map +1 -0
  105. package/dist/commands/component-scaffold.d.ts +4 -0
  106. package/dist/commands/component-scaffold.js +14 -0
  107. package/dist/commands/component-scaffold.js.map +1 -0
  108. package/dist/commands/import-skill.d.ts +15 -0
  109. package/dist/commands/import-skill.js +41 -0
  110. package/dist/commands/import-skill.js.map +1 -0
  111. package/dist/commands/index-gen.d.ts +12 -0
  112. package/dist/commands/index-gen.js +33 -0
  113. package/dist/commands/index-gen.js.map +1 -0
  114. package/dist/commands/init-repo.d.ts +8 -0
  115. package/dist/commands/init-repo.js +53 -0
  116. package/dist/commands/init-repo.js.map +1 -0
  117. package/dist/commands/init.d.ts +9 -0
  118. package/dist/commands/init.js +33 -0
  119. package/dist/commands/init.js.map +1 -0
  120. package/dist/commands/install-repo.d.ts +20 -0
  121. package/dist/commands/install-repo.js +200 -0
  122. package/dist/commands/install-repo.js.map +1 -0
  123. package/dist/commands/release-local.d.ts +9 -0
  124. package/dist/commands/release-local.js +27 -0
  125. package/dist/commands/release-local.js.map +1 -0
  126. package/dist/commands/validate.d.ts +8 -0
  127. package/dist/commands/validate.js +45 -0
  128. package/dist/commands/validate.js.map +1 -0
  129. package/dist/core/errors.d.ts +5 -0
  130. package/dist/core/errors.js +12 -0
  131. package/dist/core/errors.js.map +1 -0
  132. package/dist/generated/skill-content.d.ts +3 -0
  133. package/dist/generated/skill-content.js +9 -0
  134. package/dist/generated/skill-content.js.map +1 -0
  135. package/dist/infrastructure/authorized-path.d.ts +20 -0
  136. package/dist/infrastructure/authorized-path.js +85 -0
  137. package/dist/infrastructure/authorized-path.js.map +1 -0
  138. package/dist/infrastructure/document-commit.d.ts +165 -0
  139. package/dist/infrastructure/document-commit.js +1352 -0
  140. package/dist/infrastructure/document-commit.js.map +1 -0
  141. package/dist/infrastructure/process-runner.d.ts +29 -0
  142. package/dist/infrastructure/process-runner.js +130 -0
  143. package/dist/infrastructure/process-runner.js.map +1 -0
  144. package/dist/infrastructure/vscode-user-settings.d.ts +42 -0
  145. package/dist/infrastructure/vscode-user-settings.js +509 -0
  146. package/dist/infrastructure/vscode-user-settings.js.map +1 -0
  147. package/dist/schema/plugin-yaml.d.ts +89 -0
  148. package/dist/schema/plugin-yaml.js +241 -0
  149. package/dist/schema/plugin-yaml.js.map +1 -0
  150. package/dist/utils/frontmatter.d.ts +30 -0
  151. package/dist/utils/frontmatter.js +60 -0
  152. package/dist/utils/frontmatter.js.map +1 -0
  153. package/dist/utils/helpers.d.ts +44 -0
  154. package/dist/utils/helpers.js +94 -0
  155. package/dist/utils/helpers.js.map +1 -0
  156. package/package.json +56 -0
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Codex 适配器
3
+ *
4
+ * 从 plugin.yaml 生成 .codex-plugin/plugin.json 和 marketplace.json 条目。
5
+ *
6
+ * Codex 插件结构约定:
7
+ * - .codex-plugin/plugin.json — manifest(比 Claude Code 多 interface 字段)
8
+ * - skills/ — skill 文件(同上,无需生成)
9
+ * - .mcp.json — MCP 配置(格式与 Claude Code 相同)
10
+ */
11
+ import type { PluginYaml } from '../schema/plugin-yaml.js';
12
+ export interface CodexManifest {
13
+ name: string;
14
+ version: string;
15
+ description: string;
16
+ author: {
17
+ name: string;
18
+ email?: string;
19
+ url?: string;
20
+ };
21
+ interface: {
22
+ displayName: string;
23
+ shortDescription: string;
24
+ longDescription: string;
25
+ category: string;
26
+ developerName: string;
27
+ capabilities: string[];
28
+ defaultPrompt: string[];
29
+ };
30
+ skills?: string;
31
+ mcpServers?: string;
32
+ }
33
+ export interface CodexMarketplaceEntry {
34
+ name: string;
35
+ source: {
36
+ source: 'local';
37
+ path: string;
38
+ };
39
+ interface: {
40
+ displayName: string;
41
+ };
42
+ policy: {
43
+ installation: 'AVAILABLE';
44
+ authentication: 'ON_INSTALL';
45
+ };
46
+ category: string;
47
+ }
48
+ /**
49
+ * 生成 Codex 的 .codex-plugin/plugin.json
50
+ *
51
+ * 如果 plugin.yaml 中没有显式指定 platform.codex.interface,
52
+ * 则从 name 和 description 自动推导。
53
+ */
54
+ export declare function buildCodexManifest(config: PluginYaml): CodexManifest;
55
+ /**
56
+ * 生成 marketplace.json 中的一个条目
57
+ */
58
+ export declare function buildMarketplaceEntry(config: PluginYaml, relativePath: string): CodexMarketplaceEntry;
59
+ /**
60
+ * 将 Codex 兼容的文件写入插件目录
61
+ */
62
+ export declare function generateCodex(config: PluginYaml, pluginDir: string): void;
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Codex 适配器
3
+ *
4
+ * 从 plugin.yaml 生成 .codex-plugin/plugin.json 和 marketplace.json 条目。
5
+ *
6
+ * Codex 插件结构约定:
7
+ * - .codex-plugin/plugin.json — manifest(比 Claude Code 多 interface 字段)
8
+ * - skills/ — skill 文件(同上,无需生成)
9
+ * - .mcp.json — MCP 配置(格式与 Claude Code 相同)
10
+ */
11
+ import { mkdirSync, rmSync, writeFileSync } from 'node:fs';
12
+ import { join } from 'node:path';
13
+ import { toTitleCase } from '../utils/helpers.js';
14
+ import { buildNativeMcpConfig } from './mcp.js';
15
+ /**
16
+ * 生成 Codex 的 .codex-plugin/plugin.json
17
+ *
18
+ * 如果 plugin.yaml 中没有显式指定 platform.codex.interface,
19
+ * 则从 name 和 description 自动推导。
20
+ */
21
+ export function buildCodexManifest(config) {
22
+ const iface = config.platform?.codex?.interface;
23
+ const displayName = iface?.displayName || toTitleCase(config.name);
24
+ const manifest = {
25
+ name: config.name,
26
+ version: config.version,
27
+ description: config.description,
28
+ author: {
29
+ name: config.author.name,
30
+ ...(config.author.email ? { email: config.author.email } : {}),
31
+ ...(config.author.url ? { url: config.author.url } : {}),
32
+ },
33
+ interface: {
34
+ displayName,
35
+ shortDescription: iface?.shortDescription || config.description,
36
+ longDescription: iface?.longDescription || config.description,
37
+ category: iface?.category || config.category || 'General',
38
+ developerName: iface?.developerName || config.author.name,
39
+ capabilities: iface?.capabilities ?? [],
40
+ defaultPrompt: iface?.defaultPrompt ?? [`Help me use ${displayName}.`],
41
+ },
42
+ };
43
+ // skills 引用
44
+ const skills = config.components.skills;
45
+ if (skills && skills.length > 0) {
46
+ manifest.skills = './skills/';
47
+ }
48
+ // MCP 引用
49
+ const mcps = config.components.mcp;
50
+ if (mcps && mcps.length > 0) {
51
+ manifest.mcpServers = './.mcp.json';
52
+ }
53
+ return manifest;
54
+ }
55
+ /**
56
+ * 生成 marketplace.json 中的一个条目
57
+ */
58
+ export function buildMarketplaceEntry(config, relativePath) {
59
+ const iface = config.platform?.codex?.interface;
60
+ return {
61
+ name: config.name,
62
+ source: { source: 'local', path: relativePath },
63
+ interface: {
64
+ displayName: iface?.displayName || toTitleCase(config.name),
65
+ },
66
+ policy: {
67
+ installation: 'AVAILABLE',
68
+ authentication: 'ON_INSTALL',
69
+ },
70
+ category: iface?.category || config.category || 'General',
71
+ };
72
+ }
73
+ /**
74
+ * 将 Codex 兼容的文件写入插件目录
75
+ */
76
+ export function generateCodex(config, pluginDir) {
77
+ // .codex-plugin/plugin.json
78
+ const codexDir = join(pluginDir, '.codex-plugin');
79
+ mkdirSync(codexDir, { recursive: true });
80
+ writeFileSync(join(codexDir, 'plugin.json'), JSON.stringify(buildCodexManifest(config), null, 2) + '\n');
81
+ // .mcp.json(Codex 的 MCP 格式与 Claude Code 相同)
82
+ const mcpPath = join(pluginDir, '.mcp.json');
83
+ const mcpConfig = buildNativeMcpConfig(config);
84
+ if (mcpConfig) {
85
+ writeFileSync(mcpPath, JSON.stringify(mcpConfig, null, 2) + '\n');
86
+ }
87
+ else {
88
+ rmSync(mcpPath, { force: true });
89
+ }
90
+ }
91
+ //# sourceMappingURL=codex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/adapters/codex.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { AgentTargetId, MarketplaceRegistrationSource, TargetInspection, TargetRegistrationResult } from '../application/marketplace-registration-contract.js';
2
+ import { type ProcessRunner } from '../infrastructure/process-runner.js';
3
+ import { type VscodeSettingsInspection, type VscodeSettingsUpdateRequest, type VscodeSettingsUpdateResult } from '../infrastructure/vscode-user-settings.js';
4
+ export interface MarketplaceRegistrationRuntime {
5
+ readonly processRunner?: ProcessRunner;
6
+ readonly signal?: AbortSignal;
7
+ readonly inspectVscode?: (runner: ProcessRunner, signal?: AbortSignal) => VscodeSettingsInspection | Promise<VscodeSettingsInspection>;
8
+ readonly updateVscode?: (request: VscodeSettingsUpdateRequest) => VscodeSettingsUpdateResult;
9
+ }
10
+ export interface MarketplaceRegistrationAdapter {
11
+ readonly id: AgentTargetId;
12
+ readonly label: string;
13
+ inspect(source: MarketplaceRegistrationSource, runtime?: MarketplaceRegistrationRuntime): Promise<TargetInspection>;
14
+ execute(source: MarketplaceRegistrationSource, inspection: TargetInspection, runtime?: MarketplaceRegistrationRuntime): Promise<TargetRegistrationResult>;
15
+ }
16
+ export declare const MARKETPLACE_REGISTRATION_ADAPTERS: readonly MarketplaceRegistrationAdapter[];
17
+ export declare function getMarketplaceRegistrationAdapter(id: AgentTargetId): MarketplaceRegistrationAdapter;
@@ -0,0 +1,369 @@
1
+ import { lstatSync, realpathSync } from 'node:fs';
2
+ import { basename, dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';
3
+ import { systemProcessRunner, } from '../infrastructure/process-runner.js';
4
+ import { inspectVscodeUserSettings, updateVscodeMarketplaceSettings, } from '../infrastructure/vscode-user-settings.js';
5
+ function runnerFor(runtime) {
6
+ return runtime?.processRunner ?? systemProcessRunner;
7
+ }
8
+ function localIndexFailure(source, candidates) {
9
+ if (source.kind !== 'local') {
10
+ return undefined;
11
+ }
12
+ const available = candidates.some((relativePath) => {
13
+ try {
14
+ return lstatSync(join(source.localPath, relativePath)).isFile();
15
+ }
16
+ catch {
17
+ return false;
18
+ }
19
+ });
20
+ if (available) {
21
+ return undefined;
22
+ }
23
+ return `本地 Marketplace 缺少目标索引: ${candidates.join(' 或 ')}`;
24
+ }
25
+ function failedLocalInspection(id, label, message) {
26
+ return {
27
+ id,
28
+ label,
29
+ status: 'failed',
30
+ message,
31
+ recovery: '先在来源 Marketplace 中运行 build/index/validate,再重新注册。',
32
+ };
33
+ }
34
+ function pathIsInside(rootPath, candidatePath) {
35
+ const relativePath = relative(rootPath, candidatePath);
36
+ return (relativePath === '' ||
37
+ (!relativePath.startsWith(`..${sep}`) &&
38
+ relativePath !== '..' &&
39
+ !isAbsolute(relativePath)));
40
+ }
41
+ function canonicalizePotentialPath(path) {
42
+ let cursor = resolve(path);
43
+ const missingSegments = [];
44
+ for (;;) {
45
+ try {
46
+ return resolve(realpathSync(cursor), ...missingSegments);
47
+ }
48
+ catch (error) {
49
+ const code = error?.code;
50
+ if (code !== 'ENOENT' && code !== 'ENOTDIR') {
51
+ return undefined;
52
+ }
53
+ const parent = dirname(cursor);
54
+ if (parent === cursor) {
55
+ return undefined;
56
+ }
57
+ missingSegments.unshift(basename(cursor));
58
+ cursor = parent;
59
+ }
60
+ }
61
+ }
62
+ function vscodeSourceBoundaryFailure(source, settingsPath) {
63
+ if (source.kind !== 'local') {
64
+ return undefined;
65
+ }
66
+ const lexicalSettingsPath = resolve(settingsPath);
67
+ const canonicalSettingsPath = canonicalizePotentialPath(settingsPath);
68
+ const overlaps = pathIsInside(source.localPath, lexicalSettingsPath) ||
69
+ (canonicalSettingsPath !== undefined &&
70
+ pathIsInside(source.localPath, canonicalSettingsPath));
71
+ if (!overlaps && canonicalSettingsPath !== undefined) {
72
+ return undefined;
73
+ }
74
+ return {
75
+ id: 'vscode',
76
+ label: 'VS Code',
77
+ status: 'failed',
78
+ message: overlaps
79
+ ? 'VS Code 用户配置路径与本地 Marketplace 来源重叠;为保持来源只读,没有写入配置。'
80
+ : '无法安全确认 VS Code 用户配置路径不在本地 Marketplace 来源内;没有写入配置。',
81
+ recovery: '将 Marketplace 移出 VS Code 用户配置目录,或修正 HOME/XDG/APPDATA 后重试。',
82
+ };
83
+ }
84
+ function resultFromInspection(inspection) {
85
+ return {
86
+ id: inspection.id,
87
+ label: inspection.label,
88
+ status: inspection.status === 'ready' ? 'failed' : inspection.status,
89
+ message: inspection.status === 'ready'
90
+ ? `${inspection.label} 注册未执行。`
91
+ : inspection.message,
92
+ recovery: inspection.recovery,
93
+ ...(inspection.invocation ? { invocation: inspection.invocation } : {}),
94
+ };
95
+ }
96
+ function processFailureMessage(result) {
97
+ if (result.status !== 'failed') {
98
+ return '';
99
+ }
100
+ const detail = result.stderr.trim() || result.stdout.trim() || result.message;
101
+ return `${detail}${result.exitCode === null ? '' : ` (exit ${result.exitCode})`}`;
102
+ }
103
+ function nativeAdapter(definition) {
104
+ const probeArgs = ['plugin', 'marketplace', 'add', '--help'];
105
+ return {
106
+ id: definition.id,
107
+ label: definition.label,
108
+ async inspect(source, runtime) {
109
+ const localFailure = localIndexFailure(source, definition.localIndexCandidates);
110
+ if (localFailure) {
111
+ return failedLocalInspection(definition.id, definition.label, localFailure);
112
+ }
113
+ const probe = await runnerFor(runtime).run({
114
+ executable: definition.executable,
115
+ args: probeArgs,
116
+ captureOutput: true,
117
+ signal: runtime?.signal,
118
+ });
119
+ const invocation = {
120
+ executable: definition.executable,
121
+ args: ['plugin', 'marketplace', 'add', source.clientValue],
122
+ };
123
+ if (probe.status === 'missing') {
124
+ return {
125
+ id: definition.id,
126
+ label: definition.label,
127
+ status: 'missing-cli',
128
+ message: `未找到 ${definition.executable} CLI。`,
129
+ recovery: definition.missingRecovery,
130
+ invocation,
131
+ };
132
+ }
133
+ if (probe.status === 'interrupted') {
134
+ return {
135
+ id: definition.id,
136
+ label: definition.label,
137
+ status: 'interrupted',
138
+ message: `${definition.label} 能力探测被 ${probe.signal} 中断。`,
139
+ recovery: '重新运行命令。',
140
+ invocation,
141
+ };
142
+ }
143
+ if (probe.status === 'failed') {
144
+ return {
145
+ id: definition.id,
146
+ label: definition.label,
147
+ status: 'failed',
148
+ message: `${definition.executable} CLI 不支持 plugin marketplace add: ${processFailureMessage(probe)}`,
149
+ recovery: definition.missingRecovery,
150
+ invocation,
151
+ };
152
+ }
153
+ return {
154
+ id: definition.id,
155
+ label: definition.label,
156
+ status: 'ready',
157
+ message: `${definition.label} 可通过原生 CLI 注册。`,
158
+ recovery: definition.missingRecovery,
159
+ invocation,
160
+ };
161
+ },
162
+ async execute(source, inspection, runtime) {
163
+ const localFailure = localIndexFailure(source, definition.localIndexCandidates);
164
+ if (localFailure) {
165
+ return resultFromInspection(failedLocalInspection(definition.id, definition.label, localFailure));
166
+ }
167
+ if (inspection.status !== 'ready') {
168
+ return resultFromInspection(inspection);
169
+ }
170
+ const invocation = inspection.invocation ?? {
171
+ executable: definition.executable,
172
+ args: ['plugin', 'marketplace', 'add', source.clientValue],
173
+ };
174
+ const executed = await runnerFor(runtime).run({
175
+ executable: invocation.executable,
176
+ args: invocation.args,
177
+ captureOutput: false,
178
+ signal: runtime?.signal,
179
+ });
180
+ if (executed.status === 'completed') {
181
+ return {
182
+ id: definition.id,
183
+ label: definition.label,
184
+ status: 'completed',
185
+ message: 'Marketplace 已通过原生 CLI 注册。',
186
+ invocation,
187
+ };
188
+ }
189
+ if (executed.status === 'missing') {
190
+ return {
191
+ id: definition.id,
192
+ label: definition.label,
193
+ status: 'missing-cli',
194
+ message: `执行前未找到 ${definition.executable} CLI。`,
195
+ recovery: definition.missingRecovery,
196
+ invocation,
197
+ };
198
+ }
199
+ if (executed.status === 'interrupted') {
200
+ return {
201
+ id: definition.id,
202
+ label: definition.label,
203
+ status: 'interrupted',
204
+ message: `注册被 ${executed.signal} 中断。`,
205
+ recovery: '确认客户端状态后重新运行命令。',
206
+ invocation,
207
+ };
208
+ }
209
+ return {
210
+ id: definition.id,
211
+ label: definition.label,
212
+ status: 'failed',
213
+ message: `原生 CLI 注册失败: ${processFailureMessage(executed)}`,
214
+ recovery: '检查来源、客户端认证与 CLI 输出后重试。',
215
+ invocation,
216
+ };
217
+ },
218
+ };
219
+ }
220
+ const claudeAdapter = nativeAdapter({
221
+ id: 'claude',
222
+ label: 'Claude Code',
223
+ executable: 'claude',
224
+ localIndexCandidates: ['.claude-plugin/marketplace.json'],
225
+ missingRecovery: '安装或升级 Claude Code CLI,确认 plugin marketplace add 可用后重试。',
226
+ });
227
+ const codexAdapter = nativeAdapter({
228
+ id: 'codex',
229
+ label: 'Codex',
230
+ executable: 'codex',
231
+ localIndexCandidates: ['.agents/plugins/marketplace.json'],
232
+ missingRecovery: '安装或升级 Codex CLI,确认 plugin marketplace add 可用后重试。',
233
+ });
234
+ const copilotAdapter = nativeAdapter({
235
+ id: 'copilot',
236
+ label: 'GitHub Copilot',
237
+ executable: 'copilot',
238
+ localIndexCandidates: ['marketplace.json', '.github/plugin/marketplace.json'],
239
+ missingRecovery: '安装或升级 GitHub Copilot CLI,确认 plugin marketplace add 可用后重试。',
240
+ });
241
+ const vscodeAdapter = {
242
+ id: 'vscode',
243
+ label: 'VS Code',
244
+ async inspect(source, runtime) {
245
+ const localFailure = localIndexFailure(source, [
246
+ 'marketplace.json',
247
+ '.github/plugin/marketplace.json',
248
+ ]);
249
+ if (localFailure) {
250
+ return failedLocalInspection('vscode', 'VS Code', localFailure);
251
+ }
252
+ const inspected = runtime?.inspectVscode
253
+ ? await runtime.inspectVscode(runnerFor(runtime), runtime.signal)
254
+ : await inspectVscodeUserSettings(runnerFor(runtime), {
255
+ ...(runtime?.signal ? { signal: runtime.signal } : {}),
256
+ });
257
+ if (inspected.status === 'interrupted') {
258
+ return {
259
+ id: 'vscode',
260
+ label: 'VS Code',
261
+ status: 'interrupted',
262
+ message: `VS Code 探测被 ${inspected.signal} 中断。`,
263
+ recovery: '重新运行命令。',
264
+ };
265
+ }
266
+ if (inspected.status === 'unavailable') {
267
+ return {
268
+ id: 'vscode',
269
+ label: 'VS Code',
270
+ status: 'failed',
271
+ message: inspected.message,
272
+ recovery: '安装官方 VS Code,或先启动一次以创建用户配置目录后重试。',
273
+ };
274
+ }
275
+ const sourceBoundaryFailure = vscodeSourceBoundaryFailure(source, inspected.settingsPath);
276
+ if (sourceBoundaryFailure) {
277
+ return sourceBoundaryFailure;
278
+ }
279
+ return {
280
+ id: 'vscode',
281
+ label: 'VS Code',
282
+ status: 'ready',
283
+ message: `将更新用户配置: ${inspected.settingsPath}`,
284
+ recovery: '修复用户 settings.json 或组织策略后重试。',
285
+ settingsPath: inspected.settingsPath,
286
+ };
287
+ },
288
+ async execute(source, inspection, runtime) {
289
+ const localFailure = localIndexFailure(source, [
290
+ 'marketplace.json',
291
+ '.github/plugin/marketplace.json',
292
+ ]);
293
+ if (localFailure) {
294
+ return resultFromInspection(failedLocalInspection('vscode', 'VS Code', localFailure));
295
+ }
296
+ if (inspection.status !== 'ready' || !inspection.settingsPath) {
297
+ return resultFromInspection(inspection);
298
+ }
299
+ const sourceBoundaryFailure = vscodeSourceBoundaryFailure(source, inspection.settingsPath);
300
+ if (sourceBoundaryFailure) {
301
+ return resultFromInspection(sourceBoundaryFailure);
302
+ }
303
+ const updated = (runtime?.updateVscode ?? updateVscodeMarketplaceSettings)({
304
+ settingsPath: inspection.settingsPath,
305
+ source: source.vscodeValue,
306
+ });
307
+ if (updated.status === 'failed') {
308
+ return {
309
+ id: 'vscode',
310
+ label: 'VS Code',
311
+ status: 'failed',
312
+ message: updated.message,
313
+ recovery: '检查当前 settings.json 并修复 JSONC、权限或并发冲突后重试;并发恢复为最佳努力,不能保证保留无条件 rename 窗口内的新 inode 写入。',
314
+ };
315
+ }
316
+ return {
317
+ id: 'vscode',
318
+ label: 'VS Code',
319
+ status: 'completed',
320
+ message: updated.changed
321
+ ? '用户配置已注入;请重新加载 VS Code 窗口。组织策略可能覆盖用户设置。'
322
+ : '用户配置已包含该 Marketplace;请在需要时重新加载 VS Code 窗口。',
323
+ };
324
+ },
325
+ };
326
+ const cursorAdapter = {
327
+ id: 'cursor',
328
+ label: 'Cursor',
329
+ async inspect(source) {
330
+ const localFailure = localIndexFailure(source, ['.cursor-plugin/marketplace.json']);
331
+ if (localFailure) {
332
+ return failedLocalInspection('cursor', 'Cursor', localFailure);
333
+ }
334
+ return {
335
+ id: 'cursor',
336
+ label: 'Cursor',
337
+ status: 'manual-required',
338
+ message: 'Cursor 当前需要通过 Dashboard 手工导入。',
339
+ recovery: 'Cursor Team/Enterprise 管理员进入 Dashboard → Plugins → Add Marketplace → Import from Repo。',
340
+ };
341
+ },
342
+ async execute(_source, inspection) {
343
+ if (inspection.status === 'failed' || inspection.status === 'interrupted') {
344
+ return resultFromInspection(inspection);
345
+ }
346
+ return {
347
+ id: 'cursor',
348
+ label: 'Cursor',
349
+ status: 'manual-required',
350
+ message: 'Dashboard → Plugins → Add Marketplace → Import from Repo;需要 Cursor Team/Enterprise 且由管理员操作。',
351
+ recovery: '满足组织版本和管理员权限后,在 Cursor Dashboard 中导入同一 Git 仓库或本地来源。',
352
+ };
353
+ },
354
+ };
355
+ export const MARKETPLACE_REGISTRATION_ADAPTERS = [
356
+ claudeAdapter,
357
+ codexAdapter,
358
+ copilotAdapter,
359
+ vscodeAdapter,
360
+ cursorAdapter,
361
+ ];
362
+ export function getMarketplaceRegistrationAdapter(id) {
363
+ const adapter = MARKETPLACE_REGISTRATION_ADAPTERS.find((candidate) => candidate.id === id);
364
+ if (!adapter) {
365
+ throw new Error(`Unknown marketplace registration adapter: ${id}`);
366
+ }
367
+ return adapter;
368
+ }
369
+ //# sourceMappingURL=marketplace-registration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marketplace-registration.js","sourceRoot":"","sources":["../../src/adapters/marketplace-registration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { PluginYaml } from "../schema/plugin-yaml.js";
2
+ import type { MarketplaceMetadata } from "../application/marketplace.js";
3
+ export interface MarketplacePluginSource {
4
+ readonly directoryName: string;
5
+ readonly config: PluginYaml;
6
+ }
7
+ export declare function buildGithubCopilotMarketplace(marketplace: MarketplaceMetadata, plugins: readonly MarketplacePluginSource[]): unknown;
8
+ export declare function buildCursorMarketplace(marketplace: MarketplaceMetadata, plugins: readonly MarketplacePluginSource[]): unknown;
9
+ export declare function buildClaudeMarketplace(marketplace: MarketplaceMetadata, plugins: readonly MarketplacePluginSource[]): unknown;
10
+ export declare function buildCodexMarketplace(marketplace: MarketplaceMetadata, plugins: readonly MarketplacePluginSource[]): unknown;
11
+ export declare function buildMarketplaceCatalog(plugins: readonly MarketplacePluginSource[]): string;