@mc1global/opencode-jarvis 0.3.0 → 0.4.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.
Files changed (58) hide show
  1. package/dist/application/azure-sync/index.d.ts +2 -0
  2. package/dist/application/azure-sync/index.d.ts.map +1 -1
  3. package/dist/application/azure-sync/index.js +1 -0
  4. package/dist/application/azure-sync/index.js.map +1 -1
  5. package/dist/application/azure-sync/poll-service.d.ts +94 -0
  6. package/dist/application/azure-sync/poll-service.d.ts.map +1 -0
  7. package/dist/application/azure-sync/poll-service.js +227 -0
  8. package/dist/application/azure-sync/poll-service.js.map +1 -0
  9. package/dist/domain/azure-sync/entities.d.ts +59 -2
  10. package/dist/domain/azure-sync/entities.d.ts.map +1 -1
  11. package/dist/domain/azure-sync/entities.js +59 -0
  12. package/dist/domain/azure-sync/entities.js.map +1 -1
  13. package/dist/domain/azure-sync/index.d.ts +5 -5
  14. package/dist/domain/azure-sync/index.d.ts.map +1 -1
  15. package/dist/domain/azure-sync/index.js +2 -2
  16. package/dist/domain/azure-sync/index.js.map +1 -1
  17. package/dist/domain/azure-sync/ports.d.ts +2 -0
  18. package/dist/domain/azure-sync/ports.d.ts.map +1 -1
  19. package/dist/domain/azure-sync/repositories.d.ts +22 -2
  20. package/dist/domain/azure-sync/repositories.d.ts.map +1 -1
  21. package/dist/domain/azure-sync/value-objects.d.ts +12 -0
  22. package/dist/domain/azure-sync/value-objects.d.ts.map +1 -1
  23. package/dist/domain/azure-sync/value-objects.js +21 -0
  24. package/dist/domain/azure-sync/value-objects.js.map +1 -1
  25. package/dist/domain/config/value-objects.d.ts +4 -0
  26. package/dist/domain/config/value-objects.d.ts.map +1 -1
  27. package/dist/domain/config/value-objects.js +2 -0
  28. package/dist/domain/config/value-objects.js.map +1 -1
  29. package/dist/hooks/event-handlers.d.ts +3 -0
  30. package/dist/hooks/event-handlers.d.ts.map +1 -1
  31. package/dist/hooks/event-handlers.js +4 -2
  32. package/dist/hooks/event-handlers.js.map +1 -1
  33. package/dist/hooks/logger.d.ts +46 -0
  34. package/dist/hooks/logger.d.ts.map +1 -0
  35. package/dist/hooks/logger.js +79 -0
  36. package/dist/hooks/logger.js.map +1 -0
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +74 -72
  39. package/dist/index.js.map +1 -1
  40. package/dist/infrastructure/azure-sync/azure-devops-client.d.ts +1 -0
  41. package/dist/infrastructure/azure-sync/azure-devops-client.d.ts.map +1 -1
  42. package/dist/infrastructure/azure-sync/azure-devops-client.js +11 -13
  43. package/dist/infrastructure/azure-sync/azure-devops-client.js.map +1 -1
  44. package/dist/infrastructure/azure-sync/index.d.ts +1 -0
  45. package/dist/infrastructure/azure-sync/index.d.ts.map +1 -1
  46. package/dist/infrastructure/azure-sync/index.js +2 -1
  47. package/dist/infrastructure/azure-sync/index.js.map +1 -1
  48. package/dist/infrastructure/azure-sync/sqlite-event-repository.d.ts +31 -0
  49. package/dist/infrastructure/azure-sync/sqlite-event-repository.d.ts.map +1 -0
  50. package/dist/infrastructure/azure-sync/sqlite-event-repository.js +105 -0
  51. package/dist/infrastructure/azure-sync/sqlite-event-repository.js.map +1 -0
  52. package/dist/mcp-server.js +35 -0
  53. package/dist/mcp-server.js.map +1 -1
  54. package/dist/tools/azure-sync-event-tools.d.ts +13 -0
  55. package/dist/tools/azure-sync-event-tools.d.ts.map +1 -0
  56. package/dist/tools/azure-sync-event-tools.js +100 -0
  57. package/dist/tools/azure-sync-event-tools.js.map +1 -0
  58. package/package.json +1 -1
@@ -12,5 +12,7 @@ export { TaskPushUseCases, buildTaskLocalId, parseTaskLocalId } from "./task-pus
12
12
  export type { CardForTaskPush, TaskPushDeps, TaskPushResult } from "./task-push-use-cases.js";
13
13
  export type { EpicFieldInput, CardFieldInput, TaskFieldInput } from "./field-builders.js";
14
14
  export type { ExtractedCardData, ExtractedEpicData } from "./reverse-field-builder.js";
