specweave 0.23.10 → 0.23.12
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-plugin/marketplace.json +7 -7
- package/CLAUDE.md +384 -1449
- package/dist/src/cli/commands/cleanup-cache.d.ts +14 -0
- package/dist/src/cli/commands/cleanup-cache.d.ts.map +1 -0
- package/dist/src/cli/commands/cleanup-cache.js +63 -0
- package/dist/src/cli/commands/cleanup-cache.js.map +1 -0
- package/dist/src/cli/commands/init.js +40 -0
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/helpers/async-project-loader.d.ts +148 -0
- package/dist/src/cli/helpers/async-project-loader.d.ts.map +1 -0
- package/dist/src/cli/helpers/async-project-loader.js +351 -0
- package/dist/src/cli/helpers/async-project-loader.js.map +1 -0
- package/dist/src/cli/helpers/cancelation-handler.d.ts +123 -0
- package/dist/src/cli/helpers/cancelation-handler.d.ts.map +1 -0
- package/dist/src/cli/helpers/cancelation-handler.js +187 -0
- package/dist/src/cli/helpers/cancelation-handler.js.map +1 -0
- package/dist/src/cli/helpers/import-strategy-prompter.d.ts +43 -0
- package/dist/src/cli/helpers/import-strategy-prompter.d.ts.map +1 -0
- package/dist/src/cli/helpers/import-strategy-prompter.js +136 -0
- package/dist/src/cli/helpers/import-strategy-prompter.js.map +1 -0
- package/dist/src/cli/helpers/issue-tracker/ado.d.ts +5 -2
- package/dist/src/cli/helpers/issue-tracker/ado.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/ado.js +90 -40
- package/dist/src/cli/helpers/issue-tracker/ado.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/jira.d.ts +2 -1
- package/dist/src/cli/helpers/issue-tracker/jira.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/jira.js +120 -35
- package/dist/src/cli/helpers/issue-tracker/jira.js.map +1 -1
- package/dist/src/cli/helpers/progress-tracker.d.ts +121 -0
- package/dist/src/cli/helpers/progress-tracker.d.ts.map +1 -0
- package/dist/src/cli/helpers/progress-tracker.js +202 -0
- package/dist/src/cli/helpers/progress-tracker.js.map +1 -0
- package/dist/src/cli/helpers/project-count-fetcher.d.ts +69 -0
- package/dist/src/cli/helpers/project-count-fetcher.d.ts.map +1 -0
- package/dist/src/cli/helpers/project-count-fetcher.js +173 -0
- package/dist/src/cli/helpers/project-count-fetcher.js.map +1 -0
- package/dist/src/config/types.d.ts +14 -14
- package/dist/src/core/cache/cache-manager.d.ts +119 -0
- package/dist/src/core/cache/cache-manager.d.ts.map +1 -0
- package/dist/src/core/cache/cache-manager.js +304 -0
- package/dist/src/core/cache/cache-manager.js.map +1 -0
- package/dist/src/core/cache/rate-limit-checker.d.ts +92 -0
- package/dist/src/core/cache/rate-limit-checker.d.ts.map +1 -0
- package/dist/src/core/cache/rate-limit-checker.js +160 -0
- package/dist/src/core/cache/rate-limit-checker.js.map +1 -0
- package/dist/src/core/progress/cancelation-handler.d.ts +79 -0
- package/dist/src/core/progress/cancelation-handler.d.ts.map +1 -0
- package/dist/src/core/progress/cancelation-handler.js +111 -0
- package/dist/src/core/progress/cancelation-handler.js.map +1 -0
- package/dist/src/core/progress/import-state.d.ts +71 -0
- package/dist/src/core/progress/import-state.d.ts.map +1 -0
- package/dist/src/core/progress/import-state.js +96 -0
- package/dist/src/core/progress/import-state.js.map +1 -0
- package/dist/src/core/progress/progress-tracker.d.ts +139 -0
- package/dist/src/core/progress/progress-tracker.d.ts.map +1 -0
- package/dist/src/core/progress/progress-tracker.js +223 -0
- package/dist/src/core/progress/progress-tracker.js.map +1 -0
- package/dist/src/init/architecture/types.d.ts +6 -6
- package/dist/src/integrations/ado/ado-client.d.ts +25 -0
- package/dist/src/integrations/ado/ado-client.d.ts.map +1 -1
- package/dist/src/integrations/ado/ado-client.js +67 -0
- package/dist/src/integrations/ado/ado-client.js.map +1 -1
- package/dist/src/integrations/ado/ado-dependency-loader.d.ts +99 -0
- package/dist/src/integrations/ado/ado-dependency-loader.d.ts.map +1 -0
- package/dist/src/integrations/ado/ado-dependency-loader.js +207 -0
- package/dist/src/integrations/ado/ado-dependency-loader.js.map +1 -0
- package/dist/src/integrations/jira/jira-client.d.ts +32 -0
- package/dist/src/integrations/jira/jira-client.d.ts.map +1 -1
- package/dist/src/integrations/jira/jira-client.js +81 -0
- package/dist/src/integrations/jira/jira-client.js.map +1 -1
- package/dist/src/integrations/jira/jira-dependency-loader.d.ts +101 -0
- package/dist/src/integrations/jira/jira-dependency-loader.d.ts.map +1 -0
- package/dist/src/integrations/jira/jira-dependency-loader.js +200 -0
- package/dist/src/integrations/jira/jira-dependency-loader.js.map +1 -0
- package/package.json +1 -1
- package/plugins/specweave/.claude-plugin/plugin.json +20 -0
- package/plugins/specweave/agents/architect/AGENT.md +100 -602
- package/plugins/specweave/agents/pm/AGENT.md +96 -597
- package/plugins/specweave/agents/pm/AGENT.md.bak +1893 -0
- package/plugins/specweave/agents/pm/AGENT.md.bak2 +1754 -0
- package/plugins/specweave/commands/check-hooks.md +257 -0
- package/plugins/specweave/hooks/post-edit-spec.sh +202 -31
- package/plugins/specweave/hooks/post-task-completion.sh +225 -228
- package/plugins/specweave/hooks/post-write-spec.sh +207 -31
- package/plugins/specweave/hooks/pre-edit-spec.sh +151 -0
- package/plugins/specweave/hooks/pre-task-completion.sh +5 -7
- package/plugins/specweave/hooks/pre-write-spec.sh +151 -0
- package/plugins/specweave/hooks/test-pretooluse-env.sh +72 -0
- package/plugins/specweave/skills/compliance-architecture/SKILL.md +374 -0
- package/plugins/specweave/skills/external-sync-wizard/SKILL.md +610 -0
- package/plugins/specweave/skills/pm-closure-validation/SKILL.md +541 -0
- package/plugins/specweave/skills/roadmap-planner/SKILL.md +473 -0
- package/plugins/specweave-ado/commands/refresh-cache.js +25 -0
- package/plugins/specweave-ado/commands/refresh-cache.ts +40 -0
- package/plugins/specweave-ado/hooks/post-task-completion.sh +1 -1
- package/plugins/specweave-github/hooks/post-task-completion.sh +1 -1
- package/plugins/specweave-jira/commands/refresh-cache.js +25 -0
- package/plugins/specweave-jira/commands/refresh-cache.ts +40 -0
- package/plugins/specweave-jira/hooks/post-task-completion.sh +1 -1
- package/plugins/specweave-kafka-streams/commands/topology.md +437 -0
- package/plugins/specweave-n8n/commands/workflow-template.md +262 -0
- package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +228 -6465
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cancelation Handler
|
|
3
|
+
*
|
|
4
|
+
* Graceful Ctrl+C handling with state persistence and resume capability.
|
|
5
|
+
* Atomic file writes ensure state integrity even during abrupt termination.
|
|
6
|
+
*
|
|
7
|
+
* @module cli/helpers/cancelation-handler
|
|
8
|
+
*/
|
|
9
|
+
import { promises as fs } from 'fs';
|
|
10
|
+
import { existsSync } from 'fs';
|
|
11
|
+
import path from 'path';
|
|
12
|
+
import chalk from 'chalk';
|
|
13
|
+
import { consoleLogger } from '../../utils/logger.js';
|
|
14
|
+
/**
|
|
15
|
+
* Cancelation Handler
|
|
16
|
+
*
|
|
17
|
+
* Handles SIGINT (Ctrl+C) signals during long-running operations:
|
|
18
|
+
* - Registers signal handler
|
|
19
|
+
* - Saves partial state to disk (atomic writes)
|
|
20
|
+
* - Provides resume capability
|
|
21
|
+
* - TTL validation (24-hour expiration)
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* const handler = new CancelationHandler({
|
|
26
|
+
* stateFile: '.specweave/cache/import-state.json'
|
|
27
|
+
* });
|
|
28
|
+
*
|
|
29
|
+
* handler.onCleanup(async () => {
|
|
30
|
+
* await savePartialState(projects, total, errors);
|
|
31
|
+
* });
|
|
32
|
+
*
|
|
33
|
+
* for (const project of projects) {
|
|
34
|
+
* if (handler.shouldCancel()) {
|
|
35
|
+
* break; // Exit gracefully
|
|
36
|
+
* }
|
|
37
|
+
* // ... process project ...
|
|
38
|
+
* }
|
|
39
|
+
* ```
|
|
40
|
+
*/
|
|
41
|
+
export class CancelationHandler {
|
|
42
|
+
constructor(options) {
|
|
43
|
+
this.canceled = false;
|
|
44
|
+
this.cleanupCallback = null;
|
|
45
|
+
this.sigintHandler = null;
|
|
46
|
+
this.ctrlCCount = 0; // Track consecutive Ctrl+C presses
|
|
47
|
+
this.stateFile = options.stateFile;
|
|
48
|
+
this.logger = options.logger ?? consoleLogger;
|
|
49
|
+
// Register SIGINT handler
|
|
50
|
+
this.registerSigintHandler();
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Register SIGINT (Ctrl+C) handler
|
|
54
|
+
*/
|
|
55
|
+
registerSigintHandler() {
|
|
56
|
+
this.sigintHandler = async (signal) => {
|
|
57
|
+
this.ctrlCCount++;
|
|
58
|
+
// Double Ctrl+C: force exit immediately (no cleanup)
|
|
59
|
+
if (this.ctrlCCount > 1) {
|
|
60
|
+
this.logger.log(chalk.red('\n⚠️ Force exit (no state saved)'));
|
|
61
|
+
process.exit(1);
|
|
62
|
+
}
|
|
63
|
+
// First Ctrl+C: graceful cancelation
|
|
64
|
+
this.canceled = true;
|
|
65
|
+
this.logger.log(chalk.yellow('\n⚠️ Cancelation requested. Saving progress...'));
|
|
66
|
+
// Execute cleanup callback if registered
|
|
67
|
+
if (this.cleanupCallback) {
|
|
68
|
+
try {
|
|
69
|
+
await this.cleanupCallback();
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
this.logger.error('Error during cleanup:', error);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// Note: Don't exit here - let the main loop detect shouldCancel() and exit cleanly
|
|
76
|
+
};
|
|
77
|
+
process.on('SIGINT', this.sigintHandler);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Check if cancelation was requested
|
|
81
|
+
*
|
|
82
|
+
* @returns True if Ctrl+C was pressed
|
|
83
|
+
*/
|
|
84
|
+
shouldCancel() {
|
|
85
|
+
return this.canceled;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Register cleanup callback (executed on Ctrl+C)
|
|
89
|
+
*
|
|
90
|
+
* @param callback - Async cleanup function
|
|
91
|
+
*/
|
|
92
|
+
onCleanup(callback) {
|
|
93
|
+
this.cleanupCallback = callback;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Save cancelation state to disk (atomic write)
|
|
97
|
+
*
|
|
98
|
+
* Uses temp file → rename pattern to ensure atomicity.
|
|
99
|
+
*
|
|
100
|
+
* @param state - Cancelation state to persist
|
|
101
|
+
*/
|
|
102
|
+
async saveState(state) {
|
|
103
|
+
try {
|
|
104
|
+
// Ensure cache directory exists
|
|
105
|
+
const cacheDir = path.dirname(this.stateFile);
|
|
106
|
+
await fs.mkdir(cacheDir, { recursive: true });
|
|
107
|
+
// Atomic write: temp file → rename
|
|
108
|
+
const tempFile = `${this.stateFile}.tmp`;
|
|
109
|
+
await fs.writeFile(tempFile, JSON.stringify(state, null, 2), 'utf-8');
|
|
110
|
+
await fs.rename(tempFile, this.stateFile);
|
|
111
|
+
this.logger.log(chalk.gray(`State saved to ${this.stateFile}`));
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
this.logger.error('Failed to save state:', error);
|
|
115
|
+
throw error;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Load cancelation state from disk
|
|
120
|
+
*
|
|
121
|
+
* Validates TTL (24-hour expiration) and version compatibility.
|
|
122
|
+
*
|
|
123
|
+
* @returns Cancelation state or null if not found/expired
|
|
124
|
+
*/
|
|
125
|
+
async loadState() {
|
|
126
|
+
try {
|
|
127
|
+
if (!existsSync(this.stateFile)) {
|
|
128
|
+
return null; // No saved state
|
|
129
|
+
}
|
|
130
|
+
const content = await fs.readFile(this.stateFile, 'utf-8');
|
|
131
|
+
const state = JSON.parse(content);
|
|
132
|
+
// Validate TTL (24 hours)
|
|
133
|
+
const stateTimestamp = new Date(state.timestamp).getTime();
|
|
134
|
+
const now = Date.now();
|
|
135
|
+
const ttlMs = 24 * 60 * 60 * 1000; // 24 hours
|
|
136
|
+
if (now - stateTimestamp > ttlMs) {
|
|
137
|
+
this.logger.log(chalk.yellow('⚠️ Saved state expired (> 24 hours old). Starting fresh import.'));
|
|
138
|
+
await this.clearState(); // Delete expired state
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
// Validate version (for future compatibility)
|
|
142
|
+
if (state.version !== '1.0') {
|
|
143
|
+
this.logger.log(chalk.yellow('⚠️ Incompatible state version. Starting fresh import.'));
|
|
144
|
+
await this.clearState();
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
147
|
+
return state;
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
this.logger.error('Failed to load state:', error);
|
|
151
|
+
await this.clearState(); // Corrupted state - delete it
|
|
152
|
+
return null;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Clear saved state (delete file)
|
|
157
|
+
*/
|
|
158
|
+
async clearState() {
|
|
159
|
+
try {
|
|
160
|
+
if (existsSync(this.stateFile)) {
|
|
161
|
+
await fs.unlink(this.stateFile);
|
|
162
|
+
this.logger.log(chalk.gray('Cleared saved state'));
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
this.logger.error('Failed to clear state:', error);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Unregister SIGINT handler (cleanup)
|
|
171
|
+
*/
|
|
172
|
+
dispose() {
|
|
173
|
+
if (this.sigintHandler) {
|
|
174
|
+
process.off('SIGINT', this.sigintHandler);
|
|
175
|
+
this.sigintHandler = null;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Show resume suggestion to user
|
|
180
|
+
*
|
|
181
|
+
* @param resumeCommand - Command to resume operation (e.g., "/specweave-jira:import-projects --resume")
|
|
182
|
+
*/
|
|
183
|
+
suggestResume(resumeCommand) {
|
|
184
|
+
this.logger.log(chalk.cyan(`\nResume with: ${resumeCommand}`));
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=cancelation-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cancelation-handler.js","sourceRoot":"","sources":["../../../../src/cli/helpers/cancelation-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Import Strategy Prompter
|
|
3
|
+
*
|
|
4
|
+
* Provides CLI-first UI for selecting import strategy with "Import all" as default.
|
|
5
|
+
* Supports three strategies:
|
|
6
|
+
* - import-all (default, recommended)
|
|
7
|
+
* - select-specific (checkbox mode with all pre-checked)
|
|
8
|
+
* - manual-entry (comma-separated project keys)
|
|
9
|
+
*
|
|
10
|
+
* @module cli/helpers/import-strategy-prompter
|
|
11
|
+
*/
|
|
12
|
+
import { Logger } from '../../utils/logger.js';
|
|
13
|
+
/**
|
|
14
|
+
* Import strategy options
|
|
15
|
+
*/
|
|
16
|
+
export type ImportStrategy = 'import-all' | 'select-specific' | 'manual-entry';
|
|
17
|
+
/**
|
|
18
|
+
* Strategy prompt result
|
|
19
|
+
*/
|
|
20
|
+
export interface StrategyPromptResult {
|
|
21
|
+
strategy: ImportStrategy;
|
|
22
|
+
projectKeys?: string[];
|
|
23
|
+
confirmed?: boolean;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Strategy prompter options
|
|
27
|
+
*/
|
|
28
|
+
export interface StrategyPrompterOptions {
|
|
29
|
+
totalCount: number;
|
|
30
|
+
provider: 'jira' | 'ado';
|
|
31
|
+
logger?: Logger;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Prompt user for import strategy selection
|
|
35
|
+
*
|
|
36
|
+
* Default: "Import all" (CLI-first approach)
|
|
37
|
+
* Instructions: "All projects selected by default. Deselect unwanted projects if needed."
|
|
38
|
+
*
|
|
39
|
+
* @param options - Prompter options
|
|
40
|
+
* @returns Strategy prompt result
|
|
41
|
+
*/
|
|
42
|
+
export declare function promptImportStrategy(options: StrategyPrompterOptions): Promise<StrategyPromptResult>;
|
|
43
|
+
//# sourceMappingURL=import-strategy-prompter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-strategy-prompter.d.ts","sourceRoot":"","sources":["../../../../src/cli/helpers/import-strategy-prompter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,EAAE,MAAM,EAAiB,MAAM,uBAAuB,CAAC;AAE9D;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,iBAAiB,GAAG,cAAc,CAAC;AAE/E;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,cAAc,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,KAAK,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,oBAAoB,CAAC,CAiD/B"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Import Strategy Prompter
|
|
3
|
+
*
|
|
4
|
+
* Provides CLI-first UI for selecting import strategy with "Import all" as default.
|
|
5
|
+
* Supports three strategies:
|
|
6
|
+
* - import-all (default, recommended)
|
|
7
|
+
* - select-specific (checkbox mode with all pre-checked)
|
|
8
|
+
* - manual-entry (comma-separated project keys)
|
|
9
|
+
*
|
|
10
|
+
* @module cli/helpers/import-strategy-prompter
|
|
11
|
+
*/
|
|
12
|
+
import inquirer from 'inquirer';
|
|
13
|
+
import chalk from 'chalk';
|
|
14
|
+
import { consoleLogger } from '../../utils/logger.js';
|
|
15
|
+
/**
|
|
16
|
+
* Prompt user for import strategy selection
|
|
17
|
+
*
|
|
18
|
+
* Default: "Import all" (CLI-first approach)
|
|
19
|
+
* Instructions: "All projects selected by default. Deselect unwanted projects if needed."
|
|
20
|
+
*
|
|
21
|
+
* @param options - Prompter options
|
|
22
|
+
* @returns Strategy prompt result
|
|
23
|
+
*/
|
|
24
|
+
export async function promptImportStrategy(options) {
|
|
25
|
+
const { totalCount, provider, logger = consoleLogger } = options;
|
|
26
|
+
// Display project count
|
|
27
|
+
logger.log(chalk.cyan(`\nFound ${totalCount} accessible ${provider.toUpperCase()} projects.`));
|
|
28
|
+
// Show strategy prompt
|
|
29
|
+
const strategyAnswer = await inquirer.prompt([
|
|
30
|
+
{
|
|
31
|
+
type: 'list',
|
|
32
|
+
name: 'strategy',
|
|
33
|
+
message: 'How would you like to import projects?',
|
|
34
|
+
default: 'import-all', // CLI-first default
|
|
35
|
+
choices: [
|
|
36
|
+
{
|
|
37
|
+
name: chalk.green('✓ Import all projects (Recommended)') + chalk.gray(' - All selected by default'),
|
|
38
|
+
value: 'import-all'
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
name: 'Select specific projects' + chalk.gray(' - Choose from checkbox list'),
|
|
42
|
+
value: 'select-specific'
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: 'Manual entry' + chalk.gray(' - Enter project keys manually'),
|
|
46
|
+
value: 'manual-entry'
|
|
47
|
+
}
|
|
48
|
+
]
|
|
49
|
+
}
|
|
50
|
+
]);
|
|
51
|
+
const strategy = strategyAnswer.strategy;
|
|
52
|
+
// Handle manual entry
|
|
53
|
+
if (strategy === 'manual-entry') {
|
|
54
|
+
return await handleManualEntry(logger);
|
|
55
|
+
}
|
|
56
|
+
// Handle safety confirmation for large imports (> 100 projects)
|
|
57
|
+
if (strategy === 'import-all' && totalCount > 100) {
|
|
58
|
+
const confirmed = await showSafetyConfirmation(totalCount, logger);
|
|
59
|
+
if (!confirmed) {
|
|
60
|
+
// User declined large import - restart strategy selection
|
|
61
|
+
logger.log(chalk.yellow('\n⚠️ Import canceled. Returning to strategy selection...\n'));
|
|
62
|
+
return await promptImportStrategy(options); // Recursive call
|
|
63
|
+
}
|
|
64
|
+
return { strategy, confirmed: true };
|
|
65
|
+
}
|
|
66
|
+
return { strategy };
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Handle manual entry workflow
|
|
70
|
+
*
|
|
71
|
+
* Prompts user to enter comma-separated project keys (e.g., "BACKEND,FRONTEND,MOBILE")
|
|
72
|
+
* Validates format and returns parsed keys.
|
|
73
|
+
*
|
|
74
|
+
* @param logger - Logger instance
|
|
75
|
+
* @returns Strategy result with project keys
|
|
76
|
+
*/
|
|
77
|
+
async function handleManualEntry(logger) {
|
|
78
|
+
logger.log(chalk.gray('\n💡 Tip: Enter project keys separated by commas (e.g., BACKEND,FRONTEND,MOBILE)'));
|
|
79
|
+
const manualAnswer = await inquirer.prompt([
|
|
80
|
+
{
|
|
81
|
+
type: 'input',
|
|
82
|
+
name: 'projectKeys',
|
|
83
|
+
message: 'Enter project keys (comma-separated):',
|
|
84
|
+
validate: (input) => {
|
|
85
|
+
// Validate format: alphanumeric, underscores, hyphens, and commas only
|
|
86
|
+
const trimmed = input.trim();
|
|
87
|
+
if (!trimmed) {
|
|
88
|
+
return chalk.red('Project keys cannot be empty. Please enter at least one project key.');
|
|
89
|
+
}
|
|
90
|
+
// Check format (allow A-Z, 0-9, _, -, and commas)
|
|
91
|
+
const validFormat = /^[A-Z0-9_,-]+$/i.test(trimmed);
|
|
92
|
+
if (!validFormat) {
|
|
93
|
+
return chalk.red('Invalid format. Use only letters, numbers, underscores, hyphens, and commas.');
|
|
94
|
+
}
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
]);
|
|
99
|
+
// Parse and clean project keys
|
|
100
|
+
const projectKeys = manualAnswer.projectKeys
|
|
101
|
+
.split(',')
|
|
102
|
+
.map(key => key.trim().toUpperCase())
|
|
103
|
+
.filter(key => key.length > 0);
|
|
104
|
+
logger.log(chalk.green(`\n✓ ${projectKeys.length} project(s) will be imported: ${projectKeys.join(', ')}`));
|
|
105
|
+
return { strategy: 'manual-entry', projectKeys };
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Show safety confirmation for large imports (> 100 projects)
|
|
109
|
+
*
|
|
110
|
+
* Default: "No" (safe default to prevent accidental large imports)
|
|
111
|
+
* Displays estimated import time based on batch size.
|
|
112
|
+
*
|
|
113
|
+
* @param totalCount - Total number of projects to import
|
|
114
|
+
* @param logger - Logger instance
|
|
115
|
+
* @returns True if user confirms, false otherwise
|
|
116
|
+
*/
|
|
117
|
+
async function showSafetyConfirmation(totalCount, logger) {
|
|
118
|
+
// Calculate estimated time (50 projects/batch, ~5 seconds/batch)
|
|
119
|
+
const estimatedBatches = Math.ceil(totalCount / 50);
|
|
120
|
+
const estimatedSeconds = estimatedBatches * 5;
|
|
121
|
+
const estimatedTime = estimatedSeconds < 60
|
|
122
|
+
? `~${estimatedSeconds}s`
|
|
123
|
+
: `~${Math.ceil(estimatedSeconds / 60)}m`;
|
|
124
|
+
logger.log(chalk.yellow(`\n⚠️ Large import detected: ${totalCount} projects`));
|
|
125
|
+
logger.log(chalk.gray(` Estimated time: ${estimatedTime} (${estimatedBatches} batches)`));
|
|
126
|
+
const confirmation = await inquirer.prompt([
|
|
127
|
+
{
|
|
128
|
+
type: 'confirm',
|
|
129
|
+
name: 'confirmed',
|
|
130
|
+
message: `Import all ${totalCount} projects?`,
|
|
131
|
+
default: false // Safe default (prevent accidents)
|
|
132
|
+
}
|
|
133
|
+
]);
|
|
134
|
+
return confirmation.confirmed;
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=import-strategy-prompter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-strategy-prompter.js","sourceRoot":"","sources":["../../../../src/cli/helpers/import-strategy-prompter.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,12 +15,15 @@ import type { SupportedLanguage } from '../../../core/i18n/types.js';
|
|
|
15
15
|
*/
|
|
16
16
|
export declare function checkExistingAzureDevOpsCredentials(projectPath: string): Promise<ExistingCredentials | null>;
|
|
17
17
|
/**
|
|
18
|
-
* Prompt user for Azure DevOps credentials
|
|
18
|
+
* Prompt user for Azure DevOps credentials with cache support
|
|
19
|
+
*
|
|
20
|
+
* NEW (v0.24.0): Caches last used organization/project for quick re-initialization
|
|
19
21
|
*
|
|
20
22
|
* @param language - User's language
|
|
23
|
+
* @param projectRoot - Project root path (optional, for cache manager)
|
|
21
24
|
* @returns Credentials or null if skipped
|
|
22
25
|
*/
|
|
23
|
-
export declare function promptAzureDevOpsCredentials(language: SupportedLanguage): Promise<AzureDevOpsCredentials | null>;
|
|
26
|
+
export declare function promptAzureDevOpsCredentials(language: SupportedLanguage, projectRoot?: string): Promise<AzureDevOpsCredentials | null>;
|
|
24
27
|
/**
|
|
25
28
|
* Validate Azure DevOps connection
|
|
26
29
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ado.d.ts","sourceRoot":"","sources":["../../../../../src/cli/helpers/issue-tracker/ado.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAKpB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAIrE;;;;;GAKG;AACH,wBAAsB,mCAAmC,CACvD,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CA2BrC;AAED
|
|
1
|
+
{"version":3,"file":"ado.d.ts","sourceRoot":"","sources":["../../../../../src/cli/helpers/issue-tracker/ado.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EACjB,MAAM,YAAY,CAAC;AAKpB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAIrE;;;;;GAKG;AACH,wBAAsB,mCAAmC,CACvD,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CA2BrC;AAED;;;;;;;;GAQG;AACH,wBAAsB,4BAA4B,CAChD,QAAQ,EAAE,iBAAiB,EAC3B,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CA0IxC;AAED;;;;;;;;;GASG;AACH,wBAAsB,6BAA6B,CACjD,WAAW,EAAE,sBAAsB,EACnC,UAAU,GAAE,MAAU,GACrB,OAAO,CAAC,gBAAgB,CAAC,CA+D3B;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,sBAAsB,GAClC,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAevC;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAS9E;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAY7E"}
|
|
@@ -46,15 +46,43 @@ export async function checkExistingAzureDevOpsCredentials(projectPath) {
|
|
|
46
46
|
return null;
|
|
47
47
|
}
|
|
48
48
|
/**
|
|
49
|
-
* Prompt user for Azure DevOps credentials
|
|
49
|
+
* Prompt user for Azure DevOps credentials with cache support
|
|
50
|
+
*
|
|
51
|
+
* NEW (v0.24.0): Caches last used organization/project for quick re-initialization
|
|
50
52
|
*
|
|
51
53
|
* @param language - User's language
|
|
54
|
+
* @param projectRoot - Project root path (optional, for cache manager)
|
|
52
55
|
* @returns Credentials or null if skipped
|
|
53
56
|
*/
|
|
54
|
-
export async function promptAzureDevOpsCredentials(language) {
|
|
57
|
+
export async function promptAzureDevOpsCredentials(language, projectRoot) {
|
|
55
58
|
const locale = getLocaleManager(language);
|
|
56
59
|
console.log(chalk.white('\n📋 Azure DevOps Integration Setup\n'));
|
|
57
60
|
console.log(chalk.gray('SpecWeave will sync increments with Azure DevOps Work Items.\n'));
|
|
61
|
+
// Step 0: Check cache for previous configuration (NEW in v0.24.0)
|
|
62
|
+
let cachedConfig = null;
|
|
63
|
+
if (projectRoot) {
|
|
64
|
+
const { CacheManager } = await import('../../../core/cache/cache-manager.js');
|
|
65
|
+
const cacheManager = new CacheManager(projectRoot);
|
|
66
|
+
cachedConfig = await cacheManager.get('ado-config');
|
|
67
|
+
if (cachedConfig) {
|
|
68
|
+
console.log(chalk.cyan('✨ Found cached ADO configuration:\n'));
|
|
69
|
+
console.log(chalk.gray(` Organization: ${cachedConfig.org}`));
|
|
70
|
+
console.log(chalk.gray(` Project: ${cachedConfig.project}`));
|
|
71
|
+
if (cachedConfig.teams && cachedConfig.teams.length > 0) {
|
|
72
|
+
console.log(chalk.gray(` Teams: ${cachedConfig.teams.join(', ')}`));
|
|
73
|
+
}
|
|
74
|
+
console.log('');
|
|
75
|
+
const { reuseConfig } = await inquirer.prompt([{
|
|
76
|
+
type: 'confirm',
|
|
77
|
+
name: 'reuseConfig',
|
|
78
|
+
message: 'Use cached configuration?',
|
|
79
|
+
default: true
|
|
80
|
+
}]);
|
|
81
|
+
if (!reuseConfig) {
|
|
82
|
+
cachedConfig = null; // User wants to enter new config
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
58
86
|
// Show setup instructions
|
|
59
87
|
console.log(chalk.cyan('📋 Quick Setup:'));
|
|
60
88
|
console.log(chalk.gray(' 1. Go to: https://dev.azure.com/{org}/_usersSettings/tokens'));
|
|
@@ -70,37 +98,55 @@ export async function promptAzureDevOpsCredentials(language) {
|
|
|
70
98
|
if (!continueSetup) {
|
|
71
99
|
return null;
|
|
72
100
|
}
|
|
73
|
-
// Collect credentials
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
101
|
+
// Collect credentials (use cached values as defaults if available)
|
|
102
|
+
let org, project, teams;
|
|
103
|
+
if (cachedConfig) {
|
|
104
|
+
// Use cached configuration
|
|
105
|
+
org = cachedConfig.org;
|
|
106
|
+
project = cachedConfig.project;
|
|
107
|
+
teams = cachedConfig.teams || [];
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
// Prompt for new configuration
|
|
111
|
+
const questions = [
|
|
112
|
+
{
|
|
113
|
+
type: 'input',
|
|
114
|
+
name: 'org',
|
|
115
|
+
message: 'Azure DevOps organization name:',
|
|
116
|
+
validate: (input) => {
|
|
117
|
+
if (!input || input.trim() === '') {
|
|
118
|
+
return 'Organization cannot be empty';
|
|
119
|
+
}
|
|
120
|
+
return true;
|
|
82
121
|
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
return
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
type: 'input',
|
|
125
|
+
name: 'project',
|
|
126
|
+
message: 'Project name:',
|
|
127
|
+
validate: (input) => {
|
|
128
|
+
if (!input || input.trim() === '') {
|
|
129
|
+
return 'Project cannot be empty';
|
|
130
|
+
}
|
|
131
|
+
return true;
|
|
93
132
|
}
|
|
94
|
-
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
type: 'input',
|
|
136
|
+
name: 'teams',
|
|
137
|
+
message: 'Team name(s) (optional, comma-separated):',
|
|
138
|
+
default: ''
|
|
95
139
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
140
|
+
];
|
|
141
|
+
const answers = await inquirer.prompt(questions);
|
|
142
|
+
org = answers.org;
|
|
143
|
+
project = answers.project;
|
|
144
|
+
teams = answers.teams
|
|
145
|
+
? answers.teams.split(',').map((t) => t.trim()).filter((t) => t.length > 0)
|
|
146
|
+
: [];
|
|
147
|
+
}
|
|
148
|
+
// Always prompt for PAT (never cache secrets)
|
|
149
|
+
const { pat } = await inquirer.prompt([{
|
|
104
150
|
type: 'password',
|
|
105
151
|
name: 'pat',
|
|
106
152
|
message: 'Paste your Personal Access Token:',
|
|
@@ -115,17 +161,21 @@ export async function promptAzureDevOpsCredentials(language) {
|
|
|
115
161
|
}
|
|
116
162
|
return true;
|
|
117
163
|
}
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
164
|
+
}]);
|
|
165
|
+
// Cache the configuration (NOT the PAT) for future use
|
|
166
|
+
if (projectRoot) {
|
|
167
|
+
const { CacheManager } = await import('../../../core/cache/cache-manager.js');
|
|
168
|
+
const cacheManager = new CacheManager(projectRoot);
|
|
169
|
+
await cacheManager.set('ado-config', {
|
|
170
|
+
org,
|
|
171
|
+
project,
|
|
172
|
+
teams: teams.length > 0 ? teams : undefined
|
|
173
|
+
});
|
|
174
|
+
}
|
|
125
175
|
return {
|
|
126
|
-
pat
|
|
127
|
-
org
|
|
128
|
-
project
|
|
176
|
+
pat,
|
|
177
|
+
org,
|
|
178
|
+
project, // One project (ADO standard)
|
|
129
179
|
team: teams[0], // Use first team for backward compatibility
|
|
130
180
|
teams: teams.length > 1 ? teams : undefined // Multiple teams (optional)
|
|
131
181
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ado.js","sourceRoot":"","sources":["../../../../../src/cli/helpers/issue-tracker/ado.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EACL,YAAY,EACZ,WAAW,EACZ,MAAM,4BAA4B,CAAC;AAMpC,OAAO,EACL,gBAAgB,EAChB,cAAc,EACf,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,mCAAmC,CACvD,WAAmB;IAEnB,6BAA6B;IAC7B,MAAM,UAAU,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;IAC5C,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;QACxC,IAAI,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,oBAAoB,EAAE,CAAC;YACtF,OAAO;gBACL,MAAM,EAAE,MAAM;gBACd,WAAW,EAAE;oBACX,GAAG,EAAE,MAAM,CAAC,gBAAgB;oBAC5B,GAAG,EAAE,MAAM,CAAC,gBAAgB;oBAC5B,OAAO,EAAE,MAAM,CAAC,oBAAoB;iBACrC;aACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,iCAAiC;IACjC,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;IAClC,IAAI,IAAI,EAAE,CAAC;QACT,OAAO;YACL,MAAM,EAAE,UAAU;YAClB,WAAW,EAAE,IAAI;SAClB,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"ado.js","sourceRoot":"","sources":["../../../../../src/cli/helpers/issue-tracker/ado.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,9 +23,10 @@ export declare function checkExistingJiraCredentials(projectPath: string): Promi
|
|
|
23
23
|
* - Jira Server/Data Center (self-hosted)
|
|
24
24
|
*
|
|
25
25
|
* @param language - User's language
|
|
26
|
+
* @param projectRoot - Project root path (optional, for cache manager)
|
|
26
27
|
* @returns Credentials or null if skipped
|
|
27
28
|
*/
|
|
28
|
-
export declare function promptJiraCredentials(language: SupportedLanguage): Promise<JiraCredentials | null>;
|
|
29
|
+
export declare function promptJiraCredentials(language: SupportedLanguage, projectRoot?: string): Promise<JiraCredentials | null>;
|
|
29
30
|
/**
|
|
30
31
|
* Validate Jira connection
|
|
31
32
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jira.d.ts","sourceRoot":"","sources":["../../../../../src/cli/helpers/issue-tracker/jira.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,OAAO,KAAK,EACV,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,IAAI,sBAAsB,EAC1C,iBAAiB,EACjB,eAAe,EAChB,MAAM,+BAA+B,CAAC;AAMvC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAKrE;;;;;GAKG;AACH,wBAAsB,4BAA4B,CAChD,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CA+BrC;
|
|
1
|
+
{"version":3,"file":"jira.d.ts","sourceRoot":"","sources":["../../../../../src/cli/helpers/issue-tracker/jira.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,OAAO,KAAK,EACV,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,IAAI,sBAAsB,EAC1C,iBAAiB,EACjB,eAAe,EAChB,MAAM,+BAA+B,CAAC;AAMvC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAKrE;;;;;GAKG;AACH,wBAAsB,4BAA4B,CAChD,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CA+BrC;AA0KD;;;;;;;;;;GAUG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,iBAAiB,EAC3B,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAwIjC;AAED;;;;;;;;;GASG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,eAAe,EAC5B,UAAU,GAAE,MAAU,GACrB,OAAO,CAAC,gBAAgB,CAAC,CAkE3B;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,eAAe,GAAG,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAMlG;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,eAAe,GAAG;IAC3D,YAAY,EAAE;QACZ,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,sBAAsB,CAAC;QACtC,QAAQ,CAAC,EAAE,YAAY,CAAC;QACxB,QAAQ,CAAC,EAAE,iBAAiB,EAAE,CAAC;QAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;QACtB,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;KAC5B,CAAC;CACH,CAiDA;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAOvE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAYtE"}
|