specweave 0.28.17 → 0.28.19
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/dist/plugins/specweave-ado/lib/ado-board-resolver.d.ts +94 -0
- package/dist/plugins/specweave-ado/lib/ado-board-resolver.d.ts.map +1 -0
- package/dist/plugins/specweave-ado/lib/ado-board-resolver.js +219 -0
- package/dist/plugins/specweave-ado/lib/ado-board-resolver.js.map +1 -0
- package/dist/plugins/specweave-github/lib/github-feature-sync.d.ts +6 -11
- package/dist/plugins/specweave-github/lib/github-feature-sync.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/github-feature-sync.js +6 -11
- package/dist/plugins/specweave-github/lib/github-feature-sync.js.map +1 -1
- package/dist/plugins/specweave-github/lib/github-increment-sync-cli.d.ts +19 -0
- package/dist/plugins/specweave-github/lib/github-increment-sync-cli.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/github-increment-sync-cli.js +380 -0
- package/dist/plugins/specweave-github/lib/github-increment-sync-cli.js.map +1 -0
- package/dist/plugins/specweave-github/lib/increment-issue-builder.d.ts +92 -0
- package/dist/plugins/specweave-github/lib/increment-issue-builder.d.ts.map +1 -0
- package/dist/plugins/specweave-github/lib/increment-issue-builder.js +349 -0
- package/dist/plugins/specweave-github/lib/increment-issue-builder.js.map +1 -0
- package/dist/plugins/specweave-jira/lib/jira-board-resolver.d.ts +50 -0
- package/dist/plugins/specweave-jira/lib/jira-board-resolver.d.ts.map +1 -0
- package/dist/plugins/specweave-jira/lib/jira-board-resolver.js +84 -0
- package/dist/plugins/specweave-jira/lib/jira-board-resolver.js.map +1 -0
- package/dist/src/cli/commands/import-external.d.ts.map +1 -1
- package/dist/src/cli/commands/import-external.js +12 -7
- package/dist/src/cli/commands/import-external.js.map +1 -1
- package/dist/src/cli/helpers/init/external-import.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/external-import.js +122 -17
- package/dist/src/cli/helpers/init/external-import.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/ado-area-selection.d.ts +65 -0
- package/dist/src/cli/helpers/issue-tracker/ado-area-selection.d.ts.map +1 -0
- package/dist/src/cli/helpers/issue-tracker/ado-area-selection.js +278 -0
- package/dist/src/cli/helpers/issue-tracker/ado-area-selection.js.map +1 -0
- package/dist/src/cli/helpers/issue-tracker/jira-board-selection.d.ts +64 -0
- package/dist/src/cli/helpers/issue-tracker/jira-board-selection.d.ts.map +1 -0
- package/dist/src/cli/helpers/issue-tracker/jira-board-selection.js +251 -0
- package/dist/src/cli/helpers/issue-tracker/jira-board-selection.js.map +1 -0
- package/dist/src/core/ac-test-validator-cli.js +4 -1
- package/dist/src/core/ac-test-validator-cli.js.map +1 -1
- package/dist/src/core/ac-test-validator.d.ts.map +1 -1
- package/dist/src/core/ac-test-validator.js +4 -1
- package/dist/src/core/ac-test-validator.js.map +1 -1
- package/dist/src/core/types/increment-metadata.d.ts +75 -0
- package/dist/src/core/types/increment-metadata.d.ts.map +1 -1
- package/dist/src/core/types/sync-profile.d.ts +137 -5
- package/dist/src/core/types/sync-profile.d.ts.map +1 -1
- package/dist/src/core/types/sync-profile.js +63 -0
- package/dist/src/core/types/sync-profile.js.map +1 -1
- package/dist/src/importers/external-importer.d.ts +25 -0
- package/dist/src/importers/external-importer.d.ts.map +1 -1
- package/dist/src/importers/github-importer.d.ts.map +1 -1
- package/dist/src/importers/github-importer.js +5 -3
- package/dist/src/importers/github-importer.js.map +1 -1
- package/dist/src/importers/item-converter.d.ts +51 -0
- package/dist/src/importers/item-converter.d.ts.map +1 -1
- package/dist/src/importers/item-converter.js +39 -12
- package/dist/src/importers/item-converter.js.map +1 -1
- package/dist/src/init/repo/types.d.ts +1 -1
- package/dist/src/living-docs/fs-id-allocator.d.ts +72 -3
- package/dist/src/living-docs/fs-id-allocator.d.ts.map +1 -1
- package/dist/src/living-docs/fs-id-allocator.js +142 -16
- package/dist/src/living-docs/fs-id-allocator.js.map +1 -1
- package/dist/src/locales/de/cli.json +14 -0
- package/dist/src/locales/es/cli.json +14 -0
- package/dist/src/locales/fr/cli.json +14 -0
- package/dist/src/locales/ja/cli.json +14 -0
- package/dist/src/locales/ko/cli.json +14 -0
- package/dist/src/locales/pt/cli.json +14 -0
- package/dist/src/locales/ru/cli.json +14 -0
- package/dist/src/locales/zh/cli.json +14 -0
- package/dist/src/utils/chalk-fallback.d.ts +38 -0
- package/dist/src/utils/chalk-fallback.d.ts.map +1 -0
- package/dist/src/utils/chalk-fallback.js +118 -0
- package/dist/src/utils/chalk-fallback.js.map +1 -0
- package/dist/src/utils/project-id-generator.d.ts +127 -0
- package/dist/src/utils/project-id-generator.d.ts.map +1 -0
- package/dist/src/utils/project-id-generator.js +228 -0
- package/dist/src/utils/project-id-generator.js.map +1 -0
- package/package.json +1 -1
- package/plugins/specweave/agents/pm/AGENT.md +202 -0
- package/plugins/specweave/commands/specweave-import-external.md +5 -3
- package/plugins/specweave/commands/specweave-sync-docs.md +6 -2
- package/plugins/specweave/hooks/pre-task-completion.sh +35 -17
- package/plugins/specweave/lib/vendor/core/ac-test-validator-cli.d.ts +16 -0
- package/plugins/specweave/lib/vendor/core/ac-test-validator-cli.js +121 -0
- package/plugins/specweave/lib/vendor/core/ac-test-validator-cli.js.map +1 -0
- package/plugins/specweave/lib/vendor/core/ac-test-validator.d.ts +111 -0
- package/plugins/specweave/lib/vendor/core/ac-test-validator.js +295 -0
- package/plugins/specweave/lib/vendor/core/ac-test-validator.js.map +1 -0
- package/plugins/specweave/lib/vendor/core/types/increment-metadata.d.ts +75 -0
- package/plugins/specweave/lib/vendor/utils/chalk-fallback.d.ts +38 -0
- package/plugins/specweave/lib/vendor/utils/chalk-fallback.js +118 -0
- package/plugins/specweave/lib/vendor/utils/chalk-fallback.js.map +1 -0
- package/plugins/specweave/lib/vendor/utils/fs-native.d.ts +179 -0
- package/plugins/specweave/lib/vendor/utils/fs-native.js +319 -0
- package/plugins/specweave/lib/vendor/utils/fs-native.js.map +1 -0
- package/plugins/specweave/skills/code-reviewer/SKILL.md +1 -1
- package/plugins/specweave/skills/docs-updater/SKILL.md +61 -0
- package/plugins/specweave/skills/increment-planner/SKILL.md +10 -335
- package/plugins/specweave/skills/increment-planner/templates/metadata.json +13 -0
- package/plugins/specweave/skills/increment-planner/templates/plan.md +50 -0
- package/plugins/specweave/skills/increment-planner/templates/spec-multi-project.md +86 -0
- package/plugins/specweave/skills/increment-planner/templates/spec-single-project.md +50 -0
- package/plugins/specweave/skills/increment-planner/templates/tasks-multi-project.md +86 -0
- package/plugins/specweave/skills/increment-planner/templates/tasks-single-project.md +48 -0
- package/plugins/specweave-ado/commands/specweave-ado-import-areas.md +358 -0
- package/plugins/specweave-alternatives/skills/architecture-alternatives/SKILL.md +1 -0
- package/plugins/specweave-alternatives/skills/bmad-method/SKILL.md +1 -0
- package/plugins/specweave-core/skills/code-quality/SKILL.md +1 -0
- package/plugins/specweave-core/skills/design-patterns/SKILL.md +1 -0
- package/plugins/specweave-core/skills/software-architecture/SKILL.md +1 -0
- package/plugins/specweave-github/commands/specweave-github-cleanup-duplicates.md +14 -10
- package/plugins/specweave-github/commands/specweave-github-sync.md +57 -0
- package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +68 -0
- package/plugins/specweave-github/lib/github-feature-sync.ts +6 -11
- package/plugins/specweave-github/lib/github-increment-sync-cli.js +343 -0
- package/plugins/specweave-github/lib/github-increment-sync-cli.ts +484 -0
- package/plugins/specweave-github/lib/increment-issue-builder.js +368 -0
- package/plugins/specweave-github/lib/increment-issue-builder.ts +471 -0
- package/plugins/specweave-github/skills/github-issue-standard/SKILL.md +19 -24
- package/plugins/specweave-infrastructure/agents/observability-engineer/AGENT.md +15 -23
- package/plugins/specweave-jira/commands/specweave-jira-import-boards.md +331 -0
- package/plugins/specweave-ml/agents/data-scientist/AGENT.md +16 -20
- package/plugins/specweave-ml/agents/ml-engineer/AGENT.md +18 -19
- package/plugins/specweave-ml/skills/{ml-pipeline-workflow → mlops-dag-builder}/SKILL.md +18 -14
- package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +102 -0
- package/plugins/specweave-ui/skills/browser-automation/SKILL.md +1 -1
- package/plugins/specweave-ui/skills/ui-testing/SKILL.md +10 -122
- package/dist/plugins/specweave-github/lib/epic-content-builder.d.ts +0 -70
- package/dist/plugins/specweave-github/lib/epic-content-builder.d.ts.map +0 -1
- package/dist/plugins/specweave-github/lib/epic-content-builder.js +0 -258
- package/dist/plugins/specweave-github/lib/epic-content-builder.js.map +0 -1
- package/dist/plugins/specweave-github/lib/github-epic-sync.d.ts +0 -83
- package/dist/plugins/specweave-github/lib/github-epic-sync.d.ts.map +0 -1
- package/dist/plugins/specweave-github/lib/github-epic-sync.js +0 -466
- package/dist/plugins/specweave-github/lib/github-epic-sync.js.map +0 -1
- package/plugins/specweave-github/lib/epic-content-builder.js +0 -265
- package/plugins/specweave-github/lib/epic-content-builder.ts +0 -376
- package/plugins/specweave-github/lib/github-epic-sync.js +0 -488
- package/plugins/specweave-github/lib/github-epic-sync.ts +0 -715
|
@@ -77,13 +77,43 @@ export interface GitHubConfig {
|
|
|
77
77
|
*/
|
|
78
78
|
enableCrossTeamDetection?: boolean;
|
|
79
79
|
}
|
|
80
|
+
/**
|
|
81
|
+
* JIRA Board → SpecWeave Project Mapping (v0.29.0+)
|
|
82
|
+
* Maps a JIRA board to a SpecWeave project for team-based organization
|
|
83
|
+
*/
|
|
84
|
+
export interface JiraBoardMapping {
|
|
85
|
+
/** JIRA board ID (numeric) */
|
|
86
|
+
boardId: number;
|
|
87
|
+
/** Board display name (e.g., "Frontend Board") */
|
|
88
|
+
boardName: string;
|
|
89
|
+
/** SpecWeave project ID this board maps to (e.g., "FE") */
|
|
90
|
+
specweaveProject: string;
|
|
91
|
+
/** Keywords for auto-classification of user stories to this board/project */
|
|
92
|
+
keywords?: string[];
|
|
93
|
+
/** Board type (for display purposes) */
|
|
94
|
+
boardType?: 'scrum' | 'kanban' | 'simple';
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* JIRA Board-Based Team Mapping Configuration (v0.29.0+)
|
|
98
|
+
* Single JIRA project with multiple boards, each mapping to a SpecWeave project
|
|
99
|
+
*/
|
|
100
|
+
export interface JiraBoardMappingConfig {
|
|
101
|
+
/** JIRA project key (e.g., "CORE") */
|
|
102
|
+
projectKey: string;
|
|
103
|
+
/** Board → SpecWeave project mappings */
|
|
104
|
+
boards: JiraBoardMapping[];
|
|
105
|
+
/** Auto-create boards if they don't exist (default: false) */
|
|
106
|
+
autoCreateBoards?: boolean;
|
|
107
|
+
}
|
|
80
108
|
/**
|
|
81
109
|
* Jira Configuration (v0.13.0+ - Simplified Multi-Project Architecture)
|
|
110
|
+
* ENHANCED in v0.29.0 with board-based team mapping
|
|
82
111
|
*
|
|
83
|
-
* Supports
|
|
112
|
+
* Supports four patterns:
|
|
84
113
|
* 1. Single project (backward compatible): domain + projectKey
|
|
85
114
|
* 2. Multiple projects (intelligent mapping): domain + projects[]
|
|
86
115
|
* 3. Custom query (power users): domain + customQuery (raw JQL)
|
|
116
|
+
* 4. NEW: Board-based teams (v0.29.0+): domain + boardMapping
|
|
87
117
|
*
|
|
88
118
|
* REMOVED in v0.13.0:
|
|
89
119
|
* - strategy (JiraStrategy): Deprecated → Use intelligent mapping instead
|
|
@@ -98,6 +128,27 @@ export interface JiraConfig {
|
|
|
98
128
|
domain: string;
|
|
99
129
|
projectKey?: string;
|
|
100
130
|
projects?: string[];
|
|
131
|
+
customQuery?: string;
|
|
132
|
+
/**
|
|
133
|
+
* Pattern 4: Board-based teams (v0.29.0+)
|
|
134
|
+
*
|
|
135
|
+
* Single JIRA project with multiple boards, each board maps to a SpecWeave project.
|
|
136
|
+
* Ideal for enterprise setups where teams share a JIRA project but have separate boards.
|
|
137
|
+
*
|
|
138
|
+
* Example:
|
|
139
|
+
* ```json
|
|
140
|
+
* {
|
|
141
|
+
* "boardMapping": {
|
|
142
|
+
* "projectKey": "CORE",
|
|
143
|
+
* "boards": [
|
|
144
|
+
* { "boardId": 123, "boardName": "Frontend Board", "specweaveProject": "FE" },
|
|
145
|
+
* { "boardId": 456, "boardName": "Backend Board", "specweaveProject": "BE" }
|
|
146
|
+
* ]
|
|
147
|
+
* }
|
|
148
|
+
* }
|
|
149
|
+
* ```
|
|
150
|
+
*/
|
|
151
|
+
boardMapping?: JiraBoardMappingConfig;
|
|
101
152
|
intelligentMapping?: boolean;
|
|
102
153
|
autoCreateEpics?: boolean;
|
|
103
154
|
confidenceThreshold?: number;
|
|
@@ -107,16 +158,43 @@ export interface JiraConfig {
|
|
|
107
158
|
task: string;
|
|
108
159
|
subtask: string;
|
|
109
160
|
};
|
|
110
|
-
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* ADO Area Path → SpecWeave Project Mapping (v0.29.0+)
|
|
164
|
+
* Maps an ADO area path to a SpecWeave project for team-based organization
|
|
165
|
+
*/
|
|
166
|
+
export interface AdoAreaPathMapping {
|
|
167
|
+
/** Full area path (e.g., "MyProduct\\Frontend" or "MyProduct\\Backend\\API") */
|
|
168
|
+
areaPath: string;
|
|
169
|
+
/** SpecWeave project ID this area path maps to (e.g., "FE") */
|
|
170
|
+
specweaveProject: string;
|
|
171
|
+
/** Keywords for auto-classification of user stories to this area/project */
|
|
172
|
+
keywords?: string[];
|
|
173
|
+
/** Include child area paths (default: true) */
|
|
174
|
+
includeChildren?: boolean;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* ADO Area Path-Based Team Mapping Configuration (v0.29.0+)
|
|
178
|
+
* Single ADO project with area paths mapping to SpecWeave projects
|
|
179
|
+
*/
|
|
180
|
+
export interface AdoAreaPathMappingConfig {
|
|
181
|
+
/** ADO project name (e.g., "MyProduct") */
|
|
182
|
+
project: string;
|
|
183
|
+
/** Area path → SpecWeave project mappings */
|
|
184
|
+
mappings: AdoAreaPathMapping[];
|
|
185
|
+
/** Auto-create area paths if they don't exist (default: false) */
|
|
186
|
+
autoCreateAreaPaths?: boolean;
|
|
111
187
|
}
|
|
112
188
|
/**
|
|
113
189
|
* Azure DevOps Configuration (v0.13.0+ - Simplified Multi-Project Architecture)
|
|
190
|
+
* ENHANCED in v0.29.0 with area path → SpecWeave project mapping
|
|
114
191
|
*
|
|
115
|
-
* Supports
|
|
192
|
+
* Supports five patterns:
|
|
116
193
|
* 1. Single project (backward compatible): organization + project
|
|
117
194
|
* 2. Multiple projects (intelligent mapping): organization + projects[]
|
|
118
|
-
* 3. Single project + area paths (
|
|
195
|
+
* 3. Single project + area paths list (simple): organization + project + areaPaths[]
|
|
119
196
|
* 4. Custom query (power users): organization + customQuery (raw WIQL)
|
|
197
|
+
* 5. NEW: Area path mapping (v0.29.0+): organization + areaPathMapping
|
|
120
198
|
*
|
|
121
199
|
* REMOVED in v0.13.0:
|
|
122
200
|
* - teams: Too granular → Use projects[] or areaPaths[]
|
|
@@ -133,6 +211,27 @@ export interface AdoConfig {
|
|
|
133
211
|
project?: string;
|
|
134
212
|
projects?: string[];
|
|
135
213
|
areaPaths?: string[];
|
|
214
|
+
customQuery?: string;
|
|
215
|
+
/**
|
|
216
|
+
* Pattern 5: Area path mapping (v0.29.0+)
|
|
217
|
+
*
|
|
218
|
+
* Single ADO project with area paths, each area path maps to a SpecWeave project.
|
|
219
|
+
* Ideal for enterprise setups where teams share an ADO project but use area paths.
|
|
220
|
+
*
|
|
221
|
+
* Example:
|
|
222
|
+
* ```json
|
|
223
|
+
* {
|
|
224
|
+
* "areaPathMapping": {
|
|
225
|
+
* "project": "MyProduct",
|
|
226
|
+
* "mappings": [
|
|
227
|
+
* { "areaPath": "MyProduct\\Frontend", "specweaveProject": "FE" },
|
|
228
|
+
* { "areaPath": "MyProduct\\Backend", "specweaveProject": "BE" }
|
|
229
|
+
* ]
|
|
230
|
+
* }
|
|
231
|
+
* }
|
|
232
|
+
* ```
|
|
233
|
+
*/
|
|
234
|
+
areaPathMapping?: AdoAreaPathMappingConfig;
|
|
136
235
|
intelligentMapping?: boolean;
|
|
137
236
|
autoCreateEpics?: boolean;
|
|
138
237
|
confidenceThreshold?: number;
|
|
@@ -142,7 +241,6 @@ export interface AdoConfig {
|
|
|
142
241
|
story: string;
|
|
143
242
|
task: string;
|
|
144
243
|
};
|
|
145
|
-
customQuery?: string;
|
|
146
244
|
}
|
|
147
245
|
export type ProviderConfig = GitHubConfig | JiraConfig | AdoConfig;
|
|
148
246
|
export type TimeRangePreset = '1W' | '2W' | '1M' | '3M' | '6M' | '1Y' | 'ALL';
|
|
@@ -373,6 +471,40 @@ export declare function hasMultipleAdoProjects(config: AdoConfig): boolean;
|
|
|
373
471
|
* Check if ADO config uses area path pattern (single project with area paths)
|
|
374
472
|
*/
|
|
375
473
|
export declare function hasAdoAreaPaths(config: AdoConfig): boolean;
|
|
474
|
+
/**
|
|
475
|
+
* Check if Jira config uses board-based team mapping (v0.29.0+)
|
|
476
|
+
* Single JIRA project with multiple boards → SpecWeave projects
|
|
477
|
+
*/
|
|
478
|
+
export declare function hasJiraBoardMapping(config: JiraConfig): boolean;
|
|
479
|
+
/**
|
|
480
|
+
* Check if ADO config uses area path mapping (v0.29.0+)
|
|
481
|
+
* Single ADO project with area paths → SpecWeave projects
|
|
482
|
+
*/
|
|
483
|
+
export declare function hasAdoAreaPathMapping(config: AdoConfig): boolean;
|
|
484
|
+
/**
|
|
485
|
+
* Get JIRA board mapping for a SpecWeave project (v0.29.0+)
|
|
486
|
+
*
|
|
487
|
+
* @param config JiraConfig with boardMapping
|
|
488
|
+
* @param specweaveProjectId SpecWeave project ID (e.g., "FE")
|
|
489
|
+
* @returns Board mapping or undefined
|
|
490
|
+
*/
|
|
491
|
+
export declare function getJiraBoardForProject(config: JiraConfig, specweaveProjectId: string): JiraBoardMapping | undefined;
|
|
492
|
+
/**
|
|
493
|
+
* Get ADO area path mapping for a SpecWeave project (v0.29.0+)
|
|
494
|
+
*
|
|
495
|
+
* @param config AdoConfig with areaPathMapping
|
|
496
|
+
* @param specweaveProjectId SpecWeave project ID (e.g., "FE")
|
|
497
|
+
* @returns Area path mapping or undefined
|
|
498
|
+
*/
|
|
499
|
+
export declare function getAdoAreaPathForProject(config: AdoConfig, specweaveProjectId: string): AdoAreaPathMapping | undefined;
|
|
500
|
+
/**
|
|
501
|
+
* Get all SpecWeave project IDs from JIRA board mapping (v0.29.0+)
|
|
502
|
+
*/
|
|
503
|
+
export declare function getJiraMappedProjects(config: JiraConfig): string[];
|
|
504
|
+
/**
|
|
505
|
+
* Get all SpecWeave project IDs from ADO area path mapping (v0.29.0+)
|
|
506
|
+
*/
|
|
507
|
+
export declare function getAdoMappedProjects(config: AdoConfig): string[];
|
|
376
508
|
/**
|
|
377
509
|
* Get effective strategy (defaults to 'intelligent' if not specified)
|
|
378
510
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-profile.d.ts","sourceRoot":"","sources":["../../../../src/core/types/sync-profile.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAMlD,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC;AAErD;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG,QAAQ,CAAC;AAEpD;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,aAAa,GAAG,QAAQ,CAAC;AAqBrE;;;;;;;;GAQG;AACH,MAAM,MAAM,kBAAkB,GAC1B,kBAAkB,GAClB,YAAY,GACZ,aAAa,GACb,aAAa,CAAC;AAElB;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,YAAY;IAE3B,KAAK,CAAC,EAAE,MAAM,CAAC;IAGf,IAAI,CAAC,EAAE,MAAM,CAAC;IAId,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAIjB,UAAU,CAAC,EAAE,MAAM,CAAC;IAIpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,YAAY,CAAC;IAC/B,YAAY,CAAC,EAAE,OAAO,CAAC;IAGvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAG7B,WAAW,CAAC,EAAE,MAAM,CAAC;IAMrB;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,kBAAkB,CAAC;IAEpC;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;OAIG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;CACpC;AAED
|
|
1
|
+
{"version":3,"file":"sync-profile.d.ts","sourceRoot":"","sources":["../../../../src/core/types/sync-profile.ts"],"names":[],"mappings":"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"}
|
|
@@ -56,6 +56,69 @@ export function hasMultipleAdoProjects(config) {
|
|
|
56
56
|
export function hasAdoAreaPaths(config) {
|
|
57
57
|
return !!(config.project && config.areaPaths && config.areaPaths.length > 0);
|
|
58
58
|
}
|
|
59
|
+
// ============================================================================
|
|
60
|
+
// NEW Type Guards (v0.29.0+ - Board/Area Path Mapping)
|
|
61
|
+
// ============================================================================
|
|
62
|
+
/**
|
|
63
|
+
* Check if Jira config uses board-based team mapping (v0.29.0+)
|
|
64
|
+
* Single JIRA project with multiple boards → SpecWeave projects
|
|
65
|
+
*/
|
|
66
|
+
export function hasJiraBoardMapping(config) {
|
|
67
|
+
return !!(config.boardMapping &&
|
|
68
|
+
config.boardMapping.projectKey &&
|
|
69
|
+
config.boardMapping.boards &&
|
|
70
|
+
config.boardMapping.boards.length > 0);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Check if ADO config uses area path mapping (v0.29.0+)
|
|
74
|
+
* Single ADO project with area paths → SpecWeave projects
|
|
75
|
+
*/
|
|
76
|
+
export function hasAdoAreaPathMapping(config) {
|
|
77
|
+
return !!(config.areaPathMapping &&
|
|
78
|
+
config.areaPathMapping.project &&
|
|
79
|
+
config.areaPathMapping.mappings &&
|
|
80
|
+
config.areaPathMapping.mappings.length > 0);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Get JIRA board mapping for a SpecWeave project (v0.29.0+)
|
|
84
|
+
*
|
|
85
|
+
* @param config JiraConfig with boardMapping
|
|
86
|
+
* @param specweaveProjectId SpecWeave project ID (e.g., "FE")
|
|
87
|
+
* @returns Board mapping or undefined
|
|
88
|
+
*/
|
|
89
|
+
export function getJiraBoardForProject(config, specweaveProjectId) {
|
|
90
|
+
if (!hasJiraBoardMapping(config))
|
|
91
|
+
return undefined;
|
|
92
|
+
return config.boardMapping.boards.find((b) => b.specweaveProject.toLowerCase() === specweaveProjectId.toLowerCase());
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Get ADO area path mapping for a SpecWeave project (v0.29.0+)
|
|
96
|
+
*
|
|
97
|
+
* @param config AdoConfig with areaPathMapping
|
|
98
|
+
* @param specweaveProjectId SpecWeave project ID (e.g., "FE")
|
|
99
|
+
* @returns Area path mapping or undefined
|
|
100
|
+
*/
|
|
101
|
+
export function getAdoAreaPathForProject(config, specweaveProjectId) {
|
|
102
|
+
if (!hasAdoAreaPathMapping(config))
|
|
103
|
+
return undefined;
|
|
104
|
+
return config.areaPathMapping.mappings.find((m) => m.specweaveProject.toLowerCase() === specweaveProjectId.toLowerCase());
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Get all SpecWeave project IDs from JIRA board mapping (v0.29.0+)
|
|
108
|
+
*/
|
|
109
|
+
export function getJiraMappedProjects(config) {
|
|
110
|
+
if (!hasJiraBoardMapping(config))
|
|
111
|
+
return [];
|
|
112
|
+
return config.boardMapping.boards.map((b) => b.specweaveProject);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Get all SpecWeave project IDs from ADO area path mapping (v0.29.0+)
|
|
116
|
+
*/
|
|
117
|
+
export function getAdoMappedProjects(config) {
|
|
118
|
+
if (!hasAdoAreaPathMapping(config))
|
|
119
|
+
return [];
|
|
120
|
+
return config.areaPathMapping.mappings.map((m) => m.specweaveProject);
|
|
121
|
+
}
|
|
59
122
|
/**
|
|
60
123
|
* Get effective strategy (defaults to 'intelligent' if not specified)
|
|
61
124
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-profile.js","sourceRoot":"","sources":["../../../../src/core/types/sync-profile.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"sync-profile.js","sourceRoot":"","sources":["../../../../src/core/types/sync-profile.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,6 +43,31 @@ export interface ExternalItem {
|
|
|
43
43
|
platform: 'github' | 'jira' | 'ado';
|
|
44
44
|
/** Source repository (owner/repo format for multi-repo imports) */
|
|
45
45
|
sourceRepo?: string;
|
|
46
|
+
/**
|
|
47
|
+
* JIRA project key (e.g., "CORE")
|
|
48
|
+
* Used for 2-level directory: specs/JIRA-{projectKey}/{boardMapping}/
|
|
49
|
+
*/
|
|
50
|
+
jiraProjectKey?: string;
|
|
51
|
+
/**
|
|
52
|
+
* JIRA board ID (numeric)
|
|
53
|
+
* Maps to SpecWeave project via boardMapping configuration
|
|
54
|
+
*/
|
|
55
|
+
jiraBoardId?: number;
|
|
56
|
+
/**
|
|
57
|
+
* JIRA board name (e.g., "Frontend Board")
|
|
58
|
+
* Human-readable name for display purposes
|
|
59
|
+
*/
|
|
60
|
+
jiraBoardName?: string;
|
|
61
|
+
/**
|
|
62
|
+
* ADO project name (e.g., "MyProduct")
|
|
63
|
+
* Used for 2-level directory: specs/ADO-{projectName}/{areaPathMapping}/
|
|
64
|
+
*/
|
|
65
|
+
adoProjectName?: string;
|
|
66
|
+
/**
|
|
67
|
+
* ADO area path (e.g., "MyProduct\\Frontend")
|
|
68
|
+
* Maps to SpecWeave project via areaPathMapping configuration
|
|
69
|
+
*/
|
|
70
|
+
adoAreaPath?: string;
|
|
46
71
|
}
|
|
47
72
|
/**
|
|
48
73
|
* Import configuration
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"external-importer.d.ts","sourceRoot":"","sources":["../../../src/importers/external-importer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,4DAA4D;IAC5D,EAAE,EAAE,MAAM,CAAC;IAEX,8CAA8C;IAC9C,IAAI,EAAE,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;IAEzD,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAC;IAEd,uBAAuB;IACvB,WAAW,EAAE,MAAM,CAAC;IAEpB,oDAAoD;IACpD,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,WAAW,GAAG,QAAQ,CAAC;IAExD,uBAAuB;IACvB,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAE5C,oBAAoB;IACpB,SAAS,EAAE,IAAI,CAAC;IAEhB,wBAAwB;IACxB,SAAS,EAAE,IAAI,CAAC;IAEhB,mBAAmB;IACnB,GAAG,EAAE,MAAM,CAAC;IAEZ,kBAAkB;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IAEjB,uDAAuD;IACvD,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE9B,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;IAE1B,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,mCAAmC;IACnC,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC;IAEpC,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"external-importer.d.ts","sourceRoot":"","sources":["../../../src/importers/external-importer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,4DAA4D;IAC5D,EAAE,EAAE,MAAM,CAAC;IAEX,8CAA8C;IAC9C,IAAI,EAAE,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;IAEzD,oBAAoB;IACpB,KAAK,EAAE,MAAM,CAAC;IAEd,uBAAuB;IACvB,WAAW,EAAE,MAAM,CAAC;IAEpB,oDAAoD;IACpD,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,WAAW,GAAG,QAAQ,CAAC;IAExD,uBAAuB;IACvB,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAE5C,oBAAoB;IACpB,SAAS,EAAE,IAAI,CAAC;IAEhB,wBAAwB;IACxB,SAAS,EAAE,IAAI,CAAC;IAEhB,mBAAmB;IACnB,GAAG,EAAE,MAAM,CAAC;IAEZ,kBAAkB;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IAEjB,uDAAuD;IACvD,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAE9B,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;IAE1B,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,mCAAmC;IACnC,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC;IAEpC,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,CAAC;IAMpB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,wCAAwC;IACxC,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,4CAA4C;IAC5C,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,uBAAuB;IACvB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAElB,+BAA+B;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,qCAAqC;IACrC,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,oBAAoB;IACpB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC;IAE7C;;;;OAIG;IACH,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAEvD;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,cAAc,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;CAChF;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAC;IAEd,qBAAqB;IACrB,KAAK,EAAE,YAAY,EAAE,CAAC;IAEtB,uCAAuC;IACvC,MAAM,EAAE,MAAM,EAAE,CAAC;IAEjB,eAAe;IACf,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC;IAEpC,oDAAoD;IACpD,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,iDAAiD;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github-importer.d.ts","sourceRoot":"","sources":["../../../src/importers/github-importer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAenF;;GAEG;AACH,qBAAa,cAAe,YAAW,QAAQ;IAC7C,QAAQ,CAAC,QAAQ,EAAG,QAAQ,CAAU;IACtC,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,IAAI,CAAS;gBAET,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAQvD;;OAEG;IACG,MAAM,CAAC,MAAM,GAAE,YAAiB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAUhE;;OAEG;IACI,QAAQ,CAAC,MAAM,GAAE,YAAiB,GAAG,cAAc,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC;IAkEzF;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA8C7B;;;;;OAKG;IACH,OAAO,CAAC,yBAAyB;
|
|
1
|
+
{"version":3,"file":"github-importer.d.ts","sourceRoot":"","sources":["../../../src/importers/github-importer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAenF;;GAEG;AACH,qBAAa,cAAe,YAAW,QAAQ;IAC7C,QAAQ,CAAC,QAAQ,EAAG,QAAQ,CAAU;IACtC,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,IAAI,CAAS;gBAET,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAQvD;;OAEG;IACG,MAAM,CAAC,MAAM,GAAE,YAAiB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAUhE;;OAEG;IACI,QAAQ,CAAC,MAAM,GAAE,YAAiB,GAAG,cAAc,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC;IAkEzF;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA8C7B;;;;;OAKG;IACH,OAAO,CAAC,yBAAyB;CA6BlC"}
|
|
@@ -142,15 +142,17 @@ export class GitHubImporter {
|
|
|
142
142
|
criteria.push(match[1].trim());
|
|
143
143
|
}
|
|
144
144
|
// Pattern 2: "Acceptance Criteria" section
|
|
145
|
-
const sectionPattern = /(?:^|\n)##?\s*Acceptance Criteria\s*\n([\s\S]*?)(?=\n##|\n
|
|
145
|
+
const sectionPattern = /(?:^|\n)##?\s*Acceptance Criteria\s*\n([\s\S]*?)(?=\n##|\n---|$)/i;
|
|
146
146
|
const sectionMatch = body.match(sectionPattern);
|
|
147
147
|
if (sectionMatch) {
|
|
148
148
|
const section = sectionMatch[1];
|
|
149
|
-
|
|
149
|
+
// Match bullet points, optionally with checkboxes
|
|
150
|
+
const itemPattern = /^[\s-]*[•*-]\s*(?:\[[ x]\]\s*)?(.+)$/gim;
|
|
150
151
|
const itemMatches = section.matchAll(itemPattern);
|
|
151
152
|
for (const match of itemMatches) {
|
|
152
153
|
const item = match[1].trim();
|
|
153
|
-
if (
|
|
154
|
+
// Skip if already captured by Pattern 1 (AC checkbox list)
|
|
155
|
+
if (!criteria.some((c) => c.includes(item) || item.includes(c))) {
|
|
154
156
|
criteria.push(item);
|
|
155
157
|
}
|
|
156
158
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github-importer.js","sourceRoot":"","sources":["../../../src/importers/github-importer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAgBxC;;GAEG;AACH,MAAM,OAAO,cAAc;IAMzB,YAAY,KAAa,EAAE,IAAY,EAAE,KAAc;QAL9C,aAAQ,GAAG,QAAiB,CAAC;QAMpC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC;YACzB,IAAI,EAAE,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY;SACxC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,SAAuB,EAAE;QACpC,MAAM,KAAK,GAAmB,EAAE,CAAC;QAEjC,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/C,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QACtB,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,CAAC,QAAQ,CAAC,SAAuB,EAAE;QACvC,MAAM,EACJ,eAAe,GAAG,CAAC,EACnB,aAAa,GAAG,KAAK,EACrB,MAAM,GAAG,EAAE,EACX,SAAS,EACT,QAAQ,GAAG,QAAQ,GACpB,GAAG,MAAM,CAAC;QAEX,uBAAuB;QACvB,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;QACzB,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,eAAe,CAAC,CAAC;QAEnD,IAAI,IAAI,GAAG,CAAC,CAAC;QACb,IAAI,YAAY,GAAG,CAAC,CAAC;QAErB,OAAO,YAAY,GAAG,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC;gBACH,6BAA6B;gBAC7B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC;oBACrD,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM;oBACrC,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE;oBAC1B,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;oBACxB,SAAS,EAAE,SAAS;oBACpB,QAAQ,EAAE,GAAG;oBACb,IAAI;iBACL,CAAC,CAAC;gBAEH,sBAAsB;gBACtB,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,uBAAuB,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;gBACjF,IAAI,SAAS,GAAG,EAAE,EAAE,CAAC;oBACnB,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;oBAC7E,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;oBAC7C,MAAM,IAAI,KAAK,CACb,kCAAkC,SAAS,mCAAmC,SAAS,CAAC,cAAc,EAAE,EAAE,CAC3G,CAAC;gBACJ,CAAC;gBAED,yCAAyC;gBACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI;qBACxB,MAAM,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,wBAAwB;qBACpE,GAAG,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,KAAoB,CAAC,CAAC,CAAC;gBAEzE,aAAa;gBACb,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACrB,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,GAAG,YAAY,CAAC,CAAC;oBAC9C,YAAY,IAAI,KAAK,CAAC,MAAM,CAAC;gBAC/B,CAAC;gBAED,iCAAiC;gBACjC,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;oBAC/B,MAAM;gBACR,CAAC;gBAED,IAAI,EAAE,CAAC;YACT,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;oBACjE,MAAM,IAAI,KAAK,CAAC,+BAA+B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBAClE,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,KAAkB;QAC9C,2BAA2B;QAC3B,IAAI,IAAI,GAAyB,MAAM,CAAC;QACxC,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAEjE,IAAI,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACtE,IAAI,GAAG,YAAY,CAAC;QACtB,CAAC;aAAM,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACvC,IAAI,GAAG,MAAM,CAAC;QAChB,CAAC;aAAM,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACtC,IAAI,GAAG,KAAK,CAAC;QACf,CAAC;aAAM,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1C,IAAI,GAAG,SAAS,CAAC;QACnB,CAAC;QAED,oDAAoD;QACpD,MAAM,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAG,aAAa,CAAC,CAAC,CAAE,aAAa,CAAC,WAAW,EAA+B,CAAC,CAAC,CAAC,SAAS,CAAC;QAEvG,wCAAwC;QACxC,MAAM,kBAAkB,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAE5E,0CAA0C;QAC1C,IAAI,MAAM,GAA2B,MAAM,CAAC;QAC5C,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAM,GAAG,WAAW,CAAC;QACvB,CAAC;aAAM,IAAI,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YACpF,MAAM,GAAG,aAAa,CAAC;QACzB,CAAC;QAED,OAAO;YACL,EAAE,EAAE,UAAU,KAAK,CAAC,MAAM,EAAE;YAC5B,IAAI;YACJ,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,WAAW,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE;YAC7B,MAAM;YACN,QAAQ;YACR,SAAS,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;YACrC,SAAS,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;YACrC,GAAG,EAAE,KAAK,CAAC,QAAQ;YACnB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACvC,kBAAkB,EAAE,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS;YAClF,QAAQ,EAAE,QAAQ;SACnB,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACK,yBAAyB,CAAC,IAAY;QAC5C,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,oDAAoD;QACpD,MAAM,SAAS,GAAG,8CAA8C,CAAC;QACjE,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC3C,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;YAC9B,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACjC,CAAC;QAED,2CAA2C;QAC3C,MAAM,cAAc,GAAG,
|
|
1
|
+
{"version":3,"file":"github-importer.js","sourceRoot":"","sources":["../../../src/importers/github-importer.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* CRITICAL: Does NOT create increments - only creates living docs.
|
|
6
6
|
*/
|
|
7
7
|
import type { ExternalItem } from './external-importer.js';
|
|
8
|
+
import type { ExternalContainerContext } from '../core/types/increment-metadata.js';
|
|
8
9
|
export interface ConvertedUserStory {
|
|
9
10
|
/** User Story ID with E suffix (e.g., US-001E) */
|
|
10
11
|
id: string;
|
|
@@ -47,6 +48,15 @@ export interface ItemConverterOptions {
|
|
|
47
48
|
enableFeatureAllocation?: boolean;
|
|
48
49
|
/** Project ID for multi-project mode (default: 'default') */
|
|
49
50
|
projectId?: string;
|
|
51
|
+
/**
|
|
52
|
+
* Enable global FS-ID collision detection across ALL projects (umbrella mode)
|
|
53
|
+
*
|
|
54
|
+
* CRITICAL: Set this to true in umbrella/multi-repo setups to prevent ID
|
|
55
|
+
* collisions like FS-001 in project-a and FS-001E in project-b.
|
|
56
|
+
*
|
|
57
|
+
* Default: false (for backwards compatibility)
|
|
58
|
+
*/
|
|
59
|
+
enableGlobalCollisionDetection?: boolean;
|
|
50
60
|
/** Enable duplicate detection (default: true) */
|
|
51
61
|
enableDuplicateDetection?: boolean;
|
|
52
62
|
/** Auto-archive items older than this many days (default: 30, 0 to disable) */
|
|
@@ -57,6 +67,37 @@ export interface ItemConverterOptions {
|
|
|
57
67
|
onFeatureCreated?: (featureId: string, featurePath: string) => void;
|
|
58
68
|
/** Callback for archived items */
|
|
59
69
|
onItemArchived?: (usId: string, reason: string) => void;
|
|
70
|
+
/**
|
|
71
|
+
* External container context for 2-level directory structure
|
|
72
|
+
*
|
|
73
|
+
* When provided, creates 2-level structure:
|
|
74
|
+
* - JIRA: specs/JIRA-{containerId}/{projectId}/FS-XXX/
|
|
75
|
+
* - ADO: specs/ADO-{containerId}/{projectId}/FS-XXX/
|
|
76
|
+
*
|
|
77
|
+
* When NOT provided (default), creates 1-level structure:
|
|
78
|
+
* - GitHub: specs/{projectId}/FS-XXX/
|
|
79
|
+
*
|
|
80
|
+
* @example
|
|
81
|
+
* ```typescript
|
|
82
|
+
* // JIRA board-based setup
|
|
83
|
+
* externalContainer: {
|
|
84
|
+
* type: 'jira-project',
|
|
85
|
+
* containerId: 'CORE',
|
|
86
|
+
* containerName: 'Core Project',
|
|
87
|
+
* boardId: 123,
|
|
88
|
+
* boardName: 'Frontend Board'
|
|
89
|
+
* }
|
|
90
|
+
*
|
|
91
|
+
* // ADO area path setup
|
|
92
|
+
* externalContainer: {
|
|
93
|
+
* type: 'ado-project',
|
|
94
|
+
* containerId: 'MyProduct',
|
|
95
|
+
* containerName: 'My Product',
|
|
96
|
+
* areaPath: 'MyProduct\\Frontend'
|
|
97
|
+
* }
|
|
98
|
+
* ```
|
|
99
|
+
*/
|
|
100
|
+
externalContainer?: ExternalContainerContext;
|
|
60
101
|
}
|
|
61
102
|
/**
|
|
62
103
|
* Convert external items to living docs User Stories
|
|
@@ -95,6 +136,16 @@ export declare class ItemConverter {
|
|
|
95
136
|
* Allocate a feature ID for a group of items
|
|
96
137
|
*/
|
|
97
138
|
private allocateFeatureForGroup;
|
|
139
|
+
/**
|
|
140
|
+
* Get base directory for specs, handling both 1-level and 2-level structures
|
|
141
|
+
*
|
|
142
|
+
* Structure patterns:
|
|
143
|
+
* - 2-level (JIRA): specs/JIRA-{containerId}/{projectId}/
|
|
144
|
+
* - 2-level (ADO): specs/ADO-{containerId}/{projectId}/
|
|
145
|
+
* - 1-level (GitHub): specs/{projectId}/
|
|
146
|
+
* - Legacy: specs/ (no projectId)
|
|
147
|
+
*/
|
|
148
|
+
private getBaseDirectory;
|
|
98
149
|
/**
|
|
99
150
|
* Create feature folder with FEATURE.md
|
|
100
151
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"item-converter.d.ts","sourceRoot":"","sources":["../../../src/importers/item-converter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"item-converter.d.ts","sourceRoot":"","sources":["../../../src/importers/item-converter.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ import * as fs from '../utils/fs-native.js';
|
|
|
8
8
|
import path from 'path';
|
|
9
9
|
import { FSIdAllocator } from '../living-docs/fs-id-allocator.js';
|
|
10
10
|
import { DuplicateDetector } from './duplicate-detector.js';
|
|
11
|
+
import { normalizeToProjectId } from '../utils/project-id-generator.js';
|
|
11
12
|
/**
|
|
12
13
|
* Convert external items to living docs User Stories
|
|
13
14
|
*
|
|
@@ -25,7 +26,9 @@ export class ItemConverter {
|
|
|
25
26
|
// NOTE: projectId is intentionally NOT defaulted to 'default'
|
|
26
27
|
// - undefined means items go directly to specs/ (no project subfolder)
|
|
27
28
|
// - a string value means items go to specs/{projectId}/
|
|
29
|
+
// For umbrella repos, set enableGlobalCollisionDetection: true
|
|
28
30
|
autoArchiveAfterDays: 30, // Default: archive items older than 1 month
|
|
31
|
+
enableGlobalCollisionDetection: false, // Default: false for backwards compatibility
|
|
29
32
|
...options,
|
|
30
33
|
};
|
|
31
34
|
// Initialize duplicate detector if enabled
|
|
@@ -37,7 +40,8 @@ export class ItemConverter {
|
|
|
37
40
|
// Initialize FS-ID allocator if feature allocation is enabled
|
|
38
41
|
if (this.options.enableFeatureAllocation && this.options.projectRoot) {
|
|
39
42
|
// Use projectId if provided, otherwise undefined (direct to specs/)
|
|
40
|
-
|
|
43
|
+
// Enable global collision detection for umbrella/multi-repo setups
|
|
44
|
+
this.fsIdAllocator = new FSIdAllocator(this.options.projectRoot, this.options.projectId, { globalCollisionDetection: this.options.enableGlobalCollisionDetection });
|
|
41
45
|
}
|
|
42
46
|
}
|
|
43
47
|
/**
|
|
@@ -83,11 +87,10 @@ export class ItemConverter {
|
|
|
83
87
|
const shouldArchive = this.shouldAutoArchive(item.createdAt);
|
|
84
88
|
if (featureId && this.options.enableFeatureAllocation) {
|
|
85
89
|
// Feature folder structure:
|
|
86
|
-
// -
|
|
87
|
-
// -
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
: this.options.specsDir;
|
|
90
|
+
// - 2-level (JIRA/ADO): specs/{CONTAINER-type}/{projectId}/{featureId}/us-xxxe-title.md
|
|
91
|
+
// - 1-level (GitHub): specs/{projectId}/{featureId}/us-xxxe-title.md
|
|
92
|
+
// - No project: specs/{featureId}/us-xxxe-title.md (legacy)
|
|
93
|
+
const baseDir = this.getBaseDirectory();
|
|
91
94
|
const targetDir = shouldArchive
|
|
92
95
|
? path.join(baseDir, '_archive', featureId)
|
|
93
96
|
: path.join(baseDir, featureId);
|
|
@@ -95,9 +98,10 @@ export class ItemConverter {
|
|
|
95
98
|
}
|
|
96
99
|
else {
|
|
97
100
|
// Legacy: direct in specs or archive folder
|
|
101
|
+
const baseDir = this.getBaseDirectory();
|
|
98
102
|
const targetDir = shouldArchive
|
|
99
|
-
? path.join(
|
|
100
|
-
:
|
|
103
|
+
? path.join(baseDir, '_archive')
|
|
104
|
+
: baseDir;
|
|
101
105
|
filePath = path.join(targetDir, fileName);
|
|
102
106
|
}
|
|
103
107
|
// Notify callback if item was archived
|
|
@@ -228,14 +232,37 @@ export class ItemConverter {
|
|
|
228
232
|
}
|
|
229
233
|
return featureId;
|
|
230
234
|
}
|
|
235
|
+
/**
|
|
236
|
+
* Get base directory for specs, handling both 1-level and 2-level structures
|
|
237
|
+
*
|
|
238
|
+
* Structure patterns:
|
|
239
|
+
* - 2-level (JIRA): specs/JIRA-{containerId}/{projectId}/
|
|
240
|
+
* - 2-level (ADO): specs/ADO-{containerId}/{projectId}/
|
|
241
|
+
* - 1-level (GitHub): specs/{projectId}/
|
|
242
|
+
* - Legacy: specs/ (no projectId)
|
|
243
|
+
*/
|
|
244
|
+
getBaseDirectory() {
|
|
245
|
+
const container = this.options.externalContainer;
|
|
246
|
+
if (container) {
|
|
247
|
+
// 2-level structure for JIRA/ADO
|
|
248
|
+
const containerType = container.type === 'jira-project' ? 'jira' : 'ado';
|
|
249
|
+
const containerDirName = `${containerType.toUpperCase()}-${normalizeToProjectId(container.containerId)}`;
|
|
250
|
+
const projectId = this.options.projectId || 'default';
|
|
251
|
+
return path.join(this.options.specsDir, containerDirName, projectId);
|
|
252
|
+
}
|
|
253
|
+
// 1-level structure for GitHub or single-project mode
|
|
254
|
+
if (this.options.projectId) {
|
|
255
|
+
return path.join(this.options.specsDir, this.options.projectId);
|
|
256
|
+
}
|
|
257
|
+
// Legacy: direct to specs/
|
|
258
|
+
return this.options.specsDir;
|
|
259
|
+
}
|
|
231
260
|
/**
|
|
232
261
|
* Create feature folder with FEATURE.md
|
|
233
262
|
*/
|
|
234
263
|
async createFeatureFolder(featureId, firstItem, groupKey) {
|
|
235
|
-
// Use
|
|
236
|
-
const baseDir = this.
|
|
237
|
-
? path.join(this.options.specsDir, this.options.projectId)
|
|
238
|
-
: this.options.specsDir;
|
|
264
|
+
// Use 2-level or 1-level structure based on externalContainer
|
|
265
|
+
const baseDir = this.getBaseDirectory();
|
|
239
266
|
const featurePath = path.join(baseDir, featureId);
|
|
240
267
|
// Create directory
|
|
241
268
|
fs.mkdirSync(featurePath, { recursive: true });
|