15
+ export { AzurePollService, SyncEventUseCases } from "./poll-service.js";
16
+ export type { PollServiceDeps, PollNotification, PollEventSummary, SyncEventResponse } from "./poll-service.js";
15
17
  export type { DiscoverRequest, DiscoverResponse, PushRequest, PushResponse, PullRequest, PullResponse, BidiSyncRequest, BidiSyncResponse, SyncStatusRequest, SyncStatusResponse, ConfigStatusResponse, CreatePrRequest, PrResponse, PrReviewerInfo, ListPrRequest, ListPrResponse, CommentRequest, CommentResponse, } from "./dtos.js";
16
18
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/application/azure-sync/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAChG,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC9F,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1F,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACvF,YAAY,EACV,eAAe,EAAE,gBAAgB,EACjC,WAAW,EAAE,YAAY,EACzB,WAAW,EAAE,YAAY,EACzB,eAAe,EAAE,gBAAgB,EACjC,iBAAiB,EAAE,kBAAkB,EAAE,oBAAoB,EAC3D,eAAe,EAAE,UAAU,EAAE,cAAc,EAC3C,aAAa,EAAE,cAAc,EAC7B,cAAc,EAAE,eAAe,GAChC,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/application/azure-sync/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAChG,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC9F,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC1F,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACvF,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACxE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAChH,YAAY,EACV,eAAe,EAAE,gBAAgB,EACjC,WAAW,EAAE,YAAY,EACzB,WAAW,EAAE,YAAY,EACzB,eAAe,EAAE,gBAAgB,EACjC,iBAAiB,EAAE,kBAAkB,EAAE,oBAAoB,EAC3D,eAAe,EAAE,UAAU,EAAE,cAAc,EAC3C,aAAa,EAAE,cAAc,EAC7B,cAAc,EAAE,eAAe,GAChC,MAAM,WAAW,CAAC"}
@@ -7,4 +7,5 @@ export { AzurePrUseCases } from "./pr-use-cases.js";
7
7
  export { AzureFieldBuilder } from "./field-builders.js";
8
8
  export { ReverseFieldBuilder } from "./reverse-field-builder.js";
9
9
  export { TaskPushUseCases, buildTaskLocalId, parseTaskLocalId } from "./task-push-use-cases.js";
