@goondocks/myco 0.12.10 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/README.md +6 -0
  2. package/dist/{agent-run-GUHXRNZB.js → agent-run-3WLMSLMJ.js} +8 -7
  3. package/dist/{agent-run-GUHXRNZB.js.map → agent-run-3WLMSLMJ.js.map} +1 -1
  4. package/dist/{agent-tasks-GWZI5WSB.js → agent-tasks-BQE2GEVS.js} +8 -7
  5. package/dist/{agent-tasks-GWZI5WSB.js.map → agent-tasks-BQE2GEVS.js.map} +1 -1
  6. package/dist/{chunk-PW5QVY44.js → chunk-4VF6KQ2Z.js} +371 -6
  7. package/dist/chunk-4VF6KQ2Z.js.map +1 -0
  8. package/dist/{chunk-QL2RBFIC.js → chunk-5YQ6VOFZ.js} +2 -2
  9. package/dist/{chunk-MCARJFBA.js → chunk-745SWTQX.js} +4 -4
  10. package/dist/{chunk-D4M2AV65.js → chunk-DTE3SHYK.js} +46 -3
  11. package/dist/chunk-DTE3SHYK.js.map +1 -0
  12. package/dist/{chunk-HLGPGHT7.js → chunk-EVPG26CR.js} +3 -3
  13. package/dist/{chunk-YRUJ5KGV.js → chunk-GDCSPMH4.js} +3 -3
  14. package/dist/{chunk-LUQBT2Y4.js → chunk-HHZ3RTEI.js} +2 -2
  15. package/dist/{chunk-TCGOSLW6.js → chunk-JJXVDCEX.js} +613 -98
  16. package/dist/chunk-JJXVDCEX.js.map +1 -0
  17. package/dist/{chunk-D4ESHOOJ.js → chunk-KNTJOMWY.js} +3 -3
  18. package/dist/{chunk-JHLALJPB.js → chunk-LD6U3L6O.js} +8 -8
  19. package/dist/{chunk-7NBDELZB.js → chunk-NVCGF2DS.js} +26 -8
  20. package/dist/{chunk-7NBDELZB.js.map → chunk-NVCGF2DS.js.map} +1 -1
  21. package/dist/{chunk-SW62AX75.js → chunk-OKCSSDFC.js} +2 -2
  22. package/dist/{chunk-RR75ZKEV.js → chunk-OQVKLTQY.js} +4 -4
  23. package/dist/{chunk-OAGY5APE.js → chunk-PSYLKCWQ.js} +83 -7
  24. package/dist/chunk-PSYLKCWQ.js.map +1 -0
  25. package/dist/{chunk-Q2AYS2QE.js → chunk-PX5KIOKY.js} +5 -7
  26. package/dist/chunk-PX5KIOKY.js.map +1 -0
  27. package/dist/chunk-QLCD77AN.js +93 -0
  28. package/dist/chunk-QLCD77AN.js.map +1 -0
  29. package/dist/{chunk-J3L2RTYK.js → chunk-RBFECYNA.js} +2 -2
  30. package/dist/{chunk-4VSNNMEU.js → chunk-S66YG6QK.js} +26 -3
  31. package/dist/{chunk-4VSNNMEU.js.map → chunk-S66YG6QK.js.map} +1 -1
  32. package/dist/chunk-SBVDG5JP.js +112 -0
  33. package/dist/chunk-SBVDG5JP.js.map +1 -0
  34. package/dist/{chunk-M5XWW7UI.js → chunk-SODRR3HE.js} +8 -1
  35. package/dist/chunk-SODRR3HE.js.map +1 -0
  36. package/dist/{chunk-SFC4GXEN.js → chunk-TNCBMGWB.js} +39 -104
  37. package/dist/chunk-TNCBMGWB.js.map +1 -0
  38. package/dist/{chunk-PIRWYDOH.js → chunk-TRA3R4EC.js} +7 -1
  39. package/dist/chunk-TRA3R4EC.js.map +1 -0
  40. package/dist/{chunk-LGPBVBFY.js → chunk-TVV6PZOC.js} +5 -7
  41. package/dist/chunk-TVV6PZOC.js.map +1 -0
  42. package/dist/{chunk-SVQAPEYH.js → chunk-UWXJCLCK.js} +22 -5
  43. package/dist/chunk-UWXJCLCK.js.map +1 -0
  44. package/dist/{chunk-JROOQQH6.js → chunk-X34OFKYU.js} +12 -7
  45. package/dist/chunk-X34OFKYU.js.map +1 -0
  46. package/dist/{chunk-FYGFMIS6.js → chunk-ZKXW46HZ.js} +2 -2
  47. package/dist/{cli-CFOIDXOY.js → cli-SKCINMJI.js} +41 -40
  48. package/dist/{cli-CFOIDXOY.js.map → cli-SKCINMJI.js.map} +1 -1
  49. package/dist/{client-ZBCGODTS.js → client-KZGZHHXT.js} +5 -5
  50. package/dist/{config-6RQ7FAEV.js → config-H657SF6B.js} +5 -3
  51. package/dist/{config-6RQ7FAEV.js.map → config-H657SF6B.js.map} +1 -1
  52. package/dist/{detect-providers-JFE3QLJI.js → detect-providers-PAVE2X6O.js} +4 -4
  53. package/dist/{doctor-W3I7RVU4.js → doctor-6FKSHJRU.js} +13 -11
  54. package/dist/{doctor-W3I7RVU4.js.map → doctor-6FKSHJRU.js.map} +1 -1
  55. package/dist/{executor-LKDWMGC7.js → executor-W5MKZH7B.js} +407 -46
  56. package/dist/executor-W5MKZH7B.js.map +1 -0
  57. package/dist/{init-M3HYJGHE.js → init-5QHCXBLF.js} +16 -15
  58. package/dist/{init-M3HYJGHE.js.map → init-5QHCXBLF.js.map} +1 -1
  59. package/dist/{init-wizard-C4WQA47U.js → init-wizard-HEY4HMG3.js} +12 -12
  60. package/dist/installer-25TSX4SR.js +13 -0
  61. package/dist/{llm-O46QYWEM.js → llm-T3QVHC3Y.js} +7 -7
  62. package/dist/{loader-4FMGOVWF.js → loader-JQLO6K44.js} +4 -2
  63. package/dist/{loader-BQ4X4K3F.js → loader-WQKVWL5D.js} +4 -4
  64. package/dist/{main-CMWNMCW2.js → main-IZ277SHB.js} +689 -124
  65. package/dist/main-IZ277SHB.js.map +1 -0
  66. package/dist/{open-4N7T37XV.js → open-S7YUWON4.js} +8 -7
  67. package/dist/{open-4N7T37XV.js.map → open-S7YUWON4.js.map} +1 -1
  68. package/dist/{openai-embeddings-HWAKOGUM.js → openai-embeddings-5T5ZP7LO.js} +4 -4
  69. package/dist/{openrouter-GXZK7JXR.js → openrouter-RD2COFC7.js} +4 -4
  70. package/dist/{post-compact-BPICHUPV.js → post-compact-EFKFT7TM.js} +7 -7
  71. package/dist/{post-tool-use-OHJ2EH7I.js → post-tool-use-624YC6ZH.js} +7 -7
  72. package/dist/{post-tool-use-failure-CBPY2TSN.js → post-tool-use-failure-QCHZAWQH.js} +7 -7
  73. package/dist/{pre-compact-ULAA4XIB.js → pre-compact-7DWH2EM3.js} +7 -7
  74. package/dist/{provider-check-CKZW3GQX.js → provider-check-QN7OGXZA.js} +4 -4
  75. package/dist/{registry-ZHUVXGPO.js → registry-2XQMCPA6.js} +5 -5
  76. package/dist/{remove-52PTVOCJ.js → remove-ESVIET5C.js} +10 -8
  77. package/dist/{remove-52PTVOCJ.js.map → remove-ESVIET5C.js.map} +1 -1
  78. package/dist/{resolution-events-WZHPQQMN.js → resolution-events-5EVUEWHS.js} +4 -4
  79. package/dist/{restart-O37BUPLH.js → restart-AZHV6OKM.js} +9 -8
  80. package/dist/{restart-O37BUPLH.js.map → restart-AZHV6OKM.js.map} +1 -1
  81. package/dist/{search-52YK2ZWU.js → search-JS4HXYGS.js} +9 -8
  82. package/dist/{search-52YK2ZWU.js.map → search-JS4HXYGS.js.map} +1 -1
  83. package/dist/{server-7OKRAJCM.js → server-KT5GW333.js} +115 -14
  84. package/dist/server-KT5GW333.js.map +1 -0
  85. package/dist/{session-57IAZYRK.js → session-JSI67FEM.js} +10 -9
  86. package/dist/{session-57IAZYRK.js.map → session-JSI67FEM.js.map} +1 -1
  87. package/dist/{session-end-WRKDJEWM.js → session-end-4CM462MC.js} +6 -6
  88. package/dist/{session-start-7VWGEVOX.js → session-start-ZGF7F6DE.js} +12 -12
  89. package/dist/{setup-llm-IDQPX22O.js → setup-llm-S2UYJYIS.js} +10 -9
  90. package/dist/{setup-llm-IDQPX22O.js.map → setup-llm-S2UYJYIS.js.map} +1 -1
  91. package/dist/src/agent/definitions/agent.yaml +2 -0
  92. package/dist/src/agent/definitions/tasks/digest-only.yaml +1 -0
  93. package/dist/src/agent/definitions/tasks/extract-only.yaml +1 -0
  94. package/dist/src/agent/definitions/tasks/full-intelligence.yaml +8 -0
  95. package/dist/src/agent/definitions/tasks/graph-maintenance.yaml +1 -0
  96. package/dist/src/agent/definitions/tasks/review-session.yaml +1 -0
  97. package/dist/src/agent/definitions/tasks/skill-evolve.yaml +155 -0
  98. package/dist/src/agent/definitions/tasks/skill-generate.yaml +210 -0
  99. package/dist/src/agent/definitions/tasks/skill-survey.yaml +149 -0
  100. package/dist/src/agent/definitions/tasks/supersession-sweep.yaml +1 -0
  101. package/dist/src/agent/definitions/tasks/title-summary.yaml +1 -0
  102. package/dist/src/agent/prompts/agent.md +29 -0
  103. package/dist/src/cli.js +1 -1
  104. package/dist/src/daemon/main.js +1 -1
  105. package/dist/src/hooks/post-tool-use.js +1 -1
  106. package/dist/src/hooks/session-end.js +1 -1
  107. package/dist/src/hooks/session-start.js +1 -1
  108. package/dist/src/hooks/stop.js +1 -1
  109. package/dist/src/hooks/user-prompt-submit.js +1 -1
  110. package/dist/src/mcp/server.js +1 -1
  111. package/dist/src/worker/src/index.ts +3 -0
  112. package/dist/src/worker/src/schema.ts +56 -0
  113. package/dist/{stats-D7U5HQ3L.js → stats-D2FM6ZXO.js} +10 -9
  114. package/dist/{stats-D7U5HQ3L.js.map → stats-D2FM6ZXO.js.map} +1 -1
  115. package/dist/{stop-VJU4AAOQ.js → stop-DQEKVNST.js} +6 -6
  116. package/dist/{stop-failure-ILPHO26U.js → stop-failure-EHH7AN5E.js} +7 -7
  117. package/dist/{subagent-start-77MY4UMP.js → subagent-start-6R52PAFA.js} +7 -7
  118. package/dist/{subagent-stop-DABERMXZ.js → subagent-stop-CLDFJKYQ.js} +7 -7
  119. package/dist/{task-completed-TBWBOAJ6.js → task-completed-V47JA3OV.js} +7 -7
  120. package/dist/{team-K6H4B3ZD.js → team-SJPDXELY.js} +45 -19
  121. package/dist/team-SJPDXELY.js.map +1 -0
  122. package/dist/turns-3ZQAF6HF.js +16 -0
  123. package/dist/turns-3ZQAF6HF.js.map +1 -0
  124. package/dist/ui/assets/index-BmsHIwjl.css +1 -0
  125. package/dist/ui/assets/index-Cn6cQwJy.js +842 -0
  126. package/dist/ui/index.html +2 -2
  127. package/dist/{update-GW774ZMW.js → update-ZNIYDQHJ.js} +8 -7
  128. package/dist/{update-GW774ZMW.js.map → update-ZNIYDQHJ.js.map} +1 -1
  129. package/dist/{user-prompt-submit-C47Y5Y5I.js → user-prompt-submit-6TX6VECI.js} +6 -6
  130. package/dist/{verify-MQAANTUR.js → verify-JHIMXTY5.js} +8 -8
  131. package/dist/{version-42DQW43N.js → version-UMEN7OJU.js} +2 -2
  132. package/dist/version-UMEN7OJU.js.map +1 -0
  133. package/package.json +6 -6
  134. package/dist/chunk-D4M2AV65.js.map +0 -1
  135. package/dist/chunk-JROOQQH6.js.map +0 -1
  136. package/dist/chunk-LGPBVBFY.js.map +0 -1
  137. package/dist/chunk-M5XWW7UI.js.map +0 -1
  138. package/dist/chunk-OAGY5APE.js.map +0 -1
  139. package/dist/chunk-PIRWYDOH.js.map +0 -1
  140. package/dist/chunk-PW5QVY44.js.map +0 -1
  141. package/dist/chunk-Q2AYS2QE.js.map +0 -1
  142. package/dist/chunk-SFC4GXEN.js.map +0 -1
  143. package/dist/chunk-SVQAPEYH.js.map +0 -1
  144. package/dist/chunk-TCGOSLW6.js.map +0 -1
  145. package/dist/executor-LKDWMGC7.js.map +0 -1
  146. package/dist/main-CMWNMCW2.js.map +0 -1
  147. package/dist/server-7OKRAJCM.js.map +0 -1
  148. package/dist/team-K6H4B3ZD.js.map +0 -1
  149. package/dist/ui/assets/index-BGbil7f1.css +0 -1
  150. package/dist/ui/assets/index-ZSGlKT25.js +0 -804
  151. /package/dist/{chunk-QL2RBFIC.js.map → chunk-5YQ6VOFZ.js.map} +0 -0
  152. /package/dist/{chunk-MCARJFBA.js.map → chunk-745SWTQX.js.map} +0 -0
  153. /package/dist/{chunk-HLGPGHT7.js.map → chunk-EVPG26CR.js.map} +0 -0
  154. /package/dist/{chunk-YRUJ5KGV.js.map → chunk-GDCSPMH4.js.map} +0 -0
  155. /package/dist/{chunk-LUQBT2Y4.js.map → chunk-HHZ3RTEI.js.map} +0 -0
  156. /package/dist/{chunk-D4ESHOOJ.js.map → chunk-KNTJOMWY.js.map} +0 -0
  157. /package/dist/{chunk-JHLALJPB.js.map → chunk-LD6U3L6O.js.map} +0 -0
  158. /package/dist/{chunk-SW62AX75.js.map → chunk-OKCSSDFC.js.map} +0 -0
  159. /package/dist/{chunk-RR75ZKEV.js.map → chunk-OQVKLTQY.js.map} +0 -0
  160. /package/dist/{chunk-J3L2RTYK.js.map → chunk-RBFECYNA.js.map} +0 -0
  161. /package/dist/{chunk-FYGFMIS6.js.map → chunk-ZKXW46HZ.js.map} +0 -0
  162. /package/dist/{client-ZBCGODTS.js.map → client-KZGZHHXT.js.map} +0 -0
  163. /package/dist/{detect-providers-JFE3QLJI.js.map → detect-providers-PAVE2X6O.js.map} +0 -0
  164. /package/dist/{init-wizard-C4WQA47U.js.map → init-wizard-HEY4HMG3.js.map} +0 -0
  165. /package/dist/{llm-O46QYWEM.js.map → installer-25TSX4SR.js.map} +0 -0
  166. /package/dist/{loader-4FMGOVWF.js.map → llm-T3QVHC3Y.js.map} +0 -0
  167. /package/dist/{loader-BQ4X4K3F.js.map → loader-JQLO6K44.js.map} +0 -0
  168. /package/dist/{openai-embeddings-HWAKOGUM.js.map → loader-WQKVWL5D.js.map} +0 -0
  169. /package/dist/{openrouter-GXZK7JXR.js.map → openai-embeddings-5T5ZP7LO.js.map} +0 -0
  170. /package/dist/{provider-check-CKZW3GQX.js.map → openrouter-RD2COFC7.js.map} +0 -0
  171. /package/dist/{post-compact-BPICHUPV.js.map → post-compact-EFKFT7TM.js.map} +0 -0
  172. /package/dist/{post-tool-use-OHJ2EH7I.js.map → post-tool-use-624YC6ZH.js.map} +0 -0
  173. /package/dist/{post-tool-use-failure-CBPY2TSN.js.map → post-tool-use-failure-QCHZAWQH.js.map} +0 -0
  174. /package/dist/{pre-compact-ULAA4XIB.js.map → pre-compact-7DWH2EM3.js.map} +0 -0
  175. /package/dist/{registry-ZHUVXGPO.js.map → provider-check-QN7OGXZA.js.map} +0 -0
  176. /package/dist/{resolution-events-WZHPQQMN.js.map → registry-2XQMCPA6.js.map} +0 -0
  177. /package/dist/{version-42DQW43N.js.map → resolution-events-5EVUEWHS.js.map} +0 -0
  178. /package/dist/{session-end-WRKDJEWM.js.map → session-end-4CM462MC.js.map} +0 -0
  179. /package/dist/{session-start-7VWGEVOX.js.map → session-start-ZGF7F6DE.js.map} +0 -0
  180. /package/dist/{stop-VJU4AAOQ.js.map → stop-DQEKVNST.js.map} +0 -0
  181. /package/dist/{stop-failure-ILPHO26U.js.map → stop-failure-EHH7AN5E.js.map} +0 -0
  182. /package/dist/{subagent-start-77MY4UMP.js.map → subagent-start-6R52PAFA.js.map} +0 -0
  183. /package/dist/{subagent-stop-DABERMXZ.js.map → subagent-stop-CLDFJKYQ.js.map} +0 -0
  184. /package/dist/{task-completed-TBWBOAJ6.js.map → task-completed-V47JA3OV.js.map} +0 -0
  185. /package/dist/{user-prompt-submit-C47Y5Y5I.js.map → user-prompt-submit-6TX6VECI.js.map} +0 -0
  186. /package/dist/{verify-MQAANTUR.js.map → verify-JHIMXTY5.js.map} +0 -0
