@goondocks/myco 0.20.2 → 0.21.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/myco-run +68 -7
- package/dist/agent-eval-YK2VP2S4.js +356 -0
- package/dist/agent-eval-YK2VP2S4.js.map +1 -0
- package/dist/{agent-run-X25Q2A6T.js → agent-run-GEJBD2YD.js} +10 -8
- package/dist/{agent-run-X25Q2A6T.js.map → agent-run-GEJBD2YD.js.map} +1 -1
- package/dist/{agent-tasks-7B6OFERB.js → agent-tasks-5XSRGTRX.js} +10 -8
- package/dist/{agent-tasks-7B6OFERB.js.map → agent-tasks-5XSRGTRX.js.map} +1 -1
- package/dist/{chunk-OD4AA7PV.js → chunk-53RPGOEN.js} +56 -8
- package/dist/chunk-53RPGOEN.js.map +1 -0
- package/dist/chunk-54SXG5HF.js +26 -0
- package/dist/chunk-54SXG5HF.js.map +1 -0
- package/dist/{chunk-XATDZX7U.js → chunk-6ALVMIB4.js} +19 -5
- package/dist/{chunk-XATDZX7U.js.map → chunk-6ALVMIB4.js.map} +1 -1
- package/dist/{chunk-FLLBJLHM.js → chunk-6C6QZ4PM.js} +9 -5
- package/dist/chunk-6C6QZ4PM.js.map +1 -0
- package/dist/{chunk-CCRGY3QW.js → chunk-AUIXX33A.js} +24 -95
- package/dist/chunk-AUIXX33A.js.map +1 -0
- package/dist/chunk-CISWUP5W.js +101 -0
- package/dist/chunk-CISWUP5W.js.map +1 -0
- package/dist/{chunk-MYOZLMB2.js → chunk-DTWUHHFI.js} +576 -20
- package/dist/chunk-DTWUHHFI.js.map +1 -0
- package/dist/chunk-EEOJWLMP.js +582 -0
- package/dist/chunk-EEOJWLMP.js.map +1 -0
- package/dist/{chunk-XG5RRUYF.js → chunk-ENZR5NG7.js} +2 -2
- package/dist/{chunk-6RFZWV4R.js → chunk-FCJ5JV54.js} +1 -1
- package/dist/{chunk-6RFZWV4R.js.map → chunk-FCJ5JV54.js.map} +1 -1
- package/dist/{chunk-US4LNCAT.js → chunk-IPPMYQ2Y.js} +5 -1
- package/dist/chunk-IPPMYQ2Y.js.map +1 -0
- package/dist/{chunk-VVNL26WX.js → chunk-KTTSXYEK.js} +22 -10
- package/dist/chunk-KTTSXYEK.js.map +1 -0
- package/dist/chunk-LQIPXVDH.js +17 -0
- package/dist/chunk-LQIPXVDH.js.map +1 -0
- package/dist/{chunk-DCSGJ7W4.js → chunk-N2DGFACQ.js} +3 -3
- package/dist/chunk-N7Z3LUEZ.js +858 -0
- package/dist/chunk-N7Z3LUEZ.js.map +1 -0
- package/dist/{chunk-2PDWCDKY.js → chunk-NFO7BRCO.js} +10 -7
- package/dist/{chunk-2PDWCDKY.js.map → chunk-NFO7BRCO.js.map} +1 -1
- package/dist/{chunk-Q36VMZST.js → chunk-OTQH5KZW.js} +89 -38
- package/dist/chunk-OTQH5KZW.js.map +1 -0
- package/dist/chunk-OUJSQSKE.js +113 -0
- package/dist/chunk-OUJSQSKE.js.map +1 -0
- package/dist/chunk-OZ3FBAK5.js +50 -0
- package/dist/chunk-OZ3FBAK5.js.map +1 -0
- package/dist/chunk-QATYARI5.js +408 -0
- package/dist/chunk-QATYARI5.js.map +1 -0
- package/dist/{chunk-KESLPBKV.js → chunk-QDLVIW2O.js} +4 -4
- package/dist/{chunk-5XIVBO25.js → chunk-QLLBJEM7.js} +6 -2
- package/dist/chunk-QLLBJEM7.js.map +1 -0
- package/dist/{chunk-EVDQKYCG.js → chunk-RQSJLWP4.js} +13 -2
- package/dist/chunk-RQSJLWP4.js.map +1 -0
- package/dist/{chunk-BPRIYNLE.js → chunk-TKAJ3JVF.js} +3 -3
- package/dist/chunk-TSM6VESW.js +25 -0
- package/dist/chunk-TSM6VESW.js.map +1 -0
- package/dist/{chunk-6X2ERTQV.js → chunk-USVFEWYL.js} +6 -4
- package/dist/{chunk-6X2ERTQV.js.map → chunk-USVFEWYL.js.map} +1 -1
- package/dist/{chunk-JZGN33AY.js → chunk-VRI56337.js} +4 -4
- package/dist/chunk-X2IRGXGF.js +14103 -0
- package/dist/chunk-X2IRGXGF.js.map +1 -0
- package/dist/{chunk-FMRZ26U5.js → chunk-X3IGT5RV.js} +5 -2
- package/dist/{chunk-FMRZ26U5.js.map → chunk-X3IGT5RV.js.map} +1 -1
- package/dist/{chunk-KHT24OWC.js → chunk-YDUOSRGD.js} +8 -94
- package/dist/{chunk-KHT24OWC.js.map → chunk-YDUOSRGD.js.map} +1 -1
- package/dist/{chunk-NGROSFOH.js → chunk-Z66IT5KL.js} +14 -9
- package/dist/chunk-Z66IT5KL.js.map +1 -0
- package/dist/{cli-GGPWH4UO.js → cli-HSLIG7EX.js} +50 -43
- package/dist/cli-HSLIG7EX.js.map +1 -0
- package/dist/{client-YXQUTXVZ.js → client-Z43DNLJH.js} +4 -4
- package/dist/{config-OMCYHG2S.js → config-VC4ACP42.js} +6 -4
- package/dist/{config-OMCYHG2S.js.map → config-VC4ACP42.js.map} +1 -1
- package/dist/{detect-PXNM6TA7.js → detect-7NUD5B5R.js} +2 -2
- package/dist/{detect-providers-5KOPZ7J2.js → detect-providers-ILLQZROY.js} +4 -4
- package/dist/{doctor-5JXJ36KA.js → doctor-HJCWHAU4.js} +49 -16
- package/dist/doctor-HJCWHAU4.js.map +1 -0
- package/dist/executor-DO6QFC6G.js +45 -0
- package/dist/{init-LMYOVZAV.js → init-4KVK7W2E.js} +16 -14
- package/dist/{init-LMYOVZAV.js.map → init-4KVK7W2E.js.map} +1 -1
- package/dist/{installer-FS257JRZ.js → installer-N4UTEACX.js} +6 -4
- package/dist/{llm-TH4NLIRM.js → llm-AGVEF5XD.js} +5 -4
- package/dist/{loader-CQYTFHEW.js → loader-LX7TFRM6.js} +5 -3
- package/dist/{loader-NOMBJUPW.js → loader-UDNUMEDA.js} +5 -3
- package/dist/{main-YTBVRTBI.js → main-4J4QZZTZ.js} +2518 -656
- package/dist/main-4J4QZZTZ.js.map +1 -0
- package/dist/{open-HG2DX6RN.js → open-7TXJQM3H.js} +10 -8
- package/dist/{open-HG2DX6RN.js.map → open-7TXJQM3H.js.map} +1 -1
- package/dist/{post-compact-JSECI44W.js → post-compact-7AEFVCZS.js} +8 -8
- package/dist/{post-tool-use-POGPTJBA.js → post-tool-use-TZINWWDH.js} +11 -9
- package/dist/post-tool-use-TZINWWDH.js.map +1 -0
- package/dist/{post-tool-use-failure-OT7BFWQW.js → post-tool-use-failure-TCFEU2GI.js} +8 -8
- package/dist/{pre-compact-OXVODKH4.js → pre-compact-LO2VZCGR.js} +8 -8
- package/dist/{provider-check-43LAMSMH.js → provider-check-ZEV5P4KM.js} +4 -4
- package/dist/{registry-U4CHXK6R.js → registry-F3THYC5M.js} +6 -4
- package/dist/{remove-N7ZPELFU.js → remove-F77AAALE.js} +12 -10
- package/dist/{remove-N7ZPELFU.js.map → remove-F77AAALE.js.map} +1 -1
- package/dist/{restart-ADG5GBTB.js → restart-UEFDPMLT.js} +11 -9
- package/dist/{restart-ADG5GBTB.js.map → restart-UEFDPMLT.js.map} +1 -1
- package/dist/{search-AHZEUNRR.js → search-NHNVUAQQ.js} +11 -9
- package/dist/{search-AHZEUNRR.js.map → search-NHNVUAQQ.js.map} +1 -1
- package/dist/{server-AGVYZVP5.js → server-AZJSTQEK.js} +369 -270
- package/dist/server-AZJSTQEK.js.map +1 -0
- package/dist/{session-6IU4AXYP.js → session-3HLC5KOD.js} +11 -9
- package/dist/{session-6IU4AXYP.js.map → session-3HLC5KOD.js.map} +1 -1
- package/dist/{session-end-FT27DWYZ.js → session-end-FS46UARX.js} +7 -7
- package/dist/session-start-46KPFV2H.js +134 -0
- package/dist/session-start-46KPFV2H.js.map +1 -0
- package/dist/{setup-llm-77MP4I2G.js → setup-llm-JMWSNQ2C.js} +11 -9
- package/dist/{setup-llm-77MP4I2G.js.map → setup-llm-JMWSNQ2C.js.map} +1 -1
- package/dist/src/agent/definitions/agent.yaml +9 -5
- package/dist/src/agent/definitions/tasks/cortex-instructions.yaml +115 -0
- package/dist/src/agent/definitions/tasks/cortex-prompt-builder.yaml +67 -0
- package/dist/src/agent/definitions/tasks/digest-only.yaml +1 -1
- package/dist/src/agent/definitions/tasks/extract-only.yaml +1 -1
- package/dist/src/agent/definitions/tasks/review-session.yaml +10 -39
- package/dist/src/agent/definitions/tasks/skill-evolve.yaml +181 -25
- package/dist/src/agent/definitions/tasks/skill-generate.yaml +21 -7
- package/dist/src/agent/definitions/tasks/skill-survey.yaml +2 -6
- package/dist/src/agent/definitions/tasks/supersession-sweep.yaml +1 -1
- package/dist/src/agent/definitions/tasks/title-summary.yaml +12 -19
- package/dist/src/agent/definitions/tasks/{full-intelligence.yaml → vault-evolve.yaml} +74 -129
- package/dist/src/agent/definitions/tasks/vault-seed.yaml +370 -0
- package/dist/src/agent/prompts/agent.md +12 -38
- 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/claude-code.yaml +4 -0
- package/dist/src/symbionts/manifests/opencode.yaml +7 -0
- package/dist/src/symbionts/manifests/pi.yaml +22 -0
- package/dist/src/symbionts/templates/agents-starter.md +1 -1
- package/dist/src/symbionts/templates/pi/package.json +6 -0
- package/dist/src/symbionts/templates/pi/plugin.ts +559 -0
- package/dist/{stats-NVPWOYTE.js → stats-MKMETHMA.js} +11 -9
- package/dist/{stats-NVPWOYTE.js.map → stats-MKMETHMA.js.map} +1 -1
- package/dist/{stop-ZPIKVLH4.js → stop-OUEX6KA4.js} +7 -7
- package/dist/{stop-failure-2PX67YJC.js → stop-failure-2BWVNZEG.js} +8 -8
- package/dist/{subagent-start-UUE6EHQD.js → subagent-start-J4VV6DEE.js} +8 -8
- package/dist/{subagent-stop-KQWWWPE6.js → subagent-stop-JMLVEPIA.js} +8 -8
- package/dist/{task-completed-WMHOFQ7B.js → task-completed-65CHMMKA.js} +8 -8
- package/dist/{team-LRZ6GTQK.js → team-U2LDKIS4.js} +7 -5
- package/dist/{turns-YFNI5CQC.js → turns-HU2CTZAP.js} +2 -2
- package/dist/ui/assets/index-BUGor9dk.js +842 -0
- package/dist/ui/assets/index-_OP4ifzH.css +1 -0
- package/dist/ui/index.html +2 -2
- package/dist/{update-O6V4RC4W.js → update-ZSHVXWSQ.js} +12 -10
- package/dist/{update-O6V4RC4W.js.map → update-ZSHVXWSQ.js.map} +1 -1
- package/dist/{user-prompt-submit-N36KUPHI.js → user-prompt-submit-APMO6FVU.js} +10 -9
- package/dist/{user-prompt-submit-N36KUPHI.js.map → user-prompt-submit-APMO6FVU.js.map} +1 -1
- package/dist/{verify-LXPV7NYG.js → verify-R76ZFJSZ.js} +8 -5
- package/dist/{verify-LXPV7NYG.js.map → verify-R76ZFJSZ.js.map} +1 -1
- package/dist/{version-XMPPJQHR.js → version-TXPPS3L5.js} +2 -2
- package/dist/version-TXPPS3L5.js.map +1 -0
- package/package.json +3 -1
- package/skills/myco/SKILL.md +16 -1
- package/skills/myco/references/cli-usage.md +1 -1
- package/skills/myco-rules/SKILL.md +94 -0
- package/skills/{rules → myco-rules}/references/rules-bad-example.md +1 -1
- package/skills/{rules → myco-rules}/references/rules-good-example.md +1 -1
- package/dist/chunk-4YFKBL3F.js +0 -195
- package/dist/chunk-4YFKBL3F.js.map +0 -1
- package/dist/chunk-5XIVBO25.js.map +0 -1
- package/dist/chunk-CCRGY3QW.js.map +0 -1
- package/dist/chunk-CUDIZJY7.js +0 -36
- package/dist/chunk-CUDIZJY7.js.map +0 -1
- package/dist/chunk-EVDQKYCG.js.map +0 -1
- package/dist/chunk-FLLBJLHM.js.map +0 -1
- package/dist/chunk-MYOZLMB2.js.map +0 -1
- package/dist/chunk-NGROSFOH.js.map +0 -1
- package/dist/chunk-OD4AA7PV.js.map +0 -1
- package/dist/chunk-Q36VMZST.js.map +0 -1
- package/dist/chunk-US4LNCAT.js.map +0 -1
- package/dist/chunk-UYMFCYBF.js +0 -2326
- package/dist/chunk-UYMFCYBF.js.map +0 -1
- package/dist/chunk-VVNL26WX.js.map +0 -1
- package/dist/cli-GGPWH4UO.js.map +0 -1
- package/dist/doctor-5JXJ36KA.js.map +0 -1
- package/dist/executor-HWW2QNZQ.js +0 -2472
- package/dist/executor-HWW2QNZQ.js.map +0 -1
- package/dist/main-YTBVRTBI.js.map +0 -1
- package/dist/post-tool-use-POGPTJBA.js.map +0 -1
- package/dist/server-AGVYZVP5.js.map +0 -1
- package/dist/session-start-LAFICHII.js +0 -189
- package/dist/session-start-LAFICHII.js.map +0 -1
- package/dist/src/agent/definitions/tasks/graph-maintenance.yaml +0 -93
- package/dist/ui/assets/index-C2JuNtRB.css +0 -1
- package/dist/ui/assets/index-JLVaQKV2.js +0 -832
- package/skills/myco-curate/SKILL.md +0 -86
- package/skills/rules/SKILL.md +0 -214
- /package/dist/{chunk-XG5RRUYF.js.map → chunk-ENZR5NG7.js.map} +0 -0
- /package/dist/{chunk-DCSGJ7W4.js.map → chunk-N2DGFACQ.js.map} +0 -0
- /package/dist/{chunk-KESLPBKV.js.map → chunk-QDLVIW2O.js.map} +0 -0
- /package/dist/{chunk-BPRIYNLE.js.map → chunk-TKAJ3JVF.js.map} +0 -0
- /package/dist/{chunk-JZGN33AY.js.map → chunk-VRI56337.js.map} +0 -0
- /package/dist/{client-YXQUTXVZ.js.map → client-Z43DNLJH.js.map} +0 -0
- /package/dist/{detect-PXNM6TA7.js.map → detect-7NUD5B5R.js.map} +0 -0
- /package/dist/{detect-providers-5KOPZ7J2.js.map → detect-providers-ILLQZROY.js.map} +0 -0
- /package/dist/{installer-FS257JRZ.js.map → executor-DO6QFC6G.js.map} +0 -0
- /package/dist/{llm-TH4NLIRM.js.map → installer-N4UTEACX.js.map} +0 -0
- /package/dist/{loader-CQYTFHEW.js.map → llm-AGVEF5XD.js.map} +0 -0
- /package/dist/{loader-NOMBJUPW.js.map → loader-LX7TFRM6.js.map} +0 -0
- /package/dist/{provider-check-43LAMSMH.js.map → loader-UDNUMEDA.js.map} +0 -0
- /package/dist/{post-compact-JSECI44W.js.map → post-compact-7AEFVCZS.js.map} +0 -0
- /package/dist/{post-tool-use-failure-OT7BFWQW.js.map → post-tool-use-failure-TCFEU2GI.js.map} +0 -0
- /package/dist/{pre-compact-OXVODKH4.js.map → pre-compact-LO2VZCGR.js.map} +0 -0
- /package/dist/{registry-U4CHXK6R.js.map → provider-check-ZEV5P4KM.js.map} +0 -0
- /package/dist/{team-LRZ6GTQK.js.map → registry-F3THYC5M.js.map} +0 -0
- /package/dist/{session-end-FT27DWYZ.js.map → session-end-FS46UARX.js.map} +0 -0
- /package/dist/{stop-ZPIKVLH4.js.map → stop-OUEX6KA4.js.map} +0 -0
- /package/dist/{stop-failure-2PX67YJC.js.map → stop-failure-2BWVNZEG.js.map} +0 -0
- /package/dist/{subagent-start-UUE6EHQD.js.map → subagent-start-J4VV6DEE.js.map} +0 -0
- /package/dist/{subagent-stop-KQWWWPE6.js.map → subagent-stop-JMLVEPIA.js.map} +0 -0
- /package/dist/{task-completed-WMHOFQ7B.js.map → task-completed-65CHMMKA.js.map} +0 -0
- /package/dist/{turns-YFNI5CQC.js.map → team-U2LDKIS4.js.map} +0 -0
- /package/dist/{version-XMPPJQHR.js.map → turns-HU2CTZAP.js.map} +0 -0
|
@@ -1,20 +1,22 @@
|
|
|
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-QDLVIW2O.js";
|
|
5
5
|
import "./chunk-SAKJMNSR.js";
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-OTQH5KZW.js";
|
|
7
|
+
import "./chunk-X3IGT5RV.js";
|
|
8
8
|
import {
|
|
9
9
|
getSession,
|
|
10
10
|
listSessions
|
|
11
|
-
} from "./chunk-
|
|
12
|
-
import "./chunk-
|
|
11
|
+
} from "./chunk-RQSJLWP4.js";
|
|
12
|
+
import "./chunk-53RPGOEN.js";
|
|
13
|
+
import "./chunk-OUJSQSKE.js";
|
|
14
|
+
import "./chunk-POEPHBQK.js";
|
|
13
15
|
import "./chunk-MYX5NCRH.js";
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-
|
|
16
|
+
import "./chunk-KTTSXYEK.js";
|
|
17
|
+
import "./chunk-ENZR5NG7.js";
|
|
16
18
|
import "./chunk-LPUQPDC2.js";
|
|
17
|
-
import "./chunk-
|
|
19
|
+
import "./chunk-6C6QZ4PM.js";
|
|
18
20
|
import "./chunk-UUHLLQXO.js";
|
|
19
21
|
import "./chunk-6LQIMRTC.js";
|
|
20
22
|
import "./chunk-ODXLRR4U.js";
|
|
@@ -70,4 +72,4 @@ ${target.summary}`);
|
|
|
70
72
|
export {
|
|
71
73
|
run
|
|
72
74
|
};
|
|
73
|
-
//# sourceMappingURL=session-
|
|
75
|
+
//# sourceMappingURL=session-3HLC5KOD.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,18 +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-N2DGFACQ.js";
|
|
6
6
|
import "./chunk-ZXZPJJN3.js";
|
|
7
7
|
import {
|
|
8
8
|
resolveVaultDir
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-TSM6VESW.js";
|
|
10
10
|
import {
|
|
11
11
|
DaemonClient
|
|
12
|
-
} from "./chunk-
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-
|
|
12
|
+
} from "./chunk-KTTSXYEK.js";
|
|
13
|
+
import "./chunk-ENZR5NG7.js";
|
|
14
|
+
import "./chunk-Z66IT5KL.js";
|
|
15
15
|
import "./chunk-LPUQPDC2.js";
|
|
16
|
-
import "./chunk-
|
|
16
|
+
import "./chunk-6C6QZ4PM.js";
|
|
17
17
|
import "./chunk-UUHLLQXO.js";
|
|
18
18
|
import "./chunk-6LQIMRTC.js";
|
|
19
19
|
import "./chunk-ODXLRR4U.js";
|
|
@@ -41,4 +41,4 @@ async function main() {
|
|
|
41
41
|
export {
|
|
42
42
|
main
|
|
43
43
|
};
|
|
44
|
-
//# sourceMappingURL=session-end-
|
|
44
|
+
//# sourceMappingURL=session-end-FS46UARX.js.map
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
composeSessionStartContext,
|
|
4
|
+
shouldInjectSessionStartDigest
|
|
5
|
+
} from "./chunk-OZ3FBAK5.js";
|
|
6
|
+
import {
|
|
7
|
+
getCortexInstructions,
|
|
8
|
+
shouldInjectCortex
|
|
9
|
+
} from "./chunk-N7Z3LUEZ.js";
|
|
10
|
+
import "./chunk-RQSJLWP4.js";
|
|
11
|
+
import {
|
|
12
|
+
evaluateSessionCaptureRules,
|
|
13
|
+
readTranscriptMeta
|
|
14
|
+
} from "./chunk-XL75KZGI.js";
|
|
15
|
+
import "./chunk-EEOJWLMP.js";
|
|
16
|
+
import {
|
|
17
|
+
createSchema
|
|
18
|
+
} from "./chunk-DTWUHHFI.js";
|
|
19
|
+
import {
|
|
20
|
+
loadMergedConfig
|
|
21
|
+
} from "./chunk-53RPGOEN.js";
|
|
22
|
+
import "./chunk-OUJSQSKE.js";
|
|
23
|
+
import "./chunk-POEPHBQK.js";
|
|
24
|
+
import {
|
|
25
|
+
initDatabase,
|
|
26
|
+
vaultDbPath
|
|
27
|
+
} from "./chunk-MYX5NCRH.js";
|
|
28
|
+
import {
|
|
29
|
+
normalizeHookInput,
|
|
30
|
+
readStdin
|
|
31
|
+
} from "./chunk-N2DGFACQ.js";
|
|
32
|
+
import "./chunk-ZXZPJJN3.js";
|
|
33
|
+
import {
|
|
34
|
+
resolveVaultDir
|
|
35
|
+
} from "./chunk-TSM6VESW.js";
|
|
36
|
+
import {
|
|
37
|
+
DaemonClient
|
|
38
|
+
} from "./chunk-KTTSXYEK.js";
|
|
39
|
+
import "./chunk-ENZR5NG7.js";
|
|
40
|
+
import {
|
|
41
|
+
loadManifests
|
|
42
|
+
} from "./chunk-Z66IT5KL.js";
|
|
43
|
+
import "./chunk-LPUQPDC2.js";
|
|
44
|
+
import {
|
|
45
|
+
DEFAULT_AGENT_ID,
|
|
46
|
+
estimateTokens
|
|
47
|
+
} from "./chunk-6C6QZ4PM.js";
|
|
48
|
+
import "./chunk-UUHLLQXO.js";
|
|
49
|
+
import "./chunk-6LQIMRTC.js";
|
|
50
|
+
import "./chunk-ODXLRR4U.js";
|
|
51
|
+
import "./chunk-U6PF3YII.js";
|
|
52
|
+
import "./chunk-PZUWP5VK.js";
|
|
53
|
+
|
|
54
|
+
// src/context/injector.ts
|
|
55
|
+
async function buildInjectedContext(config, _context) {
|
|
56
|
+
const includeBrief = shouldInjectCortex(config.context);
|
|
57
|
+
const includeDigest = shouldInjectSessionStartDigest(config.context);
|
|
58
|
+
if (!includeBrief && !includeDigest) {
|
|
59
|
+
return emptyContext();
|
|
60
|
+
}
|
|
61
|
+
const brief = includeBrief ? getCortexInstructions(DEFAULT_AGENT_ID)?.content ?? "" : "";
|
|
62
|
+
const { parts } = composeSessionStartContext(config, brief);
|
|
63
|
+
const text = parts.map((p) => p.text).join("\n\n");
|
|
64
|
+
return {
|
|
65
|
+
text,
|
|
66
|
+
tokenEstimate: estimateTokens(text)
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function emptyContext() {
|
|
70
|
+
return {
|
|
71
|
+
text: "",
|
|
72
|
+
tokenEstimate: 0
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// src/hooks/session-start.ts
|
|
77
|
+
import { execFileSync } from "child_process";
|
|
78
|
+
import fs from "fs";
|
|
79
|
+
import path from "path";
|
|
80
|
+
async function main() {
|
|
81
|
+
const VAULT_DIR = resolveVaultDir();
|
|
82
|
+
if (!fs.existsSync(path.join(VAULT_DIR, "myco.yaml"))) return;
|
|
83
|
+
try {
|
|
84
|
+
const rawInput = JSON.parse(await readStdin());
|
|
85
|
+
const { sessionId, agent, transcriptPath } = normalizeHookInput(rawInput);
|
|
86
|
+
const transcriptMeta = transcriptPath ? readTranscriptMeta(transcriptPath) : void 0;
|
|
87
|
+
const decision = evaluateSessionCaptureRules(loadManifests(), agent, {
|
|
88
|
+
transcriptPath,
|
|
89
|
+
transcriptMeta: transcriptMeta ?? void 0
|
|
90
|
+
});
|
|
91
|
+
if (decision.action === "drop") {
|
|
92
|
+
process.stderr.write(`[myco] session-start: dropped (${decision.reason ?? "rule"})
|
|
93
|
+
`);
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
const config = loadMergedConfig(VAULT_DIR);
|
|
97
|
+
const client = new DaemonClient(VAULT_DIR);
|
|
98
|
+
const healthy = await client.ensureRunning();
|
|
99
|
+
let branch;
|
|
100
|
+
try {
|
|
101
|
+
branch = execFileSync("git", ["rev-parse", "--abbrev-ref", "HEAD"], { encoding: "utf-8" }).trim();
|
|
102
|
+
} catch {
|
|
103
|
+
}
|
|
104
|
+
if (healthy) {
|
|
105
|
+
const [, contextResult] = await Promise.all([
|
|
106
|
+
client.post("/sessions/register", {
|
|
107
|
+
session_id: sessionId,
|
|
108
|
+
agent,
|
|
109
|
+
branch,
|
|
110
|
+
started_at: (/* @__PURE__ */ new Date()).toISOString()
|
|
111
|
+
}),
|
|
112
|
+
client.post("/context", { session_id: sessionId, branch })
|
|
113
|
+
]);
|
|
114
|
+
if (contextResult.ok && contextResult.data?.text) {
|
|
115
|
+
if (contextResult.data.source === "cortex") {
|
|
116
|
+
process.stderr.write("[myco] Injecting Myco Cortex instructions\n");
|
|
117
|
+
}
|
|
118
|
+
process.stdout.write(contextResult.data.text);
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
const db = initDatabase(vaultDbPath(VAULT_DIR));
|
|
123
|
+
createSchema(db);
|
|
124
|
+
const injected = await buildInjectedContext(config, { branch });
|
|
125
|
+
if (injected.text) process.stdout.write(injected.text);
|
|
126
|
+
} catch (error) {
|
|
127
|
+
process.stderr.write(`[myco] session-start error: ${error.message}
|
|
128
|
+
`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
export {
|
|
132
|
+
main
|
|
133
|
+
};
|
|
134
|
+
//# sourceMappingURL=session-start-46KPFV2H.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/context/injector.ts","../src/hooks/session-start.ts"],"sourcesContent":["import type { MycoConfig } from '@myco/config/schema.js';\nimport { estimateTokens, DEFAULT_AGENT_ID } from '@myco/constants.js';\nimport { getCortexInstructions } from '@myco/db/queries/cortex-instructions.js';\nimport { shouldInjectCortex } from './cortex-brief.js';\nimport { shouldInjectSessionStartDigest } from './session-start-digest.js';\nimport { composeSessionStartContext } from './session-start-context.js';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ninterface InjectionContext {\n branch?: string;\n}\n\ninterface InjectedContext {\n text: string;\n tokenEstimate: number;\n}\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * Build the degraded-path session-start context.\n *\n * The normal session-start path goes through the daemon. If the daemon is\n * unavailable, read the last stored Cortex instructions locally so degraded\n * mode matches daemon semantics instead of regenerating ad hoc text.\n */\nexport async function buildInjectedContext(\n config: MycoConfig,\n _context: InjectionContext,\n): Promise<InjectedContext> {\n const includeBrief = shouldInjectCortex(config.context);\n const includeDigest = shouldInjectSessionStartDigest(config.context);\n if (!includeBrief && !includeDigest) {\n return emptyContext();\n }\n\n const brief = includeBrief ? getCortexInstructions(DEFAULT_AGENT_ID)?.content ?? '' : '';\n const { parts } = composeSessionStartContext(config, brief);\n const text = parts.map((p) => p.text).join('\\n\\n');\n\n return {\n text,\n tokenEstimate: estimateTokens(text),\n };\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction emptyContext(): InjectedContext {\n return {\n text: '',\n tokenEstimate: 0,\n };\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 { loadMergedConfig } 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 = loadMergedConfig(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 const [, contextResult] = await Promise.all([\n client.post('/sessions/register', {\n session_id: sessionId,\n agent,\n branch,\n started_at: new Date().toISOString(),\n }),\n client.post('/context', { session_id: sessionId, branch }),\n ]);\n\n if (contextResult.ok && contextResult.data?.text) {\n if (contextResult.data.source === 'cortex') {\n process.stderr.write('[myco] Injecting Myco Cortex instructions\\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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,eAAsB,qBACpB,QACA,UAC0B;AAC1B,QAAM,eAAe,mBAAmB,OAAO,OAAO;AACtD,QAAM,gBAAgB,+BAA+B,OAAO,OAAO;AACnE,MAAI,CAAC,gBAAgB,CAAC,eAAe;AACnC,WAAO,aAAa;AAAA,EACtB;AAEA,QAAM,QAAQ,eAAe,sBAAsB,gBAAgB,GAAG,WAAW,KAAK;AACtF,QAAM,EAAE,MAAM,IAAI,2BAA2B,QAAQ,KAAK;AAC1D,QAAM,OAAO,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,MAAM;AAEjD,SAAO;AAAA,IACL;AAAA,IACA,eAAe,eAAe,IAAI;AAAA,EACpC;AACF;AAMA,SAAS,eAAgC;AACvC,SAAO;AAAA,IACL,MAAM;AAAA,IACN,eAAe;AAAA,EACjB;AACF;;;ACjDA,SAAS,oBAAoB;AAC7B,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,WAAW,OAAO,eAAe,IAAI,mBAAmB,QAAQ;AAQxE,UAAM,iBAAiB,iBAAiB,mBAAmB,cAAc,IAAI;AAC7E,UAAM,WAAW,4BAA4B,cAAc,GAAG,OAAO;AAAA,MACnE;AAAA,MACA,gBAAgB,kBAAkB;AAAA,IACpC,CAAC;AACD,QAAI,SAAS,WAAW,QAAQ;AAC9B,cAAQ,OAAO,MAAM,kCAAkC,SAAS,UAAU,MAAM;AAAA,CAAK;AACrF;AAAA,IACF;AAEA,UAAM,SAAS,iBAAiB,SAAS;AACzC,UAAM,SAAS,IAAI,aAAa,SAAS;AACzC,UAAM,UAAU,MAAM,OAAO,cAAc;AAE3C,QAAI;AACJ,QAAI;AACF,eAAS,aAAa,OAAO,CAAC,aAAa,gBAAgB,MAAM,GAAG,EAAE,UAAU,QAAQ,CAAC,EAAE,KAAK;AAAA,IAClG,QAAQ;AAAA,IAAuB;AAE/B,QAAI,SAAS;AACX,YAAM,CAAC,EAAE,aAAa,IAAI,MAAM,QAAQ,IAAI;AAAA,QAC1C,OAAO,KAAK,sBAAsB;AAAA,UAChC,YAAY;AAAA,UACZ;AAAA,UACA;AAAA,UACA,aAAY,oBAAI,KAAK,GAAE,YAAY;AAAA,QACrC,CAAC;AAAA,QACD,OAAO,KAAK,YAAY,EAAE,YAAY,WAAW,OAAO,CAAC;AAAA,MAC3D,CAAC;AAED,UAAI,cAAc,MAAM,cAAc,MAAM,MAAM;AAChD,YAAI,cAAc,KAAK,WAAW,UAAU;AAC1C,kBAAQ,OAAO,MAAM,6CAA6C;AAAA,QACpE;AACA,gBAAQ,OAAO,MAAM,cAAc,KAAK,IAAI;AAC5C;AAAA,MACF;AAAA,IACF;AAGA,UAAM,KAAK,aAAa,YAAY,SAAS,CAAC;AAC9C,iBAAa,EAAE;AACf,UAAM,WAAW,MAAM,qBAAqB,QAAQ,EAAE,OAAO,CAAC;AAC9D,QAAI,SAAS,KAAM,SAAQ,OAAO,MAAM,SAAS,IAAI;AAAA,EACvD,SAAS,OAAO;AACd,YAAQ,OAAO,MAAM,+BAAgC,MAAgB,OAAO;AAAA,CAAI;AAAA,EAClF;AACF;","names":[]}
|
|
@@ -1,23 +1,25 @@
|
|
|
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-IPPMYQ2Y.js";
|
|
5
|
+
import "./chunk-QDLVIW2O.js";
|
|
6
6
|
import {
|
|
7
7
|
parseStringFlag
|
|
8
8
|
} from "./chunk-SAKJMNSR.js";
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
9
|
+
import "./chunk-OTQH5KZW.js";
|
|
10
|
+
import "./chunk-X3IGT5RV.js";
|
|
11
11
|
import {
|
|
12
12
|
loadConfig,
|
|
13
13
|
updateConfig
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-53RPGOEN.js";
|
|
15
|
+
import "./chunk-OUJSQSKE.js";
|
|
16
|
+
import "./chunk-POEPHBQK.js";
|
|
15
17
|
import "./chunk-MYX5NCRH.js";
|
|
16
18
|
import "./chunk-ZXZPJJN3.js";
|
|
17
|
-
import "./chunk-
|
|
18
|
-
import "./chunk-
|
|
19
|
+
import "./chunk-KTTSXYEK.js";
|
|
20
|
+
import "./chunk-ENZR5NG7.js";
|
|
19
21
|
import "./chunk-LPUQPDC2.js";
|
|
20
|
-
import "./chunk-
|
|
22
|
+
import "./chunk-6C6QZ4PM.js";
|
|
21
23
|
import "./chunk-UUHLLQXO.js";
|
|
22
24
|
import "./chunk-6LQIMRTC.js";
|
|
23
25
|
import "./chunk-ODXLRR4U.js";
|
|
@@ -80,4 +82,4 @@ async function run(args, vaultDir) {
|
|
|
80
82
|
export {
|
|
81
83
|
run
|
|
82
84
|
};
|
|
83
|
-
//# sourceMappingURL=setup-llm-
|
|
85
|
+
//# sourceMappingURL=setup-llm-JMWSNQ2C.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":[]}
|
|
@@ -5,8 +5,8 @@ name: myco-agent
|
|
|
5
5
|
displayName: Myco Agent
|
|
6
6
|
description: >
|
|
7
7
|
Default intelligence agent that processes captured session data, extracts
|
|
8
|
-
observations (spores),
|
|
9
|
-
|
|
8
|
+
observations (spores), manages spore lifecycle, and synthesizes digest
|
|
9
|
+
extracts.
|
|
10
10
|
model: claude-sonnet-4-20250514
|
|
11
11
|
maxTurns: 30
|
|
12
12
|
timeoutSeconds: 300
|
|
@@ -15,19 +15,17 @@ systemPromptPath: ../prompts/agent.md
|
|
|
15
15
|
tools:
|
|
16
16
|
# Read tools
|
|
17
17
|
- vault_unprocessed
|
|
18
|
+
- vault_session_summary_material
|
|
18
19
|
- vault_spores
|
|
19
20
|
- vault_sessions
|
|
20
21
|
- vault_search_fts
|
|
21
22
|
- vault_search_semantic
|
|
22
23
|
- vault_state
|
|
23
|
-
- vault_entities
|
|
24
24
|
- vault_edges
|
|
25
25
|
- vault_skill_candidates
|
|
26
26
|
- vault_skill_records
|
|
27
27
|
# Write tools
|
|
28
28
|
- vault_create_spore
|
|
29
|
-
- vault_create_entity
|
|
30
|
-
- vault_create_edge
|
|
31
29
|
- vault_resolve_spore
|
|
32
30
|
- vault_update_session
|
|
33
31
|
- vault_mark_processed
|
|
@@ -35,3 +33,9 @@ tools:
|
|
|
35
33
|
- vault_write_digest
|
|
36
34
|
- vault_set_state
|
|
37
35
|
- vault_report
|
|
36
|
+
# Code exploration tools — used by vault-seed to infer knowledge from
|
|
37
|
+
# source when no session data exists yet.
|
|
38
|
+
- fs_read
|
|
39
|
+
- fs_list
|
|
40
|
+
- fs_tree
|
|
41
|
+
- code_grep
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# Built-in Task: Cortex Instructions
|
|
3
|
+
# =============================================================================
|
|
4
|
+
|
|
5
|
+
name: cortex-instructions
|
|
6
|
+
displayName: Cortex Instructions
|
|
7
|
+
description: >
|
|
8
|
+
Author compact session-start instructions that teach downstream agents how
|
|
9
|
+
to use Myco tool behavior correctly, especially retrieval and plan persistence.
|
|
10
|
+
agent: myco-agent
|
|
11
|
+
isDefault: false
|
|
12
|
+
reasoningLevel: low
|
|
13
|
+
maxTurns: 12
|
|
14
|
+
timeoutSeconds: 180
|
|
15
|
+
schedule:
|
|
16
|
+
enabled: true
|
|
17
|
+
intervalSeconds: 14400
|
|
18
|
+
runIn:
|
|
19
|
+
- idle
|
|
20
|
+
- sleep
|
|
21
|
+
|
|
22
|
+
prompt: |
|
|
23
|
+
You are producing session-start instructions for another coding agent
|
|
24
|
+
working in this project. The final artifact is written in the `author`
|
|
25
|
+
phase via `vault_report` with action "cortex_instructions". The `research`
|
|
26
|
+
phase does NOT draft markdown — it produces a compact situation brief
|
|
27
|
+
that the author phase shapes into prose.
|
|
28
|
+
|
|
29
|
+
You will receive:
|
|
30
|
+
- current context configuration and capability summary
|
|
31
|
+
- tool guidance that must be encoded in the final instructions
|
|
32
|
+
- a digest excerpt plus recent sessions, spores (wisdom, decision, discovery),
|
|
33
|
+
and active plans
|
|
34
|
+
- authoring requirements that constrain the final output
|
|
35
|
+
|
|
36
|
+
Do not restate AGENTS.md, installation details, or generic Myco boilerplate.
|
|
37
|
+
Do not invent unavailable tools. Do not tell the downstream agent to call
|
|
38
|
+
`myco_skills` — project and Myco skills are registered separately.
|
|
39
|
+
|
|
40
|
+
phases:
|
|
41
|
+
- name: research
|
|
42
|
+
reasoningLevel: default
|
|
43
|
+
prompt: |
|
|
44
|
+
Produce a compact situation brief. DO NOT write the final markdown
|
|
45
|
+
— that is the author phase's job.
|
|
46
|
+
|
|
47
|
+
Output exactly this structure as your phase summary:
|
|
48
|
+
|
|
49
|
+
## Hotspots (2-3)
|
|
50
|
+
- <named workstream, plan, or branch> — <one sentence on why a new
|
|
51
|
+
agent working in this repo should know about it>
|
|
52
|
+
|
|
53
|
+
## Recent signal
|
|
54
|
+
- <recent session title or spore worth citing> — <why it matters>
|
|
55
|
+
|
|
56
|
+
## Tool-use hint
|
|
57
|
+
- <one concrete hint a new agent would benefit from, grounded in
|
|
58
|
+
the recent activity above — e.g. "check active plans before
|
|
59
|
+
proposing X because plan Y already covers it">
|
|
60
|
+
|
|
61
|
+
Use the pre-assembled input (digest, recent sessions, spores,
|
|
62
|
+
active plans) as your starting point. Use `vault_search_fts`,
|
|
63
|
+
`vault_spores`, `vault_session_summary_material`, and
|
|
64
|
+
`vault_sessions` only to confirm a hotspot is current or to
|
|
65
|
+
disambiguate. Prefer active plans and the last 3 settled sessions
|
|
66
|
+
as anchors. If the input names a hotspot, verify it's still live
|
|
67
|
+
before keeping it — stale hotspots (work that has shipped and
|
|
68
|
+
moved on) are worse than no hotspot.
|
|
69
|
+
|
|
70
|
+
If you cannot identify 2-3 genuine hotspots, emit fewer — never
|
|
71
|
+
pad with boilerplate.
|
|
72
|
+
tools:
|
|
73
|
+
- vault_read_digest
|
|
74
|
+
- vault_sessions
|
|
75
|
+
- vault_session_summary_material
|
|
76
|
+
- vault_spores
|
|
77
|
+
- vault_search_fts
|
|
78
|
+
- vault_search_semantic
|
|
79
|
+
maxTurns: 10
|
|
80
|
+
required: true
|
|
81
|
+
readOnly: true
|
|
82
|
+
|
|
83
|
+
- name: author
|
|
84
|
+
dependsOn: [research]
|
|
85
|
+
prompt: |
|
|
86
|
+
Write the final session-start markdown from the research brief.
|
|
87
|
+
|
|
88
|
+
Required structure:
|
|
89
|
+
- `## Myco-Enabled Project` heading, then one sentence explaining
|
|
90
|
+
that Myco provides project memory, prior decisions, plans, and
|
|
91
|
+
retrieval tools for this repository.
|
|
92
|
+
- A retrieval paragraph naming the highest-priority tools from the
|
|
93
|
+
tool guidance list (typically `myco_search`, `myco_recall`,
|
|
94
|
+
`myco_context`). Describe when each is useful, not what each
|
|
95
|
+
argument does.
|
|
96
|
+
- A plan-persistence paragraph naming `myco_plans` and
|
|
97
|
+
`myco_save_plan`.
|
|
98
|
+
- A `### Current workstreams` section that MUST cite at least
|
|
99
|
+
one active plan or recent session BY TITLE from the research
|
|
100
|
+
brief. If the research brief contains zero hotspots, write
|
|
101
|
+
"No active workstreams worth flagging right now." verbatim —
|
|
102
|
+
do not invent, recycle, or pad with stale items.
|
|
103
|
+
- A closing paragraph on `myco_remember` for saving discoveries.
|
|
104
|
+
|
|
105
|
+
Keep the output compact and ready for direct injection. Do not
|
|
106
|
+
restate AGENTS.md. Do not mention `myco_skills`.
|
|
107
|
+
|
|
108
|
+
Report the final markdown via `vault_report` with:
|
|
109
|
+
- action: "cortex_instructions"
|
|
110
|
+
- summary: what the instructions emphasize
|
|
111
|
+
- details.content: the final markdown
|
|
112
|
+
tools:
|
|
113
|
+
- vault_report
|
|
114
|
+
maxTurns: 4
|
|
115
|
+
required: true
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# Built-in Task: Cortex Prompt Builder
|
|
3
|
+
# =============================================================================
|
|
4
|
+
|
|
5
|
+
name: cortex-prompt-builder
|
|
6
|
+
displayName: Cortex Prompt Builder
|
|
7
|
+
description: >
|
|
8
|
+
Build a high-quality, Myco-informed prompt for a target symbiont while
|
|
9
|
+
respecting whether session-start instructions will be injected separately.
|
|
10
|
+
agent: myco-agent
|
|
11
|
+
isDefault: false
|
|
12
|
+
reasoningLevel: default
|
|
13
|
+
maxTurns: 24
|
|
14
|
+
timeoutSeconds: 300
|
|
15
|
+
|
|
16
|
+
prompt: |
|
|
17
|
+
Build a strong, pasteable prompt for a target coding agent.
|
|
18
|
+
|
|
19
|
+
The instruction payload gives you:
|
|
20
|
+
- the user's goal
|
|
21
|
+
- the target symbiont and whether session-start instructions will be injected
|
|
22
|
+
- the current Cortex instructions when they must be inlined
|
|
23
|
+
|
|
24
|
+
Use the vault tools to gather the most relevant project context:
|
|
25
|
+
- digest for broad orientation
|
|
26
|
+
- spores for prior decisions, gotchas, and bug fixes
|
|
27
|
+
- sessions and plan-related search results for recent or approved work
|
|
28
|
+
- skill records for repeatable project procedures
|
|
29
|
+
- search tools when you need targeted follow-up
|
|
30
|
+
|
|
31
|
+
Output requirements:
|
|
32
|
+
- Produce one final prompt suitable for direct paste into the target agent.
|
|
33
|
+
- If the instruction payload says to inline Cortex instructions, include them.
|
|
34
|
+
- If the instruction payload says session-start injection is supported, omit the
|
|
35
|
+
Cortex instructions from the final prompt.
|
|
36
|
+
- Prefer concise, high-signal context over long dumps.
|
|
37
|
+
- Include concrete validations when the task implies implementation work.
|
|
38
|
+
|
|
39
|
+
Call `vault_report` with action "cortex_prompt_builder" and:
|
|
40
|
+
- summary: short description of the brief you produced
|
|
41
|
+
- details.prompt: the final prompt text
|
|
42
|
+
|
|
43
|
+
phases:
|
|
44
|
+
- name: build
|
|
45
|
+
prompt: |
|
|
46
|
+
Gather the smallest set of relevant Myco context for this build request,
|
|
47
|
+
then write the final prompt and report it via `vault_report`.
|
|
48
|
+
|
|
49
|
+
Use digest, search, sessions, plans, spores, and skills selectively.
|
|
50
|
+
Avoid exhaustive searching; gather what you need to write the prompt.
|
|
51
|
+
|
|
52
|
+
The final output must be a single prompt suitable for direct paste into
|
|
53
|
+
the target agent. Respect the delivery contract from the instruction
|
|
54
|
+
payload when deciding whether to inline the current Cortex instructions.
|
|
55
|
+
|
|
56
|
+
Before finishing, call `vault_report` with action `cortex_prompt_builder`
|
|
57
|
+
and put the final prompt in `details.prompt`.
|
|
58
|
+
tools:
|
|
59
|
+
- vault_read_digest
|
|
60
|
+
- vault_sessions
|
|
61
|
+
- vault_spores
|
|
62
|
+
- vault_skill_records
|
|
63
|
+
- vault_search_fts
|
|
64
|
+
- vault_search_semantic
|
|
65
|
+
- vault_report
|
|
66
|
+
maxTurns: 18
|
|
67
|
+
required: true
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
# =============================================================================
|
|
2
2
|
# Built-in Task: Review Session
|
|
3
3
|
# =============================================================================
|
|
4
|
-
# Targeted end-to-end pass over a single session: extract spores,
|
|
5
|
-
#
|
|
4
|
+
# Targeted end-to-end pass over a single session: extract spores, run
|
|
5
|
+
# supersession checks, update title/summary.
|
|
6
6
|
# =============================================================================
|
|
7
7
|
|
|
8
8
|
name: review-session
|
|
9
9
|
displayName: Review Session
|
|
10
10
|
description: >
|
|
11
11
|
Process a single session end-to-end. Extracts spores from all prompt
|
|
12
|
-
batches in the session,
|
|
13
|
-
|
|
12
|
+
batches in the session, runs supersession checks, and generates the
|
|
13
|
+
session title and summary.
|
|
14
14
|
agent: myco-agent
|
|
15
15
|
isDefault: false
|
|
16
|
-
|
|
17
|
-
maxTurns:
|
|
16
|
+
reasoningLevel: default
|
|
17
|
+
maxTurns: 30
|
|
18
18
|
timeoutSeconds: 480
|
|
19
19
|
|
|
20
20
|
prompt: |
|
|
21
|
-
Review the specified session end-to-end. Budget: ~
|
|
21
|
+
Review the specified session end-to-end. Budget: ~25 turns.
|
|
22
22
|
|
|
23
23
|
Target session: {{session_id}}
|
|
24
24
|
|
|
@@ -57,31 +57,7 @@ prompt: |
|
|
|
57
57
|
After processing all batches: call `vault_mark_processed` for each batch,
|
|
58
58
|
then call `vault_set_state` to update the cursor.
|
|
59
59
|
|
|
60
|
-
## Phase 3 —
|
|
61
|
-
|
|
62
|
-
Build entities and semantic edges for knowledge discovered in this session.
|
|
63
|
-
|
|
64
|
-
1. Call `vault_spores` to review the spores just created plus existing ones
|
|
65
|
-
2. Call `vault_entities` and `vault_edges` to see what already exists
|
|
66
|
-
3. Check `vault_spores` for cross-session references before creating entities.
|
|
67
|
-
Only create entities referenced in 2+ sessions. For a single-session review,
|
|
68
|
-
this means the entity must also appear in spores from OTHER sessions.
|
|
69
|
-
4. For valid entity candidates:
|
|
70
|
-
- Call `vault_create_entity` with type: component | concept | person
|
|
71
|
-
- Good: "DaemonClient", "cursor-based pagination" — specific named things
|
|
72
|
-
- Bad: "testing phase", "code quality" — abstract categories
|
|
73
|
-
5. For each entity (new and existing relevant ones):
|
|
74
|
-
- Call `vault_search_semantic` with the entity name to find related spores
|
|
75
|
-
- Before creating, call `vault_edges` with source_id and target_id to
|
|
76
|
-
check if the edge already exists
|
|
77
|
-
- Call `vault_create_edge` with type REFERENCES, source_type spore,
|
|
78
|
-
target_type entity for each relevant spore
|
|
79
|
-
6. Create structural edges: DEPENDS_ON (entity→entity), AFFECTS (spore→entity)
|
|
80
|
-
|
|
81
|
-
Always include source_type and target_type on every edge.
|
|
82
|
-
Do NOT create lineage edges (FROM_SESSION, EXTRACTED_FROM, etc.).
|
|
83
|
-
|
|
84
|
-
## Phase 4 — Supersession Check (budget: 3 turns)
|
|
60
|
+
## Phase 3 — Supersession Check (budget: 3 turns)
|
|
85
61
|
|
|
86
62
|
Scan active spores for newly introduced redundancy:
|
|
87
63
|
1. Call `vault_spores` with status "active" to see the current set
|
|
@@ -90,7 +66,7 @@ prompt: |
|
|
|
90
66
|
3. Only supersede when the new information genuinely replaces the old;
|
|
91
67
|
when in doubt, keep both
|
|
92
68
|
|
|
93
|
-
## Phase
|
|
69
|
+
## Phase 4 — Title & Summary (budget: 3 turns)
|
|
94
70
|
|
|
95
71
|
1. Call `vault_sessions` to check the current title and summary
|
|
96
72
|
2. Review the prompt batches you processed in Phase 2 — use user_prompt
|
|
@@ -104,14 +80,13 @@ prompt: |
|
|
|
104
80
|
Bad: "/git-worktree", "Help me fix the bug in..."
|
|
105
81
|
Summary: 2-4 sentences on key work done + outcomes.
|
|
106
82
|
|
|
107
|
-
## Phase
|
|
83
|
+
## Phase 5 — Report (budget: 1 turn)
|
|
108
84
|
|
|
109
85
|
Call `vault_report` with action "complete":
|
|
110
86
|
- Session reviewed: {{session_id}}
|
|
111
87
|
- Batches processed: N
|
|
112
88
|
- Spores created: N (by type)
|
|
113
89
|
- Spores superseded: N
|
|
114
|
-
- Entities created: N, edges created: N
|
|
115
90
|
- Title/summary updated: yes/no
|
|
116
91
|
|
|
117
92
|
toolOverrides:
|
|
@@ -120,12 +95,8 @@ toolOverrides:
|
|
|
120
95
|
- vault_sessions
|
|
121
96
|
- vault_search_fts
|
|
122
97
|
- vault_search_semantic
|
|
123
|
-
- vault_entities
|
|
124
|
-
- vault_edges
|
|
125
98
|
- vault_create_spore
|
|
126
99
|
- vault_resolve_spore
|
|
127
|
-
- vault_create_entity
|
|
128
|
-
- vault_create_edge
|
|
129
100
|
- vault_update_session
|
|
130
101
|
- vault_mark_processed
|
|
131
102
|
- vault_set_state
|