10
+ export { AzurePollService, SyncEventUseCases } from "./poll-service.js";
10
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/application/azure-sync/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/application/azure-sync/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAIhG,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Azure Sync Application — Poll Service
3
+ *
4
+ * Background service that periodically queries Azure DevOps for changes
5
+ * to mapped work items. Detects field edits, state changes, and revision
6
+ * bumps by comparing current rev against stored azureRevision in mappings.
7
+ *
8
+ * Emits events via a callback when changes are detected, and persists
9
+ * SyncEvent entities for later inspection by the agent.
10
+ *
11
+ * SOLID: SRP — polling orchestration and change detection only
12
+ * SOLID: OCP — new event types can be added without modifying detection loop
13
+ * SOLID: DIP — depends on repository/port abstractions
14
+ */
15
+ import type { AzureDevOpsPort } from "../../domain/azure-sync/ports.js";
16
+ import type { SyncMappingRepository, SyncEventRepository } from "../../domain/azure-sync/repositories.js";
17
+ import type { SyncEventType } from "../../domain/azure-sync/value-objects.js";
18
+ /** Notification payload emitted when changes are detected. */
19
+ export interface PollNotification {
20
+ readonly eventCount: number;
21
+ readonly summary: string;
22
+ readonly events: readonly PollEventSummary[];
23
+ }
24
+ /** Individual event summary for notifications. */
25
+ export interface PollEventSummary {
26
+ readonly workItemId: number;
27
+ readonly eventType: SyncEventType;
28
+ readonly changedBy: string;
29
+ readonly localId: string;
30
+ }
31
+ /** Dependencies for the poll service. */
32
+ export interface PollServiceDeps {
33
+ readonly azureClient: AzureDevOpsPort;
34
+ readonly syncMappingRepo: SyncMappingRepository;
35
+ readonly syncEventRepo: SyncEventRepository;
36
+ readonly org: string;
37
+ readonly project: string;
38
+ /** Callback invoked when changes are detected. */
39
+ readonly onChangesDetected?: (notification: PollNotification) => void;
40
+ /** Callback for error logging. */
41
+ readonly onError?: (error: string) => void;
42
+ }
43
+ /**
44
+ * Background polling service for Azure DevOps change detection.
45
+ * Call start() to begin periodic polling, stop() to halt.
46
+ */
47
+ export declare class AzurePollService {
48
+ private readonly deps;
49
+ private readonly intervalSecs;
50
+ private timer;
51
+ private _running;
52
+ private _pollCount;
53
+ private _lastPollAt;
54
+ constructor(deps: PollServiceDeps, intervalSecs: number);
55
+ /** Whether the service is currently running. */
56
+ get running(): boolean;
57
+ /** Number of completed poll cycles. */
58
+ get pollCount(): number;
59
+ /** ISO timestamp of the last poll. */
60
+ get lastPollAt(): string | undefined;
61
+ /** Start the polling loop. No-op if already running. */
62
+ start(): void;
63
+ /** Stop the polling loop. */
64
+ stop(): void;
65
+ /** Execute a single poll cycle. Exposed for testing. */
66
+ poll(): Promise<PollNotification | undefined>;
67
+ }
68
+ /** DTOs for event tool responses. */
69
+ export interface SyncEventResponse {
70
+ readonly id: string;
71
+ readonly mappingId: string;
72
+ readonly azureWorkItemId: number;
73
+ readonly eventType: string;
74
+ readonly status: string;
75
+ readonly changedBy: string;
76
+ readonly changedFields: string;
77
+ readonly previousRevision: number;
78
+ readonly newRevision: number;
79
+ readonly detectedAt: string;
80
+ }
81
+ /** Use cases for managing sync events (list, acknowledge, dismiss). */
82
+ export declare class SyncEventUseCases {
83
+ private readonly eventRepo;
84
+ constructor(eventRepo: SyncEventRepository);
85
+ /** List pending events. */
86
+ listPending(limit?: number): Promise<readonly SyncEventResponse[]>;
87
+ /** List recent events (all statuses). */
88
+ listRecent(limit?: number): Promise<readonly SyncEventResponse[]>;
89
+ /** Acknowledge an event by ID. */
90
+ acknowledge(eventId: string): Promise<string>;
91
+ /** Dismiss an event by ID. */
92
+ dismiss(eventId: string): Promise<string>;
93
+ }
94
+ //# sourceMappingURL=poll-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poll-service.d.ts","sourceRoot":"","sources":["../../../src/application/azure-sync/poll-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAiB,MAAM,kCAAkC,CAAC;AACvF,OAAO,KAAK,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAI1G,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AAI9E,8DAA8D;AAC9D,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,SAAS,gBAAgB,EAAE,CAAC;CAC9C;AAED,kDAAkD;AAClD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,yCAAyC;AACzC,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC;IACtC,QAAQ,CAAC,eAAe,EAAE,qBAAqB,CAAC;IAChD,QAAQ,CAAC,aAAa,EAAE,mBAAmB,CAAC;IAC5C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,kDAAkD;IAClD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,YAAY,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACtE,kCAAkC;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5C;AAID;;;GAGG;AACH,qBAAa,gBAAgB;IAOzB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAP/B,OAAO,CAAC,KAAK,CAA6C;IAC1D,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,WAAW,CAAqB;gBAGrB,IAAI,EAAE,eAAe,EACrB,YAAY,EAAE,MAAM;IAOvC,gDAAgD;IAChD,IAAI,OAAO,IAAI,OAAO,CAA0B;IAEhD,uCAAuC;IACvC,IAAI,SAAS,IAAI,MAAM,CAA4B;IAEnD,sCAAsC;IACtC,IAAI,UAAU,IAAI,MAAM,GAAG,SAAS,CAA6B;IAEjE,wDAAwD;IACxD,KAAK,IAAI,IAAI;IAcb,6BAA6B;IAC7B,IAAI,IAAI,IAAI;IASZ,wDAAwD;IAClD,IAAI,IAAI,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;CAwEpD;AAID,qCAAqC;AACrC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,uEAAuE;AACvE,qBAAa,iBAAiB;IAChB,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,EAAE,mBAAmB;IAE3D,2BAA2B;IACrB,WAAW,CAAC,KAAK,SAAK,GAAG,OAAO,CAAC,SAAS,iBAAiB,EAAE,CAAC;IAKpE,yCAAyC;IACnC,UAAU,CAAC,KAAK,SAAK,GAAG,OAAO,CAAC,SAAS,iBAAiB,EAAE,CAAC;IAKnE,kCAAkC;IAC5B,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQnD,8BAA8B;IACxB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAOhD"}
@@ -0,0 +1,227 @@
1
+ /**
2
+ * Azure Sync Application — Poll Service
3
+ *
4
+ * Background service that periodically queries Azure DevOps for changes
5
+ * to mapped work items. Detects field edits, state changes, and revision
6
+ * bumps by comparing current rev against stored azureRevision in mappings.
7
+ *
8
+ * Emits events via a callback when changes are detected, and persists
9
+ * SyncEvent entities for later inspection by the agent.
10
+ *
11
+ * SOLID: SRP — polling orchestration and change detection only
12
+ * SOLID: OCP — new event types can be added without modifying detection loop
13
+ * SOLID: DIP — depends on repository/port abstractions
14
+ */
15
+ import { SyncEvent } from "../../domain/azure-sync/entities.js";
16
+ import { SyncEventId } from "../../domain/azure-sync/value-objects.js";
17
+ // ─── Poll Service ─────────────────────────────────────────────────────────────
18
+ /**
19
+ * Background polling service for Azure DevOps change detection.
20
+ * Call start() to begin periodic polling, stop() to halt.
21
+ */
22
+ export class AzurePollService {
23
+ deps;
24
+ intervalSecs;
25
+ timer;
26
+ _running = false;
27
+ _pollCount = 0;
28
+ _lastPollAt;
29
+ constructor(deps, intervalSecs) {
30
+ this.deps = deps;
31
+ this.intervalSecs = intervalSecs;
32
+ if (intervalSecs < 30) {
33
+ throw new Error("Poll interval must be at least 30 seconds");
34
+ }
35
+ }
36
+ /** Whether the service is currently running. */
37
+ get running() { return this._running; }
38
+ /** Number of completed poll cycles. */
39
+ get pollCount() { return this._pollCount; }
40
+ /** ISO timestamp of the last poll. */
41
+ get lastPollAt() { return this._lastPollAt; }
42
+ /** Start the polling loop. No-op if already running. */
43
+ start() {
44
+ if (this._running)
45
+ return;
46
+ this._running = true;
47
+ // Run immediately, then on interval
48
+ this.poll().catch((err) => {
49
+ this.deps.onError?.(`Poll failed: ${err instanceof Error ? err.message : String(err)}`);
50
+ });
51
+ this.timer = setInterval(() => {
52
+ this.poll().catch((err) => {
53
+ this.deps.onError?.(`Poll failed: ${err instanceof Error ? err.message : String(err)}`);
54
+ });
55
+ }, this.intervalSecs * 1000);
56
+ }
57
+ /** Stop the polling loop. */
58
+ stop() {
59
+ if (!this._running)
60
+ return;
61
+ this._running = false;
62
+ if (this.timer !== undefined) {
63
+ clearInterval(this.timer);
64
+ this.timer = undefined;
65
+ }
66
+ }
67
+ /** Execute a single poll cycle. Exposed for testing. */
68
+ async poll() {
69
+ const mappings = await this.deps.syncMappingRepo.findByProject(this.deps.project);
70
+ if (mappings.length === 0)
71
+ return undefined;
72
+ // Collect all Azure work item IDs from mappings
73
+ const idMap = new Map();
74
+ for (const m of mappings) {
75
+ idMap.set(m.azureWorkItemId.value, m);
76
+ }
77
+ const ids = [...idMap.keys()];
78
+ // Batch fetch current state from Azure
79
+ const result = await this.deps.azureClient.getWorkItemsBatch(this.deps.org, this.deps.project, ids);
80
+ if (!result.success) {
81
+ this.deps.onError?.(`Azure API error: ${result.error}`);
82
+ this._pollCount++;
83
+ this._lastPollAt = new Date().toISOString();
84
+ return undefined;
85
+ }
86
+ const events = [];
87
+ for (const workItem of result.data) {
88
+ const mapping = idMap.get(workItem.id);
89
+ if (!mapping)
90
+ continue;
91
+ // Compare revision — if unchanged, skip
92
+ if (workItem.rev <= mapping.azureRevision)
93
+ continue;
94
+ // Detect what changed
95
+ const eventType = detectEventType(workItem, mapping);
96
+ const changedBy = extractChangedBy(workItem);
97
+ const changedFields = extractChangedFields(workItem);
98
+ const seq = await this.deps.syncEventRepo.nextEventSequence();
99
+ const syncEvent = SyncEvent.create({
100
+ id: SyncEventId.create(seq),
101
+ mappingId: mapping.id,
102
+ azureWorkItemId: workItem.id,
103
+ eventType,
104
+ changedBy,
105
+ changedFields,
106
+ previousRevision: mapping.azureRevision,
107
+ newRevision: workItem.rev,
108
+ });
109
+ await this.deps.syncEventRepo.save(syncEvent);
110
+ events.push({
111
+ workItemId: workItem.id,
112
+ eventType,
113
+ changedBy,
114
+ localId: mapping.localId,
115
+ });
116
+ }
117
+ this._pollCount++;
118
+ this._lastPollAt = new Date().toISOString();
119
+ if (events.length === 0)
120
+ return undefined;
121
+ const notification = {
122
+ eventCount: events.length,
123
+ summary: `${events.length} change(s) detected in Azure DevOps`,
124
+ events,
125
+ };
126
+ this.deps.onChangesDetected?.(notification);
127
+ return notification;
128
+ }
129
+ }
130
+ /** Use cases for managing sync events (list, acknowledge, dismiss). */
131
+ export class SyncEventUseCases {
132
+ eventRepo;
133
+ constructor(eventRepo) {
134
+ this.eventRepo = eventRepo;
135
+ }
136
+ /** List pending events. */
137
+ async listPending(limit = 50) {
138
+ const events = await this.eventRepo.findPending(limit);
139
+ return events.map(toEventResponse);
140
+ }
141
+ /** List recent events (all statuses). */
142
+ async listRecent(limit = 20) {
143
+ const events = await this.eventRepo.findRecent(limit);
144
+ return events.map(toEventResponse);
145
+ }
146
+ /** Acknowledge an event by ID. */
147
+ async acknowledge(eventId) {
148
+ const event = await this.eventRepo.findById(SyncEventId.from(eventId));
149
+ if (!event)
150
+ return `Event ${eventId} not found`;
151
+ event.acknowledge();
152
+ await this.eventRepo.update(event);
153
+ return `Event ${eventId} acknowledged`;
154
+ }
155
+ /** Dismiss an event by ID. */
156
+ async dismiss(eventId) {
157
+ const event = await this.eventRepo.findById(SyncEventId.from(eventId));
158
+ if (!event)
159
+ return `Event ${eventId} not found`;
160
+ event.dismiss();
161
+ await this.eventRepo.update(event);
162
+ return `Event ${eventId} dismissed`;
163
+ }
164
+ }
165
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
166
+ function toEventResponse(e) {
167
+ const p = e.toProps();
168
+ return {
169
+ id: p.id, mappingId: p.mappingId,
170
+ azureWorkItemId: p.azureWorkItemId, eventType: p.eventType,
171
+ status: p.status, changedBy: p.changedBy,
172
+ changedFields: p.changedFields, previousRevision: p.previousRevision,
173
+ newRevision: p.newRevision, detectedAt: p.detectedAt,
174
+ };
175
+ }
176
+ /** Detect the type of change based on work item fields. */
177
+ function detectEventType(workItem, mapping) {
178
+ const stateField = workItem.fields["System.State"];
179
+ const prevState = mapping.toProps().syncStatus;
180
+ // If state changed, it's a state_change
181
+ if (typeof stateField === "string" && stateField.toLowerCase() !== prevState) {
182
+ return "state_change";
183
+ }
184
+ // Check for comment count change (heuristic)
185
+ const commentCount = workItem.fields["System.CommentCount"];
186
+ if (typeof commentCount === "number" && commentCount > 0) {
187
+ return "comment_added";
188
+ }
189
+ // Default: field change or general revision bump
190
+ const changedFields = extractChangedFields(workItem);
191
+ if (changedFields.length > 0)
192
+ return "field_change";
193
+ return "revision_bump";
194
+ }
195
+ /** Extract who last changed the work item. */
196
+ function extractChangedBy(workItem) {
197
+ const changedBy = workItem.fields["System.ChangedBy"];
198
+ if (typeof changedBy === "object" && changedBy !== null) {
199
+ const obj = changedBy;
200
+ if (typeof obj["displayName"] === "string")
201
+ return obj["displayName"];
202
+ if (typeof obj["uniqueName"] === "string")
203
+ return obj["uniqueName"];
204
+ }
205
+ if (typeof changedBy === "string")
206
+ return changedBy;
207
+ return "unknown";
208
+ }
209
+ /** Extract names of recently changed fields. */
210
+ function extractChangedFields(workItem) {
211
+ // Azure API doesn't directly tell us which fields changed in a rev bump.
212
+ // We report key fields present in the response as a heuristic.
213
+ const interesting = [
214
+ "System.State", "System.Title", "System.Description",
215
+ "System.AssignedTo", "Microsoft.VSTS.Scheduling.StoryPoints",
216
+ "System.Tags",
217
+ ];
218
+ const present = [];
219
+ for (const field of interesting) {
220
+ if (workItem.fields[field] !== undefined) {
221
+ const short = field.split(".").pop() ?? field;
222
+ present.push(short);
223
+ }
224
+ }
225
+ return present.join(", ");
226
+ }
227
+ //# sourceMappingURL=poll-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"poll-service.js","sourceRoot":"","sources":["../../../src/application/azure-sync/poll-service.ts"],"names":[],"mappings":"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"}
@@ -8,8 +8,9 @@
8
8
  * SOLID: SRP — each entity manages its own state and invariants
