@goondocks/myco 0.17.0 → 0.17.2

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 (171) hide show
  1. package/README.md +1 -1
  2. package/dist/{agent-run-ZDHXORE2.js → agent-run-7AYHXIEF.js} +7 -7
  3. package/dist/{agent-tasks-IPUWMMDZ.js → agent-tasks-UUIFKBD4.js} +7 -7
  4. package/dist/{chunk-VGVRBSLC.js → chunk-25WHTV4N.js} +2 -2
  5. package/dist/{chunk-ZUSTCXHT.js → chunk-3NCVCGUZ.js} +3 -3
  6. package/dist/chunk-5NFJTZ64.js +14 -0
  7. package/dist/chunk-5NFJTZ64.js.map +1 -0
  8. package/dist/{chunk-2WRXLYG6.js → chunk-5ZISXCDC.js} +2 -2
  9. package/dist/{chunk-6SDC6V3N.js → chunk-7DAH5GLC.js} +1 -5
  10. package/dist/{chunk-6SDC6V3N.js.map → chunk-7DAH5GLC.js.map} +1 -1
  11. package/dist/{chunk-XVWJ273L.js → chunk-BZDZORVP.js} +4 -4
  12. package/dist/{chunk-KKEMVH6D.js → chunk-C3C5QVLK.js} +2 -2
  13. package/dist/{chunk-MSM775XQ.js → chunk-CTF7TQMJ.js} +4 -4
  14. package/dist/{chunk-CPL76CYD.js → chunk-DT42247G.js} +3 -3
  15. package/dist/{chunk-VQQ57UPG.js → chunk-F6C4IC6R.js} +4 -4
  16. package/dist/{chunk-VQQ57UPG.js.map → chunk-F6C4IC6R.js.map} +1 -1
  17. package/dist/{chunk-SODRR3HE.js → chunk-GFR542SM.js} +1 -1
  18. package/dist/chunk-GFR542SM.js.map +1 -0
  19. package/dist/{chunk-QQ7CXA7Q.js → chunk-HPZ7YAMA.js} +95 -10
  20. package/dist/{chunk-QQ7CXA7Q.js.map → chunk-HPZ7YAMA.js.map} +1 -1
  21. package/dist/{chunk-GBYLHPML.js → chunk-IGBHLFV5.js} +2 -2
  22. package/dist/{chunk-DKSQMH5X.js → chunk-ML6GTPZU.js} +2 -2
  23. package/dist/{chunk-QBB6LX57.js → chunk-NUSTG3BH.js} +3 -3
  24. package/dist/{chunk-2IJ6C63F.js → chunk-RKPTMHED.js} +2 -2
  25. package/dist/{chunk-YTOD6L6N.js → chunk-RMJPQZGF.js} +97 -7
  26. package/dist/chunk-RMJPQZGF.js.map +1 -0
  27. package/dist/{chunk-PFF4KB4O.js → chunk-SI5BBQAT.js} +2 -2
  28. package/dist/{chunk-OGNEW5CN.js → chunk-UTLWSKDV.js} +2 -2
  29. package/dist/{chunk-4JPUC6RL.js → chunk-VVGZL2HX.js} +2 -3
  30. package/dist/{chunk-4JPUC6RL.js.map → chunk-VVGZL2HX.js.map} +1 -1
  31. package/dist/{chunk-FEX6ALLH.js → chunk-XD3NEN3Q.js} +29 -3
  32. package/dist/chunk-XD3NEN3Q.js.map +1 -0
  33. package/dist/{chunk-U63GDHYJ.js → chunk-XZWFMMJR.js} +3 -3
  34. package/dist/{chunk-UDBCAFXS.js → chunk-ZSJPI5MS.js} +2 -2
  35. package/dist/{cli-BRDOPJW3.js → cli-WJVYP2QT.js} +40 -40
  36. package/dist/{client-AQZMD3LB.js → client-LZ3ZR4HC.js} +4 -4
  37. package/dist/{config-K3CJEFFO.js → config-ZQIMG3FB.js} +4 -4
  38. package/dist/{detect-providers-OE6HWW3M.js → detect-providers-C64L3QET.js} +4 -4
  39. package/dist/{doctor-YOUCIJJY.js → doctor-XEPBNHM3.js} +12 -12
  40. package/dist/doctor-XEPBNHM3.js.map +1 -0
  41. package/dist/{executor-UYNV4EOQ.js → executor-NXKJU5KW.js} +29 -110
  42. package/dist/executor-NXKJU5KW.js.map +1 -0
  43. package/dist/{init-MTMEFG4E.js → init-BHVQAQ27.js} +55 -73
  44. package/dist/init-BHVQAQ27.js.map +1 -0
  45. package/dist/{installer-CTWQB4RS.js → installer-45ZLP2RP.js} +2 -2
  46. package/dist/{llm-PGETQHZ2.js → llm-KTD6SR55.js} +4 -7
  47. package/dist/{loader-J56KP27U.js → loader-NEX3UF6U.js} +3 -3
  48. package/dist/{loader-AVWL7PNO.js → loader-SHRKUKOS.js} +3 -3
  49. package/dist/{main-ZIMYW2AB.js → main-YFVBIRRK.js} +153 -58
  50. package/dist/main-YFVBIRRK.js.map +1 -0
  51. package/dist/{open-77QXL7VY.js → open-2U7ZRGA3.js} +11 -10
  52. package/dist/open-2U7ZRGA3.js.map +1 -0
  53. package/dist/open-browser-EBKBAYSM.js +9 -0
  54. package/dist/{post-compact-CA7O7QPL.js → post-compact-QIBMEWL3.js} +6 -6
  55. package/dist/{post-tool-use-JNXJIGNK.js → post-tool-use-ICGFXDVY.js} +5 -5
  56. package/dist/{post-tool-use-failure-V52CZWVZ.js → post-tool-use-failure-C7TLH3XQ.js} +6 -6
  57. package/dist/{pre-compact-J2GSDQCJ.js → pre-compact-IF7K4TQK.js} +6 -6
  58. package/dist/{provider-check-CESRPIY5.js → provider-check-LTLQ6BUZ.js} +4 -4
  59. package/dist/{registry-SPKP2WLI.js → registry-TFQ22Z7N.js} +4 -4
  60. package/dist/{remove-ODPLWK7O.js → remove-FBGM2QVJ.js} +8 -8
  61. package/dist/{resolution-events-CLDXZF67.js → resolution-events-HGKIJOTA.js} +4 -4
  62. package/dist/{restart-6KKZODOI.js → restart-TQEECRNW.js} +8 -8
  63. package/dist/{search-U6N2DSOI.js → search-NN5FC4Z6.js} +8 -8
  64. package/dist/{server-SP4G7MY7.js → server-XMWJ4GF7.js} +4 -4
  65. package/dist/{session-6R3RNVKD.js → session-GLPAFYPO.js} +9 -9
  66. package/dist/{session-end-TCFCYDBL.js → session-end-TI3ILRBC.js} +5 -5
  67. package/dist/{session-start-XXN2TVNI.js → session-start-PJLJDVJJ.js} +10 -10
  68. package/dist/{setup-llm-GISFI73Z.js → setup-llm-AQSWLXCZ.js} +9 -9
  69. package/dist/src/cli.js +1 -1
  70. package/dist/src/daemon/main.js +1 -1
  71. package/dist/src/hooks/post-tool-use.js +1 -1
  72. package/dist/src/hooks/session-end.js +1 -1
  73. package/dist/src/hooks/session-start.js +1 -1
  74. package/dist/src/hooks/stop.js +1 -1
  75. package/dist/src/hooks/user-prompt-submit.js +1 -1
  76. package/dist/src/mcp/server.js +1 -1
  77. package/dist/src/symbionts/templates/claude-code/hooks.json +12 -12
  78. package/dist/src/symbionts/templates/codex/hooks.json +4 -4
  79. package/dist/src/symbionts/templates/cursor/hooks.json +9 -9
  80. package/dist/src/symbionts/templates/gemini/hooks.json +6 -6
  81. package/dist/src/symbionts/templates/opencode/plugin.ts +53 -10
  82. package/dist/src/symbionts/templates/vscode-copilot/hooks.json +7 -7
  83. package/dist/src/symbionts/templates/windsurf/hooks.json +4 -4
  84. package/dist/{stats-MYQD4OVD.js → stats-BISBIBXZ.js} +9 -9
  85. package/dist/{stop-K6TDJORY.js → stop-47BJ42EO.js} +5 -5
  86. package/dist/{stop-failure-U635O5A3.js → stop-failure-VU5BTLWX.js} +6 -6
  87. package/dist/{subagent-start-LLGQBC5Q.js → subagent-start-SPTKQRHU.js} +6 -6
  88. package/dist/{subagent-stop-BO3GZWXD.js → subagent-stop-UU75BYLC.js} +6 -6
  89. package/dist/{task-completed-3ZJHSI2E.js → task-completed-MVDO7TZF.js} +6 -6
  90. package/dist/{team-OJLQCVE3.js → team-7X64J4Y6.js} +4 -4
  91. package/dist/ui/assets/index-CRmkSi63.css +1 -0
  92. package/dist/ui/assets/index-rpmSpJpm.js +842 -0
  93. package/dist/ui/index.html +2 -2
  94. package/dist/{update-HR7WMESA.js → update-DA7VEXOS.js} +8 -8
  95. package/dist/{user-prompt-submit-NM73R4I3.js → user-prompt-submit-ADZ4NTVO.js} +5 -5
  96. package/dist/{verify-PSERIZPF.js → verify-QYSERHF7.js} +5 -8
  97. package/dist/{verify-PSERIZPF.js.map → verify-QYSERHF7.js.map} +1 -1
  98. package/dist/{version-YCODQZSX.js → version-A72TAL2J.js} +2 -2
  99. package/package.json +6 -2
  100. package/dist/chunk-FEX6ALLH.js.map +0 -1
  101. package/dist/chunk-KGL5QSDN.js +0 -66
  102. package/dist/chunk-KGL5QSDN.js.map +0 -1
  103. package/dist/chunk-SODRR3HE.js.map +0 -1
  104. package/dist/chunk-U3SSOSIR.js +0 -26
  105. package/dist/chunk-U3SSOSIR.js.map +0 -1
  106. package/dist/chunk-Y7QCKCEJ.js +0 -26
  107. package/dist/chunk-Y7QCKCEJ.js.map +0 -1
  108. package/dist/chunk-YTOD6L6N.js.map +0 -1
  109. package/dist/doctor-YOUCIJJY.js.map +0 -1
  110. package/dist/executor-UYNV4EOQ.js.map +0 -1
  111. package/dist/init-MTMEFG4E.js.map +0 -1
  112. package/dist/init-wizard-ZS3CV6CM.js +0 -294
  113. package/dist/init-wizard-ZS3CV6CM.js.map +0 -1
  114. package/dist/main-ZIMYW2AB.js.map +0 -1
  115. package/dist/open-77QXL7VY.js.map +0 -1
  116. package/dist/openai-embeddings-LZKY6RV5.js +0 -14
  117. package/dist/openrouter-UTOZG6Z5.js +0 -14
  118. package/dist/ui/assets/index-2UyTdjlV.js +0 -842
  119. package/dist/ui/assets/index-Cts1wLEW.css +0 -1
  120. package/dist/version-YCODQZSX.js.map +0 -1
  121. /package/dist/{agent-run-ZDHXORE2.js.map → agent-run-7AYHXIEF.js.map} +0 -0
  122. /package/dist/{agent-tasks-IPUWMMDZ.js.map → agent-tasks-UUIFKBD4.js.map} +0 -0
  123. /package/dist/{chunk-VGVRBSLC.js.map → chunk-25WHTV4N.js.map} +0 -0
  124. /package/dist/{chunk-ZUSTCXHT.js.map → chunk-3NCVCGUZ.js.map} +0 -0
  125. /package/dist/{chunk-2WRXLYG6.js.map → chunk-5ZISXCDC.js.map} +0 -0
  126. /package/dist/{chunk-XVWJ273L.js.map → chunk-BZDZORVP.js.map} +0 -0
  127. /package/dist/{chunk-KKEMVH6D.js.map → chunk-C3C5QVLK.js.map} +0 -0
  128. /package/dist/{chunk-MSM775XQ.js.map → chunk-CTF7TQMJ.js.map} +0 -0
  129. /package/dist/{chunk-CPL76CYD.js.map → chunk-DT42247G.js.map} +0 -0
  130. /package/dist/{chunk-GBYLHPML.js.map → chunk-IGBHLFV5.js.map} +0 -0
  131. /package/dist/{chunk-DKSQMH5X.js.map → chunk-ML6GTPZU.js.map} +0 -0
  132. /package/dist/{chunk-QBB6LX57.js.map → chunk-NUSTG3BH.js.map} +0 -0
  133. /package/dist/{chunk-2IJ6C63F.js.map → chunk-RKPTMHED.js.map} +0 -0
  134. /package/dist/{chunk-PFF4KB4O.js.map → chunk-SI5BBQAT.js.map} +0 -0
  135. /package/dist/{chunk-OGNEW5CN.js.map → chunk-UTLWSKDV.js.map} +0 -0
  136. /package/dist/{chunk-U63GDHYJ.js.map → chunk-XZWFMMJR.js.map} +0 -0
  137. /package/dist/{chunk-UDBCAFXS.js.map → chunk-ZSJPI5MS.js.map} +0 -0
  138. /package/dist/{cli-BRDOPJW3.js.map → cli-WJVYP2QT.js.map} +0 -0
  139. /package/dist/{client-AQZMD3LB.js.map → client-LZ3ZR4HC.js.map} +0 -0
  140. /package/dist/{config-K3CJEFFO.js.map → config-ZQIMG3FB.js.map} +0 -0
  141. /package/dist/{detect-providers-OE6HWW3M.js.map → detect-providers-C64L3QET.js.map} +0 -0
  142. /package/dist/{installer-CTWQB4RS.js.map → installer-45ZLP2RP.js.map} +0 -0
  143. /package/dist/{llm-PGETQHZ2.js.map → llm-KTD6SR55.js.map} +0 -0
  144. /package/dist/{loader-AVWL7PNO.js.map → loader-NEX3UF6U.js.map} +0 -0
  145. /package/dist/{loader-J56KP27U.js.map → loader-SHRKUKOS.js.map} +0 -0
  146. /package/dist/{openai-embeddings-LZKY6RV5.js.map → open-browser-EBKBAYSM.js.map} +0 -0
  147. /package/dist/{post-compact-CA7O7QPL.js.map → post-compact-QIBMEWL3.js.map} +0 -0
  148. /package/dist/{post-tool-use-JNXJIGNK.js.map → post-tool-use-ICGFXDVY.js.map} +0 -0
  149. /package/dist/{post-tool-use-failure-V52CZWVZ.js.map → post-tool-use-failure-C7TLH3XQ.js.map} +0 -0
  150. /package/dist/{pre-compact-J2GSDQCJ.js.map → pre-compact-IF7K4TQK.js.map} +0 -0
  151. /package/dist/{openrouter-UTOZG6Z5.js.map → provider-check-LTLQ6BUZ.js.map} +0 -0
  152. /package/dist/{provider-check-CESRPIY5.js.map → registry-TFQ22Z7N.js.map} +0 -0
  153. /package/dist/{remove-ODPLWK7O.js.map → remove-FBGM2QVJ.js.map} +0 -0
  154. /package/dist/{registry-SPKP2WLI.js.map → resolution-events-HGKIJOTA.js.map} +0 -0
  155. /package/dist/{restart-6KKZODOI.js.map → restart-TQEECRNW.js.map} +0 -0
  156. /package/dist/{search-U6N2DSOI.js.map → search-NN5FC4Z6.js.map} +0 -0
  157. /package/dist/{server-SP4G7MY7.js.map → server-XMWJ4GF7.js.map} +0 -0
  158. /package/dist/{session-6R3RNVKD.js.map → session-GLPAFYPO.js.map} +0 -0
  159. /package/dist/{session-end-TCFCYDBL.js.map → session-end-TI3ILRBC.js.map} +0 -0
  160. /package/dist/{session-start-XXN2TVNI.js.map → session-start-PJLJDVJJ.js.map} +0 -0
  161. /package/dist/{setup-llm-GISFI73Z.js.map → setup-llm-AQSWLXCZ.js.map} +0 -0
  162. /package/dist/{stats-MYQD4OVD.js.map → stats-BISBIBXZ.js.map} +0 -0
  163. /package/dist/{stop-K6TDJORY.js.map → stop-47BJ42EO.js.map} +0 -0
  164. /package/dist/{stop-failure-U635O5A3.js.map → stop-failure-VU5BTLWX.js.map} +0 -0
  165. /package/dist/{subagent-start-LLGQBC5Q.js.map → subagent-start-SPTKQRHU.js.map} +0 -0
  166. /package/dist/{subagent-stop-BO3GZWXD.js.map → subagent-stop-UU75BYLC.js.map} +0 -0
  167. /package/dist/{task-completed-3ZJHSI2E.js.map → task-completed-MVDO7TZF.js.map} +0 -0
  168. /package/dist/{team-OJLQCVE3.js.map → team-7X64J4Y6.js.map} +0 -0
  169. /package/dist/{update-HR7WMESA.js.map → update-DA7VEXOS.js.map} +0 -0
  170. /package/dist/{user-prompt-submit-NM73R4I3.js.map → user-prompt-submit-ADZ4NTVO.js.map} +0 -0
  171. /package/dist/{resolution-events-CLDXZF67.js.map → version-A72TAL2J.js.map} +0 -0
