@goondocks/myco 0.18.0 → 0.18.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 (128) hide show
  1. package/dist/{agent-run-2NFYMQXW.js → agent-run-I4O2K2CK.js} +4 -4
  2. package/dist/{agent-tasks-MEIYLXGN.js → agent-tasks-UOW5BQIB.js} +4 -4
  3. package/dist/{chunk-JMOUFG6Y.js → chunk-44PZCAYS.js} +47 -5
  4. package/dist/chunk-44PZCAYS.js.map +1 -0
  5. package/dist/{chunk-JDI4DPWD.js → chunk-C3EGL5JX.js} +632 -145
  6. package/dist/chunk-C3EGL5JX.js.map +1 -0
  7. package/dist/{chunk-OW433Q4C.js → chunk-CURS2TNP.js} +44 -3
  8. package/dist/chunk-CURS2TNP.js.map +1 -0
  9. package/dist/{chunk-FABWUX5G.js → chunk-DPSLJ242.js} +16 -2
  10. package/dist/chunk-DPSLJ242.js.map +1 -0
  11. package/dist/{chunk-DLFDBKEV.js → chunk-LSP5HYOO.js} +17 -14
  12. package/dist/chunk-LSP5HYOO.js.map +1 -0
  13. package/dist/{chunk-VOCGURV7.js → chunk-N75GMQGA.js} +3 -3
  14. package/dist/{chunk-U7GJTVSX.js → chunk-RIDSOQDR.js} +20 -6
  15. package/dist/chunk-RIDSOQDR.js.map +1 -0
  16. package/dist/{chunk-KWTOCJLB.js → chunk-TCSVDQF5.js} +1128 -193
  17. package/dist/chunk-TCSVDQF5.js.map +1 -0
  18. package/dist/{chunk-55QEICRO.js → chunk-TLK46KKD.js} +2 -2
  19. package/dist/{chunk-NZI7WBZI.js → chunk-TOER6RNC.js} +21 -1
  20. package/dist/chunk-TOER6RNC.js.map +1 -0
  21. package/dist/{chunk-7OYXB2NM.js → chunk-TZAXQKO6.js} +5 -1
  22. package/dist/chunk-TZAXQKO6.js.map +1 -0
  23. package/dist/{chunk-EO2RQW4S.js → chunk-W7WENJ6F.js} +2 -2
  24. package/dist/{chunk-BUIR3JWM.js → chunk-XWOQL4XN.js} +2 -2
  25. package/dist/{chunk-PFWIPRF6.js → chunk-YZPI2Y3E.js} +2 -2
  26. package/dist/{cli-IIMBALPV.js → cli-D3TJYJ2U.js} +35 -35
  27. package/dist/{client-VZCUISHZ.js → client-4LLEXLVK.js} +3 -3
  28. package/dist/{detect-GEM3NVK6.js → detect-SZ2KDUF4.js} +2 -2
  29. package/dist/{doctor-QYD34X7Q.js → doctor-KCTXPX5D.js} +6 -6
  30. package/dist/{executor-NSPRTH4M.js → executor-UYIZC3L5.js} +83 -275
  31. package/dist/executor-UYIZC3L5.js.map +1 -0
  32. package/dist/{init-WYYL44KZ.js → init-QFNBKKDC.js} +7 -7
  33. package/dist/{llm-KEDHK3TQ.js → llm-SMA5ZEAW.js} +2 -2
  34. package/dist/{main-6PY3ITQ5.js → main-5THODR77.js} +427 -196
  35. package/dist/main-5THODR77.js.map +1 -0
  36. package/dist/{open-HRFMJDQX.js → open-7737CSPN.js} +4 -4
  37. package/dist/{post-compact-HT24YMAN.js → post-compact-2TJ5FPZH.js} +6 -6
  38. package/dist/{post-tool-use-DENRI5WB.js → post-tool-use-FRTSICC3.js} +5 -5
  39. package/dist/{post-tool-use-failure-A6SNJX42.js → post-tool-use-failure-KYO2NCNB.js} +6 -6
  40. package/dist/{pre-compact-3Q4BALCL.js → pre-compact-J6GCJEJR.js} +6 -6
  41. package/dist/{remove-YB5A6HY2.js → remove-3WZZC7AX.js} +5 -5
  42. package/dist/{restart-RGDVHELZ.js → restart-HUHEFOXU.js} +5 -5
  43. package/dist/{search-WOHT3G55.js → search-ZGN3LDXG.js} +5 -5
  44. package/dist/{server-6SUNYDV7.js → server-PTXLVVEE.js} +3 -3
  45. package/dist/{session-W3SKRFRV.js → session-7VV3IQMO.js} +5 -5
  46. package/dist/{session-end-OUTY7AFF.js → session-end-SMU55UCM.js} +5 -5
  47. package/dist/{session-start-5MB3LFOA.js → session-start-NIMWEOIZ.js} +16 -11
  48. package/dist/{session-start-5MB3LFOA.js.map → session-start-NIMWEOIZ.js.map} +1 -1
  49. package/dist/{setup-llm-ZMYGIQX5.js → setup-llm-7S3VPAPN.js} +4 -4
  50. package/dist/src/agent/definitions/tasks/extract-only.yaml +1 -1
  51. package/dist/src/agent/definitions/tasks/full-intelligence.yaml +10 -0
  52. package/dist/src/agent/definitions/tasks/skill-evolve.yaml +163 -49
  53. package/dist/src/agent/definitions/tasks/skill-generate.yaml +44 -27
  54. package/dist/src/agent/definitions/tasks/skill-survey.yaml +132 -138
  55. package/dist/src/agent/definitions/tasks/supersession-sweep.yaml +1 -1
  56. package/dist/src/cli.js +1 -1
  57. package/dist/src/daemon/main.js +1 -1
  58. package/dist/src/hooks/post-tool-use.js +1 -1
  59. package/dist/src/hooks/session-end.js +1 -1
  60. package/dist/src/hooks/session-start.js +1 -1
  61. package/dist/src/hooks/stop.js +1 -1
  62. package/dist/src/hooks/user-prompt-submit.js +1 -1
  63. package/dist/src/mcp/server.js +1 -1
  64. package/dist/src/symbionts/manifests/codex.yaml +45 -7
  65. package/dist/src/worker/src/index.ts +8 -2
  66. package/dist/src/worker/src/schema.ts +2 -0
  67. package/dist/{stats-DGI6B3HX.js → stats-GEOQ2DFF.js} +5 -5
  68. package/dist/{stop-YGHODSP7.js → stop-7AKYBJJ2.js} +5 -5
  69. package/dist/{stop-failure-7IJTPJ6W.js → stop-failure-NLE2EURG.js} +6 -6
  70. package/dist/{subagent-start-ZBQ5PJB5.js → subagent-start-LBNZF2TG.js} +6 -6
  71. package/dist/{subagent-stop-N2TDQU2D.js → subagent-stop-B2Z5GYAB.js} +6 -6
  72. package/dist/{task-completed-BDLMRSBB.js → task-completed-PO5TETJ7.js} +6 -6
  73. package/dist/{team-2ZFGTSIN.js → team-DPNP2RN7.js} +3 -3
  74. package/dist/ui/assets/{index-DtT9_nlT.js → index-CiI1fwas.js} +2 -2
  75. package/dist/ui/index.html +1 -1
  76. package/dist/{update-STLAN7LR.js → update-WBWB5URU.js} +5 -5
  77. package/dist/{user-prompt-submit-4IBFUYQ3.js → user-prompt-submit-IZJC3NV7.js} +11 -8
  78. package/dist/user-prompt-submit-IZJC3NV7.js.map +1 -0
  79. package/dist/{verify-EJYPO7QA.js → verify-FNSP62I3.js} +2 -2
  80. package/dist/{version-YPBIKH77.js → version-QEVU66NT.js} +2 -2
  81. package/package.json +7 -7
  82. package/dist/chunk-7OYXB2NM.js.map +0 -1
  83. package/dist/chunk-DLFDBKEV.js.map +0 -1
  84. package/dist/chunk-FABWUX5G.js.map +0 -1
  85. package/dist/chunk-JDI4DPWD.js.map +0 -1
  86. package/dist/chunk-JMOUFG6Y.js.map +0 -1
  87. package/dist/chunk-KWTOCJLB.js.map +0 -1
  88. package/dist/chunk-NZI7WBZI.js.map +0 -1
  89. package/dist/chunk-OW433Q4C.js.map +0 -1
  90. package/dist/chunk-U7GJTVSX.js.map +0 -1
  91. package/dist/executor-NSPRTH4M.js.map +0 -1
  92. package/dist/main-6PY3ITQ5.js.map +0 -1
  93. package/dist/user-prompt-submit-4IBFUYQ3.js.map +0 -1
  94. /package/dist/{agent-run-2NFYMQXW.js.map → agent-run-I4O2K2CK.js.map} +0 -0
  95. /package/dist/{agent-tasks-MEIYLXGN.js.map → agent-tasks-UOW5BQIB.js.map} +0 -0
  96. /package/dist/{chunk-VOCGURV7.js.map → chunk-N75GMQGA.js.map} +0 -0
  97. /package/dist/{chunk-55QEICRO.js.map → chunk-TLK46KKD.js.map} +0 -0
  98. /package/dist/{chunk-EO2RQW4S.js.map → chunk-W7WENJ6F.js.map} +0 -0
  99. /package/dist/{chunk-BUIR3JWM.js.map → chunk-XWOQL4XN.js.map} +0 -0
  100. /package/dist/{chunk-PFWIPRF6.js.map → chunk-YZPI2Y3E.js.map} +0 -0
  101. /package/dist/{cli-IIMBALPV.js.map → cli-D3TJYJ2U.js.map} +0 -0
  102. /package/dist/{client-VZCUISHZ.js.map → client-4LLEXLVK.js.map} +0 -0
  103. /package/dist/{detect-GEM3NVK6.js.map → detect-SZ2KDUF4.js.map} +0 -0
  104. /package/dist/{doctor-QYD34X7Q.js.map → doctor-KCTXPX5D.js.map} +0 -0
  105. /package/dist/{init-WYYL44KZ.js.map → init-QFNBKKDC.js.map} +0 -0
  106. /package/dist/{llm-KEDHK3TQ.js.map → llm-SMA5ZEAW.js.map} +0 -0
  107. /package/dist/{open-HRFMJDQX.js.map → open-7737CSPN.js.map} +0 -0
  108. /package/dist/{post-compact-HT24YMAN.js.map → post-compact-2TJ5FPZH.js.map} +0 -0
  109. /package/dist/{post-tool-use-DENRI5WB.js.map → post-tool-use-FRTSICC3.js.map} +0 -0
  110. /package/dist/{post-tool-use-failure-A6SNJX42.js.map → post-tool-use-failure-KYO2NCNB.js.map} +0 -0
  111. /package/dist/{pre-compact-3Q4BALCL.js.map → pre-compact-J6GCJEJR.js.map} +0 -0
  112. /package/dist/{remove-YB5A6HY2.js.map → remove-3WZZC7AX.js.map} +0 -0
  113. /package/dist/{restart-RGDVHELZ.js.map → restart-HUHEFOXU.js.map} +0 -0
  114. /package/dist/{search-WOHT3G55.js.map → search-ZGN3LDXG.js.map} +0 -0
  115. /package/dist/{server-6SUNYDV7.js.map → server-PTXLVVEE.js.map} +0 -0
  116. /package/dist/{session-W3SKRFRV.js.map → session-7VV3IQMO.js.map} +0 -0
  117. /package/dist/{session-end-OUTY7AFF.js.map → session-end-SMU55UCM.js.map} +0 -0
  118. /package/dist/{setup-llm-ZMYGIQX5.js.map → setup-llm-7S3VPAPN.js.map} +0 -0
  119. /package/dist/{stats-DGI6B3HX.js.map → stats-GEOQ2DFF.js.map} +0 -0
  120. /package/dist/{stop-YGHODSP7.js.map → stop-7AKYBJJ2.js.map} +0 -0
  121. /package/dist/{stop-failure-7IJTPJ6W.js.map → stop-failure-NLE2EURG.js.map} +0 -0
  122. /package/dist/{subagent-start-ZBQ5PJB5.js.map → subagent-start-LBNZF2TG.js.map} +0 -0
  123. /package/dist/{subagent-stop-N2TDQU2D.js.map → subagent-stop-B2Z5GYAB.js.map} +0 -0
  124. /package/dist/{task-completed-BDLMRSBB.js.map → task-completed-PO5TETJ7.js.map} +0 -0
  125. /package/dist/{team-2ZFGTSIN.js.map → team-DPNP2RN7.js.map} +0 -0
  126. /package/dist/{update-STLAN7LR.js.map → update-WBWB5URU.js.map} +0 -0
  127. /package/dist/{verify-EJYPO7QA.js.map → verify-FNSP62I3.js.map} +0 -0
  128. /package/dist/{version-YPBIKH77.js.map → version-QEVU66NT.js.map} +0 -0
