@proletariat/cli 0.3.62 → 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/linear.js +29 -10
- package/dist/commands/work/linear.js.map +1 -1
- package/dist/commands/work/start.js +154 -110
- package/dist/commands/work/start.js.map +1 -1
- package/dist/lib/database/drizzle-schema.d.ts +148 -0
- package/dist/lib/database/drizzle-schema.js +20 -0
- package/dist/lib/database/drizzle-schema.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/execution/runners.js +7 -2
- package/dist/lib/execution/runners.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/linear/mapper.d.ts +1 -1
- package/dist/lib/linear/mapper.js +26 -32
- package/dist/lib/linear/mapper.js.map +1 -1
- package/dist/lib/linear/types.d.ts +1 -1
- package/dist/lib/pmo/schema.d.ts +2 -0
- package/dist/lib/pmo/schema.js +24 -7
- package/dist/lib/pmo/schema.js.map +1 -1
- package/dist/lib/pmo/storage/base.js +31 -0
- package/dist/lib/pmo/storage/base.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 +4157 -4157
- 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 Database from 'better-sqlite3';
|
|
12
13
|
import type { ExternalMappingProvider } from './types.js';
|
|
@@ -19,9 +20,9 @@ export interface OutboundSyncResult {
|
|
|
19
20
|
error?: string;
|
|
20
21
|
}
|
|
21
22
|
/**
|
|
22
|
-
* OutboundSyncHandler subscribes to
|
|
23
|
-
* to mapped external providers. It is fire-and-forget:
|
|
24
|
-
* are logged but never block the caller.
|
|
23
|
+
* OutboundSyncHandler subscribes to work-lifecycle domain events and
|
|
24
|
+
* pushes changes to mapped external providers. It is fire-and-forget:
|
|
25
|
+
* sync failures are logged but never block the caller.
|
|
25
26
|
*/
|
|
26
27
|
export declare class OutboundSyncHandler {
|
|
27
28
|
private unsubscribers;
|
|
@@ -29,7 +30,8 @@ export declare class OutboundSyncHandler {
|
|
|
29
30
|
private mappingStore;
|
|
30
31
|
constructor(db: Database.Database);
|
|
31
32
|
/**
|
|
32
|
-
* Start listening for
|
|
33
|
+
* Start listening for work-lifecycle events on the global EventBus.
|
|
34
|
+
* Subscribes to work:* domain events, not provider-specific ticket:* events.
|
|
33
35
|
* Call `stop()` to unsubscribe.
|
|
34
36
|
*/
|
|
35
37
|
start(): void;
|
|
@@ -38,35 +40,38 @@ export declare class OutboundSyncHandler {
|
|
|
38
40
|
*/
|
|
39
41
|
stop(): void;
|
|
40
42
|
/**
|
|
41
|
-
* Handle a
|
|
43
|
+
* Handle a work status change by syncing to all mapped external providers.
|
|
44
|
+
* Skips syncing back to the source provider to avoid loops.
|
|
42
45
|
*/
|
|
43
46
|
private handleStatusChanged;
|
|
44
47
|
/**
|
|
45
|
-
* Handle a PR
|
|
48
|
+
* Handle a PR creation by syncing to all mapped external providers.
|
|
49
|
+
* Skips syncing back to the source provider to avoid loops.
|
|
46
50
|
*/
|
|
47
51
|
private handlePRLinked;
|
|
48
52
|
/**
|
|
49
|
-
* Sync a status change to Linear if the
|
|
53
|
+
* Sync a status change to Linear if the work item has a Linear mapping.
|
|
50
54
|
*/
|
|
51
55
|
private syncStatusToLinear;
|
|
52
56
|
/**
|
|
53
|
-
* Sync a PR link to Linear if the
|
|
57
|
+
* Sync a PR link to Linear if the work item has a Linear mapping.
|
|
54
58
|
*/
|
|
55
59
|
private syncPRToLinear;
|
|
56
60
|
/**
|
|
57
61
|
* Sync status changes to providers tracked via the external_execution_map table.
|
|
58
62
|
* Updates the state snapshot so that future inbound syncs can detect drift.
|
|
63
|
+
* Skips the source provider to avoid sync loops.
|
|
59
64
|
*/
|
|
60
65
|
private syncStatusToMappedProviders;
|
|
61
66
|
/**
|
|
62
|
-
* Record a PR URL in all external mappings for a
|
|
67
|
+
* Record a PR URL in all external mappings for a work item.
|
|
63
68
|
*/
|
|
64
69
|
private recordPRInMappings;
|
|
65
70
|
/**
|
|
66
|
-
* Find external execution mappings associated with a
|
|
67
|
-
* Checks the latest_state_snapshot for
|
|
71
|
+
* Find external execution mappings associated with a work item.
|
|
72
|
+
* Checks the latest_state_snapshot for work item ID references.
|
|
68
73
|
*/
|
|
69
|
-
private
|
|
74
|
+
private findMappingsForWorkItem;
|
|
70
75
|
}
|
|
71
76
|
/**
|
|
72
77
|
* Initialize and start the outbound sync handler.
|
|
@@ -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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"}
|
|
@@ -12,7 +12,7 @@ export declare class LinearMapper {
|
|
|
12
12
|
private externalMappingStore;
|
|
13
13
|
constructor(db: Database.Database);
|
|
14
14
|
/**
|
|
15
|
-
* Ensure the
|
|
15
|
+
* Ensure the external_issue_map table exists.
|
|
16
16
|
* Uses CREATE TABLE IF NOT EXISTS to match the schema defined in schema.ts.
|
|
17
17
|
*/
|
|
18
18
|
private ensureTable;
|
|
@@ -16,31 +16,31 @@ export class LinearMapper {
|
|
|
16
16
|
this.ensureTable();
|
|
17
17
|
}
|
|
18
18
|
/**
|
|
19
|
-
* Ensure the
|
|
19
|
+
* Ensure the external_issue_map table exists.
|
|
20
20
|
* Uses CREATE TABLE IF NOT EXISTS to match the schema defined in schema.ts.
|
|
21
21
|
*/
|
|
22
22
|
ensureTable() {
|
|
23
23
|
this.db.exec(`
|
|
24
|
-
CREATE TABLE IF NOT EXISTS ${PMO_TABLES.
|
|
24
|
+
CREATE TABLE IF NOT EXISTS ${PMO_TABLES.external_issue_map} (
|
|
25
25
|
pmo_ticket_id TEXT NOT NULL REFERENCES ${PMO_TABLES.tickets}(id) ON DELETE CASCADE,
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
provider TEXT NOT NULL CHECK (provider IN ('linear', 'jira', 'shortcut', 'trello', 'github')),
|
|
27
|
+
external_id TEXT NOT NULL,
|
|
28
|
+
external_key TEXT NOT NULL,
|
|
29
|
+
external_url TEXT NOT NULL,
|
|
30
|
+
team_key TEXT NOT NULL,
|
|
30
31
|
sync_direction TEXT NOT NULL DEFAULT 'inbound',
|
|
31
|
-
last_synced_at TIMESTAMP,
|
|
32
32
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
33
|
-
PRIMARY KEY (pmo_ticket_id),
|
|
34
|
-
UNIQUE (
|
|
33
|
+
PRIMARY KEY (pmo_ticket_id, provider),
|
|
34
|
+
UNIQUE (provider, external_id)
|
|
35
35
|
)
|
|
36
36
|
`);
|
|
37
37
|
this.db.exec(`
|
|
38
|
-
CREATE INDEX IF NOT EXISTS
|
|
39
|
-
ON ${PMO_TABLES.
|
|
38
|
+
CREATE INDEX IF NOT EXISTS idx_pmo_external_issue_map_external_id
|
|
39
|
+
ON ${PMO_TABLES.external_issue_map}(provider, external_id)
|
|
40
40
|
`);
|
|
41
41
|
this.db.exec(`
|
|
42
|
-
CREATE INDEX IF NOT EXISTS
|
|
43
|
-
ON ${PMO_TABLES.
|
|
42
|
+
CREATE INDEX IF NOT EXISTS idx_pmo_external_issue_map_external_key_eim
|
|
43
|
+
ON ${PMO_TABLES.external_issue_map}(provider, external_key)
|
|
44
44
|
`);
|
|
45
45
|
}
|
|
46
46
|
/**
|
|
@@ -175,10 +175,10 @@ export class LinearMapper {
|
|
|
175
175
|
*/
|
|
176
176
|
createMapping(map) {
|
|
177
177
|
this.db.prepare(`
|
|
178
|
-
INSERT INTO ${PMO_TABLES.
|
|
179
|
-
(pmo_ticket_id,
|
|
180
|
-
VALUES (?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP
|
|
181
|
-
`).run(map.pmoTicketId, map.linearIssueId, map.linearIdentifier, map.
|
|
178
|
+
INSERT INTO ${PMO_TABLES.external_issue_map}
|
|
179
|
+
(pmo_ticket_id, provider, external_id, external_key, external_url, team_key, sync_direction, created_at)
|
|
180
|
+
VALUES (?, 'linear', ?, ?, ?, ?, ?, CURRENT_TIMESTAMP)
|
|
181
|
+
`).run(map.pmoTicketId, map.linearIssueId, map.linearIdentifier, map.linearUrl, map.linearTeamKey, map.syncDirection);
|
|
182
182
|
this.externalMappingStore.upsertMapping({
|
|
183
183
|
provider: 'linear',
|
|
184
184
|
externalId: map.linearIssueId,
|
|
@@ -197,7 +197,7 @@ export class LinearMapper {
|
|
|
197
197
|
*/
|
|
198
198
|
getByTicketId(ticketId) {
|
|
199
199
|
const row = this.db.prepare(`
|
|
200
|
-
SELECT * FROM ${PMO_TABLES.
|
|
200
|
+
SELECT * FROM ${PMO_TABLES.external_issue_map} WHERE pmo_ticket_id = ? AND provider = 'linear'
|
|
201
201
|
`).get(ticketId);
|
|
202
202
|
return row ? this.rowToMap(row) : null;
|
|
203
203
|
}
|
|
@@ -206,7 +206,7 @@ export class LinearMapper {
|
|
|
206
206
|
*/
|
|
207
207
|
getByLinearId(linearIssueId) {
|
|
208
208
|
const row = this.db.prepare(`
|
|
209
|
-
SELECT * FROM ${PMO_TABLES.
|
|
209
|
+
SELECT * FROM ${PMO_TABLES.external_issue_map} WHERE provider = 'linear' AND external_id = ?
|
|
210
210
|
`).get(linearIssueId);
|
|
211
211
|
if (row) {
|
|
212
212
|
return this.rowToMap(row);
|
|
@@ -219,7 +219,7 @@ export class LinearMapper {
|
|
|
219
219
|
*/
|
|
220
220
|
getByIdentifier(identifier) {
|
|
221
221
|
const row = this.db.prepare(`
|
|
222
|
-
SELECT * FROM ${PMO_TABLES.
|
|
222
|
+
SELECT * FROM ${PMO_TABLES.external_issue_map} WHERE provider = 'linear' AND external_key = ?
|
|
223
223
|
`).get(identifier);
|
|
224
224
|
if (row) {
|
|
225
225
|
return this.rowToMap(row);
|
|
@@ -232,7 +232,7 @@ export class LinearMapper {
|
|
|
232
232
|
*/
|
|
233
233
|
listMappings() {
|
|
234
234
|
const rows = this.db.prepare(`
|
|
235
|
-
SELECT * FROM ${PMO_TABLES.
|
|
235
|
+
SELECT * FROM ${PMO_TABLES.external_issue_map} WHERE provider = 'linear' ORDER BY created_at DESC
|
|
236
236
|
`).all();
|
|
237
237
|
return rows.map((row) => this.rowToMap(row));
|
|
238
238
|
}
|
|
@@ -240,11 +240,6 @@ export class LinearMapper {
|
|
|
240
240
|
* Update the last synced timestamp for a mapping.
|
|
241
241
|
*/
|
|
242
242
|
updateSyncTimestamp(pmoTicketId) {
|
|
243
|
-
this.db.prepare(`
|
|
244
|
-
UPDATE ${PMO_TABLES.linear_issue_map}
|
|
245
|
-
SET last_synced_at = CURRENT_TIMESTAMP
|
|
246
|
-
WHERE pmo_ticket_id = ?
|
|
247
|
-
`).run(pmoTicketId);
|
|
248
243
|
const map = this.getByTicketId(pmoTicketId);
|
|
249
244
|
if (map) {
|
|
250
245
|
this.externalMappingStore.upsertMapping({
|
|
@@ -266,7 +261,7 @@ export class LinearMapper {
|
|
|
266
261
|
*/
|
|
267
262
|
deleteMapping(pmoTicketId) {
|
|
268
263
|
this.db.prepare(`
|
|
269
|
-
DELETE FROM ${PMO_TABLES.
|
|
264
|
+
DELETE FROM ${PMO_TABLES.external_issue_map} WHERE pmo_ticket_id = ? AND provider = 'linear'
|
|
270
265
|
`).run(pmoTicketId);
|
|
271
266
|
}
|
|
272
267
|
/**
|
|
@@ -275,12 +270,11 @@ export class LinearMapper {
|
|
|
275
270
|
rowToMap(row) {
|
|
276
271
|
return {
|
|
277
272
|
pmoTicketId: row.pmo_ticket_id,
|
|
278
|
-
linearIssueId: row.
|
|
279
|
-
linearIdentifier: row.
|
|
280
|
-
linearTeamKey: row.
|
|
281
|
-
linearUrl: row.
|
|
273
|
+
linearIssueId: row.external_id,
|
|
274
|
+
linearIdentifier: row.external_key,
|
|
275
|
+
linearTeamKey: row.team_key,
|
|
276
|
+
linearUrl: row.external_url,
|
|
282
277
|
syncDirection: row.sync_direction,
|
|
283
|
-
lastSyncedAt: row.last_synced_at ? new Date(row.last_synced_at) : undefined,
|
|
284
278
|
createdAt: new Date(row.created_at),
|
|
285
279
|
};
|
|
286
280
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mapper.js","sourceRoot":"","sources":["../../../src/lib/linear/mapper.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,6BAA6B,EAAE,MAAM,qCAAqC,CAAA;AAQnF,OAAO,EACL,4BAA4B,EAC5B,sBAAsB,GACvB,MAAM,YAAY,CAAA;AAEnB,MAAM,OAAO,YAAY;IAGH;IAFZ,oBAAoB,CAA+B;IAE3D,YAAoB,EAAqB;QAArB,OAAE,GAAF,EAAE,CAAmB;QACvC,IAAI,CAAC,oBAAoB,GAAG,IAAI,6BAA6B,CAAC,EAAE,CAAC,CAAA;QACjE,IAAI,CAAC,WAAW,EAAE,CAAA;IACpB,CAAC;IAED;;;OAGG;IACK,WAAW;QACjB,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC;mCACkB,UAAU,CAAC,
|
|
1
|
+
{"version":3,"file":"mapper.js","sourceRoot":"","sources":["../../../src/lib/linear/mapper.ts"],"names":[],"mappings":"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"}
|
|
@@ -103,7 +103,7 @@ export interface LinearIssueFilter {
|
|
|
103
103
|
}
|
|
104
104
|
/**
|
|
105
105
|
* Mapping record between a Linear issue and a PMO ticket.
|
|
106
|
-
* Stored in
|
|
106
|
+
* Stored in pmo_external_issue_map table (provider = 'linear').
|
|
107
107
|
*/
|
|
108
108
|
export interface LinearIssueMap {
|
|
109
109
|
pmoTicketId: string;
|
package/dist/lib/pmo/schema.d.ts
CHANGED
|
@@ -38,6 +38,7 @@ export declare const PMO_TABLES: {
|
|
|
38
38
|
readonly label_groups: "pmo_label_groups";
|
|
39
39
|
readonly labels: "pmo_labels";
|
|
40
40
|
readonly ticket_labels: "pmo_ticket_labels";
|
|
41
|
+
readonly external_issue_map: "pmo_external_issue_map";
|
|
41
42
|
readonly linear_issue_map: "pmo_linear_issue_map";
|
|
42
43
|
readonly external_execution_map: "pmo_external_execution_map";
|
|
43
44
|
readonly external_execution_links: "pmo_external_execution_links";
|
|
@@ -86,6 +87,7 @@ export declare const PMO_TABLE_SCHEMAS: {
|
|
|
86
87
|
readonly ticket_labels: "\n CREATE TABLE IF NOT EXISTS pmo_ticket_labels (\n ticket_id TEXT NOT NULL REFERENCES pmo_tickets(id) ON DELETE CASCADE,\n label_id TEXT NOT NULL REFERENCES pmo_labels(id) ON DELETE CASCADE,\n PRIMARY KEY (ticket_id, label_id)\n )";
|
|
87
88
|
readonly roadmaps: "\n CREATE TABLE IF NOT EXISTS pmo_roadmaps (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL UNIQUE,\n description TEXT,\n is_default INTEGER NOT NULL DEFAULT 0,\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP\n )";
|
|
88
89
|
readonly roadmap_projects: "\n CREATE TABLE IF NOT EXISTS pmo_roadmap_projects (\n roadmap_id TEXT NOT NULL REFERENCES pmo_roadmaps(id) ON DELETE CASCADE,\n project_id TEXT NOT NULL REFERENCES pmo_projects(id) ON DELETE CASCADE,\n position INTEGER NOT NULL DEFAULT 0,\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n PRIMARY KEY (roadmap_id, project_id)\n )";
|
|
90
|
+
readonly external_issue_map: "\n CREATE TABLE IF NOT EXISTS pmo_external_issue_map (\n pmo_ticket_id TEXT NOT NULL REFERENCES pmo_tickets(id) ON DELETE CASCADE,\n provider TEXT NOT NULL CHECK (provider IN ('linear', 'jira', 'shortcut', 'trello', 'github')),\n external_id TEXT NOT NULL,\n external_key TEXT NOT NULL,\n external_url TEXT NOT NULL,\n team_key TEXT NOT NULL,\n sync_direction TEXT NOT NULL DEFAULT 'inbound',\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n PRIMARY KEY (pmo_ticket_id, provider),\n UNIQUE (provider, external_id)\n )";
|
|
89
91
|
readonly linear_issue_map: "\n CREATE TABLE IF NOT EXISTS pmo_linear_issue_map (\n pmo_ticket_id TEXT NOT NULL REFERENCES pmo_tickets(id) ON DELETE CASCADE,\n linear_issue_id TEXT NOT NULL,\n linear_identifier TEXT NOT NULL,\n linear_team_key TEXT NOT NULL,\n linear_url TEXT NOT NULL,\n sync_direction TEXT NOT NULL DEFAULT 'inbound',\n last_synced_at TIMESTAMP,\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n PRIMARY KEY (pmo_ticket_id),\n UNIQUE (linear_issue_id)\n )";
|
|
90
92
|
readonly external_execution_map: "\n CREATE TABLE IF NOT EXISTS pmo_external_execution_map (\n provider TEXT NOT NULL CHECK (provider IN ('linear', 'jira', 'shortcut', 'asana', 'trello', 'monday', 'pmo')),\n external_id TEXT NOT NULL,\n external_key TEXT,\n canonical_url TEXT,\n latest_state_snapshot TEXT,\n last_synced_at TIMESTAMP,\n last_spawned_at TIMESTAMP,\n created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n PRIMARY KEY (provider, external_id)\n )";
|
|
91
93
|
readonly external_execution_links: "\n CREATE TABLE IF NOT EXISTS pmo_external_execution_links (\n provider TEXT NOT NULL,\n external_id TEXT NOT NULL,\n execution_id TEXT NOT NULL,\n linked_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n PRIMARY KEY (provider, external_id, execution_id),\n FOREIGN KEY (provider, external_id)\n REFERENCES pmo_external_execution_map(provider, external_id)\n ON DELETE CASCADE\n )";
|