@goondocks/myco 0.12.10 → 0.14.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 (186) hide show
  1. package/README.md +6 -0
  2. package/dist/{agent-run-GUHXRNZB.js → agent-run-3WLMSLMJ.js} +8 -7
  3. package/dist/{agent-run-GUHXRNZB.js.map → agent-run-3WLMSLMJ.js.map} +1 -1
  4. package/dist/{agent-tasks-GWZI5WSB.js → agent-tasks-BQE2GEVS.js} +8 -7
  5. package/dist/{agent-tasks-GWZI5WSB.js.map → agent-tasks-BQE2GEVS.js.map} +1 -1
  6. package/dist/{chunk-PW5QVY44.js → chunk-4VF6KQ2Z.js} +371 -6
  7. package/dist/chunk-4VF6KQ2Z.js.map +1 -0
  8. package/dist/{chunk-QL2RBFIC.js → chunk-5YQ6VOFZ.js} +2 -2
  9. package/dist/{chunk-MCARJFBA.js → chunk-745SWTQX.js} +4 -4
  10. package/dist/{chunk-D4M2AV65.js → chunk-DTE3SHYK.js} +46 -3
  11. package/dist/chunk-DTE3SHYK.js.map +1 -0
  12. package/dist/{chunk-HLGPGHT7.js → chunk-EVPG26CR.js} +3 -3
  13. package/dist/{chunk-YRUJ5KGV.js → chunk-GDCSPMH4.js} +3 -3
  14. package/dist/{chunk-LUQBT2Y4.js → chunk-HHZ3RTEI.js} +2 -2
  15. package/dist/{chunk-TCGOSLW6.js → chunk-JJXVDCEX.js} +613 -98
  16. package/dist/chunk-JJXVDCEX.js.map +1 -0
  17. package/dist/{chunk-D4ESHOOJ.js → chunk-KNTJOMWY.js} +3 -3
  18. package/dist/{chunk-JHLALJPB.js → chunk-LD6U3L6O.js} +8 -8
  19. package/dist/{chunk-7NBDELZB.js → chunk-NVCGF2DS.js} +26 -8
  20. package/dist/{chunk-7NBDELZB.js.map → chunk-NVCGF2DS.js.map} +1 -1
  21. package/dist/{chunk-SW62AX75.js → chunk-OKCSSDFC.js} +2 -2
  22. package/dist/{chunk-RR75ZKEV.js → chunk-OQVKLTQY.js} +4 -4
  23. package/dist/{chunk-OAGY5APE.js → chunk-PSYLKCWQ.js} +83 -7
  24. package/dist/chunk-PSYLKCWQ.js.map +1 -0
  25. package/dist/{chunk-Q2AYS2QE.js → chunk-PX5KIOKY.js} +5 -7
  26. package/dist/chunk-PX5KIOKY.js.map +1 -0
  27. package/dist/chunk-QLCD77AN.js +93 -0
  28. package/dist/chunk-QLCD77AN.js.map +1 -0
  29. package/dist/{chunk-J3L2RTYK.js → chunk-RBFECYNA.js} +2 -2
  30. package/dist/{chunk-4VSNNMEU.js → chunk-S66YG6QK.js} +26 -3
  31. package/dist/{chunk-4VSNNMEU.js.map → chunk-S66YG6QK.js.map} +1 -1
  32. package/dist/chunk-SBVDG5JP.js +112 -0
  33. package/dist/chunk-SBVDG5JP.js.map +1 -0
  34. package/dist/{chunk-M5XWW7UI.js → chunk-SODRR3HE.js} +8 -1
  35. package/dist/chunk-SODRR3HE.js.map +1 -0
  36. package/dist/{chunk-SFC4GXEN.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-LGPBVBFY.js → chunk-TVV6PZOC.js} +5 -7
  41. package/dist/chunk-TVV6PZOC.js.map +1 -0
  42. package/dist/{chunk-SVQAPEYH.js → chunk-UWXJCLCK.js} +22 -5
  43. package/dist/chunk-UWXJCLCK.js.map +1 -0
  44. package/dist/{chunk-JROOQQH6.js → chunk-X34OFKYU.js} +12 -7
  45. package/dist/chunk-X34OFKYU.js.map +1 -0
  46. package/dist/{chunk-FYGFMIS6.js → chunk-ZKXW46HZ.js} +2 -2
  47. package/dist/{cli-CFOIDXOY.js → cli-SKCINMJI.js} +41 -40
  48. package/dist/{cli-CFOIDXOY.js.map → cli-SKCINMJI.js.map} +1 -1
  49. package/dist/{client-ZBCGODTS.js → client-KZGZHHXT.js} +5 -5
  50. package/dist/{config-6RQ7FAEV.js → config-H657SF6B.js} +5 -3
  51. package/dist/{config-6RQ7FAEV.js.map → config-H657SF6B.js.map} +1 -1
  52. package/dist/{detect-providers-JFE3QLJI.js → detect-providers-PAVE2X6O.js} +4 -4
  53. package/dist/{doctor-W3I7RVU4.js → doctor-6FKSHJRU.js} +13 -11
  54. package/dist/{doctor-W3I7RVU4.js.map → doctor-6FKSHJRU.js.map} +1 -1
  55. package/dist/{executor-LKDWMGC7.js → executor-W5MKZH7B.js} +407 -46
  56. package/dist/executor-W5MKZH7B.js.map +1 -0
  57. package/dist/{init-M3HYJGHE.js → init-5QHCXBLF.js} +16 -15
  58. package/dist/{init-M3HYJGHE.js.map → init-5QHCXBLF.js.map} +1 -1
  59. package/dist/{init-wizard-C4WQA47U.js → init-wizard-HEY4HMG3.js} +12 -12
  60. package/dist/installer-25TSX4SR.js +13 -0
  61. package/dist/{llm-O46QYWEM.js → llm-T3QVHC3Y.js} +7 -7
  62. package/dist/{loader-4FMGOVWF.js → loader-JQLO6K44.js} +4 -2
  63. package/dist/{loader-BQ4X4K3F.js → loader-WQKVWL5D.js} +4 -4
  64. package/dist/{main-CMWNMCW2.js → main-IZ277SHB.js} +689 -124
  65. package/dist/main-IZ277SHB.js.map +1 -0
  66. package/dist/{open-4N7T37XV.js → open-S7YUWON4.js} +8 -7
  67. package/dist/{open-4N7T37XV.js.map → open-S7YUWON4.js.map} +1 -1
  68. package/dist/{openai-embeddings-HWAKOGUM.js → openai-embeddings-5T5ZP7LO.js} +4 -4
  69. package/dist/{openrouter-GXZK7JXR.js → openrouter-RD2COFC7.js} +4 -4
  70. package/dist/{post-compact-BPICHUPV.js → post-compact-EFKFT7TM.js} +7 -7
  71. package/dist/{post-tool-use-OHJ2EH7I.js → post-tool-use-624YC6ZH.js} +7 -7
  72. package/dist/{post-tool-use-failure-CBPY2TSN.js → post-tool-use-failure-QCHZAWQH.js} +7 -7
  73. package/dist/{pre-compact-ULAA4XIB.js → pre-compact-7DWH2EM3.js} +7 -7
  74. package/dist/{provider-check-CKZW3GQX.js → provider-check-QN7OGXZA.js} +4 -4
  75. package/dist/{registry-ZHUVXGPO.js → registry-2XQMCPA6.js} +5 -5
  76. package/dist/{remove-52PTVOCJ.js → remove-ESVIET5C.js} +10 -8
  77. package/dist/{remove-52PTVOCJ.js.map → remove-ESVIET5C.js.map} +1 -1
  78. package/dist/{resolution-events-WZHPQQMN.js → resolution-events-5EVUEWHS.js} +4 -4
  79. package/dist/{restart-O37BUPLH.js → restart-AZHV6OKM.js} +9 -8
  80. package/dist/{restart-O37BUPLH.js.map → restart-AZHV6OKM.js.map} +1 -1
  81. package/dist/{search-52YK2ZWU.js → search-JS4HXYGS.js} +9 -8
  82. package/dist/{search-52YK2ZWU.js.map → search-JS4HXYGS.js.map} +1 -1
  83. package/dist/{server-7OKRAJCM.js → server-KT5GW333.js} +115 -14
  84. package/dist/server-KT5GW333.js.map +1 -0
  85. package/dist/{session-57IAZYRK.js → session-JSI67FEM.js} +10 -9
  86. package/dist/{session-57IAZYRK.js.map → session-JSI67FEM.js.map} +1 -1
  87. package/dist/{session-end-WRKDJEWM.js → session-end-4CM462MC.js} +6 -6
  88. package/dist/{session-start-7VWGEVOX.js → session-start-ZGF7F6DE.js} +12 -12
  89. package/dist/{setup-llm-IDQPX22O.js → setup-llm-S2UYJYIS.js} +10 -9
  90. package/dist/{setup-llm-IDQPX22O.js.map → setup-llm-S2UYJYIS.js.map} +1 -1
  91. package/dist/src/agent/definitions/agent.yaml +2 -0
  92. package/dist/src/agent/definitions/tasks/digest-only.yaml +1 -0
  93. package/dist/src/agent/definitions/tasks/extract-only.yaml +1 -0
  94. package/dist/src/agent/definitions/tasks/full-intelligence.yaml +8 -0
  95. package/dist/src/agent/definitions/tasks/graph-maintenance.yaml +1 -0
  96. package/dist/src/agent/definitions/tasks/review-session.yaml +1 -0
  97. package/dist/src/agent/definitions/tasks/skill-evolve.yaml +155 -0
  98. package/dist/src/agent/definitions/tasks/skill-generate.yaml +210 -0
  99. package/dist/src/agent/definitions/tasks/skill-survey.yaml +149 -0
  100. package/dist/src/agent/definitions/tasks/supersession-sweep.yaml +1 -0
  101. package/dist/src/agent/definitions/tasks/title-summary.yaml +1 -0
  102. package/dist/src/agent/prompts/agent.md +29 -0
  103. package/dist/src/cli.js +1 -1
  104. package/dist/src/daemon/main.js +1 -1
  105. package/dist/src/hooks/post-tool-use.js +1 -1
  106. package/dist/src/hooks/session-end.js +1 -1
  107. package/dist/src/hooks/session-start.js +1 -1
  108. package/dist/src/hooks/stop.js +1 -1
  109. package/dist/src/hooks/user-prompt-submit.js +1 -1
  110. package/dist/src/mcp/server.js +1 -1
  111. package/dist/src/worker/src/index.ts +3 -0
  112. package/dist/src/worker/src/schema.ts +56 -0
  113. package/dist/{stats-D7U5HQ3L.js → stats-D2FM6ZXO.js} +10 -9
  114. package/dist/{stats-D7U5HQ3L.js.map → stats-D2FM6ZXO.js.map} +1 -1
  115. package/dist/{stop-VJU4AAOQ.js → stop-DQEKVNST.js} +6 -6
  116. package/dist/{stop-failure-ILPHO26U.js → stop-failure-EHH7AN5E.js} +7 -7
  117. package/dist/{subagent-start-77MY4UMP.js → subagent-start-6R52PAFA.js} +7 -7
  118. package/dist/{subagent-stop-DABERMXZ.js → subagent-stop-CLDFJKYQ.js} +7 -7
  119. package/dist/{task-completed-TBWBOAJ6.js → task-completed-V47JA3OV.js} +7 -7
  120. package/dist/{team-K6H4B3ZD.js → team-SJPDXELY.js} +45 -19
  121. package/dist/team-SJPDXELY.js.map +1 -0
  122. package/dist/turns-3ZQAF6HF.js +16 -0
  123. package/dist/turns-3ZQAF6HF.js.map +1 -0
  124. package/dist/ui/assets/index-BmsHIwjl.css +1 -0
  125. package/dist/ui/assets/index-Cn6cQwJy.js +842 -0
  126. package/dist/ui/index.html +2 -2
  127. package/dist/{update-GW774ZMW.js → update-ZNIYDQHJ.js} +8 -7
  128. package/dist/{update-GW774ZMW.js.map → update-ZNIYDQHJ.js.map} +1 -1
  129. package/dist/{user-prompt-submit-C47Y5Y5I.js → user-prompt-submit-6TX6VECI.js} +6 -6
  130. package/dist/{verify-MQAANTUR.js → verify-JHIMXTY5.js} +8 -8
  131. package/dist/{version-42DQW43N.js → version-UMEN7OJU.js} +2 -2
  132. package/dist/version-UMEN7OJU.js.map +1 -0
  133. package/package.json +6 -6
  134. package/dist/chunk-D4M2AV65.js.map +0 -1
  135. package/dist/chunk-JROOQQH6.js.map +0 -1
  136. package/dist/chunk-LGPBVBFY.js.map +0 -1
  137. package/dist/chunk-M5XWW7UI.js.map +0 -1
  138. package/dist/chunk-OAGY5APE.js.map +0 -1
  139. package/dist/chunk-PIRWYDOH.js.map +0 -1
  140. package/dist/chunk-PW5QVY44.js.map +0 -1
  141. package/dist/chunk-Q2AYS2QE.js.map +0 -1
  142. package/dist/chunk-SFC4GXEN.js.map +0 -1
  143. package/dist/chunk-SVQAPEYH.js.map +0 -1
  144. package/dist/chunk-TCGOSLW6.js.map +0 -1
  145. package/dist/executor-LKDWMGC7.js.map +0 -1
  146. package/dist/main-CMWNMCW2.js.map +0 -1
  147. package/dist/server-7OKRAJCM.js.map +0 -1
  148. package/dist/team-K6H4B3ZD.js.map +0 -1
  149. package/dist/ui/assets/index-BGbil7f1.css +0 -1
  150. package/dist/ui/assets/index-ZSGlKT25.js +0 -804
  151. /package/dist/{chunk-QL2RBFIC.js.map → chunk-5YQ6VOFZ.js.map} +0 -0
  152. /package/dist/{chunk-MCARJFBA.js.map → chunk-745SWTQX.js.map} +0 -0
  153. /package/dist/{chunk-HLGPGHT7.js.map → chunk-EVPG26CR.js.map} +0 -0
  154. /package/dist/{chunk-YRUJ5KGV.js.map → chunk-GDCSPMH4.js.map} +0 -0
  155. /package/dist/{chunk-LUQBT2Y4.js.map → chunk-HHZ3RTEI.js.map} +0 -0
  156. /package/dist/{chunk-D4ESHOOJ.js.map → chunk-KNTJOMWY.js.map} +0 -0
  157. /package/dist/{chunk-JHLALJPB.js.map → chunk-LD6U3L6O.js.map} +0 -0
  158. /package/dist/{chunk-SW62AX75.js.map → chunk-OKCSSDFC.js.map} +0 -0
  159. /package/dist/{chunk-RR75ZKEV.js.map → chunk-OQVKLTQY.js.map} +0 -0
  160. /package/dist/{chunk-J3L2RTYK.js.map → chunk-RBFECYNA.js.map} +0 -0
  161. /package/dist/{chunk-FYGFMIS6.js.map → chunk-ZKXW46HZ.js.map} +0 -0
  162. /package/dist/{client-ZBCGODTS.js.map → client-KZGZHHXT.js.map} +0 -0
  163. /package/dist/{detect-providers-JFE3QLJI.js.map → detect-providers-PAVE2X6O.js.map} +0 -0
  164. /package/dist/{init-wizard-C4WQA47U.js.map → init-wizard-HEY4HMG3.js.map} +0 -0
  165. /package/dist/{llm-O46QYWEM.js.map → installer-25TSX4SR.js.map} +0 -0
  166. /package/dist/{loader-4FMGOVWF.js.map → llm-T3QVHC3Y.js.map} +0 -0
  167. /package/dist/{loader-BQ4X4K3F.js.map → loader-JQLO6K44.js.map} +0 -0
  168. /package/dist/{openai-embeddings-HWAKOGUM.js.map → loader-WQKVWL5D.js.map} +0 -0
  169. /package/dist/{openrouter-GXZK7JXR.js.map → openai-embeddings-5T5ZP7LO.js.map} +0 -0
  170. /package/dist/{provider-check-CKZW3GQX.js.map → openrouter-RD2COFC7.js.map} +0 -0
  171. /package/dist/{post-compact-BPICHUPV.js.map → post-compact-EFKFT7TM.js.map} +0 -0
  172. /package/dist/{post-tool-use-OHJ2EH7I.js.map → post-tool-use-624YC6ZH.js.map} +0 -0
  173. /package/dist/{post-tool-use-failure-CBPY2TSN.js.map → post-tool-use-failure-QCHZAWQH.js.map} +0 -0
  174. /package/dist/{pre-compact-ULAA4XIB.js.map → pre-compact-7DWH2EM3.js.map} +0 -0
  175. /package/dist/{registry-ZHUVXGPO.js.map → provider-check-QN7OGXZA.js.map} +0 -0
  176. /package/dist/{resolution-events-WZHPQQMN.js.map → registry-2XQMCPA6.js.map} +0 -0
  177. /package/dist/{version-42DQW43N.js.map → resolution-events-5EVUEWHS.js.map} +0 -0
  178. /package/dist/{session-end-WRKDJEWM.js.map → session-end-4CM462MC.js.map} +0 -0
  179. /package/dist/{session-start-7VWGEVOX.js.map → session-start-ZGF7F6DE.js.map} +0 -0
  180. /package/dist/{stop-VJU4AAOQ.js.map → stop-DQEKVNST.js.map} +0 -0
  181. /package/dist/{stop-failure-ILPHO26U.js.map → stop-failure-EHH7AN5E.js.map} +0 -0
  182. /package/dist/{subagent-start-77MY4UMP.js.map → subagent-start-6R52PAFA.js.map} +0 -0
  183. /package/dist/{subagent-stop-DABERMXZ.js.map → subagent-stop-CLDFJKYQ.js.map} +0 -0
  184. /package/dist/{task-completed-TBWBOAJ6.js.map → task-completed-V47JA3OV.js.map} +0 -0
  185. /package/dist/{user-prompt-submit-C47Y5Y5I.js.map → user-prompt-submit-6TX6VECI.js.map} +0 -0
  186. /package/dist/{verify-MQAANTUR.js.map → verify-JHIMXTY5.js.map} +0 -0
