@goondocks/myco 0.19.5 → 0.20.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/dist/{agent-run-3IQXE5PI.js → agent-run-4HUXVRHW.js} +8 -8
- package/dist/{agent-tasks-5DIA3CE5.js → agent-tasks-JF45ELB6.js} +8 -8
- package/dist/{chunk-DURKJTVO.js → chunk-3WOS4TAR.js} +9 -1
- package/dist/chunk-3WOS4TAR.js.map +1 -0
- package/dist/{chunk-27ZDDWIA.js → chunk-4LCIKVDM.js} +49 -21
- package/dist/chunk-4LCIKVDM.js.map +1 -0
- package/dist/{chunk-Q4QD6LJT.js → chunk-4M7EWPIA.js} +3 -3
- package/dist/{chunk-FGKCE5AE.js → chunk-4YFKBL3F.js} +2 -2
- package/dist/{chunk-KYH4V4ML.js → chunk-57O67XVF.js} +3 -3
- package/dist/{chunk-7ONVLO43.js → chunk-5XIVBO25.js} +2 -2
- package/dist/{chunk-QLCD77AN.js → chunk-6RFZWV4R.js} +18 -1
- package/dist/chunk-6RFZWV4R.js.map +1 -0
- package/dist/{chunk-VH7XYQFL.js → chunk-ACQ2AIEM.js} +2 -2
- package/dist/{chunk-6ZDJXSEO.js → chunk-BPRIYNLE.js} +3 -3
- package/dist/chunk-CUDIZJY7.js +36 -0
- package/dist/chunk-CUDIZJY7.js.map +1 -0
- package/dist/{chunk-WKNAKQKA.js → chunk-DCSGJ7W4.js} +13 -19
- package/dist/chunk-DCSGJ7W4.js.map +1 -0
- package/dist/{chunk-Q6OEZM3S.js → chunk-EVDQKYCG.js} +237 -10
- package/dist/chunk-EVDQKYCG.js.map +1 -0
- package/dist/{chunk-I54KLC6H.js → chunk-FLLBJLHM.js} +3 -1
- package/dist/{chunk-I54KLC6H.js.map → chunk-FLLBJLHM.js.map} +1 -1
- package/dist/{chunk-PMT2LSTQ.js → chunk-FMRZ26U5.js} +2 -2
- package/dist/{chunk-3J6TUJSV.js → chunk-KHT24OWC.js} +3 -3
- package/dist/{chunk-5OXBT5MD.js → chunk-L6XFAJIF.js} +65 -14
- package/dist/chunk-L6XFAJIF.js.map +1 -0
- package/dist/{chunk-6DDRJQ4X.js → chunk-MYOZLMB2.js} +2 -2
- package/dist/{chunk-UVKQ62II.js → chunk-NGROSFOH.js} +24 -2
- package/dist/chunk-NGROSFOH.js.map +1 -0
- package/dist/{chunk-K2QX43GC.js → chunk-P3DN5EWW.js} +4 -4
- package/dist/{chunk-IQ5LQTV7.js → chunk-POR75WM6.js} +4 -4
- package/dist/{chunk-KABTXALI.js → chunk-QS5TWZBL.js} +4 -4
- package/dist/{chunk-UTSCRMJE.js → chunk-SRXTSI25.js} +110 -4
- package/dist/chunk-SRXTSI25.js.map +1 -0
- package/dist/{chunk-2QJCV3UL.js → chunk-UOQQENDW.js} +3 -3
- package/dist/{chunk-GFR542SM.js → chunk-US4LNCAT.js} +5 -11
- package/dist/chunk-US4LNCAT.js.map +1 -0
- package/dist/{chunk-44PZCAYS.js → chunk-XL75KZGI.js} +23 -13
- package/dist/chunk-XL75KZGI.js.map +1 -0
- package/dist/{chunk-5WPTS6A4.js → chunk-YSNIAJ5D.js} +7 -4
- package/dist/chunk-YSNIAJ5D.js.map +1 -0
- package/dist/chunk-ZXZPJJN3.js +54 -0
- package/dist/chunk-ZXZPJJN3.js.map +1 -0
- package/dist/{cli-RTUSGLTM.js → cli-AHTINAHY.js} +43 -43
- package/dist/{client-YWE5YJB7.js → client-LHENCAV3.js} +4 -4
- package/dist/{config-I5MJ6RXI.js → config-XPV5GDE4.js} +8 -16
- package/dist/config-XPV5GDE4.js.map +1 -0
- package/dist/{detect-BEOIHGBC.js → detect-PXNM6TA7.js} +2 -2
- package/dist/{detect-providers-2EY55EHK.js → detect-providers-5KOPZ7J2.js} +4 -4
- package/dist/{doctor-FIG7VEYV.js → doctor-XPCF5HV5.js} +13 -13
- package/dist/{executor-2TMGOVEA.js → executor-ACDHGTRH.js} +115 -77
- package/dist/executor-ACDHGTRH.js.map +1 -0
- package/dist/{init-3536BYDC.js → init-V3KCC36O.js} +14 -14
- package/dist/{installer-YH3WQISI.js → installer-ZNK4JSQA.js} +4 -4
- package/dist/{llm-SWDDQQWY.js → llm-TH4NLIRM.js} +4 -4
- package/dist/{loader-K4WF4EEJ.js → loader-H7OFASVC.js} +15 -3
- package/dist/{loader-AAZ6VUIA.js → loader-TSB5M7FD.js} +3 -3
- package/dist/{logs-KNKPQE5A.js → logs-7YVGGBIS.js} +2 -2
- package/dist/{main-R5ZD5OIZ.js → main-5S4MDCIO.js} +770 -176
- package/dist/main-5S4MDCIO.js.map +1 -0
- package/dist/{open-5UD5JQIM.js → open-AB5ULZIB.js} +8 -8
- package/dist/{post-compact-ZJFE66O3.js → post-compact-P2B7C7FE.js} +9 -8
- package/dist/{post-compact-ZJFE66O3.js.map → post-compact-P2B7C7FE.js.map} +1 -1
- package/dist/{post-tool-use-CAR2USJP.js → post-tool-use-LXL6NXDS.js} +8 -7
- package/dist/{post-tool-use-CAR2USJP.js.map → post-tool-use-LXL6NXDS.js.map} +1 -1
- package/dist/{post-tool-use-failure-OMIKVEVR.js → post-tool-use-failure-WAYVVKGR.js} +9 -8
- package/dist/{post-tool-use-failure-OMIKVEVR.js.map → post-tool-use-failure-WAYVVKGR.js.map} +1 -1
- package/dist/{pre-compact-6SXYI5CD.js → pre-compact-BCXUCF4V.js} +9 -8
- package/dist/{pre-compact-6SXYI5CD.js.map → pre-compact-BCXUCF4V.js.map} +1 -1
- package/dist/{provider-check-WCM3SDTM.js → provider-check-43LAMSMH.js} +4 -4
- package/dist/{registry-OCM4WAPJ.js → registry-MGJSJBAS.js} +4 -4
- package/dist/{remove-NJSFVZXW.js → remove-KAPX5NT2.js} +10 -10
- package/dist/{restart-U5ZGJON7.js → restart-HQO36FTG.js} +9 -9
- package/dist/{search-HO7CXV6H.js → search-YOMOKAAI.js} +9 -9
- package/dist/{server-BUSZIUZV.js → server-2N23P6F2.js} +40 -27
- package/dist/{server-BUSZIUZV.js.map → server-2N23P6F2.js.map} +1 -1
- package/dist/{session-RVT2QELH.js → session-WW2JLHPX.js} +9 -10
- package/dist/{session-RVT2QELH.js.map → session-WW2JLHPX.js.map} +1 -1
- package/dist/{session-end-4W6SZVGH.js → session-end-4WRTIBVQ.js} +8 -7
- package/dist/{session-end-4W6SZVGH.js.map → session-end-4WRTIBVQ.js.map} +1 -1
- package/dist/{session-start-PMPKAST4.js → session-start-HRWTZXQR.js} +15 -15
- package/dist/session-start-HRWTZXQR.js.map +1 -0
- package/dist/{setup-llm-6UAJUHQE.js → setup-llm-HFWSBUAF.js} +10 -9
- package/dist/{setup-llm-6UAJUHQE.js.map → setup-llm-HFWSBUAF.js.map} +1 -1
- package/dist/src/agent/definitions/tasks/full-intelligence.yaml +37 -8
- package/dist/src/agent/prompts/agent.md +2 -2
- package/dist/src/cli.js +1 -1
- package/dist/src/daemon/main.js +1 -1
- package/dist/src/hooks/post-tool-use.js +1 -1
- package/dist/src/hooks/session-end.js +1 -1
- package/dist/src/hooks/session-start.js +1 -1
- package/dist/src/hooks/stop.js +1 -1
- package/dist/src/hooks/user-prompt-submit.js +1 -1
- package/dist/src/mcp/server.js +1 -1
- package/dist/src/symbionts/manifests/codex.yaml +28 -0
- package/dist/{stats-W47FF6RD.js → stats-7A4CJ4MS.js} +9 -9
- package/dist/{stop-6TAO2UU2.js → stop-R2GDHMRA.js} +8 -7
- package/dist/{stop-6TAO2UU2.js.map → stop-R2GDHMRA.js.map} +1 -1
- package/dist/{stop-failure-R76SULCV.js → stop-failure-773KR4VZ.js} +9 -8
- package/dist/{stop-failure-R76SULCV.js.map → stop-failure-773KR4VZ.js.map} +1 -1
- package/dist/{subagent-start-TJMUZLP2.js → subagent-start-IDECNBHW.js} +9 -8
- package/dist/{subagent-start-TJMUZLP2.js.map → subagent-start-IDECNBHW.js.map} +1 -1
- package/dist/{subagent-stop-M3DAFJWQ.js → subagent-stop-3JH7DR2S.js} +9 -8
- package/dist/{subagent-stop-M3DAFJWQ.js.map → subagent-stop-3JH7DR2S.js.map} +1 -1
- package/dist/{task-completed-2KVR5JV6.js → task-completed-AYVHPHDR.js} +9 -8
- package/dist/{task-completed-2KVR5JV6.js.map → task-completed-AYVHPHDR.js.map} +1 -1
- package/dist/{team-2IAT6MKD.js → team-3JKF7VAD.js} +5 -5
- package/dist/{turns-3ZQAF6HF.js → turns-YFNI5CQC.js} +6 -4
- package/dist/ui/assets/index-C2JuNtRB.css +1 -0
- package/dist/ui/assets/index-JLVaQKV2.js +832 -0
- package/dist/ui/favicon-dusk.svg +11 -0
- package/dist/ui/favicon-moss.svg +11 -0
- package/dist/ui/favicon-plum.svg +11 -0
- package/dist/ui/favicon-sage.svg +11 -0
- package/dist/ui/favicon-slate.svg +11 -0
- package/dist/ui/favicon-terracotta.svg +11 -0
- package/dist/ui/index.html +3 -3
- package/dist/{update-TB34JEB7.js → update-YWYW55JM.js} +10 -10
- package/dist/{user-prompt-submit-O4TP7NJ6.js → user-prompt-submit-YELSR6XI.js} +9 -8
- package/dist/{user-prompt-submit-O4TP7NJ6.js.map → user-prompt-submit-YELSR6XI.js.map} +1 -1
- package/dist/{verify-SESZXGVY.js → verify-JS44DVKJ.js} +5 -5
- package/dist/{version-QBORV23E.js → version-K5NETYIL.js} +2 -2
- package/package.json +1 -1
- package/skills/myco/SKILL.md +78 -43
- package/skills/myco/references/vault-status.md +1 -1
- package/dist/chunk-27ZDDWIA.js.map +0 -1
- package/dist/chunk-44PZCAYS.js.map +0 -1
- package/dist/chunk-5OXBT5MD.js.map +0 -1
- package/dist/chunk-5WPTS6A4.js.map +0 -1
- package/dist/chunk-5ZT2Q6P5.js +0 -25
- package/dist/chunk-5ZT2Q6P5.js.map +0 -1
- package/dist/chunk-AULBWINA.js +0 -227
- package/dist/chunk-AULBWINA.js.map +0 -1
- package/dist/chunk-DURKJTVO.js.map +0 -1
- package/dist/chunk-GFR542SM.js.map +0 -1
- package/dist/chunk-Q6OEZM3S.js.map +0 -1
- package/dist/chunk-QLCD77AN.js.map +0 -1
- package/dist/chunk-UTSCRMJE.js.map +0 -1
- package/dist/chunk-UVKQ62II.js.map +0 -1
- package/dist/chunk-VQF5E4ZX.js +0 -91
- package/dist/chunk-VQF5E4ZX.js.map +0 -1
- package/dist/chunk-WKNAKQKA.js.map +0 -1
- package/dist/config-I5MJ6RXI.js.map +0 -1
- package/dist/executor-2TMGOVEA.js.map +0 -1
- package/dist/main-R5ZD5OIZ.js.map +0 -1
- package/dist/resolution-events-PYLSI6QT.js +0 -15
- package/dist/session-start-PMPKAST4.js.map +0 -1
- package/dist/ui/assets/index-C-6W8e3m.js +0 -842
- package/dist/ui/assets/index-CRmkSi63.css +0 -1
- package/dist/version-QBORV23E.js.map +0 -1
- /package/dist/{agent-run-3IQXE5PI.js.map → agent-run-4HUXVRHW.js.map} +0 -0
- /package/dist/{agent-tasks-5DIA3CE5.js.map → agent-tasks-JF45ELB6.js.map} +0 -0
- /package/dist/{chunk-Q4QD6LJT.js.map → chunk-4M7EWPIA.js.map} +0 -0
- /package/dist/{chunk-FGKCE5AE.js.map → chunk-4YFKBL3F.js.map} +0 -0
- /package/dist/{chunk-KYH4V4ML.js.map → chunk-57O67XVF.js.map} +0 -0
- /package/dist/{chunk-7ONVLO43.js.map → chunk-5XIVBO25.js.map} +0 -0
- /package/dist/{chunk-VH7XYQFL.js.map → chunk-ACQ2AIEM.js.map} +0 -0
- /package/dist/{chunk-6ZDJXSEO.js.map → chunk-BPRIYNLE.js.map} +0 -0
- /package/dist/{chunk-PMT2LSTQ.js.map → chunk-FMRZ26U5.js.map} +0 -0
- /package/dist/{chunk-3J6TUJSV.js.map → chunk-KHT24OWC.js.map} +0 -0
- /package/dist/{chunk-6DDRJQ4X.js.map → chunk-MYOZLMB2.js.map} +0 -0
- /package/dist/{chunk-K2QX43GC.js.map → chunk-P3DN5EWW.js.map} +0 -0
- /package/dist/{chunk-IQ5LQTV7.js.map → chunk-POR75WM6.js.map} +0 -0
- /package/dist/{chunk-KABTXALI.js.map → chunk-QS5TWZBL.js.map} +0 -0
- /package/dist/{chunk-2QJCV3UL.js.map → chunk-UOQQENDW.js.map} +0 -0
- /package/dist/{cli-RTUSGLTM.js.map → cli-AHTINAHY.js.map} +0 -0
- /package/dist/{client-YWE5YJB7.js.map → client-LHENCAV3.js.map} +0 -0
- /package/dist/{detect-BEOIHGBC.js.map → detect-PXNM6TA7.js.map} +0 -0
- /package/dist/{detect-providers-2EY55EHK.js.map → detect-providers-5KOPZ7J2.js.map} +0 -0
- /package/dist/{doctor-FIG7VEYV.js.map → doctor-XPCF5HV5.js.map} +0 -0
- /package/dist/{init-3536BYDC.js.map → init-V3KCC36O.js.map} +0 -0
- /package/dist/{installer-YH3WQISI.js.map → installer-ZNK4JSQA.js.map} +0 -0
- /package/dist/{llm-SWDDQQWY.js.map → llm-TH4NLIRM.js.map} +0 -0
- /package/dist/{loader-AAZ6VUIA.js.map → loader-H7OFASVC.js.map} +0 -0
- /package/dist/{loader-K4WF4EEJ.js.map → loader-TSB5M7FD.js.map} +0 -0
- /package/dist/{logs-KNKPQE5A.js.map → logs-7YVGGBIS.js.map} +0 -0
- /package/dist/{open-5UD5JQIM.js.map → open-AB5ULZIB.js.map} +0 -0
- /package/dist/{provider-check-WCM3SDTM.js.map → provider-check-43LAMSMH.js.map} +0 -0
- /package/dist/{registry-OCM4WAPJ.js.map → registry-MGJSJBAS.js.map} +0 -0
- /package/dist/{remove-NJSFVZXW.js.map → remove-KAPX5NT2.js.map} +0 -0
- /package/dist/{restart-U5ZGJON7.js.map → restart-HQO36FTG.js.map} +0 -0
- /package/dist/{search-HO7CXV6H.js.map → search-YOMOKAAI.js.map} +0 -0
- /package/dist/{stats-W47FF6RD.js.map → stats-7A4CJ4MS.js.map} +0 -0
- /package/dist/{resolution-events-PYLSI6QT.js.map → team-3JKF7VAD.js.map} +0 -0
- /package/dist/{team-2IAT6MKD.js.map → turns-YFNI5CQC.js.map} +0 -0
- /package/dist/{update-TB34JEB7.js.map → update-YWYW55JM.js.map} +0 -0
- /package/dist/{verify-SESZXGVY.js.map → verify-JS44DVKJ.js.map} +0 -0
- /package/dist/{turns-3ZQAF6HF.js.map → version-K5NETYIL.js.map} +0 -0
|
@@ -1,21 +1,20 @@
|
|
|
1
1
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
initVaultDb
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-YSNIAJ5D.js";
|
|
5
5
|
import "./chunk-SAKJMNSR.js";
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-4LCIKVDM.js";
|
|
7
|
+
import "./chunk-FMRZ26U5.js";
|
|
8
8
|
import {
|
|
9
9
|
getSession,
|
|
10
10
|
listSessions
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-UTSCRMJE.js";
|
|
11
|
+
} from "./chunk-EVDQKYCG.js";
|
|
12
|
+
import "./chunk-SRXTSI25.js";
|
|
14
13
|
import "./chunk-MYX5NCRH.js";
|
|
15
|
-
import "./chunk-
|
|
16
|
-
import "./chunk-
|
|
14
|
+
import "./chunk-UOQQENDW.js";
|
|
15
|
+
import "./chunk-ACQ2AIEM.js";
|
|
17
16
|
import "./chunk-LPUQPDC2.js";
|
|
18
|
-
import "./chunk-
|
|
17
|
+
import "./chunk-FLLBJLHM.js";
|
|
19
18
|
import "./chunk-UUHLLQXO.js";
|
|
20
19
|
import "./chunk-6LQIMRTC.js";
|
|
21
20
|
import "./chunk-ODXLRR4U.js";
|
|
@@ -71,4 +70,4 @@ ${target.summary}`);
|
|
|
71
70
|
export {
|
|
72
71
|
run
|
|
73
72
|
};
|
|
74
|
-
//# sourceMappingURL=session-
|
|
73
|
+
//# sourceMappingURL=session-WW2JLHPX.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/session.ts"],"sourcesContent":["/**\n * CLI: myco session — display session info via direct SQLite reads.\n *\n * Opens the database directly (WAL mode allows concurrent reads).\n * Does NOT require the daemon to be running.\n */\n\nimport { listSessions, getSession } from '@myco/db/queries/sessions.js';\nimport { initVaultDb } from './shared.js';\n\n// ---------------------------------------------------------------------------\n// Command\n// ---------------------------------------------------------------------------\n\nexport async function run(args: string[], vaultDir: string): Promise<void> {\n const idOrLatest = args[0];\n\n const cleanup = initVaultDb(vaultDir);\n try {\n const sessions = listSessions({ limit: 100 });\n if (sessions.length === 0) {\n console.log('No sessions found');\n return;\n }\n\n // Resolve target session ID\n let targetId: string;\n if (!idOrLatest || idOrLatest === 'latest') {\n targetId = sessions[0].id;\n } else {\n const match = sessions.find((s) => s.id.includes(idOrLatest));\n if (!match) {\n console.error(`Session not found: ${idOrLatest}`);\n console.log('Available:', sessions.map((s) => s.id.slice(0, 12)).join(', '));\n return;\n }\n targetId = match.id;\n }\n\n // Fetch full session detail\n const target = getSession(targetId);\n if (!target) {\n console.error(`Failed to fetch session: ${targetId}`);\n return;\n }\n\n console.log(`Session: ${target.id}`);\n console.log(`Status: ${target.status}`);\n if (target.title) console.log(`Title: ${target.title}`);\n if (target.branch) console.log(`Branch: ${target.branch}`);\n if (target.user) console.log(`User: ${target.user}`);\n console.log(`Started: ${new Date(target.started_at * 1000).toISOString()}`);\n if (target.ended_at) console.log(`Ended: ${new Date(target.ended_at * 1000).toISOString()}`);\n if (target.prompt_count) console.log(`Prompts: ${target.prompt_count}`);\n if (target.tool_count) console.log(`Tools: ${target.tool_count}`);\n if (target.summary) console.log(`\\nSummary:\\n${target.summary}`);\n } catch (err) {\n console.error('Failed to read vault database:', (err as Error).message);\n process.exit(1);\n } finally {\n cleanup();\n }\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/cli/session.ts"],"sourcesContent":["/**\n * CLI: myco session — display session info via direct SQLite reads.\n *\n * Opens the database directly (WAL mode allows concurrent reads).\n * Does NOT require the daemon to be running.\n */\n\nimport { listSessions, getSession } from '@myco/db/queries/sessions.js';\nimport { initVaultDb } from './shared.js';\n\n// ---------------------------------------------------------------------------\n// Command\n// ---------------------------------------------------------------------------\n\nexport async function run(args: string[], vaultDir: string): Promise<void> {\n const idOrLatest = args[0];\n\n const cleanup = initVaultDb(vaultDir);\n try {\n const sessions = listSessions({ limit: 100 });\n if (sessions.length === 0) {\n console.log('No sessions found');\n return;\n }\n\n // Resolve target session ID\n let targetId: string;\n if (!idOrLatest || idOrLatest === 'latest') {\n targetId = sessions[0].id;\n } else {\n const match = sessions.find((s) => s.id.includes(idOrLatest));\n if (!match) {\n console.error(`Session not found: ${idOrLatest}`);\n console.log('Available:', sessions.map((s) => s.id.slice(0, 12)).join(', '));\n return;\n }\n targetId = match.id;\n }\n\n // Fetch full session detail\n const target = getSession(targetId);\n if (!target) {\n console.error(`Failed to fetch session: ${targetId}`);\n return;\n }\n\n console.log(`Session: ${target.id}`);\n console.log(`Status: ${target.status}`);\n if (target.title) console.log(`Title: ${target.title}`);\n if (target.branch) console.log(`Branch: ${target.branch}`);\n if (target.user) console.log(`User: ${target.user}`);\n console.log(`Started: ${new Date(target.started_at * 1000).toISOString()}`);\n if (target.ended_at) console.log(`Ended: ${new Date(target.ended_at * 1000).toISOString()}`);\n if (target.prompt_count) console.log(`Prompts: ${target.prompt_count}`);\n if (target.tool_count) console.log(`Tools: ${target.tool_count}`);\n if (target.summary) console.log(`\\nSummary:\\n${target.summary}`);\n } catch (err) {\n console.error('Failed to read vault database:', (err as Error).message);\n process.exit(1);\n } finally {\n cleanup();\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAcA,eAAsB,IAAI,MAAgB,UAAiC;AACzE,QAAM,aAAa,KAAK,CAAC;AAEzB,QAAM,UAAU,YAAY,QAAQ;AACpC,MAAI;AACF,UAAM,WAAW,aAAa,EAAE,OAAO,IAAI,CAAC;AAC5C,QAAI,SAAS,WAAW,GAAG;AACzB,cAAQ,IAAI,mBAAmB;AAC/B;AAAA,IACF;AAGA,QAAI;AACJ,QAAI,CAAC,cAAc,eAAe,UAAU;AAC1C,iBAAW,SAAS,CAAC,EAAE;AAAA,IACzB,OAAO;AACL,YAAM,QAAQ,SAAS,KAAK,CAAC,MAAM,EAAE,GAAG,SAAS,UAAU,CAAC;AAC5D,UAAI,CAAC,OAAO;AACV,gBAAQ,MAAM,sBAAsB,UAAU,EAAE;AAChD,gBAAQ,IAAI,cAAc,SAAS,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,GAAG,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;AAC3E;AAAA,MACF;AACA,iBAAW,MAAM;AAAA,IACnB;AAGA,UAAM,SAAS,WAAW,QAAQ;AAClC,QAAI,CAAC,QAAQ;AACX,cAAQ,MAAM,4BAA4B,QAAQ,EAAE;AACpD;AAAA,IACF;AAEA,YAAQ,IAAI,YAAY,OAAO,EAAE,EAAE;AACnC,YAAQ,IAAI,YAAY,OAAO,MAAM,EAAE;AACvC,QAAI,OAAO,MAAO,SAAQ,IAAI,YAAY,OAAO,KAAK,EAAE;AACxD,QAAI,OAAO,OAAQ,SAAQ,IAAI,YAAY,OAAO,MAAM,EAAE;AAC1D,QAAI,OAAO,KAAM,SAAQ,IAAI,YAAY,OAAO,IAAI,EAAE;AACtD,YAAQ,IAAI,YAAY,IAAI,KAAK,OAAO,aAAa,GAAI,EAAE,YAAY,CAAC,EAAE;AAC1E,QAAI,OAAO,SAAU,SAAQ,IAAI,YAAY,IAAI,KAAK,OAAO,WAAW,GAAI,EAAE,YAAY,CAAC,EAAE;AAC7F,QAAI,OAAO,aAAc,SAAQ,IAAI,YAAY,OAAO,YAAY,EAAE;AACtE,QAAI,OAAO,WAAY,SAAQ,IAAI,YAAY,OAAO,UAAU,EAAE;AAClE,QAAI,OAAO,QAAS,SAAQ,IAAI;AAAA;AAAA,EAAe,OAAO,OAAO,EAAE;AAAA,EACjE,SAAS,KAAK;AACZ,YAAQ,MAAM,kCAAmC,IAAc,OAAO;AACtE,YAAQ,KAAK,CAAC;AAAA,EAChB,UAAE;AACA,YAAQ;AAAA,EACV;AACF;","names":[]}
|
|
@@ -2,17 +2,18 @@ import { createRequire as __cr } from 'node:module'; const require = __cr(import
|
|
|
2
2
|
import {
|
|
3
3
|
normalizeHookInput,
|
|
4
4
|
readStdin
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-DCSGJ7W4.js";
|
|
6
|
+
import "./chunk-ZXZPJJN3.js";
|
|
6
7
|
import {
|
|
7
8
|
resolveVaultDir
|
|
8
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-CUDIZJY7.js";
|
|
9
10
|
import {
|
|
10
11
|
DaemonClient
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
12
|
+
} from "./chunk-UOQQENDW.js";
|
|
13
|
+
import "./chunk-ACQ2AIEM.js";
|
|
14
|
+
import "./chunk-NGROSFOH.js";
|
|
14
15
|
import "./chunk-LPUQPDC2.js";
|
|
15
|
-
import "./chunk-
|
|
16
|
+
import "./chunk-FLLBJLHM.js";
|
|
16
17
|
import "./chunk-UUHLLQXO.js";
|
|
17
18
|
import "./chunk-6LQIMRTC.js";
|
|
18
19
|
import "./chunk-ODXLRR4U.js";
|
|
@@ -40,4 +41,4 @@ async function main() {
|
|
|
40
41
|
export {
|
|
41
42
|
main
|
|
42
43
|
};
|
|
43
|
-
//# sourceMappingURL=session-end-
|
|
44
|
+
//# sourceMappingURL=session-end-4WRTIBVQ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hooks/session-end.ts"],"sourcesContent":["import { DaemonClient } from './client.js';\nimport { readStdin } from './read-stdin.js';\nimport { normalizeHookInput } from './normalize.js';\nimport { resolveVaultDir } from '../vault/resolve.js';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nexport async function main() {\n const VAULT_DIR = resolveVaultDir();\n if (!fs.existsSync(path.join(VAULT_DIR, 'myco.yaml'))) return;\n\n try {\n const rawInput = JSON.parse(await readStdin());\n const { sessionId } = normalizeHookInput(rawInput);\n\n const client = new DaemonClient(VAULT_DIR);\n if (sessionId) {\n await client.post('/sessions/unregister', { session_id: sessionId });\n }\n } catch (error) {\n process.stderr.write(`[myco] session-end error: ${(error as Error).message}\\n`);\n }\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/hooks/session-end.ts"],"sourcesContent":["import { DaemonClient } from './client.js';\nimport { readStdin } from './read-stdin.js';\nimport { normalizeHookInput } from './normalize.js';\nimport { resolveVaultDir } from '../vault/resolve.js';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nexport async function main() {\n const VAULT_DIR = resolveVaultDir();\n if (!fs.existsSync(path.join(VAULT_DIR, 'myco.yaml'))) return;\n\n try {\n const rawInput = JSON.parse(await readStdin());\n const { sessionId } = normalizeHookInput(rawInput);\n\n const client = new DaemonClient(VAULT_DIR);\n if (sessionId) {\n await client.post('/sessions/unregister', { session_id: sessionId });\n }\n } catch (error) {\n process.stderr.write(`[myco] session-end error: ${(error as Error).message}\\n`);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAIA,OAAO,QAAQ;AACf,OAAO,UAAU;AAEjB,eAAsB,OAAO;AAC3B,QAAM,YAAY,gBAAgB;AAClC,MAAI,CAAC,GAAG,WAAW,KAAK,KAAK,WAAW,WAAW,CAAC,EAAG;AAEvD,MAAI;AACF,UAAM,WAAW,KAAK,MAAM,MAAM,UAAU,CAAC;AAC7C,UAAM,EAAE,UAAU,IAAI,mBAAmB,QAAQ;AAEjD,UAAM,SAAS,IAAI,aAAa,SAAS;AACzC,QAAI,WAAW;AACb,YAAM,OAAO,KAAK,wBAAwB,EAAE,YAAY,UAAU,CAAC;AAAA,IACrE;AAAA,EACF,SAAS,OAAO;AACd,YAAQ,OAAO,MAAM,6BAA8B,MAAgB,OAAO;AAAA,CAAI;AAAA,EAChF;AACF;","names":[]}
|
|
@@ -1,21 +1,20 @@
|
|
|
1
1
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
listSpores
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-4YFKBL3F.js";
|
|
5
5
|
import {
|
|
6
6
|
listSessions
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-AULBWINA.js";
|
|
7
|
+
} from "./chunk-EVDQKYCG.js";
|
|
9
8
|
import {
|
|
10
|
-
|
|
9
|
+
evaluateSessionCaptureRules,
|
|
11
10
|
readTranscriptMeta
|
|
12
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-XL75KZGI.js";
|
|
13
12
|
import {
|
|
14
13
|
createSchema
|
|
15
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-MYOZLMB2.js";
|
|
16
15
|
import {
|
|
17
16
|
loadConfig
|
|
18
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-SRXTSI25.js";
|
|
19
18
|
import {
|
|
20
19
|
getDatabase,
|
|
21
20
|
initDatabase,
|
|
@@ -24,24 +23,25 @@ import {
|
|
|
24
23
|
import {
|
|
25
24
|
normalizeHookInput,
|
|
26
25
|
readStdin
|
|
27
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-DCSGJ7W4.js";
|
|
27
|
+
import "./chunk-ZXZPJJN3.js";
|
|
28
28
|
import {
|
|
29
29
|
resolveVaultDir
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-CUDIZJY7.js";
|
|
31
31
|
import {
|
|
32
32
|
DaemonClient
|
|
33
|
-
} from "./chunk-
|
|
34
|
-
import "./chunk-
|
|
33
|
+
} from "./chunk-UOQQENDW.js";
|
|
34
|
+
import "./chunk-ACQ2AIEM.js";
|
|
35
35
|
import {
|
|
36
36
|
loadManifests
|
|
37
|
-
} from "./chunk-
|
|
37
|
+
} from "./chunk-NGROSFOH.js";
|
|
38
38
|
import "./chunk-LPUQPDC2.js";
|
|
39
39
|
import {
|
|
40
40
|
CONTEXT_SESSION_PREVIEW_CHARS,
|
|
41
41
|
CONTEXT_SPORE_PREVIEW_CHARS,
|
|
42
42
|
EXCLUDED_SPORE_STATUSES,
|
|
43
43
|
estimateTokens
|
|
44
|
-
} from "./chunk-
|
|
44
|
+
} from "./chunk-FLLBJLHM.js";
|
|
45
45
|
import "./chunk-UUHLLQXO.js";
|
|
46
46
|
import "./chunk-6LQIMRTC.js";
|
|
47
47
|
import "./chunk-ODXLRR4U.js";
|
|
@@ -140,7 +140,7 @@ async function main() {
|
|
|
140
140
|
const rawInput = JSON.parse(await readStdin());
|
|
141
141
|
const { sessionId, agent, transcriptPath } = normalizeHookInput(rawInput);
|
|
142
142
|
const transcriptMeta = transcriptPath ? readTranscriptMeta(transcriptPath) : void 0;
|
|
143
|
-
const decision =
|
|
143
|
+
const decision = evaluateSessionCaptureRules(loadManifests(), agent, {
|
|
144
144
|
transcriptPath,
|
|
145
145
|
transcriptMeta: transcriptMeta ?? void 0
|
|
146
146
|
});
|
|
@@ -186,4 +186,4 @@ async function main() {
|
|
|
186
186
|
export {
|
|
187
187
|
main
|
|
188
188
|
};
|
|
189
|
-
//# sourceMappingURL=session-start-
|
|
189
|
+
//# sourceMappingURL=session-start-HRWTZXQR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/context/injector.ts","../src/hooks/session-start.ts"],"sourcesContent":["/**\n * Context injector — assembles context from SQLite for hook injection.\n *\n * Queries sessions and spores from SQLite. For prompt-submit context,\n * semantic search is deferred to Phase 2 (requires daemon vector store).\n * If no data exists (zero-config), returns empty context gracefully.\n */\n\nimport { getDatabase } from '@myco/db/client.js';\nimport { listSessions } from '@myco/db/queries/sessions.js';\nimport { listSpores } from '@myco/db/queries/spores.js';\nimport type { MycoConfig } from '@myco/config/schema.js';\nimport {\n estimateTokens,\n CONTEXT_SESSION_PREVIEW_CHARS,\n CONTEXT_SPORE_PREVIEW_CHARS,\n PROMPT_CONTEXT_MIN_LENGTH,\n EXCLUDED_SPORE_STATUSES,\n} from '@myco/constants.js';\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\n/** Max recent sessions to include in context. */\nconst CONTEXT_SESSION_LIMIT = 10;\n\n/** Max sessions displayed after scoring. */\nconst CONTEXT_SESSION_DISPLAY_LIMIT = 5;\n\n/** Max spores to fetch for scoring. */\nconst CONTEXT_SPORE_FETCH_LIMIT = 20;\n\n/** Max spores displayed after scoring. */\nconst CONTEXT_SPORE_DISPLAY_LIMIT = 5;\n\n/** Default token budget for sessions layer. */\nconst DEFAULT_SESSIONS_BUDGET = 500;\n\n/** Default token budget for spores layer. */\nconst DEFAULT_SPORES_BUDGET = 300;\n\n/** Default token budget for team layer. */\nconst DEFAULT_TEAM_BUDGET = 200;\n\n/** Default total context max tokens. */\nconst DEFAULT_CONTEXT_MAX_TOKENS = 1200;\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ninterface InjectionContext {\n branch?: string;\n}\n\ninterface InjectedContext {\n text: string;\n tokenEstimate: number;\n layers: {\n sessions: string;\n spores: string;\n team: string;\n };\n}\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * Build injected context from SQLite data.\n *\n * Returns empty context gracefully when no data exists (zero-config behavior).\n */\nexport async function buildInjectedContext(\n _config: MycoConfig,\n context: InjectionContext,\n): Promise<InjectedContext> {\n // Verify database is available — return empty if not\n try {\n getDatabase();\n } catch {\n return emptyContext();\n }\n\n // Fetch sessions and spores in parallel\n const [sessions, spores] = await Promise.all([\n listSessions({ limit: CONTEXT_SESSION_LIMIT }),\n listSpores({ limit: CONTEXT_SPORE_FETCH_LIMIT, status: 'active' }),\n ]);\n\n // Layer 1: Recent sessions\n const sessionsText = formatLayer(\n 'Recent Sessions',\n sessions.slice(0, CONTEXT_SESSION_DISPLAY_LIMIT).map((s) => {\n const title = s.title ?? s.id;\n const summary = (s.summary ?? '').slice(0, CONTEXT_SESSION_PREVIEW_CHARS);\n const branchLabel = s.branch === context.branch ? ' (same branch)' : '';\n return `- **${title}**: ${summary}${branchLabel}`;\n }),\n DEFAULT_SESSIONS_BUDGET,\n );\n\n // Layer 2: Relevant spores (exclude superseded/archived)\n const filteredSpores = spores.filter((s) =>\n !EXCLUDED_SPORE_STATUSES.has(s.status),\n );\n const sporesText = formatLayer(\n 'Relevant Spores',\n filteredSpores.slice(0, CONTEXT_SPORE_DISPLAY_LIMIT).map((s) =>\n `- **${s.id}** (${s.observation_type}): ${s.content.slice(0, CONTEXT_SPORE_PREVIEW_CHARS)}`,\n ),\n DEFAULT_SPORES_BUDGET,\n );\n\n // Layer 3: Team activity (placeholder — populated in Phase 2)\n const teamText = formatLayer('Team Activity', [], DEFAULT_TEAM_BUDGET);\n\n // Enforce total max_tokens budget\n const allLayers = [sessionsText, sporesText, teamText].filter(Boolean);\n const parts: string[] = [];\n let totalTokens = 0;\n\n for (const layer of allLayers) {\n const layerTokens = estimateTokens(layer);\n if (totalTokens + layerTokens > DEFAULT_CONTEXT_MAX_TOKENS) break;\n parts.push(layer);\n totalTokens += layerTokens;\n }\n\n const fullText = parts.join('\\n\\n');\n\n return {\n text: fullText,\n tokenEstimate: totalTokens,\n layers: {\n sessions: sessionsText,\n spores: sporesText,\n team: teamText,\n },\n };\n}\n\n/**\n * Build per-prompt context using semantic search on spores.\n *\n * Semantic search via the daemon's in-process vector store is deferred to\n * Phase 2. For now, returns empty context. The hook (`user-prompt-submit`)\n * routes through the daemon API at `/context/prompt`, which will implement\n * vector search when ready.\n */\nexport async function buildPromptContext(\n prompt: string,\n _config: MycoConfig,\n): Promise<InjectedContext> {\n if (prompt.length < PROMPT_CONTEXT_MIN_LENGTH) {\n return emptyContext();\n }\n\n // Per-prompt semantic search deferred to Phase 2 (requires daemon vector store)\n return emptyContext();\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction emptyContext(): InjectedContext {\n return {\n text: '',\n tokenEstimate: 0,\n layers: { sessions: '', spores: '', team: '' },\n };\n}\n\nfunction formatLayer(heading: string, items: string[], budget: number): string {\n if (items.length === 0) return '';\n\n let text = `### ${heading}\\n`;\n let currentTokens = estimateTokens(text);\n\n for (const item of items) {\n const itemTokens = estimateTokens(item);\n if (currentTokens + itemTokens > budget) break;\n text += item + '\\n';\n currentTokens += itemTokens;\n }\n\n return text.trim();\n}\n","import { DaemonClient } from './client.js';\nimport { readStdin } from './read-stdin.js';\nimport { normalizeHookInput } from './normalize.js';\nimport { evaluateSessionCaptureRules } from './capture-rules.js';\nimport { readTranscriptMeta } from './transcript-meta.js';\nimport { loadManifests } from '../symbionts/detect.js';\nimport { loadConfig } from '../config/loader.js';\nimport { buildInjectedContext } from '../context/injector.js';\nimport { initDatabase, vaultDbPath } from '../db/client.js';\nimport { createSchema } from '../db/schema.js';\nimport { resolveVaultDir } from '../vault/resolve.js';\nimport { execFileSync } from 'node:child_process';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nexport async function main() {\n const VAULT_DIR = resolveVaultDir();\n if (!fs.existsSync(path.join(VAULT_DIR, 'myco.yaml'))) return;\n\n try {\n const rawInput = JSON.parse(await readStdin());\n const { sessionId, agent, transcriptPath } = normalizeHookInput(rawInput);\n\n // Apply session_start capture rules BEFORE registering the session.\n // For Codex ephemeral sub-invocations (title generation, etc.) this\n // structural drop prevents the phantom row from ever being created,\n // rather than creating it and cascade-deleting at user_prompt time.\n // Read the transcript's session_meta for rules that inspect it\n // (e.g., detecting sub-agent thread spawns via source.subagent).\n const transcriptMeta = transcriptPath ? readTranscriptMeta(transcriptPath) : undefined;\n const decision = evaluateSessionCaptureRules(loadManifests(), agent, {\n transcriptPath,\n transcriptMeta: transcriptMeta ?? undefined,\n });\n if (decision.action === 'drop') {\n process.stderr.write(`[myco] session-start: dropped (${decision.reason ?? 'rule'})\\n`);\n return;\n }\n\n const config = loadConfig(VAULT_DIR);\n const client = new DaemonClient(VAULT_DIR);\n const healthy = await client.ensureRunning();\n\n let branch: string | undefined;\n try {\n branch = execFileSync('git', ['rev-parse', '--abbrev-ref', 'HEAD'], { encoding: 'utf-8' }).trim();\n } catch { /* not a git repo */ }\n\n if (healthy) {\n await client.post('/sessions/register', {\n session_id: sessionId,\n agent,\n branch,\n started_at: new Date().toISOString(),\n });\n\n const contextResult = await client.post('/context', { session_id: sessionId, branch });\n\n if (contextResult.ok && contextResult.data?.text) {\n if (contextResult.data.source === 'digest') {\n process.stderr.write(`[myco] Injecting digest extract (tier ${contextResult.data.tier})\\n`);\n }\n process.stdout.write(contextResult.data.text);\n return;\n }\n }\n\n // Degraded: local SQLite context only\n const db = initDatabase(vaultDbPath(VAULT_DIR));\n createSchema(db);\n const injected = await buildInjectedContext(config, { branch });\n if (injected.text) process.stdout.write(injected.text);\n } catch (error) {\n process.stderr.write(`[myco] session-start error: ${(error as Error).message}\\n`);\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
withEmbedding
|
|
4
|
-
} from "./chunk-
|
|
5
|
-
import "./chunk-
|
|
4
|
+
} from "./chunk-US4LNCAT.js";
|
|
5
|
+
import "./chunk-YSNIAJ5D.js";
|
|
6
6
|
import {
|
|
7
7
|
parseStringFlag
|
|
8
8
|
} from "./chunk-SAKJMNSR.js";
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
9
|
+
import "./chunk-4LCIKVDM.js";
|
|
10
|
+
import "./chunk-FMRZ26U5.js";
|
|
11
11
|
import {
|
|
12
12
|
loadConfig,
|
|
13
13
|
updateConfig
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-SRXTSI25.js";
|
|
15
15
|
import "./chunk-MYX5NCRH.js";
|
|
16
|
-
import "./chunk-
|
|
17
|
-
import "./chunk-
|
|
16
|
+
import "./chunk-ZXZPJJN3.js";
|
|
17
|
+
import "./chunk-UOQQENDW.js";
|
|
18
|
+
import "./chunk-ACQ2AIEM.js";
|
|
18
19
|
import "./chunk-LPUQPDC2.js";
|
|
19
|
-
import "./chunk-
|
|
20
|
+
import "./chunk-FLLBJLHM.js";
|
|
20
21
|
import "./chunk-UUHLLQXO.js";
|
|
21
22
|
import "./chunk-6LQIMRTC.js";
|
|
22
23
|
import "./chunk-ODXLRR4U.js";
|
|
@@ -79,4 +80,4 @@ async function run(args, vaultDir) {
|
|
|
79
80
|
export {
|
|
80
81
|
run
|
|
81
82
|
};
|
|
82
|
-
//# sourceMappingURL=setup-llm-
|
|
83
|
+
//# sourceMappingURL=setup-llm-HFWSBUAF.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/setup-llm.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport { loadConfig, updateConfig } from '../config/loader.js';\nimport { withEmbedding } from '../config/updates.js';\nimport { parseStringFlag } from './shared.js';\nimport type { EmbeddingProviderConfig } from '../config/schema.js';\n\nconst DAEMON_STATE_FILENAME = 'daemon.json';\n\nconst USAGE = `Usage: myco setup-llm [options]\n\nConfigure embedding provider settings.\n\nIn v3, LLM configuration is managed by the Myco agent (Claude Agent SDK).\nOnly embedding settings are user-configurable.\n\nOptions:\n --embedding-provider <name> Embedding provider (ollama, openai-compatible)\n --embedding-model <name> Embedding model name\n --embedding-url <url> Embedding provider base URL\n --show Show current settings and exit\n`;\n\nexport async function run(args: string[], vaultDir: string): Promise<void> {\n // Show current settings\n if (args.includes('--show')) {\n const config = loadConfig(vaultDir);\n console.log(JSON.stringify(config.embedding, null, 2));\n return;\n }\n\n // No flags = show usage\n if (args.length === 0) {\n console.log(USAGE);\n return;\n }\n\n // Warn about removed LLM flags\n const llmProvider = parseStringFlag(args, '--llm-provider');\n const llmModel = parseStringFlag(args, '--llm-model');\n const llmUrl = parseStringFlag(args, '--llm-url');\n const llmContextWindow = parseStringFlag(args, '--llm-context-window');\n const llmMaxTokens = parseStringFlag(args, '--llm-max-tokens');\n if (llmProvider || llmModel || llmUrl || llmContextWindow || llmMaxTokens) {\n console.log('Note: LLM configuration is managed by the Myco agent. LLM flags are ignored.');\n }\n\n // Build partial embedding update from flags\n const updates: Partial<EmbeddingProviderConfig> = {};\n\n const embeddingProvider = parseStringFlag(args, '--embedding-provider');\n if (embeddingProvider !== undefined) updates.provider = embeddingProvider as EmbeddingProviderConfig['provider'];\n\n const embeddingModel = parseStringFlag(args, '--embedding-model');\n if (embeddingModel !== undefined) updates.model = embeddingModel;\n\n const embeddingUrl = parseStringFlag(args, '--embedding-url');\n if (embeddingUrl !== undefined) updates.base_url = embeddingUrl;\n\n // Apply the update through the single write gate\n const updated = updateConfig(vaultDir, (config) => withEmbedding(config, updates));\n\n console.log('Embedding configuration updated.');\n console.log(JSON.stringify(updated.embedding, null, 2));\n\n if (embeddingModel !== undefined) {\n console.log('\\nWarning: changing the embedding model requires a full vector index rebuild.');\n console.log('Run: myco rebuild');\n }\n\n if (fs.existsSync(path.join(vaultDir, DAEMON_STATE_FILENAME))) {\n console.log('\\nNote: restart the daemon for changes to take effect (myco restart)');\n }\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/cli/setup-llm.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport { loadConfig, updateConfig } from '../config/loader.js';\nimport { withEmbedding } from '../config/updates.js';\nimport { parseStringFlag } from './shared.js';\nimport type { EmbeddingProviderConfig } from '../config/schema.js';\n\nconst DAEMON_STATE_FILENAME = 'daemon.json';\n\nconst USAGE = `Usage: myco setup-llm [options]\n\nConfigure embedding provider settings.\n\nIn v3, LLM configuration is managed by the Myco agent (Claude Agent SDK).\nOnly embedding settings are user-configurable.\n\nOptions:\n --embedding-provider <name> Embedding provider (ollama, openai-compatible)\n --embedding-model <name> Embedding model name\n --embedding-url <url> Embedding provider base URL\n --show Show current settings and exit\n`;\n\nexport async function run(args: string[], vaultDir: string): Promise<void> {\n // Show current settings\n if (args.includes('--show')) {\n const config = loadConfig(vaultDir);\n console.log(JSON.stringify(config.embedding, null, 2));\n return;\n }\n\n // No flags = show usage\n if (args.length === 0) {\n console.log(USAGE);\n return;\n }\n\n // Warn about removed LLM flags\n const llmProvider = parseStringFlag(args, '--llm-provider');\n const llmModel = parseStringFlag(args, '--llm-model');\n const llmUrl = parseStringFlag(args, '--llm-url');\n const llmContextWindow = parseStringFlag(args, '--llm-context-window');\n const llmMaxTokens = parseStringFlag(args, '--llm-max-tokens');\n if (llmProvider || llmModel || llmUrl || llmContextWindow || llmMaxTokens) {\n console.log('Note: LLM configuration is managed by the Myco agent. LLM flags are ignored.');\n }\n\n // Build partial embedding update from flags\n const updates: Partial<EmbeddingProviderConfig> = {};\n\n const embeddingProvider = parseStringFlag(args, '--embedding-provider');\n if (embeddingProvider !== undefined) updates.provider = embeddingProvider as EmbeddingProviderConfig['provider'];\n\n const embeddingModel = parseStringFlag(args, '--embedding-model');\n if (embeddingModel !== undefined) updates.model = embeddingModel;\n\n const embeddingUrl = parseStringFlag(args, '--embedding-url');\n if (embeddingUrl !== undefined) updates.base_url = embeddingUrl;\n\n // Apply the update through the single write gate\n const updated = updateConfig(vaultDir, (config) => withEmbedding(config, updates));\n\n console.log('Embedding configuration updated.');\n console.log(JSON.stringify(updated.embedding, null, 2));\n\n if (embeddingModel !== undefined) {\n console.log('\\nWarning: changing the embedding model requires a full vector index rebuild.');\n console.log('Run: myco rebuild');\n }\n\n if (fs.existsSync(path.join(vaultDir, DAEMON_STATE_FILENAME))) {\n console.log('\\nNote: restart the daemon for changes to take effect (myco restart)');\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,QAAQ;AACf,OAAO,UAAU;AAMjB,IAAM,wBAAwB;AAE9B,IAAM,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcd,eAAsB,IAAI,MAAgB,UAAiC;AAEzE,MAAI,KAAK,SAAS,QAAQ,GAAG;AAC3B,UAAM,SAAS,WAAW,QAAQ;AAClC,YAAQ,IAAI,KAAK,UAAU,OAAO,WAAW,MAAM,CAAC,CAAC;AACrD;AAAA,EACF;AAGA,MAAI,KAAK,WAAW,GAAG;AACrB,YAAQ,IAAI,KAAK;AACjB;AAAA,EACF;AAGA,QAAM,cAAc,gBAAgB,MAAM,gBAAgB;AAC1D,QAAM,WAAW,gBAAgB,MAAM,aAAa;AACpD,QAAM,SAAS,gBAAgB,MAAM,WAAW;AAChD,QAAM,mBAAmB,gBAAgB,MAAM,sBAAsB;AACrE,QAAM,eAAe,gBAAgB,MAAM,kBAAkB;AAC7D,MAAI,eAAe,YAAY,UAAU,oBAAoB,cAAc;AACzE,YAAQ,IAAI,8EAA8E;AAAA,EAC5F;AAGA,QAAM,UAA4C,CAAC;AAEnD,QAAM,oBAAoB,gBAAgB,MAAM,sBAAsB;AACtE,MAAI,sBAAsB,OAAW,SAAQ,WAAW;AAExD,QAAM,iBAAiB,gBAAgB,MAAM,mBAAmB;AAChE,MAAI,mBAAmB,OAAW,SAAQ,QAAQ;AAElD,QAAM,eAAe,gBAAgB,MAAM,iBAAiB;AAC5D,MAAI,iBAAiB,OAAW,SAAQ,WAAW;AAGnD,QAAM,UAAU,aAAa,UAAU,CAAC,WAAW,cAAc,QAAQ,OAAO,CAAC;AAEjF,UAAQ,IAAI,kCAAkC;AAC9C,UAAQ,IAAI,KAAK,UAAU,QAAQ,WAAW,MAAM,CAAC,CAAC;AAEtD,MAAI,mBAAmB,QAAW;AAChC,YAAQ,IAAI,+EAA+E;AAC3F,YAAQ,IAAI,mBAAmB;AAAA,EACjC;AAEA,MAAI,GAAG,WAAW,KAAK,KAAK,UAAU,qBAAqB,CAAC,GAAG;AAC7D,YAAQ,IAAI,sEAAsE;AAAA,EACpF;AACF;","names":[]}
|
|
@@ -195,14 +195,23 @@ phases:
|
|
|
195
195
|
Consolidate related spores into wisdom and clean up redundancy.
|
|
196
196
|
The vault must get SHARPER over time, not just bigger.
|
|
197
197
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
198
|
+
Spores may exist that were created outside this run's extract phase
|
|
199
|
+
(for example by a coding agent or manual curation). You may still
|
|
200
|
+
consolidate those when it materially sharpens the vault.
|
|
201
|
+
Stay focused on recent or high-signal active spores; do not perform an
|
|
202
|
+
exhaustive crawl if the first few targeted searches show no action.
|
|
203
|
+
|
|
204
|
+
## Step 1: Find clusters safely (budget: 5 turns)
|
|
205
|
+
|
|
206
|
+
1. Start with targeted `vault_search_semantic` queries for themes from the
|
|
207
|
+
current extract phase and other likely consolidation targets.
|
|
208
|
+
2. Use the semantic results as a shortlist: note their IDs, titles/previews,
|
|
209
|
+
and similarity scores.
|
|
210
|
+
3. For any candidate you need to read in full, call `vault_spores` with
|
|
211
|
+
`ids: [...]` to fetch ONLY those exact spores. Do not bulk-read an
|
|
212
|
+
entire high-volume type when exact-ID reads will do.
|
|
213
|
+
4. Use broad `vault_spores` listings only when the payload is small enough
|
|
214
|
+
to inspect safely.
|
|
206
215
|
|
|
207
216
|
## Decision tree
|
|
208
217
|
|
|
@@ -227,6 +236,8 @@ phases:
|
|
|
227
236
|
Also look for spores that are outdated or contradicted by newer ones:
|
|
228
237
|
- If two spores describe the same thing but one is more recent/detailed,
|
|
229
238
|
supersede the older one via `vault_resolve_spore` action "supersede"
|
|
239
|
+
- Never supersede a spore you have not actually read in full via
|
|
240
|
+
`vault_spores(ids: [...])`
|
|
230
241
|
- Superseded spores stay in the DB but are removed from search and
|
|
231
242
|
context injection — this keeps the vault relevant
|
|
232
243
|
|
|
@@ -249,6 +260,11 @@ phases:
|
|
|
249
260
|
prompt: |
|
|
250
261
|
Build the knowledge graph: create entities, then link spores to them.
|
|
251
262
|
|
|
263
|
+
New graph work may still be warranted even when extract skipped, because
|
|
264
|
+
spores and entities can be created by coding agents or manual curation.
|
|
265
|
+
Focus on recent or high-signal active spores and obvious entity gaps.
|
|
266
|
+
If a quick review shows no meaningful new graph work, report "skip".
|
|
267
|
+
|
|
252
268
|
The graph has two layers:
|
|
253
269
|
- Lineage (automatic): spore→session, spore→batch — already done
|
|
254
270
|
- Semantic (your job): spore→entity, entity→entity — you create these
|
|
@@ -321,6 +337,7 @@ phases:
|
|
|
321
337
|
each tier is. Review the prior phase results (in your context):
|
|
322
338
|
- How many spores were created/superseded?
|
|
323
339
|
- How many entities/edges were added?
|
|
340
|
+
- Did consolidate or graph act on externally-created spores or entities?
|
|
324
341
|
|
|
325
342
|
If changes are minor (< 3 new spores, 0 entity changes), call
|
|
326
343
|
`vault_report` with action "skip" and reason explaining why the
|
|
@@ -379,6 +396,10 @@ phases:
|
|
|
379
396
|
Update digest tier 10000 — Full institutional knowledge.
|
|
380
397
|
Budget: 7 turns (1 read + 1-2 search + 1 write + buffer).
|
|
381
398
|
|
|
399
|
+
If the digest-assess phase said this tier should SKIP or reported
|
|
400
|
+
"no new intelligence material this run", call `vault_report` with
|
|
401
|
+
action "skip" for tier 10000 and finish immediately.
|
|
402
|
+
|
|
382
403
|
This is the largest tier (~10,000 tokens). Update if any new content
|
|
383
404
|
was found. The digest-assess phase summary in your context contains
|
|
384
405
|
the material to integrate and per-tier guidance.
|
|
@@ -412,6 +433,10 @@ phases:
|
|
|
412
433
|
Update digest tier 5000 — Deep onboarding.
|
|
413
434
|
Budget: 5 turns (1 read + 1 search + 1 write + buffer).
|
|
414
435
|
|
|
436
|
+
If the digest-assess phase said this tier should SKIP or reported
|
|
437
|
+
"no new intelligence material this run", call `vault_report` with
|
|
438
|
+
action "skip" for tier 5000 and finish immediately.
|
|
439
|
+
|
|
415
440
|
This tier (~5,000 tokens) focuses on trade-offs and patterns. The
|
|
416
441
|
digest-assess phase summary in your context contains the material
|
|
417
442
|
to integrate and per-tier guidance.
|
|
@@ -444,6 +469,10 @@ phases:
|
|
|
444
469
|
Update digest tier 1500 — Executive briefing.
|
|
445
470
|
Budget: 3 turns (1 read + 1 write + buffer).
|
|
446
471
|
|
|
472
|
+
If the digest-assess phase said this tier should SKIP or reported
|
|
473
|
+
"no new intelligence material this run", call `vault_report` with
|
|
474
|
+
action "skip" for tier 1500 and finish immediately.
|
|
475
|
+
|
|
447
476
|
This is the most compressed tier (~1,500 tokens). Only update if
|
|
448
477
|
important new decisions, gotchas, or critical changes were found.
|
|
449
478
|
The digest-assess phase summary in your context contains the material
|
|
@@ -10,10 +10,10 @@ You operate on a vault database. The capture layer writes raw data (sessions, pr
|
|
|
10
10
|
|
|
11
11
|
- **vault_state** — Get your key-value state (cursor position, preferences). Call this first on every run.
|
|
12
12
|
- **vault_unprocessed** — Get prompt batches not yet processed, ordered by ID. Supports cursor-based pagination via `after_id`.
|
|
13
|
-
- **vault_spores** — List existing spores with filters: `observation_type`, `status` (active/superseded/archived), `agent_id
|
|
13
|
+
- **vault_spores** — List existing spores with filters: `observation_type`, `status` (active/superseded/archived), `agent_id`, `session_id`, or fetch exact spores by `ids` when you need full content for a semantic shortlist.
|
|
14
14
|
- **vault_sessions** — List sessions with optional `status` filter, ordered by most recent.
|
|
15
15
|
- **vault_search_fts** — Full-text search across prompt batches and activities using FTS5. Best for keyword matches and finding session content. Params: `query`, `type` (prompt_batch, activity), `limit`.
|
|
16
|
-
- **vault_search_semantic** — Semantic similarity search across embedded vault content (spores, sessions, plans, artifacts). Best for finding conceptually related content. Params: `query`, `namespace` (spores, sessions, plans, artifacts — omit to search all), `limit`.
|
|
16
|
+
- **vault_search_semantic** — Semantic similarity search across embedded vault content (spores, sessions, plans, artifacts). Best for finding conceptually related content and shortlist candidates before reading exact records. Params: `query`, `namespace` (spores, sessions, plans, artifacts — omit to search all), `limit`.
|
|
17
17
|
- **vault_read_digest** — Read current digest extracts. Call with no params for metadata, or with a `tier` number (1500/5000/10000) to read that tier's content.
|
|
18
18
|
- **vault_entities** — List knowledge graph entities with optional `type` and `name` filters. Use to check existing entities before creating new ones.
|
|
19
19
|
- **vault_edges** — List graph edges with optional `source_id`, `target_id`, and `type` filters. Use to check existing relationships before creating edges.
|
package/dist/src/cli.js
CHANGED
package/dist/src/daemon/main.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
2
|
|
|
3
3
|
// src/entries/daemon.ts
|
|
4
|
-
var { main } = await import("../../main-
|
|
4
|
+
var { main } = await import("../../main-5S4MDCIO.js");
|
|
5
5
|
await main();
|
|
6
6
|
//# sourceMappingURL=main.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
2
|
|
|
3
3
|
// src/entries/post-tool-use.ts
|
|
4
|
-
var { main } = await import("../../post-tool-use-
|
|
4
|
+
var { main } = await import("../../post-tool-use-LXL6NXDS.js");
|
|
5
5
|
await main();
|
|
6
6
|
//# sourceMappingURL=post-tool-use.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
2
|
|
|
3
3
|
// src/entries/session-end.ts
|
|
4
|
-
var { main } = await import("../../session-end-
|
|
4
|
+
var { main } = await import("../../session-end-4WRTIBVQ.js");
|
|
5
5
|
await main();
|
|
6
6
|
//# sourceMappingURL=session-end.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
2
|
|
|
3
3
|
// src/entries/session-start.ts
|
|
4
|
-
var { main } = await import("../../session-start-
|
|
4
|
+
var { main } = await import("../../session-start-HRWTZXQR.js");
|
|
5
5
|
await main();
|
|
6
6
|
//# sourceMappingURL=session-start.js.map
|
package/dist/src/hooks/stop.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
2
|
|
|
3
3
|
// src/entries/stop.ts
|
|
4
|
-
var { main } = await import("../../stop-
|
|
4
|
+
var { main } = await import("../../stop-R2GDHMRA.js");
|
|
5
5
|
await main();
|
|
6
6
|
//# sourceMappingURL=stop.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
2
|
|
|
3
3
|
// src/entries/user-prompt-submit.ts
|
|
4
|
-
var { main } = await import("../../user-prompt-submit-
|
|
4
|
+
var { main } = await import("../../user-prompt-submit-YELSR6XI.js");
|
|
5
5
|
await main();
|
|
6
6
|
//# sourceMappingURL=user-prompt-submit.js.map
|
package/dist/src/mcp/server.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
2
|
|
|
3
3
|
// src/entries/mcp-server.ts
|
|
4
|
-
var { main } = await import("../../server-
|
|
4
|
+
var { main } = await import("../../server-2N23P6F2.js");
|
|
5
5
|
await main();
|
|
6
6
|
//# sourceMappingURL=server.js.map
|
|
@@ -79,6 +79,33 @@ capture:
|
|
|
79
79
|
action: drop
|
|
80
80
|
reason: subagent-thread-spawn
|
|
81
81
|
|
|
82
|
+
# Layer 5 — non-interactive exec filter (structural).
|
|
83
|
+
#
|
|
84
|
+
# `codex exec` writes a real rollout transcript, but it is a
|
|
85
|
+
# programmatic validation/automation surface rather than the user's
|
|
86
|
+
# interactive Codex conversation. Those transcripts have:
|
|
87
|
+
# "source": "exec"
|
|
88
|
+
# in session_meta. Treat them as junk capture for the interactive
|
|
89
|
+
# session archive and drop them before materializing a session row.
|
|
90
|
+
- event: session_start
|
|
91
|
+
scope: this_agent
|
|
92
|
+
when:
|
|
93
|
+
transcript_meta_field_equals:
|
|
94
|
+
path: source
|
|
95
|
+
value: exec
|
|
96
|
+
action: drop
|
|
97
|
+
reason: noninteractive-exec
|
|
98
|
+
|
|
99
|
+
# Layer 6 — safety net for exec prompts that slip past SessionStart.
|
|
100
|
+
- event: user_prompt
|
|
101
|
+
scope: this_agent
|
|
102
|
+
when:
|
|
103
|
+
transcript_meta_field_equals:
|
|
104
|
+
path: source
|
|
105
|
+
value: exec
|
|
106
|
+
action: drop
|
|
107
|
+
reason: noninteractive-exec
|
|
108
|
+
|
|
82
109
|
# Codex Desktop wraps user prompts with a file-mention preamble when
|
|
83
110
|
# screenshots or files are attached:
|
|
84
111
|
# "# Files mentioned by the user:\n## <filename>: <path>\n## My request for Codex:\n<actual prompt>"
|
|
@@ -100,6 +127,7 @@ registration:
|
|
|
100
127
|
hooksTarget: .codex/hooks.json
|
|
101
128
|
mcpTarget: .codex/config.toml
|
|
102
129
|
mcpFormat: toml
|
|
130
|
+
mcpCwd: "."
|
|
103
131
|
skillsTarget: .agents/skills
|
|
104
132
|
settingsTarget: .codex/config.toml
|
|
105
133
|
settingsFormat: toml
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
gatherStats
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-P3DN5EWW.js";
|
|
5
5
|
import {
|
|
6
6
|
initVaultDb
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-YSNIAJ5D.js";
|
|
8
8
|
import "./chunk-SAKJMNSR.js";
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
9
|
+
import "./chunk-4LCIKVDM.js";
|
|
10
|
+
import "./chunk-FMRZ26U5.js";
|
|
11
|
+
import "./chunk-SRXTSI25.js";
|
|
12
12
|
import "./chunk-MYX5NCRH.js";
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-
|
|
13
|
+
import "./chunk-UOQQENDW.js";
|
|
14
|
+
import "./chunk-ACQ2AIEM.js";
|
|
15
15
|
import "./chunk-LPUQPDC2.js";
|
|
16
|
-
import "./chunk-
|
|
16
|
+
import "./chunk-FLLBJLHM.js";
|
|
17
17
|
import "./chunk-UUHLLQXO.js";
|
|
18
18
|
import "./chunk-6LQIMRTC.js";
|
|
19
19
|
import "./chunk-ODXLRR4U.js";
|
|
@@ -92,4 +92,4 @@ function formatUptime(seconds) {
|
|
|
92
92
|
export {
|
|
93
93
|
run
|
|
94
94
|
};
|
|
95
|
-
//# sourceMappingURL=stats-
|
|
95
|
+
//# sourceMappingURL=stats-7A4CJ4MS.js.map
|
|
@@ -2,17 +2,18 @@ import { createRequire as __cr } from 'node:module'; const require = __cr(import
|
|
|
2
2
|
import {
|
|
3
3
|
normalizeHookInput,
|
|
4
4
|
readStdin
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-DCSGJ7W4.js";
|
|
6
|
+
import "./chunk-ZXZPJJN3.js";
|
|
6
7
|
import {
|
|
7
8
|
resolveVaultDir
|
|
8
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-CUDIZJY7.js";
|
|
9
10
|
import {
|
|
10
11
|
DaemonClient
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import "./chunk-
|
|
13
|
-
import "./chunk-
|
|
12
|
+
} from "./chunk-UOQQENDW.js";
|
|
13
|
+
import "./chunk-ACQ2AIEM.js";
|
|
14
|
+
import "./chunk-NGROSFOH.js";
|
|
14
15
|
import "./chunk-LPUQPDC2.js";
|
|
15
|
-
import "./chunk-
|
|
16
|
+
import "./chunk-FLLBJLHM.js";
|
|
16
17
|
import "./chunk-UUHLLQXO.js";
|
|
17
18
|
import "./chunk-6LQIMRTC.js";
|
|
18
19
|
import "./chunk-ODXLRR4U.js";
|
|
@@ -45,4 +46,4 @@ async function main() {
|
|
|
45
46
|
export {
|
|
46
47
|
main
|
|
47
48
|
};
|
|
48
|
-
//# sourceMappingURL=stop-
|
|
49
|
+
//# sourceMappingURL=stop-R2GDHMRA.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hooks/stop.ts"],"sourcesContent":["import { DaemonClient } from './client.js';\nimport { readStdin } from './read-stdin.js';\nimport { normalizeHookInput } from './normalize.js';\nimport { resolveVaultDir } from '../vault/resolve.js';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nexport async function main() {\n const VAULT_DIR = resolveVaultDir();\n if (!fs.existsSync(path.join(VAULT_DIR, 'myco.yaml'))) return;\n\n try {\n const rawInput = JSON.parse(await readStdin());\n const input = normalizeHookInput(rawInput);\n if (!input.sessionId) return;\n\n const client = new DaemonClient(VAULT_DIR);\n\n await client.ensureRunning({ checkStale: false });\n\n // Pass transcript_path and last_assistant_message from the active agent.\n // These are provided by the hook system and eliminate the need to\n // scan directories or mine the transcript for the AI response.\n await client.post('/events/stop', {\n session_id: input.sessionId,\n agent: input.agent,\n transcript_path: input.transcriptPath,\n last_assistant_message: input.lastResponse,\n });\n } catch (error) {\n process.stderr.write(`[myco] stop error: ${(error as Error).message}\\n`);\n }\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/hooks/stop.ts"],"sourcesContent":["import { DaemonClient } from './client.js';\nimport { readStdin } from './read-stdin.js';\nimport { normalizeHookInput } from './normalize.js';\nimport { resolveVaultDir } from '../vault/resolve.js';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nexport async function main() {\n const VAULT_DIR = resolveVaultDir();\n if (!fs.existsSync(path.join(VAULT_DIR, 'myco.yaml'))) return;\n\n try {\n const rawInput = JSON.parse(await readStdin());\n const input = normalizeHookInput(rawInput);\n if (!input.sessionId) return;\n\n const client = new DaemonClient(VAULT_DIR);\n\n await client.ensureRunning({ checkStale: false });\n\n // Pass transcript_path and last_assistant_message from the active agent.\n // These are provided by the hook system and eliminate the need to\n // scan directories or mine the transcript for the AI response.\n await client.post('/events/stop', {\n session_id: input.sessionId,\n agent: input.agent,\n transcript_path: input.transcriptPath,\n last_assistant_message: input.lastResponse,\n });\n } catch (error) {\n process.stderr.write(`[myco] stop error: ${(error as Error).message}\\n`);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAIA,OAAO,QAAQ;AACf,OAAO,UAAU;AAEjB,eAAsB,OAAO;AAC3B,QAAM,YAAY,gBAAgB;AAClC,MAAI,CAAC,GAAG,WAAW,KAAK,KAAK,WAAW,WAAW,CAAC,EAAG;AAEvD,MAAI;AACF,UAAM,WAAW,KAAK,MAAM,MAAM,UAAU,CAAC;AAC7C,UAAM,QAAQ,mBAAmB,QAAQ;AACzC,QAAI,CAAC,MAAM,UAAW;AAEtB,UAAM,SAAS,IAAI,aAAa,SAAS;AAEzC,UAAM,OAAO,cAAc,EAAE,YAAY,MAAM,CAAC;AAKhD,UAAM,OAAO,KAAK,gBAAgB;AAAA,MAChC,YAAY,MAAM;AAAA,MAClB,OAAO,MAAM;AAAA,MACb,iBAAiB,MAAM;AAAA,MACvB,wBAAwB,MAAM;AAAA,IAChC,CAAC;AAAA,EACH,SAAS,OAAO;AACd,YAAQ,OAAO,MAAM,sBAAuB,MAAgB,OAAO;AAAA,CAAI;AAAA,EACzE;AACF;","names":[]}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
sendEvent
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-POR75WM6.js";
|
|
5
5
|
import "./chunk-V7XG6V6C.js";
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-DCSGJ7W4.js";
|
|
7
|
+
import "./chunk-ZXZPJJN3.js";
|
|
8
|
+
import "./chunk-CUDIZJY7.js";
|
|
9
|
+
import "./chunk-UOQQENDW.js";
|
|
10
|
+
import "./chunk-ACQ2AIEM.js";
|
|
11
|
+
import "./chunk-NGROSFOH.js";
|
|
11
12
|
import "./chunk-LPUQPDC2.js";
|
|
12
|
-
import "./chunk-
|
|
13
|
+
import "./chunk-FLLBJLHM.js";
|
|
13
14
|
import "./chunk-UUHLLQXO.js";
|
|
14
15
|
import "./chunk-6LQIMRTC.js";
|
|
15
16
|
import "./chunk-ODXLRR4U.js";
|
|
@@ -27,4 +28,4 @@ async function main() {
|
|
|
27
28
|
export {
|
|
28
29
|
main
|
|
29
30
|
};
|
|
30
|
-
//# sourceMappingURL=stop-failure-
|
|
31
|
+
//# sourceMappingURL=stop-failure-773KR4VZ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/hooks/stop-failure.ts"],"sourcesContent":["import { sendEvent } from './send-event.js';\n\nexport async function main() {\n await sendEvent('stop-failure', (input) => ({\n type: 'stop_failure',\n error: input.raw.error,\n error_details: input.raw.error_details,\n }));\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/hooks/stop-failure.ts"],"sourcesContent":["import { sendEvent } from './send-event.js';\n\nexport async function main() {\n await sendEvent('stop-failure', (input) => ({\n type: 'stop_failure',\n error: input.raw.error,\n error_details: input.raw.error_details,\n }));\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAEA,eAAsB,OAAO;AAC3B,QAAM,UAAU,gBAAgB,CAAC,WAAW;AAAA,IAC1C,MAAM;AAAA,IACN,OAAO,MAAM,IAAI;AAAA,IACjB,eAAe,MAAM,IAAI;AAAA,EAC3B,EAAE;AACJ;","names":[]}
|