@goondocks/myco 0.20.2 → 0.21.1

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 (216) hide show
  1. package/bin/myco-run +68 -7
  2. package/dist/agent-eval-YK2VP2S4.js +356 -0
  3. package/dist/agent-eval-YK2VP2S4.js.map +1 -0
  4. package/dist/{agent-run-X25Q2A6T.js → agent-run-GEJBD2YD.js} +10 -8
  5. package/dist/{agent-run-X25Q2A6T.js.map → agent-run-GEJBD2YD.js.map} +1 -1
  6. package/dist/{agent-tasks-7B6OFERB.js → agent-tasks-5XSRGTRX.js} +10 -8
  7. package/dist/{agent-tasks-7B6OFERB.js.map → agent-tasks-5XSRGTRX.js.map} +1 -1
  8. package/dist/{chunk-OD4AA7PV.js → chunk-53RPGOEN.js} +56 -8
  9. package/dist/chunk-53RPGOEN.js.map +1 -0
  10. package/dist/chunk-54SXG5HF.js +26 -0
  11. package/dist/chunk-54SXG5HF.js.map +1 -0
  12. package/dist/{chunk-XATDZX7U.js → chunk-6ALVMIB4.js} +19 -5
  13. package/dist/{chunk-XATDZX7U.js.map → chunk-6ALVMIB4.js.map} +1 -1
  14. package/dist/{chunk-FLLBJLHM.js → chunk-6C6QZ4PM.js} +9 -5
  15. package/dist/chunk-6C6QZ4PM.js.map +1 -0
  16. package/dist/{chunk-CCRGY3QW.js → chunk-AUIXX33A.js} +24 -95
  17. package/dist/chunk-AUIXX33A.js.map +1 -0
  18. package/dist/chunk-CISWUP5W.js +101 -0
  19. package/dist/chunk-CISWUP5W.js.map +1 -0
  20. package/dist/{chunk-MYOZLMB2.js → chunk-DTWUHHFI.js} +576 -20
  21. package/dist/chunk-DTWUHHFI.js.map +1 -0
  22. package/dist/chunk-EEOJWLMP.js +582 -0
  23. package/dist/chunk-EEOJWLMP.js.map +1 -0
  24. package/dist/{chunk-XG5RRUYF.js → chunk-ENZR5NG7.js} +2 -2
  25. package/dist/{chunk-6RFZWV4R.js → chunk-FCJ5JV54.js} +1 -1
  26. package/dist/{chunk-6RFZWV4R.js.map → chunk-FCJ5JV54.js.map} +1 -1
  27. package/dist/{chunk-US4LNCAT.js → chunk-IPPMYQ2Y.js} +5 -1
  28. package/dist/chunk-IPPMYQ2Y.js.map +1 -0
  29. package/dist/{chunk-VVNL26WX.js → chunk-KTTSXYEK.js} +22 -10
  30. package/dist/chunk-KTTSXYEK.js.map +1 -0
  31. package/dist/chunk-LQIPXVDH.js +17 -0
  32. package/dist/chunk-LQIPXVDH.js.map +1 -0
  33. package/dist/{chunk-DCSGJ7W4.js → chunk-N2DGFACQ.js} +3 -3
  34. package/dist/chunk-N7Z3LUEZ.js +858 -0
  35. package/dist/chunk-N7Z3LUEZ.js.map +1 -0
  36. package/dist/{chunk-2PDWCDKY.js → chunk-NFO7BRCO.js} +10 -7
  37. package/dist/{chunk-2PDWCDKY.js.map → chunk-NFO7BRCO.js.map} +1 -1
  38. package/dist/{chunk-Q36VMZST.js → chunk-OTQH5KZW.js} +89 -38
  39. package/dist/chunk-OTQH5KZW.js.map +1 -0
  40. package/dist/chunk-OUJSQSKE.js +113 -0
  41. package/dist/chunk-OUJSQSKE.js.map +1 -0
  42. package/dist/chunk-OZ3FBAK5.js +50 -0
  43. package/dist/chunk-OZ3FBAK5.js.map +1 -0
  44. package/dist/chunk-QATYARI5.js +408 -0
  45. package/dist/chunk-QATYARI5.js.map +1 -0
  46. package/dist/{chunk-KESLPBKV.js → chunk-QDLVIW2O.js} +4 -4
  47. package/dist/{chunk-5XIVBO25.js → chunk-QLLBJEM7.js} +6 -2
  48. package/dist/chunk-QLLBJEM7.js.map +1 -0
  49. package/dist/{chunk-EVDQKYCG.js → chunk-RQSJLWP4.js} +13 -2
  50. package/dist/chunk-RQSJLWP4.js.map +1 -0
  51. package/dist/{chunk-BPRIYNLE.js → chunk-TKAJ3JVF.js} +3 -3
  52. package/dist/chunk-TSM6VESW.js +25 -0
  53. package/dist/chunk-TSM6VESW.js.map +1 -0
  54. package/dist/{chunk-6X2ERTQV.js → chunk-USVFEWYL.js} +6 -4
  55. package/dist/{chunk-6X2ERTQV.js.map → chunk-USVFEWYL.js.map} +1 -1
  56. package/dist/{chunk-JZGN33AY.js → chunk-VRI56337.js} +4 -4
  57. package/dist/chunk-X2IRGXGF.js +14103 -0
  58. package/dist/chunk-X2IRGXGF.js.map +1 -0
  59. package/dist/{chunk-FMRZ26U5.js → chunk-X3IGT5RV.js} +5 -2
  60. package/dist/{chunk-FMRZ26U5.js.map → chunk-X3IGT5RV.js.map} +1 -1
  61. package/dist/{chunk-KHT24OWC.js → chunk-YDUOSRGD.js} +8 -94
  62. package/dist/{chunk-KHT24OWC.js.map → chunk-YDUOSRGD.js.map} +1 -1
  63. package/dist/{chunk-NGROSFOH.js → chunk-Z66IT5KL.js} +14 -9
  64. package/dist/chunk-Z66IT5KL.js.map +1 -0
  65. package/dist/{cli-GGPWH4UO.js → cli-HSLIG7EX.js} +50 -43
  66. package/dist/cli-HSLIG7EX.js.map +1 -0
  67. package/dist/{client-YXQUTXVZ.js → client-Z43DNLJH.js} +4 -4
  68. package/dist/{config-OMCYHG2S.js → config-VC4ACP42.js} +6 -4
  69. package/dist/{config-OMCYHG2S.js.map → config-VC4ACP42.js.map} +1 -1
  70. package/dist/{detect-PXNM6TA7.js → detect-7NUD5B5R.js} +2 -2
  71. package/dist/{detect-providers-5KOPZ7J2.js → detect-providers-ILLQZROY.js} +4 -4
  72. package/dist/{doctor-5JXJ36KA.js → doctor-HJCWHAU4.js} +49 -16
  73. package/dist/doctor-HJCWHAU4.js.map +1 -0
  74. package/dist/executor-DO6QFC6G.js +45 -0
  75. package/dist/{init-LMYOVZAV.js → init-4KVK7W2E.js} +16 -14
  76. package/dist/{init-LMYOVZAV.js.map → init-4KVK7W2E.js.map} +1 -1
  77. package/dist/{installer-FS257JRZ.js → installer-N4UTEACX.js} +6 -4
  78. package/dist/{llm-TH4NLIRM.js → llm-AGVEF5XD.js} +5 -4
  79. package/dist/{loader-CQYTFHEW.js → loader-LX7TFRM6.js} +5 -3
  80. package/dist/{loader-NOMBJUPW.js → loader-UDNUMEDA.js} +5 -3
  81. package/dist/{main-YTBVRTBI.js → main-4J4QZZTZ.js} +2518 -656
  82. package/dist/main-4J4QZZTZ.js.map +1 -0
  83. package/dist/{open-HG2DX6RN.js → open-7TXJQM3H.js} +10 -8
  84. package/dist/{open-HG2DX6RN.js.map → open-7TXJQM3H.js.map} +1 -1
  85. package/dist/{post-compact-JSECI44W.js → post-compact-7AEFVCZS.js} +8 -8
  86. package/dist/{post-tool-use-POGPTJBA.js → post-tool-use-TZINWWDH.js} +11 -9
  87. package/dist/post-tool-use-TZINWWDH.js.map +1 -0
  88. package/dist/{post-tool-use-failure-OT7BFWQW.js → post-tool-use-failure-TCFEU2GI.js} +8 -8
  89. package/dist/{pre-compact-OXVODKH4.js → pre-compact-LO2VZCGR.js} +8 -8
  90. package/dist/{provider-check-43LAMSMH.js → provider-check-ZEV5P4KM.js} +4 -4
  91. package/dist/{registry-U4CHXK6R.js → registry-F3THYC5M.js} +6 -4
  92. package/dist/{remove-N7ZPELFU.js → remove-F77AAALE.js} +12 -10
  93. package/dist/{remove-N7ZPELFU.js.map → remove-F77AAALE.js.map} +1 -1
  94. package/dist/{restart-ADG5GBTB.js → restart-UEFDPMLT.js} +11 -9
  95. package/dist/{restart-ADG5GBTB.js.map → restart-UEFDPMLT.js.map} +1 -1
  96. package/dist/{search-AHZEUNRR.js → search-NHNVUAQQ.js} +11 -9
  97. package/dist/{search-AHZEUNRR.js.map → search-NHNVUAQQ.js.map} +1 -1
  98. package/dist/{server-AGVYZVP5.js → server-AZJSTQEK.js} +369 -270
  99. package/dist/server-AZJSTQEK.js.map +1 -0
  100. package/dist/{session-6IU4AXYP.js → session-3HLC5KOD.js} +11 -9
  101. package/dist/{session-6IU4AXYP.js.map → session-3HLC5KOD.js.map} +1 -1
  102. package/dist/{session-end-FT27DWYZ.js → session-end-FS46UARX.js} +7 -7
  103. package/dist/session-start-46KPFV2H.js +134 -0
  104. package/dist/session-start-46KPFV2H.js.map +1 -0
  105. package/dist/{setup-llm-77MP4I2G.js → setup-llm-JMWSNQ2C.js} +11 -9
  106. package/dist/{setup-llm-77MP4I2G.js.map → setup-llm-JMWSNQ2C.js.map} +1 -1
  107. package/dist/src/agent/definitions/agent.yaml +9 -5
  108. package/dist/src/agent/definitions/tasks/cortex-instructions.yaml +115 -0
  109. package/dist/src/agent/definitions/tasks/cortex-prompt-builder.yaml +67 -0
  110. package/dist/src/agent/definitions/tasks/digest-only.yaml +1 -1
  111. package/dist/src/agent/definitions/tasks/extract-only.yaml +1 -1
  112. package/dist/src/agent/definitions/tasks/review-session.yaml +10 -39
  113. package/dist/src/agent/definitions/tasks/skill-evolve.yaml +181 -25
  114. package/dist/src/agent/definitions/tasks/skill-generate.yaml +21 -7
  115. package/dist/src/agent/definitions/tasks/skill-survey.yaml +2 -6
  116. package/dist/src/agent/definitions/tasks/supersession-sweep.yaml +1 -1
  117. package/dist/src/agent/definitions/tasks/title-summary.yaml +12 -19
  118. package/dist/src/agent/definitions/tasks/{full-intelligence.yaml → vault-evolve.yaml} +74 -129
  119. package/dist/src/agent/definitions/tasks/vault-seed.yaml +370 -0
  120. package/dist/src/agent/prompts/agent.md +12 -38
  121. package/dist/src/cli.js +1 -1
  122. package/dist/src/daemon/main.js +1 -1
  123. package/dist/src/hooks/post-tool-use.js +1 -1
  124. package/dist/src/hooks/session-end.js +1 -1
  125. package/dist/src/hooks/session-start.js +1 -1
  126. package/dist/src/hooks/stop.js +1 -1
  127. package/dist/src/hooks/user-prompt-submit.js +1 -1
  128. package/dist/src/mcp/server.js +1 -1
  129. package/dist/src/symbionts/manifests/claude-code.yaml +4 -0
  130. package/dist/src/symbionts/manifests/opencode.yaml +7 -0
  131. package/dist/src/symbionts/manifests/pi.yaml +22 -0
  132. package/dist/src/symbionts/templates/agents-starter.md +1 -1
  133. package/dist/src/symbionts/templates/pi/package.json +6 -0
  134. package/dist/src/symbionts/templates/pi/plugin.ts +559 -0
  135. package/dist/{stats-NVPWOYTE.js → stats-MKMETHMA.js} +11 -9
  136. package/dist/{stats-NVPWOYTE.js.map → stats-MKMETHMA.js.map} +1 -1
  137. package/dist/{stop-ZPIKVLH4.js → stop-OUEX6KA4.js} +7 -7
  138. package/dist/{stop-failure-2PX67YJC.js → stop-failure-2BWVNZEG.js} +8 -8
  139. package/dist/{subagent-start-UUE6EHQD.js → subagent-start-J4VV6DEE.js} +8 -8
  140. package/dist/{subagent-stop-KQWWWPE6.js → subagent-stop-JMLVEPIA.js} +8 -8
  141. package/dist/{task-completed-WMHOFQ7B.js → task-completed-65CHMMKA.js} +8 -8
  142. package/dist/{team-LRZ6GTQK.js → team-U2LDKIS4.js} +7 -5
  143. package/dist/{turns-YFNI5CQC.js → turns-HU2CTZAP.js} +2 -2
  144. package/dist/ui/assets/index-BUGor9dk.js +842 -0
  145. package/dist/ui/assets/index-_OP4ifzH.css +1 -0
  146. package/dist/ui/index.html +2 -2
  147. package/dist/{update-O6V4RC4W.js → update-ZSHVXWSQ.js} +12 -10
  148. package/dist/{update-O6V4RC4W.js.map → update-ZSHVXWSQ.js.map} +1 -1
  149. package/dist/{user-prompt-submit-N36KUPHI.js → user-prompt-submit-APMO6FVU.js} +10 -9
  150. package/dist/{user-prompt-submit-N36KUPHI.js.map → user-prompt-submit-APMO6FVU.js.map} +1 -1
  151. package/dist/{verify-LXPV7NYG.js → verify-R76ZFJSZ.js} +8 -5
  152. package/dist/{verify-LXPV7NYG.js.map → verify-R76ZFJSZ.js.map} +1 -1
  153. package/dist/{version-XMPPJQHR.js → version-TXPPS3L5.js} +2 -2
  154. package/dist/version-TXPPS3L5.js.map +1 -0
  155. package/package.json +3 -1
  156. package/skills/myco/SKILL.md +16 -1
  157. package/skills/myco/references/cli-usage.md +1 -1
  158. package/skills/myco-rules/SKILL.md +94 -0
  159. package/skills/{rules → myco-rules}/references/rules-bad-example.md +1 -1
  160. package/skills/{rules → myco-rules}/references/rules-good-example.md +1 -1
  161. package/dist/chunk-4YFKBL3F.js +0 -195
  162. package/dist/chunk-4YFKBL3F.js.map +0 -1
  163. package/dist/chunk-5XIVBO25.js.map +0 -1
  164. package/dist/chunk-CCRGY3QW.js.map +0 -1
  165. package/dist/chunk-CUDIZJY7.js +0 -36
  166. package/dist/chunk-CUDIZJY7.js.map +0 -1
  167. package/dist/chunk-EVDQKYCG.js.map +0 -1
  168. package/dist/chunk-FLLBJLHM.js.map +0 -1
  169. package/dist/chunk-MYOZLMB2.js.map +0 -1
  170. package/dist/chunk-NGROSFOH.js.map +0 -1
  171. package/dist/chunk-OD4AA7PV.js.map +0 -1
  172. package/dist/chunk-Q36VMZST.js.map +0 -1
  173. package/dist/chunk-US4LNCAT.js.map +0 -1
  174. package/dist/chunk-UYMFCYBF.js +0 -2326
  175. package/dist/chunk-UYMFCYBF.js.map +0 -1
  176. package/dist/chunk-VVNL26WX.js.map +0 -1
  177. package/dist/cli-GGPWH4UO.js.map +0 -1
  178. package/dist/doctor-5JXJ36KA.js.map +0 -1
  179. package/dist/executor-HWW2QNZQ.js +0 -2472
  180. package/dist/executor-HWW2QNZQ.js.map +0 -1
  181. package/dist/main-YTBVRTBI.js.map +0 -1
  182. package/dist/post-tool-use-POGPTJBA.js.map +0 -1
  183. package/dist/server-AGVYZVP5.js.map +0 -1
  184. package/dist/session-start-LAFICHII.js +0 -189
  185. package/dist/session-start-LAFICHII.js.map +0 -1
  186. package/dist/src/agent/definitions/tasks/graph-maintenance.yaml +0 -93
  187. package/dist/ui/assets/index-C2JuNtRB.css +0 -1
  188. package/dist/ui/assets/index-JLVaQKV2.js +0 -832
  189. package/skills/myco-curate/SKILL.md +0 -86
  190. package/skills/rules/SKILL.md +0 -214
  191. /package/dist/{chunk-XG5RRUYF.js.map → chunk-ENZR5NG7.js.map} +0 -0
  192. /package/dist/{chunk-DCSGJ7W4.js.map → chunk-N2DGFACQ.js.map} +0 -0
  193. /package/dist/{chunk-KESLPBKV.js.map → chunk-QDLVIW2O.js.map} +0 -0
  194. /package/dist/{chunk-BPRIYNLE.js.map → chunk-TKAJ3JVF.js.map} +0 -0
  195. /package/dist/{chunk-JZGN33AY.js.map → chunk-VRI56337.js.map} +0 -0
  196. /package/dist/{client-YXQUTXVZ.js.map → client-Z43DNLJH.js.map} +0 -0
  197. /package/dist/{detect-PXNM6TA7.js.map → detect-7NUD5B5R.js.map} +0 -0
  198. /package/dist/{detect-providers-5KOPZ7J2.js.map → detect-providers-ILLQZROY.js.map} +0 -0
  199. /package/dist/{installer-FS257JRZ.js.map → executor-DO6QFC6G.js.map} +0 -0
  200. /package/dist/{llm-TH4NLIRM.js.map → installer-N4UTEACX.js.map} +0 -0
  201. /package/dist/{loader-CQYTFHEW.js.map → llm-AGVEF5XD.js.map} +0 -0
  202. /package/dist/{loader-NOMBJUPW.js.map → loader-LX7TFRM6.js.map} +0 -0
  203. /package/dist/{provider-check-43LAMSMH.js.map → loader-UDNUMEDA.js.map} +0 -0
  204. /package/dist/{post-compact-JSECI44W.js.map → post-compact-7AEFVCZS.js.map} +0 -0
  205. /package/dist/{post-tool-use-failure-OT7BFWQW.js.map → post-tool-use-failure-TCFEU2GI.js.map} +0 -0
  206. /package/dist/{pre-compact-OXVODKH4.js.map → pre-compact-LO2VZCGR.js.map} +0 -0
  207. /package/dist/{registry-U4CHXK6R.js.map → provider-check-ZEV5P4KM.js.map} +0 -0
  208. /package/dist/{team-LRZ6GTQK.js.map → registry-F3THYC5M.js.map} +0 -0
  209. /package/dist/{session-end-FT27DWYZ.js.map → session-end-FS46UARX.js.map} +0 -0
  210. /package/dist/{stop-ZPIKVLH4.js.map → stop-OUEX6KA4.js.map} +0 -0
  211. /package/dist/{stop-failure-2PX67YJC.js.map → stop-failure-2BWVNZEG.js.map} +0 -0
  212. /package/dist/{subagent-start-UUE6EHQD.js.map → subagent-start-J4VV6DEE.js.map} +0 -0
  213. /package/dist/{subagent-stop-KQWWWPE6.js.map → subagent-stop-JMLVEPIA.js.map} +0 -0
  214. /package/dist/{task-completed-WMHOFQ7B.js.map → task-completed-65CHMMKA.js.map} +0 -0
  215. /package/dist/{turns-YFNI5CQC.js.map → team-U2LDKIS4.js.map} +0 -0
  216. /package/dist/{version-XMPPJQHR.js.map → turns-HU2CTZAP.js.map} +0 -0
