@goondocks/myco 0.18.0 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. package/README.md +17 -130
  2. package/dist/{agent-run-2NFYMQXW.js → agent-run-EADUYYAS.js} +6 -6
  3. package/dist/{agent-tasks-MEIYLXGN.js → agent-tasks-GC77JXQB.js} +6 -6
  4. package/dist/{chunk-EO2RQW4S.js → chunk-2CKDAFSX.js} +2 -2
  5. package/dist/{chunk-NZI7WBZI.js → chunk-2DF4OZ2D.js} +22 -2
  6. package/dist/chunk-2DF4OZ2D.js.map +1 -0
  7. package/dist/{chunk-OW433Q4C.js → chunk-2LN2BBKA.js} +45 -4
  8. package/dist/chunk-2LN2BBKA.js.map +1 -0
  9. package/dist/{chunk-U7GJTVSX.js → chunk-2OO3BRFK.js} +21 -7
  10. package/dist/chunk-2OO3BRFK.js.map +1 -0
  11. package/dist/{chunk-RAV5YMRU.js → chunk-3TPD6HEF.js} +4 -4
  12. package/dist/{chunk-JMOUFG6Y.js → chunk-44PZCAYS.js} +47 -5
  13. package/dist/chunk-44PZCAYS.js.map +1 -0
  14. package/dist/{chunk-D7TYRPRM.js → chunk-6LQIMRTC.js} +145 -145
  15. package/dist/chunk-6LQIMRTC.js.map +1 -0
  16. package/dist/{chunk-NI23QCHB.js → chunk-AELJ4PS5.js} +5 -5
  17. package/dist/{chunk-BUIR3JWM.js → chunk-CYBC2HZ3.js} +3 -3
  18. package/dist/chunk-EM63ZFKA.js +166 -0
  19. package/dist/chunk-EM63ZFKA.js.map +1 -0
  20. package/dist/{chunk-O3TRN3RC.js → chunk-INWD6AIQ.js} +2 -2
  21. package/dist/{chunk-CML4MCYF.js → chunk-KSXTNYXO.js} +2 -2
  22. package/dist/{chunk-KWTOCJLB.js → chunk-LLJMDXO2.js} +1176 -241
  23. package/dist/chunk-LLJMDXO2.js.map +1 -0
  24. package/dist/{chunk-2V7HR7HB.js → chunk-MDEUXYJG.js} +4 -4
  25. package/dist/{chunk-PFWIPRF6.js → chunk-MS6FDV45.js} +3 -3
  26. package/dist/{chunk-55QEICRO.js → chunk-N77K772N.js} +3 -3
  27. package/dist/{chunk-E4VLWIJC.js → chunk-ODXLRR4U.js} +1 -1
  28. package/dist/{chunk-DLFDBKEV.js → chunk-OZF5EURR.js} +19 -16
  29. package/dist/chunk-OZF5EURR.js.map +1 -0
  30. package/dist/{chunk-IB76KGBY.js → chunk-POEPHBQK.js} +1 -1
  31. package/dist/{chunk-7OYXB2NM.js → chunk-REN37KYI.js} +6 -2
  32. package/dist/chunk-REN37KYI.js.map +1 -0
  33. package/dist/{chunk-JDI4DPWD.js → chunk-RXROZBSK.js} +637 -150
  34. package/dist/chunk-RXROZBSK.js.map +1 -0
  35. package/dist/{chunk-U3J2DDSR.js → chunk-SCI55NKY.js} +2 -2
  36. package/dist/{chunk-GDY63YAW.js → chunk-U6PF3YII.js} +79 -79
  37. package/dist/chunk-U6PF3YII.js.map +1 -0
  38. package/dist/{chunk-FABWUX5G.js → chunk-UVKQ62II.js} +18 -4
  39. package/dist/chunk-UVKQ62II.js.map +1 -0
  40. package/dist/{chunk-VOCGURV7.js → chunk-UW6DGPSV.js} +3 -3
  41. package/dist/{chunk-CKJAWZQE.js → chunk-W4VHC2ES.js} +11 -3
  42. package/dist/chunk-W4VHC2ES.js.map +1 -0
  43. package/dist/{chunk-75AZFBFW.js → chunk-YPWF322W.js} +3 -3
  44. package/dist/{cli-IIMBALPV.js → cli-X7CFP4YD.js} +39 -39
  45. package/dist/{client-VZCUISHZ.js → client-YA33HUFY.js} +4 -4
  46. package/dist/{config-DA4IUVFL.js → config-RFB2DJC6.js} +6 -6
  47. package/dist/{detect-GEM3NVK6.js → detect-BEOIHGBC.js} +5 -5
  48. package/dist/{detect-providers-PSVKXTWE.js → detect-providers-2OQBU4VX.js} +4 -4
  49. package/dist/{doctor-QYD34X7Q.js → doctor-FAH7N66M.js} +11 -11
  50. package/dist/{executor-NSPRTH4M.js → executor-ICTRRUBY.js} +93 -285
  51. package/dist/executor-ICTRRUBY.js.map +1 -0
  52. package/dist/{init-WYYL44KZ.js → init-PTJEOTJV.js} +15 -15
  53. package/dist/{llm-KEDHK3TQ.js → llm-7D2OGDEK.js} +4 -4
  54. package/dist/{loader-Q3P3R4UP.js → loader-O2JFO2UC.js} +6 -6
  55. package/dist/{loader-SKKUMT5C.js → loader-VPE4RCIF.js} +6 -6
  56. package/dist/{main-6PY3ITQ5.js → main-EIKBLOUL.js} +752 -264
  57. package/dist/main-EIKBLOUL.js.map +1 -0
  58. package/dist/{open-HRFMJDQX.js → open-2JCSOLZS.js} +6 -6
  59. package/dist/{post-compact-HT24YMAN.js → post-compact-2HPPWPBI.js} +10 -10
  60. package/dist/{post-tool-use-DENRI5WB.js → post-tool-use-TWBBBABS.js} +9 -9
  61. package/dist/{post-tool-use-failure-A6SNJX42.js → post-tool-use-failure-LIJYR4KL.js} +10 -10
  62. package/dist/{pre-compact-3Q4BALCL.js → pre-compact-II2CMNTG.js} +10 -10
  63. package/dist/{provider-check-AE3L5Z6R.js → provider-check-KEQNQ6LO.js} +4 -4
  64. package/dist/{registry-O2NZLO3V.js → registry-X5FDGYXT.js} +7 -7
  65. package/dist/{remove-YB5A6HY2.js → remove-L5MVYBOY.js} +11 -11
  66. package/dist/{resolution-events-XWYLLDRK.js → resolution-events-MVIZMONR.js} +4 -4
  67. package/dist/{restart-RGDVHELZ.js → restart-VIT3JBD6.js} +7 -7
  68. package/dist/{search-WOHT3G55.js → search-O6BB5MTO.js} +7 -7
  69. package/dist/{server-6SUNYDV7.js → server-O3UPJVBR.js} +258 -173
  70. package/dist/server-O3UPJVBR.js.map +1 -0
  71. package/dist/{session-W3SKRFRV.js → session-5JV3DQIK.js} +8 -8
  72. package/dist/{session-end-OUTY7AFF.js → session-end-PZ2OXBGG.js} +9 -9
  73. package/dist/{session-start-5MB3LFOA.js → session-start-FDGM56BX.js} +22 -17
  74. package/dist/{session-start-5MB3LFOA.js.map → session-start-FDGM56BX.js.map} +1 -1
  75. package/dist/{setup-llm-ZMYGIQX5.js → setup-llm-MQK557BB.js} +10 -10
  76. package/dist/src/agent/definitions/tasks/extract-only.yaml +1 -1
  77. package/dist/src/agent/definitions/tasks/full-intelligence.yaml +10 -0
  78. package/dist/src/agent/definitions/tasks/skill-evolve.yaml +163 -49
  79. package/dist/src/agent/definitions/tasks/skill-generate.yaml +44 -27
  80. package/dist/src/agent/definitions/tasks/skill-survey.yaml +132 -138
  81. package/dist/src/agent/definitions/tasks/supersession-sweep.yaml +1 -1
  82. package/dist/src/cli.js +1 -1
  83. package/dist/src/daemon/main.js +1 -1
  84. package/dist/src/hooks/post-tool-use.js +1 -1
  85. package/dist/src/hooks/session-end.js +1 -1
  86. package/dist/src/hooks/session-start.js +1 -1
  87. package/dist/src/hooks/stop.js +1 -1
  88. package/dist/src/hooks/user-prompt-submit.js +1 -1
  89. package/dist/src/mcp/server.js +1 -1
  90. package/dist/src/symbionts/manifests/codex.yaml +45 -7
  91. package/dist/{stats-DGI6B3HX.js → stats-2STTARTC.js} +11 -11
  92. package/dist/{stop-YGHODSP7.js → stop-WNKCMCGO.js} +9 -9
  93. package/dist/{stop-failure-7IJTPJ6W.js → stop-failure-6GTOBVTN.js} +10 -10
  94. package/dist/{subagent-start-ZBQ5PJB5.js → subagent-start-VJF5YKVX.js} +10 -10
  95. package/dist/{subagent-stop-N2TDQU2D.js → subagent-stop-UW6HMICY.js} +10 -10
  96. package/dist/{task-completed-BDLMRSBB.js → task-completed-U4Q3XXLX.js} +10 -10
  97. package/dist/{team-2ZFGTSIN.js → team-N6TXS2PF.js} +148 -103
  98. package/dist/team-N6TXS2PF.js.map +1 -0
  99. package/dist/ui/assets/{index-DtT9_nlT.js → index-CHIm98OP.js} +48 -48
  100. package/dist/ui/index.html +1 -1
  101. package/dist/{update-STLAN7LR.js → update-ZYCOWKMD.js} +11 -11
  102. package/dist/{user-prompt-submit-4IBFUYQ3.js → user-prompt-submit-SOYL4OWF.js} +15 -12
  103. package/dist/user-prompt-submit-SOYL4OWF.js.map +1 -0
  104. package/dist/{verify-EJYPO7QA.js → verify-P37PQ4YM.js} +8 -8
  105. package/dist/{version-YPBIKH77.js → version-XAWC277D.js} +2 -2
  106. package/package.json +25 -8
  107. package/CONTRIBUTING.md +0 -132
  108. package/dist/chunk-7OYXB2NM.js.map +0 -1
  109. package/dist/chunk-CKJAWZQE.js.map +0 -1
  110. package/dist/chunk-D7TYRPRM.js.map +0 -1
  111. package/dist/chunk-DLFDBKEV.js.map +0 -1
  112. package/dist/chunk-FABWUX5G.js.map +0 -1
  113. package/dist/chunk-GDY63YAW.js.map +0 -1
  114. package/dist/chunk-JDI4DPWD.js.map +0 -1
  115. package/dist/chunk-JMOUFG6Y.js.map +0 -1
  116. package/dist/chunk-KWTOCJLB.js.map +0 -1
  117. package/dist/chunk-NZI7WBZI.js.map +0 -1
  118. package/dist/chunk-OW433Q4C.js.map +0 -1
  119. package/dist/chunk-RJMXDUMA.js +0 -40
  120. package/dist/chunk-RJMXDUMA.js.map +0 -1
  121. package/dist/chunk-U7GJTVSX.js.map +0 -1
  122. package/dist/executor-NSPRTH4M.js.map +0 -1
  123. package/dist/main-6PY3ITQ5.js.map +0 -1
  124. package/dist/server-6SUNYDV7.js.map +0 -1
  125. package/dist/src/worker/package-lock.json +0 -4338
  126. package/dist/src/worker/package.json +0 -22
  127. package/dist/src/worker/src/auth.ts +0 -31
  128. package/dist/src/worker/src/index.ts +0 -470
  129. package/dist/src/worker/src/mcp/auth.ts +0 -65
  130. package/dist/src/worker/src/mcp/server.ts +0 -53
  131. package/dist/src/worker/src/mcp/tools/context.ts +0 -13
  132. package/dist/src/worker/src/mcp/tools/get.ts +0 -15
  133. package/dist/src/worker/src/mcp/tools/graph.ts +0 -35
  134. package/dist/src/worker/src/mcp/tools/search.ts +0 -32
  135. package/dist/src/worker/src/mcp/tools/sessions.ts +0 -24
  136. package/dist/src/worker/src/mcp/tools/skills.ts +0 -16
  137. package/dist/src/worker/src/mcp/tools/team.ts +0 -9
  138. package/dist/src/worker/src/schema.ts +0 -324
  139. package/dist/src/worker/src/search-helpers.ts +0 -70
  140. package/dist/src/worker/tsconfig.json +0 -16
  141. package/dist/src/worker/wrangler.toml +0 -30
  142. package/dist/team-2ZFGTSIN.js.map +0 -1
  143. package/dist/user-prompt-submit-4IBFUYQ3.js.map +0 -1
  144. /package/dist/{agent-run-2NFYMQXW.js.map → agent-run-EADUYYAS.js.map} +0 -0
  145. /package/dist/{agent-tasks-MEIYLXGN.js.map → agent-tasks-GC77JXQB.js.map} +0 -0
  146. /package/dist/{chunk-EO2RQW4S.js.map → chunk-2CKDAFSX.js.map} +0 -0
  147. /package/dist/{chunk-RAV5YMRU.js.map → chunk-3TPD6HEF.js.map} +0 -0
  148. /package/dist/{chunk-NI23QCHB.js.map → chunk-AELJ4PS5.js.map} +0 -0
  149. /package/dist/{chunk-BUIR3JWM.js.map → chunk-CYBC2HZ3.js.map} +0 -0
  150. /package/dist/{chunk-O3TRN3RC.js.map → chunk-INWD6AIQ.js.map} +0 -0
  151. /package/dist/{chunk-CML4MCYF.js.map → chunk-KSXTNYXO.js.map} +0 -0
  152. /package/dist/{chunk-2V7HR7HB.js.map → chunk-MDEUXYJG.js.map} +0 -0
  153. /package/dist/{chunk-PFWIPRF6.js.map → chunk-MS6FDV45.js.map} +0 -0
  154. /package/dist/{chunk-55QEICRO.js.map → chunk-N77K772N.js.map} +0 -0
  155. /package/dist/{chunk-E4VLWIJC.js.map → chunk-ODXLRR4U.js.map} +0 -0
  156. /package/dist/{chunk-IB76KGBY.js.map → chunk-POEPHBQK.js.map} +0 -0
  157. /package/dist/{chunk-U3J2DDSR.js.map → chunk-SCI55NKY.js.map} +0 -0
  158. /package/dist/{chunk-VOCGURV7.js.map → chunk-UW6DGPSV.js.map} +0 -0
  159. /package/dist/{chunk-75AZFBFW.js.map → chunk-YPWF322W.js.map} +0 -0
  160. /package/dist/{cli-IIMBALPV.js.map → cli-X7CFP4YD.js.map} +0 -0
  161. /package/dist/{client-VZCUISHZ.js.map → client-YA33HUFY.js.map} +0 -0
  162. /package/dist/{config-DA4IUVFL.js.map → config-RFB2DJC6.js.map} +0 -0
  163. /package/dist/{detect-GEM3NVK6.js.map → detect-BEOIHGBC.js.map} +0 -0
  164. /package/dist/{detect-providers-PSVKXTWE.js.map → detect-providers-2OQBU4VX.js.map} +0 -0
  165. /package/dist/{doctor-QYD34X7Q.js.map → doctor-FAH7N66M.js.map} +0 -0
  166. /package/dist/{init-WYYL44KZ.js.map → init-PTJEOTJV.js.map} +0 -0
  167. /package/dist/{llm-KEDHK3TQ.js.map → llm-7D2OGDEK.js.map} +0 -0
  168. /package/dist/{loader-Q3P3R4UP.js.map → loader-O2JFO2UC.js.map} +0 -0
  169. /package/dist/{loader-SKKUMT5C.js.map → loader-VPE4RCIF.js.map} +0 -0
  170. /package/dist/{open-HRFMJDQX.js.map → open-2JCSOLZS.js.map} +0 -0
  171. /package/dist/{post-compact-HT24YMAN.js.map → post-compact-2HPPWPBI.js.map} +0 -0
  172. /package/dist/{post-tool-use-DENRI5WB.js.map → post-tool-use-TWBBBABS.js.map} +0 -0
  173. /package/dist/{post-tool-use-failure-A6SNJX42.js.map → post-tool-use-failure-LIJYR4KL.js.map} +0 -0
  174. /package/dist/{pre-compact-3Q4BALCL.js.map → pre-compact-II2CMNTG.js.map} +0 -0
  175. /package/dist/{provider-check-AE3L5Z6R.js.map → provider-check-KEQNQ6LO.js.map} +0 -0
  176. /package/dist/{registry-O2NZLO3V.js.map → registry-X5FDGYXT.js.map} +0 -0
  177. /package/dist/{remove-YB5A6HY2.js.map → remove-L5MVYBOY.js.map} +0 -0
  178. /package/dist/{resolution-events-XWYLLDRK.js.map → resolution-events-MVIZMONR.js.map} +0 -0
  179. /package/dist/{restart-RGDVHELZ.js.map → restart-VIT3JBD6.js.map} +0 -0
  180. /package/dist/{search-WOHT3G55.js.map → search-O6BB5MTO.js.map} +0 -0
  181. /package/dist/{session-W3SKRFRV.js.map → session-5JV3DQIK.js.map} +0 -0
  182. /package/dist/{session-end-OUTY7AFF.js.map → session-end-PZ2OXBGG.js.map} +0 -0
  183. /package/dist/{setup-llm-ZMYGIQX5.js.map → setup-llm-MQK557BB.js.map} +0 -0
  184. /package/dist/{stats-DGI6B3HX.js.map → stats-2STTARTC.js.map} +0 -0
  185. /package/dist/{stop-YGHODSP7.js.map → stop-WNKCMCGO.js.map} +0 -0
  186. /package/dist/{stop-failure-7IJTPJ6W.js.map → stop-failure-6GTOBVTN.js.map} +0 -0
  187. /package/dist/{subagent-start-ZBQ5PJB5.js.map → subagent-start-VJF5YKVX.js.map} +0 -0
  188. /package/dist/{subagent-stop-N2TDQU2D.js.map → subagent-stop-UW6HMICY.js.map} +0 -0
  189. /package/dist/{task-completed-BDLMRSBB.js.map → task-completed-U4Q3XXLX.js.map} +0 -0
  190. /package/dist/{update-STLAN7LR.js.map → update-ZYCOWKMD.js.map} +0 -0
  191. /package/dist/{verify-EJYPO7QA.js.map → verify-P37PQ4YM.js.map} +0 -0
  192. /package/dist/{version-YPBIKH77.js.map → version-XAWC277D.js.map} +0 -0
