specweave 0.23.8 → 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.
Files changed (130) hide show
  1. package/.claude-plugin/marketplace.json +7 -7
  2. package/CLAUDE.md +391 -1338
  3. package/dist/src/cli/commands/cleanup-cache.d.ts +14 -0
  4. package/dist/src/cli/commands/cleanup-cache.d.ts.map +1 -0
  5. package/dist/src/cli/commands/cleanup-cache.js +63 -0
  6. package/dist/src/cli/commands/cleanup-cache.js.map +1 -0
  7. package/dist/src/cli/commands/init.js +40 -0
  8. package/dist/src/cli/commands/init.js.map +1 -1
  9. package/dist/src/cli/commands/migrate-config.d.ts +22 -0
  10. package/dist/src/cli/commands/migrate-config.d.ts.map +1 -0
  11. package/dist/src/cli/commands/migrate-config.js +149 -0
  12. package/dist/src/cli/commands/migrate-config.js.map +1 -0
  13. package/dist/src/cli/helpers/async-project-loader.d.ts +148 -0
  14. package/dist/src/cli/helpers/async-project-loader.d.ts.map +1 -0
  15. package/dist/src/cli/helpers/async-project-loader.js +351 -0
  16. package/dist/src/cli/helpers/async-project-loader.js.map +1 -0
  17. package/dist/src/cli/helpers/cancelation-handler.d.ts +123 -0
  18. package/dist/src/cli/helpers/cancelation-handler.d.ts.map +1 -0
  19. package/dist/src/cli/helpers/cancelation-handler.js +187 -0
  20. package/dist/src/cli/helpers/cancelation-handler.js.map +1 -0
  21. package/dist/src/cli/helpers/import-strategy-prompter.d.ts +43 -0
  22. package/dist/src/cli/helpers/import-strategy-prompter.d.ts.map +1 -0
  23. package/dist/src/cli/helpers/import-strategy-prompter.js +136 -0
  24. package/dist/src/cli/helpers/import-strategy-prompter.js.map +1 -0
  25. package/dist/src/cli/helpers/issue-tracker/ado.d.ts +5 -2
  26. package/dist/src/cli/helpers/issue-tracker/ado.d.ts.map +1 -1
  27. package/dist/src/cli/helpers/issue-tracker/ado.js +90 -40
  28. package/dist/src/cli/helpers/issue-tracker/ado.js.map +1 -1
  29. package/dist/src/cli/helpers/issue-tracker/index.d.ts.map +1 -1
  30. package/dist/src/cli/helpers/issue-tracker/index.js +112 -60
  31. package/dist/src/cli/helpers/issue-tracker/index.js.map +1 -1
  32. package/dist/src/cli/helpers/issue-tracker/jira.d.ts +26 -2
  33. package/dist/src/cli/helpers/issue-tracker/jira.d.ts.map +1 -1
  34. package/dist/src/cli/helpers/issue-tracker/jira.js +197 -132
  35. package/dist/src/cli/helpers/issue-tracker/jira.js.map +1 -1
  36. package/dist/src/cli/helpers/progress-tracker.d.ts +121 -0
  37. package/dist/src/cli/helpers/progress-tracker.d.ts.map +1 -0
  38. package/dist/src/cli/helpers/progress-tracker.js +202 -0
  39. package/dist/src/cli/helpers/progress-tracker.js.map +1 -0
  40. package/dist/src/cli/helpers/project-count-fetcher.d.ts +69 -0
  41. package/dist/src/cli/helpers/project-count-fetcher.d.ts.map +1 -0
  42. package/dist/src/cli/helpers/project-count-fetcher.js +173 -0
  43. package/dist/src/cli/helpers/project-count-fetcher.js.map +1 -0
  44. package/dist/src/config/types.d.ts +14 -14
  45. package/dist/src/core/cache/cache-manager.d.ts +119 -0
  46. package/dist/src/core/cache/cache-manager.d.ts.map +1 -0
  47. package/dist/src/core/cache/cache-manager.js +304 -0
  48. package/dist/src/core/cache/cache-manager.js.map +1 -0
  49. package/dist/src/core/cache/rate-limit-checker.d.ts +92 -0
  50. package/dist/src/core/cache/rate-limit-checker.d.ts.map +1 -0
  51. package/dist/src/core/cache/rate-limit-checker.js +160 -0
  52. package/dist/src/core/cache/rate-limit-checker.js.map +1 -0
  53. package/dist/src/core/config/config-manager.d.ts +135 -0
  54. package/dist/src/core/config/config-manager.d.ts.map +1 -0
  55. package/dist/src/core/config/config-manager.js +341 -0
  56. package/dist/src/core/config/config-manager.js.map +1 -0
  57. package/dist/src/core/config/config-migrator.d.ts +102 -0
  58. package/dist/src/core/config/config-migrator.d.ts.map +1 -0
  59. package/dist/src/core/config/config-migrator.js +367 -0
  60. package/dist/src/core/config/config-migrator.js.map +1 -0
  61. package/dist/src/core/config/index.d.ts +10 -0
  62. package/dist/src/core/config/index.d.ts.map +1 -0
  63. package/dist/src/core/config/index.js +10 -0
  64. package/dist/src/core/config/index.js.map +1 -0
  65. package/dist/src/core/config/types.d.ts +216 -0
  66. package/dist/src/core/config/types.d.ts.map +1 -0
  67. package/dist/src/core/config/types.js +32 -0
  68. package/dist/src/core/config/types.js.map +1 -0
  69. package/dist/src/core/progress/cancelation-handler.d.ts +79 -0
  70. package/dist/src/core/progress/cancelation-handler.d.ts.map +1 -0
  71. package/dist/src/core/progress/cancelation-handler.js +111 -0
  72. package/dist/src/core/progress/cancelation-handler.js.map +1 -0
  73. package/dist/src/core/progress/import-state.d.ts +71 -0
  74. package/dist/src/core/progress/import-state.d.ts.map +1 -0
  75. package/dist/src/core/progress/import-state.js +96 -0
  76. package/dist/src/core/progress/import-state.js.map +1 -0
  77. package/dist/src/core/progress/progress-tracker.d.ts +139 -0
  78. package/dist/src/core/progress/progress-tracker.d.ts.map +1 -0
  79. package/dist/src/core/progress/progress-tracker.js +223 -0
  80. package/dist/src/core/progress/progress-tracker.js.map +1 -0
  81. package/dist/src/init/architecture/types.d.ts +6 -6
  82. package/dist/src/integrations/ado/ado-client.d.ts +25 -0
  83. package/dist/src/integrations/ado/ado-client.d.ts.map +1 -1
  84. package/dist/src/integrations/ado/ado-client.js +67 -0
  85. package/dist/src/integrations/ado/ado-client.js.map +1 -1
  86. package/dist/src/integrations/ado/ado-dependency-loader.d.ts +99 -0
  87. package/dist/src/integrations/ado/ado-dependency-loader.d.ts.map +1 -0
  88. package/dist/src/integrations/ado/ado-dependency-loader.js +207 -0
  89. package/dist/src/integrations/ado/ado-dependency-loader.js.map +1 -0
  90. package/dist/src/integrations/jira/jira-client.d.ts +32 -0
  91. package/dist/src/integrations/jira/jira-client.d.ts.map +1 -1
  92. package/dist/src/integrations/jira/jira-client.js +81 -0
  93. package/dist/src/integrations/jira/jira-client.js.map +1 -1
  94. package/dist/src/integrations/jira/jira-dependency-loader.d.ts +101 -0
  95. package/dist/src/integrations/jira/jira-dependency-loader.d.ts.map +1 -0
  96. package/dist/src/integrations/jira/jira-dependency-loader.js +200 -0
  97. package/dist/src/integrations/jira/jira-dependency-loader.js.map +1 -0
  98. package/dist/src/integrations/jira/jira-hierarchy-mapper.d.ts +104 -0
  99. package/dist/src/integrations/jira/jira-hierarchy-mapper.d.ts.map +1 -0
  100. package/dist/src/integrations/jira/jira-hierarchy-mapper.js +178 -0
  101. package/dist/src/integrations/jira/jira-hierarchy-mapper.js.map +1 -0
  102. package/package.json +1 -1
  103. package/plugins/specweave/.claude-plugin/plugin.json +20 -0
  104. package/plugins/specweave/agents/architect/AGENT.md +100 -602
  105. package/plugins/specweave/agents/pm/AGENT.md +96 -597
  106. package/plugins/specweave/agents/pm/AGENT.md.bak +1893 -0
  107. package/plugins/specweave/agents/pm/AGENT.md.bak2 +1754 -0
  108. package/plugins/specweave/commands/check-hooks.md +257 -0
  109. package/plugins/specweave/commands/migrate-config.md +104 -0
  110. package/plugins/specweave/hooks/post-edit-spec.sh +202 -31
  111. package/plugins/specweave/hooks/post-task-completion.sh +225 -228
  112. package/plugins/specweave/hooks/post-write-spec.sh +207 -31
  113. package/plugins/specweave/hooks/pre-edit-spec.sh +151 -0
  114. package/plugins/specweave/hooks/pre-task-completion.sh +5 -7
  115. package/plugins/specweave/hooks/pre-write-spec.sh +151 -0
  116. package/plugins/specweave/hooks/test-pretooluse-env.sh +72 -0
  117. package/plugins/specweave/skills/compliance-architecture/SKILL.md +374 -0
  118. package/plugins/specweave/skills/external-sync-wizard/SKILL.md +610 -0
  119. package/plugins/specweave/skills/pm-closure-validation/SKILL.md +541 -0
  120. package/plugins/specweave/skills/roadmap-planner/SKILL.md +473 -0
  121. package/plugins/specweave-ado/commands/refresh-cache.js +25 -0
  122. package/plugins/specweave-ado/commands/refresh-cache.ts +40 -0
  123. package/plugins/specweave-ado/hooks/post-task-completion.sh +1 -1
  124. package/plugins/specweave-github/hooks/post-task-completion.sh +1 -1
  125. package/plugins/specweave-jira/commands/refresh-cache.js +25 -0
  126. package/plugins/specweave-jira/commands/refresh-cache.ts +40 -0
  127. package/plugins/specweave-jira/hooks/post-task-completion.sh +1 -1
  128. package/plugins/specweave-kafka-streams/commands/topology.md +437 -0
  129. package/plugins/specweave-n8n/commands/workflow-template.md +262 -0
  130. package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +228 -6333