@@ -4,13 +4,13 @@ import {
4
4
  } from "./chunk-5NFJTZ64.js";
5
5
  import {
6
6
  connectToDaemon
7
- } from "./chunk-55QEICRO.js";
7
+ } from "./chunk-TLK46KKD.js";
8
8
  import "./chunk-SAKJMNSR.js";
9
9
  import "./chunk-WYOE4IAX.js";
10
10
  import "./chunk-CML4MCYF.js";
11
11
  import "./chunk-MYX5NCRH.js";
12
- import "./chunk-BUIR3JWM.js";
13
- import "./chunk-EO2RQW4S.js";
12
+ import "./chunk-XWOQL4XN.js";
13
+ import "./chunk-W7WENJ6F.js";
14
14
  import "./chunk-LPUQPDC2.js";
15
15
  import "./chunk-CKJAWZQE.js";
16
16
  import "./chunk-E7NUADTQ.js";
@@ -37,4 +37,4 @@ async function run(_args, vaultDir) {
37
37
  export {
38
38
  run
39
39
  };
40
- //# sourceMappingURL=open-HRFMJDQX.js.map
40
+ //# sourceMappingURL=open-7737CSPN.js.map
@@ -1,13 +1,13 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
  import {
3
3
  sendEvent
4
- } from "./chunk-VOCGURV7.js";
4
+ } from "./chunk-N75GMQGA.js";
5
5
  import "./chunk-V7XG6V6C.js";
