specweave 0.28.17 → 0.28.20

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 (204) hide show
  1. package/dist/plugins/specweave-ado/lib/ado-board-resolver.d.ts +94 -0
  2. package/dist/plugins/specweave-ado/lib/ado-board-resolver.d.ts.map +1 -0
  3. package/dist/plugins/specweave-ado/lib/ado-board-resolver.js +219 -0
  4. package/dist/plugins/specweave-ado/lib/ado-board-resolver.js.map +1 -0
  5. package/dist/plugins/specweave-ado/lib/ado-spec-sync.d.ts +16 -0
  6. package/dist/plugins/specweave-ado/lib/ado-spec-sync.d.ts.map +1 -1
  7. package/dist/plugins/specweave-ado/lib/ado-spec-sync.js +63 -3
  8. package/dist/plugins/specweave-ado/lib/ado-spec-sync.js.map +1 -1
  9. package/dist/plugins/specweave-ado/lib/ado-status-sync.d.ts +12 -3
  10. package/dist/plugins/specweave-ado/lib/ado-status-sync.d.ts.map +1 -1
  11. package/dist/plugins/specweave-ado/lib/ado-status-sync.js +37 -3
  12. package/dist/plugins/specweave-ado/lib/ado-status-sync.js.map +1 -1
  13. package/dist/plugins/specweave-github/lib/github-feature-sync.d.ts +6 -11
  14. package/dist/plugins/specweave-github/lib/github-feature-sync.d.ts.map +1 -1
  15. package/dist/plugins/specweave-github/lib/github-feature-sync.js +6 -11
  16. package/dist/plugins/specweave-github/lib/github-feature-sync.js.map +1 -1
  17. package/dist/plugins/specweave-github/lib/github-increment-sync-cli.d.ts +21 -0
  18. package/dist/plugins/specweave-github/lib/github-increment-sync-cli.d.ts.map +1 -0
  19. package/dist/plugins/specweave-github/lib/github-increment-sync-cli.js +445 -0
  20. package/dist/plugins/specweave-github/lib/github-increment-sync-cli.js.map +1 -0
  21. package/dist/plugins/specweave-github/lib/github-status-sync.d.ts +10 -0
  22. package/dist/plugins/specweave-github/lib/github-status-sync.d.ts.map +1 -1
  23. package/dist/plugins/specweave-github/lib/github-status-sync.js +40 -2
  24. package/dist/plugins/specweave-github/lib/github-status-sync.js.map +1 -1
  25. package/dist/plugins/specweave-github/lib/increment-issue-builder.d.ts +94 -0
  26. package/dist/plugins/specweave-github/lib/increment-issue-builder.d.ts.map +1 -0
  27. package/dist/plugins/specweave-github/lib/increment-issue-builder.js +369 -0
  28. package/dist/plugins/specweave-github/lib/increment-issue-builder.js.map +1 -0
  29. package/dist/plugins/specweave-jira/lib/jira-board-resolver.d.ts +50 -0
  30. package/dist/plugins/specweave-jira/lib/jira-board-resolver.d.ts.map +1 -0
  31. package/dist/plugins/specweave-jira/lib/jira-board-resolver.js +84 -0
  32. package/dist/plugins/specweave-jira/lib/jira-board-resolver.js.map +1 -0
  33. package/dist/plugins/specweave-jira/lib/jira-spec-sync.d.ts +12 -0
  34. package/dist/plugins/specweave-jira/lib/jira-spec-sync.d.ts.map +1 -1
  35. package/dist/plugins/specweave-jira/lib/jira-spec-sync.js +57 -5
  36. package/dist/plugins/specweave-jira/lib/jira-spec-sync.js.map +1 -1
  37. package/dist/plugins/specweave-jira/lib/jira-status-sync.d.ts +5 -1
  38. package/dist/plugins/specweave-jira/lib/jira-status-sync.d.ts.map +1 -1
  39. package/dist/plugins/specweave-jira/lib/jira-status-sync.js +12 -4
  40. package/dist/plugins/specweave-jira/lib/jira-status-sync.js.map +1 -1
  41. package/dist/src/cli/commands/import-external.d.ts.map +1 -1
  42. package/dist/src/cli/commands/import-external.js +12 -7
  43. package/dist/src/cli/commands/import-external.js.map +1 -1
  44. package/dist/src/cli/helpers/init/external-import.d.ts.map +1 -1
  45. package/dist/src/cli/helpers/init/external-import.js +308 -36
  46. package/dist/src/cli/helpers/init/external-import.js.map +1 -1
  47. package/dist/src/cli/helpers/init/jira-ado-auto-detect.d.ts +115 -0
  48. package/dist/src/cli/helpers/init/jira-ado-auto-detect.d.ts.map +1 -0
  49. package/dist/src/cli/helpers/init/jira-ado-auto-detect.js +590 -0
  50. package/dist/src/cli/helpers/init/jira-ado-auto-detect.js.map +1 -0
  51. package/dist/src/cli/helpers/issue-tracker/ado-area-selection.d.ts +65 -0
  52. package/dist/src/cli/helpers/issue-tracker/ado-area-selection.d.ts.map +1 -0
  53. package/dist/src/cli/helpers/issue-tracker/ado-area-selection.js +278 -0
  54. package/dist/src/cli/helpers/issue-tracker/ado-area-selection.js.map +1 -0
  55. package/dist/src/cli/helpers/issue-tracker/jira-board-selection.d.ts +64 -0
  56. package/dist/src/cli/helpers/issue-tracker/jira-board-selection.d.ts.map +1 -0
  57. package/dist/src/cli/helpers/issue-tracker/jira-board-selection.js +251 -0
  58. package/dist/src/cli/helpers/issue-tracker/jira-board-selection.js.map +1 -0
  59. package/dist/src/config/types.d.ts +6 -6
  60. package/dist/src/core/ac-test-validator-cli.js +4 -1
  61. package/dist/src/core/ac-test-validator-cli.js.map +1 -1
  62. package/dist/src/core/ac-test-validator.d.ts.map +1 -1
  63. package/dist/src/core/ac-test-validator.js +4 -1
  64. package/dist/src/core/ac-test-validator.js.map +1 -1
  65. package/dist/src/core/background/index.d.ts +11 -0
  66. package/dist/src/core/background/index.d.ts.map +1 -0
  67. package/dist/src/core/background/index.js +11 -0
  68. package/dist/src/core/background/index.js.map +1 -0
  69. package/dist/src/core/background/job-manager.d.ts +65 -0
  70. package/dist/src/core/background/job-manager.d.ts.map +1 -0
  71. package/dist/src/core/background/job-manager.js +192 -0
  72. package/dist/src/core/background/job-manager.js.map +1 -0
  73. package/dist/src/core/background/types.d.ts +59 -0
  74. package/dist/src/core/background/types.d.ts.map +1 -0
  75. package/dist/src/core/background/types.js +8 -0
  76. package/dist/src/core/background/types.js.map +1 -0
  77. package/dist/src/core/repo-structure/multi-repo-configurator.d.ts +25 -0
  78. package/dist/src/core/repo-structure/multi-repo-configurator.d.ts.map +1 -0
  79. package/dist/src/core/repo-structure/multi-repo-configurator.js +614 -0
  80. package/dist/src/core/repo-structure/multi-repo-configurator.js.map +1 -0
  81. package/dist/src/core/repo-structure/repo-initializer.d.ts +40 -0
  82. package/dist/src/core/repo-structure/repo-initializer.d.ts.map +1 -0
  83. package/dist/src/core/repo-structure/repo-initializer.js +252 -0
  84. package/dist/src/core/repo-structure/repo-initializer.js.map +1 -0
  85. package/dist/src/core/repo-structure/repo-structure-manager.d.ts +3 -37
  86. package/dist/src/core/repo-structure/repo-structure-manager.d.ts.map +1 -1
  87. package/dist/src/core/repo-structure/repo-structure-manager.js +23 -803
  88. package/dist/src/core/repo-structure/repo-structure-manager.js.map +1 -1
  89. package/dist/src/core/types/increment-metadata.d.ts +75 -0
  90. package/dist/src/core/types/increment-metadata.d.ts.map +1 -1
  91. package/dist/src/core/types/spec-metadata.d.ts +2 -0
  92. package/dist/src/core/types/spec-metadata.d.ts.map +1 -1
  93. package/dist/src/core/types/sync-profile.d.ts +137 -5
  94. package/dist/src/core/types/sync-profile.d.ts.map +1 -1
  95. package/dist/src/core/types/sync-profile.js +63 -0
  96. package/dist/src/core/types/sync-profile.js.map +1 -1
  97. package/dist/src/importers/external-importer.d.ts +25 -0
  98. package/dist/src/importers/external-importer.d.ts.map +1 -1
  99. package/dist/src/importers/github-importer.d.ts.map +1 -1
  100. package/dist/src/importers/github-importer.js +5 -3
  101. package/dist/src/importers/github-importer.js.map +1 -1
  102. package/dist/src/importers/import-coordinator.d.ts +20 -0
  103. package/dist/src/importers/import-coordinator.d.ts.map +1 -1
  104. package/dist/src/importers/import-coordinator.js.map +1 -1
  105. package/dist/src/importers/item-converter.d.ts +51 -0
  106. package/dist/src/importers/item-converter.d.ts.map +1 -1
  107. package/dist/src/importers/item-converter.js +39 -12
  108. package/dist/src/importers/item-converter.js.map +1 -1
  109. package/dist/src/init/architecture/types.d.ts +2 -2
  110. package/dist/src/init/compliance/types.d.ts +1 -1
  111. package/dist/src/init/repo/types.d.ts +1 -1
  112. package/dist/src/living-docs/fs-id-allocator.d.ts +72 -3
  113. package/dist/src/living-docs/fs-id-allocator.d.ts.map +1 -1
  114. package/dist/src/living-docs/fs-id-allocator.js +142 -16
  115. package/dist/src/living-docs/fs-id-allocator.js.map +1 -1
  116. package/dist/src/locales/de/cli.json +14 -0
  117. package/dist/src/locales/es/cli.json +14 -0
  118. package/dist/src/locales/fr/cli.json +14 -0
  119. package/dist/src/locales/ja/cli.json +14 -0
  120. package/dist/src/locales/ko/cli.json +14 -0
  121. package/dist/src/locales/pt/cli.json +14 -0
  122. package/dist/src/locales/ru/cli.json +14 -0
  123. package/dist/src/locales/zh/cli.json +14 -0
  124. package/dist/src/utils/chalk-fallback.d.ts +38 -0
  125. package/dist/src/utils/chalk-fallback.d.ts.map +1 -0
  126. package/dist/src/utils/chalk-fallback.js +118 -0
  127. package/dist/src/utils/chalk-fallback.js.map +1 -0
  128. package/dist/src/utils/project-id-generator.d.ts +127 -0
  129. package/dist/src/utils/project-id-generator.d.ts.map +1 -0
  130. package/dist/src/utils/project-id-generator.js +228 -0
  131. package/dist/src/utils/project-id-generator.js.map +1 -0
  132. package/package.json +1 -1
  133. package/plugins/specweave/agents/pm/AGENT.md +202 -0
  134. package/plugins/specweave/commands/specweave-import-external.md +5 -3
  135. package/plugins/specweave/commands/specweave-jobs.md +160 -0
  136. package/plugins/specweave/commands/specweave-sync-docs.md +6 -2
  137. package/plugins/specweave/hooks/pre-task-completion.sh +35 -17
  138. package/plugins/specweave/lib/vendor/core/ac-test-validator-cli.d.ts +16 -0
  139. package/plugins/specweave/lib/vendor/core/ac-test-validator-cli.js +121 -0
  140. package/plugins/specweave/lib/vendor/core/ac-test-validator-cli.js.map +1 -0
  141. package/plugins/specweave/lib/vendor/core/ac-test-validator.d.ts +111 -0
  142. package/plugins/specweave/lib/vendor/core/ac-test-validator.js +295 -0
  143. package/plugins/specweave/lib/vendor/core/ac-test-validator.js.map +1 -0
  144. package/plugins/specweave/lib/vendor/core/types/increment-metadata.d.ts +75 -0
  145. package/plugins/specweave/lib/vendor/utils/chalk-fallback.d.ts +38 -0
  146. package/plugins/specweave/lib/vendor/utils/chalk-fallback.js +118 -0
  147. package/plugins/specweave/lib/vendor/utils/chalk-fallback.js.map +1 -0
  148. package/plugins/specweave/lib/vendor/utils/fs-native.d.ts +179 -0
  149. package/plugins/specweave/lib/vendor/utils/fs-native.js +319 -0
  150. package/plugins/specweave/lib/vendor/utils/fs-native.js.map +1 -0
  151. package/plugins/specweave/skills/code-reviewer/SKILL.md +1 -1
  152. package/plugins/specweave/skills/docs-updater/SKILL.md +61 -0
  153. package/plugins/specweave/skills/increment-planner/SKILL.md +10 -335
  154. package/plugins/specweave/skills/increment-planner/templates/metadata.json +13 -0
  155. package/plugins/specweave/skills/increment-planner/templates/plan.md +50 -0
  156. package/plugins/specweave/skills/increment-planner/templates/spec-multi-project.md +86 -0
  157. package/plugins/specweave/skills/increment-planner/templates/spec-single-project.md +50 -0
  158. package/plugins/specweave/skills/increment-planner/templates/tasks-multi-project.md +86 -0
  159. package/plugins/specweave/skills/increment-planner/templates/tasks-single-project.md +48 -0
  160. package/plugins/specweave-ado/commands/specweave-ado-import-areas.md +358 -0
  161. package/plugins/specweave-ado/lib/ado-spec-sync.js +59 -3
  162. package/plugins/specweave-ado/lib/ado-spec-sync.ts +72 -3
  163. package/plugins/specweave-ado/lib/ado-status-sync.js +35 -3
  164. package/plugins/specweave-ado/lib/ado-status-sync.ts +48 -4
  165. package/plugins/specweave-alternatives/skills/architecture-alternatives/SKILL.md +1 -0
  166. package/plugins/specweave-alternatives/skills/bmad-method/SKILL.md +1 -0
  167. package/plugins/specweave-core/skills/code-quality/SKILL.md +1 -0
  168. package/plugins/specweave-core/skills/design-patterns/SKILL.md +1 -0
  169. package/plugins/specweave-core/skills/software-architecture/SKILL.md +1 -0
  170. package/plugins/specweave-github/commands/specweave-github-cleanup-duplicates.md +14 -10
  171. package/plugins/specweave-github/commands/specweave-github-sync.md +57 -0
  172. package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +74 -0
  173. package/plugins/specweave-github/lib/github-feature-sync.ts +6 -11
  174. package/plugins/specweave-github/lib/github-increment-sync-cli.js +456 -0
  175. package/plugins/specweave-github/lib/github-increment-sync-cli.ts +588 -0
  176. package/plugins/specweave-github/lib/github-status-sync.js +37 -1
  177. package/plugins/specweave-github/lib/github-status-sync.ts +60 -4
  178. package/plugins/specweave-github/lib/increment-issue-builder.js +389 -0
  179. package/plugins/specweave-github/lib/increment-issue-builder.ts +502 -0
  180. package/plugins/specweave-github/skills/github-issue-standard/SKILL.md +19 -24
  181. package/plugins/specweave-infrastructure/agents/observability-engineer/AGENT.md +15 -23
  182. package/plugins/specweave-jira/commands/specweave-jira-import-boards.md +331 -0
  183. package/plugins/specweave-jira/lib/jira-spec-sync.js +53 -5
  184. package/plugins/specweave-jira/lib/jira-spec-sync.ts +87 -7
  185. package/plugins/specweave-jira/lib/jira-status-sync.js +9 -3
  186. package/plugins/specweave-jira/lib/jira-status-sync.ts +15 -6
  187. package/plugins/specweave-ml/agents/data-scientist/AGENT.md +16 -20
  188. package/plugins/specweave-ml/agents/ml-engineer/AGENT.md +18 -19
  189. package/plugins/specweave-ml/skills/{ml-pipeline-workflow → mlops-dag-builder}/SKILL.md +18 -14
  190. package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +111 -0
  191. package/plugins/specweave-ui/skills/browser-automation/SKILL.md +1 -1
  192. package/plugins/specweave-ui/skills/ui-testing/SKILL.md +10 -122
  193. package/dist/plugins/specweave-github/lib/epic-content-builder.d.ts +0 -70
  194. package/dist/plugins/specweave-github/lib/epic-content-builder.d.ts.map +0 -1
  195. package/dist/plugins/specweave-github/lib/epic-content-builder.js +0 -258
  196. package/dist/plugins/specweave-github/lib/epic-content-builder.js.map +0 -1
  197. package/dist/plugins/specweave-github/lib/github-epic-sync.d.ts +0 -83
  198. package/dist/plugins/specweave-github/lib/github-epic-sync.d.ts.map +0 -1
  199. package/dist/plugins/specweave-github/lib/github-epic-sync.js +0 -466
  200. package/dist/plugins/specweave-github/lib/github-epic-sync.js.map +0 -1
  201. package/plugins/specweave-github/lib/epic-content-builder.js +0 -265
  202. package/plugins/specweave-github/lib/epic-content-builder.ts +0 -376
  203. package/plugins/specweave-github/lib/github-epic-sync.js +0 -488
  204. package/plugins/specweave-github/lib/github-epic-sync.ts +0 -715