@@ -1,20 +1,22 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
  import {
3
3
  initVaultDb
4
- } from "./chunk-KESLPBKV.js";
4
+ } from "./chunk-QDLVIW2O.js";
5
5
  import "./chunk-SAKJMNSR.js";
6
- import "./chunk-Q36VMZST.js";
7
- import "./chunk-FMRZ26U5.js";
6
+ import "./chunk-OTQH5KZW.js";
7
+ import "./chunk-X3IGT5RV.js";
8
8
  import {
9
9
  getSession,
10
10
  listSessions
11
- } from "./chunk-EVDQKYCG.js";
12
- import "./chunk-OD4AA7PV.js";
11
+ } from "./chunk-RQSJLWP4.js";
12
+ import "./chunk-53RPGOEN.js";
13
+ import "./chunk-OUJSQSKE.js";
14
+ import "./chunk-POEPHBQK.js";
13
15
  import "./chunk-MYX5NCRH.js";
14
- import "./chunk-VVNL26WX.js";
15
- import "./chunk-XG5RRUYF.js";
16
+ import "./chunk-KTTSXYEK.js";
17
+ import "./chunk-ENZR5NG7.js";
16
18
  import "./chunk-LPUQPDC2.js";
17
- import "./chunk-FLLBJLHM.js";
19
+ import "./chunk-6C6QZ4PM.js";
18
20
  import "./chunk-UUHLLQXO.js";
