@goondocks/myco 0.6.4 → 0.9.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 +2 -3
- package/.claude-plugin/plugin.json +3 -3
- package/CONTRIBUTING.md +37 -30
- package/README.md +64 -28
- package/bin/myco-run +2 -0
- package/dist/agent-run-EFICNTAU.js +34 -0
- package/dist/agent-run-EFICNTAU.js.map +1 -0
- package/dist/agent-tasks-RXJ7Z5NG.js +180 -0
- package/dist/agent-tasks-RXJ7Z5NG.js.map +1 -0
- package/dist/chunk-2T7RPVPP.js +116 -0
- package/dist/chunk-2T7RPVPP.js.map +1 -0
- package/dist/chunk-3K5WGSJ4.js +165 -0
- package/dist/chunk-3K5WGSJ4.js.map +1 -0
- package/dist/chunk-46PWOKSI.js +26 -0
- package/dist/chunk-46PWOKSI.js.map +1 -0
- package/dist/chunk-4LPQ26CK.js +277 -0
- package/dist/chunk-4LPQ26CK.js.map +1 -0
- package/dist/chunk-5PEUFJ6U.js +92 -0
- package/dist/chunk-5PEUFJ6U.js.map +1 -0
- package/dist/chunk-5VZ52A4T.js +136 -0
- package/dist/chunk-5VZ52A4T.js.map +1 -0
- package/dist/chunk-BUSP3OJB.js +103 -0
- package/dist/chunk-BUSP3OJB.js.map +1 -0
- package/dist/chunk-D7TYRPRM.js +7312 -0
- package/dist/chunk-D7TYRPRM.js.map +1 -0
- package/dist/chunk-DCXRSSBP.js +22 -0
- package/dist/chunk-DCXRSSBP.js.map +1 -0
- package/dist/chunk-E4VLWIJC.js +2 -0
- package/dist/chunk-FFAYUQ5N.js +39 -0
- package/dist/chunk-FFAYUQ5N.js.map +1 -0
- package/dist/chunk-IB76KGBY.js +2 -0
- package/dist/chunk-JMJJEQ3P.js +486 -0
- package/dist/chunk-JMJJEQ3P.js.map +1 -0
- package/dist/{chunk-N33KUCFP.js → chunk-JTYZRPX5.js} +1 -9
- package/dist/chunk-JTYZRPX5.js.map +1 -0
- package/dist/{chunk-NLUE6CYG.js → chunk-JYOOJCPQ.js} +33 -17
- package/dist/chunk-JYOOJCPQ.js.map +1 -0
- package/dist/{chunk-Z74SDEKE.js → chunk-KB4DGYIY.js} +91 -9
- package/dist/chunk-KB4DGYIY.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-KV4OC4H3.js +498 -0
- package/dist/chunk-KV4OC4H3.js.map +1 -0
- package/dist/chunk-KYLDNM7H.js +66 -0
- package/dist/chunk-KYLDNM7H.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-MHSCMET3.js +275 -0
- package/dist/chunk-MHSCMET3.js.map +1 -0
- package/dist/chunk-MYX5NCRH.js +45 -0
- package/dist/chunk-MYX5NCRH.js.map +1 -0
- package/dist/chunk-OXZSXYAT.js +877 -0
- package/dist/chunk-OXZSXYAT.js.map +1 -0
- package/dist/chunk-PB6TOLRQ.js +35 -0
- package/dist/chunk-PB6TOLRQ.js.map +1 -0
- package/dist/chunk-PT5IC642.js +162 -0
- package/dist/chunk-PT5IC642.js.map +1 -0
- package/dist/chunk-QIK2XSDQ.js +187 -0
- package/dist/chunk-QIK2XSDQ.js.map +1 -0
- package/dist/chunk-RJ6ZQKG5.js +26 -0
- package/dist/chunk-RJ6ZQKG5.js.map +1 -0
- package/dist/{chunk-YIQLYIHW.js → chunk-TRUJLI6K.js} +29 -43
- package/dist/chunk-TRUJLI6K.js.map +1 -0
- package/dist/chunk-U3IBO3O3.js +41 -0
- package/dist/chunk-U3IBO3O3.js.map +1 -0
- package/dist/{chunk-7WHF2OIZ.js → chunk-UBZPD4HN.js} +25 -7
- package/dist/chunk-UBZPD4HN.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-WGTCA2NU.js +84 -0
- package/dist/chunk-WGTCA2NU.js.map +1 -0
- package/dist/{chunk-O6PERU7U.js → chunk-XNOCTDHF.js} +2 -2
- package/dist/chunk-YDN4OM33.js +80 -0
- package/dist/chunk-YDN4OM33.js.map +1 -0
- package/dist/cli-ODLFRIYS.js +128 -0
- package/dist/cli-ODLFRIYS.js.map +1 -0
- package/dist/client-EYOTW3JU.js +19 -0
- package/dist/client-MXRNQ5FI.js +13 -0
- package/dist/{config-IBS6KOLQ.js → config-UR5BSGVX.js} +21 -34
- package/dist/config-UR5BSGVX.js.map +1 -0
- package/dist/detect-H5OPI7GD.js +17 -0
- package/dist/detect-H5OPI7GD.js.map +1 -0
- package/dist/detect-providers-Q42OD4OS.js +26 -0
- package/dist/detect-providers-Q42OD4OS.js.map +1 -0
- package/dist/doctor-JLKTXDEH.js +258 -0
- package/dist/doctor-JLKTXDEH.js.map +1 -0
- package/dist/executor-ONSDHPGX.js +1441 -0
- package/dist/executor-ONSDHPGX.js.map +1 -0
- package/dist/init-6GWY345B.js +198 -0
- package/dist/init-6GWY345B.js.map +1 -0
- package/dist/init-wizard-UONLDYLI.js +294 -0
- package/dist/init-wizard-UONLDYLI.js.map +1 -0
- package/dist/llm-BV3QNVRD.js +17 -0
- package/dist/llm-BV3QNVRD.js.map +1 -0
- package/dist/loader-SH67XD54.js +28 -0
- package/dist/loader-SH67XD54.js.map +1 -0
- package/dist/loader-XVXKZZDH.js +18 -0
- package/dist/loader-XVXKZZDH.js.map +1 -0
- package/dist/{chunk-H7PRCVGQ.js → logs-QZVYF6FP.js} +74 -5
- package/dist/logs-QZVYF6FP.js.map +1 -0
- package/dist/main-BMCL7CPO.js +4393 -0
- package/dist/main-BMCL7CPO.js.map +1 -0
- package/dist/openai-embeddings-C265WRNK.js +14 -0
- package/dist/openai-embeddings-C265WRNK.js.map +1 -0
- package/dist/openrouter-U6VFCRX2.js +14 -0
- package/dist/openrouter-U6VFCRX2.js.map +1 -0
- package/dist/post-compact-OWFSOITU.js +26 -0
- package/dist/post-compact-OWFSOITU.js.map +1 -0
- package/dist/post-tool-use-DOUM7CGQ.js +56 -0
- package/dist/post-tool-use-DOUM7CGQ.js.map +1 -0
- package/dist/post-tool-use-failure-SG3C7PE6.js +28 -0
- package/dist/post-tool-use-failure-SG3C7PE6.js.map +1 -0
- package/dist/pre-compact-3J33CHXQ.js +25 -0
- package/dist/pre-compact-3J33CHXQ.js.map +1 -0
- package/dist/provider-check-3WBPZADE.js +12 -0
- package/dist/provider-check-3WBPZADE.js.map +1 -0
- package/dist/registry-J4XTWARS.js +25 -0
- package/dist/registry-J4XTWARS.js.map +1 -0
- package/dist/resolution-events-TFEQPVKS.js +12 -0
- package/dist/resolution-events-TFEQPVKS.js.map +1 -0
- package/dist/resolve-3FEUV462.js +9 -0
- package/dist/resolve-3FEUV462.js.map +1 -0
- package/dist/{restart-XCMILOL5.js → restart-2VM33WOB.js} +10 -6
- package/dist/{restart-XCMILOL5.js.map → restart-2VM33WOB.js.map} +1 -1
- package/dist/search-ZGQR5MDE.js +91 -0
- package/dist/search-ZGQR5MDE.js.map +1 -0
- package/dist/{server-6UDN35QN.js → server-6KMBJCHZ.js} +308 -517
- package/dist/server-6KMBJCHZ.js.map +1 -0
- package/dist/session-Z2FXDDG6.js +68 -0
- package/dist/session-Z2FXDDG6.js.map +1 -0
- package/dist/session-end-FLVX32LE.js +38 -0
- package/dist/session-end-FLVX32LE.js.map +1 -0
- package/dist/session-start-UCLK7PXE.js +169 -0
- package/dist/session-start-UCLK7PXE.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-GKMCHURK.js +81 -0
- package/dist/setup-llm-GKMCHURK.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-IUJPZSVZ.js +94 -0
- package/dist/stats-IUJPZSVZ.js.map +1 -0
- package/dist/stop-XRQLLXST.js +42 -0
- package/dist/stop-XRQLLXST.js.map +1 -0
- package/dist/stop-failure-2CAJJKRG.js +26 -0
- package/dist/stop-failure-2CAJJKRG.js.map +1 -0
- package/dist/subagent-start-MWWQTZMQ.js +26 -0
- package/dist/subagent-start-MWWQTZMQ.js.map +1 -0
- package/dist/subagent-stop-PJXYGRXB.js +28 -0
- package/dist/subagent-stop-PJXYGRXB.js.map +1 -0
- package/dist/task-completed-4LFRJVGI.js +27 -0
- package/dist/task-completed-4LFRJVGI.js.map +1 -0
- package/dist/ui/assets/index-DZrElonz.js +744 -0
- package/dist/ui/assets/index-TkeiYbZB.css +1 -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/user-prompt-submit-KSM3AR6P.js +59 -0
- package/dist/user-prompt-submit-KSM3AR6P.js.map +1 -0
- package/dist/{verify-TOWQHPBX.js → verify-UDAYVX37.js} +17 -22
- package/dist/verify-UDAYVX37.js.map +1 -0
- package/dist/{version-36RVCQA6.js → version-KLBN4HZT.js} +3 -4
- package/dist/version-KLBN4HZT.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-2ZIBCEYO.js +0 -113
- package/dist/chunk-2ZIBCEYO.js.map +0 -1
- package/dist/chunk-4RMSHZE4.js +0 -107
- package/dist/chunk-4RMSHZE4.js.map +0 -1
- package/dist/chunk-4XVKZ3WA.js +0 -1078
- package/dist/chunk-4XVKZ3WA.js.map +0 -1
- package/dist/chunk-6FQISQNA.js +0 -61
- package/dist/chunk-6FQISQNA.js.map +0 -1
- package/dist/chunk-7WHF2OIZ.js.map +0 -1
- package/dist/chunk-ERG2IEWX.js.map +0 -1
- package/dist/chunk-FPRXMJLT.js +0 -56
- package/dist/chunk-FPRXMJLT.js.map +0 -1
- package/dist/chunk-GENQ5QGP.js +0 -37
- package/dist/chunk-GENQ5QGP.js.map +0 -1
- package/dist/chunk-H7PRCVGQ.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-J4D4CROB.js +0 -143
- package/dist/chunk-J4D4CROB.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-NL6WQO56.js +0 -65
- package/dist/chunk-NL6WQO56.js.map +0 -1
- package/dist/chunk-NLUE6CYG.js.map +0 -1
- package/dist/chunk-P723N2LP.js +0 -147
- package/dist/chunk-P723N2LP.js.map +0 -1
- package/dist/chunk-QLUE3BUL.js +0 -161
- package/dist/chunk-QLUE3BUL.js.map +0 -1
- package/dist/chunk-QN4W3JUA.js +0 -43
- package/dist/chunk-QN4W3JUA.js.map +0 -1
- package/dist/chunk-RGVBGTD6.js +0 -21
- package/dist/chunk-RGVBGTD6.js.map +0 -1
- package/dist/chunk-TWSTAVLO.js +0 -132
- package/dist/chunk-TWSTAVLO.js.map +0 -1
- package/dist/chunk-UP4P4OAA.js +0 -4423
- package/dist/chunk-UP4P4OAA.js.map +0 -1
- package/dist/chunk-YIQLYIHW.js.map +0 -1
- package/dist/chunk-YTFXA4RX.js +0 -86
- package/dist/chunk-YTFXA4RX.js.map +0 -1
- package/dist/chunk-Z74SDEKE.js.map +0 -1
- package/dist/cli-IHILSS6N.js +0 -97
- package/dist/cli-IHILSS6N.js.map +0 -1
- package/dist/client-AGFNR2S4.js +0 -12
- package/dist/config-IBS6KOLQ.js.map +0 -1
- package/dist/curate-3D4GHKJH.js +0 -78
- package/dist/curate-3D4GHKJH.js.map +0 -1
- package/dist/detect-providers-XEP4QA3R.js +0 -35
- package/dist/detect-providers-XEP4QA3R.js.map +0 -1
- package/dist/digest-7HLJXL77.js +0 -85
- package/dist/digest-7HLJXL77.js.map +0 -1
- package/dist/init-ARQ53JOR.js +0 -109
- package/dist/init-ARQ53JOR.js.map +0 -1
- package/dist/logs-IENORIYR.js +0 -84
- package/dist/logs-IENORIYR.js.map +0 -1
- package/dist/main-6AGPIMH2.js +0 -5715
- package/dist/main-6AGPIMH2.js.map +0 -1
- package/dist/rebuild-Q2ACEB6F.js +0 -64
- package/dist/rebuild-Q2ACEB6F.js.map +0 -1
- package/dist/reprocess-CDEFGQOV.js +0 -79
- package/dist/reprocess-CDEFGQOV.js.map +0 -1
- package/dist/search-7W25SKCB.js +0 -120
- package/dist/search-7W25SKCB.js.map +0 -1
- package/dist/server-6UDN35QN.js.map +0 -1
- package/dist/session-F326AWCH.js +0 -44
- package/dist/session-F326AWCH.js.map +0 -1
- package/dist/session-start-K6IGAC7H.js +0 -192
- package/dist/session-start-K6IGAC7H.js.map +0 -1
- package/dist/setup-digest-X5PN27F4.js +0 -15
- package/dist/setup-llm-S5OHQJXK.js +0 -15
- package/dist/src/prompts/classification.md +0 -43
- package/dist/stats-TTSDXGJV.js +0 -58
- package/dist/stats-TTSDXGJV.js.map +0 -1
- package/dist/templates-XPRBOWCE.js +0 -38
- package/dist/templates-XPRBOWCE.js.map +0 -1
- package/dist/ui/assets/index-08wKT7wS.css +0 -1
- package/dist/ui/assets/index-CMSMi4Jb.js +0 -369
- package/dist/verify-TOWQHPBX.js.map +0 -1
- package/skills/setup/SKILL.md +0 -174
- package/skills/setup/references/model-recommendations.md +0 -83
- /package/dist/{client-AGFNR2S4.js.map → chunk-E4VLWIJC.js.map} +0 -0
- /package/dist/{setup-digest-X5PN27F4.js.map → chunk-IB76KGBY.js.map} +0 -0
- /package/dist/{chunk-O6PERU7U.js.map → chunk-XNOCTDHF.js.map} +0 -0
- /package/dist/{setup-llm-S5OHQJXK.js.map → client-EYOTW3JU.js.map} +0 -0
- /package/dist/{version-36RVCQA6.js.map → client-MXRNQ5FI.js.map} +0 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
LmStudioBackend,
|
|
4
|
+
OllamaBackend
|
|
5
|
+
} from "./chunk-UBZPD4HN.js";
|
|
6
|
+
import {
|
|
7
|
+
PROVIDER_DETECT_TIMEOUT_MS
|
|
8
|
+
} from "./chunk-5VZ52A4T.js";
|
|
9
|
+
|
|
10
|
+
// src/intelligence/provider-check.ts
|
|
11
|
+
async function checkLocalProvider(type, baseUrl) {
|
|
12
|
+
const backend = type === "ollama" ? new OllamaBackend({ base_url: baseUrl }) : new LmStudioBackend({ base_url: baseUrl });
|
|
13
|
+
const available = await backend.isAvailable();
|
|
14
|
+
if (!available) return { available: false, models: [] };
|
|
15
|
+
const models = await backend.listModels(PROVIDER_DETECT_TIMEOUT_MS);
|
|
16
|
+
return { available: true, models };
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export {
|
|
20
|
+
checkLocalProvider
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=chunk-DCXRSSBP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/intelligence/provider-check.ts"],"sourcesContent":["import { OllamaBackend } from './ollama.js';\nimport { LmStudioBackend } from './lm-studio.js';\nimport { PROVIDER_DETECT_TIMEOUT_MS } from '../constants.js';\n\nexport interface ProviderStatus {\n available: boolean;\n models: string[];\n}\n\n/** Check if a local provider (Ollama or LM Studio) is reachable and list its models. */\nexport async function checkLocalProvider(\n type: 'ollama' | 'lmstudio',\n baseUrl?: string,\n): Promise<ProviderStatus> {\n const backend = type === 'ollama'\n ? new OllamaBackend({ base_url: baseUrl })\n : new LmStudioBackend({ base_url: baseUrl });\n\n const available = await backend.isAvailable();\n if (!available) return { available: false, models: [] };\n const models = await backend.listModels(PROVIDER_DETECT_TIMEOUT_MS);\n return { available: true, models };\n}\n"],"mappings":";;;;;;;;;;AAUA,eAAsB,mBACpB,MACA,SACyB;AACzB,QAAM,UAAU,SAAS,WACrB,IAAI,cAAc,EAAE,UAAU,QAAQ,CAAC,IACvC,IAAI,gBAAgB,EAAE,UAAU,QAAQ,CAAC;AAE7C,QAAM,YAAY,MAAM,QAAQ,YAAY;AAC5C,MAAI,CAAC,UAAW,QAAO,EAAE,WAAW,OAAO,QAAQ,CAAC,EAAE;AACtD,QAAM,SAAS,MAAM,QAAQ,WAAW,0BAA0B;AAClE,SAAO,EAAE,WAAW,MAAM,OAAO;AACnC;","names":[]}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
|
+
|
|
3
|
+
// src/config/secrets.ts
|
|
4
|
+
import fs from "fs";
|
|
5
|
+
import path from "path";
|
|
6
|
+
var SECRETS_FILE = "secrets.env";
|
|
7
|
+
function readSecrets(vaultDir) {
|
|
8
|
+
const secretsPath = path.join(vaultDir, SECRETS_FILE);
|
|
9
|
+
if (!fs.existsSync(secretsPath)) return {};
|
|
10
|
+
const secrets = {};
|
|
11
|
+
for (const line of fs.readFileSync(secretsPath, "utf-8").split("\n")) {
|
|
12
|
+
const match = line.match(/^\s*([^#=]+?)\s*=\s*(.*?)\s*$/);
|
|
13
|
+
if (match) {
|
|
14
|
+
secrets[match[1]] = match[2];
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return secrets;
|
|
18
|
+
}
|
|
19
|
+
function writeSecret(vaultDir, key, value) {
|
|
20
|
+
const secretsPath = path.join(vaultDir, SECRETS_FILE);
|
|
21
|
+
const existing = readSecrets(vaultDir);
|
|
22
|
+
existing[key] = value;
|
|
23
|
+
const content = Object.entries(existing).map(([k, v]) => `${k}=${v}`).join("\n") + "\n";
|
|
24
|
+
fs.writeFileSync(secretsPath, content, "utf-8");
|
|
25
|
+
}
|
|
26
|
+
function loadSecrets(vaultDir) {
|
|
27
|
+
const secrets = readSecrets(vaultDir);
|
|
28
|
+
for (const [key, value] of Object.entries(secrets)) {
|
|
29
|
+
if (!process.env[key]) {
|
|
30
|
+
process.env[key] = value;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export {
|
|
36
|
+
writeSecret,
|
|
37
|
+
loadSecrets
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=chunk-FFAYUQ5N.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/config/secrets.ts"],"sourcesContent":["/**\n * Secrets file utilities for API key storage outside git.\n *\n * Secrets are stored in `secrets.env` inside the vault directory.\n * This file is gitignored (see VAULT_GITIGNORE) and never committed.\n * Format: KEY=value, one per line (same as .env).\n */\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nconst SECRETS_FILE = 'secrets.env';\n\n/** Read all secrets from <vault>/secrets.env as key-value pairs. */\nexport function readSecrets(vaultDir: string): Record<string, string> {\n const secretsPath = path.join(vaultDir, SECRETS_FILE);\n if (!fs.existsSync(secretsPath)) return {};\n\n const secrets: Record<string, string> = {};\n for (const line of fs.readFileSync(secretsPath, 'utf-8').split('\\n')) {\n const match = line.match(/^\\s*([^#=]+?)\\s*=\\s*(.*?)\\s*$/);\n if (match) {\n secrets[match[1]] = match[2];\n }\n }\n return secrets;\n}\n\n/** Write a secret to <vault>/secrets.env, preserving existing entries. */\nexport function writeSecret(vaultDir: string, key: string, value: string): void {\n const secretsPath = path.join(vaultDir, SECRETS_FILE);\n const existing = readSecrets(vaultDir);\n existing[key] = value;\n\n const content = Object.entries(existing)\n .map(([k, v]) => `${k}=${v}`)\n .join('\\n') + '\\n';\n\n fs.writeFileSync(secretsPath, content, 'utf-8');\n}\n\n/** Load secrets from <vault>/secrets.env into process.env (without overwriting existing vars). */\nexport function loadSecrets(vaultDir: string): void {\n const secrets = readSecrets(vaultDir);\n for (const [key, value] of Object.entries(secrets)) {\n if (!process.env[key]) {\n process.env[key] = value;\n }\n }\n}\n"],"mappings":";;;AAOA,OAAO,QAAQ;AACf,OAAO,UAAU;AAEjB,IAAM,eAAe;AAGd,SAAS,YAAY,UAA0C;AACpE,QAAM,cAAc,KAAK,KAAK,UAAU,YAAY;AACpD,MAAI,CAAC,GAAG,WAAW,WAAW,EAAG,QAAO,CAAC;AAEzC,QAAM,UAAkC,CAAC;AACzC,aAAW,QAAQ,GAAG,aAAa,aAAa,OAAO,EAAE,MAAM,IAAI,GAAG;AACpE,UAAM,QAAQ,KAAK,MAAM,+BAA+B;AACxD,QAAI,OAAO;AACT,cAAQ,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC;AAAA,IAC7B;AAAA,EACF;AACA,SAAO;AACT;AAGO,SAAS,YAAY,UAAkB,KAAa,OAAqB;AAC9E,QAAM,cAAc,KAAK,KAAK,UAAU,YAAY;AACpD,QAAM,WAAW,YAAY,QAAQ;AACrC,WAAS,GAAG,IAAI;AAEhB,QAAM,UAAU,OAAO,QAAQ,QAAQ,EACpC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,EAAE,EAC3B,KAAK,IAAI,IAAI;AAEhB,KAAG,cAAc,aAAa,SAAS,OAAO;AAChD;AAGO,SAAS,YAAY,UAAwB;AAClD,QAAM,UAAU,YAAY,QAAQ;AACpC,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,OAAO,GAAG;AAClD,QAAI,CAAC,QAAQ,IAAI,GAAG,GAAG;AACrB,cAAQ,IAAI,GAAG,IAAI;AAAA,IACrB;AAAA,EACF;AACF;","names":[]}
|
|
@@ -0,0 +1,486 @@
|
|
|
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
|
+
getDatabase
|
|
10
|
+
} from "./chunk-MYX5NCRH.js";
|
|
11
|
+
import {
|
|
12
|
+
BUILT_IN_SOURCE,
|
|
13
|
+
DEFAULT_AGENT_ID,
|
|
14
|
+
USER_TASK_SOURCE,
|
|
15
|
+
epochSeconds
|
|
16
|
+
} from "./chunk-5VZ52A4T.js";
|
|
17
|
+
import {
|
|
18
|
+
findPackageRoot
|
|
19
|
+
} from "./chunk-LPUQPDC2.js";
|
|
20
|
+
import {
|
|
21
|
+
__toESM
|
|
22
|
+
} from "./chunk-PZUWP5VK.js";
|
|
23
|
+
|
|
24
|
+
// src/agent/loader.ts
|
|
25
|
+
import fs from "fs";
|
|
26
|
+
import path from "path";
|
|
27
|
+
import { fileURLToPath } from "url";
|
|
28
|
+
var import_yaml = __toESM(require_dist(), 1);
|
|
29
|
+
|
|
30
|
+
// src/db/queries/agents.ts
|
|
31
|
+
var DEFAULT_SOURCE = "built-in";
|
|
32
|
+
var DEFAULT_ENABLED = 1;
|
|
33
|
+
var AGENT_COLUMNS = [
|
|
34
|
+
"id",
|
|
35
|
+
"name",
|
|
36
|
+
"provider",
|
|
37
|
+
"model",
|
|
38
|
+
"system_prompt_hash",
|
|
39
|
+
"config",
|
|
40
|
+
"source",
|
|
41
|
+
"system_prompt",
|
|
42
|
+
"max_turns",
|
|
43
|
+
"timeout_seconds",
|
|
44
|
+
"tool_access",
|
|
45
|
+
"enabled",
|
|
46
|
+
"created_at",
|
|
47
|
+
"updated_at"
|
|
48
|
+
];
|
|
49
|
+
var SELECT_COLUMNS = AGENT_COLUMNS.join(", ");
|
|
50
|
+
function toAgentRow(row) {
|
|
51
|
+
return {
|
|
52
|
+
id: row.id,
|
|
53
|
+
name: row.name,
|
|
54
|
+
provider: row.provider ?? null,
|
|
55
|
+
model: row.model ?? null,
|
|
56
|
+
system_prompt_hash: row.system_prompt_hash ?? null,
|
|
57
|
+
config: row.config ?? null,
|
|
58
|
+
source: row.source ?? DEFAULT_SOURCE,
|
|
59
|
+
system_prompt: row.system_prompt ?? null,
|
|
60
|
+
max_turns: row.max_turns ?? null,
|
|
61
|
+
timeout_seconds: row.timeout_seconds ?? null,
|
|
62
|
+
tool_access: row.tool_access ?? null,
|
|
63
|
+
enabled: row.enabled ?? DEFAULT_ENABLED,
|
|
64
|
+
created_at: row.created_at,
|
|
65
|
+
updated_at: row.updated_at ?? null
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
function registerAgent(data) {
|
|
69
|
+
const db = getDatabase();
|
|
70
|
+
db.prepare(
|
|
71
|
+
`INSERT INTO agents (
|
|
72
|
+
id, name, provider, model, system_prompt_hash, config,
|
|
73
|
+
source, system_prompt, max_turns, timeout_seconds, tool_access,
|
|
74
|
+
enabled, created_at, updated_at
|
|
75
|
+
) VALUES (
|
|
76
|
+
?, ?, ?, ?, ?, ?,
|
|
77
|
+
?, ?, ?, ?, ?,
|
|
78
|
+
?, ?, ?
|
|
79
|
+
)
|
|
80
|
+
ON CONFLICT (id) DO UPDATE SET
|
|
81
|
+
name = EXCLUDED.name,
|
|
82
|
+
provider = EXCLUDED.provider,
|
|
83
|
+
model = EXCLUDED.model,
|
|
84
|
+
system_prompt_hash = EXCLUDED.system_prompt_hash,
|
|
85
|
+
config = EXCLUDED.config,
|
|
86
|
+
source = EXCLUDED.source,
|
|
87
|
+
system_prompt = EXCLUDED.system_prompt,
|
|
88
|
+
max_turns = EXCLUDED.max_turns,
|
|
89
|
+
timeout_seconds = EXCLUDED.timeout_seconds,
|
|
90
|
+
tool_access = EXCLUDED.tool_access,
|
|
91
|
+
enabled = EXCLUDED.enabled,
|
|
92
|
+
updated_at = EXCLUDED.updated_at`
|
|
93
|
+
).run(
|
|
94
|
+
data.id,
|
|
95
|
+
data.name,
|
|
96
|
+
data.provider ?? null,
|
|
97
|
+
data.model ?? null,
|
|
98
|
+
data.system_prompt_hash ?? null,
|
|
99
|
+
data.config ?? null,
|
|
100
|
+
data.source ?? DEFAULT_SOURCE,
|
|
101
|
+
data.system_prompt ?? null,
|
|
102
|
+
data.max_turns ?? null,
|
|
103
|
+
data.timeout_seconds ?? null,
|
|
104
|
+
data.tool_access ?? null,
|
|
105
|
+
data.enabled ?? DEFAULT_ENABLED,
|
|
106
|
+
data.created_at,
|
|
107
|
+
data.updated_at ?? null
|
|
108
|
+
);
|
|
109
|
+
return toAgentRow(
|
|
110
|
+
db.prepare(`SELECT ${SELECT_COLUMNS} FROM agents WHERE id = ?`).get(data.id)
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
function getAgent(id) {
|
|
114
|
+
const db = getDatabase();
|
|
115
|
+
const row = db.prepare(
|
|
116
|
+
`SELECT ${SELECT_COLUMNS} FROM agents WHERE id = ?`
|
|
117
|
+
).get(id);
|
|
118
|
+
if (!row) return null;
|
|
119
|
+
return toAgentRow(row);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// src/db/queries/tasks.ts
|
|
123
|
+
var DEFAULT_SOURCE2 = BUILT_IN_SOURCE;
|
|
124
|
+
var DEFAULT_IS_DEFAULT = 0;
|
|
125
|
+
var IS_DEFAULT_TRUE = 1;
|
|
126
|
+
var TASK_COLUMNS = [
|
|
127
|
+
"id",
|
|
128
|
+
"agent_id",
|
|
129
|
+
"source",
|
|
130
|
+
"display_name",
|
|
131
|
+
"description",
|
|
132
|
+
"prompt",
|
|
133
|
+
"is_default",
|
|
134
|
+
"tool_overrides",
|
|
135
|
+
"model",
|
|
136
|
+
"config",
|
|
137
|
+
"created_at",
|
|
138
|
+
"updated_at"
|
|
139
|
+
];
|
|
140
|
+
var SELECT_COLUMNS2 = TASK_COLUMNS.join(", ");
|
|
141
|
+
function toTaskRow(row) {
|
|
142
|
+
return {
|
|
143
|
+
id: row.id,
|
|
144
|
+
agent_id: row.agent_id,
|
|
145
|
+
source: row.source ?? DEFAULT_SOURCE2,
|
|
146
|
+
display_name: row.display_name ?? null,
|
|
147
|
+
description: row.description ?? null,
|
|
148
|
+
prompt: row.prompt,
|
|
149
|
+
is_default: row.is_default ?? DEFAULT_IS_DEFAULT,
|
|
150
|
+
tool_overrides: row.tool_overrides ?? null,
|
|
151
|
+
model: row.model ?? null,
|
|
152
|
+
config: row.config ?? null,
|
|
153
|
+
created_at: row.created_at,
|
|
154
|
+
updated_at: row.updated_at ?? null
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
function upsertTask(data) {
|
|
158
|
+
const db = getDatabase();
|
|
159
|
+
db.prepare(
|
|
160
|
+
`INSERT INTO agent_tasks (
|
|
161
|
+
id, agent_id, source, display_name, description,
|
|
162
|
+
prompt, is_default, tool_overrides, model, config,
|
|
163
|
+
created_at, updated_at
|
|
164
|
+
) VALUES (
|
|
165
|
+
?, ?, ?, ?, ?,
|
|
166
|
+
?, ?, ?, ?, ?,
|
|
167
|
+
?, ?
|
|
168
|
+
)
|
|
169
|
+
ON CONFLICT (id) DO UPDATE SET
|
|
170
|
+
agent_id = EXCLUDED.agent_id,
|
|
171
|
+
source = EXCLUDED.source,
|
|
172
|
+
display_name = EXCLUDED.display_name,
|
|
173
|
+
description = EXCLUDED.description,
|
|
174
|
+
prompt = EXCLUDED.prompt,
|
|
175
|
+
is_default = EXCLUDED.is_default,
|
|
176
|
+
tool_overrides = EXCLUDED.tool_overrides,
|
|
177
|
+
model = EXCLUDED.model,
|
|
178
|
+
config = EXCLUDED.config,
|
|
179
|
+
updated_at = EXCLUDED.updated_at`
|
|
180
|
+
).run(
|
|
181
|
+
data.id,
|
|
182
|
+
data.agent_id,
|
|
183
|
+
data.source ?? DEFAULT_SOURCE2,
|
|
184
|
+
data.display_name ?? null,
|
|
185
|
+
data.description ?? null,
|
|
186
|
+
data.prompt,
|
|
187
|
+
data.is_default ?? DEFAULT_IS_DEFAULT,
|
|
188
|
+
data.tool_overrides ?? null,
|
|
189
|
+
data.model ?? null,
|
|
190
|
+
data.config ?? null,
|
|
191
|
+
data.created_at,
|
|
192
|
+
data.updated_at ?? null
|
|
193
|
+
);
|
|
194
|
+
return toTaskRow(
|
|
195
|
+
db.prepare(`SELECT ${SELECT_COLUMNS2} FROM agent_tasks WHERE id = ?`).get(data.id)
|
|
196
|
+
);
|
|
197
|
+
}
|
|
198
|
+
function getTask(id) {
|
|
199
|
+
const db = getDatabase();
|
|
200
|
+
const row = db.prepare(
|
|
201
|
+
`SELECT ${SELECT_COLUMNS2} FROM agent_tasks WHERE id = ?`
|
|
202
|
+
).get(id);
|
|
203
|
+
if (!row) return null;
|
|
204
|
+
return toTaskRow(row);
|
|
205
|
+
}
|
|
206
|
+
function getDefaultTask(agentId) {
|
|
207
|
+
const db = getDatabase();
|
|
208
|
+
const row = db.prepare(
|
|
209
|
+
`SELECT ${SELECT_COLUMNS2}
|
|
210
|
+
FROM agent_tasks
|
|
211
|
+
WHERE agent_id = ? AND is_default = ?
|
|
212
|
+
LIMIT 1`
|
|
213
|
+
).get(agentId, IS_DEFAULT_TRUE);
|
|
214
|
+
if (!row) return null;
|
|
215
|
+
return toTaskRow(row);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
// src/agent/schemas.ts
|
|
219
|
+
var ProviderConfigSchema = external_exports.object({
|
|
220
|
+
type: external_exports.enum(["cloud", "ollama", "lmstudio"]),
|
|
221
|
+
baseUrl: external_exports.string().optional(),
|
|
222
|
+
apiKey: external_exports.string().optional(),
|
|
223
|
+
model: external_exports.string().optional()
|
|
224
|
+
});
|
|
225
|
+
var ExecutionConfigSchema = external_exports.object({
|
|
226
|
+
model: external_exports.string().optional(),
|
|
227
|
+
maxTurns: external_exports.number().optional(),
|
|
228
|
+
timeoutSeconds: external_exports.number().optional(),
|
|
229
|
+
provider: ProviderConfigSchema.optional()
|
|
230
|
+
});
|
|
231
|
+
var ContextQuerySchema = external_exports.object({
|
|
232
|
+
tool: external_exports.string(),
|
|
233
|
+
queryTemplate: external_exports.string(),
|
|
234
|
+
limit: external_exports.number(),
|
|
235
|
+
purpose: external_exports.string(),
|
|
236
|
+
required: external_exports.boolean()
|
|
237
|
+
});
|
|
238
|
+
var AgentDefinitionSchema = external_exports.object({
|
|
239
|
+
name: external_exports.string(),
|
|
240
|
+
displayName: external_exports.string(),
|
|
241
|
+
description: external_exports.string(),
|
|
242
|
+
model: external_exports.string(),
|
|
243
|
+
maxTurns: external_exports.number(),
|
|
244
|
+
timeoutSeconds: external_exports.number(),
|
|
245
|
+
systemPromptPath: external_exports.string(),
|
|
246
|
+
tools: external_exports.array(external_exports.string())
|
|
247
|
+
});
|
|
248
|
+
var OrchestratorConfigSchema = external_exports.object({
|
|
249
|
+
enabled: external_exports.boolean(),
|
|
250
|
+
model: external_exports.string().optional(),
|
|
251
|
+
maxTurns: external_exports.number().optional()
|
|
252
|
+
});
|
|
253
|
+
var PhaseDefinitionSchema = external_exports.object({
|
|
254
|
+
name: external_exports.string(),
|
|
255
|
+
prompt: external_exports.string(),
|
|
256
|
+
tools: external_exports.array(external_exports.string()),
|
|
257
|
+
maxTurns: external_exports.number(),
|
|
258
|
+
model: external_exports.string().optional(),
|
|
259
|
+
required: external_exports.boolean(),
|
|
260
|
+
dependsOn: external_exports.array(external_exports.string()).optional(),
|
|
261
|
+
provider: ProviderConfigSchema.optional(),
|
|
262
|
+
skipPriorContext: external_exports.boolean().optional()
|
|
263
|
+
});
|
|
264
|
+
var AgentTaskSchema = external_exports.object({
|
|
265
|
+
name: external_exports.string(),
|
|
266
|
+
displayName: external_exports.string(),
|
|
267
|
+
description: external_exports.string(),
|
|
268
|
+
agent: external_exports.string(),
|
|
269
|
+
prompt: external_exports.string(),
|
|
270
|
+
isDefault: external_exports.boolean(),
|
|
271
|
+
toolOverrides: external_exports.array(external_exports.string()).optional(),
|
|
272
|
+
model: external_exports.string().optional(),
|
|
273
|
+
maxTurns: external_exports.number().optional(),
|
|
274
|
+
timeoutSeconds: external_exports.number().optional(),
|
|
275
|
+
phases: external_exports.array(PhaseDefinitionSchema).optional(),
|
|
276
|
+
execution: ExecutionConfigSchema.optional(),
|
|
277
|
+
contextQueries: external_exports.record(external_exports.string(), external_exports.array(ContextQuerySchema)).optional(),
|
|
278
|
+
schemaVersion: external_exports.number().optional(),
|
|
279
|
+
orchestrator: OrchestratorConfigSchema.optional()
|
|
280
|
+
});
|
|
281
|
+
|
|
282
|
+
// src/agent/loader.ts
|
|
283
|
+
var AGENT_DEFINITION_FILE = "agent.yaml";
|
|
284
|
+
var TASKS_SUBDIRECTORY = "tasks";
|
|
285
|
+
function resolveDefinitionsDir() {
|
|
286
|
+
const scriptDir = path.dirname(fileURLToPath(import.meta.url));
|
|
287
|
+
const adjacentDefs = path.join(scriptDir, "definitions");
|
|
288
|
+
if (fs.existsSync(path.join(adjacentDefs, AGENT_DEFINITION_FILE))) {
|
|
289
|
+
return adjacentDefs;
|
|
290
|
+
}
|
|
291
|
+
const root = findPackageRoot(scriptDir);
|
|
292
|
+
if (root) {
|
|
293
|
+
const distPath = path.join(root, "dist", "src", "agent", "definitions");
|
|
294
|
+
if (fs.existsSync(path.join(distPath, AGENT_DEFINITION_FILE))) {
|
|
295
|
+
return distPath;
|
|
296
|
+
}
|
|
297
|
+
const srcPath = path.join(root, "src", "agent", "definitions");
|
|
298
|
+
if (fs.existsSync(path.join(srcPath, AGENT_DEFINITION_FILE))) {
|
|
299
|
+
return srcPath;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
return adjacentDefs;
|
|
303
|
+
}
|
|
304
|
+
function loadAgentDefinition(definitionsDir) {
|
|
305
|
+
const filePath = path.join(definitionsDir, AGENT_DEFINITION_FILE);
|
|
306
|
+
const raw = fs.readFileSync(filePath, "utf-8");
|
|
307
|
+
const parsed = AgentDefinitionSchema.parse((0, import_yaml.parse)(raw));
|
|
308
|
+
return {
|
|
309
|
+
name: parsed.name,
|
|
310
|
+
displayName: parsed.displayName,
|
|
311
|
+
description: parsed.description.trim(),
|
|
312
|
+
model: parsed.model,
|
|
313
|
+
maxTurns: parsed.maxTurns,
|
|
314
|
+
timeoutSeconds: parsed.timeoutSeconds,
|
|
315
|
+
systemPromptPath: parsed.systemPromptPath,
|
|
316
|
+
tools: parsed.tools
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
function loadAgentTasks(definitionsDir) {
|
|
320
|
+
const tasksDir = path.join(definitionsDir, TASKS_SUBDIRECTORY);
|
|
321
|
+
if (!fs.existsSync(tasksDir)) return [];
|
|
322
|
+
const files = fs.readdirSync(tasksDir).filter((f) => f.endsWith(".yaml"));
|
|
323
|
+
return files.map((file) => {
|
|
324
|
+
const raw = fs.readFileSync(path.join(tasksDir, file), "utf-8");
|
|
325
|
+
const parsed = AgentTaskSchema.parse((0, import_yaml.parse)(raw));
|
|
326
|
+
return taskFromParsed(parsed);
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
function taskFromParsed(parsed) {
|
|
330
|
+
return {
|
|
331
|
+
name: parsed.name,
|
|
332
|
+
displayName: parsed.displayName,
|
|
333
|
+
description: parsed.description.trim(),
|
|
334
|
+
agent: parsed.agent,
|
|
335
|
+
prompt: parsed.prompt.trim(),
|
|
336
|
+
isDefault: parsed.isDefault,
|
|
337
|
+
...parsed.toolOverrides ? { toolOverrides: parsed.toolOverrides } : {},
|
|
338
|
+
...parsed.model ? { model: parsed.model } : {},
|
|
339
|
+
...parsed.maxTurns ? { maxTurns: parsed.maxTurns } : {},
|
|
340
|
+
...parsed.timeoutSeconds ? { timeoutSeconds: parsed.timeoutSeconds } : {},
|
|
341
|
+
...parsed.phases ? { phases: parsed.phases } : {},
|
|
342
|
+
...parsed.orchestrator ? { orchestrator: parsed.orchestrator } : {},
|
|
343
|
+
...parsed.contextQueries ? { contextQueries: parsed.contextQueries } : {},
|
|
344
|
+
...parsed.execution ? { execution: parsed.execution } : {},
|
|
345
|
+
...parsed.schemaVersion ? { schemaVersion: parsed.schemaVersion } : {}
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
function loadSystemPrompt(definitionsDir, relativePath) {
|
|
349
|
+
const filePath = path.resolve(definitionsDir, relativePath);
|
|
350
|
+
return fs.readFileSync(filePath, "utf-8").trim();
|
|
351
|
+
}
|
|
352
|
+
function resolveEffectiveConfig(definition, agentOverrides, taskOverrides) {
|
|
353
|
+
let model = definition.model;
|
|
354
|
+
let maxTurns = definition.maxTurns;
|
|
355
|
+
let timeoutSeconds = definition.timeoutSeconds;
|
|
356
|
+
let tools = [...definition.tools];
|
|
357
|
+
const agentId = agentOverrides?.id ?? DEFAULT_AGENT_ID;
|
|
358
|
+
if (agentOverrides) {
|
|
359
|
+
if (agentOverrides.model) model = agentOverrides.model;
|
|
360
|
+
if (agentOverrides.max_turns !== null) maxTurns = agentOverrides.max_turns;
|
|
361
|
+
if (agentOverrides.timeout_seconds !== null) timeoutSeconds = agentOverrides.timeout_seconds;
|
|
362
|
+
if (agentOverrides.tool_access) {
|
|
363
|
+
try {
|
|
364
|
+
const parsed = JSON.parse(agentOverrides.tool_access);
|
|
365
|
+
if (Array.isArray(parsed)) tools = parsed;
|
|
366
|
+
} catch {
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
if (taskOverrides?.model) model = taskOverrides.model;
|
|
371
|
+
if (taskOverrides?.maxTurns) maxTurns = taskOverrides.maxTurns;
|
|
372
|
+
if (taskOverrides?.timeoutSeconds) timeoutSeconds = taskOverrides.timeoutSeconds;
|
|
373
|
+
if (taskOverrides?.toolOverrides) {
|
|
374
|
+
tools = [...taskOverrides.toolOverrides];
|
|
375
|
+
}
|
|
376
|
+
if (taskOverrides?.execution) {
|
|
377
|
+
if (taskOverrides.execution.model) model = taskOverrides.execution.model;
|
|
378
|
+
if (taskOverrides.execution.maxTurns) maxTurns = taskOverrides.execution.maxTurns;
|
|
379
|
+
if (taskOverrides.execution.timeoutSeconds) timeoutSeconds = taskOverrides.execution.timeoutSeconds;
|
|
380
|
+
}
|
|
381
|
+
const taskName = taskOverrides?.name ?? "full-intelligence";
|
|
382
|
+
const taskDisplayName = taskOverrides?.displayName ?? "Full Intelligence";
|
|
383
|
+
const taskPrompt = taskOverrides?.prompt ?? "";
|
|
384
|
+
return {
|
|
385
|
+
agentId,
|
|
386
|
+
model,
|
|
387
|
+
maxTurns,
|
|
388
|
+
timeoutSeconds,
|
|
389
|
+
systemPromptPath: definition.systemPromptPath,
|
|
390
|
+
tools,
|
|
391
|
+
taskName,
|
|
392
|
+
taskDisplayName,
|
|
393
|
+
taskPrompt,
|
|
394
|
+
...taskOverrides?.phases ? { phases: taskOverrides.phases } : {},
|
|
395
|
+
...taskOverrides?.orchestrator ? { orchestrator: taskOverrides.orchestrator } : {},
|
|
396
|
+
...taskOverrides?.contextQueries ? { contextQueries: taskOverrides.contextQueries } : {},
|
|
397
|
+
...taskOverrides?.execution ? { execution: taskOverrides.execution } : {}
|
|
398
|
+
};
|
|
399
|
+
}
|
|
400
|
+
async function registerBuiltInAgentsAndTasks(definitionsDir, vaultDir) {
|
|
401
|
+
const definition = loadAgentDefinition(definitionsDir);
|
|
402
|
+
const tasks = loadAgentTasks(definitionsDir);
|
|
403
|
+
const now = epochSeconds();
|
|
404
|
+
registerAgent({
|
|
405
|
+
id: definition.name,
|
|
406
|
+
name: definition.displayName,
|
|
407
|
+
model: definition.model,
|
|
408
|
+
source: BUILT_IN_SOURCE,
|
|
409
|
+
max_turns: definition.maxTurns,
|
|
410
|
+
timeout_seconds: definition.timeoutSeconds,
|
|
411
|
+
tool_access: JSON.stringify(definition.tools),
|
|
412
|
+
created_at: now,
|
|
413
|
+
updated_at: now
|
|
414
|
+
});
|
|
415
|
+
for (const task of tasks) {
|
|
416
|
+
upsertTask({
|
|
417
|
+
id: task.name,
|
|
418
|
+
agent_id: definition.name,
|
|
419
|
+
source: BUILT_IN_SOURCE,
|
|
420
|
+
display_name: task.displayName,
|
|
421
|
+
description: task.description,
|
|
422
|
+
prompt: task.prompt,
|
|
423
|
+
is_default: task.isDefault ? 1 : 0,
|
|
424
|
+
tool_overrides: task.toolOverrides ? JSON.stringify(task.toolOverrides) : null,
|
|
425
|
+
config: JSON.stringify({
|
|
426
|
+
phases: task.phases ?? null,
|
|
427
|
+
execution: task.execution ?? null,
|
|
428
|
+
contextQueries: task.contextQueries ?? null,
|
|
429
|
+
schemaVersion: task.schemaVersion ?? 1
|
|
430
|
+
}),
|
|
431
|
+
created_at: now,
|
|
432
|
+
updated_at: now
|
|
433
|
+
});
|
|
434
|
+
}
|
|
435
|
+
const validTaskIds = tasks.map((t) => t.name);
|
|
436
|
+
if (validTaskIds.length > 0) {
|
|
437
|
+
const db = getDatabase();
|
|
438
|
+
const placeholders = validTaskIds.map(() => "?").join(", ");
|
|
439
|
+
db.prepare(
|
|
440
|
+
`DELETE FROM agent_tasks
|
|
441
|
+
WHERE source = ? AND agent_id = ? AND id NOT IN (${placeholders})`
|
|
442
|
+
).run(BUILT_IN_SOURCE, definition.name, ...validTaskIds);
|
|
443
|
+
}
|
|
444
|
+
if (vaultDir) {
|
|
445
|
+
const { loadAllTasks } = await import("./registry-J4XTWARS.js");
|
|
446
|
+
const allTasks = loadAllTasks(definitionsDir, vaultDir);
|
|
447
|
+
for (const [name, task] of allTasks) {
|
|
448
|
+
if (task.source === USER_TASK_SOURCE) {
|
|
449
|
+
upsertTask({
|
|
450
|
+
id: name,
|
|
451
|
+
agent_id: task.agent ?? definition.name,
|
|
452
|
+
source: USER_TASK_SOURCE,
|
|
453
|
+
display_name: task.displayName,
|
|
454
|
+
description: task.description,
|
|
455
|
+
prompt: task.prompt,
|
|
456
|
+
is_default: task.isDefault ? 1 : 0,
|
|
457
|
+
tool_overrides: task.toolOverrides ? JSON.stringify(task.toolOverrides) : null,
|
|
458
|
+
config: JSON.stringify({
|
|
459
|
+
phases: task.phases ?? null,
|
|
460
|
+
execution: task.execution ?? null,
|
|
461
|
+
contextQueries: task.contextQueries ?? null,
|
|
462
|
+
schemaVersion: task.schemaVersion ?? 1
|
|
463
|
+
}),
|
|
464
|
+
created_at: now,
|
|
465
|
+
updated_at: now
|
|
466
|
+
});
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
export {
|
|
473
|
+
registerAgent,
|
|
474
|
+
getAgent,
|
|
475
|
+
getTask,
|
|
476
|
+
getDefaultTask,
|
|
477
|
+
AgentTaskSchema,
|
|
478
|
+
resolveDefinitionsDir,
|
|
479
|
+
loadAgentDefinition,
|
|
480
|
+
loadAgentTasks,
|
|
481
|
+
taskFromParsed,
|
|
482
|
+
loadSystemPrompt,
|
|
483
|
+
resolveEffectiveConfig,
|
|
484
|
+
registerBuiltInAgentsAndTasks
|
|
485
|
+
};
|
|
486
|
+
//# sourceMappingURL=chunk-JMJJEQ3P.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/agent/loader.ts","../src/db/queries/agents.ts","../src/db/queries/tasks.ts","../src/agent/schemas.ts"],"sourcesContent":["/**\n * Agent definition and task YAML loader.\n *\n * Reads agent.yaml and tasks/*.yaml from the definitions directory,\n * validates their shape, and provides helpers for merging built-in\n * definitions with database overrides into an EffectiveConfig.\n */\n\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { findPackageRoot } from '@myco/utils/find-package-root.js';\nimport { parse as parseYaml } from 'yaml';\nimport { epochSeconds, DEFAULT_AGENT_ID, BUILT_IN_SOURCE, USER_TASK_SOURCE } from '@myco/constants.js';\nimport { getDatabase } from '@myco/db/client.js';\nimport { registerAgent } from '@myco/db/queries/agents.js';\nimport { upsertTask } from '@myco/db/queries/tasks.js';\nimport type { AgentRow } from '@myco/db/queries/agents.js';\nimport type { AgentDefinition, AgentTask, EffectiveConfig } from './types.js';\nimport { AgentDefinitionSchema, AgentTaskSchema } from './schemas.js';\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\n/** Filename for the built-in agent definition. */\nconst AGENT_DEFINITION_FILE = 'agent.yaml';\n\n/** Subdirectory containing task YAML files. */\nconst TASKS_SUBDIRECTORY = 'tasks';\n\n// Package root resolution uses shared findPackageRoot from @myco/utils\n\n// BUILT_IN_SOURCE imported from @myco/constants.js\n\n// ---------------------------------------------------------------------------\n// Definitions directory resolution\n// ---------------------------------------------------------------------------\n\n/**\n * Resolve the definitions directory at runtime.\n *\n * Strategy (same pattern as `src/prompts/index.ts`):\n * 1. Walk up from `import.meta.url` looking for `package.json`.\n * 2. From package root, try `dist/src/agent/definitions/` (tsup output).\n * 3. Fall back to `src/agent/definitions/` (dev mode / tsc output).\n * 4. Also check if the current file's directory already contains agent.yaml.\n */\nexport function resolveDefinitionsDir(): string {\n const scriptDir = path.dirname(fileURLToPath(import.meta.url));\n\n // Check if we're already adjacent to the definitions (tsc output or dev mode)\n const adjacentDefs = path.join(scriptDir, 'definitions');\n if (fs.existsSync(path.join(adjacentDefs, AGENT_DEFINITION_FILE))) {\n return adjacentDefs;\n }\n\n // Walk up to package root using shared utility\n const root = findPackageRoot(scriptDir);\n if (root) {\n // Try dist path first (tsup bundled output)\n const distPath = path.join(root, 'dist', 'src', 'agent', 'definitions');\n if (fs.existsSync(path.join(distPath, AGENT_DEFINITION_FILE))) {\n return distPath;\n }\n // Fall back to src path (dev mode)\n const srcPath = path.join(root, 'src', 'agent', 'definitions');\n if (fs.existsSync(path.join(srcPath, AGENT_DEFINITION_FILE))) {\n return srcPath;\n }\n }\n\n // Final fallback: adjacent to current file\n return adjacentDefs;\n}\n\n// ---------------------------------------------------------------------------\n// YAML loaders\n// ---------------------------------------------------------------------------\n\n/**\n * Load and parse the built-in agent definition from `agent.yaml`.\n *\n * @param definitionsDir — path to the definitions directory.\n * @returns the parsed AgentDefinition.\n * @throws if the file is missing or malformed.\n */\nexport function loadAgentDefinition(definitionsDir: string): AgentDefinition {\n const filePath = path.join(definitionsDir, AGENT_DEFINITION_FILE);\n const raw = fs.readFileSync(filePath, 'utf-8');\n const parsed = AgentDefinitionSchema.parse(parseYaml(raw));\n\n return {\n name: parsed.name,\n displayName: parsed.displayName,\n description: parsed.description.trim(),\n model: parsed.model,\n maxTurns: parsed.maxTurns,\n timeoutSeconds: parsed.timeoutSeconds,\n systemPromptPath: parsed.systemPromptPath,\n tools: parsed.tools,\n };\n}\n\n/**\n * Load and parse all task YAML files from `tasks/`.\n *\n * @param definitionsDir — path to the definitions directory.\n * @returns array of parsed AgentTask objects.\n */\nexport function loadAgentTasks(definitionsDir: string): AgentTask[] {\n const tasksDir = path.join(definitionsDir, TASKS_SUBDIRECTORY);\n if (!fs.existsSync(tasksDir)) return [];\n\n const files = fs.readdirSync(tasksDir).filter((f) => f.endsWith('.yaml'));\n return files.map((file) => {\n const raw = fs.readFileSync(path.join(tasksDir, file), 'utf-8');\n const parsed = AgentTaskSchema.parse(parseYaml(raw));\n\n return taskFromParsed(parsed);\n });\n}\n\n/**\n * Convert a Zod-parsed task schema result to an AgentTask object.\n *\n * Shared by loadAgentTasks (built-in) and registry (user tasks) to ensure\n * all optional fields are consistently spread. Adding a new optional field\n * to AgentTaskSchema only requires updating this one function.\n */\nexport function taskFromParsed(parsed: AgentTask): AgentTask {\n return {\n name: parsed.name,\n displayName: parsed.displayName,\n description: parsed.description.trim(),\n agent: parsed.agent,\n prompt: parsed.prompt.trim(),\n isDefault: parsed.isDefault,\n ...(parsed.toolOverrides ? { toolOverrides: parsed.toolOverrides } : {}),\n ...(parsed.model ? { model: parsed.model } : {}),\n ...(parsed.maxTurns ? { maxTurns: parsed.maxTurns } : {}),\n ...(parsed.timeoutSeconds ? { timeoutSeconds: parsed.timeoutSeconds } : {}),\n ...(parsed.phases ? { phases: parsed.phases } : {}),\n ...(parsed.orchestrator ? { orchestrator: parsed.orchestrator } : {}),\n ...(parsed.contextQueries ? { contextQueries: parsed.contextQueries } : {}),\n ...(parsed.execution ? { execution: parsed.execution } : {}),\n ...(parsed.schemaVersion ? { schemaVersion: parsed.schemaVersion } : {}),\n };\n}\n\n/**\n * Load a system prompt markdown file.\n *\n * @param definitionsDir — path to the definitions directory.\n * @param relativePath — path relative to definitionsDir (from AgentDefinition.systemPromptPath).\n * @returns the prompt file content as a string.\n */\nexport function loadSystemPrompt(definitionsDir: string, relativePath: string): string {\n const filePath = path.resolve(definitionsDir, relativePath);\n return fs.readFileSync(filePath, 'utf-8').trim();\n}\n\n// ---------------------------------------------------------------------------\n// Config resolution\n// ---------------------------------------------------------------------------\n\n/**\n * Merge a built-in AgentDefinition with optional database overrides and\n * task-specific configuration to produce the effective runtime config.\n *\n * Priority (highest wins):\n * 1. Task toolOverrides (replaces tool list entirely if present)\n * 2. AgentRow database overrides (model, maxTurns, timeoutSeconds, tool_access)\n * 3. Built-in AgentDefinition defaults\n *\n * @param definition — the built-in agent definition from YAML.\n * @param agentOverrides — optional database row with user-applied overrides.\n * @param taskOverrides — optional task definition (determines prompt and may override tools).\n * @returns the merged EffectiveConfig.\n */\nexport function resolveEffectiveConfig(\n definition: AgentDefinition,\n agentOverrides?: AgentRow | null,\n taskOverrides?: AgentTask,\n): EffectiveConfig {\n // Start with definition defaults\n let model = definition.model;\n let maxTurns = definition.maxTurns;\n let timeoutSeconds = definition.timeoutSeconds;\n let tools = [...definition.tools];\n const agentId = agentOverrides?.id ?? DEFAULT_AGENT_ID;\n\n // Apply agent DB overrides\n if (agentOverrides) {\n if (agentOverrides.model) model = agentOverrides.model;\n if (agentOverrides.max_turns !== null) maxTurns = agentOverrides.max_turns;\n if (agentOverrides.timeout_seconds !== null) timeoutSeconds = agentOverrides.timeout_seconds;\n if (agentOverrides.tool_access) {\n try {\n const parsed = JSON.parse(agentOverrides.tool_access);\n if (Array.isArray(parsed)) tools = parsed as string[];\n } catch {\n // Invalid JSON in tool_access — keep definition defaults\n }\n }\n }\n\n // Apply task overrides (model, turns, timeout, tool list)\n if (taskOverrides?.model) model = taskOverrides.model;\n if (taskOverrides?.maxTurns) maxTurns = taskOverrides.maxTurns;\n if (taskOverrides?.timeoutSeconds) timeoutSeconds = taskOverrides.timeoutSeconds;\n if (taskOverrides?.toolOverrides) {\n tools = [...taskOverrides.toolOverrides];\n }\n\n // Apply execution config overrides (highest priority)\n // Precedence: execution.model > task.model > agent.model\n if (taskOverrides?.execution) {\n if (taskOverrides.execution.model) model = taskOverrides.execution.model;\n if (taskOverrides.execution.maxTurns) maxTurns = taskOverrides.execution.maxTurns;\n if (taskOverrides.execution.timeoutSeconds) timeoutSeconds = taskOverrides.execution.timeoutSeconds;\n }\n\n // Task prompt and display info (fall back to a generic prompt)\n const taskName = taskOverrides?.name ?? 'full-intelligence';\n const taskDisplayName = taskOverrides?.displayName ?? 'Full Intelligence';\n const taskPrompt = taskOverrides?.prompt ?? '';\n\n return {\n agentId,\n model,\n maxTurns,\n timeoutSeconds,\n systemPromptPath: definition.systemPromptPath,\n tools,\n taskName,\n taskDisplayName,\n taskPrompt,\n ...(taskOverrides?.phases ? { phases: taskOverrides.phases } : {}),\n ...(taskOverrides?.orchestrator ? { orchestrator: taskOverrides.orchestrator } : {}),\n ...(taskOverrides?.contextQueries ? { contextQueries: taskOverrides.contextQueries } : {}),\n ...(taskOverrides?.execution ? { execution: taskOverrides.execution } : {}),\n };\n}\n\n// ---------------------------------------------------------------------------\n// Database registration\n// ---------------------------------------------------------------------------\n\n/**\n * Register the built-in agent and all built-in tasks into the database.\n *\n * Idempotent: uses upsert (ON CONFLICT DO UPDATE) for both agent and tasks.\n * Safe to call on every daemon startup.\n *\n * @param definitionsDir — path to the definitions directory.\n */\nexport async function registerBuiltInAgentsAndTasks(definitionsDir: string, vaultDir?: string): Promise<void> {\n const definition = loadAgentDefinition(definitionsDir);\n const tasks = loadAgentTasks(definitionsDir);\n const now = epochSeconds();\n\n // Upsert the built-in agent\n registerAgent({\n id: definition.name,\n name: definition.displayName,\n model: definition.model,\n source: BUILT_IN_SOURCE,\n max_turns: definition.maxTurns,\n timeout_seconds: definition.timeoutSeconds,\n tool_access: JSON.stringify(definition.tools),\n created_at: now,\n updated_at: now,\n });\n\n // Upsert all built-in tasks\n for (const task of tasks) {\n upsertTask({\n id: task.name,\n agent_id: definition.name,\n source: BUILT_IN_SOURCE,\n display_name: task.displayName,\n description: task.description,\n prompt: task.prompt,\n is_default: task.isDefault ? 1 : 0,\n tool_overrides: task.toolOverrides ? JSON.stringify(task.toolOverrides) : null,\n config: JSON.stringify({\n phases: task.phases ?? null,\n execution: task.execution ?? null,\n contextQueries: task.contextQueries ?? null,\n schemaVersion: task.schemaVersion ?? 1,\n }),\n created_at: now,\n updated_at: now,\n });\n }\n\n // Remove built-in tasks that no longer have YAML definitions\n const validTaskIds = tasks.map(t => t.name);\n if (validTaskIds.length > 0) {\n const db = getDatabase();\n const placeholders = validTaskIds.map(() => '?').join(', ');\n db.prepare(\n `DELETE FROM agent_tasks\n WHERE source = ? AND agent_id = ? AND id NOT IN (${placeholders})`,\n ).run(BUILT_IN_SOURCE, definition.name, ...validTaskIds);\n }\n\n // Register user tasks from the vault (if vault dir provided)\n if (vaultDir) {\n const { loadAllTasks } = await import('./registry.js');\n const allTasks = loadAllTasks(definitionsDir, vaultDir);\n for (const [name, task] of allTasks) {\n if (task.source === USER_TASK_SOURCE) {\n upsertTask({\n id: name,\n agent_id: task.agent ?? definition.name,\n source: USER_TASK_SOURCE,\n display_name: task.displayName,\n description: task.description,\n prompt: task.prompt,\n is_default: task.isDefault ? 1 : 0,\n tool_overrides: task.toolOverrides ? JSON.stringify(task.toolOverrides) : null,\n config: JSON.stringify({\n phases: task.phases ?? null,\n execution: task.execution ?? null,\n contextQueries: task.contextQueries ?? null,\n schemaVersion: task.schemaVersion ?? 1,\n }),\n created_at: now,\n updated_at: now,\n });\n }\n }\n }\n}\n","/**\n * Agent CRUD query helpers.\n *\n * All functions obtain the SQLite instance internally via `getDatabase()`.\n * Queries use positional `?` placeholders throughout (better-sqlite3).\n */\n\nimport { getDatabase } from '@myco/db/client.js';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** Fields required (or optional) when registering an agent. */\nexport interface AgentInsert {\n id: string;\n name: string;\n created_at: number;\n provider?: string | null;\n model?: string | null;\n system_prompt_hash?: string | null;\n config?: string | null;\n source?: string;\n system_prompt?: string | null;\n max_turns?: number | null;\n timeout_seconds?: number | null;\n tool_access?: string | null;\n enabled?: number;\n updated_at?: number | null;\n}\n\n/** Row shape returned from agent queries (all columns). */\nexport interface AgentRow {\n id: string;\n name: string;\n provider: string | null;\n model: string | null;\n system_prompt_hash: string | null;\n config: string | null;\n source: string;\n system_prompt: string | null;\n max_turns: number | null;\n timeout_seconds: number | null;\n tool_access: string | null;\n enabled: number;\n created_at: number;\n updated_at: number | null;\n}\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\n/** Default agent source for new agents. */\nconst DEFAULT_SOURCE = 'built-in';\n\n/** Default enabled flag for new agents. */\nconst DEFAULT_ENABLED = 1;\n\n// ---------------------------------------------------------------------------\n// Column list\n// ---------------------------------------------------------------------------\n\nconst AGENT_COLUMNS = [\n 'id',\n 'name',\n 'provider',\n 'model',\n 'system_prompt_hash',\n 'config',\n 'source',\n 'system_prompt',\n 'max_turns',\n 'timeout_seconds',\n 'tool_access',\n 'enabled',\n 'created_at',\n 'updated_at',\n] as const;\n\nconst SELECT_COLUMNS = AGENT_COLUMNS.join(', ');\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Normalize a SQLite result row into a typed AgentRow. */\nfunction toAgentRow(row: Record<string, unknown>): AgentRow {\n return {\n id: row.id as string,\n name: row.name as string,\n provider: (row.provider as string) ?? null,\n model: (row.model as string) ?? null,\n system_prompt_hash: (row.system_prompt_hash as string) ?? null,\n config: (row.config as string) ?? null,\n source: (row.source as string) ?? DEFAULT_SOURCE,\n system_prompt: (row.system_prompt as string) ?? null,\n max_turns: (row.max_turns as number) ?? null,\n timeout_seconds: (row.timeout_seconds as number) ?? null,\n tool_access: (row.tool_access as string) ?? null,\n enabled: (row.enabled as number) ?? DEFAULT_ENABLED,\n created_at: row.created_at as number,\n updated_at: (row.updated_at as number) ?? null,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * Register an agent or update it if the id already exists.\n *\n * On conflict the row is updated with the values from `data`.\n * This is the idempotent upsert — calling twice with the same data\n * produces the same result.\n */\nexport function registerAgent(data: AgentInsert): AgentRow {\n const db = getDatabase();\n\n db.prepare(\n `INSERT INTO agents (\n id, name, provider, model, system_prompt_hash, config,\n source, system_prompt, max_turns, timeout_seconds, tool_access,\n enabled, created_at, updated_at\n ) VALUES (\n ?, ?, ?, ?, ?, ?,\n ?, ?, ?, ?, ?,\n ?, ?, ?\n )\n ON CONFLICT (id) DO UPDATE SET\n name = EXCLUDED.name,\n provider = EXCLUDED.provider,\n model = EXCLUDED.model,\n system_prompt_hash = EXCLUDED.system_prompt_hash,\n config = EXCLUDED.config,\n source = EXCLUDED.source,\n system_prompt = EXCLUDED.system_prompt,\n max_turns = EXCLUDED.max_turns,\n timeout_seconds = EXCLUDED.timeout_seconds,\n tool_access = EXCLUDED.tool_access,\n enabled = EXCLUDED.enabled,\n updated_at = EXCLUDED.updated_at`,\n ).run(\n data.id,\n data.name,\n data.provider ?? null,\n data.model ?? null,\n data.system_prompt_hash ?? null,\n data.config ?? null,\n data.source ?? DEFAULT_SOURCE,\n data.system_prompt ?? null,\n data.max_turns ?? null,\n data.timeout_seconds ?? null,\n data.tool_access ?? null,\n data.enabled ?? DEFAULT_ENABLED,\n data.created_at,\n data.updated_at ?? null,\n );\n\n return toAgentRow(\n db.prepare(`SELECT ${SELECT_COLUMNS} FROM agents WHERE id = ?`).get(data.id) as Record<string, unknown>,\n );\n}\n\n/**\n * Retrieve a single agent by id.\n *\n * @returns the agent row, or null if not found.\n */\nexport function getAgent(id: string): AgentRow | null {\n const db = getDatabase();\n\n const row = db.prepare(\n `SELECT ${SELECT_COLUMNS} FROM agents WHERE id = ?`,\n ).get(id) as Record<string, unknown> | undefined;\n\n if (!row) return null;\n return toAgentRow(row);\n}\n\n/**\n * List all agents, ordered by created_at ASC.\n */\nexport function listAgents(): AgentRow[] {\n const db = getDatabase();\n\n const rows = db.prepare(\n `SELECT ${SELECT_COLUMNS}\n FROM agents\n ORDER BY created_at ASC`,\n ).all() as Record<string, unknown>[];\n\n return rows.map(toAgentRow);\n}\n","/**\n * Agent task CRUD query helpers.\n *\n * All functions obtain the SQLite instance internally via `getDatabase()`.\n * Queries use positional `?` placeholders throughout (better-sqlite3).\n */\n\nimport { getDatabase } from '@myco/db/client.js';\nimport { BUILT_IN_SOURCE } from '@myco/constants.js';\nimport type { TaskConfig } from '@myco/agent/types.js';\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\n/** Default number of tasks returned by listTasks when no limit given. */\nconst DEFAULT_LIST_LIMIT = 100;\n\n/** Default task source for new tasks. */\nconst DEFAULT_SOURCE = BUILT_IN_SOURCE;\n\n/** Default is_default flag for new tasks. */\nconst DEFAULT_IS_DEFAULT = 0;\n\n/** Value indicating a task is the default for its agent. */\nconst IS_DEFAULT_TRUE = 1;\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** Fields required (or optional) when upserting a task. */\nexport interface TaskInsert {\n id: string;\n agent_id: string;\n prompt: string;\n created_at: number;\n source?: string;\n display_name?: string | null;\n description?: string | null;\n is_default?: number;\n tool_overrides?: string | null;\n model?: string | null;\n config?: string | null;\n updated_at?: number | null;\n}\n\n/** Row shape returned from agent_tasks queries (all columns). */\nexport interface TaskRow {\n id: string;\n agent_id: string;\n source: string;\n display_name: string | null;\n description: string | null;\n prompt: string;\n is_default: number;\n tool_overrides: string | null;\n model: string | null;\n config: string | null;\n created_at: number;\n updated_at: number | null;\n}\n\n/** Filter options for `listTasks`. */\nexport interface ListTasksOptions {\n limit?: number;\n agent_id?: string;\n source?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Column list\n// ---------------------------------------------------------------------------\n\nconst TASK_COLUMNS = [\n 'id',\n 'agent_id',\n 'source',\n 'display_name',\n 'description',\n 'prompt',\n 'is_default',\n 'tool_overrides',\n 'model',\n 'config',\n 'created_at',\n 'updated_at',\n] as const;\n\nconst SELECT_COLUMNS = TASK_COLUMNS.join(', ');\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\n/** Normalize a SQLite result row into a typed TaskRow. */\nfunction toTaskRow(row: Record<string, unknown>): TaskRow {\n return {\n id: row.id as string,\n agent_id: row.agent_id as string,\n source: (row.source as string) ?? DEFAULT_SOURCE,\n display_name: (row.display_name as string) ?? null,\n description: (row.description as string) ?? null,\n prompt: row.prompt as string,\n is_default: (row.is_default as number) ?? DEFAULT_IS_DEFAULT,\n tool_overrides: (row.tool_overrides as string) ?? null,\n model: (row.model as string) ?? null,\n config: (row.config as string) ?? null,\n created_at: row.created_at as number,\n updated_at: (row.updated_at as number) ?? null,\n };\n}\n\n/** Serialize a TaskConfig to a JSON string for storage. */\nexport function serializeConfig(config: TaskConfig | null): string | null {\n if (!config) return null;\n return JSON.stringify(config);\n}\n\n/** Deserialize a TaskConfig from a stored JSON string. Returns null on failure. */\nexport function deserializeConfig(raw: string | null): TaskConfig | null {\n if (!raw) return null;\n try {\n return JSON.parse(raw) as TaskConfig;\n } catch {\n return null;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * Upsert a task — insert or update on conflict.\n *\n * On conflict the row is updated with the values from `data`.\n * This is the idempotent upsert — calling twice with the same data\n * produces the same result.\n */\nexport function upsertTask(data: TaskInsert): TaskRow {\n const db = getDatabase();\n\n db.prepare(\n `INSERT INTO agent_tasks (\n id, agent_id, source, display_name, description,\n prompt, is_default, tool_overrides, model, config,\n created_at, updated_at\n ) VALUES (\n ?, ?, ?, ?, ?,\n ?, ?, ?, ?, ?,\n ?, ?\n )\n ON CONFLICT (id) DO UPDATE SET\n agent_id = EXCLUDED.agent_id,\n source = EXCLUDED.source,\n display_name = EXCLUDED.display_name,\n description = EXCLUDED.description,\n prompt = EXCLUDED.prompt,\n is_default = EXCLUDED.is_default,\n tool_overrides = EXCLUDED.tool_overrides,\n model = EXCLUDED.model,\n config = EXCLUDED.config,\n updated_at = EXCLUDED.updated_at`,\n ).run(\n data.id,\n data.agent_id,\n data.source ?? DEFAULT_SOURCE,\n data.display_name ?? null,\n data.description ?? null,\n data.prompt,\n data.is_default ?? DEFAULT_IS_DEFAULT,\n data.tool_overrides ?? null,\n data.model ?? null,\n data.config ?? null,\n data.created_at,\n data.updated_at ?? null,\n );\n\n return toTaskRow(\n db.prepare(`SELECT ${SELECT_COLUMNS} FROM agent_tasks WHERE id = ?`).get(data.id) as Record<string, unknown>,\n );\n}\n\n/**\n * Retrieve a single task by id.\n *\n * @returns the task row, or null if not found.\n */\nexport function getTask(id: string): TaskRow | null {\n const db = getDatabase();\n\n const row = db.prepare(\n `SELECT ${SELECT_COLUMNS} FROM agent_tasks WHERE id = ?`,\n ).get(id) as Record<string, unknown> | undefined;\n\n if (!row) return null;\n return toTaskRow(row);\n}\n\n/**\n * List tasks with optional filters, ordered by created_at ASC.\n */\nexport function listTasks(\n options: ListTasksOptions = {},\n): TaskRow[] {\n const db = getDatabase();\n\n const conditions: string[] = [];\n const params: unknown[] = [];\n\n if (options.agent_id !== undefined) {\n conditions.push(`agent_id = ?`);\n params.push(options.agent_id);\n }\n\n if (options.source !== undefined) {\n conditions.push(`source = ?`);\n params.push(options.source);\n }\n\n const where = conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : '';\n const limit = options.limit ?? DEFAULT_LIST_LIMIT;\n\n params.push(limit);\n\n const rows = db.prepare(\n `SELECT ${SELECT_COLUMNS}\n FROM agent_tasks\n ${where}\n ORDER BY created_at ASC\n LIMIT ?`,\n ).all(...params) as Record<string, unknown>[];\n\n return rows.map(toTaskRow);\n}\n\n/**\n * Get the default task for an agent.\n *\n * @returns the default task row, or null if no default exists.\n */\nexport function getDefaultTask(\n agentId: string,\n): TaskRow | null {\n const db = getDatabase();\n\n const row = db.prepare(\n `SELECT ${SELECT_COLUMNS}\n FROM agent_tasks\n WHERE agent_id = ? AND is_default = ?\n LIMIT 1`,\n ).get(agentId, IS_DEFAULT_TRUE) as Record<string, unknown> | undefined;\n\n if (!row) return null;\n return toTaskRow(row);\n}\n\n/**\n * List all tasks for an agent, ordered by display_name ASC.\n *\n * Rows with a null display_name sort before named tasks.\n */\nexport function listTasksByAgent(\n agentId: string,\n): TaskRow[] {\n const db = getDatabase();\n\n const rows = db.prepare(\n `SELECT ${SELECT_COLUMNS}\n FROM agent_tasks\n WHERE agent_id = ?\n ORDER BY display_name ASC`,\n ).all(agentId) as Record<string, unknown>[];\n\n return rows.map(toTaskRow);\n}\n\n/**\n * Delete a task by id.\n *\n * Built-in tasks (source = 'built-in') are protected and cannot be deleted.\n *\n * @returns true if the task was deleted, false if not found or protected.\n */\nexport function deleteTask(id: string): boolean {\n const db = getDatabase();\n const info = db.prepare(\n `DELETE FROM agent_tasks WHERE id = ? AND source != ?`,\n ).run(id, BUILT_IN_SOURCE);\n return info.changes > 0;\n}\n","/**\n * Zod schemas for agent definition and task YAML validation.\n *\n * These schemas are shared between the loader (which validates YAML files)\n * and any other code that needs to parse or validate task/agent config.\n */\n\nimport { z } from 'zod/v4';\n\n// ---------------------------------------------------------------------------\n// Schema version\n// ---------------------------------------------------------------------------\n\n/** Current schema version for task config structures. */\nexport const CURRENT_TASK_SCHEMA_VERSION = 1;\n\n// ---------------------------------------------------------------------------\n// Shared sub-schemas\n// ---------------------------------------------------------------------------\n\n/** Schema for API provider configuration. */\nexport const ProviderConfigSchema = z.object({\n type: z.enum(['cloud', 'ollama', 'lmstudio']),\n baseUrl: z.string().optional(),\n apiKey: z.string().optional(),\n model: z.string().optional(),\n});\n\n/** Schema for execution configuration overrides. */\nexport const ExecutionConfigSchema = z.object({\n model: z.string().optional(),\n maxTurns: z.number().optional(),\n timeoutSeconds: z.number().optional(),\n provider: ProviderConfigSchema.optional(),\n});\n\n/** Schema for a single context query entry. */\nexport const ContextQuerySchema = z.object({\n tool: z.string(),\n queryTemplate: z.string(),\n limit: z.number(),\n purpose: z.string(),\n required: z.boolean(),\n});\n\n// ---------------------------------------------------------------------------\n// Agent definition schema\n// ---------------------------------------------------------------------------\n\n/** Schema for agent.yaml agent definition files. */\nexport const AgentDefinitionSchema = z.object({\n name: z.string(),\n displayName: z.string(),\n description: z.string(),\n model: z.string(),\n maxTurns: z.number(),\n timeoutSeconds: z.number(),\n systemPromptPath: z.string(),\n tools: z.array(z.string()),\n});\n\n// ---------------------------------------------------------------------------\n// Task schemas\n// ---------------------------------------------------------------------------\n\n/** Schema for orchestrator configuration on a task definition. */\nexport const OrchestratorConfigSchema = z.object({\n enabled: z.boolean(),\n model: z.string().optional(),\n maxTurns: z.number().optional(),\n});\n\n/** Schema for a single phase within a phased task pipeline. */\nexport const PhaseDefinitionSchema = z.object({\n name: z.string(),\n prompt: z.string(),\n tools: z.array(z.string()),\n maxTurns: z.number(),\n model: z.string().optional(),\n required: z.boolean(),\n dependsOn: z.array(z.string()).optional(),\n provider: ProviderConfigSchema.optional(),\n skipPriorContext: z.boolean().optional(),\n});\n\n/** Schema for task YAML files in tasks/. */\nexport const AgentTaskSchema = z.object({\n name: z.string(),\n displayName: z.string(),\n description: z.string(),\n agent: z.string(),\n prompt: z.string(),\n isDefault: z.boolean(),\n toolOverrides: z.array(z.string()).optional(),\n model: z.string().optional(),\n maxTurns: z.number().optional(),\n timeoutSeconds: z.number().optional(),\n phases: z.array(PhaseDefinitionSchema).optional(),\n execution: ExecutionConfigSchema.optional(),\n contextQueries: z.record(z.string(), z.array(ContextQuerySchema)).optional(),\n schemaVersion: z.number().optional(),\n orchestrator: OrchestratorConfigSchema.optional(),\n});\n"],"mappings":"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","names":["DEFAULT_SOURCE","SELECT_COLUMNS","DEFAULT_SOURCE","SELECT_COLUMNS","SELECT_COLUMNS","parseYaml"]}
|