@@ -1,20 +1,25 @@
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-S66YG6QK.js";
6
+ import {
7
+ loadConfig
8
+ } from "./chunk-PSYLKCWQ.js";
5
9
  import {
6
10
  getDatabase
7
11
  } from "./chunk-MYX5NCRH.js";
8
12
  import {
9
- DEFAULT_MACHINE_ID,
13
+ DEFAULT_LIST_LIMIT,
10
14
  DIGEST_TIERS,
11
15
  EDGE_TYPE_DERIVED_FROM,
12
16
  EDGE_TYPE_EXTRACTED_FROM,
13
17
  EDGE_TYPE_FROM_SESSION,
14
18
  EDGE_TYPE_HAS_BATCH,
15
19
  GRAPH_EDGE_DEFAULT_CONFIDENCE,
16
- QUERY_DEFAULT_LIST_LIMIT
17
- } from "./chunk-PIRWYDOH.js";
20
+ QUERY_DEFAULT_LIST_LIMIT,
21
+ epochSeconds
22
+ } from "./chunk-TRA3R4EC.js";
18
23
 
19
24
  // src/db/queries/batches.ts
20
25
  var DEFAULT_UNPROCESSED_LIMIT = 100;
@@ -58,7 +63,7 @@ function toBatchRow(row) {
58
63
  processed: row.processed,
59
64
  content_hash: row.content_hash ?? null,
60
65
  created_at: row.created_at,
61
- machine_id: row.machine_id ?? DEFAULT_MACHINE_ID,
66
+ machine_id: row.machine_id ?? "local",
62
67
  synced_at: row.synced_at ?? null
63
68
  };