19
21
  import "./chunk-6LQIMRTC.js";
20
22
  import "./chunk-ODXLRR4U.js";
@@ -70,4 +72,4 @@ ${target.summary}`);
70
72
  export {
71
73
  run
72
74
  };
73
- //# sourceMappingURL=session-6IU4AXYP.js.map
75
+ //# sourceMappingURL=session-3HLC5KOD.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli/session.ts"],"sourcesContent":["/**\n * CLI: myco session — display session info via direct SQLite reads.\n *\n * Opens the database directly (WAL mode allows concurrent reads).\n * Does NOT require the daemon to be running.\n */\n\nimport { listSessions, getSession } from '@myco/db/queries/sessions.js';\nimport { initVaultDb } from './shared.js';\n\n// ---------------------------------------------------------------------------\n// Command\n// ---------------------------------------------------------------------------\n\nexport async function run(args: string[], vaultDir: string): Promise<void> {\n const idOrLatest = args[0];\n\n const cleanup = initVaultDb(vaultDir);\n try {\n const sessions = listSessions({ limit: 100 });\n if (sessions.length === 0) {\n console.log('No sessions found');\n return;\n }\n\n // Resolve target session ID\n let targetId: string;\n if (!idOrLatest || idOrLatest === 'latest') {\n targetId = sessions[0].id;\n } else {\n const match = sessions.find((s) => s.id.includes(idOrLatest));\n if (!match) {\n console.error(`Session not found: ${idOrLatest}`);\n console.log('Available:', sessions.map((s) => s.id.slice(0, 12)).join(', '));\n return;\n }\n targetId = match.id;\n }\n\n // Fetch full session detail\n const target = getSession(targetId);\n if (!target) {\n console.error(`Failed to fetch session: ${targetId}`);\n return;\n }\n\n console.log(`Session: ${target.id}`);\n console.log(`Status: ${target.status}`);\n if (target.title) console.log(`Title: ${target.title}`);\n if (target.branch) console.log(`Branch: ${target.branch}`);\n if (target.user) console.log(`User: ${target.user}`);\n console.log(`Started: ${new Date(target.started_at * 1000).toISOString()}`);\n if (target.ended_at) console.log(`Ended: ${new Date(target.ended_at * 1000).toISOString()}`);\n if (target.prompt_count) console.log(`Prompts: ${target.prompt_count}`);\n if (target.tool_count) console.log(`Tools: ${target.tool_count}`);\n if (target.summary) console.log(`\\nSummary:\\n${target.summary}`);\n } catch (err) {\n console.error('Failed to read vault database:', (err as Error).message);\n process.exit(1);\n } finally {\n cleanup();\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAcA,eAAsB,IAAI,MAAgB,UAAiC;AACzE,QAAM,aAAa,KAAK,CAAC;AAEzB,QAAM,UAAU,YAAY,QAAQ;AACpC,MAAI;AACF,UAAM,WAAW,aAAa,EAAE,OAAO,IAAI,CAAC;AAC5C,QAAI,SAAS,WAAW,GAAG;AACzB,cAAQ,IAAI,mBAAmB;AAC/B;AAAA,IACF;AAGA,QAAI;AACJ,QAAI,CAAC,cAAc,eAAe,UAAU;AAC1C,iBAAW,SAAS,CAAC,EAAE;AAAA,IACzB,OAAO;AACL,YAAM,QAAQ,SAAS,KAAK,CAAC,MAAM,EAAE,GAAG,SAAS,UAAU,CAAC;AAC5D,UAAI,CAAC,OAAO;AACV,gBAAQ,MAAM,sBAAsB,UAAU,EAAE;AAChD,gBAAQ,IAAI,cAAc,SAAS,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,GAAG,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;AAC3E;AAAA,MACF;AACA,iBAAW,MAAM;AAAA,IACnB;AAGA,UAAM,SAAS,WAAW,QAAQ;AAClC,QAAI,CAAC,QAAQ;AACX,cAAQ,MAAM,4BAA4B,QAAQ,EAAE;AACpD;AAAA,IACF;AAEA,YAAQ,IAAI,YAAY,OAAO,EAAE,EAAE;AACnC,YAAQ,IAAI,YAAY,OAAO,MAAM,EAAE;AACvC,QAAI,OAAO,MAAO,SAAQ,IAAI,YAAY,OAAO,KAAK,EAAE;AACxD,QAAI,OAAO,OAAQ,SAAQ,IAAI,YAAY,OAAO,MAAM,EAAE;AAC1D,QAAI,OAAO,KAAM,SAAQ,IAAI,YAAY,OAAO,IAAI,EAAE;AACtD,YAAQ,IAAI,YAAY,IAAI,KAAK,OAAO,aAAa,GAAI,EAAE,YAAY,CAAC,EAAE;AAC1E,QAAI,OAAO,SAAU,SAAQ,IAAI,YAAY,IAAI,KAAK,OAAO,WAAW,GAAI,EAAE,YAAY,CAAC,EAAE;AAC7F,QAAI,OAAO,aAAc,SAAQ,IAAI,YAAY,OAAO,YAAY,EAAE;AACtE,QAAI,OAAO,WAAY,SAAQ,IAAI,YAAY,OAAO,UAAU,EAAE;AAClE,QAAI,OAAO,QAAS,SAAQ,IAAI;AAAA;AAAA,EAAe,OAAO,OAAO,EAAE;AAAA,EACjE,SAAS,KAAK;AACZ,YAAQ,MAAM,kCAAmC,IAAc,OAAO;AACtE,YAAQ,KAAK,CAAC;AAAA,EAChB,UAAE;AACA,YAAQ;AAAA,EACV;AACF;","names":[]}
1
+ {"version":3,"sources":["../src/cli/session.ts"],"sourcesContent":["/**\n * CLI: myco session — display session info via direct SQLite reads.\n *\n * Opens the database directly (WAL mode allows concurrent reads).\n * Does NOT require the daemon to be running.\n */\n\nimport { listSessions, getSession } from '@myco/db/queries/sessions.js';\nimport { initVaultDb } from './shared.js';\n\n// ---------------------------------------------------------------------------\n// Command\n// ---------------------------------------------------------------------------\n\nexport async function run(args: string[], vaultDir: string): Promise<void> {\n const idOrLatest = args[0];\n\n const cleanup = initVaultDb(vaultDir);\n try {\n const sessions = listSessions({ limit: 100 });\n if (sessions.length === 0) {\n console.log('No sessions found');\n return;\n }\n\n // Resolve target session ID\n let targetId: string;\n if (!idOrLatest || idOrLatest === 'latest') {\n targetId = sessions[0].id;\n } else {\n const match = sessions.find((s) => s.id.includes(idOrLatest));\n if (!match) {\n console.error(`Session not found: ${idOrLatest}`);\n console.log('Available:', sessions.map((s) => s.id.slice(0, 12)).join(', '));\n return;\n }\n targetId = match.id;\n }\n\n // Fetch full session detail\n const target = getSession(targetId);\n if (!target) {\n console.error(`Failed to fetch session: ${targetId}`);\n return;\n }\n\n console.log(`Session: ${target.id}`);\n console.log(`Status: ${target.status}`);\n if (target.title) console.log(`Title: ${target.title}`);\n if (target.branch) console.log(`Branch: ${target.branch}`);\n if (target.user) console.log(`User: ${target.user}`);\n console.log(`Started: ${new Date(target.started_at * 1000).toISOString()}`);\n if (target.ended_at) console.log(`Ended: ${new Date(target.ended_at * 1000).toISOString()}`);\n if (target.prompt_count) console.log(`Prompts: ${target.prompt_count}`);\n if (target.tool_count) console.log(`Tools: ${target.tool_count}`);\n if (target.summary) console.log(`\\nSummary:\\n${target.summary}`);\n } catch (err) {\n console.error('Failed to read vault database:', (err as Error).message);\n process.exit(1);\n } finally {\n cleanup();\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAcA,eAAsB,IAAI,MAAgB,UAAiC;AACzE,QAAM,aAAa,KAAK,CAAC;AAEzB,QAAM,UAAU,YAAY,QAAQ;AACpC,MAAI;AACF,UAAM,WAAW,aAAa,EAAE,OAAO,IAAI,CAAC;AAC5C,QAAI,SAAS,WAAW,GAAG;AACzB,cAAQ,IAAI,mBAAmB;AAC/B;AAAA,IACF;AAGA,QAAI;AACJ,QAAI,CAAC,cAAc,eAAe,UAAU;AAC1C,iBAAW,SAAS,CAAC,EAAE;AAAA,IACzB,OAAO;AACL,YAAM,QAAQ,SAAS,KAAK,CAAC,MAAM,EAAE,GAAG,SAAS,UAAU,CAAC;AAC5D,UAAI,CAAC,OAAO;AACV,gBAAQ,MAAM,sBAAsB,UAAU,EAAE;AAChD,gBAAQ,IAAI,cAAc,SAAS,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,GAAG,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;AAC3E;AAAA,MACF;AACA,iBAAW,MAAM;AAAA,IACnB;AAGA,UAAM,SAAS,WAAW,QAAQ;AAClC,QAAI,CAAC,QAAQ;AACX,cAAQ,MAAM,4BAA4B,QAAQ,EAAE;AACpD;AAAA,IACF;AAEA,YAAQ,IAAI,YAAY,OAAO,EAAE,EAAE;AACnC,YAAQ,IAAI,YAAY,OAAO,MAAM,EAAE;AACvC,QAAI,OAAO,MAAO,SAAQ,IAAI,YAAY,OAAO,KAAK,EAAE;AACxD,QAAI,OAAO,OAAQ,SAAQ,IAAI,YAAY,OAAO,MAAM,EAAE;AAC1D,QAAI,OAAO,KAAM,SAAQ,IAAI,YAAY,OAAO,IAAI,EAAE;AACtD,YAAQ,IAAI,YAAY,IAAI,KAAK,OAAO,aAAa,GAAI,EAAE,YAAY,CAAC,EAAE;AAC1E,QAAI,OAAO,SAAU,SAAQ,IAAI,YAAY,IAAI,KAAK,OAAO,WAAW,GAAI,EAAE,YAAY,CAAC,EAAE;AAC7F,QAAI,OAAO,aAAc,SAAQ,IAAI,YAAY,OAAO,YAAY,EAAE;AACtE,QAAI,OAAO,WAAY,SAAQ,IAAI,YAAY,OAAO,UAAU,EAAE;AAClE,QAAI,OAAO,QAAS,SAAQ,IAAI;AAAA;AAAA,EAAe,OAAO,OAAO,EAAE;AAAA,EACjE,SAAS,KAAK;AACZ,YAAQ,MAAM,kCAAmC,IAAc,OAAO;AACtE,YAAQ,KAAK,CAAC;AAAA,EAChB,UAAE;AACA,YAAQ;AAAA,EACV;AACF;","names":[]}
@@ -2,18 +2,18 @@ import { createRequire as __cr } from 'node:module'; const require = __cr(import
2
2
  import {
3
3
  normalizeHookInput,
4
4
  readStdin
5
- } from "./chunk-DCSGJ7W4.js";
5
+ } from "./chunk-N2DGFACQ.js";
6
6
  import "./chunk-ZXZPJJN3.js";
7
7
  import {
8
8
  resolveVaultDir
9
- } from "./chunk-CUDIZJY7.js";
9
+ } from "./chunk-TSM6VESW.js";
10
10
  import {
11
11
  DaemonClient
12
- } from "./chunk-VVNL26WX.js";
13
- import "./chunk-XG5RRUYF.js";
14
- import "./chunk-NGROSFOH.js";
12
+ } from "./chunk-KTTSXYEK.js";
13
+ import "./chunk-ENZR5NG7.js";
14
+ import "./chunk-Z66IT5KL.js";
15
15
  import "./chunk-LPUQPDC2.js";
16
- import "./chunk-FLLBJLHM.js";
16
+ import "./chunk-6C6QZ4PM.js";
17
17
  import "./chunk-UUHLLQXO.js";
18
18
  import "./chunk-6LQIMRTC.js";
19
19
  import "./chunk-ODXLRR4U.js";
@@ -41,4 +41,4 @@ async function main() {
41
41
  export {
42
42
  main
43
43
  };
44
- //# sourceMappingURL=session-end-FT27DWYZ.js.map
44
+ //# sourceMappingURL=session-end-FS46UARX.js.map
@@ -0,0 +1,134 @@
1
+ import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
+ import {
3
+ composeSessionStartContext,
4
+ shouldInjectSessionStartDigest
5
+ } from "./chunk-OZ3FBAK5.js";
6
+ import {
7
+ getCortexInstructions,
8
+ shouldInjectCortex
9
+ } from "./chunk-N7Z3LUEZ.js";
10
+ import "./chunk-RQSJLWP4.js";
11
+ import {
12
+ evaluateSessionCaptureRules,
13
+ readTranscriptMeta
14
+ } from "./chunk-XL75KZGI.js";
15
+ import "./chunk-EEOJWLMP.js";
16
+ import {
17
+ createSchema
18
+ } from "./chunk-DTWUHHFI.js";
19
+ import {
20
+ loadMergedConfig
21
+ } from "./chunk-53RPGOEN.js";
22
+ import "./chunk-OUJSQSKE.js";
23
+ import "./chunk-POEPHBQK.js";
24
+ import {
25
+ initDatabase,
26
+ vaultDbPath
27
+ } from "./chunk-MYX5NCRH.js";
28
+ import {
29
+ normalizeHookInput,
30
+ readStdin
31
+ } from "./chunk-N2DGFACQ.js";
32
+ import "./chunk-ZXZPJJN3.js";
33
+ import {
34
+ resolveVaultDir
35
+ } from "./chunk-TSM6VESW.js";
36
+ import {
37
+ DaemonClient
38
+ } from "./chunk-KTTSXYEK.js";
39
+ import "./chunk-ENZR5NG7.js";
40
+ import {
41
+ loadManifests
42
+ } from "./chunk-Z66IT5KL.js";
43
+ import "./chunk-LPUQPDC2.js";
44
+ import {
45
+ DEFAULT_AGENT_ID,
46
+ estimateTokens
47
+ } from "./chunk-6C6QZ4PM.js";
48
+ import "./chunk-UUHLLQXO.js";
49
+ import "./chunk-6LQIMRTC.js";
50
+ import "./chunk-ODXLRR4U.js";
51
+ import "./chunk-U6PF3YII.js";
52
+ import "./chunk-PZUWP5VK.js";
53
+
54
+ // src/context/injector.ts
55
+ async function buildInjectedContext(config, _context) {
56
+ const includeBrief = shouldInjectCortex(config.context);
57
+ const includeDigest = shouldInjectSessionStartDigest(config.context);
58
+ if (!includeBrief && !includeDigest) {
59
+ return emptyContext();
60
+ }
61
+ const brief = includeBrief ? getCortexInstructions(DEFAULT_AGENT_ID)?.content ?? "" : "";
62
+ const { parts } = composeSessionStartContext(config, brief);
63
+ const text = parts.map((p) => p.text).join("\n\n");
64
+ return {
65
+ text,
66
+ tokenEstimate: estimateTokens(text)
67
+ };
68
+ }
69
+ function emptyContext() {
70
+ return {
71
+ text: "",
72
+ tokenEstimate: 0
73
+ };
74
+ }
75
+
76
+ // src/hooks/session-start.ts
77
+ import { execFileSync } from "child_process";
78
+ import fs from "fs";
79
+ import path from "path";
80
+ async function main() {
81
+ const VAULT_DIR = resolveVaultDir();
82
+ if (!fs.existsSync(path.join(VAULT_DIR, "myco.yaml"))) return;
83
+ try {
84
+ const rawInput = JSON.parse(await readStdin());
85
+ const { sessionId, agent, transcriptPath } = normalizeHookInput(rawInput);
86
+ const transcriptMeta = transcriptPath ? readTranscriptMeta(transcriptPath) : void 0;
87
+ const decision = evaluateSessionCaptureRules(loadManifests(), agent, {
88
+ transcriptPath,
89
+ transcriptMeta: transcriptMeta ?? void 0
90
+ });
91
+ if (decision.action === "drop") {
92
+ process.stderr.write(`[myco] session-start: dropped (${decision.reason ?? "rule"})
93
+ `);
94
+ return;
95
+ }
96
+ const config = loadMergedConfig(VAULT_DIR);
97
+ const client = new DaemonClient(VAULT_DIR);
98
+ const healthy = await client.ensureRunning();
99
+ let branch;
100
+ try {
101
+ branch = execFileSync("git", ["rev-parse", "--abbrev-ref", "HEAD"], { encoding: "utf-8" }).trim();
102
+ } catch {
103
+ }
104
+ if (healthy) {
105
+ const [, contextResult] = await Promise.all([
106
+ client.post("/sessions/register", {
107
+ session_id: sessionId,
108
+ agent,
109
+ branch,
110
+ started_at: (/* @__PURE__ */ new Date()).toISOString()
111
+ }),
112
+ client.post("/context", { session_id: sessionId, branch })
113
+ ]);
114
+ if (contextResult.ok && contextResult.data?.text) {
115
+ if (contextResult.data.source === "cortex") {
116
+ process.stderr.write("[myco] Injecting Myco Cortex instructions\n");
117
+ }
118
+ process.stdout.write(contextResult.data.text);
119
+ return;
120
+ }
121
+ }
122
+ const db = initDatabase(vaultDbPath(VAULT_DIR));
123
+ createSchema(db);
124
+ const injected = await buildInjectedContext(config, { branch });
125
+ if (injected.text) process.stdout.write(injected.text);
126
+ } catch (error) {
127
+ process.stderr.write(`[myco] session-start error: ${error.message}
128
+ `);
129
+ }
130
+ }
131
+ export {
132
+ main
133
+ };
134
+ //# sourceMappingURL=session-start-46KPFV2H.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/context/injector.ts","../src/hooks/session-start.ts"],"sourcesContent":["import type { MycoConfig } from '@myco/config/schema.js';\nimport { estimateTokens, DEFAULT_AGENT_ID } from '@myco/constants.js';\nimport { getCortexInstructions } from '@myco/db/queries/cortex-instructions.js';\nimport { shouldInjectCortex } from './cortex-brief.js';\nimport { shouldInjectSessionStartDigest } from './session-start-digest.js';\nimport { composeSessionStartContext } from './session-start-context.js';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ninterface InjectionContext {\n branch?: string;\n}\n\ninterface InjectedContext {\n text: string;\n tokenEstimate: number;\n}\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * Build the degraded-path session-start context.\n *\n * The normal session-start path goes through the daemon. If the daemon is\n * unavailable, read the last stored Cortex instructions locally so degraded\n * mode matches daemon semantics instead of regenerating ad hoc text.\n */\nexport async function buildInjectedContext(\n config: MycoConfig,\n _context: InjectionContext,\n): Promise<InjectedContext> {\n const includeBrief = shouldInjectCortex(config.context);\n const includeDigest = shouldInjectSessionStartDigest(config.context);\n if (!includeBrief && !includeDigest) {\n return emptyContext();\n }\n\n const brief = includeBrief ? getCortexInstructions(DEFAULT_AGENT_ID)?.content ?? '' : '';\n const { parts } = composeSessionStartContext(config, brief);\n const text = parts.map((p) => p.text).join('\\n\\n');\n\n return {\n text,\n tokenEstimate: estimateTokens(text),\n };\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction emptyContext(): InjectedContext {\n return {\n text: '',\n tokenEstimate: 0,\n };\n}\n","import { DaemonClient } from './client.js';\nimport { readStdin } from './read-stdin.js';\nimport { normalizeHookInput } from './normalize.js';\nimport { evaluateSessionCaptureRules } from './capture-rules.js';\nimport { readTranscriptMeta } from './transcript-meta.js';\nimport { loadManifests } from '../symbionts/detect.js';\nimport { loadMergedConfig } from '../config/loader.js';\nimport { buildInjectedContext } from '../context/injector.js';\nimport { initDatabase, vaultDbPath } from '../db/client.js';\nimport { createSchema } from '../db/schema.js';\nimport { resolveVaultDir } from '../vault/resolve.js';\nimport { execFileSync } from 'node:child_process';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nexport async function main() {\n const VAULT_DIR = resolveVaultDir();\n if (!fs.existsSync(path.join(VAULT_DIR, 'myco.yaml'))) return;\n\n try {\n const rawInput = JSON.parse(await readStdin());\n const { sessionId, agent, transcriptPath } = normalizeHookInput(rawInput);\n\n // Apply session_start capture rules BEFORE registering the session.\n // For Codex ephemeral sub-invocations (title generation, etc.) this\n // structural drop prevents the phantom row from ever being created,\n // rather than creating it and cascade-deleting at user_prompt time.\n // Read the transcript's session_meta for rules that inspect it\n // (e.g., detecting sub-agent thread spawns via source.subagent).\n const transcriptMeta = transcriptPath ? readTranscriptMeta(transcriptPath) : undefined;\n const decision = evaluateSessionCaptureRules(loadManifests(), agent, {\n transcriptPath,\n transcriptMeta: transcriptMeta ?? undefined,\n });\n if (decision.action === 'drop') {\n process.stderr.write(`[myco] session-start: dropped (${decision.reason ?? 'rule'})\\n`);\n return;\n }\n\n const config = loadMergedConfig(VAULT_DIR);\n const client = new DaemonClient(VAULT_DIR);\n const healthy = await client.ensureRunning();\n\n let branch: string | undefined;\n try {\n branch = execFileSync('git', ['rev-parse', '--abbrev-ref', 'HEAD'], { encoding: 'utf-8' }).trim();\n } catch { /* not a git repo */ }\n\n if (healthy) {\n const [, contextResult] = await Promise.all([\n client.post('/sessions/register', {\n session_id: sessionId,\n agent,\n branch,\n started_at: new Date().toISOString(),\n }),\n client.post('/context', { session_id: sessionId, branch }),\n ]);\n\n if (contextResult.ok && contextResult.data?.text) {\n if (contextResult.data.source === 'cortex') {\n process.stderr.write('[myco] Injecting Myco Cortex instructions\\n');\n }\n process.stdout.write(contextResult.data.text);\n return;\n }\n }\n\n // Degraded: local SQLite context only\n const db = initDatabase(vaultDbPath(VAULT_DIR));\n createSchema(db);\n const injected = await buildInjectedContext(config, { branch });\n if (injected.text) process.stdout.write(injected.text);\n } catch (error) {\n process.stderr.write(`[myco] session-start error: ${(error as Error).message}\\n`);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,eAAsB,qBACpB,QACA,UAC0B;AAC1B,QAAM,eAAe,mBAAmB,OAAO,OAAO;AACtD,QAAM,gBAAgB,+BAA+B,OAAO,OAAO;AACnE,MAAI,CAAC,gBAAgB,CAAC,eAAe;AACnC,WAAO,aAAa;AAAA,EACtB;AAEA,QAAM,QAAQ,eAAe,sBAAsB,gBAAgB,GAAG,WAAW,KAAK;AACtF,QAAM,EAAE,MAAM,IAAI,2BAA2B,QAAQ,KAAK;AAC1D,QAAM,OAAO,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,MAAM;AAEjD,SAAO;AAAA,IACL;AAAA,IACA,eAAe,eAAe,IAAI;AAAA,EACpC;AACF;AAMA,SAAS,eAAgC;AACvC,SAAO;AAAA,IACL,MAAM;AAAA,IACN,eAAe;AAAA,EACjB;AACF;;;ACjDA,SAAS,oBAAoB;AAC7B,OAAO,QAAQ;AACf,OAAO,UAAU;AAEjB,eAAsB,OAAO;AAC3B,QAAM,YAAY,gBAAgB;AAClC,MAAI,CAAC,GAAG,WAAW,KAAK,KAAK,WAAW,WAAW,CAAC,EAAG;AAEvD,MAAI;AACF,UAAM,WAAW,KAAK,MAAM,MAAM,UAAU,CAAC;AAC7C,UAAM,EAAE,WAAW,OAAO,eAAe,IAAI,mBAAmB,QAAQ;AAQxE,UAAM,iBAAiB,iBAAiB,mBAAmB,cAAc,IAAI;AAC7E,UAAM,WAAW,4BAA4B,cAAc,GAAG,OAAO;AAAA,MACnE;AAAA,MACA,gBAAgB,kBAAkB;AAAA,IACpC,CAAC;AACD,QAAI,SAAS,WAAW,QAAQ;AAC9B,cAAQ,OAAO,MAAM,kCAAkC,SAAS,UAAU,MAAM;AAAA,CAAK;AACrF;AAAA,IACF;AAEA,UAAM,SAAS,iBAAiB,SAAS;AACzC,UAAM,SAAS,IAAI,aAAa,SAAS;AACzC,UAAM,UAAU,MAAM,OAAO,cAAc;AAE3C,QAAI;AACJ,QAAI;AACF,eAAS,aAAa,OAAO,CAAC,aAAa,gBAAgB,MAAM,GAAG,EAAE,UAAU,QAAQ,CAAC,EAAE,KAAK;AAAA,IAClG,QAAQ;AAAA,IAAuB;AAE/B,QAAI,SAAS;AACX,YAAM,CAAC,EAAE,aAAa,IAAI,MAAM,QAAQ,IAAI;AAAA,QAC1C,OAAO,KAAK,sBAAsB;AAAA,UAChC,YAAY;AAAA,UACZ;AAAA,UACA;AAAA,UACA,aAAY,oBAAI,KAAK,GAAE,YAAY;AAAA,QACrC,CAAC;AAAA,QACD,OAAO,KAAK,YAAY,EAAE,YAAY,WAAW,OAAO,CAAC;AAAA,MAC3D,CAAC;AAED,UAAI,cAAc,MAAM,cAAc,MAAM,MAAM;AAChD,YAAI,cAAc,KAAK,WAAW,UAAU;AAC1C,kBAAQ,OAAO,MAAM,6CAA6C;AAAA,QACpE;AACA,gBAAQ,OAAO,MAAM,cAAc,KAAK,IAAI;AAC5C;AAAA,MACF;AAAA,IACF;AAGA,UAAM,KAAK,aAAa,YAAY,SAAS,CAAC;AAC9C,iBAAa,EAAE;AACf,UAAM,WAAW,MAAM,qBAAqB,QAAQ,EAAE,OAAO,CAAC;AAC9D,QAAI,SAAS,KAAM,SAAQ,OAAO,MAAM,SAAS,IAAI;AAAA,EACvD,SAAS,OAAO;AACd,YAAQ,OAAO,MAAM,+BAAgC,MAAgB,OAAO;AAAA,CAAI;AAAA,EAClF;AACF;","names":[]}
@@ -1,23 +1,25 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
  import {
3
3
  withEmbedding
4
- } from "./chunk-US4LNCAT.js";
5
- import "./chunk-KESLPBKV.js";
4
+ } from "./chunk-IPPMYQ2Y.js";
5
+ import "./chunk-QDLVIW2O.js";
6
6
  import {
7
7
  parseStringFlag
8
8
  } from "./chunk-SAKJMNSR.js";
9
- import "./chunk-Q36VMZST.js";
10
- import "./chunk-FMRZ26U5.js";
9
+ import "./chunk-OTQH5KZW.js";
10
+ import "./chunk-X3IGT5RV.js";
11
11
  import {
12
12
  loadConfig,
13
13
  updateConfig
14
- } from "./chunk-OD4AA7PV.js";
14
+ } from "./chunk-53RPGOEN.js";
15
+ import "./chunk-OUJSQSKE.js";
16
+ import "./chunk-POEPHBQK.js";
15
17
  import "./chunk-MYX5NCRH.js";
16
18
  import "./chunk-ZXZPJJN3.js";
17
- import "./chunk-VVNL26WX.js";
18
- import "./chunk-XG5RRUYF.js";
19
+ import "./chunk-KTTSXYEK.js";
20
+ import "./chunk-ENZR5NG7.js";
19
21
  import "./chunk-LPUQPDC2.js";
20
- import "./chunk-FLLBJLHM.js";
22
+ import "./chunk-6C6QZ4PM.js";
21
23
  import "./chunk-UUHLLQXO.js";
22
24
  import "./chunk-6LQIMRTC.js";
23
25
  import "./chunk-ODXLRR4U.js";
@@ -80,4 +82,4 @@ async function run(args, vaultDir) {
80
82
  export {
81
83
  run
82
84
  };
83
- //# sourceMappingURL=setup-llm-77MP4I2G.js.map
85
+ //# sourceMappingURL=setup-llm-JMWSNQ2C.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli/setup-llm.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport { loadConfig, updateConfig } from '../config/loader.js';\nimport { withEmbedding } from '../config/updates.js';\nimport { parseStringFlag } from './shared.js';\nimport type { EmbeddingProviderConfig } from '../config/schema.js';\n\nconst DAEMON_STATE_FILENAME = 'daemon.json';\n\nconst USAGE = `Usage: myco setup-llm [options]\n\nConfigure embedding provider settings.\n\nIn v3, LLM configuration is managed by the Myco agent (Claude Agent SDK).\nOnly embedding settings are user-configurable.\n\nOptions:\n --embedding-provider <name> Embedding provider (ollama, openai-compatible)\n --embedding-model <name> Embedding model name\n --embedding-url <url> Embedding provider base URL\n --show Show current settings and exit\n`;\n\nexport async function run(args: string[], vaultDir: string): Promise<void> {\n // Show current settings\n if (args.includes('--show')) {\n const config = loadConfig(vaultDir);\n console.log(JSON.stringify(config.embedding, null, 2));\n return;\n }\n\n // No flags = show usage\n if (args.length === 0) {\n console.log(USAGE);\n return;\n }\n\n // Warn about removed LLM flags\n const llmProvider = parseStringFlag(args, '--llm-provider');\n const llmModel = parseStringFlag(args, '--llm-model');\n const llmUrl = parseStringFlag(args, '--llm-url');\n const llmContextWindow = parseStringFlag(args, '--llm-context-window');\n const llmMaxTokens = parseStringFlag(args, '--llm-max-tokens');\n if (llmProvider || llmModel || llmUrl || llmContextWindow || llmMaxTokens) {\n console.log('Note: LLM configuration is managed by the Myco agent. LLM flags are ignored.');\n }\n\n // Build partial embedding update from flags\n const updates: Partial<EmbeddingProviderConfig> = {};\n\n const embeddingProvider = parseStringFlag(args, '--embedding-provider');\n if (embeddingProvider !== undefined) updates.provider = embeddingProvider as EmbeddingProviderConfig['provider'];\n\n const embeddingModel = parseStringFlag(args, '--embedding-model');\n if (embeddingModel !== undefined) updates.model = embeddingModel;\n\n const embeddingUrl = parseStringFlag(args, '--embedding-url');\n if (embeddingUrl !== undefined) updates.base_url = embeddingUrl;\n\n // Apply the update through the single write gate\n const updated = updateConfig(vaultDir, (config) => withEmbedding(config, updates));\n\n console.log('Embedding configuration updated.');\n console.log(JSON.stringify(updated.embedding, null, 2));\n\n if (embeddingModel !== undefined) {\n console.log('\\nWarning: changing the embedding model requires a full vector index rebuild.');\n console.log('Run: myco rebuild');\n }\n\n if (fs.existsSync(path.join(vaultDir, DAEMON_STATE_FILENAME))) {\n console.log('\\nNote: restart the daemon for changes to take effect (myco restart)');\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,QAAQ;AACf,OAAO,UAAU;AAMjB,IAAM,wBAAwB;AAE9B,IAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcd,eAAsB,IAAI,MAAgB,UAAiC;AAEzE,MAAI,KAAK,SAAS,QAAQ,GAAG;AAC3B,UAAM,SAAS,WAAW,QAAQ;AAClC,YAAQ,IAAI,KAAK,UAAU,OAAO,WAAW,MAAM,CAAC,CAAC;AACrD;AAAA,EACF;AAGA,MAAI,KAAK,WAAW,GAAG;AACrB,YAAQ,IAAI,KAAK;AACjB;AAAA,EACF;AAGA,QAAM,cAAc,gBAAgB,MAAM,gBAAgB;AAC1D,QAAM,WAAW,gBAAgB,MAAM,aAAa;AACpD,QAAM,SAAS,gBAAgB,MAAM,WAAW;AAChD,QAAM,mBAAmB,gBAAgB,MAAM,sBAAsB;AACrE,QAAM,eAAe,gBAAgB,MAAM,kBAAkB;AAC7D,MAAI,eAAe,YAAY,UAAU,oBAAoB,cAAc;AACzE,YAAQ,IAAI,8EAA8E;AAAA,EAC5F;AAGA,QAAM,UAA4C,CAAC;AAEnD,QAAM,oBAAoB,gBAAgB,MAAM,sBAAsB;AACtE,MAAI,sBAAsB,OAAW,SAAQ,WAAW;AAExD,QAAM,iBAAiB,gBAAgB,MAAM,mBAAmB;AAChE,MAAI,mBAAmB,OAAW,SAAQ,QAAQ;AAElD,QAAM,eAAe,gBAAgB,MAAM,iBAAiB;AAC5D,MAAI,iBAAiB,OAAW,SAAQ,WAAW;AAGnD,QAAM,UAAU,aAAa,UAAU,CAAC,WAAW,cAAc,QAAQ,OAAO,CAAC;AAEjF,UAAQ,IAAI,kCAAkC;AAC9C,UAAQ,IAAI,KAAK,UAAU,QAAQ,WAAW,MAAM,CAAC,CAAC;AAEtD,MAAI,mBAAmB,QAAW;AAChC,YAAQ,IAAI,+EAA+E;AAC3F,YAAQ,IAAI,mBAAmB;AAAA,EACjC;AAEA,MAAI,GAAG,WAAW,KAAK,KAAK,UAAU,qBAAqB,CAAC,GAAG;AAC7D,YAAQ,IAAI,sEAAsE;AAAA,EACpF;AACF;","names":[]}
1
+ {"version":3,"sources":["../src/cli/setup-llm.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport { loadConfig, updateConfig } from '../config/loader.js';\nimport { withEmbedding } from '../config/updates.js';\nimport { parseStringFlag } from './shared.js';\nimport type { EmbeddingProviderConfig } from '../config/schema.js';\n\nconst DAEMON_STATE_FILENAME = 'daemon.json';\n\nconst USAGE = `Usage: myco setup-llm [options]\n\nConfigure embedding provider settings.\n\nIn v3, LLM configuration is managed by the Myco agent (Claude Agent SDK).\nOnly embedding settings are user-configurable.\n\nOptions:\n --embedding-provider <name> Embedding provider (ollama, openai-compatible)\n --embedding-model <name> Embedding model name\n --embedding-url <url> Embedding provider base URL\n --show Show current settings and exit\n`;\n\nexport async function run(args: string[], vaultDir: string): Promise<void> {\n // Show current settings\n if (args.includes('--show')) {\n const config = loadConfig(vaultDir);\n console.log(JSON.stringify(config.embedding, null, 2));\n return;\n }\n\n // No flags = show usage\n if (args.length === 0) {\n console.log(USAGE);\n return;\n }\n\n // Warn about removed LLM flags\n const llmProvider = parseStringFlag(args, '--llm-provider');\n const llmModel = parseStringFlag(args, '--llm-model');\n const llmUrl = parseStringFlag(args, '--llm-url');\n const llmContextWindow = parseStringFlag(args, '--llm-context-window');\n const llmMaxTokens = parseStringFlag(args, '--llm-max-tokens');\n if (llmProvider || llmModel || llmUrl || llmContextWindow || llmMaxTokens) {\n console.log('Note: LLM configuration is managed by the Myco agent. LLM flags are ignored.');\n }\n\n // Build partial embedding update from flags\n const updates: Partial<EmbeddingProviderConfig> = {};\n\n const embeddingProvider = parseStringFlag(args, '--embedding-provider');\n if (embeddingProvider !== undefined) updates.provider = embeddingProvider as EmbeddingProviderConfig['provider'];\n\n const embeddingModel = parseStringFlag(args, '--embedding-model');\n if (embeddingModel !== undefined) updates.model = embeddingModel;\n\n const embeddingUrl = parseStringFlag(args, '--embedding-url');\n if (embeddingUrl !== undefined) updates.base_url = embeddingUrl;\n\n // Apply the update through the single write gate\n const updated = updateConfig(vaultDir, (config) => withEmbedding(config, updates));\n\n console.log('Embedding configuration updated.');\n console.log(JSON.stringify(updated.embedding, null, 2));\n\n if (embeddingModel !== undefined) {\n console.log('\\nWarning: changing the embedding model requires a full vector index rebuild.');\n console.log('Run: myco rebuild');\n }\n\n if (fs.existsSync(path.join(vaultDir, DAEMON_STATE_FILENAME))) {\n console.log('\\nNote: restart the daemon for changes to take effect (myco restart)');\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,QAAQ;AACf,OAAO,UAAU;AAMjB,IAAM,wBAAwB;AAE9B,IAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcd,eAAsB,IAAI,MAAgB,UAAiC;AAEzE,MAAI,KAAK,SAAS,QAAQ,GAAG;AAC3B,UAAM,SAAS,WAAW,QAAQ;AAClC,YAAQ,IAAI,KAAK,UAAU,OAAO,WAAW,MAAM,CAAC,CAAC;AACrD;AAAA,EACF;AAGA,MAAI,KAAK,WAAW,GAAG;AACrB,YAAQ,IAAI,KAAK;AACjB;AAAA,EACF;AAGA,QAAM,cAAc,gBAAgB,MAAM,gBAAgB;AAC1D,QAAM,WAAW,gBAAgB,MAAM,aAAa;AACpD,QAAM,SAAS,gBAAgB,MAAM,WAAW;AAChD,QAAM,mBAAmB,gBAAgB,MAAM,sBAAsB;AACrE,QAAM,eAAe,gBAAgB,MAAM,kBAAkB;AAC7D,MAAI,eAAe,YAAY,UAAU,oBAAoB,cAAc;AACzE,YAAQ,IAAI,8EAA8E;AAAA,EAC5F;AAGA,QAAM,UAA4C,CAAC;AAEnD,QAAM,oBAAoB,gBAAgB,MAAM,sBAAsB;AACtE,MAAI,sBAAsB,OAAW,SAAQ,WAAW;AAExD,QAAM,iBAAiB,gBAAgB,MAAM,mBAAmB;AAChE,MAAI,mBAAmB,OAAW,SAAQ,QAAQ;AAElD,QAAM,eAAe,gBAAgB,MAAM,iBAAiB;AAC5D,MAAI,iBAAiB,OAAW,SAAQ,WAAW;AAGnD,QAAM,UAAU,aAAa,UAAU,CAAC,WAAW,cAAc,QAAQ,OAAO,CAAC;AAEjF,UAAQ,IAAI,kCAAkC;AAC9C,UAAQ,IAAI,KAAK,UAAU,QAAQ,WAAW,MAAM,CAAC,CAAC;AAEtD,MAAI,mBAAmB,QAAW;AAChC,YAAQ,IAAI,+EAA+E;AAC3F,YAAQ,IAAI,mBAAmB;AAAA,EACjC;AAEA,MAAI,GAAG,WAAW,KAAK,KAAK,UAAU,qBAAqB,CAAC,GAAG;AAC7D,YAAQ,IAAI,sEAAsE;AAAA,EACpF;AACF;","names":[]}
@@ -5,8 +5,8 @@ name: myco-agent
5
5
  displayName: Myco Agent
6
6
  description: >
7
7
  Default intelligence agent that processes captured session data, extracts
8
- observations (spores), builds the knowledge graph, manages spore lifecycle,
9
- and synthesizes digest extracts.
8
+ observations (spores), manages spore lifecycle, and synthesizes digest
9
+ extracts.
10
10
  model: claude-sonnet-4-20250514
11
11
  maxTurns: 30
12
12
  timeoutSeconds: 300
@@ -15,19 +15,17 @@ systemPromptPath: ../prompts/agent.md
15
15
  tools:
16
16
  # Read tools
17
17
  - vault_unprocessed
18
+ - vault_session_summary_material
18
19
  - vault_spores
19
20
  - vault_sessions
20
21
  - vault_search_fts
21
22
  - vault_search_semantic
22
23
  - vault_state
23
- - vault_entities
24
24
  - vault_edges
25
25
  - vault_skill_candidates
26
26
  - vault_skill_records
27
27
  # Write tools
28
28
  - vault_create_spore
29
- - vault_create_entity
30
- - vault_create_edge
31
29
  - vault_resolve_spore
32
30
  - vault_update_session
33
31
  - vault_mark_processed
@@ -35,3 +33,9 @@ tools:
35
33
  - vault_write_digest
36
34
  - vault_set_state
37
35
  - vault_report
36
+ # Code exploration tools — used by vault-seed to infer knowledge from
37
+ # source when no session data exists yet.
38
+ - fs_read
39
+ - fs_list
40
+ - fs_tree
41
+ - code_grep
@@ -0,0 +1,115 @@
1
+ # =============================================================================
2
+ # Built-in Task: Cortex Instructions
3
+ # =============================================================================
4
+
5
+ name: cortex-instructions
6
+ displayName: Cortex Instructions
7
+ description: >
8
+ Author compact session-start instructions that teach downstream agents how
9
+ to use Myco tool behavior correctly, especially retrieval and plan persistence.
10
+ agent: myco-agent
11
+ isDefault: false
12
+ reasoningLevel: low
13
+ maxTurns: 12
14
+ timeoutSeconds: 180
15
+ schedule:
16
+ enabled: true
17
+ intervalSeconds: 14400
18
+ runIn:
19
+ - idle
20
+ - sleep
21
+
22
+ prompt: |
23
+ You are producing session-start instructions for another coding agent
24
+ working in this project. The final artifact is written in the `author`
25
+ phase via `vault_report` with action "cortex_instructions". The `research`
26
+ phase does NOT draft markdown — it produces a compact situation brief
27
+ that the author phase shapes into prose.
28
+
29
+ You will receive:
30
+ - current context configuration and capability summary
31
+ - tool guidance that must be encoded in the final instructions
32
+ - a digest excerpt plus recent sessions, spores (wisdom, decision, discovery),
33
+ and active plans
34
+ - authoring requirements that constrain the final output
35
+
36
+ Do not restate AGENTS.md, installation details, or generic Myco boilerplate.
37
+ Do not invent unavailable tools. Do not tell the downstream agent to call
38
+ `myco_skills` — project and Myco skills are registered separately.
39
+
40
+ phases:
41
+ - name: research
42
+ reasoningLevel: default
43
+ prompt: |
44
+ Produce a compact situation brief. DO NOT write the final markdown
45
+ — that is the author phase's job.
46
+
47
+ Output exactly this structure as your phase summary:
48
+
49
+ ## Hotspots (2-3)
50
+ - <named workstream, plan, or branch> — <one sentence on why a new
51
+ agent working in this repo should know about it>
52
+
53
+ ## Recent signal
54
+ - <recent session title or spore worth citing> — <why it matters>
55
+
56
+ ## Tool-use hint
57
+ - <one concrete hint a new agent would benefit from, grounded in
58
+ the recent activity above — e.g. "check active plans before
59
+ proposing X because plan Y already covers it">
60
+
61
+ Use the pre-assembled input (digest, recent sessions, spores,
62
+ active plans) as your starting point. Use `vault_search_fts`,
63
+ `vault_spores`, `vault_session_summary_material`, and
64
+ `vault_sessions` only to confirm a hotspot is current or to
65
+ disambiguate. Prefer active plans and the last 3 settled sessions
66
+ as anchors. If the input names a hotspot, verify it's still live
67
+ before keeping it — stale hotspots (work that has shipped and
68
+ moved on) are worse than no hotspot.
69
+
70
+ If you cannot identify 2-3 genuine hotspots, emit fewer — never
71
+ pad with boilerplate.
72
+ tools:
73
+ - vault_read_digest
74
+ - vault_sessions
75
+ - vault_session_summary_material
76
+ - vault_spores
77
+ - vault_search_fts
78
+ - vault_search_semantic
79
+ maxTurns: 10
80
+ required: true
81
+ readOnly: true
82
+
83
+ - name: author
84
+ dependsOn: [research]
85
+ prompt: |
86
+ Write the final session-start markdown from the research brief.
87
+
88
+ Required structure:
89
+ - `## Myco-Enabled Project` heading, then one sentence explaining
90
+ that Myco provides project memory, prior decisions, plans, and
91
+ retrieval tools for this repository.
92
+ - A retrieval paragraph naming the highest-priority tools from the
93
+ tool guidance list (typically `myco_search`, `myco_recall`,
94
+ `myco_context`). Describe when each is useful, not what each
95
+ argument does.
96
+ - A plan-persistence paragraph naming `myco_plans` and
97
+ `myco_save_plan`.
98
+ - A `### Current workstreams` section that MUST cite at least
99
+ one active plan or recent session BY TITLE from the research
100
+ brief. If the research brief contains zero hotspots, write
101
+ "No active workstreams worth flagging right now." verbatim —
102
+ do not invent, recycle, or pad with stale items.
103
+ - A closing paragraph on `myco_remember` for saving discoveries.
104
+
105
+ Keep the output compact and ready for direct injection. Do not
106
+ restate AGENTS.md. Do not mention `myco_skills`.
107
+
108
+ Report the final markdown via `vault_report` with:
109
+ - action: "cortex_instructions"
110
+ - summary: what the instructions emphasize
111
+ - details.content: the final markdown
112
+ tools:
113
+ - vault_report
114
+ maxTurns: 4
115
+ required: true
@@ -0,0 +1,67 @@
1
+ # =============================================================================
2
+ # Built-in Task: Cortex Prompt Builder
3
+ # =============================================================================
4
+
5
+ name: cortex-prompt-builder
6
+ displayName: Cortex Prompt Builder
7
+ description: >
8
+ Build a high-quality, Myco-informed prompt for a target symbiont while
9
+ respecting whether session-start instructions will be injected separately.
10
+ agent: myco-agent
11
+ isDefault: false
12
+ reasoningLevel: default
13
+ maxTurns: 24
14
+ timeoutSeconds: 300
15
+
16
+ prompt: |
17
+ Build a strong, pasteable prompt for a target coding agent.
18
+
19
+ The instruction payload gives you:
20
+ - the user's goal
21
+ - the target symbiont and whether session-start instructions will be injected
22
+ - the current Cortex instructions when they must be inlined
23
+
24
+ Use the vault tools to gather the most relevant project context:
25
+ - digest for broad orientation
26
+ - spores for prior decisions, gotchas, and bug fixes
27
+ - sessions and plan-related search results for recent or approved work
28
+ - skill records for repeatable project procedures
29
+ - search tools when you need targeted follow-up
30
+
31
+ Output requirements:
32
+ - Produce one final prompt suitable for direct paste into the target agent.
33
+ - If the instruction payload says to inline Cortex instructions, include them.
34
+ - If the instruction payload says session-start injection is supported, omit the
35
+ Cortex instructions from the final prompt.
36
+ - Prefer concise, high-signal context over long dumps.
37
+ - Include concrete validations when the task implies implementation work.
38
+
39
+ Call `vault_report` with action "cortex_prompt_builder" and:
40
+ - summary: short description of the brief you produced
41
+ - details.prompt: the final prompt text
42
+
43
+ phases:
44
+ - name: build
45
+ prompt: |
46
+ Gather the smallest set of relevant Myco context for this build request,
47
+ then write the final prompt and report it via `vault_report`.
48
+
49
+ Use digest, search, sessions, plans, spores, and skills selectively.
50
+ Avoid exhaustive searching; gather what you need to write the prompt.
51
+
52
+ The final output must be a single prompt suitable for direct paste into
53
+ the target agent. Respect the delivery contract from the instruction
54
+ payload when deciding whether to inline the current Cortex instructions.
55
+
56
+ Before finishing, call `vault_report` with action `cortex_prompt_builder`
57
+ and put the final prompt in `details.prompt`.
58
+ tools:
59
+ - vault_read_digest
60
+ - vault_sessions
61
+ - vault_spores
62
+ - vault_skill_records
63
+ - vault_search_fts
64
+ - vault_search_semantic
65
+ - vault_report
66
+ maxTurns: 18
67
+ required: true
@@ -13,7 +13,7 @@ description: >
13
13
  to spores or graph data.