@@ -5,8 +5,8 @@
5
5
  <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
6
6
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
7
  <title>Myco</title>
8
- <script type="module" crossorigin src="/assets/index-2UyTdjlV.js"></script>
9
- <link rel="stylesheet" crossorigin href="/assets/index-Cts1wLEW.css">
8
+ <script type="module" crossorigin src="/assets/index-rpmSpJpm.js"></script>
9
+ <link rel="stylesheet" crossorigin href="/assets/index-CRmkSi63.css">
10
10
  </head>
11
11
  <body>
12
12
  <div id="root"></div>
@@ -2,26 +2,26 @@ import { createRequire as __cr } from 'node:module'; const require = __cr(import
2
2
  import {
3
3
  VAULT_GITIGNORE,
4
4
  registerSymbionts
5
- } from "./chunk-MSM775XQ.js";
5
+ } from "./chunk-CTF7TQMJ.js";
6
6
  import "./chunk-SAKJMNSR.js";
7
- import "./chunk-4JPUC6RL.js";
8
- import "./chunk-DKSQMH5X.js";
7
+ import "./chunk-VVGZL2HX.js";
8
+ import "./chunk-ML6GTPZU.js";
9
9
  import {
10
10
  getEnabledSymbiontNames,
11
11
  loadConfig
12
- } from "./chunk-FEX6ALLH.js";
12
+ } from "./chunk-XD3NEN3Q.js";
13
13
  import "./chunk-MYX5NCRH.js";