6
- import "./chunk-PFWIPRF6.js";
6
+ import "./chunk-YZPI2Y3E.js";
7
7
  import "./chunk-5ZT2Q6P5.js";
8
- import "./chunk-BUIR3JWM.js";
9
- import "./chunk-EO2RQW4S.js";
10
- import "./chunk-FABWUX5G.js";
8
+ import "./chunk-XWOQL4XN.js";
9
+ import "./chunk-W7WENJ6F.js";
10
+ import "./chunk-DPSLJ242.js";
11
11
  import "./chunk-LPUQPDC2.js";
12
12
  import "./chunk-CKJAWZQE.js";
13
13
  import "./chunk-E7NUADTQ.js";
@@ -27,4 +27,4 @@ async function main() {
27
27
  export {
28
28
  main
29
29
  };
30
- //# sourceMappingURL=post-compact-HT24YMAN.js.map
30
+ //# sourceMappingURL=post-compact-2TJ5FPZH.js.map
@@ -5,15 +5,15 @@ import {
5
5
  import {
6
6
  normalizeHookInput,
7
7
  readStdin
8
- } from "./chunk-PFWIPRF6.js";
8
+ } from "./chunk-YZPI2Y3E.js";
9
9
  import {
10
10
  resolveVaultDir
11
11
  } from "./chunk-5ZT2Q6P5.js";
12
12
  import {
13
13
  DaemonClient
14
- } from "./chunk-BUIR3JWM.js";
15
- import "./chunk-EO2RQW4S.js";
16
- import "./chunk-FABWUX5G.js";
14
+ } from "./chunk-XWOQL4XN.js";
15
+ import "./chunk-W7WENJ6F.js";
16
+ import "./chunk-DPSLJ242.js";
17
17
  import "./chunk-LPUQPDC2.js";
18
18
  import {
19
19
  TOOL_OUTPUT_PREVIEW_CHARS
@@ -60,4 +60,4 @@ async function main() {
60
60
  export {
61
61
  main
62
62
  };
63
- //# sourceMappingURL=post-tool-use-DENRI5WB.js.map
63
+ //# sourceMappingURL=post-tool-use-FRTSICC3.js.map
@@ -1,13 +1,13 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
  import {
3
3
  sendEvent
4
- } from "./chunk-VOCGURV7.js";
4
+ } from "./chunk-N75GMQGA.js";
5
5
  import "./chunk-V7XG6V6C.js";
6
- import "./chunk-PFWIPRF6.js";
6
+ import "./chunk-YZPI2Y3E.js";
7
7
  import "./chunk-5ZT2Q6P5.js";
8
- import "./chunk-BUIR3JWM.js";
9
- import "./chunk-EO2RQW4S.js";
10
- import "./chunk-FABWUX5G.js";
8
+ import "./chunk-XWOQL4XN.js";
9
+ import "./chunk-W7WENJ6F.js";
10
+ import "./chunk-DPSLJ242.js";
11
11
  import "./chunk-LPUQPDC2.js";
12
12
  import "./chunk-CKJAWZQE.js";
13
13
  import "./chunk-E7NUADTQ.js";
@@ -29,4 +29,4 @@ async function main() {
29
29
  export {
30
30
  main
31
31
  };
32
- //# sourceMappingURL=post-tool-use-failure-A6SNJX42.js.map
32
+ //# sourceMappingURL=post-tool-use-failure-KYO2NCNB.js.map
@@ -1,13 +1,13 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
  import {
3
3
  sendEvent
4
- } from "./chunk-VOCGURV7.js";
4
+ } from "./chunk-N75GMQGA.js";
5
5
  import "./chunk-V7XG6V6C.js";
6
- import "./chunk-PFWIPRF6.js";
6
+ import "./chunk-YZPI2Y3E.js";
7
7
  import "./chunk-5ZT2Q6P5.js";
8
- import "./chunk-BUIR3JWM.js";
9
- import "./chunk-EO2RQW4S.js";
10
- import "./chunk-FABWUX5G.js";
8
+ import "./chunk-XWOQL4XN.js";
9
+ import "./chunk-W7WENJ6F.js";
10
+ import "./chunk-DPSLJ242.js";
11
11
  import "./chunk-LPUQPDC2.js";
12
12
  import "./chunk-CKJAWZQE.js";
13
13
  import "./chunk-E7NUADTQ.js";
@@ -26,4 +26,4 @@ async function main() {
26
26
  export {
27
27
  main
28
28
  };
29
- //# sourceMappingURL=pre-compact-3Q4BALCL.js.map
29
+ //# sourceMappingURL=pre-compact-J6GCJEJR.js.map
@@ -1,7 +1,7 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
  import {
3
3
  isProcessAlive
4
- } from "./chunk-55QEICRO.js";
4
+ } from "./chunk-TLK46KKD.js";
5
5
  import {
6
6
  parseStringFlag
7
7
  } from "./chunk-SAKJMNSR.js";
@@ -16,12 +16,12 @@ import "./chunk-MYX5NCRH.js";
16
16
  import {
17
17
  resolveVaultDir
18
18
  } from "./chunk-5ZT2Q6P5.js";
19
- import "./chunk-BUIR3JWM.js";
20
- import "./chunk-EO2RQW4S.js";
19
+ import "./chunk-XWOQL4XN.js";
20
+ import "./chunk-W7WENJ6F.js";
21
21
  import {
22
22
  loadManifests,
23
23
  resolvePackageRoot
24
- } from "./chunk-FABWUX5G.js";
24
+ } from "./chunk-DPSLJ242.js";
25
25
  import "./chunk-LPUQPDC2.js";