64
69
  }
@@ -154,13 +159,9 @@ function insertBatchStateless(data) {
154
159
  DEFAULT_ACTIVITY_COUNT,
155
160
  DEFAULT_PROCESSED,
156
161
  data.created_at,
157
- DEFAULT_MACHINE_ID
162
+ data.machine_id ?? getTeamMachineId()
158
163
  );
159
164
  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
165
  return toBatchRow(
165
166
  db.prepare(`SELECT ${SELECT_COLUMNS} FROM prompt_batches WHERE id = ?`).get(batchId)
166
167
  );
@@ -204,6 +205,132 @@ function listBatchesBySession(sessionId, options = {}) {
204
205
  ).all(sessionId, limit, offset);
205
206
  return rows.map(toBatchRow);
206
207
  }
208
+ function countBatchesBySession(sessionId) {
209
+ const db = getDatabase();
210
+ const row = db.prepare(
211
+ `SELECT COUNT(*) as count FROM prompt_batches WHERE session_id = ?`
212
+ ).get(sessionId);
213
+ return row.count;
214
+ }
215
+
216
+ // src/notifications/notify.ts
217
+ import crypto from "crypto";
218
+
219
+ // src/db/queries/notifications.ts
220
+ var DEFAULT_LIMIT = 50;
221
+ var NOTIFICATION_PRUNE_AGE_SECONDS = 30 * 24 * 60 * 60;
222
+ function insertNotification(n) {
223
+ const db = getDatabase();
224
+ db.prepare(
225
+ `INSERT INTO notifications (id, domain, type, level, title, message, mode, status, link, metadata, created_at)
226
+ VALUES (?, ?, ?, ?, ?, ?, ?, 'unread', ?, ?, ?)`
227
+ ).run(n.id, n.domain, n.type, n.level, n.title, n.message, n.mode, n.link, n.metadata, epochSeconds());
228
+ }
229
+ function listNotifications(opts = {}) {
230
+ const db = getDatabase();
231
+ const conditions = [];
232
+ const params = [];
233
+ if (opts.status) {
234
+ conditions.push("status = ?");
235
+ params.push(opts.status);
236
+ }
237
+ if (opts.domain) {
238
+ conditions.push("domain = ?");
239
+ params.push(opts.domain);
240
+ }
241
+ if (opts.mode) {
242
+ conditions.push("mode = ?");
243
+ params.push(opts.mode);
244
+ }
245
+ const where = conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
246
+ const limit = opts.limit ?? DEFAULT_LIMIT;
247
+ const offset = opts.offset ?? 0;
248
+ return db.prepare(
249
+ `SELECT * FROM notifications ${where} ORDER BY created_at DESC LIMIT ? OFFSET ?`
250
+ ).all(...params, limit, offset);
251
+ }
252
+ function countNotifications(status) {
253
+ const db = getDatabase();
254
+ if (status) {
255
+ const row2 = db.prepare("SELECT COUNT(*) as count FROM notifications WHERE status = ?").get(status);
256
+ return row2.count;
257
+ }
258
+ const row = db.prepare("SELECT COUNT(*) as count FROM notifications").get();
259
+ return row.count;
260
+ }
261
+ function getNotification(id) {
262
+ const db = getDatabase();
263
+ return db.prepare("SELECT * FROM notifications WHERE id = ?").get(id);
264
+ }
265
+ function updateNotificationStatus(id, status) {
266
+ const db = getDatabase();
267
+ const result = db.prepare("UPDATE notifications SET status = ? WHERE id = ?").run(status, id);
268
+ return result.changes > 0;
269
+ }
270
+ function dismissAllNotifications(domain) {
271
+ const db = getDatabase();
272
+ if (domain) {
273
+ const result2 = db.prepare("UPDATE notifications SET status = 'dismissed' WHERE domain = ? AND status != 'dismissed'").run(domain);
274
+ return result2.changes;
275
+ }
276
+ const result = db.prepare("UPDATE notifications SET status = 'dismissed' WHERE status != 'dismissed'").run();
277
+ return result.changes;
278
+ }
279
+ function markAllRead(domain) {
280
+ const db = getDatabase();
281
+ if (domain) {
282
+ const result2 = db.prepare("UPDATE notifications SET status = 'read' WHERE domain = ? AND status = 'unread'").run(domain);
283
+ return result2.changes;
284
+ }
285
+ const result = db.prepare("UPDATE notifications SET status = 'read' WHERE status = 'unread'").run();
286
+ return result.changes;
287
+ }
288
+
289
+ // src/notifications/registry.ts
290
+ var domains = /* @__PURE__ */ new Map();
291
+ function register(descriptor) {
292
+ domains.set(descriptor.domain, descriptor);
293
+ }
294
+ function getAllDomains() {
295
+ return [...domains.values()].sort((a, b) => a.domain.localeCompare(b.domain));
296
+ }
297
+ function getType(typeId) {
298
+ for (const descriptor of domains.values()) {
299
+ const match = descriptor.types.find((t) => t.id === typeId);
300
+ if (match) return { domain: descriptor, type: match };
301
+ }
302
+ return void 0;
303
+ }
304
+
305
+ // src/notifications/notify.ts
306
+ function notify(vaultDir, payload, config) {
307
+ if (!vaultDir) return null;
308
+ try {
309
+ const cfg = config ?? loadConfig(vaultDir);
310
+ if (!cfg.notifications.enabled) return null;
311
+ const domainConfig = cfg.notifications.domains[payload.domain];
312
+ if (domainConfig && !domainConfig.enabled) return null;
313
+ const registeredType = getType(payload.type);
314
+ const mode = payload.mode ?? domainConfig?.mode ?? registeredType?.type.defaultMode ?? cfg.notifications.default_mode;
315
+ const level = payload.level ?? registeredType?.type.defaultLevel ?? "info";
316
+ const id = crypto.randomUUID();
317
+ insertNotification({
318
+ id,
319
+ domain: payload.domain,
320
+ type: payload.type,
321
+ level,
322
+ title: payload.title,
323
+ message: payload.message ?? null,
324
+ mode,
325
+ link: payload.link ?? null,
326
+ metadata: payload.metadata ? JSON.stringify(payload.metadata) : null
327
+ });
328
+ return id;
329
+ } catch (err) {
330
+ console.warn("[notify] Failed to emit notification:", err instanceof Error ? err.message : err);
331
+ return null;
332
+ }
333
+ }
207
334
 
