@straiffi/archon 1.7.1 → 1.7.3

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 (166) hide show
  1. package/dist/client/assets/ActivityView-DTEenQas.js +1 -0
  2. package/dist/client/assets/GitHubActionsDialog-BKWHonUS.js +1 -0
  3. package/dist/client/assets/TestsDialog-cBaoffCs.js +4 -0
  4. package/dist/client/assets/{architectureDiagram-3BPJPVTR-CJgwCv5O.js → architectureDiagram-3BPJPVTR-BzzGotac.js} +1 -1
  5. package/dist/client/assets/{blockDiagram-GPEHLZMM--xjes8FA.js → blockDiagram-GPEHLZMM-DIcqLHKg.js} +1 -1
  6. package/dist/client/assets/{c4Diagram-AAUBKEIU-DHnp82NG.js → c4Diagram-AAUBKEIU-Hc1Sqmhs.js} +1 -1
  7. package/dist/client/assets/channel-Cym17waa.js +1 -0
  8. package/dist/client/assets/{chunk-2J33WTMH-DAOyJCKy.js → chunk-2J33WTMH-CWSwjsgk.js} +1 -1
  9. package/dist/client/assets/{chunk-3OPIFGDE-C9YI_tk4.js → chunk-3OPIFGDE-BnX3DljN.js} +1 -1
  10. package/dist/client/assets/{chunk-5ZQYHXKU-BW9khkin.js → chunk-5ZQYHXKU-EyyJlI-d.js} +1 -1
  11. package/dist/client/assets/{chunk-727SXJPM-DL4t5Hpi.js → chunk-727SXJPM-Ci6CfxWj.js} +1 -1
  12. package/dist/client/assets/{chunk-AQP2D5EJ-C4VMKa_O.js → chunk-AQP2D5EJ-RKZNsJTm.js} +1 -1
  13. package/dist/client/assets/{chunk-CSCIHK7Q-DHP7zrZK.js → chunk-CSCIHK7Q-DBf0Euoj.js} +1 -1
  14. package/dist/client/assets/{chunk-KSCS5N6A-CqZWek3t.js → chunk-KSCS5N6A-BmLQI_2S.js} +1 -1
  15. package/dist/client/assets/{chunk-L5ZTLDWV-D3q55pCI.js → chunk-L5ZTLDWV-DKwVAb8G.js} +1 -1
  16. package/dist/client/assets/{chunk-LZXEDZCA-UDY_Lo6v.js → chunk-LZXEDZCA-axotKkbz.js} +2 -2
  17. package/dist/client/assets/{chunk-ND2GUHAM-ZCiOxkYV.js → chunk-ND2GUHAM-BBlJ4nXC.js} +1 -1
  18. package/dist/client/assets/{chunk-NZK2D7GU-CuryoBtd.js → chunk-NZK2D7GU-BKJGoZZt.js} +1 -1
  19. package/dist/client/assets/{chunk-O5CBEL6O-PnPsz2TB.js → chunk-O5CBEL6O-C-Ghigo1.js} +1 -1
  20. package/dist/client/assets/{chunk-WU5MYG2G-BzOopX-U.js → chunk-WU5MYG2G-CCzVWYcd.js} +1 -1
  21. package/dist/client/assets/classDiagram-4FO5ZUOK-BcigvvIC.js +1 -0
  22. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-3AdSuE0N.js +1 -0
  23. package/dist/client/assets/{dagre-BM42HDAG-5LBwQ83I.js → dagre-BM42HDAG-rwIdPcjI.js} +1 -1
  24. package/dist/client/assets/{diagram-2AECGRRQ-_4pckiGR.js → diagram-2AECGRRQ-DJWxOQsg.js} +1 -1
  25. package/dist/client/assets/{diagram-5GNKFQAL-CqElv5rJ.js → diagram-5GNKFQAL-C-mQeFtd.js} +1 -1
  26. package/dist/client/assets/{diagram-KO2AKTUF-DKv4zS4F.js → diagram-KO2AKTUF-BAu6u4sR.js} +1 -1
  27. package/dist/client/assets/{diagram-LMA3HP47-iLmTH4UP.js → diagram-LMA3HP47-U6CbvBn0.js} +1 -1
  28. package/dist/client/assets/{diagram-OG6HWLK6-DpFYIa0o.js → diagram-OG6HWLK6-DNTwFcs1.js} +1 -1
  29. package/dist/client/assets/{erDiagram-TEJ5UH35-DnfbvbKs.js → erDiagram-TEJ5UH35-DaHX6Xw5.js} +1 -1
  30. package/dist/client/assets/{flowDiagram-I6XJVG4X-C2MN70Qv.js → flowDiagram-I6XJVG4X-B9hKqL2l.js} +1 -1
  31. package/dist/client/assets/{ganttDiagram-6RSMTGT7-yonpliOJ.js → ganttDiagram-6RSMTGT7-BQ1HPHVO.js} +1 -1
  32. package/dist/client/assets/{gitGraphDiagram-PVQCEYII-CaKDWx7y.js → gitGraphDiagram-PVQCEYII-BBRcsmMK.js} +1 -1
  33. package/dist/client/assets/index-CEMaJCPS.js +273 -0
  34. package/dist/client/assets/index-lWftq65U.css +2 -0
  35. package/dist/client/assets/{infoDiagram-5YYISTIA-82-8njnx.js → infoDiagram-5YYISTIA-DUoNiSGC.js} +1 -1
  36. package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-BMiyLWwK.js → ishikawaDiagram-YF4QCWOH-DJN1y2w8.js} +1 -1
  37. package/dist/client/assets/{journeyDiagram-JHISSGLW-C1qBnR37.js → journeyDiagram-JHISSGLW-BxLLMT70.js} +1 -1
  38. package/dist/client/assets/{kanban-definition-UN3LZRKU-zByEuCzn.js → kanban-definition-UN3LZRKU-BdCPistJ.js} +1 -1
  39. package/dist/client/assets/{line-EpLqyzw7.js → line-4mIgXsZd.js} +1 -1
  40. package/dist/client/assets/{mermaid-parser.core-o124REPN.js → mermaid-parser.core-Pu1QGWJ-.js} +1 -1
  41. package/dist/client/assets/{mermaid.core-DgiAn2-k.js → mermaid.core-DnH9DrgZ.js} +3 -3
  42. package/dist/client/assets/{mindmap-definition-RKZ34NQL-UK6V0Bxq.js → mindmap-definition-RKZ34NQL-DqE4ba3C.js} +1 -1
  43. package/dist/client/assets/{pieDiagram-4H26LBE5-B2s9oGFl.js → pieDiagram-4H26LBE5-Crjy9ejf.js} +1 -1
  44. package/dist/client/assets/{quadrantDiagram-W4KKPZXB-d5H7-zcc.js → quadrantDiagram-W4KKPZXB-BUSZ2VB7.js} +1 -1
  45. package/dist/client/assets/{requirementDiagram-4Y6WPE33-DlwN9Vcv.js → requirementDiagram-4Y6WPE33-CBhFKEoV.js} +1 -1
  46. package/dist/client/assets/{sankeyDiagram-5OEKKPKP-9dGyAxu5.js → sankeyDiagram-5OEKKPKP-CgdbY41v.js} +1 -1
  47. package/dist/client/assets/{sequenceDiagram-3UESZ5HK-DKwRjEym.js → sequenceDiagram-3UESZ5HK-hkp_H7AE.js} +1 -1
  48. package/dist/client/assets/{stateDiagram-AJRCARHV-D_6cuqsX.js → stateDiagram-AJRCARHV-C6x45RWp.js} +1 -1
  49. package/dist/client/assets/stateDiagram-v2-BHNVJYJU-DVzPjRPN.js +1 -0
  50. package/dist/client/assets/{timeline-definition-PNZ67QCA-ChqD4j8I.js → timeline-definition-PNZ67QCA-CjnZWttQ.js} +1 -1
  51. package/dist/client/assets/{vennDiagram-CIIHVFJN-CSAZk0IW.js → vennDiagram-CIIHVFJN-DU5ZyYju.js} +1 -1
  52. package/dist/client/assets/{wardleyDiagram-YWT4CUSO-BUE6IF4q.js → wardleyDiagram-YWT4CUSO-CaCEnCB0.js} +1 -1
  53. package/dist/client/assets/{xychartDiagram-2RQKCTM6-MOkC53m_.js → xychartDiagram-2RQKCTM6-Ce3xa37U.js} +1 -1
  54. package/dist/client/index.html +2 -2
  55. package/dist/server/db.js +471 -39
  56. package/dist/server/db.js.map +1 -1
  57. package/dist/server/index.js +1267 -213
  58. package/dist/server/index.js.map +1 -1
  59. package/dist/server/lib/agent.js +281 -76
  60. package/dist/server/lib/agent.js.map +1 -1
  61. package/dist/server/lib/agentRuns.js +205 -38
  62. package/dist/server/lib/agentRuns.js.map +1 -1
  63. package/dist/server/lib/automationProgression.js +464 -0
  64. package/dist/server/lib/automationProgression.js.map +1 -0
  65. package/dist/server/lib/automationReconciliation.js +498 -0
  66. package/dist/server/lib/automationReconciliation.js.map +1 -0
  67. package/dist/server/lib/automationStageDetails.js +232 -0
  68. package/dist/server/lib/automationStageDetails.js.map +1 -0
  69. package/dist/server/lib/buildOpenQuestionOperations.js +223 -0
  70. package/dist/server/lib/buildOpenQuestionOperations.js.map +1 -0
  71. package/dist/server/lib/buildOpenQuestions.js +52 -0
  72. package/dist/server/lib/buildOpenQuestions.js.map +1 -1
  73. package/dist/server/lib/buildSequences.js +130 -46
  74. package/dist/server/lib/buildSequences.js.map +1 -1
  75. package/dist/server/lib/bundleReviewOperations.js +82 -9
  76. package/dist/server/lib/bundleReviewOperations.js.map +1 -1
  77. package/dist/server/lib/chatOperations.js +31 -0
  78. package/dist/server/lib/chatOperations.js.map +1 -1
  79. package/dist/server/lib/executionReconciliation.js +518 -0
  80. package/dist/server/lib/executionReconciliation.js.map +1 -0
  81. package/dist/server/lib/executionRunRetention.js +141 -0
  82. package/dist/server/lib/executionRunRetention.js.map +1 -0
  83. package/dist/server/lib/executionRuns.js +1264 -0
  84. package/dist/server/lib/executionRuns.js.map +1 -0
  85. package/dist/server/lib/git.js +385 -6
  86. package/dist/server/lib/git.js.map +1 -1
  87. package/dist/server/lib/integrations/github.js +43 -0
  88. package/dist/server/lib/integrations/github.js.map +1 -1
  89. package/dist/server/lib/integrations/githubActions.js +1 -0
  90. package/dist/server/lib/integrations/githubActions.js.map +1 -1
  91. package/dist/server/lib/integrations/githubActionsSessions.js +337 -114
  92. package/dist/server/lib/integrations/githubActionsSessions.js.map +1 -1
  93. package/dist/server/lib/projectMemorySelections.js +7 -3
  94. package/dist/server/lib/projectMemorySelections.js.map +1 -1
  95. package/dist/server/lib/shutdown.js +2 -2
  96. package/dist/server/lib/shutdown.js.map +1 -1
  97. package/dist/server/lib/specArtifact.js +3 -0
  98. package/dist/server/lib/specArtifact.js.map +1 -1
  99. package/dist/server/lib/specFormatting.js +1 -1
  100. package/dist/server/lib/specFormatting.js.map +1 -1
  101. package/dist/server/lib/specOperations.js +31 -0
  102. package/dist/server/lib/specOperations.js.map +1 -1
  103. package/dist/server/lib/specReviewContext.js +44 -14
  104. package/dist/server/lib/specReviewContext.js.map +1 -1
  105. package/dist/server/lib/specReviewDraft.js +3 -2
  106. package/dist/server/lib/specReviewDraft.js.map +1 -1
  107. package/dist/server/lib/specReviewOperations.js +44 -7
  108. package/dist/server/lib/specReviewOperations.js.map +1 -1
  109. package/dist/server/lib/specReviewValidation.js +217 -0
  110. package/dist/server/lib/specReviewValidation.js.map +1 -0
  111. package/dist/server/lib/specReviews.js +30 -2
  112. package/dist/server/lib/specReviews.js.map +1 -1
  113. package/dist/server/lib/specs.js +18 -1
  114. package/dist/server/lib/specs.js.map +1 -1
  115. package/dist/server/lib/stageSnapshots.js +197 -0
  116. package/dist/server/lib/stageSnapshots.js.map +1 -0
  117. package/dist/server/lib/testSessions.js +164 -19
  118. package/dist/server/lib/testSessions.js.map +1 -1
  119. package/dist/server/lib/ticketAutomation.js +80 -4
  120. package/dist/server/lib/ticketAutomation.js.map +1 -1
  121. package/dist/server/lib/ticketAutomationCommit.js +466 -91
  122. package/dist/server/lib/ticketAutomationCommit.js.map +1 -1
  123. package/dist/server/lib/ticketFollowUpOperations.js +214 -20
  124. package/dist/server/lib/ticketFollowUpOperations.js.map +1 -1
  125. package/dist/server/lib/ticketOpenQuestions.js +30 -14
  126. package/dist/server/lib/ticketOpenQuestions.js.map +1 -1
  127. package/dist/server/lib/ticketRunOperations.js +75 -7
  128. package/dist/server/lib/ticketRunOperations.js.map +1 -1
  129. package/dist/server/lib/ticketUndo.js +77 -168
  130. package/dist/server/lib/ticketUndo.js.map +1 -1
  131. package/dist/server/lib/ticketWorkflowOperations.js +132 -28
  132. package/dist/server/lib/ticketWorkflowOperations.js.map +1 -1
  133. package/dist/server/lib/tickets.js +46 -29
  134. package/dist/server/lib/tickets.js.map +1 -1
  135. package/dist/server/lib/transcriptRuns.js +3 -3
  136. package/dist/server/lib/transcriptRuns.js.map +1 -1
  137. package/dist/server/lib/turnExecutionErrors.js +12 -0
  138. package/dist/server/lib/turnExecutionErrors.js.map +1 -0
  139. package/dist/server/lib/types.js +57 -1
  140. package/dist/server/lib/types.js.map +1 -1
  141. package/dist/server/workers/build.js +596 -184
  142. package/dist/server/workers/build.js.map +1 -1
  143. package/dist/server/workers/chat.js +261 -130
  144. package/dist/server/workers/chat.js.map +1 -1
  145. package/dist/server/workers/followUp.js +720 -195
  146. package/dist/server/workers/followUp.js.map +1 -1
  147. package/dist/server/workers/plan.js +527 -188
  148. package/dist/server/workers/plan.js.map +1 -1
  149. package/dist/server/workers/planFollowUp.js +231 -69
  150. package/dist/server/workers/planFollowUp.js.map +1 -1
  151. package/dist/server/workers/review.js +796 -239
  152. package/dist/server/workers/review.js.map +1 -1
  153. package/dist/server/workers/specReview.js +211 -45
  154. package/dist/server/workers/specReview.js.map +1 -1
  155. package/dist/server/workers/specSession.js +425 -252
  156. package/dist/server/workers/specSession.js.map +1 -1
  157. package/package.json +1 -1
  158. package/dist/client/assets/GitHubActionsDialog-BrUq-zO1.js +0 -1
  159. package/dist/client/assets/TestsDialog-D9N4GD77.js +0 -4
  160. package/dist/client/assets/TicketChangesModal-bYHJSO6d.js +0 -1
  161. package/dist/client/assets/channel-B4kCvLCt.js +0 -1
  162. package/dist/client/assets/classDiagram-4FO5ZUOK-C-eRRNNj.js +0 -1
  163. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-B3vxoc73.js +0 -1
  164. package/dist/client/assets/index-9q1GXkUw.js +0 -270
  165. package/dist/client/assets/index-BxTc5qQT.css +0 -2
  166. package/dist/client/assets/stateDiagram-v2-BHNVJYJU-BkMKz90T.js +0 -1
