@goondocks/myco 0.12.9 → 0.13.0

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 (182) hide show
  1. package/README.md +6 -0
  2. package/dist/{agent-run-E3P3WWPD.js → agent-run-YBASQHC7.js} +8 -7
  3. package/dist/{agent-run-E3P3WWPD.js.map → agent-run-YBASQHC7.js.map} +1 -1
  4. package/dist/{agent-tasks-GWII2I4E.js → agent-tasks-WBQFDHWC.js} +8 -7
  5. package/dist/{agent-tasks-GWII2I4E.js.map → agent-tasks-WBQFDHWC.js.map} +1 -1
  6. package/dist/{chunk-LGPBVBFY.js → chunk-2PWO3WPS.js} +5 -7
  7. package/dist/chunk-2PWO3WPS.js.map +1 -0
  8. package/dist/{chunk-TCGOSLW6.js → chunk-5BK6M6X5.js} +503 -53
  9. package/dist/chunk-5BK6M6X5.js.map +1 -0
  10. package/dist/{chunk-QL2RBFIC.js → chunk-5YQ6VOFZ.js} +2 -2
  11. package/dist/{chunk-D4M2AV65.js → chunk-DTE3SHYK.js} +46 -3
  12. package/dist/chunk-DTE3SHYK.js.map +1 -0
  13. package/dist/{chunk-U7JRFBJO.js → chunk-EUQQVKGQ.js} +2 -2
  14. package/dist/{chunk-YRUJ5KGV.js → chunk-GDCSPMH4.js} +3 -3
  15. package/dist/{chunk-LUQBT2Y4.js → chunk-HHZ3RTEI.js} +2 -2
  16. package/dist/{chunk-JROOQQH6.js → chunk-JBFFAGJK.js} +12 -7
  17. package/dist/chunk-JBFFAGJK.js.map +1 -0
  18. package/dist/{chunk-D4ESHOOJ.js → chunk-KNTJOMWY.js} +3 -3
  19. package/dist/{chunk-JHLALJPB.js → chunk-LD6U3L6O.js} +8 -8
  20. package/dist/{chunk-Q2AYS2QE.js → chunk-LPISXFM4.js} +5 -7
  21. package/dist/chunk-LPISXFM4.js.map +1 -0
  22. package/dist/{chunk-PW5QVY44.js → chunk-NCVR636M.js} +318 -4
  23. package/dist/chunk-NCVR636M.js.map +1 -0
  24. package/dist/{chunk-4VSNNMEU.js → chunk-NRT2ZRUG.js} +8 -3
  25. package/dist/{chunk-4VSNNMEU.js.map → chunk-NRT2ZRUG.js.map} +1 -1
  26. package/dist/{chunk-7NBDELZB.js → chunk-NVCGF2DS.js} +26 -8
  27. package/dist/{chunk-7NBDELZB.js.map → chunk-NVCGF2DS.js.map} +1 -1
  28. package/dist/{chunk-SW62AX75.js → chunk-OKCSSDFC.js} +2 -2
  29. package/dist/{chunk-RR75ZKEV.js → chunk-OQVKLTQY.js} +4 -4
  30. package/dist/{chunk-J3L2RTYK.js → chunk-RBFECYNA.js} +2 -2
  31. package/dist/{chunk-M5XWW7UI.js → chunk-SODRR3HE.js} +8 -1
  32. package/dist/chunk-SODRR3HE.js.map +1 -0
  33. package/dist/{chunk-WOT2WJ4U.js → chunk-T77674VB.js} +4 -4
  34. package/dist/chunk-TFGGH6UB.js +112 -0
  35. package/dist/chunk-TFGGH6UB.js.map +1 -0
  36. package/dist/{chunk-UGUJJ7QP.js → chunk-TNCBMGWB.js} +39 -104
  37. package/dist/chunk-TNCBMGWB.js.map +1 -0
  38. package/dist/{chunk-PIRWYDOH.js → chunk-TRA3R4EC.js} +7 -1
  39. package/dist/chunk-TRA3R4EC.js.map +1 -0
  40. package/dist/{chunk-WDLBFMGG.js → chunk-VQEXXS56.js} +22 -5
  41. package/dist/chunk-VQEXXS56.js.map +1 -0
  42. package/dist/{chunk-OAGY5APE.js → chunk-W3T3QDBN.js} +68 -7
  43. package/dist/chunk-W3T3QDBN.js.map +1 -0
  44. package/dist/{chunk-UULW753C.js → chunk-YYQWCTF6.js} +3 -3
  45. package/dist/{cli-3IMEH4B3.js → cli-WCBTILMW.js} +41 -40
  46. package/dist/{cli-3IMEH4B3.js.map → cli-WCBTILMW.js.map} +1 -1
  47. package/dist/{client-573ALWTB.js → client-MJUZJ5MC.js} +5 -5
  48. package/dist/{config-6RQ7FAEV.js → config-WBCOTJUE.js} +5 -3
  49. package/dist/{config-6RQ7FAEV.js.map → config-WBCOTJUE.js.map} +1 -1
  50. package/dist/{detect-providers-JFE3QLJI.js → detect-providers-PAVE2X6O.js} +4 -4
  51. package/dist/{doctor-JF4FL5GC.js → doctor-GDCLRJOF.js} +13 -11
  52. package/dist/{doctor-JF4FL5GC.js.map → doctor-GDCLRJOF.js.map} +1 -1
  53. package/dist/{executor-AEMKLSPL.js → executor-TCAXFOIS.js} +374 -39
  54. package/dist/executor-TCAXFOIS.js.map +1 -0
  55. package/dist/{init-QJECXRAK.js → init-ZSDMXY4T.js} +16 -15
  56. package/dist/{init-QJECXRAK.js.map → init-ZSDMXY4T.js.map} +1 -1
  57. package/dist/{init-wizard-XVMYHYKS.js → init-wizard-6LDUVR7C.js} +12 -12
  58. package/dist/installer-25TSX4SR.js +13 -0
  59. package/dist/{llm-O46QYWEM.js → llm-T3QVHC3Y.js} +7 -7
  60. package/dist/{loader-4FMGOVWF.js → loader-L2TCAYCT.js} +4 -2
  61. package/dist/{loader-BQ4X4K3F.js → loader-WQKVWL5D.js} +4 -4
  62. package/dist/{main-J572ROIU.js → main-25MKYYKO.js} +452 -103
  63. package/dist/main-25MKYYKO.js.map +1 -0
  64. package/dist/{open-QUZWM6K7.js → open-4YTUNIP3.js} +8 -7
  65. package/dist/{open-QUZWM6K7.js.map → open-4YTUNIP3.js.map} +1 -1
  66. package/dist/{openai-embeddings-HWAKOGUM.js → openai-embeddings-5T5ZP7LO.js} +4 -4
  67. package/dist/{openrouter-GXZK7JXR.js → openrouter-RD2COFC7.js} +4 -4
  68. package/dist/{post-compact-W2ODRZPJ.js → post-compact-E5V4OZJB.js} +7 -7
  69. package/dist/{post-tool-use-3XH3VOB4.js → post-tool-use-Y6UWKCVD.js} +7 -7
  70. package/dist/{post-tool-use-failure-Z53CLPHH.js → post-tool-use-failure-AHFXMNHX.js} +7 -7
  71. package/dist/{pre-compact-G4ISWQVV.js → pre-compact-EI5EV3N7.js} +7 -7
  72. package/dist/{provider-check-CKZW3GQX.js → provider-check-QN7OGXZA.js} +4 -4
  73. package/dist/{registry-ZHUVXGPO.js → registry-2XQMCPA6.js} +5 -5
  74. package/dist/{remove-5AX5LPGC.js → remove-F63WBELE.js} +10 -8
  75. package/dist/{remove-5AX5LPGC.js.map → remove-F63WBELE.js.map} +1 -1
  76. package/dist/{resolution-events-WZHPQQMN.js → resolution-events-BZYMUQ53.js} +4 -4
  77. package/dist/{restart-5IAA7RBM.js → restart-GULUNCMX.js} +9 -8
  78. package/dist/{restart-5IAA7RBM.js.map → restart-GULUNCMX.js.map} +1 -1
  79. package/dist/{search-3S4PPUTG.js → search-NLZMCEAG.js} +9 -8
  80. package/dist/{search-3S4PPUTG.js.map → search-NLZMCEAG.js.map} +1 -1
  81. package/dist/{server-X6LBFCBV.js → server-CXPWUO6H.js} +115 -14
  82. package/dist/server-CXPWUO6H.js.map +1 -0
  83. package/dist/{session-T4Y5AIHM.js → session-XXVEDIQZ.js} +10 -9
  84. package/dist/{session-T4Y5AIHM.js.map → session-XXVEDIQZ.js.map} +1 -1
  85. package/dist/{session-end-FMQ4JJU7.js → session-end-6DP6VTZV.js} +6 -6
  86. package/dist/{session-start-KV2WR6UI.js → session-start-QNAQDF5M.js} +12 -12
  87. package/dist/{setup-llm-YVI7ZSVN.js → setup-llm-ER3B7AZ2.js} +10 -9
  88. package/dist/{setup-llm-YVI7ZSVN.js.map → setup-llm-ER3B7AZ2.js.map} +1 -1
  89. package/dist/src/agent/definitions/agent.yaml +2 -0
  90. package/dist/src/agent/definitions/tasks/digest-only.yaml +1 -0
  91. package/dist/src/agent/definitions/tasks/extract-only.yaml +1 -0
  92. package/dist/src/agent/definitions/tasks/full-intelligence.yaml +8 -0
  93. package/dist/src/agent/definitions/tasks/graph-maintenance.yaml +1 -0
  94. package/dist/src/agent/definitions/tasks/review-session.yaml +1 -0
  95. package/dist/src/agent/definitions/tasks/skill-evolve.yaml +155 -0
  96. package/dist/src/agent/definitions/tasks/skill-generate.yaml +210 -0
  97. package/dist/src/agent/definitions/tasks/skill-survey.yaml +149 -0
  98. package/dist/src/agent/definitions/tasks/supersession-sweep.yaml +1 -0
  99. package/dist/src/agent/definitions/tasks/title-summary.yaml +1 -0
  100. package/dist/src/agent/prompts/agent.md +29 -0
  101. package/dist/src/cli.js +1 -1
  102. package/dist/src/daemon/main.js +1 -1
  103. package/dist/src/hooks/post-tool-use.js +1 -1
  104. package/dist/src/hooks/session-end.js +1 -1
  105. package/dist/src/hooks/session-start.js +1 -1
  106. package/dist/src/hooks/stop.js +1 -1
  107. package/dist/src/hooks/user-prompt-submit.js +1 -1
  108. package/dist/src/mcp/server.js +1 -1
  109. package/dist/src/worker/src/index.ts +3 -0
  110. package/dist/src/worker/src/schema.ts +56 -0
  111. package/dist/{stats-EFF4XRAO.js → stats-VQ7XMOCU.js} +10 -9
  112. package/dist/{stats-EFF4XRAO.js.map → stats-VQ7XMOCU.js.map} +1 -1
  113. package/dist/{stop-SIQJWOPU.js → stop-VTO2KIRG.js} +6 -6
  114. package/dist/{stop-failure-EHYMRRER.js → stop-failure-C5T6LJQR.js} +7 -7
  115. package/dist/{subagent-start-AMS3YX5E.js → subagent-start-NZF42NKF.js} +7 -7
  116. package/dist/{subagent-stop-KVQ52RFD.js → subagent-stop-UV5ECFVU.js} +7 -7
  117. package/dist/{task-completed-JFQK3X4Z.js → task-completed-3SV6TL3V.js} +7 -7
  118. package/dist/{team-VU5MGPGG.js → team-XSJXLBZX.js} +51 -25
  119. package/dist/team-XSJXLBZX.js.map +1 -0
  120. package/dist/ui/assets/index-BeygBZGu.css +1 -0
  121. package/dist/ui/assets/index-CbGC0T_o.js +822 -0
  122. package/dist/ui/index.html +2 -2
  123. package/dist/{update-BO3DEE7S.js → update-5GXOQIY5.js} +8 -7
  124. package/dist/{update-BO3DEE7S.js.map → update-5GXOQIY5.js.map} +1 -1
  125. package/dist/{user-prompt-submit-EZMRI7SR.js → user-prompt-submit-VLQG77A6.js} +6 -6
  126. package/dist/{verify-MQAANTUR.js → verify-WF7U3NQW.js} +8 -8
  127. package/dist/{version-IEMGX4RA.js → version-RGX7TZ7V.js} +2 -2
  128. package/dist/version-RGX7TZ7V.js.map +1 -0
  129. package/package.json +6 -6
  130. package/dist/chunk-D4M2AV65.js.map +0 -1
  131. package/dist/chunk-JROOQQH6.js.map +0 -1
  132. package/dist/chunk-LGPBVBFY.js.map +0 -1
  133. package/dist/chunk-M5XWW7UI.js.map +0 -1
  134. package/dist/chunk-OAGY5APE.js.map +0 -1
  135. package/dist/chunk-PIRWYDOH.js.map +0 -1
  136. package/dist/chunk-PW5QVY44.js.map +0 -1
  137. package/dist/chunk-Q2AYS2QE.js.map +0 -1
  138. package/dist/chunk-TCGOSLW6.js.map +0 -1
  139. package/dist/chunk-UGUJJ7QP.js.map +0 -1
  140. package/dist/chunk-WDLBFMGG.js.map +0 -1
  141. package/dist/executor-AEMKLSPL.js.map +0 -1
  142. package/dist/main-J572ROIU.js.map +0 -1
  143. package/dist/server-X6LBFCBV.js.map +0 -1
  144. package/dist/team-VU5MGPGG.js.map +0 -1
  145. package/dist/ui/assets/index-BGbil7f1.css +0 -1
  146. package/dist/ui/assets/index-ZSGlKT25.js +0 -804
  147. /package/dist/{chunk-QL2RBFIC.js.map → chunk-5YQ6VOFZ.js.map} +0 -0
  148. /package/dist/{chunk-U7JRFBJO.js.map → chunk-EUQQVKGQ.js.map} +0 -0
  149. /package/dist/{chunk-YRUJ5KGV.js.map → chunk-GDCSPMH4.js.map} +0 -0
  150. /package/dist/{chunk-LUQBT2Y4.js.map → chunk-HHZ3RTEI.js.map} +0 -0
  151. /package/dist/{chunk-D4ESHOOJ.js.map → chunk-KNTJOMWY.js.map} +0 -0
  152. /package/dist/{chunk-JHLALJPB.js.map → chunk-LD6U3L6O.js.map} +0 -0
  153. /package/dist/{chunk-SW62AX75.js.map → chunk-OKCSSDFC.js.map} +0 -0
  154. /package/dist/{chunk-RR75ZKEV.js.map → chunk-OQVKLTQY.js.map} +0 -0
  155. /package/dist/{chunk-J3L2RTYK.js.map → chunk-RBFECYNA.js.map} +0 -0
  156. /package/dist/{chunk-WOT2WJ4U.js.map → chunk-T77674VB.js.map} +0 -0
  157. /package/dist/{chunk-UULW753C.js.map → chunk-YYQWCTF6.js.map} +0 -0
  158. /package/dist/{client-573ALWTB.js.map → client-MJUZJ5MC.js.map} +0 -0
  159. /package/dist/{detect-providers-JFE3QLJI.js.map → detect-providers-PAVE2X6O.js.map} +0 -0
  160. /package/dist/{init-wizard-XVMYHYKS.js.map → init-wizard-6LDUVR7C.js.map} +0 -0
  161. /package/dist/{llm-O46QYWEM.js.map → installer-25TSX4SR.js.map} +0 -0
  162. /package/dist/{loader-4FMGOVWF.js.map → llm-T3QVHC3Y.js.map} +0 -0
  163. /package/dist/{loader-BQ4X4K3F.js.map → loader-L2TCAYCT.js.map} +0 -0
  164. /package/dist/{openai-embeddings-HWAKOGUM.js.map → loader-WQKVWL5D.js.map} +0 -0
  165. /package/dist/{openrouter-GXZK7JXR.js.map → openai-embeddings-5T5ZP7LO.js.map} +0 -0
  166. /package/dist/{provider-check-CKZW3GQX.js.map → openrouter-RD2COFC7.js.map} +0 -0
  167. /package/dist/{post-compact-W2ODRZPJ.js.map → post-compact-E5V4OZJB.js.map} +0 -0
  168. /package/dist/{post-tool-use-3XH3VOB4.js.map → post-tool-use-Y6UWKCVD.js.map} +0 -0
  169. /package/dist/{post-tool-use-failure-Z53CLPHH.js.map → post-tool-use-failure-AHFXMNHX.js.map} +0 -0
  170. /package/dist/{pre-compact-G4ISWQVV.js.map → pre-compact-EI5EV3N7.js.map} +0 -0
  171. /package/dist/{registry-ZHUVXGPO.js.map → provider-check-QN7OGXZA.js.map} +0 -0
  172. /package/dist/{resolution-events-WZHPQQMN.js.map → registry-2XQMCPA6.js.map} +0 -0
  173. /package/dist/{version-IEMGX4RA.js.map → resolution-events-BZYMUQ53.js.map} +0 -0
  174. /package/dist/{session-end-FMQ4JJU7.js.map → session-end-6DP6VTZV.js.map} +0 -0
  175. /package/dist/{session-start-KV2WR6UI.js.map → session-start-QNAQDF5M.js.map} +0 -0
  176. /package/dist/{stop-SIQJWOPU.js.map → stop-VTO2KIRG.js.map} +0 -0
  177. /package/dist/{stop-failure-EHYMRRER.js.map → stop-failure-C5T6LJQR.js.map} +0 -0
  178. /package/dist/{subagent-start-AMS3YX5E.js.map → subagent-start-NZF42NKF.js.map} +0 -0
  179. /package/dist/{subagent-stop-KVQ52RFD.js.map → subagent-stop-UV5ECFVU.js.map} +0 -0
  180. /package/dist/{task-completed-JFQK3X4Z.js.map → task-completed-3SV6TL3V.js.map} +0 -0
  181. /package/dist/{user-prompt-submit-EZMRI7SR.js.map → user-prompt-submit-VLQG77A6.js.map} +0 -0
  182. /package/dist/{verify-MQAANTUR.js.map → verify-WF7U3NQW.js.map} +0 -0
