@goondocks/myco 0.12.9 → 0.13.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/README.md +6 -0
- package/dist/{agent-run-E3P3WWPD.js → agent-run-YBASQHC7.js} +8 -7
- package/dist/{agent-run-E3P3WWPD.js.map → agent-run-YBASQHC7.js.map} +1 -1
- package/dist/{agent-tasks-GWII2I4E.js → agent-tasks-WBQFDHWC.js} +8 -7
- package/dist/{agent-tasks-GWII2I4E.js.map → agent-tasks-WBQFDHWC.js.map} +1 -1
- package/dist/{chunk-LGPBVBFY.js → chunk-2PWO3WPS.js} +5 -7
- package/dist/chunk-2PWO3WPS.js.map +1 -0
- package/dist/{chunk-TCGOSLW6.js → chunk-5BK6M6X5.js} +503 -53
- package/dist/chunk-5BK6M6X5.js.map +1 -0
- package/dist/{chunk-QL2RBFIC.js → chunk-5YQ6VOFZ.js} +2 -2
- package/dist/{chunk-D4M2AV65.js → chunk-DTE3SHYK.js} +46 -3
- package/dist/chunk-DTE3SHYK.js.map +1 -0
- package/dist/{chunk-U7JRFBJO.js → chunk-EUQQVKGQ.js} +2 -2
- package/dist/{chunk-YRUJ5KGV.js → chunk-GDCSPMH4.js} +3 -3
- package/dist/{chunk-LUQBT2Y4.js → chunk-HHZ3RTEI.js} +2 -2
- package/dist/{chunk-JROOQQH6.js → chunk-JBFFAGJK.js} +12 -7
- package/dist/chunk-JBFFAGJK.js.map +1 -0
- package/dist/{chunk-D4ESHOOJ.js → chunk-KNTJOMWY.js} +3 -3
- package/dist/{chunk-JHLALJPB.js → chunk-LD6U3L6O.js} +8 -8
- package/dist/{chunk-Q2AYS2QE.js → chunk-LPISXFM4.js} +5 -7
- package/dist/chunk-LPISXFM4.js.map +1 -0
- package/dist/{chunk-PW5QVY44.js → chunk-NCVR636M.js} +318 -4
- package/dist/chunk-NCVR636M.js.map +1 -0
- package/dist/{chunk-4VSNNMEU.js → chunk-NRT2ZRUG.js} +8 -3
- package/dist/{chunk-4VSNNMEU.js.map → chunk-NRT2ZRUG.js.map} +1 -1
- package/dist/{chunk-7NBDELZB.js → chunk-NVCGF2DS.js} +26 -8
- package/dist/{chunk-7NBDELZB.js.map → chunk-NVCGF2DS.js.map} +1 -1
- package/dist/{chunk-SW62AX75.js → chunk-OKCSSDFC.js} +2 -2
- package/dist/{chunk-RR75ZKEV.js → chunk-OQVKLTQY.js} +4 -4
- package/dist/{chunk-J3L2RTYK.js → chunk-RBFECYNA.js} +2 -2
- package/dist/{chunk-M5XWW7UI.js → chunk-SODRR3HE.js} +8 -1
- package/dist/chunk-SODRR3HE.js.map +1 -0
- package/dist/{chunk-WOT2WJ4U.js → chunk-T77674VB.js} +4 -4
- package/dist/chunk-TFGGH6UB.js +112 -0
- package/dist/chunk-TFGGH6UB.js.map +1 -0
- package/dist/{chunk-UGUJJ7QP.js → chunk-TNCBMGWB.js} +39 -104
- package/dist/chunk-TNCBMGWB.js.map +1 -0
- package/dist/{chunk-PIRWYDOH.js → chunk-TRA3R4EC.js} +7 -1
- package/dist/chunk-TRA3R4EC.js.map +1 -0
- package/dist/{chunk-WDLBFMGG.js → chunk-VQEXXS56.js} +22 -5
- package/dist/chunk-VQEXXS56.js.map +1 -0
- package/dist/{chunk-OAGY5APE.js → chunk-W3T3QDBN.js} +68 -7
- package/dist/chunk-W3T3QDBN.js.map +1 -0
- package/dist/{chunk-UULW753C.js → chunk-YYQWCTF6.js} +3 -3
- package/dist/{cli-3IMEH4B3.js → cli-WCBTILMW.js} +41 -40
- package/dist/{cli-3IMEH4B3.js.map → cli-WCBTILMW.js.map} +1 -1
- package/dist/{client-573ALWTB.js → client-MJUZJ5MC.js} +5 -5
- package/dist/{config-6RQ7FAEV.js → config-WBCOTJUE.js} +5 -3
- package/dist/{config-6RQ7FAEV.js.map → config-WBCOTJUE.js.map} +1 -1
- package/dist/{detect-providers-JFE3QLJI.js → detect-providers-PAVE2X6O.js} +4 -4
- package/dist/{doctor-JF4FL5GC.js → doctor-GDCLRJOF.js} +13 -11
- package/dist/{doctor-JF4FL5GC.js.map → doctor-GDCLRJOF.js.map} +1 -1
- package/dist/{executor-AEMKLSPL.js → executor-TCAXFOIS.js} +374 -39
- package/dist/executor-TCAXFOIS.js.map +1 -0
- package/dist/{init-QJECXRAK.js → init-ZSDMXY4T.js} +16 -15
- package/dist/{init-QJECXRAK.js.map → init-ZSDMXY4T.js.map} +1 -1
- package/dist/{init-wizard-XVMYHYKS.js → init-wizard-6LDUVR7C.js} +12 -12
- package/dist/installer-25TSX4SR.js +13 -0
- package/dist/{llm-O46QYWEM.js → llm-T3QVHC3Y.js} +7 -7
- package/dist/{loader-4FMGOVWF.js → loader-L2TCAYCT.js} +4 -2
- package/dist/{loader-BQ4X4K3F.js → loader-WQKVWL5D.js} +4 -4
- package/dist/{main-J572ROIU.js → main-25MKYYKO.js} +452 -103
- package/dist/main-25MKYYKO.js.map +1 -0
- package/dist/{open-QUZWM6K7.js → open-4YTUNIP3.js} +8 -7
- package/dist/{open-QUZWM6K7.js.map → open-4YTUNIP3.js.map} +1 -1
- package/dist/{openai-embeddings-HWAKOGUM.js → openai-embeddings-5T5ZP7LO.js} +4 -4
- package/dist/{openrouter-GXZK7JXR.js → openrouter-RD2COFC7.js} +4 -4
- package/dist/{post-compact-W2ODRZPJ.js → post-compact-E5V4OZJB.js} +7 -7
- package/dist/{post-tool-use-3XH3VOB4.js → post-tool-use-Y6UWKCVD.js} +7 -7
- package/dist/{post-tool-use-failure-Z53CLPHH.js → post-tool-use-failure-AHFXMNHX.js} +7 -7
- package/dist/{pre-compact-G4ISWQVV.js → pre-compact-EI5EV3N7.js} +7 -7
- package/dist/{provider-check-CKZW3GQX.js → provider-check-QN7OGXZA.js} +4 -4
- package/dist/{registry-ZHUVXGPO.js → registry-2XQMCPA6.js} +5 -5
- package/dist/{remove-5AX5LPGC.js → remove-F63WBELE.js} +10 -8
- package/dist/{remove-5AX5LPGC.js.map → remove-F63WBELE.js.map} +1 -1
- package/dist/{resolution-events-WZHPQQMN.js → resolution-events-BZYMUQ53.js} +4 -4
- package/dist/{restart-5IAA7RBM.js → restart-GULUNCMX.js} +9 -8
- package/dist/{restart-5IAA7RBM.js.map → restart-GULUNCMX.js.map} +1 -1
- package/dist/{search-3S4PPUTG.js → search-NLZMCEAG.js} +9 -8
- package/dist/{search-3S4PPUTG.js.map → search-NLZMCEAG.js.map} +1 -1
- package/dist/{server-X6LBFCBV.js → server-CXPWUO6H.js} +115 -14
- package/dist/server-CXPWUO6H.js.map +1 -0
- package/dist/{session-T4Y5AIHM.js → session-XXVEDIQZ.js} +10 -9
- package/dist/{session-T4Y5AIHM.js.map → session-XXVEDIQZ.js.map} +1 -1
- package/dist/{session-end-FMQ4JJU7.js → session-end-6DP6VTZV.js} +6 -6
- package/dist/{session-start-KV2WR6UI.js → session-start-QNAQDF5M.js} +12 -12
- package/dist/{setup-llm-YVI7ZSVN.js → setup-llm-ER3B7AZ2.js} +10 -9
- package/dist/{setup-llm-YVI7ZSVN.js.map → setup-llm-ER3B7AZ2.js.map} +1 -1
- package/dist/src/agent/definitions/agent.yaml +2 -0
- package/dist/src/agent/definitions/tasks/digest-only.yaml +1 -0
- package/dist/src/agent/definitions/tasks/extract-only.yaml +1 -0
- package/dist/src/agent/definitions/tasks/full-intelligence.yaml +8 -0
- package/dist/src/agent/definitions/tasks/graph-maintenance.yaml +1 -0
- package/dist/src/agent/definitions/tasks/review-session.yaml +1 -0
- package/dist/src/agent/definitions/tasks/skill-evolve.yaml +155 -0
- package/dist/src/agent/definitions/tasks/skill-generate.yaml +210 -0
- package/dist/src/agent/definitions/tasks/skill-survey.yaml +149 -0
- package/dist/src/agent/definitions/tasks/supersession-sweep.yaml +1 -0
- package/dist/src/agent/definitions/tasks/title-summary.yaml +1 -0
- package/dist/src/agent/prompts/agent.md +29 -0
- 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/worker/src/index.ts +3 -0
- package/dist/src/worker/src/schema.ts +56 -0
- package/dist/{stats-EFF4XRAO.js → stats-VQ7XMOCU.js} +10 -9
- package/dist/{stats-EFF4XRAO.js.map → stats-VQ7XMOCU.js.map} +1 -1
- package/dist/{stop-SIQJWOPU.js → stop-VTO2KIRG.js} +6 -6
- package/dist/{stop-failure-EHYMRRER.js → stop-failure-C5T6LJQR.js} +7 -7
- package/dist/{subagent-start-AMS3YX5E.js → subagent-start-NZF42NKF.js} +7 -7
- package/dist/{subagent-stop-KVQ52RFD.js → subagent-stop-UV5ECFVU.js} +7 -7
- package/dist/{task-completed-JFQK3X4Z.js → task-completed-3SV6TL3V.js} +7 -7
- package/dist/{team-VU5MGPGG.js → team-XSJXLBZX.js} +51 -25
- package/dist/team-XSJXLBZX.js.map +1 -0
- package/dist/ui/assets/index-BeygBZGu.css +1 -0
- package/dist/ui/assets/index-CbGC0T_o.js +822 -0
- package/dist/ui/index.html +2 -2
- package/dist/{update-BO3DEE7S.js → update-5GXOQIY5.js} +8 -7
- package/dist/{update-BO3DEE7S.js.map → update-5GXOQIY5.js.map} +1 -1
- package/dist/{user-prompt-submit-EZMRI7SR.js → user-prompt-submit-VLQG77A6.js} +6 -6
- package/dist/{verify-MQAANTUR.js → verify-WF7U3NQW.js} +8 -8
- package/dist/{version-IEMGX4RA.js → version-RGX7TZ7V.js} +2 -2
- package/dist/version-RGX7TZ7V.js.map +1 -0
- package/package.json +6 -6
- package/dist/chunk-D4M2AV65.js.map +0 -1
- package/dist/chunk-JROOQQH6.js.map +0 -1
- package/dist/chunk-LGPBVBFY.js.map +0 -1
- package/dist/chunk-M5XWW7UI.js.map +0 -1
- package/dist/chunk-OAGY5APE.js.map +0 -1
- package/dist/chunk-PIRWYDOH.js.map +0 -1
- package/dist/chunk-PW5QVY44.js.map +0 -1
- package/dist/chunk-Q2AYS2QE.js.map +0 -1
- package/dist/chunk-TCGOSLW6.js.map +0 -1
- package/dist/chunk-UGUJJ7QP.js.map +0 -1
- package/dist/chunk-WDLBFMGG.js.map +0 -1
- package/dist/executor-AEMKLSPL.js.map +0 -1
- package/dist/main-J572ROIU.js.map +0 -1
- package/dist/server-X6LBFCBV.js.map +0 -1
- package/dist/team-VU5MGPGG.js.map +0 -1
- package/dist/ui/assets/index-BGbil7f1.css +0 -1
- package/dist/ui/assets/index-ZSGlKT25.js +0 -804
- /package/dist/{chunk-QL2RBFIC.js.map → chunk-5YQ6VOFZ.js.map} +0 -0
- /package/dist/{chunk-U7JRFBJO.js.map → chunk-EUQQVKGQ.js.map} +0 -0
- /package/dist/{chunk-YRUJ5KGV.js.map → chunk-GDCSPMH4.js.map} +0 -0
- /package/dist/{chunk-LUQBT2Y4.js.map → chunk-HHZ3RTEI.js.map} +0 -0
- /package/dist/{chunk-D4ESHOOJ.js.map → chunk-KNTJOMWY.js.map} +0 -0
- /package/dist/{chunk-JHLALJPB.js.map → chunk-LD6U3L6O.js.map} +0 -0
- /package/dist/{chunk-SW62AX75.js.map → chunk-OKCSSDFC.js.map} +0 -0
- /package/dist/{chunk-RR75ZKEV.js.map → chunk-OQVKLTQY.js.map} +0 -0
- /package/dist/{chunk-J3L2RTYK.js.map → chunk-RBFECYNA.js.map} +0 -0
- /package/dist/{chunk-WOT2WJ4U.js.map → chunk-T77674VB.js.map} +0 -0
- /package/dist/{chunk-UULW753C.js.map → chunk-YYQWCTF6.js.map} +0 -0
- /package/dist/{client-573ALWTB.js.map → client-MJUZJ5MC.js.map} +0 -0
- /package/dist/{detect-providers-JFE3QLJI.js.map → detect-providers-PAVE2X6O.js.map} +0 -0
- /package/dist/{init-wizard-XVMYHYKS.js.map → init-wizard-6LDUVR7C.js.map} +0 -0
- /package/dist/{llm-O46QYWEM.js.map → installer-25TSX4SR.js.map} +0 -0
- /package/dist/{loader-4FMGOVWF.js.map → llm-T3QVHC3Y.js.map} +0 -0
- /package/dist/{loader-BQ4X4K3F.js.map → loader-L2TCAYCT.js.map} +0 -0
- /package/dist/{openai-embeddings-HWAKOGUM.js.map → loader-WQKVWL5D.js.map} +0 -0
- /package/dist/{openrouter-GXZK7JXR.js.map → openai-embeddings-5T5ZP7LO.js.map} +0 -0
- /package/dist/{provider-check-CKZW3GQX.js.map → openrouter-RD2COFC7.js.map} +0 -0
- /package/dist/{post-compact-W2ODRZPJ.js.map → post-compact-E5V4OZJB.js.map} +0 -0
- /package/dist/{post-tool-use-3XH3VOB4.js.map → post-tool-use-Y6UWKCVD.js.map} +0 -0
- /package/dist/{post-tool-use-failure-Z53CLPHH.js.map → post-tool-use-failure-AHFXMNHX.js.map} +0 -0
- /package/dist/{pre-compact-G4ISWQVV.js.map → pre-compact-EI5EV3N7.js.map} +0 -0
- /package/dist/{registry-ZHUVXGPO.js.map → provider-check-QN7OGXZA.js.map} +0 -0
- /package/dist/{resolution-events-WZHPQQMN.js.map → registry-2XQMCPA6.js.map} +0 -0
- /package/dist/{version-IEMGX4RA.js.map → resolution-events-BZYMUQ53.js.map} +0 -0
- /package/dist/{session-end-FMQ4JJU7.js.map → session-end-6DP6VTZV.js.map} +0 -0
- /package/dist/{session-start-KV2WR6UI.js.map → session-start-QNAQDF5M.js.map} +0 -0
- /package/dist/{stop-SIQJWOPU.js.map → stop-VTO2KIRG.js.map} +0 -0
- /package/dist/{stop-failure-EHYMRRER.js.map → stop-failure-C5T6LJQR.js.map} +0 -0
- /package/dist/{subagent-start-AMS3YX5E.js.map → subagent-start-NZF42NKF.js.map} +0 -0
- /package/dist/{subagent-stop-KVQ52RFD.js.map → subagent-stop-UV5ECFVU.js.map} +0 -0
- /package/dist/{task-completed-JFQK3X4Z.js.map → task-completed-3SV6TL3V.js.map} +0 -0
- /package/dist/{user-prompt-submit-EZMRI7SR.js.map → user-prompt-submit-VLQG77A6.js.map} +0 -0
- /package/dist/{verify-MQAANTUR.js.map → verify-WF7U3NQW.js.map} +0 -0
|
@@ -1,20 +1,21 @@
|
|
|
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-TFGGH6UB.js";
|
|
5
5
|
import "./chunk-SAKJMNSR.js";
|
|
6
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-TNCBMGWB.js";
|
|
7
|
+
import "./chunk-HHZ3RTEI.js";
|
|
7
8
|
import {
|
|
8
9
|
getSession,
|
|
9
10
|
listSessions
|
|
10
|
-
} from "./chunk-
|
|
11
|
-
import "./chunk-
|
|
11
|
+
} from "./chunk-JBFFAGJK.js";
|
|
12
|
+
import "./chunk-NRT2ZRUG.js";
|
|
12
13
|
import "./chunk-MYX5NCRH.js";
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-S6I62FAH.js";
|
|
16
|
-
import "./chunk-U7JRFBJO.js";
|
|
14
|
+
import "./chunk-VQEXXS56.js";
|
|
15
|
+
import "./chunk-EUQQVKGQ.js";
|
|
17
16
|
import "./chunk-LPUQPDC2.js";
|
|
17
|
+
import "./chunk-TRA3R4EC.js";
|
|
18
|
+
import "./chunk-S6I62FAH.js";
|
|
18
19
|
import "./chunk-PZUWP5VK.js";
|
|
19
20
|
|
|
20
21
|
// src/cli/session.ts
|
|
@@ -66,4 +67,4 @@ ${target.summary}`);
|
|
|
66
67
|
export {
|
|
67
68
|
run
|
|
68
69
|
};
|
|
69
|
-
//# sourceMappingURL=session-
|
|
70
|
+
//# sourceMappingURL=session-XXVEDIQZ.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,15 +2,15 @@ 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-OQVKLTQY.js";
|
|
6
6
|
import {
|
|
7
7
|
DaemonClient
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-S6I62FAH.js";
|
|
11
|
-
import "./chunk-U7JRFBJO.js";
|
|
8
|
+
} from "./chunk-VQEXXS56.js";
|
|
9
|
+
import "./chunk-EUQQVKGQ.js";
|
|
12
10
|
import "./chunk-QFMBZ72S.js";
|
|
13
11
|
import "./chunk-LPUQPDC2.js";
|
|
12
|
+
import "./chunk-TRA3R4EC.js";
|
|
13
|
+
import "./chunk-S6I62FAH.js";
|
|
14
14
|
import "./chunk-D7TYRPRM.js";
|
|
15
15
|
import "./chunk-E4VLWIJC.js";
|
|
16
16
|
import "./chunk-KH64DHOY.js";
|
|
@@ -40,4 +40,4 @@ async function main() {
|
|
|
40
40
|
export {
|
|
41
41
|
main
|
|
42
42
|
};
|
|
43
|
-
//# sourceMappingURL=session-end-
|
|
43
|
+
//# sourceMappingURL=session-end-6DP6VTZV.js.map
|
|
@@ -1,17 +1,17 @@
|
|
|
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-LPISXFM4.js";
|
|
5
5
|
import {
|
|
6
6
|
listSessions
|
|
7
|
-
} from "./chunk-
|
|
8
|
-
import "./chunk-
|
|
7
|
+
} from "./chunk-JBFFAGJK.js";
|
|
8
|
+
import "./chunk-NRT2ZRUG.js";
|
|
9
9
|
import {
|
|
10
10
|
createSchema
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-NCVR636M.js";
|
|
12
12
|
import {
|
|
13
13
|
loadConfig
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-W3T3QDBN.js";
|
|
15
15
|
import {
|
|
16
16
|
getDatabase,
|
|
17
17
|
initDatabase,
|
|
@@ -20,20 +20,20 @@ import {
|
|
|
20
20
|
import {
|
|
21
21
|
normalizeHookInput,
|
|
22
22
|
readStdin
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-OQVKLTQY.js";
|
|
24
24
|
import {
|
|
25
25
|
DaemonClient
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-VQEXXS56.js";
|
|
27
|
+
import "./chunk-EUQQVKGQ.js";
|
|
28
|
+
import "./chunk-QFMBZ72S.js";
|
|
29
|
+
import "./chunk-LPUQPDC2.js";
|
|
27
30
|
import {
|
|
28
31
|
CONTEXT_SESSION_PREVIEW_CHARS,
|
|
29
32
|
CONTEXT_SPORE_PREVIEW_CHARS,
|
|
30
33
|
EXCLUDED_SPORE_STATUSES,
|
|
31
34
|
estimateTokens
|
|
32
|
-
} from "./chunk-
|
|
35
|
+
} from "./chunk-TRA3R4EC.js";
|
|
33
36
|
import "./chunk-S6I62FAH.js";
|
|
34
|
-
import "./chunk-U7JRFBJO.js";
|
|
35
|
-
import "./chunk-QFMBZ72S.js";
|
|
36
|
-
import "./chunk-LPUQPDC2.js";
|
|
37
37
|
import "./chunk-D7TYRPRM.js";
|
|
38
38
|
import "./chunk-E4VLWIJC.js";
|
|
39
39
|
import "./chunk-KH64DHOY.js";
|
|
@@ -170,4 +170,4 @@ async function main() {
|
|
|
170
170
|
export {
|
|
171
171
|
main
|
|
172
172
|
};
|
|
173
|
-
//# sourceMappingURL=session-start-
|
|
173
|
+
//# sourceMappingURL=session-start-QNAQDF5M.js.map
|
|
@@ -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-SODRR3HE.js";
|
|
5
|
+
import "./chunk-TFGGH6UB.js";
|
|
6
6
|
import {
|
|
7
7
|
parseStringFlag
|
|
8
8
|
} from "./chunk-SAKJMNSR.js";
|
|
9
|
-
import "./chunk-
|
|
9
|
+
import "./chunk-TNCBMGWB.js";
|
|
10
|
+
import "./chunk-HHZ3RTEI.js";
|
|
10
11
|
import {
|
|
11
12
|
loadConfig,
|
|
12
13
|
updateConfig
|
|
13
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-W3T3QDBN.js";
|
|
14
15
|
import "./chunk-MYX5NCRH.js";
|
|
15
|
-
import "./chunk-
|
|
16
|
-
import "./chunk-
|
|
17
|
-
import "./chunk-S6I62FAH.js";
|
|
18
|
-
import "./chunk-U7JRFBJO.js";
|
|
16
|
+
import "./chunk-VQEXXS56.js";
|
|
17
|
+
import "./chunk-EUQQVKGQ.js";
|
|
19
18
|
import "./chunk-LPUQPDC2.js";
|
|
19
|
+
import "./chunk-TRA3R4EC.js";
|
|
20
|
+
import "./chunk-S6I62FAH.js";
|
|
20
21
|
import "./chunk-D7TYRPRM.js";
|
|
21
22
|
import "./chunk-E4VLWIJC.js";
|
|
22
23
|
import "./chunk-KH64DHOY.js";
|
|
@@ -78,4 +79,4 @@ async function run(args, vaultDir) {
|
|
|
78
79
|
export {
|
|
79
80
|
run
|
|
80
81
|
};
|
|
81
|
-
//# sourceMappingURL=setup-llm-
|
|
82
|
+
//# sourceMappingURL=setup-llm-ER3B7AZ2.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":[]}
|
|
@@ -21,6 +21,14 @@ maxTurns: 130
|
|
|
21
21
|
timeoutSeconds: 1800
|
|
22
22
|
model: claude-sonnet-4-6
|
|
23
23
|
|
|
24
|
+
schedule:
|
|
25
|
+
enabled: true
|
|
26
|
+
intervalSeconds: 300
|
|
27
|
+
runIn:
|
|
28
|
+
- active
|
|
29
|
+
- idle
|
|
30
|
+
preCondition: has-unprocessed-batches
|
|
31
|
+
|
|
24
32
|
orchestrator:
|
|
25
33
|
enabled: true
|
|
26
34
|
model: claude-sonnet-4-6
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
name: skill-evolve
|
|
2
|
+
displayName: Skill Evolution
|
|
3
|
+
description: >-
|
|
4
|
+
Evaluate and evolve existing Myco-managed skills based on new
|
|
5
|
+
vault knowledge and usage patterns.
|
|
6
|
+
agent: myco-agent
|
|
7
|
+
prompt: >-
|
|
8
|
+
Assess all active Myco-managed skills for staleness, conflicts,
|
|
9
|
+
and oversized scope. Evolve skills that need it.
|
|
10
|
+
isDefault: false
|
|
11
|
+
model: claude-sonnet-4-6
|
|
12
|
+
maxTurns: 60
|
|
13
|
+
timeoutSeconds: 1800
|
|
14
|
+
schedule:
|
|
15
|
+
enabled: false
|
|
16
|
+
intervalSeconds: 900
|
|
17
|
+
runIn:
|
|
18
|
+
- idle
|
|
19
|
+
preCondition: has-active-skills
|
|
20
|
+
phases:
|
|
21
|
+
- name: assess
|
|
22
|
+
prompt: |
|
|
23
|
+
Evaluate every active Myco-managed skill to determine if it
|
|
24
|
+
needs updating.
|
|
25
|
+
|
|
26
|
+
For EACH active skill (vault_skill_records action: list, status: active):
|
|
27
|
+
|
|
28
|
+
1. READ THE CURRENT SKILL CONTENT.
|
|
29
|
+
Get the skill record (vault_skill_records action: get), then
|
|
30
|
+
read the latest lineage entry's content_snapshot to see what
|
|
31
|
+
the skill currently says. You MUST read the actual content
|
|
32
|
+
before you can assess accuracy.
|
|
33
|
+
|
|
34
|
+
2. SEARCH FOR NEW KNOWLEDGE since the skill was last updated.
|
|
35
|
+
Use vault_search_semantic with the skill's topic/keywords.
|
|
36
|
+
Use vault_search_fts with specific file paths, function names,
|
|
37
|
+
and technical terms mentioned in the skill.
|
|
38
|
+
Use vault_spores to check for recent wisdom, decisions, and
|
|
39
|
+
gotchas related to the skill's domain.
|
|
40
|
+
|
|
41
|
+
Compare what you find to what the skill currently says.
|
|
42
|
+
Does the skill miss anything important? Does it say anything
|
|
43
|
+
that's now wrong or outdated?
|
|
44
|
+
|
|
45
|
+
3. CHECK SOURCE SPORE STATUS.
|
|
46
|
+
For each source spore ID in the skill's source_ids, check if
|
|
47
|
+
it's been superseded (vault_spores, status: superseded).
|
|
48
|
+
Superseded sources mean the skill may contain outdated advice.
|
|
49
|
+
|
|
50
|
+
4. ASSESS SKILL SCOPE.
|
|
51
|
+
Is the skill trying to cover too many distinct procedures?
|
|
52
|
+
A skill over 400 lines or covering 3+ independent workflows
|
|
53
|
+
is a candidate for splitting.
|
|
54
|
+
|
|
55
|
+
Classify each skill:
|
|
56
|
+
- **CURRENT**: Content is still accurate, no significant new
|
|
57
|
+
knowledge changes what it should say.
|
|
58
|
+
- **STALE**: New knowledge exists that should be incorporated
|
|
59
|
+
(new gotchas, new steps, changed file paths, new patterns).
|
|
60
|
+
Note specifically WHAT is new/changed.
|
|
61
|
+
- **CONFLICTED**: New knowledge directly contradicts the skill's
|
|
62
|
+
current content (a decision was reversed, a pattern was
|
|
63
|
+
abandoned). Note the contradiction.
|
|
64
|
+
- **OVERSIZED**: Covers too many distinct procedures. Note
|
|
65
|
+
how it should be split.
|
|
66
|
+
|
|
67
|
+
NOTE: Skip usage-based retirement for now — usage tracking is
|
|
68
|
+
not yet active. Do not classify skills as UNUSED.
|
|
69
|
+
|
|
70
|
+
Store classifications using vault_set_state with key
|
|
71
|
+
'skill-evolve-classifications' and value as a JSON object:
|
|
72
|
+
```json
|
|
73
|
+
{
|
|
74
|
+
"skill-name": {
|
|
75
|
+
"classification": "CURRENT|STALE|CONFLICTED|OVERSIZED",
|
|
76
|
+
"rationale": "what changed and why",
|
|
77
|
+
"new_knowledge": ["list of specific new findings"]
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Report classifications via vault_report.
|
|
83
|
+
tools:
|
|
84
|
+
- vault_skill_records
|
|
85
|
+
- vault_spores
|
|
86
|
+
- vault_sessions
|
|
87
|
+
- vault_search_fts
|
|
88
|
+
- vault_search_semantic
|
|
89
|
+
- vault_read_digest
|
|
90
|
+
- vault_state
|
|
91
|
+
- vault_set_state
|
|
92
|
+
- vault_edges
|
|
93
|
+
- vault_report
|
|
94
|
+
maxTurns: 20
|
|
95
|
+
required: true
|
|
96
|
+
|
|
97
|
+
- name: evolve
|
|
98
|
+
prompt: |
|
|
99
|
+
Read classifications from vault_state
|
|
100
|
+
(key: skill-evolve-classifications). Parse the JSON.
|
|
101
|
+
|
|
102
|
+
For each skill classified as STALE, CONFLICTED, or OVERSIZED:
|
|
103
|
+
|
|
104
|
+
## STALE or CONFLICTED — Rewrite the skill
|
|
105
|
+
|
|
106
|
+
1. Read the current skill content from vault_skill_records
|
|
107
|
+
(action: get) to see the current version.
|
|
108
|
+
|
|
109
|
+
2. Gather the new knowledge: read the specific spores, sessions,
|
|
110
|
+
or search results identified in the assessment.
|
|
111
|
+
|
|
112
|
+
3. Rewrite using vault_write_skill. The rewrite MUST:
|
|
113
|
+
- Preserve ALL existing frontmatter fields — read the current
|
|
114
|
+
content first and carry every field forward (name, description,
|
|
115
|
+
managed_by, user-invocable, allowed-tools). The quality gate
|
|
116
|
+
rejects writes missing any required frontmatter field.
|
|
117
|
+
- Preserve all content that is still accurate
|
|
118
|
+
- Incorporate the new knowledge identified in assessment
|
|
119
|
+
- Follow the same SKILL.md format:
|
|
120
|
+
- Prerequisites, Steps, Common Pitfalls structure
|
|
121
|
+
- Stay under 500 lines
|
|
122
|
+
- Include a rationale parameter explaining WHAT changed:
|
|
123
|
+
e.g., "Updated: added hookFields normalization step from
|
|
124
|
+
session dd5bc83a, corrected Windsurf MCP path"
|
|
125
|
+
|
|
126
|
+
vault_write_skill automatically bumps the generation and
|
|
127
|
+
creates a lineage entry with the rationale.
|
|
128
|
+
|
|
129
|
+
## OVERSIZED — Split into focused sub-skills
|
|
130
|
+
|
|
131
|
+
1. Identify distinct procedures within the skill.
|
|
132
|
+
2. Write each as a new skill via vault_write_skill.
|
|
133
|
+
Each sub-skill gets its own name, description, and content.
|
|
134
|
+
3. Retire the parent via vault_skill_records
|
|
135
|
+
(action: update, status: retired).
|
|
136
|
+
|
|
137
|
+
## CURRENT — No action needed. Skip.
|
|
138
|
+
|
|
139
|
+
Report a summary of all actions taken via vault_report:
|
|
140
|
+
- Which skills were updated (with rationale)
|
|
141
|
+
- Which skills were split (into what)
|
|
142
|
+
- Which skills were left as CURRENT
|
|
143
|
+
tools:
|
|
144
|
+
- vault_write_skill
|
|
145
|
+
- vault_skill_records
|
|
146
|
+
- vault_skill_candidates
|
|
147
|
+
- vault_state
|
|
148
|
+
- vault_spores
|
|
149
|
+
- vault_search_fts
|
|
150
|
+
- vault_search_semantic
|
|
151
|
+
- vault_report
|
|
152
|
+
maxTurns: 35
|
|
153
|
+
required: true
|
|
154
|
+
dependsOn:
|
|
155
|
+
- assess
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
name: skill-generate
|
|
2
|
+
displayName: Skill Generation
|
|
3
|
+
description: >-
|
|
4
|
+
Synthesize a project skill from a vault knowledge candidate.
|
|
5
|
+
Writes SKILL.md to .agents/skills/ following Anthropic skill design principles.
|
|
6
|
+
agent: myco-agent
|
|
7
|
+
prompt: >-
|
|
8
|
+
Generate ONE project-specific skill from the next approved candidate.
|
|
9
|
+
Process only the first approved candidate found — do not batch multiple
|
|
10
|
+
skills in a single run. The schedule will pick up the next one.
|
|
11
|
+
isDefault: false
|
|
12
|
+
model: claude-sonnet-4-6
|
|
13
|
+
maxTurns: 35
|
|
14
|
+
timeoutSeconds: 900
|
|
15
|
+
schedule:
|
|
16
|
+
enabled: false
|
|
17
|
+
intervalSeconds: 600
|
|
18
|
+
runIn:
|
|
19
|
+
- idle
|
|
20
|
+
preCondition: has-approved-candidates
|
|
21
|
+
phases:
|
|
22
|
+
- name: gather
|
|
23
|
+
prompt: |
|
|
24
|
+
You are generating ONE skill. Find the first approved candidate
|
|
25
|
+
that doesn't have a skill yet.
|
|
26
|
+
|
|
27
|
+
If an instruction provides a candidate ID, use that specific one.
|
|
28
|
+
Otherwise, use vault_skill_candidates (action: list, status: approved)
|
|
29
|
+
and pick the FIRST result. Process ONLY that one candidate —
|
|
30
|
+
do not attempt to generate multiple skills in this run.
|
|
31
|
+
|
|
32
|
+
Read the candidate. If its skill_id is set or status is 'generated',
|
|
33
|
+
it already has a skill — report "already generated" and STOP.
|
|
34
|
+
Do NOT skip based on similar topics. The user approved it.
|
|
35
|
+
|
|
36
|
+
If no skill exists, gather ALL source material for this candidate:
|
|
37
|
+
|
|
38
|
+
1. Read each source item referenced in the candidate's source_ids.
|
|
39
|
+
Use vault_spores to fetch spore IDs, vault_sessions to fetch
|
|
40
|
+
session IDs. These contain the detailed knowledge.
|
|
41
|
+
|
|
42
|
+
2. Search for additional context using vault_search_semantic with
|
|
43
|
+
the candidate's topic as the query. This may surface plans,
|
|
44
|
+
artifacts, and sessions not in the source_ids.
|
|
45
|
+
|
|
46
|
+
3. Search vault_search_fts for specific file paths, function names,
|
|
47
|
+
or config keys mentioned in the source material.
|
|
48
|
+
|
|
49
|
+
4. Check vault_entities for related entities — these often link
|
|
50
|
+
to additional spores via edges.
|
|
51
|
+
|
|
52
|
+
For each source, extract:
|
|
53
|
+
- Concrete steps (what to do, in what order)
|
|
54
|
+
- File paths and code patterns (specific to this project)
|
|
55
|
+
- Gotchas and pitfalls (things that went wrong)
|
|
56
|
+
- Decisions and rationale (why this approach, not another)
|
|
57
|
+
- Prerequisites (what must be true before starting)
|
|
58
|
+
|
|
59
|
+
Be thorough — the skill quality depends entirely on how much
|
|
60
|
+
concrete detail you gather here.
|
|
61
|
+
tools:
|
|
62
|
+
- vault_skill_candidates
|
|
63
|
+
- vault_spores
|
|
64
|
+
- vault_sessions
|
|
65
|
+
- vault_search_fts
|
|
66
|
+
- vault_search_semantic
|
|
67
|
+
- vault_read_digest
|
|
68
|
+
- vault_entities
|
|
69
|
+
- vault_edges
|
|
70
|
+
maxTurns: 10
|
|
71
|
+
required: true
|
|
72
|
+
|
|
73
|
+
- name: draft
|
|
74
|
+
prompt: |
|
|
75
|
+
Write a SKILL.md from the gathered material. The skill must be a
|
|
76
|
+
procedural how-to guide that teaches an agent how to accomplish
|
|
77
|
+
a specific task in THIS project.
|
|
78
|
+
|
|
79
|
+
## SKILL.md Format
|
|
80
|
+
|
|
81
|
+
```markdown
|
|
82
|
+
---
|
|
83
|
+
name: myco:kebab-case-name
|
|
84
|
+
description: |
|
|
85
|
+
One paragraph that serves as the PRIMARY triggering mechanism.
|
|
86
|
+
Be explicit about when this skill activates. Include concrete
|
|
87
|
+
keywords, file names, and scenarios. Be somewhat pushy to
|
|
88
|
+
counter undertriggering — include "even if the user doesn't
|
|
89
|
+
explicitly ask for [topic]" language when appropriate.
|
|
90
|
+
managed_by: myco
|
|
91
|
+
user-invocable: true
|
|
92
|
+
allowed-tools: Read, Edit, Write, Bash, Grep, Glob
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
# Skill Title
|
|
96
|
+
|
|
97
|
+
Brief context paragraph (2-3 sentences) explaining what this
|
|
98
|
+
procedure accomplishes and when you'd use it.
|
|
99
|
+
|
|
100
|
+
## Prerequisites
|
|
101
|
+
|
|
102
|
+
What must be true before starting.
|
|
103
|
+
|
|
104
|
+
## Steps
|
|
105
|
+
|
|
106
|
+
Numbered, concrete steps with file paths and code examples.
|
|
107
|
+
Each step should reference specific files in this project.
|
|
108
|
+
|
|
109
|
+
## Common Pitfalls
|
|
110
|
+
|
|
111
|
+
Inline with the steps where possible, or as a short section
|
|
112
|
+
at the end for cross-cutting gotchas.
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## Frontmatter Fields
|
|
116
|
+
|
|
117
|
+
- **user-invocable: true** — makes the skill available as a slash
|
|
118
|
+
command (e.g., `/add-symbiont`). Set this for all procedural skills.
|
|
119
|
+
- **allowed-tools** — comma-separated list of tools the skill needs.
|
|
120
|
+
Most procedural skills need: Read, Edit, Write, Bash, Grep, Glob.
|
|
121
|
+
Narrow this if the skill only needs read access (e.g., audit skills).
|
|
122
|
+
Omit the field entirely to allow all tools.
|
|
123
|
+
|
|
124
|
+
## Writing Principles
|
|
125
|
+
|
|
126
|
+
- **Explain reasoning, not rigid rules.** "Because X, do Y"
|
|
127
|
+
is better than "ALWAYS do Y." Use theory of mind — the agent
|
|
128
|
+
using this skill is smart enough to understand WHY.
|
|
129
|
+
- **Stay under 500 lines.** Be concise but complete.
|
|
130
|
+
- **Use concrete file paths** from this project, not generic examples.
|
|
131
|
+
- **Include code patterns** where they help (inline code blocks).
|
|
132
|
+
- **Include examples** — show input/output or before/after where
|
|
133
|
+
it makes the procedure clearer.
|
|
134
|
+
- **Reference gotchas inline** where the developer would encounter
|
|
135
|
+
them, not in a separate section.
|
|
136
|
+
- **The description is the trigger.** An agent reading just the
|
|
137
|
+
description should know whether this skill applies to their task.
|
|
138
|
+
- **Be general enough to survive change.** The skill should teach
|
|
139
|
+
the pattern, not just document the current state. If a file path
|
|
140
|
+
changes, the procedure should still make sense.
|
|
141
|
+
|
|
142
|
+
Use vault_write_skill to write the file. Pass:
|
|
143
|
+
- name: kebab-case directory name (NO colon — directory-safe name)
|
|
144
|
+
The myco: prefix goes ONLY in the SKILL.md frontmatter name field,
|
|
145
|
+
not in the directory name.
|
|
146
|
+
- display_name: human-readable title
|
|
147
|
+
- description: the frontmatter description text
|
|
148
|
+
- content: the full SKILL.md including frontmatter
|
|
149
|
+
- candidate_id: the candidate ID from the gather phase
|
|
150
|
+
- source_ids: JSON array of source item IDs used
|
|
151
|
+
- rationale: "Initial generation from candidate survey"
|
|
152
|
+
tools:
|
|
153
|
+
- vault_write_skill
|
|
154
|
+
- vault_skill_records
|
|
155
|
+
maxTurns: 10
|
|
156
|
+
required: true
|
|
157
|
+
dependsOn:
|
|
158
|
+
- gather
|
|
159
|
+
|
|
160
|
+
- name: validate
|
|
161
|
+
prompt: |
|
|
162
|
+
Review the skill you just generated. Read it back from
|
|
163
|
+
vault_skill_records (action: get) to see the stored record.
|
|
164
|
+
|
|
165
|
+
Check against these criteria:
|
|
166
|
+
|
|
167
|
+
1. **Triggering clarity:** Would an agent reading only the
|
|
168
|
+
description know when to use this skill? Test: describe
|
|
169
|
+
a task that SHOULD trigger it and one that SHOULD NOT.
|
|
170
|
+
|
|
171
|
+
2. **Procedural content:** Does every section describe steps
|
|
172
|
+
to take? Remove any definitional content ("X is...").
|
|
173
|
+
|
|
174
|
+
3. **Concreteness:** Does it reference real file paths,
|
|
175
|
+
function names, and code patterns from this project?
|
|
176
|
+
Generic advice ("add a config file") is not enough.
|
|
177
|
+
|
|
178
|
+
4. **Length:** Under 500 lines?
|
|
179
|
+
|
|
180
|
+
5. **Conflicts:** Does it overlap with existing skills?
|
|
181
|
+
Use vault_skill_records (action: list) to check.
|
|
182
|
+
|
|
183
|
+
6. **Accuracy:** Spot-check 2-3 specific claims against the
|
|
184
|
+
vault. Use vault_search_fts to verify file paths and
|
|
185
|
+
function names mentioned in the skill.
|
|
186
|
+
|
|
187
|
+
If any criterion fails, rewrite using vault_write_skill.
|
|
188
|
+
This automatically bumps the generation.
|
|
189
|
+
|
|
190
|
+
**CRITICAL:** When rewriting, preserve ALL frontmatter fields from
|
|
191
|
+
the original — including user-invocable and allowed-tools. Read the
|
|
192
|
+
existing skill content first and carry every frontmatter field forward.
|
|
193
|
+
The quality gate will reject writes missing required fields.
|
|
194
|
+
|
|
195
|
+
Report results using vault_report with:
|
|
196
|
+
- Skill name and path
|
|
197
|
+
- Generation number
|
|
198
|
+
- Each criterion: pass/fail with brief note
|
|
199
|
+
- Any rewrites performed
|
|
200
|
+
tools:
|
|
201
|
+
- vault_write_skill
|
|
202
|
+
- vault_skill_records
|
|
203
|
+
- vault_skill_candidates
|
|
204
|
+
- vault_spores
|
|
205
|
+
- vault_search_fts
|
|
206
|
+
- vault_report
|
|
207
|
+
maxTurns: 8
|
|
208
|
+
required: true
|
|
209
|
+
dependsOn:
|
|
210
|
+
- draft
|