@@ -1,61 +1,142 @@
1
1
  import { randomUUID } from 'crypto';
2
2
  import db from '../db.js';
3
+ import { truncateUtf8 } from './transcriptRuns.js';
4
+ export const AGENT_RUN_FAILURE_MESSAGE_LIMIT_BYTES = 16 * 1024;
5
+ const agentRunColumns = `
6
+ id, execution_run_id, parent_type, parent_id, run_index, label, role, agent_status,
7
+ agent_log, streaming_response, response_text, failure_message, session_id,
8
+ completed_at, created_at, updated_at
9
+ `;
3
10
  const createAgentRunStatement = db.prepare(`
4
11
  INSERT INTO agent_runs (
5
- id,
6
- parent_type,
7
- parent_id,
8
- run_index,
9
- label,
10
- role,
11
- agent_status
12
+ id, execution_run_id, parent_type, parent_id, run_index, label, role, agent_status
12
13
  )
13
- VALUES (?, ?, ?, ?, ?, ?, ?)
14
+ VALUES (?, ?, ?, ?, ?, ?, ?, 'running')
14
15
  `);
15
- const updateAgentRunStatusStatement = db.prepare(`
16
+ const updateRunningAgentRunStatement = db.prepare(`
16
17
  UPDATE agent_runs
17
- SET agent_status = ?,
18
- agent_log = ?,
18
+ SET agent_log = ?,
19
19
  streaming_response = ?,
20
20
  updated_at = CURRENT_TIMESTAMP
21
- WHERE id = ?
21
+ WHERE id = ? AND agent_status = 'running' AND completed_at IS NULL
22
22
  `);
23
- const updateAgentRunSessionIdStatement = db.prepare(`
23
+ const terminalizeAgentRunStatement = db.prepare(`
24
24
  UPDATE agent_runs
25
- SET session_id = ?,
25
+ SET agent_status = ?,
26
+ agent_log = COALESCE(?, agent_log),
27
+ response_text = COALESCE(?, response_text, streaming_response),
28
+ streaming_response = NULL,
29
+ failure_message = ?,
30
+ completed_at = CURRENT_TIMESTAMP,
26
31
  updated_at = CURRENT_TIMESTAMP
27
- WHERE id = ?
32
+ WHERE id = ? AND agent_status = 'running' AND completed_at IS NULL
28
33
  `);
29
- const updateAgentRunLabelStatement = db.prepare(`
34
+ const updateAgentRunSessionIdStatement = db.prepare(`
30
35
  UPDATE agent_runs
31
- SET label = ?,
32
- updated_at = CURRENT_TIMESTAMP
36
+ SET session_id = ?, updated_at = CURRENT_TIMESTAMP
33
37
  WHERE id = ?
34
38
  `);
35
- const finalizeAgentRunStatement = db.prepare(`
39
+ const updateAgentRunLabelStatement = db.prepare(`
36
40
  UPDATE agent_runs
37
- SET agent_status = ?,
38
- response_text = ?,
39
- streaming_response = NULL,
40
- updated_at = CURRENT_TIMESTAMP
41
+ SET label = ?, updated_at = CURRENT_TIMESTAMP
41
42
  WHERE id = ?
42
43
  `);
43
44
  const clearAgentRunsForParentStatement = db.prepare(`
44
45
  DELETE FROM agent_runs
45
- WHERE parent_type = ? AND parent_id = ?
46
+ WHERE parent_type = ? AND parent_id = ? AND execution_run_id IS NULL
46
47
  `);
47
48
  const listAgentRunsForParentStatement = db.prepare(`
48
- SELECT id, parent_type, parent_id, run_index, label, role, agent_status,
49
- agent_log, streaming_response, response_text, session_id,
50
- created_at, updated_at
49
+ WITH latest_active_execution AS (
50
+ SELECT run.id
51
+ FROM execution_runs run
52
+ WHERE run.status IN ('queued', 'running', 'waiting')
53
+ AND (
54
+ EXISTS (
55
+ SELECT 1
56
+ FROM agent_runs detail
57
+ WHERE detail.execution_run_id = run.id
58
+ AND detail.parent_type = ?
59
+ AND detail.parent_id = ?
60
+ )
61
+ OR EXISTS (
62
+ SELECT 1
63
+ FROM execution_run_links link
64
+ WHERE link.execution_run_id = run.id
65
+ AND link.relationship = 'primary'
66
+ AND link.entity_type = ?
67
+ AND link.entity_id = ?
68
+ )
69
+ )
70
+ ORDER BY run.created_at DESC, run.id DESC
71
+ LIMIT 1
72
+ )
73
+ SELECT ${agentRunColumns}
51
74
  FROM agent_runs
52
75
  WHERE parent_type = ? AND parent_id = ?
76
+ AND (
77
+ execution_run_id = (SELECT id FROM latest_active_execution)
78
+ OR (
79
+ NOT EXISTS (SELECT 1 FROM latest_active_execution)
80
+ AND execution_run_id IS NULL
81
+ AND agent_status = 'running'
82
+ AND completed_at IS NULL
83
+ )
84
+ )
53
85
  ORDER BY run_index ASC, created_at ASC, id ASC
54
86
  `);
55
- const getNextAgentRunIndexStatement = db.prepare(`
87
+ const listAgentRunsForExecutionRunStatement = db.prepare(`
88
+ SELECT ${agentRunColumns}
89
+ FROM agent_runs
90
+ WHERE execution_run_id = ?
91
+ ORDER BY run_index ASC, created_at ASC, id ASC
92
+ `);
93
+ const getAgentRunStatement = db.prepare(`
94
+ SELECT ${agentRunColumns}
95
+ FROM agent_runs
96
+ WHERE id = ?
97
+ `);
98
+ const getExecutionRunStatement = db.prepare(`
99
+ SELECT
100
+ run.id,
101
+ run.project_id,
102
+ run.kind,
103
+ primary_link.entity_type AS primary_entity_type,
104
+ primary_link.entity_id AS primary_entity_id
105
+ FROM execution_runs run
106
+ LEFT JOIN execution_run_links primary_link
107
+ ON primary_link.execution_run_id = run.id
108
+ AND primary_link.relationship = 'primary'
109
+ WHERE run.id = ?
110
+ `);
111
+ const getNextExecutionRunIndexStatement = db.prepare(`
56
112
  SELECT COALESCE(MAX(run_index), -1) + 1 AS next_index
57
113
  FROM agent_runs
58
- WHERE parent_type = ? AND parent_id = ?
114
+ WHERE execution_run_id = ?
115
+ `);
116
+ const getNextLegacyAgentRunIndexStatement = db.prepare(`
117
+ SELECT COALESCE(MAX(run_index), -1) + 1 AS next_index
118
+ FROM agent_runs
119
+ WHERE execution_run_id IS NULL AND parent_type = ? AND parent_id = ?
120
+ `);
121
+ const terminalizeExecutionRunStatement = db.prepare(`
122
+ UPDATE agent_runs
123
+ SET agent_status = ?,
124
+ response_text = COALESCE(response_text, streaming_response),
125
+ streaming_response = NULL,
126
+ failure_message = ?,
127
+ completed_at = CURRENT_TIMESTAMP,
128
+ updated_at = CURRENT_TIMESTAMP
129
+ WHERE execution_run_id = ? AND agent_status = 'running' AND completed_at IS NULL
130
+ `);
131
+ const terminalizeLegacyAgentRunsStatement = db.prepare(`
132
+ UPDATE agent_runs
133
+ SET agent_status = ?,
134
+ response_text = COALESCE(response_text, streaming_response),
135
+ streaming_response = NULL,
136
+ failure_message = ?,
137
+ completed_at = CURRENT_TIMESTAMP,
138
+ updated_at = CURRENT_TIMESTAMP
139
+ WHERE execution_run_id IS NULL AND agent_status = 'running' AND completed_at IS NULL
59
140
  `);
60
141
  const serializeAgentRun = (row) => {
61
142
  if (!row) {
@@ -63,6 +144,7 @@ const serializeAgentRun = (row) => {
63
144
  }
64
145
  return {
65
146
  id: row.id,
147
+ execution_run_id: row.execution_run_id,
66
148
  parent_type: row.parent_type,
67
149
  parent_id: row.parent_id,
68
150
  run_index: row.run_index,
@@ -72,18 +154,77 @@ const serializeAgentRun = (row) => {
72
154
  agent_log: row.agent_log,
73
155
  streaming_response: row.streaming_response,
74
156
  response_text: row.response_text,
157
+ failure_message: row.failure_message,
75
158
  session_id: row.session_id,
159
+ completed_at: row.completed_at,
76
160
  created_at: row.created_at,
77
161
  updated_at: row.updated_at,
78
162
  };
79
163
  };
80
- export const createAgentRun = ({ parentType, parentId, runIndex, label, role, }) => {
164
+ const getParentProjectId = (parentType, parentId) => {
165
+ if (parentType === 'planning') {
166
+ const row = db.prepare('SELECT id AS project_id FROM projects WHERE id = ?').get(parentId);
167
+ return row?.project_id ?? null;
168
+ }
169
+ const table = parentType === 'ticket'
170
+ ? 'tickets'
171
+ : parentType === 'chat'
172
+ ? 'chat_sessions'
173
+ : 'spec_sessions';
174
+ const row = db.prepare(`SELECT project_id FROM ${table} WHERE id = ?`).get(parentId);
175
+ return row?.project_id ?? null;
176
+ };
177
+ const getNextIndex = (statement, ...params) => {
178
+ const row = statement.get(...params);
179
+ return Number(row?.next_index ?? 0);
180
+ };
181
+ const createExecutionOwnedAgentRun = db.transaction((input) => {
182
+ const executionRun = getExecutionRunStatement.get(input.executionRunId);
183
+ if (!executionRun) {
184
+ throw new Error(`Execution run ${input.executionRunId} does not exist`);
185
+ }
186
+ const parentProjectId = getParentProjectId(input.parentType, input.parentId);
187
+ if (!parentProjectId) {
188
+ throw new Error(`${input.parentType} ${input.parentId} does not belong to a project`);
189
+ }
190
+ if (parentProjectId !== executionRun.project_id) {
191
+ throw new Error(`${input.parentType} ${input.parentId} does not belong to execution run project ${executionRun.project_id}`);
192
+ }
193
+ const expectedPrimaryEntityType = input.parentType === 'planning'
194
+ ? 'project'
195
+ : input.parentType === 'ticket'
196
+ ? 'ticket'
197
+ : input.parentType === 'chat'
198
+ ? 'chat_session'
199
+ : 'spec_session';
200
+ if (executionRun.primary_entity_type !== expectedPrimaryEntityType
201
+ || executionRun.primary_entity_id !== input.parentId) {
202
+ throw new Error(`${input.parentType} ${input.parentId} does not match execution run ${input.executionRunId} primary parent`);
203
+ }
81
204
  const id = randomUUID();
82
- createAgentRunStatement.run(id, parentType, parentId, runIndex, label, role, 'running');
205
+ const runIndex = getNextIndex(getNextExecutionRunIndexStatement, input.executionRunId);
206
+ createAgentRunStatement.run(id, input.executionRunId, input.parentType, input.parentId, runIndex, input.label, input.role);
207
+ return id;
208
+ });
209
+ export const createAgentRun = (input) => {
210
+ if (input.executionRunId) {
211
+ return createExecutionOwnedAgentRun({ ...input, executionRunId: input.executionRunId });
212
+ }
213
+ if (input.runIndex === undefined) {
214
+ throw new Error('Legacy agent runs require a run index');
215
+ }
216
+ const id = randomUUID();
217
+ createAgentRunStatement.run(id, null, input.parentType, input.parentId, input.runIndex, input.label, input.role);
83
218
  return id;
84
219
  };
85
220
  export const updateAgentRunStatus = (runId, status, log, streamingResponse) => {
86
- updateAgentRunStatusStatement.run(status, log ?? null, streamingResponse ?? null, runId);
221
+ const boundedLog = truncateUtf8(log).text;
222
+ const boundedResponse = truncateUtf8(streamingResponse).text;
223
+ if (status === 'running') {
224
+ updateRunningAgentRunStatement.run(boundedLog, boundedResponse, runId);
225
+ return;
226
+ }
227
+ terminalizeAgentRunStatement.run(status, boundedLog, boundedResponse, null, runId);
87
228
  };
88
229
  export const updateAgentRunSessionId = (runId, sessionId) => {
89
230
  updateAgentRunSessionIdStatement.run(sessionId, runId);
@@ -91,21 +232,47 @@ export const updateAgentRunSessionId = (runId, sessionId) => {
91
232
  export const updateAgentRunLabel = (runId, label) => {
92
233
  updateAgentRunLabelStatement.run(label, runId);
93
234
  };
94
- export const finalizeAgentRun = (runId, status, responseText) => {
95
- finalizeAgentRunStatement.run(status, responseText ?? null, runId);
235
+ export const finalizeAgentRun = (runId, status, responseText, failureMessage = null) => {
236
+ if (status === 'running') {
237
+ throw new Error('Final agent run status must be terminal');
238
+ }
239
+ terminalizeAgentRunStatement.run(status, null, truncateUtf8(responseText).text, truncateUtf8(failureMessage, AGENT_RUN_FAILURE_MESSAGE_LIMIT_BYTES).text, runId);
240
+ };
241
+ export const terminalizeAgentRunsForExecutionRun = (executionRunId, status, failureMessage = null) => {
242
+ return terminalizeExecutionRunStatement.run(status, truncateUtf8(failureMessage, AGENT_RUN_FAILURE_MESSAGE_LIMIT_BYTES).text, executionRunId).changes;
243
+ };
244
+ export const terminalizeLegacyAgentRuns = (status = 'error', failureMessage = null) => {
245
+ return terminalizeLegacyAgentRunsStatement.run(status, truncateUtf8(failureMessage, AGENT_RUN_FAILURE_MESSAGE_LIMIT_BYTES).text).changes;
96
246
  };
97
247
  export const clearAgentRunsForParent = (parentType, parentId) => {
98
248
  clearAgentRunsForParentStatement.run(parentType, parentId);
99
249
  };
100
250
  export const listAgentRunsForParent = (parentType, parentId) => {
101
- return listAgentRunsForParentStatement.all(parentType, parentId)
251
+ const primaryEntityType = parentType === 'planning'
252
+ ? 'project'
253
+ : parentType === 'ticket'
254
+ ? 'ticket'
255
+ : parentType === 'chat'
256
+ ? 'chat_session'
257
+ : 'spec_session';
258
+ return listAgentRunsForParentStatement.all(parentType, parentId, primaryEntityType, parentId, parentType, parentId)
102
259
  .map(row => serializeAgentRun(row))
103
260
  .filter((row) => row !== null);
104
261
  };
105
- export const getNextAgentRunIndex = (parentType, parentId) => {
106
- const row = getNextAgentRunIndexStatement.get(parentType, parentId);
107
- return Number(row?.next_index ?? 0);
262
+ export const listAgentRunsForExecutionRun = (executionRunId) => {
263
+ return listAgentRunsForExecutionRunStatement.all(executionRunId)
264
+ .map(row => serializeAgentRun(row))
265
+ .filter((row) => row !== null);
266
+ };
267
+ export const getAgentRun = (runId) => {
268
+ return serializeAgentRun(getAgentRunStatement.get(runId));
108
269
  };
270
+ export function getNextAgentRunIndex(executionRunIdOrParentType, parentId) {
271
+ if (parentId === undefined) {
272
+ return getNextIndex(getNextExecutionRunIndexStatement, executionRunIdOrParentType);
273
+ }
274
+ return getNextIndex(getNextLegacyAgentRunIndexStatement, executionRunIdOrParentType, parentId);
275
+ }
109
276
  export const emitAgentRunsUpdated = (io, parentType, parentId) => {
110
277
  const runs = listAgentRunsForParent(parentType, parentId);
111
278
  io.emit('agent-runs:updated', { parentType, parentId, runs });
@@ -1 +1 @@
1
- {"version":3,"file":"agentRuns.js","sourceRoot":"","sources":["../../../server/lib/agentRuns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACnC,OAAO,EAAE,MAAM,UAAU,CAAA;AAmBzB,MAAM,uBAAuB,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;;;;;CAW1C,CAAC,CAAA;AAEF,MAAM,6BAA6B,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;CAOhD,CAAC,CAAA;AAEF,MAAM,gCAAgC,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;CAKnD,CAAC,CAAA;AAEF,MAAM,4BAA4B,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;CAK/C,CAAC,CAAA;AAEF,MAAM,yBAAyB,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;CAO5C,CAAC,CAAA;AAEF,MAAM,gCAAgC,GAAG,EAAE,CAAC,OAAO,CAAC;;;CAGnD,CAAC,CAAA;AAEF,MAAM,+BAA+B,GAAG,EAAE,CAAC,OAAO,CAAC;;;;;;;CAOlD,CAAC,CAAA;AAEF,MAAM,6BAA6B,GAAG,EAAE,CAAC,OAAO,CAAC;;;;CAIhD,CAAC,CAAA;AAEF,MAAM,iBAAiB,GAAG,CAAC,GAA4B,EAAmB,EAAE;IAC1E,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,YAAY,EAAE,GAAG,CAAC,YAAY;QAC9B,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,kBAAkB,EAAE,GAAG,CAAC,kBAAkB;QAC1C,aAAa,EAAE,GAAG,CAAC,aAAa;QAChC,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,UAAU,EAAE,GAAG,CAAC,UAAU;KAC3B,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAC7B,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,IAAI,GAOL,EAAU,EAAE;IACX,MAAM,EAAE,GAAG,UAAU,EAAE,CAAA;IACvB,uBAAuB,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,CAAA;IACvF,OAAO,EAAE,CAAA;AACX,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,KAAa,EACb,MAAsB,EACtB,GAAkB,EAClB,iBAAgC,EAChC,EAAE;IACF,6BAA6B,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,iBAAiB,IAAI,IAAI,EAAE,KAAK,CAAC,CAAA;AAC1F,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,KAAa,EAAE,SAAiB,EAAE,EAAE;IAC1E,gCAAgC,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;AACxD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAa,EAAE,KAAa,EAAE,EAAE;IAClE,4BAA4B,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;AAChD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,KAAa,EACb,MAAsB,EACtB,YAA2B,EAC3B,EAAE;IACF,yBAAyB,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,IAAI,IAAI,EAAE,KAAK,CAAC,CAAA;AACpE,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,UAA8B,EAAE,QAAgB,EAAE,EAAE;IAC1F,gCAAgC,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;AAC5D,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,UAA8B,EAAE,QAAgB,EAAc,EAAE;IACrG,OAAQ,+BAA+B,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAmB;SAChF,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;SAClC,MAAM,CAAC,CAAC,GAAG,EAAmB,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,CAAA;AACnD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,UAA8B,EAAE,QAAgB,EAAU,EAAE;IAC/F,MAAM,GAAG,GAAG,6BAA6B,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAwD,CAAA;IAC1H,OAAO,MAAM,CAAC,GAAG,EAAE,UAAU,IAAI,CAAC,CAAC,CAAA;AACrC,CAAC,CAAA;AAMD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,EAAoB,EACpB,UAA8B,EAC9B,QAAgB,EAChB,EAAE;IACF,MAAM,IAAI,GAAG,sBAAsB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;IACzD,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;AAC/D,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAC5C,EAAoB,EACpB,UAA8B,EAC9B,QAAgB,EAChB,EAAE;IACF,uBAAuB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;IAC7C,oBAAoB,CAAC,EAAE,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAA;AAChD,CAAC,CAAA"}
1
+ {"version":3,"file":"agentRuns.js","sourceRoot":"","sources":["../../../server/lib/agentRuns.ts"],"names":[],"mappings":"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"}