14
14
  agent: myco-agent
15
15
  isDefault: false
16
- model: claude-sonnet-4-6
16
+ reasoningLevel: default
17
17
  maxTurns: 28
18
18
  timeoutSeconds: 1800
19
19
 
@@ -13,7 +13,7 @@ description: >
13
13
  quick pass that captures knowledge without full reasoning overhead.
14
14
  agent: myco-agent
15
15
  isDefault: false
16
- model: claude-haiku-4-5-20251001
16
+ reasoningLevel: low
17
17
  maxTurns: 30
18
18
  timeoutSeconds: 300
19
19
 
@@ -1,24 +1,24 @@
1
1
  # =============================================================================
2
2
  # Built-in Task: Review Session
3
3
  # =============================================================================
4
- # Targeted end-to-end pass over a single session: extract spores, build
5
- # graph entities and edges, run supersession checks, update title/summary.
4
+ # Targeted end-to-end pass over a single session: extract spores, run
5
+ # supersession checks, update title/summary.
6
6
  # =============================================================================
7
7
 
8
8
  name: review-session
9
9
  displayName: Review Session
10
10
  description: >
11
11
  Process a single session end-to-end. Extracts spores from all prompt
12
- batches in the session, builds graph entities and edges, runs supersession
13
- checks, and generates the session title and summary.
12
+ batches in the session, runs supersession checks, and generates the
13
+ session title and summary.
14
14
  agent: myco-agent