@@ -1,12 +1,13 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
  import {
3
+ getTeamMachineId,
3
4
  syncRow
4
- } from "./chunk-4VSNNMEU.js";
5
+ } from "./chunk-NRT2ZRUG.js";
5
6
  import {
6
7
  getDatabase
7
8
  } from "./chunk-MYX5NCRH.js";
8
9
  import {
9
- DEFAULT_MACHINE_ID,
10
+ DEFAULT_LIST_LIMIT,
10
11
  DIGEST_TIERS,
11
12
  EDGE_TYPE_DERIVED_FROM,
12
13
  EDGE_TYPE_EXTRACTED_FROM,
@@ -14,7 +15,7 @@ import {
14
15
  EDGE_TYPE_HAS_BATCH,
15
16
  GRAPH_EDGE_DEFAULT_CONFIDENCE,
16
17
  QUERY_DEFAULT_LIST_LIMIT
17
- } from "./chunk-PIRWYDOH.js";
18
+ } from "./chunk-TRA3R4EC.js";
18
19
 
19
20
  // src/db/queries/batches.ts
20
21
  var DEFAULT_UNPROCESSED_LIMIT = 100;
@@ -58,7 +59,7 @@ function toBatchRow(row) {
58
59
  processed: row.processed,
59
60
  content_hash: row.content_hash ?? null,
60
61
  created_at: row.created_at,
61
- machine_id: row.machine_id ?? DEFAULT_MACHINE_ID,
62
+ machine_id: row.machine_id ?? "local",
62
63
  synced_at: row.synced_at ?? null
63
64
  };