14
14
  import {
15
15
  resolveVaultDir
16
16
  } from "./chunk-5ZT2Q6P5.js";
17
- import "./chunk-U63GDHYJ.js";
18
- import "./chunk-PFF4KB4O.js";
17
+ import "./chunk-XZWFMMJR.js";
18
+ import "./chunk-SI5BBQAT.js";
19
19
  import {
20
20
  loadManifests,
21
21
  resolvePackageRoot
22
22
  } from "./chunk-EBIYONNZ.js";
23
23
  import "./chunk-LPUQPDC2.js";
24
- import "./chunk-6SDC6V3N.js";
24
+ import "./chunk-7DAH5GLC.js";
25
25
  import "./chunk-E7NUADTQ.js";
26
26
  import "./chunk-D7TYRPRM.js";
27
27
  import "./chunk-E4VLWIJC.js";
@@ -89,4 +89,4 @@ async function run(args) {
89
89
  export {
90
90
  run
91
91
  };
92
- //# sourceMappingURL=update-HR7WMESA.js.map
92
+ //# sourceMappingURL=update-DA7VEXOS.js.map
@@ -5,17 +5,17 @@ import {
5
5
  import {
6
6
  normalizeHookInput,
7
7
  readStdin
8
- } from "./chunk-2WRXLYG6.js";
8
+ } from "./chunk-5ZISXCDC.js";
9
9
  import {
10
10
  resolveVaultDir
11
11
  } from "./chunk-5ZT2Q6P5.js";
12
12
  import {
13
13
  DaemonClient
14
- } from "./chunk-U63GDHYJ.js";
15
- import "./chunk-PFF4KB4O.js";
14
+ } from "./chunk-XZWFMMJR.js";
15
+ import "./chunk-SI5BBQAT.js";
16
16
  import "./chunk-EBIYONNZ.js";
17
17
  import "./chunk-LPUQPDC2.js";
18
- import "./chunk-6SDC6V3N.js";
18
+ import "./chunk-7DAH5GLC.js";
19
19
  import "./chunk-E7NUADTQ.js";
20
20
  import "./chunk-D7TYRPRM.js";
21
21
  import "./chunk-E4VLWIJC.js";
