@proletariat/cli 0.3.96 → 0.3.98
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/gc.d.ts +1 -0
- package/dist/commands/gc.js +31 -1
- package/dist/commands/gc.js.map +1 -1
- package/dist/commands/linear/connect.d.ts +5 -0
- package/dist/commands/linear/connect.js +84 -0
- package/dist/commands/linear/connect.js.map +1 -1
- package/dist/commands/orchestrate/index.js +18 -10
- package/dist/commands/orchestrate/index.js.map +1 -1
- package/dist/commands/qa/index.js +1 -1
- package/dist/commands/session/watch.d.ts +1 -0
- package/dist/commands/session/watch.js +46 -2
- package/dist/commands/session/watch.js.map +1 -1
- package/dist/commands/watch/index.d.ts +28 -0
- package/dist/commands/watch/index.js +172 -0
- package/dist/commands/watch/index.js.map +1 -0
- package/dist/commands/work/complete.d.ts +1 -0
- package/dist/commands/work/complete.js +38 -31
- package/dist/commands/work/complete.js.map +1 -1
- package/dist/commands/{ticket/index.d.ts → work/drop.d.ts} +5 -4
- package/dist/commands/work/drop.js +215 -0
- package/dist/commands/work/drop.js.map +1 -0
- package/dist/commands/work/linear.js +1 -1
- package/dist/commands/work/linear.js.map +1 -1
- package/dist/commands/work/ready.d.ts +1 -0
- package/dist/commands/work/ready.js +46 -30
- package/dist/commands/work/ready.js.map +1 -1
- package/dist/commands/work/ship.d.ts +1 -0
- package/dist/commands/work/ship.js +56 -40
- package/dist/commands/work/ship.js.map +1 -1
- package/dist/commands/work/start.d.ts +2 -0
- package/dist/commands/work/start.js +238 -83
- package/dist/commands/work/start.js.map +1 -1
- package/dist/commands/work/stop.d.ts +1 -0
- package/dist/commands/work/stop.js +40 -0
- package/dist/commands/work/stop.js.map +1 -1
- package/dist/lib/agents/commands.js +7 -5
- package/dist/lib/agents/commands.js.map +1 -1
- package/dist/lib/asana/client.d.ts +4 -1
- package/dist/lib/asana/client.js +15 -0
- package/dist/lib/asana/client.js.map +1 -1
- package/dist/lib/asana/index.d.ts +1 -1
- package/dist/lib/asana/types.d.ts +4 -0
- package/dist/lib/database/credential-store.js +1 -0
- package/dist/lib/database/credential-store.js.map +1 -1
- package/dist/lib/database/drizzle-schema.d.ts +17 -0
- package/dist/lib/database/drizzle-schema.js +1 -0
- package/dist/lib/database/drizzle-schema.js.map +1 -1
- package/dist/lib/database/migrations/0019_gc_artifact_cleanup.d.ts +9 -0
- package/dist/lib/database/migrations/0019_gc_artifact_cleanup.js +23 -0
- package/dist/lib/database/migrations/0019_gc_artifact_cleanup.js.map +1 -0
- package/dist/lib/database/migrations/0020_transition_map.d.ts +2 -0
- package/dist/lib/database/migrations/0020_transition_map.js +27 -0
- package/dist/lib/database/migrations/0020_transition_map.js.map +1 -0
- package/dist/lib/database/migrations/index.js +4 -0
- package/dist/lib/database/migrations/index.js.map +1 -1
- package/dist/lib/execution/config.d.ts +10 -0
- package/dist/lib/execution/config.js +24 -0
- package/dist/lib/execution/config.js.map +1 -1
- package/dist/lib/execution/preflight.d.ts +51 -0
- package/dist/lib/execution/preflight.js +278 -0
- package/dist/lib/execution/preflight.js.map +1 -0
- package/dist/lib/execution/runners/prompt-builder.d.ts +6 -0
- package/dist/lib/execution/runners/prompt-builder.js +38 -7
- package/dist/lib/execution/runners/prompt-builder.js.map +1 -1
- package/dist/lib/execution/session-utils.d.ts +23 -0
- package/dist/lib/execution/session-utils.js +69 -0
- package/dist/lib/execution/session-utils.js.map +1 -1
- package/dist/lib/execution/spawner.d.ts +11 -1
- package/dist/lib/execution/spawner.js +44 -16
- package/dist/lib/execution/spawner.js.map +1 -1
- package/dist/lib/execution/storage.d.ts +6 -0
- package/dist/lib/execution/storage.js +18 -0
- package/dist/lib/execution/storage.js.map +1 -1
- package/dist/lib/execution/ticket-refs.d.ts +71 -0
- package/dist/lib/execution/ticket-refs.js +125 -0
- package/dist/lib/execution/ticket-refs.js.map +1 -0
- package/dist/lib/execution/types.d.ts +7 -2
- package/dist/lib/execution/types.js +5 -3
- package/dist/lib/execution/types.js.map +1 -1
- package/dist/lib/external-issues/index.d.ts +1 -0
- package/dist/lib/external-issues/index.js +2 -0
- package/dist/lib/external-issues/index.js.map +1 -1
- package/dist/lib/external-issues/linear.js +1 -1
- package/dist/lib/external-issues/linear.js.map +1 -1
- package/dist/lib/external-issues/ticket-builder.d.ts +21 -0
- package/dist/lib/external-issues/ticket-builder.js +43 -0
- package/dist/lib/external-issues/ticket-builder.js.map +1 -0
- package/dist/lib/external-issues/work-start.js +1 -1
- package/dist/lib/external-issues/work-start.js.map +1 -1
- package/dist/lib/gc/index.d.ts +67 -6
- package/dist/lib/gc/index.js +293 -15
- package/dist/lib/gc/index.js.map +1 -1
- package/dist/lib/github/client.d.ts +84 -0
- package/dist/lib/github/client.js +123 -0
- package/dist/lib/github/client.js.map +1 -0
- package/dist/lib/github/config.d.ts +42 -0
- package/dist/lib/github/config.js +115 -0
- package/dist/lib/github/config.js.map +1 -0
- package/dist/lib/github/types.d.ts +71 -0
- package/dist/lib/github/types.js +50 -0
- package/dist/lib/github/types.js.map +1 -0
- package/dist/lib/jira/client.d.ts +113 -0
- package/dist/lib/jira/client.js +208 -0
- package/dist/lib/jira/client.js.map +1 -0
- package/dist/lib/jira/config.d.ts +9 -0
- package/dist/lib/jira/config.js +30 -0
- package/dist/lib/jira/config.js.map +1 -1
- package/dist/lib/jira/index.d.ts +6 -2
- package/dist/lib/jira/index.js +4 -2
- package/dist/lib/jira/index.js.map +1 -1
- package/dist/lib/jira/types.d.ts +118 -0
- package/dist/lib/jira/types.js +45 -0
- package/dist/lib/jira/types.js.map +1 -0
- package/dist/lib/linear/config.d.ts +10 -0
- package/dist/lib/linear/config.js +33 -0
- package/dist/lib/linear/config.js.map +1 -1
- package/dist/lib/mcp/tools/index.d.ts +0 -2
- package/dist/lib/mcp/tools/index.js +0 -2
- package/dist/lib/mcp/tools/index.js.map +1 -1
- package/dist/lib/orchestrate/index.d.ts +2 -0
- package/dist/lib/orchestrate/index.js +1 -0
- package/dist/lib/orchestrate/index.js.map +1 -1
- package/dist/lib/orchestrate/simple-poller.d.ts +57 -0
- package/dist/lib/orchestrate/simple-poller.js +324 -0
- package/dist/lib/orchestrate/simple-poller.js.map +1 -0
- package/dist/lib/pmo/storage/index.js +16 -5
- package/dist/lib/pmo/storage/index.js.map +1 -1
- package/dist/lib/prompt-json.d.ts +31 -0
- package/dist/lib/prompt-json.js.map +1 -1
- package/dist/lib/providers/asana-provider.d.ts +27 -0
- package/dist/lib/providers/asana-provider.js +426 -0
- package/dist/lib/providers/asana-provider.js.map +1 -0
- package/dist/lib/providers/auto-mapper.d.ts +45 -0
- package/dist/lib/providers/auto-mapper.js +138 -0
- package/dist/lib/providers/auto-mapper.js.map +1 -0
- package/dist/lib/providers/github-provider.d.ts +34 -0
- package/dist/lib/providers/github-provider.js +418 -0
- package/dist/lib/providers/github-provider.js.map +1 -0
- package/dist/lib/providers/index.d.ts +3 -0
- package/dist/lib/providers/index.js +3 -0
- package/dist/lib/providers/index.js.map +1 -1
- package/dist/lib/providers/jira-provider.d.ts +31 -0
- package/dist/lib/providers/jira-provider.js +383 -0
- package/dist/lib/providers/jira-provider.js.map +1 -0
- package/dist/lib/providers/linear-provider.js +6 -7
- package/dist/lib/providers/linear-provider.js.map +1 -1
- package/dist/lib/providers/resolver.js +54 -0
- package/dist/lib/providers/resolver.js.map +1 -1
- package/dist/lib/providers/state-intents.d.ts +20 -0
- package/dist/lib/providers/state-intents.js +61 -7
- package/dist/lib/providers/state-intents.js.map +1 -1
- package/dist/lib/providers/state-resolution.d.ts +15 -11
- package/dist/lib/providers/state-resolution.js +54 -48
- package/dist/lib/providers/state-resolution.js.map +1 -1
- package/dist/lib/providers/transition-map.d.ts +59 -0
- package/dist/lib/providers/transition-map.js +113 -0
- package/dist/lib/providers/transition-map.js.map +1 -0
- package/dist/lib/providers/types.d.ts +1 -1
- package/dist/lib/session/index.d.ts +3 -1
- package/dist/lib/session/index.js +3 -1
- package/dist/lib/session/index.js.map +1 -1
- package/dist/lib/session/tmux-watchdog.d.ts +157 -0
- package/dist/lib/session/tmux-watchdog.js +424 -0
- package/dist/lib/session/tmux-watchdog.js.map +1 -0
- package/dist/lib/session/watcher.d.ts +22 -4
- package/dist/lib/session/watcher.js +66 -8
- package/dist/lib/session/watcher.js.map +1 -1
- package/dist/lib/work-lifecycle/post-execution.js +26 -1
- package/dist/lib/work-lifecycle/post-execution.js.map +1 -1
- package/dist/lib/work-lifecycle/transition.d.ts +73 -0
- package/dist/lib/work-lifecycle/transition.js +138 -0
- package/dist/lib/work-lifecycle/transition.js.map +1 -0
- package/dist/lib/work-source/config.d.ts +1 -1
- package/dist/lib/work-source/config.js +11 -1
- package/dist/lib/work-source/config.js.map +1 -1
- package/oclif.manifest.json +936 -1628
- package/package.json +1 -1
- package/dist/commands/ticket/create.d.ts +0 -44
- package/dist/commands/ticket/create.js +0 -760
- package/dist/commands/ticket/create.js.map +0 -1
- package/dist/commands/ticket/delete.d.ts +0 -17
- package/dist/commands/ticket/delete.js +0 -204
- package/dist/commands/ticket/delete.js.map +0 -1
- package/dist/commands/ticket/edit.d.ts +0 -28
- package/dist/commands/ticket/edit.js +0 -402
- package/dist/commands/ticket/edit.js.map +0 -1
- package/dist/commands/ticket/index.js +0 -74
- package/dist/commands/ticket/index.js.map +0 -1
- package/dist/commands/ticket/list.d.ts +0 -33
- package/dist/commands/ticket/list.js +0 -519
- package/dist/commands/ticket/list.js.map +0 -1
- package/dist/commands/ticket/move.d.ts +0 -27
- package/dist/commands/ticket/move.js +0 -413
- package/dist/commands/ticket/move.js.map +0 -1
- package/dist/commands/ticket/show.d.ts +0 -14
- package/dist/commands/ticket/show.js +0 -110
- package/dist/commands/ticket/show.js.map +0 -1
- package/dist/commands/ticket/update.d.ts +0 -28
- package/dist/commands/ticket/update.js +0 -458
- package/dist/commands/ticket/update.js.map +0 -1
- package/dist/lib/mcp/tools/action.d.ts +0 -6
- package/dist/lib/mcp/tools/action.js +0 -123
- package/dist/lib/mcp/tools/action.js.map +0 -1
- package/dist/lib/mcp/tools/ticket.d.ts +0 -6
- package/dist/lib/mcp/tools/ticket.js +0 -464
- package/dist/lib/mcp/tools/ticket.js.map +0 -1
|
@@ -6,14 +6,15 @@
|
|
|
6
6
|
* that can't self-report (OOM kills, zombie processes, container crashes).
|
|
7
7
|
*
|
|
8
8
|
* Architecture:
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
9
|
+
* Phase 0: Tmux server health check — detect full server crashes (PRLT-1115)
|
|
10
|
+
* Phase 1: Record heartbeats for alive agents (tmux pane inspection)
|
|
11
|
+
* Phase 2: Detect stale executions that exceeded the timeout
|
|
12
|
+
* Phase 3: Act on stale executions — mark failed, kill containers, fire events
|
|
13
13
|
*/
|
|
14
14
|
import type Database from 'better-sqlite3';
|
|
15
15
|
import type { AgentWork } from '../execution/types.js';
|
|
16
16
|
import { type StaleExecution } from './heartbeat.js';
|
|
17
|
+
import { TmuxWatchdog, type TmuxCrashEvent } from './tmux-watchdog.js';
|
|
17
18
|
export interface WatcherOptions {
|
|
18
19
|
/** Database connection */
|
|
19
20
|
db: Database.Database;
|
|
@@ -23,10 +24,14 @@ export interface WatcherOptions {
|
|
|
23
24
|
timeoutMinutes?: number;
|
|
24
25
|
/** Whether to kill containers on timeout (default: true) */
|
|
25
26
|
autoKill?: boolean;
|
|
27
|
+
/** Whether to auto-recover from tmux server crashes (default: true) */
|
|
28
|
+
autoRecover?: boolean;
|
|
26
29
|
/** Logger function */
|
|
27
30
|
log?: (msg: string) => void;
|
|
28
31
|
/** Callback when a stale execution is detected and handled */
|
|
29
32
|
onStaleDetected?: (execution: AgentWork, reason: string) => void | Promise<void>;
|
|
33
|
+
/** Callback when a tmux server crash is detected */
|
|
34
|
+
onCrashDetected?: (event: TmuxCrashEvent) => void | Promise<void>;
|
|
30
35
|
}
|
|
31
36
|
export interface WatchCycleResult {
|
|
32
37
|
/** Number of active executions checked */
|
|
@@ -37,6 +42,10 @@ export interface WatchCycleResult {
|
|
|
37
42
|
staleExecutions: StaleExecution[];
|
|
38
43
|
/** Number of containers killed */
|
|
39
44
|
containersKilled: number;
|
|
45
|
+
/** Tmux crash events detected in this cycle */
|
|
46
|
+
crashEvents: TmuxCrashEvent[];
|
|
47
|
+
/** Total sessions recovered from crashes */
|
|
48
|
+
crashRecoveries: number;
|
|
40
49
|
}
|
|
41
50
|
export declare class SessionWatcher {
|
|
42
51
|
private storage;
|
|
@@ -44,10 +53,14 @@ export declare class SessionWatcher {
|
|
|
44
53
|
private intervalMinutes;
|
|
45
54
|
private timeoutMinutes;
|
|
46
55
|
private autoKill;
|
|
56
|
+
private autoRecover;
|
|
47
57
|
private log;
|
|
48
58
|
private onStaleDetected?;
|
|
59
|
+
private onCrashDetected?;
|
|
49
60
|
private timer;
|
|
50
61
|
private running;
|
|
62
|
+
private watchdog;
|
|
63
|
+
private isFirstCycle;
|
|
51
64
|
constructor(options: WatcherOptions);
|
|
52
65
|
/**
|
|
53
66
|
* Run a single watch cycle.
|
|
@@ -74,6 +87,11 @@ export declare class SessionWatcher {
|
|
|
74
87
|
intervalMinutes: number;
|
|
75
88
|
timeoutMinutes: number;
|
|
76
89
|
autoKill: boolean;
|
|
90
|
+
autoRecover: boolean;
|
|
77
91
|
};
|
|
92
|
+
/**
|
|
93
|
+
* Get the tmux watchdog instance (for testing/diagnostics).
|
|
94
|
+
*/
|
|
95
|
+
getWatchdog(): TmuxWatchdog;
|
|
78
96
|
private runCycleWithErrorHandling;
|
|
79
97
|
}
|
|
@@ -6,13 +6,14 @@
|
|
|
6
6
|
* that can't self-report (OOM kills, zombie processes, container crashes).
|
|
7
7
|
*
|
|
8
8
|
* Architecture:
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
9
|
+
* Phase 0: Tmux server health check — detect full server crashes (PRLT-1115)
|
|
10
|
+
* Phase 1: Record heartbeats for alive agents (tmux pane inspection)
|
|
11
|
+
* Phase 2: Detect stale executions that exceeded the timeout
|
|
12
|
+
* Phase 3: Act on stale executions — mark failed, kill containers, fire events
|
|
13
13
|
*/
|
|
14
14
|
import { ExecutionStorage } from '../execution/storage.js';
|
|
15
15
|
import { recordAllHeartbeats, detectStaleExecutions, killContainer, } from './heartbeat.js';
|
|
16
|
+
import { TmuxWatchdog, formatCrashNotification, sendDesktopNotification, } from './tmux-watchdog.js';
|
|
16
17
|
// =============================================================================
|
|
17
18
|
// Session Watcher
|
|
18
19
|
// =============================================================================
|
|
@@ -22,18 +23,40 @@ export class SessionWatcher {
|
|
|
22
23
|
intervalMinutes;
|
|
23
24
|
timeoutMinutes;
|
|
24
25
|
autoKill;
|
|
26
|
+
autoRecover;
|
|
25
27
|
log;
|
|
26
28
|
onStaleDetected;
|
|
29
|
+
onCrashDetected;
|
|
27
30
|
timer = null;
|
|
28
31
|
running = false;
|
|
32
|
+
watchdog;
|
|
33
|
+
isFirstCycle = true;
|
|
29
34
|
constructor(options) {
|
|
30
35
|
this.db = options.db;
|
|
31
36
|
this.storage = new ExecutionStorage(options.db);
|
|
32
37
|
this.intervalMinutes = options.intervalMinutes ?? 5;
|
|
33
38
|
this.timeoutMinutes = options.timeoutMinutes ?? 15;
|
|
34
39
|
this.autoKill = options.autoKill ?? true;
|
|
40
|
+
this.autoRecover = options.autoRecover ?? true;
|
|
35
41
|
this.log = options.log ?? (() => { });
|
|
36
42
|
this.onStaleDetected = options.onStaleDetected;
|
|
43
|
+
this.onCrashDetected = options.onCrashDetected;
|
|
44
|
+
this.watchdog = new TmuxWatchdog({
|
|
45
|
+
storage: this.storage,
|
|
46
|
+
autoRecover: this.autoRecover,
|
|
47
|
+
log: this.log,
|
|
48
|
+
onCrashDetected: async (event) => {
|
|
49
|
+
// Send desktop notification
|
|
50
|
+
const notification = formatCrashNotification(event);
|
|
51
|
+
this.log(notification);
|
|
52
|
+
sendDesktopNotification('prlt: tmux server crash', `${event.affectedExecutions.length} agent(s) affected. ` +
|
|
53
|
+
`${event.recoveredSessions.length} recovered.`);
|
|
54
|
+
// Fire user callback
|
|
55
|
+
if (this.onCrashDetected) {
|
|
56
|
+
await this.onCrashDetected(event);
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
});
|
|
37
60
|
}
|
|
38
61
|
/**
|
|
39
62
|
* Run a single watch cycle.
|
|
@@ -45,7 +68,25 @@ export class SessionWatcher {
|
|
|
45
68
|
heartbeatsUpdated: 0,
|
|
46
69
|
staleExecutions: [],
|
|
47
70
|
containersKilled: 0,
|
|
71
|
+
crashEvents: [],
|
|
72
|
+
crashRecoveries: 0,
|
|
48
73
|
};
|
|
74
|
+
// Phase 0: Tmux server health check (PRLT-1115)
|
|
75
|
+
// Detect full server crashes before doing individual heartbeat checks.
|
|
76
|
+
// On the first cycle, seed the watchdog state without triggering crash detection.
|
|
77
|
+
if (this.isFirstCycle) {
|
|
78
|
+
const activeExecs = [
|
|
79
|
+
...this.storage.listExecutions({ status: 'running' }),
|
|
80
|
+
...this.storage.listExecutions({ status: 'starting' }),
|
|
81
|
+
];
|
|
82
|
+
this.watchdog.seedServerState(activeExecs);
|
|
83
|
+
this.isFirstCycle = false;
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
const watchdogResult = await this.watchdog.checkAndRecover();
|
|
87
|
+
result.crashEvents = watchdogResult.crashEvents;
|
|
88
|
+
result.crashRecoveries = watchdogResult.totalRecovered;
|
|
89
|
+
}
|
|
49
90
|
// Phase 1: Record heartbeats for all active executions
|
|
50
91
|
// This is the "push" side — we check tmux panes and update heartbeats
|
|
51
92
|
const heartbeats = recordAllHeartbeats(this.storage);
|
|
@@ -88,7 +129,8 @@ export class SessionWatcher {
|
|
|
88
129
|
if (this.running)
|
|
89
130
|
return;
|
|
90
131
|
this.running = true;
|
|
91
|
-
this.log(`[watcher] Starting session watcher (interval: ${this.intervalMinutes}m, timeout: ${this.timeoutMinutes}m,
|
|
132
|
+
this.log(`[watcher] Starting session watcher (interval: ${this.intervalMinutes}m, timeout: ${this.timeoutMinutes}m, ` +
|
|
133
|
+
`auto-kill: ${this.autoKill}, auto-recover: ${this.autoRecover})`);
|
|
92
134
|
// Run initial cycle
|
|
93
135
|
void this.runCycleWithErrorHandling();
|
|
94
136
|
// Start polling
|
|
@@ -124,14 +166,30 @@ export class SessionWatcher {
|
|
|
124
166
|
intervalMinutes: this.intervalMinutes,
|
|
125
167
|
timeoutMinutes: this.timeoutMinutes,
|
|
126
168
|
autoKill: this.autoKill,
|
|
169
|
+
autoRecover: this.autoRecover,
|
|
127
170
|
};
|
|
128
171
|
}
|
|
172
|
+
/**
|
|
173
|
+
* Get the tmux watchdog instance (for testing/diagnostics).
|
|
174
|
+
*/
|
|
175
|
+
getWatchdog() {
|
|
176
|
+
return this.watchdog;
|
|
177
|
+
}
|
|
129
178
|
async runCycleWithErrorHandling() {
|
|
130
179
|
try {
|
|
131
180
|
const result = await this.runCycle();
|
|
132
|
-
if (result.staleExecutions.length > 0) {
|
|
133
|
-
|
|
134
|
-
`${result.
|
|
181
|
+
if (result.staleExecutions.length > 0 || result.crashEvents.length > 0) {
|
|
182
|
+
const parts = [
|
|
183
|
+
`${result.checked} checked`,
|
|
184
|
+
`${result.heartbeatsUpdated} heartbeats`,
|
|
185
|
+
`${result.staleExecutions.length} stale`,
|
|
186
|
+
`${result.containersKilled} killed`,
|
|
187
|
+
];
|
|
188
|
+
if (result.crashEvents.length > 0) {
|
|
189
|
+
parts.push(`${result.crashEvents.length} crash(es)`);
|
|
190
|
+
parts.push(`${result.crashRecoveries} recovered`);
|
|
191
|
+
}
|
|
192
|
+
this.log(`[watcher] Cycle complete: ${parts.join(', ')}`);
|
|
135
193
|
}
|
|
136
194
|
}
|
|
137
195
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../../src/lib/session/watcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAE1D,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EACrB,aAAa,GAEd,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../../src/lib/session/watcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,7 @@ import { getWorkColumnSetting, findColumnByName, getReviewGateSetting } from './
|
|
|
17
17
|
import { resolveTicketProvider } from '../providers/resolver.js';
|
|
18
18
|
import { tryValidateCommits } from '../execution/commit-validation.js';
|
|
19
19
|
import { moveWithProvider } from '../providers/state-resolution.js';
|
|
20
|
+
import { TicketRefStore } from '../execution/ticket-refs.js';
|
|
20
21
|
/**
|
|
21
22
|
* Check if a completed execution should trigger an automatic state transition.
|
|
22
23
|
*
|
|
@@ -40,7 +41,31 @@ import { moveWithProvider } from '../providers/state-resolution.js';
|
|
|
40
41
|
*/
|
|
41
42
|
export async function handlePostExecutionTransition(context, storage, db) {
|
|
42
43
|
// Get the ticket to check current state and PR status
|
|
43
|
-
|
|
44
|
+
// PRLT-1167: Fall back to ticket_refs when ticket not in PMO (external-only)
|
|
45
|
+
let ticket = await storage.getTicket(context.ticketId);
|
|
46
|
+
if (!ticket) {
|
|
47
|
+
try {
|
|
48
|
+
const ticketRefStore = new TicketRefStore(db);
|
|
49
|
+
const ref = ticketRefStore.get(context.ticketId);
|
|
50
|
+
if (ref) {
|
|
51
|
+
ticket = {
|
|
52
|
+
id: ref.id,
|
|
53
|
+
projectId: ref.projectId ?? undefined,
|
|
54
|
+
statusName: ref.status ?? undefined,
|
|
55
|
+
statusCategory: 'started',
|
|
56
|
+
metadata: {
|
|
57
|
+
external_source: ref.provider,
|
|
58
|
+
...(ref.externalId ? { external_id: ref.externalId } : {}),
|
|
59
|
+
...(ref.externalKey ? { external_key: ref.externalKey } : {}),
|
|
60
|
+
...(ref.externalUrl ? { external_url: ref.externalUrl } : {}),
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
// ticket_refs table may not exist in older databases
|
|
67
|
+
}
|
|
68
|
+
}
|
|
44
69
|
if (!ticket || !ticket.projectId) {
|
|
45
70
|
return { transitioned: false };
|
|
46
71
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post-execution.js","sourceRoot":"","sources":["../../../src/lib/work-lifecycle/post-execution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AAE5F,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAEhE,OAAO,EAAE,kBAAkB,EAA+B,MAAM,mCAAmC,CAAA;AACnG,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;
|
|
1
|
+
{"version":3,"file":"post-execution.js","sourceRoot":"","sources":["../../../src/lib/work-lifecycle/post-execution.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Work Transition Helper
|
|
3
|
+
*
|
|
4
|
+
* Shared logic for intent-based ticket transitions used by all work commands.
|
|
5
|
+
* Each work command specifies a transition intent, and this module resolves
|
|
6
|
+
* it to the correct provider state and moves the ticket.
|
|
7
|
+
*
|
|
8
|
+
* This replaces the old pattern of hardcoding column names via
|
|
9
|
+
* getWorkColumnSetting() + findColumnByName() in each command.
|
|
10
|
+
*
|
|
11
|
+
* Transition is best-effort: if no mapping exists, the operation still runs.
|
|
12
|
+
*/
|
|
13
|
+
import type Database from 'better-sqlite3';
|
|
14
|
+
/**
|
|
15
|
+
* Minimal ticket shape needed for intent-based transitions.
|
|
16
|
+
* Accepts both full Ticket objects and partial objects from batch spawn paths.
|
|
17
|
+
*/
|
|
18
|
+
export interface TransitionTicket {
|
|
19
|
+
id: string;
|
|
20
|
+
projectId?: string;
|
|
21
|
+
statusName?: string;
|
|
22
|
+
}
|
|
23
|
+
import type { ProviderStorage, TicketProvider } from '../providers/types.js';
|
|
24
|
+
import type { TransitionIntent } from '../providers/state-intents.js';
|
|
25
|
+
/**
|
|
26
|
+
* Result of attempting a ticket transition.
|
|
27
|
+
*/
|
|
28
|
+
export interface TransitionResult {
|
|
29
|
+
/** Whether the ticket was moved successfully */
|
|
30
|
+
moved: boolean;
|
|
31
|
+
/** The resolved target column name, if any */
|
|
32
|
+
targetColumn?: string;
|
|
33
|
+
/** The previous column name */
|
|
34
|
+
previousColumn?: string;
|
|
35
|
+
/** Human-readable explanation of what happened */
|
|
36
|
+
message?: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Resolve an intent to a target column name on the board.
|
|
40
|
+
*
|
|
41
|
+
* Resolution order:
|
|
42
|
+
* 1. pmo_transition_map — explicit user-confirmed mappings
|
|
43
|
+
* 2. Legacy column settings (column_in_progress, column_review, column_done)
|
|
44
|
+
* 3. Built-in default column names
|
|
45
|
+
*
|
|
46
|
+
* This only resolves the name — it does not move the ticket.
|
|
47
|
+
*/
|
|
48
|
+
export declare function resolveIntentToColumn(db: Database.Database, intent: TransitionIntent, providerName: string, columnNames: string[]): string | null;
|
|
49
|
+
/**
|
|
50
|
+
* Move a ticket based on a transition intent.
|
|
51
|
+
*
|
|
52
|
+
* This is the primary function work commands should call for transitions.
|
|
53
|
+
* It resolves the intent to a column name, moves the ticket in the local PMO,
|
|
54
|
+
* and optionally syncs to the external provider.
|
|
55
|
+
*
|
|
56
|
+
* @param opts.db - Database instance
|
|
57
|
+
* @param opts.storage - PMO storage instance
|
|
58
|
+
* @param opts.ticket - The ticket to move
|
|
59
|
+
* @param opts.intent - The transition intent
|
|
60
|
+
* @param opts.providerName - Provider name for transition map lookup
|
|
61
|
+
* @param opts.resolveProvider - Function to resolve the external ticket provider
|
|
62
|
+
* @param opts.log - Optional logging callback
|
|
63
|
+
* @returns TransitionResult
|
|
64
|
+
*/
|
|
65
|
+
export declare function moveTicketByIntent(opts: {
|
|
66
|
+
db: Database.Database;
|
|
67
|
+
storage: ProviderStorage;
|
|
68
|
+
ticket: TransitionTicket;
|
|
69
|
+
intent: TransitionIntent;
|
|
70
|
+
providerName: string;
|
|
71
|
+
resolveProvider?: (ticketId: string, projectId: string) => Promise<TicketProvider>;
|
|
72
|
+
log?: (msg: string) => void;
|
|
73
|
+
}): Promise<TransitionResult>;
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Work Transition Helper
|
|
3
|
+
*
|
|
4
|
+
* Shared logic for intent-based ticket transitions used by all work commands.
|
|
5
|
+
* Each work command specifies a transition intent, and this module resolves
|
|
6
|
+
* it to the correct provider state and moves the ticket.
|
|
7
|
+
*
|
|
8
|
+
* This replaces the old pattern of hardcoding column names via
|
|
9
|
+
* getWorkColumnSetting() + findColumnByName() in each command.
|
|
10
|
+
*
|
|
11
|
+
* Transition is best-effort: if no mapping exists, the operation still runs.
|
|
12
|
+
*/
|
|
13
|
+
import { TransitionMapStore } from '../providers/transition-map.js';
|
|
14
|
+
import { getWorkColumnSetting, findColumnByName } from './settings.js';
|
|
15
|
+
/**
|
|
16
|
+
* Map from transition intents to the legacy WorkColumnType settings keys.
|
|
17
|
+
* Used as a fallback when no transition map exists.
|
|
18
|
+
*/
|
|
19
|
+
const INTENT_TO_COLUMN_TYPE = {
|
|
20
|
+
started: 'in_progress',
|
|
21
|
+
needs_review: 'review',
|
|
22
|
+
completed: 'done',
|
|
23
|
+
ready: 'planned',
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Resolve an intent to a target column name on the board.
|
|
27
|
+
*
|
|
28
|
+
* Resolution order:
|
|
29
|
+
* 1. pmo_transition_map — explicit user-confirmed mappings
|
|
30
|
+
* 2. Legacy column settings (column_in_progress, column_review, column_done)
|
|
31
|
+
* 3. Built-in default column names
|
|
32
|
+
*
|
|
33
|
+
* This only resolves the name — it does not move the ticket.
|
|
34
|
+
*/
|
|
35
|
+
export function resolveIntentToColumn(db, intent, providerName, columnNames) {
|
|
36
|
+
// 1. Check pmo_transition_map
|
|
37
|
+
try {
|
|
38
|
+
const store = new TransitionMapStore(db);
|
|
39
|
+
const mappedName = store.resolveIntent(providerName, intent);
|
|
40
|
+
if (mappedName) {
|
|
41
|
+
const match = findColumnByName(columnNames, mappedName);
|
|
42
|
+
if (match)
|
|
43
|
+
return match;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
// Table may not exist yet — fall through
|
|
48
|
+
}
|
|
49
|
+
// 2. Fall back to legacy column settings
|
|
50
|
+
const columnType = INTENT_TO_COLUMN_TYPE[intent];
|
|
51
|
+
if (columnType) {
|
|
52
|
+
const settingName = getWorkColumnSetting(db, columnType);
|
|
53
|
+
const match = findColumnByName(columnNames, settingName);
|
|
54
|
+
if (match)
|
|
55
|
+
return match;
|
|
56
|
+
}
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Move a ticket based on a transition intent.
|
|
61
|
+
*
|
|
62
|
+
* This is the primary function work commands should call for transitions.
|
|
63
|
+
* It resolves the intent to a column name, moves the ticket in the local PMO,
|
|
64
|
+
* and optionally syncs to the external provider.
|
|
65
|
+
*
|
|
66
|
+
* @param opts.db - Database instance
|
|
67
|
+
* @param opts.storage - PMO storage instance
|
|
68
|
+
* @param opts.ticket - The ticket to move
|
|
69
|
+
* @param opts.intent - The transition intent
|
|
70
|
+
* @param opts.providerName - Provider name for transition map lookup
|
|
71
|
+
* @param opts.resolveProvider - Function to resolve the external ticket provider
|
|
72
|
+
* @param opts.log - Optional logging callback
|
|
73
|
+
* @returns TransitionResult
|
|
74
|
+
*/
|
|
75
|
+
export async function moveTicketByIntent(opts) {
|
|
76
|
+
const { db, storage, ticket, intent, providerName, resolveProvider, log } = opts;
|
|
77
|
+
if (!ticket.projectId) {
|
|
78
|
+
return { moved: false, message: 'Ticket has no project' };
|
|
79
|
+
}
|
|
80
|
+
const board = await storage.getProjectBoard(ticket.projectId);
|
|
81
|
+
const columnNames = board ? board.columns.map(col => col.name) : [];
|
|
82
|
+
const targetColumn = resolveIntentToColumn(db, intent, providerName, columnNames);
|
|
83
|
+
if (!targetColumn) {
|
|
84
|
+
return { moved: false, message: `No column found for intent '${intent}'` };
|
|
85
|
+
}
|
|
86
|
+
const previousColumn = ticket.statusName;
|
|
87
|
+
// Skip if already in target state
|
|
88
|
+
if (previousColumn && previousColumn.toLowerCase() === targetColumn.toLowerCase()) {
|
|
89
|
+
return { moved: false, targetColumn, previousColumn, message: 'Already in target state' };
|
|
90
|
+
}
|
|
91
|
+
// Move in local PMO
|
|
92
|
+
let localMoveSucceeded = false;
|
|
93
|
+
try {
|
|
94
|
+
await storage.moveTicket(ticket.projectId, ticket.id, targetColumn);
|
|
95
|
+
localMoveSucceeded = true;
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
const code = error.code;
|
|
99
|
+
if (code === 'SQLITE_READONLY') {
|
|
100
|
+
// PRLT-1183: In container environments the HQ database is mounted read-only.
|
|
101
|
+
// Skip local PMO write but still sync to external provider below.
|
|
102
|
+
if (log)
|
|
103
|
+
log('Local PMO update skipped (read-only database)');
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
return {
|
|
107
|
+
moved: false,
|
|
108
|
+
targetColumn,
|
|
109
|
+
previousColumn,
|
|
110
|
+
message: `Failed to move: ${error instanceof Error ? error.message : String(error)}`,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// Sync to external provider (e.g. Linear)
|
|
115
|
+
let externalSyncSucceeded = false;
|
|
116
|
+
if (resolveProvider) {
|
|
117
|
+
try {
|
|
118
|
+
const provider = await resolveProvider(ticket.id, ticket.projectId);
|
|
119
|
+
if (provider.name !== 'pmo') {
|
|
120
|
+
const result = await provider.moveTicket(ticket.id, targetColumn);
|
|
121
|
+
if (result.success) {
|
|
122
|
+
externalSyncSucceeded = true;
|
|
123
|
+
if (log)
|
|
124
|
+
log(`Synced to ${result.provider}: ${targetColumn}`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
// Non-fatal — don't block work commands for provider sync failures
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return {
|
|
133
|
+
moved: localMoveSucceeded || externalSyncSucceeded,
|
|
134
|
+
targetColumn,
|
|
135
|
+
previousColumn,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=transition.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transition.js","sourceRoot":"","sources":["../../../src/lib/work-lifecycle/transition.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type Database from 'better-sqlite3';
|
|
2
|
-
export declare const WORK_SOURCE_PROVIDERS: readonly ["pmo", "linear", "jira", "shortcut", "asana", "trello", "monday", "clickup"];
|
|
2
|
+
export declare const WORK_SOURCE_PROVIDERS: readonly ["pmo", "linear", "jira", "shortcut", "asana", "trello", "monday", "clickup", "github"];
|
|
3
3
|
export type WorkSourceProvider = typeof WORK_SOURCE_PROVIDERS[number];
|
|
4
4
|
export interface WorkSourceRef {
|
|
5
5
|
provider: WorkSourceProvider;
|
|
@@ -5,12 +5,13 @@ import { loadShortcutConfig } from '../shortcut/config.js';
|
|
|
5
5
|
import { loadTrelloConfig } from '../trello/config.js';
|
|
6
6
|
import { loadMondayConfig } from '../monday/config.js';
|
|
7
7
|
import { loadClickUpConfig } from '../clickup/config.js';
|
|
8
|
+
import { loadGitHubConfig } from '../github/config.js';
|
|
8
9
|
import { loadProviderSources } from './provider-sources.js';
|
|
9
10
|
import { SettingsStore } from '../database/settings-store.js';
|
|
10
11
|
const DEFAULT_SOURCE_KEY = 'work.default_source';
|
|
11
12
|
/** @deprecated Old key kept for migration — use DEFAULT_SOURCE_KEY */
|
|
12
13
|
const LEGACY_ACTIVE_SOURCE_KEY = 'work.active_source';
|
|
13
|
-
export const WORK_SOURCE_PROVIDERS = ['pmo', 'linear', 'jira', 'shortcut', 'asana', 'trello', 'monday', 'clickup'];
|
|
14
|
+
export const WORK_SOURCE_PROVIDERS = ['pmo', 'linear', 'jira', 'shortcut', 'asana', 'trello', 'monday', 'clickup', 'github'];
|
|
14
15
|
function settingsFor(db) {
|
|
15
16
|
return new SettingsStore(db);
|
|
16
17
|
}
|
|
@@ -126,6 +127,13 @@ export function getRegisteredWorkSources(db) {
|
|
|
126
127
|
context: clickUpConfig.defaultListName ?? clickUpConfig.defaultListId ?? undefined,
|
|
127
128
|
});
|
|
128
129
|
}
|
|
130
|
+
const githubConfig = loadGitHubConfig(db);
|
|
131
|
+
if (githubConfig) {
|
|
132
|
+
providers.set('github', {
|
|
133
|
+
provider: 'github',
|
|
134
|
+
context: `${githubConfig.owner}/${githubConfig.repo}`,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
129
137
|
// Append multi-source provider entries. These use a composite key
|
|
130
138
|
// (provider + ':' + prefix) so they don't overwrite single-provider
|
|
131
139
|
// entries already in the map.
|
|
@@ -159,6 +167,8 @@ export function getConnectedIntegrations(db) {
|
|
|
159
167
|
integrations.push('monday');
|
|
160
168
|
if (loadClickUpConfig(db))
|
|
161
169
|
integrations.push('clickup');
|
|
170
|
+
if (loadGitHubConfig(db))
|
|
171
|
+
integrations.push('github');
|
|
162
172
|
return integrations;
|
|
163
173
|
}
|
|
164
174
|
//# sourceMappingURL=config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/lib/work-source/config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAE7D,MAAM,kBAAkB,GAAG,qBAAqB,CAAA;AAChD,sEAAsE;AACtE,MAAM,wBAAwB,GAAG,oBAAoB,CAAA;AAErD,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/lib/work-source/config.ts"],"names":[],"mappings":"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"}
|