64
65
  }
@@ -154,13 +155,9 @@ function insertBatchStateless(data) {
154
155
  DEFAULT_ACTIVITY_COUNT,
155
156
  DEFAULT_PROCESSED,
156
157
  data.created_at,
157
- DEFAULT_MACHINE_ID
158
+ data.machine_id ?? getTeamMachineId()
158
159
  );
159
160
  const batchId = Number(info.lastInsertRowid);
160
- const userPrompt = data.user_prompt ?? null;
161
- if (userPrompt) {
162
- db.prepare("INSERT INTO prompt_batches_fts(rowid, user_prompt) VALUES (?, ?)").run(batchId, userPrompt);
163
- }
164
161
  return toBatchRow(
165
162
  db.prepare(`SELECT ${SELECT_COLUMNS} FROM prompt_batches WHERE id = ?`).get(batchId)
166
163
  );
@@ -204,6 +201,13 @@ function listBatchesBySession(sessionId, options = {}) {
204
201
  ).all(sessionId, limit, offset);
205
202
  return rows.map(toBatchRow);
206
203
  }
204
+ function countBatchesBySession(sessionId) {
205
+ const db = getDatabase();
206
+ const row = db.prepare(
207
+ `SELECT COUNT(*) as count FROM prompt_batches WHERE session_id = ?`
208
+ ).get(sessionId);
209
+ return row.count;
210
+ }
207
211
 