@@ -15,22 +15,53 @@ import * as fs from '../utils/fs-native.js';
15
15
  import path from 'path';
16
16
  import matter from 'gray-matter';
17
17
  import { formatOrigin } from '../core/types/origin-metadata.js';
18
+ import { normalizeToProjectId } from '../utils/project-id-generator.js';
18
19
  /**
19
20
  * FS-ID Allocator
20
21
  *
21
- * Intelligently allocates Feature IDs with chronological placement
22
+ * Intelligently allocates Feature IDs with chronological placement.
23
+ *
24
+ * CRITICAL: In umbrella/multi-repo setups, enable globalCollisionDetection
25
+ * to prevent ID collisions like FS-001 in project-a and FS-001E in project-b.
22
26
  */
23
27
  export class FSIdAllocator {
24
- constructor(projectRoot, projectId) {
28
+ constructor(projectRoot, projectId, options) {
25
29
  this.existingFeatures = new Map();
26
30
  this.scanned = false;
27
31
  this.projectRoot = projectRoot;
28
32
  // projectId can be:
29
- // - undefined: items go directly to specs/ (no project subfolder)
33
+ // - undefined: items go directly to specs/ (no project subfolder) - DEPRECATED for umbrella
34
+ // - 'parent': parent project items go to specs/parent/
30
35
  // - string: items go to specs/{projectId}/
31
36
  this.projectId = projectId;
32
37
  this.specsPath = path.join(projectRoot, '.specweave/docs/internal/specs');
33
38
  this.archivePath = path.join(projectRoot, '.specweave/docs/_archive/specs');
39
+ this.globalCollisionDetection = options?.globalCollisionDetection ?? false;
40
+ this.externalContainer = options?.externalContainer;
41
+ }
42
+ /**
43
+ * Get base directory for features, handling both 1-level and 2-level structures
44
+ *
45
+ * Structure patterns:
46
+ * - 2-level (JIRA): specs/JIRA-{containerId}/{projectId}/
47
+ * - 2-level (ADO): specs/ADO-{containerId}/{projectId}/
48
+ * - 1-level (GitHub): specs/{projectId}/
49
+ * - Legacy: specs/ (no projectId)
50
+ */
51
+ getBaseDirectory() {
52
+ if (this.externalContainer) {
53
+ // 2-level structure for JIRA/ADO
54
+ const containerType = this.externalContainer.type === 'jira-project' ? 'jira' : 'ado';
55
+ const containerDirName = `${containerType.toUpperCase()}-${normalizeToProjectId(this.externalContainer.containerId)}`;
56
+ const projectId = this.projectId || 'default';
57
+ return path.join(this.specsPath, containerDirName, projectId);
58
+ }
59
+ // 1-level structure for GitHub or single-project mode
60
+ if (this.projectId) {
61
+ return path.join(this.specsPath, this.projectId);
62
+ }
63
+ // Legacy: direct to specs/
64
+ return this.specsPath;
34
65
  }
35
66
  /**
36
67
  * Scan existing FS-IDs (both active and archived)
@@ -40,23 +71,113 @@ export class FSIdAllocator {
40
71
  * Structure:
41
72
  * - With projectId: specs/{projectId}/FS-XXX/
42
73
  * - Without projectId: specs/FS-XXX/
74
+ *
75
+ * When globalCollisionDetection is enabled (umbrella mode):
76
+ * - Scans ALL project folders under specs/
77
+ * - Prevents ID collisions like FS-001 in project-a and FS-001E in project-b
43
78
  */
44
79
  async scanExistingIds() {
45
80
  this.existingFeatures.clear();
46
- // Determine scan path based on projectId
47
- const projectSpecsPath = this.projectId
48
- ? path.join(this.specsPath, this.projectId)
49
- : this.specsPath;
50
- if (await fs.pathExists(projectSpecsPath)) {
51
- await this.scanDirectory(projectSpecsPath, 'active');
81
+ if (this.globalCollisionDetection) {
82
+ // GLOBAL MODE: Scan ALL projects under specs/ to prevent cross-project collisions
83
+ await this.scanAllProjects();
52
84
  }
53
- // Scan archive: {specsPath}/_archive/FS-XXX/
54
- const projectArchivePath = path.join(projectSpecsPath, '_archive');
55
- if (await fs.pathExists(projectArchivePath)) {
56
- await this.scanDirectory(projectArchivePath, 'archived');
85
+ else {
86
+ // LEGACY MODE: Scan only the specified projectId folder
87
+ const projectSpecsPath = this.projectId
88
+ ? path.join(this.specsPath, this.projectId)
89
+ : this.specsPath;
90
+ if (await fs.pathExists(projectSpecsPath)) {
91
+ await this.scanDirectory(projectSpecsPath, 'active');
92
+ }
93
+ // Scan archive: {specsPath}/_archive/FS-XXX/
94
+ const projectArchivePath = path.join(projectSpecsPath, '_archive');
95
+ if (await fs.pathExists(projectArchivePath)) {
96
+ await this.scanDirectory(projectArchivePath, 'archived');
97
+ }
57
98
  }
58
99
  this.scanned = true;
59
100
  }
101
+ /**
102
+ * Scan ALL projects under specs/ for global collision detection
103
+ *
104
+ * This scans both 1-level and 2-level structures:
105
+ * - specs/FS-XXX/ (root-level features, legacy)
106
+ * - specs/{project}/FS-XXX/ (1-level: all project folders)
107
+ * - specs/{project}/_archive/FS-XXX/ (1-level archived)
108
+ * - specs/JIRA-{container}/{project}/FS-XXX/ (2-level JIRA)
109
+ * - specs/ADO-{container}/{project}/FS-XXX/ (2-level ADO)
110
+ * - specs/JIRA-{container}/{project}/_archive/FS-XXX/ (2-level archived)
111
+ */
112
+ async scanAllProjects() {
113
+ if (!await fs.pathExists(this.specsPath)) {
114
+ return;
115
+ }
116
+ const entries = await fs.readdir(this.specsPath, { withFileTypes: true });
117
+ for (const entry of entries) {
118
+ if (!entry.isDirectory())
119
+ continue;
120
+ const entryPath = path.join(this.specsPath, entry.name);
121
+ // Check if this is an FS-XXX folder (root-level feature)
122
+ if (/^FS-\d{3}E?$/.test(entry.name)) {
123
+ const metadata = await this.parseFeatureMetadata(entryPath, entry.name);
124
+ if (metadata) {
125
+ this.existingFeatures.set(entry.name, metadata);
126
+ }
127
+ continue;
128
+ }
129
+ // Skip _archive at root (handled per-project)
130
+ if (entry.name === '_archive')
131
+ continue;
132
+ // Check if this is a 2-level container folder (JIRA-* or ADO-*)
133
+ if (/^(JIRA|ADO)-/.test(entry.name)) {
134
+ // 2-level structure: scan project folders INSIDE the container
135
+ await this.scanContainerFolder(entryPath);
136
+ continue;
137
+ }
138
+ // This is a 1-level project folder - scan it for FS-XXX folders
139
+ await this.scanDirectory(entryPath, 'active');
140
+ // Also scan project's archive
141
+ const projectArchivePath = path.join(entryPath, '_archive');
142
+ if (await fs.pathExists(projectArchivePath)) {
143
+ await this.scanDirectory(projectArchivePath, 'archived');
144
+ }
145
+ }
146
+ // Also scan root-level _archive
147
+ const rootArchivePath = path.join(this.specsPath, '_archive');
148
+ if (await fs.pathExists(rootArchivePath)) {
149
+ await this.scanDirectory(rootArchivePath, 'archived');
150
+ }
151
+ }
152
+ /**
153
+ * Scan a 2-level container folder (JIRA-* or ADO-*)
154
+ *
155
+ * Container structure:
156
+ * - specs/JIRA-CORE/
157
+ * - fe/
158
+ * - FS-001/
159
+ * - _archive/
160
+ * - be/
161
+ * - FS-002/
162
+ */
163
+ async scanContainerFolder(containerPath) {
164
+ const projectEntries = await fs.readdir(containerPath, { withFileTypes: true });
165
+ for (const projectEntry of projectEntries) {
166
+ if (!projectEntry.isDirectory())
167
+ continue;
168
+ // Skip _archive at container level (shouldn't exist, but just in case)
169
+ if (projectEntry.name === '_archive')
170
+ continue;
171
+ // This is a project folder inside the container
172
+ const projectPath = path.join(containerPath, projectEntry.name);
173
+ await this.scanDirectory(projectPath, 'active');
174
+ // Also scan project's archive
175
+ const projectArchivePath = path.join(projectPath, '_archive');
176
+ if (await fs.pathExists(projectArchivePath)) {
177
+ await this.scanDirectory(projectArchivePath, 'archived');
178
+ }
179
+ }
180
+ }
60
181
  /**
61
182
  * Scan directory for FS-XXX folders
62
183
  */
@@ -279,7 +400,11 @@ export class FSIdAllocator {
279
400
  /**
280
401
  * Create feature folder with FEATURE.md and metadata
281
402
  *
282
- * Structure: specs/{projectId}/FS-XXX/FEATURE.md
403
+ * Structure patterns:
404
+ * - 2-level (JIRA): specs/JIRA-{containerId}/{projectId}/FS-XXX/FEATURE.md
405
+ * - 2-level (ADO): specs/ADO-{containerId}/{projectId}/FS-XXX/FEATURE.md
406
+ * - 1-level (GitHub): specs/{projectId}/FS-XXX/FEATURE.md
407
+ * - Legacy: specs/FS-XXX/FEATURE.md (not recommended for umbrella)
283
408
  *
284
409
  * @param fsId - Feature ID (e.g., "FS-042E")
285
410
  * @param workItem - External work item metadata
@@ -287,8 +412,9 @@ export class FSIdAllocator {
287
412
  * @returns Path to created feature folder
288
413
  */
289
414
  async createFeatureFolder(fsId, workItem, metadata) {
290
- // Create folder path under project: specs/{projectId}/FS-XXX/
291
- const featurePath = path.join(this.specsPath, this.projectId, fsId);
415
+ // Create folder path using 2-level or 1-level structure based on externalContainer
416
+ const baseDir = this.getBaseDirectory();
417
+ const featurePath = path.join(baseDir, fsId);
292
418
  await fs.ensureDir(featurePath);
293
419
  // Generate README.md with frontmatter
294
420
  const originBadge = formatOrigin(metadata);
@@ -1 +1 @@
1
- {"version":3,"file":"fs-id-allocator.js","sourceRoot":"","sources":["../../../src/living-docs/fs-id-allocator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fs-id-allocator.js","sourceRoot":"","sources":["../../../src/living-docs/fs-id-allocator.ts"],"names":[],"mappings":"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"}
@@ -40,6 +40,20 @@
40
40
  "overwriteDirectory": "Directory {{projectName}} already exists. Overwrite?",
41
41
  "enablePlugins": "Enable suggested plugins now?"
42
42
  },
43
+ "toolDetection": {
44
+ "header": "KI-Tool-Erkennung",
45
+ "detected": "Erkannt: {{tool}}",
46
+ "confirmPrompt": "{{tool}} für dieses Projekt verwenden?",
47
+ "ciAutoConfirm": "CI-Umgebung erkannt - automatische Bestätigung für {{tool}}",
48
+ "selectPrompt": "Welches KI-Tool werden Sie verwenden?",
49
+ "recommended": "Empfohlen - Vollautomatisierung",
50
+ "tools": {
51
+ "claude": "Claude Code",
52
+ "cursor": "Cursor",
53
+ "copilot": "GitHub Copilot",
54
+ "generic": "Andere (ChatGPT, Gemini, etc.)"
55
+ }
56
+ },
43
57
  "info": {
44
58
  "nestedEnforcement": "SpecWeave enforces a single source of truth:",
45
59
  "nestedBullet1": "• Use the parent folder for all increments",
@@ -12,6 +12,20 @@
12
12
  "invalidName": "El nombre del proyecto debe contener solo letras minúsculas, números y guiones",
13
13
  "alreadyExists": "El directorio .specweave ya existe",
14
14
  "cancelled": "❌ Inicialización cancelada"
15
+ },
16
+ "toolDetection": {
17
+ "header": "Detección de herramienta de IA",
18
+ "detected": "Detectado: {{tool}}",
19
+ "confirmPrompt": "¿Usar {{tool}} para este proyecto?",
20
+ "ciAutoConfirm": "Entorno CI detectado - confirmando automáticamente {{tool}}",
21
+ "selectPrompt": "¿Qué herramienta de IA usarás?",
22
+ "recommended": "Recomendado - Automatización completa",
23
+ "tools": {
24
+ "claude": "Claude Code",
25
+ "cursor": "Cursor",
26
+ "copilot": "GitHub Copilot",
27
+ "generic": "Otro (ChatGPT, Gemini, etc.)"
28
+ }
15
29
  }
16
30
  },
17
31
  "increment": {
@@ -40,6 +40,20 @@
40
40
  "overwriteDirectory": "Directory {{projectName}} already exists. Overwrite?",
41
41
  "enablePlugins": "Enable suggested plugins now?"
42
42
  },
43
+ "toolDetection": {
44
+ "header": "Détection de l'outil IA",
45
+ "detected": "Détecté: {{tool}}",
46
+ "confirmPrompt": "Utiliser {{tool}} pour ce projet?",
47
+ "ciAutoConfirm": "Environnement CI détecté - confirmation automatique de {{tool}}",
48
+ "selectPrompt": "Quel outil IA allez-vous utiliser?",
49
+ "recommended": "Recommandé - Automatisation complète",
50
+ "tools": {
51
+ "claude": "Claude Code",
52
+ "cursor": "Cursor",
53
+ "copilot": "GitHub Copilot",
54
+ "generic": "Autre (ChatGPT, Gemini, etc.)"
55
+ }
56
+ },
43
57
  "info": {
44
58
  "nestedEnforcement": "SpecWeave enforces a single source of truth:",
45
59
  "nestedBullet1": "• Use the parent folder for all increments",
@@ -40,6 +40,20 @@
40
40
  "overwriteDirectory": "Directory {{projectName}} already exists. Overwrite?",
41
41
  "enablePlugins": "Enable suggested plugins now?"
42
42
  },
43
+ "toolDetection": {
44
+ "header": "AIツール検出",
45
+ "detected": "検出: {{tool}}",
46
+ "confirmPrompt": "このプロジェクトで {{tool}} を使用しますか?",
47
+ "ciAutoConfirm": "CI環境を検出 - {{tool}} を自動確認",
48
+ "selectPrompt": "どのAIツールを使用しますか?",
49
+ "recommended": "推奨 - 完全自動化",
50
+ "tools": {
51
+ "claude": "Claude Code",
52
+ "cursor": "Cursor",
53
+ "copilot": "GitHub Copilot",
54
+ "generic": "その他 (ChatGPT, Gemini など)"
55
+ }
56
+ },
43
57
  "info": {
44
58
  "nestedEnforcement": "SpecWeave enforces a single source of truth:",
45
59
  "nestedBullet1": "• Use the parent folder for all increments",
@@ -40,6 +40,20 @@
40
40
  "overwriteDirectory": "Directory {{projectName}} already exists. Overwrite?",
41
41
  "enablePlugins": "Enable suggested plugins now?"
42
42
  },
43
+ "toolDetection": {
44
+ "header": "AI 도구 감지",
45
+ "detected": "감지됨: {{tool}}",
46
+ "confirmPrompt": "이 프로젝트에 {{tool}}을(를) 사용하시겠습니까?",
47
+ "ciAutoConfirm": "CI 환경 감지 - {{tool}} 자동 확인",
48
+ "selectPrompt": "어떤 AI 도구를 사용하시겠습니까?",
49
+ "recommended": "추천 - 완전 자동화",
50
+ "tools": {
51
+ "claude": "Claude Code",
52
+ "cursor": "Cursor",
53
+ "copilot": "GitHub Copilot",
54
+ "generic": "기타 (ChatGPT, Gemini 등)"
55
+ }
56
+ },
43
57
  "info": {
44
58
  "nestedEnforcement": "SpecWeave enforces a single source of truth:",
45
59
  "nestedBullet1": "• Use the parent folder for all increments",
@@ -40,6 +40,20 @@
40
40
  "overwriteDirectory": "Directory {{projectName}} already exists. Overwrite?",
41
41
  "enablePlugins": "Enable suggested plugins now?"
42
42
  },
43
+ "toolDetection": {
44
+ "header": "Detecção de ferramenta de IA",
45
+ "detected": "Detectado: {{tool}}",
46
+ "confirmPrompt": "Usar {{tool}} para este projeto?",
47
+ "ciAutoConfirm": "Ambiente CI detectado - confirmação automática de {{tool}}",
48
+ "selectPrompt": "Qual ferramenta de IA você vai usar?",
49
+ "recommended": "Recomendado - Automação completa",
50
+ "tools": {
51
+ "claude": "Claude Code",
52
+ "cursor": "Cursor",
53
+ "copilot": "GitHub Copilot",
54
+ "generic": "Outro (ChatGPT, Gemini, etc.)"
55
+ }
56
+ },
43
57
  "info": {
44
58
  "nestedEnforcement": "SpecWeave enforces a single source of truth:",
45
59
  "nestedBullet1": "• Use the parent folder for all increments",
@@ -61,6 +61,20 @@
61
61
  "overwriteDirectory": "Директория {{projectName}} уже существует. Перезаписать?",
62
62
  "enablePlugins": "Включить предложенные плагины сейчас?"
63
63
  },
64
+ "toolDetection": {
65
+ "header": "Определение AI-инструмента",
66
+ "detected": "Обнаружен: {{tool}}",
67
+ "confirmPrompt": "Использовать {{tool}} для этого проекта?",
68
+ "ciAutoConfirm": "Обнаружена CI среда - автоматическое подтверждение {{tool}}",
69
+ "selectPrompt": "Какой AI-инструмент вы будете использовать?",
70
+ "recommended": "Рекомендуется - Полная автоматизация",
71
+ "tools": {
72
+ "claude": "Claude Code",
73
+ "cursor": "Cursor",
74
+ "copilot": "GitHub Copilot",
75
+ "generic": "Другой (ChatGPT, Gemini и т.д.)"
76
+ }
77
+ },
64
78
  "info": {
65
79
  "nestedEnforcement": "SpecWeave требует единого источника истины:",
66
80
  "nestedBullet1": "• Используйте родительскую папку для всех инкрементов",
@@ -40,6 +40,20 @@
40
40
  "overwriteDirectory": "Directory {{projectName}} already exists. Overwrite?",
41
41
  "enablePlugins": "Enable suggested plugins now?"
42
42
  },
43
+ "toolDetection": {
44
+ "header": "AI工具检测",
45
+ "detected": "检测到: {{tool}}",
46
+ "confirmPrompt": "使用 {{tool}} 来开发此项目?",
47
+ "ciAutoConfirm": "检测到CI环境 - 自动确认 {{tool}}",
48
+ "selectPrompt": "您将使用哪个AI工具?",
49
+ "recommended": "推荐 - 全自动化",
50
+ "tools": {
51
+ "claude": "Claude Code",
52
+ "cursor": "Cursor",
53
+ "copilot": "GitHub Copilot",
54
+ "generic": "其他 (ChatGPT, Gemini 等)"
55
+ }
56
+ },
43
57
  "info": {
44
58
  "nestedEnforcement": "SpecWeave enforces a single source of truth:",
45
59
  "nestedBullet1": "• Use the parent folder for all increments",
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Chalk Fallback Utility
3
+ *
4
+ * Provides chalk-like API for colored console output with graceful fallback
5
+ * to plain text when chalk is not available (e.g., in marketplace plugins).
6
+ *
7
+ * This enables AC test validator to work in both:
8
+ * 1. Full npm-installed environments (uses real chalk)
9
+ * 2. Marketplace plugin environments (uses ANSI codes or plain text)
10
+ */
11
+ type ChalkInput = string | number;
12
+ interface ChalkFn {
13
+ (text: ChalkInput): string;
14
+ bold: ChalkFn;
15
+ }
16
+ interface ChalkInstance {
17
+ red: ChalkFn;
18
+ green: ChalkFn;
19
+ yellow: ChalkFn;
20
+ blue: ChalkFn;
21
+ gray: ChalkFn;
22
+ bold: ChalkFn & {
23
+ (text: string): string;
24
+ };
25
+ }
26
+ /**
27
+ * Chalk-compatible API using ANSI codes
28
+ * Falls back to plain text if terminal doesn't support colors
29
+ */
30
+ export declare const chalkFallback: ChalkInstance;
31
+ export declare function getChalk(): Promise<ChalkInstance>;
32
+ /**
33
+ * Synchronous chalk getter - uses fallback if chalk wasn't pre-loaded
34
+ * Call getChalk() at module init to try loading real chalk first
35
+ */
36
+ export declare function getChalkSync(): ChalkInstance;
37
+ export default chalkFallback;
38
+ //# sourceMappingURL=chalk-fallback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chalk-fallback.d.ts","sourceRoot":"","sources":["../../../src/utils/chalk-fallback.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAiBH,KAAK,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;AAoClC,UAAU,OAAO;IACf,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC;IAC3B,IAAI,EAAE,OAAO,CAAC;CACf;AAED,UAAU,aAAa;IACrB,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,OAAO,GAAG;QACd,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;KACxB,CAAC;CACH;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,aAoB3B,CAAC;AAqBF,wBAAsB,QAAQ,IAAI,OAAO,CAAC,aAAa,CAAC,CAavD;AAED;;;GAGG;AACH,wBAAgB,YAAY,IAAI,aAAa,CAE5C;AAED,eAAe,aAAa,CAAC"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Chalk Fallback Utility
3
+ *
4
+ * Provides chalk-like API for colored console output with graceful fallback
5
+ * to plain text when chalk is not available (e.g., in marketplace plugins).
6
+ *
7
+ * This enables AC test validator to work in both:
8
+ * 1. Full npm-installed environments (uses real chalk)
9
+ * 2. Marketplace plugin environments (uses ANSI codes or plain text)
10
+ */
11
+ // Simple ANSI color codes for terminal output
12
+ const ANSI = {
13
+ reset: '\x1b[0m',
14
+ bold: '\x1b[1m',
15
+ red: '\x1b[31m',
16
+ green: '\x1b[32m',
17
+ yellow: '\x1b[33m',
18
+ blue: '\x1b[34m',
19
+ gray: '\x1b[90m',
20
+ };
21
+ // Check if we're in a TTY that supports colors
22
+ const supportsColor = process.stdout?.isTTY ?? false;
23
+ /**
24
+ * Creates a chalk-like color function
25
+ */
26
+ function createColorFn(colorCode) {
27
+ const fn = ((text) => {
28
+ const str = String(text);
29
+ if (!supportsColor)
30
+ return str;
31
+ return `${colorCode}${str}${ANSI.reset}`;
32
+ });
33
+ // Add chainable modifiers
34
+ fn.bold = ((text) => {
35
+ const str = String(text);
36
+ if (!supportsColor)
37
+ return str;
38
+ return `${ANSI.bold}${colorCode}${str}${ANSI.reset}`;
39
+ });
40
+ return fn;
41
+ }
42
+ /**
43
+ * Creates a bold color function
44
+ */
45
+ function createBoldColorFn(colorCode) {
46
+ const fn = ((text) => {
47
+ const str = String(text);
48
+ if (!supportsColor)
49
+ return str;
50
+ return `${ANSI.bold}${colorCode}${str}${ANSI.reset}`;
51
+ });
52
+ fn.bold = fn;
53
+ return fn;
54
+ }
55
+ /**
56
+ * Chalk-compatible API using ANSI codes
57
+ * Falls back to plain text if terminal doesn't support colors
58
+ */
59
+ export const chalkFallback = {
60
+ red: createColorFn(ANSI.red),
61
+ green: createColorFn(ANSI.green),
62
+ yellow: createColorFn(ANSI.yellow),
63
+ blue: createColorFn(ANSI.blue),
64
+ gray: createColorFn(ANSI.gray),
65
+ bold: Object.assign(((text) => {
66
+ const str = String(text);
67
+ if (!supportsColor)
68
+ return str;
69
+ return `${ANSI.bold}${str}${ANSI.reset}`;
70
+ }), {
71
+ bold: ((text) => {
72
+ const str = String(text);
73
+ if (!supportsColor)
74
+ return str;
75
+ return `${ANSI.bold}${str}${ANSI.reset}`;
76
+ }),
77
+ }),
78
+ };
79
+ // Add nested color methods to bold
80
+ chalkFallback.bold.red = createBoldColorFn(ANSI.red);
81
+ chalkFallback.bold.green = createBoldColorFn(ANSI.green);
82
+ chalkFallback.bold.yellow = createBoldColorFn(ANSI.yellow);
83
+ chalkFallback.bold.blue = createBoldColorFn(ANSI.blue);
84
+ chalkFallback.bold.gray = createBoldColorFn(ANSI.gray);
85
+ // Add bold method to color functions for chaining like chalk.green.bold()
86
+ chalkFallback.red.bold = createBoldColorFn(ANSI.red);
87
+ chalkFallback.green.bold = createBoldColorFn(ANSI.green);
88
+ chalkFallback.yellow.bold = createBoldColorFn(ANSI.yellow);
89
+ chalkFallback.blue.bold = createBoldColorFn(ANSI.blue);
90
+ chalkFallback.gray.bold = createBoldColorFn(ANSI.gray);
91
+ /**
92
+ * Try to import chalk, fall back to ANSI implementation
93
+ */
94
+ let resolvedChalk = null;
95
+ export async function getChalk() {
96
+ if (resolvedChalk)
97
+ return resolvedChalk;
98
+ try {
99
+ // Try to dynamically import chalk
100
+ const chalkModule = await import('chalk');
101
+ resolvedChalk = chalkModule.default;
102
+ return resolvedChalk;
103
+ }
104
+ catch {
105
+ // Chalk not available, use fallback
106
+ resolvedChalk = chalkFallback;
107
+ return resolvedChalk;
108
+ }
109
+ }
110
+ /**
111
+ * Synchronous chalk getter - uses fallback if chalk wasn't pre-loaded
112
+ * Call getChalk() at module init to try loading real chalk first
113
+ */
114
+ export function getChalkSync() {
115
+ return resolvedChalk ?? chalkFallback;
116
+ }
117
+ export default chalkFallback;
118
+ //# sourceMappingURL=chalk-fallback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chalk-fallback.js","sourceRoot":"","sources":["../../../src/utils/chalk-fallback.ts"],"names":[],"mappings":"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"}