@@ -0,0 +1,216 @@
1
+ /**
2
+ * SpecWeave Configuration Types
3
+ *
4
+ * Defines the structure for .specweave/config.json
5
+ *
6
+ * @module core/config/types
7
+ */
8
+ /**
9
+ * Repository provider types
10
+ */
11
+ export type RepositoryProvider = 'local' | 'github' | 'bitbucket' | 'ado' | 'gitlab' | 'generic';
12
+ /**
13
+ * Issue tracker provider types
14
+ */
15
+ export type IssueTrackerProvider = 'none' | 'jira' | 'github' | 'ado';
16
+ /**
17
+ * Jira instance types
18
+ */
19
+ export type JiraInstanceType = 'cloud' | 'server';
20
+ /**
21
+ * Jira organization strategies
22
+ */
23
+ export type JiraStrategy = 'single-project' | 'project-per-team' | 'component-based' | 'board-based';
24
+ /**
25
+ * Sync direction types
26
+ */
27
+ export type SyncDirection = 'import' | 'export' | 'bidirectional';
28
+ /**
29
+ * Repository configuration
30
+ */
31
+ export interface RepoConfig {
32
+ name: string;
33
+ url: string;
34
+ path?: string;
35
+ branch?: string;
36
+ specweaveProject?: string;
37
+ }
38
+ /**
39
+ * Jira project configuration
40
+ */
41
+ export interface JiraProjectConfig {
42
+ key: string;
43
+ id?: string;
44
+ name?: string;
45
+ specweaveProject?: string;
46
+ }
47
+ /**
48
+ * Jira board configuration
49
+ */
50
+ export interface JiraBoardConfig {
51
+ id: string;
52
+ name?: string;
53
+ }
54
+ /**
55
+ * Repository configuration section
56
+ */
57
+ export interface RepositoryConfiguration {
58
+ provider: RepositoryProvider;
59
+ organization?: string;
60
+ repos?: RepoConfig[];
61
+ }
62
+ /**
63
+ * Issue tracker configuration section
64
+ */
65
+ export interface IssueTrackerConfiguration {
66
+ provider: IssueTrackerProvider;
67
+ domain?: string;
68
+ instanceType?: JiraInstanceType;
69
+ strategy?: JiraStrategy;
70
+ projects?: JiraProjectConfig[];
71
+ components?: string[];
72
+ boards?: JiraBoardConfig[];
73
+ owner?: string;
74
+ repo?: string;
75
+ repos?: string[];
76
+ organization_ado?: string;
77
+ project?: string;
78
+ }
79
+ /**
80
+ * Sync profile configuration
81
+ */
82
+ export interface SyncProfile {
83
+ provider: string;
84
+ displayName: string;
85
+ config: {
86
+ owner?: string;
87
+ repo?: string;
88
+ domain?: string;
89
+ projectKey?: string;
90
+ projects?: string[];
91
+ organization?: string;
92
+ project?: string;
93
+ monorepoProjects?: string[];
94
+ };
95
+ timeRange: {
96
+ default: string;
97
+ max: string;
98
+ };
99
+ rateLimits?: {
100
+ maxItemsPerSync: number;
101
+ warnThreshold: number;
102
+ };
103
+ }
104
+ /**
105
+ * Sync settings
106
+ */
107
+ export interface SyncSettings {
108
+ canUpsertInternalItems: boolean;
109
+ canUpdateExternalItems: boolean;
110
+ canUpdateStatus: boolean;
111
+ }
112
+ /**
113
+ * Sync configuration section
114
+ */
115
+ export interface SyncConfiguration {
116
+ enabled: boolean;
117
+ direction: SyncDirection;
118
+ autoSync: boolean;
119
+ includeStatus: boolean;
120
+ autoApplyLabels: boolean;
121
+ provider?: string;
122
+ activeProfile?: string;
123
+ settings?: SyncSettings;
124
+ profiles?: Record<string, SyncProfile>;
125
+ }
126
+ /**
127
+ * Permission configuration section
128
+ */
129
+ export interface PermissionsConfiguration {
130
+ canCreate: boolean;
131
+ canUpdate: boolean;
132
+ canUpdateStatus: boolean;
133
+ }
134
+ /**
135
+ * Hook configuration
136
+ */
137
+ export interface HookConfiguration {
138
+ post_task_completion?: {
139
+ sync_living_docs?: boolean;
140
+ sync_tasks_md?: boolean;
141
+ external_tracker_sync?: boolean;
142
+ };
143
+ post_increment_planning?: {
144
+ auto_create_github_issue?: boolean;
145
+ };
146
+ }
147
+ /**
148
+ * Project metadata
149
+ */
150
+ export interface ProjectMetadata {
151
+ name: string;
152
+ version: string;
153
+ }
154
+ /**
155
+ * Adapter configuration
156
+ */
157
+ export interface AdapterConfiguration {
158
+ default: string;
159
+ }
160
+ /**
161
+ * Main SpecWeave configuration
162
+ */
163
+ export interface SpecWeaveConfig {
164
+ /**
165
+ * Config version for migration support
166
+ */
167
+ version: string;
168
+ /**
169
+ * Project metadata (optional, for backward compatibility)
170
+ */
171
+ project?: ProjectMetadata;
172
+ /**
173
+ * Adapter configuration (optional, for backward compatibility)
174
+ */
175
+ adapters?: AdapterConfiguration;
176
+ /**
177
+ * Hook configuration (optional)
178
+ */
179
+ hooks?: HookConfiguration;
180
+ /**
181
+ * Repository provider configuration
182
+ */
183
+ repository?: RepositoryConfiguration;
184
+ /**
185
+ * Issue tracker configuration
186
+ */
187
+ issueTracker?: IssueTrackerConfiguration;
188
+ /**
189
+ * Sync configuration
190
+ */
191
+ sync?: SyncConfiguration;
192
+ /**
193
+ * Permissions configuration
194
+ */
195
+ permissions?: PermissionsConfiguration;
196
+ }
197
+ /**
198
+ * Default configuration values
199
+ */
200
+ export declare const DEFAULT_CONFIG: SpecWeaveConfig;
201
+ /**
202
+ * Validation error
203
+ */
204
+ export interface ValidationError {
205
+ path: string;
206
+ message: string;
207
+ value?: any;
208
+ }
209
+ /**
210
+ * Validation result
211
+ */
212
+ export interface ValidationResult {
213
+ valid: boolean;
214
+ errors: ValidationError[];
215
+ }
216
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/config/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * SpecWeave Configuration Types
3
+ *
4
+ * Defines the structure for .specweave/config.json
5
+ *
6
+ * @module core/config/types
7
+ */
8
+ /**
9
+ * Default configuration values
10
+ */
11
+ export const DEFAULT_CONFIG = {
12
+ version: '2.0',
13
+ repository: {
14
+ provider: 'local'
15
+ },
16
+ issueTracker: {
17
+ provider: 'none'
18
+ },
19
+ sync: {
20
+ enabled: false,
21
+ direction: 'bidirectional',
22
+ autoSync: false,
23
+ includeStatus: true,
24
+ autoApplyLabels: true
25
+ },
26
+ permissions: {
27
+ canCreate: true,
28
+ canUpdate: true,
29
+ canUpdateStatus: true
30
+ }
31
+ };
32
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/core/config/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA8NH;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAoB;IAC7C,OAAO,EAAE,KAAK;IACd,UAAU,EAAE;QACV,QAAQ,EAAE,OAAO;KAClB;IACD,YAAY,EAAE;QACZ,QAAQ,EAAE,MAAM;KACjB;IACD,IAAI,EAAE;QACJ,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,eAAe;QAC1B,QAAQ,EAAE,KAAK;QACf,aAAa,EAAE,IAAI;QACnB,eAAe,EAAE,IAAI;KACtB;IACD,WAAW,EAAE;QACX,SAAS,EAAE,IAAI;QACf,SAAS,EAAE,IAAI;QACf,eAAe,EAAE,IAAI;KACtB;CACF,CAAC"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * CancelationHandler - Graceful Ctrl+C (SIGINT) handling with state persistence
3
+ *
4
+ * Features:
5
+ * - Single Ctrl+C: Save state and exit gracefully
6
+ * - Double Ctrl+C (within 2s): Force exit immediately
7
+ * - Polling mechanism for cooperative cancelation
8
+ * - State persistence to resume later
9
+ *
10
+ * @module core/progress/cancelation-handler
11
+ */
12
+ import type { Logger } from '../../utils/logger.js';
13
+ /**
14
+ * Cancelation handler options
15
+ */
16
+ export interface CancelationOptions {
17
+ /** State save callback - called when Ctrl+C is pressed */
18
+ onSaveState?: () => Promise<void>;
19
+ /** Logger instance */
20
+ logger?: Logger;
21
+ /** Force exit timeout in milliseconds (default: 2000ms) */
22
+ forceExitTimeout?: number;
23
+ }
24
+ /**
25
+ * CancelationHandler - Handles SIGINT gracefully with double Ctrl+C force exit
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * const handler = new CancelationHandler({
30
+ * onSaveState: async () => {
31
+ * await saveImportState();
32
+ * }
33
+ * });
34
+ *
35
+ * handler.register();
36
+ *
37
+ * // In import loop
38
+ * for (const project of projects) {
39
+ * if (handler.shouldCancel()) {
40
+ * break;
41
+ * }
42
+ * await importProject(project);
43
+ * }
44
+ *
45
+ * handler.unregister();
46
+ * ```
47
+ */
48
+ export declare class CancelationHandler {
49
+ private logger;
50
+ private onSaveState?;
51
+ private forceExitTimeout;
52
+ private cancelRequested;
53
+ private firstCtrlCTime;
54
+ private sigintHandler;
55
+ constructor(options?: CancelationOptions);
56
+ /**
57
+ * Register SIGINT listener
58
+ */
59
+ register(): void;
60
+ /**
61
+ * Unregister SIGINT listener
62
+ */
63
+ unregister(): void;
64
+ /**
65
+ * Check if cancelation was requested (polling mechanism)
66
+ *
67
+ * @returns true if Ctrl+C was pressed
68
+ */
69
+ shouldCancel(): boolean;
70
+ /**
71
+ * Handle SIGINT signal (Ctrl+C)
72
+ */
73
+ private handleSigint;
74
+ /**
75
+ * Reset cancelation state (useful for testing)
76
+ */
77
+ reset(): void;
78
+ }
79
+ //# sourceMappingURL=cancelation-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cancelation-handler.d.ts","sourceRoot":"","sources":["../../../../src/core/progress/cancelation-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAGpD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,sBAAsB;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAC,CAAsB;IAC1C,OAAO,CAAC,gBAAgB,CAAS;IAEjC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,aAAa,CAA6B;gBAEtC,OAAO,GAAE,kBAAuB;IAM5C;;OAEG;IACH,QAAQ,IAAI,IAAI;IAQhB;;OAEG;IACH,UAAU,IAAI,IAAI;IAOlB;;;;OAIG;IACH,YAAY,IAAI,OAAO;IAIvB;;OAEG;YACW,YAAY;IAiC1B;;OAEG;IACH,KAAK,IAAI,IAAI;CAId"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * CancelationHandler - Graceful Ctrl+C (SIGINT) handling with state persistence
3
+ *
4
+ * Features:
5
+ * - Single Ctrl+C: Save state and exit gracefully
6
+ * - Double Ctrl+C (within 2s): Force exit immediately
7
+ * - Polling mechanism for cooperative cancelation
8
+ * - State persistence to resume later
9
+ *
10
+ * @module core/progress/cancelation-handler
11
+ */
12
+ import { consoleLogger } from '../../utils/logger.js';
13
+ /**
14
+ * CancelationHandler - Handles SIGINT gracefully with double Ctrl+C force exit
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * const handler = new CancelationHandler({
19
+ * onSaveState: async () => {
20
+ * await saveImportState();
21
+ * }
22
+ * });
23
+ *
24
+ * handler.register();
25
+ *
26
+ * // In import loop
27
+ * for (const project of projects) {
28
+ * if (handler.shouldCancel()) {
29
+ * break;
30
+ * }
31
+ * await importProject(project);
32
+ * }
33
+ *
34
+ * handler.unregister();
35
+ * ```
36
+ */
37
+ export class CancelationHandler {
38
+ constructor(options = {}) {
39
+ this.cancelRequested = false;
40
+ this.firstCtrlCTime = null;
41
+ this.sigintHandler = null;
42
+ this.logger = options.logger ?? consoleLogger;
43
+ this.onSaveState = options.onSaveState;
44
+ this.forceExitTimeout = options.forceExitTimeout ?? 2000;
45
+ }
46
+ /**
47
+ * Register SIGINT listener
48
+ */
49
+ register() {
50
+ this.sigintHandler = () => {
51
+ void this.handleSigint();
52
+ };
53
+ process.on('SIGINT', this.sigintHandler);
54
+ }
55
+ /**
56
+ * Unregister SIGINT listener
57
+ */
58
+ unregister() {
59
+ if (this.sigintHandler) {
60
+ process.off('SIGINT', this.sigintHandler);
61
+ this.sigintHandler = null;
62
+ }
63
+ }
64
+ /**
65
+ * Check if cancelation was requested (polling mechanism)
66
+ *
67
+ * @returns true if Ctrl+C was pressed
68
+ */
69
+ shouldCancel() {
70
+ return this.cancelRequested;
71
+ }
72
+ /**
73
+ * Handle SIGINT signal (Ctrl+C)
74
+ */
75
+ async handleSigint() {
76
+ const now = Date.now();
77
+ // Double Ctrl+C detection
78
+ if (this.firstCtrlCTime !== null) {
79
+ const elapsed = now - this.firstCtrlCTime;
80
+ if (elapsed < this.forceExitTimeout) {
81
+ // Force exit on double Ctrl+C
82
+ this.logger.warn('\n⚠️ Forced exit (progress may be lost)');
83
+ process.exit(1);
84
+ }
85
+ }
86
+ // First Ctrl+C
87
+ this.firstCtrlCTime = now;
88
+ this.cancelRequested = true;
89
+ this.logger.log('\n⏸️ Cancelation requested. Saving progress...');
90
+ try {
91
+ // Save state if callback provided
92
+ if (this.onSaveState) {
93
+ await this.onSaveState();
94
+ }
95
+ this.logger.log('✅ Progress saved. Run with --resume to continue.');
96
+ process.exit(0);
97
+ }
98
+ catch (error) {
99
+ this.logger.error('❌ Failed to save progress:', error);
100
+ process.exit(1);
101
+ }
102
+ }
103
+ /**
104
+ * Reset cancelation state (useful for testing)
105
+ */
106
+ reset() {
107
+ this.cancelRequested = false;
108
+ this.firstCtrlCTime = null;
109
+ }
110
+ }
111
+ //# sourceMappingURL=cancelation-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cancelation-handler.js","sourceRoot":"","sources":["../../../../src/core/progress/cancelation-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AActD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,OAAO,kBAAkB;IAS7B,YAAY,UAA8B,EAAE;QAJpC,oBAAe,GAAY,KAAK,CAAC;QACjC,mBAAc,GAAkB,IAAI,CAAC;QACrC,kBAAa,GAAwB,IAAI,CAAC;QAGhD,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,aAAa,CAAC;QAC9C,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACvC,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,IAAI,CAAC;IAC3D,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,IAAI,CAAC,aAAa,GAAG,GAAG,EAAE;YACxB,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC;QAC3B,CAAC,CAAC;QAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAC3C,CAAC;IAED;;OAEG;IACH,UAAU;QACR,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YAC1C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC5B,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,YAAY;QACV,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,YAAY;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,0BAA0B;QAC1B,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;YACjC,MAAM,OAAO,GAAG,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC;YAC1C,IAAI,OAAO,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACpC,8BAA8B;gBAC9B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;gBAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAED,eAAe;QACf,IAAI,CAAC,cAAc,GAAG,GAAG,CAAC;QAC1B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAE5B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;QAEnE,IAAI,CAAC;YACH,kCAAkC;YAClC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YAC3B,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;YACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;YACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;QAC7B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;IAC7B,CAAC;CACF"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * ImportState - State persistence for resumable imports
3
+ *
4
+ * Features:
5
+ * - Save/load import progress
6
+ * - 24-hour TTL for stale state cleanup
7
+ * - Error tracking for retry logic
8
+ *
9
+ * @module core/progress/import-state
10
+ */
11
+ /**
12
+ * Import error record
13
+ */
14
+ export interface ImportError {
15
+ /** Item identifier (e.g., project key) */
16
+ id: string;
17
+ /** Error message */
18
+ error: string;
19
+ /** Timestamp when error occurred */
20
+ timestamp: number;
21
+ }
22
+ /**
23
+ * Import state structure
24
+ */
25
+ export interface ImportState {
26
+ /** Total number of items to import */
27
+ total: number;
28
+ /** Number of items completed (success + failed) */
29
+ completed: number;
30
+ /** Number of successful imports */
31
+ succeeded: number;
32
+ /** Number of failed imports */
33
+ failed: number;
34
+ /** Array of import errors */
35
+ errors: ImportError[];
36
+ /** Timestamp when state was saved */
37
+ timestamp: number;
38
+ /** Whether import was canceled by user */
39
+ canceled: boolean;
40
+ /** Optional: Last successfully processed item ID */
41
+ lastProcessedId?: string;
42
+ }
43
+ /**
44
+ * Save import state to disk
45
+ *
46
+ * @param state Import state to save
47
+ * @param projectRoot Project root directory
48
+ */
49
+ export declare function saveImportState(state: ImportState, projectRoot?: string): Promise<void>;
50
+ /**
51
+ * Load import state from disk with TTL validation
52
+ *
53
+ * @param projectRoot Project root directory
54
+ * @param ttlMs Time-to-live in milliseconds (default: 24 hours)
55
+ * @returns Import state if valid, null if expired or missing
56
+ */
57
+ export declare function loadImportState(projectRoot?: string, ttlMs?: number): Promise<ImportState | null>;
58
+ /**
59
+ * Delete import state file
60
+ *
61
+ * @param projectRoot Project root directory
62
+ */
63
+ export declare function deleteImportState(projectRoot?: string): Promise<void>;
64
+ /**
65
+ * Check if import state exists (without loading)
66
+ *
67
+ * @param projectRoot Project root directory
68
+ * @returns true if state file exists
69
+ */
70
+ export declare function hasImportState(projectRoot?: string): boolean;
71
+ //# sourceMappingURL=import-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-state.d.ts","sourceRoot":"","sources":["../../../../src/core/progress/import-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,0CAA0C;IAC1C,EAAE,EAAE,MAAM,CAAC;IACX,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC;IAClB,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,6BAA6B;IAC7B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,QAAQ,EAAE,OAAO,CAAC;IAClB,oDAAoD;IACpD,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAYD;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,WAAW,EAClB,WAAW,GAAE,MAAsB,GAClC,OAAO,CAAC,IAAI,CAAC,CAef;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,WAAW,GAAE,MAAsB,EACnC,KAAK,GAAE,MAA4B,GAClC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CA0B7B;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,WAAW,GAAE,MAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAM1F;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,WAAW,GAAE,MAAsB,GAAG,OAAO,CAG3E"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * ImportState - State persistence for resumable imports
3
+ *
4
+ * Features:
5
+ * - Save/load import progress
6
+ * - 24-hour TTL for stale state cleanup
7
+ * - Error tracking for retry logic
8
+ *
9
+ * @module core/progress/import-state
10
+ */
11
+ import { promises as fs } from 'fs';
12
+ import { join } from 'path';
13
+ import { existsSync } from 'fs';
14
+ import { mkdirpSync } from '../../utils/fs-native.js';
15
+ /**
16
+ * Get import state file path
17
+ *
18
+ * @param projectRoot Project root directory
19
+ * @returns Path to import-state.json
20
+ */
21
+ function getStateFilePath(projectRoot = process.cwd()) {
22
+ return join(projectRoot, '.specweave', 'cache', 'import-state.json');
23
+ }
24
+ /**
25
+ * Save import state to disk
26
+ *
27
+ * @param state Import state to save
28
+ * @param projectRoot Project root directory
29
+ */
30
+ export async function saveImportState(state, projectRoot = process.cwd()) {
31
+ const stateFilePath = getStateFilePath(projectRoot);
32
+ const cacheDir = join(projectRoot, '.specweave', 'cache');
33
+ // Ensure cache directory exists
34
+ mkdirpSync(cacheDir);
35
+ // Add timestamp
36
+ const stateWithTimestamp = {
37
+ ...state,
38
+ timestamp: Date.now(),
39
+ };
40
+ // Write to file
41
+ await fs.writeFile(stateFilePath, JSON.stringify(stateWithTimestamp, null, 2), 'utf-8');
42
+ }
43
+ /**
44
+ * Load import state from disk with TTL validation
45
+ *
46
+ * @param projectRoot Project root directory
47
+ * @param ttlMs Time-to-live in milliseconds (default: 24 hours)
48
+ * @returns Import state if valid, null if expired or missing
49
+ */
50
+ export async function loadImportState(projectRoot = process.cwd(), ttlMs = 24 * 60 * 60 * 1000 // 24 hours
51
+ ) {
52
+ const stateFilePath = getStateFilePath(projectRoot);
53
+ // Check if file exists
54
+ if (!existsSync(stateFilePath)) {
55
+ return null;
56
+ }
57
+ try {
58
+ // Read and parse file
59
+ const content = await fs.readFile(stateFilePath, 'utf-8');
60
+ const state = JSON.parse(content);
61
+ // Validate TTL
62
+ const age = Date.now() - state.timestamp;
63
+ if (age > ttlMs) {
64
+ // State is expired, delete it
65
+ await deleteImportState(projectRoot);
66
+ return null;
67
+ }
68
+ return state;
69
+ }
70
+ catch (error) {
71
+ // Invalid JSON or read error
72
+ return null;
73
+ }
74
+ }
75
+ /**
76
+ * Delete import state file
77
+ *
78
+ * @param projectRoot Project root directory
79
+ */
80
+ export async function deleteImportState(projectRoot = process.cwd()) {
81
+ const stateFilePath = getStateFilePath(projectRoot);
82
+ if (existsSync(stateFilePath)) {
83
+ await fs.unlink(stateFilePath);
84
+ }
85
+ }
86
+ /**
87
+ * Check if import state exists (without loading)
88
+ *
89
+ * @param projectRoot Project root directory
90
+ * @returns true if state file exists
91
+ */
92
+ export function hasImportState(projectRoot = process.cwd()) {
93
+ const stateFilePath = getStateFilePath(projectRoot);
94
+ return existsSync(stateFilePath);
95
+ }
96
+ //# sourceMappingURL=import-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-state.js","sourceRoot":"","sources":["../../../../src/core/progress/import-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAoCtD;;;;;GAKG;AACH,SAAS,gBAAgB,CAAC,cAAsB,OAAO,CAAC,GAAG,EAAE;IAC3D,OAAO,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAC;AACvE,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,KAAkB,EAClB,cAAsB,OAAO,CAAC,GAAG,EAAE;IAEnC,MAAM,aAAa,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;IAE1D,gCAAgC;IAChC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAErB,gBAAgB;IAChB,MAAM,kBAAkB,GAAgB;QACtC,GAAG,KAAK;QACR,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAC;IAEF,gBAAgB;IAChB,MAAM,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AAC1F,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,cAAsB,OAAO,CAAC,GAAG,EAAE,EACnC,QAAgB,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,WAAW;;IAE/C,MAAM,aAAa,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAEpD,uBAAuB;IACvB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,sBAAsB;QACtB,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAC1D,MAAM,KAAK,GAAgB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAE/C,eAAe;QACf,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC;QACzC,IAAI,GAAG,GAAG,KAAK,EAAE,CAAC;YAChB,8BAA8B;YAC9B,MAAM,iBAAiB,CAAC,WAAW,CAAC,CAAC;YACrC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,6BAA6B;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,cAAsB,OAAO,CAAC,GAAG,EAAE;IACzE,MAAM,aAAa,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAEpD,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAC9B,MAAM,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,cAAsB,OAAO,CAAC,GAAG,EAAE;IAChE,MAAM,aAAa,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IACpD,OAAO,UAAU,CAAC,aAAa,CAAC,CAAC;AACnC,CAAC"}