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
package/dist/cli.js ADDED
@@ -0,0 +1,136 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * agent-plugkit CLI — AI agent plugin marketplace 工具
4
+ *
5
+ * 命令:
6
+ * agent-plugkit init-repo [name] 创建新插件仓库
7
+ * agent-plugkit init <name> 创建新插件
8
+ * agent-plugkit add <type> 向已有插件追加组件
9
+ * agent-plugkit import-skill <source> [name] 导入已有 skill 目录,生成新插件
10
+ * agent-plugkit validate [name] 验证插件格式
11
+ * agent-plugkit build [name] 生成 portable 与平台原生 manifest
12
+ * agent-plugkit index 生成 marketplace 索引
13
+ * agent-plugkit release-local 组装本地发布包
14
+ * agent-plugkit install-repo 注册已就绪的 marketplace 到客户端
15
+ */
16
+ import { readFileSync } from 'node:fs';
17
+ import { dirname, join } from 'node:path';
18
+ import { fileURLToPath } from 'node:url';
19
+ import chalk from 'chalk';
20
+ import { Command } from 'commander';
21
+ import { runInitRepo } from './commands/init-repo.js';
22
+ import { runInit } from './commands/init.js';
23
+ import { runAdd } from './commands/add.js';
24
+ import { runImportSkill } from './commands/import-skill.js';
25
+ import { runValidate } from './commands/validate.js';
26
+ import { runBuild } from './commands/build.js';
27
+ import { runIndexGen } from './commands/index-gen.js';
28
+ import { runReleaseLocal } from './commands/release-local.js';
29
+ import { runInstallRepo } from './commands/install-repo.js';
30
+ import { isCommandError } from './core/errors.js';
31
+ const program = new Command();
32
+ function rootOption() {
33
+ return program.opts().root;
34
+ }
35
+ function readPackageVersion() {
36
+ const packagePath = join(dirname(fileURLToPath(import.meta.url)), '..', 'package.json');
37
+ const raw = readFileSync(packagePath, 'utf-8');
38
+ const parsed = JSON.parse(raw);
39
+ return parsed.version || '0.0.0';
40
+ }
41
+ const helpTitleMap = {
42
+ 'Usage:': '用法:',
43
+ 'Arguments:': '参数:',
44
+ 'Options:': '选项:',
45
+ 'Global Options:': '全局选项:',
46
+ 'Commands:': '命令:',
47
+ };
48
+ function formatOptionDescription(option) {
49
+ const extraInfo = [];
50
+ if (option.argChoices) {
51
+ extraInfo.push(`可选值: ${option.argChoices.map((choice) => JSON.stringify(choice)).join(', ')}`);
52
+ }
53
+ if (option.defaultValue !== undefined) {
54
+ const showDefault = option.required ||
55
+ option.optional ||
56
+ (option.isBoolean() && typeof option.defaultValue === 'boolean');
57
+ if (showDefault) {
58
+ extraInfo.push(`默认值: ${option.defaultValueDescription || JSON.stringify(option.defaultValue)}`);
59
+ }
60
+ }
61
+ if (option.presetArg !== undefined && option.optional) {
62
+ extraInfo.push(`预设值: ${JSON.stringify(option.presetArg)}`);
63
+ }
64
+ if (option.envVar !== undefined) {
65
+ extraInfo.push(`环境变量: ${option.envVar}`);
66
+ }
67
+ return extraInfo.length > 0 ? `${option.description} (${extraInfo.join(', ')})` : option.description;
68
+ }
69
+ program
70
+ .name('agent-plugkit')
71
+ .description('管理 Agent Plugins 兼容的多客户端 AI agent plugin marketplace 仓库')
72
+ .version(readPackageVersion(), '-V, --version', '显示版本号')
73
+ .helpOption('-h, --help', '显示帮助')
74
+ .addHelpCommand('help [command]', '显示指定命令的帮助')
75
+ .configureHelp({
76
+ optionDescription: formatOptionDescription,
77
+ styleTitle: (title) => helpTitleMap[title] || title,
78
+ })
79
+ .option('--root <dir>', '插件仓库根目录;默认从当前目录向上查找 marketplace.yaml');
80
+ program
81
+ .command('init-repo [name]')
82
+ .description('创建新的 AI agent plugin marketplace 仓库')
83
+ .option('--organization <name>', 'marketplace 所属组织名称')
84
+ .option('--no-plugkit', '跳过初始化官方 plugkit 插件')
85
+ .action((name, options) => runInitRepo(name, { ...options, root: rootOption() }));
86
+ program
87
+ .command('init <name>')
88
+ .description('创建新插件骨架')
89
+ .option('-t, --type <type>', '插件类型: skill, mcp, lsp, hook', 'skill')
90
+ .action((name, options) => runInit(name, { ...options, root: rootOption() }));
91
+ program
92
+ .command('add <component> <plugin-name> <component-name>')
93
+ .description('向已有插件追加组件: skill, mcp, lsp, hook')
94
+ .action((component, pluginName, componentName) => runAdd(component, pluginName, componentName, { root: rootOption() }));
95
+ program
96
+ .command('import-skill <source> [name]')
97
+ .description('导入已有 skill 目录,生成新的 skill 插件')
98
+ .option('--description <text>', '覆盖插件描述')
99
+ .option('--author <name>', '覆盖插件作者名')
100
+ .action((source, name, options) => runImportSkill(source, name, { ...options, root: rootOption() }));
101
+ program
102
+ .command('validate [name]')
103
+ .description('验证插件格式')
104
+ .option('-a, --all', '验证所有插件')
105
+ .action((name, options) => runValidate(name, { ...options, root: rootOption() }));
106
+ program
107
+ .command('build [name]')
108
+ .description('从 plugin.yaml 生成 portable 与平台原生 manifest')
109
+ .option('-a, --all', '构建所有插件')
110
+ .action((name, options) => runBuild(name, { ...options, root: rootOption() }));
111
+ program
112
+ .command('index')
113
+ .description('生成 marketplace 索引文件')
114
+ .action(() => runIndexGen({ root: rootOption() }));
115
+ program
116
+ .command('release-local')
117
+ .description('组装本地发布包')
118
+ .action(() => runReleaseLocal({ root: rootOption() }));
119
+ program
120
+ .command('install-repo <source>')
121
+ .description('把已就绪的 marketplace 注册到所选 agent(不安装具体插件)')
122
+ .option('--agent <agent>', '目标 agent,可重复: claude, codex, copilot, vscode, cursor', (value, previous) => [...previous, value], [])
123
+ .option('--all', '选择全部五个 agent(Cursor 仍需手工处理)')
124
+ .action(async (source, options) => {
125
+ const result = await runInstallRepo(source, options);
126
+ process.exitCode = result.exitCode;
127
+ });
128
+ try {
129
+ await program.parseAsync();
130
+ }
131
+ catch (err) {
132
+ const message = err instanceof Error ? err.message : String(err);
133
+ console.error(chalk.red(`✗ ${message}`));
134
+ process.exit(isCommandError(err) ? err.exitCode : 1);
135
+ }
136
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * add 命令 — 向已有插件追加组件
3
+ *
4
+ * 用法:agent-plugkit add <skill|mcp|lsp|hook> <plugin-name> <component-name>
5
+ */
6
+ export declare function runAdd(typeArg: string, pluginName: string, componentName: string, options?: {
7
+ root?: string;
8
+ }): void;
@@ -0,0 +1,77 @@
1
+ /**
2
+ * add 命令 — 向已有插件追加组件
3
+ *
4
+ * 用法:agent-plugkit add <skill|mcp|lsp|hook> <plugin-name> <component-name>
5
+ */
6
+ import chalk from 'chalk';
7
+ import { executePluginComponentPlan, planPluginComponentMutation, readPluginComponents, } from '../application/plugin-components.js';
8
+ import { CommandError } from '../core/errors.js';
9
+ import { resolveRepoContext } from '../utils/helpers.js';
10
+ import { addedComponentEntry, assertKebabName, parseComponentType, } from './component-scaffold.js';
11
+ function componentLabel(type) {
12
+ switch (type) {
13
+ case 'skill':
14
+ return 'Skill';
15
+ case 'mcp':
16
+ return 'MCP server';
17
+ case 'lsp':
18
+ return 'LSP server';
19
+ case 'hook':
20
+ return 'Hook';
21
+ }
22
+ }
23
+ export function runAdd(typeArg, pluginName, componentName, options = {}) {
24
+ const type = parseComponentType(typeArg);
25
+ assertKebabName(pluginName, '插件名');
26
+ assertKebabName(componentName, '组件名');
27
+ const context = resolveRepoContext(options.root);
28
+ const entry = addedComponentEntry(type, componentName);
29
+ const value = type === 'skill'
30
+ ? entry.skills?.[0]
31
+ : type === 'mcp'
32
+ ? entry.mcp?.[0]
33
+ : type === 'hook'
34
+ ? entry.hooks?.[0]
35
+ : entry.lsp?.[0];
36
+ if (value === undefined) {
37
+ throw new CommandError(`无法创建 ${componentLabel(type)} 默认声明`);
38
+ }
39
+ const current = readPluginComponents({
40
+ directory: context.rootDir,
41
+ pluginDirectoryName: pluginName,
42
+ });
43
+ if (current.status !== 'loaded') {
44
+ throw new CommandError(current.status === 'unavailable'
45
+ ? `插件目录不存在或不可用: plugins/${pluginName}`
46
+ : current.message);
47
+ }
48
+ if (current.canonicalName !== pluginName) {
49
+ throw new CommandError(`plugin.yaml 中的 name (${current.canonicalName}) 与目录名 (${pluginName}) 不一致`);
50
+ }
51
+ const planned = planPluginComponentMutation({
52
+ directory: context.rootDir,
53
+ pluginDirectoryName: pluginName,
54
+ expectedRevision: current.revision,
55
+ mutation: {
56
+ operation: 'add',
57
+ kind: type,
58
+ value,
59
+ createScaffold: type === 'skill' || type === 'hook',
60
+ },
61
+ });
62
+ if (planned.status !== 'planned') {
63
+ const issue = 'issues' in planned ? planned.issues[0] : undefined;
64
+ throw new CommandError(issue?.message ?? planned.message);
65
+ }
66
+ console.log(chalk.blue(`⟳ 向插件 ${pluginName} 添加 ${componentLabel(type)}: ${componentName}`));
67
+ const result = executePluginComponentPlan(planned.plan);
68
+ if (result.status !== 'saved') {
69
+ throw new CommandError(result.status === 'conflict'
70
+ ? 'plugin.yaml 已在外部变化,请重新运行 add'
71
+ : result.message);
72
+ }
73
+ console.log(chalk.green(`✓ 已添加 ${componentLabel(type)}: plugins/${pluginName}`));
74
+ console.log(chalk.gray(` → 运行 agent-plugkit build ${pluginName}`));
75
+ console.log(chalk.gray(` → 运行 agent-plugkit validate ${pluginName}`));
76
+ }
77
+ //# sourceMappingURL=add.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * build 命令 — 从 plugin.yaml 生成 portable 与平台原生 manifest
3
+ */
4
+ export declare function runBuild(name: string | undefined, options: {
5
+ all: boolean;
6
+ root?: string;
7
+ }): void;
@@ -0,0 +1,29 @@
1
+ /**
2
+ * build 命令 — 从 plugin.yaml 生成 portable 与平台原生 manifest
3
+ */
4
+ import chalk from 'chalk';
5
+ import { CommandError } from '../core/errors.js';
6
+ import { listPluginNames, resolveRepoContext, } from '../utils/helpers.js';
7
+ import { commitPluginBuildPlan, planPluginBuild, } from '../application/artifact-generation.js';
8
+ export function runBuild(name, options) {
9
+ const context = resolveRepoContext(options.root);
10
+ const names = options.all ? listPluginNames(context) : name ? [name] : [];
11
+ if (names.length === 0) {
12
+ throw new CommandError('请指定插件名或使用 --all');
13
+ }
14
+ console.log(chalk.blue(`⟳ 构建 ${names.length} 个插件的平台 manifest...\n`));
15
+ for (const n of names) {
16
+ try {
17
+ const result = commitPluginBuildPlan(planPluginBuild(context.rootDir, n));
18
+ if (result.status !== 'committed' && result.status !== 'verified') {
19
+ throw new Error('message' in result ? result.message : '生成物提交没有完成');
20
+ }
21
+ console.log(chalk.green(` ✓ ${n}`));
22
+ }
23
+ catch (err) {
24
+ throw new CommandError(`${n}: ${err.message}`);
25
+ }
26
+ }
27
+ console.log(chalk.green(`\n✓ 构建完成`));
28
+ }
29
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EACL,eAAe,EACf,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,qBAAqB,EACrB,eAAe,GAChB,MAAM,uCAAuC,CAAC;AAE/C,MAAM,UAAU,QAAQ,CACtB,IAAwB,EACxB,OAAwC;IAExC,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE1E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,YAAY,CAAC,iBAAiB,CAAC,CAAC;IAC5C,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,MAAM,uBAAuB,CAAC,CAAC,CAAC;IAErE,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,qBAAqB,CAClC,eAAe,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CACpC,CAAC;YACF,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBAClE,MAAM,IAAI,KAAK,CACb,SAAS,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CACnD,CAAC;YACJ,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,YAAY,CAAC,GAAG,CAAC,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { COMPONENT_TYPES, addedComponentEntry, createInitialPluginConfig, dumpPluginYaml, skillEntry, type ComponentType } from '../application/plugin-scaffold.js';
2
+ export { COMPONENT_TYPES, addedComponentEntry, createInitialPluginConfig, dumpPluginYaml, skillEntry, type ComponentType, };
3
+ export declare function parseComponentType(type: string): ComponentType;
4
+ export declare function assertKebabName(name: string, label: string): void;
@@ -0,0 +1,14 @@
1
+ import { CommandError } from '../core/errors.js';
2
+ import { COMPONENT_TYPES, addedComponentEntry, createInitialPluginConfig, dumpPluginYaml, isComponentType, isPluginName, skillEntry, } from '../application/plugin-scaffold.js';
3
+ export { COMPONENT_TYPES, addedComponentEntry, createInitialPluginConfig, dumpPluginYaml, skillEntry, };
4
+ export function parseComponentType(type) {
5
+ if (isComponentType(type))
6
+ return type;
7
+ throw new CommandError(`组件类型非法: ${type}. 可选值: ${COMPONENT_TYPES.join(', ')}`);
8
+ }
9
+ export function assertKebabName(name, label) {
10
+ if (!isPluginName(name)) {
11
+ throw new CommandError(`${label} 必须使用 kebab-case 小写名称: ${name}`);
12
+ }
13
+ }
14
+ //# sourceMappingURL=component-scaffold.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component-scaffold.js","sourceRoot":"","sources":["../../src/commands/component-scaffold.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,yBAAyB,EACzB,cAAc,EACd,eAAe,EACf,YAAY,EACZ,UAAU,GAEX,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,yBAAyB,EACzB,cAAc,EACd,UAAU,GAEX,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,IAAI,eAAe,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,MAAM,IAAI,YAAY,CAAC,WAAW,IAAI,UAAU,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,KAAa;IACzD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,YAAY,CAAC,GAAG,KAAK,0BAA0B,IAAI,EAAE,CAAC,CAAC;IACnE,CAAC;AACH,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * import-skill 命令 — 导入已有 skill 目录,生成新的 skill 插件
3
+ *
4
+ * 用法:agent-plugkit import-skill <source> [name] [--description <text>] [--author <name>]
5
+ *
6
+ * 命令层只保留既有终端呈现。源检查、推导、预算、staging、冲突检查与
7
+ * 回滚全部由共享 application 能力拥有。
8
+ */
9
+ interface ImportSkillOptions {
10
+ description?: string;
11
+ author?: string;
12
+ root?: string;
13
+ }
14
+ export declare function runImportSkill(source: string, name: string | undefined, options?: ImportSkillOptions): void;
15
+ export {};
@@ -0,0 +1,41 @@
1
+ /**
2
+ * import-skill 命令 — 导入已有 skill 目录,生成新的 skill 插件
3
+ *
4
+ * 用法:agent-plugkit import-skill <source> [name] [--description <text>] [--author <name>]
5
+ *
6
+ * 命令层只保留既有终端呈现。源检查、推导、预算、staging、冲突检查与
7
+ * 回滚全部由共享 application 能力拥有。
8
+ */
9
+ import chalk from 'chalk';
10
+ import { executePluginTransaction, planSkillImport, } from '../application/plugin-lifecycle.js';
11
+ import { CommandError } from '../core/errors.js';
12
+ import { resolveInvocationPath, resolveRepoContext } from '../utils/helpers.js';
13
+ export function runImportSkill(source, name, options = {}) {
14
+ const absSource = resolveInvocationPath(source);
15
+ const context = resolveRepoContext(options.root);
16
+ const planned = planSkillImport({
17
+ workspaceDirectory: context.rootDir,
18
+ sourceDirectory: absSource,
19
+ ...(name === undefined ? {} : { name }),
20
+ ...(options.description === undefined
21
+ ? {}
22
+ : { description: options.description }),
23
+ ...(options.author === undefined ? {} : { author: options.author }),
24
+ });
25
+ if (planned.status !== 'planned') {
26
+ throw new CommandError(planned.problem.message);
27
+ }
28
+ const pluginName = planned.plan.derivation.pluginName;
29
+ console.log(chalk.blue(`⟳ 导入 skill: ${absSource} → plugins/${pluginName}`));
30
+ for (const warning of planned.plan.derivation.warnings) {
31
+ console.log(chalk.yellow(` ! ${warning.message}`));
32
+ }
33
+ const created = executePluginTransaction(planned.plan);
34
+ if (created.status !== 'created') {
35
+ throw new CommandError(created.problem.message);
36
+ }
37
+ console.log(chalk.green(`✓ 插件创建成功: plugins/${pluginName}/`));
38
+ console.log(chalk.gray(` → 运行 agent-plugkit build ${pluginName}`));
39
+ console.log(chalk.gray(` → 运行 agent-plugkit validate ${pluginName}`));
40
+ }
41
+ //# sourceMappingURL=import-skill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-skill.js","sourceRoot":"","sources":["../../src/commands/import-skill.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACL,wBAAwB,EACxB,eAAe,GAChB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAQhF,MAAM,UAAU,cAAc,CAC5B,MAAc,EACd,IAAwB,EACxB,UAA8B,EAAE;IAEhC,MAAM,SAAS,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,eAAe,CAAC;QAC9B,kBAAkB,EAAE,OAAO,CAAC,OAAO;QACnC,eAAe,EAAE,SAAS;QAC1B,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QACvC,GAAG,CAAC,OAAO,CAAC,WAAW,KAAK,SAAS;YACnC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC;QACzC,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;KACpE,CAAC,CAAC;IACH,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACjC,MAAM,IAAI,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,SAAS,cAAc,UAAU,EAAE,CAAC,CAAC,CAAC;IAC5E,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,OAAO,GAAG,wBAAwB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACjC,MAAM,IAAI,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,qBAAqB,UAAU,GAAG,CAAC,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,8BAA8B,UAAU,EAAE,CAAC,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iCAAiC,UAAU,EAAE,CAAC,CAAC,CAAC;AACzE,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * index-gen 命令 — 生成 marketplace 索引文件
3
+ *
4
+ * Claude Code: 生成 .claude-plugin/marketplace.json
5
+ * Codex: 生成 .agents/plugins/marketplace.json
6
+ * GitHub Copilot / VS Code: 生成 .github/plugin/marketplace.json
7
+ * 根 marketplace.json: 生成 Copilot 优先查找路径所需的兼容镜像
8
+ * Cursor: 生成 .cursor-plugin/marketplace.json
9
+ */
10
+ export declare function runIndexGen(options?: {
11
+ root?: string;
12
+ }): void;
@@ -0,0 +1,33 @@
1
+ /**
2
+ * index-gen 命令 — 生成 marketplace 索引文件
3
+ *
4
+ * Claude Code: 生成 .claude-plugin/marketplace.json
5
+ * Codex: 生成 .agents/plugins/marketplace.json
6
+ * GitHub Copilot / VS Code: 生成 .github/plugin/marketplace.json
7
+ * 根 marketplace.json: 生成 Copilot 优先查找路径所需的兼容镜像
8
+ * Cursor: 生成 .cursor-plugin/marketplace.json
9
+ */
10
+ import chalk from 'chalk';
11
+ import { resolveRepoContext, } from '../utils/helpers.js';
12
+ import { commitMarketplaceIndexPlan, planMarketplaceIndex, } from '../application/artifact-generation.js';
13
+ export function runIndexGen(options = {}) {
14
+ console.log(chalk.blue('⟳ 生成 marketplace 索引...\n'));
15
+ const context = resolveRepoContext(options.root);
16
+ const plan = planMarketplaceIndex(context.rootDir);
17
+ if (plan.pluginCount === 0) {
18
+ console.log(chalk.yellow(' ⚠ 没有找到插件'));
19
+ return;
20
+ }
21
+ const result = commitMarketplaceIndexPlan(plan);
22
+ if (result.status !== 'committed' && result.status !== 'verified') {
23
+ throw new Error('message' in result ? result.message : '索引提交没有完成');
24
+ }
25
+ console.log(chalk.green(' ✓ .claude-plugin/marketplace.json (Claude Code)'));
26
+ console.log(chalk.green(' ✓ .agents/plugins/marketplace.json (Codex)'));
27
+ console.log(chalk.green(' ✓ .github/plugin/marketplace.json (GitHub Copilot / VS Code)'));
28
+ console.log(chalk.green(' ✓ .cursor-plugin/marketplace.json (Cursor)'));
29
+ console.log(chalk.green(' ✓ marketplace.json (GitHub Copilot 优先路径兼容镜像)'));
30
+ console.log(chalk.green(' ✓ plugins/CATALOG.md'));
31
+ console.log(chalk.green(`\n✓ 索引生成完成 (${plan.pluginCount} 个插件)`));
32
+ }
33
+ //# sourceMappingURL=index-gen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-gen.js","sourceRoot":"","sources":["../../src/commands/index-gen.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACL,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,0BAA0B,EAC1B,oBAAoB,GACrB,MAAM,uCAAuC,CAAC;AAE/C,MAAM,UAAU,WAAW,CAAC,UAA6B,EAAE;IACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;IAEpD,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,oBAAoB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAEnD,IAAI,IAAI,CAAC,WAAW,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;QACxC,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAClE,MAAM,IAAI,KAAK,CACb,SAAS,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAClD,CAAC;IACJ,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC,CAAC;IAC9E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAC,CAAC;IAC3F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC,CAAC;IAC3E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;IAEnD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,IAAI,CAAC,WAAW,OAAO,CAAC,CAAC,CAAC;AACnE,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * init-repo 命令 — 创建新的 AI agent plugin marketplace 仓库
3
+ */
4
+ export declare function runInitRepo(name: string | undefined, options: {
5
+ organization?: string;
6
+ plugkit?: boolean;
7
+ root?: string;
8
+ }): void;
@@ -0,0 +1,53 @@
1
+ /**
2
+ * init-repo 命令 — 创建新的 AI agent plugin marketplace 仓库
3
+ */
4
+ import { existsSync, mkdirSync } from 'node:fs';
5
+ import { join } from 'node:path';
6
+ import chalk from 'chalk';
7
+ import { resolveInvocationPath } from '../utils/helpers.js';
8
+ import { CommandError } from '../core/errors.js';
9
+ import { executeWorkspaceCreation, normalizeWorkspaceCreationRequest, planWorkspaceCreation, } from '../application/workspace-create.js';
10
+ const CLI_PACKAGE = 'agent-plugkit';
11
+ export function runInitRepo(name, options) {
12
+ const rootDir = options.root ? resolveInvocationPath(options.root) : resolveInvocationPath('.');
13
+ if (!existsSync(rootDir))
14
+ mkdirSync(rootDir, { recursive: true });
15
+ const request = normalizeWorkspaceCreationRequest(rootDir, name, options.organization, options.plugkit !== false);
16
+ const plan = planWorkspaceCreation(request);
17
+ const existingMarketplace = plan.conflicts.find((conflict) => conflict.code === 'MARKETPLACE_EXISTS');
18
+ if (existingMarketplace) {
19
+ throw new CommandError(`marketplace.yaml 已存在: ${join(rootDir, 'marketplace.yaml')}`);
20
+ }
21
+ if (plan.status === 'blocked') {
22
+ throw new CommandError(plan.conflicts[0]?.message ?? '无法初始化仓库');
23
+ }
24
+ console.log(chalk.blue(`⟳ 初始化 AI agent plugin marketplace 仓库: ${request.name}`));
25
+ const result = executeWorkspaceCreation(request, plan.fingerprint);
26
+ if (result.status !== 'created') {
27
+ const message = result.status === 'blocked'
28
+ ? result.conflicts[0]?.message
29
+ : result.message;
30
+ throw new CommandError(message ?? '无法初始化仓库');
31
+ }
32
+ if (request.includePlugkit) {
33
+ const writtenPlugkit = result.written.filter((path) => path.startsWith('plugins/plugkit/'));
34
+ const preservedPlugkit = result.preserved.filter((path) => path.startsWith('plugins/plugkit/'));
35
+ if (writtenPlugkit.length > 0) {
36
+ console.log(chalk.green('✓ 已初始化官方 plugkit 插件'));
37
+ for (const path of writtenPlugkit) {
38
+ console.log(chalk.gray(` → ${path}`));
39
+ }
40
+ }
41
+ if (preservedPlugkit.length > 0) {
42
+ console.log(chalk.yellow('! 官方 plugkit 插件文件已存在,保留现有文件'));
43
+ for (const path of preservedPlugkit) {
44
+ console.log(chalk.gray(` → ${path}`));
45
+ }
46
+ }
47
+ }
48
+ console.log(chalk.green(`✓ 仓库初始化完成: ${rootDir}`));
49
+ console.log(chalk.gray(` → npx ${CLI_PACKAGE} init my-plugin`));
50
+ console.log(chalk.gray(` → npx ${CLI_PACKAGE} add skill plugkit audit`));
51
+ console.log(chalk.gray(` → npx ${CLI_PACKAGE} validate --all`));
52
+ }
53
+ //# sourceMappingURL=init-repo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init-repo.js","sourceRoot":"","sources":["../../src/commands/init-repo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * init 命令 — 创建新插件骨架
3
+ *
4
+ * 用法:agent-plugkit init <name> [--type skill|mcp|lsp|hook]
5
+ */
6
+ export declare function runInit(name: string, options: {
7
+ type: string;
8
+ root?: string;
9
+ }): void;
@@ -0,0 +1,33 @@
1
+ /**
2
+ * init 命令 — 创建新插件骨架
3
+ *
4
+ * 用法:agent-plugkit init <name> [--type skill|mcp|lsp|hook]
5
+ */
6
+ import chalk from 'chalk';
7
+ import { resolveRepoContext } from '../utils/helpers.js';
8
+ import { CommandError } from '../core/errors.js';
9
+ import { executePluginTransaction, planPluginCreation, } from '../application/plugin-lifecycle.js';
10
+ import { assertKebabName, parseComponentType, } from './component-scaffold.js';
11
+ export function runInit(name, options) {
12
+ const context = resolveRepoContext(options.root);
13
+ assertKebabName(name, '插件名');
14
+ const type = parseComponentType(options.type || 'skill');
15
+ const planned = planPluginCreation(context.rootDir, name, type);
16
+ if (planned.status !== 'planned') {
17
+ throw new CommandError(planned.problem.message);
18
+ }
19
+ console.log(chalk.blue(`⟳ 创建插件: ${name} (类型: ${type})`));
20
+ const created = executePluginTransaction(planned.plan);
21
+ if (created.status !== 'created') {
22
+ throw new CommandError(created.problem.message);
23
+ }
24
+ console.log(chalk.green(`✓ 插件创建成功: plugins/${name}/`));
25
+ console.log(chalk.gray(` → 编辑 plugin.yaml 完善配置`));
26
+ if (type === 'skill' || type === 'mcp' || type === 'lsp') {
27
+ console.log(chalk.gray(` → 编辑 skills/${name}/SKILL.md 编写指令`));
28
+ }
29
+ if (type === 'hook') {
30
+ console.log(chalk.gray(` → 编辑 hooks/${name}.sh 实现逻辑`));
31
+ }
32
+ }
33
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EACL,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,eAAe,EACf,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,OAAwC;IAC5E,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC7B,MAAM,IAAI,GAAG,kBAAkB,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAChE,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACjC,MAAM,IAAI,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,SAAS,IAAI,GAAG,CAAC,CAAC,CAAC;IACzD,MAAM,OAAO,GAAG,wBAAwB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACjC,MAAM,IAAI,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,qBAAqB,IAAI,GAAG,CAAC,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;IACnD,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,IAAI,gBAAgB,CAAC,CAAC,CAAC;IACjE,CAAC;IACD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,IAAI,UAAU,CAAC,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { MarketplaceRegistrationRuntime } from '../adapters/marketplace-registration.js';
2
+ import { type AgentTargetId, type MarketplaceRegistrationReport } from '../application/marketplace-registration-contract.js';
3
+ export interface InstallRepoOptions {
4
+ readonly agent?: readonly string[];
5
+ readonly all?: boolean;
6
+ }
7
+ export interface InstallRepoCommandDependencies {
8
+ readonly runtime?: MarketplaceRegistrationRuntime;
9
+ readonly baseDir?: string;
10
+ readonly homeDir?: string;
11
+ readonly interactive?: boolean;
12
+ readonly readSelection?: (signal: AbortSignal) => Promise<string | undefined>;
13
+ readonly write?: (text: string) => void;
14
+ }
15
+ export interface InstallRepoCommandResult {
16
+ readonly exitCode: 0 | 1 | 2 | 130;
17
+ readonly report?: MarketplaceRegistrationReport;
18
+ }
19
+ export declare function parseTargetSelection(input: string, availableTargetIds: readonly AgentTargetId[], defaultTargetIds: readonly AgentTargetId[]): AgentTargetId[];
20
+ export declare function runInstallRepo(source: string, options: InstallRepoOptions, dependencies?: InstallRepoCommandDependencies): Promise<InstallRepoCommandResult>;