@@ -2,21 +2,21 @@ 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-MS6FDV45.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-CYBC2HZ3.js";
12
+ import "./chunk-2CKDAFSX.js";
13
+ import "./chunk-UVKQ62II.js";
14
14
  import "./chunk-LPUQPDC2.js";
15
- import "./chunk-CKJAWZQE.js";
15
+ import "./chunk-W4VHC2ES.js";
16
16
  import "./chunk-E7NUADTQ.js";
17
- import "./chunk-D7TYRPRM.js";
18
- import "./chunk-E4VLWIJC.js";
19
- import "./chunk-GDY63YAW.js";
17
+ import "./chunk-6LQIMRTC.js";
18
+ import "./chunk-ODXLRR4U.js";
19
+ import "./chunk-U6PF3YII.js";
20
20
  import "./chunk-PZUWP5VK.js";
21
21
 
22
22
  // src/hooks/stop.ts
@@ -45,4 +45,4 @@ async function main() {
45
45
  export {
46
46
  main
47
47
  };
48
- //# sourceMappingURL=stop-YGHODSP7.js.map
48
+ //# sourceMappingURL=stop-WNKCMCGO.js.map
@@ -1,19 +1,19 @@
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-UW6DGPSV.js";
5
5
  import "./chunk-V7XG6V6C.js";
6
- import "./chunk-PFWIPRF6.js";
6
+ import "./chunk-MS6FDV45.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-CYBC2HZ3.js";
9
+ import "./chunk-2CKDAFSX.js";
10
+ import "./chunk-UVKQ62II.js";
11
11
  import "./chunk-LPUQPDC2.js";
12
- import "./chunk-CKJAWZQE.js";
12
+ import "./chunk-W4VHC2ES.js";
13
13
  import "./chunk-E7NUADTQ.js";
14
- import "./chunk-D7TYRPRM.js";
15
- import "./chunk-E4VLWIJC.js";
16
- import "./chunk-GDY63YAW.js";
14
+ import "./chunk-6LQIMRTC.js";
15
+ import "./chunk-ODXLRR4U.js";
16
+ import "./chunk-U6PF3YII.js";
17
17
  import "./chunk-PZUWP5VK.js";
18
18
 
19
19
  // src/hooks/stop-failure.ts
@@ -27,4 +27,4 @@ async function main() {
27
27
  export {
28
28
  main
29
29
  };
30
- //# sourceMappingURL=stop-failure-7IJTPJ6W.js.map
30
+ //# sourceMappingURL=stop-failure-6GTOBVTN.js.map
@@ -1,19 +1,19 @@
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-UW6DGPSV.js";
5
5
  import "./chunk-V7XG6V6C.js";
6
- import "./chunk-PFWIPRF6.js";
6
+ import "./chunk-MS6FDV45.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-CYBC2HZ3.js";
9
+ import "./chunk-2CKDAFSX.js";
10
+ import "./chunk-UVKQ62II.js";
11
11
  import "./chunk-LPUQPDC2.js";
12
- import "./chunk-CKJAWZQE.js";
12
+ import "./chunk-W4VHC2ES.js";
13
13
  import "./chunk-E7NUADTQ.js";
14
- import "./chunk-D7TYRPRM.js";
15
- import "./chunk-E4VLWIJC.js";
16
- import "./chunk-GDY63YAW.js";
14
+ import "./chunk-6LQIMRTC.js";
15
+ import "./chunk-ODXLRR4U.js";
16
+ import "./chunk-U6PF3YII.js";
17
17
  import "./chunk-PZUWP5VK.js";
18
18
 
19
19
  // src/hooks/subagent-start.ts
@@ -27,4 +27,4 @@ async function main() {
27
27
  export {
28
28
  main
29
29
  };
30
- //# sourceMappingURL=subagent-start-ZBQ5PJB5.js.map
30
+ //# sourceMappingURL=subagent-start-VJF5YKVX.js.map
@@ -1,19 +1,19 @@
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-UW6DGPSV.js";
5
5
  import "./chunk-V7XG6V6C.js";
6
- import "./chunk-PFWIPRF6.js";
6
+ import "./chunk-MS6FDV45.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-CYBC2HZ3.js";
9
+ import "./chunk-2CKDAFSX.js";
10
+ import "./chunk-UVKQ62II.js";
11
11
  import "./chunk-LPUQPDC2.js";
12
- import "./chunk-CKJAWZQE.js";
12
+ import "./chunk-W4VHC2ES.js";
13
13
  import "./chunk-E7NUADTQ.js";
14
- import "./chunk-D7TYRPRM.js";
15
- import "./chunk-E4VLWIJC.js";
16
- import "./chunk-GDY63YAW.js";
14
+ import "./chunk-6LQIMRTC.js";
15
+ import "./chunk-ODXLRR4U.js";
16
+ import "./chunk-U6PF3YII.js";
17
17
  import "./chunk-PZUWP5VK.js";
18
18
 
19
19
  // src/hooks/subagent-stop.ts
@@ -29,4 +29,4 @@ async function main() {
29
29
  export {
30
30
  main
31
31
  };
32
- //# sourceMappingURL=subagent-stop-N2TDQU2D.js.map
32
+ //# sourceMappingURL=subagent-stop-UW6HMICY.js.map
@@ -1,19 +1,19 @@
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-UW6DGPSV.js";
5
5
  import "./chunk-V7XG6V6C.js";
6
- import "./chunk-PFWIPRF6.js";
6
+ import "./chunk-MS6FDV45.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-CYBC2HZ3.js";
9
+ import "./chunk-2CKDAFSX.js";
10
+ import "./chunk-UVKQ62II.js";
11
11
  import "./chunk-LPUQPDC2.js";
12
- import "./chunk-CKJAWZQE.js";
12
+ import "./chunk-W4VHC2ES.js";
13
13
  import "./chunk-E7NUADTQ.js";
14
- import "./chunk-D7TYRPRM.js";
15
- import "./chunk-E4VLWIJC.js";
16
- import "./chunk-GDY63YAW.js";
14
+ import "./chunk-6LQIMRTC.js";
15
+ import "./chunk-ODXLRR4U.js";
16
+ import "./chunk-U6PF3YII.js";
17
17
  import "./chunk-PZUWP5VK.js";
18
18
 
19
19
  // src/hooks/task-completed.ts
@@ -28,4 +28,4 @@ async function main() {
28
28
  export {
29
29
  main
30
30
  };
31
- //# sourceMappingURL=task-completed-BDLMRSBB.js.map
31
+ //# sourceMappingURL=task-completed-U4Q3XXLX.js.map
@@ -1,52 +1,58 @@
1
1
  import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
2
  import {
3
+ extractJsonArray,
4
+ parseD1Id,
5
+ parseKvNamespaceId,
6
+ parseWorkerUrl,
7
+ readJsonConfig,
3
8
  readSecrets,
9
+ resolveHomeConfigPath,
10
+ runWrangler,
11
+ stageDeploymentDir,
12
+ writeJsonConfig,
4
13
  writeSecret
5
- } from "./chunk-RJMXDUMA.js";
14
+ } from "./chunk-EM63ZFKA.js";
15
+ import {
16
+ SCHEMA_VERSION
17
+ } from "./chunk-2LN2BBKA.js";
6
18
  import {
7
19
  loadConfig,
8
20
  updateTeamConfig
9
- } from "./chunk-2V7HR7HB.js";
10
- import {
11
- getPluginVersion
12
- } from "./chunk-EO2RQW4S.js";
13
- import {
14
- resolvePackageRoot
15
- } from "./chunk-FABWUX5G.js";
16
- import "./chunk-LPUQPDC2.js";
21
+ } from "./chunk-MDEUXYJG.js";
17
22
  import {
18
23
  TEAM_API_KEY_SECRET,
19
24
  WRANGLER_COMMAND_TIMEOUT_MS
20
- } from "./chunk-CKJAWZQE.js";
25
+ } from "./chunk-W4VHC2ES.js";
21
26
  import "./chunk-E7NUADTQ.js";
22
- import "./chunk-D7TYRPRM.js";
23
- import "./chunk-E4VLWIJC.js";
24
- import "./chunk-GDY63YAW.js";
27
+ import "./chunk-6LQIMRTC.js";
28
+ import "./chunk-ODXLRR4U.js";
29
+ import "./chunk-U6PF3YII.js";
25
30
  import "./chunk-PZUWP5VK.js";
26
31
 
27
- // src/cli/team.ts
28
- import { execFileSync } from "child_process";
32
+ // ../myco-team/src/cli.ts
29
33
  import crypto from "crypto";
30
34
  import fs from "fs";
31
35
  import path from "path";
36
+ import { fileURLToPath } from "url";
32
37
  var API_KEY_BYTES = 32;
33
38
  var VECTORIZE_DIMENSIONS = "1024";
34
39
  var VECTORIZE_METRIC = "cosine";
35
40
  var TEAM_RESOURCE_PREFIX = "myco-team";
36
41
  var PROJECT_HASH_LENGTH = 8;
37
- var WORKER_SOURCE_DIR = "src/worker";
42
+ var WORKER_SOURCE_DIR = "worker";
38
43
  var TEAM_WORKER_DIR = ".team-worker";
39
- var D1_ID_JSON_REGEX = /"database_id"\s*:\s*"([0-9a-f-]{36})"/i;
40
- var D1_ID_TEXT_REGEX = /id:\s*([0-9a-f-]{36})/i;
41
- var WORKER_URL_REGEX = /(https:\/\/[^\s]+\.workers\.dev)/;
44
+ var TEAM_CONFIG_DIR = ".myco-team";
45
+ var TEAM_CONFIG_FILE = "config.json";
46
+ var TEAM_CONFIG_VERSION = 1;
42
47
  var TOML_NAME_REGEX = /^name\s*=\s*"[^"]*"/m;
43
48
  var TOML_D1_PLACEHOLDER_REGEX = /<YOUR_D1_DATABASE_ID>/g;
44
49
  var TOML_DB_NAME_REGEX = /database_name\s*=\s*"[^"]*"/g;
