@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
package/README.md CHANGED
@@ -129,6 +129,12 @@ Local databases remain the source of truth. The cloud store is a queryable mirro
129
129
 
130
130
  Runs on the Cloudflare free tier. See the [Team Sync docs](docs/team-sync.md) for the full guide.
131
131
 
132
+ ### Skills
133
+
134
+ Myco auto-generates project-specific skills from accumulated vault knowledge. As the intelligence pipeline processes sessions, it identifies recurring procedures — debugging the build, adding API routes, configuring providers — and surfaces them as candidates. You approve candidates from the Skills dashboard, and Myco writes SKILL.md files that teach your agents how to work in your codebase. Skills are deployed to `.agents/skills/` and symlinked to each agent's native skills directory, so every agent gets the same procedural knowledge.
135
+
136
+ Skills evolve over time. When the project's understanding changes — a pattern is abandoned, a new gotcha is discovered, a workflow shifts — the evolve task detects the drift and rewrites affected skills, preserving what's still accurate and incorporating new knowledge. Each update is recorded with full lineage: generation number, rationale, and a content snapshot. See the [Skills docs](docs/skills.md) for the full lifecycle.
137
+
132
138
  ### Backup & restore
133
139
 
134
140
  Local SQL dump backups run automatically during daemon idle periods. Configure a custom backup directory (network share, git repo) from the Operations page. Restore with content-hash deduplication — never overwrites existing records.
@@ -1,15 +1,16 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
  import {
3
3
  connectToDaemon
4
- } from "./chunk-UGUJJ7QP.js";
4
+ } from "./chunk-TFGGH6UB.js";
5
5
  import "./chunk-SAKJMNSR.js";
6
- import "./chunk-LUQBT2Y4.js";
6
+ import "./chunk-TNCBMGWB.js";
7
+ import "./chunk-HHZ3RTEI.js";
7
8
  import "./chunk-MYX5NCRH.js";
8
- import "./chunk-WDLBFMGG.js";
9
- import "./chunk-PIRWYDOH.js";
10
- import "./chunk-S6I62FAH.js";
11
- import "./chunk-U7JRFBJO.js";
9
+ import "./chunk-VQEXXS56.js";
10
+ import "./chunk-EUQQVKGQ.js";
12
11
  import "./chunk-LPUQPDC2.js";
12
+ import "./chunk-TRA3R4EC.js";
13
+ import "./chunk-S6I62FAH.js";
13
14
  import "./chunk-PZUWP5VK.js";
14
15
 
15
16
  // src/cli/agent-run.ts
