@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.
Files changed (206) hide show
  1. package/dist/commands/gc.d.ts +1 -0
  2. package/dist/commands/gc.js +31 -1
  3. package/dist/commands/gc.js.map +1 -1
  4. package/dist/commands/linear/connect.d.ts +5 -0
  5. package/dist/commands/linear/connect.js +84 -0
  6. package/dist/commands/linear/connect.js.map +1 -1
  7. package/dist/commands/orchestrate/index.js +18 -10
  8. package/dist/commands/orchestrate/index.js.map +1 -1
  9. package/dist/commands/qa/index.js +1 -1
  10. package/dist/commands/session/watch.d.ts +1 -0
  11. package/dist/commands/session/watch.js +46 -2
  12. package/dist/commands/session/watch.js.map +1 -1
  13. package/dist/commands/watch/index.d.ts +28 -0
  14. package/dist/commands/watch/index.js +172 -0
  15. package/dist/commands/watch/index.js.map +1 -0
  16. package/dist/commands/work/complete.d.ts +1 -0
  17. package/dist/commands/work/complete.js +38 -31
  18. package/dist/commands/work/complete.js.map +1 -1
  19. package/dist/commands/{ticket/index.d.ts → work/drop.d.ts} +5 -4
  20. package/dist/commands/work/drop.js +215 -0
  21. package/dist/commands/work/drop.js.map +1 -0
  22. package/dist/commands/work/linear.js +1 -1
  23. package/dist/commands/work/linear.js.map +1 -1
  24. package/dist/commands/work/ready.d.ts +1 -0
  25. package/dist/commands/work/ready.js +46 -30
  26. package/dist/commands/work/ready.js.map +1 -1
  27. package/dist/commands/work/ship.d.ts +1 -0
  28. package/dist/commands/work/ship.js +56 -40
  29. package/dist/commands/work/ship.js.map +1 -1
  30. package/dist/commands/work/start.d.ts +2 -0
  31. package/dist/commands/work/start.js +238 -83
  32. package/dist/commands/work/start.js.map +1 -1
  33. package/dist/commands/work/stop.d.ts +1 -0
  34. package/dist/commands/work/stop.js +40 -0
  35. package/dist/commands/work/stop.js.map +1 -1
  36. package/dist/lib/agents/commands.js +7 -5
  37. package/dist/lib/agents/commands.js.map +1 -1
  38. package/dist/lib/asana/client.d.ts +4 -1
  39. package/dist/lib/asana/client.js +15 -0
  40. package/dist/lib/asana/client.js.map +1 -1
  41. package/dist/lib/asana/index.d.ts +1 -1
  42. package/dist/lib/asana/types.d.ts +4 -0
  43. package/dist/lib/database/credential-store.js +1 -0
  44. package/dist/lib/database/credential-store.js.map +1 -1
  45. package/dist/lib/database/drizzle-schema.d.ts +17 -0
  46. package/dist/lib/database/drizzle-schema.js +1 -0
  47. package/dist/lib/database/drizzle-schema.js.map +1 -1
  48. package/dist/lib/database/migrations/0019_gc_artifact_cleanup.d.ts +9 -0
  49. package/dist/lib/database/migrations/0019_gc_artifact_cleanup.js +23 -0
  50. package/dist/lib/database/migrations/0019_gc_artifact_cleanup.js.map +1 -0
  51. package/dist/lib/database/migrations/0020_transition_map.d.ts +2 -0
  52. package/dist/lib/database/migrations/0020_transition_map.js +27 -0
  53. package/dist/lib/database/migrations/0020_transition_map.js.map +1 -0
  54. package/dist/lib/database/migrations/index.js +4 -0
  55. package/dist/lib/database/migrations/index.js.map +1 -1
  56. package/dist/lib/execution/config.d.ts +10 -0
  57. package/dist/lib/execution/config.js +24 -0
  58. package/dist/lib/execution/config.js.map +1 -1
  59. package/dist/lib/execution/preflight.d.ts +51 -0
  60. package/dist/lib/execution/preflight.js +278 -0
  61. package/dist/lib/execution/preflight.js.map +1 -0
  62. package/dist/lib/execution/runners/prompt-builder.d.ts +6 -0
  63. package/dist/lib/execution/runners/prompt-builder.js +38 -7
  64. package/dist/lib/execution/runners/prompt-builder.js.map +1 -1
  65. package/dist/lib/execution/session-utils.d.ts +23 -0
  66. package/dist/lib/execution/session-utils.js +69 -0
  67. package/dist/lib/execution/session-utils.js.map +1 -1
  68. package/dist/lib/execution/spawner.d.ts +11 -1
  69. package/dist/lib/execution/spawner.js +44 -16
  70. package/dist/lib/execution/spawner.js.map +1 -1
  71. package/dist/lib/execution/storage.d.ts +6 -0
  72. package/dist/lib/execution/storage.js +18 -0
  73. package/dist/lib/execution/storage.js.map +1 -1
  74. package/dist/lib/execution/ticket-refs.d.ts +71 -0
  75. package/dist/lib/execution/ticket-refs.js +125 -0
  76. package/dist/lib/execution/ticket-refs.js.map +1 -0
  77. package/dist/lib/execution/types.d.ts +7 -2
  78. package/dist/lib/execution/types.js +5 -3
  79. package/dist/lib/execution/types.js.map +1 -1
  80. package/dist/lib/external-issues/index.d.ts +1 -0
  81. package/dist/lib/external-issues/index.js +2 -0
  82. package/dist/lib/external-issues/index.js.map +1 -1
  83. package/dist/lib/external-issues/linear.js +1 -1
  84. package/dist/lib/external-issues/linear.js.map +1 -1
  85. package/dist/lib/external-issues/ticket-builder.d.ts +21 -0
  86. package/dist/lib/external-issues/ticket-builder.js +43 -0
  87. package/dist/lib/external-issues/ticket-builder.js.map +1 -0
  88. package/dist/lib/external-issues/work-start.js +1 -1
  89. package/dist/lib/external-issues/work-start.js.map +1 -1
  90. package/dist/lib/gc/index.d.ts +67 -6
  91. package/dist/lib/gc/index.js +293 -15
  92. package/dist/lib/gc/index.js.map +1 -1
  93. package/dist/lib/github/client.d.ts +84 -0
  94. package/dist/lib/github/client.js +123 -0
  95. package/dist/lib/github/client.js.map +1 -0
  96. package/dist/lib/github/config.d.ts +42 -0
  97. package/dist/lib/github/config.js +115 -0
  98. package/dist/lib/github/config.js.map +1 -0
  99. package/dist/lib/github/types.d.ts +71 -0
  100. package/dist/lib/github/types.js +50 -0
  101. package/dist/lib/github/types.js.map +1 -0
  102. package/dist/lib/jira/client.d.ts +113 -0
  103. package/dist/lib/jira/client.js +208 -0
  104. package/dist/lib/jira/client.js.map +1 -0
  105. package/dist/lib/jira/config.d.ts +9 -0
  106. package/dist/lib/jira/config.js +30 -0
  107. package/dist/lib/jira/config.js.map +1 -1
  108. package/dist/lib/jira/index.d.ts +6 -2
  109. package/dist/lib/jira/index.js +4 -2
  110. package/dist/lib/jira/index.js.map +1 -1
  111. package/dist/lib/jira/types.d.ts +118 -0
  112. package/dist/lib/jira/types.js +45 -0
  113. package/dist/lib/jira/types.js.map +1 -0
  114. package/dist/lib/linear/config.d.ts +10 -0
  115. package/dist/lib/linear/config.js +33 -0
  116. package/dist/lib/linear/config.js.map +1 -1
  117. package/dist/lib/mcp/tools/index.d.ts +0 -2
  118. package/dist/lib/mcp/tools/index.js +0 -2
  119. package/dist/lib/mcp/tools/index.js.map +1 -1
  120. package/dist/lib/orchestrate/index.d.ts +2 -0
  121. package/dist/lib/orchestrate/index.js +1 -0
  122. package/dist/lib/orchestrate/index.js.map +1 -1
  123. package/dist/lib/orchestrate/simple-poller.d.ts +57 -0
  124. package/dist/lib/orchestrate/simple-poller.js +324 -0
  125. package/dist/lib/orchestrate/simple-poller.js.map +1 -0
  126. package/dist/lib/pmo/storage/index.js +16 -5
  127. package/dist/lib/pmo/storage/index.js.map +1 -1
  128. package/dist/lib/prompt-json.d.ts +31 -0
  129. package/dist/lib/prompt-json.js.map +1 -1
  130. package/dist/lib/providers/asana-provider.d.ts +27 -0
  131. package/dist/lib/providers/asana-provider.js +426 -0
  132. package/dist/lib/providers/asana-provider.js.map +1 -0
  133. package/dist/lib/providers/auto-mapper.d.ts +45 -0
  134. package/dist/lib/providers/auto-mapper.js +138 -0
  135. package/dist/lib/providers/auto-mapper.js.map +1 -0
  136. package/dist/lib/providers/github-provider.d.ts +34 -0
  137. package/dist/lib/providers/github-provider.js +418 -0
  138. package/dist/lib/providers/github-provider.js.map +1 -0
  139. package/dist/lib/providers/index.d.ts +3 -0
  140. package/dist/lib/providers/index.js +3 -0
  141. package/dist/lib/providers/index.js.map +1 -1
  142. package/dist/lib/providers/jira-provider.d.ts +31 -0
  143. package/dist/lib/providers/jira-provider.js +383 -0
  144. package/dist/lib/providers/jira-provider.js.map +1 -0
  145. package/dist/lib/providers/linear-provider.js +6 -7
  146. package/dist/lib/providers/linear-provider.js.map +1 -1
  147. package/dist/lib/providers/resolver.js +54 -0
  148. package/dist/lib/providers/resolver.js.map +1 -1
  149. package/dist/lib/providers/state-intents.d.ts +20 -0
  150. package/dist/lib/providers/state-intents.js +61 -7
  151. package/dist/lib/providers/state-intents.js.map +1 -1
  152. package/dist/lib/providers/state-resolution.d.ts +15 -11
  153. package/dist/lib/providers/state-resolution.js +54 -48
  154. package/dist/lib/providers/state-resolution.js.map +1 -1
  155. package/dist/lib/providers/transition-map.d.ts +59 -0
  156. package/dist/lib/providers/transition-map.js +113 -0
  157. package/dist/lib/providers/transition-map.js.map +1 -0
  158. package/dist/lib/providers/types.d.ts +1 -1
  159. package/dist/lib/session/index.d.ts +3 -1
  160. package/dist/lib/session/index.js +3 -1
  161. package/dist/lib/session/index.js.map +1 -1
  162. package/dist/lib/session/tmux-watchdog.d.ts +157 -0
  163. package/dist/lib/session/tmux-watchdog.js +424 -0
  164. package/dist/lib/session/tmux-watchdog.js.map +1 -0
  165. package/dist/lib/session/watcher.d.ts +22 -4
  166. package/dist/lib/session/watcher.js +66 -8
  167. package/dist/lib/session/watcher.js.map +1 -1
  168. package/dist/lib/work-lifecycle/post-execution.js +26 -1
  169. package/dist/lib/work-lifecycle/post-execution.js.map +1 -1
  170. package/dist/lib/work-lifecycle/transition.d.ts +73 -0
  171. package/dist/lib/work-lifecycle/transition.js +138 -0
  172. package/dist/lib/work-lifecycle/transition.js.map +1 -0
  173. package/dist/lib/work-source/config.d.ts +1 -1
  174. package/dist/lib/work-source/config.js +11 -1
  175. package/dist/lib/work-source/config.js.map +1 -1
  176. package/oclif.manifest.json +936 -1628
  177. package/package.json +1 -1
  178. package/dist/commands/ticket/create.d.ts +0 -44
  179. package/dist/commands/ticket/create.js +0 -760
  180. package/dist/commands/ticket/create.js.map +0 -1
  181. package/dist/commands/ticket/delete.d.ts +0 -17
  182. package/dist/commands/ticket/delete.js +0 -204
  183. package/dist/commands/ticket/delete.js.map +0 -1
  184. package/dist/commands/ticket/edit.d.ts +0 -28
  185. package/dist/commands/ticket/edit.js +0 -402
  186. package/dist/commands/ticket/edit.js.map +0 -1
  187. package/dist/commands/ticket/index.js +0 -74
  188. package/dist/commands/ticket/index.js.map +0 -1
  189. package/dist/commands/ticket/list.d.ts +0 -33
  190. package/dist/commands/ticket/list.js +0 -519
  191. package/dist/commands/ticket/list.js.map +0 -1
  192. package/dist/commands/ticket/move.d.ts +0 -27
  193. package/dist/commands/ticket/move.js +0 -413
  194. package/dist/commands/ticket/move.js.map +0 -1
  195. package/dist/commands/ticket/show.d.ts +0 -14
  196. package/dist/commands/ticket/show.js +0 -110
  197. package/dist/commands/ticket/show.js.map +0 -1
  198. package/dist/commands/ticket/update.d.ts +0 -28
  199. package/dist/commands/ticket/update.js +0 -458
  200. package/dist/commands/ticket/update.js.map +0 -1
  201. package/dist/lib/mcp/tools/action.d.ts +0 -6
  202. package/dist/lib/mcp/tools/action.js +0 -123
  203. package/dist/lib/mcp/tools/action.js.map +0 -1
  204. package/dist/lib/mcp/tools/ticket.d.ts +0 -6
  205. package/dist/lib/mcp/tools/ticket.js +0 -464
  206. 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