45
50
  var TOML_INDEX_NAME_REGEX = /index_name\s*=\s*"[^"]*"/g;
51
+ var TOML_TEAM_PACKAGE_VERSION_REGEX = /MYCO_TEAM_PACKAGE_VERSION\s*=\s*"[^"]*"/g;
52
+ var TOML_MYCO_SCHEMA_VERSION_REGEX = /MYCO_SCHEMA_VERSION\s*=\s*"[^"]*"/g;
46
53
  var TOML_DB_ID_REGEX = /database_id\s*=\s*"([^"]+)"/;
47
54
  var TOML_KV_PLACEHOLDER_REGEX = /<YOUR_KV_NAMESPACE_ID>/g;
48
55
  var TOML_KV_ID_REGEX = /\[\[kv_namespaces\]\][\s\S]*?id\s*=\s*"([0-9a-f]+)"/;
49
- var KV_ID_REGEX = /"id":\s*"([0-9a-f]+)"/i;
50
56
  function projectHash(vaultDir) {
51
57
  const hash = crypto.createHash("sha256").update(vaultDir).digest("hex");
52
58
  return hash.slice(0, PROJECT_HASH_LENGTH);
@@ -54,21 +60,38 @@ function projectHash(vaultDir) {
54
60
  function resourceName(vaultDir) {
55
61
  return `${TEAM_RESOURCE_PREFIX}-${projectHash(vaultDir)}`;
56
62
  }
57
- function wrangler(args, options) {
58
- try {
59
- return execFileSync("wrangler", args, {
60
- encoding: "utf-8",
61
- timeout: WRANGLER_COMMAND_TIMEOUT_MS,
62
- stdio: ["pipe", "pipe", "pipe"],
63
- ...options
64
- });
65
- } catch (err) {
66
- const execErr = err;
67
- const stderr = execErr.stderr?.toString() ?? "";
68
- const stdout = execErr.stdout?.toString() ?? "";
69
- const detail = [stderr, stdout].filter(Boolean).join("\n").trim();
70
- throw new Error(detail || execErr.message);
63
+ function resolvePackageRoot() {
64
+ const override = process.env.MYCO_TEAM_PACKAGE_ROOT?.trim();
65
+ if (override) return override;
66
+ return path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..");
67
+ }
68
+ function getTeamPackageVersion() {
69
+ const packageRoot = resolvePackageRoot();
70
+ const candidatePaths = [
71
+ path.join(packageRoot, "package.json"),
72
+ path.join(path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".."), "package.json")
73
+ ];
74
+ for (const candidatePath of candidatePaths) {
75
+ if (!fs.existsSync(candidatePath)) continue;
76
+ const packageJson = JSON.parse(fs.readFileSync(candidatePath, "utf-8"));
77
+ if (packageJson.version) return packageJson.version;
71
78
  }
79
+ return "0.1.0";
80
+ }
81
+ function getMycoSchemaVersion() {
82
+ return String(SCHEMA_VERSION);
83
+ }
84
+ function resolveLocalConfigPath() {
85
+ return resolveHomeConfigPath(TEAM_CONFIG_DIR, TEAM_CONFIG_FILE);
86
+ }
87
+ function readLocalConfig() {
88
+ return readJsonConfig(resolveLocalConfigPath());
89
+ }
90
+ function writeLocalConfig(config) {
91
+ writeJsonConfig(resolveLocalConfigPath(), config);
92
+ }
93
+ function wrangler(args, options) {
94
+ return runWrangler(args, { cwd: options?.cwd, timeoutMs: WRANGLER_COMMAND_TIMEOUT_MS });
72
95
  }
73
96
  function locateWorkerSource() {
74
97
  const root = resolvePackageRoot();
@@ -76,32 +99,30 @@ function locateWorkerSource() {
76
99
  if (fs.existsSync(distPath)) return distPath;
77
100
  const srcPath = path.join(root, WORKER_SOURCE_DIR);
78
101
  if (fs.existsSync(srcPath)) return srcPath;
79
- throw new Error(`Cannot find ${WORKER_SOURCE_DIR} \u2014 are you running from the myco package?`);
102
+ throw new Error(`Cannot find ${WORKER_SOURCE_DIR} \u2014 are you running from the myco-team package?`);
80
103
  }
81
104
  function prepareDeployDir(vaultDir, d1Id, kvId) {
82
105
  const srcDir = locateWorkerSource();
83
106
  const deployDir = path.join(vaultDir, TEAM_WORKER_DIR);
84
- fs.cpSync(srcDir, deployDir, { recursive: true });
85
- const tomlPath = path.join(deployDir, "wrangler.toml");
86
- let toml = fs.readFileSync(tomlPath, "utf-8");
87
107
  const name = resourceName(vaultDir);
88
- toml = toml.replace(TOML_NAME_REGEX, `name = "${name}"`);
89
- toml = toml.replace(TOML_D1_PLACEHOLDER_REGEX, d1Id);
90
- toml = toml.replace(TOML_DB_NAME_REGEX, `database_name = "${name}"`);
91
- toml = toml.replace(TOML_INDEX_NAME_REGEX, `index_name = "${name}-vectors"`);
92
- toml = toml.replace(TOML_KV_PLACEHOLDER_REGEX, kvId);
93
- fs.writeFileSync(tomlPath, toml, "utf-8");
94
- installDeploymentDeps(deployDir);
95
- return deployDir;
96
- }
97
- function extractJsonArray(output) {
98
- const start = output.indexOf("[");
99
- const end = output.lastIndexOf("]");
100
- if (start === -1 || end === -1 || end < start) {
101
- throw new Error(`No JSON array found in output:
102
- ${output}`);
103
- }
104
- return JSON.parse(output.slice(start, end + 1));
108
+ return stageDeploymentDir({
109
+ sourceDir: srcDir,
110
+ deployDir,
111
+ reset: true,
112
+ textPatches: [{
113
+ filePath: "wrangler.toml",
114
+ transforms: [
115
+ (toml) => toml.replace(TOML_NAME_REGEX, `name = "${name}"`),
116
+ (toml) => toml.replace(TOML_D1_PLACEHOLDER_REGEX, d1Id),
117
+ (toml) => toml.replace(TOML_DB_NAME_REGEX, `database_name = "${name}"`),
118
+ (toml) => toml.replace(TOML_INDEX_NAME_REGEX, `index_name = "${name}-vectors"`),
119
+ (toml) => toml.replace(TOML_KV_PLACEHOLDER_REGEX, kvId),
120
+ (toml) => toml.replace(TOML_TEAM_PACKAGE_VERSION_REGEX, `MYCO_TEAM_PACKAGE_VERSION = "${getTeamPackageVersion()}"`),
121
+ (toml) => toml.replace(TOML_MYCO_SCHEMA_VERSION_REGEX, `MYCO_SCHEMA_VERSION = "${getMycoSchemaVersion()}"`)
122
+ ]
123
+ }],
124
+ installDepsTimeoutMs: WRANGLER_COMMAND_TIMEOUT_MS * 3
125
+ });
105
126
  }
106
127
  function ensureKvNamespace(name) {
107
128
  const kvName = `${name}-secrets`;
@@ -116,9 +137,7 @@ function ensureKvNamespace(name) {
116
137
  };
117
138
  try {
118
139
  const output = wrangler(["kv", "namespace", "create", kvName]);
119
- const match = output.match(KV_ID_REGEX);
120
- if (match) return match[1];
121
- return lookupExisting();
140
+ return parseKvNamespaceId(output);
122
141
  } catch (err) {
123
142
  const errMsg = err.message;
124
143
  if (errMsg.includes("already exists") || errMsg.includes("duplicate") || errMsg.includes("same title")) {
@@ -127,29 +146,22 @@ function ensureKvNamespace(name) {
127
146
  throw err;
128
147
  }
129
148
  }
130
- function installDeploymentDeps(deployDir) {
131
- const packageJsonPath = path.join(deployDir, "package.json");
132
- if (!fs.existsSync(packageJsonPath)) return;
133
- execFileSync("npm", ["install", "--silent", "--no-audit", "--no-fund"], {
134
- encoding: "utf-8",
135
- timeout: WRANGLER_COMMAND_TIMEOUT_MS * 3,
136
- stdio: ["pipe", "pipe", "pipe"],
137
- cwd: deployDir
149
+ async function rotateMcpTokenForWorker(workerUrl, apiKey) {
150
+ const response = await fetch(`${workerUrl}/mcp/rotate`, {
151
+ method: "POST",
152
+ headers: {
153
+ Authorization: `Bearer ${apiKey}`,
154
+ "Content-Type": "application/json"
155
+ }
138
156
  });
139
- }
140
- function parseD1Id(output) {
141
- const jsonMatch = output.match(D1_ID_JSON_REGEX);
142
- if (jsonMatch) return jsonMatch[1];
143
- const textMatch = output.match(D1_ID_TEXT_REGEX);
144
- if (textMatch) return textMatch[1];
145
- throw new Error(`Could not parse D1 database ID from wrangler output:
146
- ${output}`);
147
- }
148
- function parseWorkerUrl(output) {
149
- const match = output.match(WORKER_URL_REGEX);
150
- if (!match) throw new Error(`Could not parse worker URL from deploy output:
151
- ${output}`);
152
- return match[1];
157
+ if (!response.ok) {
158
+ throw new Error(`MCP token rotation failed: ${response.status} ${await response.text()}`);
159
+ }
160
+ const body = await response.json();
161
+ if (!body.token) {
162
+ throw new Error("MCP token rotation response did not include a token");
163
+ }
164
+ return body.token;
153
165
  }
154
166
  async function teamInit(vaultDir) {
155
167
  console.log("Provisioning team sync infrastructure...\n");
@@ -224,12 +236,10 @@ async function teamInit(vaultDir) {
224
236
  const deployDir = prepareDeployDir(vaultDir, d1Id, kvId);
225
237
  console.log("Setting API key secret...");
226
238
  try {
227
- execFileSync("wrangler", ["secret", "put", TEAM_API_KEY_SECRET, "--name", name], {
228
- encoding: "utf-8",
229
- timeout: WRANGLER_COMMAND_TIMEOUT_MS,
239
+ runWrangler(["secret", "put", TEAM_API_KEY_SECRET, "--name", name], {
240
+ cwd: deployDir,
230
241
  input: apiKey,
231
- stdio: ["pipe", "pipe", "pipe"],
232
- cwd: deployDir
242
+ timeoutMs: WRANGLER_COMMAND_TIMEOUT_MS
233
243
  });
234
244
  console.log("Secret set\n");
235
245
  } catch (err) {
@@ -266,15 +276,34 @@ async function teamInit(vaultDir) {
266
276
  } catch {
267
277
  console.log("Warning: could not seed team config (non-fatal)\n");
268
278
  }
279
+ let mcpToken = null;
280
+ try {
281
+ mcpToken = await rotateMcpTokenForWorker(workerUrl, apiKey);
282
+ } catch {
283
+ }
269
284
  updateTeamConfig(vaultDir, {
270
285
  enabled: true,
271
286
  worker_url: workerUrl,
272
- deployed_worker_version: getPluginVersion()
287
+ deployed_worker_version: getTeamPackageVersion()
273
288
  });
274
289
  writeSecret(vaultDir, TEAM_API_KEY_SECRET, apiKey);
290
+ writeLocalConfig({
291
+ worker_name: name,
292
+ worker_url: workerUrl,
293
+ api_key: apiKey,
294
+ mcp_token: mcpToken,
295
+ package_version: getTeamPackageVersion(),
296
+ vault_dir: vaultDir,
297
+ created_at: (/* @__PURE__ */ new Date()).toISOString(),
298
+ last_upgraded: (/* @__PURE__ */ new Date()).toISOString(),
299
+ config_version: TEAM_CONFIG_VERSION
300
+ });
275
301
  console.log("Team sync configured!\n");
276
302
  console.log(` URL: ${workerUrl}`);
277
303
  console.log(` API Key: ${apiKey.slice(0, 8)}...${apiKey.slice(-4)}`);
304
+ if (mcpToken) {
305
+ console.log(` MCP: ${mcpToken.slice(0, 8)}...${mcpToken.slice(-4)}`);
306
+ }
278
307
  console.log("\nShare the URL and API key with teammates so they can connect.");
279
308
  }
280
309
  function upgradeWorker(vaultDir) {
@@ -308,17 +337,24 @@ function upgradeWorker(vaultDir) {
308
337
  return { success: false, error: `Failed to provision KV namespace: ${err.message}` };
309
338
  }
310
339
  }
311
- const srcDir = locateWorkerSource();
312
- fs.cpSync(srcDir, deployDir, { recursive: true });
313
- let toml = fs.readFileSync(path.join(deployDir, "wrangler.toml"), "utf-8");
314
- toml = toml.replace(TOML_NAME_REGEX, `name = "${workerName}"`);
315
- toml = toml.replace(TOML_D1_PLACEHOLDER_REGEX, d1Id);
316
- toml = toml.replace(TOML_DB_NAME_REGEX, `database_name = "${dbNameMatch?.[1] ?? workerName}"`);
317
- toml = toml.replace(TOML_INDEX_NAME_REGEX, `index_name = "${indexNameMatch?.[1] ?? `${workerName}-vectors`}"`);
318
- toml = toml.replace(TOML_KV_PLACEHOLDER_REGEX, kvId);
319
- fs.writeFileSync(path.join(deployDir, "wrangler.toml"), toml, "utf-8");
320
340
  try {
321
- installDeploymentDeps(deployDir);
341
+ stageDeploymentDir({
342
+ sourceDir: locateWorkerSource(),
343
+ deployDir,
344
+ textPatches: [{
345
+ filePath: "wrangler.toml",
346
+ transforms: [
347
+ (toml) => toml.replace(TOML_NAME_REGEX, `name = "${workerName}"`),
348
+ (toml) => toml.replace(TOML_D1_PLACEHOLDER_REGEX, d1Id),
349
+ (toml) => toml.replace(TOML_DB_NAME_REGEX, `database_name = "${dbNameMatch?.[1] ?? workerName}"`),
350
+ (toml) => toml.replace(TOML_INDEX_NAME_REGEX, `index_name = "${indexNameMatch?.[1] ?? `${workerName}-vectors`}"`),
351
+ (toml) => toml.replace(TOML_KV_PLACEHOLDER_REGEX, kvId),
352
+ (toml) => toml.replace(TOML_TEAM_PACKAGE_VERSION_REGEX, `MYCO_TEAM_PACKAGE_VERSION = "${getTeamPackageVersion()}"`),
353
+ (toml) => toml.replace(TOML_MYCO_SCHEMA_VERSION_REGEX, `MYCO_SCHEMA_VERSION = "${getMycoSchemaVersion()}"`)
354
+ ]
355
+ }],
356
+ installDepsTimeoutMs: WRANGLER_COMMAND_TIMEOUT_MS * 3
357
+ });
322
358
  } catch (err) {
323
359
  return { success: false, error: `Failed to install worker dependencies: ${err.message}` };
324
360
  }
@@ -326,12 +362,10 @@ function upgradeWorker(vaultDir) {
326
362
  const apiKey = secrets[TEAM_API_KEY_SECRET];
327
363
  if (apiKey) {
328
364
  try {
329
- execFileSync("wrangler", ["secret", "put", TEAM_API_KEY_SECRET, "--name", workerName], {
330
- encoding: "utf-8",
331
- timeout: WRANGLER_COMMAND_TIMEOUT_MS,
365
+ runWrangler(["secret", "put", TEAM_API_KEY_SECRET, "--name", workerName], {
366
+ cwd: deployDir,
332
367
  input: apiKey,
333
- stdio: ["pipe", "pipe", "pipe"],
334
- cwd: deployDir
368
+ timeoutMs: WRANGLER_COMMAND_TIMEOUT_MS
335
369
  });
336
370
  } catch {
337
371
  }
@@ -339,11 +373,22 @@ function upgradeWorker(vaultDir) {
339
373
  try {
340
374
  const deployOutput = wrangler(["deploy"], { cwd: deployDir });
341
375
  const workerUrl = parseWorkerUrl(deployOutput);
342
- const version = getPluginVersion();
376
+ const version = getTeamPackageVersion();
343
377
  updateTeamConfig(vaultDir, {
344
378
  worker_url: workerUrl,
345
379
  deployed_worker_version: version
346
380
  });
381
+ const localConfig = readLocalConfig();
382
+ if (localConfig) {
383
+ writeLocalConfig({
384
+ ...localConfig,
385
+ worker_name: workerName,
386
+ worker_url: workerUrl,
387
+ package_version: version,
388
+ vault_dir: vaultDir,
389
+ last_upgraded: (/* @__PURE__ */ new Date()).toISOString()
390
+ });
391
+ }
347
392
  return { success: true, worker_url: workerUrl, version };
348
393
  } catch (err) {
349
394
  return { success: false, error: `Failed to deploy worker: ${err.message}` };
@@ -365,4 +410,4 @@ export {
365
410
  teamUpgrade,
366
411
  upgradeWorker
367
412
  };
368
- //# sourceMappingURL=team-2ZFGTSIN.js.map
413
+ //# sourceMappingURL=team-N6TXS2PF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../myco-team/src/cli.ts"],"sourcesContent":["/**\n * CLI team commands — provision and manage Cloudflare team sync infrastructure.\n *\n * `myco team init` — Provision D1 database, Vectorize index, deploy worker.\n * `myco team upgrade` — Redeploy worker with updated source.\n */\n\nimport crypto from 'node:crypto';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { CONFIG_FILENAME, loadConfig, updateTeamConfig } from '@myco/config/loader.js';\nimport { writeSecret, readSecrets } from '@myco/config/secrets.js';\nimport { WRANGLER_COMMAND_TIMEOUT_MS, TEAM_API_KEY_SECRET } from '@myco/constants.js';\nimport { SCHEMA_VERSION } from '@myco/db/schema.js';\nimport {\n extractJsonArray,\n installDeploymentDeps,\n maskSecret,\n parseD1Id,\n parseKvNamespaceId,\n parseWorkerUrl,\n readJsonConfig,\n resolveHomeConfigPath,\n runWrangler,\n stageDeploymentDir,\n writeJsonConfig,\n} from '@myco-deploy/index.js';\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\n/** Number of random bytes for API key generation. */\nconst API_KEY_BYTES = 32;\n\n/** Vectorize index dimensions (must match the embedding model). */\nconst VECTORIZE_DIMENSIONS = '1024';\n\n/** Vectorize distance metric. */\nconst VECTORIZE_METRIC = 'cosine';\n\n/** Prefix for team resource names. */\nconst TEAM_RESOURCE_PREFIX = 'myco-team';\n\n/** Length of the project hash suffix for unique resource naming. */\nconst PROJECT_HASH_LENGTH = 8;\n\n\n/** Source directory for worker files (relative to package root). */\nconst WORKER_SOURCE_DIR = 'worker';\n\n/** Deployment directory name within the vault. */\nconst TEAM_WORKER_DIR = '.team-worker';\nconst TEAM_CONFIG_DIR = '.myco-team';\nconst TEAM_CONFIG_FILE = 'config.json';\nconst TEAM_CONFIG_VERSION = 1;\nconst TEAM_MCP_ROTATION_RETRY_ATTEMPTS = 10;\nconst TEAM_MCP_ROTATION_RETRY_DELAY_MS = 1500;\n\n/** Regex to match wrangler.toml name field. */\nconst TOML_NAME_REGEX = /^name\\s*=\\s*\"[^\"]*\"/m;\n\n/** Regex to match wrangler.toml D1 placeholder. */\nconst TOML_D1_PLACEHOLDER_REGEX = /<YOUR_D1_DATABASE_ID>/g;\n\n/** Regex to match wrangler.toml database_name field. */\nconst TOML_DB_NAME_REGEX = /database_name\\s*=\\s*\"[^\"]*\"/g;\n\n/** Regex to match wrangler.toml index_name field. */\nconst TOML_INDEX_NAME_REGEX = /index_name\\s*=\\s*\"[^\"]*\"/g;\n\n/** Regex to match wrangler.toml team package version placeholder. */\nconst TOML_TEAM_PACKAGE_VERSION_REGEX = /MYCO_TEAM_PACKAGE_VERSION\\s*=\\s*\"[^\"]*\"/g;\n\n/** Regex to match wrangler.toml Myco schema version placeholder. */\nconst TOML_MYCO_SCHEMA_VERSION_REGEX = /MYCO_SCHEMA_VERSION\\s*=\\s*\"[^\"]*\"/g;\n\n/** Regex to match database_id in existing wrangler.toml. */\nconst TOML_DB_ID_REGEX = /database_id\\s*=\\s*\"([^\"]+)\"/;\n\n/** Regex to match wrangler.toml KV namespace placeholder. */\nconst TOML_KV_PLACEHOLDER_REGEX = /<YOUR_KV_NAMESPACE_ID>/g;\n\n/** Regex to extract the KV namespace ID from an existing wrangler.toml. */\nconst TOML_KV_ID_REGEX = /\\[\\[kv_namespaces\\]\\][\\s\\S]*?id\\s*=\\s*\"([0-9a-f]+)\"/;\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Generate a project hash from vault dir for unique resource naming. */\nfunction projectHash(vaultDir: string): string {\n const hash = crypto.createHash('sha256').update(vaultDir).digest('hex');\n return hash.slice(0, PROJECT_HASH_LENGTH);\n}\n\n/** Build the unique resource name for this project's team infrastructure. */\nfunction resourceName(vaultDir: string): string {\n return `${TEAM_RESOURCE_PREFIX}-${projectHash(vaultDir)}`;\n}\n\nfunction resolvePackageRoot(): string {\n const override = process.env.MYCO_TEAM_PACKAGE_ROOT?.trim();\n if (override) return override;\n return path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');\n}\n\nfunction getTeamPackageVersion(): string {\n const packageRoot = resolvePackageRoot();\n const candidatePaths = [\n path.join(packageRoot, 'package.json'),\n path.join(path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..'), 'package.json'),\n ];\n\n for (const candidatePath of candidatePaths) {\n if (!fs.existsSync(candidatePath)) continue;\n const packageJson = JSON.parse(fs.readFileSync(candidatePath, 'utf-8')) as { version?: string };\n if (packageJson.version) return packageJson.version;\n }\n\n return '0.1.0';\n}\n\nfunction getMycoSchemaVersion(): string {\n return String(SCHEMA_VERSION);\n}\n\nexport interface TeamLocalConfig {\n worker_name: string;\n worker_url: string;\n api_key: string;\n mcp_token: string | null;\n package_version: string;\n vault_dir?: string;\n created_at: string;\n last_upgraded: string;\n config_version: number;\n}\n\nfunction resolveLocalConfigPath(): string {\n return resolveHomeConfigPath(TEAM_CONFIG_DIR, TEAM_CONFIG_FILE);\n}\n\nfunction readLocalConfig(): TeamLocalConfig | null {\n return readJsonConfig<TeamLocalConfig>(resolveLocalConfigPath());\n}\n\nfunction writeLocalConfig(config: TeamLocalConfig): void {\n writeJsonConfig(resolveLocalConfigPath(), config);\n}\n\nfunction requireLocalConfig(): TeamLocalConfig {\n const config = readLocalConfig();\n if (config) return config;\n\n console.error(`No local myco-team config found at ${resolveLocalConfigPath()}`);\n process.exit(1);\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nasync function rotateMcpTokenWithRetry(workerUrl: string, apiKey: string): Promise<string> {\n let lastError: Error | null = null;\n\n for (let attempt = 1; attempt <= TEAM_MCP_ROTATION_RETRY_ATTEMPTS; attempt += 1) {\n try {\n return await rotateMcpTokenForWorker(workerUrl, apiKey);\n } catch (error) {\n lastError = error as Error;\n const isRetryable =\n lastError.message.includes('401') &&\n lastError.message.includes('Invalid API key') &&\n attempt < TEAM_MCP_ROTATION_RETRY_ATTEMPTS;\n if (!isRetryable) {\n throw lastError;\n }\n await delay(TEAM_MCP_ROTATION_RETRY_DELAY_MS);\n }\n }\n\n throw lastError ?? new Error('MCP token rotation failed');\n}\n\nfunction resolveVaultDirForConfig(config: TeamLocalConfig): string | null {\n const configuredVaultDir = config.vault_dir?.trim();\n if (configuredVaultDir && fs.existsSync(path.join(configuredVaultDir, CONFIG_FILENAME))) {\n return configuredVaultDir;\n }\n\n let currentDir = process.cwd();\n while (true) {\n const candidateDirs = path.basename(currentDir) === '.myco'\n ? [currentDir]\n : [path.join(currentDir, '.myco')];\n\n for (const candidateDir of candidateDirs) {\n const configPath = path.join(candidateDir, CONFIG_FILENAME);\n if (!fs.existsSync(configPath)) continue;\n try {\n const candidateConfig = loadConfig(candidateDir);\n if (candidateConfig.team.worker_url === config.worker_url) {\n return candidateDir;\n }\n } catch {\n // Ignore unrelated or invalid config candidates while walking upward.\n }\n }\n\n const parentDir = path.dirname(currentDir);\n if (parentDir === currentDir) break;\n currentDir = parentDir;\n }\n\n return null;\n}\n\n/** Run a wrangler command and return stdout. Throws on failure, surfacing stderr. */\nfunction wrangler(args: string[], options?: { cwd?: string }): string {\n return runWrangler(args, { cwd: options?.cwd, timeoutMs: WRANGLER_COMMAND_TIMEOUT_MS });\n}\n\n/** Find the worker source directory. Checks dist layout first (installed), then source layout (dev). */\nfunction locateWorkerSource(): string {\n const root = resolvePackageRoot();\n const distPath = path.join(root, 'dist', WORKER_SOURCE_DIR);\n if (fs.existsSync(distPath)) return distPath;\n const srcPath = path.join(root, WORKER_SOURCE_DIR);\n if (fs.existsSync(srcPath)) return srcPath;\n throw new Error(`Cannot find ${WORKER_SOURCE_DIR} — are you running from the myco-team package?`);\n}\n\n/**\n * Copy worker source to the vault deployment directory and patch wrangler.toml\n * with actual D1 database ID and resource names.\n */\nfunction prepareDeployDir(vaultDir: string, d1Id: string, kvId: string): string {\n const srcDir = locateWorkerSource();\n const deployDir = path.join(vaultDir, TEAM_WORKER_DIR);\n const name = resourceName(vaultDir);\n return stageDeploymentDir({\n sourceDir: srcDir,\n deployDir,\n reset: true,\n textPatches: [{\n filePath: 'wrangler.toml',\n transforms: [\n (toml) => toml.replace(TOML_NAME_REGEX, `name = \"${name}\"`),\n (toml) => toml.replace(TOML_D1_PLACEHOLDER_REGEX, d1Id),\n (toml) => toml.replace(TOML_DB_NAME_REGEX, `database_name = \"${name}\"`),\n (toml) => toml.replace(TOML_INDEX_NAME_REGEX, `index_name = \"${name}-vectors\"`),\n (toml) => toml.replace(TOML_KV_PLACEHOLDER_REGEX, kvId),\n (toml) => toml.replace(TOML_TEAM_PACKAGE_VERSION_REGEX, `MYCO_TEAM_PACKAGE_VERSION = \"${getTeamPackageVersion()}\"`),\n (toml) => toml.replace(TOML_MYCO_SCHEMA_VERSION_REGEX, `MYCO_SCHEMA_VERSION = \"${getMycoSchemaVersion()}\"`),\n ],\n }],\n installDepsTimeoutMs: WRANGLER_COMMAND_TIMEOUT_MS * 3,\n });\n}\n\n/** Ensure a KV namespace exists for this project. Returns the namespace ID. */\nfunction ensureKvNamespace(name: string): string {\n const kvName = `${name}-secrets`;\n const lookupExisting = (): string => {\n const listOutput = wrangler(['kv', 'namespace', 'list']);\n const namespaces = extractJsonArray(listOutput) as Array<{ id: string; title: string }>;\n // Wrangler sometimes rewrites hyphens to underscores in titles\n const normalize = (s: string) => s.replace(/[-_]/g, '');\n const target = normalize(kvName);\n const existing = namespaces.find((ns) => normalize(ns.title) === target || normalize(ns.title).endsWith(target));\n if (!existing) throw new Error(`KV namespace \"${kvName}\" not found in list of ${namespaces.length} namespaces`);\n return existing.id;\n };\n\n try {\n const output = wrangler(['kv', 'namespace', 'create', kvName]);\n return parseKvNamespaceId(output);\n // Created successfully but we couldn't parse — fall back to list lookup\n } catch (err) {\n const errMsg = (err as Error).message;\n if (errMsg.includes('already exists') || errMsg.includes('duplicate') || errMsg.includes('same title')) {\n return lookupExisting();\n }\n throw err;\n }\n}\n\nasync function rotateMcpTokenForWorker(workerUrl: string, apiKey: string): Promise<string> {\n const response = await fetch(`${workerUrl}/mcp/rotate`, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${apiKey}`,\n 'Content-Type': 'application/json',\n },\n });\n if (!response.ok) {\n throw new Error(`MCP token rotation failed: ${response.status} ${await response.text()}`);\n }\n const body = await response.json() as { token?: string };\n if (!body.token) {\n throw new Error('MCP token rotation response did not include a token');\n }\n return body.token;\n}\n\n// ---------------------------------------------------------------------------\n// Commands\n// ---------------------------------------------------------------------------\n\nexport async function teamInit(vaultDir: string): Promise<void> {\n console.log('Provisioning team sync infrastructure...\\n');\n\n // 1. Check for wrangler\n try {\n const version = wrangler(['--version']).trim();\n console.log(`wrangler: ${version}`);\n } catch {\n console.error('Error: wrangler CLI not found. Install it with: npm install -g wrangler');\n process.exit(1);\n }\n\n // 2. Check auth\n try {\n wrangler(['whoami']);\n console.log('Cloudflare auth: OK\\n');\n } catch {\n console.error('Error: Not authenticated with Cloudflare. Run: wrangler login');\n process.exit(1);\n }\n\n const name = resourceName(vaultDir);\n console.log(`Resource name: ${name}\\n`);\n\n // 3. Create D1 database (or reuse existing)\n console.log('Creating D1 database...');\n let d1Id: string;\n try {\n const d1Output = wrangler(['d1', 'create', name]);\n d1Id = parseD1Id(d1Output);\n console.log(`D1 database created: ${d1Id}\\n`);\n } catch (err) {\n const errMsg = (err as Error).message;\n if (errMsg.includes('already exists')) {\n console.log('D1 database already exists, looking up ID...');\n const listOutput = wrangler(['d1', 'list', '--json']);\n const databases = JSON.parse(listOutput) as Array<{ name: string; uuid: string }>;\n const existing = databases.find((db) => db.name === name);\n if (!existing) {\n console.error(`D1 database \"${name}\" reported as existing but not found in list`);\n process.exit(1);\n }\n d1Id = existing.uuid;\n console.log(`Reusing D1 database: ${d1Id}\\n`);\n } else {\n console.error(`Failed to create D1 database: ${errMsg}`);\n process.exit(1);\n }\n }\n\n // 4. Create Vectorize index (or reuse existing)\n console.log('Creating Vectorize index...');\n try {\n wrangler(['vectorize', 'create', `${name}-vectors`, '--dimensions', VECTORIZE_DIMENSIONS, '--metric', VECTORIZE_METRIC]);\n console.log('Vectorize index created\\n');\n } catch (err) {\n const errMsg = (err as Error).message;\n if (errMsg.includes('already exists') || errMsg.includes('duplicate_name')) {\n console.log('Vectorize index already exists, reusing\\n');\n } else {\n console.error(`Failed to create Vectorize index: ${errMsg}`);\n process.exit(1);\n }\n }\n\n // 5. Create KV namespace for runtime secrets (MCP tokens)\n console.log('Creating KV namespace for secrets...');\n let kvId: string;\n try {\n kvId = ensureKvNamespace(name);\n console.log(`KV namespace ready: ${kvId}\\n`);\n } catch (err) {\n console.error(`Failed to create KV namespace: ${(err as Error).message}`);\n process.exit(1);\n }\n\n // 6. Generate API key\n const apiKey = crypto.randomBytes(API_KEY_BYTES).toString('hex');\n\n // 7. Prepare deployment directory\n console.log('Preparing worker deployment...');\n const deployDir = prepareDeployDir(vaultDir, d1Id, kvId);\n\n // 7. Set API key secret via wrangler\n console.log('Setting API key secret...');\n try {\n runWrangler(['secret', 'put', TEAM_API_KEY_SECRET, '--name', name], {\n cwd: deployDir,\n input: apiKey,\n timeoutMs: WRANGLER_COMMAND_TIMEOUT_MS,\n });\n console.log('Secret set\\n');\n } catch (err) {\n console.error(`Failed to set API key secret: ${(err as Error).message}`);\n process.exit(1);\n }\n\n // 8. Deploy worker\n console.log('Deploying worker...');\n let workerUrl: string;\n try {\n const deployOutput = wrangler(['deploy'], { cwd: deployDir });\n workerUrl = parseWorkerUrl(deployOutput);\n console.log(`Worker deployed: ${workerUrl}\\n`);\n } catch (err) {\n console.error(`Failed to deploy worker: ${(err as Error).message}`);\n process.exit(1);\n }\n\n // 9. Seed team config in the Worker\n console.log('Setting team configuration...');\n try {\n const { getMachineId } = await import('@myco/daemon/machine-id.js');\n const creatorMachineId = await getMachineId(vaultDir);\n await fetch(`${workerUrl}/config`, {\n method: 'PUT',\n headers: { 'Authorization': `Bearer ${apiKey}`, 'Content-Type': 'application/json' },\n body: JSON.stringify({\n team_name: name,\n embedding_model: '@cf/baai/bge-m3',\n embedding_dimensions: '1024',\n created_at: String(Math.floor(Date.now() / 1000)),\n created_by: creatorMachineId,\n }),\n });\n console.log('Team config saved\\n');\n } catch {\n console.log('Warning: could not seed team config (non-fatal)\\n');\n }\n\n let mcpToken: string | null = null;\n try {\n mcpToken = await rotateMcpTokenForWorker(workerUrl, apiKey);\n } catch {\n // Non-fatal. The daemon can also fetch the token later through /connect.\n }\n\n // 10. Save config and API key locally\n updateTeamConfig(vaultDir, {\n enabled: true,\n worker_url: workerUrl,\n deployed_worker_version: getTeamPackageVersion(),\n });\n writeSecret(vaultDir, TEAM_API_KEY_SECRET, apiKey);\n writeLocalConfig({\n worker_name: name,\n worker_url: workerUrl,\n api_key: apiKey,\n mcp_token: mcpToken,\n package_version: getTeamPackageVersion(),\n vault_dir: vaultDir,\n created_at: new Date().toISOString(),\n last_upgraded: new Date().toISOString(),\n config_version: TEAM_CONFIG_VERSION,\n });\n\n console.log('Team sync configured!\\n');\n console.log(` URL: ${workerUrl}`);\n console.log(` API Key: ${apiKey.slice(0, 8)}...${apiKey.slice(-4)}`);\n if (mcpToken) {\n console.log(` MCP: ${mcpToken.slice(0, 8)}...${mcpToken.slice(-4)}`);\n }\n console.log('\\nShare the URL and API key with teammates so they can connect.');\n}\n\n// ---------------------------------------------------------------------------\n// Shared upgrade logic (used by CLI and daemon API)\n// ---------------------------------------------------------------------------\n\nexport interface UpgradeResult {\n success: boolean;\n worker_url?: string;\n version?: string;\n error?: string;\n}\n\n/**\n * Upgrade the team sync worker: re-copy source, patch config, redeploy.\n * Returns a result instead of calling process.exit — safe for both CLI and daemon.\n */\nexport function upgradeWorker(vaultDir: string): UpgradeResult {\n const config = loadConfig(vaultDir);\n if (!config.team.worker_url) {\n return { success: false, error: 'No team sync configured. Run: myco team init' };\n }\n\n const deployDir = path.join(vaultDir, TEAM_WORKER_DIR);\n const tomlPath = path.join(deployDir, 'wrangler.toml');\n\n if (!fs.existsSync(tomlPath)) {\n return { success: false, error: 'No deployment directory found. Run: myco team init' };\n }\n\n // Read ALL existing resource identifiers from current wrangler.toml.\n const existingToml = fs.readFileSync(tomlPath, 'utf-8');\n const d1Match = existingToml.match(TOML_DB_ID_REGEX);\n if (!d1Match || d1Match[1] === '<YOUR_D1_DATABASE_ID>') {\n return { success: false, error: 'Cannot determine D1 database ID from existing deployment. Run: myco team init' };\n }\n const d1Id = d1Match[1];\n\n const nameMatch = existingToml.match(/^name\\s*=\\s*\"([^\"]*)\"/m);\n const dbNameMatch = existingToml.match(/database_name\\s*=\\s*\"([^\"]*)\"/);\n const indexNameMatch = existingToml.match(/index_name\\s*=\\s*\"([^\"]*)\"/);\n const workerName = nameMatch?.[1] ?? resourceName(vaultDir);\n\n // KV namespace may not exist on older deployments — create or reuse.\n const kvMatch = existingToml.match(TOML_KV_ID_REGEX);\n let kvId: string;\n if (kvMatch) {\n kvId = kvMatch[1];\n } else {\n try {\n kvId = ensureKvNamespace(workerName);\n } catch (err) {\n return { success: false, error: `Failed to provision KV namespace: ${(err as Error).message}` };\n }\n }\n\n try {\n stageDeploymentDir({\n sourceDir: locateWorkerSource(),\n deployDir,\n textPatches: [{\n filePath: 'wrangler.toml',\n transforms: [\n (toml) => toml.replace(TOML_NAME_REGEX, `name = \"${workerName}\"`),\n (toml) => toml.replace(TOML_D1_PLACEHOLDER_REGEX, d1Id),\n (toml) => toml.replace(TOML_DB_NAME_REGEX, `database_name = \"${dbNameMatch?.[1] ?? workerName}\"`),\n (toml) => toml.replace(TOML_INDEX_NAME_REGEX, `index_name = \"${indexNameMatch?.[1] ?? `${workerName}-vectors`}\"`),\n (toml) => toml.replace(TOML_KV_PLACEHOLDER_REGEX, kvId),\n (toml) => toml.replace(TOML_TEAM_PACKAGE_VERSION_REGEX, `MYCO_TEAM_PACKAGE_VERSION = \"${getTeamPackageVersion()}\"`),\n (toml) => toml.replace(TOML_MYCO_SCHEMA_VERSION_REGEX, `MYCO_SCHEMA_VERSION = \"${getMycoSchemaVersion()}\"`),\n ],\n }],\n installDepsTimeoutMs: WRANGLER_COMMAND_TIMEOUT_MS * 3,\n });\n } catch (err) {\n return { success: false, error: `Failed to install worker dependencies: ${(err as Error).message}` };\n }\n\n // Re-set API key secret before deploy (deploy can wipe secrets)\n const secrets = readSecrets(vaultDir);\n const apiKey = secrets[TEAM_API_KEY_SECRET];\n if (apiKey) {\n try {\n runWrangler(['secret', 'put', TEAM_API_KEY_SECRET, '--name', workerName], {\n cwd: deployDir,\n input: apiKey,\n timeoutMs: WRANGLER_COMMAND_TIMEOUT_MS,\n });\n } catch {\n // Non-fatal — secret may already be set\n }\n }\n\n // Redeploy\n try {\n const deployOutput = wrangler(['deploy'], { cwd: deployDir });\n const workerUrl = parseWorkerUrl(deployOutput);\n const version = getTeamPackageVersion();\n\n updateTeamConfig(vaultDir, {\n worker_url: workerUrl,\n deployed_worker_version: version,\n });\n const localConfig = readLocalConfig();\n if (localConfig) {\n writeLocalConfig({\n ...localConfig,\n worker_name: workerName,\n worker_url: workerUrl,\n package_version: version,\n vault_dir: vaultDir,\n last_upgraded: new Date().toISOString(),\n });\n }\n\n return { success: true, worker_url: workerUrl, version };\n } catch (err) {\n return { success: false, error: `Failed to deploy worker: ${(err as Error).message}` };\n }\n}\n\n// ---------------------------------------------------------------------------\n// CLI wrapper\n// ---------------------------------------------------------------------------\n\nexport async function teamUpgrade(vaultDir: string): Promise<void> {\n console.log('Upgrading team sync worker...\\n');\n const result = upgradeWorker(vaultDir);\n if (!result.success) {\n console.error(result.error);\n process.exit(1);\n }\n console.log(`Worker deployed: ${result.worker_url}`);\n console.log(`Version: ${result.version}`);\n console.log('\\nUpgrade complete.');\n}\n\nexport async function teamStatus(): Promise<void> {\n const config = requireLocalConfig();\n\n console.log(`Worker: ${config.worker_name}`);\n console.log(`URL: ${config.worker_url}`);\n console.log(`API Key: ${maskSecret(config.api_key)}`);\n console.log(`MCP Token: ${maskSecret(config.mcp_token)}`);\n console.log(`Package v: ${config.package_version}`);\n console.log(`Created: ${config.created_at}`);\n console.log(`Upgraded: ${config.last_upgraded}`);\n console.log(`Config v: ${config.config_version}`);\n}\n\nexport async function teamRotateTokens(which: 'api' | 'mcp' | 'all' = 'all'): Promise<void> {\n const config = requireLocalConfig();\n\n let nextConfig = { ...config };\n\n if (which === 'api' || which === 'all') {\n const vaultDir = resolveVaultDirForConfig(config);\n if (!vaultDir) {\n throw new Error(\n 'Cannot resolve the project vault for API key rotation. Run this command from the project root or update ~/.myco-team/config.json with vault_dir first.',\n );\n }\n const apiKey = crypto.randomBytes(API_KEY_BYTES).toString('hex');\n runWrangler(['secret', 'put', TEAM_API_KEY_SECRET, '--name', config.worker_name], {\n cwd: path.join(resolvePackageRoot(), WORKER_SOURCE_DIR),\n input: apiKey,\n timeoutMs: WRANGLER_COMMAND_TIMEOUT_MS,\n });\n writeSecret(vaultDir, TEAM_API_KEY_SECRET, apiKey);\n nextConfig = {\n ...nextConfig,\n api_key: apiKey,\n vault_dir: vaultDir,\n package_version: getTeamPackageVersion(),\n last_upgraded: new Date().toISOString(),\n };\n writeLocalConfig(nextConfig);\n }\n\n if (which === 'mcp' || which === 'all') {\n try {\n nextConfig = {\n ...nextConfig,\n mcp_token: await rotateMcpTokenWithRetry(config.worker_url, nextConfig.api_key),\n };\n } catch (error) {\n writeLocalConfig({\n ...nextConfig,\n last_upgraded: new Date().toISOString(),\n });\n throw new Error(\n `API key rotation completed, but MCP token rotation failed. Local config was updated to the new API key.\\n${(error as Error).message}`,\n );\n }\n }\n\n nextConfig.last_upgraded = new Date().toISOString();\n writeLocalConfig(nextConfig);\n\n console.log(`API Key: ${maskSecret(nextConfig.api_key)}`);\n console.log(`MCP Token: ${maskSecret(nextConfig.mcp_token)}`);\n}\n\nexport async function teamDestroy(): Promise<void> {\n const config = requireLocalConfig();\n const errors: string[] = [];\n const workerSourceDir = path.join(resolvePackageRoot(), WORKER_SOURCE_DIR);\n\n try {\n wrangler(['delete', config.worker_name], { cwd: workerSourceDir });\n } catch (error) {\n errors.push(`worker delete failed: ${(error as Error).message}`);\n }\n\n try {\n wrangler(['vectorize', 'delete', `${config.worker_name}-vectors`]);\n } catch (error) {\n errors.push(`vectorize delete failed: ${(error as Error).message}`);\n }\n\n try {\n const databases = JSON.parse(wrangler(['d1', 'list', '--json'])) as Array<{ name: string; uuid: string }>;\n const database = databases.find((entry) => entry.name === config.worker_name);\n if (database) {\n wrangler(['d1', 'delete', database.name, '--skip-confirmation']);\n }\n } catch (error) {\n errors.push(`d1 delete failed: ${(error as Error).message}`);\n }\n\n try {\n const namespaces = extractJsonArray(wrangler(['kv', 'namespace', 'list'])) as Array<{ id: string; title: string }>;\n const namespace = namespaces.find((entry) => entry.title === `${config.worker_name}-secrets`);\n if (namespace) {\n wrangler(['kv', 'namespace', 'delete', '--namespace-id', namespace.id, '--skip-confirmation']);\n }\n } catch (error) {\n errors.push(`kv delete failed: ${(error as Error).message}`);\n }\n\n if (errors.length > 0) {\n throw new Error(`Team destroy incomplete. Local state preserved for retry.\\n${errors.join('\\n')}`);\n }\n\n fs.rmSync(resolveLocalConfigPath(), { force: true });\n console.log(`Destroyed local myco-team config for ${config.worker_name}.`);\n}\n"],"mappings":"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","names":[]}