208
212
  // src/utils/error-message.ts
209
213
  function errorMessage(err) {
@@ -216,6 +220,356 @@ function errorMessage(err) {
216
220
  }
217
221
  }
218
222
 
223
+ // src/db/queries/skill-candidates.ts
224
+ var DEFAULT_CONFIDENCE = 0;
225
+ var DEFAULT_STATUS2 = "identified";
226
+ var CANDIDATE_COLUMNS = [
227
+ "id",
228
+ "agent_id",
229
+ "machine_id",
230
+ "topic",
231
+ "rationale",
232
+ "confidence",
233
+ "status",
234
+ "source_ids",
235
+ "skill_id",
236
+ "created_at",
237
+ "updated_at",
238
+ "synced_at"
239
+ ];
240
+ var SELECT_COLUMNS2 = CANDIDATE_COLUMNS.join(", ");
241
+ function toCandidateRow(row) {
242
+ return {
243
+ id: row.id,
244
+ agent_id: row.agent_id,
245
+ machine_id: row.machine_id ?? getTeamMachineId(),
246
+ topic: row.topic,
247
+ rationale: row.rationale,
248
+ confidence: row.confidence,
249
+ status: row.status,
250
+ source_ids: row.source_ids ?? "[]",
251
+ skill_id: row.skill_id ?? null,
252
+ created_at: row.created_at,
253
+ updated_at: row.updated_at,
254
+ synced_at: row.synced_at ?? null
255
+ };
256
+ }
257
+ function buildWhere(options) {
258
+ const conditions = [];
259
+ const params = [];
260
+ if (options.agent_id !== void 0) {
261
+ conditions.push(`agent_id = ?`);
262
+ params.push(options.agent_id);
263
+ }
264
+ if (options.status !== void 0) {
265
+ conditions.push(`status = ?`);
266
+ params.push(options.status);
267
+ }
268
+ return {
269
+ where: conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "",
270
+ params
271
+ };
272
+ }
273
+ function insertCandidate(data) {
274
+ const db = getDatabase();
275
+ db.prepare(
276
+ `INSERT INTO skill_candidates (
277
+ id, agent_id, machine_id, topic, rationale,
278
+ confidence, status, source_ids, skill_id,
279
+ created_at, updated_at
280
+ ) VALUES (
281
+ ?, ?, ?, ?, ?,
282
+ ?, ?, ?, ?,
283
+ ?, ?
284
+ )`
285
+ ).run(
286
+ data.id,
287
+ data.agent_id,
288
+ data.machine_id ?? getTeamMachineId(),
289
+ data.topic,
290
+ data.rationale,
291
+ data.confidence ?? DEFAULT_CONFIDENCE,
292
+ data.status ?? DEFAULT_STATUS2,
293
+ data.source_ids ?? "[]",
294
+ data.skill_id ?? null,
295
+ data.created_at,
296
+ data.updated_at
297
+ );
298
+ const raw = db.prepare(`SELECT ${SELECT_COLUMNS2} FROM skill_candidates WHERE id = ?`).get(data.id);
299
+ if (!raw) throw new Error(`Failed to insert skill candidate: ${data.id}`);
300
+ const row = toCandidateRow(raw);
301
+ syncRow("skill_candidates", row);
302
+ return row;
303
+ }
304
+ function getCandidate(id) {
305
+ const db = getDatabase();
306
+ const row = db.prepare(
307
+ `SELECT ${SELECT_COLUMNS2} FROM skill_candidates WHERE id = ?`
308
+ ).get(id);
309
+ if (!row) return null;
310
+ return toCandidateRow(row);
311
+ }
312
+ function listCandidates(options = {}) {
313
+ const db = getDatabase();
314
+ const { where, params } = buildWhere(options);
315
+ const limit = options.limit ?? DEFAULT_LIST_LIMIT;
316
+ const offset = options.offset ?? 0;
317
+ const rows = db.prepare(
318
+ `SELECT ${SELECT_COLUMNS2}
319
+ FROM skill_candidates
320
+ ${where}
321
+ ORDER BY confidence DESC, created_at DESC
322
+ LIMIT ?
323
+ OFFSET ?`
324
+ ).all(...params, limit, offset);
325
+ return rows.map(toCandidateRow);
326
+ }
327
+ function updateCandidate(id, updates) {
328
+ const db = getDatabase();
329
+ const setClauses = [];
330
+ const params = [];
331
+ const fieldMap = {
332
+ topic: "topic",
333
+ rationale: "rationale",
334
+ confidence: "confidence",
335
+ status: "status",
336
+ source_ids: "source_ids",
337
+ skill_id: "skill_id",
338
+ updated_at: "updated_at"
339
+ };
340
+ for (const [key, column] of Object.entries(fieldMap)) {
341
+ if (key in updates) {
342
+ setClauses.push(`${column} = ?`);
343
+ params.push(updates[key] ?? null);
344
+ }
345
+ }
346
+ if (setClauses.length === 0) return getCandidate(id);
347
+ params.push(id);
348
+ db.prepare(
349
+ `UPDATE skill_candidates
350
+ SET ${setClauses.join(", ")}
351
+ WHERE id = ?`
352
+ ).run(...params);
353
+ const updated = getCandidate(id);
354
+ if (updated) syncRow("skill_candidates", updated);
355
+ return updated;
356
+ }
357
+ function listCandidatesWithCount(options = {}) {
358
+ const items = listCandidates(options);
359
+ const total = countCandidates(options);
360
+ return { items, total };
361
+ }
362
+ function countCandidates(options = {}) {
363
+ const db = getDatabase();
364
+ const { where, params } = buildWhere(options);
365
+ const row = db.prepare(
366
+ `SELECT COUNT(*) as count FROM skill_candidates ${where}`
367
+ ).get(...params);
368
+ return row.count;
369
+ }
370
+ function deleteCandidate(id) {
371
+ const db = getDatabase();
372
+ const info = db.prepare("DELETE FROM skill_candidates WHERE id = ?").run(id);
373
+ return info.changes > 0;
374
+ }
375
+
376
+ // src/db/queries/skill-records.ts
377
+ var DEFAULT_STATUS3 = "active";
378
+ var DEFAULT_GENERATION = 1;
379
+ var RECORD_COLUMNS = [
380
+ "id",
381
+ "agent_id",
382
+ "machine_id",
383
+ "name",
384
+ "display_name",
385
+ "description",
386
+ "status",
387
+ "generation",
388
+ "candidate_id",
389
+ "source_ids",
390
+ "path",
391
+ "usage_count",
392
+ "last_used_at",
393
+ "created_at",
394
+ "updated_at",
395
+ "properties",
396
+ "synced_at"
397
+ ];
398
+ var SELECT_COLUMNS3 = RECORD_COLUMNS.join(", ");
399
+ function toSkillRecordRow(row) {
400
+ return {
401
+ id: row.id,
402
+ agent_id: row.agent_id,
403
+ machine_id: row.machine_id ?? getTeamMachineId(),
404
+ name: row.name,
405
+ display_name: row.display_name,
406
+ description: row.description,
407
+ status: row.status,
408
+ generation: row.generation,
409
+ candidate_id: row.candidate_id ?? null,
410
+ source_ids: row.source_ids ?? "[]",
411
+ path: row.path,
412
+ usage_count: row.usage_count,
413
+ last_used_at: row.last_used_at ?? null,
414
+ created_at: row.created_at,
415
+ updated_at: row.updated_at,
416
+ properties: row.properties ?? "{}",
417
+ synced_at: row.synced_at ?? null
418
+ };
419
+ }
420
+ function buildWhere2(options) {
421
+ const conditions = [];
422
+ const params = [];
423
+ if (options.agent_id !== void 0) {
424
+ conditions.push(`agent_id = ?`);
425
+ params.push(options.agent_id);
426
+ }
427
+ if (options.status !== void 0) {
428
+ conditions.push(`status = ?`);
429
+ params.push(options.status);
430
+ }
431
+ return {
432
+ where: conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "",
433
+ params
434
+ };
435
+ }
436
+ function insertSkillRecord(data) {
437
+ const db = getDatabase();
438
+ db.prepare(
439
+ `INSERT INTO skill_records (
440
+ id, agent_id, machine_id, name, display_name,
441
+ description, status, generation, candidate_id,
442
+ source_ids, path, created_at, updated_at, properties
443
+ ) VALUES (
444
+ ?, ?, ?, ?, ?,
445
+ ?, ?, ?, ?,
446
+ ?, ?, ?, ?, ?
447
+ )`
448
+ ).run(
449
+ data.id,
450
+ data.agent_id,
451
+ data.machine_id ?? getTeamMachineId(),
452
+ data.name,
453
+ data.display_name,
454
+ data.description,
455
+ data.status ?? DEFAULT_STATUS3,
456
+ data.generation ?? DEFAULT_GENERATION,
457
+ data.candidate_id ?? null,
458
+ data.source_ids ?? "[]",
459
+ data.path,
460
+ data.created_at,
461
+ data.updated_at,
462
+ data.properties ?? "{}"
463
+ );
464
+ const raw = db.prepare(`SELECT ${SELECT_COLUMNS3} FROM skill_records WHERE id = ?`).get(data.id);
465
+ if (!raw) throw new Error(`Failed to insert skill record: ${data.id}`);
466
+ const row = toSkillRecordRow(raw);
467
+ syncRow("skill_records", row);
468
+ return row;
469
+ }
470
+ function getSkillRecord(id) {
471
+ const db = getDatabase();
472
+ const row = db.prepare(
473
+ `SELECT ${SELECT_COLUMNS3} FROM skill_records WHERE id = ?`
474
+ ).get(id);
475
+ if (!row) return null;
476
+ return toSkillRecordRow(row);
477
+ }
478
+ function getSkillRecordByName(name) {
479
+ const db = getDatabase();
480
+ const row = db.prepare(
481
+ `SELECT ${SELECT_COLUMNS3} FROM skill_records WHERE name = ?`
482
+ ).get(name);
483
+ if (!row) return null;
484
+ return toSkillRecordRow(row);
485
+ }
486
+ function listSkillRecords(options = {}) {
487
+ const db = getDatabase();
488
+ const { where, params } = buildWhere2(options);
489
+ const limit = options.limit ?? DEFAULT_LIST_LIMIT;
490
+ const offset = options.offset ?? 0;
491
+ const rows = db.prepare(
492
+ `SELECT ${SELECT_COLUMNS3}
493
+ FROM skill_records
494
+ ${where}
495
+ ORDER BY updated_at DESC
496
+ LIMIT ?
497
+ OFFSET ?`
498
+ ).all(...params, limit, offset);
499
+ return rows.map(toSkillRecordRow);
500
+ }
501
+ function updateSkillRecord(id, updates) {
502
+ const db = getDatabase();
503
+ const setClauses = [];
504
+ const params = [];
505
+ const fieldMap = {
506
+ display_name: "display_name",
507
+ description: "description",
508
+ status: "status",
509
+ generation: "generation",
510
+ source_ids: "source_ids",
511
+ path: "path",
512
+ usage_count: "usage_count",
513
+ last_used_at: "last_used_at",
514
+ updated_at: "updated_at",
515
+ properties: "properties"
516
+ };
517
+ for (const [key, column] of Object.entries(fieldMap)) {
518
+ if (key in updates) {
519
+ setClauses.push(`${column} = ?`);
520
+ params.push(updates[key] ?? null);
521
+ }
522
+ }
523
+ if (setClauses.length === 0) return getSkillRecord(id);
524
+ params.push(id);
525
+ db.prepare(
526
+ `UPDATE skill_records
527
+ SET ${setClauses.join(", ")}
528
+ WHERE id = ?`
529
+ ).run(...params);
530
+ const updated = getSkillRecord(id);
531
+ if (updated) syncRow("skill_records", updated);
532
+ return updated;
533
+ }
534
+ function incrementSkillUsageCount(id, now) {
535
+ const db = getDatabase();
536
+ db.prepare(
537
+ `UPDATE skill_records SET usage_count = usage_count + 1, last_used_at = ?, updated_at = ? WHERE id = ?`
538
+ ).run(now, now, id);
539
+ }
540
+ function listSkillRecordsWithCount(options = {}) {
541
+ const items = listSkillRecords(options);
542
+ const total = countSkillRecords(options);
543
+ return { items, total };
544
+ }
545
+ function countSkillRecords(options = {}) {
546
+ const db = getDatabase();
547
+ const { where, params } = buildWhere2(options);
548
+ const row = db.prepare(
549
+ `SELECT COUNT(*) as count FROM skill_records ${where}`
550
+ ).get(...params);
551
+ return row.count;
552
+ }
553
+ function deleteSkillRecordCascade(idOrName) {
554
+ const db = getDatabase();
555
+ const record = getSkillRecord(idOrName) ?? getSkillRecordByName(idOrName);
556
+ if (!record) return null;
557
+ db.transaction(() => {
558
+ db.prepare("DELETE FROM skill_lineage WHERE skill_id = ?").run(record.id);
559
+ db.prepare("DELETE FROM skill_usage WHERE skill_id = ?").run(record.id);
560
+ if (record.candidate_id) {
561
+ db.prepare(
562
+ `UPDATE skill_candidates SET status = 'dismissed', skill_id = NULL, updated_at = ? WHERE id = ?`
563
+ ).run(Math.floor(Date.now() / 1e3), record.candidate_id);
564
+ }
565
+ db.prepare(
566
+ `UPDATE skill_candidates SET status = 'dismissed', skill_id = NULL, updated_at = ? WHERE skill_id = ?`
567
+ ).run(Math.floor(Date.now() / 1e3), record.id);
568
+ db.prepare("DELETE FROM skill_records WHERE id = ?").run(record.id);
569
+ })();
570
+ return { id: record.id, name: record.name };
571
+ }
572
+
219
573
  // src/db/queries/turns.ts