@@ -63,4 +63,4 @@ ${sessionLine}` : sessionLine;
63
63
  export {
64
64
  main
65
65
  };
66
- //# sourceMappingURL=user-prompt-submit-NM73R4I3.js.map
66
+ //# sourceMappingURL=user-prompt-submit-ADZ4NTVO.js.map
@@ -1,15 +1,12 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
  import {
3
3
  createEmbeddingProvider
4
- } from "./chunk-QQ7CXA7Q.js";
5
- import "./chunk-U3SSOSIR.js";
6
- import "./chunk-Y7QCKCEJ.js";
7
- import "./chunk-KGL5QSDN.js";
8
- import "./chunk-DKSQMH5X.js";
4
+ } from "./chunk-HPZ7YAMA.js";
5
+ import "./chunk-ML6GTPZU.js";
9
6
  import {
10
7
  loadConfig
11
- } from "./chunk-FEX6ALLH.js";
12
- import "./chunk-6SDC6V3N.js";
8
+ } from "./chunk-XD3NEN3Q.js";
9
+ import "./chunk-7DAH5GLC.js";
13
10
  import "./chunk-E7NUADTQ.js";
14
11
  import "./chunk-D7TYRPRM.js";
15
12
  import "./chunk-E4VLWIJC.js";
@@ -42,4 +39,4 @@ async function run(_args, vaultDir) {
42
39
  export {
43
40
  run
44
41
  };
45
- //# sourceMappingURL=verify-PSERIZPF.js.map
42
+ //# sourceMappingURL=verify-QYSERHF7.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli/verify.ts"],"sourcesContent":["import { loadConfig } from '../config/loader.js';\nimport { createEmbeddingProvider } from '../intelligence/llm.js';\n\nconst VERIFY_EMBEDDING_INPUT = 'test';\n\nexport async function run(_args: string[], vaultDir: string): Promise<void> {\n const config = loadConfig(vaultDir);\n const embeddingConfig = config.embedding;\n\n let embeddingOk = false;\n let embeddingDimensions = 0;\n\n // Test embedding\n try {\n const emb = createEmbeddingProvider(embeddingConfig);\n const response = await emb.embed(VERIFY_EMBEDDING_INPUT);\n embeddingDimensions = response.dimensions;\n embeddingOk = embeddingDimensions > 0;\n } catch {\n embeddingOk = false;\n }\n\n const embLabel = `Embedding (${embeddingConfig.provider} / ${embeddingConfig.model}):`;\n const embStatus = embeddingOk ? `OK (${embeddingDimensions} dimensions)` : 'FAIL';\n console.log(`${embLabel.padEnd(40)} ${embStatus}`);\n\n console.log('\\nNote: LLM configuration is managed by the Myco agent (Claude Agent SDK).');\n\n if (!embeddingOk) {\n process.exit(1);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAGA,IAAM,yBAAyB;AAE/B,eAAsB,IAAI,OAAiB,UAAiC;AAC1E,QAAM,SAAS,WAAW,QAAQ;AAClC,QAAM,kBAAkB,OAAO;AAE/B,MAAI,cAAc;AAClB,MAAI,sBAAsB;AAG1B,MAAI;AACF,UAAM,MAAM,wBAAwB,eAAe;AACnD,UAAM,WAAW,MAAM,IAAI,MAAM,sBAAsB;AACvD,0BAAsB,SAAS;AAC/B,kBAAc,sBAAsB;AAAA,EACtC,QAAQ;AACN,kBAAc;AAAA,EAChB;AAEA,QAAM,WAAW,cAAc,gBAAgB,QAAQ,MAAM,gBAAgB,KAAK;AAClF,QAAM,YAAY,cAAc,OAAO,mBAAmB,iBAAiB;AAC3E,UAAQ,IAAI,GAAG,SAAS,OAAO,EAAE,CAAC,IAAI,SAAS,EAAE;AAEjD,UAAQ,IAAI,4EAA4E;AAExF,MAAI,CAAC,aAAa;AAChB,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;","names":[]}
1
+ {"version":3,"sources":["../src/cli/verify.ts"],"sourcesContent":["import { loadConfig } from '../config/loader.js';\nimport { createEmbeddingProvider } from '../intelligence/llm.js';\n\nconst VERIFY_EMBEDDING_INPUT = 'test';\n\nexport async function run(_args: string[], vaultDir: string): Promise<void> {\n const config = loadConfig(vaultDir);\n const embeddingConfig = config.embedding;\n\n let embeddingOk = false;\n let embeddingDimensions = 0;\n\n // Test embedding\n try {\n const emb = createEmbeddingProvider(embeddingConfig);\n const response = await emb.embed(VERIFY_EMBEDDING_INPUT);\n embeddingDimensions = response.dimensions;\n embeddingOk = embeddingDimensions > 0;\n } catch {\n embeddingOk = false;\n }\n\n const embLabel = `Embedding (${embeddingConfig.provider} / ${embeddingConfig.model}):`;\n const embStatus = embeddingOk ? `OK (${embeddingDimensions} dimensions)` : 'FAIL';\n console.log(`${embLabel.padEnd(40)} ${embStatus}`);\n\n console.log('\\nNote: LLM configuration is managed by the Myco agent (Claude Agent SDK).');\n\n if (!embeddingOk) {\n process.exit(1);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAGA,IAAM,yBAAyB;AAE/B,eAAsB,IAAI,OAAiB,UAAiC;AAC1E,QAAM,SAAS,WAAW,QAAQ;AAClC,QAAM,kBAAkB,OAAO;AAE/B,MAAI,cAAc;AAClB,MAAI,sBAAsB;AAG1B,MAAI;AACF,UAAM,MAAM,wBAAwB,eAAe;AACnD,UAAM,WAAW,MAAM,IAAI,MAAM,sBAAsB;AACvD,0BAAsB,SAAS;AAC/B,kBAAc,sBAAsB;AAAA,EACtC,QAAQ;AACN,kBAAc;AAAA,EAChB;AAEA,QAAM,WAAW,cAAc,gBAAgB,QAAQ,MAAM,gBAAgB,KAAK;AAClF,QAAM,YAAY,cAAc,OAAO,mBAAmB,iBAAiB;AAC3E,UAAQ,IAAI,GAAG,SAAS,OAAO,EAAE,CAAC,IAAI,SAAS,EAAE;AAEjD,UAAQ,IAAI,4EAA4E;AAExF,MAAI,CAAC,aAAa;AAChB,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;","names":[]}
@@ -1,10 +1,10 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
  import {
3
3
  getPluginVersion
4
- } from "./chunk-PFF4KB4O.js";
4
+ } from "./chunk-SI5BBQAT.js";
5
5
  import "./chunk-LPUQPDC2.js";
6
6
  import "./chunk-PZUWP5VK.js";
7
7
  export {
8
8
  getPluginVersion
9
9
  };
10
- //# sourceMappingURL=version-YCODQZSX.js.map
10
+ //# sourceMappingURL=version-A72TAL2J.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@goondocks/myco",
3
- "version": "0.17.0",
3
+ "version": "0.17.2",
4
4
  "description": "Collective agent intelligence — Claude Code plugin",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -19,10 +19,14 @@
19
19
  "scripts": {
20
20
  "prepare": "npm run build",
21
21
  "postinstall": "test -d ui && cd ui && npm install || true",
22
- "build": "tsup && (test -d ui && cd ui && npx vite build || true)",
22
+ "build": "sh -c 'npm run build:core & pid1=$!; npm run build:ui & pid2=$!; wait $pid1; s1=$?; wait $pid2; s2=$?; test $s1 -eq 0 -a $s2 -eq 0'",
23
+ "build:core": "tsup",
24
+ "build:ui": "test -d ui && cd ui && npx vite build || true",
23
25
  "build:watch": "tsc --watch",
24
26
  "build:types": "tsc",
25
27
  "test": "vitest run",
28
+ "test:fast": "MYCO_TEST_PROFILE=fast vitest run",
29
+ "test:integration": "MYCO_TEST_PROFILE=integration vitest run",
26
30
  "test:watch": "vitest",
27
31
  "lint": "tsc --noEmit"
28
32
  },
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/config/loader.ts","../src/config/schema.ts","../src/config/migrations.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport YAML from 'yaml';\nimport { MycoConfigSchema, type MycoConfig, type BackupConfig, type TeamConfig } from './schema.js';\nimport { runMigrations, CURRENT_MIGRATION_VERSION } from './migrations.js';\n\nexport const CONFIG_FILENAME = 'myco.yaml';\n\nexport function loadConfig(vaultDir: string): MycoConfig {\n const configPath = path.join(vaultDir, CONFIG_FILENAME);\n\n if (!fs.existsSync(configPath)) {\n throw new Error(`myco.yaml not found in ${vaultDir}`);\n }\n\n const raw = fs.readFileSync(configPath, 'utf-8');\n const parsed = YAML.parse(raw) as Record<string, unknown>;\n\n // Detect v1 config and guide migration\n if (parsed.version === 1 || (parsed.intelligence as Record<string, unknown>)?.backend) {\n throw new Error(\n 'Myco config uses v1 format. Run /myco:setup-llm to reconfigure for v2.',\n );\n }\n\n // --- v2 → v3 migration ---\n let v2Migrated = false;\n if (parsed.version === 2) {\n // Extract intelligence.embedding to top-level embedding\n const intel = parsed.intelligence as Record<string, unknown> | undefined;\n const embeddingConfig = intel?.embedding as Record<string, unknown> | undefined;\n if (embeddingConfig && !parsed.embedding) {\n // Map v2 'lm-studio' to v3 'openai-compatible' for embedding provider\n if (embeddingConfig.provider === 'lm-studio') {\n embeddingConfig.provider = 'openai-compatible';\n }\n parsed.embedding = embeddingConfig;\n }\n\n // Keep daemon.port and daemon.log_level, drop grace_period and max_log_size\n const daemon = parsed.daemon as Record<string, unknown> | undefined;\n if (daemon) {\n const { port, log_level } = daemon;\n parsed.daemon = { port: port ?? null, log_level: log_level ?? 'info' };\n }\n\n // Keep capture basics, drop token-related fields; migrate artifact_watch → plan_dirs\n const capture = parsed.capture as Record<string, unknown> | undefined;\n if (capture) {\n const { transcript_paths, artifact_watch, plan_dirs, artifact_extensions, buffer_max_events } = capture;\n parsed.capture = {\n transcript_paths,\n plan_dirs: plan_dirs ?? artifact_watch,\n artifact_extensions,\n buffer_max_events,\n };\n }\n\n // Drop removed top-level sections\n delete parsed.intelligence;\n delete parsed.context;\n delete parsed.team;\n delete parsed.digest;\n delete parsed.pipeline;\n\n // Set version to 3\n parsed.version = 3;\n v2Migrated = true;\n\n process.stderr.write('[myco migration] Migrated config from v2 to v3\\n');\n }\n\n // Run numbered migrations (for v3+ forward migrations)\n const migrationsRan = runMigrations(parsed, vaultDir, (msg) => {\n process.stderr.write(`[myco migration] ${msg}\\n`);\n });\n\n // Parse with Zod to fill in defaults for new config sections\n const config = MycoConfigSchema.parse(parsed);\n\n // Write back if v2→v3 migration ran, numbered migrations ran, or new defaults were added\n const needsWrite = v2Migrated\n || migrationsRan\n || (parsed.config_version as number ?? 0) < CURRENT_MIGRATION_VERSION\n || parsed.version !== config.version;\n\n if (needsWrite) {\n const fullConfig = JSON.parse(JSON.stringify(config)) as Record<string, unknown>;\n fs.writeFileSync(configPath, YAML.stringify(fullConfig), 'utf-8');\n }\n\n return config;\n}\n\nexport function saveConfig(vaultDir: string, config: MycoConfig): void {\n // Validate before writing — OAK lesson: validate on write, not just read\n const validated = MycoConfigSchema.parse(config);\n\n const configPath = path.join(vaultDir, CONFIG_FILENAME);\n fs.mkdirSync(vaultDir, { recursive: true });\n fs.writeFileSync(configPath, YAML.stringify(validated), 'utf-8');\n}\n\nexport function updateConfig(\n vaultDir: string,\n fn: (config: MycoConfig) => MycoConfig,\n): MycoConfig {\n const current = loadConfig(vaultDir);\n const updated = fn(current);\n saveConfig(vaultDir, updated);\n return updated;\n}\n\nexport function updateBackupConfig(\n vaultDir: string,\n backup: Partial<BackupConfig>,\n): MycoConfig {\n return updateConfig(vaultDir, (config) => ({\n ...config,\n backup: { ...config.backup, ...backup },\n }));\n}\n\n/**\n * Extract the set of enabled symbiont names from config.\n * Returns null when the `symbionts` section is absent (pre-existing installs),\n * signalling callers to fall back to their own heuristic.\n */\nexport function getEnabledSymbiontNames(config: MycoConfig): Set<string> | null {\n if (!config.symbionts) return null;\n return new Set(\n Object.entries(config.symbionts)\n .filter(([, entry]) => entry.enabled)\n .map(([name]) => name),\n );\n}\n\nexport function updateTeamConfig(\n vaultDir: string,\n team: Partial<TeamConfig>,\n): MycoConfig {\n return updateConfig(vaultDir, (config) => ({\n ...config,\n team: { ...config.team, ...team },\n }));\n}\n","import { z } from 'zod';\nimport { SCHEDULABLE_POWER_STATES } from '@myco/constants.js';\n\nconst EmbeddingProviderSchema = z.object({\n provider: z.enum(['ollama', 'openai-compatible', 'openrouter', 'openai']).default('ollama'),\n model: z.string().default('bge-m3'),\n base_url: z.string().url().optional(),\n});\n\nconst DaemonSchema = z.object({\n port: z.number().int().min(1024).max(65535).nullable().default(null),\n log_level: z.enum(['debug', 'info', 'warn', 'error']).default('info'),\n log_retention_days: z.number().int().min(1).max(365).default(30),\n});\n\nconst CaptureSchema = z.object({\n transcript_paths: z.array(z.string()).default([]),\n plan_dirs: z.array(z.string()).default([]),\n artifact_extensions: z.array(z.string()).default(['.md']),\n buffer_max_events: z.number().int().positive().default(500),\n});\n\n/** Provider config shape used in both task-level and phase-level overrides. */\nconst ProviderOverrideSchema = z.object({\n type: z.enum(['cloud', 'ollama', 'lmstudio']),\n base_url: z.string().optional(),\n model: z.string().optional(),\n /** Context window size for local models (Ollama num_ctx, LM Studio context_length). */\n context_length: z.number().int().positive().optional(),\n});\n\n/** Per-phase overrides within a task — keyed by phase name. */\nconst PhaseOverrideSchema = z.object({\n provider: ProviderOverrideSchema.optional(),\n model: z.string().optional(),\n maxTurns: z.number().int().positive().optional(),\n});\n\n/** Per-task schedule override — partial, merges with YAML defaults. */\nconst ScheduleOverrideSchema = z.object({\n enabled: z.boolean().optional(),\n intervalSeconds: z.number().int().positive().optional(),\n runIn: z.array(z.enum([...SCHEDULABLE_POWER_STATES])).optional(),\n preCondition: z.enum(['has-unprocessed-batches', 'has-active-skills', 'has-approved-candidates']).optional(),\n}).optional();\n\n/** Per-task config override — stored in myco.yaml under agent.tasks. */\nconst TaskProviderOverrideSchema = z.object({\n provider: ProviderOverrideSchema.optional(),\n model: z.string().optional(),\n maxTurns: z.number().int().positive().optional(),\n timeoutSeconds: z.number().int().positive().optional(),\n phases: z.record(z.string(), PhaseOverrideSchema).optional(),\n schedule: ScheduleOverrideSchema,\n /** Task-specific params — keys and types vary per task. */\n params: z.record(z.string(), z.union([z.string(), z.number(), z.boolean()])).optional(),\n});\n\nconst ContextSchema = z.object({\n /** Which digest tier to inject at session start. */\n digest_tier: z.number().int().default(5000),\n /** Enable semantic spore search on each user prompt. */\n prompt_search: z.boolean().default(true),\n /** Max spores to inject per prompt (0-10). */\n prompt_max_spores: z.number().int().min(0).max(10).default(3),\n});\n\nconst AgentSchema = z.object({\n /** Number of batches between event-driven summary triggers (0 to disable). */\n summary_batch_interval: z.number().int().min(0).default(5),\n /** Global toggle for PowerManager-scheduled agent tasks. */\n scheduled_tasks_enabled: z.boolean().default(true),\n /** Global toggle for event-driven agent tasks (title-summary). */\n event_tasks_enabled: z.boolean().default(true),\n /** Global default provider — applies to all tasks unless overridden per-task. */\n provider: ProviderOverrideSchema.optional(),\n /** Global default model — applies to all tasks unless overridden per-task. */\n model: z.string().optional(),\n /** Per-task overrides keyed by task name. */\n tasks: z.record(z.string(), TaskProviderOverrideSchema).optional(),\n});\n\nconst BackupSchema = z.object({\n /** Override directory for backup files. Supports ~ for home directory. When unset, defaults to .myco/backups. */\n dir: z.string().optional(),\n});\n\nconst MaintenanceSchema = z.object({\n /** Automatically run PRAGMA optimize on a schedule. */\n auto_optimize: z.boolean().default(true),\n /** How often to run auto-optimize, in hours (1–720). */\n auto_optimize_interval_hours: z.number().int().min(1).max(720).default(24),\n});\n\nconst TeamSchema = z.object({\n /** Whether team sync is enabled. */\n enabled: z.boolean().default(false),\n /** Cloudflare Worker URL for team sync. */\n worker_url: z.string().url().optional(),\n /** Team identifier for sync grouping. */\n team_id: z.string().optional(),\n /** Sync interval in minutes. */\n interval_minutes: z.number().int().min(1).max(1440).default(15),\n /** Package version of the last deployed worker. Used to detect when an upgrade is needed. */\n deployed_worker_version: z.string().optional(),\n});\n\nconst SkillsSchema = z.object({\n /** Auto-generate candidates above this confidence score. */\n confidence_threshold: z.number().min(0).max(1).default(0.7),\n /** Flag unused skills after this many days. */\n usage_stale_days: z.number().int().positive().default(30),\n});\n\nconst NotificationsSchema = z.object({\n /** Master switch — disables all notifications when false. */\n enabled: z.boolean().default(true),\n /** Allow browser system notifications (Notification API). */\n system_notifications: z.boolean().default(false),\n /** Default display mode for new notification types. */\n default_mode: z.enum(['banner', 'summary']).default('banner'),\n /** Per-domain settings. Keys are domain names from the registry. */\n domains: z.record(z.string(), z.object({\n enabled: z.boolean().default(true),\n /** Override display mode for this domain. Omit to use global default_mode. */\n mode: z.enum(['banner', 'summary']).optional(),\n })).default({}),\n});\n\nconst SymbiontEntrySchema = z.object({\n enabled: z.boolean().default(true),\n});\n\nexport const MycoConfigSchema = z.preprocess(\n (raw: unknown) => {\n if (raw && typeof raw === 'object' && 'curation' in raw && !('agent' in raw)) {\n const { curation, ...rest } = raw as Record<string, unknown>;\n return { ...rest, agent: curation };\n }\n return raw;\n },\n z.object({\n version: z.literal(3),\n config_version: z.number().int().nonnegative().default(0),\n embedding: EmbeddingProviderSchema.default(() => EmbeddingProviderSchema.parse({})),\n daemon: DaemonSchema.default(() => DaemonSchema.parse({})),\n capture: CaptureSchema.default(() => CaptureSchema.parse({})),\n agent: AgentSchema.default(() => AgentSchema.parse({})),\n context: ContextSchema.default(() => ContextSchema.parse({})),\n backup: BackupSchema.default(() => BackupSchema.parse({})),\n maintenance: MaintenanceSchema.default(() => MaintenanceSchema.parse({})),\n team: TeamSchema.default(() => TeamSchema.parse({})),\n skills: SkillsSchema.default(() => SkillsSchema.parse({})),\n notifications: NotificationsSchema.default(() => NotificationsSchema.parse({})),\n symbionts: z.record(z.string(), SymbiontEntrySchema).optional(),\n }),\n);\n\nexport type MycoConfig = z.output<typeof MycoConfigSchema>;\nexport type EmbeddingProviderConfig = z.infer<typeof EmbeddingProviderSchema>;\nexport type TaskProviderOverride = z.infer<typeof TaskProviderOverrideSchema>;\nexport type PhaseOverride = z.infer<typeof PhaseOverrideSchema>;\nexport type ScheduleOverride = z.infer<typeof ScheduleOverrideSchema>;\nexport type ContextConfig = z.infer<typeof ContextSchema>;\nexport type BackupConfig = z.infer<typeof BackupSchema>;\nexport type TeamConfig = z.infer<typeof TeamSchema>;\nexport type SkillsConfig = z.infer<typeof SkillsSchema>;\nexport type NotificationsConfig = z.infer<typeof NotificationsSchema>;\nexport type SymbiontEntry = z.infer<typeof SymbiontEntrySchema>;\n","/**\n * Config and vault migrations — run once per version, tracked by config_version.\n *\n * Each migration has a version number, a name, and a function that receives\n * the raw parsed YAML doc and the vault directory. Migrations run in order\n * and are skipped if config_version is already past them.\n *\n * To add a new migration:\n * 1. Add an entry to MIGRATIONS with the next version number\n * 2. Write the migrate function — it receives the mutable doc and vaultDir\n * 3. The framework handles version tracking and writing the config back\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nexport interface Migration {\n version: number;\n name: string;\n migrate: (doc: Record<string, unknown>, vaultDir: string) => void;\n}\n\n/** Regex matching both quoted and unquoted YAML: type: memory, type: \"memory\", type: 'memory' */\nconst MEMORY_TYPE_PATTERN = /type:\\s*[\"']?memory[\"']?/g;\n\nexport const MIGRATIONS: Migration[] = [\n {\n version: 1,\n name: 'rename-memories-to-spores',\n migrate: (doc, vaultDir) => {\n // Config: rename context.layers.memories → context.layers.spores\n const context = doc.context as Record<string, unknown> | undefined;\n const layers = context?.layers as Record<string, unknown> | undefined;\n if (layers && 'memories' in layers && !('spores' in layers)) {\n layers.spores = layers.memories;\n delete layers.memories;\n }\n\n // Vault: rename memories/ directory → spores/\n const memoriesDir = path.join(vaultDir, 'memories');\n const sporesDir = path.join(vaultDir, 'spores');\n\n if (!fs.existsSync(memoriesDir)) return;\n\n if (fs.existsSync(sporesDir)) {\n // Both exist (interrupted migration) — merge remaining files\n const moveRemaining = (srcDir: string, destDir: string): void => {\n for (const entry of fs.readdirSync(srcDir, { withFileTypes: true })) {\n const srcPath = path.join(srcDir, entry.name);\n const destPath = path.join(destDir, entry.name);\n if (entry.isDirectory()) {\n if (!fs.existsSync(destPath)) fs.mkdirSync(destPath, { recursive: true });\n moveRemaining(srcPath, destPath);\n } else if (!fs.existsSync(destPath)) {\n fs.renameSync(srcPath, destPath);\n }\n }\n };\n moveRemaining(memoriesDir, sporesDir);\n fs.rmSync(memoriesDir, { recursive: true, force: true });\n } else {\n fs.renameSync(memoriesDir, sporesDir);\n }\n\n // Update frontmatter type: memory → type: spore (handles quoted and unquoted)\n const walkUpdate = (dir: string): void => {\n for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {\n const fullPath = path.join(dir, entry.name);\n if (entry.isDirectory()) { walkUpdate(fullPath); continue; }\n if (!entry.name.endsWith('.md')) continue;\n const content = fs.readFileSync(fullPath, 'utf-8');\n MEMORY_TYPE_PATTERN.lastIndex = 0;\n if (MEMORY_TYPE_PATTERN.test(content)) {\n MEMORY_TYPE_PATTERN.lastIndex = 0;\n fs.writeFileSync(fullPath, content.replace(MEMORY_TYPE_PATTERN, 'type: spore'));\n }\n }\n };\n walkUpdate(sporesDir);\n\n // Legacy: update wikilink references in Markdown files (pre-SQLite migration): [[memories/...]] → [[spores/...]]\n const walkLinks = (dir: string): void => {\n for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {\n const fullPath = path.join(dir, entry.name);\n if (entry.isDirectory()) { walkLinks(fullPath); continue; }\n if (!entry.name.endsWith('.md')) continue;\n const content = fs.readFileSync(fullPath, 'utf-8');\n if (content.includes('memories/')) {\n fs.writeFileSync(fullPath, content.replace(/memories\\//g, 'spores/'));\n }\n }\n };\n walkLinks(vaultDir);\n },\n },\n {\n version: 2,\n name: 'consolidation-boolean-to-object',\n migrate: (doc) => {\n const digest = doc.digest as Record<string, unknown> | undefined;\n if (!digest) return;\n\n const consolidation = digest.consolidation;\n if (typeof consolidation === 'boolean') {\n digest.consolidation = { enabled: consolidation, max_tokens: 2048 };\n }\n },\n },\n {\n version: 3,\n name: 'schedule-to-task-level',\n migrate(doc: Record<string, unknown>, _vaultDir: string): void {\n const agent = (doc.agent ?? {}) as Record<string, unknown>;\n const skills = (doc.skills ?? {}) as Record<string, unknown>;\n const tasks = ((agent.tasks ?? {}) as Record<string, Record<string, unknown>>);\n\n /** Default interval for full-intelligence task (5 minutes). */\n const DEFAULT_INTELLIGENCE_INTERVAL_SECONDS = 300;\n\n const VALID_SCHEDULE_STATES = ['active', 'idle', 'sleep'] as const;\n\n // Migrate agent.auto_run + interval_seconds → full-intelligence schedule\n if ('auto_run' in agent || 'interval_seconds' in agent) {\n const fiTask = tasks['full-intelligence'] ?? {};\n fiTask.schedule = {\n enabled: agent.auto_run ?? true,\n intervalSeconds: agent.interval_seconds ?? DEFAULT_INTELLIGENCE_INTERVAL_SECONDS,\n };\n tasks['full-intelligence'] = fiTask;\n delete agent.auto_run;\n delete agent.interval_seconds;\n }\n\n // Migrate skills.auto_survey → skill-survey schedule\n if ('auto_survey' in skills) {\n const ssTask = tasks['skill-survey'] ?? {};\n ssTask.schedule = {\n enabled: skills.auto_survey ?? false,\n };\n tasks['skill-survey'] = ssTask;\n delete skills.auto_survey;\n }\n\n // Migrate skills.auto_evolve + evolve_cadence → skill-evolve schedule\n if ('auto_evolve' in skills || 'evolve_cadence' in skills) {\n const seTask = tasks['skill-evolve'] ?? {};\n const schedule: Record<string, unknown> = {\n enabled: skills.auto_evolve ?? false,\n };\n if ('evolve_cadence' in skills) {\n const cadence = String(skills.evolve_cadence);\n schedule.runIn = VALID_SCHEDULE_STATES.includes(cadence as typeof VALID_SCHEDULE_STATES[number])\n ? [cadence]\n : ['idle']; // fallback to safe default\n }\n seTask.schedule = schedule;\n tasks['skill-evolve'] = seTask;\n delete skills.auto_evolve;\n delete skills.evolve_cadence;\n }\n\n // Write back tasks if any were created\n if (Object.keys(tasks).length > 0) {\n agent.tasks = tasks;\n }\n doc.agent = agent;\n doc.skills = skills;\n },\n },\n];\n\n/** Current migration version — the highest version in MIGRATIONS. */\nexport const CURRENT_MIGRATION_VERSION = MIGRATIONS[MIGRATIONS.length - 1]?.version ?? 0;\n\n/**\n * Run all pending migrations on the raw config doc.\n * Returns true if any migrations ran (caller should reindex).\n */\nexport function runMigrations(\n doc: Record<string, unknown>,\n vaultDir: string,\n log?: (message: string) => void,\n): boolean {\n const currentVersion = (doc.config_version as number) ?? 0;\n let ran = false;\n\n for (const migration of MIGRATIONS) {\n if (migration.version <= currentVersion) continue;\n\n migration.migrate(doc, vaultDir);\n doc.config_version = migration.version;\n ran = true;\n }\n\n if (ran) {\n const from = currentVersion;\n const to = (doc.config_version as number) ?? 0;\n log?.(`Migrated config from v${from} to v${to}`);\n }\n\n return ran;\n}\n"],"mappings":"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","names":["fs","path","path","fs","YAML"]}
@@ -1,66 +0,0 @@
1
- import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
- import {
3
- EMBEDDING_REQUEST_TIMEOUT_MS,
4
- PROVIDER_DETECT_TIMEOUT_MS
5
- } from "./chunk-6SDC6V3N.js";
6
-
7
- // src/cli/providers/cloud-embedding-base.ts
8
- var ERROR_BODY_PREVIEW_CHARS = 500;
9
- var CloudEmbeddingBase = class {
10
- name;
11
- apiKey;
12
- model;
13
- config;
14
- constructor(config, opts) {
15
- this.config = config;
16
- this.name = config.providerName;
17
- this.apiKey = opts?.api_key ?? process.env[config.apiKeyEnvVar] ?? "";
18
- this.model = opts?.model ?? config.defaultModel;
19
- }
20
- async embed(text) {
21
- const response = await fetch(`${this.config.apiBase}${this.config.embeddingsEndpoint}`, {
22
- method: "POST",
23
- headers: {
24
- "Content-Type": "application/json",
25
- "Authorization": `Bearer ${this.apiKey}`
26
- },
27
- body: JSON.stringify({ model: this.model, input: text }),
28
- signal: AbortSignal.timeout(EMBEDDING_REQUEST_TIMEOUT_MS)
29
- });
30
- if (!response.ok) {
31
- const body = await response.text().catch(() => "");
32
- throw new Error(`${this.name} embed failed: ${response.status} ${body.slice(0, ERROR_BODY_PREVIEW_CHARS)}`);
33
- }
34
- const data = await response.json();
35
- const embedding = data.data[0].embedding;
36
- return { embedding, model: data.model, dimensions: embedding.length };
37
- }
38
- async isAvailable() {
39
- try {
40
- const response = await fetch(`${this.config.apiBase}${this.config.modelsEndpoint}`, {
41
- headers: { "Authorization": `Bearer ${this.apiKey}` },
42
- signal: AbortSignal.timeout(PROVIDER_DETECT_TIMEOUT_MS)
43
- });
44
- return response.ok;
45
- } catch {
46
- return false;
47
- }
48
- }
49
- async listModels(timeoutMs) {
50
- try {
51
- const response = await fetch(`${this.config.apiBase}${this.config.modelsEndpoint}`, {
52
- headers: { "Authorization": `Bearer ${this.apiKey}` },
53
- signal: AbortSignal.timeout(timeoutMs ?? PROVIDER_DETECT_TIMEOUT_MS)
54
- });
55
- const data = await response.json();
56
- return data.data.filter((m) => this.config.modelFilter(m.id)).map((m) => m.id);
57
- } catch {
58
- return [];
59
- }
60
- }
61
- };
62
-
63
- export {
64
- CloudEmbeddingBase
65
- };
66
- //# sourceMappingURL=chunk-KGL5QSDN.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/cli/providers/cloud-embedding-base.ts"],"sourcesContent":["import type { EmbeddingProvider, EmbeddingResponse } from '../../intelligence/llm.js';\nimport { EMBEDDING_REQUEST_TIMEOUT_MS, PROVIDER_DETECT_TIMEOUT_MS } from '../../constants.js';\n\n/** Max characters of error response body to include in error messages. */\nconst ERROR_BODY_PREVIEW_CHARS = 500;\n\ninterface CloudEmbeddingConfig {\n apiBase: string;\n modelsEndpoint: string;\n embeddingsEndpoint: string;\n apiKeyEnvVar: string;\n defaultModel: string;\n providerName: string;\n /** Filter predicate for model listing — only models matching this are returned. */\n modelFilter: (modelId: string) => boolean;\n}\n\nexport abstract class CloudEmbeddingBase implements EmbeddingProvider {\n readonly name: string;\n protected apiKey: string;\n protected model: string;\n private config: CloudEmbeddingConfig;\n\n constructor(\n config: CloudEmbeddingConfig,\n opts?: { api_key?: string; model?: string },\n ) {\n this.config = config;\n this.name = config.providerName;\n this.apiKey = opts?.api_key ?? process.env[config.apiKeyEnvVar] ?? '';\n this.model = opts?.model ?? config.defaultModel;\n }\n\n async embed(text: string): Promise<EmbeddingResponse> {\n const response = await fetch(`${this.config.apiBase}${this.config.embeddingsEndpoint}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${this.apiKey}`,\n },\n body: JSON.stringify({ model: this.model, input: text }),\n signal: AbortSignal.timeout(EMBEDDING_REQUEST_TIMEOUT_MS),\n });\n\n if (!response.ok) {\n const body = await response.text().catch(() => '');\n throw new Error(`${this.name} embed failed: ${response.status} ${body.slice(0, ERROR_BODY_PREVIEW_CHARS)}`);\n }\n\n const data = await response.json() as { data: Array<{ embedding: number[] }>; model: string };\n const embedding = data.data[0].embedding;\n return { embedding, model: data.model, dimensions: embedding.length };\n }\n\n async isAvailable(): Promise<boolean> {\n try {\n const response = await fetch(`${this.config.apiBase}${this.config.modelsEndpoint}`, {\n headers: { 'Authorization': `Bearer ${this.apiKey}` },\n signal: AbortSignal.timeout(PROVIDER_DETECT_TIMEOUT_MS),\n });\n return response.ok;\n } catch {\n return false;\n }\n }\n\n async listModels(timeoutMs?: number): Promise<string[]> {\n try {\n const response = await fetch(`${this.config.apiBase}${this.config.modelsEndpoint}`, {\n headers: { 'Authorization': `Bearer ${this.apiKey}` },\n signal: AbortSignal.timeout(timeoutMs ?? PROVIDER_DETECT_TIMEOUT_MS),\n });\n const data = await response.json() as { data: Array<{ id: string }> };\n return data.data\n .filter((m) => this.config.modelFilter(m.id))\n .map((m) => m.id);\n } catch {\n return [];\n }\n }\n}\n"],"mappings":";;;;;;;AAIA,IAAM,2BAA2B;AAa1B,IAAe,qBAAf,MAA+D;AAAA,EAC3D;AAAA,EACC;AAAA,EACA;AAAA,EACF;AAAA,EAER,YACE,QACA,MACA;AACA,SAAK,SAAS;AACd,SAAK,OAAO,OAAO;AACnB,SAAK,SAAS,MAAM,WAAW,QAAQ,IAAI,OAAO,YAAY,KAAK;AACnE,SAAK,QAAQ,MAAM,SAAS,OAAO;AAAA,EACrC;AAAA,EAEA,MAAM,MAAM,MAA0C;AACpD,UAAM,WAAW,MAAM,MAAM,GAAG,KAAK,OAAO,OAAO,GAAG,KAAK,OAAO,kBAAkB,IAAI;AAAA,MACtF,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB,UAAU,KAAK,MAAM;AAAA,MACxC;AAAA,MACA,MAAM,KAAK,UAAU,EAAE,OAAO,KAAK,OAAO,OAAO,KAAK,CAAC;AAAA,MACvD,QAAQ,YAAY,QAAQ,4BAA4B;AAAA,IAC1D,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,OAAO,MAAM,SAAS,KAAK,EAAE,MAAM,MAAM,EAAE;AACjD,YAAM,IAAI,MAAM,GAAG,KAAK,IAAI,kBAAkB,SAAS,MAAM,IAAI,KAAK,MAAM,GAAG,wBAAwB,CAAC,EAAE;AAAA,IAC5G;AAEA,UAAM,OAAO,MAAM,SAAS,KAAK;AACjC,UAAM,YAAY,KAAK,KAAK,CAAC,EAAE;AAC/B,WAAO,EAAE,WAAW,OAAO,KAAK,OAAO,YAAY,UAAU,OAAO;AAAA,EACtE;AAAA,EAEA,MAAM,cAAgC;AACpC,QAAI;AACF,YAAM,WAAW,MAAM,MAAM,GAAG,KAAK,OAAO,OAAO,GAAG,KAAK,OAAO,cAAc,IAAI;AAAA,QAClF,SAAS,EAAE,iBAAiB,UAAU,KAAK,MAAM,GAAG;AAAA,QACpD,QAAQ,YAAY,QAAQ,0BAA0B;AAAA,MACxD,CAAC;AACD,aAAO,SAAS;AAAA,IAClB,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,WAAW,WAAuC;AACtD,QAAI;AACF,YAAM,WAAW,MAAM,MAAM,GAAG,KAAK,OAAO,OAAO,GAAG,KAAK,OAAO,cAAc,IAAI;AAAA,QAClF,SAAS,EAAE,iBAAiB,UAAU,KAAK,MAAM,GAAG;AAAA,QACpD,QAAQ,YAAY,QAAQ,aAAa,0BAA0B;AAAA,MACrE,CAAC;AACD,YAAM,OAAO,MAAM,SAAS,KAAK;AACjC,aAAO,KAAK,KACT,OAAO,CAAC,MAAM,KAAK,OAAO,YAAY,EAAE,EAAE,CAAC,EAC3C,IAAI,CAAC,MAAM,EAAE,EAAE;AAAA,IACpB,QAAQ;AACN,aAAO,CAAC;AAAA,IACV;AAAA,EACF;AACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/config/updates.ts"],"sourcesContent":["import type { MycoConfig, EmbeddingProviderConfig, ContextConfig, TaskProviderOverride, PhaseOverride } from './schema.js';\n\n/**\n * Set a value at a dot-separated path, returning a new config object.\n * Creates intermediate objects along the path as needed.\n */\nexport function withValue(config: MycoConfig, dotPath: string, value: unknown): MycoConfig {\n const clone = structuredClone(config) as MycoConfig & Record<string, unknown>;\n const segments = dotPath.split('.');\n let current: Record<string, unknown> = clone;\n\n for (let i = 0; i < segments.length - 1; i++) {\n const segment = segments[i];\n if (current[segment] === undefined || current[segment] === null || typeof current[segment] !== 'object') {\n current[segment] = {};\n }\n current = current[segment] as Record<string, unknown>;\n }\n\n current[segments[segments.length - 1]] = value;\n\n return clone as MycoConfig;\n}\n\n/** Provider override shape used in task config updates. Null means delete. */\ninterface ProviderInput {\n type: 'cloud' | 'ollama' | 'lmstudio';\n model?: string;\n base_url?: string;\n context_length?: number;\n}\n\n/** Phase override input. Null fields mean delete. */\ninterface PhaseInput {\n provider?: ProviderInput | null;\n model?: string | null;\n maxTurns?: number | null;\n}\n\n/** Input shape for task config updates. Null values mean \"delete this field\". */\nexport interface TaskConfigUpdate {\n provider?: ProviderInput | null;\n model?: string | null;\n maxTurns?: number | null;\n timeoutSeconds?: number | null;\n phases?: Record<string, PhaseInput | null> | null;\n schedule?: { enabled?: boolean; intervalSeconds?: number; runIn?: ('active' | 'idle' | 'sleep')[] } | null;\n}\n\n/**\n * Apply partial task config updates, returning a new config object.\n * Null values delete fields. Empty task entries and phase maps are cleaned up.\n */\nexport function withTaskConfig(\n config: MycoConfig,\n taskId: string,\n update: TaskConfigUpdate,\n): MycoConfig {\n const tasks = { ...(config.agent.tasks ?? {}) };\n const entry: TaskProviderOverride = { ...(tasks[taskId] ?? {}) };\n\n // Apply top-level fields\n if ('provider' in update) {\n if (update.provider === null) {\n delete entry.provider;\n } else if (update.provider !== undefined) {\n entry.provider = { ...update.provider };\n }\n }\n\n if ('model' in update) {\n if (update.model === null) delete entry.model;\n else if (update.model !== undefined) entry.model = update.model;\n }\n\n if ('maxTurns' in update) {\n if (update.maxTurns === null) delete entry.maxTurns;\n else if (update.maxTurns !== undefined) entry.maxTurns = update.maxTurns;\n }\n\n if ('timeoutSeconds' in update) {\n if (update.timeoutSeconds === null) delete entry.timeoutSeconds;\n else if (update.timeoutSeconds !== undefined) entry.timeoutSeconds = update.timeoutSeconds;\n }\n\n // Handle schedule\n if ('schedule' in update) {\n if (update.schedule === null) {\n delete entry.schedule;\n } else if (update.schedule !== undefined) {\n entry.schedule = { ...entry.schedule, ...update.schedule };\n }\n }\n\n // Apply phase overrides\n if ('phases' in update) {\n if (update.phases === null) {\n delete entry.phases;\n } else if (update.phases !== undefined) {\n const phases: Record<string, PhaseOverride> = { ...(entry.phases ?? {}) };\n\n for (const [phaseName, phaseValue] of Object.entries(update.phases)) {\n if (phaseValue === null) {\n delete phases[phaseName];\n } else {\n const pe: PhaseOverride = { ...(phases[phaseName] ?? {}) };\n if ('provider' in phaseValue) {\n if (phaseValue.provider === null) delete pe.provider;\n else if (phaseValue.provider !== undefined) pe.provider = { ...phaseValue.provider };\n }\n if ('model' in phaseValue) {\n if (phaseValue.model === null) delete pe.model;\n else if (phaseValue.model !== undefined) pe.model = phaseValue.model;\n }\n if ('maxTurns' in phaseValue) {\n if (phaseValue.maxTurns === null) delete pe.maxTurns;\n else if (phaseValue.maxTurns !== undefined) pe.maxTurns = phaseValue.maxTurns;\n }\n phases[phaseName] = pe;\n }\n }\n\n // Clean up empty phases map\n if (Object.keys(phases).length === 0) {\n delete entry.phases;\n } else {\n entry.phases = phases;\n }\n }\n }\n\n // Clean up empty task entry\n if (Object.keys(entry).length === 0) {\n delete tasks[taskId];\n } else {\n tasks[taskId] = entry;\n }\n\n return {\n ...config,\n agent: {\n ...config.agent,\n tasks: Object.keys(tasks).length > 0 ? tasks : undefined,\n },\n };\n}\n\n/**\n * Merge partial embedding updates into config, returning a new config object.\n */\nexport function withEmbedding(\n config: MycoConfig,\n updates: Partial<EmbeddingProviderConfig>,\n): MycoConfig {\n return {\n ...config,\n embedding: { ...config.embedding, ...updates },\n };\n}\n\n/**\n * Merge partial context injection updates into config, returning a new config object.\n */\nexport function withContext(\n config: MycoConfig,\n updates: Partial<ContextConfig>,\n): MycoConfig {\n return {\n ...config,\n context: { ...config.context, ...updates },\n };\n}\n"],"mappings":"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","names":[]}
@@ -1,26 +0,0 @@
1
- import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
- import {
3
- CloudEmbeddingBase
4
- } from "./chunk-KGL5QSDN.js";
5
-
6
- // src/cli/providers/openrouter.ts
7
- var OPENROUTER_API_KEY_ENV = "MYCO_OPENROUTER_API_KEY";
8
- var OpenRouterEmbeddingProvider = class extends CloudEmbeddingBase {
9
- constructor(opts) {
10
- super({
11
- apiBase: "https://openrouter.ai/api/v1",
12
- modelsEndpoint: "/models",
13
- embeddingsEndpoint: "/embeddings",
14
- apiKeyEnvVar: OPENROUTER_API_KEY_ENV,
15
- defaultModel: "openai/text-embedding-3-small",
16
- providerName: "openrouter",
17
- modelFilter: (id) => id.includes("embed")
18
- }, opts);
19
- }
20
- };
21
-
22
- export {
23
- OPENROUTER_API_KEY_ENV,
24
- OpenRouterEmbeddingProvider
25
- };
26
- //# sourceMappingURL=chunk-U3SSOSIR.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/cli/providers/openrouter.ts"],"sourcesContent":["import { CloudEmbeddingBase } from './cloud-embedding-base.js';\n\n/** Environment variable for OpenRouter API key (stored in secrets.env). */\nexport const OPENROUTER_API_KEY_ENV = 'MYCO_OPENROUTER_API_KEY';\n\nexport class OpenRouterEmbeddingProvider extends CloudEmbeddingBase {\n constructor(opts?: { api_key?: string; model?: string }) {\n super({\n apiBase: 'https://openrouter.ai/api/v1',\n modelsEndpoint: '/models',\n embeddingsEndpoint: '/embeddings',\n apiKeyEnvVar: OPENROUTER_API_KEY_ENV,\n defaultModel: 'openai/text-embedding-3-small',\n providerName: 'openrouter',\n modelFilter: (id) => id.includes('embed'),\n }, opts);\n }\n}\n"],"mappings":";;;;;;AAGO,IAAM,yBAAyB;AAE/B,IAAM,8BAAN,cAA0C,mBAAmB;AAAA,EAClE,YAAY,MAA6C;AACvD,UAAM;AAAA,MACJ,SAAS;AAAA,MACT,gBAAgB;AAAA,MAChB,oBAAoB;AAAA,MACpB,cAAc;AAAA,MACd,cAAc;AAAA,MACd,cAAc;AAAA,MACd,aAAa,CAAC,OAAO,GAAG,SAAS,OAAO;AAAA,IAC1C,GAAG,IAAI;AAAA,EACT;AACF;","names":[]}
@@ -1,26 +0,0 @@
1
- import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
- import {
3
- CloudEmbeddingBase
4
- } from "./chunk-KGL5QSDN.js";
5
-
6
- // src/cli/providers/openai-embeddings.ts
7
- var OPENAI_API_KEY_ENV = "MYCO_OPENAI_API_KEY";
8
- var OpenAIEmbeddingProvider = class extends CloudEmbeddingBase {
9
- constructor(opts) {
10
- super({
11
- apiBase: "https://api.openai.com/v1",
12
- modelsEndpoint: "/models",
13
- embeddingsEndpoint: "/embeddings",
14
- apiKeyEnvVar: OPENAI_API_KEY_ENV,
15
- defaultModel: "text-embedding-3-small",
16
- providerName: "openai",
17
- modelFilter: (id) => id.includes("embedding")
18
- }, opts);
19
- }
20
- };
21
-
22
- export {
23
- OPENAI_API_KEY_ENV,
24
- OpenAIEmbeddingProvider
25
- };
26
- //# sourceMappingURL=chunk-Y7QCKCEJ.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/cli/providers/openai-embeddings.ts"],"sourcesContent":["import { CloudEmbeddingBase } from './cloud-embedding-base.js';\n\n/** Environment variable for OpenAI API key (stored in secrets.env). */\nexport const OPENAI_API_KEY_ENV = 'MYCO_OPENAI_API_KEY';\n\nexport class OpenAIEmbeddingProvider extends CloudEmbeddingBase {\n constructor(opts?: { api_key?: string; model?: string }) {\n super({\n apiBase: 'https://api.openai.com/v1',\n modelsEndpoint: '/models',\n embeddingsEndpoint: '/embeddings',\n apiKeyEnvVar: OPENAI_API_KEY_ENV,\n defaultModel: 'text-embedding-3-small',\n providerName: 'openai',\n modelFilter: (id) => id.includes('embedding'),\n }, opts);\n }\n}\n"],"mappings":";;;;;;AAGO,IAAM,qBAAqB;AAE3B,IAAM,0BAAN,cAAsC,mBAAmB;AAAA,EAC9D,YAAY,MAA6C;AACvD,UAAM;AAAA,MACJ,SAAS;AAAA,MACT,gBAAgB;AAAA,MAChB,oBAAoB;AAAA,MACpB,cAAc;AAAA,MACd,cAAc;AAAA,MACd,cAAc;AAAA,MACd,aAAa,CAAC,OAAO,GAAG,SAAS,WAAW;AAAA,IAC9C,GAAG,IAAI;AAAA,EACT;AACF;","names":[]}