9
9
  * DDD: Entities with identity and lifecycle, mutable state with guards
10
10
  */
11
- import type { Timestamp } from "../shared/value-objects.js";
12
- import type { SyncMappingId, SyncLogId, WorkItemId, SyncDirection, SyncStatus, LocalEntityType, ProcessTemplate } from "./value-objects.js";
11
+ import { Timestamp } from "../shared/value-objects.js";
12
+ import { SyncMappingId, SyncLogId, SyncEventId } from "./value-objects.js";
13
+ import type { WorkItemId, SyncDirection, SyncStatus, LocalEntityType, ProcessTemplate, SyncEventType, SyncEventStatus } from "./value-objects.js";
13
14
  /** Serializable properties for SyncMapping persistence. */
14
15
  export interface SyncMappingProps {
15
16
  readonly id: string;
@@ -162,4 +163,60 @@ export declare class SyncLog {
162
163
  get timestamp(): Timestamp;
163
164
  toProps(): SyncLogProps;
164
165
  }
166
+ /** Serializable props for SyncEvent persistence. */
167
+ export interface SyncEventProps {
168
+ readonly id: string;
169
+ readonly mappingId: string;
170
+ readonly azureWorkItemId: number;
171
+ readonly eventType: SyncEventType;
172
+ readonly status: SyncEventStatus;
173
+ readonly changedBy: string;
174
+ readonly changedFields: string;
175
+ readonly previousRevision: number;
176
+ readonly newRevision: number;
177
+ readonly detectedAt: string;
178
+ }
179
+ /**
180
+ * Immutable entity representing a detected change in Azure DevOps.
181
+ * Created by the poll service when a mapped work item changes.
182
+ */
183
+ export declare class SyncEvent {
184
+ private readonly _id;
185
+ private readonly _mappingId;
186
+ private readonly _azureWorkItemId;
187
+ private readonly _eventType;
188
+ private _status;
189
+ private readonly _changedBy;
190
+ private readonly _changedFields;
191
+ private readonly _previousRevision;
192
+ private readonly _newRevision;
193
+ private readonly _detectedAt;
194
+ private constructor();
195
+ static create(params: {
196
+ id: SyncEventId;
197
+ mappingId: SyncMappingId;
198
+ azureWorkItemId: number;
199
+ eventType: SyncEventType;
200
+ changedBy: string;
201
+ changedFields: string;
202
+ previousRevision: number;
203
+ newRevision: number;
204
+ }): SyncEvent;
205
+ static reconstitute(props: SyncEventProps): SyncEvent;
206
+ get id(): SyncEventId;
207
+ get mappingId(): SyncMappingId;
208
+ get azureWorkItemId(): number;
209
+ get eventType(): SyncEventType;
210
+ get status(): SyncEventStatus;
211
+ get changedBy(): string;
212
+ get changedFields(): string;
213
+ get previousRevision(): number;
214
+ get newRevision(): number;
215
+ get detectedAt(): Timestamp;
216
+ /** Mark event as acknowledged by the agent. */
217
+ acknowledge(): void;
218
+ /** Dismiss event (agent decided not to act). */
219
+ dismiss(): void;
220
+ toProps(): SyncEventProps;
221
+ }
165
222
  //# sourceMappingURL=entities.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"entities.d.ts","sourceRoot":"","sources":["../../../src/domain/azure-sync/entities.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"entities.d.ts","sourceRoot":"","sources":["../../../src/domain/azure-sync/entities.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,8 @@
8
8
  * SOLID: SRP — each entity manages its own state and invariants
9
9
  * DDD: Entities with identity and lifecycle, mutable state with guards
10
10
  */
11
+ import { Timestamp } from "../shared/value-objects.js";
12
+ import { SyncMappingId, SyncLogId, SyncEventId, } from "./value-objects.js";
11
13
  // ─── SyncMapping Entity ───────────────────────────────────────────────────────
12
14
  /**
13
15
  * Tracks the mapping between a local JARVIS entity and an Azure DevOps work item.
@@ -200,4 +202,61 @@ export class SyncLog {
200
202
  };
201
203
  }
202
204
  }
205
+ /**
206
+ * Immutable entity representing a detected change in Azure DevOps.
207
+ * Created by the poll service when a mapped work item changes.
208
+ */
209
+ export class SyncEvent {
210
+ _id;
211
+ _mappingId;
212
+ _azureWorkItemId;
213
+ _eventType;
214
+ _status;
215
+ _changedBy;
216
+ _changedFields;
217
+ _previousRevision;
218
+ _newRevision;
219
+ _detectedAt;
220
+ constructor(_id, _mappingId, _azureWorkItemId, _eventType, _status, _changedBy, _changedFields, _previousRevision, _newRevision, _detectedAt) {
221
+ this._id = _id;
222
+ this._mappingId = _mappingId;
223
+ this._azureWorkItemId = _azureWorkItemId;
224
+ this._eventType = _eventType;
225
+ this._status = _status;
226
+ this._changedBy = _changedBy;
227
+ this._changedFields = _changedFields;
228
+ this._previousRevision = _previousRevision;
229
+ this._newRevision = _newRevision;
230
+ this._detectedAt = _detectedAt;
231
+ }
232
+ static create(params) {
233
+ return new SyncEvent(params.id, params.mappingId, params.azureWorkItemId, params.eventType, "pending", params.changedBy, params.changedFields, params.previousRevision, params.newRevision, Timestamp.now());
234
+ }
235
+ static reconstitute(props) {
236
+ return new SyncEvent(SyncEventId.from(props.id), SyncMappingId.from(props.mappingId), props.azureWorkItemId, props.eventType, props.status, props.changedBy, props.changedFields, props.previousRevision, props.newRevision, Timestamp.fromISO(props.detectedAt));
237
+ }
238
+ get id() { return this._id; }
239
+ get mappingId() { return this._mappingId; }
240
+ get azureWorkItemId() { return this._azureWorkItemId; }
241
+ get eventType() { return this._eventType; }
242
+ get status() { return this._status; }
243
+ get changedBy() { return this._changedBy; }
244
+ get changedFields() { return this._changedFields; }
245
+ get previousRevision() { return this._previousRevision; }
246
+ get newRevision() { return this._newRevision; }
247
+ get detectedAt() { return this._detectedAt; }
248
+ /** Mark event as acknowledged by the agent. */
249
+ acknowledge() { this._status = "acknowledged"; }
250
+ /** Dismiss event (agent decided not to act). */
251
+ dismiss() { this._status = "dismissed"; }
252
+ toProps() {
253
+ return {
254
+ id: this._id.value, mappingId: this._mappingId.value,
255
+ azureWorkItemId: this._azureWorkItemId, eventType: this._eventType,
256
+ status: this._status, changedBy: this._changedBy,
257
+ changedFields: this._changedFields, previousRevision: this._previousRevision,
258
+ newRevision: this._newRevision, detectedAt: this._detectedAt.toISO(),
259
+ };
260
+ }
261
+ }
203
262
  //# sourceMappingURL=entities.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"entities.js","sourceRoot":"","sources":["../../../src/domain/azure-sync/entities.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"entities.js","sourceRoot":"","sources":["../../../src/domain/azure-sync/entities.ts"],"names":[],"mappings":"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"}
@@ -4,12 +4,12 @@
4
4
  * Public API for the azure-sync bounded context domain layer.
5
5
  * Groups exports by category for clean import paths.
6
6
  */
7
- export { SyncMappingId, SyncLogId, AzureOrgUrl, WorkItemId, FieldMapping, PROCESS_TEMPLATES, WORK_ITEM_TYPES, SYNC_DIRECTIONS, SYNC_STATUSES, AZURE_STATES, LOCAL_KANBAN_STATES, LOCAL_TO_AZURE_STATE, AZURE_TO_LOCAL_STATE, LOCAL_TO_AZURE_TYPE, FIELD_FALLBACKS, AUTH_METHODS, LOCAL_ENTITY_TYPES, isValidProcessTemplate, isValidSyncDirection, isValidSyncStatus, isValidFieldFallback, isValidAuthMethod, isValidLocalEntityType, } from "./value-objects.js";
8
- export type { ProcessTemplate, WorkItemType, SyncDirection, SyncStatus, LocalKanbanState, FieldFallback, AuthMethod, LocalEntityType, } from "./value-objects.js";
9
- export { SyncMapping, SyncLog } from "./entities.js";
7
+ export { SyncMappingId, SyncLogId, SyncEventId, AzureOrgUrl, WorkItemId, FieldMapping, PROCESS_TEMPLATES, WORK_ITEM_TYPES, SYNC_DIRECTIONS, SYNC_STATUSES, SYNC_EVENT_TYPES, SYNC_EVENT_STATUSES, AZURE_STATES, LOCAL_KANBAN_STATES, LOCAL_TO_AZURE_STATE, AZURE_TO_LOCAL_STATE, LOCAL_TO_AZURE_TYPE, FIELD_FALLBACKS, AUTH_METHODS, LOCAL_ENTITY_TYPES, isValidProcessTemplate, isValidSyncDirection, isValidSyncStatus, isValidFieldFallback, isValidAuthMethod, isValidLocalEntityType, } from "./value-objects.js";
8
+ export type { ProcessTemplate, WorkItemType, SyncDirection, SyncStatus, SyncEventType, SyncEventStatus, LocalKanbanState, FieldFallback, AuthMethod, LocalEntityType, } from "./value-objects.js";
9
+ export { SyncMapping, SyncLog, SyncEvent } from "./entities.js";
10
10
  export { SYNC_LOG_STATUSES } from "./entities.js";
11
- export type { SyncMappingProps, SyncLogProps, SyncLogStatus, } from "./entities.js";
12
- export type { SyncMappingRepository, SyncLogRepository, } from "./repositories.js";
11
+ export type { SyncMappingProps, SyncLogProps, SyncLogStatus, SyncEventProps, } from "./entities.js";
12
+ export type { SyncMappingRepository, SyncLogRepository, SyncEventRepository, } from "./repositories.js";
13
13
  export { FieldMapper, ConflictResolver, AZURE_FIELDS, sanitizeIterationName } from "./services.js";
14
14
  export type { ConflictResolution } from "./services.js";
15
15
  export type { AzureDevOpsPort, AzureWorkItem, WorkItemPatchOp, WorkItemResult, AzureIteration, AzureProjectInfo, AzurePullRequest, PullRequestReviewer, CreatePullRequestInput, } from "./ports.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/domain/azure-sync/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EACL,aAAa,EACb,SAAS,EACT,WAAW,EACX,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EACV,eAAe,EACf,YAAY,EACZ,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,aAAa,EACb,UAAU,EACV,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,aAAa,GACd,MAAM,eAAe,CAAC;AAIvB,YAAY,EACV,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACnG,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAIxD,YAAY,EACV,eAAe,EACf,aAAa,EACb,eAAe,EACf,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/domain/azure-sync/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EACL,aAAa,EACb,SAAS,EACT,WAAW,EACX,WAAW,EACX,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACnB,YAAY,EACZ,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EACV,eAAe,EACf,YAAY,EACZ,aAAa,EACb,UAAU,EACV,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,UAAU,EACV,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,cAAc,GACf,MAAM,eAAe,CAAC;AAIvB,YAAY,EACV,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACnG,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAIxD,YAAY,EACV,eAAe,EACf,aAAa,EACb,eAAe,EACf,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,YAAY,CAAC"}
