specweave 1.0.342 → 1.0.344
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-github/lib/github-client-v2.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/github-client-v2.js +3 -0
- package/dist/plugins/specweave-github/lib/github-client-v2.js.map +1 -1
- package/dist/src/adapters/codex/README.md +1 -1
- package/dist/src/adapters/codex/adapter.js +1 -1
- package/dist/src/cli/commands/init.d.ts.map +1 -1
- package/dist/src/cli/commands/init.js +30 -1
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/helpers/init/index.d.ts +1 -1
- package/dist/src/cli/helpers/init/index.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/index.js +1 -1
- package/dist/src/cli/helpers/init/index.js.map +1 -1
- package/dist/src/cli/helpers/init/path-utils.d.ts +24 -1
- package/dist/src/cli/helpers/init/path-utils.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/path-utils.js +75 -0
- package/dist/src/cli/helpers/init/path-utils.js.map +1 -1
- package/dist/src/cli/helpers/init/types.d.ts +14 -0
- package/dist/src/cli/helpers/init/types.d.ts.map +1 -1
- package/dist/src/cli/workers/brownfield-worker.js +1 -1
- package/dist/src/cli/workers/living-docs-worker.js +4 -4
- package/dist/src/core/lazy-loading/llm-plugin-detector.d.ts.map +1 -1
- package/dist/src/core/lazy-loading/llm-plugin-detector.js +9 -8
- package/dist/src/core/lazy-loading/llm-plugin-detector.js.map +1 -1
- package/dist/src/core/llm/index.d.ts +2 -2
- package/dist/src/core/llm/index.js +2 -2
- package/dist/src/core/llm/provider-factory.js +3 -3
- package/dist/src/core/llm/provider-factory.js.map +1 -1
- package/dist/src/core/llm/providers/anthropic-provider.js +1 -1
- package/dist/src/core/llm/providers/anthropic-provider.js.map +1 -1
- package/dist/src/core/llm/providers/bedrock-provider.js +1 -1
- package/dist/src/core/llm/providers/bedrock-provider.js.map +1 -1
- package/dist/src/core/llm/providers/claude-code-provider.js +1 -1
- package/dist/src/core/llm/providers/openai-provider.js +1 -1
- package/dist/src/core/llm/providers/openai-provider.js.map +1 -1
- package/dist/src/core/llm/providers/vertex-ai-provider.js +2 -2
- package/dist/src/core/llm/providers/vertex-ai-provider.js.map +1 -1
- package/dist/src/core/llm/types.d.ts +7 -7
- package/dist/src/core/llm/types.d.ts.map +1 -1
- package/dist/src/core/llm/types.js +34 -34
- package/dist/src/core/llm/types.js.map +1 -1
- package/dist/src/dashboard/server/data/cost-aggregator.d.ts.map +1 -1
- package/dist/src/dashboard/server/data/cost-aggregator.js +3 -7
- package/dist/src/dashboard/server/data/cost-aggregator.js.map +1 -1
- package/dist/src/sync/base-reconciler.d.ts +3 -1
- package/dist/src/sync/base-reconciler.d.ts.map +1 -1
- package/dist/src/sync/base-reconciler.js +33 -22
- package/dist/src/sync/base-reconciler.js.map +1 -1
- package/dist/src/sync/github-reconciler.d.ts +12 -1
- package/dist/src/sync/github-reconciler.d.ts.map +1 -1
- package/dist/src/sync/github-reconciler.js +108 -90
- package/dist/src/sync/github-reconciler.js.map +1 -1
- package/dist/src/types/model-selection.d.ts +3 -3
- package/dist/src/types/model-selection.js +1 -1
- package/dist/src/utils/ascii-diagrams.d.ts +37 -0
- package/dist/src/utils/ascii-diagrams.d.ts.map +1 -0
- package/dist/src/utils/ascii-diagrams.js +294 -0
- package/dist/src/utils/ascii-diagrams.js.map +1 -0
- package/dist/src/utils/model-selection.d.ts +1 -1
- package/dist/src/utils/model-selection.js +2 -2
- package/dist/src/utils/model-selection.js.map +1 -1
- package/dist/src/utils/pricing-constants.d.ts +7 -7
- package/dist/src/utils/pricing-constants.js +5 -5
- package/dist/src/utils/pricing-constants.js.map +1 -1
- package/package.json +1 -1
- package/plugins/specweave/hooks/startup-health-check.sh +4 -56
- package/plugins/specweave/hooks/user-prompt-submit.sh +71 -34
- package/plugins/specweave/lib/vendor/sync/github-reconciler.d.ts +12 -1
- package/plugins/specweave/lib/vendor/sync/github-reconciler.js +108 -90
- package/plugins/specweave/lib/vendor/sync/github-reconciler.js.map +1 -1
- package/plugins/specweave/skills/architect/SKILL.md +56 -0
- package/plugins/specweave/skills/increment/SKILL.md +56 -0
- package/plugins/specweave/skills/plan/SKILL.md +32 -0
- package/plugins/specweave-github/lib/github-client-v2.js +3 -0
- package/plugins/specweave-github/lib/github-client-v2.ts +3 -0
|
@@ -14,23 +14,23 @@
|
|
|
14
14
|
* Model alias to full model ID mapping
|
|
15
15
|
*
|
|
16
16
|
* SINGLE SOURCE OF TRUTH for model aliases.
|
|
17
|
-
* When
|
|
17
|
+
* When providers release new models, update this mapping ONLY.
|
|
18
18
|
*
|
|
19
19
|
* Usage:
|
|
20
20
|
* - Use aliases (opus, sonnet, haiku) in AGENT.md, SKILL.md, and configs
|
|
21
|
-
* - resolveModelAlias('opus') → 'claude-opus-4-
|
|
21
|
+
* - resolveModelAlias('opus') → 'claude-opus-4-6'
|
|
22
22
|
*
|
|
23
|
-
* Updated:
|
|
23
|
+
* Updated: 2026-03-01
|
|
24
24
|
*/
|
|
25
25
|
export const MODEL_ALIASES = {
|
|
26
26
|
// Anthropic Claude aliases
|
|
27
|
-
'opus': 'claude-opus-4-
|
|
28
|
-
'sonnet': 'claude-sonnet-4-
|
|
29
|
-
'haiku': 'claude-
|
|
27
|
+
'opus': 'claude-opus-4-6',
|
|
28
|
+
'sonnet': 'claude-sonnet-4-6',
|
|
29
|
+
'haiku': 'claude-haiku-4-5-20251001',
|
|
30
30
|
// AWS Bedrock aliases (includes provider prefix)
|
|
31
|
-
'bedrock:opus': 'anthropic.claude-opus-4-
|
|
32
|
-
'bedrock:sonnet': 'anthropic.claude-
|
|
33
|
-
'bedrock:haiku': 'anthropic.claude-
|
|
31
|
+
'bedrock:opus': 'anthropic.claude-opus-4-6-v1:0',
|
|
32
|
+
'bedrock:sonnet': 'anthropic.claude-sonnet-4-6-v1:0',
|
|
33
|
+
'bedrock:haiku': 'anthropic.claude-haiku-4-5-20251001-v1:0',
|
|
34
34
|
// Cloudflare Workers AI aliases
|
|
35
35
|
'workers-ai:gpt-oss': '@cf/openai/gpt-oss-120b',
|
|
36
36
|
};
|
|
@@ -42,9 +42,9 @@ export const MODEL_ALIASES = {
|
|
|
42
42
|
* @returns Full model ID
|
|
43
43
|
*
|
|
44
44
|
* @example
|
|
45
|
-
* resolveModelAlias('opus') // → 'claude-opus-4-
|
|
46
|
-
* resolveModelAlias('opus', 'bedrock') // → 'anthropic.claude-opus-4-
|
|
47
|
-
* resolveModelAlias('claude-opus-4-
|
|
45
|
+
* resolveModelAlias('opus') // → 'claude-opus-4-6'
|
|
46
|
+
* resolveModelAlias('opus', 'bedrock') // → 'anthropic.claude-opus-4-6-v1:0'
|
|
47
|
+
* resolveModelAlias('claude-opus-4-6') // → 'claude-opus-4-6' (passthrough)
|
|
48
48
|
*/
|
|
49
49
|
export function resolveModelAlias(modelOrAlias, provider) {
|
|
50
50
|
// Check provider-specific alias first
|
|
@@ -63,24 +63,24 @@ export function resolveModelAlias(modelOrAlias, provider) {
|
|
|
63
63
|
}
|
|
64
64
|
/**
|
|
65
65
|
* Default pricing for known models (USD per 1M tokens)
|
|
66
|
-
* Updated:
|
|
66
|
+
* Updated: 2026-03-01
|
|
67
67
|
*/
|
|
68
68
|
export const MODEL_PRICING = {
|
|
69
69
|
// Anthropic (use full IDs for API calls, aliases for display)
|
|
70
|
-
'claude-opus-4-
|
|
71
|
-
'claude-sonnet-4-
|
|
72
|
-
'claude-
|
|
73
|
-
'claude-3-5-haiku-20241022': { inputPer1M: 1, outputPer1M: 5 },
|
|
70
|
+
'claude-opus-4-6': { inputPer1M: 5, outputPer1M: 25 },
|
|
71
|
+
'claude-sonnet-4-6': { inputPer1M: 3, outputPer1M: 15 },
|
|
72
|
+
'claude-haiku-4-5-20251001': { inputPer1M: 1, outputPer1M: 5 },
|
|
74
73
|
// Aliases pointing to same pricing
|
|
75
|
-
'opus': { inputPer1M:
|
|
74
|
+
'opus': { inputPer1M: 5, outputPer1M: 25 },
|
|
76
75
|
'sonnet': { inputPer1M: 3, outputPer1M: 15 },
|
|
77
76
|
'haiku': { inputPer1M: 1, outputPer1M: 5 },
|
|
78
77
|
// OpenAI
|
|
79
|
-
'gpt-
|
|
80
|
-
'gpt-
|
|
81
|
-
'
|
|
82
|
-
|
|
83
|
-
'
|
|
78
|
+
'gpt-5.3': { inputPer1M: 5, outputPer1M: 15 },
|
|
79
|
+
'gpt-5.3-mini': { inputPer1M: 0.15, outputPer1M: 0.6 },
|
|
80
|
+
'o3-mini': { inputPer1M: 3, outputPer1M: 12 },
|
|
81
|
+
// Google
|
|
82
|
+
'gemini-3-pro': { inputPer1M: 1.25, outputPer1M: 5 },
|
|
83
|
+
'gemini-3-flash': { inputPer1M: 0.075, outputPer1M: 0.3 },
|
|
84
84
|
// Local (free)
|
|
85
85
|
'ollama/*': { inputPer1M: 0, outputPer1M: 0 },
|
|
86
86
|
// Cloudflare Workers AI
|
|
@@ -92,24 +92,24 @@ export const MODEL_PRICING = {
|
|
|
92
92
|
export const RECOMMENDED_MODELS = {
|
|
93
93
|
// Deep analysis - needs reasoning
|
|
94
94
|
'deep-analysis': {
|
|
95
|
-
'claude-code': 'opus', // Uses MAX subscription via CLI - Opus 4.
|
|
96
|
-
'anthropic': 'claude-sonnet-4-
|
|
97
|
-
'openai': 'gpt-
|
|
98
|
-
'azure-openai': 'gpt-
|
|
99
|
-
'bedrock': 'anthropic.claude-
|
|
95
|
+
'claude-code': 'opus', // Uses MAX subscription via CLI - Opus 4.6 for best quality
|
|
96
|
+
'anthropic': 'claude-sonnet-4-6',
|
|
97
|
+
'openai': 'gpt-5.3',
|
|
98
|
+
'azure-openai': 'gpt-5.3',
|
|
99
|
+
'bedrock': 'anthropic.claude-sonnet-4-6-v1:0',
|
|
100
100
|
'ollama': 'llama3.1:70b',
|
|
101
|
-
'vertex-ai': 'gemini-
|
|
101
|
+
'vertex-ai': 'gemini-3-pro',
|
|
102
102
|
'workers-ai': '@cf/openai/gpt-oss-120b',
|
|
103
103
|
},
|
|
104
104
|
// Quick tasks - cost-effective
|
|
105
105
|
'quick-task': {
|
|
106
106
|
'claude-code': 'haiku', // Uses MAX subscription via CLI
|
|
107
|
-
'anthropic': 'claude-
|
|
108
|
-
'openai': 'gpt-
|
|
109
|
-
'azure-openai': 'gpt-
|
|
110
|
-
'bedrock': 'anthropic.claude-
|
|
107
|
+
'anthropic': 'claude-haiku-4-5-20251001',
|
|
108
|
+
'openai': 'gpt-5.3-mini',
|
|
109
|
+
'azure-openai': 'gpt-5.3-mini',
|
|
110
|
+
'bedrock': 'anthropic.claude-haiku-4-5-20251001-v1:0',
|
|
111
111
|
'ollama': 'llama3.1:8b',
|
|
112
|
-
'vertex-ai': 'gemini-
|
|
112
|
+
'vertex-ai': 'gemini-3-flash',
|
|
113
113
|
'workers-ai': '@cf/openai/gpt-oss-120b',
|
|
114
114
|
},
|
|
115
115
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/core/llm/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAwPH;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,aAAa,GAA2B;IACnD,2BAA2B;IAC3B,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/core/llm/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cost-aggregator.d.ts","sourceRoot":"","sources":["../../../../../src/dashboard/server/data/cost-aggregator.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,KAAK,GAAG,cAAc,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnF,cAAc,EAAE,cAAc,CAAC;CAChC;
|
|
1
|
+
{"version":3,"file":"cost-aggregator.d.ts","sourceRoot":"","sources":["../../../../../src/dashboard/server/data/cost-aggregator.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,KAAK,GAAG,cAAc,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,mBAAmB,EAAE,CAAC;IAChC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnF,cAAc,EAAE,cAAc,CAAC;CAChC;AAiBD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3D;AAwBD,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAS;IAEvB,0DAA0D;IAC1D,OAAO,CAAC,SAAS,CAAqC;IAEtD,yEAAyE;IACzE,OAAO,CAAC,aAAa,CAAoC;IACzD,OAAO,CAAC,iBAAiB,CAAM;gBAEnB,WAAW,EAAE,MAAM;IAKzB,iBAAiB,CAAC,KAAK,SAAM,EAAE,aAAa,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,mBAAmB,CAAC;YA6FnH,wBAAwB;IAqEtC,kFAAkF;IAClF,OAAO,CAAC,wBAAwB;CAmBjC"}
|
|
@@ -1,19 +1,17 @@
|
|
|
1
1
|
import * as fs from 'fs';
|
|
2
2
|
import * as path from 'path';
|
|
3
3
|
import * as readline from 'readline';
|
|
4
|
-
// Pricing per million tokens — official Anthropic rates (
|
|
4
|
+
// Pricing per million tokens — official Anthropic rates (Mar 2026)
|
|
5
5
|
// Source: https://platform.claude.com/docs/en/about-claude/pricing
|
|
6
6
|
const PRICING = {
|
|
7
7
|
'claude-opus-4-6': { input: 5, output: 25, cacheWrite: 6.25, cacheRead: 0.50 },
|
|
8
8
|
'claude-sonnet-4-6': { input: 3, output: 15, cacheWrite: 3.75, cacheRead: 0.30 },
|
|
9
|
-
'claude-sonnet-4-5-20250929': { input: 3, output: 15, cacheWrite: 3.75, cacheRead: 0.30 },
|
|
10
9
|
'claude-haiku-4-5-20251001': { input: 1, output: 5, cacheWrite: 1.25, cacheRead: 0.10 },
|
|
11
10
|
};
|
|
12
11
|
// Friendly display names for model IDs
|
|
13
12
|
const MODEL_DISPLAY_NAMES = {
|
|
14
13
|
'claude-opus-4-6': 'Opus 4.6',
|
|
15
14
|
'claude-sonnet-4-6': 'Sonnet 4.6',
|
|
16
|
-
'claude-sonnet-4-5-20250929': 'Sonnet 4.5',
|
|
17
15
|
'claude-haiku-4-5-20251001': 'Haiku 4.5',
|
|
18
16
|
};
|
|
19
17
|
export function getModelDisplayName(modelId) {
|
|
@@ -29,16 +27,14 @@ function resolveModel(raw) {
|
|
|
29
27
|
return raw;
|
|
30
28
|
if (raw.includes('opus'))
|
|
31
29
|
return 'claude-opus-4-6';
|
|
32
|
-
if (raw.includes('sonnet-4-6'))
|
|
33
|
-
return 'claude-sonnet-4-6';
|
|
34
30
|
if (raw.includes('sonnet'))
|
|
35
|
-
return 'claude-sonnet-4-
|
|
31
|
+
return 'claude-sonnet-4-6';
|
|
36
32
|
if (raw.includes('haiku'))
|
|
37
33
|
return 'claude-haiku-4-5-20251001';
|
|
38
34
|
return raw;
|
|
39
35
|
}
|
|
40
36
|
function getPricing(model) {
|
|
41
|
-
return PRICING[model] || PRICING[resolveModel(model)] || PRICING['claude-sonnet-4-
|
|
37
|
+
return PRICING[model] || PRICING[resolveModel(model)] || PRICING['claude-sonnet-4-6'];
|
|
42
38
|
}
|
|
43
39
|
export class CostAggregator {
|
|
44
40
|
constructor(projectRoot) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cost-aggregator.js","sourceRoot":"","sources":["../../../../../src/dashboard/server/data/cost-aggregator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC;AA8BrC,mEAAmE;AACnE,mEAAmE;AACnE,MAAM,OAAO,GAA6F;IACxG,iBAAiB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE;IAC9E,mBAAmB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE;IAChF,
|
|
1
|
+
{"version":3,"file":"cost-aggregator.js","sourceRoot":"","sources":["../../../../../src/dashboard/server/data/cost-aggregator.ts"],"names":[],"mappings":"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"}
|
|
@@ -61,7 +61,9 @@ export declare abstract class BaseReconciler<TState extends BaseIncrementState,
|
|
|
61
61
|
*/
|
|
62
62
|
protected reconcileIncrement(inc: TState, result: TResult): Promise<void>;
|
|
63
63
|
/**
|
|
64
|
-
* Scan increments directory
|
|
64
|
+
* Scan increments directory including archived/abandoned increments.
|
|
65
|
+
* All increments with external links are included so the reconciler can
|
|
66
|
+
* close issues for completed/abandoned increments that were moved to _archive.
|
|
65
67
|
*/
|
|
66
68
|
protected scanIncrements(): Promise<TState[]>;
|
|
67
69
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-reconciler.d.ts","sourceRoot":"","sources":["../../../src/sync/base-reconciler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,EAAE,MAAM,EAAiB,MAAM,oBAAoB,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;;;;;;GASG;AACH,8BAAsB,cAAc,CAClC,MAAM,SAAS,kBAAkB,EACjC,OAAO,SAAS,mBAAmB;IAEnC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEb,OAAO,EAAE,oBAAoB;IAMzC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IA0CnC;;OAEG;cACa,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,IAAI,CAAC;IAehB
|
|
1
|
+
{"version":3,"file":"base-reconciler.d.ts","sourceRoot":"","sources":["../../../src/sync/base-reconciler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,EAAE,MAAM,EAAiB,MAAM,oBAAoB,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;;;;;;;;GASG;AACH,8BAAsB,cAAc,CAClC,MAAM,SAAS,kBAAkB,EACjC,OAAO,SAAS,mBAAmB;IAEnC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC;IAC9B,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEb,OAAO,EAAE,oBAAoB;IAMzC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,OAAO,CAAC;IA0CnC;;OAEG;cACa,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,IAAI,CAAC;IAehB;;;;OAIG;cACa,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IA8CnD;;OAEG;cACa,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAW9D;;OAEG;IACH,SAAS,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAoB7C;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,WAAW,IAAI,MAAM;IAExC;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,cAAc,IAAI,MAAM;IAE3C;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,gBAAgB,IAAI,MAAM;IAE7C;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,iBAAiB,IAAI,OAAO;IAE/C;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO;IAE1E;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,eAAe,IAAI,IAAI;IAE1C;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC;IAEvD;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,6BAA6B,IAAI,MAAM;IAE1D;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,qBAAqB,CACtC,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAEzB;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,uBAAuB,CACxC,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,OAAO,EACvB,YAAY,EAAE,OAAO,EACrB,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,IAAI,CAAC;CACjB"}
|
|
@@ -81,7 +81,9 @@ export class BaseReconciler {
|
|
|
81
81
|
await this.reconcileIncrementItems(inc, shouldBeClosed, shouldBeOpen, status, result);
|
|
82
82
|
}
|
|
83
83
|
/**
|
|
84
|
-
* Scan increments directory
|
|
84
|
+
* Scan increments directory including archived/abandoned increments.
|
|
85
|
+
* All increments with external links are included so the reconciler can
|
|
86
|
+
* close issues for completed/abandoned increments that were moved to _archive.
|
|
85
87
|
*/
|
|
86
88
|
async scanIncrements() {
|
|
87
89
|
const incrementsPath = path.join(this.projectRoot, '.specweave', 'increments');
|
|
@@ -89,28 +91,37 @@ export class BaseReconciler {
|
|
|
89
91
|
if (!existsSync(incrementsPath)) {
|
|
90
92
|
return results;
|
|
91
93
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
if (
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
const
|
|
107
|
-
|
|
108
|
-
|
|
94
|
+
// Scan active increments + archive + abandoned subdirectories
|
|
95
|
+
const dirsToScan = [incrementsPath];
|
|
96
|
+
for (const sub of ['_archive', '_abandoned']) {
|
|
97
|
+
const subPath = path.join(incrementsPath, sub);
|
|
98
|
+
if (existsSync(subPath))
|
|
99
|
+
dirsToScan.push(subPath);
|
|
100
|
+
}
|
|
101
|
+
for (const dir of dirsToScan) {
|
|
102
|
+
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
103
|
+
for (const entry of entries) {
|
|
104
|
+
if (!entry.isDirectory())
|
|
105
|
+
continue;
|
|
106
|
+
if (entry.name.startsWith('_') || entry.name.startsWith('.'))
|
|
107
|
+
continue;
|
|
108
|
+
const incrementPath = path.join(dir, entry.name);
|
|
109
|
+
const metadataPath = path.join(incrementPath, 'metadata.json');
|
|
110
|
+
if (!existsSync(metadataPath))
|
|
111
|
+
continue;
|
|
112
|
+
try {
|
|
113
|
+
const metadataContent = await fs.readFile(metadataPath, 'utf-8');
|
|
114
|
+
const metadata = JSON.parse(metadataContent);
|
|
115
|
+
// Delegate to subclass to extract platform-specific state
|
|
116
|
+
const state = await this.extractIncrementState(entry.name, incrementPath, metadata);
|
|
117
|
+
if (state) {
|
|
118
|
+
results.push(state);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
// Skip invalid metadata
|
|
123
|
+
this.logger.log(` ⚠️ Skipping ${entry.name}: Invalid metadata.json`);
|
|
109
124
|
}
|
|
110
|
-
}
|
|
111
|
-
catch {
|
|
112
|
-
// Skip invalid metadata
|
|
113
|
-
this.logger.log(` ⚠️ Skipping ${entry.name}: Invalid metadata.json`);
|
|
114
125
|
}
|
|
115
126
|
}
|
|
116
127
|
return results;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-reconciler.js","sourceRoot":"","sources":["../../../src/sync/base-reconciler.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"base-reconciler.js","sourceRoot":"","sources":["../../../src/sync/base-reconciler.ts"],"names":[],"mappings":"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"}
|
|
@@ -64,9 +64,20 @@ export declare class GitHubReconciler {
|
|
|
64
64
|
*/
|
|
65
65
|
private reconcileIssue;
|
|
66
66
|
/**
|
|
67
|
-
* Scan all
|
|
67
|
+
* Scan all increments (active + archived + abandoned) and extract GitHub state.
|
|
68
|
+
* Archived/abandoned increments are included so the reconciler can close their
|
|
69
|
+
* stale open issues.
|
|
68
70
|
*/
|
|
69
71
|
private scanIncrements;
|
|
72
|
+
/**
|
|
73
|
+
* Extract GitHub state from increment metadata (both old and new formats)
|
|
74
|
+
*/
|
|
75
|
+
private extractGitHubState;
|
|
76
|
+
/**
|
|
77
|
+
* Fallback: search GitHub API for issues when metadata has no references.
|
|
78
|
+
* Only used for active (non-archived) increments to avoid excessive API calls.
|
|
79
|
+
*/
|
|
80
|
+
private searchGitHubForIssues;
|
|
70
81
|
/**
|
|
71
82
|
* Initialize GitHub client
|
|
72
83
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github-reconciler.d.ts","sourceRoot":"","sources":["../../../src/sync/github-reconciler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;
|
|
1
|
+
{"version":3,"file":"github-reconciler.d.ts","sourceRoot":"","sources":["../../../src/sync/github-reconciler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,EAAE,MAAM,EAAiB,MAAM,oBAAoB,CAAC;AAI3D,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE;QACV,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;IACF,eAAe,EAAE,KAAK,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,KAAK,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;QAC9C,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;CACJ;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,WAAW,CAAoB;gBAE3B,OAAO,EAAE,gBAAgB;IAMrC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,eAAe,CAAC;IAqE3C;;OAEG;YACW,kBAAkB;IAmChC;;OAEG;YACW,cAAc;IA6F5B;;;;OAIG;YACW,cAAc;IAqD5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA0D1B;;;OAGG;YACW,qBAAqB;IAwBnC;;;;;;OAMG;YACW,UAAU;IAiBxB;;OAEG;YACW,UAAU;IAiBxB;;;OAGG;mBACkB,eAAe;IAsBpC;;;OAGG;WACU,qBAAqB,CAChC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IA6ElD;;;OAGG;WACU,6BAA6B,CACxC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IA6EhD;;;;;;;;;;;;OAYG;WACU,6BAA6B,CACxC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC,GACxC,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;CAyH1E"}
|
|
@@ -186,7 +186,9 @@ This typically happens when:
|
|
|
186
186
|
}
|
|
187
187
|
}
|
|
188
188
|
/**
|
|
189
|
-
* Scan all
|
|
189
|
+
* Scan all increments (active + archived + abandoned) and extract GitHub state.
|
|
190
|
+
* Archived/abandoned increments are included so the reconciler can close their
|
|
191
|
+
* stale open issues.
|
|
190
192
|
*/
|
|
191
193
|
async scanIncrements() {
|
|
192
194
|
const incrementsDir = path.join(this.projectRoot, '.specweave/increments');
|
|
@@ -194,106 +196,122 @@ This typically happens when:
|
|
|
194
196
|
if (!existsSync(incrementsDir)) {
|
|
195
197
|
return results;
|
|
196
198
|
}
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
const state = {
|
|
211
|
-
incrementId: entry.name,
|
|
212
|
-
incrementPath,
|
|
213
|
-
metadataStatus: metadata.status || 'unknown',
|
|
214
|
-
featureId: metadata.feature_id,
|
|
215
|
-
userStoryIssues: [],
|
|
216
|
-
};
|
|
217
|
-
// Extract main issue
|
|
218
|
-
if (metadata.github?.issue) {
|
|
219
|
-
state.mainIssue = {
|
|
220
|
-
number: metadata.github.issue,
|
|
221
|
-
url: metadata.github.url,
|
|
222
|
-
};
|
|
199
|
+
// Collect all directories to scan: active + archive + abandoned
|
|
200
|
+
const dirsToScan = [incrementsDir];
|
|
201
|
+
for (const sub of ['_archive', '_abandoned']) {
|
|
202
|
+
const subPath = path.join(incrementsDir, sub);
|
|
203
|
+
if (existsSync(subPath))
|
|
204
|
+
dirsToScan.push(subPath);
|
|
205
|
+
}
|
|
206
|
+
for (const dir of dirsToScan) {
|
|
207
|
+
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
208
|
+
const isArchiveDir = dir !== incrementsDir;
|
|
209
|
+
for (const entry of entries) {
|
|
210
|
+
if (!entry.isDirectory() || entry.name.startsWith('_') || entry.name.startsWith('.')) {
|
|
211
|
+
continue;
|
|
223
212
|
}
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
state.userStoryIssues.push({
|
|
229
|
-
userStoryId: issue.userStory,
|
|
230
|
-
issueNumber: issue.number,
|
|
231
|
-
});
|
|
232
|
-
}
|
|
233
|
-
}
|
|
213
|
+
const incrementPath = path.join(dir, entry.name);
|
|
214
|
+
const metadataPath = path.join(incrementPath, 'metadata.json');
|
|
215
|
+
if (!existsSync(metadataPath)) {
|
|
216
|
+
continue;
|
|
234
217
|
}
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
userStoryId: usId,
|
|
243
|
-
issueNumber: issueData.issueNumber,
|
|
244
|
-
});
|
|
245
|
-
}
|
|
218
|
+
try {
|
|
219
|
+
const metadata = JSON.parse(await fs.readFile(metadataPath, 'utf-8'));
|
|
220
|
+
const state = this.extractGitHubState(entry.name, incrementPath, metadata);
|
|
221
|
+
// For archived increments, skip the expensive GitHub API search fallback —
|
|
222
|
+
// only use metadata-based issue references (they're already stored)
|
|
223
|
+
if (!isArchiveDir && state.userStoryIssues.length === 0 && state.featureId && this.client) {
|
|
224
|
+
await this.searchGitHubForIssues(state);
|
|
246
225
|
}
|
|
247
|
-
if (state.userStoryIssues.length > 0) {
|
|
248
|
-
|
|
226
|
+
if (state.mainIssue || state.userStoryIssues.length > 0) {
|
|
227
|
+
results.push(state);
|
|
249
228
|
}
|
|
250
229
|
}
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
try {
|
|
254
|
-
state.featureId = deriveFeatureId(entry.name) || undefined;
|
|
255
|
-
}
|
|
256
|
-
catch {
|
|
257
|
-
// Non-critical: featureId derivation may fail for non-standard names
|
|
258
|
-
}
|
|
230
|
+
catch (error) {
|
|
231
|
+
this.logger.log(` ⚠️ Skipping ${entry.name}: Invalid metadata.json`);
|
|
259
232
|
}
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
return results;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Extract GitHub state from increment metadata (both old and new formats)
|
|
239
|
+
*/
|
|
240
|
+
extractGitHubState(incrementId, incrementPath, metadata) {
|
|
241
|
+
const state = {
|
|
242
|
+
incrementId,
|
|
243
|
+
incrementPath,
|
|
244
|
+
metadataStatus: metadata.status || 'unknown',
|
|
245
|
+
featureId: metadata.feature_id,
|
|
246
|
+
userStoryIssues: [],
|
|
247
|
+
};
|
|
248
|
+
// Extract main issue
|
|
249
|
+
if (metadata.github?.issue) {
|
|
250
|
+
state.mainIssue = {
|
|
251
|
+
number: metadata.github.issue,
|
|
252
|
+
url: metadata.github.url,
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
// OLD format: metadata.github.issues[]
|
|
256
|
+
if (metadata.github?.issues && Array.isArray(metadata.github.issues)) {
|
|
257
|
+
for (const issue of metadata.github.issues) {
|
|
258
|
+
if (issue.userStory && issue.number) {
|
|
259
|
+
state.userStoryIssues.push({
|
|
260
|
+
userStoryId: issue.userStory,
|
|
261
|
+
issueNumber: issue.number,
|
|
262
|
+
});
|
|
285
263
|
}
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
// NEW format: externalLinks.github.issues{} (keyed by US-ID)
|
|
267
|
+
if (state.userStoryIssues.length === 0 && metadata.externalLinks?.github?.issues) {
|
|
268
|
+
const newFormatIssues = metadata.externalLinks.github.issues;
|
|
269
|
+
for (const [usId, issueData] of Object.entries(newFormatIssues)) {
|
|
270
|
+
if (issueData && typeof issueData === 'object' && 'issueNumber' in issueData) {
|
|
271
|
+
state.userStoryIssues.push({
|
|
272
|
+
userStoryId: usId,
|
|
273
|
+
issueNumber: issueData.issueNumber,
|
|
274
|
+
});
|
|
289
275
|
}
|
|
290
276
|
}
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
277
|
+
}
|
|
278
|
+
// Auto-derive featureId when metadata.feature_id is null
|
|
279
|
+
if (!state.featureId) {
|
|
280
|
+
try {
|
|
281
|
+
state.featureId = deriveFeatureId(incrementId) || undefined;
|
|
282
|
+
}
|
|
283
|
+
catch {
|
|
284
|
+
// Non-critical
|
|
294
285
|
}
|
|
295
286
|
}
|
|
296
|
-
return
|
|
287
|
+
return state;
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Fallback: search GitHub API for issues when metadata has no references.
|
|
291
|
+
* Only used for active (non-archived) increments to avoid excessive API calls.
|
|
292
|
+
*/
|
|
293
|
+
async searchGitHubForIssues(state) {
|
|
294
|
+
if (!state.featureId || !this.client)
|
|
295
|
+
return;
|
|
296
|
+
this.logger.log(` 🔍 Searching GitHub for ${state.featureId} issues (not in metadata)...`);
|
|
297
|
+
try {
|
|
298
|
+
const foundIssues = await this.client.searchIssuesByFeature(state.featureId);
|
|
299
|
+
for (const issue of foundIssues) {
|
|
300
|
+
const match = issue.title.match(/\[([A-Z]+-\d+)\]\[([A-Z]+-\d+)\]/);
|
|
301
|
+
if (match && match[1] === state.featureId) {
|
|
302
|
+
state.userStoryIssues.push({
|
|
303
|
+
userStoryId: match[2],
|
|
304
|
+
issueNumber: issue.number,
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
if (state.userStoryIssues.length > 0) {
|
|
309
|
+
this.logger.log(` Found ${state.userStoryIssues.length} issue(s) via GitHub search`);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
catch (error) {
|
|
313
|
+
this.logger.log(` ⚠️ GitHub search failed: ${error.message}`);
|
|
314
|
+
}
|
|
297
315
|
}
|
|
298
316
|
/**
|
|
299
317
|
* Initialize GitHub client
|