autodoc-agent-kit 1.0.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/README.md +362 -0
- package/package.json +49 -0
- package/src/core/module.yaml +5 -0
- package/src/modules/design/module.yaml +9 -0
- package/src/modules/design/skills/brand-guidelines/LICENSE.txt +202 -0
- package/src/modules/design/skills/brand-guidelines/SKILL.md +73 -0
- package/src/modules/design/skills/frontend-design/LICENSE.txt +177 -0
- package/src/modules/design/skills/frontend-design/SKILL.md +42 -0
- package/src/modules/design/skills/web-artifacts-builder/SKILL.md +229 -0
- package/src/modules/devops/module.yaml +10 -0
- package/src/modules/devops/skills/devops-helper/SKILL.md +60 -0
- package/src/modules/devops/skills/k8s-helm/SKILL.md +360 -0
- package/src/modules/devops/skills/monitoring-observability/SKILL.md +240 -0
- package/src/modules/devops/skills/security-auditor/SKILL.md +105 -0
- package/src/modules/engineering/module.yaml +22 -0
- package/src/modules/engineering/skills/ai-sdk/SKILL.md +314 -0
- package/src/modules/engineering/skills/api-designer/SKILL.md +77 -0
- package/src/modules/engineering/skills/code-reviewer/SKILL.md +71 -0
- package/src/modules/engineering/skills/db-architect/SKILL.md +50 -0
- package/src/modules/engineering/skills/debugger/SKILL.md +59 -0
- package/src/modules/engineering/skills/docs-generator/SKILL.md +51 -0
- package/src/modules/engineering/skills/git-workflow/SKILL.md +258 -0
- package/src/modules/engineering/skills/mcp-builder/LICENSE.txt +202 -0
- package/src/modules/engineering/skills/mcp-builder/SKILL.md +236 -0
- package/src/modules/engineering/skills/mcp-builder/reference/evaluation.md +602 -0
- package/src/modules/engineering/skills/mcp-builder/reference/mcp_best_practices.md +249 -0
- package/src/modules/engineering/skills/mcp-builder/reference/node_mcp_server.md +970 -0
- package/src/modules/engineering/skills/mcp-builder/reference/python_mcp_server.md +719 -0
- package/src/modules/engineering/skills/mcp-builder/scripts/connections.py +151 -0
- package/src/modules/engineering/skills/mcp-builder/scripts/evaluation.py +373 -0
- package/src/modules/engineering/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
- package/src/modules/engineering/skills/mcp-builder/scripts/requirements.txt +2 -0
- package/src/modules/engineering/skills/nextjs-15/SKILL.md +312 -0
- package/src/modules/engineering/skills/perf-optimizer/SKILL.md +60 -0
- package/src/modules/engineering/skills/react-19/SKILL.md +257 -0
- package/src/modules/engineering/skills/refactorer/SKILL.md +60 -0
- package/src/modules/engineering/skills/skill-authoring-workflow/SKILL.md +183 -0
- package/src/modules/engineering/skills/skill-creator/LICENSE.txt +202 -0
- package/src/modules/engineering/skills/skill-creator/SKILL.md +356 -0
- package/src/modules/engineering/skills/skill-creator/references/output-patterns.md +82 -0
- package/src/modules/engineering/skills/skill-creator/references/workflows.md +28 -0
- package/src/modules/engineering/skills/skill-creator/scripts/__pycache__/quick_validate.cpython-313.pyc +0 -0
- package/src/modules/engineering/skills/skill-creator/scripts/init_skill.py +303 -0
- package/src/modules/engineering/skills/skill-creator/scripts/package_skill.py +110 -0
- package/src/modules/engineering/skills/skill-creator/scripts/quick_validate.py +95 -0
- package/src/modules/engineering/skills/typescript/SKILL.md +231 -0
- package/src/modules/engineering/skills/zod-4/SKILL.md +223 -0
- package/src/modules/product/module.yaml +51 -0
- package/src/modules/product/skills/acquisition-channel-advisor/SKILL.md +643 -0
- package/src/modules/product/skills/acquisition-channel-advisor/examples/conversation-flow.md +531 -0
- package/src/modules/product/skills/ai-shaped-readiness-advisor/SKILL.md +923 -0
- package/src/modules/product/skills/altitude-horizon-framework/SKILL.md +250 -0
- package/src/modules/product/skills/altitude-horizon-framework/examples/sample.md +85 -0
- package/src/modules/product/skills/business-health-diagnostic/SKILL.md +783 -0
- package/src/modules/product/skills/company-research/SKILL.md +385 -0
- package/src/modules/product/skills/company-research/examples/sample.md +164 -0
- package/src/modules/product/skills/company-research/template.md +60 -0
- package/src/modules/product/skills/context-engineering-advisor/SKILL.md +763 -0
- package/src/modules/product/skills/customer-journey-map/SKILL.md +346 -0
- package/src/modules/product/skills/customer-journey-map/examples/meta-product-manager-skills.md +40 -0
- package/src/modules/product/skills/customer-journey-map/examples/sample.md +33 -0
- package/src/modules/product/skills/customer-journey-map/template.md +28 -0
- package/src/modules/product/skills/customer-journey-mapping-workshop/SKILL.md +523 -0
- package/src/modules/product/skills/director-readiness-advisor/SKILL.md +351 -0
- package/src/modules/product/skills/director-readiness-advisor/examples/conversation-flow.md +96 -0
- package/src/modules/product/skills/discovery-interview-prep/SKILL.md +410 -0
- package/src/modules/product/skills/discovery-process/SKILL.md +504 -0
- package/src/modules/product/skills/discovery-process/examples/sample.md +60 -0
- package/src/modules/product/skills/discovery-process/template.md +39 -0
- package/src/modules/product/skills/eol-message/SKILL.md +348 -0
- package/src/modules/product/skills/eol-message/examples/sample.md +87 -0
- package/src/modules/product/skills/eol-message/template.md +74 -0
- package/src/modules/product/skills/epic-breakdown-advisor/SKILL.md +665 -0
- package/src/modules/product/skills/epic-hypothesis/SKILL.md +277 -0
- package/src/modules/product/skills/epic-hypothesis/examples/sample.md +104 -0
- package/src/modules/product/skills/epic-hypothesis/template.md +30 -0
- package/src/modules/product/skills/executive-onboarding-playbook/SKILL.md +280 -0
- package/src/modules/product/skills/executive-onboarding-playbook/examples/sample.md +116 -0
- package/src/modules/product/skills/feature-investment-advisor/SKILL.md +639 -0
- package/src/modules/product/skills/feature-investment-advisor/examples/conversation-flow.md +538 -0
- package/src/modules/product/skills/finance-based-pricing-advisor/SKILL.md +763 -0
- package/src/modules/product/skills/finance-metrics-quickref/SKILL.md +309 -0
- package/src/modules/product/skills/jobs-to-be-done/SKILL.md +370 -0
- package/src/modules/product/skills/jobs-to-be-done/examples/sample.md +80 -0
- package/src/modules/product/skills/jobs-to-be-done/template.md +65 -0
- package/src/modules/product/skills/lean-ux-canvas/SKILL.md +561 -0
- package/src/modules/product/skills/lean-ux-canvas/examples/sample.md +88 -0
- package/src/modules/product/skills/lean-ux-canvas/template.md +32 -0
- package/src/modules/product/skills/opportunity-solution-tree/SKILL.md +420 -0
- package/src/modules/product/skills/opportunity-solution-tree/examples/sample.md +104 -0
- package/src/modules/product/skills/opportunity-solution-tree/template.md +33 -0
- package/src/modules/product/skills/pestel-analysis/SKILL.md +376 -0
- package/src/modules/product/skills/pestel-analysis/examples/sample.md +143 -0
- package/src/modules/product/skills/pestel-analysis/template.md +53 -0
- package/src/modules/product/skills/pol-probe/SKILL.md +217 -0
- package/src/modules/product/skills/pol-probe/examples/sample.md +136 -0
- package/src/modules/product/skills/pol-probe/template.md +59 -0
- package/src/modules/product/skills/pol-probe-advisor/SKILL.md +492 -0
- package/src/modules/product/skills/positioning-statement/SKILL.md +230 -0
- package/src/modules/product/skills/positioning-statement/examples/sample.md +51 -0
- package/src/modules/product/skills/positioning-statement/template.md +25 -0
- package/src/modules/product/skills/positioning-workshop/SKILL.md +424 -0
- package/src/modules/product/skills/prd-development/SKILL.md +655 -0
- package/src/modules/product/skills/prd-development/examples/sample.md +43 -0
- package/src/modules/product/skills/prd-development/template.md +55 -0
- package/src/modules/product/skills/press-release/SKILL.md +269 -0
- package/src/modules/product/skills/press-release/examples/sample.md +73 -0
- package/src/modules/product/skills/press-release/template.md +39 -0
- package/src/modules/product/skills/prioritization-advisor/SKILL.md +448 -0
- package/src/modules/product/skills/problem-framing-canvas/SKILL.md +466 -0
- package/src/modules/product/skills/problem-framing-canvas/examples/sample.md +58 -0
- package/src/modules/product/skills/problem-framing-canvas/template.md +22 -0
- package/src/modules/product/skills/problem-statement/SKILL.md +246 -0
- package/src/modules/product/skills/problem-statement/examples/sample.md +82 -0
- package/src/modules/product/skills/problem-statement/template.md +37 -0
- package/src/modules/product/skills/product-strategy-session/SKILL.md +426 -0
- package/src/modules/product/skills/product-strategy-session/examples/sample.md +67 -0
- package/src/modules/product/skills/product-strategy-session/template.md +38 -0
- package/src/modules/product/skills/proto-persona/SKILL.md +326 -0
- package/src/modules/product/skills/proto-persona/examples/sample.md +97 -0
- package/src/modules/product/skills/proto-persona/template.md +45 -0
- package/src/modules/product/skills/recommendation-canvas/SKILL.md +375 -0
- package/src/modules/product/skills/recommendation-canvas/examples/sample.md +94 -0
- package/src/modules/product/skills/recommendation-canvas/template.md +86 -0
- package/src/modules/product/skills/roadmap-planning/SKILL.md +505 -0
- package/src/modules/product/skills/roadmap-planning/examples/sample.md +62 -0
- package/src/modules/product/skills/roadmap-planning/template.md +30 -0
- package/src/modules/product/skills/saas-economics-efficiency-metrics/SKILL.md +694 -0
- package/src/modules/product/skills/saas-economics-efficiency-metrics/examples/cash-trap.md +365 -0
- package/src/modules/product/skills/saas-economics-efficiency-metrics/examples/healthy-unit-economics.md +279 -0
- package/src/modules/product/skills/saas-economics-efficiency-metrics/template.md +263 -0
- package/src/modules/product/skills/saas-revenue-growth-metrics/SKILL.md +630 -0
- package/src/modules/product/skills/saas-revenue-growth-metrics/examples/healthy-saas.md +131 -0
- package/src/modules/product/skills/saas-revenue-growth-metrics/examples/warning-signs.md +229 -0
- package/src/modules/product/skills/saas-revenue-growth-metrics/template.md +192 -0
- package/src/modules/product/skills/storyboard/SKILL.md +252 -0
- package/src/modules/product/skills/storyboard/examples/sample.md +71 -0
- package/src/modules/product/skills/storyboard/template.md +41 -0
- package/src/modules/product/skills/tam-sam-som-calculator/SKILL.md +392 -0
- package/src/modules/product/skills/tam-sam-som-calculator/examples/sample.md +142 -0
- package/src/modules/product/skills/tam-sam-som-calculator/scripts/market-sizing.py +95 -0
- package/src/modules/product/skills/tam-sam-som-calculator/template.md +35 -0
- package/src/modules/product/skills/user-story/SKILL.md +272 -0
- package/src/modules/product/skills/user-story/examples/sample.md +110 -0
- package/src/modules/product/skills/user-story/scripts/user-story-template.py +65 -0
- package/src/modules/product/skills/user-story/template.md +32 -0
- package/src/modules/product/skills/user-story-mapping/SKILL.md +285 -0
- package/src/modules/product/skills/user-story-mapping/examples/sample.md +77 -0
- package/src/modules/product/skills/user-story-mapping/template.md +41 -0
- package/src/modules/product/skills/user-story-mapping-workshop/SKILL.md +477 -0
- package/src/modules/product/skills/user-story-mapping-workshop/template.md +28 -0
- package/src/modules/product/skills/user-story-splitting/SKILL.md +303 -0
- package/src/modules/product/skills/user-story-splitting/examples/sample.md +147 -0
- package/src/modules/product/skills/user-story-splitting/template.md +37 -0
- package/src/modules/product/skills/vp-cpo-readiness-advisor/SKILL.md +409 -0
- package/src/modules/product/skills/vp-cpo-readiness-advisor/examples/conversation-flow.md +95 -0
- package/src/modules/product/skills/workshop-facilitation/SKILL.md +87 -0
- package/src/modules/productivity/module.yaml +9 -0
- package/src/modules/productivity/skills/doc-coauthoring/SKILL.md +375 -0
- package/src/modules/productivity/skills/internal-comms/LICENSE.txt +202 -0
- package/src/modules/productivity/skills/internal-comms/SKILL.md +32 -0
- package/src/modules/productivity/skills/internal-comms/examples/3p-updates.md +47 -0
- package/src/modules/productivity/skills/internal-comms/examples/company-newsletter.md +65 -0
- package/src/modules/productivity/skills/internal-comms/examples/faq-answers.md +30 -0
- package/src/modules/productivity/skills/internal-comms/examples/general-comms.md +16 -0
- package/src/modules/productivity/skills/technical-writing/SKILL.md +266 -0
- package/src/modules/qa/module.yaml +9 -0
- package/src/modules/qa/skills/test-strategy/SKILL.md +263 -0
- package/src/modules/qa/skills/test-writer/SKILL.md +57 -0
- package/src/modules/qa/skills/webapp-testing/LICENSE.txt +202 -0
- package/src/modules/qa/skills/webapp-testing/SKILL.md +96 -0
- package/src/modules/qa/skills/webapp-testing/examples/console_logging.py +35 -0
- package/src/modules/qa/skills/webapp-testing/examples/element_discovery.py +40 -0
- package/src/modules/qa/skills/webapp-testing/examples/static_html_automation.py +33 -0
- package/src/modules/qa/skills/webapp-testing/scripts/with_server.py +106 -0
- package/tools/autodoc-npx-wrapper.js +34 -0
- package/tools/cli/autodoc-cli.js +55 -0
- package/tools/cli/commands/install.js +36 -0
- package/tools/cli/commands/status.js +35 -0
- package/tools/cli/commands/uninstall.js +60 -0
- package/tools/cli/installers/lib/core/installer.js +164 -0
- package/tools/cli/installers/lib/core/manifest.js +49 -0
- package/tools/cli/installers/lib/ide/manager.js +112 -0
- package/tools/cli/installers/lib/ide/platform-codes.yaml +207 -0
- package/tools/cli/installers/lib/modules/manager.js +59 -0
- package/tools/cli/lib/ui.js +199 -0
- package/tools/cli/lib/welcome.js +82 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const { UI } = require('../lib/ui');
|
|
4
|
+
const { Installer } = require('../installers/lib/core/installer');
|
|
5
|
+
|
|
6
|
+
const ui = new UI();
|
|
7
|
+
const installer = new Installer();
|
|
8
|
+
|
|
9
|
+
module.exports = {
|
|
10
|
+
command: 'install',
|
|
11
|
+
description: 'Install autodoc-agent-kit skills into your project',
|
|
12
|
+
options: [
|
|
13
|
+
['--directory <path>', 'Target project directory (default: current directory)'],
|
|
14
|
+
['--modules <modules>', 'Comma-separated module codes to install (e.g. "engineering,qa")'],
|
|
15
|
+
['--ides <ides>', 'Comma-separated IDE codes to configure (e.g. "claude-code,cursor")'],
|
|
16
|
+
['--global', 'Install skills globally (~/.{ide}/skills) instead of into the current project'],
|
|
17
|
+
['-y, --yes', 'Accept all defaults, skip prompts'],
|
|
18
|
+
],
|
|
19
|
+
action: async (options) => {
|
|
20
|
+
try {
|
|
21
|
+
const config = await ui.promptInstall(options);
|
|
22
|
+
|
|
23
|
+
if (config.cancelled) {
|
|
24
|
+
console.log('\nInstallation cancelled.\n');
|
|
25
|
+
process.exit(0);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
await installer.install(config);
|
|
29
|
+
process.exit(0);
|
|
30
|
+
} catch (error) {
|
|
31
|
+
console.error(`\nInstallation failed: ${error.message}\n`);
|
|
32
|
+
if (process.env.DEBUG) console.error(error.stack);
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const path = require('node:path');
|
|
4
|
+
const fs = require('fs-extra');
|
|
5
|
+
const yaml = require('js-yaml');
|
|
6
|
+
const { intro, outro, log } = require('@clack/prompts');
|
|
7
|
+
|
|
8
|
+
module.exports = {
|
|
9
|
+
command: 'status',
|
|
10
|
+
description: 'Show installed autodoc-agent-kit modules and IDEs',
|
|
11
|
+
options: [['--directory <path>', 'Target project directory (default: current directory)']],
|
|
12
|
+
action: async (options) => {
|
|
13
|
+
intro('autodoc-agent-kit status');
|
|
14
|
+
|
|
15
|
+
const targetDir = path.resolve(options.directory || process.cwd());
|
|
16
|
+
const manifestPath = path.join(targetDir, '.autodoc', 'manifest.yaml');
|
|
17
|
+
|
|
18
|
+
if (!fs.existsSync(manifestPath)) {
|
|
19
|
+
log.warn('No .autodoc/manifest.yaml found — nothing installed yet.');
|
|
20
|
+
log.info('Run: npx autodoc-agent-kit install');
|
|
21
|
+
outro('Done.');
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
const manifest = yaml.load(fs.readFileSync(manifestPath, 'utf8'));
|
|
26
|
+
|
|
27
|
+
log.info(`Version: ${manifest.version}`);
|
|
28
|
+
log.info(`Installed: ${manifest.installed_at}`);
|
|
29
|
+
log.info(`Modules: ${manifest.modules.join(', ')}`);
|
|
30
|
+
log.info(`IDEs: ${manifest.ides.join(', ')}`);
|
|
31
|
+
log.info(`Skills: ${manifest.skills_installed.length} total`);
|
|
32
|
+
|
|
33
|
+
outro('Done.');
|
|
34
|
+
},
|
|
35
|
+
};
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const path = require('node:path');
|
|
4
|
+
const fs = require('fs-extra');
|
|
5
|
+
const yaml = require('js-yaml');
|
|
6
|
+
const { intro, outro, confirm, log } = require('@clack/prompts');
|
|
7
|
+
|
|
8
|
+
module.exports = {
|
|
9
|
+
command: 'uninstall',
|
|
10
|
+
description: 'Remove autodoc-agent-kit skills from your project',
|
|
11
|
+
options: [
|
|
12
|
+
['--directory <path>', 'Target project directory (default: current directory)'],
|
|
13
|
+
['-y, --yes', 'Skip confirmation prompt'],
|
|
14
|
+
],
|
|
15
|
+
action: async (options) => {
|
|
16
|
+
intro('autodoc-agent-kit uninstall');
|
|
17
|
+
|
|
18
|
+
const targetDir = path.resolve(options.directory || process.cwd());
|
|
19
|
+
const manifestPath = path.join(targetDir, '.autodoc', 'manifest.yaml');
|
|
20
|
+
|
|
21
|
+
if (!fs.existsSync(manifestPath)) {
|
|
22
|
+
log.warn('No .autodoc/manifest.yaml found — nothing to uninstall.');
|
|
23
|
+
outro('Done.');
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const manifest = yaml.load(fs.readFileSync(manifestPath, 'utf8'));
|
|
28
|
+
|
|
29
|
+
log.info(`Found installation: modules [${manifest.modules.join(', ')}] for IDEs [${manifest.ides.join(', ')}]`);
|
|
30
|
+
|
|
31
|
+
if (!options.yes) {
|
|
32
|
+
const confirmed = await confirm({ message: 'Remove all installed skills?' });
|
|
33
|
+
if (!confirmed) {
|
|
34
|
+
outro('Cancelled.');
|
|
35
|
+
process.exit(0);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Remove skill directories from each configured IDE
|
|
40
|
+
const { IdeManager } = require('../installers/lib/ide/manager');
|
|
41
|
+
const ideManager = new IdeManager();
|
|
42
|
+
|
|
43
|
+
for (const ideCode of manifest.ides) {
|
|
44
|
+
const platform = ideManager.getPlatform(ideCode);
|
|
45
|
+
if (!platform) continue;
|
|
46
|
+
|
|
47
|
+
for (const skillName of manifest.skills_installed) {
|
|
48
|
+
const skillDir = path.join(targetDir, platform.installer.target_dir, skillName);
|
|
49
|
+
if (fs.existsSync(skillDir)) {
|
|
50
|
+
fs.removeSync(skillDir);
|
|
51
|
+
log.info(`Removed ${platform.installer.target_dir}/${skillName}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Remove manifest
|
|
57
|
+
fs.removeSync(path.join(targetDir, '.autodoc'));
|
|
58
|
+
outro('Uninstall complete.');
|
|
59
|
+
},
|
|
60
|
+
};
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const os = require('node:os');
|
|
4
|
+
const chalk = require('chalk');
|
|
5
|
+
const cliProgress = require('cli-progress');
|
|
6
|
+
const { spinner, log, outro } = require('@clack/prompts');
|
|
7
|
+
const { ModuleManager } = require('../modules/manager');
|
|
8
|
+
const { IdeManager } = require('../ide/manager');
|
|
9
|
+
const { Manifest } = require('./manifest');
|
|
10
|
+
|
|
11
|
+
class Installer {
|
|
12
|
+
constructor() {
|
|
13
|
+
this.moduleManager = new ModuleManager();
|
|
14
|
+
this.ideManager = new IdeManager();
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Main install orchestrator.
|
|
19
|
+
*
|
|
20
|
+
* @param {object} config - From UI.promptInstall()
|
|
21
|
+
* @param {string} config.targetDir - Project root (ignored for global scope)
|
|
22
|
+
* @param {string[]} config.modules
|
|
23
|
+
* @param {string[]} config.ides
|
|
24
|
+
* @param {boolean} config.isReinstall
|
|
25
|
+
* @param {'project'|'global'} config.scope
|
|
26
|
+
*/
|
|
27
|
+
async install(config) {
|
|
28
|
+
const { targetDir, modules, ides, isReinstall, scope = 'project' } = config;
|
|
29
|
+
// Global installs store their manifest in ~/.autodoc/
|
|
30
|
+
const manifestBaseDir = scope === 'global' ? os.homedir() : targetDir;
|
|
31
|
+
const manifest = new Manifest(manifestBaseDir);
|
|
32
|
+
|
|
33
|
+
// ── 1. Resolve all skill source paths ───────────────────────────────────
|
|
34
|
+
const s1 = spinner();
|
|
35
|
+
s1.start('Resolving skills from selected modules...');
|
|
36
|
+
|
|
37
|
+
let skills;
|
|
38
|
+
try {
|
|
39
|
+
skills = this.moduleManager.resolveSkills(modules);
|
|
40
|
+
s1.stop(`Found ${skills.length} skills across ${modules.length} module(s)`);
|
|
41
|
+
} catch (error) {
|
|
42
|
+
s1.stop(`Failed: ${error.message}`);
|
|
43
|
+
throw error;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const skillSrcPaths = skills.map((s) => s.srcPath);
|
|
47
|
+
const skillNames = skills.map((s) => s.skillName);
|
|
48
|
+
|
|
49
|
+
// ── 2. Install skills for each selected IDE with progress bars ──────────
|
|
50
|
+
console.log();
|
|
51
|
+
|
|
52
|
+
const multiBar = new cliProgress.MultiBar(
|
|
53
|
+
{
|
|
54
|
+
format: ' {bar} {percentage}% │ {ideName} │ {value}/{total} skills │ {skillName}',
|
|
55
|
+
barCompleteChar: '\u2588',
|
|
56
|
+
barIncompleteChar: '\u2591',
|
|
57
|
+
hideCursor: true,
|
|
58
|
+
clearOnComplete: false,
|
|
59
|
+
stopOnComplete: false,
|
|
60
|
+
barsize: 30,
|
|
61
|
+
linewrap: false,
|
|
62
|
+
forceRedraw: true,
|
|
63
|
+
},
|
|
64
|
+
cliProgress.Presets.shades_classic
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
// Create a bar for each IDE, using setTotal to override the default
|
|
68
|
+
const bars = [];
|
|
69
|
+
for (const ideCode of ides) {
|
|
70
|
+
const platform = this.ideManager.getPlatform(ideCode);
|
|
71
|
+
if (!platform) {
|
|
72
|
+
log.warn(`Unknown IDE code "${ideCode}" — skipping`);
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
const bar = multiBar.create(skills.length, 0, {
|
|
76
|
+
ideName: platform.name.padEnd(20),
|
|
77
|
+
skillName: chalk.dim('waiting...'),
|
|
78
|
+
});
|
|
79
|
+
bar.setTotal(skills.length);
|
|
80
|
+
bars.push({ ideCode, platform, bar });
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Install skills sequentially per IDE, updating each bar per-skill
|
|
84
|
+
const results = [];
|
|
85
|
+
for (const { ideCode, platform, bar } of bars) {
|
|
86
|
+
try {
|
|
87
|
+
const installed = await this.ideManager.installSkills(
|
|
88
|
+
targetDir,
|
|
89
|
+
ideCode,
|
|
90
|
+
skillSrcPaths,
|
|
91
|
+
isReinstall,
|
|
92
|
+
scope,
|
|
93
|
+
(skillName) => {
|
|
94
|
+
bar.increment(1, {
|
|
95
|
+
ideName: platform.name.padEnd(20),
|
|
96
|
+
skillName,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
);
|
|
100
|
+
|
|
101
|
+
const resolvedDir = this.ideManager.resolveInstallDir(
|
|
102
|
+
targetDir,
|
|
103
|
+
platform.installer,
|
|
104
|
+
scope
|
|
105
|
+
);
|
|
106
|
+
|
|
107
|
+
bar.update(skills.length, {
|
|
108
|
+
ideName: platform.name.padEnd(20),
|
|
109
|
+
skillName: chalk.green('\u2714 done'),
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
results.push({ ideCode, platform, installed, resolvedDir });
|
|
113
|
+
} catch (error) {
|
|
114
|
+
bar.update(bar.value, {
|
|
115
|
+
ideName: platform.name.padEnd(20),
|
|
116
|
+
skillName: chalk.red('\u2716 failed'),
|
|
117
|
+
});
|
|
118
|
+
results.push({ ideCode, platform, error });
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
multiBar.stop();
|
|
123
|
+
console.log();
|
|
124
|
+
|
|
125
|
+
// ── 3. Post-install summary per IDE ─────────────────────────────────────
|
|
126
|
+
for (const result of results) {
|
|
127
|
+
if (result.error) {
|
|
128
|
+
log.warn(`${result.platform.name}: failed — ${result.error.message}`);
|
|
129
|
+
} else {
|
|
130
|
+
log.success(`${result.platform.name}: ${result.installed.length} skills → ${result.resolvedDir}/`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// ── 4. Write manifest ────────────────────────────────────────────────────
|
|
135
|
+
manifest.write({ modules, ides, skills_installed: skillNames, scope });
|
|
136
|
+
|
|
137
|
+
// ── 5. Summary ───────────────────────────────────────────────────────────
|
|
138
|
+
const totalInstalls = results.reduce((sum, r) => sum + (r.installed ? r.installed.length : 0), 0);
|
|
139
|
+
const successIdes = results.filter((r) => !r.error).length;
|
|
140
|
+
|
|
141
|
+
console.log();
|
|
142
|
+
log.info(chalk.dim('─'.repeat(50)));
|
|
143
|
+
log.success(
|
|
144
|
+
`${chalk.bold(totalInstalls)} skills installed across ${chalk.bold(successIdes)} IDE(s)`
|
|
145
|
+
);
|
|
146
|
+
log.info(`Manifest saved to .autodoc/manifest.yaml`);
|
|
147
|
+
log.info(chalk.dim('─'.repeat(50)));
|
|
148
|
+
|
|
149
|
+
if (isReinstall) {
|
|
150
|
+
log.info('Modified skills were backed up with a .bak suffix before reinstalling');
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
const moduleLabels = modules
|
|
154
|
+
.map((code) => {
|
|
155
|
+
const def = this.moduleManager.getModuleDef(code);
|
|
156
|
+
return def ? def.name : code;
|
|
157
|
+
})
|
|
158
|
+
.join(', ');
|
|
159
|
+
|
|
160
|
+
outro(`Done! Modules installed: ${moduleLabels}`);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
module.exports = { Installer };
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const path = require('node:path');
|
|
4
|
+
const fs = require('fs-extra');
|
|
5
|
+
const yaml = require('js-yaml');
|
|
6
|
+
|
|
7
|
+
const packageJson = require('../../../../../package.json');
|
|
8
|
+
|
|
9
|
+
class Manifest {
|
|
10
|
+
constructor(targetDir) {
|
|
11
|
+
this.targetDir = targetDir;
|
|
12
|
+
this.autodocDir = path.join(targetDir, '.autodoc');
|
|
13
|
+
this.manifestPath = path.join(this.autodocDir, 'manifest.yaml');
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Writes the .autodoc/manifest.yaml tracking file.
|
|
18
|
+
*
|
|
19
|
+
* @param {object} data
|
|
20
|
+
* @param {string[]} data.modules - Installed module codes
|
|
21
|
+
* @param {string[]} data.ides - Installed IDE codes
|
|
22
|
+
* @param {string[]} data.skills_installed - All installed skill names
|
|
23
|
+
* @param {'project'|'global'} data.scope - Install scope
|
|
24
|
+
*/
|
|
25
|
+
write({ modules, ides, skills_installed, scope = 'project' }) {
|
|
26
|
+
fs.ensureDirSync(this.autodocDir);
|
|
27
|
+
|
|
28
|
+
const manifest = {
|
|
29
|
+
version: packageJson.version,
|
|
30
|
+
installed_at: new Date().toISOString(),
|
|
31
|
+
scope,
|
|
32
|
+
modules,
|
|
33
|
+
ides,
|
|
34
|
+
skills_installed,
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
fs.writeFileSync(this.manifestPath, yaml.dump(manifest, { lineWidth: 120 }), 'utf8');
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Reads and returns the existing manifest, or null if not present.
|
|
42
|
+
*/
|
|
43
|
+
read() {
|
|
44
|
+
if (!fs.existsSync(this.manifestPath)) return null;
|
|
45
|
+
return yaml.load(fs.readFileSync(this.manifestPath, 'utf8'));
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
module.exports = { Manifest };
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const os = require('node:os');
|
|
4
|
+
const path = require('node:path');
|
|
5
|
+
const fs = require('fs-extra');
|
|
6
|
+
const yaml = require('js-yaml');
|
|
7
|
+
|
|
8
|
+
const PLATFORM_CODES_PATH = path.join(__dirname, 'platform-codes.yaml');
|
|
9
|
+
|
|
10
|
+
class IdeManager {
|
|
11
|
+
constructor() {
|
|
12
|
+
this._platforms = null;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Lazily loads and caches platform-codes.yaml
|
|
17
|
+
*/
|
|
18
|
+
get platforms() {
|
|
19
|
+
if (!this._platforms) {
|
|
20
|
+
const raw = yaml.load(fs.readFileSync(PLATFORM_CODES_PATH, 'utf8'));
|
|
21
|
+
this._platforms = raw.platforms;
|
|
22
|
+
}
|
|
23
|
+
return this._platforms;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Returns a single platform definition by code, or null.
|
|
28
|
+
*/
|
|
29
|
+
getPlatform(code) {
|
|
30
|
+
return this.platforms[code] || null;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Resolves the absolute install directory for an IDE given a scope.
|
|
35
|
+
*
|
|
36
|
+
* @param {string} projectDir - Absolute path to the user's project root
|
|
37
|
+
* @param {object} installer - The installer config from platform-codes.yaml
|
|
38
|
+
* @param {'project'|'global'} scope
|
|
39
|
+
* @returns {string} Absolute path where skills will be written
|
|
40
|
+
*/
|
|
41
|
+
resolveInstallDir(projectDir, installer, scope) {
|
|
42
|
+
if (scope === 'global') {
|
|
43
|
+
if (!installer.global_dir) {
|
|
44
|
+
throw new Error('This platform does not define a global_dir');
|
|
45
|
+
}
|
|
46
|
+
return path.join(os.homedir(), installer.global_dir);
|
|
47
|
+
}
|
|
48
|
+
return path.join(projectDir, installer.target_dir);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Installs a list of skill source directories into a target IDE directory.
|
|
53
|
+
* Each skill is a directory containing SKILL.md (and optional sub-dirs).
|
|
54
|
+
*
|
|
55
|
+
* @param {string} projectDir - Root of the user's project
|
|
56
|
+
* @param {string} ideCode - Platform code (e.g. "claude-code")
|
|
57
|
+
* @param {string[]} skillSrcPaths - Absolute paths to skill source directories
|
|
58
|
+
* @param {boolean} isReinstall - Whether to back up before overwriting
|
|
59
|
+
* @param {'project'|'global'} scope - Install scope
|
|
60
|
+
* @param {function} [onSkillInstalled] - Optional callback(skillName) called after each skill is copied
|
|
61
|
+
* @returns {string[]} List of installed skill names
|
|
62
|
+
*/
|
|
63
|
+
async installSkills(projectDir, ideCode, skillSrcPaths, isReinstall = false, scope = 'project', onSkillInstalled) {
|
|
64
|
+
const platform = this.getPlatform(ideCode);
|
|
65
|
+
if (!platform || !platform.installer) {
|
|
66
|
+
throw new Error(`Unknown or unsupported IDE: ${ideCode}`);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const { legacy_targets } = platform.installer;
|
|
70
|
+
const ideTargetDir = this.resolveInstallDir(projectDir, platform.installer, scope);
|
|
71
|
+
|
|
72
|
+
// Clean up legacy directories if they exist (project-scope only)
|
|
73
|
+
if (scope === 'project' && legacy_targets) {
|
|
74
|
+
for (const legacy of legacy_targets) {
|
|
75
|
+
const legacyPath = path.join(projectDir, legacy);
|
|
76
|
+
if (fs.existsSync(legacyPath)) {
|
|
77
|
+
fs.removeSync(legacyPath);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
fs.ensureDirSync(ideTargetDir);
|
|
83
|
+
|
|
84
|
+
const installed = [];
|
|
85
|
+
|
|
86
|
+
for (const skillSrc of skillSrcPaths) {
|
|
87
|
+
const skillName = path.basename(skillSrc);
|
|
88
|
+
const skillDest = path.join(ideTargetDir, skillName);
|
|
89
|
+
|
|
90
|
+
// Backup existing skill directory if reinstalling and it already exists
|
|
91
|
+
if (isReinstall && fs.existsSync(skillDest)) {
|
|
92
|
+
const backupPath = `${skillDest}.bak`;
|
|
93
|
+
fs.removeSync(backupPath);
|
|
94
|
+
fs.copySync(skillDest, backupPath);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// Copy skill directory recursively
|
|
98
|
+
fs.copySync(skillSrc, skillDest, { overwrite: true });
|
|
99
|
+
installed.push(skillName);
|
|
100
|
+
|
|
101
|
+
if (onSkillInstalled) {
|
|
102
|
+
onSkillInstalled(skillName);
|
|
103
|
+
// Small delay so the user can see each skill being installed
|
|
104
|
+
await new Promise((resolve) => setTimeout(resolve, 15));
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
return installed;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
module.exports = { IdeManager };
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
# autodoc-agent-kit Platform Codes
|
|
2
|
+
# Defines all supported AI IDEs and their skill installation targets.
|
|
3
|
+
# Each platform uses skill_format: true — skills are installed as {skill-name}/SKILL.md directories.
|
|
4
|
+
#
|
|
5
|
+
# target_dir — relative to the project root (project-scoped install)
|
|
6
|
+
# global_dir — relative to $HOME (global install, available in all projects)
|
|
7
|
+
|
|
8
|
+
platforms:
|
|
9
|
+
antigravity:
|
|
10
|
+
name: "Google Antigravity"
|
|
11
|
+
preferred: true
|
|
12
|
+
category: ide
|
|
13
|
+
description: "Google's AI development environment"
|
|
14
|
+
installer:
|
|
15
|
+
legacy_targets:
|
|
16
|
+
- .agent/workflows
|
|
17
|
+
target_dir: .agent/skills
|
|
18
|
+
global_dir: .gemini/antigravity/skills
|
|
19
|
+
template_type: default
|
|
20
|
+
skill_format: true
|
|
21
|
+
|
|
22
|
+
auggie:
|
|
23
|
+
name: "Auggie"
|
|
24
|
+
preferred: false
|
|
25
|
+
category: cli
|
|
26
|
+
description: "AI development tool"
|
|
27
|
+
installer:
|
|
28
|
+
legacy_targets:
|
|
29
|
+
- .augment/commands
|
|
30
|
+
target_dir: .augment/skills
|
|
31
|
+
global_dir: .augment/skills
|
|
32
|
+
template_type: default
|
|
33
|
+
skill_format: true
|
|
34
|
+
|
|
35
|
+
claude-code:
|
|
36
|
+
name: "Claude Code"
|
|
37
|
+
preferred: true
|
|
38
|
+
category: cli
|
|
39
|
+
description: "Anthropic's official CLI for Claude"
|
|
40
|
+
installer:
|
|
41
|
+
legacy_targets:
|
|
42
|
+
- .claude/commands
|
|
43
|
+
target_dir: .claude/skills
|
|
44
|
+
global_dir: .claude/skills
|
|
45
|
+
template_type: default
|
|
46
|
+
skill_format: true
|
|
47
|
+
ancestor_conflict_check: true
|
|
48
|
+
|
|
49
|
+
cline:
|
|
50
|
+
name: "Cline"
|
|
51
|
+
preferred: false
|
|
52
|
+
category: ide
|
|
53
|
+
description: "AI coding assistant"
|
|
54
|
+
installer:
|
|
55
|
+
legacy_targets:
|
|
56
|
+
- .clinerules/workflows
|
|
57
|
+
target_dir: .cline/skills
|
|
58
|
+
global_dir: .cline/skills
|
|
59
|
+
template_type: default
|
|
60
|
+
skill_format: true
|
|
61
|
+
|
|
62
|
+
codex:
|
|
63
|
+
name: "Codex"
|
|
64
|
+
preferred: false
|
|
65
|
+
category: cli
|
|
66
|
+
description: "OpenAI Codex integration"
|
|
67
|
+
installer:
|
|
68
|
+
legacy_targets:
|
|
69
|
+
- .codex/prompts
|
|
70
|
+
target_dir: .codex/skills
|
|
71
|
+
global_dir: .codex/skills
|
|
72
|
+
template_type: default
|
|
73
|
+
skill_format: true
|
|
74
|
+
|
|
75
|
+
codebuddy:
|
|
76
|
+
name: "CodeBuddy"
|
|
77
|
+
preferred: false
|
|
78
|
+
category: ide
|
|
79
|
+
description: "Tencent Cloud Code Assistant"
|
|
80
|
+
installer:
|
|
81
|
+
legacy_targets:
|
|
82
|
+
- .codebuddy/commands
|
|
83
|
+
target_dir: .codebuddy/skills
|
|
84
|
+
global_dir: .codebuddy/skills
|
|
85
|
+
template_type: default
|
|
86
|
+
skill_format: true
|
|
87
|
+
|
|
88
|
+
cursor:
|
|
89
|
+
name: "Cursor"
|
|
90
|
+
preferred: true
|
|
91
|
+
category: ide
|
|
92
|
+
description: "AI-first code editor"
|
|
93
|
+
installer:
|
|
94
|
+
legacy_targets:
|
|
95
|
+
- .cursor/commands
|
|
96
|
+
target_dir: .cursor/skills
|
|
97
|
+
global_dir: .cursor/skills
|
|
98
|
+
template_type: default
|
|
99
|
+
skill_format: true
|
|
100
|
+
|
|
101
|
+
gemini:
|
|
102
|
+
name: "Gemini CLI"
|
|
103
|
+
preferred: false
|
|
104
|
+
category: cli
|
|
105
|
+
description: "Google's CLI for Gemini"
|
|
106
|
+
installer:
|
|
107
|
+
legacy_targets:
|
|
108
|
+
- .gemini/commands
|
|
109
|
+
target_dir: .gemini/skills
|
|
110
|
+
global_dir: .gemini/skills
|
|
111
|
+
template_type: default
|
|
112
|
+
skill_format: true
|
|
113
|
+
|
|
114
|
+
github-copilot:
|
|
115
|
+
name: "GitHub Copilot"
|
|
116
|
+
preferred: false
|
|
117
|
+
category: ide
|
|
118
|
+
description: "GitHub's AI pair programmer"
|
|
119
|
+
installer:
|
|
120
|
+
legacy_targets:
|
|
121
|
+
- .github/agents
|
|
122
|
+
- .github/prompts
|
|
123
|
+
target_dir: .github/skills
|
|
124
|
+
global_dir: .github/skills
|
|
125
|
+
template_type: default
|
|
126
|
+
skill_format: true
|
|
127
|
+
|
|
128
|
+
kiro:
|
|
129
|
+
name: "Kiro"
|
|
130
|
+
preferred: false
|
|
131
|
+
category: ide
|
|
132
|
+
description: "Amazon's AI-powered IDE"
|
|
133
|
+
installer:
|
|
134
|
+
legacy_targets:
|
|
135
|
+
- .kiro/steering
|
|
136
|
+
target_dir: .kiro/skills
|
|
137
|
+
global_dir: .kiro/skills
|
|
138
|
+
template_type: default
|
|
139
|
+
skill_format: true
|
|
140
|
+
|
|
141
|
+
opencode:
|
|
142
|
+
name: "OpenCode"
|
|
143
|
+
preferred: false
|
|
144
|
+
category: ide
|
|
145
|
+
description: "OpenCode terminal coding assistant"
|
|
146
|
+
installer:
|
|
147
|
+
legacy_targets:
|
|
148
|
+
- .opencode/agents
|
|
149
|
+
- .opencode/commands
|
|
150
|
+
target_dir: .opencode/skill
|
|
151
|
+
global_dir: .config/opencode/skill
|
|
152
|
+
template_type: default
|
|
153
|
+
skill_format: true
|
|
154
|
+
|
|
155
|
+
pi:
|
|
156
|
+
name: "Pi"
|
|
157
|
+
preferred: false
|
|
158
|
+
category: cli
|
|
159
|
+
description: "Provider-agnostic terminal-native AI coding agent"
|
|
160
|
+
installer:
|
|
161
|
+
target_dir: .pi/skills
|
|
162
|
+
global_dir: .pi/skills
|
|
163
|
+
template_type: default
|
|
164
|
+
skill_format: true
|
|
165
|
+
|
|
166
|
+
roo:
|
|
167
|
+
name: "Roo Code"
|
|
168
|
+
preferred: false
|
|
169
|
+
category: ide
|
|
170
|
+
description: "Enhanced Cline fork"
|
|
171
|
+
installer:
|
|
172
|
+
legacy_targets:
|
|
173
|
+
- .roo/commands
|
|
174
|
+
target_dir: .roo/skills
|
|
175
|
+
global_dir: .roo/skills
|
|
176
|
+
template_type: default
|
|
177
|
+
skill_format: true
|
|
178
|
+
|
|
179
|
+
windsurf:
|
|
180
|
+
name: "Windsurf"
|
|
181
|
+
preferred: false
|
|
182
|
+
category: ide
|
|
183
|
+
description: "AI-powered IDE with cascade flows"
|
|
184
|
+
installer:
|
|
185
|
+
legacy_targets:
|
|
186
|
+
- .windsurf/workflows
|
|
187
|
+
target_dir: .windsurf/skills
|
|
188
|
+
global_dir: .codeium/windsurf/skills
|
|
189
|
+
template_type: default
|
|
190
|
+
skill_format: true
|
|
191
|
+
|
|
192
|
+
zed:
|
|
193
|
+
name: "Zed"
|
|
194
|
+
preferred: false
|
|
195
|
+
category: ide
|
|
196
|
+
description: "High-performance multiplayer code editor"
|
|
197
|
+
installer:
|
|
198
|
+
target_dir: .zed/skills
|
|
199
|
+
global_dir: .config/zed/skills
|
|
200
|
+
template_type: default
|
|
201
|
+
skill_format: true
|
|
202
|
+
|
|
203
|
+
categories:
|
|
204
|
+
ide:
|
|
205
|
+
name: "Integrated Development Environment"
|
|
206
|
+
cli:
|
|
207
|
+
name: "Command Line Interface"
|