@@ -5,9 +5,9 @@
5
5
  * Groups exports by category for clean import paths.
6
6
  */
7
7
  // ── Value Objects ────────────────────────────────────────────────────────────
8
- export { SyncMappingId, SyncLogId, AzureOrgUrl, WorkItemId, FieldMapping, PROCESS_TEMPLATES, WORK_ITEM_TYPES, SYNC_DIRECTIONS, SYNC_STATUSES, AZURE_STATES, LOCAL_KANBAN_STATES, LOCAL_TO_AZURE_STATE, AZURE_TO_LOCAL_STATE, LOCAL_TO_AZURE_TYPE, FIELD_FALLBACKS, AUTH_METHODS, LOCAL_ENTITY_TYPES, isValidProcessTemplate, isValidSyncDirection, isValidSyncStatus, isValidFieldFallback, isValidAuthMethod, isValidLocalEntityType, } from "./value-objects.js";
8
+ export { SyncMappingId, SyncLogId, SyncEventId, AzureOrgUrl, WorkItemId, FieldMapping, PROCESS_TEMPLATES, WORK_ITEM_TYPES, SYNC_DIRECTIONS, SYNC_STATUSES, SYNC_EVENT_TYPES, SYNC_EVENT_STATUSES, AZURE_STATES, LOCAL_KANBAN_STATES, LOCAL_TO_AZURE_STATE, AZURE_TO_LOCAL_STATE, LOCAL_TO_AZURE_TYPE, FIELD_FALLBACKS, AUTH_METHODS, LOCAL_ENTITY_TYPES, isValidProcessTemplate, isValidSyncDirection, isValidSyncStatus, isValidFieldFallback, isValidAuthMethod, isValidLocalEntityType, } from "./value-objects.js";
9
9
  // ── Entities ─────────────────────────────────────────────────────────────────
