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.
Files changed (187) hide show
  1. package/README.md +362 -0
  2. package/package.json +49 -0
  3. package/src/core/module.yaml +5 -0
  4. package/src/modules/design/module.yaml +9 -0
  5. package/src/modules/design/skills/brand-guidelines/LICENSE.txt +202 -0
  6. package/src/modules/design/skills/brand-guidelines/SKILL.md +73 -0
  7. package/src/modules/design/skills/frontend-design/LICENSE.txt +177 -0
  8. package/src/modules/design/skills/frontend-design/SKILL.md +42 -0
  9. package/src/modules/design/skills/web-artifacts-builder/SKILL.md +229 -0
  10. package/src/modules/devops/module.yaml +10 -0
  11. package/src/modules/devops/skills/devops-helper/SKILL.md +60 -0
  12. package/src/modules/devops/skills/k8s-helm/SKILL.md +360 -0
  13. package/src/modules/devops/skills/monitoring-observability/SKILL.md +240 -0
  14. package/src/modules/devops/skills/security-auditor/SKILL.md +105 -0
  15. package/src/modules/engineering/module.yaml +22 -0
  16. package/src/modules/engineering/skills/ai-sdk/SKILL.md +314 -0
  17. package/src/modules/engineering/skills/api-designer/SKILL.md +77 -0
  18. package/src/modules/engineering/skills/code-reviewer/SKILL.md +71 -0
  19. package/src/modules/engineering/skills/db-architect/SKILL.md +50 -0
  20. package/src/modules/engineering/skills/debugger/SKILL.md +59 -0
  21. package/src/modules/engineering/skills/docs-generator/SKILL.md +51 -0
  22. package/src/modules/engineering/skills/git-workflow/SKILL.md +258 -0
  23. package/src/modules/engineering/skills/mcp-builder/LICENSE.txt +202 -0
  24. package/src/modules/engineering/skills/mcp-builder/SKILL.md +236 -0
  25. package/src/modules/engineering/skills/mcp-builder/reference/evaluation.md +602 -0
  26. package/src/modules/engineering/skills/mcp-builder/reference/mcp_best_practices.md +249 -0
  27. package/src/modules/engineering/skills/mcp-builder/reference/node_mcp_server.md +970 -0
  28. package/src/modules/engineering/skills/mcp-builder/reference/python_mcp_server.md +719 -0
  29. package/src/modules/engineering/skills/mcp-builder/scripts/connections.py +151 -0
  30. package/src/modules/engineering/skills/mcp-builder/scripts/evaluation.py +373 -0
  31. package/src/modules/engineering/skills/mcp-builder/scripts/example_evaluation.xml +22 -0
  32. package/src/modules/engineering/skills/mcp-builder/scripts/requirements.txt +2 -0
  33. package/src/modules/engineering/skills/nextjs-15/SKILL.md +312 -0
  34. package/src/modules/engineering/skills/perf-optimizer/SKILL.md +60 -0
  35. package/src/modules/engineering/skills/react-19/SKILL.md +257 -0
  36. package/src/modules/engineering/skills/refactorer/SKILL.md +60 -0
  37. package/src/modules/engineering/skills/skill-authoring-workflow/SKILL.md +183 -0
  38. package/src/modules/engineering/skills/skill-creator/LICENSE.txt +202 -0
  39. package/src/modules/engineering/skills/skill-creator/SKILL.md +356 -0
  40. package/src/modules/engineering/skills/skill-creator/references/output-patterns.md +82 -0
  41. package/src/modules/engineering/skills/skill-creator/references/workflows.md +28 -0
  42. package/src/modules/engineering/skills/skill-creator/scripts/__pycache__/quick_validate.cpython-313.pyc +0 -0
  43. package/src/modules/engineering/skills/skill-creator/scripts/init_skill.py +303 -0
  44. package/src/modules/engineering/skills/skill-creator/scripts/package_skill.py +110 -0
  45. package/src/modules/engineering/skills/skill-creator/scripts/quick_validate.py +95 -0
  46. package/src/modules/engineering/skills/typescript/SKILL.md +231 -0
  47. package/src/modules/engineering/skills/zod-4/SKILL.md +223 -0
  48. package/src/modules/product/module.yaml +51 -0
  49. package/src/modules/product/skills/acquisition-channel-advisor/SKILL.md +643 -0
  50. package/src/modules/product/skills/acquisition-channel-advisor/examples/conversation-flow.md +531 -0
  51. package/src/modules/product/skills/ai-shaped-readiness-advisor/SKILL.md +923 -0
  52. package/src/modules/product/skills/altitude-horizon-framework/SKILL.md +250 -0
  53. package/src/modules/product/skills/altitude-horizon-framework/examples/sample.md +85 -0
  54. package/src/modules/product/skills/business-health-diagnostic/SKILL.md +783 -0
  55. package/src/modules/product/skills/company-research/SKILL.md +385 -0
  56. package/src/modules/product/skills/company-research/examples/sample.md +164 -0
  57. package/src/modules/product/skills/company-research/template.md +60 -0
  58. package/src/modules/product/skills/context-engineering-advisor/SKILL.md +763 -0
  59. package/src/modules/product/skills/customer-journey-map/SKILL.md +346 -0
  60. package/src/modules/product/skills/customer-journey-map/examples/meta-product-manager-skills.md +40 -0
  61. package/src/modules/product/skills/customer-journey-map/examples/sample.md +33 -0
  62. package/src/modules/product/skills/customer-journey-map/template.md +28 -0
  63. package/src/modules/product/skills/customer-journey-mapping-workshop/SKILL.md +523 -0
  64. package/src/modules/product/skills/director-readiness-advisor/SKILL.md +351 -0
  65. package/src/modules/product/skills/director-readiness-advisor/examples/conversation-flow.md +96 -0
  66. package/src/modules/product/skills/discovery-interview-prep/SKILL.md +410 -0
  67. package/src/modules/product/skills/discovery-process/SKILL.md +504 -0
  68. package/src/modules/product/skills/discovery-process/examples/sample.md +60 -0
  69. package/src/modules/product/skills/discovery-process/template.md +39 -0
  70. package/src/modules/product/skills/eol-message/SKILL.md +348 -0
  71. package/src/modules/product/skills/eol-message/examples/sample.md +87 -0
  72. package/src/modules/product/skills/eol-message/template.md +74 -0
  73. package/src/modules/product/skills/epic-breakdown-advisor/SKILL.md +665 -0
  74. package/src/modules/product/skills/epic-hypothesis/SKILL.md +277 -0
  75. package/src/modules/product/skills/epic-hypothesis/examples/sample.md +104 -0
  76. package/src/modules/product/skills/epic-hypothesis/template.md +30 -0
  77. package/src/modules/product/skills/executive-onboarding-playbook/SKILL.md +280 -0
  78. package/src/modules/product/skills/executive-onboarding-playbook/examples/sample.md +116 -0
  79. package/src/modules/product/skills/feature-investment-advisor/SKILL.md +639 -0
  80. package/src/modules/product/skills/feature-investment-advisor/examples/conversation-flow.md +538 -0
  81. package/src/modules/product/skills/finance-based-pricing-advisor/SKILL.md +763 -0
  82. package/src/modules/product/skills/finance-metrics-quickref/SKILL.md +309 -0
  83. package/src/modules/product/skills/jobs-to-be-done/SKILL.md +370 -0
  84. package/src/modules/product/skills/jobs-to-be-done/examples/sample.md +80 -0
  85. package/src/modules/product/skills/jobs-to-be-done/template.md +65 -0
  86. package/src/modules/product/skills/lean-ux-canvas/SKILL.md +561 -0
  87. package/src/modules/product/skills/lean-ux-canvas/examples/sample.md +88 -0
  88. package/src/modules/product/skills/lean-ux-canvas/template.md +32 -0
  89. package/src/modules/product/skills/opportunity-solution-tree/SKILL.md +420 -0
  90. package/src/modules/product/skills/opportunity-solution-tree/examples/sample.md +104 -0
  91. package/src/modules/product/skills/opportunity-solution-tree/template.md +33 -0
  92. package/src/modules/product/skills/pestel-analysis/SKILL.md +376 -0
  93. package/src/modules/product/skills/pestel-analysis/examples/sample.md +143 -0
  94. package/src/modules/product/skills/pestel-analysis/template.md +53 -0
  95. package/src/modules/product/skills/pol-probe/SKILL.md +217 -0
  96. package/src/modules/product/skills/pol-probe/examples/sample.md +136 -0
  97. package/src/modules/product/skills/pol-probe/template.md +59 -0
  98. package/src/modules/product/skills/pol-probe-advisor/SKILL.md +492 -0
  99. package/src/modules/product/skills/positioning-statement/SKILL.md +230 -0
  100. package/src/modules/product/skills/positioning-statement/examples/sample.md +51 -0
  101. package/src/modules/product/skills/positioning-statement/template.md +25 -0
  102. package/src/modules/product/skills/positioning-workshop/SKILL.md +424 -0
  103. package/src/modules/product/skills/prd-development/SKILL.md +655 -0
  104. package/src/modules/product/skills/prd-development/examples/sample.md +43 -0
  105. package/src/modules/product/skills/prd-development/template.md +55 -0
  106. package/src/modules/product/skills/press-release/SKILL.md +269 -0
  107. package/src/modules/product/skills/press-release/examples/sample.md +73 -0
  108. package/src/modules/product/skills/press-release/template.md +39 -0
  109. package/src/modules/product/skills/prioritization-advisor/SKILL.md +448 -0
  110. package/src/modules/product/skills/problem-framing-canvas/SKILL.md +466 -0
  111. package/src/modules/product/skills/problem-framing-canvas/examples/sample.md +58 -0
  112. package/src/modules/product/skills/problem-framing-canvas/template.md +22 -0
  113. package/src/modules/product/skills/problem-statement/SKILL.md +246 -0
  114. package/src/modules/product/skills/problem-statement/examples/sample.md +82 -0
  115. package/src/modules/product/skills/problem-statement/template.md +37 -0
  116. package/src/modules/product/skills/product-strategy-session/SKILL.md +426 -0
  117. package/src/modules/product/skills/product-strategy-session/examples/sample.md +67 -0
  118. package/src/modules/product/skills/product-strategy-session/template.md +38 -0
  119. package/src/modules/product/skills/proto-persona/SKILL.md +326 -0
  120. package/src/modules/product/skills/proto-persona/examples/sample.md +97 -0
  121. package/src/modules/product/skills/proto-persona/template.md +45 -0
  122. package/src/modules/product/skills/recommendation-canvas/SKILL.md +375 -0
  123. package/src/modules/product/skills/recommendation-canvas/examples/sample.md +94 -0
  124. package/src/modules/product/skills/recommendation-canvas/template.md +86 -0
  125. package/src/modules/product/skills/roadmap-planning/SKILL.md +505 -0
  126. package/src/modules/product/skills/roadmap-planning/examples/sample.md +62 -0
  127. package/src/modules/product/skills/roadmap-planning/template.md +30 -0
  128. package/src/modules/product/skills/saas-economics-efficiency-metrics/SKILL.md +694 -0
  129. package/src/modules/product/skills/saas-economics-efficiency-metrics/examples/cash-trap.md +365 -0
  130. package/src/modules/product/skills/saas-economics-efficiency-metrics/examples/healthy-unit-economics.md +279 -0
  131. package/src/modules/product/skills/saas-economics-efficiency-metrics/template.md +263 -0
  132. package/src/modules/product/skills/saas-revenue-growth-metrics/SKILL.md +630 -0
  133. package/src/modules/product/skills/saas-revenue-growth-metrics/examples/healthy-saas.md +131 -0
  134. package/src/modules/product/skills/saas-revenue-growth-metrics/examples/warning-signs.md +229 -0
  135. package/src/modules/product/skills/saas-revenue-growth-metrics/template.md +192 -0
  136. package/src/modules/product/skills/storyboard/SKILL.md +252 -0
  137. package/src/modules/product/skills/storyboard/examples/sample.md +71 -0
  138. package/src/modules/product/skills/storyboard/template.md +41 -0
  139. package/src/modules/product/skills/tam-sam-som-calculator/SKILL.md +392 -0
  140. package/src/modules/product/skills/tam-sam-som-calculator/examples/sample.md +142 -0
  141. package/src/modules/product/skills/tam-sam-som-calculator/scripts/market-sizing.py +95 -0
  142. package/src/modules/product/skills/tam-sam-som-calculator/template.md +35 -0
  143. package/src/modules/product/skills/user-story/SKILL.md +272 -0
  144. package/src/modules/product/skills/user-story/examples/sample.md +110 -0
  145. package/src/modules/product/skills/user-story/scripts/user-story-template.py +65 -0
  146. package/src/modules/product/skills/user-story/template.md +32 -0
  147. package/src/modules/product/skills/user-story-mapping/SKILL.md +285 -0
  148. package/src/modules/product/skills/user-story-mapping/examples/sample.md +77 -0
  149. package/src/modules/product/skills/user-story-mapping/template.md +41 -0
  150. package/src/modules/product/skills/user-story-mapping-workshop/SKILL.md +477 -0
  151. package/src/modules/product/skills/user-story-mapping-workshop/template.md +28 -0
  152. package/src/modules/product/skills/user-story-splitting/SKILL.md +303 -0
  153. package/src/modules/product/skills/user-story-splitting/examples/sample.md +147 -0
  154. package/src/modules/product/skills/user-story-splitting/template.md +37 -0
  155. package/src/modules/product/skills/vp-cpo-readiness-advisor/SKILL.md +409 -0
  156. package/src/modules/product/skills/vp-cpo-readiness-advisor/examples/conversation-flow.md +95 -0
  157. package/src/modules/product/skills/workshop-facilitation/SKILL.md +87 -0
  158. package/src/modules/productivity/module.yaml +9 -0
  159. package/src/modules/productivity/skills/doc-coauthoring/SKILL.md +375 -0
  160. package/src/modules/productivity/skills/internal-comms/LICENSE.txt +202 -0
  161. package/src/modules/productivity/skills/internal-comms/SKILL.md +32 -0
  162. package/src/modules/productivity/skills/internal-comms/examples/3p-updates.md +47 -0
  163. package/src/modules/productivity/skills/internal-comms/examples/company-newsletter.md +65 -0
  164. package/src/modules/productivity/skills/internal-comms/examples/faq-answers.md +30 -0
  165. package/src/modules/productivity/skills/internal-comms/examples/general-comms.md +16 -0
  166. package/src/modules/productivity/skills/technical-writing/SKILL.md +266 -0
  167. package/src/modules/qa/module.yaml +9 -0
  168. package/src/modules/qa/skills/test-strategy/SKILL.md +263 -0
  169. package/src/modules/qa/skills/test-writer/SKILL.md +57 -0
  170. package/src/modules/qa/skills/webapp-testing/LICENSE.txt +202 -0
  171. package/src/modules/qa/skills/webapp-testing/SKILL.md +96 -0
  172. package/src/modules/qa/skills/webapp-testing/examples/console_logging.py +35 -0
  173. package/src/modules/qa/skills/webapp-testing/examples/element_discovery.py +40 -0
  174. package/src/modules/qa/skills/webapp-testing/examples/static_html_automation.py +33 -0
  175. package/src/modules/qa/skills/webapp-testing/scripts/with_server.py +106 -0
  176. package/tools/autodoc-npx-wrapper.js +34 -0
  177. package/tools/cli/autodoc-cli.js +55 -0
  178. package/tools/cli/commands/install.js +36 -0
  179. package/tools/cli/commands/status.js +35 -0
  180. package/tools/cli/commands/uninstall.js +60 -0
  181. package/tools/cli/installers/lib/core/installer.js +164 -0
  182. package/tools/cli/installers/lib/core/manifest.js +49 -0
  183. package/tools/cli/installers/lib/ide/manager.js +112 -0
  184. package/tools/cli/installers/lib/ide/platform-codes.yaml +207 -0
  185. package/tools/cli/installers/lib/modules/manager.js +59 -0
  186. package/tools/cli/lib/ui.js +199 -0
  187. 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"