@proletariat/cli 0.3.64 → 0.3.65
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/work/start.js +122 -99
- package/dist/commands/work/start.js.map +1 -1
- package/dist/lib/database/index.d.ts +1 -1
- package/dist/lib/database/index.js +9 -107
- package/dist/lib/database/index.js.map +1 -1
- package/dist/lib/database/migrations/0001_baseline.d.ts +9 -0
- package/dist/lib/database/migrations/0001_baseline.js +18 -0
- package/dist/lib/database/migrations/0001_baseline.js.map +1 -0
- package/dist/lib/database/migrations/index.d.ts +12 -0
- package/dist/lib/database/migrations/index.js +15 -0
- package/dist/lib/database/migrations/index.js.map +1 -0
- package/dist/lib/database/migrator.d.ts +27 -0
- package/dist/lib/database/migrator.js +42 -0
- package/dist/lib/database/migrator.js.map +1 -0
- package/dist/lib/database/workspace-schema.d.ts +7 -0
- package/dist/lib/database/workspace-schema.js +109 -0
- package/dist/lib/database/workspace-schema.js.map +1 -0
- package/dist/lib/events/events.d.ts +5 -0
- package/dist/lib/events/index.d.ts +1 -1
- package/dist/lib/events/index.js.map +1 -1
- package/dist/lib/external-issues/outbound-sync.d.ts +21 -16
- package/dist/lib/external-issues/outbound-sync.js +64 -49
- package/dist/lib/external-issues/outbound-sync.js.map +1 -1
- package/dist/lib/pmo/sync-manager.js +5 -1
- package/dist/lib/pmo/sync-manager.js.map +1 -1
- package/dist/lib/work-lifecycle/adapter.d.ts +34 -0
- package/dist/lib/work-lifecycle/adapter.js +103 -0
- package/dist/lib/work-lifecycle/adapter.js.map +1 -0
- package/dist/lib/work-lifecycle/events.d.ts +52 -0
- package/dist/lib/work-lifecycle/events.js +12 -0
- package/dist/lib/work-lifecycle/events.js.map +1 -0
- package/dist/lib/work-lifecycle/index.d.ts +9 -0
- package/dist/lib/work-lifecycle/index.js +9 -0
- package/dist/lib/work-lifecycle/index.js.map +1 -0
- package/oclif.manifest.json +2700 -2700
- package/package.json +1 -1
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Outbound Sync Handler
|
|
3
3
|
*
|
|
4
|
-
* Listens for
|
|
5
|
-
* to external issue trackers (Linear, Shortcut, etc.) via their
|
|
4
|
+
* Listens for work-lifecycle domain events on the EventBus and pushes
|
|
5
|
+
* changes to external issue trackers (Linear, Shortcut, etc.) via their
|
|
6
6
|
* respective adapters.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
8
|
+
* Subscribes to work:* events (provider-agnostic), NOT ticket:* events.
|
|
9
|
+
* The work-lifecycle adapter layer translates provider-specific events
|
|
10
|
+
* into these domain events, keeping PMO as just another provider.
|
|
10
11
|
*/
|
|
11
12
|
import { getEventBus } from '../events/event-bus.js';
|
|
12
13
|
import { LinearClient } from '../linear/client.js';
|
|
@@ -15,9 +16,9 @@ import { LinearSync } from '../linear/sync.js';
|
|
|
15
16
|
import { loadLinearConfig, isLinearConfigured } from '../linear/config.js';
|
|
16
17
|
import { ExternalExecutionMappingStore } from './mapping-store.js';
|
|
17
18
|
/**
|
|
18
|
-
* OutboundSyncHandler subscribes to
|
|
19
|
-
* to mapped external providers. It is fire-and-forget:
|
|
20
|
-
* are logged but never block the caller.
|
|
19
|
+
* OutboundSyncHandler subscribes to work-lifecycle domain events and
|
|
20
|
+
* pushes changes to mapped external providers. It is fire-and-forget:
|
|
21
|
+
* sync failures are logged but never block the caller.
|
|
21
22
|
*/
|
|
22
23
|
export class OutboundSyncHandler {
|
|
23
24
|
unsubscribers = [];
|
|
@@ -28,15 +29,16 @@ export class OutboundSyncHandler {
|
|
|
28
29
|
this.mappingStore = new ExternalExecutionMappingStore(db);
|
|
29
30
|
}
|
|
30
31
|
/**
|
|
31
|
-
* Start listening for
|
|
32
|
+
* Start listening for work-lifecycle events on the global EventBus.
|
|
33
|
+
* Subscribes to work:* domain events, not provider-specific ticket:* events.
|
|
32
34
|
* Call `stop()` to unsubscribe.
|
|
33
35
|
*/
|
|
34
36
|
start() {
|
|
35
37
|
const bus = getEventBus();
|
|
36
|
-
this.unsubscribers.push(bus.on('
|
|
38
|
+
this.unsubscribers.push(bus.on('work:status_changed', (event) => {
|
|
37
39
|
void this.handleStatusChanged(event);
|
|
38
40
|
}));
|
|
39
|
-
this.unsubscribers.push(bus.on('
|
|
41
|
+
this.unsubscribers.push(bus.on('work:pr_created', (event) => {
|
|
40
42
|
void this.handlePRLinked(event);
|
|
41
43
|
}));
|
|
42
44
|
}
|
|
@@ -50,19 +52,23 @@ export class OutboundSyncHandler {
|
|
|
50
52
|
this.unsubscribers = [];
|
|
51
53
|
}
|
|
52
54
|
/**
|
|
53
|
-
* Handle a
|
|
55
|
+
* Handle a work status change by syncing to all mapped external providers.
|
|
56
|
+
* Skips syncing back to the source provider to avoid loops.
|
|
54
57
|
*/
|
|
55
58
|
async handleStatusChanged(event) {
|
|
56
59
|
const results = [];
|
|
57
60
|
// Try Linear sync (via Linear-specific mapping table)
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
61
|
+
// Skip if the event originated from Linear to avoid loops
|
|
62
|
+
if (event.source !== 'linear') {
|
|
63
|
+
try {
|
|
64
|
+
const linearResult = await this.syncStatusToLinear(event);
|
|
65
|
+
if (linearResult) {
|
|
66
|
+
results.push(linearResult);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
// Sync errors are non-fatal
|
|
62
71
|
}
|
|
63
|
-
}
|
|
64
|
-
catch {
|
|
65
|
-
// Sync errors are non-fatal
|
|
66
72
|
}
|
|
67
73
|
// Try provider-agnostic sync via external_execution_map
|
|
68
74
|
try {
|
|
@@ -75,19 +81,22 @@ export class OutboundSyncHandler {
|
|
|
75
81
|
return results;
|
|
76
82
|
}
|
|
77
83
|
/**
|
|
78
|
-
* Handle a PR
|
|
84
|
+
* Handle a PR creation by syncing to all mapped external providers.
|
|
85
|
+
* Skips syncing back to the source provider to avoid loops.
|
|
79
86
|
*/
|
|
80
87
|
async handlePRLinked(event) {
|
|
81
88
|
const results = [];
|
|
82
|
-
// Try Linear sync
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
89
|
+
// Try Linear sync (skip if event came from Linear)
|
|
90
|
+
if (event.source !== 'linear') {
|
|
91
|
+
try {
|
|
92
|
+
const linearResult = await this.syncPRToLinear(event);
|
|
93
|
+
if (linearResult) {
|
|
94
|
+
results.push(linearResult);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
// Sync errors are non-fatal
|
|
87
99
|
}
|
|
88
|
-
}
|
|
89
|
-
catch {
|
|
90
|
-
// Sync errors are non-fatal
|
|
91
100
|
}
|
|
92
101
|
// Update provider-agnostic mapping with PR URL
|
|
93
102
|
try {
|
|
@@ -102,7 +111,7 @@ export class OutboundSyncHandler {
|
|
|
102
111
|
// Linear Sync
|
|
103
112
|
// ===========================================================================
|
|
104
113
|
/**
|
|
105
|
-
* Sync a status change to Linear if the
|
|
114
|
+
* Sync a status change to Linear if the work item has a Linear mapping.
|
|
106
115
|
*/
|
|
107
116
|
async syncStatusToLinear(event) {
|
|
108
117
|
if (!isLinearConfigured(this.db))
|
|
@@ -111,15 +120,15 @@ export class OutboundSyncHandler {
|
|
|
111
120
|
if (!config)
|
|
112
121
|
return null;
|
|
113
122
|
const mapper = new LinearMapper(this.db);
|
|
114
|
-
const mapping = mapper.getByTicketId(event.
|
|
123
|
+
const mapping = mapper.getByTicketId(event.workItemId);
|
|
115
124
|
if (!mapping)
|
|
116
125
|
return null;
|
|
117
126
|
// Only sync outbound or bidirectional mappings
|
|
118
127
|
if (mapping.syncDirection === 'inbound')
|
|
119
128
|
return null;
|
|
120
|
-
const category = event.
|
|
129
|
+
const category = event.newCategory;
|
|
121
130
|
if (!category) {
|
|
122
|
-
return { provider: 'linear', success: false, error: 'No status category on
|
|
131
|
+
return { provider: 'linear', success: false, error: 'No status category on work item' };
|
|
123
132
|
}
|
|
124
133
|
try {
|
|
125
134
|
const client = new LinearClient(config.apiKey);
|
|
@@ -135,10 +144,10 @@ export class OutboundSyncHandler {
|
|
|
135
144
|
}
|
|
136
145
|
await client.updateIssueState(mapping.linearIssueId, matchingState.id);
|
|
137
146
|
// Post a comment about the status change
|
|
138
|
-
if (event.
|
|
139
|
-
await client.addComment(mapping.linearIssueId, `Status updated to **${event.
|
|
147
|
+
if (event.newStatus) {
|
|
148
|
+
await client.addComment(mapping.linearIssueId, `Status updated to **${event.newStatus}** (via prlt)`);
|
|
140
149
|
}
|
|
141
|
-
mapper.updateSyncTimestamp(event.
|
|
150
|
+
mapper.updateSyncTimestamp(event.workItemId);
|
|
142
151
|
return { provider: 'linear', success: true };
|
|
143
152
|
}
|
|
144
153
|
catch (err) {
|
|
@@ -150,7 +159,7 @@ export class OutboundSyncHandler {
|
|
|
150
159
|
}
|
|
151
160
|
}
|
|
152
161
|
/**
|
|
153
|
-
* Sync a PR link to Linear if the
|
|
162
|
+
* Sync a PR link to Linear if the work item has a Linear mapping.
|
|
154
163
|
*/
|
|
155
164
|
async syncPRToLinear(event) {
|
|
156
165
|
if (!isLinearConfigured(this.db))
|
|
@@ -159,7 +168,7 @@ export class OutboundSyncHandler {
|
|
|
159
168
|
if (!config)
|
|
160
169
|
return null;
|
|
161
170
|
const mapper = new LinearMapper(this.db);
|
|
162
|
-
const mapping = mapper.getByTicketId(event.
|
|
171
|
+
const mapping = mapper.getByTicketId(event.workItemId);
|
|
163
172
|
if (!mapping)
|
|
164
173
|
return null;
|
|
165
174
|
// Only sync outbound or bidirectional mappings
|
|
@@ -168,7 +177,7 @@ export class OutboundSyncHandler {
|
|
|
168
177
|
try {
|
|
169
178
|
const client = new LinearClient(config.apiKey);
|
|
170
179
|
const sync = new LinearSync(client, mapper);
|
|
171
|
-
const success = await sync.syncPRLink(event.
|
|
180
|
+
const success = await sync.syncPRLink(event.workItemId, event.prUrl, event.prTitle ?? 'Pull Request');
|
|
172
181
|
return { provider: 'linear', success };
|
|
173
182
|
}
|
|
174
183
|
catch (err) {
|
|
@@ -185,16 +194,19 @@ export class OutboundSyncHandler {
|
|
|
185
194
|
/**
|
|
186
195
|
* Sync status changes to providers tracked via the external_execution_map table.
|
|
187
196
|
* Updates the state snapshot so that future inbound syncs can detect drift.
|
|
197
|
+
* Skips the source provider to avoid sync loops.
|
|
188
198
|
*/
|
|
189
199
|
async syncStatusToMappedProviders(event) {
|
|
190
200
|
const results = [];
|
|
191
|
-
// Find all external mappings that reference this
|
|
192
|
-
|
|
193
|
-
const mappings = this.findMappingsForTicket(event.ticketId);
|
|
201
|
+
// Find all external mappings that reference this work item
|
|
202
|
+
const mappings = this.findMappingsForWorkItem(event.workItemId);
|
|
194
203
|
for (const mapping of mappings) {
|
|
195
204
|
// Skip Linear here (handled separately above with its full API integration)
|
|
196
205
|
if (mapping.provider === 'linear')
|
|
197
206
|
continue;
|
|
207
|
+
// Skip the source provider to avoid sync loops
|
|
208
|
+
if (mapping.provider === event.source)
|
|
209
|
+
continue;
|
|
198
210
|
try {
|
|
199
211
|
// Update the state snapshot to reflect the new status
|
|
200
212
|
this.mappingStore.upsertMapping({
|
|
@@ -202,8 +214,8 @@ export class OutboundSyncHandler {
|
|
|
202
214
|
externalId: mapping.externalId,
|
|
203
215
|
latestStateSnapshot: {
|
|
204
216
|
...(mapping.latestStateSnapshot ?? {}),
|
|
205
|
-
ticketStatus: event.
|
|
206
|
-
ticketCategory: event.
|
|
217
|
+
ticketStatus: event.newStatus,
|
|
218
|
+
ticketCategory: event.newCategory,
|
|
207
219
|
lastOutboundSync: new Date().toISOString(),
|
|
208
220
|
},
|
|
209
221
|
lastSyncedAt: new Date(),
|
|
@@ -221,11 +233,14 @@ export class OutboundSyncHandler {
|
|
|
221
233
|
return results;
|
|
222
234
|
}
|
|
223
235
|
/**
|
|
224
|
-
* Record a PR URL in all external mappings for a
|
|
236
|
+
* Record a PR URL in all external mappings for a work item.
|
|
225
237
|
*/
|
|
226
238
|
recordPRInMappings(event) {
|
|
227
|
-
const mappings = this.
|
|
239
|
+
const mappings = this.findMappingsForWorkItem(event.workItemId);
|
|
228
240
|
for (const mapping of mappings) {
|
|
241
|
+
// Skip the source provider to avoid sync loops
|
|
242
|
+
if (mapping.provider === event.source)
|
|
243
|
+
continue;
|
|
229
244
|
try {
|
|
230
245
|
this.mappingStore.upsertMapping({
|
|
231
246
|
provider: mapping.provider,
|
|
@@ -240,16 +255,16 @@ export class OutboundSyncHandler {
|
|
|
240
255
|
}
|
|
241
256
|
}
|
|
242
257
|
/**
|
|
243
|
-
* Find external execution mappings associated with a
|
|
244
|
-
* Checks the latest_state_snapshot for
|
|
258
|
+
* Find external execution mappings associated with a work item.
|
|
259
|
+
* Checks the latest_state_snapshot for work item ID references.
|
|
245
260
|
*/
|
|
246
|
-
|
|
247
|
-
// Query external_execution_map where latest_state_snapshot contains the
|
|
261
|
+
findMappingsForWorkItem(workItemId) {
|
|
262
|
+
// Query external_execution_map where latest_state_snapshot contains the work item ID
|
|
248
263
|
const rows = this.db.prepare(`
|
|
249
264
|
SELECT provider, external_id, latest_state_snapshot
|
|
250
265
|
FROM pmo_external_execution_map
|
|
251
266
|
WHERE latest_state_snapshot LIKE ?
|
|
252
|
-
`).all(`%${
|
|
267
|
+
`).all(`%${workItemId}%`);
|
|
253
268
|
return rows.map((row) => ({
|
|
254
269
|
provider: row.provider,
|
|
255
270
|
externalId: row.external_id,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outbound-sync.js","sourceRoot":"","sources":["../../../src/lib/external-issues/outbound-sync.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"outbound-sync.js","sourceRoot":"","sources":["../../../src/lib/external-issues/outbound-sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,7 @@ import * as path from 'node:path';
|
|
|
22
22
|
import * as crypto from 'node:crypto';
|
|
23
23
|
import { SQLiteStorage } from './storage-sqlite.js';
|
|
24
24
|
import { parseBoard } from './markdown.js';
|
|
25
|
+
import { initWorkLifecycleAdapter } from '../work-lifecycle/adapter.js';
|
|
25
26
|
import { initOutboundSync } from '../external-issues/outbound-sync.js';
|
|
26
27
|
/**
|
|
27
28
|
* Get the board path for a project
|
|
@@ -216,7 +217,10 @@ export function getStorageWithAutoSync(pmoPath, _storageType, _logger) {
|
|
|
216
217
|
}
|
|
217
218
|
// Note: Storage no longer holds project context - projectId is passed explicitly to operations
|
|
218
219
|
const storage = new SQLiteStorage(dbPath);
|
|
219
|
-
// Initialize
|
|
220
|
+
// Initialize work-lifecycle adapter (translates ticket:* → work:* events)
|
|
221
|
+
// Must be initialized before outbound sync so events flow: PMO → adapter → sync handler
|
|
222
|
+
initWorkLifecycleAdapter();
|
|
223
|
+
// Initialize outbound sync hooks (subscribes to work:* events)
|
|
220
224
|
initOutboundSync(storage.getDatabase());
|
|
221
225
|
return storage;
|
|
222
226
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-manager.js","sourceRoot":"","sources":["../../../src/lib/pmo/sync-manager.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"sync-manager.js","sourceRoot":"","sources":["../../../src/lib/pmo/sync-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Work Lifecycle Adapter
|
|
3
|
+
*
|
|
4
|
+
* Bridges provider-specific events to work-lifecycle domain events.
|
|
5
|
+
* PMO ticket events are translated into provider-agnostic work events,
|
|
6
|
+
* making PMO just another event source rather than the central hub.
|
|
7
|
+
*
|
|
8
|
+
* Additional adapters can be registered to translate events from
|
|
9
|
+
* other providers (GitHub, Linear inbound webhooks, etc.).
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* WorkLifecycleAdapter subscribes to provider-specific events and
|
|
13
|
+
* re-emits them as work-lifecycle domain events on the same EventBus.
|
|
14
|
+
*/
|
|
15
|
+
export declare class WorkLifecycleAdapter {
|
|
16
|
+
private unsubscribers;
|
|
17
|
+
/**
|
|
18
|
+
* Start the PMO adapter — translates ticket:* events to work:* events.
|
|
19
|
+
*/
|
|
20
|
+
startPMOAdapter(): void;
|
|
21
|
+
/**
|
|
22
|
+
* Stop all adapters and unsubscribe from events.
|
|
23
|
+
*/
|
|
24
|
+
stop(): void;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Initialize the work-lifecycle adapter layer.
|
|
28
|
+
* Safe to call multiple times — subsequent calls are no-ops.
|
|
29
|
+
*/
|
|
30
|
+
export declare function initWorkLifecycleAdapter(): WorkLifecycleAdapter;
|
|
31
|
+
/**
|
|
32
|
+
* Stop the work-lifecycle adapter (primarily for testing).
|
|
33
|
+
*/
|
|
34
|
+
export declare function stopWorkLifecycleAdapter(): void;
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Work Lifecycle Adapter
|
|
3
|
+
*
|
|
4
|
+
* Bridges provider-specific events to work-lifecycle domain events.
|
|
5
|
+
* PMO ticket events are translated into provider-agnostic work events,
|
|
6
|
+
* making PMO just another event source rather than the central hub.
|
|
7
|
+
*
|
|
8
|
+
* Additional adapters can be registered to translate events from
|
|
9
|
+
* other providers (GitHub, Linear inbound webhooks, etc.).
|
|
10
|
+
*/
|
|
11
|
+
import { getEventBus } from '../events/event-bus.js';
|
|
12
|
+
/**
|
|
13
|
+
* WorkLifecycleAdapter subscribes to provider-specific events and
|
|
14
|
+
* re-emits them as work-lifecycle domain events on the same EventBus.
|
|
15
|
+
*/
|
|
16
|
+
export class WorkLifecycleAdapter {
|
|
17
|
+
unsubscribers = [];
|
|
18
|
+
/**
|
|
19
|
+
* Start the PMO adapter — translates ticket:* events to work:* events.
|
|
20
|
+
*/
|
|
21
|
+
startPMOAdapter() {
|
|
22
|
+
const bus = getEventBus();
|
|
23
|
+
this.unsubscribers.push(bus.on('ticket:status_changed', (event) => {
|
|
24
|
+
// Always emit the generic status change
|
|
25
|
+
bus.emit('work:status_changed', {
|
|
26
|
+
workItemId: event.ticketId,
|
|
27
|
+
source: 'pmo',
|
|
28
|
+
projectId: event.projectId,
|
|
29
|
+
previousStatus: event.previousStatusName ?? null,
|
|
30
|
+
previousCategory: event.previousStatusCategory ?? null,
|
|
31
|
+
newStatus: event.newStatusName ?? null,
|
|
32
|
+
newCategory: event.newStatusCategory ?? null,
|
|
33
|
+
timestamp: event.timestamp,
|
|
34
|
+
});
|
|
35
|
+
// Emit work:started when entering the 'started' category
|
|
36
|
+
if (event.newStatusCategory === 'started' &&
|
|
37
|
+
event.previousStatusCategory !== 'started') {
|
|
38
|
+
bus.emit('work:started', {
|
|
39
|
+
workItemId: event.ticketId,
|
|
40
|
+
source: 'pmo',
|
|
41
|
+
projectId: event.projectId,
|
|
42
|
+
status: event.newStatusName ?? null,
|
|
43
|
+
timestamp: event.timestamp,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
// Emit work:completed when entering the 'completed' category
|
|
47
|
+
if (event.newStatusCategory === 'completed' &&
|
|
48
|
+
event.previousStatusCategory !== 'completed') {
|
|
49
|
+
bus.emit('work:completed', {
|
|
50
|
+
workItemId: event.ticketId,
|
|
51
|
+
source: 'pmo',
|
|
52
|
+
projectId: event.projectId,
|
|
53
|
+
status: event.newStatusName ?? null,
|
|
54
|
+
timestamp: event.timestamp,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}));
|
|
58
|
+
this.unsubscribers.push(bus.on('ticket:pr_linked', (event) => {
|
|
59
|
+
bus.emit('work:pr_created', {
|
|
60
|
+
workItemId: event.ticketId,
|
|
61
|
+
source: 'pmo',
|
|
62
|
+
projectId: event.projectId,
|
|
63
|
+
prUrl: event.prUrl,
|
|
64
|
+
prTitle: event.prTitle ?? null,
|
|
65
|
+
timestamp: event.timestamp,
|
|
66
|
+
});
|
|
67
|
+
}));
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Stop all adapters and unsubscribe from events.
|
|
71
|
+
*/
|
|
72
|
+
stop() {
|
|
73
|
+
for (const unsub of this.unsubscribers) {
|
|
74
|
+
unsub();
|
|
75
|
+
}
|
|
76
|
+
this.unsubscribers = [];
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// =============================================================================
|
|
80
|
+
// Singleton
|
|
81
|
+
// =============================================================================
|
|
82
|
+
let _adapter;
|
|
83
|
+
/**
|
|
84
|
+
* Initialize the work-lifecycle adapter layer.
|
|
85
|
+
* Safe to call multiple times — subsequent calls are no-ops.
|
|
86
|
+
*/
|
|
87
|
+
export function initWorkLifecycleAdapter() {
|
|
88
|
+
if (!_adapter) {
|
|
89
|
+
_adapter = new WorkLifecycleAdapter();
|
|
90
|
+
_adapter.startPMOAdapter();
|
|
91
|
+
}
|
|
92
|
+
return _adapter;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Stop the work-lifecycle adapter (primarily for testing).
|
|
96
|
+
*/
|
|
97
|
+
export function stopWorkLifecycleAdapter() {
|
|
98
|
+
if (_adapter) {
|
|
99
|
+
_adapter.stop();
|
|
100
|
+
_adapter = undefined;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/lib/work-lifecycle/adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Work Lifecycle Event Definitions
|
|
3
|
+
*
|
|
4
|
+
* Provider-agnostic domain events for work item state changes.
|
|
5
|
+
* These events represent what happened in the work lifecycle,
|
|
6
|
+
* regardless of which system (PMO, Linear, GitHub, etc.) reported the change.
|
|
7
|
+
*
|
|
8
|
+
* The adapter layer translates provider-specific events into these
|
|
9
|
+
* domain events, decoupling consumers from any single provider.
|
|
10
|
+
*/
|
|
11
|
+
import type { StateCategory } from '../pmo/types.js';
|
|
12
|
+
/**
|
|
13
|
+
* Sources that can emit work-lifecycle events.
|
|
14
|
+
* PMO is just another provider, not the central hub.
|
|
15
|
+
*/
|
|
16
|
+
export type WorkEventSource = 'pmo' | 'linear' | 'github' | 'jira' | 'asana' | 'shortcut' | 'trello' | 'monday';
|
|
17
|
+
/** Emitted when work begins on a work item (status moved to 'started' category). */
|
|
18
|
+
export interface WorkStartedEvent {
|
|
19
|
+
workItemId: string;
|
|
20
|
+
source: WorkEventSource;
|
|
21
|
+
projectId?: string;
|
|
22
|
+
status: string | null;
|
|
23
|
+
timestamp: Date;
|
|
24
|
+
}
|
|
25
|
+
/** Emitted when a work item's status changes. */
|
|
26
|
+
export interface WorkStatusChangedEvent {
|
|
27
|
+
workItemId: string;
|
|
28
|
+
source: WorkEventSource;
|
|
29
|
+
projectId?: string;
|
|
30
|
+
previousStatus: string | null;
|
|
31
|
+
previousCategory: StateCategory | null;
|
|
32
|
+
newStatus: string | null;
|
|
33
|
+
newCategory: StateCategory | null;
|
|
34
|
+
timestamp: Date;
|
|
35
|
+
}
|
|
36
|
+
/** Emitted when a PR is created or linked for a work item. */
|
|
37
|
+
export interface WorkPRCreatedEvent {
|
|
38
|
+
workItemId: string;
|
|
39
|
+
source: WorkEventSource;
|
|
40
|
+
projectId?: string;
|
|
41
|
+
prUrl: string;
|
|
42
|
+
prTitle: string | null;
|
|
43
|
+
timestamp: Date;
|
|
44
|
+
}
|
|
45
|
+
/** Emitted when work on an item is completed (status moved to 'completed' category). */
|
|
46
|
+
export interface WorkCompletedEvent {
|
|
47
|
+
workItemId: string;
|
|
48
|
+
source: WorkEventSource;
|
|
49
|
+
projectId?: string;
|
|
50
|
+
status: string | null;
|
|
51
|
+
timestamp: Date;
|
|
52
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Work Lifecycle Event Definitions
|
|
3
|
+
*
|
|
4
|
+
* Provider-agnostic domain events for work item state changes.
|
|
5
|
+
* These events represent what happened in the work lifecycle,
|
|
6
|
+
* regardless of which system (PMO, Linear, GitHub, etc.) reported the change.
|
|
7
|
+
*
|
|
8
|
+
* The adapter layer translates provider-specific events into these
|
|
9
|
+
* domain events, decoupling consumers from any single provider.
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../../src/lib/work-lifecycle/events.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Work Lifecycle module — public API.
|
|
3
|
+
*
|
|
4
|
+
* Provides provider-agnostic domain events for work item state changes.
|
|
5
|
+
* The adapter layer translates provider-specific events (PMO tickets,
|
|
6
|
+
* GitHub PRs, Linear issues, etc.) into these domain events.
|
|
7
|
+
*/
|
|
8
|
+
export type { WorkEventSource, WorkStartedEvent, WorkStatusChangedEvent, WorkPRCreatedEvent, WorkCompletedEvent, } from './events.js';
|
|
9
|
+
export { WorkLifecycleAdapter, initWorkLifecycleAdapter, stopWorkLifecycleAdapter, } from './adapter.js';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Work Lifecycle module — public API.
|
|
3
|
+
*
|
|
4
|
+
* Provides provider-agnostic domain events for work item state changes.
|
|
5
|
+
* The adapter layer translates provider-specific events (PMO tickets,
|
|
6
|
+
* GitHub PRs, Linear issues, etc.) into these domain events.
|
|
7
|
+
*/
|
|
8
|
+
export { WorkLifecycleAdapter, initWorkLifecycleAdapter, stopWorkLifecycleAdapter, } from './adapter.js';
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/work-lifecycle/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,cAAc,CAAA"}
|