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
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
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -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,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,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,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>;
|