@goondocks/myco 0.6.5 → 0.10.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.
- package/.claude-plugin/marketplace.json +1 -5
- package/.claude-plugin/plugin.json +3 -3
- package/CONTRIBUTING.md +37 -30
- package/README.md +81 -28
- package/bin/myco-run +2 -0
- package/dist/agent-run-CGXF5PPC.js +34 -0
- package/dist/agent-run-CGXF5PPC.js.map +1 -0
- package/dist/agent-tasks-T7NVI3R7.js +180 -0
- package/dist/agent-tasks-T7NVI3R7.js.map +1 -0
- package/dist/chunk-5LPERML5.js +486 -0
- package/dist/chunk-5LPERML5.js.map +1 -0
- package/dist/chunk-5PEUFJ6U.js +92 -0
- package/dist/chunk-5PEUFJ6U.js.map +1 -0
- package/dist/chunk-5QERXFH7.js +26 -0
- package/dist/chunk-5QERXFH7.js.map +1 -0
- package/dist/{chunk-4DYD4HHG.js → chunk-5SDH75YC.js} +2 -2
- package/dist/chunk-76ZO5RGT.js +150 -0
- package/dist/chunk-76ZO5RGT.js.map +1 -0
- package/dist/chunk-AEJS57ZK.js +26 -0
- package/dist/chunk-AEJS57ZK.js.map +1 -0
- package/dist/chunk-C3AEZ3BZ.js +22 -0
- package/dist/chunk-C3AEZ3BZ.js.map +1 -0
- package/dist/chunk-CUDM5YJY.js +294 -0
- package/dist/chunk-CUDM5YJY.js.map +1 -0
- package/dist/chunk-D6DXYAFK.js +93 -0
- package/dist/chunk-D6DXYAFK.js.map +1 -0
- package/dist/chunk-D7TYRPRM.js +7312 -0
- package/dist/chunk-D7TYRPRM.js.map +1 -0
- package/dist/chunk-E4VLWIJC.js +2 -0
- package/dist/chunk-ENWBFX7F.js +50 -0
- package/dist/chunk-ENWBFX7F.js.map +1 -0
- package/dist/chunk-FFQES5MC.js +904 -0
- package/dist/chunk-FFQES5MC.js.map +1 -0
- package/dist/chunk-FMIWFRAM.js +41 -0
- package/dist/chunk-FMIWFRAM.js.map +1 -0
- package/dist/chunk-FPMEIN2W.js +66 -0
- package/dist/chunk-FPMEIN2W.js.map +1 -0
- package/dist/chunk-G2LQBFE3.js +35 -0
- package/dist/chunk-G2LQBFE3.js.map +1 -0
- package/dist/chunk-IB76KGBY.js +2 -0
- package/dist/{chunk-AHZN4Z34.js → chunk-J4RVYUH4.js} +2 -2
- package/dist/{chunk-N33KUCFP.js → chunk-JTYZRPX5.js} +1 -9
- package/dist/chunk-JTYZRPX5.js.map +1 -0
- package/dist/{chunk-ERG2IEWX.js → chunk-KH64DHOY.js} +3 -7413
- package/dist/chunk-KH64DHOY.js.map +1 -0
- package/dist/chunk-LPUQPDC2.js +19 -0
- package/dist/chunk-LPUQPDC2.js.map +1 -0
- package/dist/chunk-M5XWW7UI.js +97 -0
- package/dist/chunk-M5XWW7UI.js.map +1 -0
- package/dist/chunk-MAZOVVDU.js +305 -0
- package/dist/chunk-MAZOVVDU.js.map +1 -0
- package/dist/{chunk-54WVLTKD.js → chunk-MKKXCCQ5.js} +33 -17
- package/dist/chunk-MKKXCCQ5.js.map +1 -0
- package/dist/chunk-MSXYUXZR.js +187 -0
- package/dist/chunk-MSXYUXZR.js.map +1 -0
- package/dist/chunk-MYX5NCRH.js +45 -0
- package/dist/chunk-MYX5NCRH.js.map +1 -0
- package/dist/chunk-RJMXDUMA.js +40 -0
- package/dist/chunk-RJMXDUMA.js.map +1 -0
- package/dist/chunk-S6I62FAH.js +92 -0
- package/dist/chunk-S6I62FAH.js.map +1 -0
- package/dist/chunk-U7UUJ4FD.js +180 -0
- package/dist/chunk-U7UUJ4FD.js.map +1 -0
- package/dist/{chunk-HIN3UVOG.js → chunk-V7XG6V6C.js} +20 -11
- package/dist/chunk-V7XG6V6C.js.map +1 -0
- package/dist/chunk-W6HI4CCS.js +162 -0
- package/dist/chunk-W6HI4CCS.js.map +1 -0
- package/dist/{chunk-F7GAYVWF.js → chunk-WXSJKESH.js} +96 -9
- package/dist/chunk-WXSJKESH.js.map +1 -0
- package/dist/chunk-WZZH3YXJ.js +601 -0
- package/dist/chunk-WZZH3YXJ.js.map +1 -0
- package/dist/chunk-XLY3REL3.js +165 -0
- package/dist/chunk-XLY3REL3.js.map +1 -0
- package/dist/{chunk-4B5RO2YV.js → chunk-YZMNEIFI.js} +33 -43
- package/dist/chunk-YZMNEIFI.js.map +1 -0
- package/dist/chunk-ZESTWGJT.js +116 -0
- package/dist/chunk-ZESTWGJT.js.map +1 -0
- package/dist/chunk-ZMW6KQX2.js +103 -0
- package/dist/chunk-ZMW6KQX2.js.map +1 -0
- package/dist/cli-6CPFJGRZ.js +139 -0
- package/dist/cli-6CPFJGRZ.js.map +1 -0
- package/dist/client-B27SN5QG.js +15 -0
- package/dist/client-EYOTW3JU.js +19 -0
- package/dist/{config-IBS6KOLQ.js → config-G3CSGI7P.js} +21 -34
- package/dist/config-G3CSGI7P.js.map +1 -0
- package/dist/detect-H5OPI7GD.js +17 -0
- package/dist/detect-H5OPI7GD.js.map +1 -0
- package/dist/detect-providers-AZ6DEQU7.js +26 -0
- package/dist/detect-providers-AZ6DEQU7.js.map +1 -0
- package/dist/doctor-RHHWJTMB.js +258 -0
- package/dist/doctor-RHHWJTMB.js.map +1 -0
- package/dist/executor-A5C5KDLP.js +1454 -0
- package/dist/executor-A5C5KDLP.js.map +1 -0
- package/dist/init-ARJROOWV.js +198 -0
- package/dist/init-ARJROOWV.js.map +1 -0
- package/dist/init-wizard-XNFOZCEB.js +294 -0
- package/dist/init-wizard-XNFOZCEB.js.map +1 -0
- package/dist/llm-XJFHRFHB.js +17 -0
- package/dist/llm-XJFHRFHB.js.map +1 -0
- package/dist/loader-GKXR5ONU.js +28 -0
- package/dist/loader-GKXR5ONU.js.map +1 -0
- package/dist/loader-PZ7ZRSA4.js +22 -0
- package/dist/loader-PZ7ZRSA4.js.map +1 -0
- package/dist/{chunk-F7PGDD2X.js → logs-LXHPDKUA.js} +74 -5
- package/dist/logs-LXHPDKUA.js.map +1 -0
- package/dist/machine-id-RCM7TXPJ.js +13 -0
- package/dist/machine-id-RCM7TXPJ.js.map +1 -0
- package/dist/main-PVX6R3I6.js +5065 -0
- package/dist/main-PVX6R3I6.js.map +1 -0
- package/dist/openai-embeddings-ST3B6GW7.js +14 -0
- package/dist/openai-embeddings-ST3B6GW7.js.map +1 -0
- package/dist/openrouter-HJHOO3EO.js +14 -0
- package/dist/openrouter-HJHOO3EO.js.map +1 -0
- package/dist/post-compact-LR3DSGT3.js +26 -0
- package/dist/post-compact-LR3DSGT3.js.map +1 -0
- package/dist/post-tool-use-SOFVNFU3.js +56 -0
- package/dist/post-tool-use-SOFVNFU3.js.map +1 -0
- package/dist/post-tool-use-failure-2CZZZASB.js +28 -0
- package/dist/post-tool-use-failure-2CZZZASB.js.map +1 -0
- package/dist/pre-compact-3E3D6565.js +25 -0
- package/dist/pre-compact-3E3D6565.js.map +1 -0
- package/dist/provider-check-SOTDYLJE.js +12 -0
- package/dist/provider-check-SOTDYLJE.js.map +1 -0
- package/dist/registry-WVZG6R2R.js +25 -0
- package/dist/registry-WVZG6R2R.js.map +1 -0
- package/dist/resolution-events-UPHJJLDQ.js +15 -0
- package/dist/resolution-events-UPHJJLDQ.js.map +1 -0
- package/dist/resolve-3FEUV462.js +9 -0
- package/dist/resolve-3FEUV462.js.map +1 -0
- package/dist/{restart-UIP7US4U.js → restart-XIUFVS33.js} +10 -6
- package/dist/{restart-UIP7US4U.js.map → restart-XIUFVS33.js.map} +1 -1
- package/dist/search-VB6Z2ZXV.js +91 -0
- package/dist/search-VB6Z2ZXV.js.map +1 -0
- package/dist/{server-43KSJ65Q.js → server-AKPBRP6Z.js} +267 -524
- package/dist/server-AKPBRP6Z.js.map +1 -0
- package/dist/session-UVZS6CY5.js +69 -0
- package/dist/session-UVZS6CY5.js.map +1 -0
- package/dist/session-end-YMQ44U6Z.js +38 -0
- package/dist/session-end-YMQ44U6Z.js.map +1 -0
- package/dist/session-start-3754HF3N.js +170 -0
- package/dist/session-start-3754HF3N.js.map +1 -0
- package/dist/setup-digest-4KDSXAIV.js +15 -0
- package/dist/setup-digest-4KDSXAIV.js.map +1 -0
- package/dist/setup-llm-NWHOPJUV.js +81 -0
- package/dist/setup-llm-NWHOPJUV.js.map +1 -0
- package/dist/src/agent/definitions/agent.yaml +35 -0
- package/dist/src/agent/definitions/tasks/digest-only.yaml +84 -0
- package/dist/src/agent/definitions/tasks/extract-only.yaml +87 -0
- package/dist/src/agent/definitions/tasks/full-intelligence.yaml +472 -0
- package/dist/src/agent/definitions/tasks/graph-maintenance.yaml +92 -0
- package/dist/src/agent/definitions/tasks/review-session.yaml +132 -0
- package/dist/src/agent/definitions/tasks/supersession-sweep.yaml +86 -0
- package/dist/src/agent/definitions/tasks/title-summary.yaml +88 -0
- package/dist/src/agent/prompts/agent.md +121 -0
- package/dist/src/agent/prompts/orchestrator.md +91 -0
- package/dist/src/cli.js +1 -8
- package/dist/src/cli.js.map +1 -1
- package/dist/src/daemon/main.js +1 -8
- package/dist/src/daemon/main.js.map +1 -1
- package/dist/src/hooks/post-tool-use.js +3 -50
- package/dist/src/hooks/post-tool-use.js.map +1 -1
- package/dist/src/hooks/session-end.js +3 -32
- package/dist/src/hooks/session-end.js.map +1 -1
- package/dist/src/hooks/session-start.js +2 -8
- package/dist/src/hooks/session-start.js.map +1 -1
- package/dist/src/hooks/stop.js +3 -42
- package/dist/src/hooks/stop.js.map +1 -1
- package/dist/src/hooks/user-prompt-submit.js +3 -53
- package/dist/src/hooks/user-prompt-submit.js.map +1 -1
- package/dist/src/mcp/server.js +1 -8
- package/dist/src/mcp/server.js.map +1 -1
- package/dist/src/prompts/digest-system.md +1 -1
- package/dist/src/symbionts/manifests/claude-code.yaml +16 -0
- package/dist/src/symbionts/manifests/cursor.yaml +14 -0
- package/dist/stats-CDQXOTEC.js +94 -0
- package/dist/stats-CDQXOTEC.js.map +1 -0
- package/dist/stop-WSFGRPXZ.js +42 -0
- package/dist/stop-WSFGRPXZ.js.map +1 -0
- package/dist/stop-failure-4FR7574F.js +26 -0
- package/dist/stop-failure-4FR7574F.js.map +1 -0
- package/dist/subagent-start-7SGBXJYP.js +26 -0
- package/dist/subagent-start-7SGBXJYP.js.map +1 -0
- package/dist/subagent-stop-MRVTNX3V.js +28 -0
- package/dist/subagent-stop-MRVTNX3V.js.map +1 -0
- package/dist/task-completed-XXPYPSRV.js +27 -0
- package/dist/task-completed-XXPYPSRV.js.map +1 -0
- package/dist/team-XMHYCKFF.js +251 -0
- package/dist/team-XMHYCKFF.js.map +1 -0
- package/dist/ui/assets/index-BGbil7f1.css +1 -0
- package/dist/ui/assets/index-CPA_uq_j.js +794 -0
- package/dist/ui/favicon.svg +7 -7
- package/dist/ui/fonts/Inter-Variable.woff2 +0 -0
- package/dist/ui/fonts/JetBrainsMono-Variable.woff2 +0 -0
- package/dist/ui/fonts/Newsreader-Italic-Variable.woff2 +0 -0
- package/dist/ui/fonts/Newsreader-Variable.woff2 +0 -0
- package/dist/ui/index.html +2 -2
- package/dist/update-W3UFZU4G.js +79 -0
- package/dist/update-W3UFZU4G.js.map +1 -0
- package/dist/user-prompt-submit-LSWCYUW3.js +59 -0
- package/dist/user-prompt-submit-LSWCYUW3.js.map +1 -0
- package/dist/{verify-X272WGBD.js → verify-O7TQ5DDY.js} +17 -22
- package/dist/verify-O7TQ5DDY.js.map +1 -0
- package/dist/{version-XE4GYTBV.js → version-VWWY7SPQ.js} +3 -4
- package/dist/version-VWWY7SPQ.js.map +1 -0
- package/hooks/hooks.json +82 -5
- package/package.json +6 -3
- package/skills/myco/SKILL.md +10 -10
- package/skills/myco/references/cli-usage.md +15 -13
- package/skills/myco/references/vault-status.md +3 -3
- package/skills/myco/references/wisdom.md +4 -4
- package/skills/myco-curate/SKILL.md +86 -0
- package/dist/chunk-4B5RO2YV.js.map +0 -1
- package/dist/chunk-4RMSHZE4.js +0 -107
- package/dist/chunk-4RMSHZE4.js.map +0 -1
- package/dist/chunk-54WVLTKD.js.map +0 -1
- package/dist/chunk-5LMRZDH3.js +0 -65
- package/dist/chunk-5LMRZDH3.js.map +0 -1
- package/dist/chunk-6FQISQNA.js +0 -61
- package/dist/chunk-6FQISQNA.js.map +0 -1
- package/dist/chunk-DYDBF5W6.js +0 -147
- package/dist/chunk-DYDBF5W6.js.map +0 -1
- package/dist/chunk-ERG2IEWX.js.map +0 -1
- package/dist/chunk-F7GAYVWF.js.map +0 -1
- package/dist/chunk-F7PGDD2X.js.map +0 -1
- package/dist/chunk-GENQ5QGP.js +0 -37
- package/dist/chunk-GENQ5QGP.js.map +0 -1
- package/dist/chunk-HIN3UVOG.js.map +0 -1
- package/dist/chunk-HYVT345Y.js +0 -159
- package/dist/chunk-HYVT345Y.js.map +0 -1
- package/dist/chunk-LEK6DEAE.js +0 -113
- package/dist/chunk-LEK6DEAE.js.map +0 -1
- package/dist/chunk-MDLSAFPP.js +0 -99
- package/dist/chunk-MDLSAFPP.js.map +0 -1
- package/dist/chunk-N33KUCFP.js.map +0 -1
- package/dist/chunk-O6TBHGVO.js +0 -168
- package/dist/chunk-O6TBHGVO.js.map +0 -1
- package/dist/chunk-OEGZ5YTJ.js +0 -56
- package/dist/chunk-OEGZ5YTJ.js.map +0 -1
- package/dist/chunk-P723N2LP.js +0 -147
- package/dist/chunk-P723N2LP.js.map +0 -1
- package/dist/chunk-RGVBGTD6.js +0 -21
- package/dist/chunk-RGVBGTD6.js.map +0 -1
- package/dist/chunk-TK7A4RX7.js +0 -1085
- package/dist/chunk-TK7A4RX7.js.map +0 -1
- package/dist/chunk-TWSTAVLO.js +0 -132
- package/dist/chunk-TWSTAVLO.js.map +0 -1
- package/dist/chunk-V6BJVYNH.js +0 -4423
- package/dist/chunk-V6BJVYNH.js.map +0 -1
- package/dist/chunk-XH34FX4C.js +0 -43
- package/dist/chunk-XH34FX4C.js.map +0 -1
- package/dist/chunk-YRIIBPJD.js +0 -86
- package/dist/chunk-YRIIBPJD.js.map +0 -1
- package/dist/cli-OJYHLO4Y.js +0 -97
- package/dist/cli-OJYHLO4Y.js.map +0 -1
- package/dist/client-SS3C5MF6.js +0 -12
- package/dist/config-IBS6KOLQ.js.map +0 -1
- package/dist/curate-4CKEMOPV.js +0 -78
- package/dist/curate-4CKEMOPV.js.map +0 -1
- package/dist/detect-providers-LFIVJYQO.js +0 -35
- package/dist/detect-providers-LFIVJYQO.js.map +0 -1
- package/dist/digest-ZLARHLLY.js +0 -85
- package/dist/digest-ZLARHLLY.js.map +0 -1
- package/dist/init-3LVKVQ4L.js +0 -109
- package/dist/init-3LVKVQ4L.js.map +0 -1
- package/dist/logs-6CWVP574.js +0 -84
- package/dist/logs-6CWVP574.js.map +0 -1
- package/dist/main-RB727YRP.js +0 -5836
- package/dist/main-RB727YRP.js.map +0 -1
- package/dist/rebuild-QWVVCBCZ.js +0 -64
- package/dist/rebuild-QWVVCBCZ.js.map +0 -1
- package/dist/reprocess-YG3WLUI2.js +0 -79
- package/dist/reprocess-YG3WLUI2.js.map +0 -1
- package/dist/search-BQLBW5CS.js +0 -120
- package/dist/search-BQLBW5CS.js.map +0 -1
- package/dist/server-43KSJ65Q.js.map +0 -1
- package/dist/session-F326AWCH.js +0 -44
- package/dist/session-F326AWCH.js.map +0 -1
- package/dist/session-start-6SHGT2AW.js +0 -192
- package/dist/session-start-6SHGT2AW.js.map +0 -1
- package/dist/setup-digest-X735EZSD.js +0 -15
- package/dist/setup-llm-QBSTQO7N.js +0 -15
- package/dist/src/prompts/classification.md +0 -43
- package/dist/stats-QBLIEFWL.js +0 -58
- package/dist/stats-QBLIEFWL.js.map +0 -1
- package/dist/templates-XPRBOWCE.js +0 -38
- package/dist/templates-XPRBOWCE.js.map +0 -1
- package/dist/ui/assets/index-CjWGVHhF.css +0 -1
- package/dist/ui/assets/index-Cq-H7wgE.js +0 -369
- package/dist/verify-X272WGBD.js.map +0 -1
- package/skills/setup/SKILL.md +0 -174
- package/skills/setup/references/model-recommendations.md +0 -83
- /package/dist/{chunk-4DYD4HHG.js.map → chunk-5SDH75YC.js.map} +0 -0
- /package/dist/{client-SS3C5MF6.js.map → chunk-E4VLWIJC.js.map} +0 -0
- /package/dist/{setup-digest-X735EZSD.js.map → chunk-IB76KGBY.js.map} +0 -0
- /package/dist/{chunk-AHZN4Z34.js.map → chunk-J4RVYUH4.js.map} +0 -0
- /package/dist/{setup-llm-QBSTQO7N.js.map → client-B27SN5QG.js.map} +0 -0
- /package/dist/{version-XE4GYTBV.js.map → client-EYOTW3JU.js.map} +0 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
|
+
|
|
3
|
+
// src/utils/find-package-root.ts
|
|
4
|
+
import fs from "fs";
|
|
5
|
+
import path from "path";
|
|
6
|
+
var ANCESTOR_WALK_LIMIT = 5;
|
|
7
|
+
function findPackageRoot(startDir) {
|
|
8
|
+
let dir = startDir;
|
|
9
|
+
for (let i = 0; i < ANCESTOR_WALK_LIMIT; i++) {
|
|
10
|
+
if (fs.existsSync(path.join(dir, "package.json"))) return dir;
|
|
11
|
+
dir = path.dirname(dir);
|
|
12
|
+
}
|
|
13
|
+
return void 0;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export {
|
|
17
|
+
findPackageRoot
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=chunk-LPUQPDC2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/find-package-root.ts"],"sourcesContent":["/**\n * Walk up from a starting directory to find the nearest ancestor\n * containing package.json. Used by multiple modules that need to\n * locate the package root after tsup code-splitting moves chunks\n * to unpredictable locations within dist/.\n */\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nconst ANCESTOR_WALK_LIMIT = 5;\n\n/**\n * Find the nearest ancestor directory containing package.json.\n * Returns undefined if no package.json is found within ANCESTOR_WALK_LIMIT levels.\n */\nexport function findPackageRoot(startDir: string): string | undefined {\n let dir = startDir;\n for (let i = 0; i < ANCESTOR_WALK_LIMIT; i++) {\n if (fs.existsSync(path.join(dir, 'package.json'))) return dir;\n dir = path.dirname(dir);\n }\n return undefined;\n}\n"],"mappings":";;;AAMA,OAAO,QAAQ;AACf,OAAO,UAAU;AAEjB,IAAM,sBAAsB;AAMrB,SAAS,gBAAgB,UAAsC;AACpE,MAAI,MAAM;AACV,WAAS,IAAI,GAAG,IAAI,qBAAqB,KAAK;AAC5C,QAAI,GAAG,WAAW,KAAK,KAAK,KAAK,cAAc,CAAC,EAAG,QAAO;AAC1D,UAAM,KAAK,QAAQ,GAAG;AAAA,EACxB;AACA,SAAO;AACT;","names":[]}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
|
+
|
|
3
|
+
// src/config/updates.ts
|
|
4
|
+
function withValue(config, dotPath, value) {
|
|
5
|
+
const clone = structuredClone(config);
|
|
6
|
+
const segments = dotPath.split(".");
|
|
7
|
+
let current = clone;
|
|
8
|
+
for (let i = 0; i < segments.length - 1; i++) {
|
|
9
|
+
const segment = segments[i];
|
|
10
|
+
if (current[segment] === void 0 || current[segment] === null || typeof current[segment] !== "object") {
|
|
11
|
+
current[segment] = {};
|
|
12
|
+
}
|
|
13
|
+
current = current[segment];
|
|
14
|
+
}
|
|
15
|
+
current[segments[segments.length - 1]] = value;
|
|
16
|
+
return clone;
|
|
17
|
+
}
|
|
18
|
+
function withTaskConfig(config, taskId, update) {
|
|
19
|
+
const tasks = { ...config.agent.tasks ?? {} };
|
|
20
|
+
const entry = { ...tasks[taskId] ?? {} };
|
|
21
|
+
if ("provider" in update) {
|
|
22
|
+
if (update.provider === null) {
|
|
23
|
+
delete entry.provider;
|
|
24
|
+
} else if (update.provider !== void 0) {
|
|
25
|
+
entry.provider = { ...update.provider };
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
if ("model" in update) {
|
|
29
|
+
if (update.model === null) delete entry.model;
|
|
30
|
+
else if (update.model !== void 0) entry.model = update.model;
|
|
31
|
+
}
|
|
32
|
+
if ("maxTurns" in update) {
|
|
33
|
+
if (update.maxTurns === null) delete entry.maxTurns;
|
|
34
|
+
else if (update.maxTurns !== void 0) entry.maxTurns = update.maxTurns;
|
|
35
|
+
}
|
|
36
|
+
if ("timeoutSeconds" in update) {
|
|
37
|
+
if (update.timeoutSeconds === null) delete entry.timeoutSeconds;
|
|
38
|
+
else if (update.timeoutSeconds !== void 0) entry.timeoutSeconds = update.timeoutSeconds;
|
|
39
|
+
}
|
|
40
|
+
if ("phases" in update) {
|
|
41
|
+
if (update.phases === null) {
|
|
42
|
+
delete entry.phases;
|
|
43
|
+
} else if (update.phases !== void 0) {
|
|
44
|
+
const phases = { ...entry.phases ?? {} };
|
|
45
|
+
for (const [phaseName, phaseValue] of Object.entries(update.phases)) {
|
|
46
|
+
if (phaseValue === null) {
|
|
47
|
+
delete phases[phaseName];
|
|
48
|
+
} else {
|
|
49
|
+
const pe = { ...phases[phaseName] ?? {} };
|
|
50
|
+
if ("provider" in phaseValue) {
|
|
51
|
+
if (phaseValue.provider === null) delete pe.provider;
|
|
52
|
+
else if (phaseValue.provider !== void 0) pe.provider = { ...phaseValue.provider };
|
|
53
|
+
}
|
|
54
|
+
if ("model" in phaseValue) {
|
|
55
|
+
if (phaseValue.model === null) delete pe.model;
|
|
56
|
+
else if (phaseValue.model !== void 0) pe.model = phaseValue.model;
|
|
57
|
+
}
|
|
58
|
+
if ("maxTurns" in phaseValue) {
|
|
59
|
+
if (phaseValue.maxTurns === null) delete pe.maxTurns;
|
|
60
|
+
else if (phaseValue.maxTurns !== void 0) pe.maxTurns = phaseValue.maxTurns;
|
|
61
|
+
}
|
|
62
|
+
phases[phaseName] = pe;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (Object.keys(phases).length === 0) {
|
|
66
|
+
delete entry.phases;
|
|
67
|
+
} else {
|
|
68
|
+
entry.phases = phases;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
if (Object.keys(entry).length === 0) {
|
|
73
|
+
delete tasks[taskId];
|
|
74
|
+
} else {
|
|
75
|
+
tasks[taskId] = entry;
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
...config,
|
|
79
|
+
agent: {
|
|
80
|
+
...config.agent,
|
|
81
|
+
tasks: Object.keys(tasks).length > 0 ? tasks : void 0
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
function withEmbedding(config, updates) {
|
|
86
|
+
return {
|
|
87
|
+
...config,
|
|
88
|
+
embedding: { ...config.embedding, ...updates }
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export {
|
|
93
|
+
withValue,
|
|
94
|
+
withTaskConfig,
|
|
95
|
+
withEmbedding
|
|
96
|
+
};
|
|
97
|
+
//# sourceMappingURL=chunk-M5XWW7UI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/config/updates.ts"],"sourcesContent":["import type { MycoConfig, EmbeddingProviderConfig, ContextConfig, TaskProviderOverride, PhaseOverride } from './schema.js';\n\n/**\n * Set a value at a dot-separated path, returning a new config object.\n * Creates intermediate objects along the path as needed.\n */\nexport function withValue(config: MycoConfig, dotPath: string, value: unknown): MycoConfig {\n const clone = structuredClone(config) as Record<string, unknown>;\n const segments = dotPath.split('.');\n let current: Record<string, unknown> = clone;\n\n for (let i = 0; i < segments.length - 1; i++) {\n const segment = segments[i];\n if (current[segment] === undefined || current[segment] === null || typeof current[segment] !== 'object') {\n current[segment] = {};\n }\n current = current[segment] as Record<string, unknown>;\n }\n\n current[segments[segments.length - 1]] = value;\n\n return clone as unknown as MycoConfig;\n}\n\n/** Provider override shape used in task config updates. Null means delete. */\ninterface ProviderInput {\n type: 'cloud' | 'ollama' | 'lmstudio';\n model?: string;\n base_url?: string;\n context_length?: number;\n}\n\n/** Phase override input. Null fields mean delete. */\ninterface PhaseInput {\n provider?: ProviderInput | null;\n model?: string | null;\n maxTurns?: number | null;\n}\n\n/** Input shape for task config updates. Null values mean \"delete this field\". */\nexport interface TaskConfigUpdate {\n provider?: ProviderInput | null;\n model?: string | null;\n maxTurns?: number | null;\n timeoutSeconds?: number | null;\n phases?: Record<string, PhaseInput | null> | null;\n}\n\n/**\n * Apply partial task config updates, returning a new config object.\n * Null values delete fields. Empty task entries and phase maps are cleaned up.\n */\nexport function withTaskConfig(\n config: MycoConfig,\n taskId: string,\n update: TaskConfigUpdate,\n): MycoConfig {\n const tasks = { ...(config.agent.tasks ?? {}) };\n const entry: TaskProviderOverride = { ...(tasks[taskId] ?? {}) };\n\n // Apply top-level fields\n if ('provider' in update) {\n if (update.provider === null) {\n delete entry.provider;\n } else if (update.provider !== undefined) {\n entry.provider = { ...update.provider };\n }\n }\n\n if ('model' in update) {\n if (update.model === null) delete entry.model;\n else if (update.model !== undefined) entry.model = update.model;\n }\n\n if ('maxTurns' in update) {\n if (update.maxTurns === null) delete entry.maxTurns;\n else if (update.maxTurns !== undefined) entry.maxTurns = update.maxTurns;\n }\n\n if ('timeoutSeconds' in update) {\n if (update.timeoutSeconds === null) delete entry.timeoutSeconds;\n else if (update.timeoutSeconds !== undefined) entry.timeoutSeconds = update.timeoutSeconds;\n }\n\n // Apply phase overrides\n if ('phases' in update) {\n if (update.phases === null) {\n delete entry.phases;\n } else if (update.phases !== undefined) {\n const phases: Record<string, PhaseOverride> = { ...(entry.phases ?? {}) };\n\n for (const [phaseName, phaseValue] of Object.entries(update.phases)) {\n if (phaseValue === null) {\n delete phases[phaseName];\n } else {\n const pe: PhaseOverride = { ...(phases[phaseName] ?? {}) };\n if ('provider' in phaseValue) {\n if (phaseValue.provider === null) delete pe.provider;\n else if (phaseValue.provider !== undefined) pe.provider = { ...phaseValue.provider };\n }\n if ('model' in phaseValue) {\n if (phaseValue.model === null) delete pe.model;\n else if (phaseValue.model !== undefined) pe.model = phaseValue.model;\n }\n if ('maxTurns' in phaseValue) {\n if (phaseValue.maxTurns === null) delete pe.maxTurns;\n else if (phaseValue.maxTurns !== undefined) pe.maxTurns = phaseValue.maxTurns;\n }\n phases[phaseName] = pe;\n }\n }\n\n // Clean up empty phases map\n if (Object.keys(phases).length === 0) {\n delete entry.phases;\n } else {\n entry.phases = phases;\n }\n }\n }\n\n // Clean up empty task entry\n if (Object.keys(entry).length === 0) {\n delete tasks[taskId];\n } else {\n tasks[taskId] = entry;\n }\n\n return {\n ...config,\n agent: {\n ...config.agent,\n tasks: Object.keys(tasks).length > 0 ? tasks : undefined,\n },\n };\n}\n\n/**\n * Merge partial embedding updates into config, returning a new config object.\n */\nexport function withEmbedding(\n config: MycoConfig,\n updates: Partial<EmbeddingProviderConfig>,\n): MycoConfig {\n return {\n ...config,\n embedding: { ...config.embedding, ...updates },\n };\n}\n\n/**\n * Merge partial context injection updates into config, returning a new config object.\n */\nexport function withContext(\n config: MycoConfig,\n updates: Partial<ContextConfig>,\n): MycoConfig {\n return {\n ...config,\n context: { ...config.context, ...updates },\n };\n}\n"],"mappings":";;;AAMO,SAAS,UAAU,QAAoB,SAAiB,OAA4B;AACzF,QAAM,QAAQ,gBAAgB,MAAM;AACpC,QAAM,WAAW,QAAQ,MAAM,GAAG;AAClC,MAAI,UAAmC;AAEvC,WAAS,IAAI,GAAG,IAAI,SAAS,SAAS,GAAG,KAAK;AAC5C,UAAM,UAAU,SAAS,CAAC;AAC1B,QAAI,QAAQ,OAAO,MAAM,UAAa,QAAQ,OAAO,MAAM,QAAQ,OAAO,QAAQ,OAAO,MAAM,UAAU;AACvG,cAAQ,OAAO,IAAI,CAAC;AAAA,IACtB;AACA,cAAU,QAAQ,OAAO;AAAA,EAC3B;AAEA,UAAQ,SAAS,SAAS,SAAS,CAAC,CAAC,IAAI;AAEzC,SAAO;AACT;AA8BO,SAAS,eACd,QACA,QACA,QACY;AACZ,QAAM,QAAQ,EAAE,GAAI,OAAO,MAAM,SAAS,CAAC,EAAG;AAC9C,QAAM,QAA8B,EAAE,GAAI,MAAM,MAAM,KAAK,CAAC,EAAG;AAG/D,MAAI,cAAc,QAAQ;AACxB,QAAI,OAAO,aAAa,MAAM;AAC5B,aAAO,MAAM;AAAA,IACf,WAAW,OAAO,aAAa,QAAW;AACxC,YAAM,WAAW,EAAE,GAAG,OAAO,SAAS;AAAA,IACxC;AAAA,EACF;AAEA,MAAI,WAAW,QAAQ;AACrB,QAAI,OAAO,UAAU,KAAM,QAAO,MAAM;AAAA,aAC/B,OAAO,UAAU,OAAW,OAAM,QAAQ,OAAO;AAAA,EAC5D;AAEA,MAAI,cAAc,QAAQ;AACxB,QAAI,OAAO,aAAa,KAAM,QAAO,MAAM;AAAA,aAClC,OAAO,aAAa,OAAW,OAAM,WAAW,OAAO;AAAA,EAClE;AAEA,MAAI,oBAAoB,QAAQ;AAC9B,QAAI,OAAO,mBAAmB,KAAM,QAAO,MAAM;AAAA,aACxC,OAAO,mBAAmB,OAAW,OAAM,iBAAiB,OAAO;AAAA,EAC9E;AAGA,MAAI,YAAY,QAAQ;AACtB,QAAI,OAAO,WAAW,MAAM;AAC1B,aAAO,MAAM;AAAA,IACf,WAAW,OAAO,WAAW,QAAW;AACtC,YAAM,SAAwC,EAAE,GAAI,MAAM,UAAU,CAAC,EAAG;AAExE,iBAAW,CAAC,WAAW,UAAU,KAAK,OAAO,QAAQ,OAAO,MAAM,GAAG;AACnE,YAAI,eAAe,MAAM;AACvB,iBAAO,OAAO,SAAS;AAAA,QACzB,OAAO;AACL,gBAAM,KAAoB,EAAE,GAAI,OAAO,SAAS,KAAK,CAAC,EAAG;AACzD,cAAI,cAAc,YAAY;AAC5B,gBAAI,WAAW,aAAa,KAAM,QAAO,GAAG;AAAA,qBACnC,WAAW,aAAa,OAAW,IAAG,WAAW,EAAE,GAAG,WAAW,SAAS;AAAA,UACrF;AACA,cAAI,WAAW,YAAY;AACzB,gBAAI,WAAW,UAAU,KAAM,QAAO,GAAG;AAAA,qBAChC,WAAW,UAAU,OAAW,IAAG,QAAQ,WAAW;AAAA,UACjE;AACA,cAAI,cAAc,YAAY;AAC5B,gBAAI,WAAW,aAAa,KAAM,QAAO,GAAG;AAAA,qBACnC,WAAW,aAAa,OAAW,IAAG,WAAW,WAAW;AAAA,UACvE;AACA,iBAAO,SAAS,IAAI;AAAA,QACtB;AAAA,MACF;AAGA,UAAI,OAAO,KAAK,MAAM,EAAE,WAAW,GAAG;AACpC,eAAO,MAAM;AAAA,MACf,OAAO;AACL,cAAM,SAAS;AAAA,MACjB;AAAA,IACF;AAAA,EACF;AAGA,MAAI,OAAO,KAAK,KAAK,EAAE,WAAW,GAAG;AACnC,WAAO,MAAM,MAAM;AAAA,EACrB,OAAO;AACL,UAAM,MAAM,IAAI;AAAA,EAClB;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,OAAO;AAAA,MACL,GAAG,OAAO;AAAA,MACV,OAAO,OAAO,KAAK,KAAK,EAAE,SAAS,IAAI,QAAQ;AAAA,IACjD;AAAA,EACF;AACF;AAKO,SAAS,cACd,QACA,SACY;AACZ,SAAO;AAAA,IACL,GAAG;AAAA,IACH,WAAW,EAAE,GAAG,OAAO,WAAW,GAAG,QAAQ;AAAA,EAC/C;AACF;","names":[]}
|
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
require_dist
|
|
4
|
+
} from "./chunk-D7TYRPRM.js";
|
|
5
|
+
import {
|
|
6
|
+
external_exports
|
|
7
|
+
} from "./chunk-KH64DHOY.js";
|
|
8
|
+
import {
|
|
9
|
+
__toESM
|
|
10
|
+
} from "./chunk-PZUWP5VK.js";
|
|
11
|
+
|
|
12
|
+
// src/config/loader.ts
|
|
13
|
+
var import_yaml = __toESM(require_dist(), 1);
|
|
14
|
+
import fs2 from "fs";
|
|
15
|
+
import path2 from "path";
|
|
16
|
+
|
|
17
|
+
// src/config/schema.ts
|
|
18
|
+
var EmbeddingProviderSchema = external_exports.object({
|
|
19
|
+
provider: external_exports.enum(["ollama", "openai-compatible", "openrouter", "openai"]).default("ollama"),
|
|
20
|
+
model: external_exports.string().default("bge-m3"),
|
|
21
|
+
base_url: external_exports.string().url().optional()
|
|
22
|
+
});
|
|
23
|
+
var DaemonSchema = external_exports.object({
|
|
24
|
+
port: external_exports.number().int().min(1024).max(65535).nullable().default(null),
|
|
25
|
+
log_level: external_exports.enum(["debug", "info", "warn", "error"]).default("info"),
|
|
26
|
+
log_retention_days: external_exports.number().int().min(1).max(365).default(30)
|
|
27
|
+
});
|
|
28
|
+
var CaptureSchema = external_exports.object({
|
|
29
|
+
transcript_paths: external_exports.array(external_exports.string()).default([]),
|
|
30
|
+
plan_dirs: external_exports.array(external_exports.string()).default([]),
|
|
31
|
+
artifact_extensions: external_exports.array(external_exports.string()).default([".md"]),
|
|
32
|
+
buffer_max_events: external_exports.number().int().positive().default(500)
|
|
33
|
+
});
|
|
34
|
+
var ProviderOverrideSchema = external_exports.object({
|
|
35
|
+
type: external_exports.enum(["cloud", "ollama", "lmstudio"]),
|
|
36
|
+
base_url: external_exports.string().optional(),
|
|
37
|
+
model: external_exports.string().optional(),
|
|
38
|
+
/** Context window size for local models (Ollama num_ctx, LM Studio context_length). */
|
|
39
|
+
context_length: external_exports.number().int().positive().optional()
|
|
40
|
+
});
|
|
41
|
+
var PhaseOverrideSchema = external_exports.object({
|
|
42
|
+
provider: ProviderOverrideSchema.optional(),
|
|
43
|
+
model: external_exports.string().optional(),
|
|
44
|
+
maxTurns: external_exports.number().int().positive().optional()
|
|
45
|
+
});
|
|
46
|
+
var TaskProviderOverrideSchema = external_exports.object({
|
|
47
|
+
provider: ProviderOverrideSchema.optional(),
|
|
48
|
+
model: external_exports.string().optional(),
|
|
49
|
+
maxTurns: external_exports.number().int().positive().optional(),
|
|
50
|
+
timeoutSeconds: external_exports.number().int().positive().optional(),
|
|
51
|
+
phases: external_exports.record(external_exports.string(), PhaseOverrideSchema).optional()
|
|
52
|
+
});
|
|
53
|
+
var ContextSchema = external_exports.object({
|
|
54
|
+
/** Which digest tier to inject at session start. */
|
|
55
|
+
digest_tier: external_exports.number().int().default(5e3),
|
|
56
|
+
/** Enable semantic spore search on each user prompt. */
|
|
57
|
+
prompt_search: external_exports.boolean().default(true),
|
|
58
|
+
/** Max spores to inject per prompt (0-10). */
|
|
59
|
+
prompt_max_spores: external_exports.number().int().min(0).max(10).default(3)
|
|
60
|
+
});
|
|
61
|
+
var AgentSchema = external_exports.object({
|
|
62
|
+
/** Whether the daemon automatically runs the agent on unprocessed batches. */
|
|
63
|
+
auto_run: external_exports.boolean().default(true),
|
|
64
|
+
/** Seconds between agent timer checks. */
|
|
65
|
+
interval_seconds: external_exports.number().int().positive().default(300),
|
|
66
|
+
/** Number of batches between event-driven summary triggers (0 to disable). */
|
|
67
|
+
summary_batch_interval: external_exports.number().int().min(0).default(5),
|
|
68
|
+
/** Global default provider — applies to all tasks unless overridden per-task. */
|
|
69
|
+
provider: ProviderOverrideSchema.optional(),
|
|
70
|
+
/** Global default model — applies to all tasks unless overridden per-task. */
|
|
71
|
+
model: external_exports.string().optional(),
|
|
72
|
+
/** Per-task overrides keyed by task name. */
|
|
73
|
+
tasks: external_exports.record(external_exports.string(), TaskProviderOverrideSchema).optional()
|
|
74
|
+
});
|
|
75
|
+
var BackupSchema = external_exports.object({
|
|
76
|
+
/** Override directory for backup files (absolute path). When unset, defaults to {vaultDir}/backups. */
|
|
77
|
+
dir: external_exports.string().optional()
|
|
78
|
+
});
|
|
79
|
+
var TeamSchema = external_exports.object({
|
|
80
|
+
/** Whether team sync is enabled. */
|
|
81
|
+
enabled: external_exports.boolean().default(false),
|
|
82
|
+
/** Cloudflare Worker URL for team sync. */
|
|
83
|
+
worker_url: external_exports.string().url().optional(),
|
|
84
|
+
/** Team identifier for sync grouping. */
|
|
85
|
+
team_id: external_exports.string().optional(),
|
|
86
|
+
/** Sync interval in minutes. */
|
|
87
|
+
interval_minutes: external_exports.number().int().min(1).max(1440).default(15)
|
|
88
|
+
});
|
|
89
|
+
var MycoConfigSchema = external_exports.preprocess(
|
|
90
|
+
(raw) => {
|
|
91
|
+
if (raw && typeof raw === "object" && "curation" in raw && !("agent" in raw)) {
|
|
92
|
+
const { curation, ...rest } = raw;
|
|
93
|
+
return { ...rest, agent: curation };
|
|
94
|
+
}
|
|
95
|
+
return raw;
|
|
96
|
+
},
|
|
97
|
+
external_exports.object({
|
|
98
|
+
version: external_exports.literal(3),
|
|
99
|
+
config_version: external_exports.number().int().nonnegative().default(0),
|
|
100
|
+
embedding: EmbeddingProviderSchema.default(() => EmbeddingProviderSchema.parse({})),
|
|
101
|
+
daemon: DaemonSchema.default(() => DaemonSchema.parse({})),
|
|
102
|
+
capture: CaptureSchema.default(() => CaptureSchema.parse({})),
|
|
103
|
+
agent: AgentSchema.default(() => AgentSchema.parse({})),
|
|
104
|
+
context: ContextSchema.default(() => ContextSchema.parse({})),
|
|
105
|
+
backup: BackupSchema.default(() => BackupSchema.parse({})),
|
|
106
|
+
team: TeamSchema.default(() => TeamSchema.parse({}))
|
|
107
|
+
})
|
|
108
|
+
);
|
|
109
|
+
|
|
110
|
+
// src/config/migrations.ts
|
|
111
|
+
import fs from "fs";
|
|
112
|
+
import path from "path";
|
|
113
|
+
var MEMORY_TYPE_PATTERN = /type:\s*["']?memory["']?/g;
|
|
114
|
+
var MIGRATIONS = [
|
|
115
|
+
{
|
|
116
|
+
version: 1,
|
|
117
|
+
name: "rename-memories-to-spores",
|
|
118
|
+
migrate: (doc, vaultDir) => {
|
|
119
|
+
const context = doc.context;
|
|
120
|
+
const layers = context?.layers;
|
|
121
|
+
if (layers && "memories" in layers && !("spores" in layers)) {
|
|
122
|
+
layers.spores = layers.memories;
|
|
123
|
+
delete layers.memories;
|
|
124
|
+
}
|
|
125
|
+
const memoriesDir = path.join(vaultDir, "memories");
|
|
126
|
+
const sporesDir = path.join(vaultDir, "spores");
|
|
127
|
+
if (!fs.existsSync(memoriesDir)) return;
|
|
128
|
+
if (fs.existsSync(sporesDir)) {
|
|
129
|
+
const moveRemaining = (srcDir, destDir) => {
|
|
130
|
+
for (const entry of fs.readdirSync(srcDir, { withFileTypes: true })) {
|
|
131
|
+
const srcPath = path.join(srcDir, entry.name);
|
|
132
|
+
const destPath = path.join(destDir, entry.name);
|
|
133
|
+
if (entry.isDirectory()) {
|
|
134
|
+
if (!fs.existsSync(destPath)) fs.mkdirSync(destPath, { recursive: true });
|
|
135
|
+
moveRemaining(srcPath, destPath);
|
|
136
|
+
} else if (!fs.existsSync(destPath)) {
|
|
137
|
+
fs.renameSync(srcPath, destPath);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
moveRemaining(memoriesDir, sporesDir);
|
|
142
|
+
fs.rmSync(memoriesDir, { recursive: true, force: true });
|
|
143
|
+
} else {
|
|
144
|
+
fs.renameSync(memoriesDir, sporesDir);
|
|
145
|
+
}
|
|
146
|
+
const walkUpdate = (dir) => {
|
|
147
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
148
|
+
const fullPath = path.join(dir, entry.name);
|
|
149
|
+
if (entry.isDirectory()) {
|
|
150
|
+
walkUpdate(fullPath);
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
if (!entry.name.endsWith(".md")) continue;
|
|
154
|
+
const content = fs.readFileSync(fullPath, "utf-8");
|
|
155
|
+
MEMORY_TYPE_PATTERN.lastIndex = 0;
|
|
156
|
+
if (MEMORY_TYPE_PATTERN.test(content)) {
|
|
157
|
+
MEMORY_TYPE_PATTERN.lastIndex = 0;
|
|
158
|
+
fs.writeFileSync(fullPath, content.replace(MEMORY_TYPE_PATTERN, "type: spore"));
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
walkUpdate(sporesDir);
|
|
163
|
+
const walkLinks = (dir) => {
|
|
164
|
+
for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
|
|
165
|
+
const fullPath = path.join(dir, entry.name);
|
|
166
|
+
if (entry.isDirectory()) {
|
|
167
|
+
walkLinks(fullPath);
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
if (!entry.name.endsWith(".md")) continue;
|
|
171
|
+
const content = fs.readFileSync(fullPath, "utf-8");
|
|
172
|
+
if (content.includes("memories/")) {
|
|
173
|
+
fs.writeFileSync(fullPath, content.replace(/memories\//g, "spores/"));
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
walkLinks(vaultDir);
|
|
178
|
+
}
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
version: 2,
|
|
182
|
+
name: "consolidation-boolean-to-object",
|
|
183
|
+
migrate: (doc) => {
|
|
184
|
+
const digest = doc.digest;
|
|
185
|
+
if (!digest) return;
|
|
186
|
+
const consolidation = digest.consolidation;
|
|
187
|
+
if (typeof consolidation === "boolean") {
|
|
188
|
+
digest.consolidation = { enabled: consolidation, max_tokens: 2048 };
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
];
|
|
193
|
+
var CURRENT_MIGRATION_VERSION = MIGRATIONS[MIGRATIONS.length - 1]?.version ?? 0;
|
|
194
|
+
function runMigrations(doc, vaultDir, log) {
|
|
195
|
+
const currentVersion = doc.config_version ?? 0;
|
|
196
|
+
let ran = false;
|
|
197
|
+
for (const migration of MIGRATIONS) {
|
|
198
|
+
if (migration.version <= currentVersion) continue;
|
|
199
|
+
migration.migrate(doc, vaultDir);
|
|
200
|
+
doc.config_version = migration.version;
|
|
201
|
+
ran = true;
|
|
202
|
+
}
|
|
203
|
+
if (ran) {
|
|
204
|
+
const from = currentVersion;
|
|
205
|
+
const to = doc.config_version ?? 0;
|
|
206
|
+
log?.(`Migrated config from v${from} to v${to}`);
|
|
207
|
+
}
|
|
208
|
+
return ran;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// src/config/loader.ts
|
|
212
|
+
var CONFIG_FILENAME = "myco.yaml";
|
|
213
|
+
function loadConfig(vaultDir) {
|
|
214
|
+
const configPath = path2.join(vaultDir, CONFIG_FILENAME);
|
|
215
|
+
if (!fs2.existsSync(configPath)) {
|
|
216
|
+
throw new Error(`myco.yaml not found in ${vaultDir}`);
|
|
217
|
+
}
|
|
218
|
+
const raw = fs2.readFileSync(configPath, "utf-8");
|
|
219
|
+
const parsed = import_yaml.default.parse(raw);
|
|
220
|
+
if (parsed.version === 1 || parsed.intelligence?.backend) {
|
|
221
|
+
throw new Error(
|
|
222
|
+
"Myco config uses v1 format. Run /myco:setup-llm to reconfigure for v2."
|
|
223
|
+
);
|
|
224
|
+
}
|
|
225
|
+
let v2Migrated = false;
|
|
226
|
+
if (parsed.version === 2) {
|
|
227
|
+
const intel = parsed.intelligence;
|
|
228
|
+
const embeddingConfig = intel?.embedding;
|
|
229
|
+
if (embeddingConfig && !parsed.embedding) {
|
|
230
|
+
if (embeddingConfig.provider === "lm-studio") {
|
|
231
|
+
embeddingConfig.provider = "openai-compatible";
|
|
232
|
+
}
|
|
233
|
+
parsed.embedding = embeddingConfig;
|
|
234
|
+
}
|
|
235
|
+
const daemon = parsed.daemon;
|
|
236
|
+
if (daemon) {
|
|
237
|
+
const { port, log_level } = daemon;
|
|
238
|
+
parsed.daemon = { port: port ?? null, log_level: log_level ?? "info" };
|
|
239
|
+
}
|
|
240
|
+
const capture = parsed.capture;
|
|
241
|
+
if (capture) {
|
|
242
|
+
const { transcript_paths, artifact_watch, plan_dirs, artifact_extensions, buffer_max_events } = capture;
|
|
243
|
+
parsed.capture = {
|
|
244
|
+
transcript_paths,
|
|
245
|
+
plan_dirs: plan_dirs ?? artifact_watch,
|
|
246
|
+
artifact_extensions,
|
|
247
|
+
buffer_max_events
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
delete parsed.intelligence;
|
|
251
|
+
delete parsed.context;
|
|
252
|
+
delete parsed.team;
|
|
253
|
+
delete parsed.digest;
|
|
254
|
+
delete parsed.pipeline;
|
|
255
|
+
parsed.version = 3;
|
|
256
|
+
v2Migrated = true;
|
|
257
|
+
process.stderr.write("[myco migration] Migrated config from v2 to v3\n");
|
|
258
|
+
}
|
|
259
|
+
const migrationsRan = runMigrations(parsed, vaultDir, (msg) => {
|
|
260
|
+
process.stderr.write(`[myco migration] ${msg}
|
|
261
|
+
`);
|
|
262
|
+
});
|
|
263
|
+
const config = MycoConfigSchema.parse(parsed);
|
|
264
|
+
const needsWrite = v2Migrated || migrationsRan || (parsed.config_version ?? 0) < CURRENT_MIGRATION_VERSION || parsed.version !== config.version;
|
|
265
|
+
if (needsWrite) {
|
|
266
|
+
const fullConfig = JSON.parse(JSON.stringify(config));
|
|
267
|
+
fs2.writeFileSync(configPath, import_yaml.default.stringify(fullConfig), "utf-8");
|
|
268
|
+
}
|
|
269
|
+
return config;
|
|
270
|
+
}
|
|
271
|
+
function saveConfig(vaultDir, config) {
|
|
272
|
+
const validated = MycoConfigSchema.parse(config);
|
|
273
|
+
const configPath = path2.join(vaultDir, CONFIG_FILENAME);
|
|
274
|
+
fs2.mkdirSync(vaultDir, { recursive: true });
|
|
275
|
+
fs2.writeFileSync(configPath, import_yaml.default.stringify(validated), "utf-8");
|
|
276
|
+
}
|
|
277
|
+
function updateConfig(vaultDir, fn) {
|
|
278
|
+
const current = loadConfig(vaultDir);
|
|
279
|
+
const updated = fn(current);
|
|
280
|
+
saveConfig(vaultDir, updated);
|
|
281
|
+
return updated;
|
|
282
|
+
}
|
|
283
|
+
function updateBackupConfig(vaultDir, backup) {
|
|
284
|
+
return updateConfig(vaultDir, (config) => ({
|
|
285
|
+
...config,
|
|
286
|
+
backup: { ...config.backup, ...backup }
|
|
287
|
+
}));
|
|
288
|
+
}
|
|
289
|
+
function updateTeamConfig(vaultDir, team) {
|
|
290
|
+
return updateConfig(vaultDir, (config) => ({
|
|
291
|
+
...config,
|
|
292
|
+
team: { ...config.team, ...team }
|
|
293
|
+
}));
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
export {
|
|
297
|
+
MycoConfigSchema,
|
|
298
|
+
CONFIG_FILENAME,
|
|
299
|
+
loadConfig,
|
|
300
|
+
saveConfig,
|
|
301
|
+
updateConfig,
|
|
302
|
+
updateBackupConfig,
|
|
303
|
+
updateTeamConfig
|
|
304
|
+
};
|
|
305
|
+
//# sourceMappingURL=chunk-MAZOVVDU.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/config/loader.ts","../src/config/schema.ts","../src/config/migrations.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport YAML from 'yaml';\nimport { MycoConfigSchema, type MycoConfig, type BackupConfig, type TeamConfig } from './schema.js';\nimport { runMigrations, CURRENT_MIGRATION_VERSION } from './migrations.js';\n\nexport const CONFIG_FILENAME = 'myco.yaml';\n\nexport function loadConfig(vaultDir: string): MycoConfig {\n const configPath = path.join(vaultDir, CONFIG_FILENAME);\n\n if (!fs.existsSync(configPath)) {\n throw new Error(`myco.yaml not found in ${vaultDir}`);\n }\n\n const raw = fs.readFileSync(configPath, 'utf-8');\n const parsed = YAML.parse(raw) as Record<string, unknown>;\n\n // Detect v1 config and guide migration\n if (parsed.version === 1 || (parsed.intelligence as Record<string, unknown>)?.backend) {\n throw new Error(\n 'Myco config uses v1 format. Run /myco:setup-llm to reconfigure for v2.',\n );\n }\n\n // --- v2 → v3 migration ---\n let v2Migrated = false;\n if (parsed.version === 2) {\n // Extract intelligence.embedding to top-level embedding\n const intel = parsed.intelligence as Record<string, unknown> | undefined;\n const embeddingConfig = intel?.embedding as Record<string, unknown> | undefined;\n if (embeddingConfig && !parsed.embedding) {\n // Map v2 'lm-studio' to v3 'openai-compatible' for embedding provider\n if (embeddingConfig.provider === 'lm-studio') {\n embeddingConfig.provider = 'openai-compatible';\n }\n parsed.embedding = embeddingConfig;\n }\n\n // Keep daemon.port and daemon.log_level, drop grace_period and max_log_size\n const daemon = parsed.daemon as Record<string, unknown> | undefined;\n if (daemon) {\n const { port, log_level } = daemon;\n parsed.daemon = { port: port ?? null, log_level: log_level ?? 'info' };\n }\n\n // Keep capture basics, drop token-related fields; migrate artifact_watch → plan_dirs\n const capture = parsed.capture as Record<string, unknown> | undefined;\n if (capture) {\n const { transcript_paths, artifact_watch, plan_dirs, artifact_extensions, buffer_max_events } = capture;\n parsed.capture = {\n transcript_paths,\n plan_dirs: plan_dirs ?? artifact_watch,\n artifact_extensions,\n buffer_max_events,\n };\n }\n\n // Drop removed top-level sections\n delete parsed.intelligence;\n delete parsed.context;\n delete parsed.team;\n delete parsed.digest;\n delete parsed.pipeline;\n\n // Set version to 3\n parsed.version = 3;\n v2Migrated = true;\n\n process.stderr.write('[myco migration] Migrated config from v2 to v3\\n');\n }\n\n // Run numbered migrations (for v3+ forward migrations)\n const migrationsRan = runMigrations(parsed, vaultDir, (msg) => {\n process.stderr.write(`[myco migration] ${msg}\\n`);\n });\n\n // Parse with Zod to fill in defaults for new config sections\n const config = MycoConfigSchema.parse(parsed);\n\n // Write back if v2→v3 migration ran, numbered migrations ran, or new defaults were added\n const needsWrite = v2Migrated\n || migrationsRan\n || (parsed.config_version as number ?? 0) < CURRENT_MIGRATION_VERSION\n || parsed.version !== config.version;\n\n if (needsWrite) {\n const fullConfig = JSON.parse(JSON.stringify(config)) as Record<string, unknown>;\n fs.writeFileSync(configPath, YAML.stringify(fullConfig), 'utf-8');\n }\n\n return config;\n}\n\nexport function saveConfig(vaultDir: string, config: MycoConfig): void {\n // Validate before writing — OAK lesson: validate on write, not just read\n const validated = MycoConfigSchema.parse(config);\n\n const configPath = path.join(vaultDir, CONFIG_FILENAME);\n fs.mkdirSync(vaultDir, { recursive: true });\n fs.writeFileSync(configPath, YAML.stringify(validated), 'utf-8');\n}\n\nexport function updateConfig(\n vaultDir: string,\n fn: (config: MycoConfig) => MycoConfig,\n): MycoConfig {\n const current = loadConfig(vaultDir);\n const updated = fn(current);\n saveConfig(vaultDir, updated);\n return updated;\n}\n\nexport function updateBackupConfig(\n vaultDir: string,\n backup: Partial<BackupConfig>,\n): MycoConfig {\n return updateConfig(vaultDir, (config) => ({\n ...config,\n backup: { ...config.backup, ...backup },\n }));\n}\n\nexport function updateTeamConfig(\n vaultDir: string,\n team: Partial<TeamConfig>,\n): MycoConfig {\n return updateConfig(vaultDir, (config) => ({\n ...config,\n team: { ...config.team, ...team },\n }));\n}\n","import { z } from 'zod';\n\nconst EmbeddingProviderSchema = z.object({\n provider: z.enum(['ollama', 'openai-compatible', 'openrouter', 'openai']).default('ollama'),\n model: z.string().default('bge-m3'),\n base_url: z.string().url().optional(),\n});\n\nconst DaemonSchema = z.object({\n port: z.number().int().min(1024).max(65535).nullable().default(null),\n log_level: z.enum(['debug', 'info', 'warn', 'error']).default('info'),\n log_retention_days: z.number().int().min(1).max(365).default(30),\n});\n\nconst CaptureSchema = z.object({\n transcript_paths: z.array(z.string()).default([]),\n plan_dirs: z.array(z.string()).default([]),\n artifact_extensions: z.array(z.string()).default(['.md']),\n buffer_max_events: z.number().int().positive().default(500),\n});\n\n/** Provider config shape used in both task-level and phase-level overrides. */\nconst ProviderOverrideSchema = z.object({\n type: z.enum(['cloud', 'ollama', 'lmstudio']),\n base_url: z.string().optional(),\n model: z.string().optional(),\n /** Context window size for local models (Ollama num_ctx, LM Studio context_length). */\n context_length: z.number().int().positive().optional(),\n});\n\n/** Per-phase overrides within a task — keyed by phase name. */\nconst PhaseOverrideSchema = z.object({\n provider: ProviderOverrideSchema.optional(),\n model: z.string().optional(),\n maxTurns: z.number().int().positive().optional(),\n});\n\n/** Per-task config override — stored in myco.yaml under agent.tasks. */\nconst TaskProviderOverrideSchema = z.object({\n provider: ProviderOverrideSchema.optional(),\n model: z.string().optional(),\n maxTurns: z.number().int().positive().optional(),\n timeoutSeconds: z.number().int().positive().optional(),\n phases: z.record(z.string(), PhaseOverrideSchema).optional(),\n});\n\nconst ContextSchema = z.object({\n /** Which digest tier to inject at session start. */\n digest_tier: z.number().int().default(5000),\n /** Enable semantic spore search on each user prompt. */\n prompt_search: z.boolean().default(true),\n /** Max spores to inject per prompt (0-10). */\n prompt_max_spores: z.number().int().min(0).max(10).default(3),\n});\n\nconst AgentSchema = z.object({\n /** Whether the daemon automatically runs the agent on unprocessed batches. */\n auto_run: z.boolean().default(true),\n /** Seconds between agent timer checks. */\n interval_seconds: z.number().int().positive().default(300),\n /** Number of batches between event-driven summary triggers (0 to disable). */\n summary_batch_interval: z.number().int().min(0).default(5),\n /** Global default provider — applies to all tasks unless overridden per-task. */\n provider: ProviderOverrideSchema.optional(),\n /** Global default model — applies to all tasks unless overridden per-task. */\n model: z.string().optional(),\n /** Per-task overrides keyed by task name. */\n tasks: z.record(z.string(), TaskProviderOverrideSchema).optional(),\n});\n\nconst BackupSchema = z.object({\n /** Override directory for backup files (absolute path). When unset, defaults to {vaultDir}/backups. */\n dir: z.string().optional(),\n});\n\nconst TeamSchema = z.object({\n /** Whether team sync is enabled. */\n enabled: z.boolean().default(false),\n /** Cloudflare Worker URL for team sync. */\n worker_url: z.string().url().optional(),\n /** Team identifier for sync grouping. */\n team_id: z.string().optional(),\n /** Sync interval in minutes. */\n interval_minutes: z.number().int().min(1).max(1440).default(15),\n});\n\nexport const MycoConfigSchema = z.preprocess(\n (raw: unknown) => {\n if (raw && typeof raw === 'object' && 'curation' in raw && !('agent' in raw)) {\n const { curation, ...rest } = raw as Record<string, unknown>;\n return { ...rest, agent: curation };\n }\n return raw;\n },\n z.object({\n version: z.literal(3),\n config_version: z.number().int().nonnegative().default(0),\n embedding: EmbeddingProviderSchema.default(() => EmbeddingProviderSchema.parse({})),\n daemon: DaemonSchema.default(() => DaemonSchema.parse({})),\n capture: CaptureSchema.default(() => CaptureSchema.parse({})),\n agent: AgentSchema.default(() => AgentSchema.parse({})),\n context: ContextSchema.default(() => ContextSchema.parse({})),\n backup: BackupSchema.default(() => BackupSchema.parse({})),\n team: TeamSchema.default(() => TeamSchema.parse({})),\n }),\n);\n\nexport type MycoConfig = z.output<typeof MycoConfigSchema>;\nexport type EmbeddingProviderConfig = z.infer<typeof EmbeddingProviderSchema>;\nexport type TaskProviderOverride = z.infer<typeof TaskProviderOverrideSchema>;\nexport type PhaseOverride = z.infer<typeof PhaseOverrideSchema>;\nexport type ContextConfig = z.infer<typeof ContextSchema>;\nexport type BackupConfig = z.infer<typeof BackupSchema>;\nexport type TeamConfig = z.infer<typeof TeamSchema>;\n","/**\n * Config and vault migrations — run once per version, tracked by config_version.\n *\n * Each migration has a version number, a name, and a function that receives\n * the raw parsed YAML doc and the vault directory. Migrations run in order\n * and are skipped if config_version is already past them.\n *\n * To add a new migration:\n * 1. Add an entry to MIGRATIONS with the next version number\n * 2. Write the migrate function — it receives the mutable doc and vaultDir\n * 3. The framework handles version tracking and writing the config back\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nexport interface Migration {\n version: number;\n name: string;\n migrate: (doc: Record<string, unknown>, vaultDir: string) => void;\n}\n\n/** Regex matching both quoted and unquoted YAML: type: memory, type: \"memory\", type: 'memory' */\nconst MEMORY_TYPE_PATTERN = /type:\\s*[\"']?memory[\"']?/g;\n\nexport const MIGRATIONS: Migration[] = [\n {\n version: 1,\n name: 'rename-memories-to-spores',\n migrate: (doc, vaultDir) => {\n // Config: rename context.layers.memories → context.layers.spores\n const context = doc.context as Record<string, unknown> | undefined;\n const layers = context?.layers as Record<string, unknown> | undefined;\n if (layers && 'memories' in layers && !('spores' in layers)) {\n layers.spores = layers.memories;\n delete layers.memories;\n }\n\n // Vault: rename memories/ directory → spores/\n const memoriesDir = path.join(vaultDir, 'memories');\n const sporesDir = path.join(vaultDir, 'spores');\n\n if (!fs.existsSync(memoriesDir)) return;\n\n if (fs.existsSync(sporesDir)) {\n // Both exist (interrupted migration) — merge remaining files\n const moveRemaining = (srcDir: string, destDir: string): void => {\n for (const entry of fs.readdirSync(srcDir, { withFileTypes: true })) {\n const srcPath = path.join(srcDir, entry.name);\n const destPath = path.join(destDir, entry.name);\n if (entry.isDirectory()) {\n if (!fs.existsSync(destPath)) fs.mkdirSync(destPath, { recursive: true });\n moveRemaining(srcPath, destPath);\n } else if (!fs.existsSync(destPath)) {\n fs.renameSync(srcPath, destPath);\n }\n }\n };\n moveRemaining(memoriesDir, sporesDir);\n fs.rmSync(memoriesDir, { recursive: true, force: true });\n } else {\n fs.renameSync(memoriesDir, sporesDir);\n }\n\n // Update frontmatter type: memory → type: spore (handles quoted and unquoted)\n const walkUpdate = (dir: string): void => {\n for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {\n const fullPath = path.join(dir, entry.name);\n if (entry.isDirectory()) { walkUpdate(fullPath); continue; }\n if (!entry.name.endsWith('.md')) continue;\n const content = fs.readFileSync(fullPath, 'utf-8');\n MEMORY_TYPE_PATTERN.lastIndex = 0;\n if (MEMORY_TYPE_PATTERN.test(content)) {\n MEMORY_TYPE_PATTERN.lastIndex = 0;\n fs.writeFileSync(fullPath, content.replace(MEMORY_TYPE_PATTERN, 'type: spore'));\n }\n }\n };\n walkUpdate(sporesDir);\n\n // Legacy: update wikilink references in Markdown files (pre-SQLite migration): [[memories/...]] → [[spores/...]]\n const walkLinks = (dir: string): void => {\n for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {\n const fullPath = path.join(dir, entry.name);\n if (entry.isDirectory()) { walkLinks(fullPath); continue; }\n if (!entry.name.endsWith('.md')) continue;\n const content = fs.readFileSync(fullPath, 'utf-8');\n if (content.includes('memories/')) {\n fs.writeFileSync(fullPath, content.replace(/memories\\//g, 'spores/'));\n }\n }\n };\n walkLinks(vaultDir);\n },\n },\n {\n version: 2,\n name: 'consolidation-boolean-to-object',\n migrate: (doc) => {\n const digest = doc.digest as Record<string, unknown> | undefined;\n if (!digest) return;\n\n const consolidation = digest.consolidation;\n if (typeof consolidation === 'boolean') {\n digest.consolidation = { enabled: consolidation, max_tokens: 2048 };\n }\n },\n },\n];\n\n/** Current migration version — the highest version in MIGRATIONS. */\nexport const CURRENT_MIGRATION_VERSION = MIGRATIONS[MIGRATIONS.length - 1]?.version ?? 0;\n\n/**\n * Run all pending migrations on the raw config doc.\n * Returns true if any migrations ran (caller should reindex).\n */\nexport function runMigrations(\n doc: Record<string, unknown>,\n vaultDir: string,\n log?: (message: string) => void,\n): boolean {\n const currentVersion = (doc.config_version as number) ?? 0;\n let ran = false;\n\n for (const migration of MIGRATIONS) {\n if (migration.version <= currentVersion) continue;\n\n migration.migrate(doc, vaultDir);\n doc.config_version = migration.version;\n ran = true;\n }\n\n if (ran) {\n const from = currentVersion;\n const to = (doc.config_version as number) ?? 0;\n log?.(`Migrated config from v${from} to v${to}`);\n }\n\n return ran;\n}\n"],"mappings":"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","names":["fs","path","path","fs","YAML"]}
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
OpenRouterEmbeddingProvider
|
|
4
|
+
} from "./chunk-AEJS57ZK.js";
|
|
5
|
+
import {
|
|
6
|
+
OpenAIEmbeddingProvider
|
|
7
|
+
} from "./chunk-5QERXFH7.js";
|
|
2
8
|
import {
|
|
3
9
|
LmStudioBackend,
|
|
4
10
|
OllamaBackend
|
|
5
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-5SDH75YC.js";
|
|
6
12
|
import {
|
|
7
13
|
LLM_REQUEST_TIMEOUT_MS
|
|
8
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-76ZO5RGT.js";
|
|
9
15
|
|
|
10
16
|
// node_modules/@anthropic-ai/sdk/internal/tslib.mjs
|
|
11
17
|
function __classPrivateFieldSet(receiver, state, value, kind, f) {
|
|
@@ -202,7 +208,7 @@ var safeJSON = (text) => {
|
|
|
202
208
|
var sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
203
209
|
|
|
204
210
|
// node_modules/@anthropic-ai/sdk/version.mjs
|
|
205
|
-
var VERSION = "0.
|
|
211
|
+
var VERSION = "0.80.0";
|
|
206
212
|
|
|
207
213
|
// node_modules/@anthropic-ai/sdk/internal/detect-platform.mjs
|
|
208
214
|
var isRunningInBrowser = () => {
|
|
@@ -420,6 +426,19 @@ var FallbackEncoder = ({ headers, body }) => {
|
|
|
420
426
|
};
|
|
421
427
|
};
|
|
422
428
|
|
|
429
|
+
// node_modules/@anthropic-ai/sdk/internal/utils/query.mjs
|
|
430
|
+
function stringifyQuery(query) {
|
|
431
|
+
return Object.entries(query).filter(([_, value]) => typeof value !== "undefined").map(([key, value]) => {
|
|
432
|
+
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
|
|
433
|
+
return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;
|
|
434
|
+
}
|
|
435
|
+
if (value === null) {
|
|
436
|
+
return `${encodeURIComponent(key)}=`;
|
|
437
|
+
}
|
|
438
|
+
throw new AnthropicError(`Cannot stringify type ${typeof value}; Expected string, number, boolean, or null. If you need to pass nested query parameters, you can manually encode them, e.g. { query: { 'foo[key1]': value1, 'foo[key2]': value2 } }, and please open a GitHub issue requesting better support for your use case.`);
|
|
439
|
+
}).join("&");
|
|
440
|
+
}
|
|
441
|
+
|
|
423
442
|
// node_modules/@anthropic-ai/sdk/internal/utils/bytes.mjs
|
|
424
443
|
function concatBytes(buffers) {
|
|
425
444
|
let length = 0;
|
|
@@ -4479,15 +4498,7 @@ var BaseAnthropic = class {
|
|
|
4479
4498
|
* Basic re-implementation of `qs.stringify` for primitive types.
|
|
4480
4499
|
*/
|
|
4481
4500
|
stringifyQuery(query) {
|
|
4482
|
-
return
|
|
4483
|
-
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
|
|
4484
|
-
return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;
|
|
4485
|
-
}
|
|
4486
|
-
if (value === null) {
|
|
4487
|
-
return `${encodeURIComponent(key)}=`;
|
|
4488
|
-
}
|
|
4489
|
-
throw new AnthropicError(`Cannot stringify type ${typeof value}; Expected string, number, boolean, or null. If you need to pass nested query parameters, you can manually encode them, e.g. { query: { 'foo[key1]': value1, 'foo[key2]': value2 } }, and please open a GitHub issue requesting better support for your use case.`);
|
|
4490
|
-
}).join("&");
|
|
4501
|
+
return stringifyQuery(query);
|
|
4491
4502
|
}
|
|
4492
4503
|
getUserAgent() {
|
|
4493
4504
|
return `${this.constructor.name}/JS ${VERSION}`;
|
|
@@ -4502,8 +4513,9 @@ var BaseAnthropic = class {
|
|
|
4502
4513
|
const baseURL = !__classPrivateFieldGet(this, _BaseAnthropic_instances, "m", _BaseAnthropic_baseURLOverridden).call(this) && defaultBaseURL || this.baseURL;
|
|
4503
4514
|
const url = isAbsoluteURL(path2) ? new URL(path2) : new URL(baseURL + (baseURL.endsWith("/") && path2.startsWith("/") ? path2.slice(1) : path2));
|
|
4504
4515
|
const defaultQuery = this.defaultQuery();
|
|
4505
|
-
|
|
4506
|
-
|
|
4516
|
+
const pathQuery = Object.fromEntries(url.searchParams);
|
|
4517
|
+
if (!isEmptyObj(defaultQuery) || !isEmptyObj(pathQuery)) {
|
|
4518
|
+
query = { ...pathQuery, ...defaultQuery, ...query };
|
|
4507
4519
|
}
|
|
4508
4520
|
if (typeof query === "object" && query && !Array.isArray(query)) {
|
|
4509
4521
|
url.search = this.stringifyQuery(query);
|
|
@@ -4715,7 +4727,7 @@ var BaseAnthropic = class {
|
|
|
4715
4727
|
timeoutMillis = Date.parse(retryAfterHeader) - Date.now();
|
|
4716
4728
|
}
|
|
4717
4729
|
}
|
|
4718
|
-
if (
|
|
4730
|
+
if (timeoutMillis === void 0) {
|
|
4719
4731
|
const maxRetries = options.maxRetries ?? this.maxRetries;
|
|
4720
4732
|
timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries);
|
|
4721
4733
|
}
|
|
@@ -4904,8 +4916,12 @@ function createEmbeddingProvider(config) {
|
|
|
4904
4916
|
case "lm-studio":
|
|
4905
4917
|
case "openai-compatible":
|
|
4906
4918
|
return new LmStudioBackend(config);
|
|
4919
|
+
case "openrouter":
|
|
4920
|
+
return new OpenRouterEmbeddingProvider({ model: config.model });
|
|
4921
|
+
case "openai":
|
|
4922
|
+
return new OpenAIEmbeddingProvider({ model: config.model });
|
|
4907
4923
|
default:
|
|
4908
|
-
throw new Error(`Provider "${config.provider}" does not support embeddings
|
|
4924
|
+
throw new Error(`Provider "${config.provider}" does not support embeddings.`);
|
|
4909
4925
|
}
|
|
4910
4926
|
}
|
|
4911
4927
|
|
|
@@ -4913,4 +4929,4 @@ export {
|
|
|
4913
4929
|
createLlmProvider,
|
|
4914
4930
|
createEmbeddingProvider
|
|
4915
4931
|
};
|
|
4916
|
-
//# sourceMappingURL=chunk-
|
|
4932
|
+
//# sourceMappingURL=chunk-MKKXCCQ5.js.map
|