@goondocks/myco 0.12.10 → 0.14.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-GUHXRNZB.js → agent-run-3WLMSLMJ.js} +8 -7
- package/dist/{agent-run-GUHXRNZB.js.map → agent-run-3WLMSLMJ.js.map} +1 -1
- package/dist/{agent-tasks-GWZI5WSB.js → agent-tasks-BQE2GEVS.js} +8 -7
- package/dist/{agent-tasks-GWZI5WSB.js.map → agent-tasks-BQE2GEVS.js.map} +1 -1
- package/dist/{chunk-PW5QVY44.js → chunk-4VF6KQ2Z.js} +371 -6
- package/dist/chunk-4VF6KQ2Z.js.map +1 -0
- package/dist/{chunk-QL2RBFIC.js → chunk-5YQ6VOFZ.js} +2 -2
- package/dist/{chunk-MCARJFBA.js → chunk-745SWTQX.js} +4 -4
- package/dist/{chunk-D4M2AV65.js → chunk-DTE3SHYK.js} +46 -3
- package/dist/chunk-DTE3SHYK.js.map +1 -0
- package/dist/{chunk-HLGPGHT7.js → chunk-EVPG26CR.js} +3 -3
- package/dist/{chunk-YRUJ5KGV.js → chunk-GDCSPMH4.js} +3 -3
- package/dist/{chunk-LUQBT2Y4.js → chunk-HHZ3RTEI.js} +2 -2
- package/dist/{chunk-TCGOSLW6.js → chunk-JJXVDCEX.js} +613 -98
- package/dist/chunk-JJXVDCEX.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-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-OAGY5APE.js → chunk-PSYLKCWQ.js} +83 -7
- package/dist/chunk-PSYLKCWQ.js.map +1 -0
- package/dist/{chunk-Q2AYS2QE.js → chunk-PX5KIOKY.js} +5 -7
- package/dist/chunk-PX5KIOKY.js.map +1 -0
- package/dist/chunk-QLCD77AN.js +93 -0
- package/dist/chunk-QLCD77AN.js.map +1 -0
- package/dist/{chunk-J3L2RTYK.js → chunk-RBFECYNA.js} +2 -2
- package/dist/{chunk-4VSNNMEU.js → chunk-S66YG6QK.js} +26 -3
- package/dist/{chunk-4VSNNMEU.js.map → chunk-S66YG6QK.js.map} +1 -1
- package/dist/chunk-SBVDG5JP.js +112 -0
- package/dist/chunk-SBVDG5JP.js.map +1 -0
- package/dist/{chunk-M5XWW7UI.js → chunk-SODRR3HE.js} +8 -1
- package/dist/chunk-SODRR3HE.js.map +1 -0
- package/dist/{chunk-SFC4GXEN.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-LGPBVBFY.js → chunk-TVV6PZOC.js} +5 -7
- package/dist/chunk-TVV6PZOC.js.map +1 -0
- package/dist/{chunk-SVQAPEYH.js → chunk-UWXJCLCK.js} +22 -5
- package/dist/chunk-UWXJCLCK.js.map +1 -0
- package/dist/{chunk-JROOQQH6.js → chunk-X34OFKYU.js} +12 -7
- package/dist/chunk-X34OFKYU.js.map +1 -0
- package/dist/{chunk-FYGFMIS6.js → chunk-ZKXW46HZ.js} +2 -2
- package/dist/{cli-CFOIDXOY.js → cli-SKCINMJI.js} +41 -40
- package/dist/{cli-CFOIDXOY.js.map → cli-SKCINMJI.js.map} +1 -1
- package/dist/{client-ZBCGODTS.js → client-KZGZHHXT.js} +5 -5
- package/dist/{config-6RQ7FAEV.js → config-H657SF6B.js} +5 -3
- package/dist/{config-6RQ7FAEV.js.map → config-H657SF6B.js.map} +1 -1
- package/dist/{detect-providers-JFE3QLJI.js → detect-providers-PAVE2X6O.js} +4 -4
- package/dist/{doctor-W3I7RVU4.js → doctor-6FKSHJRU.js} +13 -11
- package/dist/{doctor-W3I7RVU4.js.map → doctor-6FKSHJRU.js.map} +1 -1
- package/dist/{executor-LKDWMGC7.js → executor-W5MKZH7B.js} +407 -46
- package/dist/executor-W5MKZH7B.js.map +1 -0
- package/dist/{init-M3HYJGHE.js → init-5QHCXBLF.js} +16 -15
- package/dist/{init-M3HYJGHE.js.map → init-5QHCXBLF.js.map} +1 -1
- package/dist/{init-wizard-C4WQA47U.js → init-wizard-HEY4HMG3.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-JQLO6K44.js} +4 -2
- package/dist/{loader-BQ4X4K3F.js → loader-WQKVWL5D.js} +4 -4
- package/dist/{main-CMWNMCW2.js → main-IZ277SHB.js} +689 -124
- package/dist/main-IZ277SHB.js.map +1 -0
- package/dist/{open-4N7T37XV.js → open-S7YUWON4.js} +8 -7
- package/dist/{open-4N7T37XV.js.map → open-S7YUWON4.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-BPICHUPV.js → post-compact-EFKFT7TM.js} +7 -7
- package/dist/{post-tool-use-OHJ2EH7I.js → post-tool-use-624YC6ZH.js} +7 -7
- package/dist/{post-tool-use-failure-CBPY2TSN.js → post-tool-use-failure-QCHZAWQH.js} +7 -7
- package/dist/{pre-compact-ULAA4XIB.js → pre-compact-7DWH2EM3.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-52PTVOCJ.js → remove-ESVIET5C.js} +10 -8
- package/dist/{remove-52PTVOCJ.js.map → remove-ESVIET5C.js.map} +1 -1
- package/dist/{resolution-events-WZHPQQMN.js → resolution-events-5EVUEWHS.js} +4 -4
- package/dist/{restart-O37BUPLH.js → restart-AZHV6OKM.js} +9 -8
- package/dist/{restart-O37BUPLH.js.map → restart-AZHV6OKM.js.map} +1 -1
- package/dist/{search-52YK2ZWU.js → search-JS4HXYGS.js} +9 -8
- package/dist/{search-52YK2ZWU.js.map → search-JS4HXYGS.js.map} +1 -1
- package/dist/{server-7OKRAJCM.js → server-KT5GW333.js} +115 -14
- package/dist/server-KT5GW333.js.map +1 -0
- package/dist/{session-57IAZYRK.js → session-JSI67FEM.js} +10 -9
- package/dist/{session-57IAZYRK.js.map → session-JSI67FEM.js.map} +1 -1
- package/dist/{session-end-WRKDJEWM.js → session-end-4CM462MC.js} +6 -6
- package/dist/{session-start-7VWGEVOX.js → session-start-ZGF7F6DE.js} +12 -12
- package/dist/{setup-llm-IDQPX22O.js → setup-llm-S2UYJYIS.js} +10 -9
- package/dist/{setup-llm-IDQPX22O.js.map → setup-llm-S2UYJYIS.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-D7U5HQ3L.js → stats-D2FM6ZXO.js} +10 -9
- package/dist/{stats-D7U5HQ3L.js.map → stats-D2FM6ZXO.js.map} +1 -1
- package/dist/{stop-VJU4AAOQ.js → stop-DQEKVNST.js} +6 -6
- package/dist/{stop-failure-ILPHO26U.js → stop-failure-EHH7AN5E.js} +7 -7
- package/dist/{subagent-start-77MY4UMP.js → subagent-start-6R52PAFA.js} +7 -7
- package/dist/{subagent-stop-DABERMXZ.js → subagent-stop-CLDFJKYQ.js} +7 -7
- package/dist/{task-completed-TBWBOAJ6.js → task-completed-V47JA3OV.js} +7 -7
- package/dist/{team-K6H4B3ZD.js → team-SJPDXELY.js} +45 -19
- package/dist/team-SJPDXELY.js.map +1 -0
- package/dist/turns-3ZQAF6HF.js +16 -0
- package/dist/turns-3ZQAF6HF.js.map +1 -0
- package/dist/ui/assets/index-BmsHIwjl.css +1 -0
- package/dist/ui/assets/index-Cn6cQwJy.js +842 -0
- package/dist/ui/index.html +2 -2
- package/dist/{update-GW774ZMW.js → update-ZNIYDQHJ.js} +8 -7
- package/dist/{update-GW774ZMW.js.map → update-ZNIYDQHJ.js.map} +1 -1
- package/dist/{user-prompt-submit-C47Y5Y5I.js → user-prompt-submit-6TX6VECI.js} +6 -6
- package/dist/{verify-MQAANTUR.js → verify-JHIMXTY5.js} +8 -8
- package/dist/{version-42DQW43N.js → version-UMEN7OJU.js} +2 -2
- package/dist/version-UMEN7OJU.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-SFC4GXEN.js.map +0 -1
- package/dist/chunk-SVQAPEYH.js.map +0 -1
- package/dist/chunk-TCGOSLW6.js.map +0 -1
- package/dist/executor-LKDWMGC7.js.map +0 -1
- package/dist/main-CMWNMCW2.js.map +0 -1
- package/dist/server-7OKRAJCM.js.map +0 -1
- package/dist/team-K6H4B3ZD.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-MCARJFBA.js.map → chunk-745SWTQX.js.map} +0 -0
- /package/dist/{chunk-HLGPGHT7.js.map → chunk-EVPG26CR.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-FYGFMIS6.js.map → chunk-ZKXW46HZ.js.map} +0 -0
- /package/dist/{client-ZBCGODTS.js.map → client-KZGZHHXT.js.map} +0 -0
- /package/dist/{detect-providers-JFE3QLJI.js.map → detect-providers-PAVE2X6O.js.map} +0 -0
- /package/dist/{init-wizard-C4WQA47U.js.map → init-wizard-HEY4HMG3.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-JQLO6K44.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-BPICHUPV.js.map → post-compact-EFKFT7TM.js.map} +0 -0
- /package/dist/{post-tool-use-OHJ2EH7I.js.map → post-tool-use-624YC6ZH.js.map} +0 -0
- /package/dist/{post-tool-use-failure-CBPY2TSN.js.map → post-tool-use-failure-QCHZAWQH.js.map} +0 -0
- /package/dist/{pre-compact-ULAA4XIB.js.map → pre-compact-7DWH2EM3.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-42DQW43N.js.map → resolution-events-5EVUEWHS.js.map} +0 -0
- /package/dist/{session-end-WRKDJEWM.js.map → session-end-4CM462MC.js.map} +0 -0
- /package/dist/{session-start-7VWGEVOX.js.map → session-start-ZGF7F6DE.js.map} +0 -0
- /package/dist/{stop-VJU4AAOQ.js.map → stop-DQEKVNST.js.map} +0 -0
- /package/dist/{stop-failure-ILPHO26U.js.map → stop-failure-EHH7AN5E.js.map} +0 -0
- /package/dist/{subagent-start-77MY4UMP.js.map → subagent-start-6R52PAFA.js.map} +0 -0
- /package/dist/{subagent-stop-DABERMXZ.js.map → subagent-stop-CLDFJKYQ.js.map} +0 -0
- /package/dist/{task-completed-TBWBOAJ6.js.map → task-completed-V47JA3OV.js.map} +0 -0
- /package/dist/{user-prompt-submit-C47Y5Y5I.js.map → user-prompt-submit-6TX6VECI.js.map} +0 -0
- /package/dist/{verify-MQAANTUR.js.map → verify-JHIMXTY5.js.map} +0 -0
package/README.md
CHANGED
|
@@ -129,6 +129,12 @@ Local databases remain the source of truth. The cloud store is a queryable mirro
|
|
|
129
129
|
|
|
130
130
|
Runs on the Cloudflare free tier. See the [Team Sync docs](docs/team-sync.md) for the full guide.
|
|
131
131
|
|
|
132
|
+
### Skills
|
|
133
|
+
|
|
134
|
+
Myco auto-generates project-specific skills from accumulated vault knowledge. As the intelligence pipeline processes sessions, it identifies recurring procedures — debugging the build, adding API routes, configuring providers — and surfaces them as candidates. You approve candidates from the Skills dashboard, and Myco writes SKILL.md files that teach your agents how to work in your codebase. Skills are deployed to `.agents/skills/` and symlinked to each agent's native skills directory, so every agent gets the same procedural knowledge.
|
|
135
|
+
|
|
136
|
+
Skills evolve over time. When the project's understanding changes — a pattern is abandoned, a new gotcha is discovered, a workflow shifts — the evolve task detects the drift and rewrites affected skills, preserving what's still accurate and incorporating new knowledge. Each update is recorded with full lineage: generation number, rationale, and a content snapshot. See the [Skills docs](docs/skills.md) for the full lifecycle.
|
|
137
|
+
|
|
132
138
|
### Backup & restore
|
|
133
139
|
|
|
134
140
|
Local SQL dump backups run automatically during daemon idle periods. Configure a custom backup directory (network share, git repo) from the Operations page. Restore with content-hash deduplication — never overwrites existing records.
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
connectToDaemon
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-SBVDG5JP.js";
|
|
5
5
|
import "./chunk-SAKJMNSR.js";
|
|
6
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-TNCBMGWB.js";
|
|
7
|
+
import "./chunk-HHZ3RTEI.js";
|
|
7
8
|
import "./chunk-MYX5NCRH.js";
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-S6I62FAH.js";
|
|
11
|
-
import "./chunk-FYGFMIS6.js";
|
|
9
|
+
import "./chunk-UWXJCLCK.js";
|
|
10
|
+
import "./chunk-ZKXW46HZ.js";
|
|
12
11
|
import "./chunk-LPUQPDC2.js";
|
|
12
|
+
import "./chunk-TRA3R4EC.js";
|
|
13
|
+
import "./chunk-S6I62FAH.js";
|
|
13
14
|
import "./chunk-PZUWP5VK.js";
|
|
14
15
|
|
|
15
16
|
// src/cli/agent-run.ts
|
|
@@ -31,4 +32,4 @@ async function run(args, vaultDir) {
|
|
|
31
32
|
export {
|
|
32
33
|
run
|
|
33
34
|
};
|
|
34
|
-
//# sourceMappingURL=agent-run-
|
|
35
|
+
//# sourceMappingURL=agent-run-3WLMSLMJ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/agent-run.ts"],"sourcesContent":["/**\n * CLI `agent` command — trigger an intelligence agent run via daemon API.\n *\n * Routes through the daemon HTTP API for centralized processing.\n * The daemon's /api/agent/run endpoint fires-and-forgets the run.\n */\n\nimport { connectToDaemon } from './shared.js';\n\nexport async function run(args: string[], vaultDir: string): Promise<void> {\n const task = args.find((_, i) => args[i - 1] === '--task');\n const instruction = args.find((_, i) => args[i - 1] === '--instruction');\n\n const client = await connectToDaemon(vaultDir);\n\n console.log('Starting agent...');\n const result = await client.post('/api/agent/run', { task, instruction });\n\n if (!result.ok) {\n console.error('Failed to start agent run');\n process.exit(1);\n }\n\n console.log('Agent run dispatched to daemon');\n if (result.data?.message) {\n console.log(` ${result.data.message}`);\n }\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/cli/agent-run.ts"],"sourcesContent":["/**\n * CLI `agent` command — trigger an intelligence agent run via daemon API.\n *\n * Routes through the daemon HTTP API for centralized processing.\n * The daemon's /api/agent/run endpoint fires-and-forgets the run.\n */\n\nimport { connectToDaemon } from './shared.js';\n\nexport async function run(args: string[], vaultDir: string): Promise<void> {\n const task = args.find((_, i) => args[i - 1] === '--task');\n const instruction = args.find((_, i) => args[i - 1] === '--instruction');\n\n const client = await connectToDaemon(vaultDir);\n\n console.log('Starting agent...');\n const result = await client.post('/api/agent/run', { task, instruction });\n\n if (!result.ok) {\n console.error('Failed to start agent run');\n process.exit(1);\n }\n\n console.log('Agent run dispatched to daemon');\n if (result.data?.message) {\n console.log(` ${result.data.message}`);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;AASA,eAAsB,IAAI,MAAgB,UAAiC;AACzE,QAAM,OAAO,KAAK,KAAK,CAAC,GAAG,MAAM,KAAK,IAAI,CAAC,MAAM,QAAQ;AACzD,QAAM,cAAc,KAAK,KAAK,CAAC,GAAG,MAAM,KAAK,IAAI,CAAC,MAAM,eAAe;AAEvE,QAAM,SAAS,MAAM,gBAAgB,QAAQ;AAE7C,UAAQ,IAAI,mBAAmB;AAC/B,QAAM,SAAS,MAAM,OAAO,KAAK,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAExE,MAAI,CAAC,OAAO,IAAI;AACd,YAAQ,MAAM,2BAA2B;AACzC,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,UAAQ,IAAI,gCAAgC;AAC5C,MAAI,OAAO,MAAM,SAAS;AACxB,YAAQ,IAAI,KAAK,OAAO,KAAK,OAAO,EAAE;AAAA,EACxC;AACF;","names":[]}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
connectToDaemon
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-SBVDG5JP.js";
|
|
5
5
|
import "./chunk-SAKJMNSR.js";
|
|
6
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-TNCBMGWB.js";
|
|
7
|
+
import "./chunk-HHZ3RTEI.js";
|
|
7
8
|
import "./chunk-MYX5NCRH.js";
|
|
8
|
-
import "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-S6I62FAH.js";
|
|
11
|
-
import "./chunk-FYGFMIS6.js";
|
|
9
|
+
import "./chunk-UWXJCLCK.js";
|
|
10
|
+
import "./chunk-ZKXW46HZ.js";
|
|
12
11
|
import "./chunk-LPUQPDC2.js";
|
|
12
|
+
import "./chunk-TRA3R4EC.js";
|
|
13
|
+
import "./chunk-S6I62FAH.js";
|
|
13
14
|
import "./chunk-PZUWP5VK.js";
|
|
14
15
|
|
|
15
16
|
// src/cli/agent-tasks.ts
|
|
@@ -177,4 +178,4 @@ async function run(args, vaultDir) {
|
|
|
177
178
|
export {
|
|
178
179
|
run
|
|
179
180
|
};
|
|
180
|
-
//# sourceMappingURL=agent-tasks-
|
|
181
|
+
//# sourceMappingURL=agent-tasks-BQE2GEVS.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli/agent-tasks.ts"],"sourcesContent":["/**\n * CLI `task` subcommands — manage agent task definitions via daemon API.\n *\n * Routes through the daemon HTTP API for centralized processing.\n *\n * Subcommands:\n * task list [--source built-in|user] List all tasks\n * task show <name> Show a single task with phases\n * task create <name> --from <template> Copy a template task to user dir\n * task delete <name> Delete a user task\n * task run <name> [--instruction TEXT] Run a task via the agent\n */\n\nimport { connectToDaemon } from './shared.js';\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\n/** Column widths for the task list table. */\nconst COL_NAME_WIDTH = 22;\nconst COL_SOURCE_WIDTH = 10;\nconst COL_PHASES_WIDTH = 7;\n\n/** Marker displayed in the Default column for the default task. */\nconst DEFAULT_MARKER = '*';\n\n// ---------------------------------------------------------------------------\n// Types (local — mirrors the API response shape)\n// ---------------------------------------------------------------------------\n\ninterface PhaseRow {\n name: string;\n maxTurns: number;\n required: boolean;\n model?: string;\n tools: string[];\n}\n\ninterface TaskRow {\n name: string;\n displayName: string;\n description: string;\n agent: string;\n prompt: string;\n isDefault: boolean;\n source: string;\n isBuiltin: boolean;\n phases?: PhaseRow[];\n model?: string;\n maxTurns?: number;\n}\n\n// ---------------------------------------------------------------------------\n// Formatting helpers\n// ---------------------------------------------------------------------------\n\nfunction padRight(s: string, width: number): string {\n return s.length >= width ? s : s + ' '.repeat(width - s.length);\n}\n\nfunction printTaskTable(tasks: TaskRow[]): void {\n const header =\n padRight('Name', COL_NAME_WIDTH) +\n padRight('Source', COL_SOURCE_WIDTH) +\n padRight('Phases', COL_PHASES_WIDTH) +\n 'Default';\n console.log(header);\n console.log('-'.repeat(header.length));\n\n for (const t of tasks) {\n const phaseCount = t.phases?.length ?? 0;\n const row =\n padRight(t.name, COL_NAME_WIDTH) +\n padRight(t.source, COL_SOURCE_WIDTH) +\n padRight(String(phaseCount), COL_PHASES_WIDTH) +\n (t.isDefault ? DEFAULT_MARKER : '');\n console.log(row);\n }\n}\n\nfunction printTaskDetail(task: TaskRow): void {\n console.log(`Name: ${task.name}`);\n console.log(`Display: ${task.displayName}`);\n console.log(`Description: ${task.description}`);\n console.log(`Agent: ${task.agent}`);\n console.log(`Source: ${task.source}`);\n console.log(`Default: ${task.isDefault ? 'yes' : 'no'}`);\n if (task.model) console.log(`Model: ${task.model}`);\n if (task.maxTurns !== undefined) console.log(`Max turns: ${task.maxTurns}`);\n console.log(`Prompt: ${task.prompt}`);\n\n const phases = task.phases ?? [];\n if (phases.length > 0) {\n console.log(`\\nPhases (${phases.length}):`);\n for (let i = 0; i < phases.length; i++) {\n const p = phases[i];\n const req = p.required ? 'required' : 'optional';\n const model = p.model ? ` [${p.model}]` : '';\n console.log(` ${i + 1}. ${p.name} — ${p.maxTurns} turns, ${req}${model}`);\n if (p.tools.length > 0) {\n console.log(` tools: ${p.tools.join(', ')}`);\n }\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Subcommand handlers\n// ---------------------------------------------------------------------------\n\nasync function listTasks(args: string[], vaultDir: string): Promise<void> {\n const source = args.find((_, i) => args[i - 1] === '--source');\n const endpoint = source\n ? `/api/agent/tasks?source=${encodeURIComponent(source)}`\n : '/api/agent/tasks';\n\n const client = await connectToDaemon(vaultDir);\n const result = await client.get(endpoint);\n\n if (!result.ok || !result.data) {\n console.error('Failed to fetch tasks from daemon');\n process.exit(1);\n }\n\n const tasks = result.data as TaskRow[];\n if (tasks.length === 0) {\n console.log('No tasks found');\n return;\n }\n\n printTaskTable(tasks);\n}\n\nasync function showTask(args: string[], vaultDir: string): Promise<void> {\n const name = args[0];\n if (!name) {\n console.error('Usage: myco task show <name>');\n process.exit(1);\n }\n\n const client = await connectToDaemon(vaultDir);\n const result = await client.get(`/api/agent/tasks/${encodeURIComponent(name)}`);\n\n if (!result.ok || !result.data) {\n console.error(`Task not found: ${name}`);\n process.exit(1);\n }\n\n printTaskDetail(result.data as TaskRow);\n}\n\nasync function createTask(args: string[], vaultDir: string): Promise<void> {\n const name = args[0];\n const from = args.find((_, i) => args[i - 1] === '--from');\n\n if (!name || !from) {\n console.error('Usage: myco task create <name> --from <template>');\n process.exit(1);\n }\n\n const client = await connectToDaemon(vaultDir);\n const result = await client.post(`/api/agent/tasks/${encodeURIComponent(from)}/copy`, { name });\n\n if (!result.ok) {\n console.error(`Failed to create task '${name}' from template '${from}'`);\n if (result.data?.error) {\n console.error(` ${result.data.error}`);\n }\n process.exit(1);\n }\n\n console.log(`Task '${name}' created from '${from}'`);\n}\n\nasync function deleteTask(args: string[], vaultDir: string): Promise<void> {\n const name = args[0];\n if (!name) {\n console.error('Usage: myco task delete <name>');\n process.exit(1);\n }\n\n const client = await connectToDaemon(vaultDir);\n const result = await client.delete(`/api/agent/tasks/${encodeURIComponent(name)}`);\n\n if (!result.ok) {\n const errCode = result.data?.error as string | undefined;\n if (errCode === 'cannot_delete_builtin') {\n console.error(`Cannot delete built-in task: ${name}`);\n } else if (errCode === 'task_not_found') {\n console.error(`Task not found: ${name}`);\n } else {\n console.error(`Failed to delete task: ${name}`);\n }\n process.exit(1);\n }\n\n console.log(`Task '${name}' deleted`);\n}\n\nasync function runTask(args: string[], vaultDir: string): Promise<void> {\n const name = args[0];\n const instruction = args.find((_, i) => args[i - 1] === '--instruction');\n\n if (!name) {\n console.error('Usage: myco task run <name> [--instruction TEXT]');\n process.exit(1);\n }\n\n const client = await connectToDaemon(vaultDir);\n console.log('Starting agent...');\n const result = await client.post('/api/agent/run', { task: name, instruction });\n\n if (!result.ok) {\n console.error('Failed to start agent run');\n process.exit(1);\n }\n\n console.log('Agent run dispatched to daemon');\n if (result.data?.message) {\n console.log(` ${result.data.message}`);\n }\n}\n\n// ---------------------------------------------------------------------------\n// Dispatch\n// ---------------------------------------------------------------------------\n\nconst TASK_USAGE = `Usage: myco task <subcommand> [args]\n\nSubcommands:\n list [--source built-in|user] List all tasks\n show <name> Show task details and phases\n create <name> --from <template> Copy a task template to your user dir\n delete <name> Delete a user task\n run <name> [--instruction TEXT] Run a task via the agent\n`;\n\nexport async function run(args: string[], vaultDir: string): Promise<void> {\n const subcommand = args[0];\n const subArgs = args.slice(1);\n\n switch (subcommand) {\n case 'list': return listTasks(subArgs, vaultDir);\n case 'show': return showTask(subArgs, vaultDir);\n case 'create': return createTask(subArgs, vaultDir);\n case 'delete': return deleteTask(subArgs, vaultDir);\n case 'run': return runTask(subArgs, vaultDir);\n default:\n if (subcommand) {\n console.error(`Unknown task subcommand: ${subcommand}`);\n }\n process.stdout.write(TASK_USAGE);\n if (subcommand) process.exit(1);\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/cli/agent-tasks.ts"],"sourcesContent":["/**\n * CLI `task` subcommands — manage agent task definitions via daemon API.\n *\n * Routes through the daemon HTTP API for centralized processing.\n *\n * Subcommands:\n * task list [--source built-in|user] List all tasks\n * task show <name> Show a single task with phases\n * task create <name> --from <template> Copy a template task to user dir\n * task delete <name> Delete a user task\n * task run <name> [--instruction TEXT] Run a task via the agent\n */\n\nimport { connectToDaemon } from './shared.js';\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\n/** Column widths for the task list table. */\nconst COL_NAME_WIDTH = 22;\nconst COL_SOURCE_WIDTH = 10;\nconst COL_PHASES_WIDTH = 7;\n\n/** Marker displayed in the Default column for the default task. */\nconst DEFAULT_MARKER = '*';\n\n// ---------------------------------------------------------------------------\n// Types (local — mirrors the API response shape)\n// ---------------------------------------------------------------------------\n\ninterface PhaseRow {\n name: string;\n maxTurns: number;\n required: boolean;\n model?: string;\n tools: string[];\n}\n\ninterface TaskRow {\n name: string;\n displayName: string;\n description: string;\n agent: string;\n prompt: string;\n isDefault: boolean;\n source: string;\n isBuiltin: boolean;\n phases?: PhaseRow[];\n model?: string;\n maxTurns?: number;\n}\n\n// ---------------------------------------------------------------------------\n// Formatting helpers\n// ---------------------------------------------------------------------------\n\nfunction padRight(s: string, width: number): string {\n return s.length >= width ? s : s + ' '.repeat(width - s.length);\n}\n\nfunction printTaskTable(tasks: TaskRow[]): void {\n const header =\n padRight('Name', COL_NAME_WIDTH) +\n padRight('Source', COL_SOURCE_WIDTH) +\n padRight('Phases', COL_PHASES_WIDTH) +\n 'Default';\n console.log(header);\n console.log('-'.repeat(header.length));\n\n for (const t of tasks) {\n const phaseCount = t.phases?.length ?? 0;\n const row =\n padRight(t.name, COL_NAME_WIDTH) +\n padRight(t.source, COL_SOURCE_WIDTH) +\n padRight(String(phaseCount), COL_PHASES_WIDTH) +\n (t.isDefault ? DEFAULT_MARKER : '');\n console.log(row);\n }\n}\n\nfunction printTaskDetail(task: TaskRow): void {\n console.log(`Name: ${task.name}`);\n console.log(`Display: ${task.displayName}`);\n console.log(`Description: ${task.description}`);\n console.log(`Agent: ${task.agent}`);\n console.log(`Source: ${task.source}`);\n console.log(`Default: ${task.isDefault ? 'yes' : 'no'}`);\n if (task.model) console.log(`Model: ${task.model}`);\n if (task.maxTurns !== undefined) console.log(`Max turns: ${task.maxTurns}`);\n console.log(`Prompt: ${task.prompt}`);\n\n const phases = task.phases ?? [];\n if (phases.length > 0) {\n console.log(`\\nPhases (${phases.length}):`);\n for (let i = 0; i < phases.length; i++) {\n const p = phases[i];\n const req = p.required ? 'required' : 'optional';\n const model = p.model ? ` [${p.model}]` : '';\n console.log(` ${i + 1}. ${p.name} — ${p.maxTurns} turns, ${req}${model}`);\n if (p.tools.length > 0) {\n console.log(` tools: ${p.tools.join(', ')}`);\n }\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Subcommand handlers\n// ---------------------------------------------------------------------------\n\nasync function listTasks(args: string[], vaultDir: string): Promise<void> {\n const source = args.find((_, i) => args[i - 1] === '--source');\n const endpoint = source\n ? `/api/agent/tasks?source=${encodeURIComponent(source)}`\n : '/api/agent/tasks';\n\n const client = await connectToDaemon(vaultDir);\n const result = await client.get(endpoint);\n\n if (!result.ok || !result.data) {\n console.error('Failed to fetch tasks from daemon');\n process.exit(1);\n }\n\n const tasks = result.data as TaskRow[];\n if (tasks.length === 0) {\n console.log('No tasks found');\n return;\n }\n\n printTaskTable(tasks);\n}\n\nasync function showTask(args: string[], vaultDir: string): Promise<void> {\n const name = args[0];\n if (!name) {\n console.error('Usage: myco task show <name>');\n process.exit(1);\n }\n\n const client = await connectToDaemon(vaultDir);\n const result = await client.get(`/api/agent/tasks/${encodeURIComponent(name)}`);\n\n if (!result.ok || !result.data) {\n console.error(`Task not found: ${name}`);\n process.exit(1);\n }\n\n printTaskDetail(result.data as TaskRow);\n}\n\nasync function createTask(args: string[], vaultDir: string): Promise<void> {\n const name = args[0];\n const from = args.find((_, i) => args[i - 1] === '--from');\n\n if (!name || !from) {\n console.error('Usage: myco task create <name> --from <template>');\n process.exit(1);\n }\n\n const client = await connectToDaemon(vaultDir);\n const result = await client.post(`/api/agent/tasks/${encodeURIComponent(from)}/copy`, { name });\n\n if (!result.ok) {\n console.error(`Failed to create task '${name}' from template '${from}'`);\n if (result.data?.error) {\n console.error(` ${result.data.error}`);\n }\n process.exit(1);\n }\n\n console.log(`Task '${name}' created from '${from}'`);\n}\n\nasync function deleteTask(args: string[], vaultDir: string): Promise<void> {\n const name = args[0];\n if (!name) {\n console.error('Usage: myco task delete <name>');\n process.exit(1);\n }\n\n const client = await connectToDaemon(vaultDir);\n const result = await client.delete(`/api/agent/tasks/${encodeURIComponent(name)}`);\n\n if (!result.ok) {\n const errCode = result.data?.error as string | undefined;\n if (errCode === 'cannot_delete_builtin') {\n console.error(`Cannot delete built-in task: ${name}`);\n } else if (errCode === 'task_not_found') {\n console.error(`Task not found: ${name}`);\n } else {\n console.error(`Failed to delete task: ${name}`);\n }\n process.exit(1);\n }\n\n console.log(`Task '${name}' deleted`);\n}\n\nasync function runTask(args: string[], vaultDir: string): Promise<void> {\n const name = args[0];\n const instruction = args.find((_, i) => args[i - 1] === '--instruction');\n\n if (!name) {\n console.error('Usage: myco task run <name> [--instruction TEXT]');\n process.exit(1);\n }\n\n const client = await connectToDaemon(vaultDir);\n console.log('Starting agent...');\n const result = await client.post('/api/agent/run', { task: name, instruction });\n\n if (!result.ok) {\n console.error('Failed to start agent run');\n process.exit(1);\n }\n\n console.log('Agent run dispatched to daemon');\n if (result.data?.message) {\n console.log(` ${result.data.message}`);\n }\n}\n\n// ---------------------------------------------------------------------------\n// Dispatch\n// ---------------------------------------------------------------------------\n\nconst TASK_USAGE = `Usage: myco task <subcommand> [args]\n\nSubcommands:\n list [--source built-in|user] List all tasks\n show <name> Show task details and phases\n create <name> --from <template> Copy a task template to your user dir\n delete <name> Delete a user task\n run <name> [--instruction TEXT] Run a task via the agent\n`;\n\nexport async function run(args: string[], vaultDir: string): Promise<void> {\n const subcommand = args[0];\n const subArgs = args.slice(1);\n\n switch (subcommand) {\n case 'list': return listTasks(subArgs, vaultDir);\n case 'show': return showTask(subArgs, vaultDir);\n case 'create': return createTask(subArgs, vaultDir);\n case 'delete': return deleteTask(subArgs, vaultDir);\n case 'run': return runTask(subArgs, vaultDir);\n default:\n if (subcommand) {\n console.error(`Unknown task subcommand: ${subcommand}`);\n }\n process.stdout.write(TASK_USAGE);\n if (subcommand) process.exit(1);\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -2,10 +2,10 @@ import { createRequire as __cr } from 'node:module'; const require = __cr(import
|
|
|
2
2
|
import {
|
|
3
3
|
DEFAULT_MACHINE_ID,
|
|
4
4
|
epochSeconds
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-TRA3R4EC.js";
|
|
6
6
|
|
|
7
7
|
// src/db/schema.ts
|
|
8
|
-
var SCHEMA_VERSION =
|
|
8
|
+
var SCHEMA_VERSION = 8;
|
|
9
9
|
var EMBEDDING_DIMENSIONS = 1024;
|
|
10
10
|
var SCHEMA_VERSION_TABLE = `
|
|
11
11
|
CREATE TABLE IF NOT EXISTS schema_version (
|
|
@@ -312,19 +312,124 @@ var LOG_ENTRIES_TABLE = `
|
|
|
312
312
|
data TEXT,
|
|
313
313
|
session_id TEXT
|
|
314
314
|
)`;
|
|
315
|
+
var SKILL_CANDIDATES_TABLE = `
|
|
316
|
+
CREATE TABLE IF NOT EXISTS skill_candidates (
|
|
317
|
+
id TEXT PRIMARY KEY,
|
|
318
|
+
agent_id TEXT NOT NULL REFERENCES agents(id),
|
|
319
|
+
machine_id TEXT NOT NULL DEFAULT 'local',
|
|
320
|
+
topic TEXT NOT NULL,
|
|
321
|
+
rationale TEXT NOT NULL,
|
|
322
|
+
confidence REAL NOT NULL DEFAULT 0.0,
|
|
323
|
+
status TEXT NOT NULL DEFAULT 'identified',
|
|
324
|
+
source_ids TEXT NOT NULL DEFAULT '[]',
|
|
325
|
+
skill_id TEXT,
|
|
326
|
+
created_at INTEGER NOT NULL,
|
|
327
|
+
updated_at INTEGER NOT NULL,
|
|
328
|
+
synced_at INTEGER
|
|
329
|
+
)`;
|
|
330
|
+
var SKILL_RECORDS_TABLE = `
|
|
331
|
+
CREATE TABLE IF NOT EXISTS skill_records (
|
|
332
|
+
id TEXT PRIMARY KEY,
|
|
333
|
+
agent_id TEXT NOT NULL REFERENCES agents(id),
|
|
334
|
+
machine_id TEXT NOT NULL DEFAULT 'local',
|
|
335
|
+
name TEXT NOT NULL UNIQUE,
|
|
336
|
+
display_name TEXT NOT NULL,
|
|
337
|
+
description TEXT NOT NULL,
|
|
338
|
+
status TEXT NOT NULL DEFAULT 'active',
|
|
339
|
+
generation INTEGER NOT NULL DEFAULT 1,
|
|
340
|
+
candidate_id TEXT REFERENCES skill_candidates(id),
|
|
341
|
+
source_ids TEXT NOT NULL DEFAULT '[]',
|
|
342
|
+
path TEXT NOT NULL,
|
|
343
|
+
usage_count INTEGER NOT NULL DEFAULT 0,
|
|
344
|
+
last_used_at INTEGER,
|
|
345
|
+
created_at INTEGER NOT NULL,
|
|
346
|
+
updated_at INTEGER NOT NULL,
|
|
347
|
+
properties TEXT NOT NULL DEFAULT '{}',
|
|
348
|
+
synced_at INTEGER
|
|
349
|
+
)`;
|
|
350
|
+
var SKILL_LINEAGE_TABLE = `
|
|
351
|
+
CREATE TABLE IF NOT EXISTS skill_lineage (
|
|
352
|
+
id TEXT PRIMARY KEY,
|
|
353
|
+
skill_id TEXT NOT NULL REFERENCES skill_records(id),
|
|
354
|
+
generation INTEGER NOT NULL,
|
|
355
|
+
action TEXT NOT NULL,
|
|
356
|
+
rationale TEXT NOT NULL,
|
|
357
|
+
source_ids_added TEXT NOT NULL DEFAULT '[]',
|
|
358
|
+
content_snapshot TEXT NOT NULL,
|
|
359
|
+
created_at INTEGER NOT NULL
|
|
360
|
+
)`;
|
|
361
|
+
var SKILL_USAGE_TABLE = `
|
|
362
|
+
CREATE TABLE IF NOT EXISTS skill_usage (
|
|
363
|
+
id TEXT PRIMARY KEY,
|
|
364
|
+
skill_id TEXT NOT NULL REFERENCES skill_records(id),
|
|
365
|
+
session_id TEXT NOT NULL REFERENCES sessions(id),
|
|
366
|
+
machine_id TEXT NOT NULL DEFAULT 'local',
|
|
367
|
+
detected_at INTEGER NOT NULL
|
|
368
|
+
)`;
|
|
369
|
+
var NOTIFICATIONS_TABLE = `
|
|
370
|
+
CREATE TABLE IF NOT EXISTS notifications (
|
|
371
|
+
id TEXT PRIMARY KEY,
|
|
372
|
+
domain TEXT NOT NULL,
|
|
373
|
+
type TEXT NOT NULL,
|
|
374
|
+
level TEXT NOT NULL DEFAULT 'info',
|
|
375
|
+
title TEXT NOT NULL,
|
|
376
|
+
message TEXT,
|
|
377
|
+
mode TEXT NOT NULL DEFAULT 'banner',
|
|
378
|
+
status TEXT NOT NULL DEFAULT 'unread',
|
|
379
|
+
link TEXT,
|
|
380
|
+
metadata TEXT,
|
|
381
|
+
created_at INTEGER NOT NULL
|
|
382
|
+
)`;
|
|
315
383
|
var FTS_TABLES = [
|
|
316
384
|
`CREATE VIRTUAL TABLE IF NOT EXISTS prompt_batches_fts
|
|
317
|
-
USING fts5(user_prompt, content='prompt_batches', content_rowid='id')`,
|
|
385
|
+
USING fts5(user_prompt, response_summary, content='prompt_batches', content_rowid='id')`,
|
|
318
386
|
`CREATE VIRTUAL TABLE IF NOT EXISTS activities_fts
|
|
319
387
|
USING fts5(tool_name, tool_input, file_path, content='activities', content_rowid='id')`,
|
|
320
388
|
`CREATE VIRTUAL TABLE IF NOT EXISTS log_entries_fts
|
|
321
389
|
USING fts5(message, content='log_entries', content_rowid='id')`,
|
|
390
|
+
`CREATE VIRTUAL TABLE IF NOT EXISTS spores_fts
|
|
391
|
+
USING fts5(content, content='spores', content_rowid='rowid')`,
|
|
392
|
+
`CREATE VIRTUAL TABLE IF NOT EXISTS sessions_fts
|
|
393
|
+
USING fts5(title, summary, content='sessions', content_rowid='rowid')`,
|
|
322
394
|
// FTS5 sync triggers for log_entries (external-content table)
|
|
323
395
|
`CREATE TRIGGER IF NOT EXISTS log_entries_ai AFTER INSERT ON log_entries BEGIN
|
|
324
396
|
INSERT INTO log_entries_fts(rowid, message) VALUES (new.id, new.message);
|
|
325
397
|
END`,
|
|
326
398
|
`CREATE TRIGGER IF NOT EXISTS log_entries_ad AFTER DELETE ON log_entries BEGIN
|
|
327
399
|
INSERT INTO log_entries_fts(log_entries_fts, rowid, message) VALUES('delete', old.id, old.message);
|
|
400
|
+
END`,
|
|
401
|
+
// FTS5 sync triggers for prompt_batches
|
|
402
|
+
`CREATE TRIGGER IF NOT EXISTS prompt_batches_fts_ai AFTER INSERT ON prompt_batches BEGIN
|
|
403
|
+
INSERT INTO prompt_batches_fts(rowid, user_prompt, response_summary) VALUES (new.id, new.user_prompt, new.response_summary);
|
|
404
|
+
END`,
|
|
405
|
+
`CREATE TRIGGER IF NOT EXISTS prompt_batches_fts_au AFTER UPDATE OF user_prompt, response_summary ON prompt_batches BEGIN
|
|
406
|
+
INSERT INTO prompt_batches_fts(prompt_batches_fts, rowid, user_prompt, response_summary) VALUES('delete', old.id, old.user_prompt, old.response_summary);
|
|
407
|
+
INSERT INTO prompt_batches_fts(rowid, user_prompt, response_summary) VALUES (new.id, new.user_prompt, new.response_summary);
|
|
408
|
+
END`,
|
|
409
|
+
`CREATE TRIGGER IF NOT EXISTS prompt_batches_fts_ad AFTER DELETE ON prompt_batches BEGIN
|
|
410
|
+
INSERT INTO prompt_batches_fts(prompt_batches_fts, rowid, user_prompt, response_summary) VALUES('delete', old.id, old.user_prompt, old.response_summary);
|
|
411
|
+
END`,
|
|
412
|
+
// FTS5 sync triggers for spores
|
|
413
|
+
`CREATE TRIGGER IF NOT EXISTS spores_fts_ai AFTER INSERT ON spores BEGIN
|
|
414
|
+
INSERT INTO spores_fts(rowid, content) VALUES (new.rowid, new.content);
|
|
415
|
+
END`,
|
|
416
|
+
`CREATE TRIGGER IF NOT EXISTS spores_fts_au AFTER UPDATE OF content ON spores BEGIN
|
|
417
|
+
INSERT INTO spores_fts(spores_fts, rowid, content) VALUES('delete', old.rowid, old.content);
|
|
418
|
+
INSERT INTO spores_fts(rowid, content) VALUES (new.rowid, new.content);
|
|
419
|
+
END`,
|
|
420
|
+
`CREATE TRIGGER IF NOT EXISTS spores_fts_ad AFTER DELETE ON spores BEGIN
|
|
421
|
+
INSERT INTO spores_fts(spores_fts, rowid, content) VALUES('delete', old.rowid, old.content);
|
|
422
|
+
END`,
|
|
423
|
+
// FTS5 sync triggers for sessions
|
|
424
|
+
`CREATE TRIGGER IF NOT EXISTS sessions_fts_ai AFTER INSERT ON sessions BEGIN
|
|
425
|
+
INSERT INTO sessions_fts(rowid, title, summary) VALUES (new.rowid, new.title, new.summary);
|
|
426
|
+
END`,
|
|
427
|
+
`CREATE TRIGGER IF NOT EXISTS sessions_fts_au AFTER UPDATE OF title, summary ON sessions BEGIN
|
|
428
|
+
INSERT INTO sessions_fts(sessions_fts, rowid, title, summary) VALUES('delete', old.rowid, old.title, old.summary);
|
|
429
|
+
INSERT INTO sessions_fts(rowid, title, summary) VALUES (new.rowid, new.title, new.summary);
|
|
430
|
+
END`,
|
|
431
|
+
`CREATE TRIGGER IF NOT EXISTS sessions_fts_ad AFTER DELETE ON sessions BEGIN
|
|
432
|
+
INSERT INTO sessions_fts(sessions_fts, rowid, title, summary) VALUES('delete', old.rowid, old.title, old.summary);
|
|
328
433
|
END`
|
|
329
434
|
];
|
|
330
435
|
var SECONDARY_INDEXES = [
|
|
@@ -370,6 +475,7 @@ var SECONDARY_INDEXES = [
|
|
|
370
475
|
"CREATE INDEX IF NOT EXISTS idx_agent_runs_agent_id ON agent_runs (agent_id)",
|
|
371
476
|
"CREATE INDEX IF NOT EXISTS idx_agent_runs_status ON agent_runs (status)",
|
|
372
477
|
"CREATE INDEX IF NOT EXISTS idx_agent_runs_agent_status ON agent_runs (agent_id, status)",
|
|
478
|
+
"CREATE INDEX IF NOT EXISTS idx_agent_runs_task_completed ON agent_runs (task, status, completed_at)",
|
|
373
479
|
// Agent reports
|
|
374
480
|
"CREATE INDEX IF NOT EXISTS idx_agent_reports_run_id ON agent_reports (run_id)",
|
|
375
481
|
// Agent turns
|
|
@@ -390,12 +496,34 @@ var SECONDARY_INDEXES = [
|
|
|
390
496
|
"CREATE INDEX IF NOT EXISTS idx_sessions_machine_id ON sessions (machine_id)",
|
|
391
497
|
"CREATE INDEX IF NOT EXISTS idx_spores_machine_id ON spores (machine_id)",
|
|
392
498
|
"CREATE INDEX IF NOT EXISTS idx_graph_edges_machine_id ON graph_edges (machine_id)",
|
|
499
|
+
// Skill candidates
|
|
500
|
+
"CREATE INDEX IF NOT EXISTS idx_skill_candidates_agent_id ON skill_candidates (agent_id)",
|
|
501
|
+
"CREATE INDEX IF NOT EXISTS idx_skill_candidates_status ON skill_candidates (status)",
|
|
502
|
+
"CREATE INDEX IF NOT EXISTS idx_skill_candidates_machine_id ON skill_candidates (machine_id)",
|
|
503
|
+
"CREATE INDEX IF NOT EXISTS idx_skill_candidates_agent_status ON skill_candidates (agent_id, status)",
|
|
504
|
+
// Skill records
|
|
505
|
+
"CREATE INDEX IF NOT EXISTS idx_skill_records_agent_id ON skill_records (agent_id)",
|
|
506
|
+
"CREATE INDEX IF NOT EXISTS idx_skill_records_status ON skill_records (status)",
|
|
507
|
+
"CREATE INDEX IF NOT EXISTS idx_skill_records_name ON skill_records (name)",
|
|
508
|
+
"CREATE INDEX IF NOT EXISTS idx_skill_records_machine_id ON skill_records (machine_id)",
|
|
509
|
+
"CREATE INDEX IF NOT EXISTS idx_skill_records_agent_status ON skill_records (agent_id, status)",
|
|
510
|
+
// Skill lineage
|
|
511
|
+
"CREATE INDEX IF NOT EXISTS idx_skill_lineage_skill_id ON skill_lineage (skill_id)",
|
|
512
|
+
// Skill usage
|
|
513
|
+
"CREATE INDEX IF NOT EXISTS idx_skill_usage_skill_id ON skill_usage (skill_id)",
|
|
514
|
+
"CREATE INDEX IF NOT EXISTS idx_skill_usage_session_id ON skill_usage (session_id)",
|
|
515
|
+
"CREATE INDEX IF NOT EXISTS idx_skill_usage_skill_session ON skill_usage (skill_id, session_id)",
|
|
393
516
|
// Log entries
|
|
394
517
|
"CREATE INDEX IF NOT EXISTS idx_log_entries_timestamp ON log_entries (timestamp)",
|
|
395
518
|
"CREATE INDEX IF NOT EXISTS idx_log_entries_level ON log_entries (level)",
|
|
396
519
|
"CREATE INDEX IF NOT EXISTS idx_log_entries_component ON log_entries (component)",
|
|
397
520
|
"CREATE INDEX IF NOT EXISTS idx_log_entries_kind ON log_entries (kind)",
|
|
398
|
-
"CREATE INDEX IF NOT EXISTS idx_log_entries_session_id ON log_entries (session_id)"
|
|
521
|
+
"CREATE INDEX IF NOT EXISTS idx_log_entries_session_id ON log_entries (session_id)",
|
|
522
|
+
// Notifications
|
|
523
|
+
"CREATE INDEX IF NOT EXISTS idx_notifications_status ON notifications (status)",
|
|
524
|
+
"CREATE INDEX IF NOT EXISTS idx_notifications_domain ON notifications (domain)",
|
|
525
|
+
"CREATE INDEX IF NOT EXISTS idx_notifications_created_at ON notifications (created_at)",
|
|
526
|
+
"CREATE INDEX IF NOT EXISTS idx_notifications_status_created ON notifications (status, created_at)"
|
|
399
527
|
];
|
|
400
528
|
var TABLE_DDLS = [
|
|
401
529
|
SCHEMA_VERSION_TABLE,
|
|
@@ -421,10 +549,17 @@ var TABLE_DDLS = [
|
|
|
421
549
|
AGENT_TURNS_TABLE,
|
|
422
550
|
AGENT_TASKS_TABLE,
|
|
423
551
|
AGENT_STATE_TABLE,
|
|
552
|
+
// Skills layer
|
|
553
|
+
SKILL_CANDIDATES_TABLE,
|
|
554
|
+
SKILL_RECORDS_TABLE,
|
|
555
|
+
SKILL_LINEAGE_TABLE,
|
|
556
|
+
SKILL_USAGE_TABLE,
|
|
424
557
|
// Sync layer
|
|
425
558
|
TEAM_OUTBOX_TABLE,
|
|
426
559
|
// Logging layer
|
|
427
|
-
LOG_ENTRIES_TABLE
|
|
560
|
+
LOG_ENTRIES_TABLE,
|
|
561
|
+
// Notifications layer
|
|
562
|
+
NOTIFICATIONS_TABLE
|
|
428
563
|
];
|
|
429
564
|
function migrateV1ToV2(db) {
|
|
430
565
|
db.exec("BEGIN");
|
|
@@ -553,6 +688,212 @@ function migrateV3ToV4(db, machineId) {
|
|
|
553
688
|
throw err;
|
|
554
689
|
}
|
|
555
690
|
}
|
|
691
|
+
function migrateV5ToV6(db) {
|
|
692
|
+
db.exec("BEGIN");
|
|
693
|
+
try {
|
|
694
|
+
db.exec("DROP TABLE IF EXISTS prompt_batches_fts");
|
|
695
|
+
db.exec(
|
|
696
|
+
`CREATE VIRTUAL TABLE IF NOT EXISTS prompt_batches_fts
|
|
697
|
+
USING fts5(user_prompt, response_summary, content='prompt_batches', content_rowid='id')`
|
|
698
|
+
);
|
|
699
|
+
db.exec(
|
|
700
|
+
`CREATE VIRTUAL TABLE IF NOT EXISTS spores_fts
|
|
701
|
+
USING fts5(content, content='spores', content_rowid='rowid')`
|
|
702
|
+
);
|
|
703
|
+
db.exec(
|
|
704
|
+
`CREATE VIRTUAL TABLE IF NOT EXISTS sessions_fts
|
|
705
|
+
USING fts5(title, summary, content='sessions', content_rowid='rowid')`
|
|
706
|
+
);
|
|
707
|
+
db.exec(
|
|
708
|
+
`CREATE TRIGGER IF NOT EXISTS prompt_batches_fts_ai AFTER INSERT ON prompt_batches BEGIN
|
|
709
|
+
INSERT INTO prompt_batches_fts(rowid, user_prompt, response_summary) VALUES (new.id, new.user_prompt, new.response_summary);
|
|
710
|
+
END`
|
|
711
|
+
);
|
|
712
|
+
db.exec(
|
|
713
|
+
`CREATE TRIGGER IF NOT EXISTS prompt_batches_fts_au AFTER UPDATE OF user_prompt, response_summary ON prompt_batches BEGIN
|
|
714
|
+
INSERT INTO prompt_batches_fts(prompt_batches_fts, rowid, user_prompt, response_summary) VALUES('delete', old.id, old.user_prompt, old.response_summary);
|
|
715
|
+
INSERT INTO prompt_batches_fts(rowid, user_prompt, response_summary) VALUES (new.id, new.user_prompt, new.response_summary);
|
|
716
|
+
END`
|
|
717
|
+
);
|
|
718
|
+
db.exec(
|
|
719
|
+
`CREATE TRIGGER IF NOT EXISTS prompt_batches_fts_ad AFTER DELETE ON prompt_batches BEGIN
|
|
720
|
+
INSERT INTO prompt_batches_fts(prompt_batches_fts, rowid, user_prompt, response_summary) VALUES('delete', old.id, old.user_prompt, old.response_summary);
|
|
721
|
+
END`
|
|
722
|
+
);
|
|
723
|
+
db.exec(
|
|
724
|
+
`CREATE TRIGGER IF NOT EXISTS spores_fts_ai AFTER INSERT ON spores BEGIN
|
|
725
|
+
INSERT INTO spores_fts(rowid, content) VALUES (new.rowid, new.content);
|
|
726
|
+
END`
|
|
727
|
+
);
|
|
728
|
+
db.exec(
|
|
729
|
+
`CREATE TRIGGER IF NOT EXISTS spores_fts_au AFTER UPDATE OF content ON spores BEGIN
|
|
730
|
+
INSERT INTO spores_fts(spores_fts, rowid, content) VALUES('delete', old.rowid, old.content);
|
|
731
|
+
INSERT INTO spores_fts(rowid, content) VALUES (new.rowid, new.content);
|
|
732
|
+
END`
|
|
733
|
+
);
|
|
734
|
+
db.exec(
|
|
735
|
+
`CREATE TRIGGER IF NOT EXISTS spores_fts_ad AFTER DELETE ON spores BEGIN
|
|
736
|
+
INSERT INTO spores_fts(spores_fts, rowid, content) VALUES('delete', old.rowid, old.content);
|
|
737
|
+
END`
|
|
738
|
+
);
|
|
739
|
+
db.exec(
|
|
740
|
+
`CREATE TRIGGER IF NOT EXISTS sessions_fts_ai AFTER INSERT ON sessions BEGIN
|
|
741
|
+
INSERT INTO sessions_fts(rowid, title, summary) VALUES (new.rowid, new.title, new.summary);
|
|
742
|
+
END`
|
|
743
|
+
);
|
|
744
|
+
db.exec(
|
|
745
|
+
`CREATE TRIGGER IF NOT EXISTS sessions_fts_au AFTER UPDATE OF title, summary ON sessions BEGIN
|
|
746
|
+
INSERT INTO sessions_fts(sessions_fts, rowid, title, summary) VALUES('delete', old.rowid, old.title, old.summary);
|
|
747
|
+
INSERT INTO sessions_fts(rowid, title, summary) VALUES (new.rowid, new.title, new.summary);
|
|
748
|
+
END`
|
|
749
|
+
);
|
|
750
|
+
db.exec(
|
|
751
|
+
`CREATE TRIGGER IF NOT EXISTS sessions_fts_ad AFTER DELETE ON sessions BEGIN
|
|
752
|
+
INSERT INTO sessions_fts(sessions_fts, rowid, title, summary) VALUES('delete', old.rowid, old.title, old.summary);
|
|
753
|
+
END`
|
|
754
|
+
);
|
|
755
|
+
db.exec(
|
|
756
|
+
`INSERT INTO prompt_batches_fts(rowid, user_prompt, response_summary)
|
|
757
|
+
SELECT rowid, user_prompt, response_summary FROM prompt_batches`
|
|
758
|
+
);
|
|
759
|
+
db.exec(
|
|
760
|
+
`INSERT INTO spores_fts(rowid, content)
|
|
761
|
+
SELECT rowid, content FROM spores`
|
|
762
|
+
);
|
|
763
|
+
db.exec(
|
|
764
|
+
`INSERT INTO sessions_fts(rowid, title, summary)
|
|
765
|
+
SELECT rowid, title, summary FROM sessions`
|
|
766
|
+
);
|
|
767
|
+
db.prepare(
|
|
768
|
+
`INSERT INTO schema_version (version, applied_at)
|
|
769
|
+
VALUES (?, ?)
|
|
770
|
+
ON CONFLICT (version) DO NOTHING`
|
|
771
|
+
).run(6, epochSeconds());
|
|
772
|
+
db.exec("COMMIT");
|
|
773
|
+
} catch (err) {
|
|
774
|
+
db.exec("ROLLBACK");
|
|
775
|
+
throw err;
|
|
776
|
+
}
|
|
777
|
+
}
|
|
778
|
+
function migrateV4ToV5(db) {
|
|
779
|
+
db.exec("BEGIN");
|
|
780
|
+
try {
|
|
781
|
+
db.exec(SKILL_CANDIDATES_TABLE);
|
|
782
|
+
db.exec(SKILL_RECORDS_TABLE);
|
|
783
|
+
db.exec(SKILL_LINEAGE_TABLE);
|
|
784
|
+
db.exec(SKILL_USAGE_TABLE);
|
|
785
|
+
const newIndexes = [
|
|
786
|
+
"CREATE INDEX IF NOT EXISTS idx_skill_candidates_agent_id ON skill_candidates (agent_id)",
|
|
787
|
+
"CREATE INDEX IF NOT EXISTS idx_skill_candidates_status ON skill_candidates (status)",
|
|
788
|
+
"CREATE INDEX IF NOT EXISTS idx_skill_candidates_machine_id ON skill_candidates (machine_id)",
|
|
789
|
+
"CREATE INDEX IF NOT EXISTS idx_skill_candidates_agent_status ON skill_candidates (agent_id, status)",
|
|
790
|
+
"CREATE INDEX IF NOT EXISTS idx_skill_records_agent_id ON skill_records (agent_id)",
|
|
791
|
+
"CREATE INDEX IF NOT EXISTS idx_skill_records_status ON skill_records (status)",
|
|
792
|
+
"CREATE INDEX IF NOT EXISTS idx_skill_records_name ON skill_records (name)",
|
|
793
|
+
"CREATE INDEX IF NOT EXISTS idx_skill_records_machine_id ON skill_records (machine_id)",
|
|
794
|
+
"CREATE INDEX IF NOT EXISTS idx_skill_records_agent_status ON skill_records (agent_id, status)",
|
|
795
|
+
"CREATE INDEX IF NOT EXISTS idx_skill_lineage_skill_id ON skill_lineage (skill_id)",
|
|
796
|
+
"CREATE INDEX IF NOT EXISTS idx_skill_usage_skill_id ON skill_usage (skill_id)",
|
|
797
|
+
"CREATE INDEX IF NOT EXISTS idx_skill_usage_session_id ON skill_usage (session_id)",
|
|
798
|
+
"CREATE INDEX IF NOT EXISTS idx_skill_usage_skill_session ON skill_usage (skill_id, session_id)",
|
|
799
|
+
"CREATE INDEX IF NOT EXISTS idx_agent_runs_task_completed ON agent_runs (task, status, completed_at)"
|
|
800
|
+
];
|
|
801
|
+
for (const idx of newIndexes) {
|
|
802
|
+
db.exec(idx);
|
|
803
|
+
}
|
|
804
|
+
db.prepare(
|
|
805
|
+
`INSERT INTO schema_version (version, applied_at)
|
|
806
|
+
VALUES (?, ?)
|
|
807
|
+
ON CONFLICT (version) DO NOTHING`
|
|
808
|
+
).run(5, epochSeconds());
|
|
809
|
+
db.exec("COMMIT");
|
|
810
|
+
} catch (err) {
|
|
811
|
+
db.exec("ROLLBACK");
|
|
812
|
+
throw err;
|
|
813
|
+
}
|
|
814
|
+
}
|
|
815
|
+
function migrateV6ToV7(db, machineId) {
|
|
816
|
+
if (machineId === "local" || machineId === DEFAULT_MACHINE_ID) return;
|
|
817
|
+
db.exec("BEGIN");
|
|
818
|
+
try {
|
|
819
|
+
const tables = [
|
|
820
|
+
"sessions",
|
|
821
|
+
"prompt_batches",
|
|
822
|
+
"spores",
|
|
823
|
+
"entities",
|
|
824
|
+
"graph_edges",
|
|
825
|
+
"resolution_events",
|
|
826
|
+
"plans",
|
|
827
|
+
"artifacts",
|
|
828
|
+
"digest_extracts",
|
|
829
|
+
"skill_candidates",
|
|
830
|
+
"skill_records"
|
|
831
|
+
];
|
|
832
|
+
for (const table of tables) {
|
|
833
|
+
try {
|
|
834
|
+
const staleRows = db.prepare(
|
|
835
|
+
`SELECT id FROM ${table} WHERE machine_id = 'local'`
|
|
836
|
+
).all();
|
|
837
|
+
if (staleRows.length === 0) continue;
|
|
838
|
+
db.prepare(
|
|
839
|
+
`UPDATE ${table} SET machine_id = ?, synced_at = NULL WHERE machine_id = 'local'`
|
|
840
|
+
).run(machineId);
|
|
841
|
+
for (const row of staleRows) {
|
|
842
|
+
db.prepare(
|
|
843
|
+
`DELETE FROM team_outbox WHERE table_name = ? AND row_id = ?`
|
|
844
|
+
).run(table, String(row.id));
|
|
845
|
+
}
|
|
846
|
+
const enqueueStmt = db.prepare(
|
|
847
|
+
`INSERT INTO team_outbox (table_name, row_id, operation, payload, machine_id, created_at)
|
|
848
|
+
VALUES (?, ?, 'upsert', ?, ?, ?)`
|
|
849
|
+
);
|
|
850
|
+
const now = epochSeconds();
|
|
851
|
+
for (const stale of staleRows) {
|
|
852
|
+
const fresh = db.prepare(`SELECT * FROM ${table} WHERE id = ?`).get(stale.id);
|
|
853
|
+
if (fresh) {
|
|
854
|
+
enqueueStmt.run(table, String(stale.id), JSON.stringify(fresh), machineId, now);
|
|
855
|
+
}
|
|
856
|
+
}
|
|
857
|
+
} catch (tableErr) {
|
|
858
|
+
const msg = tableErr instanceof Error ? tableErr.message : String(tableErr);
|
|
859
|
+
if (!msg.includes("no such table")) throw tableErr;
|
|
860
|
+
}
|
|
861
|
+
}
|
|
862
|
+
db.prepare(
|
|
863
|
+
`INSERT INTO schema_version (version, applied_at)
|
|
864
|
+
VALUES (?, ?)
|
|
865
|
+
ON CONFLICT (version) DO NOTHING`
|
|
866
|
+
).run(7, epochSeconds());
|
|
867
|
+
db.exec("COMMIT");
|
|
868
|
+
} catch (err) {
|
|
869
|
+
db.exec("ROLLBACK");
|
|
870
|
+
throw err;
|
|
871
|
+
}
|
|
872
|
+
}
|
|
873
|
+
function migrateV7ToV8(db) {
|
|
874
|
+
db.exec("BEGIN");
|
|
875
|
+
try {
|
|
876
|
+
db.exec(NOTIFICATIONS_TABLE);
|
|
877
|
+
const newIndexes = [
|
|
878
|
+
"CREATE INDEX IF NOT EXISTS idx_notifications_status ON notifications (status)",
|
|
879
|
+
"CREATE INDEX IF NOT EXISTS idx_notifications_domain ON notifications (domain)",
|
|
880
|
+
"CREATE INDEX IF NOT EXISTS idx_notifications_created_at ON notifications (created_at)",
|
|
881
|
+
"CREATE INDEX IF NOT EXISTS idx_notifications_status_created ON notifications (status, created_at)"
|
|
882
|
+
];
|
|
883
|
+
for (const idx of newIndexes) {
|
|
884
|
+
db.exec(idx);
|
|
885
|
+
}
|
|
886
|
+
db.prepare(
|
|
887
|
+
`INSERT INTO schema_version (version, applied_at)
|
|
888
|
+
VALUES (?, ?)
|
|
889
|
+
ON CONFLICT (version) DO NOTHING`
|
|
890
|
+
).run(8, epochSeconds());
|
|
891
|
+
db.exec("COMMIT");
|
|
892
|
+
} catch (err) {
|
|
893
|
+
db.exec("ROLLBACK");
|
|
894
|
+
throw err;
|
|
895
|
+
}
|
|
896
|
+
}
|
|
556
897
|
function createSchema(db, machineId = DEFAULT_MACHINE_ID) {
|
|
557
898
|
try {
|
|
558
899
|
const row = db.prepare(
|
|
@@ -574,6 +915,30 @@ function createSchema(db, machineId = DEFAULT_MACHINE_ID) {
|
|
|
574
915
|
if (afterV2Migration < 4) {
|
|
575
916
|
migrateV3ToV4(db, machineId);
|
|
576
917
|
}
|
|
918
|
+
const afterV3Migration = db.prepare(
|
|
919
|
+
"SELECT version FROM schema_version ORDER BY version DESC LIMIT 1"
|
|
920
|
+
).get()?.version ?? 0;
|
|
921
|
+
if (afterV3Migration < 5) {
|
|
922
|
+
migrateV4ToV5(db);
|
|
923
|
+
}
|
|
924
|
+
const afterV4Migration = db.prepare(
|
|
925
|
+
"SELECT version FROM schema_version ORDER BY version DESC LIMIT 1"
|
|
926
|
+
).get()?.version ?? 0;
|
|
927
|
+
if (afterV4Migration < 6) {
|
|
928
|
+
migrateV5ToV6(db);
|
|
929
|
+
}
|
|
930
|
+
const afterV5Migration = db.prepare(
|
|
931
|
+
"SELECT version FROM schema_version ORDER BY version DESC LIMIT 1"
|
|
932
|
+
).get()?.version ?? 0;
|
|
933
|
+
if (afterV5Migration < 7) {
|
|
934
|
+
migrateV6ToV7(db, machineId);
|
|
935
|
+
}
|
|
936
|
+
const afterV6Migration = db.prepare(
|
|
937
|
+
"SELECT version FROM schema_version ORDER BY version DESC LIMIT 1"
|
|
938
|
+
).get()?.version ?? 0;
|
|
939
|
+
if (afterV6Migration < 8) {
|
|
940
|
+
migrateV7ToV8(db);
|
|
941
|
+
}
|
|
577
942
|
return;
|
|
578
943
|
} catch {
|
|
579
944
|
}
|
|
@@ -598,4 +963,4 @@ export {
|
|
|
598
963
|
EMBEDDING_DIMENSIONS,
|
|
599
964
|
createSchema
|
|
600
965
|
};
|
|
601
|
-
//# sourceMappingURL=chunk-
|
|
966
|
+
//# sourceMappingURL=chunk-4VF6KQ2Z.js.map
|