15
15
  isDefault: false
16
- model: claude-sonnet-4-6
17
- maxTurns: 40
16
+ reasoningLevel: default
17
+ maxTurns: 30
18
18
  timeoutSeconds: 480
19
19
 
20
20
  prompt: |
21
- Review the specified session end-to-end. Budget: ~35 turns.
21
+ Review the specified session end-to-end. Budget: ~25 turns.
22
22
 
23
23
  Target session: {{session_id}}
24
24
 
@@ -57,31 +57,7 @@ prompt: |
57
57
  After processing all batches: call `vault_mark_processed` for each batch,
58
58
  then call `vault_set_state` to update the cursor.
59
59
 
60
- ## Phase 3 — Graph (budget: 10 turns)
61
-
62
- Build entities and semantic edges for knowledge discovered in this session.
63
-
64
- 1. Call `vault_spores` to review the spores just created plus existing ones
65
- 2. Call `vault_entities` and `vault_edges` to see what already exists
66
- 3. Check `vault_spores` for cross-session references before creating entities.
67
- Only create entities referenced in 2+ sessions. For a single-session review,
68
- this means the entity must also appear in spores from OTHER sessions.
69
- 4. For valid entity candidates:
70
- - Call `vault_create_entity` with type: component | concept | person
71
- - Good: "DaemonClient", "cursor-based pagination" — specific named things
72
- - Bad: "testing phase", "code quality" — abstract categories
73
- 5. For each entity (new and existing relevant ones):
74
- - Call `vault_search_semantic` with the entity name to find related spores
75
- - Before creating, call `vault_edges` with source_id and target_id to
76
- check if the edge already exists
77
- - Call `vault_create_edge` with type REFERENCES, source_type spore,
78
- target_type entity for each relevant spore
79
- 6. Create structural edges: DEPENDS_ON (entity→entity), AFFECTS (spore→entity)
80
-
81
- Always include source_type and target_type on every edge.
82
- Do NOT create lineage edges (FROM_SESSION, EXTRACTED_FROM, etc.).
83
-
84
- ## Phase 4 — Supersession Check (budget: 3 turns)
60
+ ## Phase 3 — Supersession Check (budget: 3 turns)
85
61
 