@@ -31,4 +32,4 @@ async function run(args, vaultDir) {
31
32
  export {
32
33
  run
33
34
  };
34
- //# sourceMappingURL=agent-run-E3P3WWPD.js.map
35
+ //# sourceMappingURL=agent-run-YBASQHC7.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli/agent-run.ts"],"sourcesContent":["/**\n * CLI `agent` command — trigger an intelligence agent run via daemon API.\n *\n * Routes through the daemon HTTP API for centralized processing.\n * The daemon's /api/agent/run endpoint fires-and-forgets the run.\n */\n\nimport { connectToDaemon } from './shared.js';\n\nexport async function run(args: string[], vaultDir: string): Promise<void> {\n const task = args.find((_, i) => args[i - 1] === '--task');\n const instruction = args.find((_, i) => args[i - 1] === '--instruction');\n\n const client = await connectToDaemon(vaultDir);\n\n console.log('Starting agent...');\n const result = await client.post('/api/agent/run', { task, instruction });\n\n if (!result.ok) {\n console.error('Failed to start agent run');\n process.exit(1);\n }\n\n console.log('Agent run dispatched to daemon');\n if (result.data?.message) {\n console.log(` ${result.data.message}`);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;AASA,eAAsB,IAAI,MAAgB,UAAiC;AACzE,QAAM,OAAO,KAAK,KAAK,CAAC,GAAG,MAAM,KAAK,IAAI,CAAC,MAAM,QAAQ;AACzD,QAAM,cAAc,KAAK,KAAK,CAAC,GAAG,MAAM,KAAK,IAAI,CAAC,MAAM,eAAe;AAEvE,QAAM,SAAS,MAAM,gBAAgB,QAAQ;AAE7C,UAAQ,IAAI,mBAAmB;AAC/B,QAAM,SAAS,MAAM,OAAO,KAAK,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAExE,MAAI,CAAC,OAAO,IAAI;AACd,YAAQ,MAAM,2BAA2B;AACzC,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,UAAQ,IAAI,gCAAgC;AAC5C,MAAI,OAAO,MAAM,SAAS;AACxB,YAAQ,IAAI,KAAK,OAAO,KAAK,OAAO,EAAE;AAAA,EACxC;AACF;","names":[]}
1
+ {"version":3,"sources":["../src/cli/agent-run.ts"],"sourcesContent":["/**\n * CLI `agent` command — trigger an intelligence agent run via daemon API.\n *\n * Routes through the daemon HTTP API for centralized processing.\n * The daemon's /api/agent/run endpoint fires-and-forgets the run.\n */\n\nimport { connectToDaemon } from './shared.js';\n\nexport async function run(args: string[], vaultDir: string): Promise<void> {\n const task = args.find((_, i) => args[i - 1] === '--task');\n const instruction = args.find((_, i) => args[i - 1] === '--instruction');\n\n const client = await connectToDaemon(vaultDir);\n\n console.log('Starting agent...');\n const result = await client.post('/api/agent/run', { task, instruction });\n\n if (!result.ok) {\n console.error('Failed to start agent run');\n process.exit(1);\n }\n\n console.log('Agent run dispatched to daemon');\n if (result.data?.message) {\n console.log(` ${result.data.message}`);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;AASA,eAAsB,IAAI,MAAgB,UAAiC;AACzE,QAAM,OAAO,KAAK,KAAK,CAAC,GAAG,MAAM,KAAK,IAAI,CAAC,MAAM,QAAQ;AACzD,QAAM,cAAc,KAAK,KAAK,CAAC,GAAG,MAAM,KAAK,IAAI,CAAC,MAAM,eAAe;AAEvE,QAAM,SAAS,MAAM,gBAAgB,QAAQ;AAE7C,UAAQ,IAAI,mBAAmB;AAC/B,QAAM,SAAS,MAAM,OAAO,KAAK,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAExE,MAAI,CAAC,OAAO,IAAI;AACd,YAAQ,MAAM,2BAA2B;AACzC,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,UAAQ,IAAI,gCAAgC;AAC5C,MAAI,OAAO,MAAM,SAAS;AACxB,YAAQ,IAAI,KAAK,OAAO,KAAK,OAAO,EAAE;AAAA,EACxC;AACF;","names":[]}
@@ -1,15 +1,16 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
  import {
3
3
  connectToDaemon
4
- } from "./chunk-UGUJJ7QP.js";
4
+ } from "./chunk-TFGGH6UB.js";
5
5
  import "./chunk-SAKJMNSR.js";
6
- import "./chunk-LUQBT2Y4.js";
6
+ import "./chunk-TNCBMGWB.js";
7
+ import "./chunk-HHZ3RTEI.js";
7
8
  import "./chunk-MYX5NCRH.js";
8
- import "./chunk-WDLBFMGG.js";
9
- import "./chunk-PIRWYDOH.js";
10
- import "./chunk-S6I62FAH.js";
11
- import "./chunk-U7JRFBJO.js";
9
+ import "./chunk-VQEXXS56.js";
10
+ import "./chunk-EUQQVKGQ.js";
12
11
  import "./chunk-LPUQPDC2.js";
12
+ import "./chunk-TRA3R4EC.js";
13
+ import "./chunk-S6I62FAH.js";
13
14
  import "./chunk-PZUWP5VK.js";
14
15
 
15
16
  // src/cli/agent-tasks.ts
@@ -177,4 +178,4 @@ async function run(args, vaultDir) {
177
178
  export {
178
179
  run
179
180
  };
180
- //# sourceMappingURL=agent-tasks-GWII2I4E.js.map
181
+ //# sourceMappingURL=agent-tasks-WBQFDHWC.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli/agent-tasks.ts"],"sourcesContent":["/**\n * CLI `task` subcommands — manage agent task definitions via daemon API.\n *\n * Routes through the daemon HTTP API for centralized processing.\n *\n * Subcommands:\n * task list [--source built-in|user] List all tasks\n * task show <name> Show a single task with phases\n * task create <name> --from <template> Copy a template task to user dir\n * task delete <name> Delete a user task\n * task run <name> [--instruction TEXT] Run a task via the agent\n */\n\nimport { connectToDaemon } from './shared.js';\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\n/** Column widths for the task list table. */\nconst COL_NAME_WIDTH = 22;\nconst COL_SOURCE_WIDTH = 10;\nconst COL_PHASES_WIDTH = 7;\n\n/** Marker displayed in the Default column for the default task. */\nconst DEFAULT_MARKER = '*';\n\n// ---------------------------------------------------------------------------\n// Types (local — mirrors the API response shape)\n// ---------------------------------------------------------------------------\n\ninterface PhaseRow {\n name: string;\n maxTurns: number;\n required: boolean;\n model?: string;\n tools: string[];\n}\n\ninterface TaskRow {\n name: string;\n displayName: string;\n description: string;\n agent: string;\n prompt: string;\n isDefault: boolean;\n source: string;\n isBuiltin: boolean;\n phases?: PhaseRow[];\n model?: string;\n maxTurns?: number;\n}\n\n// ---------------------------------------------------------------------------\n// Formatting helpers\n// ---------------------------------------------------------------------------\n\nfunction padRight(s: string, width: number): string {\n return s.length >= width ? s : s + ' '.repeat(width - s.length);\n}\n\nfunction printTaskTable(tasks: TaskRow[]): void {\n const header =\n padRight('Name', COL_NAME_WIDTH) +\n padRight('Source', COL_SOURCE_WIDTH) +\n padRight('Phases', COL_PHASES_WIDTH) +\n 'Default';\n console.log(header);\n console.log('-'.repeat(header.length));\n\n for (const t of tasks) {\n const phaseCount = t.phases?.length ?? 0;\n const row =\n padRight(t.name, COL_NAME_WIDTH) +\n padRight(t.source, COL_SOURCE_WIDTH) +\n padRight(String(phaseCount), COL_PHASES_WIDTH) +\n (t.isDefault ? DEFAULT_MARKER : '');\n console.log(row);\n }\n}\n\nfunction printTaskDetail(task: TaskRow): void {\n console.log(`Name: ${task.name}`);\n console.log(`Display: ${task.displayName}`);\n console.log(`Description: ${task.description}`);\n console.log(`Agent: ${task.agent}`);\n console.log(`Source: ${task.source}`);\n console.log(`Default: ${task.isDefault ? 'yes' : 'no'}`);\n if (task.model) console.log(`Model: ${task.model}`);\n if (task.maxTurns !== undefined) console.log(`Max turns: ${task.maxTurns}`);\n console.log(`Prompt: ${task.prompt}`);\n\n const phases = task.phases ?? [];\n if (phases.length > 0) {\n console.log(`\\nPhases (${phases.length}):`);\n for (let i = 0; i < phases.length; i++) {\n const p = phases[i];\n const req = p.required ? 'required' : 'optional';\n const model = p.model ? ` [${p.model}]` : '';\n console.log(` ${i + 1}. ${p.name} — ${p.maxTurns} turns, ${req}${model}`);\n if (p.tools.length > 0) {\n console.log(` tools: ${p.tools.join(', ')}`);\n }\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Subcommand handlers\n// ---------------------------------------------------------------------------\n\nasync function listTasks(args: string[], vaultDir: string): Promise<void> {\n const source = args.find((_, i) => args[i - 1] === '--source');\n const endpoint = source\n ? `/api/agent/tasks?source=${encodeURIComponent(source)}`\n : '/api/agent/tasks';\n\n const client = await connectToDaemon(vaultDir);\n const result = await client.get(endpoint);\n\n if (!result.ok || !result.data) {\n console.error('Failed to fetch tasks from daemon');\n process.exit(1);\n }\n\n const tasks = result.data as TaskRow[];\n if (tasks.length === 0) {\n console.log('No tasks found');\n return;\n }\n\n printTaskTable(tasks);\n}\n\nasync function showTask(args: string[], vaultDir: string): Promise<void> {\n const name = args[0];\n if (!name) {\n console.error('Usage: myco task show <name>');\n process.exit(1);\n }\n\n const client = await connectToDaemon(vaultDir);\n const result = await client.get(`/api/agent/tasks/${encodeURIComponent(name)}`);\n\n if (!result.ok || !result.data) {\n console.error(`Task not found: ${name}`);\n process.exit(1);\n }\n\n printTaskDetail(result.data as TaskRow);\n}\n\nasync function createTask(args: string[], vaultDir: string): Promise<void> {\n const name = args[0];\n const from = args.find((_, i) => args[i - 1] === '--from');\n\n if (!name || !from) {\n console.error('Usage: myco task create <name> --from <template>');\n process.exit(1);\n }\n\n const client = await connectToDaemon(vaultDir);\n const result = await client.post(`/api/agent/tasks/${encodeURIComponent(from)}/copy`, { name });\n\n if (!result.ok) {\n console.error(`Failed to create task '${name}' from template '${from}'`);\n if (result.data?.error) {\n console.error(` ${result.data.error}`);\n }\n process.exit(1);\n }\n\n console.log(`Task '${name}' created from '${from}'`);\n}\n\nasync function deleteTask(args: string[], vaultDir: string): Promise<void> {\n const name = args[0];\n if (!name) {\n console.error('Usage: myco task delete <name>');\n process.exit(1);\n }\n\n const client = await connectToDaemon(vaultDir);\n const result = await client.delete(`/api/agent/tasks/${encodeURIComponent(name)}`);\n\n if (!result.ok) {\n const errCode = result.data?.error as string | undefined;\n if (errCode === 'cannot_delete_builtin') {\n console.error(`Cannot delete built-in task: ${name}`);\n } else if (errCode === 'task_not_found') {\n console.error(`Task not found: ${name}`);\n } else {\n console.error(`Failed to delete task: ${name}`);\n }\n process.exit(1);\n }\n\n console.log(`Task '${name}' deleted`);\n}\n\nasync function runTask(args: string[], vaultDir: string): Promise<void> {\n const name = args[0];\n const instruction = args.find((_, i) => args[i - 1] === '--instruction');\n\n if (!name) {\n console.error('Usage: myco task run <name> [--instruction TEXT]');\n process.exit(1);\n }\n\n const client = await connectToDaemon(vaultDir);\n console.log('Starting agent...');\n const result = await client.post('/api/agent/run', { task: name, instruction });\n\n if (!result.ok) {\n console.error('Failed to start agent run');\n process.exit(1);\n }\n\n console.log('Agent run dispatched to daemon');\n if (result.data?.message) {\n console.log(` ${result.data.message}`);\n }\n}\n\n// ---------------------------------------------------------------------------\n// Dispatch\n// ---------------------------------------------------------------------------\n\nconst TASK_USAGE = `Usage: myco task <subcommand> [args]\n\nSubcommands:\n list [--source built-in|user] List all tasks\n show <name> Show task details and phases\n create <name> --from <template> Copy a task template to your user dir\n delete <name> Delete a user task\n run <name> [--instruction TEXT] Run a task via the agent\n`;\n\nexport async function run(args: string[], vaultDir: string): Promise<void> {\n const subcommand = args[0];\n const subArgs = args.slice(1);\n\n switch (subcommand) {\n case 'list': return listTasks(subArgs, vaultDir);\n case 'show': return showTask(subArgs, vaultDir);\n case 'create': return createTask(subArgs, vaultDir);\n case 'delete': return deleteTask(subArgs, vaultDir);\n case 'run': return runTask(subArgs, vaultDir);\n default:\n if (subcommand) {\n console.error(`Unknown task subcommand: ${subcommand}`);\n }\n process.stdout.write(TASK_USAGE);\n if (subcommand) process.exit(1);\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/cli/agent-tasks.ts"],"sourcesContent":["/**\n * CLI `task` subcommands — manage agent task definitions via daemon API.\n *\n * Routes through the daemon HTTP API for centralized processing.\n *\n * Subcommands:\n * task list [--source built-in|user] List all tasks\n * task show <name> Show a single task with phases\n * task create <name> --from <template> Copy a template task to user dir\n * task delete <name> Delete a user task\n * task run <name> [--instruction TEXT] Run a task via the agent\n */\n\nimport { connectToDaemon } from './shared.js';\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\n/** Column widths for the task list table. */\nconst COL_NAME_WIDTH = 22;\nconst COL_SOURCE_WIDTH = 10;\nconst COL_PHASES_WIDTH = 7;\n\n/** Marker displayed in the Default column for the default task. */\nconst DEFAULT_MARKER = '*';\n\n// ---------------------------------------------------------------------------\n// Types (local — mirrors the API response shape)\n// ---------------------------------------------------------------------------\n\ninterface PhaseRow {\n name: string;\n maxTurns: number;\n required: boolean;\n model?: string;\n tools: string[];\n}\n\ninterface TaskRow {\n name: string;\n displayName: string;\n description: string;\n agent: string;\n prompt: string;\n isDefault: boolean;\n source: string;\n isBuiltin: boolean;\n phases?: PhaseRow[];\n model?: string;\n maxTurns?: number;\n}\n\n// ---------------------------------------------------------------------------\n// Formatting helpers\n// ---------------------------------------------------------------------------\n\nfunction padRight(s: string, width: number): string {\n return s.length >= width ? s : s + ' '.repeat(width - s.length);\n}\n\nfunction printTaskTable(tasks: TaskRow[]): void {\n const header =\n padRight('Name', COL_NAME_WIDTH) +\n padRight('Source', COL_SOURCE_WIDTH) +\n padRight('Phases', COL_PHASES_WIDTH) +\n 'Default';\n console.log(header);\n console.log('-'.repeat(header.length));\n\n for (const t of tasks) {\n const phaseCount = t.phases?.length ?? 0;\n const row =\n padRight(t.name, COL_NAME_WIDTH) +\n padRight(t.source, COL_SOURCE_WIDTH) +\n padRight(String(phaseCount), COL_PHASES_WIDTH) +\n (t.isDefault ? DEFAULT_MARKER : '');\n console.log(row);\n }\n}\n\nfunction printTaskDetail(task: TaskRow): void {\n console.log(`Name: ${task.name}`);\n console.log(`Display: ${task.displayName}`);\n console.log(`Description: ${task.description}`);\n console.log(`Agent: ${task.agent}`);\n console.log(`Source: ${task.source}`);\n console.log(`Default: ${task.isDefault ? 'yes' : 'no'}`);\n if (task.model) console.log(`Model: ${task.model}`);\n if (task.maxTurns !== undefined) console.log(`Max turns: ${task.maxTurns}`);\n console.log(`Prompt: ${task.prompt}`);\n\n const phases = task.phases ?? [];\n if (phases.length > 0) {\n console.log(`\\nPhases (${phases.length}):`);\n for (let i = 0; i < phases.length; i++) {\n const p = phases[i];\n const req = p.required ? 'required' : 'optional';\n const model = p.model ? ` [${p.model}]` : '';\n console.log(` ${i + 1}. ${p.name} — ${p.maxTurns} turns, ${req}${model}`);\n if (p.tools.length > 0) {\n console.log(` tools: ${p.tools.join(', ')}`);\n }\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Subcommand handlers\n// ---------------------------------------------------------------------------\n\nasync function listTasks(args: string[], vaultDir: string): Promise<void> {\n const source = args.find((_, i) => args[i - 1] === '--source');\n const endpoint = source\n ? `/api/agent/tasks?source=${encodeURIComponent(source)}`\n : '/api/agent/tasks';\n\n const client = await connectToDaemon(vaultDir);\n const result = await client.get(endpoint);\n\n if (!result.ok || !result.data) {\n console.error('Failed to fetch tasks from daemon');\n process.exit(1);\n }\n\n const tasks = result.data as TaskRow[];\n if (tasks.length === 0) {\n console.log('No tasks found');\n return;\n }\n\n printTaskTable(tasks);\n}\n\nasync function showTask(args: string[], vaultDir: string): Promise<void> {\n const name = args[0];\n if (!name) {\n console.error('Usage: myco task show <name>');\n process.exit(1);\n }\n\n const client = await connectToDaemon(vaultDir);\n const result = await client.get(`/api/agent/tasks/${encodeURIComponent(name)}`);\n\n if (!result.ok || !result.data) {\n console.error(`Task not found: ${name}`);\n process.exit(1);\n }\n\n printTaskDetail(result.data as TaskRow);\n}\n\nasync function createTask(args: string[], vaultDir: string): Promise<void> {\n const name = args[0];\n const from = args.find((_, i) => args[i - 1] === '--from');\n\n if (!name || !from) {\n console.error('Usage: myco task create <name> --from <template>');\n process.exit(1);\n }\n\n const client = await connectToDaemon(vaultDir);\n const result = await client.post(`/api/agent/tasks/${encodeURIComponent(from)}/copy`, { name });\n\n if (!result.ok) {\n console.error(`Failed to create task '${name}' from template '${from}'`);\n if (result.data?.error) {\n console.error(` ${result.data.error}`);\n }\n process.exit(1);\n }\n\n console.log(`Task '${name}' created from '${from}'`);\n}\n\nasync function deleteTask(args: string[], vaultDir: string): Promise<void> {\n const name = args[0];\n if (!name) {\n console.error('Usage: myco task delete <name>');\n process.exit(1);\n }\n\n const client = await connectToDaemon(vaultDir);\n const result = await client.delete(`/api/agent/tasks/${encodeURIComponent(name)}`);\n\n if (!result.ok) {\n const errCode = result.data?.error as string | undefined;\n if (errCode === 'cannot_delete_builtin') {\n console.error(`Cannot delete built-in task: ${name}`);\n } else if (errCode === 'task_not_found') {\n console.error(`Task not found: ${name}`);\n } else {\n console.error(`Failed to delete task: ${name}`);\n }\n process.exit(1);\n }\n\n console.log(`Task '${name}' deleted`);\n}\n\nasync function runTask(args: string[], vaultDir: string): Promise<void> {\n const name = args[0];\n const instruction = args.find((_, i) => args[i - 1] === '--instruction');\n\n if (!name) {\n console.error('Usage: myco task run <name> [--instruction TEXT]');\n process.exit(1);\n }\n\n const client = await connectToDaemon(vaultDir);\n console.log('Starting agent...');\n const result = await client.post('/api/agent/run', { task: name, instruction });\n\n if (!result.ok) {\n console.error('Failed to start agent run');\n process.exit(1);\n }\n\n console.log('Agent run dispatched to daemon');\n if (result.data?.message) {\n console.log(` ${result.data.message}`);\n }\n}\n\n// ---------------------------------------------------------------------------\n// Dispatch\n// ---------------------------------------------------------------------------\n\nconst TASK_USAGE = `Usage: myco task <subcommand> [args]\n\nSubcommands:\n list [--source built-in|user] List all tasks\n show <name> Show task details and phases\n create <name> --from <template> Copy a task template to your user dir\n delete <name> Delete a user task\n run <name> [--instruction TEXT] Run a task via the agent\n`;\n\nexport async function run(args: string[], vaultDir: string): Promise<void> {\n const subcommand = args[0];\n const subArgs = args.slice(1);\n\n switch (subcommand) {\n case 'list': return listTasks(subArgs, vaultDir);\n case 'show': return showTask(subArgs, vaultDir);\n case 'create': return createTask(subArgs, vaultDir);\n case 'delete': return deleteTask(subArgs, vaultDir);\n case 'run': return runTask(subArgs, vaultDir);\n default:\n if (subcommand) {\n console.error(`Unknown task subcommand: ${subcommand}`);\n }\n process.stdout.write(TASK_USAGE);\n if (subcommand) process.exit(1);\n }\n}\n"],"mappings":"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","names":[]}
@@ -1,13 +1,11 @@
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
- import {
9
- DEFAULT_MACHINE_ID
10
- } from "./chunk-PIRWYDOH.js";
11
9
 
12
10
  // src/db/queries/resolution-events.ts
13
11
  var DEFAULT_LIST_LIMIT = 100;
@@ -34,7 +32,7 @@ function toResolutionEventRow(row) {
34
32
  reason: row.reason ?? null,
35
33
  session_id: row.session_id ?? null,
36
34
  created_at: row.created_at,
37
- machine_id: row.machine_id ?? DEFAULT_MACHINE_ID,
35
+ machine_id: row.machine_id ?? "local",
38
36
  synced_at: row.synced_at ?? null
39
37
  };
40
38
  }
@@ -53,7 +51,7 @@ function insertResolutionEvent(data) {
53
51
  data.reason ?? null,
54
52
  data.session_id ?? null,
55
53
  data.created_at,
56
- data.machine_id ?? DEFAULT_MACHINE_ID
54
+ data.machine_id ?? getTeamMachineId()
57
55
  );
58
56
  const row = toResolutionEventRow(
59
57
  db.prepare(`SELECT ${SELECT_COLUMNS} FROM resolution_events WHERE id = ?`).get(data.id)
@@ -90,4 +88,4 @@ export {
90
88
  insertResolutionEvent,
91
89
  listResolutionEvents
92
90
  };
93
- //# sourceMappingURL=chunk-LGPBVBFY.js.map
91
+ //# sourceMappingURL=chunk-2PWO3WPS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/db/queries/resolution-events.ts"],"sourcesContent":["/**\n * Resolution event CRUD query helpers.\n *\n * All functions obtain the SQLite instance internally via `getDatabase()`.\n * Queries use positional `?` placeholders throughout (better-sqlite3).\n */\n\nimport { getDatabase } from '@myco/db/client.js';\nimport { getTeamMachineId } from '@myco/daemon/team-context.js';\nimport { syncRow } from '@myco/db/queries/team-outbox.js';\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\n/** Default number of events returned by listResolutionEvents when no limit given. */\nconst DEFAULT_LIST_LIMIT = 100;\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** Fields required (or optional) when inserting a resolution event. */\nexport interface ResolutionEventInsert {\n id: string;\n agent_id: string;\n spore_id: string;\n action: string;\n created_at: number;\n new_spore_id?: string | null;\n reason?: string | null;\n session_id?: string | null;\n machine_id?: string;\n}\n\n/** Row shape returned from resolution_events queries (all columns). */\nexport interface ResolutionEventRow {\n id: string;\n agent_id: string;\n spore_id: string;\n action: string;\n new_spore_id: string | null;\n reason: string | null;\n session_id: string | null;\n created_at: number;\n machine_id: string;\n synced_at: number | null;\n}\n\n/** Filter options for `listResolutionEvents`. */\nexport interface ListResolutionEventsOptions {\n agent_id?: string;\n spore_id?: string;\n limit?: number;\n}\n\n// ---------------------------------------------------------------------------\n// Column list\n// ---------------------------------------------------------------------------\n\nconst EVENT_COLUMNS = [\n 'id',\n 'agent_id',\n 'spore_id',\n 'action',\n 'new_spore_id',\n 'reason',\n 'session_id',\n 'created_at',\n 'machine_id',\n 'synced_at',\n] as const;\n\nconst SELECT_COLUMNS = EVENT_COLUMNS.join(', ');\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Normalize a SQLite result row into a typed ResolutionEventRow. */\nfunction toResolutionEventRow(row: Record<string, unknown>): ResolutionEventRow {\n return {\n id: row.id as string,\n agent_id: row.agent_id as string,\n spore_id: row.spore_id as string,\n action: row.action as string,\n new_spore_id: (row.new_spore_id as string) ?? null,\n reason: (row.reason as string) ?? null,\n session_id: (row.session_id as string) ?? null,\n created_at: row.created_at as number,\n machine_id: (row.machine_id as string) ?? 'local',\n synced_at: (row.synced_at as number) ?? null,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * Insert a new resolution event.\n */\nexport function insertResolutionEvent(\n data: ResolutionEventInsert,\n): ResolutionEventRow {\n const db = getDatabase();\n\n db.prepare(\n `INSERT INTO resolution_events (\n id, agent_id, spore_id, action, new_spore_id, reason, session_id, created_at, machine_id\n ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,\n ).run(\n data.id,\n data.agent_id,\n data.spore_id,\n data.action,\n data.new_spore_id ?? null,\n data.reason ?? null,\n data.session_id ?? null,\n data.created_at,\n data.machine_id ?? getTeamMachineId(),\n );\n\n const row = toResolutionEventRow(\n db.prepare(`SELECT ${SELECT_COLUMNS} FROM resolution_events WHERE id = ?`).get(data.id) as Record<string, unknown>,\n );\n\n syncRow('resolution_events', row);\n\n return row;\n}\n\n/**\n * List resolution events with optional filters, ordered by created_at DESC.\n */\nexport function listResolutionEvents(\n options: ListResolutionEventsOptions = {},\n): ResolutionEventRow[] {\n const db = getDatabase();\n\n const conditions: string[] = [];\n const params: unknown[] = [];\n\n if (options.agent_id !== undefined) {\n conditions.push(`agent_id = ?`);\n params.push(options.agent_id);\n }\n\n if (options.spore_id !== undefined) {\n conditions.push(`spore_id = ?`);\n params.push(options.spore_id);\n }\n\n const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';\n const limit = options.limit ?? DEFAULT_LIST_LIMIT;\n\n params.push(limit);\n\n const rows = db.prepare(\n `SELECT ${SELECT_COLUMNS}\n FROM resolution_events\n ${where}\n ORDER BY created_at DESC\n LIMIT ?`,\n ).all(...params) as Record<string, unknown>[];\n\n return rows.map(toResolutionEventRow);\n}\n"],"mappings":";;;;;;;;;;AAgBA,IAAM,qBAAqB;AA4C3B,IAAM,gBAAgB;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,iBAAiB,cAAc,KAAK,IAAI;AAO9C,SAAS,qBAAqB,KAAkD;AAC9E,SAAO;AAAA,IACL,IAAI,IAAI;AAAA,IACR,UAAU,IAAI;AAAA,IACd,UAAU,IAAI;AAAA,IACd,QAAQ,IAAI;AAAA,IACZ,cAAe,IAAI,gBAA2B;AAAA,IAC9C,QAAS,IAAI,UAAqB;AAAA,IAClC,YAAa,IAAI,cAAyB;AAAA,IAC1C,YAAY,IAAI;AAAA,IAChB,YAAa,IAAI,cAAyB;AAAA,IAC1C,WAAY,IAAI,aAAwB;AAAA,EAC1C;AACF;AASO,SAAS,sBACd,MACoB;AACpB,QAAM,KAAK,YAAY;AAEvB,KAAG;AAAA,IACD;AAAA;AAAA;AAAA,EAGF,EAAE;AAAA,IACA,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK,gBAAgB;AAAA,IACrB,KAAK,UAAU;AAAA,IACf,KAAK,cAAc;AAAA,IACnB,KAAK;AAAA,IACL,KAAK,cAAc,iBAAiB;AAAA,EACtC;AAEA,QAAM,MAAM;AAAA,IACV,GAAG,QAAQ,UAAU,cAAc,sCAAsC,EAAE,IAAI,KAAK,EAAE;AAAA,EACxF;AAEA,UAAQ,qBAAqB,GAAG;AAEhC,SAAO;AACT;AAKO,SAAS,qBACd,UAAuC,CAAC,GAClB;AACtB,QAAM,KAAK,YAAY;AAEvB,QAAM,aAAuB,CAAC;AAC9B,QAAM,SAAoB,CAAC;AAE3B,MAAI,QAAQ,aAAa,QAAW;AAClC,eAAW,KAAK,cAAc;AAC9B,WAAO,KAAK,QAAQ,QAAQ;AAAA,EAC9B;AAEA,MAAI,QAAQ,aAAa,QAAW;AAClC,eAAW,KAAK,cAAc;AAC9B,WAAO,KAAK,QAAQ,QAAQ;AAAA,EAC9B;AAEA,QAAM,QAAQ,WAAW,SAAS,IAAI,SAAS,WAAW,KAAK,OAAO,CAAC,KAAK;AAC5E,QAAM,QAAQ,QAAQ,SAAS;AAE/B,SAAO,KAAK,KAAK;AAEjB,QAAM,OAAO,GAAG;AAAA,IACd,UAAU,cAAc;AAAA;AAAA,OAErB,KAAK;AAAA;AAAA;AAAA,EAGV,EAAE,IAAI,GAAG,MAAM;AAEf,SAAO,KAAK,IAAI,oBAAoB;AACtC;","names":[]}