26
26
  import "./chunk-CKJAWZQE.js";
27
27
  import "./chunk-E7NUADTQ.js";
@@ -123,4 +123,4 @@ async function run(args) {
123
123
  export {
124
124
  run
125
125
  };
126
- //# sourceMappingURL=remove-YB5A6HY2.js.map
126
+ //# sourceMappingURL=remove-3WZZC7AX.js.map
@@ -1,13 +1,13 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
  import {
3
3
  isProcessAlive
4
- } from "./chunk-55QEICRO.js";
4
+ } from "./chunk-TLK46KKD.js";
5
5
  import "./chunk-SAKJMNSR.js";
6
6
  import "./chunk-WYOE4IAX.js";
7
7
  import "./chunk-CML4MCYF.js";
8
8
  import "./chunk-MYX5NCRH.js";
9
- import "./chunk-BUIR3JWM.js";
10
- import "./chunk-EO2RQW4S.js";
9
+ import "./chunk-XWOQL4XN.js";
10
+ import "./chunk-W7WENJ6F.js";
11
11
  import "./chunk-LPUQPDC2.js";
12
12
  import "./chunk-CKJAWZQE.js";
13
13
  import "./chunk-E7NUADTQ.js";
@@ -34,7 +34,7 @@ async function run(_args, vaultDir) {
34
34
  } catch {
35
35
  }
36
36
  }
37
- const { DaemonClient } = await import("./client-VZCUISHZ.js");
37
+ const { DaemonClient } = await import("./client-4LLEXLVK.js");
38
38
  const client = new DaemonClient(vaultDir);
39
39
  console.log("Waiting for health check...");
40
40
  const healthy = await client.ensureRunning();
@@ -53,4 +53,4 @@ async function run(_args, vaultDir) {
53
53
  export {
54
54
  run
55
55
  };
56
- //# sourceMappingURL=restart-RGDVHELZ.js.map
56
+ //# sourceMappingURL=restart-HUHEFOXU.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
  fullTextSearch
4
- } from "./chunk-NZI7WBZI.js";
4
+ } from "./chunk-TOER6RNC.js";
5
5
  import {
6
6
  connectToDaemon,
7
7
  initVaultDb
8
- } from "./chunk-55QEICRO.js";
8
+ } from "./chunk-TLK46KKD.js";
9
9
  import "./chunk-SAKJMNSR.js";
10
10
  import "./chunk-WYOE4IAX.js";
11
11
  import "./chunk-CML4MCYF.js";
12
12
  import "./chunk-MYX5NCRH.js";
13
- import "./chunk-BUIR3JWM.js";
14
- import "./chunk-EO2RQW4S.js";
13
+ import "./chunk-XWOQL4XN.js";
14
+ import "./chunk-W7WENJ6F.js";
15
15
  import "./chunk-LPUQPDC2.js";
16
16
  import {
17
17
  CONTENT_SNIPPET_CHARS
@@ -89,4 +89,4 @@ export {
89
89
  run,
90
90
  runVectors
91
91
  };
92
- //# sourceMappingURL=search-WOHT3G55.js.map
92
+ //# sourceMappingURL=search-ZGN3LDXG.js.map
@@ -5,10 +5,10 @@ import {
5
5
  } from "./chunk-5ZT2Q6P5.js";
6
6
  import {
7
7
  DaemonClient
8
- } from "./chunk-BUIR3JWM.js";
8
+ } from "./chunk-XWOQL4XN.js";
9
9
  import {
10
10
  getPluginVersion
11
- } from "./chunk-EO2RQW4S.js";
11
+ } from "./chunk-W7WENJ6F.js";
12
12
  import "./chunk-LPUQPDC2.js";
13
13
  import {
14
14
  DAEMON_CLIENT_TIMEOUT_MS,
@@ -14634,4 +14634,4 @@ export {
14634
14634
  createMycoServer,
14635
14635
  main
14636
14636
  };
14637
- //# sourceMappingURL=server-6SUNYDV7.js.map
14637
+ //# sourceMappingURL=server-PTXLVVEE.js.map
@@ -1,18 +1,18 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
  import {
3
3
  initVaultDb
4
- } from "./chunk-55QEICRO.js";
4
+ } from "./chunk-TLK46KKD.js";
5
5
  import "./chunk-SAKJMNSR.js";
6
6
  import "./chunk-WYOE4IAX.js";
7
7
  import "./chunk-CML4MCYF.js";
8
8
  import {
9
9
  getSession,
10
10
  listSessions
11
- } from "./chunk-U7GJTVSX.js";
11
+ } from "./chunk-RIDSOQDR.js";
12
12
  import "./chunk-O3TRN3RC.js";
13
13
  import "./chunk-MYX5NCRH.js";
14
- import "./chunk-BUIR3JWM.js";
15
- import "./chunk-EO2RQW4S.js";
14
+ import "./chunk-XWOQL4XN.js";
15
+ import "./chunk-W7WENJ6F.js";
16
16
  import "./chunk-LPUQPDC2.js";
17
17
  import "./chunk-CKJAWZQE.js";
18
18
  import "./chunk-E7NUADTQ.js";