208
335
  // src/utils/error-message.ts
209
336
  function errorMessage(err) {
@@ -216,74 +343,359 @@ function errorMessage(err) {
216
343
  }
217
344
  }
218
345
 
219
- // src/db/queries/turns.ts
220
- var TURN_COLUMNS = [
346
+ // src/db/queries/skill-candidates.ts
347
+ var DEFAULT_CONFIDENCE = 0;
348
+ var DEFAULT_STATUS2 = "identified";
349
+ var CANDIDATE_COLUMNS = [
221
350
  "id",
222
- "run_id",
223
351
  "agent_id",
224
- "turn_number",
225
- "tool_name",
226
- "tool_input",
227
- "tool_output_summary",
228
- "started_at",
229
- "completed_at"
352
+ "machine_id",
353
+ "topic",
354
+ "rationale",
355
+ "confidence",
356
+ "status",
357
+ "source_ids",
358
+ "skill_id",
359
+ "created_at",
360
+ "updated_at",
361
+ "synced_at"
230
362
  ];
231
- var SELECT_COLUMNS2 = TURN_COLUMNS.join(", ");
232
- function toTurnRow(row) {
363
+ var SELECT_COLUMNS2 = CANDIDATE_COLUMNS.join(", ");
364
+ function toCandidateRow(row) {
233
365
  return {
234
366
  id: row.id,
235
- run_id: row.run_id,
236
367
  agent_id: row.agent_id,
237
- turn_number: row.turn_number,
238
- tool_name: row.tool_name,
239
- tool_input: row.tool_input ?? null,
240
- tool_output_summary: row.tool_output_summary ?? null,
241
- started_at: row.started_at ?? null,
242
- completed_at: row.completed_at ?? null
368
+ machine_id: row.machine_id ?? getTeamMachineId(),
369
+ topic: row.topic,
370
+ rationale: row.rationale,
371
+ confidence: row.confidence,
372
+ status: row.status,
373
+ source_ids: row.source_ids ?? "[]",
374
+ skill_id: row.skill_id ?? null,
375
+ created_at: row.created_at,
376
+ updated_at: row.updated_at,
377
+ synced_at: row.synced_at ?? null
378
+ };
379
+ }
380
+ function buildWhere(options) {
381
+ const conditions = [];
382
+ const params = [];
383
+ if (options.agent_id !== void 0) {
384
+ conditions.push(`agent_id = ?`);
385
+ params.push(options.agent_id);
386
+ }
387
+ if (options.status !== void 0) {
388
+ conditions.push(`status = ?`);
389
+ params.push(options.status);
390
+ }
391
+ return {
392
+ where: conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "",
393
+ params
243
394
  };
244
395
  }
245
- function insertTurn(data) {
396
+ function insertCandidate(data) {
246
397
  const db = getDatabase();
247
- const info = db.prepare(
248
- `INSERT INTO agent_turns (
249
- run_id, agent_id, turn_number, tool_name,
250
- tool_input, tool_output_summary, started_at, completed_at
398
+ db.prepare(
399
+ `INSERT INTO skill_candidates (
400
+ id, agent_id, machine_id, topic, rationale,
401
+ confidence, status, source_ids, skill_id,
402
+ created_at, updated_at
251
403
  ) VALUES (
404
+ ?, ?, ?, ?, ?,
252
405
  ?, ?, ?, ?,
253
- ?, ?, ?, ?
406
+ ?, ?
254
407
  )`
255
408
  ).run(
256
- data.run_id,
409
+ data.id,
257
410
  data.agent_id,
258
- data.turn_number,
259
- data.tool_name,
260
- data.tool_input ?? null,
261
- data.tool_output_summary ?? null,
262
- data.started_at ?? null,
263
- data.completed_at ?? null
264
- );
265
- const turnId = Number(info.lastInsertRowid);
266
- return toTurnRow(
267
- db.prepare(`SELECT ${SELECT_COLUMNS2} FROM agent_turns WHERE id = ?`).get(turnId)
411
+ data.machine_id ?? getTeamMachineId(),
412
+ data.topic,
413
+ data.rationale,
414
+ data.confidence ?? DEFAULT_CONFIDENCE,
415
+ data.status ?? DEFAULT_STATUS2,
416
+ data.source_ids ?? "[]",
417
+ data.skill_id ?? null,
418
+ data.created_at,
419
+ data.updated_at
268
420
  );
421
+ const raw = db.prepare(`SELECT ${SELECT_COLUMNS2} FROM skill_candidates WHERE id = ?`).get(data.id);
422
+ if (!raw) throw new Error(`Failed to insert skill candidate: ${data.id}`);
423
+ const row = toCandidateRow(raw);
424
+ syncRow("skill_candidates", row);
425
+ return row;
426
+ }
427
+ function getCandidate(id) {
428
+ const db = getDatabase();
429
+ const row = db.prepare(
430
+ `SELECT ${SELECT_COLUMNS2} FROM skill_candidates WHERE id = ?`
431
+ ).get(id);
432
+ if (!row) return null;
433
+ return toCandidateRow(row);
269
434
  }
270
- function listTurns(runId) {
435
+ function listCandidates(options = {}) {
271
436
  const db = getDatabase();
437
+ const { where, params } = buildWhere(options);
438
+ const limit = options.limit ?? DEFAULT_LIST_LIMIT;
439
+ const offset = options.offset ?? 0;
272
440
  const rows = db.prepare(
273
441
  `SELECT ${SELECT_COLUMNS2}
274
- FROM agent_turns
275
- WHERE run_id = ?
276
- ORDER BY turn_number ASC`
277
- ).all(runId);
278
- return rows.map(toTurnRow);
442
+ FROM skill_candidates
443
+ ${where}
444
+ ORDER BY confidence DESC, created_at DESC
445
+ LIMIT ?
446
+ OFFSET ?`
447
+ ).all(...params, limit, offset);
448
+ return rows.map(toCandidateRow);
449
+ }
450
+ function updateCandidate(id, updates) {
451
+ const db = getDatabase();
452
+ const setClauses = [];
453
+ const params = [];
454
+ const fieldMap = {
455
+ topic: "topic",
456
+ rationale: "rationale",
457
+ confidence: "confidence",
458
+ status: "status",
459
+ source_ids: "source_ids",
460
+ skill_id: "skill_id",
461
+ updated_at: "updated_at"
462
+ };
463
+ for (const [key, column] of Object.entries(fieldMap)) {
464
+ if (key in updates) {
465
+ setClauses.push(`${column} = ?`);
466
+ params.push(updates[key] ?? null);
467
+ }
468
+ }
469
+ if (setClauses.length === 0) return getCandidate(id);
470
+ params.push(id);
471
+ db.prepare(
472
+ `UPDATE skill_candidates
473
+ SET ${setClauses.join(", ")}
474
+ WHERE id = ?`
475
+ ).run(...params);
476
+ const updated = getCandidate(id);
477
+ if (updated) syncRow("skill_candidates", updated);
478
+ return updated;
479
+ }
480
+ function listCandidatesWithCount(options = {}) {
481
+ const items = listCandidates(options);
482
+ const total = countCandidates(options);
483
+ return { items, total };
484
+ }
485
+ function countCandidates(options = {}) {
486
+ const db = getDatabase();
487
+ const { where, params } = buildWhere(options);
488
+ const row = db.prepare(
489
+ `SELECT COUNT(*) as count FROM skill_candidates ${where}`
490
+ ).get(...params);
491
+ return row.count;
492
+ }
493
+ function deleteCandidate(id) {
494
+ const db = getDatabase();
495
+ const info = db.prepare("DELETE FROM skill_candidates WHERE id = ?").run(id);
496
+ return info.changes > 0;
497
+ }
498
+
499
+ // src/db/queries/skill-records.ts
500
+ var DEFAULT_STATUS3 = "active";
501
+ var DEFAULT_GENERATION = 1;
502
+ var RECORD_COLUMNS = [
503
+ "id",
504
+ "agent_id",
505
+ "machine_id",
506
+ "name",
507
+ "display_name",
508
+ "description",
509
+ "status",
510
+ "generation",
511
+ "candidate_id",
512
+ "source_ids",
513
+ "path",
514
+ "usage_count",
515
+ "last_used_at",
516
+ "created_at",
517
+ "updated_at",
518
+ "properties",
519
+ "synced_at"
520
+ ];
521
+ var SELECT_COLUMNS3 = RECORD_COLUMNS.join(", ");
522
+ function toSkillRecordRow(row) {
523
+ return {
524
+ id: row.id,
525
+ agent_id: row.agent_id,
526
+ machine_id: row.machine_id ?? getTeamMachineId(),
527
+ name: row.name,
528
+ display_name: row.display_name,
529
+ description: row.description,
530
+ status: row.status,
531
+ generation: row.generation,
532
+ candidate_id: row.candidate_id ?? null,
533
+ source_ids: row.source_ids ?? "[]",
534
+ path: row.path,
535
+ usage_count: row.usage_count,
536
+ last_used_at: row.last_used_at ?? null,
537
+ created_at: row.created_at,
538
+ updated_at: row.updated_at,
539
+ properties: row.properties ?? "{}",
540
+ synced_at: row.synced_at ?? null
541
+ };
542
+ }
543
+ function buildWhere2(options) {
544
+ const conditions = [];
545
+ const params = [];
546
+ if (options.agent_id !== void 0) {
547
+ conditions.push(`agent_id = ?`);
548
+ params.push(options.agent_id);
549
+ }
550
+ if (options.status !== void 0) {
551
+ conditions.push(`status = ?`);
552
+ params.push(options.status);
553
+ }
554
+ return {
555
+ where: conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "",
556
+ params
557
+ };
558
+ }
559
+ function insertSkillRecord(data) {
560
+ const db = getDatabase();
561
+ db.prepare(
562
+ `INSERT INTO skill_records (
563
+ id, agent_id, machine_id, name, display_name,
564
+ description, status, generation, candidate_id,
565
+ source_ids, path, created_at, updated_at, properties
566
+ ) VALUES (
567
+ ?, ?, ?, ?, ?,
568
+ ?, ?, ?, ?,
569
+ ?, ?, ?, ?, ?
570
+ )`
571
+ ).run(
572
+ data.id,
573
+ data.agent_id,
574
+ data.machine_id ?? getTeamMachineId(),
575
+ data.name,
576
+ data.display_name,
577
+ data.description,
578
+ data.status ?? DEFAULT_STATUS3,
579
+ data.generation ?? DEFAULT_GENERATION,
580
+ data.candidate_id ?? null,
581
+ data.source_ids ?? "[]",
582
+ data.path,
583
+ data.created_at,
584
+ data.updated_at,
585
+ data.properties ?? "{}"
586
+ );
587
+ const raw = db.prepare(`SELECT ${SELECT_COLUMNS3} FROM skill_records WHERE id = ?`).get(data.id);
588
+ if (!raw) throw new Error(`Failed to insert skill record: ${data.id}`);
589
+ const row = toSkillRecordRow(raw);
590
+ syncRow("skill_records", row);
591
+ return row;
592
+ }
593
+ function getSkillRecord(id) {
594
+ const db = getDatabase();
595
+ const row = db.prepare(
596
+ `SELECT ${SELECT_COLUMNS3} FROM skill_records WHERE id = ?`
597
+ ).get(id);
598
+ if (!row) return null;
599
+ return toSkillRecordRow(row);
600
+ }
601
+ function getSkillRecordByName(name) {
602
+ const db = getDatabase();
603
+ const row = db.prepare(
604
+ `SELECT ${SELECT_COLUMNS3} FROM skill_records WHERE name = ?`
605
+ ).get(name);
606
+ if (!row) return null;
607
+ return toSkillRecordRow(row);
608
+ }
609
+ function listSkillRecords(options = {}) {
610
+ const db = getDatabase();
611
+ const { where, params } = buildWhere2(options);
612
+ const limit = options.limit ?? DEFAULT_LIST_LIMIT;
613
+ const offset = options.offset ?? 0;
614
+ const rows = db.prepare(
615
+ `SELECT ${SELECT_COLUMNS3}
616
+ FROM skill_records
617
+ ${where}
618
+ ORDER BY updated_at DESC
619
+ LIMIT ?
620
+ OFFSET ?`
621
+ ).all(...params, limit, offset);
622
+ return rows.map(toSkillRecordRow);
623
+ }
624
+ function updateSkillRecord(id, updates) {
625
+ const db = getDatabase();
626
+ const setClauses = [];
627
+ const params = [];
628
+ const fieldMap = {
629
+ display_name: "display_name",
630
+ description: "description",
631
+ status: "status",
632
+ generation: "generation",
633
+ source_ids: "source_ids",
634
+ path: "path",
635
+ usage_count: "usage_count",
636
+ last_used_at: "last_used_at",
637
+ updated_at: "updated_at",
638
+ properties: "properties"
639
+ };
640
+ for (const [key, column] of Object.entries(fieldMap)) {
641
+ if (key in updates) {
642
+ setClauses.push(`${column} = ?`);
643
+ params.push(updates[key] ?? null);
644
+ }
645
+ }
646
+ if (setClauses.length === 0) return getSkillRecord(id);
647
+ params.push(id);
648
+ db.prepare(
649
+ `UPDATE skill_records
650
+ SET ${setClauses.join(", ")}
651
+ WHERE id = ?`
652
+ ).run(...params);
653
+ const updated = getSkillRecord(id);
654
+ if (updated) syncRow("skill_records", updated);
655
+ return updated;
279
656
  }
280
- function listTurnsByRun(runId) {
281
- return listTurns(runId);
657
+ function incrementSkillUsageCount(id, now) {
658
+ const db = getDatabase();
659
+ db.prepare(
660
+ `UPDATE skill_records SET usage_count = usage_count + 1, last_used_at = ?, updated_at = ? WHERE id = ?`
661
+ ).run(now, now, id);
662
+ }
663
+ function listSkillRecordsWithCount(options = {}) {
664
+ const items = listSkillRecords(options);
665
+ const total = countSkillRecords(options);
666
+ return { items, total };
667
+ }
668
+ function countSkillRecords(options = {}) {
669
+ const db = getDatabase();
670
+ const { where, params } = buildWhere2(options);
671
+ const row = db.prepare(
672
+ `SELECT COUNT(*) as count FROM skill_records ${where}`
673
+ ).get(...params);
674
+ return row.count;
675
+ }
676
+ function deleteSkillRecordCascade(idOrName) {
677
+ const db = getDatabase();
678
+ const record = getSkillRecord(idOrName) ?? getSkillRecordByName(idOrName);
679
+ if (!record) return null;
680
+ db.transaction(() => {
681
+ db.prepare("DELETE FROM skill_lineage WHERE skill_id = ?").run(record.id);
682
+ db.prepare("DELETE FROM skill_usage WHERE skill_id = ?").run(record.id);
683
+ if (record.candidate_id) {
684
+ db.prepare(
685
+ `UPDATE skill_candidates SET status = 'dismissed', skill_id = NULL, updated_at = ? WHERE id = ?`
686
+ ).run(Math.floor(Date.now() / 1e3), record.candidate_id);
687
+ }
688
+ db.prepare(
689
+ `UPDATE skill_candidates SET status = 'dismissed', skill_id = NULL, updated_at = ? WHERE skill_id = ?`
690
+ ).run(Math.floor(Date.now() / 1e3), record.id);
691
+ db.prepare("DELETE FROM skill_records WHERE id = ?").run(record.id);
692
+ })();
693
+ return { id: record.id, name: record.name };
282
694
  }
283
695
 
284
696
  // src/db/queries/runs.ts
285
- var DEFAULT_LIST_LIMIT = 100;
286
- var DEFAULT_STATUS2 = "pending";
697
+ var DEFAULT_LIST_LIMIT2 = 100;
698
+ var DEFAULT_STATUS4 = "pending";
287
699
  var STATUS_RUNNING = "running";
288
700
  var STATUS_COMPLETED2 = "completed";
289
701
  var STATUS_FAILED = "failed";
@@ -300,7 +712,7 @@ var RUN_COLUMNS = [
300
712
  "actions_taken",
301
713
  "error"
302
714
  ];
303
- var SELECT_COLUMNS3 = RUN_COLUMNS.join(", ");
715
+ var SELECT_COLUMNS4 = RUN_COLUMNS.join(", ");
304
716
  function toRunRow(row) {
305
717
  return {
306
718
  id: row.id,
@@ -333,7 +745,7 @@ function insertRun(data) {
333
745
  data.agent_id,
334
746
  data.task ?? null,
335
747
  data.instruction ?? null,
336
- data.status ?? DEFAULT_STATUS2,
748
+ data.status ?? DEFAULT_STATUS4,
337
749
  data.started_at ?? null,
338
750
  data.completed_at ?? null,
339
751
  data.tokens_used ?? null,
@@ -342,13 +754,13 @@ function insertRun(data) {
342
754
  data.error ?? null
343
755
  );
344
756
  return toRunRow(
345
- db.prepare(`SELECT ${SELECT_COLUMNS3} FROM agent_runs WHERE id = ?`).get(data.id)
757
+ db.prepare(`SELECT ${SELECT_COLUMNS4} FROM agent_runs WHERE id = ?`).get(data.id)
346
758
  );
347
759
  }
348
760
  function getRun(id) {
349
761
  const db = getDatabase();
350
762
  const row = db.prepare(
351
- `SELECT ${SELECT_COLUMNS3} FROM agent_runs WHERE id = ?`
763
+ `SELECT ${SELECT_COLUMNS4} FROM agent_runs WHERE id = ?`
352
764
  ).get(id);
353
765
  if (!row) return null;
354
766
  return toRunRow(row);
@@ -380,10 +792,10 @@ function buildRunsWhere(options) {
380
792
  function listRuns(options = {}) {
381
793
  const db = getDatabase();
382
794
  const { where, params } = buildRunsWhere(options);
383
- const limit = options.limit ?? DEFAULT_LIST_LIMIT;
795
+ const limit = options.limit ?? DEFAULT_LIST_LIMIT2;
384
796
  const offset = options.offset ?? 0;
385
797
  const rows = db.prepare(
386
- `SELECT ${SELECT_COLUMNS3}
798
+ `SELECT ${SELECT_COLUMNS4}
387
799
  FROM agent_runs
388
800
  ${where}
389
801
  ORDER BY started_at DESC NULLS LAST
@@ -432,20 +844,36 @@ function updateRunStatus(id, status, completion) {
432
844
  ).run(...params);
433
845
  if (info.changes === 0) return null;
434
846
  return toRunRow(
435
- db.prepare(`SELECT ${SELECT_COLUMNS3} FROM agent_runs WHERE id = ?`).get(id)
847
+ db.prepare(`SELECT ${SELECT_COLUMNS4} FROM agent_runs WHERE id = ?`).get(id)
436
848
  );
437
849
  }
438
- function getRunningRun(agentId) {
850
+ function getRunningRunForTask(agentId, taskName) {
439
851
  const db = getDatabase();
440
852
  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
853
+ `SELECT id FROM agent_runs
854
+ WHERE agent_id = ? AND task = ? AND status = ?
445
855
  LIMIT 1`
446
- ).get(agentId, STATUS_RUNNING);
447
- if (!row) return null;
448
- return toRunRow(row);
856
+ ).get(agentId, taskName, STATUS_RUNNING);
857
+ return row?.id ?? null;
858
+ }
859
+ function getLatestRunId(agentId, taskName) {
860
+ const db = getDatabase();
861
+ if (taskName) {
862
+ const row2 = db.prepare(
863
+ `SELECT id FROM agent_runs
864
+ WHERE agent_id = ? AND task = ?
865
+ ORDER BY started_at DESC
866
+ LIMIT 1`
867
+ ).get(agentId, taskName);
868
+ return row2?.id ?? null;
869
+ }
870
+ const row = db.prepare(
871
+ `SELECT id FROM agent_runs
872
+ WHERE agent_id = ?
873
+ ORDER BY started_at DESC
874
+ LIMIT 1`
875
+ ).get(agentId);
876
+ return row?.id ?? null;
449
877
  }
450
878
 
451
879
  // src/db/queries/reports.ts
@@ -458,7 +886,7 @@ var REPORT_COLUMNS = [
458
886
  "details",
459
887
  "created_at"
460
888
  ];
461
- var SELECT_COLUMNS4 = REPORT_COLUMNS.join(", ");
889
+ var SELECT_COLUMNS5 = REPORT_COLUMNS.join(", ");
462
890
  function toReportRow(row) {
463
891
  return {
464
892
  id: row.id,
@@ -488,13 +916,13 @@ function insertReport(data) {
488
916
  );
489
917
  const reportId = Number(info.lastInsertRowid);
490
918
  return toReportRow(
491
- db.prepare(`SELECT ${SELECT_COLUMNS4} FROM agent_reports WHERE id = ?`).get(reportId)
919
+ db.prepare(`SELECT ${SELECT_COLUMNS5} FROM agent_reports WHERE id = ?`).get(reportId)
492
920
  );
493
921
  }
494
922
  function listReports(runId) {
495
923
  const db = getDatabase();
496
924
  const rows = db.prepare(
497
- `SELECT ${SELECT_COLUMNS4}
925
+ `SELECT ${SELECT_COLUMNS5}
498
926
  FROM agent_reports
499
927
  WHERE run_id = ?
500
928
  ORDER BY created_at ASC`
@@ -503,7 +931,7 @@ function listReports(runId) {
503
931
  }
504
932
 
505
933
  // src/db/queries/graph-edges.ts
506
- import crypto from "crypto";
934
+ import crypto2 from "crypto";
507
935
  var DEFAULT_BFS_DEPTH = 2;
508
936
  var MAX_BFS_DEPTH = 5;
509
937
  var GRAPH_EDGE_COLUMNS = [
@@ -521,7 +949,7 @@ var GRAPH_EDGE_COLUMNS = [
521
949
  "machine_id",
522
950
  "synced_at"
523
951
  ];
524
- var SELECT_COLUMNS5 = GRAPH_EDGE_COLUMNS.join(", ");
952
+ var SELECT_COLUMNS6 = GRAPH_EDGE_COLUMNS.join(", ");
525
953
  function toGraphEdgeRow(row) {
526
954
  return {
527
955
  id: row.id,
@@ -535,13 +963,13 @@ function toGraphEdgeRow(row) {
535
963
  confidence: row.confidence,
536
964
  properties: row.properties ?? null,
537
965
  created_at: row.created_at,
538
- machine_id: row.machine_id ?? DEFAULT_MACHINE_ID,
966
+ machine_id: row.machine_id ?? getTeamMachineId(),
539
967
  synced_at: row.synced_at ?? null
540
968
  };
541
969
  }
542
970
  function insertGraphEdge(data) {
543
971
  const db = getDatabase();
544
- const id = crypto.randomUUID();
972
+ const id = crypto2.randomUUID();
545
973
  db.prepare(
546
974
  `INSERT INTO graph_edges (
547
975
  id, agent_id, source_id, source_type, target_id, target_type,
@@ -559,10 +987,10 @@ function insertGraphEdge(data) {
559
987
  data.confidence ?? GRAPH_EDGE_DEFAULT_CONFIDENCE,
560
988
  data.properties ?? null,
561
989
  data.created_at,
562
- data.machine_id ?? DEFAULT_MACHINE_ID
990
+ data.machine_id ?? getTeamMachineId()
563
991
  );
564
992
  const row = toGraphEdgeRow(
565
- db.prepare(`SELECT ${SELECT_COLUMNS5} FROM graph_edges WHERE id = ?`).get(id)
993
+ db.prepare(`SELECT ${SELECT_COLUMNS6} FROM graph_edges WHERE id = ?`).get(id)
566
994
  );
567
995
  syncRow("graph_edges", row);
568
996
  return row;
@@ -591,7 +1019,7 @@ function listGraphEdges(options = {}) {
591
1019
  const limit = options.limit ?? QUERY_DEFAULT_LIST_LIMIT;
592
1020
  params.push(limit);
593
1021
  const rows = db.prepare(
594
- `SELECT ${SELECT_COLUMNS5}
1022
+ `SELECT ${SELECT_COLUMNS6}
595
1023
  FROM graph_edges
596
1024
  ${where}
597
1025
  ORDER BY created_at DESC
@@ -611,7 +1039,7 @@ function getGraphForNode(nodeId, nodeType, options) {
611
1039
  const frontierArray = Array.from(frontier);
612
1040
  const placeholders = frontierArray.map(() => `?`).join(", ");
613
1041
  const rows = db.prepare(
614
- `SELECT ${SELECT_COLUMNS5}
1042
+ `SELECT ${SELECT_COLUMNS6}
615
1043
  FROM graph_edges
616
1044
  WHERE source_id IN (${placeholders}) OR target_id IN (${placeholders})`
617
1045
  ).all(...frontierArray, ...frontierArray);
@@ -695,7 +1123,7 @@ function createBatchLineage(agentId, sessionId, batchId, createdAt) {
695
1123
  }
696
1124
 
697
1125
  // src/db/queries/entities.ts
698
- var DEFAULT_LIST_LIMIT2 = 100;
1126
+ var DEFAULT_LIST_LIMIT3 = 100;
699
1127
  var ENTITY_COLUMNS = [
700
1128
  "id",
701
1129
  "agent_id",
@@ -708,7 +1136,7 @@ var ENTITY_COLUMNS = [
708
1136
  "machine_id",
709
1137
  "synced_at"
710
1138
  ];
711
- var SELECT_COLUMNS6 = ENTITY_COLUMNS.join(", ");
1139
+ var SELECT_COLUMNS7 = ENTITY_COLUMNS.join(", ");
712
1140
  function toEntityRow(row) {
713
1141
  return {
714
1142
  id: row.id,
@@ -719,7 +1147,7 @@ function toEntityRow(row) {
719
1147
  first_seen: row.first_seen,
720
1148
  last_seen: row.last_seen,
721
1149
  status: row.status ?? "active",
722
- machine_id: row.machine_id ?? DEFAULT_MACHINE_ID,
1150
+ machine_id: row.machine_id ?? "local",
723
1151
  synced_at: row.synced_at ?? null
724
1152
  };
725
1153
  }
@@ -739,10 +1167,10 @@ function insertEntity(data) {
739
1167
  data.properties ?? null,
740
1168
  data.first_seen,
741
1169
  data.last_seen,
742
- data.machine_id ?? DEFAULT_MACHINE_ID
1170
+ data.machine_id ?? getTeamMachineId()
743
1171
  );
744
1172
  const row = toEntityRow(
745
- db.prepare(`SELECT ${SELECT_COLUMNS6} FROM entities WHERE agent_id = ? AND type = ? AND name = ?`).get(
1173
+ db.prepare(`SELECT ${SELECT_COLUMNS7} FROM entities WHERE agent_id = ? AND type = ? AND name = ?`).get(
746
1174
  data.agent_id,
747
1175
  data.type,
748
1176
  data.name
@@ -754,7 +1182,7 @@ function insertEntity(data) {
754
1182
  function getEntity(id) {
755
1183
  const db = getDatabase();
756
1184
  const row = db.prepare(
757
- `SELECT ${SELECT_COLUMNS6} FROM entities WHERE id = ?`
1185
+ `SELECT ${SELECT_COLUMNS7} FROM entities WHERE id = ?`
758
1186
  ).get(id);
759
1187
  if (!row) return null;
760
1188
  return toEntityRow(row);
@@ -790,12 +1218,12 @@ function listEntities(options = {}) {
790
1218
  params.push(options.note_type);
791
1219
  }
792
1220
  const where = conditions.length > 0 ? `WHERE ${conditions.join(" AND ")}` : "";
793
- const limit = options.limit ?? DEFAULT_LIST_LIMIT2;
1221
+ const limit = options.limit ?? DEFAULT_LIST_LIMIT3;
794
1222
  const offset = options.offset ?? 0;
795
1223
  params.push(limit);
796
1224
  params.push(offset);
797
1225
  const rows = db.prepare(
798
- `SELECT ${SELECT_COLUMNS6}
1226
+ `SELECT ${SELECT_COLUMNS7}
799
1227
  FROM entities
800
1228
  ${where}
801
1229
  ORDER BY last_seen DESC
@@ -816,7 +1244,7 @@ var EXTRACT_COLUMNS = [
816
1244
  "machine_id",
817
1245
  "synced_at"
818
1246
  ];
819
- var SELECT_COLUMNS7 = EXTRACT_COLUMNS.join(", ");
1247
+ var SELECT_COLUMNS8 = EXTRACT_COLUMNS.join(", ");
820
1248
  function toDigestExtractRow(row) {
821
1249
  return {
822
1250
  id: row.id,
@@ -825,7 +1253,7 @@ function toDigestExtractRow(row) {
825
1253
  content: row.content,
826
1254
  substrate_hash: row.substrate_hash ?? null,
827
1255
  generated_at: row.generated_at,
828
- machine_id: row.machine_id ?? DEFAULT_MACHINE_ID,
1256
+ machine_id: row.machine_id ?? "local",
829
1257
  synced_at: row.synced_at ?? null
830
1258
  };
831
1259
  }
@@ -839,14 +1267,14 @@ function upsertDigestExtract(data) {
839
1267
  generated_at = EXCLUDED.generated_at`
840
1268
  ).run(data.agent_id, data.tier, data.content, data.generated_at);
841
1269
  const row = db.prepare(
842
- `SELECT ${SELECT_COLUMNS7} FROM digest_extracts WHERE agent_id = ? AND tier = ?`
1270
+ `SELECT ${SELECT_COLUMNS8} FROM digest_extracts WHERE agent_id = ? AND tier = ?`
843
1271
  ).get(data.agent_id, data.tier);
844
1272
  return toDigestExtractRow(row);
845
1273
  }
846
1274
  function getDigestExtract(agentId, tier) {
847
1275
  const db = getDatabase();
848
1276
  const row = db.prepare(
849
- `SELECT ${SELECT_COLUMNS7} FROM digest_extracts
1277
+ `SELECT ${SELECT_COLUMNS8} FROM digest_extracts
850
1278
  WHERE agent_id = ? AND tier = ?`
851
1279
  ).get(agentId, tier);
852
1280
  if (!row) return null;
@@ -856,7 +1284,7 @@ function listDigestExtracts(agentId) {
856
1284
  const db = getDatabase();
857
1285
  const tierPlaceholders = DIGEST_TIERS.map(() => "?").join(", ");
858
1286
  const rows = db.prepare(
859
- `SELECT ${SELECT_COLUMNS7}
1287
+ `SELECT ${SELECT_COLUMNS8}
860
1288
  FROM digest_extracts
861
1289
  WHERE agent_id = ? AND tier IN (${tierPlaceholders})
862
1290
  ORDER BY tier ASC`
@@ -864,6 +1292,66 @@ function listDigestExtracts(agentId) {
864
1292
  return rows.map(toDigestExtractRow);
865
1293
  }
866
1294
 
1295
+ // src/db/queries/skill-lineage.ts
1296
+ var LINEAGE_COLUMNS = [
1297
+ "id",
1298
+ "skill_id",
1299
+ "generation",
1300
+ "action",
1301
+ "rationale",
1302
+ "source_ids_added",
1303
+ "content_snapshot",
1304
+ "created_at"
1305
+ ];
1306
+ var SELECT_COLUMNS9 = LINEAGE_COLUMNS.join(", ");
1307
+ function toLineageRow(row) {
1308
+ return {
1309
+ id: row.id,
1310
+ skill_id: row.skill_id,
1311
+ generation: row.generation,
1312
+ action: row.action,
1313
+ rationale: row.rationale,
1314
+ source_ids_added: row.source_ids_added ?? "[]",
1315
+ content_snapshot: row.content_snapshot,
1316
+ created_at: row.created_at
1317
+ };
1318
+ }
1319
+ function insertLineage(data) {
1320
+ const db = getDatabase();
1321
+ db.prepare(
1322
+ `INSERT INTO skill_lineage (
1323
+ id, skill_id, generation, action, rationale,
1324
+ source_ids_added, content_snapshot, created_at
1325
+ ) VALUES (
1326
+ ?, ?, ?, ?, ?,
1327
+ ?, ?, ?
1328
+ )`
1329
+ ).run(
1330
+ data.id,
1331
+ data.skill_id,
1332
+ data.generation,
1333
+ data.action,
1334
+ data.rationale,
1335
+ data.source_ids_added ?? "[]",
1336
+ data.content_snapshot,
1337
+ data.created_at
1338
+ );
1339
+ return toLineageRow(
1340
+ db.prepare(`SELECT ${SELECT_COLUMNS9} FROM skill_lineage WHERE id = ?`).get(data.id)
1341
+ );
1342
+ }
1343
+ function listLineageForSkill(skillId, limit = 50) {
1344
+ const db = getDatabase();
1345
+ const rows = db.prepare(
1346
+ `SELECT ${SELECT_COLUMNS9}
1347
+ FROM skill_lineage
1348
+ WHERE skill_id = ?
1349
+ ORDER BY generation DESC
1350
+ LIMIT ?`
1351
+ ).all(skillId, limit);
1352
+ return rows.map(toLineageRow);
1353
+ }
1354
+
867
1355
  export {
868
1356
  populateBatchResponses,
869
1357
  getUnprocessedBatches,
@@ -875,6 +1363,7 @@ export {
875
1363
  setResponseSummary,
876
1364
  getLatestBatch,
877
1365
  listBatchesBySession,
1366
+ countBatchesBySession,
878
1367
  insertGraphEdge,
879
1368
  listGraphEdges,
880
1369
  getGraphForNode,
@@ -884,9 +1373,34 @@ export {
884
1373
  upsertDigestExtract,
885
1374
  getDigestExtract,
886
1375
  listDigestExtracts,
1376
+ register,
1377
+ getAllDomains,
1378
+ listNotifications,
1379
+ countNotifications,
1380
+ getNotification,
1381
+ updateNotificationStatus,
1382
+ dismissAllNotifications,
1383
+ markAllRead,
1384
+ notify,
887
1385
  errorMessage,
888
- insertTurn,
889
- listTurnsByRun,
1386
+ insertCandidate,
1387
+ getCandidate,
1388
+ listCandidates,
1389
+ updateCandidate,
1390
+ listCandidatesWithCount,
1391
+ countCandidates,
1392
+ deleteCandidate,
1393
+ insertSkillRecord,
1394
+ getSkillRecord,
1395
+ getSkillRecordByName,
1396
+ listSkillRecords,
1397
+ updateSkillRecord,
1398
+ incrementSkillUsageCount,
1399
+ listSkillRecordsWithCount,
1400
+ countSkillRecords,
1401
+ deleteSkillRecordCascade,
1402
+ insertLineage,
1403
+ listLineageForSkill,
890
1404
  STATUS_RUNNING,
891
1405
  STATUS_COMPLETED2 as STATUS_COMPLETED,
892
1406
  STATUS_FAILED,
@@ -895,10 +1409,11 @@ export {
895
1409
  listRuns,
896
1410
  countRuns,
897
1411
  updateRunStatus,
898
- getRunningRun,
1412
+ getRunningRunForTask,
1413
+ getLatestRunId,
899
1414
  insertReport,
900
1415
  listReports,
901
1416
  createSporeLineage,
902
1417
  createBatchLineage
903
1418
  };
904
- //# sourceMappingURL=chunk-TCGOSLW6.js.map
1419
+ //# sourceMappingURL=chunk-JJXVDCEX.js.map