specweave 0.26.14 → 0.27.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/CLAUDE.md +73 -1
- package/README.md +111 -466
- package/dist/plugins/specweave-jira/lib/setup-wizard.d.ts.map +1 -1
- package/dist/plugins/specweave-jira/lib/setup-wizard.js +57 -78
- package/dist/plugins/specweave-jira/lib/setup-wizard.js.map +1 -1
- package/dist/src/cli/commands/import-docs.d.ts.map +1 -1
- package/dist/src/cli/commands/import-docs.js +23 -31
- package/dist/src/cli/commands/import-docs.js.map +1 -1
- package/dist/src/cli/commands/import-external.d.ts.map +1 -1
- package/dist/src/cli/commands/import-external.js +6 -10
- package/dist/src/cli/commands/import-external.js.map +1 -1
- package/dist/src/cli/commands/init-multiproject.d.ts.map +1 -1
- package/dist/src/cli/commands/init-multiproject.js +58 -73
- package/dist/src/cli/commands/init-multiproject.js.map +1 -1
- package/dist/src/cli/commands/init.d.ts +17 -11
- package/dist/src/cli/commands/init.d.ts.map +1 -1
- package/dist/src/cli/commands/init.js +221 -1874
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/install.d.ts.map +1 -1
- package/dist/src/cli/commands/install.js +14 -22
- package/dist/src/cli/commands/install.js.map +1 -1
- package/dist/src/cli/commands/migrate-config.d.ts.map +1 -1
- package/dist/src/cli/commands/migrate-config.js +6 -10
- package/dist/src/cli/commands/migrate-config.js.map +1 -1
- package/dist/src/cli/commands/switch-project.d.ts.map +1 -1
- package/dist/src/cli/commands/switch-project.js.map +1 -1
- package/dist/src/cli/helpers/ado-area-path-mapper.d.ts.map +1 -1
- package/dist/src/cli/helpers/ado-area-path-mapper.js +36 -49
- package/dist/src/cli/helpers/ado-area-path-mapper.js.map +1 -1
- package/dist/src/cli/helpers/github/increment-profile-selector.d.ts.map +1 -1
- package/dist/src/cli/helpers/github/increment-profile-selector.js.map +1 -1
- package/dist/src/cli/helpers/github/profile-manager.d.ts.map +1 -1
- package/dist/src/cli/helpers/github/profile-manager.js +8 -11
- package/dist/src/cli/helpers/github/profile-manager.js.map +1 -1
- package/dist/src/cli/helpers/github-repo-selector.d.ts.map +1 -1
- package/dist/src/cli/helpers/github-repo-selector.js +26 -50
- package/dist/src/cli/helpers/github-repo-selector.js.map +1 -1
- package/dist/src/cli/helpers/import-strategy-prompter.d.ts.map +1 -1
- package/dist/src/cli/helpers/import-strategy-prompter.js +39 -52
- package/dist/src/cli/helpers/import-strategy-prompter.js.map +1 -1
- package/dist/src/cli/helpers/init/config-detection.d.ts +40 -0
- package/dist/src/cli/helpers/init/config-detection.d.ts.map +1 -0
- package/dist/src/cli/helpers/init/config-detection.js +125 -0
- package/dist/src/cli/helpers/init/config-detection.js.map +1 -0
- package/dist/src/cli/helpers/init/directory-structure.d.ts +26 -0
- package/dist/src/cli/helpers/init/directory-structure.d.ts.map +1 -0
- package/dist/src/cli/helpers/init/directory-structure.js +190 -0
- package/dist/src/cli/helpers/init/directory-structure.js.map +1 -0
- package/dist/src/cli/helpers/init/external-import.d.ts +15 -0
- package/dist/src/cli/helpers/init/external-import.d.ts.map +1 -0
- package/dist/src/cli/helpers/init/external-import.js +251 -0
- package/dist/src/cli/helpers/init/external-import.js.map +1 -0
- package/dist/src/cli/helpers/init/index.d.ts +15 -0
- package/dist/src/cli/helpers/init/index.d.ts.map +1 -0
- package/dist/src/cli/helpers/init/index.js +26 -0
- package/dist/src/cli/helpers/init/index.js.map +1 -0
- package/dist/src/cli/helpers/init/next-steps.d.ts +15 -0
- package/dist/src/cli/helpers/init/next-steps.d.ts.map +1 -0
- package/dist/src/cli/helpers/init/next-steps.js +72 -0
- package/dist/src/cli/helpers/init/next-steps.js.map +1 -0
- package/dist/src/cli/helpers/init/path-utils.d.ts +41 -0
- package/dist/src/cli/helpers/init/path-utils.d.ts.map +1 -0
- package/dist/src/cli/helpers/init/path-utils.js +146 -0
- package/dist/src/cli/helpers/init/path-utils.js.map +1 -0
- package/dist/src/cli/helpers/init/plugin-installer.d.ts +28 -0
- package/dist/src/cli/helpers/init/plugin-installer.d.ts.map +1 -0
- package/dist/src/cli/helpers/init/plugin-installer.js +238 -0
- package/dist/src/cli/helpers/init/plugin-installer.js.map +1 -0
- package/dist/src/cli/helpers/init/repository-setup.d.ts +28 -0
- package/dist/src/cli/helpers/init/repository-setup.d.ts.map +1 -0
- package/dist/src/cli/helpers/init/repository-setup.js +78 -0
- package/dist/src/cli/helpers/init/repository-setup.js.map +1 -0
- package/dist/src/cli/helpers/init/smart-reinit.d.ts +30 -0
- package/dist/src/cli/helpers/init/smart-reinit.d.ts.map +1 -0
- package/dist/src/cli/helpers/init/smart-reinit.js +140 -0
- package/dist/src/cli/helpers/init/smart-reinit.js.map +1 -0
- package/dist/src/cli/helpers/init/testing-config.d.ts +27 -0
- package/dist/src/cli/helpers/init/testing-config.d.ts.map +1 -0
- package/dist/src/cli/helpers/init/testing-config.js +131 -0
- package/dist/src/cli/helpers/init/testing-config.js.map +1 -0
- package/dist/src/cli/helpers/init/types.d.ts +86 -0
- package/dist/src/cli/helpers/init/types.d.ts.map +1 -0
- package/dist/src/cli/helpers/init/types.js +5 -0
- package/dist/src/cli/helpers/init/types.js.map +1 -0
- package/dist/src/cli/helpers/issue-tracker/ado-auto-discover.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/ado-auto-discover.js +10 -12
- package/dist/src/cli/helpers/issue-tracker/ado-auto-discover.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/ado.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/ado.js +43 -60
- package/dist/src/cli/helpers/issue-tracker/ado.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/github-multi-repo.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/github-multi-repo.js +193 -230
- package/dist/src/cli/helpers/issue-tracker/github-multi-repo.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/github.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/github.js +43 -54
- package/dist/src/cli/helpers/issue-tracker/github.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/index.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/index.js +27 -40
- package/dist/src/cli/helpers/issue-tracker/index.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/jira.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/jira.js +54 -70
- package/dist/src/cli/helpers/issue-tracker/jira.js.map +1 -1
- package/dist/src/cli/helpers/smart-filter.d.ts.map +1 -1
- package/dist/src/cli/helpers/smart-filter.js +62 -85
- package/dist/src/cli/helpers/smart-filter.js.map +1 -1
- package/dist/src/core/increment/auto-transition-manager.d.ts +12 -0
- package/dist/src/core/increment/auto-transition-manager.d.ts.map +1 -1
- package/dist/src/core/increment/auto-transition-manager.js +45 -0
- package/dist/src/core/increment/auto-transition-manager.js.map +1 -1
- package/dist/src/core/increment/metadata-manager.d.ts.map +1 -1
- package/dist/src/core/increment/metadata-manager.js +46 -0
- package/dist/src/core/increment/metadata-manager.js.map +1 -1
- package/dist/src/core/increment/status-change-sync-trigger.d.ts +12 -0
- package/dist/src/core/increment/status-change-sync-trigger.d.ts.map +1 -1
- package/dist/src/core/increment/status-change-sync-trigger.js +48 -2
- package/dist/src/core/increment/status-change-sync-trigger.js.map +1 -1
- package/dist/src/core/living-docs/living-docs-sync.d.ts +13 -0
- package/dist/src/core/living-docs/living-docs-sync.d.ts.map +1 -1
- package/dist/src/core/living-docs/living-docs-sync.js +40 -0
- package/dist/src/core/living-docs/living-docs-sync.js.map +1 -1
- package/dist/src/core/repo-structure/repo-bulk-discovery.d.ts.map +1 -1
- package/dist/src/core/repo-structure/repo-bulk-discovery.js +63 -83
- package/dist/src/core/repo-structure/repo-bulk-discovery.js.map +1 -1
- package/dist/src/core/repo-structure/repo-structure-manager.d.ts.map +1 -1
- package/dist/src/core/repo-structure/repo-structure-manager.js +339 -424
- package/dist/src/core/repo-structure/repo-structure-manager.js.map +1 -1
- package/dist/src/core/sync/bidirectional-engine.d.ts.map +1 -1
- package/dist/src/core/sync/bidirectional-engine.js +21 -29
- package/dist/src/core/sync/bidirectional-engine.js.map +1 -1
- package/dist/src/init/InitFlow.js +15 -19
- package/dist/src/init/InitFlow.js.map +1 -1
- package/dist/src/init/repo/types.d.ts +1 -1
- package/dist/src/integrations/ado/area-path-mapper.d.ts.map +1 -1
- package/dist/src/integrations/ado/area-path-mapper.js +19 -23
- package/dist/src/integrations/ado/area-path-mapper.js.map +1 -1
- package/dist/src/utils/external-resource-validator.d.ts.map +1 -1
- package/dist/src/utils/external-resource-validator.js +41 -65
- package/dist/src/utils/external-resource-validator.js.map +1 -1
- package/dist/src/utils/project-detection.d.ts.map +1 -1
- package/dist/src/utils/project-detection.js +19 -21
- package/dist/src/utils/project-detection.js.map +1 -1
- package/dist/src/utils/project-validator.d.ts.map +1 -1
- package/dist/src/utils/project-validator.js +5 -7
- package/dist/src/utils/project-validator.js.map +1 -1
- package/package.json +2 -3
- package/plugins/specweave/agents/tech-lead/AGENT.md +9 -0
- package/plugins/specweave/hooks/docs-changed.sh.backup +79 -0
- package/plugins/specweave/hooks/human-input-required.sh.backup +75 -0
- package/plugins/specweave/hooks/post-first-increment.sh.backup +61 -0
- package/plugins/specweave/hooks/post-increment-change.sh.backup +98 -0
- package/plugins/specweave/hooks/post-increment-completion.sh.backup +231 -0
- package/plugins/specweave/hooks/post-increment-planning.sh.backup +1048 -0
- package/plugins/specweave/hooks/post-increment-status-change.sh.backup +147 -0
- package/plugins/specweave/hooks/post-spec-update.sh.backup +158 -0
- package/plugins/specweave/hooks/post-user-story-complete.sh.backup +179 -0
- package/plugins/specweave/hooks/pre-command-deduplication.sh.backup +83 -0
- package/plugins/specweave/hooks/pre-implementation.sh.backup +67 -0
- package/plugins/specweave/hooks/pre-task-completion.sh.backup +194 -0
- package/plugins/specweave/hooks/pre-tool-use.sh.backup +133 -0
- package/plugins/specweave/hooks/user-prompt-submit.sh.backup +386 -0
- package/plugins/specweave/lib/vendor/core/increment/auto-transition-manager.d.ts +12 -0
- package/plugins/specweave/lib/vendor/core/increment/auto-transition-manager.js +45 -0
- package/plugins/specweave/lib/vendor/core/increment/auto-transition-manager.js.map +1 -1
- package/plugins/specweave/lib/vendor/core/increment/metadata-manager.js +46 -0
- package/plugins/specweave/lib/vendor/core/increment/metadata-manager.js.map +1 -1
- package/plugins/specweave/skills/increment-planner/SKILL.md +10 -5
- package/plugins/specweave/skills/specweave-framework/SKILL.md +6 -4
- package/plugins/specweave/templates/coding-standards.md.template +36 -0
- package/plugins/specweave-ado/hooks/post-living-docs-update.sh.backup +353 -0
- package/plugins/specweave-ado/hooks/post-task-completion.sh.backup +172 -0
- package/plugins/specweave-ado/lib/ado-multi-project-sync.js +1 -0
- package/plugins/specweave-ado/lib/enhanced-ado-sync.js +170 -0
- package/plugins/specweave-ado/lib/project-selector.js +56 -67
- package/plugins/specweave-ado/lib/project-selector.ts +72 -85
- package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +1104 -0
- package/plugins/specweave-github/hooks/post-task-completion.sh.backup +258 -0
- package/plugins/specweave-github/lib/repo-selector.js +55 -66
- package/plugins/specweave-github/lib/repo-selector.ts +73 -84
- package/plugins/specweave-jira/commands/import-projects.js +3 -5
- package/plugins/specweave-jira/commands/import-projects.ts +3 -5
- package/plugins/specweave-jira/hooks/post-task-completion.sh.backup +172 -0
- package/plugins/specweave-jira/lib/enhanced-jira-sync.js +3 -3
- package/plugins/specweave-jira/lib/project-selector.js +60 -71
- package/plugins/specweave-jira/lib/project-selector.ts +78 -91
- package/plugins/specweave-jira/lib/setup-wizard.js +51 -72
- package/plugins/specweave-jira/lib/setup-wizard.ts +56 -74
- package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +1017 -0
- package/plugins/specweave-release/hooks/post-task-completion.sh.backup +110 -0
- package/src/templates/CLAUDE.md.template +14 -0
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Directory structure creation and template copying
|
|
3
|
+
*/
|
|
4
|
+
import * as fs from '../../../utils/fs-native.js';
|
|
5
|
+
import * as path from 'path';
|
|
6
|
+
import chalk from 'chalk';
|
|
7
|
+
import { ClaudeMdGenerator } from '../../../adapters/claude-md-generator.js';
|
|
8
|
+
import { AgentsMdGenerator } from '../../../adapters/agents-md-generator.js';
|
|
9
|
+
import { getLocaleManager } from '../../../core/i18n/locale-manager.js';
|
|
10
|
+
import { findSourceDir, findPackageRoot } from './path-utils.js';
|
|
11
|
+
/**
|
|
12
|
+
* Create the .specweave directory structure
|
|
13
|
+
*
|
|
14
|
+
* @param targetDir - Target directory
|
|
15
|
+
* @param _adapterName - Adapter name (unused, kept for API compatibility)
|
|
16
|
+
*/
|
|
17
|
+
export function createDirectoryStructure(targetDir, _adapterName) {
|
|
18
|
+
const directories = [
|
|
19
|
+
// Core increment structure
|
|
20
|
+
'.specweave/increments',
|
|
21
|
+
'.specweave/cache', // External tool cache (24-hour TTL)
|
|
22
|
+
// 6-pillar documentation structure
|
|
23
|
+
'.specweave/docs/internal/strategy', // Business specs (WHAT, WHY)
|
|
24
|
+
'.specweave/docs/internal/specs', // Feature specifications (detailed requirements)
|
|
25
|
+
'.specweave/docs/internal/architecture', // Technical design (HOW)
|
|
26
|
+
'.specweave/docs/internal/architecture/adr', // Architecture Decision Records
|
|
27
|
+
'.specweave/docs/internal/architecture/diagrams', // Architecture diagrams
|
|
28
|
+
'.specweave/docs/internal/delivery', // Roadmap, CI/CD, guides
|
|
29
|
+
'.specweave/docs/internal/operations', // Runbooks, SLOs
|
|
30
|
+
'.specweave/docs/internal/governance', // Security, compliance
|
|
31
|
+
'.specweave/docs/public', // Published documentation
|
|
32
|
+
];
|
|
33
|
+
directories.forEach((dir) => {
|
|
34
|
+
fs.mkdirSync(path.join(targetDir, dir), { recursive: true });
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Copy templates and generate CLAUDE.md and AGENTS.md
|
|
39
|
+
*
|
|
40
|
+
* @param templatesDir - Source templates directory
|
|
41
|
+
* @param targetDir - Target directory
|
|
42
|
+
* @param projectName - Project name
|
|
43
|
+
* @param language - Language for i18n
|
|
44
|
+
*/
|
|
45
|
+
export async function copyTemplates(templatesDir, targetDir, projectName, language = 'en') {
|
|
46
|
+
const locale = getLocaleManager(language);
|
|
47
|
+
// Verify templates directory exists
|
|
48
|
+
if (!fs.existsSync(templatesDir)) {
|
|
49
|
+
console.error(chalk.red(`\n${locale.t('cli', 'init.errors.templatesNotFound', { path: templatesDir })}`));
|
|
50
|
+
const packageRoot = findPackageRoot(templatesDir);
|
|
51
|
+
if (packageRoot) {
|
|
52
|
+
console.error(chalk.red(` ${locale.t('cli', 'init.errors.packageRoot', { root: packageRoot })}`));
|
|
53
|
+
console.error(chalk.red(` ${locale.t('cli', 'init.errors.tryingAlternate')}`));
|
|
54
|
+
// Try src/templates as fallback
|
|
55
|
+
const altPath = path.join(packageRoot, 'src', 'templates');
|
|
56
|
+
if (fs.existsSync(altPath)) {
|
|
57
|
+
console.error(chalk.yellow(` ${locale.t('cli', 'init.errors.foundTemplatesAt', { path: altPath })}`));
|
|
58
|
+
templatesDir = altPath;
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
throw new Error('Failed to locate templates directory');
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
throw new Error('Failed to locate templates directory and package root');
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
// Copy README.md
|
|
69
|
+
const readmeTemplate = path.join(templatesDir, 'README.md.template');
|
|
70
|
+
if (fs.existsSync(readmeTemplate)) {
|
|
71
|
+
let readme = fs.readFileSync(readmeTemplate, 'utf-8');
|
|
72
|
+
readme = readme.replace(/{{PROJECT_NAME}}/g, projectName);
|
|
73
|
+
fs.writeFileSync(path.join(targetDir, 'README.md'), readme);
|
|
74
|
+
}
|
|
75
|
+
// Generate CLAUDE.md
|
|
76
|
+
const skillsDir = findSourceDir('skills', templatesDir);
|
|
77
|
+
const agentsDir = findSourceDir('agents', templatesDir);
|
|
78
|
+
const commandsDir = findSourceDir('commands', templatesDir);
|
|
79
|
+
const claudeMdTemplatePath = path.normalize(path.join(templatesDir, 'CLAUDE.md.template'));
|
|
80
|
+
const claudeGen = new ClaudeMdGenerator(skillsDir, agentsDir, commandsDir);
|
|
81
|
+
const claudeMd = await claudeGen.generate({
|
|
82
|
+
projectName,
|
|
83
|
+
projectPath: targetDir,
|
|
84
|
+
templatePath: fs.existsSync(claudeMdTemplatePath) ? claudeMdTemplatePath : undefined
|
|
85
|
+
});
|
|
86
|
+
fs.writeFileSync(path.join(targetDir, 'CLAUDE.md'), claudeMd);
|
|
87
|
+
// Generate AGENTS.md
|
|
88
|
+
const agentsMdTemplatePath = path.normalize(path.join(templatesDir, 'AGENTS.md.template'));
|
|
89
|
+
const agentsGen = new AgentsMdGenerator(skillsDir, agentsDir, commandsDir);
|
|
90
|
+
const agentsMd = await agentsGen.generate({
|
|
91
|
+
projectName,
|
|
92
|
+
projectPath: targetDir,
|
|
93
|
+
templatePath: fs.existsSync(agentsMdTemplatePath) ? agentsMdTemplatePath : undefined
|
|
94
|
+
});
|
|
95
|
+
fs.writeFileSync(path.join(targetDir, 'AGENTS.md'), agentsMd);
|
|
96
|
+
// Copy .gitignore
|
|
97
|
+
const gitignoreTemplate = path.join(templatesDir, '.gitignore.template');
|
|
98
|
+
if (fs.existsSync(gitignoreTemplate)) {
|
|
99
|
+
fs.copyFileSync(gitignoreTemplate, path.join(targetDir, '.gitignore'));
|
|
100
|
+
}
|
|
101
|
+
// Copy .gitattributes
|
|
102
|
+
const gitattributesTemplate = path.join(templatesDir, '.gitattributes.template');
|
|
103
|
+
if (fs.existsSync(gitattributesTemplate)) {
|
|
104
|
+
fs.copyFileSync(gitattributesTemplate, path.join(targetDir, '.gitattributes'));
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Create .specweave/config.json with project settings
|
|
109
|
+
*/
|
|
110
|
+
export function createConfigFile(targetDir, projectName, adapter, language, enableDocsPreview = true, testMode, coverageTarget) {
|
|
111
|
+
const configPath = path.join(targetDir, '.specweave', 'config.json');
|
|
112
|
+
const config = {
|
|
113
|
+
version: '2.0',
|
|
114
|
+
project: {
|
|
115
|
+
name: projectName,
|
|
116
|
+
version: '0.1.0',
|
|
117
|
+
},
|
|
118
|
+
adapters: {
|
|
119
|
+
default: adapter,
|
|
120
|
+
},
|
|
121
|
+
repository: {
|
|
122
|
+
provider: 'local'
|
|
123
|
+
},
|
|
124
|
+
issueTracker: {
|
|
125
|
+
provider: 'none'
|
|
126
|
+
},
|
|
127
|
+
sync: {
|
|
128
|
+
enabled: false,
|
|
129
|
+
direction: 'bidirectional',
|
|
130
|
+
autoSync: false,
|
|
131
|
+
includeStatus: true,
|
|
132
|
+
autoApplyLabels: true,
|
|
133
|
+
settings: {
|
|
134
|
+
canUpsertInternalItems: true,
|
|
135
|
+
canUpdateExternalItems: true,
|
|
136
|
+
canUpdateStatus: true,
|
|
137
|
+
autoSyncOnCompletion: true
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
hooks: {
|
|
141
|
+
post_task_completion: {
|
|
142
|
+
sync_living_docs: true,
|
|
143
|
+
sync_tasks_md: true,
|
|
144
|
+
external_tracker_sync: true
|
|
145
|
+
},
|
|
146
|
+
post_increment_planning: {
|
|
147
|
+
auto_create_github_issue: false
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
};
|
|
151
|
+
// Add testing configuration if provided
|
|
152
|
+
if (testMode && coverageTarget) {
|
|
153
|
+
config.testing = {
|
|
154
|
+
defaultTestMode: testMode,
|
|
155
|
+
defaultCoverageTarget: coverageTarget,
|
|
156
|
+
coverageTargets: {
|
|
157
|
+
unit: Math.min(coverageTarget + 5, 95),
|
|
158
|
+
integration: coverageTarget,
|
|
159
|
+
e2e: Math.min(coverageTarget + 10, 100)
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
// Add documentation preview for Claude
|
|
164
|
+
if (adapter === 'claude') {
|
|
165
|
+
config.documentation = {
|
|
166
|
+
preview: {
|
|
167
|
+
enabled: enableDocsPreview,
|
|
168
|
+
autoInstall: false,
|
|
169
|
+
port: 3015,
|
|
170
|
+
openBrowser: true,
|
|
171
|
+
theme: 'default',
|
|
172
|
+
excludeFolders: ['legacy', 'node_modules']
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
// Add language if non-English
|
|
177
|
+
if (language !== 'en') {
|
|
178
|
+
config.language = language;
|
|
179
|
+
config.translation = {
|
|
180
|
+
method: 'in-session',
|
|
181
|
+
autoTranslateLivingDocs: false,
|
|
182
|
+
keepFrameworkTerms: true,
|
|
183
|
+
keepTechnicalTerms: true,
|
|
184
|
+
translateCodeComments: true,
|
|
185
|
+
translateVariableNames: false,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
fs.writeJsonSync(configPath, config, { spaces: 2 });
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=directory-structure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directory-structure.js","sourceRoot":"","sources":["../../../../../src/cli/helpers/init/directory-structure.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External tool import functionality
|
|
3
|
+
* Imports work items from GitHub, JIRA, Azure DevOps
|
|
4
|
+
*/
|
|
5
|
+
import { CoordinatorResult } from '../../../importers/import-coordinator.js';
|
|
6
|
+
/**
|
|
7
|
+
* Prompt user and run external tool import
|
|
8
|
+
* Detects GitHub/JIRA/ADO configuration and imports work items
|
|
9
|
+
*
|
|
10
|
+
* @param targetDir - Project directory
|
|
11
|
+
* @param isCI - Whether running in CI mode
|
|
12
|
+
* @returns Import result
|
|
13
|
+
*/
|
|
14
|
+
export declare function promptAndRunExternalImport(targetDir: string, isCI: boolean): Promise<CoordinatorResult>;
|
|
15
|
+
//# sourceMappingURL=external-import.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"external-import.d.ts","sourceRoot":"","sources":["../../../../../src/cli/helpers/init/external-import.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,OAAO,EAAwC,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAMnH;;;;;;;GAOG;AACH,wBAAsB,0BAA0B,CAC9C,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,iBAAiB,CAAC,CAuG5B"}
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* External tool import functionality
|
|
3
|
+
* Imports work items from GitHub, JIRA, Azure DevOps
|
|
4
|
+
*/
|
|
5
|
+
import * as fs from '../../../utils/fs-native.js';
|
|
6
|
+
import * as path from 'path';
|
|
7
|
+
import chalk from 'chalk';
|
|
8
|
+
import ora from 'ora';
|
|
9
|
+
import { select, confirm } from '@inquirer/prompts';
|
|
10
|
+
import { Octokit } from '@octokit/rest';
|
|
11
|
+
import { ImportCoordinator } from '../../../importers/import-coordinator.js';
|
|
12
|
+
import { ItemConverter } from '../../../importers/item-converter.js';
|
|
13
|
+
import { loadImportConfig } from '../../../config/import-config.js';
|
|
14
|
+
import { selectRepositories } from '../github-repo-selector.js';
|
|
15
|
+
import { detectAllConfigs } from './config-detection.js';
|
|
16
|
+
/**
|
|
17
|
+
* Prompt user and run external tool import
|
|
18
|
+
* Detects GitHub/JIRA/ADO configuration and imports work items
|
|
19
|
+
*
|
|
20
|
+
* @param targetDir - Project directory
|
|
21
|
+
* @param isCI - Whether running in CI mode
|
|
22
|
+
* @returns Import result
|
|
23
|
+
*/
|
|
24
|
+
export async function promptAndRunExternalImport(targetDir, isCI) {
|
|
25
|
+
// Load import configuration
|
|
26
|
+
const importConfig = loadImportConfig(targetDir);
|
|
27
|
+
// Check if import is disabled via config
|
|
28
|
+
if (!importConfig.enabled) {
|
|
29
|
+
return emptyResult();
|
|
30
|
+
}
|
|
31
|
+
// Detect available external tools
|
|
32
|
+
const { github, jira, ado, availableTools } = detectAllConfigs(targetDir);
|
|
33
|
+
// If no tools detected, skip import
|
|
34
|
+
if (availableTools.length === 0) {
|
|
35
|
+
return emptyResult();
|
|
36
|
+
}
|
|
37
|
+
console.log(chalk.blue('\n🔍 External Tool Detection'));
|
|
38
|
+
console.log(chalk.gray(` Found: ${availableTools.join(', ')}`));
|
|
39
|
+
console.log('');
|
|
40
|
+
// In CI mode, skip import without prompting
|
|
41
|
+
if (isCI) {
|
|
42
|
+
console.log(chalk.gray(' → CI mode: Skipping import (can run manually later)\n'));
|
|
43
|
+
return emptyResult();
|
|
44
|
+
}
|
|
45
|
+
// Prompt user to import
|
|
46
|
+
const shouldImport = await confirm({
|
|
47
|
+
message: `Import existing work items from ${availableTools.join(', ')}?`,
|
|
48
|
+
default: false
|
|
49
|
+
});
|
|
50
|
+
if (!shouldImport) {
|
|
51
|
+
console.log(chalk.gray(' ✓ Skipping import\n'));
|
|
52
|
+
return emptyResult();
|
|
53
|
+
}
|
|
54
|
+
// Handle multi-repo selection for GitHub
|
|
55
|
+
let repoSelectionConfig = null;
|
|
56
|
+
if (github && process.env.GITHUB_TOKEN) {
|
|
57
|
+
repoSelectionConfig = await promptMultiRepoSelection(targetDir);
|
|
58
|
+
}
|
|
59
|
+
// Map config timeRangeMonths to closest prompt option
|
|
60
|
+
let defaultTimeRange = 3;
|
|
61
|
+
if (importConfig.timeRangeMonths === 1)
|
|
62
|
+
defaultTimeRange = 1;
|
|
63
|
+
else if (importConfig.timeRangeMonths <= 3)
|
|
64
|
+
defaultTimeRange = 3;
|
|
65
|
+
else if (importConfig.timeRangeMonths <= 6)
|
|
66
|
+
defaultTimeRange = 6;
|
|
67
|
+
else
|
|
68
|
+
defaultTimeRange = 999;
|
|
69
|
+
// Prompt for time range
|
|
70
|
+
const timeRange = await select({
|
|
71
|
+
message: 'How far back should we import?',
|
|
72
|
+
choices: [
|
|
73
|
+
{ name: '1 month (recent items only)', value: 1 },
|
|
74
|
+
{ name: '3 months (recommended)', value: 3 },
|
|
75
|
+
{ name: '6 months (comprehensive)', value: 6 },
|
|
76
|
+
{ name: 'All time (warning: may be slow)', value: 999 }
|
|
77
|
+
],
|
|
78
|
+
default: defaultTimeRange
|
|
79
|
+
});
|
|
80
|
+
// Build coordinator configuration
|
|
81
|
+
const coordinatorConfig = {
|
|
82
|
+
importConfig: {
|
|
83
|
+
timeRangeMonths: timeRange,
|
|
84
|
+
includeClosed: false,
|
|
85
|
+
pageSize: importConfig.pageSize
|
|
86
|
+
},
|
|
87
|
+
parallel: true
|
|
88
|
+
};
|
|
89
|
+
// Add GitHub config if available
|
|
90
|
+
if (github) {
|
|
91
|
+
coordinatorConfig.github = {
|
|
92
|
+
owner: github.owner,
|
|
93
|
+
repo: github.repo,
|
|
94
|
+
token: process.env.GITHUB_TOKEN
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
// Add JIRA config if available
|
|
98
|
+
if (jira) {
|
|
99
|
+
coordinatorConfig.jira = {
|
|
100
|
+
host: jira.host,
|
|
101
|
+
email: jira.email,
|
|
102
|
+
apiToken: jira.apiToken
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
// Add ADO config if available
|
|
106
|
+
if (ado) {
|
|
107
|
+
coordinatorConfig.ado = {
|
|
108
|
+
orgUrl: ado.orgUrl,
|
|
109
|
+
project: ado.project,
|
|
110
|
+
pat: ado.pat
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
// Run import with progress tracking
|
|
114
|
+
return await runImport(targetDir, coordinatorConfig);
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Prompt for multi-repository selection
|
|
118
|
+
*/
|
|
119
|
+
async function promptMultiRepoSelection(targetDir) {
|
|
120
|
+
try {
|
|
121
|
+
const useMultiRepo = await confirm({
|
|
122
|
+
message: 'Do you want to import from multiple repositories?',
|
|
123
|
+
default: false
|
|
124
|
+
});
|
|
125
|
+
if (!useMultiRepo) {
|
|
126
|
+
return null;
|
|
127
|
+
}
|
|
128
|
+
const octokit = new Octokit({ auth: process.env.GITHUB_TOKEN });
|
|
129
|
+
const repoSelectionConfig = await selectRepositories(octokit, process.env.GITHUB_TOKEN);
|
|
130
|
+
if (repoSelectionConfig) {
|
|
131
|
+
// Save to config
|
|
132
|
+
try {
|
|
133
|
+
const configPath = path.join(targetDir, '.specweave', 'config.json');
|
|
134
|
+
let config = {};
|
|
135
|
+
if (fs.existsSync(configPath)) {
|
|
136
|
+
config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
137
|
+
}
|
|
138
|
+
if (!config.github) {
|
|
139
|
+
config.github = {};
|
|
140
|
+
}
|
|
141
|
+
const githubConfig = config.github;
|
|
142
|
+
githubConfig.repositories = repoSelectionConfig.repositories;
|
|
143
|
+
githubConfig.selectionStrategy = repoSelectionConfig.selectionStrategy;
|
|
144
|
+
if (repoSelectionConfig.pattern) {
|
|
145
|
+
githubConfig.pattern = repoSelectionConfig.pattern;
|
|
146
|
+
}
|
|
147
|
+
if (repoSelectionConfig.organizationName) {
|
|
148
|
+
githubConfig.organizationName = repoSelectionConfig.organizationName;
|
|
149
|
+
}
|
|
150
|
+
fs.ensureDirSync(path.dirname(configPath));
|
|
151
|
+
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
|
|
152
|
+
}
|
|
153
|
+
catch {
|
|
154
|
+
// Silent - config save is not critical
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return repoSelectionConfig;
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
return null;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Run the import with progress tracking
|
|
165
|
+
*/
|
|
166
|
+
async function runImport(targetDir, coordinatorConfig) {
|
|
167
|
+
const spinner = ora('Importing items...').start();
|
|
168
|
+
coordinatorConfig.onProgress = (platform, count) => {
|
|
169
|
+
spinner.text = `Importing from ${platform}... (${count} items)`;
|
|
170
|
+
};
|
|
171
|
+
try {
|
|
172
|
+
const coordinator = new ImportCoordinator(coordinatorConfig);
|
|
173
|
+
const result = await coordinator.importAll();
|
|
174
|
+
spinner.succeed(`Imported ${result.totalCount} items`);
|
|
175
|
+
// Show breakdown by platform
|
|
176
|
+
if (result.results.length > 0) {
|
|
177
|
+
console.log('');
|
|
178
|
+
result.results.forEach(platformResult => {
|
|
179
|
+
console.log(chalk.gray(` ✓ ${platformResult.platform}: ${platformResult.count} items`));
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
// Show errors if any
|
|
183
|
+
if (Object.keys(result.errors).length > 0) {
|
|
184
|
+
console.log('');
|
|
185
|
+
console.log(chalk.yellow(' ⚠️ Some imports failed:'));
|
|
186
|
+
Object.entries(result.errors).forEach(([platform, errors]) => {
|
|
187
|
+
console.log(chalk.gray(` → ${platform}: ${errors.join(', ')}`));
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
// Warn if many items detected
|
|
191
|
+
if (result.totalCount > 100) {
|
|
192
|
+
console.log('');
|
|
193
|
+
console.log(chalk.yellow(` ⚠️ Imported ${result.totalCount} items (large dataset)`));
|
|
194
|
+
console.log(chalk.gray(' → Consider using time range filters for faster imports'));
|
|
195
|
+
}
|
|
196
|
+
// Convert imported items to living docs User Stories
|
|
197
|
+
if (result.totalCount > 0) {
|
|
198
|
+
await convertToLivingDocs(targetDir, result, spinner);
|
|
199
|
+
}
|
|
200
|
+
return result;
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
spinner.fail('Import failed');
|
|
204
|
+
throw error;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Convert imported items to living docs
|
|
209
|
+
*/
|
|
210
|
+
async function convertToLivingDocs(targetDir, result, spinner) {
|
|
211
|
+
spinner.start('Converting to living docs...');
|
|
212
|
+
try {
|
|
213
|
+
const specsDir = path.join(targetDir, '.specweave', 'docs', 'internal', 'specs');
|
|
214
|
+
const converter = new ItemConverter({ specsDir });
|
|
215
|
+
const convertedStories = await converter.convertItems(result.allItems);
|
|
216
|
+
spinner.succeed(`Converted ${convertedStories.length} User Stories to living docs`);
|
|
217
|
+
console.log(chalk.gray(' → Living docs created with E suffix (US-001E, US-002E, ...)'));
|
|
218
|
+
console.log(chalk.gray(' → Location: .specweave/docs/internal/specs/'));
|
|
219
|
+
console.log('');
|
|
220
|
+
// Validate that no increments were auto-created
|
|
221
|
+
try {
|
|
222
|
+
ItemConverter.validateNoIncrementsCreated(targetDir);
|
|
223
|
+
}
|
|
224
|
+
catch (validationError) {
|
|
225
|
+
spinner.fail('Import validation failed');
|
|
226
|
+
throw new Error(`CRITICAL ERROR: ${validationError instanceof Error ? validationError.message : String(validationError)}\n` +
|
|
227
|
+
'This is a bug in the import system. Please report it.');
|
|
228
|
+
}
|
|
229
|
+
console.log(chalk.blue(' 💡 Next steps:'));
|
|
230
|
+
console.log(chalk.gray(' → Review imported User Stories in living docs'));
|
|
231
|
+
console.log(chalk.gray(' → Create increments manually when ready: /specweave:increment "feature"'));
|
|
232
|
+
console.log('');
|
|
233
|
+
}
|
|
234
|
+
catch (conversionError) {
|
|
235
|
+
spinner.fail('Conversion to living docs failed');
|
|
236
|
+
throw conversionError;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Create empty result object
|
|
241
|
+
*/
|
|
242
|
+
function emptyResult() {
|
|
243
|
+
return {
|
|
244
|
+
results: [],
|
|
245
|
+
totalCount: 0,
|
|
246
|
+
allItems: [],
|
|
247
|
+
errors: {},
|
|
248
|
+
platforms: []
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
//# sourceMappingURL=external-import.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"external-import.js","sourceRoot":"","sources":["../../../../../src/cli/helpers/init/external-import.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Init command helpers - barrel export
|
|
3
|
+
*/
|
|
4
|
+
export * from './types.js';
|
|
5
|
+
export { findPackageRoot, findSourceDir, detectNestedSpecweave, countFilesRecursive, } from './path-utils.js';
|
|
6
|
+
export { detectGitHubRemote, detectJiraConfig, detectADOConfig, detectAllConfigs, } from './config-detection.js';
|
|
7
|
+
export { promptSmartReinit, type SmartReinitOptions, type SmartReinitResult, } from './smart-reinit.js';
|
|
8
|
+
export { installAllPlugins, type PluginInstallOptions, type PluginInstallResult, } from './plugin-installer.js';
|
|
9
|
+
export { setupRepositoryHosting, type RepositorySetupOptions, type RepositorySetupResult, } from './repository-setup.js';
|
|
10
|
+
export { promptTestingConfig, updateConfigWithTesting, type TestingConfigResult, } from './testing-config.js';
|
|
11
|
+
export { promptAndRunExternalImport, } from './external-import.js';
|
|
12
|
+
export { createDirectoryStructure, copyTemplates, createConfigFile, } from './directory-structure.js';
|
|
13
|
+
export { showNextSteps, } from './next-steps.js';
|
|
14
|
+
export { generateInitialIncrement, type InitialIncrementOptions, } from './initial-increment-generator.js';
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/cli/helpers/init/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,cAAc,YAAY,CAAC;AAG3B,OAAO,EACL,eAAe,EACf,aAAa,EACb,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,iBAAiB,EACjB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,GACvB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,iBAAiB,EACjB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,GACzB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,sBAAsB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,GAC3B,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,KAAK,mBAAmB,GACzB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,0BAA0B,GAC3B,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,wBAAwB,EACxB,aAAa,EACb,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,aAAa,GACd,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,wBAAwB,EACxB,KAAK,uBAAuB,GAC7B,MAAM,kCAAkC,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Init command helpers - barrel export
|
|
3
|
+
*/
|
|
4
|
+
// Types
|
|
5
|
+
export * from './types.js';
|
|
6
|
+
// Path utilities
|
|
7
|
+
export { findPackageRoot, findSourceDir, detectNestedSpecweave, countFilesRecursive, } from './path-utils.js';
|
|
8
|
+
// Config detection
|
|
9
|
+
export { detectGitHubRemote, detectJiraConfig, detectADOConfig, detectAllConfigs, } from './config-detection.js';
|
|
10
|
+
// Smart re-initialization
|
|
11
|
+
export { promptSmartReinit, } from './smart-reinit.js';
|
|
12
|
+
// Plugin installation
|
|
13
|
+
export { installAllPlugins, } from './plugin-installer.js';
|
|
14
|
+
// Repository setup
|
|
15
|
+
export { setupRepositoryHosting, } from './repository-setup.js';
|
|
16
|
+
// Testing configuration
|
|
17
|
+
export { promptTestingConfig, updateConfigWithTesting, } from './testing-config.js';
|
|
18
|
+
// External import
|
|
19
|
+
export { promptAndRunExternalImport, } from './external-import.js';
|
|
20
|
+
// Directory structure
|
|
21
|
+
export { createDirectoryStructure, copyTemplates, createConfigFile, } from './directory-structure.js';
|
|
22
|
+
// Next steps
|
|
23
|
+
export { showNextSteps, } from './next-steps.js';
|
|
24
|
+
// Initial increment generator (existing)
|
|
25
|
+
export { generateInitialIncrement, } from './initial-increment-generator.js';
|
|
26
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/cli/helpers/init/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,QAAQ;AACR,cAAc,YAAY,CAAC;AAE3B,iBAAiB;AACjB,OAAO,EACL,eAAe,EACf,aAAa,EACb,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AAEzB,mBAAmB;AACnB,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAE/B,0BAA0B;AAC1B,OAAO,EACL,iBAAiB,GAGlB,MAAM,mBAAmB,CAAC;AAE3B,sBAAsB;AACtB,OAAO,EACL,iBAAiB,GAGlB,MAAM,uBAAuB,CAAC;AAE/B,mBAAmB;AACnB,OAAO,EACL,sBAAsB,GAGvB,MAAM,uBAAuB,CAAC;AAE/B,wBAAwB;AACxB,OAAO,EACL,mBAAmB,EACnB,uBAAuB,GAExB,MAAM,qBAAqB,CAAC;AAE7B,kBAAkB;AAClB,OAAO,EACL,0BAA0B,GAC3B,MAAM,sBAAsB,CAAC;AAE9B,sBAAsB;AACtB,OAAO,EACL,wBAAwB,EACxB,aAAa,EACb,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAElC,aAAa;AACb,OAAO,EACL,aAAa,GACd,MAAM,iBAAiB,CAAC;AAEzB,yCAAyC;AACzC,OAAO,EACL,wBAAwB,GAEzB,MAAM,kCAAkC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Next steps display after init completion
|
|
3
|
+
*/
|
|
4
|
+
import type { SupportedLanguage } from '../../../core/i18n/types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Show next steps after initialization
|
|
7
|
+
*
|
|
8
|
+
* @param projectName - Project name
|
|
9
|
+
* @param adapterName - Adapter name (claude, cursor, generic)
|
|
10
|
+
* @param language - Language for i18n
|
|
11
|
+
* @param usedDotNotation - Whether user used "." for current directory
|
|
12
|
+
* @param pluginAutoInstalled - Whether plugins were auto-installed (Claude only)
|
|
13
|
+
*/
|
|
14
|
+
export declare function showNextSteps(projectName: string, adapterName: string, language: SupportedLanguage, usedDotNotation?: boolean, pluginAutoInstalled?: boolean): void;
|
|
15
|
+
//# sourceMappingURL=next-steps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"next-steps.d.ts","sourceRoot":"","sources":["../../../../../src/cli/helpers/init/next-steps.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAErE;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC3B,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,iBAAiB,EAC3B,eAAe,GAAE,OAAe,EAChC,mBAAmB,GAAE,OAAe,GACnC,IAAI,CA8DN"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Next steps display after init completion
|
|
3
|
+
*/
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import { getLocaleManager } from '../../../core/i18n/locale-manager.js';
|
|
6
|
+
/**
|
|
7
|
+
* Show next steps after initialization
|
|
8
|
+
*
|
|
9
|
+
* @param projectName - Project name
|
|
10
|
+
* @param adapterName - Adapter name (claude, cursor, generic)
|
|
11
|
+
* @param language - Language for i18n
|
|
12
|
+
* @param usedDotNotation - Whether user used "." for current directory
|
|
13
|
+
* @param pluginAutoInstalled - Whether plugins were auto-installed (Claude only)
|
|
14
|
+
*/
|
|
15
|
+
export function showNextSteps(projectName, adapterName, language, usedDotNotation = false, pluginAutoInstalled = false) {
|
|
16
|
+
const locale = getLocaleManager(language);
|
|
17
|
+
console.log('');
|
|
18
|
+
console.log(chalk.cyan.bold(locale.t('cli', 'init.nextSteps.header')));
|
|
19
|
+
console.log('');
|
|
20
|
+
let stepNumber = 1;
|
|
21
|
+
// Only show "cd" step if we created a subdirectory
|
|
22
|
+
if (!usedDotNotation) {
|
|
23
|
+
console.log(` ${stepNumber}. ${chalk.white(locale.t('cli', 'init.nextSteps.cd', { projectName }))}`);
|
|
24
|
+
console.log('');
|
|
25
|
+
stepNumber++;
|
|
26
|
+
}
|
|
27
|
+
// Adapter-specific instructions
|
|
28
|
+
if (adapterName === 'claude') {
|
|
29
|
+
console.log(` ${stepNumber}. ${chalk.white(locale.t('cli', 'init.nextSteps.claude.step1'))}`);
|
|
30
|
+
console.log('');
|
|
31
|
+
stepNumber++;
|
|
32
|
+
// Only show manual install if auto-install failed
|
|
33
|
+
if (!pluginAutoInstalled) {
|
|
34
|
+
console.log(` ${stepNumber}. ${chalk.yellow.bold('⚠️ ' + locale.t('cli', 'init.nextSteps.claude.step2'))}`);
|
|
35
|
+
console.log(` ${chalk.cyan.bold(locale.t('cli', 'init.nextSteps.claude.installCore'))}`);
|
|
36
|
+
console.log(` ${chalk.gray('↑ Required for slash commands like /specweave:increment')}`);
|
|
37
|
+
console.log('');
|
|
38
|
+
stepNumber++;
|
|
39
|
+
}
|
|
40
|
+
console.log(` ${stepNumber}. ${chalk.white('All plugins are already installed!')}`);
|
|
41
|
+
console.log(` ${chalk.gray('✔ All 19+ SpecWeave plugins installed automatically')}`);
|
|
42
|
+
console.log(` ${chalk.gray('✔ No need to install additional plugins manually')}`);
|
|
43
|
+
console.log(` ${chalk.gray('✔ Full capabilities available immediately')}`);
|
|
44
|
+
console.log('');
|
|
45
|
+
stepNumber++;
|
|
46
|
+
console.log(` ${stepNumber}. ${chalk.white(locale.t('cli', 'init.nextSteps.claude.step4'))}`);
|
|
47
|
+
console.log(` ${chalk.cyan(locale.t('cli', 'init.nextSteps.claude.example'))}`);
|
|
48
|
+
console.log(` ${chalk.gray(locale.t('cli', 'init.nextSteps.claude.autoActivate'))}`);
|
|
49
|
+
}
|
|
50
|
+
else if (adapterName === 'cursor') {
|
|
51
|
+
console.log(` ${stepNumber}. ${chalk.white(locale.t('cli', 'init.nextSteps.cursor.step1'))}`);
|
|
52
|
+
console.log('');
|
|
53
|
+
console.log(` ${stepNumber + 1}. ${chalk.white(locale.t('cli', 'init.nextSteps.cursor.step2'))}`);
|
|
54
|
+
console.log(` ${locale.t('cli', 'init.nextSteps.cursor.guide')}`);
|
|
55
|
+
console.log('');
|
|
56
|
+
console.log(` ${stepNumber + 2}. ${chalk.white(locale.t('cli', 'init.nextSteps.cursor.step3'))}`);
|
|
57
|
+
console.log(` ${locale.t('cli', 'init.nextSteps.cursor.shortcuts')}`);
|
|
58
|
+
}
|
|
59
|
+
else if (adapterName === 'generic') {
|
|
60
|
+
console.log(` ${stepNumber}. ${chalk.white(locale.t('cli', 'init.nextSteps.generic.step1'))}`);
|
|
61
|
+
console.log('');
|
|
62
|
+
console.log(` ${stepNumber + 1}. ${chalk.white(locale.t('cli', 'init.nextSteps.generic.step2'))}`);
|
|
63
|
+
console.log(` ${locale.t('cli', 'init.nextSteps.generic.compatibility')}`);
|
|
64
|
+
}
|
|
65
|
+
console.log('');
|
|
66
|
+
console.log(chalk.green.bold(locale.t('cli', 'init.nextSteps.footer')));
|
|
67
|
+
console.log('');
|
|
68
|
+
console.log(chalk.gray(locale.t('cli', 'init.nextSteps.docsLink')));
|
|
69
|
+
console.log(chalk.gray(locale.t('cli', 'init.nextSteps.githubLink')));
|
|
70
|
+
console.log('');
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=next-steps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"next-steps.js","sourceRoot":"","sources":["../../../../../src/cli/helpers/init/next-steps.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAGxE;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAC3B,WAAmB,EACnB,WAAmB,EACnB,QAA2B,EAC3B,kBAA2B,KAAK,EAChC,sBAA+B,KAAK;IAEpC,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAE1C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,mDAAmD;IACnD,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,MAAM,UAAU,KAAK,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,mBAAmB,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACvG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,UAAU,EAAE,CAAC;IACf,CAAC;IAED,gCAAgC;IAChC,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,MAAM,UAAU,KAAK,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,6BAA6B,CAAC,CAAC,EAAE,CAAC,CAAC;QAChG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,UAAU,EAAE,CAAC;QAEb,kDAAkD;QAClD,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,MAAM,UAAU,KAAK,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,6BAA6B,CAAC,CAAC,EAAE,CAAC,CAAC;YAC/G,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,mCAAmC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC9F,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,yDAAyD,CAAC,EAAE,CAAC,CAAC;YAC9F,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,UAAU,EAAE,CAAC;QACf,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,MAAM,UAAU,KAAK,KAAK,CAAC,KAAK,CAAC,oCAAoC,CAAC,EAAE,CAAC,CAAC;QACtF,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,qDAAqD,CAAC,EAAE,CAAC,CAAC;QAC1F,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,kDAAkD,CAAC,EAAE,CAAC,CAAC;QACvF,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,EAAE,CAAC,CAAC;QAChF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,UAAU,EAAE,CAAC;QAEb,OAAO,CAAC,GAAG,CAAC,MAAM,UAAU,KAAK,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,6BAA6B,CAAC,CAAC,EAAE,CAAC,CAAC;QAChG,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,+BAA+B,CAAC,CAAC,EAAE,CAAC,CAAC;QACrF,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,oCAAoC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC5F,CAAC;SAAM,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,MAAM,UAAU,KAAK,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,6BAA6B,CAAC,CAAC,EAAE,CAAC,CAAC;QAChG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,MAAM,UAAU,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,6BAA6B,CAAC,CAAC,EAAE,CAAC,CAAC;QACpG,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,6BAA6B,CAAC,EAAE,CAAC,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,MAAM,UAAU,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,6BAA6B,CAAC,CAAC,EAAE,CAAC,CAAC;QACpG,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,iCAAiC,CAAC,EAAE,CAAC,CAAC;IAC7E,CAAC;SAAM,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,MAAM,UAAU,KAAK,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,8BAA8B,CAAC,CAAC,EAAE,CAAC,CAAC;QACjG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,MAAM,UAAU,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,8BAA8B,CAAC,CAAC,EAAE,CAAC,CAAC;QACrG,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,sCAAsC,CAAC,EAAE,CAAC,CAAC;IAClF,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC,CAAC,CAAC;IACxE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAAC,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,2BAA2B,CAAC,CAAC,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
|