@goondocks/myco 0.17.2 → 0.18.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -22
- package/bin/myco-run +15 -2
- package/dist/{agent-run-7AYHXIEF.js → agent-run-I4O2K2CK.js} +7 -7
- package/dist/{agent-tasks-UUIFKBD4.js → agent-tasks-UOW5BQIB.js} +7 -7
- package/dist/{chunk-XD3NEN3Q.js → chunk-2V7HR7HB.js} +2 -2
- package/dist/chunk-44PZCAYS.js +107 -0
- package/dist/chunk-44PZCAYS.js.map +1 -0
- package/dist/{chunk-DT42247G.js → chunk-75AZFBFW.js} +3 -3
- package/dist/{chunk-RMJPQZGF.js → chunk-C3EGL5JX.js} +755 -266
- package/dist/chunk-C3EGL5JX.js.map +1 -0
- package/dist/{chunk-7DAH5GLC.js → chunk-CKJAWZQE.js} +5 -1
- package/dist/chunk-CKJAWZQE.js.map +1 -0
- package/dist/{chunk-ML6GTPZU.js → chunk-CML4MCYF.js} +2 -2
- package/dist/{chunk-UTLWSKDV.js → chunk-CURS2TNP.js} +45 -4
- package/dist/chunk-CURS2TNP.js.map +1 -0
- package/dist/{chunk-EBIYONNZ.js → chunk-DPSLJ242.js} +34 -2
- package/dist/chunk-DPSLJ242.js.map +1 -0
- package/dist/{chunk-BZDZORVP.js → chunk-LSP5HYOO.js} +19 -16
- package/dist/chunk-LSP5HYOO.js.map +1 -0
- package/dist/{chunk-NUSTG3BH.js → chunk-N75GMQGA.js} +3 -3
- package/dist/{chunk-F6C4IC6R.js → chunk-NI23QCHB.js} +3 -3
- package/dist/{chunk-C3C5QVLK.js → chunk-O3TRN3RC.js} +2 -2
- package/dist/{chunk-3NCVCGUZ.js → chunk-RAV5YMRU.js} +3 -3
- package/dist/{chunk-25WHTV4N.js → chunk-RIDSOQDR.js} +21 -7
- package/dist/chunk-RIDSOQDR.js.map +1 -0
- package/dist/{chunk-HPZ7YAMA.js → chunk-TCSVDQF5.js} +1130 -195
- package/dist/chunk-TCSVDQF5.js.map +1 -0
- package/dist/{chunk-CTF7TQMJ.js → chunk-TLK46KKD.js} +14 -4
- package/dist/chunk-TLK46KKD.js.map +1 -0
- package/dist/{chunk-IGBHLFV5.js → chunk-TOER6RNC.js} +22 -2
- package/dist/chunk-TOER6RNC.js.map +1 -0
- package/dist/{chunk-ZSJPI5MS.js → chunk-TZAXQKO6.js} +6 -2
- package/dist/chunk-TZAXQKO6.js.map +1 -0
- package/dist/{chunk-RKPTMHED.js → chunk-U3J2DDSR.js} +2 -2
- package/dist/{chunk-SI5BBQAT.js → chunk-W7WENJ6F.js} +2 -2
- package/dist/{chunk-VVGZL2HX.js → chunk-WYOE4IAX.js} +153 -15
- package/dist/{chunk-VVGZL2HX.js.map → chunk-WYOE4IAX.js.map} +1 -1
- package/dist/{chunk-XZWFMMJR.js → chunk-XWOQL4XN.js} +3 -3
- package/dist/{chunk-5ZISXCDC.js → chunk-YZPI2Y3E.js} +39 -5
- package/dist/chunk-YZPI2Y3E.js.map +1 -0
- package/dist/{cli-WJVYP2QT.js → cli-D3TJYJ2U.js} +40 -40
- package/dist/{client-LZ3ZR4HC.js → client-4LLEXLVK.js} +4 -4
- package/dist/{config-ZQIMG3FB.js → config-DA4IUVFL.js} +3 -3
- package/dist/{detect-NJ2OREDP.js → detect-SZ2KDUF4.js} +2 -2
- package/dist/{detect-providers-C64L3QET.js → detect-providers-PSVKXTWE.js} +4 -4
- package/dist/{doctor-XEPBNHM3.js → doctor-KCTXPX5D.js} +12 -12
- package/dist/{executor-NXKJU5KW.js → executor-UYIZC3L5.js} +93 -285
- package/dist/executor-UYIZC3L5.js.map +1 -0
- package/dist/{init-BHVQAQ27.js → init-QFNBKKDC.js} +13 -13
- package/dist/{installer-45ZLP2RP.js → installer-BWJED3ED.js} +2 -2
- package/dist/{llm-KTD6SR55.js → llm-SMA5ZEAW.js} +4 -4
- package/dist/{loader-SHRKUKOS.js → loader-Q3P3R4UP.js} +3 -3
- package/dist/{loader-NEX3UF6U.js → loader-SKKUMT5C.js} +3 -3
- package/dist/{main-YFVBIRRK.js → main-5THODR77.js} +751 -257
- package/dist/main-5THODR77.js.map +1 -0
- package/dist/{open-2U7ZRGA3.js → open-7737CSPN.js} +7 -7
- package/dist/{post-compact-QIBMEWL3.js → post-compact-2TJ5FPZH.js} +7 -7
- package/dist/{post-tool-use-ICGFXDVY.js → post-tool-use-FRTSICC3.js} +6 -6
- package/dist/{post-tool-use-failure-C7TLH3XQ.js → post-tool-use-failure-KYO2NCNB.js} +7 -7
- package/dist/{pre-compact-IF7K4TQK.js → pre-compact-J6GCJEJR.js} +7 -7
- package/dist/{provider-check-LTLQ6BUZ.js → provider-check-AE3L5Z6R.js} +4 -4
- package/dist/{registry-TFQ22Z7N.js → registry-O2NZLO3V.js} +4 -4
- package/dist/{remove-FBGM2QVJ.js → remove-3WZZC7AX.js} +9 -9
- package/dist/{resolution-events-HGKIJOTA.js → resolution-events-XWYLLDRK.js} +4 -4
- package/dist/{restart-TQEECRNW.js → restart-HUHEFOXU.js} +8 -8
- package/dist/{search-NN5FC4Z6.js → search-ZGN3LDXG.js} +8 -8
- package/dist/{server-XMWJ4GF7.js → server-PTXLVVEE.js} +4 -4
- package/dist/{session-GLPAFYPO.js → session-7VV3IQMO.js} +9 -9
- package/dist/{session-end-TI3ILRBC.js → session-end-SMU55UCM.js} +6 -6
- package/dist/{session-start-PJLJDVJJ.js → session-start-NIMWEOIZ.js} +29 -13
- package/dist/session-start-NIMWEOIZ.js.map +1 -0
- package/dist/{setup-llm-AQSWLXCZ.js → setup-llm-7S3VPAPN.js} +8 -8
- package/dist/src/agent/definitions/tasks/extract-only.yaml +1 -1
- package/dist/src/agent/definitions/tasks/full-intelligence.yaml +10 -0
- package/dist/src/agent/definitions/tasks/skill-evolve.yaml +163 -49
- package/dist/src/agent/definitions/tasks/skill-generate.yaml +44 -27
- package/dist/src/agent/definitions/tasks/skill-survey.yaml +132 -138
- package/dist/src/agent/definitions/tasks/supersession-sweep.yaml +1 -1
- package/dist/src/cli.js +1 -1
- package/dist/src/daemon/main.js +1 -1
- package/dist/src/hooks/post-tool-use.js +1 -1
- package/dist/src/hooks/session-end.js +1 -1
- package/dist/src/hooks/session-start.js +1 -1
- package/dist/src/hooks/stop.js +1 -1
- package/dist/src/hooks/user-prompt-submit.js +1 -1
- package/dist/src/mcp/server.js +1 -1
- package/dist/src/symbionts/manifests/codex.yaml +85 -0
- package/dist/src/symbionts/templates/claude-code/hooks.json +12 -12
- package/dist/src/symbionts/templates/claude-code/settings.json +3 -3
- package/dist/src/symbionts/templates/codex/hooks.json +4 -4
- package/dist/src/symbionts/templates/cursor/hooks.json +9 -9
- package/dist/src/symbionts/templates/cursor/settings.json +2 -2
- package/dist/src/symbionts/templates/gemini/hooks.json +6 -6
- package/dist/src/symbionts/templates/gemini/settings.json +2 -2
- package/dist/src/symbionts/templates/myco-run.cjs +44 -0
- package/dist/src/symbionts/templates/opencode/settings.json +2 -2
- package/dist/src/symbionts/templates/vscode-copilot/hooks.json +7 -7
- package/dist/src/symbionts/templates/vscode-copilot/settings.json +2 -2
- package/dist/src/symbionts/templates/windsurf/hooks.json +4 -4
- package/dist/src/symbionts/templates/windsurf/settings.json +2 -2
- package/dist/src/worker/package-lock.json +4338 -0
- package/dist/src/worker/package.json +5 -0
- package/dist/src/worker/src/index.ts +58 -65
- package/dist/src/worker/src/mcp/auth.ts +65 -0
- package/dist/src/worker/src/mcp/server.ts +53 -0
- package/dist/src/worker/src/mcp/tools/context.ts +13 -0
- package/dist/src/worker/src/mcp/tools/get.ts +15 -0
- package/dist/src/worker/src/mcp/tools/graph.ts +35 -0
- package/dist/src/worker/src/mcp/tools/search.ts +32 -0
- package/dist/src/worker/src/mcp/tools/sessions.ts +24 -0
- package/dist/src/worker/src/mcp/tools/skills.ts +16 -0
- package/dist/src/worker/src/mcp/tools/team.ts +9 -0
- package/dist/src/worker/src/schema.ts +5 -1
- package/dist/src/worker/src/search-helpers.ts +70 -0
- package/dist/src/worker/wrangler.toml +9 -0
- package/dist/{stats-BISBIBXZ.js → stats-GEOQ2DFF.js} +9 -9
- package/dist/{stop-47BJ42EO.js → stop-7AKYBJJ2.js} +6 -6
- package/dist/{stop-failure-VU5BTLWX.js → stop-failure-NLE2EURG.js} +7 -7
- package/dist/{subagent-start-SPTKQRHU.js → subagent-start-LBNZF2TG.js} +7 -7
- package/dist/{subagent-stop-UU75BYLC.js → subagent-stop-B2Z5GYAB.js} +7 -7
- package/dist/{task-completed-MVDO7TZF.js → task-completed-PO5TETJ7.js} +7 -7
- package/dist/{team-7X64J4Y6.js → team-DPNP2RN7.js} +97 -14
- package/dist/team-DPNP2RN7.js.map +1 -0
- package/dist/ui/assets/{index-rpmSpJpm.js → index-CiI1fwas.js} +120 -120
- package/dist/ui/index.html +1 -1
- package/dist/{update-DA7VEXOS.js → update-WBWB5URU.js} +18 -9
- package/dist/update-WBWB5URU.js.map +1 -0
- package/dist/{user-prompt-submit-ADZ4NTVO.js → user-prompt-submit-IZJC3NV7.js} +30 -7
- package/dist/user-prompt-submit-IZJC3NV7.js.map +1 -0
- package/dist/{verify-QYSERHF7.js → verify-FNSP62I3.js} +5 -5
- package/dist/{version-A72TAL2J.js → version-QEVU66NT.js} +2 -2
- package/package.json +7 -7
- package/dist/chunk-25WHTV4N.js.map +0 -1
- package/dist/chunk-5ZISXCDC.js.map +0 -1
- package/dist/chunk-7DAH5GLC.js.map +0 -1
- package/dist/chunk-BZDZORVP.js.map +0 -1
- package/dist/chunk-CTF7TQMJ.js.map +0 -1
- package/dist/chunk-EBIYONNZ.js.map +0 -1
- package/dist/chunk-HPZ7YAMA.js.map +0 -1
- package/dist/chunk-IGBHLFV5.js.map +0 -1
- package/dist/chunk-RMJPQZGF.js.map +0 -1
- package/dist/chunk-UTLWSKDV.js.map +0 -1
- package/dist/chunk-ZSJPI5MS.js.map +0 -1
- package/dist/executor-NXKJU5KW.js.map +0 -1
- package/dist/main-YFVBIRRK.js.map +0 -1
- package/dist/session-start-PJLJDVJJ.js.map +0 -1
- package/dist/src/symbionts/templates/hook-guard.cjs +0 -19
- package/dist/team-7X64J4Y6.js.map +0 -1
- package/dist/update-DA7VEXOS.js.map +0 -1
- package/dist/user-prompt-submit-ADZ4NTVO.js.map +0 -1
- /package/dist/{agent-run-7AYHXIEF.js.map → agent-run-I4O2K2CK.js.map} +0 -0
- /package/dist/{agent-tasks-UUIFKBD4.js.map → agent-tasks-UOW5BQIB.js.map} +0 -0
- /package/dist/{chunk-XD3NEN3Q.js.map → chunk-2V7HR7HB.js.map} +0 -0
- /package/dist/{chunk-DT42247G.js.map → chunk-75AZFBFW.js.map} +0 -0
- /package/dist/{chunk-ML6GTPZU.js.map → chunk-CML4MCYF.js.map} +0 -0
- /package/dist/{chunk-NUSTG3BH.js.map → chunk-N75GMQGA.js.map} +0 -0
- /package/dist/{chunk-F6C4IC6R.js.map → chunk-NI23QCHB.js.map} +0 -0
- /package/dist/{chunk-C3C5QVLK.js.map → chunk-O3TRN3RC.js.map} +0 -0
- /package/dist/{chunk-3NCVCGUZ.js.map → chunk-RAV5YMRU.js.map} +0 -0
- /package/dist/{chunk-RKPTMHED.js.map → chunk-U3J2DDSR.js.map} +0 -0
- /package/dist/{chunk-SI5BBQAT.js.map → chunk-W7WENJ6F.js.map} +0 -0
- /package/dist/{chunk-XZWFMMJR.js.map → chunk-XWOQL4XN.js.map} +0 -0
- /package/dist/{cli-WJVYP2QT.js.map → cli-D3TJYJ2U.js.map} +0 -0
- /package/dist/{client-LZ3ZR4HC.js.map → client-4LLEXLVK.js.map} +0 -0
- /package/dist/{config-ZQIMG3FB.js.map → config-DA4IUVFL.js.map} +0 -0
- /package/dist/{detect-NJ2OREDP.js.map → detect-SZ2KDUF4.js.map} +0 -0
- /package/dist/{detect-providers-C64L3QET.js.map → detect-providers-PSVKXTWE.js.map} +0 -0
- /package/dist/{doctor-XEPBNHM3.js.map → doctor-KCTXPX5D.js.map} +0 -0
- /package/dist/{init-BHVQAQ27.js.map → init-QFNBKKDC.js.map} +0 -0
- /package/dist/{installer-45ZLP2RP.js.map → installer-BWJED3ED.js.map} +0 -0
- /package/dist/{llm-KTD6SR55.js.map → llm-SMA5ZEAW.js.map} +0 -0
- /package/dist/{loader-NEX3UF6U.js.map → loader-Q3P3R4UP.js.map} +0 -0
- /package/dist/{loader-SHRKUKOS.js.map → loader-SKKUMT5C.js.map} +0 -0
- /package/dist/{open-2U7ZRGA3.js.map → open-7737CSPN.js.map} +0 -0
- /package/dist/{post-compact-QIBMEWL3.js.map → post-compact-2TJ5FPZH.js.map} +0 -0
- /package/dist/{post-tool-use-ICGFXDVY.js.map → post-tool-use-FRTSICC3.js.map} +0 -0
- /package/dist/{post-tool-use-failure-C7TLH3XQ.js.map → post-tool-use-failure-KYO2NCNB.js.map} +0 -0
- /package/dist/{pre-compact-IF7K4TQK.js.map → pre-compact-J6GCJEJR.js.map} +0 -0
- /package/dist/{provider-check-LTLQ6BUZ.js.map → provider-check-AE3L5Z6R.js.map} +0 -0
- /package/dist/{registry-TFQ22Z7N.js.map → registry-O2NZLO3V.js.map} +0 -0
- /package/dist/{remove-FBGM2QVJ.js.map → remove-3WZZC7AX.js.map} +0 -0
- /package/dist/{resolution-events-HGKIJOTA.js.map → resolution-events-XWYLLDRK.js.map} +0 -0
- /package/dist/{restart-TQEECRNW.js.map → restart-HUHEFOXU.js.map} +0 -0
- /package/dist/{search-NN5FC4Z6.js.map → search-ZGN3LDXG.js.map} +0 -0
- /package/dist/{server-XMWJ4GF7.js.map → server-PTXLVVEE.js.map} +0 -0
- /package/dist/{session-GLPAFYPO.js.map → session-7VV3IQMO.js.map} +0 -0
- /package/dist/{session-end-TI3ILRBC.js.map → session-end-SMU55UCM.js.map} +0 -0
- /package/dist/{setup-llm-AQSWLXCZ.js.map → setup-llm-7S3VPAPN.js.map} +0 -0
- /package/dist/{stats-BISBIBXZ.js.map → stats-GEOQ2DFF.js.map} +0 -0
- /package/dist/{stop-47BJ42EO.js.map → stop-7AKYBJJ2.js.map} +0 -0
- /package/dist/{stop-failure-VU5BTLWX.js.map → stop-failure-NLE2EURG.js.map} +0 -0
- /package/dist/{subagent-start-SPTKQRHU.js.map → subagent-start-LBNZF2TG.js.map} +0 -0
- /package/dist/{subagent-stop-UU75BYLC.js.map → subagent-stop-B2Z5GYAB.js.map} +0 -0
- /package/dist/{task-completed-MVDO7TZF.js.map → task-completed-PO5TETJ7.js.map} +0 -0
- /package/dist/{verify-QYSERHF7.js.map → verify-FNSP62I3.js.map} +0 -0
- /package/dist/{version-A72TAL2J.js.map → version-QEVU66NT.js.map} +0 -0
|
@@ -2,17 +2,17 @@ import { createRequire as __cr } from 'node:module'; const require = __cr(import
|
|
|
2
2
|
import {
|
|
3
3
|
normalizeHookInput,
|
|
4
4
|
readStdin
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-YZPI2Y3E.js";
|
|
6
6
|
import {
|
|
7
7
|
resolveVaultDir
|
|
8
8
|
} from "./chunk-5ZT2Q6P5.js";
|
|
9
9
|
import {
|
|
10
10
|
DaemonClient
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
11
|
+
} from "./chunk-XWOQL4XN.js";
|
|
12
|
+
import "./chunk-W7WENJ6F.js";
|
|
13
|
+
import "./chunk-DPSLJ242.js";
|
|
14
14
|
import "./chunk-LPUQPDC2.js";
|
|
15
|
-
import "./chunk-
|
|
15
|
+
import "./chunk-CKJAWZQE.js";
|
|
16
16
|
import "./chunk-E7NUADTQ.js";
|
|
17
17
|
import "./chunk-D7TYRPRM.js";
|
|
18
18
|
import "./chunk-E4VLWIJC.js";
|
|
@@ -45,4 +45,4 @@ async function main() {
|
|
|
45
45
|
export {
|
|
46
46
|
main
|
|
47
47
|
};
|
|
48
|
-
//# sourceMappingURL=stop-
|
|
48
|
+
//# sourceMappingURL=stop-7AKYBJJ2.js.map
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
sendEvent
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-N75GMQGA.js";
|
|
5
5
|
import "./chunk-V7XG6V6C.js";
|
|
6
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-YZPI2Y3E.js";
|
|
7
7
|
import "./chunk-5ZT2Q6P5.js";
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-XWOQL4XN.js";
|
|
9
|
+
import "./chunk-W7WENJ6F.js";
|
|
10
|
+
import "./chunk-DPSLJ242.js";
|
|
11
11
|
import "./chunk-LPUQPDC2.js";
|
|
12
|
-
import "./chunk-
|
|
12
|
+
import "./chunk-CKJAWZQE.js";
|
|
13
13
|
import "./chunk-E7NUADTQ.js";
|
|
14
14
|
import "./chunk-D7TYRPRM.js";
|
|
15
15
|
import "./chunk-E4VLWIJC.js";
|
|
@@ -27,4 +27,4 @@ async function main() {
|
|
|
27
27
|
export {
|
|
28
28
|
main
|
|
29
29
|
};
|
|
30
|
-
//# sourceMappingURL=stop-failure-
|
|
30
|
+
//# sourceMappingURL=stop-failure-NLE2EURG.js.map
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
sendEvent
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-N75GMQGA.js";
|
|
5
5
|
import "./chunk-V7XG6V6C.js";
|
|
6
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-YZPI2Y3E.js";
|
|
7
7
|
import "./chunk-5ZT2Q6P5.js";
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-XWOQL4XN.js";
|
|
9
|
+
import "./chunk-W7WENJ6F.js";
|
|
10
|
+
import "./chunk-DPSLJ242.js";
|
|
11
11
|
import "./chunk-LPUQPDC2.js";
|
|
12
|
-
import "./chunk-
|
|
12
|
+
import "./chunk-CKJAWZQE.js";
|
|
13
13
|
import "./chunk-E7NUADTQ.js";
|
|
14
14
|
import "./chunk-D7TYRPRM.js";
|
|
15
15
|
import "./chunk-E4VLWIJC.js";
|
|
@@ -27,4 +27,4 @@ async function main() {
|
|
|
27
27
|
export {
|
|
28
28
|
main
|
|
29
29
|
};
|
|
30
|
-
//# sourceMappingURL=subagent-start-
|
|
30
|
+
//# sourceMappingURL=subagent-start-LBNZF2TG.js.map
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
sendEvent
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-N75GMQGA.js";
|
|
5
5
|
import "./chunk-V7XG6V6C.js";
|
|
6
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-YZPI2Y3E.js";
|
|
7
7
|
import "./chunk-5ZT2Q6P5.js";
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-XWOQL4XN.js";
|
|
9
|
+
import "./chunk-W7WENJ6F.js";
|
|
10
|
+
import "./chunk-DPSLJ242.js";
|
|
11
11
|
import "./chunk-LPUQPDC2.js";
|
|
12
|
-
import "./chunk-
|
|
12
|
+
import "./chunk-CKJAWZQE.js";
|
|
13
13
|
import "./chunk-E7NUADTQ.js";
|
|
14
14
|
import "./chunk-D7TYRPRM.js";
|
|
15
15
|
import "./chunk-E4VLWIJC.js";
|
|
@@ -29,4 +29,4 @@ async function main() {
|
|
|
29
29
|
export {
|
|
30
30
|
main
|
|
31
31
|
};
|
|
32
|
-
//# sourceMappingURL=subagent-stop-
|
|
32
|
+
//# sourceMappingURL=subagent-stop-B2Z5GYAB.js.map
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
sendEvent
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-N75GMQGA.js";
|
|
5
5
|
import "./chunk-V7XG6V6C.js";
|
|
6
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-YZPI2Y3E.js";
|
|
7
7
|
import "./chunk-5ZT2Q6P5.js";
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
8
|
+
import "./chunk-XWOQL4XN.js";
|
|
9
|
+
import "./chunk-W7WENJ6F.js";
|
|
10
|
+
import "./chunk-DPSLJ242.js";
|
|
11
11
|
import "./chunk-LPUQPDC2.js";
|
|
12
|
-
import "./chunk-
|
|
12
|
+
import "./chunk-CKJAWZQE.js";
|
|
13
13
|
import "./chunk-E7NUADTQ.js";
|
|
14
14
|
import "./chunk-D7TYRPRM.js";
|
|
15
15
|
import "./chunk-E4VLWIJC.js";
|
|
@@ -28,4 +28,4 @@ async function main() {
|
|
|
28
28
|
export {
|
|
29
29
|
main
|
|
30
30
|
};
|
|
31
|
-
//# sourceMappingURL=task-completed-
|
|
31
|
+
//# sourceMappingURL=task-completed-PO5TETJ7.js.map
|
|
@@ -6,18 +6,18 @@ import {
|
|
|
6
6
|
import {
|
|
7
7
|
loadConfig,
|
|
8
8
|
updateTeamConfig
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-2V7HR7HB.js";
|
|
10
10
|
import {
|
|
11
11
|
getPluginVersion
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-W7WENJ6F.js";
|
|
13
13
|
import {
|
|
14
14
|
resolvePackageRoot
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-DPSLJ242.js";
|
|
16
16
|
import "./chunk-LPUQPDC2.js";
|
|
17
17
|
import {
|
|
18
18
|
TEAM_API_KEY_SECRET,
|
|
19
19
|
WRANGLER_COMMAND_TIMEOUT_MS
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-CKJAWZQE.js";
|
|
21
21
|
import "./chunk-E7NUADTQ.js";
|
|
22
22
|
import "./chunk-D7TYRPRM.js";
|
|
23
23
|
import "./chunk-E4VLWIJC.js";
|
|
@@ -44,6 +44,9 @@ var TOML_D1_PLACEHOLDER_REGEX = /<YOUR_D1_DATABASE_ID>/g;
|
|
|
44
44
|
var TOML_DB_NAME_REGEX = /database_name\s*=\s*"[^"]*"/g;
|
|
45
45
|
var TOML_INDEX_NAME_REGEX = /index_name\s*=\s*"[^"]*"/g;
|
|
46
46
|
var TOML_DB_ID_REGEX = /database_id\s*=\s*"([^"]+)"/;
|
|
47
|
+
var TOML_KV_PLACEHOLDER_REGEX = /<YOUR_KV_NAMESPACE_ID>/g;
|
|
48
|
+
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;
|
|
47
50
|
function projectHash(vaultDir) {
|
|
48
51
|
const hash = crypto.createHash("sha256").update(vaultDir).digest("hex");
|
|
49
52
|
return hash.slice(0, PROJECT_HASH_LENGTH);
|
|
@@ -52,12 +55,20 @@ function resourceName(vaultDir) {
|
|
|
52
55
|
return `${TEAM_RESOURCE_PREFIX}-${projectHash(vaultDir)}`;
|
|
53
56
|
}
|
|
54
57
|
function wrangler(args, options) {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
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);
|
|
71
|
+
}
|
|
61
72
|
}
|
|
62
73
|
function locateWorkerSource() {
|
|
63
74
|
const root = resolvePackageRoot();
|
|
@@ -67,7 +78,7 @@ function locateWorkerSource() {
|
|
|
67
78
|
if (fs.existsSync(srcPath)) return srcPath;
|
|
68
79
|
throw new Error(`Cannot find ${WORKER_SOURCE_DIR} \u2014 are you running from the myco package?`);
|
|
69
80
|
}
|
|
70
|
-
function prepareDeployDir(vaultDir, d1Id) {
|
|
81
|
+
function prepareDeployDir(vaultDir, d1Id, kvId) {
|
|
71
82
|
const srcDir = locateWorkerSource();
|
|
72
83
|
const deployDir = path.join(vaultDir, TEAM_WORKER_DIR);
|
|
73
84
|
fs.cpSync(srcDir, deployDir, { recursive: true });
|
|
@@ -78,9 +89,54 @@ function prepareDeployDir(vaultDir, d1Id) {
|
|
|
78
89
|
toml = toml.replace(TOML_D1_PLACEHOLDER_REGEX, d1Id);
|
|
79
90
|
toml = toml.replace(TOML_DB_NAME_REGEX, `database_name = "${name}"`);
|
|
80
91
|
toml = toml.replace(TOML_INDEX_NAME_REGEX, `index_name = "${name}-vectors"`);
|
|
92
|
+
toml = toml.replace(TOML_KV_PLACEHOLDER_REGEX, kvId);
|
|
81
93
|
fs.writeFileSync(tomlPath, toml, "utf-8");
|
|
94
|
+
installDeploymentDeps(deployDir);
|
|
82
95
|
return deployDir;
|
|
83
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));
|
|
105
|
+
}
|
|
106
|
+
function ensureKvNamespace(name) {
|
|
107
|
+
const kvName = `${name}-secrets`;
|
|
108
|
+
const lookupExisting = () => {
|
|
109
|
+
const listOutput = wrangler(["kv", "namespace", "list"]);
|
|
110
|
+
const namespaces = extractJsonArray(listOutput);
|
|
111
|
+
const normalize = (s) => s.replace(/[-_]/g, "");
|
|
112
|
+
const target = normalize(kvName);
|
|
113
|
+
const existing = namespaces.find((ns) => normalize(ns.title) === target || normalize(ns.title).endsWith(target));
|
|
114
|
+
if (!existing) throw new Error(`KV namespace "${kvName}" not found in list of ${namespaces.length} namespaces`);
|
|
115
|
+
return existing.id;
|
|
116
|
+
};
|
|
117
|
+
try {
|
|
118
|
+
const output = wrangler(["kv", "namespace", "create", kvName]);
|
|
119
|
+
const match = output.match(KV_ID_REGEX);
|
|
120
|
+
if (match) return match[1];
|
|
121
|
+
return lookupExisting();
|
|
122
|
+
} catch (err) {
|
|
123
|
+
const errMsg = err.message;
|
|
124
|
+
if (errMsg.includes("already exists") || errMsg.includes("duplicate") || errMsg.includes("same title")) {
|
|
125
|
+
return lookupExisting();
|
|
126
|
+
}
|
|
127
|
+
throw err;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
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
|
|
138
|
+
});
|
|
139
|
+
}
|
|
84
140
|
function parseD1Id(output) {
|
|
85
141
|
const jsonMatch = output.match(D1_ID_JSON_REGEX);
|
|
86
142
|
if (jsonMatch) return jsonMatch[1];
|
|
@@ -153,9 +209,19 @@ async function teamInit(vaultDir) {
|
|
|
153
209
|
process.exit(1);
|
|
154
210
|
}
|
|
155
211
|
}
|
|
212
|
+
console.log("Creating KV namespace for secrets...");
|
|
213
|
+
let kvId;
|
|
214
|
+
try {
|
|
215
|
+
kvId = ensureKvNamespace(name);
|
|
216
|
+
console.log(`KV namespace ready: ${kvId}
|
|
217
|
+
`);
|
|
218
|
+
} catch (err) {
|
|
219
|
+
console.error(`Failed to create KV namespace: ${err.message}`);
|
|
220
|
+
process.exit(1);
|
|
221
|
+
}
|
|
156
222
|
const apiKey = crypto.randomBytes(API_KEY_BYTES).toString("hex");
|
|
157
223
|
console.log("Preparing worker deployment...");
|
|
158
|
-
const deployDir = prepareDeployDir(vaultDir, d1Id);
|
|
224
|
+
const deployDir = prepareDeployDir(vaultDir, d1Id, kvId);
|
|
159
225
|
console.log("Setting API key secret...");
|
|
160
226
|
try {
|
|
161
227
|
execFileSync("wrangler", ["secret", "put", TEAM_API_KEY_SECRET, "--name", name], {
|
|
@@ -230,15 +296,32 @@ function upgradeWorker(vaultDir) {
|
|
|
230
296
|
const nameMatch = existingToml.match(/^name\s*=\s*"([^"]*)"/m);
|
|
231
297
|
const dbNameMatch = existingToml.match(/database_name\s*=\s*"([^"]*)"/);
|
|
232
298
|
const indexNameMatch = existingToml.match(/index_name\s*=\s*"([^"]*)"/);
|
|
299
|
+
const workerName = nameMatch?.[1] ?? resourceName(vaultDir);
|
|
300
|
+
const kvMatch = existingToml.match(TOML_KV_ID_REGEX);
|
|
301
|
+
let kvId;
|
|
302
|
+
if (kvMatch) {
|
|
303
|
+
kvId = kvMatch[1];
|
|
304
|
+
} else {
|
|
305
|
+
try {
|
|
306
|
+
kvId = ensureKvNamespace(workerName);
|
|
307
|
+
} catch (err) {
|
|
308
|
+
return { success: false, error: `Failed to provision KV namespace: ${err.message}` };
|
|
309
|
+
}
|
|
310
|
+
}
|
|
233
311
|
const srcDir = locateWorkerSource();
|
|
234
312
|
fs.cpSync(srcDir, deployDir, { recursive: true });
|
|
235
313
|
let toml = fs.readFileSync(path.join(deployDir, "wrangler.toml"), "utf-8");
|
|
236
|
-
const workerName = nameMatch?.[1] ?? resourceName(vaultDir);
|
|
237
314
|
toml = toml.replace(TOML_NAME_REGEX, `name = "${workerName}"`);
|
|
238
315
|
toml = toml.replace(TOML_D1_PLACEHOLDER_REGEX, d1Id);
|
|
239
316
|
toml = toml.replace(TOML_DB_NAME_REGEX, `database_name = "${dbNameMatch?.[1] ?? workerName}"`);
|
|
240
317
|
toml = toml.replace(TOML_INDEX_NAME_REGEX, `index_name = "${indexNameMatch?.[1] ?? `${workerName}-vectors`}"`);
|
|
318
|
+
toml = toml.replace(TOML_KV_PLACEHOLDER_REGEX, kvId);
|
|
241
319
|
fs.writeFileSync(path.join(deployDir, "wrangler.toml"), toml, "utf-8");
|
|
320
|
+
try {
|
|
321
|
+
installDeploymentDeps(deployDir);
|
|
322
|
+
} catch (err) {
|
|
323
|
+
return { success: false, error: `Failed to install worker dependencies: ${err.message}` };
|
|
324
|
+
}
|
|
242
325
|
const secrets = readSecrets(vaultDir);
|
|
243
326
|
const apiKey = secrets[TEAM_API_KEY_SECRET];
|
|
244
327
|
if (apiKey) {
|
|
@@ -282,4 +365,4 @@ export {
|
|
|
282
365
|
teamUpgrade,
|
|
283
366
|
upgradeWorker
|
|
284
367
|
};
|
|
285
|
-
//# sourceMappingURL=team-
|
|
368
|
+
//# sourceMappingURL=team-DPNP2RN7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/cli/team.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 { execFileSync } from 'node:child_process';\nimport crypto from 'node:crypto';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { loadConfig, updateTeamConfig } from '../config/loader.js';\nimport { writeSecret, readSecrets } from '../config/secrets.js';\nimport { resolvePackageRoot } from '../symbionts/detect.js';\nimport { getPluginVersion } from '../version.js';\nimport { WRANGLER_COMMAND_TIMEOUT_MS, TEAM_API_KEY_SECRET } from '../constants.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 = 'src/worker';\n\n/** Deployment directory name within the vault. */\nconst TEAM_WORKER_DIR = '.team-worker';\n\n/** Regex to extract D1 database ID from wrangler d1 create output (JSON format). */\nconst D1_ID_JSON_REGEX = /\"database_id\"\\s*:\\s*\"([0-9a-f-]{36})\"/i;\n\n/** Regex to extract D1 database ID from wrangler d1 create output (text format). */\nconst D1_ID_TEXT_REGEX = /id:\\s*([0-9a-f-]{36})/i;\n\n/** Regex to extract worker URL from wrangler deploy output. */\nconst WORKER_URL_REGEX = /(https:\\/\\/[^\\s]+\\.workers\\.dev)/;\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 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 * Regex to extract the KV namespace ID from `wrangler kv namespace create` output.\n * Wrangler prints a JSON configuration snippet like:\n * { \"kv_namespaces\": [ { \"binding\": \"...\", \"id\": \"7cc069cb32b4438b29079cca4714056\" } ] }\n * Note: Cloudflare KV IDs are hex strings of variable length (observed 31-32 chars).\n */\nconst KV_ID_REGEX = /\"id\":\\s*\"([0-9a-f]+)\"/i;\n\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\n/** Run a wrangler command and return stdout. Throws on failure, surfacing stderr. */\nfunction wrangler(args: string[], options?: { cwd?: string }): string {\n try {\n return execFileSync('wrangler', args, {\n encoding: 'utf-8',\n timeout: WRANGLER_COMMAND_TIMEOUT_MS,\n stdio: ['pipe', 'pipe', 'pipe'],\n ...options,\n });\n } catch (err) {\n // execFileSync loses stderr in err.message — reconstruct it here so\n // callers see the actual wrangler failure instead of just \"Command failed\".\n const execErr = err as Error & { stderr?: Buffer | string; stdout?: Buffer | string };\n const stderr = execErr.stderr?.toString() ?? '';\n const stdout = execErr.stdout?.toString() ?? '';\n const detail = [stderr, stdout].filter(Boolean).join('\\n').trim();\n throw new Error(detail || execErr.message);\n }\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 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\n // Copy all worker source files\n fs.cpSync(srcDir, deployDir, { recursive: true });\n\n // Patch wrangler.toml with actual IDs\n const tomlPath = path.join(deployDir, 'wrangler.toml');\n let toml = fs.readFileSync(tomlPath, 'utf-8');\n const name = resourceName(vaultDir);\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 fs.writeFileSync(tomlPath, toml, 'utf-8');\n\n // Install runtime dependencies before deploy (required for bundled imports)\n installDeploymentDeps(deployDir);\n\n return deployDir;\n}\n\n/** Extract a JSON array from wrangler output that may be prefixed with banner text. */\nfunction extractJsonArray(output: string): unknown[] {\n const start = output.indexOf('[');\n const end = output.lastIndexOf(']');\n if (start === -1 || end === -1 || end < start) {\n throw new Error(`No JSON array found in output:\\n${output}`);\n }\n return JSON.parse(output.slice(start, end + 1));\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 const match = output.match(KV_ID_REGEX);\n if (match) return match[1];\n // Created successfully but we couldn't parse — fall back to list lookup\n return lookupExisting();\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\n/** Install npm dependencies in the deploy directory. Required for runtime imports. */\nfunction installDeploymentDeps(deployDir: string): void {\n const packageJsonPath = path.join(deployDir, 'package.json');\n if (!fs.existsSync(packageJsonPath)) return;\n execFileSync('npm', ['install', '--silent', '--no-audit', '--no-fund'], {\n encoding: 'utf-8',\n timeout: WRANGLER_COMMAND_TIMEOUT_MS * 3,\n stdio: ['pipe', 'pipe', 'pipe'],\n cwd: deployDir,\n });\n}\n\n/** Extract D1 database ID from wrangler d1 create output (handles both JSON and text formats). */\nfunction parseD1Id(output: string): string {\n const jsonMatch = output.match(D1_ID_JSON_REGEX);\n if (jsonMatch) return jsonMatch[1];\n const textMatch = output.match(D1_ID_TEXT_REGEX);\n if (textMatch) return textMatch[1];\n throw new Error(`Could not parse D1 database ID from wrangler output:\\n${output}`);\n}\n\n/** Extract worker URL from wrangler deploy output. */\nfunction parseWorkerUrl(output: string): string {\n // Output typically contains: \"https://<name>.<subdomain>.workers.dev\"\n const match = output.match(WORKER_URL_REGEX);\n if (!match) throw new Error(`Could not parse worker URL from deploy output:\\n${output}`);\n return match[1];\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 execFileSync('wrangler', ['secret', 'put', TEAM_API_KEY_SECRET, '--name', name], {\n encoding: 'utf-8',\n timeout: WRANGLER_COMMAND_TIMEOUT_MS,\n input: apiKey,\n stdio: ['pipe', 'pipe', 'pipe'],\n cwd: deployDir,\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('../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 // 10. Save config and API key locally\n updateTeamConfig(vaultDir, {\n enabled: true,\n worker_url: workerUrl,\n deployed_worker_version: getPluginVersion(),\n });\n writeSecret(vaultDir, TEAM_API_KEY_SECRET, apiKey);\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 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 // Re-copy worker source from package (updated code)\n const srcDir = locateWorkerSource();\n fs.cpSync(srcDir, deployDir, { recursive: true });\n\n // Patch wrangler.toml preserving existing resource names\n let toml = fs.readFileSync(path.join(deployDir, 'wrangler.toml'), 'utf-8');\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 fs.writeFileSync(path.join(deployDir, 'wrangler.toml'), toml, 'utf-8');\n\n // Install runtime dependencies before deploy (required for bundled imports)\n try {\n installDeploymentDeps(deployDir);\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 execFileSync('wrangler', ['secret', 'put', TEAM_API_KEY_SECRET, '--name', workerName], {\n encoding: 'utf-8',\n timeout: WRANGLER_COMMAND_TIMEOUT_MS,\n input: apiKey,\n stdio: ['pipe', 'pipe', 'pipe'],\n cwd: deployDir,\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 = getPluginVersion();\n\n updateTeamConfig(vaultDir, {\n worker_url: workerUrl,\n deployed_worker_version: version,\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"],"mappings":"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","names":[]}
|