220
574
  var TURN_COLUMNS = [
221
575
  "id",
@@ -228,7 +582,7 @@ var TURN_COLUMNS = [
228
582
  "started_at",
229
583
  "completed_at"
230
584
  ];
231
- var SELECT_COLUMNS2 = TURN_COLUMNS.join(", ");
585
+ var SELECT_COLUMNS4 = TURN_COLUMNS.join(", ");
232
586
  function toTurnRow(row) {
233
587
  return {
234
588
  id: row.id,
@@ -264,13 +618,13 @@ function insertTurn(data) {
264
618
  );
265
619
  const turnId = Number(info.lastInsertRowid);
266
620
  return toTurnRow(
267
- db.prepare(`SELECT ${SELECT_COLUMNS2} FROM agent_turns WHERE id = ?`).get(turnId)
621
+ db.prepare(`SELECT ${SELECT_COLUMNS4} FROM agent_turns WHERE id = ?`).get(turnId)
268
622
  );
269
623
  }
270
624
  function listTurns(runId) {
271
625
  const db = getDatabase();
272
626
  const rows = db.prepare(
273
- `SELECT ${SELECT_COLUMNS2}
627
+ `SELECT ${SELECT_COLUMNS4}
274
628
  FROM agent_turns
275
629
  WHERE run_id = ?
276
630
  ORDER BY turn_number ASC`
@@ -282,8 +636,8 @@ function listTurnsByRun(runId) {
282
636
  }
283
637
 
284
638
  // src/db/queries/runs.ts
285
- var DEFAULT_LIST_LIMIT = 100;
286
- var DEFAULT_STATUS2 = "pending";
639
+ var DEFAULT_LIST_LIMIT2 = 100;
640
+ var DEFAULT_STATUS4 = "pending";
287
641
  var STATUS_RUNNING = "running";
288
642
  var STATUS_COMPLETED2 = "completed";
289
643
  var STATUS_FAILED = "failed";
@@ -300,7 +654,7 @@ var RUN_COLUMNS = [
300
654
  "actions_taken",
301
655
  "error"
302
656
  ];
303
- var SELECT_COLUMNS3 = RUN_COLUMNS.join(", ");
657
+ var SELECT_COLUMNS5 = RUN_COLUMNS.join(", ");
304
658
  function toRunRow(row) {
305
659
  return {
306
660
  id: row.id,
@@ -333,7 +687,7 @@ function insertRun(data) {
333
687
  data.agent_id,
334
688
  data.task ?? null,
335
689
  data.instruction ?? null,
336
- data.status ?? DEFAULT_STATUS2,
690
+ data.status ?? DEFAULT_STATUS4,
337
691
  data.started_at ?? null,
338
692
  data.completed_at ?? null,
339
693
  data.tokens_used ?? null,
@@ -342,13 +696,13 @@ function insertRun(data) {
342
696
  data.error ?? null
343
697
  );
344
698
  return toRunRow(
345
- db.prepare(`SELECT ${SELECT_COLUMNS3} FROM agent_runs WHERE id = ?`).get(data.id)
699
+ db.prepare(`SELECT ${SELECT_COLUMNS5} FROM agent_runs WHERE id = ?`).get(data.id)
346
700
  );
347
701
  }
348
702
  function getRun(id) {
349
703
  const db = getDatabase();
350
704
  const row = db.prepare(
351
- `SELECT ${SELECT_COLUMNS3} FROM agent_runs WHERE id = ?`
705
+ `SELECT ${SELECT_COLUMNS5} FROM agent_runs WHERE id = ?`
352
706
  ).get(id);
353
707
  if (!row) return null;
354
708
  return toRunRow(row);
@@ -380,10 +734,10 @@ function buildRunsWhere(options) {
380
734
  function listRuns(options = {}) {
381
735
  const db = getDatabase();
382
736
  const { where, params } = buildRunsWhere(options);
383
- const limit = options.limit ?? DEFAULT_LIST_LIMIT;
737
+ const limit = options.limit ?? DEFAULT_LIST_LIMIT2;
384
738
  const offset = options.offset ?? 0;
385
739
  const rows = db.prepare(
386
- `SELECT ${SELECT_COLUMNS3}
740
+ `SELECT ${SELECT_COLUMNS5}
387
741
  FROM agent_runs
388
742
  ${where}
389
743
  ORDER BY started_at DESC NULLS LAST
@@ -432,20 +786,36 @@ function updateRunStatus(id, status, completion) {
432
786
  ).run(...params);
433
787
  if (info.changes === 0) return null;
434
788
  return toRunRow(
435
- db.prepare(`SELECT ${SELECT_COLUMNS3} FROM agent_runs WHERE id = ?`).get(id)
789
+ db.prepare(`SELECT ${SELECT_COLUMNS5} FROM agent_runs WHERE id = ?`).get(id)
436
790
  );
437
791
  }
438
- function getRunningRun(agentId) {
792
+ function getRunningRunForTask(agentId, taskName) {
439
793
  const db = getDatabase();
440
794
  const row = db.prepare(
441
- `SELECT ${SELECT_COLUMNS3}
442
- FROM agent_runs
443
- WHERE agent_id = ? AND status = ?
444
- ORDER BY started_at DESC NULLS LAST
795
+ `SELECT id FROM agent_runs
796
+ WHERE agent_id = ? AND task = ? AND status = ?
445
797
  LIMIT 1`
446
- ).get(agentId, STATUS_RUNNING);
447
- if (!row) return null;
448
- return toRunRow(row);
798
+ ).get(agentId, taskName, STATUS_RUNNING);
799
+ return row?.id ?? null;
800
+ }
801
+ function getLatestRunId(agentId, taskName) {
802
+ const db = getDatabase();
803
+ if (taskName) {
804
+ const row2 = db.prepare(
805
+ `SELECT id FROM agent_runs
806
+ WHERE agent_id = ? AND task = ?
807
+ ORDER BY started_at DESC
808
+ LIMIT 1`
809
+ ).get(agentId, taskName);
810
+ return row2?.id ?? null;
811
+ }
812
+ const row = db.prepare(
813
+ `SELECT id FROM agent_runs
814
+ WHERE agent_id = ?
815
+ ORDER BY started_at DESC
816
+ LIMIT 1`
817
+ ).get(agentId);
818
+ return row?.id ?? null;
449
819
  }
450
820
 
451
821
  // src/db/queries/reports.ts
@@ -458,7 +828,7 @@ var REPORT_COLUMNS = [
458
828
  "details",
459
829
  "created_at"
460
830
  ];
461
- var SELECT_COLUMNS4 = REPORT_COLUMNS.join(", ");
831
+ var SELECT_COLUMNS6 = REPORT_COLUMNS.join(", ");
462
832
  function toReportRow(row) {
463
833
  return {
464
834
  id: row.id,
@@ -488,13 +858,13 @@ function insertReport(data) {
488
858
  );
489
859
  const reportId = Number(info.lastInsertRowid);
490
860
  return toReportRow(
491
- db.prepare(`SELECT ${SELECT_COLUMNS4} FROM agent_reports WHERE id = ?`).get(reportId)
861
+ db.prepare(`SELECT ${SELECT_COLUMNS6} FROM agent_reports WHERE id = ?`).get(reportId)
492
862
  );
493
863
  }
494
864
  function listReports(runId) {
495
865
  const db = getDatabase();
496
866
  const rows = db.prepare(
497
- `SELECT ${SELECT_COLUMNS4}
867
+ `SELECT ${SELECT_COLUMNS6}
498
868
  FROM agent_reports
499
869
  WHERE run_id = ?
500
870
  ORDER BY created_at ASC`
@@ -521,7 +891,7 @@ var GRAPH_EDGE_COLUMNS = [
521
891
  "machine_id",
522
892
  "synced_at"
523
893
  ];
524
- var SELECT_COLUMNS5 = GRAPH_EDGE_COLUMNS.join(", ");
894
+ var SELECT_COLUMNS7 = GRAPH_EDGE_COLUMNS.join(", ");
525
895
  function toGraphEdgeRow(row) {
526
896
  return {
527
897
  id: row.id,
@@ -535,7 +905,7 @@ function toGraphEdgeRow(row) {
535
905
  confidence: row.confidence,
536
906
  properties: row.properties ?? null,
537
907
  created_at: row.created_at,
538
- machine_id: row.machine_id ?? DEFAULT_MACHINE_ID,
908
+ machine_id: row.machine_id ?? getTeamMachineId(),
539
909
  synced_at: row.synced_at ?? null
540
910
  };
541
911
  }
@@ -559,10 +929,10 @@ function insertGraphEdge(data) {
559
929
  data.confidence ?? GRAPH_EDGE_DEFAULT_CONFIDENCE,
560
930
  data.properties ?? null,
561
931
  data.created_at,
562
- data.machine_id ?? DEFAULT_MACHINE_ID
932
+ data.machine_id ?? getTeamMachineId()
563
933
  );
564
934
  const row = toGraphEdgeRow(
565
- db.prepare(`SELECT ${SELECT_COLUMNS5} FROM graph_edges WHERE id = ?`).get(id)
935
+ db.prepare(`SELECT ${SELECT_COLUMNS7} FROM graph_edges WHERE id = ?`).get(id)
566
936
  );
567
937
  syncRow("graph_edges", row);
568
938
  return row;
@@ -591,7 +961,7 @@ function listGraphEdges(options = {}) {
591
961
  const limit = options.limit ?? QUERY_DEFAULT_LIST_LIMIT;
592
962
  params.push(limit);
593
963
  const rows = db.prepare(
594
- `SELECT ${SELECT_COLUMNS5}
964
+ `SELECT ${SELECT_COLUMNS7}
595
965
  FROM graph_edges
596
966
  ${where}
597
967
  ORDER BY created_at DESC
@@ -611,7 +981,7 @@ function getGraphForNode(nodeId, nodeType, options) {
611
981
  const frontierArray = Array.from(frontier);
612
982
  const placeholders = frontierArray.map(() => `?`).join(", ");
613
983
  const rows = db.prepare(
614
- `SELECT ${SELECT_COLUMNS5}
984
+ `SELECT ${SELECT_COLUMNS7}
615
985
  FROM graph_edges
616
986
  WHERE source_id IN (${placeholders}) OR target_id IN (${placeholders})`
617
987
  ).all(...frontierArray, ...frontierArray);
@@ -695,7 +1065,7 @@ function createBatchLineage(agentId, sessionId, batchId, createdAt) {
695
1065
  }
696
1066
 
697
1067
  // src/db/queries/entities.ts
698
- var DEFAULT_LIST_LIMIT2 = 100;
1068
+ var DEFAULT_LIST_LIMIT3 = 100;
699
1069
  var ENTITY_COLUMNS = [
700
1070
  "id",
701
1071
  "agent_id",
@@ -708,7 +1078,7 @@ var ENTITY_COLUMNS = [
708
1078
  "machine_id",
709
1079
  "synced_at"
710
1080
  ];
711
- var SELECT_COLUMNS6 = ENTITY_COLUMNS.join(", ");
1081
+ var SELECT_COLUMNS8 = ENTITY_COLUMNS.join(", ");
712
1082
  function toEntityRow(row) {
713
1083
  return {
714
1084
  id: row.id,
@@ -719,7 +1089,7 @@ function toEntityRow(row) {
719
1089
  first_seen: row.first_seen,
720
1090
  last_seen: row.last_seen,
721
1091
  status: row.status ?? "active",
722
- machine_id: row.machine_id ?? DEFAULT_MACHINE_ID,
1092
+ machine_id: row.machine_id ?? "local",
723
1093
  synced_at: row.synced_at ?? null
724
1094
  };
725
1095
  }
@@ -739,10 +1109,10 @@ function insertEntity(data) {
739
1109
  data.properties ?? null,
740
1110
  data.first_seen,
741
1111
  data.last_seen,
742
- data.machine_id ?? DEFAULT_MACHINE_ID
1112
+ data.machine_id ?? getTeamMachineId()
743
1113
  );
744
1114
  const row = toEntityRow(
745
- db.prepare(`SELECT ${SELECT_COLUMNS6} FROM entities WHERE agent_id = ? AND type = ? AND name = ?`).get(
1115
+ db.prepare(`SELECT ${SELECT_COLUMNS8} FROM entities WHERE agent_id = ? AND type = ? AND name = ?`).get(
746
1116
  data.agent_id,
747
1117
  data.type,
748
1118
  data.name
@@ -754,7 +1124,7 @@ function insertEntity(data) {
754
1124
  function getEntity(id) {
755
1125
  const db = getDatabase();
756
1126
  const row = db.prepare(
757
- `SELECT ${SELECT_COLUMNS6} FROM entities WHERE id = ?`
1127
+ `SELECT ${SELECT_COLUMNS8} FROM entities WHERE id = ?`
758
1128
  ).get(id);
759
1129
  if (!row) return null;
760
1130
  return toEntityRow(row);
@@ -790,12 +1160,12 @@ function listEntities(options = {}) {
790
1160
  params.push(options.note_type);
791
1161
  }
792
1162
  const where = conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
793
- const limit = options.limit ?? DEFAULT_LIST_LIMIT2;
1163
+ const limit = options.limit ?? DEFAULT_LIST_LIMIT3;
794
1164
  const offset = options.offset ?? 0;
795
1165
  params.push(limit);
796
1166
  params.push(offset);
797
1167
  const rows = db.prepare(
798
- `SELECT ${SELECT_COLUMNS6}
1168
+ `SELECT ${SELECT_COLUMNS8}
799
1169
  FROM entities
800
1170
  ${where}
801
1171
  ORDER BY last_seen DESC
@@ -816,7 +1186,7 @@ var EXTRACT_COLUMNS = [
816
1186
  "machine_id",
817
1187
  "synced_at"
818
1188
  ];
819
- var SELECT_COLUMNS7 = EXTRACT_COLUMNS.join(", ");
1189
+ var SELECT_COLUMNS9 = EXTRACT_COLUMNS.join(", ");
820
1190
  function toDigestExtractRow(row) {
821
1191
  return {
822
1192
  id: row.id,
@@ -825,7 +1195,7 @@ function toDigestExtractRow(row) {
825
1195
  content: row.content,
826
1196
  substrate_hash: row.substrate_hash ?? null,
827
1197
  generated_at: row.generated_at,
828
- machine_id: row.machine_id ?? DEFAULT_MACHINE_ID,
1198
+ machine_id: row.machine_id ?? "local",
829
1199
  synced_at: row.synced_at ?? null
830
1200
  };
831
1201
  }
@@ -839,14 +1209,14 @@ function upsertDigestExtract(data) {
839
1209
  generated_at = EXCLUDED.generated_at`
840
1210
  ).run(data.agent_id, data.tier, data.content, data.generated_at);
841
1211
  const row = db.prepare(
842
- `SELECT ${SELECT_COLUMNS7} FROM digest_extracts WHERE agent_id = ? AND tier = ?`
1212
+ `SELECT ${SELECT_COLUMNS9} FROM digest_extracts WHERE agent_id = ? AND tier = ?`
843
1213
  ).get(data.agent_id, data.tier);
844
1214
  return toDigestExtractRow(row);
845
1215
  }
846
1216
  function getDigestExtract(agentId, tier) {
847
1217
  const db = getDatabase();
848
1218
  const row = db.prepare(
849
- `SELECT ${SELECT_COLUMNS7} FROM digest_extracts
1219
+ `SELECT ${SELECT_COLUMNS9} FROM digest_extracts
850
1220
  WHERE agent_id = ? AND tier = ?`
851
1221
  ).get(agentId, tier);
852
1222
  if (!row) return null;
@@ -856,7 +1226,7 @@ function listDigestExtracts(agentId) {
856
1226
  const db = getDatabase();
857
1227
  const tierPlaceholders = DIGEST_TIERS.map(() => "?").join(", ");
858
1228
  const rows = db.prepare(
859
- `SELECT ${SELECT_COLUMNS7}
1229
+ `SELECT ${SELECT_COLUMNS9}
860
1230
  FROM digest_extracts
861
1231
  WHERE agent_id = ? AND tier IN (${tierPlaceholders})
862
1232
  ORDER BY tier ASC`
@@ -864,6 +1234,66 @@ function listDigestExtracts(agentId) {
864
1234
  return rows.map(toDigestExtractRow);
865
1235
  }
866
1236
 
1237
+ // src/db/queries/skill-lineage.ts
1238
+ var LINEAGE_COLUMNS = [
1239
+ "id",
1240
+ "skill_id",
1241
+ "generation",
1242
+ "action",
1243
+ "rationale",
1244
+ "source_ids_added",
1245
+ "content_snapshot",
1246
+ "created_at"
1247
+ ];
1248
+ var SELECT_COLUMNS10 = LINEAGE_COLUMNS.join(", ");
1249
+ function toLineageRow(row) {
1250
+ return {
1251
+ id: row.id,
1252
+ skill_id: row.skill_id,
1253
+ generation: row.generation,
1254
+ action: row.action,
1255
+ rationale: row.rationale,
1256
+ source_ids_added: row.source_ids_added ?? "[]",
1257
+ content_snapshot: row.content_snapshot,
1258
+ created_at: row.created_at
1259
+ };
1260
+ }
1261
+ function insertLineage(data) {
1262
+ const db = getDatabase();
1263
+ db.prepare(
1264
+ `INSERT INTO skill_lineage (
1265
+ id, skill_id, generation, action, rationale,
1266
+ source_ids_added, content_snapshot, created_at
1267
+ ) VALUES (
1268
+ ?, ?, ?, ?, ?,
1269
+ ?, ?, ?
1270
+ )`
1271
+ ).run(
1272
+ data.id,
1273
+ data.skill_id,
1274
+ data.generation,
1275
+ data.action,
1276
+ data.rationale,
1277
+ data.source_ids_added ?? "[]",
1278
+ data.content_snapshot,
1279
+ data.created_at
1280
+ );
1281
+ return toLineageRow(
1282
+ db.prepare(`SELECT ${SELECT_COLUMNS10} FROM skill_lineage WHERE id = ?`).get(data.id)
1283
+ );
1284
+ }
1285
+ function listLineageForSkill(skillId, limit = 50) {
1286
+ const db = getDatabase();
1287
+ const rows = db.prepare(
1288
+ `SELECT ${SELECT_COLUMNS10}
1289
+ FROM skill_lineage
1290
+ WHERE skill_id = ?
1291
+ ORDER BY generation DESC
1292
+ LIMIT ?`
1293
+ ).all(skillId, limit);
1294
+ return rows.map(toLineageRow);
1295
+ }
1296
+
867
1297
  export {
868
1298
  populateBatchResponses,
869
1299
  getUnprocessedBatches,
@@ -875,6 +1305,7 @@ export {
875
1305
  setResponseSummary,
876
1306
  getLatestBatch,
877
1307
  listBatchesBySession,
1308
+ countBatchesBySession,
878
1309
  insertGraphEdge,
879
1310
  listGraphEdges,
880
1311
  getGraphForNode,
@@ -885,6 +1316,24 @@ export {
885
1316
  getDigestExtract,
886
1317
  listDigestExtracts,
887
1318
  errorMessage,
1319
+ insertCandidate,
1320
+ getCandidate,
1321
+ listCandidates,
1322
+ updateCandidate,
1323
+ listCandidatesWithCount,
1324
+ countCandidates,
1325
+ deleteCandidate,
1326
+ insertSkillRecord,
1327
+ getSkillRecord,
1328
+ getSkillRecordByName,
1329
+ listSkillRecords,
1330
+ updateSkillRecord,
1331
+ incrementSkillUsageCount,
1332
+ listSkillRecordsWithCount,
1333
+ countSkillRecords,
1334
+ deleteSkillRecordCascade,
1335
+ insertLineage,
1336
+ listLineageForSkill,
888
1337
  insertTurn,
889
1338
  listTurnsByRun,
890
1339
  STATUS_RUNNING,
@@ -895,10 +1344,11 @@ export {
895
1344
  listRuns,
896
1345
  countRuns,
897
1346
  updateRunStatus,
898
- getRunningRun,
1347
+ getRunningRunForTask,
1348
+ getLatestRunId,
899
1349
  insertReport,
900
1350
  listReports,
901
1351
  createSporeLineage,
902
1352
  createBatchLineage
903
1353
  };
904
- //# sourceMappingURL=chunk-TCGOSLW6.js.map
1354
+ //# sourceMappingURL=chunk-5BK6M6X5.js.map