@@ -1,20 +1,21 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
  import {
3
3
  initVaultDb
4
- } from "./chunk-SFC4GXEN.js";
4
+ } from "./chunk-SBVDG5JP.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 {
8
9
  getSession,
9
10
  listSessions
10
- } from "./chunk-JROOQQH6.js";
11
- import "./chunk-4VSNNMEU.js";
11
+ } from "./chunk-X34OFKYU.js";
12
+ import "./chunk-S66YG6QK.js";
12
13
  import "./chunk-MYX5NCRH.js";
13
- import "./chunk-SVQAPEYH.js";
14
- import "./chunk-PIRWYDOH.js";
15
- import "./chunk-S6I62FAH.js";
16
- import "./chunk-FYGFMIS6.js";
14
+ import "./chunk-UWXJCLCK.js";
15
+ import "./chunk-ZKXW46HZ.js";
17
16
  import "./chunk-LPUQPDC2.js";
17
+ import "./chunk-TRA3R4EC.js";
18
+ import "./chunk-S6I62FAH.js";
18
19
  import "./chunk-PZUWP5VK.js";
19
20
 
20
21
  // src/cli/session.ts
@@ -66,4 +67,4 @@ ${target.summary}`);
66
67
  export {
67
68
  run
68
69
  };
69
- //# sourceMappingURL=session-57IAZYRK.js.map
70
+ //# sourceMappingURL=session-JSI67FEM.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,15 +2,15 @@ import { createRequire as __cr } from 'node:module'; const require = __cr(import
2
2
  import {
3
3
  normalizeHookInput,
4
4
  readStdin
5
- } from "./chunk-RR75ZKEV.js";
5
+ } from "./chunk-OQVKLTQY.js";
6
6
  import {
7
7
  DaemonClient
8
- } from "./chunk-SVQAPEYH.js";
9
- import "./chunk-PIRWYDOH.js";
10
- import "./chunk-S6I62FAH.js";
11
- import "./chunk-FYGFMIS6.js";
8
+ } from "./chunk-UWXJCLCK.js";
9
+ import "./chunk-ZKXW46HZ.js";
12
10
  import "./chunk-QFMBZ72S.js";
13
11
  import "./chunk-LPUQPDC2.js";
12
+ import "./chunk-TRA3R4EC.js";
13
+ import "./chunk-S6I62FAH.js";
14
14
  import "./chunk-D7TYRPRM.js";
15
15
  import "./chunk-E4VLWIJC.js";
16
16
  import "./chunk-KH64DHOY.js";
@@ -40,4 +40,4 @@ async function main() {
40
40
  export {
41
41
  main
42
42
  };
43
- //# sourceMappingURL=session-end-WRKDJEWM.js.map
43
+ //# sourceMappingURL=session-end-4CM462MC.js.map
@@ -1,17 +1,17 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
  import {
3
3
  listSpores
4
- } from "./chunk-Q2AYS2QE.js";
4
+ } from "./chunk-PX5KIOKY.js";
5
5
  import {
6
6
  listSessions
7
- } from "./chunk-JROOQQH6.js";
8
- import "./chunk-4VSNNMEU.js";
7
+ } from "./chunk-X34OFKYU.js";
8
+ import "./chunk-S66YG6QK.js";
9
9
  import {
10
10
  createSchema
11
- } from "./chunk-PW5QVY44.js";
11
+ } from "./chunk-4VF6KQ2Z.js";
12
12
  import {
13
13
  loadConfig
14
- } from "./chunk-OAGY5APE.js";
14
+ } from "./chunk-PSYLKCWQ.js";
15
15
  import {
16
16
  getDatabase,
17
17
  initDatabase,
@@ -20,20 +20,20 @@ import {
20
20
  import {
21
21
  normalizeHookInput,
22
22
  readStdin
23
- } from "./chunk-RR75ZKEV.js";
23
+ } from "./chunk-OQVKLTQY.js";
24
24
  import {
25
25
  DaemonClient
26
- } from "./chunk-SVQAPEYH.js";
26
+ } from "./chunk-UWXJCLCK.js";
27
+ import "./chunk-ZKXW46HZ.js";
28
+ import "./chunk-QFMBZ72S.js";
29
+ import "./chunk-LPUQPDC2.js";
27
30
  import {
28
31
  CONTEXT_SESSION_PREVIEW_CHARS,
29
32
  CONTEXT_SPORE_PREVIEW_CHARS,
30
33
  EXCLUDED_SPORE_STATUSES,
31
34
  estimateTokens
32
- } from "./chunk-PIRWYDOH.js";
35
+ } from "./chunk-TRA3R4EC.js";
33
36
  import "./chunk-S6I62FAH.js";
34
- import "./chunk-FYGFMIS6.js";
35
- import "./chunk-QFMBZ72S.js";
36
- import "./chunk-LPUQPDC2.js";
37
37
  import "./chunk-D7TYRPRM.js";
38
38
  import "./chunk-E4VLWIJC.js";
39
39
  import "./chunk-KH64DHOY.js";
@@ -170,4 +170,4 @@ async function main() {
170
170
  export {
171
171
  main
172
172
  };
173
- //# sourceMappingURL=session-start-7VWGEVOX.js.map
173
+ //# sourceMappingURL=session-start-ZGF7F6DE.js.map
@@ -1,22 +1,23 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
  import {
3
3
  withEmbedding
4
- } from "./chunk-M5XWW7UI.js";
5
- import "./chunk-SFC4GXEN.js";
4
+ } from "./chunk-SODRR3HE.js";
5
+ import "./chunk-SBVDG5JP.js";
6
6
  import {
7
7
  parseStringFlag
8
8
  } from "./chunk-SAKJMNSR.js";
9
- import "./chunk-LUQBT2Y4.js";
9
+ import "./chunk-TNCBMGWB.js";
10
+ import "./chunk-HHZ3RTEI.js";
10
11
  import {
11
12
  loadConfig,
12
13
  updateConfig
13
- } from "./chunk-OAGY5APE.js";
14
+ } from "./chunk-PSYLKCWQ.js";
14
15
  import "./chunk-MYX5NCRH.js";
15
- import "./chunk-SVQAPEYH.js";
16
- import "./chunk-PIRWYDOH.js";
17
- import "./chunk-S6I62FAH.js";
18
- import "./chunk-FYGFMIS6.js";
16
+ import "./chunk-UWXJCLCK.js";
17
+ import "./chunk-ZKXW46HZ.js";
19
18
  import "./chunk-LPUQPDC2.js";
19
+ import "./chunk-TRA3R4EC.js";
20
+ import "./chunk-S6I62FAH.js";
20
21
  import "./chunk-D7TYRPRM.js";
21
22
  import "./chunk-E4VLWIJC.js";
22
23
  import "./chunk-KH64DHOY.js";
@@ -78,4 +79,4 @@ async function run(args, vaultDir) {
78
79
  export {
79
80
  run
80
81
  };
81
- //# sourceMappingURL=setup-llm-IDQPX22O.js.map
82
+ //# sourceMappingURL=setup-llm-S2UYJYIS.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":[]}
@@ -22,6 +22,8 @@ tools:
22
22
  - vault_state
23
23
  - vault_entities
24
24
  - vault_edges
25
+ - vault_skill_candidates
26
+ - vault_skill_records
25
27
  # Write tools
26
28
  - vault_create_spore
27
29
  - vault_create_entity
@@ -13,6 +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
17
  maxTurns: 28
17
18
  timeoutSeconds: 1800
18
19
 
@@ -13,6 +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-sonnet-4-6
16
17
  maxTurns: 30
17
18
  timeoutSeconds: 300
18
19
 
@@ -21,6 +21,14 @@ maxTurns: 130
21
21
  timeoutSeconds: 1800
22
22
  model: claude-sonnet-4-6
23
23
 
24
+ schedule:
25
+ enabled: true
26
+ intervalSeconds: 300
27
+ runIn:
28
+ - active
29
+ - idle
30
+ preCondition: has-unprocessed-batches
31
+
24
32
  orchestrator:
25
33
  enabled: true
26
34
  model: claude-sonnet-4-6
@@ -13,6 +13,7 @@ description: >
13
13
  new spores or regenerate digest.
14
14
  agent: myco-agent
15
15
  isDefault: false
16
+ model: claude-sonnet-4-6
16
17
  maxTurns: 40
17
18
  timeoutSeconds: 480
18
19
 
@@ -13,6 +13,7 @@ description: >
13
13
  checks, and generates the session title and summary.
14
14
  agent: myco-agent
15
15
  isDefault: false
16
+ model: claude-sonnet-4-6
16
17
  maxTurns: 40
17
18
  timeoutSeconds: 480
18
19
 
@@ -0,0 +1,155 @@
1
+ name: skill-evolve
2
+ displayName: Skill Evolution
3
+ description: >-
4
+ Evaluate and evolve existing Myco-managed skills based on new
5
+ vault knowledge and usage patterns.
6
+ agent: myco-agent
7
+ prompt: >-
8
+ Assess all active Myco-managed skills for staleness, conflicts,
9
+ and oversized scope. Evolve skills that need it.
10
+ isDefault: false
11
+ model: claude-sonnet-4-6
12
+ maxTurns: 60
13
+ timeoutSeconds: 1800
14
+ schedule:
15
+ enabled: false
16
+ intervalSeconds: 900
17
+ runIn:
18
+ - idle
19
+ preCondition: has-active-skills
20
+ phases:
21
+ - name: assess
22
+ prompt: |
23
+ Evaluate every active Myco-managed skill to determine if it
24
+ needs updating.
25
+
26
+ For EACH active skill (vault_skill_records action: list, status: active):
27
+
28
+ 1. READ THE CURRENT SKILL CONTENT.
29
+ Get the skill record (vault_skill_records action: get), then
30
+ read the latest lineage entry's content_snapshot to see what
31
+ the skill currently says. You MUST read the actual content
32
+ before you can assess accuracy.
33
+
34
+ 2. SEARCH FOR NEW KNOWLEDGE since the skill was last updated.
35
+ Use vault_search_semantic with the skill's topic/keywords.
36
+ Use vault_search_fts with specific file paths, function names,
37
+ and technical terms mentioned in the skill.
38
+ Use vault_spores to check for recent wisdom, decisions, and
39
+ gotchas related to the skill's domain.
40
+
41
+ Compare what you find to what the skill currently says.
42
+ Does the skill miss anything important? Does it say anything
43
+ that's now wrong or outdated?
44
+
45
+ 3. CHECK SOURCE SPORE STATUS.
46
+ For each source spore ID in the skill's source_ids, check if
47
+ it's been superseded (vault_spores, status: superseded).
48
+ Superseded sources mean the skill may contain outdated advice.
49
+
50
+ 4. ASSESS SKILL SCOPE.
51
+ Is the skill trying to cover too many distinct procedures?
52
+ A skill over 400 lines or covering 3+ independent workflows
53
+ is a candidate for splitting.
54
+
55
+ Classify each skill:
56
+ - **CURRENT**: Content is still accurate, no significant new
57
+ knowledge changes what it should say.
58
+ - **STALE**: New knowledge exists that should be incorporated
59
+ (new gotchas, new steps, changed file paths, new patterns).
60
+ Note specifically WHAT is new/changed.
61
+ - **CONFLICTED**: New knowledge directly contradicts the skill's
62
+ current content (a decision was reversed, a pattern was
63
+ abandoned). Note the contradiction.
64
+ - **OVERSIZED**: Covers too many distinct procedures. Note
65
+ how it should be split.
66
+
67
+ NOTE: Skip usage-based retirement for now — usage tracking is
68
+ not yet active. Do not classify skills as UNUSED.
69
+
70
+ Store classifications using vault_set_state with key
71
+ 'skill-evolve-classifications' and value as a JSON object:
72
+ ```json
73
+ {
74
+ "skill-name": {
75
+ "classification": "CURRENT|STALE|CONFLICTED|OVERSIZED",
76
+ "rationale": "what changed and why",
77
+ "new_knowledge": ["list of specific new findings"]
78
+ }
79
+ }
80
+ ```
81
+
82
+ Report classifications via vault_report.
83
+ tools:
84
+ - vault_skill_records
85
+ - vault_spores
86
+ - vault_sessions
87
+ - vault_search_fts
88
+ - vault_search_semantic
89
+ - vault_read_digest
90
+ - vault_state
91
+ - vault_set_state
92
+ - vault_edges
93
+ - vault_report
94
+ maxTurns: 20
95
+ required: true
96
+
97
+ - name: evolve
98
+ prompt: |
99
+ Read classifications from vault_state
100
+ (key: skill-evolve-classifications). Parse the JSON.
101
+
102
+ For each skill classified as STALE, CONFLICTED, or OVERSIZED:
103
+
104
+ ## STALE or CONFLICTED — Rewrite the skill
105
+
106
+ 1. Read the current skill content from vault_skill_records
107
+ (action: get) to see the current version.
108
+
109
+ 2. Gather the new knowledge: read the specific spores, sessions,
110
+ or search results identified in the assessment.
111
+
112
+ 3. Rewrite using vault_write_skill. The rewrite MUST:
113
+ - Preserve ALL existing frontmatter fields — read the current
114
+ content first and carry every field forward (name, description,
115
+ managed_by, user-invocable, allowed-tools). The quality gate
116
+ rejects writes missing any required frontmatter field.
117
+ - Preserve all content that is still accurate
118
+ - Incorporate the new knowledge identified in assessment
119
+ - Follow the same SKILL.md format:
120
+ - Prerequisites, Steps, Common Pitfalls structure
121
+ - Stay under 500 lines
122
+ - Include a rationale parameter explaining WHAT changed:
123
+ e.g., "Updated: added hookFields normalization step from
124
+ session dd5bc83a, corrected Windsurf MCP path"
125
+
126
+ vault_write_skill automatically bumps the generation and
127
+ creates a lineage entry with the rationale.
128
+
129
+ ## OVERSIZED — Split into focused sub-skills
130
+
131
+ 1. Identify distinct procedures within the skill.
132
+ 2. Write each as a new skill via vault_write_skill.
133
+ Each sub-skill gets its own name, description, and content.
134
+ 3. Retire the parent via vault_skill_records
135
+ (action: update, status: retired).
136
+
137
+ ## CURRENT — No action needed. Skip.
138
+
139
+ Report a summary of all actions taken via vault_report:
140
+ - Which skills were updated (with rationale)
141
+ - Which skills were split (into what)
142
+ - Which skills were left as CURRENT
143
+ tools:
144
+ - vault_write_skill
145
+ - vault_skill_records
146
+ - vault_skill_candidates
147
+ - vault_state
148
+ - vault_spores
149
+ - vault_search_fts
150
+ - vault_search_semantic
151
+ - vault_report
152
+ maxTurns: 35
153
+ required: true
154
+ dependsOn:
155
+ - assess
@@ -0,0 +1,210 @@
1
+ name: skill-generate
2
+ displayName: Skill Generation
3
+ description: >-
4
+ Synthesize a project skill from a vault knowledge candidate.
5
+ Writes SKILL.md to .agents/skills/ following Anthropic skill design principles.
6
+ agent: myco-agent
7
+ prompt: >-
8
+ Generate ONE project-specific skill from the next approved candidate.
9
+ Process only the first approved candidate found — do not batch multiple
10
+ skills in a single run. The schedule will pick up the next one.
11
+ isDefault: false
12
+ model: claude-sonnet-4-6
13
+ maxTurns: 35
14
+ timeoutSeconds: 900
15
+ schedule:
16
+ enabled: false
17
+ intervalSeconds: 600
18
+ runIn:
19
+ - idle
20
+ preCondition: has-approved-candidates
21
+ phases:
22
+ - name: gather
23
+ prompt: |
24
+ You are generating ONE skill. Find the first approved candidate
25
+ that doesn't have a skill yet.
26
+
27
+ If an instruction provides a candidate ID, use that specific one.
28
+ Otherwise, use vault_skill_candidates (action: list, status: approved)
29
+ and pick the FIRST result. Process ONLY that one candidate —
30
+ do not attempt to generate multiple skills in this run.
31
+
32
+ Read the candidate. If its skill_id is set or status is 'generated',
33
+ it already has a skill — report "already generated" and STOP.
34
+ Do NOT skip based on similar topics. The user approved it.
35
+
36
+ If no skill exists, gather ALL source material for this candidate:
37
+
38
+ 1. Read each source item referenced in the candidate's source_ids.
39
+ Use vault_spores to fetch spore IDs, vault_sessions to fetch
40
+ session IDs. These contain the detailed knowledge.
41
+
42
+ 2. Search for additional context using vault_search_semantic with
43
+ the candidate's topic as the query. This may surface plans,
44
+ artifacts, and sessions not in the source_ids.
45
+
46
+ 3. Search vault_search_fts for specific file paths, function names,
47
+ or config keys mentioned in the source material.
48
+
49
+ 4. Check vault_entities for related entities — these often link
50
+ to additional spores via edges.
51
+
52
+ For each source, extract:
53
+ - Concrete steps (what to do, in what order)
54
+ - File paths and code patterns (specific to this project)
55
+ - Gotchas and pitfalls (things that went wrong)
56
+ - Decisions and rationale (why this approach, not another)
57
+ - Prerequisites (what must be true before starting)
58
+
59
+ Be thorough — the skill quality depends entirely on how much
60
+ concrete detail you gather here.
61
+ tools:
62
+ - vault_skill_candidates
63
+ - vault_spores
64
+ - vault_sessions
65
+ - vault_search_fts
66
+ - vault_search_semantic
67
+ - vault_read_digest
68
+ - vault_entities
69
+ - vault_edges
70
+ maxTurns: 10
71
+ required: true
72
+
73
+ - name: draft
74
+ prompt: |
75
+ Write a SKILL.md from the gathered material. The skill must be a
76
+ procedural how-to guide that teaches an agent how to accomplish
77
+ a specific task in THIS project.
78
+
79
+ ## SKILL.md Format
80
+
81
+ ```markdown
82
+ ---
83
+ name: myco:kebab-case-name
84
+ description: |
85
+ One paragraph that serves as the PRIMARY triggering mechanism.
86
+ Be explicit about when this skill activates. Include concrete
87
+ keywords, file names, and scenarios. Be somewhat pushy to
88
+ counter undertriggering — include "even if the user doesn't
89
+ explicitly ask for [topic]" language when appropriate.
90
+ managed_by: myco
91
+ user-invocable: true
92
+ allowed-tools: Read, Edit, Write, Bash, Grep, Glob
93
+ ---
94
+
95
+ # Skill Title
96
+
97
+ Brief context paragraph (2-3 sentences) explaining what this
98
+ procedure accomplishes and when you'd use it.
99
+
100
+ ## Prerequisites
101
+
102
+ What must be true before starting.
103
+
104
+ ## Steps
105
+
106
+ Numbered, concrete steps with file paths and code examples.
107
+ Each step should reference specific files in this project.
108
+
109
+ ## Common Pitfalls
110
+
111
+ Inline with the steps where possible, or as a short section
112
+ at the end for cross-cutting gotchas.
113
+ ```
114
+
115
+ ## Frontmatter Fields
116
+
117
+ - **user-invocable: true** — makes the skill available as a slash
118
+ command (e.g., `/add-symbiont`). Set this for all procedural skills.
119
+ - **allowed-tools** — comma-separated list of tools the skill needs.
120
+ Most procedural skills need: Read, Edit, Write, Bash, Grep, Glob.
121
+ Narrow this if the skill only needs read access (e.g., audit skills).
122
+ Omit the field entirely to allow all tools.
123
+
124
+ ## Writing Principles
125
+
126
+ - **Explain reasoning, not rigid rules.** "Because X, do Y"
127
+ is better than "ALWAYS do Y." Use theory of mind — the agent
128
+ using this skill is smart enough to understand WHY.
129
+ - **Stay under 500 lines.** Be concise but complete.
130
+ - **Use concrete file paths** from this project, not generic examples.
131
+ - **Include code patterns** where they help (inline code blocks).
132
+ - **Include examples** — show input/output or before/after where
133
+ it makes the procedure clearer.
134
+ - **Reference gotchas inline** where the developer would encounter
135
+ them, not in a separate section.
136
+ - **The description is the trigger.** An agent reading just the
137
+ description should know whether this skill applies to their task.
138
+ - **Be general enough to survive change.** The skill should teach
139
+ the pattern, not just document the current state. If a file path
140
+ changes, the procedure should still make sense.
141
+
142
+ Use vault_write_skill to write the file. Pass:
143
+ - name: kebab-case directory name (NO colon — directory-safe name)
144
+ The myco: prefix goes ONLY in the SKILL.md frontmatter name field,
145
+ not in the directory name.
146
+ - display_name: human-readable title
147
+ - description: the frontmatter description text
148
+ - content: the full SKILL.md including frontmatter
149
+ - candidate_id: the candidate ID from the gather phase
150
+ - source_ids: JSON array of source item IDs used
151
+ - rationale: "Initial generation from candidate survey"
152
+ tools:
153
+ - vault_write_skill
154
+ - vault_skill_records
155
+ maxTurns: 10
156
+ required: true
157
+ dependsOn:
158
+ - gather
159
+
160
+ - name: validate
161
+ prompt: |
162
+ Review the skill you just generated. Read it back from
163
+ vault_skill_records (action: get) to see the stored record.
164
+
165
+ Check against these criteria:
166
+
167
+ 1. **Triggering clarity:** Would an agent reading only the
168
+ description know when to use this skill? Test: describe
169
+ a task that SHOULD trigger it and one that SHOULD NOT.
170
+
171
+ 2. **Procedural content:** Does every section describe steps
172
+ to take? Remove any definitional content ("X is...").
173
+
174
+ 3. **Concreteness:** Does it reference real file paths,
175
+ function names, and code patterns from this project?
176
+ Generic advice ("add a config file") is not enough.
177
+
178
+ 4. **Length:** Under 500 lines?
179
+
180
+ 5. **Conflicts:** Does it overlap with existing skills?
181
+ Use vault_skill_records (action: list) to check.
182
+
183
+ 6. **Accuracy:** Spot-check 2-3 specific claims against the
184
+ vault. Use vault_search_fts to verify file paths and
185
+ function names mentioned in the skill.
186
+
187
+ If any criterion fails, rewrite using vault_write_skill.
188
+ This automatically bumps the generation.
189
+
190
+ **CRITICAL:** When rewriting, preserve ALL frontmatter fields from
191
+ the original — including user-invocable and allowed-tools. Read the
192
+ existing skill content first and carry every frontmatter field forward.
193
+ The quality gate will reject writes missing required fields.
194
+
195
+ Report results using vault_report with:
196
+ - Skill name and path
197
+ - Generation number
198
+ - Each criterion: pass/fail with brief note
199
+ - Any rewrites performed
200
+ tools:
201
+ - vault_write_skill
202
+ - vault_skill_records
203
+ - vault_skill_candidates
204
+ - vault_spores
205
+ - vault_search_fts
206
+ - vault_report
207
+ maxTurns: 8
208
+ required: true
209
+ dependsOn:
210
+ - draft