specweave 1.0.488 → 1.0.490
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/README.md +1 -1
- package/dist/plugins/specweave-ado/lib/ado-ac-checkbox-sync.d.ts +13 -5
- package/dist/plugins/specweave-ado/lib/ado-ac-checkbox-sync.d.ts.map +1 -1
- package/dist/plugins/specweave-ado/lib/ado-ac-checkbox-sync.js +28 -26
- package/dist/plugins/specweave-ado/lib/ado-ac-checkbox-sync.js.map +1 -1
- package/dist/plugins/specweave-ado/lib/ado-client.d.ts +14 -0
- package/dist/plugins/specweave-ado/lib/ado-client.d.ts.map +1 -1
- package/dist/plugins/specweave-ado/lib/ado-client.js +29 -1
- package/dist/plugins/specweave-ado/lib/ado-client.js.map +1 -1
- package/dist/plugins/specweave-ado/lib/ado-pull-sync.d.ts +35 -0
- package/dist/plugins/specweave-ado/lib/ado-pull-sync.d.ts.map +1 -0
- package/dist/plugins/specweave-ado/lib/ado-pull-sync.js +53 -0
- package/dist/plugins/specweave-ado/lib/ado-pull-sync.js.map +1 -0
- package/dist/plugins/specweave-ado/lib/ado-rate-limiter.d.ts +46 -0
- package/dist/plugins/specweave-ado/lib/ado-rate-limiter.d.ts.map +1 -0
- package/dist/plugins/specweave-ado/lib/ado-rate-limiter.js +65 -0
- package/dist/plugins/specweave-ado/lib/ado-rate-limiter.js.map +1 -0
- package/dist/plugins/specweave-ado/lib/ado-spec-sync.d.ts +7 -1
- package/dist/plugins/specweave-ado/lib/ado-spec-sync.d.ts.map +1 -1
- package/dist/plugins/specweave-ado/lib/ado-spec-sync.js +25 -1
- package/dist/plugins/specweave-ado/lib/ado-spec-sync.js.map +1 -1
- package/dist/plugins/specweave-ado/lib/ado-status-sync.d.ts +17 -1
- package/dist/plugins/specweave-ado/lib/ado-status-sync.d.ts.map +1 -1
- package/dist/plugins/specweave-ado/lib/ado-status-sync.js +51 -9
- package/dist/plugins/specweave-ado/lib/ado-status-sync.js.map +1 -1
- package/dist/plugins/specweave-github/lib/github-client-v2.js +1 -1
- package/dist/plugins/specweave-github/lib/github-client-v2.js.map +1 -1
- package/dist/plugins/specweave-github/lib/github-push-sync.d.ts.map +1 -1
- package/dist/plugins/specweave-github/lib/github-push-sync.js +15 -3
- package/dist/plugins/specweave-github/lib/github-push-sync.js.map +1 -1
- package/dist/plugins/specweave-jira/lib/jira-spec-sync.d.ts +31 -1
- package/dist/plugins/specweave-jira/lib/jira-spec-sync.d.ts.map +1 -1
- package/dist/plugins/specweave-jira/lib/jira-spec-sync.js +170 -97
- package/dist/plugins/specweave-jira/lib/jira-spec-sync.js.map +1 -1
- package/dist/plugins/specweave-jira/lib/jira-status-sync.d.ts +36 -1
- package/dist/plugins/specweave-jira/lib/jira-status-sync.d.ts.map +1 -1
- package/dist/plugins/specweave-jira/lib/jira-status-sync.js +185 -82
- package/dist/plugins/specweave-jira/lib/jira-status-sync.js.map +1 -1
- package/dist/src/adapters/adapter-loader.d.ts.map +1 -1
- package/dist/src/adapters/adapter-loader.js +8 -2
- package/dist/src/adapters/adapter-loader.js.map +1 -1
- package/dist/src/adapters/codex/adapter.d.ts.map +1 -1
- package/dist/src/adapters/codex/adapter.js +1 -0
- package/dist/src/adapters/codex/adapter.js.map +1 -1
- package/dist/src/adapters/cursor/adapter.d.ts.map +1 -1
- package/dist/src/adapters/cursor/adapter.js +1 -0
- package/dist/src/adapters/cursor/adapter.js.map +1 -1
- package/dist/src/adapters/generic/adapter.d.ts +6 -3
- package/dist/src/adapters/generic/adapter.d.ts.map +1 -1
- package/dist/src/adapters/generic/adapter.js +53 -47
- package/dist/src/adapters/generic/adapter.js.map +1 -1
- package/dist/src/adapters/kimi/adapter.d.ts +21 -0
- package/dist/src/adapters/kimi/adapter.d.ts.map +1 -0
- package/dist/src/adapters/kimi/adapter.js +57 -0
- package/dist/src/adapters/kimi/adapter.js.map +1 -0
- package/dist/src/adapters/opencode/adapter.d.ts +24 -0
- package/dist/src/adapters/opencode/adapter.d.ts.map +1 -0
- package/dist/src/adapters/opencode/adapter.js +71 -0
- package/dist/src/adapters/opencode/adapter.js.map +1 -0
- package/dist/src/adapters/registry.yaml +59 -0
- package/dist/src/adapters/trae/adapter.d.ts +21 -0
- package/dist/src/adapters/trae/adapter.d.ts.map +1 -0
- package/dist/src/adapters/trae/adapter.js +64 -0
- package/dist/src/adapters/trae/adapter.js.map +1 -0
- package/dist/src/cli/commands/init.d.ts.map +1 -1
- package/dist/src/cli/commands/init.js +156 -5
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/update-instructions.d.ts.map +1 -1
- package/dist/src/cli/commands/update-instructions.js +10 -0
- package/dist/src/cli/commands/update-instructions.js.map +1 -1
- package/dist/src/cli/helpers/init/index.d.ts +1 -0
- package/dist/src/cli/helpers/init/index.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/index.js +2 -0
- package/dist/src/cli/helpers/init/index.js.map +1 -1
- package/dist/src/cli/helpers/init/next-steps.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/next-steps.js +52 -0
- package/dist/src/cli/helpers/init/next-steps.js.map +1 -1
- package/dist/src/cli/helpers/init/skill-creator-installer.d.ts +24 -0
- package/dist/src/cli/helpers/init/skill-creator-installer.d.ts.map +1 -0
- package/dist/src/cli/helpers/init/skill-creator-installer.js +54 -0
- package/dist/src/cli/helpers/init/skill-creator-installer.js.map +1 -0
- package/dist/src/core/ado-description-updater.d.ts +22 -0
- package/dist/src/core/ado-description-updater.d.ts.map +1 -0
- package/dist/src/core/ado-description-updater.js +46 -0
- package/dist/src/core/ado-description-updater.js.map +1 -0
- package/dist/src/core/closure-dispatcher.d.ts +96 -0
- package/dist/src/core/closure-dispatcher.d.ts.map +1 -0
- package/dist/src/core/closure-dispatcher.js +116 -0
- package/dist/src/core/closure-dispatcher.js.map +1 -0
- package/dist/src/core/config/types.d.ts +2 -0
- package/dist/src/core/config/types.d.ts.map +1 -1
- package/dist/src/core/config/types.js.map +1 -1
- package/dist/src/core/errors/sync-error.d.ts +12 -0
- package/dist/src/core/errors/sync-error.d.ts.map +1 -0
- package/dist/src/core/errors/sync-error.js +19 -0
- package/dist/src/core/errors/sync-error.js.map +1 -0
- package/dist/src/core/skill-gen/rule-collector.d.ts +28 -0
- package/dist/src/core/skill-gen/rule-collector.d.ts.map +1 -0
- package/dist/src/core/skill-gen/rule-collector.js +112 -0
- package/dist/src/core/skill-gen/rule-collector.js.map +1 -0
- package/dist/src/core/skill-gen/signal-collector.d.ts +2 -1
- package/dist/src/core/skill-gen/signal-collector.d.ts.map +1 -1
- package/dist/src/core/skill-gen/signal-collector.js +21 -5
- package/dist/src/core/skill-gen/signal-collector.js.map +1 -1
- package/dist/src/core/sync/persistent-circuit-breaker.d.ts +22 -0
- package/dist/src/core/sync/persistent-circuit-breaker.d.ts.map +1 -0
- package/dist/src/core/sync/persistent-circuit-breaker.js +65 -0
- package/dist/src/core/sync/persistent-circuit-breaker.js.map +1 -0
- package/dist/src/core/sync/retry-wrapper.d.ts +13 -0
- package/dist/src/core/sync/retry-wrapper.d.ts.map +1 -0
- package/dist/src/core/sync/retry-wrapper.js +37 -0
- package/dist/src/core/sync/retry-wrapper.js.map +1 -0
- package/dist/src/importers/ac-parser.d.ts +27 -0
- package/dist/src/importers/ac-parser.d.ts.map +1 -0
- package/dist/src/importers/ac-parser.js +47 -0
- package/dist/src/importers/ac-parser.js.map +1 -0
- package/dist/src/sync/types.d.ts +8 -0
- package/dist/src/sync/types.d.ts.map +1 -1
- package/dist/src/sync/types.js +12 -0
- package/dist/src/sync/types.js.map +1 -1
- package/package.json +1 -1
- package/plugins/specweave/PLUGIN.md +1 -0
- package/plugins/specweave/hooks/v2/guards/increment-existence-guard.sh +9 -3
- package/plugins/specweave/skills/code-reviewer/SKILL.md +401 -0
- package/plugins/specweave/skills/code-reviewer/agents/reviewer-silent-failures.md +65 -0
- package/plugins/specweave/skills/code-reviewer/agents/reviewer-spec-compliance.md +83 -0
- package/plugins/specweave/skills/code-reviewer/agents/reviewer-types.md +68 -0
- package/plugins/specweave/skills/skill-gen/SKILL.md +20 -3
- package/plugins/specweave/skills/team-lead/SKILL.md +155 -4
- package/plugins/specweave/skills/team-lead/agents/architect.md +52 -0
- package/plugins/specweave/skills/team-lead/agents/pm.md +50 -0
- package/plugins/specweave/skills/team-lead/agents/researcher.md +64 -0
- package/plugins/specweave-ado/lib/ado-ac-checkbox-sync.js +23 -21
- package/plugins/specweave-ado/lib/ado-ac-checkbox-sync.ts +37 -29
- package/plugins/specweave-ado/lib/ado-client.js +27 -1
- package/plugins/specweave-ado/lib/ado-client.ts +37 -2
- package/plugins/specweave-ado/lib/ado-pull-sync.js +35 -0
- package/plugins/specweave-ado/lib/ado-pull-sync.ts +74 -0
- package/plugins/specweave-ado/lib/ado-rate-limiter.js +56 -0
- package/plugins/specweave-ado/lib/ado-rate-limiter.ts +86 -0
- package/plugins/specweave-ado/lib/ado-spec-sync.js +25 -1
- package/plugins/specweave-ado/lib/ado-spec-sync.ts +32 -2
- package/plugins/specweave-ado/lib/ado-status-sync.js +52 -14
- package/plugins/specweave-ado/lib/ado-status-sync.ts +64 -16
- package/plugins/specweave-github/lib/github-client-v2.ts +1 -1
- package/plugins/specweave-github/lib/github-push-sync.js +11 -3
- package/plugins/specweave-github/lib/github-push-sync.ts +16 -3
- package/plugins/specweave-jira/lib/jira-spec-sync.js +60 -1
- package/plugins/specweave-jira/lib/jira-spec-sync.ts +93 -1
- package/plugins/specweave-jira/lib/jira-status-sync.js +151 -109
- package/plugins/specweave-jira/lib/jira-status-sync.ts +161 -39
package/README.md
CHANGED
|
@@ -290,7 +290,7 @@ Claude: *automatically uses React Hook Form + Zod*
|
|
|
290
290
|
|
|
291
291
|
**[Skills deep dive](https://verified-skill.com/docs/overview/skills-as-programs)** | **[Skill development guidelines](https://verified-skill.com/docs/guides/skill-development-guidelines)** | **[Skill generation](https://verified-skill.com/docs/skills/extensible/skill-generation)**
|
|
292
292
|
|
|
293
|
-
**
|
|
293
|
+
**AI-Powered Skill Generation:** SpecWeave automatically detects recurring patterns across your project's living docs using LLM analysis -- not hardcoded keyword matching. When patterns mature, it suggests generating project-specific Claude Code skills complete with evals and benchmarks. Use `--seed` mode to bootstrap instantly on existing projects. [Learn more](https://verified-skill.com/docs/skills/extensible/skill-generation).
|
|
294
294
|
|
|
295
295
|
---
|
|
296
296
|
|
|
@@ -2,11 +2,12 @@
|
|
|
2
2
|
* ADO AC Checkbox Sync
|
|
3
3
|
*
|
|
4
4
|
* When ACs are marked complete in spec.md, updates the HTML description
|
|
5
|
-
* of the linked ADO work item
|
|
5
|
+
* of the linked ADO work item using API-based section update (not regex).
|
|
6
6
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
7
|
+
* Uses AdoDescriptionUpdater for clean HTML section manipulation via
|
|
8
|
+
* sentinel comments (<!-- AC_SECTION_START/END -->).
|
|
9
9
|
*/
|
|
10
|
+
import { AxiosInstance } from 'axios';
|
|
10
11
|
import { Logger } from '../../specweave/lib/vendor/utils/logger.js';
|
|
11
12
|
import type { SpecWeaveConfig } from '../../../src/core/config/types.js';
|
|
12
13
|
export interface AdoACCheckboxSyncResult {
|
|
@@ -25,8 +26,15 @@ export declare class AdoACCheckboxSync {
|
|
|
25
26
|
});
|
|
26
27
|
syncACCheckboxesToAdo(config: SpecWeaveConfig): Promise<AdoACCheckboxSyncResult>;
|
|
27
28
|
/**
|
|
28
|
-
*
|
|
29
|
-
*
|
|
29
|
+
* Update a work item's AC section using API-based section manipulation.
|
|
30
|
+
*
|
|
31
|
+
* GET description → formatACCheckboxes → updateAcSection → PATCH with
|
|
32
|
+
* JSON Patch op:"replace". No regex used at any point.
|
|
33
|
+
*/
|
|
34
|
+
updateWorkItemACSection(client: AxiosInstance, storyId: number, acStatus: Map<string, boolean>): Promise<number>;
|
|
35
|
+
/**
|
|
36
|
+
* Legacy: Fetch current HTML description, regex-flip checkboxes, PATCH back.
|
|
37
|
+
* Kept for backward compatibility. New code should use updateWorkItemACSection.
|
|
30
38
|
*/
|
|
31
39
|
private updateStoryCheckboxes;
|
|
32
40
|
private buildClient;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ado-ac-checkbox-sync.d.ts","sourceRoot":"","sources":["../../../../plugins/specweave-ado/lib/ado-ac-checkbox-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"ado-ac-checkbox-sync.d.ts","sourceRoot":"","sources":["../../../../plugins/specweave-ado/lib/ado-ac-checkbox-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAc,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAiB,MAAM,4CAA4C,CAAC;AAInF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAGzE,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,EAAE;QACnB,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB;IAMK,qBAAqB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,uBAAuB,CAAC;IA2FtF;;;;;OAKG;IACG,uBAAuB,CAC3B,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,OAAO,CAAC,MAAM,CAAC;IA+ClB;;;OAGG;YACW,qBAAqB;IASnC,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,gBAAgB;YA8BV,2BAA2B;CAiE1C"}
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
* ADO AC Checkbox Sync
|
|
3
3
|
*
|
|
4
4
|
* When ACs are marked complete in spec.md, updates the HTML description
|
|
5
|
-
* of the linked ADO work item
|
|
5
|
+
* of the linked ADO work item using API-based section update (not regex).
|
|
6
6
|
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
7
|
+
* Uses AdoDescriptionUpdater for clean HTML section manipulation via
|
|
8
|
+
* sentinel comments (<!-- AC_SECTION_START/END -->).
|
|
9
9
|
*/
|
|
10
10
|
import { promises as fs, existsSync } from 'fs';
|
|
11
11
|
import path from 'path';
|
|
@@ -14,6 +14,7 @@ import axios from 'axios';
|
|
|
14
14
|
import { consoleLogger } from '../../specweave/lib/vendor/utils/logger.js';
|
|
15
15
|
import { deriveFeatureId } from '../../specweave/lib/vendor/utils/feature-id-derivation.js';
|
|
16
16
|
import { GitHubACCheckboxSync } from '../../specweave-github/lib/github-ac-checkbox-sync.js';
|
|
17
|
+
import { AdoDescriptionUpdater } from '../../../src/core/ado-description-updater.js';
|
|
17
18
|
export class AdoACCheckboxSync {
|
|
18
19
|
constructor(options) {
|
|
19
20
|
this.projectRoot = options.projectRoot;
|
|
@@ -89,29 +90,23 @@ export class AdoACCheckboxSync {
|
|
|
89
90
|
}
|
|
90
91
|
}
|
|
91
92
|
/**
|
|
92
|
-
*
|
|
93
|
-
*
|
|
93
|
+
* Update a work item's AC section using API-based section manipulation.
|
|
94
|
+
*
|
|
95
|
+
* GET description → formatACCheckboxes → updateAcSection → PATCH with
|
|
96
|
+
* JSON Patch op:"replace". No regex used at any point.
|
|
94
97
|
*/
|
|
95
|
-
async
|
|
98
|
+
async updateWorkItemACSection(client, storyId, acStatus) {
|
|
99
|
+
const updater = new AdoDescriptionUpdater();
|
|
96
100
|
const resp = await client.get(`/wit/workitems/${storyId}?fields=System.Description&api-version=7.0`);
|
|
97
|
-
|
|
98
|
-
const
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
const beforeRegex = new RegExp(`(☐|☑)\\s+(${escaped}:)`, 'g');
|
|
104
|
-
const newCheckbox = completed ? '☑' : '☐';
|
|
105
|
-
const replaced = description.replace(beforeRegex, `${newCheckbox} $2`);
|
|
106
|
-
if (replaced !== description) {
|
|
107
|
-
updatedCount++;
|
|
108
|
-
description = replaced;
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
if (description === original)
|
|
101
|
+
const currentDescription = resp.data?.fields?.['System.Description'] ?? '';
|
|
102
|
+
const newAcHtml = updater.formatACCheckboxes(acStatus);
|
|
103
|
+
if (!newAcHtml)
|
|
104
|
+
return 0;
|
|
105
|
+
const updatedDescription = updater.updateAcSection(currentDescription, newAcHtml);
|
|
106
|
+
if (updatedDescription === currentDescription)
|
|
112
107
|
return 0;
|
|
113
|
-
// PATCH description
|
|
114
|
-
await client.patch(`/wit/workitems/${storyId}?api-version=7.0`, [{ op: 'replace', path: '/fields/System.Description', value:
|
|
108
|
+
// PATCH description via JSON Patch
|
|
109
|
+
await client.patch(`/wit/workitems/${storyId}?api-version=7.0`, [{ op: 'replace', path: '/fields/System.Description', value: updatedDescription }], { headers: { 'Content-Type': 'application/json-patch+json' } });
|
|
115
110
|
// Post progress comment
|
|
116
111
|
const completedCount = [...acStatus.values()].filter(Boolean).length;
|
|
117
112
|
const totalCount = acStatus.size;
|
|
@@ -119,14 +114,21 @@ export class AdoACCheckboxSync {
|
|
|
119
114
|
const acLines = [...acStatus.entries()]
|
|
120
115
|
.map(([id, done]) => `<li>${done ? '✅' : '⬜'} ${id}</li>`)
|
|
121
116
|
.join('\n');
|
|
122
|
-
const commentHtml = `<h3
|
|
117
|
+
const commentHtml = `<h3>AC Progress Update</h3>
|
|
123
118
|
<p><strong>Acceptance Criteria</strong>: ${completedCount}/${totalCount} (${percentage}%)</p>
|
|
124
119
|
<ul>
|
|
125
120
|
${acLines}
|
|
126
121
|
</ul>
|
|
127
|
-
<p
|
|
122
|
+
<p>Auto-updated by SpecWeave</p>`;
|
|
128
123
|
await client.post(`/wit/workItems/${storyId}/comments?api-version=7.1-preview.3`, { text: commentHtml });
|
|
129
|
-
return
|
|
124
|
+
return acStatus.size;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Legacy: Fetch current HTML description, regex-flip checkboxes, PATCH back.
|
|
128
|
+
* Kept for backward compatibility. New code should use updateWorkItemACSection.
|
|
129
|
+
*/
|
|
130
|
+
async updateStoryCheckboxes(client, adoConfig, storyId, acStatus) {
|
|
131
|
+
return this.updateWorkItemACSection(client, storyId, acStatus);
|
|
130
132
|
}
|
|
131
133
|
buildClient(adoConfig) {
|
|
132
134
|
const token = Buffer.from(`:${adoConfig.pat}`).toString('base64');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ado-ac-checkbox-sync.js","sourceRoot":"","sources":["../../../../plugins/specweave-ado/lib/ado-ac-checkbox-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChD,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAwB,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAU,aAAa,EAAE,MAAM,4CAA4C,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,MAAM,2DAA2D,CAAC;AAC5F,OAAO,EAAE,oBAAoB,EAAE,MAAM,uDAAuD,CAAC;
|
|
1
|
+
{"version":3,"file":"ado-ac-checkbox-sync.js","sourceRoot":"","sources":["../../../../plugins/specweave-ado/lib/ado-ac-checkbox-sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* @see https://learn.microsoft.com/en-us/rest/api/azure/devops/
|
|
8
8
|
*/
|
|
9
|
+
import { AdoRateLimiter } from './ado-rate-limiter.js';
|
|
9
10
|
export interface AdoConfig {
|
|
10
11
|
organization: string;
|
|
11
12
|
project: string;
|
|
@@ -13,6 +14,8 @@ export interface AdoConfig {
|
|
|
13
14
|
workItemType?: 'Epic' | 'Feature' | 'User Story';
|
|
14
15
|
areaPath?: string;
|
|
15
16
|
iterationPath?: string;
|
|
17
|
+
/** Optional rate limiter instance (shared across client instances) */
|
|
18
|
+
rateLimiter?: AdoRateLimiter;
|
|
16
19
|
}
|
|
17
20
|
export interface WorkItem {
|
|
18
21
|
id: number;
|
|
@@ -58,6 +61,7 @@ export declare class AdoClient {
|
|
|
58
61
|
private config;
|
|
59
62
|
private baseUrl;
|
|
60
63
|
private authHeader;
|
|
64
|
+
private rateLimiter?;
|
|
61
65
|
constructor(config: AdoConfig);
|
|
62
66
|
/**
|
|
63
67
|
* Create a new work item
|
|
@@ -83,6 +87,16 @@ export declare class AdoClient {
|
|
|
83
87
|
* @see https://learn.microsoft.com/en-us/rest/api/azure/devops/wit/work-items/delete
|
|
84
88
|
*/
|
|
85
89
|
deleteWorkItem(id: number): Promise<void>;
|
|
90
|
+
/**
|
|
91
|
+
* Pull the current state of a work item for bidirectional sync.
|
|
92
|
+
*
|
|
93
|
+
* @param id - ADO work item ID
|
|
94
|
+
* @returns state and last-modified timestamp
|
|
95
|
+
*/
|
|
96
|
+
pullWorkItemState(id: number): Promise<{
|
|
97
|
+
state: string;
|
|
98
|
+
modifiedAt: Date;
|
|
99
|
+
}>;
|
|
86
100
|
/**
|
|
87
101
|
* Add comment to work item
|
|
88
102
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ado-client.d.ts","sourceRoot":"","sources":["../../../../plugins/specweave-ado/lib/ado-client.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"ado-client.d.ts","sourceRoot":"","sources":["../../../../plugins/specweave-ado/lib/ado-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,7 @@ export class AdoClient {
|
|
|
14
14
|
constructor(config) {
|
|
15
15
|
this.config = config;
|
|
16
16
|
this.baseUrl = `https://dev.azure.com/${config.organization}/${config.project}`;
|
|
17
|
+
this.rateLimiter = config.rateLimiter;
|
|
17
18
|
// Basic Auth: base64(":PAT")
|
|
18
19
|
this.authHeader = 'Basic ' + Buffer.from(`:${config.personalAccessToken}`).toString('base64');
|
|
19
20
|
}
|
|
@@ -127,6 +128,20 @@ export class AdoClient {
|
|
|
127
128
|
const url = `${this.baseUrl}/_apis/wit/workitems/${id}?api-version=7.1`;
|
|
128
129
|
await this.request('DELETE', url);
|
|
129
130
|
}
|
|
131
|
+
/**
|
|
132
|
+
* Pull the current state of a work item for bidirectional sync.
|
|
133
|
+
*
|
|
134
|
+
* @param id - ADO work item ID
|
|
135
|
+
* @returns state and last-modified timestamp
|
|
136
|
+
*/
|
|
137
|
+
async pullWorkItemState(id) {
|
|
138
|
+
const url = `${this.baseUrl}/_apis/wit/workitems/${id}?$select=System.State,System.ChangedDate&api-version=7.1`;
|
|
139
|
+
const item = await this.request('GET', url);
|
|
140
|
+
return {
|
|
141
|
+
state: item.fields['System.State'],
|
|
142
|
+
modifiedAt: new Date(item.fields['System.ChangedDate']),
|
|
143
|
+
};
|
|
144
|
+
}
|
|
130
145
|
// ==========================================================================
|
|
131
146
|
// Comment Operations
|
|
132
147
|
// ==========================================================================
|
|
@@ -179,6 +194,10 @@ export class AdoClient {
|
|
|
179
194
|
* Make HTTP request to ADO API
|
|
180
195
|
*/
|
|
181
196
|
async request(method, url, body, additionalHeaders) {
|
|
197
|
+
// Check rate limiter before making request
|
|
198
|
+
if (this.rateLimiter && !this.rateLimiter.consume()) {
|
|
199
|
+
throw new Error('ADO rate limit exceeded — try again later');
|
|
200
|
+
}
|
|
182
201
|
return new Promise((resolve, reject) => {
|
|
183
202
|
const urlObj = new URL(url);
|
|
184
203
|
const options = {
|
|
@@ -210,6 +229,13 @@ export class AdoClient {
|
|
|
210
229
|
}
|
|
211
230
|
}
|
|
212
231
|
else {
|
|
232
|
+
// Handle 429 Too Many Requests — apply Retry-After
|
|
233
|
+
if (res.statusCode === 429 && this.rateLimiter) {
|
|
234
|
+
const retryAfter = parseInt(res.headers['retry-after'], 10);
|
|
235
|
+
if (retryAfter > 0) {
|
|
236
|
+
this.rateLimiter.applyRetryAfter(retryAfter);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
213
239
|
let errorMessage = `ADO API error: ${res.statusCode} ${res.statusMessage}`;
|
|
214
240
|
try {
|
|
215
241
|
const errorData = JSON.parse(data);
|
|
@@ -220,7 +246,9 @@ export class AdoClient {
|
|
|
220
246
|
catch {
|
|
221
247
|
// Ignore JSON parse errors for error responses
|
|
222
248
|
}
|
|
223
|
-
|
|
249
|
+
const err = new Error(errorMessage);
|
|
250
|
+
err.status = res.statusCode;
|
|
251
|
+
reject(err);
|
|
224
252
|
}
|
|
225
253
|
});
|
|
226
254
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ado-client.js","sourceRoot":"","sources":["../../../../plugins/specweave-ado/lib/ado-client.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"ado-client.js","sourceRoot":"","sources":["../../../../plugins/specweave-ado/lib/ado-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ADO Pull Sync — Bidirectional state synchronization
|
|
3
|
+
*
|
|
4
|
+
* Implements last-write-wins conflict resolution for pulling
|
|
5
|
+
* ADO work item state changes back into SpecWeave metadata.
|
|
6
|
+
*
|
|
7
|
+
* @module ado-pull-sync
|
|
8
|
+
*/
|
|
9
|
+
export interface PullSyncContext {
|
|
10
|
+
localStatus: string;
|
|
11
|
+
localUpdatedAt: Date;
|
|
12
|
+
adoState: string;
|
|
13
|
+
adoModifiedAt: Date;
|
|
14
|
+
workItemId: number;
|
|
15
|
+
canUpsertInternalItems: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface PullSyncResult {
|
|
18
|
+
changed: boolean;
|
|
19
|
+
newStatus?: string;
|
|
20
|
+
reason?: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Map ADO work item states to SpecWeave statuses.
|
|
24
|
+
*
|
|
25
|
+
* Covers Agile/Scrum/Basic process templates.
|
|
26
|
+
*/
|
|
27
|
+
export declare function mapAdoStateToSpecweave(adoState: string): string;
|
|
28
|
+
/**
|
|
29
|
+
* Determine if ADO changes should override local state.
|
|
30
|
+
*
|
|
31
|
+
* Uses last-write-wins: if ADO was modified more recently than local,
|
|
32
|
+
* and the mapped state differs, update local metadata.
|
|
33
|
+
*/
|
|
34
|
+
export declare function pullAdoChanges(ctx: PullSyncContext): PullSyncResult;
|
|
35
|
+
//# sourceMappingURL=ado-pull-sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ado-pull-sync.d.ts","sourceRoot":"","sources":["../../../../plugins/specweave-ado/lib/ado-pull-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,IAAI,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,sBAAsB,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAc/D;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,eAAe,GAAG,cAAc,CAsBnE"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ADO Pull Sync — Bidirectional state synchronization
|
|
3
|
+
*
|
|
4
|
+
* Implements last-write-wins conflict resolution for pulling
|
|
5
|
+
* ADO work item state changes back into SpecWeave metadata.
|
|
6
|
+
*
|
|
7
|
+
* @module ado-pull-sync
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Map ADO work item states to SpecWeave statuses.
|
|
11
|
+
*
|
|
12
|
+
* Covers Agile/Scrum/Basic process templates.
|
|
13
|
+
*/
|
|
14
|
+
export function mapAdoStateToSpecweave(adoState) {
|
|
15
|
+
const map = {
|
|
16
|
+
'New': 'planned',
|
|
17
|
+
'To Do': 'planned',
|
|
18
|
+
'Active': 'active',
|
|
19
|
+
'Doing': 'active',
|
|
20
|
+
'In Progress': 'active',
|
|
21
|
+
'Resolved': 'completed',
|
|
22
|
+
'Closed': 'completed',
|
|
23
|
+
'Done': 'completed',
|
|
24
|
+
'Removed': 'abandoned',
|
|
25
|
+
};
|
|
26
|
+
return map[adoState] ?? 'active';
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Determine if ADO changes should override local state.
|
|
30
|
+
*
|
|
31
|
+
* Uses last-write-wins: if ADO was modified more recently than local,
|
|
32
|
+
* and the mapped state differs, update local metadata.
|
|
33
|
+
*/
|
|
34
|
+
export function pullAdoChanges(ctx) {
|
|
35
|
+
if (!ctx.canUpsertInternalItems) {
|
|
36
|
+
return { changed: false, reason: 'canUpsertInternalItems is false' };
|
|
37
|
+
}
|
|
38
|
+
const mappedStatus = mapAdoStateToSpecweave(ctx.adoState);
|
|
39
|
+
// Same effective status — no change needed
|
|
40
|
+
if (mappedStatus === ctx.localStatus) {
|
|
41
|
+
return { changed: false, reason: 'states are equivalent' };
|
|
42
|
+
}
|
|
43
|
+
// Last-write-wins: ADO must be newer
|
|
44
|
+
if (ctx.adoModifiedAt.getTime() <= ctx.localUpdatedAt.getTime()) {
|
|
45
|
+
return { changed: false, reason: 'local is newer' };
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
changed: true,
|
|
49
|
+
newStatus: mappedStatus,
|
|
50
|
+
reason: `ADO state "${ctx.adoState}" is newer — updating to "${mappedStatus}"`,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=ado-pull-sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ado-pull-sync.js","sourceRoot":"","sources":["../../../../plugins/specweave-ado/lib/ado-pull-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAiBH;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,QAAgB;IACrD,MAAM,GAAG,GAA2B;QAClC,KAAK,EAAE,SAAS;QAChB,OAAO,EAAE,SAAS;QAClB,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,QAAQ;QACjB,aAAa,EAAE,QAAQ;QACvB,UAAU,EAAE,WAAW;QACvB,QAAQ,EAAE,WAAW;QACrB,MAAM,EAAE,WAAW;QACnB,SAAS,EAAE,WAAW;KACvB,CAAC;IAEF,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC;AACnC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,GAAoB;IACjD,IAAI,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC;QAChC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,iCAAiC,EAAE,CAAC;IACvE,CAAC;IAED,MAAM,YAAY,GAAG,sBAAsB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAE1D,2CAA2C;IAC3C,IAAI,YAAY,KAAK,GAAG,CAAC,WAAW,EAAE,CAAC;QACrC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,uBAAuB,EAAE,CAAC;IAC7D,CAAC;IAED,qCAAqC;IACrC,IAAI,GAAG,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,cAAc,CAAC,OAAO,EAAE,EAAE,CAAC;QAChE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC;IACtD,CAAC;IAED,OAAO;QACL,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,YAAY;QACvB,MAAM,EAAE,cAAc,GAAG,CAAC,QAAQ,6BAA6B,YAAY,GAAG;KAC/E,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ADO Token Bucket Rate Limiter
|
|
3
|
+
*
|
|
4
|
+
* Simple token bucket that prevents exceeding Azure DevOps API rate limits.
|
|
5
|
+
* ADO's documented limit is ~200 requests per minute for PAT-based auth.
|
|
6
|
+
*
|
|
7
|
+
* Supports Retry-After header handling: when ADO returns 429, call
|
|
8
|
+
* applyRetryAfter(seconds) to block consumption until the cooldown expires.
|
|
9
|
+
*
|
|
10
|
+
* @module ado-rate-limiter
|
|
11
|
+
*/
|
|
12
|
+
export interface AdoRateLimiterOptions {
|
|
13
|
+
/** Max tokens per window (default: 200) */
|
|
14
|
+
capacity?: number;
|
|
15
|
+
/** Window duration in ms (default: 60000 = 1 minute) */
|
|
16
|
+
windowMs?: number;
|
|
17
|
+
}
|
|
18
|
+
export declare class AdoRateLimiter {
|
|
19
|
+
private readonly capacity;
|
|
20
|
+
private readonly windowMs;
|
|
21
|
+
private tokens;
|
|
22
|
+
private windowStart;
|
|
23
|
+
private retryAfterUntil;
|
|
24
|
+
constructor(options?: AdoRateLimiterOptions);
|
|
25
|
+
/**
|
|
26
|
+
* Try to consume one token. Returns true if allowed, false if exhausted.
|
|
27
|
+
*/
|
|
28
|
+
consume(): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Number of tokens remaining in the current window.
|
|
31
|
+
*/
|
|
32
|
+
remaining(): number;
|
|
33
|
+
/**
|
|
34
|
+
* Whether the bucket is fully exhausted (0 tokens remaining).
|
|
35
|
+
*/
|
|
36
|
+
isExhausted(): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Apply a Retry-After delay (from ADO 429 response).
|
|
39
|
+
* Blocks all consumption until the delay expires.
|
|
40
|
+
*
|
|
41
|
+
* @param seconds - Number of seconds to wait
|
|
42
|
+
*/
|
|
43
|
+
applyRetryAfter(seconds: number): void;
|
|
44
|
+
private refillIfWindowExpired;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=ado-rate-limiter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ado-rate-limiter.d.ts","sourceRoot":"","sources":["../../../../plugins/specweave-ado/lib/ado-rate-limiter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,qBAAqB;IACpC,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,eAAe,CAAS;gBAEpB,OAAO,CAAC,EAAE,qBAAqB;IAQ3C;;OAEG;IACH,OAAO,IAAI,OAAO;IAelB;;OAEG;IACH,SAAS,IAAI,MAAM;IAKnB;;OAEG;IACH,WAAW,IAAI,OAAO;IAKtB;;;;;OAKG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAItC,OAAO,CAAC,qBAAqB;CAO9B"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ADO Token Bucket Rate Limiter
|
|
3
|
+
*
|
|
4
|
+
* Simple token bucket that prevents exceeding Azure DevOps API rate limits.
|
|
5
|
+
* ADO's documented limit is ~200 requests per minute for PAT-based auth.
|
|
6
|
+
*
|
|
7
|
+
* Supports Retry-After header handling: when ADO returns 429, call
|
|
8
|
+
* applyRetryAfter(seconds) to block consumption until the cooldown expires.
|
|
9
|
+
*
|
|
10
|
+
* @module ado-rate-limiter
|
|
11
|
+
*/
|
|
12
|
+
export class AdoRateLimiter {
|
|
13
|
+
constructor(options) {
|
|
14
|
+
this.capacity = options?.capacity ?? 200;
|
|
15
|
+
this.windowMs = options?.windowMs ?? 60000;
|
|
16
|
+
this.tokens = this.capacity;
|
|
17
|
+
this.windowStart = Date.now();
|
|
18
|
+
this.retryAfterUntil = 0;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Try to consume one token. Returns true if allowed, false if exhausted.
|
|
22
|
+
*/
|
|
23
|
+
consume() {
|
|
24
|
+
this.refillIfWindowExpired();
|
|
25
|
+
if (Date.now() < this.retryAfterUntil) {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
if (this.tokens <= 0) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
this.tokens--;
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Number of tokens remaining in the current window.
|
|
36
|
+
*/
|
|
37
|
+
remaining() {
|
|
38
|
+
this.refillIfWindowExpired();
|
|
39
|
+
return this.tokens;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Whether the bucket is fully exhausted (0 tokens remaining).
|
|
43
|
+
*/
|
|
44
|
+
isExhausted() {
|
|
45
|
+
this.refillIfWindowExpired();
|
|
46
|
+
return this.tokens <= 0;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Apply a Retry-After delay (from ADO 429 response).
|
|
50
|
+
* Blocks all consumption until the delay expires.
|
|
51
|
+
*
|
|
52
|
+
* @param seconds - Number of seconds to wait
|
|
53
|
+
*/
|
|
54
|
+
applyRetryAfter(seconds) {
|
|
55
|
+
this.retryAfterUntil = Date.now() + seconds * 1000;
|
|
56
|
+
}
|
|
57
|
+
refillIfWindowExpired() {
|
|
58
|
+
const now = Date.now();
|
|
59
|
+
if (now - this.windowStart >= this.windowMs) {
|
|
60
|
+
this.tokens = this.capacity;
|
|
61
|
+
this.windowStart = now;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=ado-rate-limiter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ado-rate-limiter.js","sourceRoot":"","sources":["../../../../plugins/specweave-ado/lib/ado-rate-limiter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AASH,MAAM,OAAO,cAAc;IAOzB,YAAY,OAA+B;QACzC,IAAI,CAAC,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,GAAG,CAAC;QACzC,IAAI,CAAC,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,KAAM,CAAC;QAC5C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC5B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC9B,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,OAAO;QACL,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAE7B,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;YACtC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACrB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,SAAS;QACP,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,WAAW;QACT,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED;;;;;OAKG;IACH,eAAe,CAAC,OAAe;QAC7B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,GAAG,IAAI,CAAC;IACrD,CAAC;IAEO,qBAAqB;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC5B,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;QACzB,CAAC;IACH,CAAC;CACF"}
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
* @module ado-spec-sync
|
|
14
14
|
*/
|
|
15
15
|
import { SpecSyncResult } from '../../../src/core/types/spec-metadata.js';
|
|
16
|
+
import { SyncCircuitBreaker } from '../../../src/core/increment/sync-circuit-breaker.js';
|
|
16
17
|
export interface AdoFeature {
|
|
17
18
|
id: number;
|
|
18
19
|
url: string;
|
|
@@ -45,7 +46,8 @@ export declare class AdoSpecSync {
|
|
|
45
46
|
private config;
|
|
46
47
|
private projectRoot;
|
|
47
48
|
private availableTypes;
|
|
48
|
-
|
|
49
|
+
private breaker;
|
|
50
|
+
constructor(config: AdoConfig, projectRoot?: string, projectId?: string, breaker?: SyncCircuitBreaker);
|
|
49
51
|
/**
|
|
50
52
|
* Detect available work item types for this ADO project.
|
|
51
53
|
* Basic process has Epic/Issue/Task; Agile/Scrum has Feature/User Story/Bug/Task.
|
|
@@ -137,5 +139,9 @@ export declare class AdoSpecSync {
|
|
|
137
139
|
* Supports: Feature, User Story, Bug, Task
|
|
138
140
|
*/
|
|
139
141
|
private mapTypeToAdo;
|
|
142
|
+
/**
|
|
143
|
+
* Check whether the circuit is closed (sync allowed).
|
|
144
|
+
*/
|
|
145
|
+
canSync(): boolean;
|
|
140
146
|
}
|
|
141
147
|
//# sourceMappingURL=ado-spec-sync.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ado-spec-sync.d.ts","sourceRoot":"","sources":["../../../../plugins/specweave-ado/lib/ado-spec-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,EAGL,cAAc,EAEf,MAAM,0CAA0C,CAAC;
|
|
1
|
+
{"version":3,"file":"ado-spec-sync.d.ts","sourceRoot":"","sources":["../../../../plugins/specweave-ado/lib/ado-spec-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,EAGL,cAAc,EAEf,MAAM,0CAA0C,CAAC;AAElD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qDAAqD,CAAC;AAQzF,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE;QACN,cAAc,EAAE,MAAM,CAAC;QACvB,oBAAoB,EAAE,MAAM,CAAC;QAC7B,cAAc,EAAE,MAAM,CAAC;QACvB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE;QACN,cAAc,EAAE,MAAM,CAAC;QACvB,oBAAoB,EAAE,MAAM,CAAC;QAC7B,cAAc,EAAE,MAAM,CAAC;QACvB,eAAe,EAAE,MAAM,CAAC;QACxB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAED,MAAM,WAAW,SAAS;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,cAAc,CAA4B;IAClD,OAAO,CAAC,OAAO,CAAqB;gBAExB,MAAM,EAAE,SAAS,EAAE,WAAW,GAAE,MAAsB,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB;IAsBpH;;;OAGG;YACW,oBAAoB;IAYlC;;;OAGG;YACW,mBAAmB;IAiBjC;;;;;;OAMG;IACH,OAAO,CAAC,UAAU,CAAkC;YACtC,oBAAoB;IA+BlC;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAwE5D;;OAEG;IACG,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IA+E1D;;OAEG;YACW,gBAAgB;IAqD9B;;OAEG;YACW,gBAAgB;IAkD9B;;OAEG;YACW,eAAe;IA4E7B;;OAEG;YACW,kBAAkB;IAqChC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IA4BlC;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAuBhC;;OAEG;YACW,eAAe;IAwB7B;;OAEG;YACW,gBAAgB;IAiB9B;;OAEG;YACW,eAAe;IAW7B;;OAEG;YACW,gBAAgB;IAmC9B;;OAEG;YACW,WAAW;IAiEzB;;OAEG;YACW,WAAW;IA2DzB;;;;;;;;OAQG;IACH,OAAO,CAAC,gBAAgB;IAiBxB;;;;OAIG;IACH,OAAO,CAAC,YAAY;IAiBpB;;OAEG;IACH,OAAO,IAAI,OAAO;CAGnB"}
|