10
- export { SyncMapping, SyncLog } from "./entities.js";
10
+ export { SyncMapping, SyncLog, SyncEvent } from "./entities.js";
11
11
  export { SYNC_LOG_STATUSES } from "./entities.js";
12
12
  // ── Domain Services ──────────────────────────────────────────────────────────
13
13
  export { FieldMapper, ConflictResolver, AZURE_FIELDS, sanitizeIterationName } from "./services.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domain/azure-sync/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,gFAAgF;AAEhF,OAAO,EACL,aAAa,EACb,SAAS,EACT,WAAW,EACX,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAa5B,gFAAgF;AAEhF,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAelD,gFAAgF;AAEhF,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domain/azure-sync/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,gFAAgF;AAEhF,OAAO,EACL,aAAa,EACb,SAAS,EACT,WAAW,EACX,WAAW,EACX,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,mBAAmB,EACnB,YAAY,EACZ,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAe5B,gFAAgF;AAEhF,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAiBlD,gFAAgF;AAEhF,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC"}
@@ -91,6 +91,8 @@ export interface AzureDevOpsPort {
91
91
  getProjectInfo(org: string, project: string): Promise<Result<AzureProjectInfo>>;
92
92
  /** Get a single work item by ID. */
93
93
  getWorkItem(org: string, project: string, id: number): Promise<Result<AzureWorkItem>>;
94
+ /** Get multiple work items by IDs in a single batch request. */
95
+ getWorkItemsBatch(org: string, project: string, ids: readonly number[]): Promise<Result<readonly AzureWorkItem[]>>;
94
96
  /** List work items of a given type. */
95
97
  listWorkItems(org: string, project: string, workItemType: WorkItemType, top?: number): Promise<Result<readonly AzureWorkItem[]>>;
96
98
  /** Create a new work item. */