specweave 0.23.16 → 0.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +93 -38
- package/CLAUDE.md +159 -11
- package/dist/plugins/specweave-github/lib/github-spec-content-sync.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/github-spec-content-sync.js +57 -0
- package/dist/plugins/specweave-github/lib/github-spec-content-sync.js.map +1 -1
- package/dist/src/cli/commands/sync-spec-content.js +3 -0
- package/dist/src/cli/commands/sync-spec-content.js.map +1 -1
- package/dist/src/cli/helpers/ado-area-path-mapper.d.ts +89 -0
- package/dist/src/cli/helpers/ado-area-path-mapper.d.ts.map +1 -0
- package/dist/src/cli/helpers/ado-area-path-mapper.js +213 -0
- package/dist/src/cli/helpers/ado-area-path-mapper.js.map +1 -0
- package/dist/src/cli/helpers/issue-tracker/ado-auto-discover.d.ts +29 -0
- package/dist/src/cli/helpers/issue-tracker/ado-auto-discover.d.ts.map +1 -0
- package/dist/src/cli/helpers/issue-tracker/ado-auto-discover.js +109 -0
- package/dist/src/cli/helpers/issue-tracker/ado-auto-discover.js.map +1 -0
- package/dist/src/cli/helpers/issue-tracker/ado.d.ts +1 -0
- package/dist/src/cli/helpers/issue-tracker/ado.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/ado.js +2 -0
- package/dist/src/cli/helpers/issue-tracker/ado.js.map +1 -1
- package/dist/src/cli/helpers/smart-filter.d.ts +83 -0
- package/dist/src/cli/helpers/smart-filter.d.ts.map +1 -0
- package/dist/src/cli/helpers/smart-filter.js +265 -0
- package/dist/src/cli/helpers/smart-filter.js.map +1 -0
- package/dist/src/core/progress/progress-tracker.d.ts +4 -1
- package/dist/src/core/progress/progress-tracker.d.ts.map +1 -1
- package/dist/src/core/progress/progress-tracker.js +33 -4
- package/dist/src/core/progress/progress-tracker.js.map +1 -1
- package/dist/src/core/qa/quality-gate-decider.d.ts +1 -1
- package/dist/src/core/qa/quality-gate-decider.js +2 -2
- package/dist/src/core/qa/quality-gate-decider.js.map +1 -1
- package/dist/src/core/qa/risk-calculator.d.ts +2 -2
- package/dist/src/core/qa/risk-calculator.js +2 -2
- package/dist/src/core/spec-content-sync.d.ts +1 -1
- package/dist/src/core/spec-content-sync.d.ts.map +1 -1
- package/dist/src/core/validators/ac-presence-validator.d.ts +56 -0
- package/dist/src/core/validators/ac-presence-validator.d.ts.map +1 -0
- package/dist/src/core/validators/ac-presence-validator.js +149 -0
- package/dist/src/core/validators/ac-presence-validator.js.map +1 -0
- package/dist/src/integrations/ado/ado-dependency-loader.d.ts +1 -1
- package/dist/src/integrations/ado/ado-dependency-loader.d.ts.map +1 -1
- package/dist/src/integrations/ado/ado-dependency-loader.js +39 -7
- package/dist/src/integrations/ado/ado-dependency-loader.js.map +1 -1
- package/dist/src/integrations/ado/area-path-mapper.d.ts +137 -0
- package/dist/src/integrations/ado/area-path-mapper.d.ts.map +1 -0
- package/dist/src/integrations/ado/area-path-mapper.js +267 -0
- package/dist/src/integrations/ado/area-path-mapper.js.map +1 -0
- package/dist/src/integrations/jira/filter-processor.d.ts +126 -0
- package/dist/src/integrations/jira/filter-processor.d.ts.map +1 -0
- package/dist/src/integrations/jira/filter-processor.js +207 -0
- package/dist/src/integrations/jira/filter-processor.js.map +1 -0
- package/dist/src/integrations/jira/jira-client.d.ts +13 -0
- package/dist/src/integrations/jira/jira-client.d.ts.map +1 -1
- package/dist/src/integrations/jira/jira-client.js +33 -0
- package/dist/src/integrations/jira/jira-client.js.map +1 -1
- package/dist/src/utils/ac-embedder.d.ts +63 -0
- package/dist/src/utils/ac-embedder.d.ts.map +1 -0
- package/dist/src/utils/ac-embedder.js +217 -0
- package/dist/src/utils/ac-embedder.js.map +1 -0
- package/dist/src/utils/env-manager.d.ts +86 -0
- package/dist/src/utils/env-manager.d.ts.map +1 -0
- package/dist/src/utils/env-manager.js +188 -0
- package/dist/src/utils/env-manager.js.map +1 -0
- package/package.json +1 -1
- package/plugins/specweave/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave/agents/AGENTS-INDEX.md +1 -1
- package/plugins/specweave/agents/increment-quality-judge-v2/AGENT.md +9 -9
- package/plugins/specweave/commands/specweave-do.md +37 -0
- package/plugins/specweave/commands/specweave-done.md +159 -0
- package/plugins/specweave/commands/specweave-embed-acs.md +446 -0
- package/plugins/specweave/commands/specweave-next.md +148 -3
- package/plugins/specweave/commands/specweave-qa.md +2 -2
- package/plugins/specweave/hooks/lib/migrate-increment-work.sh +1 -1
- package/plugins/specweave/hooks/lib/migrate-increment-work.sh.bak +245 -0
- package/plugins/specweave/hooks/lib/sync-spec-content.sh +2 -2
- package/plugins/specweave/hooks/lib/sync-spec-content.sh.bak +149 -0
- package/plugins/specweave/hooks/lib/update-status-line.sh +34 -4
- package/plugins/specweave/hooks/lib/validate-spec-status.sh +1 -1
- package/plugins/specweave/hooks/lib/validate-spec-status.sh.bak +163 -0
- package/plugins/specweave/hooks/post-first-increment.sh +1 -1
- package/plugins/specweave/hooks/post-first-increment.sh.bak +61 -0
- package/plugins/specweave/hooks/post-spec-update.sh +1 -1
- package/plugins/specweave/hooks/post-spec-update.sh.bak +158 -0
- package/plugins/specweave/hooks/post-user-story-complete.sh +1 -1
- package/plugins/specweave/hooks/post-user-story-complete.sh.bak +179 -0
- package/plugins/specweave/hooks/pre-command-deduplication.sh +1 -1
- package/plugins/specweave/hooks/pre-command-deduplication.sh.bak +83 -0
- package/plugins/specweave/hooks/pre-increment-start.sh +168 -0
- package/plugins/specweave/hooks/user-prompt-submit.sh +1 -1
- package/plugins/specweave/hooks/user-prompt-submit.sh.bak +386 -0
- package/plugins/specweave/skills/SKILLS-INDEX.md +1 -1
- package/plugins/specweave/skills/specweave-framework/SKILL.md +1 -1
- package/plugins/specweave-ado/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-ado/agents/ado-manager/AGENT.md +23 -0
- package/plugins/specweave-ado/agents/ado-multi-project-mapper/AGENT.md +23 -0
- package/plugins/specweave-ado/agents/ado-sync-judge/AGENT.md +23 -0
- package/plugins/specweave-ado/commands/specweave-ado-import-projects.md +331 -0
- package/plugins/specweave-alternatives/.claude-plugin/plugin.json +10 -0
- package/plugins/specweave-alternatives/commands/alternatives-analyze.md +336 -0
- package/plugins/specweave-alternatives/skills/architecture-alternatives/SKILL.md +651 -0
- package/plugins/specweave-alternatives/skills/bmad-method/SKILL.md +420 -0
- package/plugins/specweave-alternatives/skills/spec-kit-expert/SKILL.md +487 -0
- package/plugins/specweave-backend/agents/database-optimizer/AGENT.md +23 -0
- package/plugins/specweave-backend/commands/api-scaffold.md +80 -0
- package/plugins/specweave-backend/commands/crud-generate.md +109 -0
- package/plugins/specweave-backend/commands/migration-generate.md +139 -0
- package/plugins/specweave-confluent/agents/confluent-architect/AGENT.md +23 -0
- package/plugins/specweave-confluent/commands/connector-deploy.md +154 -0
- package/plugins/specweave-confluent/commands/ksqldb-query.md +179 -0
- package/plugins/specweave-confluent/commands/schema-register.md +123 -0
- package/plugins/specweave-core/.claude-plugin/plugin.json +21 -0
- package/plugins/specweave-core/commands/architecture-review.md +288 -0
- package/plugins/specweave-core/commands/code-review.md +213 -0
- package/plugins/specweave-core/commands/refactor-plan.md +249 -0
- package/plugins/specweave-core/skills/code-quality/SKILL.md +157 -0
- package/plugins/specweave-core/skills/design-patterns/SKILL.md +244 -0
- package/plugins/specweave-core/skills/software-architecture/SKILL.md +83 -0
- package/plugins/specweave-cost-optimizer/.claude-plugin/plugin.json +22 -0
- package/plugins/specweave-cost-optimizer/commands/cost-analyze.md +360 -0
- package/plugins/specweave-cost-optimizer/commands/cost-optimize.md +480 -0
- package/plugins/specweave-cost-optimizer/skills/aws-cost-expert/SKILL.md +416 -0
- package/plugins/specweave-cost-optimizer/skills/cloud-pricing/SKILL.md +325 -0
- package/plugins/specweave-cost-optimizer/skills/cost-optimization/SKILL.md +337 -0
- package/plugins/specweave-diagrams/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-diagrams/agents/diagrams-architect/AGENT.md +23 -0
- package/plugins/specweave-diagrams/commands/diagrams-generate.md +168 -0
- package/plugins/specweave-docs/.claude-plugin/plugin.json +10 -0
- package/plugins/specweave-docs/commands/docs-generate.md +441 -0
- package/plugins/specweave-docs/commands/docs-init.md +334 -0
- package/plugins/specweave-docs/skills/docusaurus/SKILL.md +581 -0
- package/plugins/specweave-docs/skills/spec-driven-brainstorming/SKILL.md +689 -0
- package/plugins/specweave-docs/skills/technical-writing/SKILL.md +1039 -0
- package/plugins/specweave-docs-preview/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-figma/.claude-plugin/plugin.json +23 -0
- package/plugins/specweave-figma/commands/figma-import.md +690 -0
- package/plugins/specweave-figma/commands/figma-to-react.md +834 -0
- package/plugins/specweave-figma/commands/figma-tokens.md +815 -0
- package/plugins/specweave-frontend/.claude-plugin/plugin.json +21 -0
- package/plugins/specweave-frontend/agents/frontend-architect/AGENT.md +387 -0
- package/plugins/specweave-frontend/agents/frontend-architect/README.md +385 -0
- package/plugins/specweave-frontend/agents/frontend-architect/examples.md +590 -0
- package/plugins/specweave-frontend/agents/frontend-architect/templates/component-template.tsx +152 -0
- package/plugins/specweave-frontend/agents/frontend-architect/templates/hook-template.ts +311 -0
- package/plugins/specweave-frontend/agents/frontend-architect/templates/page-template.tsx +228 -0
- package/plugins/specweave-frontend/commands/component-generate.md +510 -0
- package/plugins/specweave-frontend/commands/design-system-init.md +494 -0
- package/plugins/specweave-frontend/commands/frontend-scaffold.md +207 -0
- package/plugins/specweave-frontend/commands/nextjs-setup.md +396 -0
- package/plugins/specweave-frontend/skills/design-system-architect/SKILL.md +278 -0
- package/plugins/specweave-frontend/skills/frontend/SKILL.md +420 -0
- package/plugins/specweave-frontend/skills/nextjs/SKILL.md +546 -0
- package/plugins/specweave-github/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-github/agents/github-manager/AGENT.md +23 -0
- package/plugins/specweave-github/agents/github-task-splitter/AGENT.md +25 -0
- package/plugins/specweave-github/agents/user-story-updater/AGENT.md +25 -0
- package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +194 -0
- package/plugins/specweave-github/lib/github-spec-content-sync.js +49 -0
- package/plugins/specweave-github/lib/github-spec-content-sync.ts +67 -0
- package/plugins/specweave-infrastructure/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-infrastructure/agents/devops/AGENT.md +26 -0
- package/plugins/specweave-infrastructure/agents/network-engineer/AGENT.md +26 -0
- package/plugins/specweave-infrastructure/agents/observability-engineer/AGENT.md +26 -0
- package/plugins/specweave-infrastructure/agents/performance-engineer/AGENT.md +26 -0
- package/plugins/specweave-infrastructure/agents/sre/AGENT.md +26 -0
- package/plugins/specweave-jira/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-jira/agents/jira-manager/AGENT.md +26 -0
- package/plugins/specweave-jira/commands/import-projects.js +183 -0
- package/plugins/specweave-jira/commands/import-projects.md +97 -0
- package/plugins/specweave-jira/commands/import-projects.ts +288 -0
- package/plugins/specweave-jira/commands/specweave-jira-import-projects.md +298 -0
- package/plugins/specweave-kafka/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-kafka/agents/kafka-architect/AGENT.md +26 -0
- package/plugins/specweave-kafka/agents/kafka-devops/AGENT.md +26 -0
- package/plugins/specweave-kafka/agents/kafka-observability/AGENT.md +26 -0
- package/plugins/specweave-kafka-streams/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-kubernetes/agents/kubernetes-architect/AGENT.md +26 -0
- package/plugins/specweave-kubernetes/commands/cluster-setup.md +262 -0
- package/plugins/specweave-kubernetes/commands/deployment-generate.md +242 -0
- package/plugins/specweave-kubernetes/commands/helm-scaffold.md +333 -0
- package/plugins/specweave-ml/.claude-plugin/plugin.json +3 -3
- package/plugins/specweave-ml/agents/data-scientist/AGENT.md +26 -0
- package/plugins/specweave-ml/agents/ml-engineer/AGENT.md +26 -0
- package/plugins/specweave-ml/agents/mlops-engineer/AGENT.md +26 -0
- package/plugins/specweave-mobile/agents/mobile-architect/AGENT.md +26 -0
- package/plugins/specweave-mobile/commands/app-scaffold.md +233 -0
- package/plugins/specweave-mobile/commands/build-config.md +256 -0
- package/plugins/specweave-mobile/commands/screen-generate.md +289 -0
- package/plugins/specweave-n8n/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-payments/agents/payment-integration/AGENT.md +26 -0
- package/plugins/specweave-plugin-dev/.claude-plugin/plugin.json +20 -0
- package/plugins/specweave-plugin-dev/commands/plugin-create.md +333 -0
- package/plugins/specweave-plugin-dev/commands/plugin-publish.md +339 -0
- package/plugins/specweave-plugin-dev/commands/plugin-test.md +293 -0
- package/plugins/specweave-plugin-dev/skills/claude-sdk/SKILL.md +162 -0
- package/plugins/specweave-plugin-dev/skills/marketplace-publishing/SKILL.md +263 -0
- package/plugins/specweave-plugin-dev/skills/plugin-development/SKILL.md +316 -0
- package/plugins/specweave-release/.claude-plugin/plugin.json +1 -1
- package/plugins/specweave-release/agents/release-manager/AGENT.md +27 -0
- package/plugins/specweave-release/commands/specweave-release-npm.md +110 -0
- package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +168 -0
- package/plugins/specweave-testing/.claude-plugin/plugin.json +21 -0
- package/plugins/specweave-testing/agents/qa-engineer/AGENT.md +797 -0
- package/plugins/specweave-testing/agents/qa-engineer/README.md +443 -0
- package/plugins/specweave-testing/agents/qa-engineer/templates/playwright-e2e-test.ts +470 -0
- package/plugins/specweave-testing/agents/qa-engineer/templates/test-data-factory.ts +507 -0
- package/plugins/specweave-testing/agents/qa-engineer/templates/vitest-unit-test.ts +400 -0
- package/plugins/specweave-testing/agents/qa-engineer/test-strategies.md +726 -0
- package/plugins/specweave-testing/commands/e2e-setup.md +1081 -0
- package/plugins/specweave-testing/commands/test-coverage.md +979 -0
- package/plugins/specweave-testing/commands/test-generate.md +1156 -0
- package/plugins/specweave-testing/commands/test-init.md +409 -0
- package/plugins/specweave-testing/skills/e2e-playwright/SKILL.md +769 -0
- package/plugins/specweave-testing/skills/tdd-expert/SKILL.md +934 -0
- package/plugins/specweave-testing/skills/unit-testing-expert/SKILL.md +1011 -0
- package/plugins/specweave-tooling/.claude-plugin/plugin.json +22 -0
- package/plugins/specweave-tooling/commands/specweave-tooling-skill-create.md +691 -0
- package/plugins/specweave-tooling/commands/specweave-tooling-skill-package.md +751 -0
- package/plugins/specweave-tooling/commands/specweave-tooling-skill-validate.md +858 -0
- package/plugins/specweave-ui/.claude-plugin/plugin.json +10 -0
- package/plugins/specweave-ui/commands/ui-automate.md +199 -0
- package/plugins/specweave-ui/commands/ui-inspect.md +70 -0
- package/plugins/specweave-ui/skills/browser-automation/SKILL.md +314 -0
- package/plugins/specweave-ui/skills/ui-testing/SKILL.md +716 -0
- package/plugins/specweave-ui/skills/visual-regression/SKILL.md +728 -0
- package/plugins/specweave/commands/check-hooks.md +0 -257
- package/plugins/specweave/commands/specweave-archive-increments.md +0 -82
- package/plugins/specweave/skills/plugin-expert/SKILL.md +0 -340
- /package/plugins/specweave/{agents/code-reviewer.md → skills/code-reviewer/SKILL.md} +0 -0
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
import { readFileSync, existsSync } from 'fs';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
import { consoleLogger } from '../../utils/logger.js';
|
|
4
|
+
/**
|
|
5
|
+
* Validate AC presence in increment spec.md
|
|
6
|
+
*
|
|
7
|
+
* **Checks**:
|
|
8
|
+
* 1. spec.md exists
|
|
9
|
+
* 2. spec.md contains "## Acceptance Criteria" section
|
|
10
|
+
* 3. AC count matches metadata.json (if metadata exists)
|
|
11
|
+
* 4. All ACs follow proper format: `- [ ] **AC-US1-01**: Title`
|
|
12
|
+
*
|
|
13
|
+
* @param incrementPath - Path to increment directory
|
|
14
|
+
* @param options - Validation options
|
|
15
|
+
* @returns Validation result
|
|
16
|
+
*/
|
|
17
|
+
export function validateACPresence(incrementPath, options = {}) {
|
|
18
|
+
const logger = options.logger ?? consoleLogger;
|
|
19
|
+
const strict = options.strict ?? true;
|
|
20
|
+
const result = {
|
|
21
|
+
valid: true,
|
|
22
|
+
acCount: 0,
|
|
23
|
+
expectedCount: 0,
|
|
24
|
+
errors: [],
|
|
25
|
+
warnings: [],
|
|
26
|
+
};
|
|
27
|
+
// 1. Check spec.md exists
|
|
28
|
+
const specPath = join(incrementPath, 'spec.md');
|
|
29
|
+
if (!existsSync(specPath)) {
|
|
30
|
+
result.valid = false;
|
|
31
|
+
result.errors.push(`spec.md not found: ${specPath}`);
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
34
|
+
const specContent = readFileSync(specPath, 'utf-8');
|
|
35
|
+
// 2. Check for "## Acceptance Criteria" section
|
|
36
|
+
if (!specContent.includes('## Acceptance Criteria')) {
|
|
37
|
+
result.valid = false;
|
|
38
|
+
result.errors.push('spec.md missing "## Acceptance Criteria" section');
|
|
39
|
+
result.suggestedFix = `Add ACs to spec.md or run: /specweave:embed-acs ${incrementPath.split('/').pop()}`;
|
|
40
|
+
}
|
|
41
|
+
// 3. Count ACs in spec.md
|
|
42
|
+
const acMatches = specContent.match(/^- \[[x ]\] \*\*AC-US\d+-\d+\*\*:/gm);
|
|
43
|
+
result.acCount = acMatches ? acMatches.length : 0;
|
|
44
|
+
if (result.acCount === 0) {
|
|
45
|
+
result.valid = false;
|
|
46
|
+
result.errors.push('spec.md contains 0 Acceptance Criteria');
|
|
47
|
+
result.suggestedFix = `Add ACs to spec.md or run: /specweave:embed-acs ${incrementPath.split('/').pop()}`;
|
|
48
|
+
}
|
|
49
|
+
// 4. Check metadata.json for expected AC count
|
|
50
|
+
const metadataPath = join(incrementPath, 'metadata.json');
|
|
51
|
+
if (existsSync(metadataPath)) {
|
|
52
|
+
try {
|
|
53
|
+
const metadata = JSON.parse(readFileSync(metadataPath, 'utf-8'));
|
|
54
|
+
result.expectedCount = metadata.total_acs ?? 0;
|
|
55
|
+
if (result.expectedCount > 0 && result.acCount !== result.expectedCount) {
|
|
56
|
+
const message = `AC count mismatch: spec.md has ${result.acCount} ACs, metadata.json expects ${result.expectedCount}`;
|
|
57
|
+
if (strict) {
|
|
58
|
+
result.valid = false;
|
|
59
|
+
result.errors.push(message);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
result.warnings.push(message);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (result.expectedCount === 0 && result.acCount > 0) {
|
|
66
|
+
result.warnings.push(`metadata.json has total_acs=0 but spec.md contains ${result.acCount} ACs - metadata may need update`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
result.warnings.push(`Could not parse metadata.json: ${err.message}`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// 5. Validate AC format
|
|
74
|
+
const invalidACs = [];
|
|
75
|
+
const lines = specContent.split('\n');
|
|
76
|
+
for (let i = 0; i < lines.length; i++) {
|
|
77
|
+
const line = lines[i];
|
|
78
|
+
if (line.includes('**AC-US') && !line.match(/^- \[[x ]\] \*\*AC-US\d+-\d+\*\*:/)) {
|
|
79
|
+
invalidACs.push(`Line ${i + 1}: "${line.substring(0, 60)}..."`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
if (invalidACs.length > 0) {
|
|
83
|
+
result.warnings.push(`Found ${invalidACs.length} ACs with invalid format`);
|
|
84
|
+
if (invalidACs.length <= 3) {
|
|
85
|
+
result.warnings.push(...invalidACs);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// 6. Check for "structure: user-stories" pattern
|
|
89
|
+
const frontmatterMatch = specContent.match(/^---\n([\s\S]*?)\n---/);
|
|
90
|
+
if (frontmatterMatch) {
|
|
91
|
+
const frontmatter = frontmatterMatch[1];
|
|
92
|
+
if (frontmatter.includes('structure: user-stories') && result.acCount === 0) {
|
|
93
|
+
result.errors.push('⚠️ CRITICAL: spec.md uses `structure: user-stories` but contains NO inline ACs');
|
|
94
|
+
result.errors.push(' AC sync hooks require ACs in spec.md even when using external living docs');
|
|
95
|
+
result.suggestedFix = `Run: /specweave:embed-acs ${incrementPath.split('/').pop()} to auto-embed ACs from living docs`;
|
|
96
|
+
result.valid = false;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return result;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Format validation result as human-readable message
|
|
103
|
+
*/
|
|
104
|
+
export function formatValidationResult(result) {
|
|
105
|
+
let output = '';
|
|
106
|
+
if (result.valid) {
|
|
107
|
+
output += `✅ AC Presence Validation: PASSED\n`;
|
|
108
|
+
output += ` ✓ ${result.acCount} Acceptance Criteria found in spec.md\n`;
|
|
109
|
+
if (result.expectedCount > 0) {
|
|
110
|
+
output += ` ✓ Matches metadata.json (${result.expectedCount} expected)\n`;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
output += `❌ AC Presence Validation: FAILED\n\n`;
|
|
115
|
+
if (result.errors.length > 0) {
|
|
116
|
+
output += `ERRORS (${result.errors.length}):\n`;
|
|
117
|
+
for (const error of result.errors) {
|
|
118
|
+
output += ` 🔴 ${error}\n`;
|
|
119
|
+
}
|
|
120
|
+
output += '\n';
|
|
121
|
+
}
|
|
122
|
+
if (result.suggestedFix) {
|
|
123
|
+
output += `💡 SUGGESTED FIX:\n`;
|
|
124
|
+
output += ` ${result.suggestedFix}\n\n`;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
if (result.warnings.length > 0) {
|
|
128
|
+
output += `WARNINGS (${result.warnings.length}):\n`;
|
|
129
|
+
for (const warning of result.warnings) {
|
|
130
|
+
output += ` 🟡 ${warning}\n`;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return output;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Validate AC presence and throw if validation fails
|
|
137
|
+
*
|
|
138
|
+
* Use this in critical paths (e.g., before starting increment)
|
|
139
|
+
*/
|
|
140
|
+
export function validateACPresenceStrict(incrementPath, logger = consoleLogger) {
|
|
141
|
+
const result = validateACPresence(incrementPath, { logger, strict: true });
|
|
142
|
+
if (!result.valid) {
|
|
143
|
+
const formattedResult = formatValidationResult(result);
|
|
144
|
+
logger.error(formattedResult);
|
|
145
|
+
throw new Error(`AC presence validation failed for ${incrementPath}`);
|
|
146
|
+
}
|
|
147
|
+
logger.log(formatValidationResult(result));
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=ac-presence-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ac-presence-validator.js","sourceRoot":"","sources":["../../../../src/core/validators/ac-presence-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAU,aAAa,EAAE,MAAM,uBAAuB,CAAC;AA+B9D;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,kBAAkB,CAChC,aAAqB,EACrB,UAAiD,EAAE;IAEnD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,aAAa,CAAC;IAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC;IAEtC,MAAM,MAAM,GAA+B;QACzC,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,CAAC;QACV,aAAa,EAAE,CAAC;QAChB,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,EAAE;KACb,CAAC;IAEF,0BAA0B;IAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;IAChD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,QAAQ,EAAE,CAAC,CAAC;QACrD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,WAAW,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAEpD,gDAAgD;IAChD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,CAAC;QACpD,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;QACvE,MAAM,CAAC,YAAY,GAAG,mDAAmD,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;IAC5G,CAAC;IAED,0BAA0B;IAC1B,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;IAC3E,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAElD,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QAC7D,MAAM,CAAC,YAAY,GAAG,mDAAmD,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;IAC5G,CAAC;IAED,+CAA+C;IAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;IAC1D,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;YACjE,MAAM,CAAC,aAAa,GAAG,QAAQ,CAAC,SAAS,IAAI,CAAC,CAAC;YAE/C,IAAI,MAAM,CAAC,aAAa,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,aAAa,EAAE,CAAC;gBACxE,MAAM,OAAO,GAAG,kCAAkC,MAAM,CAAC,OAAO,+BAA+B,MAAM,CAAC,aAAa,EAAE,CAAC;gBAEtH,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;oBACrB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC9B,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;YAED,IAAI,MAAM,CAAC,aAAa,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;gBACrD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,sDAAsD,MAAM,CAAC,OAAO,iCAAiC,CAAC,CAAC;YAC9H,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,kCAAmC,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACnF,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,MAAM,UAAU,GAAG,EAAE,CAAC;IACtB,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,mCAAmC,CAAC,EAAE,CAAC;YACjF,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,UAAU,CAAC,MAAM,0BAA0B,CAAC,CAAC;QAC3E,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YAC3B,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,iDAAiD;IACjD,MAAM,gBAAgB,GAAG,WAAW,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IACpE,IAAI,gBAAgB,EAAE,CAAC;QACrB,MAAM,WAAW,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;QACxC,IAAI,WAAW,CAAC,QAAQ,CAAC,yBAAyB,CAAC,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;YAC5E,MAAM,CAAC,MAAM,CAAC,IAAI,CAChB,iFAAiF,CAClF,CAAC;YACF,MAAM,CAAC,MAAM,CAAC,IAAI,CAChB,8EAA8E,CAC/E,CAAC;YACF,MAAM,CAAC,YAAY,GAAG,6BAA6B,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,qCAAqC,CAAC;YACvH,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAkC;IACvE,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,MAAM,IAAI,oCAAoC,CAAC;QAC/C,MAAM,IAAI,QAAQ,MAAM,CAAC,OAAO,yCAAyC,CAAC;QAC1E,IAAI,MAAM,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,+BAA+B,MAAM,CAAC,aAAa,cAAc,CAAC;QAC9E,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,sCAAsC,CAAC;QAEjD,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,WAAW,MAAM,CAAC,MAAM,CAAC,MAAM,MAAM,CAAC;YAChD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAClC,MAAM,IAAI,QAAQ,KAAK,IAAI,CAAC;YAC9B,CAAC;YACD,MAAM,IAAI,IAAI,CAAC;QACjB,CAAC;QAED,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACxB,MAAM,IAAI,qBAAqB,CAAC;YAChC,MAAM,IAAI,MAAM,MAAM,CAAC,YAAY,MAAM,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,aAAa,MAAM,CAAC,QAAQ,CAAC,MAAM,MAAM,CAAC;QACpD,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACtC,MAAM,IAAI,QAAQ,OAAO,IAAI,CAAC;QAChC,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CACtC,aAAqB,EACrB,SAAiB,aAAa;IAE9B,MAAM,MAAM,GAAG,kBAAkB,CAAC,aAAa,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IAE3E,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,eAAe,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;QACvD,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,qCAAqC,aAAa,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -86,7 +86,7 @@ export declare class AdoDependencyLoader {
|
|
|
86
86
|
* Tier 3: Bulk pre-load all dependencies (optional command)
|
|
87
87
|
*
|
|
88
88
|
* Performance: 1-2 minutes for 50 projects (150-200 API calls, batched)
|
|
89
|
-
* Progress: Real-time progress tracking, cancelation
|
|
89
|
+
* Progress: Real-time progress tracking with ProgressTracker, cancelation with CancelationHandler
|
|
90
90
|
*
|
|
91
91
|
* @param projectNames Array of project names to preload
|
|
92
92
|
* @returns void (results cached)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ado-dependency-loader.d.ts","sourceRoot":"","sources":["../../../../src/integrations/ado/ado-dependency-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAiB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"ado-dependency-loader.d.ts","sourceRoot":"","sources":["../../../../src/integrations/ado/ado-dependency-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAiB,MAAM,uBAAuB,CAAC;AAI9D;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,KAAK,CAAC;QACf,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC;KAClB,CAAC,CAAC;IACH,KAAK,EAAE,KAAK,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC,CAAC;IACH,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,EAAE;QACnB,SAAS,EAAE,SAAS,CAAC;QACrB,YAAY,EAAE,YAAY,CAAC;QAC3B,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;QACpC,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB;IAOD;;;;;;;;OAQG;IACG,mBAAmB,CAAC,WAAW,GAAE,MAAW,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IA+DlF;;;;;;;;OAQG;IACG,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAwFnF;;;;;;;;OAQG;IACG,sBAAsB,CAC1B,YAAY,EAAE,MAAM,EAAE,EACtB,OAAO,GAAE;QACP,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;QACtD,MAAM,CAAC,EAAE,WAAW,CAAC;KACjB,GACL,OAAO,CAAC,IAAI,CAAC;CAuEjB"}
|
|
@@ -16,6 +16,8 @@
|
|
|
16
16
|
*/
|
|
17
17
|
import { RateLimitChecker } from '../../core/cache/rate-limit-checker.js';
|
|
18
18
|
import { consoleLogger } from '../../utils/logger.js';
|
|
19
|
+
import { ProgressTracker } from '../../core/progress/progress-tracker.js';
|
|
20
|
+
import { CancelationHandler } from '../../core/progress/cancelation-handler.js';
|
|
19
21
|
/**
|
|
20
22
|
* AdoDependencyLoader - Three-tier dependency loading with smart caching
|
|
21
23
|
*/
|
|
@@ -168,7 +170,7 @@ export class AdoDependencyLoader {
|
|
|
168
170
|
* Tier 3: Bulk pre-load all dependencies (optional command)
|
|
169
171
|
*
|
|
170
172
|
* Performance: 1-2 minutes for 50 projects (150-200 API calls, batched)
|
|
171
|
-
* Progress: Real-time progress tracking, cancelation
|
|
173
|
+
* Progress: Real-time progress tracking with ProgressTracker, cancelation with CancelationHandler
|
|
172
174
|
*
|
|
173
175
|
* @param projectNames Array of project names to preload
|
|
174
176
|
* @returns void (results cached)
|
|
@@ -177,22 +179,50 @@ export class AdoDependencyLoader {
|
|
|
177
179
|
const { onProgress, signal } = options;
|
|
178
180
|
const total = projectNames.length;
|
|
179
181
|
this.logger.log(`Preloading dependencies for ${total} projects...`);
|
|
182
|
+
// Initialize ProgressTracker
|
|
183
|
+
const progressTracker = new ProgressTracker({
|
|
184
|
+
total,
|
|
185
|
+
label: 'Preloading ADO dependencies',
|
|
186
|
+
updateFrequency: 5, // Update every 5 projects
|
|
187
|
+
showEta: true,
|
|
188
|
+
logger: this.logger
|
|
189
|
+
});
|
|
190
|
+
// Initialize CancelationHandler
|
|
191
|
+
let succeeded = 0;
|
|
192
|
+
let failed = 0;
|
|
193
|
+
let loadedProjects = [];
|
|
194
|
+
const cancelHandler = new CancelationHandler({
|
|
195
|
+
onSaveState: async () => {
|
|
196
|
+
this.logger.log(`\nPartial preload saved: ${loadedProjects.length}/${total} projects cached`);
|
|
197
|
+
this.logger.log(`Success: ${succeeded}, Failed: ${failed}`);
|
|
198
|
+
},
|
|
199
|
+
logger: this.logger
|
|
200
|
+
});
|
|
201
|
+
// Register SIGINT handler
|
|
202
|
+
cancelHandler.register();
|
|
180
203
|
for (let i = 0; i < total; i++) {
|
|
181
|
-
// Check for cancelation
|
|
182
|
-
if (signal?.aborted) {
|
|
183
|
-
this.logger.warn('Preload canceled by user');
|
|
204
|
+
// Check for cancelation (both new handler and legacy signal)
|
|
205
|
+
if (cancelHandler.shouldCancel() || signal?.aborted) {
|
|
206
|
+
this.logger.warn('\n⚠️ Preload canceled by user');
|
|
207
|
+
this.logger.log(`\n💡 Resume with: /specweave-ado:preload-dependencies --resume`);
|
|
208
|
+
cancelHandler.unregister();
|
|
184
209
|
throw new Error('Preload canceled');
|
|
185
210
|
}
|
|
186
211
|
const projectName = projectNames[i];
|
|
187
|
-
this.logger.log(`[${i + 1}/${total}] Preloading ${projectName}...`);
|
|
188
212
|
try {
|
|
189
213
|
await this.loadProjectDependencies(projectName);
|
|
190
|
-
|
|
214
|
+
loadedProjects.push(projectName);
|
|
215
|
+
succeeded++;
|
|
216
|
+
// Update progress
|
|
217
|
+
progressTracker.update(projectName, 'success');
|
|
218
|
+
// Legacy callback support
|
|
191
219
|
if (onProgress) {
|
|
192
220
|
onProgress(i + 1, total);
|
|
193
221
|
}
|
|
194
222
|
}
|
|
195
223
|
catch (error) {
|
|
224
|
+
failed++;
|
|
225
|
+
progressTracker.update(projectName, 'error');
|
|
196
226
|
this.logger.error(`Failed to preload ${projectName}: ${error.message}`);
|
|
197
227
|
// Continue with next project (don't fail entire batch)
|
|
198
228
|
}
|
|
@@ -201,7 +231,9 @@ export class AdoDependencyLoader {
|
|
|
201
231
|
await new Promise((resolve) => setTimeout(resolve, 300));
|
|
202
232
|
}
|
|
203
233
|
}
|
|
204
|
-
|
|
234
|
+
// Unregister handler and show final summary
|
|
235
|
+
cancelHandler.unregister();
|
|
236
|
+
progressTracker.finish(succeeded, failed, 0);
|
|
205
237
|
}
|
|
206
238
|
}
|
|
207
239
|
//# sourceMappingURL=ado-dependency-loader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ado-dependency-loader.js","sourceRoot":"","sources":["../../../../src/integrations/ado/ado-dependency-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAE1E,OAAO,EAAU,aAAa,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"ado-dependency-loader.js","sourceRoot":"","sources":["../../../../src/integrations/ado/ado-dependency-loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Azure DevOps Area Path Mapper
|
|
3
|
+
*
|
|
4
|
+
* Fetches, parses, and maps ADO area paths to SpecWeave project IDs.
|
|
5
|
+
* Supports hierarchical area paths with granularity selection:
|
|
6
|
+
* - Top-level only (e.g., Backend, Frontend)
|
|
7
|
+
* - Two-level (e.g., Backend-API, Backend-Database)
|
|
8
|
+
* - Full tree (all levels)
|
|
9
|
+
*
|
|
10
|
+
* NEW (v0.24.0): Enables multi-project organization in ADO
|
|
11
|
+
*
|
|
12
|
+
* @module integrations/ado/area-path-mapper
|
|
13
|
+
*/
|
|
14
|
+
import type { Logger } from '../../utils/logger.js';
|
|
15
|
+
export interface AreaPathNode {
|
|
16
|
+
id: string;
|
|
17
|
+
name: string;
|
|
18
|
+
path: string;
|
|
19
|
+
level: number;
|
|
20
|
+
parentPath?: string;
|
|
21
|
+
children?: AreaPathNode[];
|
|
22
|
+
hasChildren: boolean;
|
|
23
|
+
}
|
|
24
|
+
export interface AdoCredentials {
|
|
25
|
+
organization: string;
|
|
26
|
+
pat: string;
|
|
27
|
+
}
|
|
28
|
+
export type AreaPathGranularity = 'top-level' | 'two-level' | 'full-tree';
|
|
29
|
+
export interface AreaPathMapperOptions {
|
|
30
|
+
credentials: AdoCredentials;
|
|
31
|
+
project: string;
|
|
32
|
+
logger?: Logger;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Area Path Mapper for Azure DevOps
|
|
36
|
+
*
|
|
37
|
+
* Fetches hierarchical area path structures and maps them to SpecWeave project IDs.
|
|
38
|
+
*/
|
|
39
|
+
export declare class AreaPathMapper {
|
|
40
|
+
private credentials;
|
|
41
|
+
private project;
|
|
42
|
+
private logger;
|
|
43
|
+
private apiVersion;
|
|
44
|
+
constructor(options: AreaPathMapperOptions);
|
|
45
|
+
/**
|
|
46
|
+
* Fetch area path tree from ADO
|
|
47
|
+
*
|
|
48
|
+
* Fetches the full hierarchical area path structure for the project.
|
|
49
|
+
* Uses $depth=10 to get deep hierarchies.
|
|
50
|
+
*
|
|
51
|
+
* @returns Root area path node with children
|
|
52
|
+
*/
|
|
53
|
+
fetchAreaPaths(): Promise<AreaPathNode>;
|
|
54
|
+
/**
|
|
55
|
+
* Parse area path tree recursively
|
|
56
|
+
*
|
|
57
|
+
* Converts ADO API response to normalized AreaPathNode tree structure.
|
|
58
|
+
*
|
|
59
|
+
* @param node - Raw ADO API node
|
|
60
|
+
* @param level - Current depth level (0 = root)
|
|
61
|
+
* @param parentPath - Parent area path
|
|
62
|
+
* @returns Parsed area path node
|
|
63
|
+
*/
|
|
64
|
+
parseAreaPathTree(node: any, level: number, parentPath: string): AreaPathNode;
|
|
65
|
+
/**
|
|
66
|
+
* Map area path to SpecWeave project ID
|
|
67
|
+
*
|
|
68
|
+
* Converts hierarchical area path to kebab-case project ID.
|
|
69
|
+
* Excludes root project name.
|
|
70
|
+
*
|
|
71
|
+
* Examples:
|
|
72
|
+
* - "Platform/Backend/API" → "backend-api"
|
|
73
|
+
* - "Platform/Frontend" → "frontend"
|
|
74
|
+
* - "Platform" → "platform"
|
|
75
|
+
*
|
|
76
|
+
* @param areaPath - Full area path (e.g., "Platform/Backend/API")
|
|
77
|
+
* @returns Kebab-case project ID
|
|
78
|
+
*/
|
|
79
|
+
mapToProjectId(areaPath: string): string;
|
|
80
|
+
/**
|
|
81
|
+
* Convert string to kebab-case
|
|
82
|
+
*
|
|
83
|
+
* @param str - Input string
|
|
84
|
+
* @returns Kebab-case string
|
|
85
|
+
*/
|
|
86
|
+
private toKebabCase;
|
|
87
|
+
/**
|
|
88
|
+
* Flatten area paths with granularity selection
|
|
89
|
+
*
|
|
90
|
+
* Extracts nodes at specific level(s) from the tree.
|
|
91
|
+
*
|
|
92
|
+
* @param root - Root area path node
|
|
93
|
+
* @param granularity - Desired granularity level
|
|
94
|
+
* @returns Flattened array of nodes
|
|
95
|
+
*/
|
|
96
|
+
flattenAreaPaths(root: AreaPathNode, granularity: AreaPathGranularity): AreaPathNode[];
|
|
97
|
+
/**
|
|
98
|
+
* Get nodes at specific level
|
|
99
|
+
*
|
|
100
|
+
* Recursively collects nodes at the target depth level.
|
|
101
|
+
* If a branch doesn't reach the target level, includes the deepest node in that branch.
|
|
102
|
+
*
|
|
103
|
+
* @param node - Current node
|
|
104
|
+
* @param targetLevel - Target depth level
|
|
105
|
+
* @returns Nodes at target level (or deepest available)
|
|
106
|
+
*/
|
|
107
|
+
private getNodesByLevel;
|
|
108
|
+
/**
|
|
109
|
+
* Get all nodes (flatten entire tree)
|
|
110
|
+
*
|
|
111
|
+
* @param node - Root node
|
|
112
|
+
* @returns All nodes in tree
|
|
113
|
+
*/
|
|
114
|
+
private getAllNodes;
|
|
115
|
+
/**
|
|
116
|
+
* Prompt user for granularity selection
|
|
117
|
+
*
|
|
118
|
+
* Interactive CLI prompt to select area path granularity.
|
|
119
|
+
*
|
|
120
|
+
* @param areaPathTree - Area path tree for preview
|
|
121
|
+
* @returns Selected granularity
|
|
122
|
+
*/
|
|
123
|
+
promptAreaPathGranularity(areaPathTree: AreaPathNode): Promise<AreaPathGranularity>;
|
|
124
|
+
/**
|
|
125
|
+
* Get area path suggestions for project
|
|
126
|
+
*
|
|
127
|
+
* Analyzes area path tree and suggests best granularity based on structure.
|
|
128
|
+
*
|
|
129
|
+
* @param areaPathTree - Area path tree
|
|
130
|
+
* @returns Suggested granularity with reasoning
|
|
131
|
+
*/
|
|
132
|
+
suggestGranularity(areaPathTree: AreaPathNode): {
|
|
133
|
+
suggested: AreaPathGranularity;
|
|
134
|
+
reasoning: string;
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=area-path-mapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"area-path-mapper.d.ts","sourceRoot":"","sources":["../../../../src/integrations/ado/area-path-mapper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAGpD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;IAC1B,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC;AAE1E,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,cAAc,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,WAAW,CAAiB;IACpC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAS;gBAEf,OAAO,EAAE,qBAAqB;IAM1C;;;;;;;OAOG;IACG,cAAc,IAAI,OAAO,CAAC,YAAY,CAAC;IA6B7C;;;;;;;;;OASG;IACH,iBAAiB,CACf,IAAI,EAAE,GAAG,EACT,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,GACjB,YAAY;IAsBf;;;;;;;;;;;;;OAaG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAaxC;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAQnB;;;;;;;;OAQG;IACH,gBAAgB,CACd,IAAI,EAAE,YAAY,EAClB,WAAW,EAAE,mBAAmB,GAC/B,YAAY,EAAE;IAgBjB;;;;;;;;;OASG;IACH,OAAO,CAAC,eAAe;IA4BvB;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAYnB;;;;;;;OAOG;IACG,yBAAyB,CAC7B,YAAY,EAAE,YAAY,GACzB,OAAO,CAAC,mBAAmB,CAAC;IAkC/B;;;;;;;OAOG;IACH,kBAAkB,CAAC,YAAY,EAAE,YAAY,GAAG;QAC9C,SAAS,EAAE,mBAAmB,CAAC;QAC/B,SAAS,EAAE,MAAM,CAAC;KACnB;CAiCF"}
|