@@ -67,4 +67,4 @@ ${target.summary}`);
67
67
  export {
68
68
  run
69
69
  };
70
- //# sourceMappingURL=session-W3SKRFRV.js.map
70
+ //# sourceMappingURL=session-7VV3IQMO.js.map
@@ -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-PFWIPRF6.js";
5
+ } from "./chunk-YZPI2Y3E.js";
6
6
  import {
7
7
  resolveVaultDir
8
8
  } from "./chunk-5ZT2Q6P5.js";
9
9
  import {
10
10
  DaemonClient
11
- } from "./chunk-BUIR3JWM.js";
12
- import "./chunk-EO2RQW4S.js";
13
- import "./chunk-FABWUX5G.js";
11
+ } from "./chunk-XWOQL4XN.js";
12
+ import "./chunk-W7WENJ6F.js";
13
+ import "./chunk-DPSLJ242.js";
14
14
  import "./chunk-LPUQPDC2.js";
15
15
  import "./chunk-CKJAWZQE.js";
16
16
  import "./chunk-E7NUADTQ.js";
@@ -40,4 +40,4 @@ async function main() {
40
40
  export {
41
41
  main
42
42
  };
43
- //# sourceMappingURL=session-end-OUTY7AFF.js.map
43
+ //# sourceMappingURL=session-end-SMU55UCM.js.map
@@ -1,17 +1,18 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
  import {
3
3
  listSpores
4
- } from "./chunk-7OYXB2NM.js";
4
+ } from "./chunk-TZAXQKO6.js";
5
5
  import {
6
6
  listSessions
7
- } from "./chunk-U7GJTVSX.js";
7
+ } from "./chunk-RIDSOQDR.js";
8
8
  import "./chunk-O3TRN3RC.js";
9
9
  import {
10
- evaluateSessionStartRules
11
- } from "./chunk-JMOUFG6Y.js";
10
+ evaluateSessionStartRules,
11
+ readTranscriptMeta
12
+ } from "./chunk-44PZCAYS.js";
12
13
  import {
13
14
  createSchema
14
- } from "./chunk-OW433Q4C.js";
15
+ } from "./chunk-CURS2TNP.js";
15
16
  import {
16
17
  loadConfig
17
18
  } from "./chunk-2V7HR7HB.js";
@@ -23,17 +24,17 @@ import {
23
24
  import {
24
25
  normalizeHookInput,
25
26
  readStdin
26
- } from "./chunk-PFWIPRF6.js";
27
+ } from "./chunk-YZPI2Y3E.js";
27
28
  import {
28
29
  resolveVaultDir
29
30
  } from "./chunk-5ZT2Q6P5.js";
30
31
  import {
31
32
  DaemonClient
32
- } from "./chunk-BUIR3JWM.js";
33
- import "./chunk-EO2RQW4S.js";
33
+ } from "./chunk-XWOQL4XN.js";
34
+ import "./chunk-W7WENJ6F.js";
34
35
  import {
35
36
  loadManifests
36
- } from "./chunk-FABWUX5G.js";
37
+ } from "./chunk-DPSLJ242.js";
37
38
  import "./chunk-LPUQPDC2.js";
38
39
  import {
39
40
  CONTEXT_SESSION_PREVIEW_CHARS,
@@ -138,7 +139,11 @@ async function main() {
138
139
  try {
139
140
  const rawInput = JSON.parse(await readStdin());
140
141
  const { sessionId, agent, transcriptPath } = normalizeHookInput(rawInput);
141
- const decision = evaluateSessionStartRules(loadManifests(), agent, { transcriptPath });
142
+ const transcriptMeta = transcriptPath ? readTranscriptMeta(transcriptPath) : void 0;
143
+ const decision = evaluateSessionStartRules(loadManifests(), agent, {
144
+ transcriptPath,
145
+ transcriptMeta: transcriptMeta ?? void 0
146
+ });
142
147
  if (decision.action === "drop") {
143
148
  process.stderr.write(`[myco] session-start: dropped (${decision.reason ?? "rule"})