- * 1. Poll: Check all running executions for heartbeat timeout
10
- * 2. Update: Record heartbeats for alive agents (tmux pane inspection)
11
- * 3. Detect: Find stale executions that exceeded the timeout
12
- * 4. Act: Mark failed, kill containers, fire events
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
- * 1. Poll: Check all running executions for heartbeat timeout
10
- * 2. Update: Record heartbeats for alive agents (tmux pane inspection)
11
- * 3. Detect: Find stale executions that exceeded the timeout
12
- * 4. Act: Mark failed, kill containers, fire events
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, auto-kill: ${this.autoKill})`);
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
- this.log(`[watcher] Cycle complete: ${result.checked} checked, ${result.heartbeatsUpdated} heartbeats, ` +
134
- `${result.staleExecutions.length} stale, ${result.containersKilled} killed`);
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;AAgCvB,gFAAgF;AAChF,kBAAkB;AAClB,gFAAgF;AAEhF,MAAM,OAAO,cAAc;IACjB,OAAO,CAAkB;IACzB,EAAE,CAAmB;IACrB,eAAe,CAAQ;IACvB,cAAc,CAAQ;IACtB,QAAQ,CAAS;IACjB,GAAG,CAAuB;IAC1B,eAAe,CAAiE;IAChF,KAAK,GAA0C,IAAI,CAAA;IACnD,OAAO,GAAG,KAAK,CAAA;IAEvB,YAAY,OAAuB;QACjC,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,CAAA;QACpB,IAAI,CAAC,OAAO,GAAG,IAAI,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAC/C,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,IAAI,CAAC,CAAA;QACnD,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,EAAE,CAAA;QAClD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAA;QACxC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QACpC,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC,eAAe,CAAA;IAChD,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,QAAQ;QACZ,MAAM,MAAM,GAAqB;YAC/B,OAAO,EAAE,CAAC;YACV,iBAAiB,EAAE,CAAC;YACpB,eAAe,EAAE,EAAE;YACnB,gBAAgB,EAAE,CAAC;SACpB,CAAA;QAED,uDAAuD;QACvD,sEAAsE;QACtE,MAAM,UAAU,GAAG,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACpD,MAAM,CAAC,iBAAiB,GAAG,UAAU,CAAC,IAAI,CAAA;QAC1C,MAAM,CAAC,OAAO,GAAG,UAAU,CAAC,IAAI,CAAA;QAEhC,yDAAyD;QACzD,kEAAkE;QAClE,MAAM,eAAe,GAAG,qBAAqB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,CAAA;QAChF,MAAM,CAAC,eAAe,GAAG,eAAe,CAAA;QAExC,mCAAmC;QACnC,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;YACpC,MAAM,IAAI,GAAG,KAAK,CAAC,SAAS,CAAA;YAC5B,IAAI,CAAC,GAAG,CACN,mCAAmC,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,QAAQ,OAAO,KAAK,CAAC,MAAM,EAAE,CACzF,CAAA;YAED,oDAAoD;YACpD,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAE1C,8CAA8C;YAC9C,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACtC,IAAI,CAAC,GAAG,CAAC,+BAA+B,IAAI,CAAC,WAAW,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC,CAAA;gBACjF,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;gBAC9C,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,CAAC,gBAAgB,EAAE,CAAA;oBACzB,IAAI,CAAC,GAAG,CAAC,uBAAuB,IAAI,CAAC,WAAW,SAAS,CAAC,CAAA;gBAC5D,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,GAAG,CAAC,sCAAsC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;gBACpE,CAAC;YACH,CAAC;YAED,gBAAgB;YAChB,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;gBACzB,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;YAChD,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAED;;;OAGG;IACH,KAAK;QACH,IAAI,IAAI,CAAC,OAAO;YAAE,OAAM;QACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;QAEnB,IAAI,CAAC,GAAG,CACN,iDAAiD,IAAI,CAAC,eAAe,eAAe,IAAI,CAAC,cAAc,iBAAiB,IAAI,CAAC,QAAQ,GAAG,CACzI,CAAA;QAED,oBAAoB;QACpB,KAAK,IAAI,CAAC,yBAAyB,EAAE,CAAA;QAErC,gBAAgB;QAChB,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,GAAG,EAAE,GAAG,IAAI,CAAA;QACnD,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;YAC5B,KAAK,IAAI,CAAC,yBAAyB,EAAE,CAAA;QACvC,CAAC,EAAE,UAAU,CAAC,CAAA;IAChB,CAAC;IAED;;OAEG;IACH,IAAI;QACF,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAM;QACzB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAA;QAEpB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACzB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;QACnB,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAA;IAC/C,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO;YACL,eAAe,EAAE,IAAI,CAAC,eAAe;YACrC,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAA;IACH,CAAC;IAEO,KAAK,CAAC,yBAAyB;QACrC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAA;YACpC,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtC,IAAI,CAAC,GAAG,CACN,6BAA6B,MAAM,CAAC,OAAO,aAAa,MAAM,CAAC,iBAAiB,eAAe;oBAC/F,GAAG,MAAM,CAAC,eAAe,CAAC,MAAM,WAAW,MAAM,CAAC,gBAAgB,SAAS,CAC5E,CAAA;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,uCAAuC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;QACnG,CAAC;IACH,CAAC;CACF"}
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
- const ticket = await storage.getTicket(context.ticketId);
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":"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"}
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;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAmD5D;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,OAA6B,EAC7B,OAA+C,EAC/C,EAAqB;IAErB,sDAAsD;IACtD,6EAA6E;IAC7E,IAAI,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;IACtD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,EAAE,CAAC,CAAA;YAC7C,MAAM,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;YAChD,IAAI,GAAG,EAAE,CAAC;gBACR,MAAM,GAAG;oBACP,EAAE,EAAE,GAAG,CAAC,EAAE;oBACV,SAAS,EAAE,GAAG,CAAC,SAAS,IAAI,SAAS;oBACrC,UAAU,EAAE,GAAG,CAAC,MAAM,IAAI,SAAS;oBACnC,cAAc,EAAE,SAA0B;oBAC1C,QAAQ,EAAE;wBACR,eAAe,EAAE,GAAG,CAAC,QAAQ;wBAC7B,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC1D,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC7D,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAC9D;iBACF,CAAA;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,qDAAqD;QACvD,CAAC;IACH,CAAC;IACD,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACjC,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,CAAA;IAChC,CAAC;IAED,gFAAgF;IAChF,IAAI,MAAM,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QACxC,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,CAAA;IAChC,CAAC;IAED,yCAAyC;IACzC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,oBAAoB,CAAC,EAAE,CAAC,CAAA;IAEjE,8DAA8D;IAC9D,qDAAqD;IACrD,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAA;QACrC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,CAAA;QAC5C,CAAC;IACH,CAAC;IAED,8EAA8E;IAC9E,yEAAyE;IACzE,kDAAkD;IAClD,IAAI,UAA8C,CAAA;IAClD,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACvC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,kBAAkB,CAC/B,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,aAAa,CACtB,CAAA;YACD,IAAI,MAAM,EAAE,CAAC;gBACX,UAAU,GAAG,MAAM,CAAA;gBACnB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;oBACnB,OAAO;wBACL,YAAY,EAAE,KAAK;wBACnB,SAAS,EAAE,MAAM,CAAC,UAAU;wBAC5B,UAAU;wBACV,mBAAmB,EAAE,IAAI;wBACzB,UAAU;qBACX,CAAA;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,4DAA4D;YAC5D,yDAAyD;QAC3D,CAAC;IACH,CAAC;IAED,uDAAuD;IACvD,oDAAoD;IACpD,sDAAsD;IACtD,MAAM,MAAM,GAAG,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAA;IAExD,mDAAmD;IACnD,0EAA0E;IAC1E,oFAAoF;IACpF,MAAM,QAAQ,GAAG,qBAAqB,CACpC,OAAO,CAAC,QAAQ,EAChB,MAAM,CAAC,SAAS,EAChB,EAAE,EACF,OAA0B,EAC1B,MAAM,CAAC,QAAQ,CAChB,CAAA;IAED,wEAAwE;IACxE,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,CAAA;IACvC,MAAM,UAAU,GAAG,MAAM,gBAAgB,CACvC,QAAQ,EACR,OAA0B,EAC1B,MAAM,CAAC,SAAS,EAChB,OAAO,CAAC,QAAQ,EAChB,MAAM,EACN,EAAE,EACF,MAAM,CAAC,UAAU,CAClB,CAAA;IAED,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACxB,6DAA6D;QAC7D,IAAI,UAAU,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACzC,MAAM,gBAAgB,GAAG,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAA;YAClE,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAA;YACnE,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;YAC7D,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,CAAA;YAC5C,CAAC;YACD,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YACtD,MAAM,YAAY,GAAG,gBAAgB,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAA;YACpE,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC,UAAU,KAAK,YAAY,EAAE,CAAC;gBACxD,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,CAAA;YAC5C,CAAC;YACD,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;YAC5E,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;gBACxB,OAAO;oBACL,YAAY,EAAE,KAAK;oBACnB,SAAS,EAAE,aAAa;oBACxB,OAAO,EAAE,YAAY;oBACrB,QAAQ,EAAE,UAAU,CAAC,QAAQ;oBAC7B,aAAa,EAAE,UAAU,CAAC,KAAK;oBAC/B,UAAU;oBACV,UAAU;iBACX,CAAA;YACH,CAAC;YACD,OAAO;gBACL,YAAY,EAAE,IAAI;gBAClB,SAAS,EAAE,aAAa;gBACxB,OAAO,EAAE,YAAY;gBACrB,QAAQ,EAAE,UAAU,CAAC,QAAQ;gBAC7B,UAAU;gBACV,UAAU;aACX,CAAA;QACH,CAAC;QAED,OAAO;YACL,YAAY,EAAE,KAAK;YACnB,SAAS,EAAE,aAAa;YACxB,OAAO,EAAE,UAAU,CAAC,SAAS;YAC7B,QAAQ,EAAE,QAAQ,CAAC,IAAI;YACvB,aAAa,EAAE,UAAU,CAAC,KAAK,IAAI,UAAU,CAAC,OAAO;YACrD,UAAU;YACV,UAAU;SACX,CAAA;IACH,CAAC;IAED,OAAO;QACL,YAAY,EAAE,IAAI;QAClB,SAAS,EAAE,aAAa;QACxB,OAAO,EAAE,UAAU,CAAC,SAAS;QAC7B,QAAQ,EAAE,QAAQ,CAAC,IAAI;QACvB,UAAU;QACV,UAAU;KACX,CAAA;AACH,CAAC"}
@@ -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":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/lib/work-source/config.ts"],"names":[],"mappings":"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"}