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,59 @@
|
|
|
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 MODULES_DIR = path.join(__dirname, '..', '..', '..', '..', '..', 'src', 'modules');
|
|
8
|
+
|
|
9
|
+
class ModuleManager {
|
|
10
|
+
/**
|
|
11
|
+
* Resolves all skill source directories for a given list of module codes.
|
|
12
|
+
*
|
|
13
|
+
* @param {string[]} moduleCodes - e.g. ['engineering', 'qa']
|
|
14
|
+
* @returns {{ moduleCode: string, skillName: string, srcPath: string }[]}
|
|
15
|
+
*/
|
|
16
|
+
resolveSkills(moduleCodes) {
|
|
17
|
+
const skills = [];
|
|
18
|
+
|
|
19
|
+
for (const code of moduleCodes) {
|
|
20
|
+
const skillsDir = path.join(MODULES_DIR, code, 'skills');
|
|
21
|
+
|
|
22
|
+
if (!fs.existsSync(skillsDir)) {
|
|
23
|
+
throw new Error(`Module not found: ${code} (expected skills at ${skillsDir})`);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const entries = fs.readdirSync(skillsDir, { withFileTypes: true });
|
|
27
|
+
for (const entry of entries) {
|
|
28
|
+
if (!entry.isDirectory()) continue;
|
|
29
|
+
|
|
30
|
+
const skillPath = path.join(skillsDir, entry.name);
|
|
31
|
+
const skillMd = path.join(skillPath, 'SKILL.md');
|
|
32
|
+
|
|
33
|
+
if (!fs.existsSync(skillMd)) {
|
|
34
|
+
console.warn(` Warning: ${entry.name} has no SKILL.md — skipping`);
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
skills.push({
|
|
39
|
+
moduleCode: code,
|
|
40
|
+
skillName: entry.name,
|
|
41
|
+
srcPath: skillPath,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
return skills;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Returns the module.yaml definition for a given module code.
|
|
51
|
+
*/
|
|
52
|
+
getModuleDef(code) {
|
|
53
|
+
const moduleYaml = path.join(MODULES_DIR, code, 'module.yaml');
|
|
54
|
+
if (!fs.existsSync(moduleYaml)) return null;
|
|
55
|
+
return yaml.load(fs.readFileSync(moduleYaml, 'utf8'));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
module.exports = { ModuleManager };
|
|
@@ -0,0 +1,199 @@
|
|
|
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, text, select, multiselect, confirm, spinner, log, cancel } = require('@clack/prompts');
|
|
7
|
+
const { printWelcome } = require('./welcome');
|
|
8
|
+
|
|
9
|
+
const MODULES_DIR = path.join(__dirname, '..', '..', '..', 'src', 'modules');
|
|
10
|
+
const PLATFORM_CODES_PATH = path.join(
|
|
11
|
+
__dirname,
|
|
12
|
+
'..',
|
|
13
|
+
'installers',
|
|
14
|
+
'lib',
|
|
15
|
+
'ide',
|
|
16
|
+
'platform-codes.yaml'
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
class UI {
|
|
20
|
+
/**
|
|
21
|
+
* Loads module definitions from src/modules/{module}/module.yaml
|
|
22
|
+
*/
|
|
23
|
+
loadModules() {
|
|
24
|
+
const modules = [];
|
|
25
|
+
const entries = fs.readdirSync(MODULES_DIR, { withFileTypes: true });
|
|
26
|
+
for (const entry of entries) {
|
|
27
|
+
if (!entry.isDirectory()) continue;
|
|
28
|
+
const moduleYaml = path.join(MODULES_DIR, entry.name, 'module.yaml');
|
|
29
|
+
if (fs.existsSync(moduleYaml)) {
|
|
30
|
+
const def = yaml.load(fs.readFileSync(moduleYaml, 'utf8'));
|
|
31
|
+
modules.push(def);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return modules;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Loads IDE platform definitions from platform-codes.yaml
|
|
39
|
+
*/
|
|
40
|
+
loadPlatforms() {
|
|
41
|
+
const raw = yaml.load(fs.readFileSync(PLATFORM_CODES_PATH, 'utf8'));
|
|
42
|
+
return raw.platforms;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Main interactive install flow.
|
|
47
|
+
* Returns a config object for the Installer, or { cancelled: true }.
|
|
48
|
+
*/
|
|
49
|
+
async promptInstall(options = {}) {
|
|
50
|
+
printWelcome();
|
|
51
|
+
intro('autodoc-agent-kit — AI dev team installer');
|
|
52
|
+
|
|
53
|
+
// ── 1. Scope (global vs project) ─────────────────────────────────────────
|
|
54
|
+
let scope;
|
|
55
|
+
if (options.global) {
|
|
56
|
+
scope = 'global';
|
|
57
|
+
} else if (options.yes) {
|
|
58
|
+
scope = 'project';
|
|
59
|
+
} else {
|
|
60
|
+
const result = await select({
|
|
61
|
+
message: 'Where do you want to install the skills?',
|
|
62
|
+
options: [
|
|
63
|
+
{
|
|
64
|
+
value: 'project',
|
|
65
|
+
label: 'This project',
|
|
66
|
+
hint: 'installs into .{ide}/skills inside the current project directory',
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
value: 'global',
|
|
70
|
+
label: 'Globally (all projects)',
|
|
71
|
+
hint: 'installs into ~/.{ide}/skills — available in every project on this machine',
|
|
72
|
+
},
|
|
73
|
+
],
|
|
74
|
+
});
|
|
75
|
+
if (typeof result === 'symbol') return { cancelled: true };
|
|
76
|
+
scope = result;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// ── 2. Target directory (project scope only) ─────────────────────────────
|
|
80
|
+
let targetDir;
|
|
81
|
+
if (scope === 'global') {
|
|
82
|
+
targetDir = process.cwd(); // unused for path resolution, but kept for manifest context
|
|
83
|
+
log.info('Installing globally into ~/.{ide}/skills for each selected IDE');
|
|
84
|
+
} else if (options.directory) {
|
|
85
|
+
targetDir = path.resolve(options.directory.replace(/^~/, process.env.HOME));
|
|
86
|
+
log.info(`Installing into: ${targetDir}`);
|
|
87
|
+
} else if (options.yes) {
|
|
88
|
+
targetDir = process.cwd();
|
|
89
|
+
log.info(`Installing into: ${targetDir}`);
|
|
90
|
+
} else {
|
|
91
|
+
const input = await text({
|
|
92
|
+
message: 'Install into which directory?',
|
|
93
|
+
placeholder: process.cwd(),
|
|
94
|
+
initialValue: process.cwd(),
|
|
95
|
+
validate: (v) => {
|
|
96
|
+
const resolved = path.resolve(v || process.cwd());
|
|
97
|
+
if (!fs.existsSync(resolved)) return `Directory not found: ${resolved}`;
|
|
98
|
+
},
|
|
99
|
+
});
|
|
100
|
+
if (typeof input === 'symbol') return { cancelled: true };
|
|
101
|
+
targetDir = path.resolve(input || process.cwd());
|
|
102
|
+
log.info(`Installing into: ${targetDir}`);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// ── 3. Check existing install ────────────────────────────────────────────
|
|
106
|
+
const os = require('node:os');
|
|
107
|
+
const manifestBase = scope === 'global' ? os.homedir() : targetDir;
|
|
108
|
+
const manifestPath = path.join(manifestBase, '.autodoc', 'manifest.yaml');
|
|
109
|
+
const isReinstall = fs.existsSync(manifestPath);
|
|
110
|
+
if (isReinstall) {
|
|
111
|
+
log.warn('Existing installation found — reinstalling will back up changed files.');
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// ── 4. Module selection ──────────────────────────────────────────────────
|
|
115
|
+
const allModules = this.loadModules();
|
|
116
|
+
let selectedModuleCodes;
|
|
117
|
+
|
|
118
|
+
if (options.modules) {
|
|
119
|
+
selectedModuleCodes = options.modules.split(',').map((m) => m.trim());
|
|
120
|
+
} else if (options.yes) {
|
|
121
|
+
selectedModuleCodes = allModules.filter((m) => m.default_selected).map((m) => m.code);
|
|
122
|
+
} else {
|
|
123
|
+
const result = await multiselect({
|
|
124
|
+
message: 'Which modules do you want to install?',
|
|
125
|
+
options: allModules.map((m) => ({
|
|
126
|
+
value: m.code,
|
|
127
|
+
label: m.name,
|
|
128
|
+
hint: m.description,
|
|
129
|
+
})),
|
|
130
|
+
initialValues: allModules.filter((m) => m.default_selected).map((m) => m.code),
|
|
131
|
+
required: true,
|
|
132
|
+
});
|
|
133
|
+
if (typeof result === 'symbol') return { cancelled: true };
|
|
134
|
+
selectedModuleCodes = result;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// ── 5. IDE selection ─────────────────────────────────────────────────────
|
|
138
|
+
const platforms = this.loadPlatforms();
|
|
139
|
+
const platformEntries = Object.entries(platforms).filter(
|
|
140
|
+
([, p]) => p.installer && !p.suspended
|
|
141
|
+
);
|
|
142
|
+
|
|
143
|
+
// Sort: preferred first, then alphabetical
|
|
144
|
+
platformEntries.sort(([, a], [, b]) => {
|
|
145
|
+
if (a.preferred && !b.preferred) return -1;
|
|
146
|
+
if (!a.preferred && b.preferred) return 1;
|
|
147
|
+
return a.name.localeCompare(b.name);
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
let selectedIdeCodes;
|
|
151
|
+
|
|
152
|
+
if (options.ides) {
|
|
153
|
+
selectedIdeCodes = options.ides.split(',').map((i) => i.trim());
|
|
154
|
+
} else if (options.yes) {
|
|
155
|
+
selectedIdeCodes = platformEntries.filter(([, p]) => p.preferred).map(([code]) => code);
|
|
156
|
+
} else {
|
|
157
|
+
const result = await multiselect({
|
|
158
|
+
message: 'Which AI tools/IDEs do you want to configure?',
|
|
159
|
+
options: platformEntries.map(([code, p]) => ({
|
|
160
|
+
value: code,
|
|
161
|
+
label: p.preferred ? `${p.name} ★` : p.name,
|
|
162
|
+
hint: p.description,
|
|
163
|
+
})),
|
|
164
|
+
initialValues: platformEntries.filter(([, p]) => p.preferred).map(([code]) => code),
|
|
165
|
+
required: true,
|
|
166
|
+
});
|
|
167
|
+
if (typeof result === 'symbol') return { cancelled: true };
|
|
168
|
+
selectedIdeCodes = result;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// ── 6. Confirm ───────────────────────────────────────────────────────────
|
|
172
|
+
const selectedModuleNames = selectedModuleCodes
|
|
173
|
+
.map((code) => allModules.find((m) => m.code === code)?.name || code)
|
|
174
|
+
.join(', ');
|
|
175
|
+
const selectedIdeNames = selectedIdeCodes
|
|
176
|
+
.map(([code, p]) => platforms[code]?.name || code)
|
|
177
|
+
.join(', ') || selectedIdeCodes.map((code) => platforms[code]?.name || code).join(', ');
|
|
178
|
+
|
|
179
|
+
if (!options.yes) {
|
|
180
|
+
log.info(`Scope: ${scope === 'global' ? 'global (~/.{ide}/skills)' : `project (${targetDir})`}`);
|
|
181
|
+
log.info(`Modules: ${selectedModuleNames}`);
|
|
182
|
+
log.info(`IDEs: ${selectedIdeNames}`);
|
|
183
|
+
|
|
184
|
+
const ok = await confirm({ message: 'Proceed with installation?' });
|
|
185
|
+
if (typeof ok === 'symbol' || !ok) return { cancelled: true };
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
return {
|
|
189
|
+
cancelled: false,
|
|
190
|
+
targetDir,
|
|
191
|
+
scope,
|
|
192
|
+
modules: selectedModuleCodes,
|
|
193
|
+
ides: selectedIdeCodes,
|
|
194
|
+
isReinstall,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
module.exports = { UI };
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const chalk = require('chalk');
|
|
4
|
+
const packageJson = require('../../../package.json');
|
|
5
|
+
|
|
6
|
+
// ─── ASCII art logo ───────────────────────────────────────────────────────────
|
|
7
|
+
const LOGO = `
|
|
8
|
+
█████╗ ██╗ ██╗████████╗ ██████╗ ██████╗ ██████╗ ██████╗
|
|
9
|
+
██╔══██╗██║ ██║╚══██╔══╝██╔═══██╗██╔══██╗██╔═══██╗██╔════╝
|
|
10
|
+
███████║██║ ██║ ██║ ██║ ██║██║ ██║██║ ██║██║
|
|
11
|
+
██╔══██║██║ ██║ ██║ ██║ ██║██║ ██║██║ ██║██║
|
|
12
|
+
██║ ██║╚██████╔╝ ██║ ╚██████╔╝██████╔╝╚██████╔╝╚██████╗
|
|
13
|
+
╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝
|
|
14
|
+
`;
|
|
15
|
+
|
|
16
|
+
const TAGLINE = 'Your AI Dev Team, Installed in Seconds';
|
|
17
|
+
|
|
18
|
+
const TERMINAL_WIDTH = process.stdout.columns || 80;
|
|
19
|
+
const SEPARATOR = chalk.dim('─'.repeat(TERMINAL_WIDTH));
|
|
20
|
+
|
|
21
|
+
// ─── Welcome message ──────────────────────────────────────────────────────────
|
|
22
|
+
function printWelcome() {
|
|
23
|
+
const gold = chalk.hex('#ef0b45');
|
|
24
|
+
const cyan = chalk.cyan;
|
|
25
|
+
const dim = chalk.dim;
|
|
26
|
+
const bold = chalk.bold;
|
|
27
|
+
|
|
28
|
+
// Top border with version embedded in top-left (BMAD-style)
|
|
29
|
+
const version = `v${packageJson.version}`;
|
|
30
|
+
const topBorder = version + '─'.repeat(Math.max(0, TERMINAL_WIDTH - version.length));
|
|
31
|
+
console.log(cyan(topBorder));
|
|
32
|
+
console.log();
|
|
33
|
+
|
|
34
|
+
// Logo (centered as a block — all lines use the same left-pad based on widest line)
|
|
35
|
+
const logoLines = LOGO.split('\n').filter((l) => l.trim() !== '');
|
|
36
|
+
const maxLogoWidth = Math.max(...logoLines.map((l) => l.length));
|
|
37
|
+
const logoPad = Math.max(0, Math.floor((TERMINAL_WIDTH - maxLogoWidth) / 2));
|
|
38
|
+
console.log();
|
|
39
|
+
for (const line of logoLines) {
|
|
40
|
+
console.log(gold(' '.repeat(logoPad) + line));
|
|
41
|
+
}
|
|
42
|
+
console.log();
|
|
43
|
+
|
|
44
|
+
// Tagline (centered, gold italic)
|
|
45
|
+
const tagPad = Math.max(0, Math.floor((TERMINAL_WIDTH - TAGLINE.length) / 2));
|
|
46
|
+
console.log(gold.italic(' '.repeat(tagPad) + TAGLINE));
|
|
47
|
+
console.log();
|
|
48
|
+
|
|
49
|
+
// Bottom border
|
|
50
|
+
console.log(cyan('─'.repeat(TERMINAL_WIDTH)));
|
|
51
|
+
console.log();
|
|
52
|
+
|
|
53
|
+
// Welcome section
|
|
54
|
+
console.log(bold('🚀 Welcome to autodoc-agent-kit!'));
|
|
55
|
+
console.log();
|
|
56
|
+
console.log(' Install a complete AI dev team into any project — skills for Product,');
|
|
57
|
+
console.log(' Engineering, QA, Design, and DevOps across 14 AI IDEs and CLIs.');
|
|
58
|
+
console.log();
|
|
59
|
+
console.log(` ${dim('─')} Select the modules that match your team\'s needs`);
|
|
60
|
+
console.log(` ${dim('─')} Works with Claude Code, Cursor, Gemini CLI, Windsurf, and more`);
|
|
61
|
+
console.log(` ${dim('─')} Skills install once and work in all your projects`);
|
|
62
|
+
console.log(` ${dim('─')} Documentation: ${chalk.cyan('https://github.com/autodocdev/autodoc-agent-kit')}`);
|
|
63
|
+
console.log();
|
|
64
|
+
|
|
65
|
+
// Open source section
|
|
66
|
+
console.log(bold('⭐ Free & Open Source'));
|
|
67
|
+
console.log(` ${dim('─')} MIT licensed — use it, fork it, extend it`);
|
|
68
|
+
console.log(` ${dim('─')} Add your own skills to any module`);
|
|
69
|
+
console.log(` ${dim('─')} Contributions welcome`);
|
|
70
|
+
console.log();
|
|
71
|
+
|
|
72
|
+
// Help grow section
|
|
73
|
+
console.log(bold('🙌 Help us grow'));
|
|
74
|
+
console.log(` ${dim('─')} Star on GitHub: ${chalk.cyan('https://github.com/autodocdev/autodoc-agent-kit')}`);
|
|
75
|
+
console.log(` ${dim('─')} Share with your team`);
|
|
76
|
+
console.log(` ${dim('─')} Open issues and PRs — all feedback welcome`);
|
|
77
|
+
console.log();
|
|
78
|
+
console.log(SEPARATOR);
|
|
79
|
+
console.log();
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
module.exports = { printWelcome };
|