144
149
  `);
@@ -181,4 +186,4 @@ async function main() {
181
186
  export {
182
187
  main
183
188
  };
184
- //# sourceMappingURL=session-start-5MB3LFOA.js.map
189
+ //# sourceMappingURL=session-start-NIMWEOIZ.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/context/injector.ts","../src/hooks/session-start.ts"],"sourcesContent":["/**\n * Context injector — assembles context from SQLite for hook injection.\n *\n * Queries sessions and spores from SQLite. For prompt-submit context,\n * semantic search is deferred to Phase 2 (requires daemon vector store).\n * If no data exists (zero-config), returns empty context gracefully.\n */\n\nimport { getDatabase } from '@myco/db/client.js';\nimport { listSessions } from '@myco/db/queries/sessions.js';\nimport { listSpores } from '@myco/db/queries/spores.js';\nimport type { MycoConfig } from '@myco/config/schema.js';\nimport {\n estimateTokens,\n CONTEXT_SESSION_PREVIEW_CHARS,\n CONTEXT_SPORE_PREVIEW_CHARS,\n PROMPT_CONTEXT_MIN_LENGTH,\n EXCLUDED_SPORE_STATUSES,\n} from '@myco/constants.js';\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\n/** Max recent sessions to include in context. */\nconst CONTEXT_SESSION_LIMIT = 10;\n\n/** Max sessions displayed after scoring. */\nconst CONTEXT_SESSION_DISPLAY_LIMIT = 5;\n\n/** Max spores to fetch for scoring. */\nconst CONTEXT_SPORE_FETCH_LIMIT = 20;\n\n/** Max spores displayed after scoring. */\nconst CONTEXT_SPORE_DISPLAY_LIMIT = 5;\n\n/** Default token budget for sessions layer. */\nconst DEFAULT_SESSIONS_BUDGET = 500;\n\n/** Default token budget for spores layer. */\nconst DEFAULT_SPORES_BUDGET = 300;\n\n/** Default token budget for team layer. */\nconst DEFAULT_TEAM_BUDGET = 200;\n\n/** Default total context max tokens. */\nconst DEFAULT_CONTEXT_MAX_TOKENS = 1200;\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ninterface InjectionContext {\n branch?: string;\n}\n\ninterface InjectedContext {\n text: string;\n tokenEstimate: number;\n layers: {\n sessions: string;\n spores: string;\n team: string;\n };\n}\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * Build injected context from SQLite data.\n *\n * Returns empty context gracefully when no data exists (zero-config behavior).\n */\nexport async function buildInjectedContext(\n _config: MycoConfig,\n context: InjectionContext,\n): Promise<InjectedContext> {\n // Verify database is available — return empty if not\n try {\n getDatabase();\n } catch {\n return emptyContext();\n }\n\n // Fetch sessions and spores in parallel\n const [sessions, spores] = await Promise.all([\n listSessions({ limit: CONTEXT_SESSION_LIMIT }),\n listSpores({ limit: CONTEXT_SPORE_FETCH_LIMIT, status: 'active' }),\n ]);\n\n // Layer 1: Recent sessions\n const sessionsText = formatLayer(\n 'Recent Sessions',\n sessions.slice(0, CONTEXT_SESSION_DISPLAY_LIMIT).map((s) => {\n const title = s.title ?? s.id;\n const summary = (s.summary ?? '').slice(0, CONTEXT_SESSION_PREVIEW_CHARS);\n const branchLabel = s.branch === context.branch ? ' (same branch)' : '';\n return `- **${title}**: ${summary}${branchLabel}`;\n }),\n DEFAULT_SESSIONS_BUDGET,\n );\n\n // Layer 2: Relevant spores (exclude superseded/archived)\n const filteredSpores = spores.filter((s) =>\n !EXCLUDED_SPORE_STATUSES.has(s.status),\n );\n const sporesText = formatLayer(\n 'Relevant Spores',\n filteredSpores.slice(0, CONTEXT_SPORE_DISPLAY_LIMIT).map((s) =>\n `- **${s.id}** (${s.observation_type}): ${s.content.slice(0, CONTEXT_SPORE_PREVIEW_CHARS)}`,\n ),\n DEFAULT_SPORES_BUDGET,\n );\n\n // Layer 3: Team activity (placeholder — populated in Phase 2)\n const teamText = formatLayer('Team Activity', [], DEFAULT_TEAM_BUDGET);\n\n // Enforce total max_tokens budget\n const allLayers = [sessionsText, sporesText, teamText].filter(Boolean);\n const parts: string[] = [];\n let totalTokens = 0;\n\n for (const layer of allLayers) {\n const layerTokens = estimateTokens(layer);\n if (totalTokens + layerTokens > DEFAULT_CONTEXT_MAX_TOKENS) break;\n parts.push(layer);\n totalTokens += layerTokens;\n }\n\n const fullText = parts.join('\\n\\n');\n\n return {\n text: fullText,\n tokenEstimate: totalTokens,\n layers: {\n sessions: sessionsText,\n spores: sporesText,\n team: teamText,\n },\n };\n}\n\n/**\n * Build per-prompt context using semantic search on spores.\n *\n * Semantic search via the daemon's in-process vector store is deferred to\n * Phase 2. For now, returns empty context. The hook (`user-prompt-submit`)\n * routes through the daemon API at `/context/prompt`, which will implement\n * vector search when ready.\n */\nexport async function buildPromptContext(\n prompt: string,\n _config: MycoConfig,\n): Promise<InjectedContext> {\n if (prompt.length < PROMPT_CONTEXT_MIN_LENGTH) {\n return emptyContext();\n }\n\n // Per-prompt semantic search deferred to Phase 2 (requires daemon vector store)\n return emptyContext();\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction emptyContext(): InjectedContext {\n return {\n text: '',\n tokenEstimate: 0,\n layers: { sessions: '', spores: '', team: '' },\n };\n}\n\nfunction formatLayer(heading: string, items: string[], budget: number): string {\n if (items.length === 0) return '';\n\n let text = `### ${heading}\\n`;\n let currentTokens = estimateTokens(text);\n\n for (const item of items) {\n const itemTokens = estimateTokens(item);\n if (currentTokens + itemTokens > budget) break;\n text += item + '\\n';\n currentTokens += itemTokens;\n }\n\n return text.trim();\n}\n","import { DaemonClient } from './client.js';\nimport { readStdin } from './read-stdin.js';\nimport { normalizeHookInput } from './normalize.js';\nimport { evaluateSessionStartRules } from './capture-rules.js';\nimport { loadManifests } from '../symbionts/detect.js';\nimport { loadConfig } 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 const decision = evaluateSessionStartRules(loadManifests(), agent, { transcriptPath });\n if (decision.action === 'drop') {\n process.stderr.write(`[myco] session-start: dropped (${decision.reason ?? 'rule'})\\n`);\n return;\n }\n\n const config = loadConfig(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 await client.post('/sessions/register', {\n session_id: sessionId,\n agent,\n branch,\n started_at: new Date().toISOString(),\n });\n\n const contextResult = await client.post('/context', { session_id: sessionId, branch });\n\n if (contextResult.ok && contextResult.data?.text) {\n if (contextResult.data.source === 'digest') {\n process.stderr.write(`[myco] Injecting digest extract (tier ${contextResult.data.tier})\\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":"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","names":[]}
1
+ {"version":3,"sources":["../src/context/injector.ts","../src/hooks/session-start.ts"],"sourcesContent":["/**\n * Context injector — assembles context from SQLite for hook injection.\n *\n * Queries sessions and spores from SQLite. For prompt-submit context,\n * semantic search is deferred to Phase 2 (requires daemon vector store).\n * If no data exists (zero-config), returns empty context gracefully.\n */\n\nimport { getDatabase } from '@myco/db/client.js';\nimport { listSessions } from '@myco/db/queries/sessions.js';\nimport { listSpores } from '@myco/db/queries/spores.js';\nimport type { MycoConfig } from '@myco/config/schema.js';\nimport {\n estimateTokens,\n CONTEXT_SESSION_PREVIEW_CHARS,\n CONTEXT_SPORE_PREVIEW_CHARS,\n PROMPT_CONTEXT_MIN_LENGTH,\n EXCLUDED_SPORE_STATUSES,\n} from '@myco/constants.js';\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\n/** Max recent sessions to include in context. */\nconst CONTEXT_SESSION_LIMIT = 10;\n\n/** Max sessions displayed after scoring. */\nconst CONTEXT_SESSION_DISPLAY_LIMIT = 5;\n\n/** Max spores to fetch for scoring. */\nconst CONTEXT_SPORE_FETCH_LIMIT = 20;\n\n/** Max spores displayed after scoring. */\nconst CONTEXT_SPORE_DISPLAY_LIMIT = 5;\n\n/** Default token budget for sessions layer. */\nconst DEFAULT_SESSIONS_BUDGET = 500;\n\n/** Default token budget for spores layer. */\nconst DEFAULT_SPORES_BUDGET = 300;\n\n/** Default token budget for team layer. */\nconst DEFAULT_TEAM_BUDGET = 200;\n\n/** Default total context max tokens. */\nconst DEFAULT_CONTEXT_MAX_TOKENS = 1200;\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ninterface InjectionContext {\n branch?: string;\n}\n\ninterface InjectedContext {\n text: string;\n tokenEstimate: number;\n layers: {\n sessions: string;\n spores: string;\n team: string;\n };\n}\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * Build injected context from SQLite data.\n *\n * Returns empty context gracefully when no data exists (zero-config behavior).\n */\nexport async function buildInjectedContext(\n _config: MycoConfig,\n context: InjectionContext,\n): Promise<InjectedContext> {\n // Verify database is available — return empty if not\n try {\n getDatabase();\n } catch {\n return emptyContext();\n }\n\n // Fetch sessions and spores in parallel\n const [sessions, spores] = await Promise.all([\n listSessions({ limit: CONTEXT_SESSION_LIMIT }),\n listSpores({ limit: CONTEXT_SPORE_FETCH_LIMIT, status: 'active' }),\n ]);\n\n // Layer 1: Recent sessions\n const sessionsText = formatLayer(\n 'Recent Sessions',\n sessions.slice(0, CONTEXT_SESSION_DISPLAY_LIMIT).map((s) => {\n const title = s.title ?? s.id;\n const summary = (s.summary ?? '').slice(0, CONTEXT_SESSION_PREVIEW_CHARS);\n const branchLabel = s.branch === context.branch ? ' (same branch)' : '';\n return `- **${title}**: ${summary}${branchLabel}`;\n }),\n DEFAULT_SESSIONS_BUDGET,\n );\n\n // Layer 2: Relevant spores (exclude superseded/archived)\n const filteredSpores = spores.filter((s) =>\n !EXCLUDED_SPORE_STATUSES.has(s.status),\n );\n const sporesText = formatLayer(\n 'Relevant Spores',\n filteredSpores.slice(0, CONTEXT_SPORE_DISPLAY_LIMIT).map((s) =>\n `- **${s.id}** (${s.observation_type}): ${s.content.slice(0, CONTEXT_SPORE_PREVIEW_CHARS)}`,\n ),\n DEFAULT_SPORES_BUDGET,\n );\n\n // Layer 3: Team activity (placeholder — populated in Phase 2)\n const teamText = formatLayer('Team Activity', [], DEFAULT_TEAM_BUDGET);\n\n // Enforce total max_tokens budget\n const allLayers = [sessionsText, sporesText, teamText].filter(Boolean);\n const parts: string[] = [];\n let totalTokens = 0;\n\n for (const layer of allLayers) {\n const layerTokens = estimateTokens(layer);\n if (totalTokens + layerTokens > DEFAULT_CONTEXT_MAX_TOKENS) break;\n parts.push(layer);\n totalTokens += layerTokens;\n }\n\n const fullText = parts.join('\\n\\n');\n\n return {\n text: fullText,\n tokenEstimate: totalTokens,\n layers: {\n sessions: sessionsText,\n spores: sporesText,\n team: teamText,\n },\n };\n}\n\n/**\n * Build per-prompt context using semantic search on spores.\n *\n * Semantic search via the daemon's in-process vector store is deferred to\n * Phase 2. For now, returns empty context. The hook (`user-prompt-submit`)\n * routes through the daemon API at `/context/prompt`, which will implement\n * vector search when ready.\n */\nexport async function buildPromptContext(\n prompt: string,\n _config: MycoConfig,\n): Promise<InjectedContext> {\n if (prompt.length < PROMPT_CONTEXT_MIN_LENGTH) {\n return emptyContext();\n }\n\n // Per-prompt semantic search deferred to Phase 2 (requires daemon vector store)\n return emptyContext();\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction emptyContext(): InjectedContext {\n return {\n text: '',\n tokenEstimate: 0,\n layers: { sessions: '', spores: '', team: '' },\n };\n}\n\nfunction formatLayer(heading: string, items: string[], budget: number): string {\n if (items.length === 0) return '';\n\n let text = `### ${heading}\\n`;\n let currentTokens = estimateTokens(text);\n\n for (const item of items) {\n const itemTokens = estimateTokens(item);\n if (currentTokens + itemTokens > budget) break;\n text += item + '\\n';\n currentTokens += itemTokens;\n }\n\n return text.trim();\n}\n","import { DaemonClient } from './client.js';\nimport { readStdin } from './read-stdin.js';\nimport { normalizeHookInput } from './normalize.js';\nimport { evaluateSessionStartRules } from './capture-rules.js';\nimport { readTranscriptMeta } from './transcript-meta.js';\nimport { loadManifests } from '../symbionts/detect.js';\nimport { loadConfig } 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 = evaluateSessionStartRules(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 = loadConfig(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 await client.post('/sessions/register', {\n session_id: sessionId,\n agent,\n branch,\n started_at: new Date().toISOString(),\n });\n\n const contextResult = await client.post('/context', { session_id: sessionId, branch });\n\n if (contextResult.ok && contextResult.data?.text) {\n if (contextResult.data.source === 'digest') {\n process.stderr.write(`[myco] Injecting digest extract (tier ${contextResult.data.tier})\\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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,IAAM,wBAAwB;AAG9B,IAAM,gCAAgC;AAGtC,IAAM,4BAA4B;AAGlC,IAAM,8BAA8B;AAGpC,IAAM,0BAA0B;AAGhC,IAAM,wBAAwB;AAG9B,IAAM,sBAAsB;AAG5B,IAAM,6BAA6B;AA6BnC,eAAsB,qBACpB,SACA,SAC0B;AAE1B,MAAI;AACF,gBAAY;AAAA,EACd,QAAQ;AACN,WAAO,aAAa;AAAA,EACtB;AAGA,QAAM,CAAC,UAAU,MAAM,IAAI,MAAM,QAAQ,IAAI;AAAA,IAC3C,aAAa,EAAE,OAAO,sBAAsB,CAAC;AAAA,IAC7C,WAAW,EAAE,OAAO,2BAA2B,QAAQ,SAAS,CAAC;AAAA,EACnE,CAAC;AAGD,QAAM,eAAe;AAAA,IACnB;AAAA,IACA,SAAS,MAAM,GAAG,6BAA6B,EAAE,IAAI,CAAC,MAAM;AAC1D,YAAM,QAAQ,EAAE,SAAS,EAAE;AAC3B,YAAM,WAAW,EAAE,WAAW,IAAI,MAAM,GAAG,6BAA6B;AACxE,YAAM,cAAc,EAAE,WAAW,QAAQ,SAAS,mBAAmB;AACrE,aAAO,OAAO,KAAK,OAAO,OAAO,GAAG,WAAW;AAAA,IACjD,CAAC;AAAA,IACD;AAAA,EACF;AAGA,QAAM,iBAAiB,OAAO;AAAA,IAAO,CAAC,MACpC,CAAC,wBAAwB,IAAI,EAAE,MAAM;AAAA,EACvC;AACA,QAAM,aAAa;AAAA,IACjB;AAAA,IACA,eAAe,MAAM,GAAG,2BAA2B,EAAE;AAAA,MAAI,CAAC,MACxD,OAAO,EAAE,EAAE,OAAO,EAAE,gBAAgB,MAAM,EAAE,QAAQ,MAAM,GAAG,2BAA2B,CAAC;AAAA,IAC3F;AAAA,IACA;AAAA,EACF;AAGA,QAAM,WAAW,YAAY,iBAAiB,CAAC,GAAG,mBAAmB;AAGrE,QAAM,YAAY,CAAC,cAAc,YAAY,QAAQ,EAAE,OAAO,OAAO;AACrE,QAAM,QAAkB,CAAC;AACzB,MAAI,cAAc;AAElB,aAAW,SAAS,WAAW;AAC7B,UAAM,cAAc,eAAe,KAAK;AACxC,QAAI,cAAc,cAAc,2BAA4B;AAC5D,UAAM,KAAK,KAAK;AAChB,mBAAe;AAAA,EACjB;AAEA,QAAM,WAAW,MAAM,KAAK,MAAM;AAElC,SAAO;AAAA,IACL,MAAM;AAAA,IACN,eAAe;AAAA,IACf,QAAQ;AAAA,MACN,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,MAAM;AAAA,IACR;AAAA,EACF;AACF;AA0BA,SAAS,eAAgC;AACvC,SAAO;AAAA,IACL,MAAM;AAAA,IACN,eAAe;AAAA,IACf,QAAQ,EAAE,UAAU,IAAI,QAAQ,IAAI,MAAM,GAAG;AAAA,EAC/C;AACF;AAEA,SAAS,YAAY,SAAiB,OAAiB,QAAwB;AAC7E,MAAI,MAAM,WAAW,EAAG,QAAO;AAE/B,MAAI,OAAO,OAAO,OAAO;AAAA;AACzB,MAAI,gBAAgB,eAAe,IAAI;AAEvC,aAAW,QAAQ,OAAO;AACxB,UAAM,aAAa,eAAe,IAAI;AACtC,QAAI,gBAAgB,aAAa,OAAQ;AACzC,YAAQ,OAAO;AACf,qBAAiB;AAAA,EACnB;AAEA,SAAO,KAAK,KAAK;AACnB;;;ACnLA,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,0BAA0B,cAAc,GAAG,OAAO;AAAA,MACjE;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,WAAW,SAAS;AACnC,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,OAAO,KAAK,sBAAsB;AAAA,QACtC,YAAY;AAAA,QACZ;AAAA,QACA;AAAA,QACA,aAAY,oBAAI,KAAK,GAAE,YAAY;AAAA,MACrC,CAAC;AAED,YAAM,gBAAgB,MAAM,OAAO,KAAK,YAAY,EAAE,YAAY,WAAW,OAAO,CAAC;AAErF,UAAI,cAAc,MAAM,cAAc,MAAM,MAAM;AAChD,YAAI,cAAc,KAAK,WAAW,UAAU;AAC1C,kBAAQ,OAAO,MAAM,yCAAyC,cAAc,KAAK,IAAI;AAAA,CAAK;AAAA,QAC5F;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":[]}
@@ -2,7 +2,7 @@ import { createRequire as __cr } from 'node:module'; const require = __cr(import
2
2
  import {
3
3
  withEmbedding
4
4
  } from "./chunk-GFR542SM.js";
5
- import "./chunk-55QEICRO.js";
5
+ import "./chunk-TLK46KKD.js";
6
6
  import {
7
7
  parseStringFlag
8
8
  } from "./chunk-SAKJMNSR.js";
@@ -13,8 +13,8 @@ import {
13
13
  updateConfig
14
14
  } from "./chunk-2V7HR7HB.js";
15
15
  import "./chunk-MYX5NCRH.js";
16
- import "./chunk-BUIR3JWM.js";
17
- import "./chunk-EO2RQW4S.js";
16
+ import "./chunk-XWOQL4XN.js";
17
+ import "./chunk-W7WENJ6F.js";
18
18
  import "./chunk-LPUQPDC2.js";
19
19
  import "./chunk-CKJAWZQE.js";
20
20
  import "./chunk-E7NUADTQ.js";
@@ -79,4 +79,4 @@ async function run(args, vaultDir) {
79
79
  export {
80
80
  run
81
81
  };
82
- //# sourceMappingURL=setup-llm-ZMYGIQX5.js.map
82
+ //# sourceMappingURL=setup-llm-7S3VPAPN.js.map
@@ -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-sonnet-4-6
16
+ model: claude-haiku-4-5-20251001
17
17
  maxTurns: 30
18
18
  timeoutSeconds: 300
19
19
 
@@ -61,6 +61,7 @@ prompt: >
61
61
 
62
62
  phases:
63
63
  - name: read-state
64
+ model: claude-haiku-4-5-20251001
64
65
  # Root phase — no dependsOn
65
66
  prompt: |
66
67
  Read the current vault state to determine what needs processing.
@@ -80,6 +81,7 @@ phases:
80
81
  readOnly: true
81
82
 
82
83
  - name: extract
84
+ model: claude-haiku-4-5-20251001
83
85
  dependsOn: [read-state]
84
86
  prompt: |
85
87
  Extract observations from unprocessed batches as spores.
@@ -132,6 +134,7 @@ phases:
132
134
  required: true
133
135
 
134
136
  - name: summarize
137
+ model: claude-haiku-4-5-20251001
135
138
  dependsOn: [read-state]
136
139
  prompt: |
137
140
  Update session titles and summaries for sessions touched during extraction.
@@ -186,6 +189,7 @@ phases:
186
189
  required: false
187
190
 
188
191
  - name: consolidate
192
+ model: claude-sonnet-4-6
189
193
  dependsOn: [extract]
190
194
  prompt: |
191
195
  Consolidate related spores into wisdom and clean up redundancy.
@@ -240,6 +244,7 @@ phases:
240
244
  required: false
241
245
 
242
246
  - name: graph
247
+ model: claude-sonnet-4-6
243
248
  dependsOn: [extract]
244
249
  prompt: |
245
250
  Build the knowledge graph: create entities, then link spores to them.
@@ -302,6 +307,7 @@ phases:
302
307
  # in the same wave via Promise.allSettled().
303
308
 
304
309
  - name: digest-assess
310
+ model: claude-sonnet-4-6
305
311
  dependsOn: [consolidate]
306
312
  prompt: |
307
313
  Assess current digest state and gather material for tier updates.
@@ -367,6 +373,7 @@ phases:
367
373
  required: true
368
374
 
369
375
  - name: digest-10000
376
+ model: claude-haiku-4-5-20251001
370
377
  dependsOn: [digest-assess]
371
378
  prompt: |
372
379
  Update digest tier 10000 — Full institutional knowledge.
@@ -399,6 +406,7 @@ phases:
399
406
  required: false
400
407
 
401
408
  - name: digest-5000
409
+ model: claude-haiku-4-5-20251001
402
410
  dependsOn: [digest-assess]
403
411
  prompt: |
404
412
  Update digest tier 5000 — Deep onboarding.
@@ -430,6 +438,7 @@ phases:
430
438
  required: false
431
439
 
432
440
  - name: digest-1500
441
+ model: claude-haiku-4-5-20251001
433
442
  dependsOn: [digest-assess]
434
443
  prompt: |
435
444
  Update digest tier 1500 — Executive briefing.
@@ -461,6 +470,7 @@ phases:
461
470
  required: false
462
471
 
463
472
  - name: report
473
+ model: claude-haiku-4-5-20251001
464
474
  dependsOn: [extract, summarize, consolidate, graph, digest-assess, digest-10000, digest-5000, digest-1500]
465
475
  prompt: |
466
476
  Summarize what was done across all phases.