86
62
  Scan active spores for newly introduced redundancy:
87
63
  1. Call `vault_spores` with status "active" to see the current set
@@ -90,7 +66,7 @@ prompt: |
90
66
  3. Only supersede when the new information genuinely replaces the old;
91
67
  when in doubt, keep both
92
68
 
93
- ## Phase 5 — Title & Summary (budget: 3 turns)
69
+ ## Phase 4 — Title & Summary (budget: 3 turns)
94
70
 
95
71
  1. Call `vault_sessions` to check the current title and summary
96
72
  2. Review the prompt batches you processed in Phase 2 — use user_prompt
@@ -104,14 +80,13 @@ prompt: |
104
80
  Bad: "/git-worktree", "Help me fix the bug in..."
105
81
  Summary: 2-4 sentences on key work done + outcomes.
106
82
 
107
- ## Phase 6 — Report (budget: 1 turn)
83
+ ## Phase 5 — Report (budget: 1 turn)
108
84
 
109
85
  Call `vault_report` with action "complete":
110
86
  - Session reviewed: {{session_id}}
111
87
  - Batches processed: N
112
88
  - Spores created: N (by type)
113
89
  - Spores superseded: N
114
- - Entities created: N, edges created: N
115
90
  - Title/summary updated: yes/no
116
91
 
117
92
  toolOverrides:
@@ -120,12 +95,8 @@ toolOverrides:
120
95
  - vault_sessions
121
96
  - vault_search_fts
122
97
  - vault_search_semantic
123
- - vault_entities
124
- - vault_edges
125
98
  - vault_create_spore
126
99
  - vault_resolve_spore
127
- - vault_create_entity
128
- - vault_create_edge
129
100
  - vault_update_session
130
101
  - vault_mark_processed
131
102
  - vault_set_state