@bryanhu/codexly 0.35.0 → 0.36.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/CHANGELOG.md +34 -1
- package/README.md +27 -6
- package/README.zh-CN.md +33 -6
- package/dist/chunk-3WW7LK46.js +5 -0
- package/dist/chunk-DRIJMD7S.js +1040 -0
- package/dist/chunk-GFASBWL4.js +3 -0
- package/dist/chunk-HD7TOFDV.js +3 -0
- package/dist/chunk-IV4NRE4S.js +2 -0
- package/dist/chunk-PQPYP3AR.js +77 -0
- package/dist/chunk-XJOOU7A5.js +2 -0
- package/dist/chunk-YXJGRSCL.js +2 -0
- package/dist/chunk-ZK7RF5XC.js +40 -0
- package/dist/cli.js +6 -1270
- package/dist/client/index.js +2 -1613
- package/dist/codex-jsonl-frame-worker.js +2 -120
- package/dist/command-VIK5GXBS.js +84 -0
- package/dist/core/index.js +1 -5
- package/dist/dist-2UQZKK3B.js +2 -0
- package/dist/historical-attachment-worker.js +2 -94
- package/dist/protocol/index.js +1 -6
- package/dist/providers/codex/index.js +1 -9
- package/dist/scheduled-task-recurrence-worker.js +9 -2969
- package/dist/server/index.js +1 -11
- package/dist/sqlite-state-worker.js +31 -872
- package/dist/web/.vite/manifest.json +333 -299
- package/dist/web/.vite/manifest.json.br +0 -0
- package/dist/web/.vite/manifest.json.gz +0 -0
- package/dist/web/assets/abnfDiagram-N423BO3Z-BA9G7eND.js +1 -0
- package/dist/web/assets/abnfDiagram-N423BO3Z-BA9G7eND.js.br +0 -0
- package/dist/web/assets/abnfDiagram-N423BO3Z-BA9G7eND.js.gz +0 -0
- package/dist/web/assets/agent-settings-panel-B0qVVJ3_.js +1 -0
- package/dist/web/assets/agent-settings-panel-B0qVVJ3_.js.br +0 -0
- package/dist/web/assets/agent-settings-panel-B0qVVJ3_.js.gz +0 -0
- package/dist/web/assets/architectureDiagram-T3A2C74G-hY1IIQ-y.js +36 -0
- package/dist/web/assets/architectureDiagram-T3A2C74G-hY1IIQ-y.js.br +0 -0
- package/dist/web/assets/architectureDiagram-T3A2C74G-hY1IIQ-y.js.gz +0 -0
- package/dist/web/assets/{background-image-picker-D4xlUwrb.js → background-image-picker-CVhVTosp.js} +1 -1
- package/dist/web/assets/background-image-picker-CVhVTosp.js.br +0 -0
- package/dist/web/assets/background-image-picker-CVhVTosp.js.gz +0 -0
- package/dist/web/assets/{chunk-5RXB4S5H-BDaXxnei.js → chunk-5RXB4S5H-fg31GjQR.js} +1 -1
- package/dist/web/assets/chunk-5RXB4S5H-fg31GjQR.js.br +0 -0
- package/dist/web/assets/chunk-5RXB4S5H-fg31GjQR.js.gz +0 -0
- package/dist/web/assets/{chunk-6Q2QTUOP-BcTojajm.js → chunk-6Q2QTUOP-UGVxaGe-.js} +1 -1
- package/dist/web/assets/chunk-6Q2QTUOP-UGVxaGe-.js.br +0 -0
- package/dist/web/assets/chunk-6Q2QTUOP-UGVxaGe-.js.gz +0 -0
- package/dist/web/assets/{chunk-GF5L2VYU-XelwAXnk.js → chunk-GF5L2VYU-iTLU6Gbu.js} +2 -2
- package/dist/web/assets/chunk-GF5L2VYU-iTLU6Gbu.js.br +0 -0
- package/dist/web/assets/chunk-GF5L2VYU-iTLU6Gbu.js.gz +0 -0
- package/dist/web/assets/{chunk-JQJVKLGR-Cyok4-2b.js → chunk-JQJVKLGR-DzWAKhHq.js} +3 -3
- package/dist/web/assets/chunk-JQJVKLGR-DzWAKhHq.js.br +0 -0
- package/dist/web/assets/chunk-JQJVKLGR-DzWAKhHq.js.gz +0 -0
- package/dist/web/assets/classDiagram-JCYQIIEL-Cc_4r5xo.js +1 -0
- package/dist/web/assets/classDiagram-JCYQIIEL-Cc_4r5xo.js.br +0 -0
- package/dist/web/assets/classDiagram-JCYQIIEL-Cc_4r5xo.js.gz +0 -0
- package/dist/web/assets/classDiagram-v2-OCEON4UE-Cc_4r5xo.js +1 -0
- package/dist/web/assets/classDiagram-v2-OCEON4UE-Cc_4r5xo.js.br +0 -0
- package/dist/web/assets/classDiagram-v2-OCEON4UE-Cc_4r5xo.js.gz +0 -0
- package/dist/web/assets/{code-highlighter-BDJkbu1d.js → code-highlighter-CTwU6LuI.js} +1 -1
- package/dist/web/assets/code-highlighter-CTwU6LuI.js.br +0 -0
- package/dist/web/assets/code-highlighter-CTwU6LuI.js.gz +0 -0
- package/dist/web/assets/{commit-settings-panel-j2yqctr_.js → commit-settings-panel-Ctb-LmoD.js} +1 -1
- package/dist/web/assets/commit-settings-panel-Ctb-LmoD.js.br +0 -0
- package/dist/web/assets/commit-settings-panel-Ctb-LmoD.js.gz +0 -0
- package/dist/web/assets/cynefinDiagram-MW4NZA55-CarrAQe_.js +62 -0
- package/dist/web/assets/cynefinDiagram-MW4NZA55-CarrAQe_.js.br +0 -0
- package/dist/web/assets/cynefinDiagram-MW4NZA55-CarrAQe_.js.gz +0 -0
- package/dist/web/assets/{diagram-7IWD3JNH-BfnXF08-.js → diagram-7IWD3JNH-CHgQ34Br.js} +3 -3
- package/dist/web/assets/diagram-7IWD3JNH-CHgQ34Br.js.br +0 -0
- package/dist/web/assets/diagram-7IWD3JNH-CHgQ34Br.js.gz +0 -0
- package/dist/web/assets/diagram-B4RE2ZJO-qtdLm98R.js +3 -0
- package/dist/web/assets/diagram-B4RE2ZJO-qtdLm98R.js.br +0 -0
- package/dist/web/assets/diagram-B4RE2ZJO-qtdLm98R.js.gz +0 -0
- package/dist/web/assets/diagram-LBJQPF4R-Do0sclzV.js +24 -0
- package/dist/web/assets/diagram-LBJQPF4R-Do0sclzV.js.br +0 -0
- package/dist/web/assets/diagram-LBJQPF4R-Do0sclzV.js.gz +0 -0
- package/dist/web/assets/diagram-Q27KOJAE-CuX25bnK.js +24 -0
- package/dist/web/assets/diagram-Q27KOJAE-CuX25bnK.js.br +0 -0
- package/dist/web/assets/diagram-Q27KOJAE-CuX25bnK.js.gz +0 -0
- package/dist/web/assets/diagram-UB23O5K3-C8vf7TKH.js +41 -0
- package/dist/web/assets/diagram-UB23O5K3-C8vf7TKH.js.br +0 -0
- package/dist/web/assets/diagram-UB23O5K3-C8vf7TKH.js.gz +0 -0
- package/dist/web/assets/{dist-Ci1kbFbB.js → dist-C12Fexcu.js} +1 -1
- package/dist/web/assets/dist-C12Fexcu.js.br +0 -0
- package/dist/web/assets/dist-C12Fexcu.js.gz +0 -0
- package/dist/web/assets/dist-DHnVkR1t.js +42 -0
- package/dist/web/assets/dist-DHnVkR1t.js.br +0 -0
- package/dist/web/assets/dist-DHnVkR1t.js.gz +0 -0
- package/dist/web/assets/ebnfDiagram-BXEA7PRR-DctRYehy.js +1 -0
- package/dist/web/assets/ebnfDiagram-BXEA7PRR-DctRYehy.js.br +0 -0
- package/dist/web/assets/ebnfDiagram-BXEA7PRR-DctRYehy.js.gz +0 -0
- package/dist/web/assets/{erDiagram-JOGREHBK-BOKR1NS3.js → erDiagram-JOGREHBK-BkfLzWvS.js} +2 -2
- package/dist/web/assets/erDiagram-JOGREHBK-BkfLzWvS.js.br +0 -0
- package/dist/web/assets/{erDiagram-JOGREHBK-BOKR1NS3.js.gz → erDiagram-JOGREHBK-BkfLzWvS.js.gz} +0 -0
- package/dist/web/assets/{file-review-dialog-DvgO1Ae8.js → file-review-dialog-pkoiV9C7.js} +2 -2
- package/dist/web/assets/file-review-dialog-pkoiV9C7.js.br +0 -0
- package/dist/web/assets/file-review-dialog-pkoiV9C7.js.gz +0 -0
- package/dist/web/assets/{flowDiagram-UKHOOZJN-CEamRwMR.js → flowDiagram-UKHOOZJN-CQWRJfj_.js} +1 -1
- package/dist/web/assets/flowDiagram-UKHOOZJN-CQWRJfj_.js.br +0 -0
- package/dist/web/assets/flowDiagram-UKHOOZJN-CQWRJfj_.js.gz +0 -0
- package/dist/web/assets/{git-commit-review-D5ge3jwI.js → git-commit-review-BK6Ykgxx.js} +2 -2
- package/dist/web/assets/git-commit-review-BK6Ykgxx.js.br +0 -0
- package/dist/web/assets/git-commit-review-BK6Ykgxx.js.gz +0 -0
- package/dist/web/assets/{git-history-panel-DsGqR_Zc.js → git-history-panel-BYunPg_Y.js} +1 -1
- package/dist/web/assets/git-history-panel-BYunPg_Y.js.br +0 -0
- package/dist/web/assets/git-history-panel-BYunPg_Y.js.gz +0 -0
- package/dist/web/assets/gitGraphDiagram-DS77QQ5N-JH4oE096.js +106 -0
- package/dist/web/assets/gitGraphDiagram-DS77QQ5N-JH4oE096.js.br +0 -0
- package/dist/web/assets/gitGraphDiagram-DS77QQ5N-JH4oE096.js.gz +0 -0
- package/dist/web/assets/{global-search-dialog-JzDBjqX4.js → global-search-dialog-DKnqW_9p.js} +1 -1
- package/dist/web/assets/global-search-dialog-DKnqW_9p.js.br +0 -0
- package/dist/web/assets/global-search-dialog-DKnqW_9p.js.gz +0 -0
- package/dist/web/assets/{global-settings-about-CULXi1Dn.js → global-settings-about-CUWtouNQ.js} +1 -1
- package/dist/web/assets/global-settings-about-CUWtouNQ.js.br +0 -0
- package/dist/web/assets/global-settings-about-CUWtouNQ.js.gz +0 -0
- package/dist/web/assets/global-settings-page-7DIqvRQV.js +2 -0
- package/dist/web/assets/global-settings-page-7DIqvRQV.js.br +0 -0
- package/dist/web/assets/global-settings-page-7DIqvRQV.js.gz +0 -0
- package/dist/web/assets/{global-settings-pets-hPG36aUL.js → global-settings-pets-DOp0Bwxj.js} +1 -1
- package/dist/web/assets/global-settings-pets-DOp0Bwxj.js.br +0 -0
- package/dist/web/assets/global-settings-pets-DOp0Bwxj.js.gz +0 -0
- package/dist/web/assets/{highlighted-body-OFNGDK62-CoO9fhim.js → highlighted-body-OFNGDK62-BN31gHcf.js} +1 -1
- package/dist/web/assets/highlighted-body-OFNGDK62-BN31gHcf.js.br +0 -0
- package/dist/web/assets/highlighted-body-OFNGDK62-BN31gHcf.js.gz +0 -0
- package/dist/web/assets/{history-task-timeline-CQphWf0m.js → history-task-timeline-Db7jVbJQ.js} +1 -1
- package/dist/web/assets/history-task-timeline-Db7jVbJQ.js.br +0 -0
- package/dist/web/assets/history-task-timeline-Db7jVbJQ.js.gz +0 -0
- package/dist/web/assets/{image-preview-Dtx8uVmp.js → image-preview-NyGMcveW.js} +2 -2
- package/dist/web/assets/image-preview-NyGMcveW.js.br +0 -0
- package/dist/web/assets/image-preview-NyGMcveW.js.gz +0 -0
- package/dist/web/assets/{image-preview-content-zLsEpLCA.js → image-preview-content-BBgkjUms.js} +1 -1
- package/dist/web/assets/image-preview-content-BBgkjUms.js.br +0 -0
- package/dist/web/assets/image-preview-content-BBgkjUms.js.gz +0 -0
- package/dist/web/assets/index-Bea8TUta.css +2 -0
- package/dist/web/assets/index-Bea8TUta.css.br +0 -0
- package/dist/web/assets/index-Bea8TUta.css.gz +0 -0
- package/dist/web/assets/index-CGGXkww0.js +4 -0
- package/dist/web/assets/index-CGGXkww0.js.br +0 -0
- package/dist/web/assets/index-CGGXkww0.js.gz +0 -0
- package/dist/web/assets/infoDiagram-6WML65LV-smD1e7u3.js +2 -0
- package/dist/web/assets/infoDiagram-6WML65LV-smD1e7u3.js.br +0 -0
- package/dist/web/assets/infoDiagram-6WML65LV-smD1e7u3.js.gz +0 -0
- package/dist/web/assets/{initial-deps-Be-R---T.js → initial-deps-CJDv_c3Y.js} +1 -1
- package/dist/web/assets/initial-deps-CJDv_c3Y.js.br +0 -0
- package/dist/web/assets/initial-deps-CJDv_c3Y.js.gz +0 -0
- package/dist/web/assets/initial-deps-DwgXix97.js +2 -0
- package/dist/web/assets/initial-deps-DwgXix97.js.br +0 -0
- package/dist/web/assets/initial-deps-DwgXix97.js.gz +0 -0
- package/dist/web/assets/{installed-skills-pane-DBJ_KuXN.js → installed-skills-pane-BjwoHdKg.js} +1 -1
- package/dist/web/assets/installed-skills-pane-BjwoHdKg.js.br +0 -0
- package/dist/web/assets/installed-skills-pane-BjwoHdKg.js.gz +0 -0
- package/dist/web/assets/{ishikawaDiagram-WSZJBQD7-CcWhd8w9.js → ishikawaDiagram-WSZJBQD7-BMJ0kCX-.js} +1 -1
- package/dist/web/assets/ishikawaDiagram-WSZJBQD7-BMJ0kCX-.js.br +0 -0
- package/dist/web/assets/ishikawaDiagram-WSZJBQD7-BMJ0kCX-.js.gz +0 -0
- package/dist/web/assets/{kanban-definition-27J2QSJJ-DEkge27F.js → kanban-definition-27J2QSJJ-pQQ3ybGq.js} +3 -3
- package/dist/web/assets/kanban-definition-27J2QSJJ-pQQ3ybGq.js.br +0 -0
- package/dist/web/assets/kanban-definition-27J2QSJJ-pQQ3ybGq.js.gz +0 -0
- package/dist/web/assets/lazy-message-response-lBhr_q1o.js +2 -0
- package/dist/web/assets/lazy-message-response-lBhr_q1o.js.br +5 -0
- package/dist/web/assets/lazy-message-response-lBhr_q1o.js.gz +0 -0
- package/dist/web/assets/{mcp-management-pane-16qr0aVZ.js → mcp-management-pane-sSqs8EvB.js} +1 -1
- package/dist/web/assets/mcp-management-pane-sSqs8EvB.js.br +0 -0
- package/dist/web/assets/mcp-management-pane-sSqs8EvB.js.gz +0 -0
- package/dist/web/assets/mermaid-GHXKKRXX-DqH-ybrY.js +1 -0
- package/dist/web/assets/mermaid-GHXKKRXX-DqH-ybrY.js.br +1 -0
- package/dist/web/assets/mermaid-GHXKKRXX-DqH-ybrY.js.gz +0 -0
- package/dist/web/assets/message-assistant-directive-B5_Hjs0F.js +3 -0
- package/dist/web/assets/message-assistant-directive-B5_Hjs0F.js.br +0 -0
- package/dist/web/assets/message-assistant-directive-B5_Hjs0F.js.gz +0 -0
- package/dist/web/assets/message-response-B1MUkN4A.js +151 -0
- package/dist/web/assets/message-response-B1MUkN4A.js.br +0 -0
- package/dist/web/assets/message-response-B1MUkN4A.js.gz +0 -0
- package/dist/web/assets/{mindmap-definition-FAOFIHXS-DubrGaue.js → mindmap-definition-FAOFIHXS-CgQ5woK5.js} +2 -2
- package/dist/web/assets/mindmap-definition-FAOFIHXS-CgQ5woK5.js.br +0 -0
- package/dist/web/assets/mindmap-definition-FAOFIHXS-CgQ5woK5.js.gz +0 -0
- package/dist/web/assets/{official-plugins-pane-vADxh_le.js → official-plugins-pane-wD25peXQ.js} +1 -1
- package/dist/web/assets/official-plugins-pane-wD25peXQ.js.br +0 -0
- package/dist/web/assets/official-plugins-pane-wD25peXQ.js.gz +0 -0
- package/dist/web/assets/patch-diff-viewer-VOHL2ZQz.js +1409 -0
- package/dist/web/assets/patch-diff-viewer-VOHL2ZQz.js.br +0 -0
- package/dist/web/assets/patch-diff-viewer-VOHL2ZQz.js.gz +0 -0
- package/dist/web/assets/{pdf-preview-BG-XpATo.js → pdf-preview-BWJWSwA6.js} +3 -3
- package/dist/web/assets/pdf-preview-BWJWSwA6.js.br +0 -0
- package/dist/web/assets/pdf-preview-BWJWSwA6.js.gz +0 -0
- package/dist/web/assets/pegDiagram-VL7TDLO6-CEECg9Qv.js +1 -0
- package/dist/web/assets/pegDiagram-VL7TDLO6-CEECg9Qv.js.br +0 -0
- package/dist/web/assets/pegDiagram-VL7TDLO6-CEECg9Qv.js.gz +0 -0
- package/dist/web/assets/{personalization-settings-panel-Br7qXDQ7.js → personalization-settings-panel-Be8r7yUH.js} +1 -1
- package/dist/web/assets/personalization-settings-panel-Be8r7yUH.js.br +0 -0
- package/dist/web/assets/personalization-settings-panel-Be8r7yUH.js.gz +0 -0
- package/dist/web/assets/pieDiagram-7S7Q4E2Y-C3L4IYmx.js +39 -0
- package/dist/web/assets/pieDiagram-7S7Q4E2Y-C3L4IYmx.js.br +0 -0
- package/dist/web/assets/pieDiagram-7S7Q4E2Y-C3L4IYmx.js.gz +0 -0
- package/dist/web/assets/{project-file-popup-page-CmNJLTSV.js → project-file-popup-page-3kD_QzID.js} +1 -1
- package/dist/web/assets/project-file-popup-page-3kD_QzID.js.br +0 -0
- package/dist/web/assets/project-file-popup-page-3kD_QzID.js.gz +0 -0
- package/dist/web/assets/project-source-panel-ZKxkrM_q.js +2 -0
- package/dist/web/assets/project-source-panel-ZKxkrM_q.js.br +0 -0
- package/dist/web/assets/project-source-panel-ZKxkrM_q.js.gz +0 -0
- package/dist/web/assets/{prompt-input-Brfimssc.js → prompt-input-DpTzQpMu.js} +1 -1
- package/dist/web/assets/prompt-input-DpTzQpMu.js.br +0 -0
- package/dist/web/assets/prompt-input-DpTzQpMu.js.gz +0 -0
- package/dist/web/assets/railroadDiagram-AXF67PYL-CXSGJisB.js +1 -0
- package/dist/web/assets/railroadDiagram-AXF67PYL-CXSGJisB.js.br +0 -0
- package/dist/web/assets/railroadDiagram-AXF67PYL-CXSGJisB.js.gz +0 -0
- package/dist/web/assets/{requirementDiagram-LRYGKXZP-CG8KWt_j.js → requirementDiagram-LRYGKXZP-uB3tW141.js} +2 -2
- package/dist/web/assets/requirementDiagram-LRYGKXZP-uB3tW141.js.br +0 -0
- package/dist/web/assets/requirementDiagram-LRYGKXZP-uB3tW141.js.gz +0 -0
- package/dist/web/assets/resources-en-gaD7QZkd.js +1 -0
- package/dist/web/assets/resources-en-gaD7QZkd.js.br +0 -0
- package/dist/web/assets/resources-en-gaD7QZkd.js.gz +0 -0
- package/dist/web/assets/{scheduled-task-date-time-picker-DeOtns9O.js → scheduled-task-date-time-picker-CA-dPI35.js} +1 -1
- package/dist/web/assets/scheduled-task-date-time-picker-CA-dPI35.js.br +0 -0
- package/dist/web/assets/scheduled-task-date-time-picker-CA-dPI35.js.gz +0 -0
- package/dist/web/assets/{scheduled-task-floating-ui~scheduled-task-date-time-picker-CbWhx_7u.js → scheduled-task-floating-ui~scheduled-task-date-time-picker-wwPq7k9m.js} +1 -1
- package/dist/web/assets/scheduled-task-floating-ui~scheduled-task-date-time-picker-wwPq7k9m.js.br +0 -0
- package/dist/web/assets/scheduled-task-floating-ui~scheduled-task-date-time-picker-wwPq7k9m.js.gz +0 -0
- package/dist/web/assets/scheduled-tasks-BBUd86IL.js +1 -0
- package/dist/web/assets/scheduled-tasks-BBUd86IL.js.br +0 -0
- package/dist/web/assets/scheduled-tasks-BBUd86IL.js.gz +0 -0
- package/dist/web/assets/scheduled-tasks-container-D0Zpvskg.js +2 -0
- package/dist/web/assets/scheduled-tasks-container-D0Zpvskg.js.br +0 -0
- package/dist/web/assets/scheduled-tasks-container-D0Zpvskg.js.gz +0 -0
- package/dist/web/assets/{sequenceDiagram-SI44F4Z6-DbZoTul2.js → sequenceDiagram-SI44F4Z6-BikVJyrh.js} +2 -2
- package/dist/web/assets/sequenceDiagram-SI44F4Z6-BikVJyrh.js.br +0 -0
- package/dist/web/assets/sequenceDiagram-SI44F4Z6-BikVJyrh.js.gz +0 -0
- package/dist/web/assets/{sheet-B9MDuGoF.js → sheet-BSeAYy7W.js} +1 -1
- package/dist/web/assets/sheet-BSeAYy7W.js.br +0 -0
- package/dist/web/assets/sheet-BSeAYy7W.js.gz +0 -0
- package/dist/web/assets/{shiki-bundle-BlbGsyMZ.js → shiki-bundle-BZV5obW1.js} +1 -1
- package/dist/web/assets/shiki-bundle-BZV5obW1.js.br +2 -0
- package/dist/web/assets/shiki-bundle-BZV5obW1.js.gz +0 -0
- package/dist/web/assets/{skills-market-container-CWO3CeMr.js → skills-market-container-iC2hoU-7.js} +2 -2
- package/dist/web/assets/skills-market-container-iC2hoU-7.js.br +0 -0
- package/dist/web/assets/skills-market-container-iC2hoU-7.js.gz +0 -0
- package/dist/web/assets/{split-workspace-menu-content-rImPq6wj.js → split-workspace-menu-content-BlNIoxF5.js} +1 -1
- package/dist/web/assets/split-workspace-menu-content-BlNIoxF5.js.br +3 -0
- package/dist/web/assets/split-workspace-menu-content-BlNIoxF5.js.gz +0 -0
- package/dist/web/assets/stateDiagram-OKZ733FA-CBWRnaGO.js +1 -0
- package/dist/web/assets/stateDiagram-OKZ733FA-CBWRnaGO.js.br +0 -0
- package/dist/web/assets/stateDiagram-OKZ733FA-CBWRnaGO.js.gz +0 -0
- package/dist/web/assets/stateDiagram-v2-UEYNNEHI-CJYWLmtB.js +1 -0
- package/dist/web/assets/stateDiagram-v2-UEYNNEHI-CJYWLmtB.js.br +0 -0
- package/dist/web/assets/stateDiagram-v2-UEYNNEHI-CJYWLmtB.js.gz +0 -0
- package/dist/web/assets/{swimlanesDiagram-ULZ7WXOC-RILHYzJF.js → swimlanesDiagram-ULZ7WXOC-5agQ3ner.js} +1 -1
- package/dist/web/assets/swimlanesDiagram-ULZ7WXOC-5agQ3ner.js.br +0 -0
- package/dist/web/assets/swimlanesDiagram-ULZ7WXOC-5agQ3ner.js.gz +0 -0
- package/dist/web/assets/{third-party-marketplace-pane-DKWMNoa3.js → third-party-marketplace-pane-DvF5pfS7.js} +1 -1
- package/dist/web/assets/third-party-marketplace-pane-DvF5pfS7.js.br +0 -0
- package/dist/web/assets/third-party-marketplace-pane-DvF5pfS7.js.gz +0 -0
- package/dist/web/assets/{timeline-definition-Z64GVDOM-BQMes8Ld.js → timeline-definition-Z64GVDOM-D_09Q10V.js} +1 -1
- package/dist/web/assets/timeline-definition-Z64GVDOM-D_09Q10V.js.br +0 -0
- package/dist/web/assets/timeline-definition-Z64GVDOM-D_09Q10V.js.gz +0 -0
- package/dist/web/assets/{vennDiagram-T6HMQDX7-qBMuOWPn.js → vennDiagram-T6HMQDX7-3WtBk1Fg.js} +1 -1
- package/dist/web/assets/vennDiagram-T6HMQDX7-3WtBk1Fg.js.br +0 -0
- package/dist/web/assets/vennDiagram-T6HMQDX7-3WtBk1Fg.js.gz +0 -0
- package/dist/web/assets/{wardleyDiagram-T6FBY63Y-BXVFrJeX.js → wardleyDiagram-T6FBY63Y-DBIzys3u.js} +3 -3
- package/dist/web/assets/wardleyDiagram-T6FBY63Y-DBIzys3u.js.br +0 -0
- package/dist/web/assets/wardleyDiagram-T6FBY63Y-DBIzys3u.js.gz +0 -0
- package/dist/web/assets/workbench-inspector-changes-DGOGbxn8.js +2 -0
- package/dist/web/assets/workbench-inspector-changes-DGOGbxn8.js.br +0 -0
- package/dist/web/assets/workbench-inspector-changes-DGOGbxn8.js.gz +0 -0
- package/dist/web/assets/{workbench-pet-canvas-BM6S31jL.js → workbench-pet-canvas-06NCdnyp.js} +1 -1
- package/dist/web/assets/workbench-pet-canvas-06NCdnyp.js.br +0 -0
- package/dist/web/assets/workbench-pet-canvas-06NCdnyp.js.gz +0 -0
- package/dist/web/assets/workbench-shell-BmVPybzn.js +16 -0
- package/dist/web/assets/workbench-shell-BmVPybzn.js.br +0 -0
- package/dist/web/assets/workbench-shell-BmVPybzn.js.gz +0 -0
- package/dist/web/assets/{xychartDiagram-ELKLHX3M-DT2u1V83.js → xychartDiagram-ELKLHX3M-DwDj5q-W.js} +1 -1
- package/dist/web/assets/xychartDiagram-ELKLHX3M-DwDj5q-W.js.br +0 -0
- package/dist/web/assets/xychartDiagram-ELKLHX3M-DwDj5q-W.js.gz +0 -0
- package/dist/web/index.html +5 -5
- package/dist/web/index.html.br +0 -0
- package/dist/web/index.html.gz +0 -0
- package/docs/git-workflow.md +41 -0
- package/docs/model-context-window.md +31 -0
- package/docs/web-autostart.md +104 -0
- package/docs/web-autostart.zh-CN.md +104 -0
- package/package.json +5 -1
- package/dist/chunk-6TW6YUSL.js +0 -74005
- package/dist/chunk-BRKY2HKI.js +0 -6072
- package/dist/chunk-GBLVWFLZ.js +0 -23
- package/dist/chunk-GT7XTSEG.js +0 -56
- package/dist/chunk-K6J42667.js +0 -43
- package/dist/chunk-OM52Z4J7.js +0 -3360
- package/dist/chunk-REIMOLGX.js +0 -317
- package/dist/chunk-RGMQBXXC.js +0 -16146
- package/dist/dist-NGSIFQU5.js +0 -252
- package/dist/runtime-instance-worker.js +0 -19
- package/dist/web/assets/abnfDiagram-N423BO3Z-DjEUmHES.js +0 -1
- package/dist/web/assets/abnfDiagram-N423BO3Z-DjEUmHES.js.br +0 -0
- package/dist/web/assets/abnfDiagram-N423BO3Z-DjEUmHES.js.gz +0 -0
- package/dist/web/assets/agent-settings-panel-CuLgzC2n.js +0 -1
- package/dist/web/assets/agent-settings-panel-CuLgzC2n.js.br +0 -0
- package/dist/web/assets/agent-settings-panel-CuLgzC2n.js.gz +0 -0
- package/dist/web/assets/architectureDiagram-T3A2C74G-DNtnW8Fq.js +0 -36
- package/dist/web/assets/architectureDiagram-T3A2C74G-DNtnW8Fq.js.br +0 -0
- package/dist/web/assets/architectureDiagram-T3A2C74G-DNtnW8Fq.js.gz +0 -0
- package/dist/web/assets/background-image-picker-D4xlUwrb.js.br +0 -0
- package/dist/web/assets/background-image-picker-D4xlUwrb.js.gz +0 -0
- package/dist/web/assets/chunk-5RXB4S5H-BDaXxnei.js.br +0 -0
- package/dist/web/assets/chunk-5RXB4S5H-BDaXxnei.js.gz +0 -0
- package/dist/web/assets/chunk-6Q2QTUOP-BcTojajm.js.br +0 -0
- package/dist/web/assets/chunk-6Q2QTUOP-BcTojajm.js.gz +0 -0
- package/dist/web/assets/chunk-GF5L2VYU-XelwAXnk.js.br +0 -0
- package/dist/web/assets/chunk-GF5L2VYU-XelwAXnk.js.gz +0 -0
- package/dist/web/assets/chunk-JQJVKLGR-Cyok4-2b.js.br +0 -0
- package/dist/web/assets/chunk-JQJVKLGR-Cyok4-2b.js.gz +0 -0
- package/dist/web/assets/classDiagram-JCYQIIEL-B9HBTIG7.js +0 -1
- package/dist/web/assets/classDiagram-JCYQIIEL-B9HBTIG7.js.br +0 -0
- package/dist/web/assets/classDiagram-JCYQIIEL-B9HBTIG7.js.gz +0 -0
- package/dist/web/assets/classDiagram-v2-OCEON4UE-B9HBTIG7.js +0 -1
- package/dist/web/assets/classDiagram-v2-OCEON4UE-B9HBTIG7.js.br +0 -0
- package/dist/web/assets/classDiagram-v2-OCEON4UE-B9HBTIG7.js.gz +0 -0
- package/dist/web/assets/code-highlighter-BDJkbu1d.js.br +0 -0
- package/dist/web/assets/code-highlighter-BDJkbu1d.js.gz +0 -0
- package/dist/web/assets/commit-settings-panel-j2yqctr_.js.br +0 -0
- package/dist/web/assets/commit-settings-panel-j2yqctr_.js.gz +0 -0
- package/dist/web/assets/cynefinDiagram-MW4NZA55-D9tIBEvv.js +0 -62
- package/dist/web/assets/cynefinDiagram-MW4NZA55-D9tIBEvv.js.br +0 -0
- package/dist/web/assets/cynefinDiagram-MW4NZA55-D9tIBEvv.js.gz +0 -0
- package/dist/web/assets/diagram-7IWD3JNH-BfnXF08-.js.br +0 -0
- package/dist/web/assets/diagram-7IWD3JNH-BfnXF08-.js.gz +0 -0
- package/dist/web/assets/diagram-B4RE2ZJO-Ct90H1dH.js +0 -3
- package/dist/web/assets/diagram-B4RE2ZJO-Ct90H1dH.js.br +0 -0
- package/dist/web/assets/diagram-B4RE2ZJO-Ct90H1dH.js.gz +0 -0
- package/dist/web/assets/diagram-LBJQPF4R-BlYQtbyl.js +0 -24
- package/dist/web/assets/diagram-LBJQPF4R-BlYQtbyl.js.br +0 -0
- package/dist/web/assets/diagram-LBJQPF4R-BlYQtbyl.js.gz +0 -0
- package/dist/web/assets/diagram-Q27KOJAE-CDWObxjb.js +0 -24
- package/dist/web/assets/diagram-Q27KOJAE-CDWObxjb.js.br +0 -0
- package/dist/web/assets/diagram-Q27KOJAE-CDWObxjb.js.gz +0 -0
- package/dist/web/assets/diagram-UB23O5K3-DJnddvpy.js +0 -41
- package/dist/web/assets/diagram-UB23O5K3-DJnddvpy.js.br +0 -0
- package/dist/web/assets/diagram-UB23O5K3-DJnddvpy.js.gz +0 -0
- package/dist/web/assets/dist-Ci1kbFbB.js.br +0 -0
- package/dist/web/assets/dist-Ci1kbFbB.js.gz +0 -0
- package/dist/web/assets/ebnfDiagram-BXEA7PRR-D_b18zMS.js +0 -1
- package/dist/web/assets/ebnfDiagram-BXEA7PRR-D_b18zMS.js.br +0 -0
- package/dist/web/assets/ebnfDiagram-BXEA7PRR-D_b18zMS.js.gz +0 -0
- package/dist/web/assets/erDiagram-JOGREHBK-BOKR1NS3.js.br +0 -0
- package/dist/web/assets/file-review-dialog-DvgO1Ae8.js.br +0 -0
- package/dist/web/assets/file-review-dialog-DvgO1Ae8.js.gz +0 -0
- package/dist/web/assets/flowDiagram-UKHOOZJN-CEamRwMR.js.br +0 -0
- package/dist/web/assets/flowDiagram-UKHOOZJN-CEamRwMR.js.gz +0 -0
- package/dist/web/assets/git-commit-review-D5ge3jwI.js.br +0 -0
- package/dist/web/assets/git-commit-review-D5ge3jwI.js.gz +0 -0
- package/dist/web/assets/git-history-panel-DsGqR_Zc.js.br +0 -0
- package/dist/web/assets/git-history-panel-DsGqR_Zc.js.gz +0 -0
- package/dist/web/assets/gitGraphDiagram-DS77QQ5N-CuMvIZdK.js +0 -106
- package/dist/web/assets/gitGraphDiagram-DS77QQ5N-CuMvIZdK.js.br +0 -0
- package/dist/web/assets/gitGraphDiagram-DS77QQ5N-CuMvIZdK.js.gz +0 -0
- package/dist/web/assets/global-search-dialog-JzDBjqX4.js.br +0 -0
- package/dist/web/assets/global-search-dialog-JzDBjqX4.js.gz +0 -0
- package/dist/web/assets/global-settings-about-CULXi1Dn.js.br +0 -0
- package/dist/web/assets/global-settings-about-CULXi1Dn.js.gz +0 -0
- package/dist/web/assets/global-settings-page-AK_j6aZC.js +0 -2
- package/dist/web/assets/global-settings-page-AK_j6aZC.js.br +0 -0
- package/dist/web/assets/global-settings-page-AK_j6aZC.js.gz +0 -0
- package/dist/web/assets/global-settings-pets-hPG36aUL.js.br +0 -0
- package/dist/web/assets/global-settings-pets-hPG36aUL.js.gz +0 -0
- package/dist/web/assets/highlighted-body-OFNGDK62-CoO9fhim.js.br +0 -0
- package/dist/web/assets/highlighted-body-OFNGDK62-CoO9fhim.js.gz +0 -0
- package/dist/web/assets/history-task-timeline-CQphWf0m.js.br +0 -0
- package/dist/web/assets/history-task-timeline-CQphWf0m.js.gz +0 -0
- package/dist/web/assets/image-preview-Dtx8uVmp.js.br +0 -0
- package/dist/web/assets/image-preview-Dtx8uVmp.js.gz +0 -0
- package/dist/web/assets/image-preview-content-zLsEpLCA.js.br +0 -0
- package/dist/web/assets/image-preview-content-zLsEpLCA.js.gz +0 -0
- package/dist/web/assets/index-BUv6KmcO.css +0 -2
- package/dist/web/assets/index-BUv6KmcO.css.br +0 -0
- package/dist/web/assets/index-BUv6KmcO.css.gz +0 -0
- package/dist/web/assets/index-DR8WqP5v.js +0 -4
- package/dist/web/assets/index-DR8WqP5v.js.br +0 -0
- package/dist/web/assets/index-DR8WqP5v.js.gz +0 -0
- package/dist/web/assets/infoDiagram-6WML65LV-DegAUKx4.js +0 -2
- package/dist/web/assets/infoDiagram-6WML65LV-DegAUKx4.js.br +0 -0
- package/dist/web/assets/infoDiagram-6WML65LV-DegAUKx4.js.gz +0 -0
- package/dist/web/assets/initial-deps-Be-R---T.js.br +0 -0
- package/dist/web/assets/initial-deps-Be-R---T.js.gz +0 -0
- package/dist/web/assets/initial-deps-DRuEePWq.js +0 -2
- package/dist/web/assets/initial-deps-DRuEePWq.js.br +0 -0
- package/dist/web/assets/initial-deps-DRuEePWq.js.gz +0 -0
- package/dist/web/assets/installed-skills-pane-DBJ_KuXN.js.br +0 -0
- package/dist/web/assets/installed-skills-pane-DBJ_KuXN.js.gz +0 -0
- package/dist/web/assets/ishikawaDiagram-WSZJBQD7-CcWhd8w9.js.br +0 -0
- package/dist/web/assets/ishikawaDiagram-WSZJBQD7-CcWhd8w9.js.gz +0 -0
- package/dist/web/assets/kanban-definition-27J2QSJJ-DEkge27F.js.br +0 -0
- package/dist/web/assets/kanban-definition-27J2QSJJ-DEkge27F.js.gz +0 -0
- package/dist/web/assets/lazy-message-response-3j-D3CVS.js +0 -2
- package/dist/web/assets/lazy-message-response-3j-D3CVS.js.br +0 -0
- package/dist/web/assets/lazy-message-response-3j-D3CVS.js.gz +0 -0
- package/dist/web/assets/mcp-management-pane-16qr0aVZ.js.br +0 -0
- package/dist/web/assets/mcp-management-pane-16qr0aVZ.js.gz +0 -0
- package/dist/web/assets/mermaid-GHXKKRXX-kGjGANId.js +0 -1
- package/dist/web/assets/mermaid-GHXKKRXX-kGjGANId.js.br +0 -0
- package/dist/web/assets/mermaid-GHXKKRXX-kGjGANId.js.gz +0 -0
- package/dist/web/assets/message-response-DWYIVlqg.js +0 -188
- package/dist/web/assets/message-response-DWYIVlqg.js.br +0 -0
- package/dist/web/assets/message-response-DWYIVlqg.js.gz +0 -0
- package/dist/web/assets/mindmap-definition-FAOFIHXS-DubrGaue.js.br +0 -0
- package/dist/web/assets/mindmap-definition-FAOFIHXS-DubrGaue.js.gz +0 -0
- package/dist/web/assets/official-plugins-pane-vADxh_le.js.br +0 -0
- package/dist/web/assets/official-plugins-pane-vADxh_le.js.gz +0 -0
- package/dist/web/assets/patch-diff-viewer-C5hjChAK.js +0 -1409
- package/dist/web/assets/patch-diff-viewer-C5hjChAK.js.br +0 -0
- package/dist/web/assets/patch-diff-viewer-C5hjChAK.js.gz +0 -0
- package/dist/web/assets/pdf-preview-BG-XpATo.js.br +0 -0
- package/dist/web/assets/pdf-preview-BG-XpATo.js.gz +0 -0
- package/dist/web/assets/pegDiagram-VL7TDLO6-CJodWN8I.js +0 -1
- package/dist/web/assets/pegDiagram-VL7TDLO6-CJodWN8I.js.br +0 -0
- package/dist/web/assets/pegDiagram-VL7TDLO6-CJodWN8I.js.gz +0 -0
- package/dist/web/assets/personalization-settings-panel-Br7qXDQ7.js.br +0 -0
- package/dist/web/assets/personalization-settings-panel-Br7qXDQ7.js.gz +0 -0
- package/dist/web/assets/pieDiagram-7S7Q4E2Y-CHATPeJh.js +0 -39
- package/dist/web/assets/pieDiagram-7S7Q4E2Y-CHATPeJh.js.br +0 -0
- package/dist/web/assets/pieDiagram-7S7Q4E2Y-CHATPeJh.js.gz +0 -0
- package/dist/web/assets/project-file-popup-page-CmNJLTSV.js.br +0 -0
- package/dist/web/assets/project-file-popup-page-CmNJLTSV.js.gz +0 -0
- package/dist/web/assets/project-source-panel-ze7jsbMy.js +0 -2
- package/dist/web/assets/project-source-panel-ze7jsbMy.js.br +0 -0
- package/dist/web/assets/project-source-panel-ze7jsbMy.js.gz +0 -0
- package/dist/web/assets/prompt-input-Brfimssc.js.br +0 -0
- package/dist/web/assets/prompt-input-Brfimssc.js.gz +0 -0
- package/dist/web/assets/prompt-reference-token-BW8a7fO2.js +0 -3
- package/dist/web/assets/prompt-reference-token-BW8a7fO2.js.br +0 -0
- package/dist/web/assets/prompt-reference-token-BW8a7fO2.js.gz +0 -0
- package/dist/web/assets/railroadDiagram-AXF67PYL-BOP9pMNb.js +0 -1
- package/dist/web/assets/railroadDiagram-AXF67PYL-BOP9pMNb.js.br +0 -0
- package/dist/web/assets/railroadDiagram-AXF67PYL-BOP9pMNb.js.gz +0 -0
- package/dist/web/assets/requirementDiagram-LRYGKXZP-CG8KWt_j.js.br +0 -0
- package/dist/web/assets/requirementDiagram-LRYGKXZP-CG8KWt_j.js.gz +0 -0
- package/dist/web/assets/scheduled-task-date-time-picker-DeOtns9O.js.br +0 -0
- package/dist/web/assets/scheduled-task-date-time-picker-DeOtns9O.js.gz +0 -0
- package/dist/web/assets/scheduled-task-floating-ui~scheduled-task-date-time-picker-CbWhx_7u.js.br +0 -0
- package/dist/web/assets/scheduled-task-floating-ui~scheduled-task-date-time-picker-CbWhx_7u.js.gz +0 -0
- package/dist/web/assets/scheduled-tasks-container-a34CrlrM.js +0 -2
- package/dist/web/assets/scheduled-tasks-container-a34CrlrM.js.br +0 -0
- package/dist/web/assets/scheduled-tasks-container-a34CrlrM.js.gz +0 -0
- package/dist/web/assets/sequenceDiagram-SI44F4Z6-DbZoTul2.js.br +0 -0
- package/dist/web/assets/sequenceDiagram-SI44F4Z6-DbZoTul2.js.gz +0 -0
- package/dist/web/assets/sheet-B9MDuGoF.js.br +0 -0
- package/dist/web/assets/sheet-B9MDuGoF.js.gz +0 -0
- package/dist/web/assets/shiki-bundle-BlbGsyMZ.js.br +0 -0
- package/dist/web/assets/shiki-bundle-BlbGsyMZ.js.gz +0 -0
- package/dist/web/assets/skills-market-container-CWO3CeMr.js.br +0 -0
- package/dist/web/assets/skills-market-container-CWO3CeMr.js.gz +0 -0
- package/dist/web/assets/split-workspace-menu-content-rImPq6wj.js.br +0 -0
- package/dist/web/assets/split-workspace-menu-content-rImPq6wj.js.gz +0 -0
- package/dist/web/assets/stateDiagram-OKZ733FA-BBZnBYr0.js +0 -1
- package/dist/web/assets/stateDiagram-OKZ733FA-BBZnBYr0.js.br +0 -0
- package/dist/web/assets/stateDiagram-OKZ733FA-BBZnBYr0.js.gz +0 -0
- package/dist/web/assets/stateDiagram-v2-UEYNNEHI-DrsX6D2d.js +0 -1
- package/dist/web/assets/stateDiagram-v2-UEYNNEHI-DrsX6D2d.js.br +0 -1
- package/dist/web/assets/stateDiagram-v2-UEYNNEHI-DrsX6D2d.js.gz +0 -0
- package/dist/web/assets/swimlanesDiagram-ULZ7WXOC-RILHYzJF.js.br +0 -0
- package/dist/web/assets/swimlanesDiagram-ULZ7WXOC-RILHYzJF.js.gz +0 -0
- package/dist/web/assets/third-party-marketplace-pane-DKWMNoa3.js.br +0 -0
- package/dist/web/assets/third-party-marketplace-pane-DKWMNoa3.js.gz +0 -0
- package/dist/web/assets/timeline-definition-Z64GVDOM-BQMes8Ld.js.br +0 -0
- package/dist/web/assets/timeline-definition-Z64GVDOM-BQMes8Ld.js.gz +0 -0
- package/dist/web/assets/vennDiagram-T6HMQDX7-qBMuOWPn.js.br +0 -0
- package/dist/web/assets/vennDiagram-T6HMQDX7-qBMuOWPn.js.gz +0 -0
- package/dist/web/assets/wardleyDiagram-T6FBY63Y-BXVFrJeX.js.br +0 -0
- package/dist/web/assets/wardleyDiagram-T6FBY63Y-BXVFrJeX.js.gz +0 -0
- package/dist/web/assets/workbench-inspector-changes-D5k96_nR.js +0 -2
- package/dist/web/assets/workbench-inspector-changes-D5k96_nR.js.br +0 -0
- package/dist/web/assets/workbench-inspector-changes-D5k96_nR.js.gz +0 -0
- package/dist/web/assets/workbench-pet-canvas-BM6S31jL.js.br +0 -0
- package/dist/web/assets/workbench-pet-canvas-BM6S31jL.js.gz +0 -0
- package/dist/web/assets/workbench-shell-DEH5FG9a.js +0 -14
- package/dist/web/assets/workbench-shell-DEH5FG9a.js.br +0 -0
- package/dist/web/assets/workbench-shell-DEH5FG9a.js.gz +0 -0
- package/dist/web/assets/xychartDiagram-ELKLHX3M-DT2u1V83.js.br +0 -0
- package/dist/web/assets/xychartDiagram-ELKLHX3M-DT2u1V83.js.gz +0 -0
- /package/dist/web/assets/{scheduled-task-floating-ui~index~workbench-shell~workbench-inspector-changes~git-history-pa~l4z6ozb1-ClgveiMa.js → scheduled-task-floating-ui~index~workbench-shell~workbench-inspector-changes~project-source~c6tt9j64-ClgveiMa.js} +0 -0
- /package/dist/web/assets/{scheduled-task-floating-ui~index~workbench-shell~workbench-inspector-changes~git-history-pa~l4z6ozb1-ClgveiMa.js.br → scheduled-task-floating-ui~index~workbench-shell~workbench-inspector-changes~project-source~c6tt9j64-ClgveiMa.js.br} +0 -0
- /package/dist/web/assets/{scheduled-task-floating-ui~index~workbench-shell~workbench-inspector-changes~git-history-pa~l4z6ozb1-ClgveiMa.js.gz → scheduled-task-floating-ui~index~workbench-shell~workbench-inspector-changes~project-source~c6tt9j64-ClgveiMa.js.gz} +0 -0
|
@@ -1,601 +1,78 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
import { mkdirSync } from 'fs';
|
|
4
|
-
import { resolve } from 'path';
|
|
5
|
-
import { workerData, parentPort } from 'worker_threads';
|
|
6
|
-
import Database from 'better-sqlite3';
|
|
7
|
-
|
|
8
|
-
createRequire(import.meta.url);
|
|
9
|
-
|
|
10
|
-
// packages/server/src/approval-policy-persistence.js
|
|
11
|
-
var GRANULAR_FIELDS = [
|
|
12
|
-
"mcp_elicitations",
|
|
13
|
-
"request_permissions",
|
|
14
|
-
"rules",
|
|
15
|
-
"sandbox_approval",
|
|
16
|
-
"skill_approval"
|
|
17
|
-
];
|
|
18
|
-
function parseGranularApprovalPolicy(value) {
|
|
19
|
-
if (typeof value !== "object" || value === null || Array.isArray(value)) {
|
|
20
|
-
throw new Error("Stored approval policy is invalid");
|
|
21
|
-
}
|
|
22
|
-
const outerKeys = Object.keys(value);
|
|
23
|
-
const granular = value.granular;
|
|
24
|
-
if (outerKeys.length !== 1 || outerKeys[0] !== "granular" || typeof granular !== "object" || granular === null || Array.isArray(granular) || Object.keys(granular).length !== GRANULAR_FIELDS.length || GRANULAR_FIELDS.some((field) => typeof granular[field] !== "boolean")) {
|
|
25
|
-
throw new Error("Stored granular approval policy is invalid");
|
|
26
|
-
}
|
|
27
|
-
return { granular: Object.fromEntries(GRANULAR_FIELDS.map((field) => [field, granular[field]])) };
|
|
28
|
-
}
|
|
29
|
-
function deserializeApprovalPolicy(serialized, scope) {
|
|
30
|
-
if (serialized === "on-request" || serialized === "never") {
|
|
31
|
-
return serialized;
|
|
32
|
-
}
|
|
33
|
-
if (scope === "turn" && serialized === "untrusted") {
|
|
34
|
-
return serialized;
|
|
35
|
-
}
|
|
36
|
-
if (typeof serialized !== "string" || !serialized.startsWith("{")) {
|
|
37
|
-
throw new Error(`Stored ${scope} approval policy is invalid`);
|
|
38
|
-
}
|
|
39
|
-
try {
|
|
40
|
-
return parseGranularApprovalPolicy(JSON.parse(serialized));
|
|
41
|
-
} catch (error) {
|
|
42
|
-
if (error instanceof SyntaxError) {
|
|
43
|
-
throw new Error(`Stored ${scope} approval policy JSON is invalid`, { cause: error });
|
|
44
|
-
}
|
|
45
|
-
throw error;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
function serializeApprovalPolicy(policy) {
|
|
49
|
-
return typeof policy === "string" ? policy : JSON.stringify(parseGranularApprovalPolicy(policy));
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
// packages/server/src/sqlite-state-worker-bootstrap.js
|
|
53
|
-
function projectFromRows(row, rootRows) {
|
|
54
|
-
if (row === void 0) {
|
|
55
|
-
return void 0;
|
|
56
|
-
}
|
|
57
|
-
const roots = rootRows.map((root) => ({ id: root.root_id, path: root.path }));
|
|
58
|
-
if (roots.length === 0) {
|
|
59
|
-
throw new Error(`Project ${row.id} has no stored roots`);
|
|
60
|
-
}
|
|
61
|
-
return {
|
|
62
|
-
createdAt: row.created_at,
|
|
63
|
-
id: row.id,
|
|
64
|
-
name: row.name,
|
|
65
|
-
roots
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
function projectsFromRows(projectRows, rootRows) {
|
|
69
|
-
const rootsByProject = /* @__PURE__ */ new Map();
|
|
70
|
-
for (const root of rootRows) {
|
|
71
|
-
const roots = rootsByProject.get(root.project_id) ?? [];
|
|
72
|
-
roots.push(root);
|
|
73
|
-
rootsByProject.set(root.project_id, roots);
|
|
74
|
-
}
|
|
75
|
-
return projectRows.map(
|
|
76
|
-
(project) => projectFromRows(project, rootsByProject.get(project.id) ?? [])
|
|
77
|
-
);
|
|
78
|
-
}
|
|
79
|
-
function projectDefaultsFromRow(row) {
|
|
80
|
-
if (row === void 0) {
|
|
81
|
-
return void 0;
|
|
82
|
-
}
|
|
83
|
-
return {
|
|
84
|
-
approvalPolicy: deserializeApprovalPolicy(row.approval_policy, "turn"),
|
|
85
|
-
approvalsReviewer: row.approvals_reviewer,
|
|
86
|
-
fastMode: row.fast_mode === 1,
|
|
87
|
-
model: row.model,
|
|
88
|
-
reasoningEffort: row.reasoning_effort,
|
|
89
|
-
sandboxMode: row.sandbox_mode
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
function taskSettingsFromRow(row) {
|
|
93
|
-
if (row === void 0) {
|
|
94
|
-
return void 0;
|
|
95
|
-
}
|
|
96
|
-
return {
|
|
97
|
-
approvalPolicy: deserializeApprovalPolicy(row.approval_policy, "turn"),
|
|
98
|
-
approvalsReviewer: row.approvals_reviewer,
|
|
99
|
-
model: row.model,
|
|
100
|
-
reasoningEffort: row.reasoning_effort,
|
|
101
|
-
sandboxMode: row.sandbox_mode
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
function globalSettingsFromRow(row) {
|
|
105
|
-
if (row === void 0) {
|
|
106
|
-
return void 0;
|
|
107
|
-
}
|
|
108
|
-
return {
|
|
109
|
-
approvalPolicy: deserializeApprovalPolicy(row.approval_policy, "global"),
|
|
110
|
-
approvalsReviewer: row.approvals_reviewer,
|
|
111
|
-
commitMessageModel: row.commit_message_model,
|
|
112
|
-
commitMessagePrompt: row.commit_message_prompt,
|
|
113
|
-
defaultOpenAppId: row.default_open_app_id,
|
|
114
|
-
fastMode: row.fast_mode === 1,
|
|
115
|
-
followUpBehavior: row.follow_up_behavior,
|
|
116
|
-
model: row.model,
|
|
117
|
-
pet: { enabled: row.pet_enabled === 1, selectedPetId: row.pet_id },
|
|
118
|
-
reasoningEffort: row.reasoning_effort,
|
|
119
|
-
sandboxMode: row.sandbox_mode
|
|
120
|
-
};
|
|
121
|
-
}
|
|
122
|
-
function providerConnectionFromRow(row) {
|
|
123
|
-
if (row === void 0) {
|
|
124
|
-
return void 0;
|
|
125
|
-
}
|
|
126
|
-
return {
|
|
127
|
-
customBaseUrl: row.custom_base_url,
|
|
128
|
-
customModelsJson: row.custom_models_json,
|
|
129
|
-
mode: row.mode,
|
|
130
|
-
updatedAt: row.updated_at
|
|
131
|
-
};
|
|
132
|
-
}
|
|
133
|
-
function hasTable(database2, tableName) {
|
|
134
|
-
return database2.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = ?").get(tableName) !== void 0;
|
|
135
|
-
}
|
|
136
|
-
function configureDatabase(database2) {
|
|
137
|
-
database2.pragma("journal_mode = WAL");
|
|
138
|
-
database2.pragma("foreign_keys = ON");
|
|
139
|
-
database2.pragma("synchronous = NORMAL");
|
|
140
|
-
database2.pragma("busy_timeout = 5000");
|
|
141
|
-
}
|
|
142
|
-
function readMigrationVersion(database2) {
|
|
143
|
-
if (!hasTable(database2, "schema_migrations")) {
|
|
144
|
-
return 0;
|
|
145
|
-
}
|
|
146
|
-
return database2.prepare("SELECT COALESCE(MAX(version), 0) AS version FROM schema_migrations").get().version;
|
|
147
|
-
}
|
|
148
|
-
function runMigrations(database2, migrations, onMigrationApplied = () => {
|
|
149
|
-
}) {
|
|
150
|
-
database2.exec(`
|
|
1
|
+
import {createRequire}from'node:module';import'./chunk-YXJGRSCL.js';import {mkdirSync}from'fs';import {resolve}from'path';import {workerData,parentPort}from'worker_threads';import G from'better-sqlite3';createRequire(import.meta.url);
|
|
2
|
+
var v=["mcp_elicitations","request_permissions","rules","sandbox_approval","skill_approval"];function k(e){if(typeof e!="object"||e===null||Array.isArray(e))throw new Error("Stored approval policy is invalid");let s=Object.keys(e),n=e.granular;if(s.length!==1||s[0]!=="granular"||typeof n!="object"||n===null||Array.isArray(n)||Object.keys(n).length!==v.length||v.some(o=>typeof n[o]!="boolean"))throw new Error("Stored granular approval policy is invalid");return {granular:Object.fromEntries(v.map(o=>[o,n[o]]))}}function S(e,s){if(e==="on-request"||e==="never"||s==="turn"&&e==="untrusted")return e;if(typeof e!="string"||!e.startsWith("{"))throw new Error(`Stored ${s} approval policy is invalid`);try{return k(JSON.parse(e))}catch(n){throw n instanceof SyntaxError?new Error(`Stored ${s} approval policy JSON is invalid`,{cause:n}):n}}function R(e){return typeof e=="string"?e:JSON.stringify(k(e))}function h(e,s){if(e===void 0)return;let n=s.map(o=>({id:o.root_id,path:o.path}));if(n.length===0)throw new Error(`Project ${e.id} has no stored roots`);return {createdAt:e.created_at,id:e.id,name:e.name,roots:n}}function I(e,s){let n=new Map;for(let o of s){let a=n.get(o.project_id)??[];a.push(o),n.set(o.project_id,a);}return e.map(o=>h(o,n.get(o.id)??[]))}function L(e){if(e!==void 0)return {approvalPolicy:S(e.approval_policy,"turn"),approvalsReviewer:e.approvals_reviewer,fastMode:e.fast_mode===1,model:e.model,reasoningEffort:e.reasoning_effort,sandboxMode:e.sandbox_mode}}function P(e){if(e!==void 0)return {approvalPolicy:S(e.approval_policy,"turn"),approvalsReviewer:e.approvals_reviewer,model:e.model,reasoningEffort:e.reasoning_effort,sandboxMode:e.sandbox_mode}}function D(e){if(e!==void 0)return {approvalPolicy:S(e.approval_policy,"global"),approvalsReviewer:e.approvals_reviewer,commitMessageModel:e.commit_message_model,commitMessagePrompt:e.commit_message_prompt,modelContextWindow:null,defaultOpenAppId:e.default_open_app_id,fastMode:e.fast_mode===1,followUpBehavior:e.follow_up_behavior,model:e.model,pet:{enabled:e.pet_enabled===1,selectedPetId:e.pet_id},reasoningEffort:e.reasoning_effort,sandboxMode:e.sandbox_mode}}function w(e){if(e!==void 0)return {customBaseUrl:e.custom_base_url,customModelsJson:e.custom_models_json,mode:e.mode,updatedAt:e.updated_at}}function T(e,s){return e.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = ?").get(s)!==void 0}function M(e){e.pragma("journal_mode = WAL"),e.pragma("foreign_keys = ON"),e.pragma("synchronous = NORMAL"),e.pragma("busy_timeout = 5000");}function C(e){return T(e,"schema_migrations")?e.prepare("SELECT COALESCE(MAX(version), 0) AS version FROM schema_migrations").get().version:0}function y(e,s,n=()=>{}){e.exec(`
|
|
151
3
|
CREATE TABLE IF NOT EXISTS schema_migrations (
|
|
152
4
|
version INTEGER PRIMARY KEY,
|
|
153
5
|
name TEXT NOT NULL,
|
|
154
6
|
applied_at TEXT NOT NULL
|
|
155
7
|
) STRICT;
|
|
156
|
-
`);
|
|
157
|
-
|
|
158
|
-
database2.prepare("SELECT version FROM schema_migrations").all().map((row) => row.version)
|
|
159
|
-
);
|
|
160
|
-
let previousVersion = 0;
|
|
161
|
-
for (const migration of migrations) {
|
|
162
|
-
if (!Number.isInteger(migration.version) || migration.version <= previousVersion || typeof migration.name !== "string" || typeof migration.sql !== "string") {
|
|
163
|
-
throw new Error("Invalid SQLite migration definition");
|
|
164
|
-
}
|
|
165
|
-
previousVersion = migration.version;
|
|
166
|
-
if (applied.has(migration.version)) {
|
|
167
|
-
continue;
|
|
168
|
-
}
|
|
169
|
-
database2.transaction(() => {
|
|
170
|
-
database2.exec(migration.sql);
|
|
171
|
-
onMigrationApplied(migration.version);
|
|
172
|
-
database2.prepare("INSERT INTO schema_migrations (version, name, applied_at) VALUES (?, ?, ?)").run(migration.version, migration.name, (/* @__PURE__ */ new Date()).toISOString());
|
|
173
|
-
})();
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
function initializeProjectSourceMigration(database2, previousMigrationVersion) {
|
|
177
|
-
if (!hasTable(database2, "project_source_migration")) {
|
|
178
|
-
return;
|
|
179
|
-
}
|
|
180
|
-
database2.prepare(
|
|
181
|
-
`INSERT OR IGNORE INTO project_source_migration
|
|
182
|
-
(id, completed, recover_unassigned) VALUES (1, 0, ?)`
|
|
183
|
-
).run(previousMigrationVersion === 14 ? 1 : 0);
|
|
184
|
-
}
|
|
185
|
-
function ensureGlobalSettingsCompatibility(database2) {
|
|
186
|
-
if (!hasTable(database2, "global_settings")) {
|
|
187
|
-
return;
|
|
188
|
-
}
|
|
189
|
-
const columns = new Set(
|
|
190
|
-
database2.prepare("PRAGMA table_info(global_settings)").all().map((column) => column.name)
|
|
191
|
-
);
|
|
192
|
-
database2.transaction(() => {
|
|
193
|
-
if (!columns.has("fast_mode")) {
|
|
194
|
-
database2.exec(`
|
|
8
|
+
`);let o=new Set(e.prepare("SELECT version FROM schema_migrations").all().map(i=>i.version)),a=0;for(let i of s){if(!Number.isInteger(i.version)||i.version<=a||typeof i.name!="string"||typeof i.sql!="string")throw new Error("Invalid SQLite migration definition");a=i.version,!o.has(i.version)&&e.transaction(()=>{e.exec(i.sql),n(i.version),e.prepare("INSERT INTO schema_migrations (version, name, applied_at) VALUES (?, ?, ?)").run(i.version,i.name,new Date().toISOString());})();}}function A(e,s){T(e,"project_source_migration")&&e.prepare(`INSERT OR IGNORE INTO project_source_migration
|
|
9
|
+
(id, completed, recover_unassigned) VALUES (1, 0, ?)`).run(s===14?1:0);}function F(e){if(!T(e,"global_settings"))return;let s=new Set(e.prepare("PRAGMA table_info(global_settings)").all().map(n=>n.name));e.transaction(()=>{s.has("fast_mode")||e.exec(`
|
|
195
10
|
ALTER TABLE global_settings
|
|
196
11
|
ADD COLUMN fast_mode INTEGER NOT NULL DEFAULT 0
|
|
197
12
|
CHECK (fast_mode IN (0, 1));
|
|
198
|
-
`)
|
|
199
|
-
}
|
|
200
|
-
if (!columns.has("commit_message_reasoning_effort")) {
|
|
201
|
-
database2.exec(`
|
|
13
|
+
`),s.has("commit_message_reasoning_effort")||e.exec(`
|
|
202
14
|
ALTER TABLE global_settings
|
|
203
15
|
ADD COLUMN commit_message_reasoning_effort TEXT NOT NULL DEFAULT '';
|
|
204
16
|
UPDATE global_settings
|
|
205
17
|
SET commit_message_reasoning_effort = reasoning_effort;
|
|
206
|
-
`)
|
|
207
|
-
}
|
|
208
|
-
if (!columns.has("pet_enabled")) {
|
|
209
|
-
database2.exec(`
|
|
18
|
+
`),s.has("pet_enabled")||e.exec(`
|
|
210
19
|
ALTER TABLE global_settings
|
|
211
20
|
ADD COLUMN pet_enabled INTEGER NOT NULL DEFAULT 0
|
|
212
21
|
CHECK (pet_enabled IN (0, 1));
|
|
213
|
-
`);
|
|
214
|
-
}
|
|
215
|
-
if (!columns.has("pet_id")) {
|
|
216
|
-
database2.exec("ALTER TABLE global_settings ADD COLUMN pet_id TEXT;");
|
|
217
|
-
}
|
|
218
|
-
})();
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
// packages/server/src/sqlite-task-queue-worker.js
|
|
222
|
-
function queueRecord(row) {
|
|
223
|
-
return {
|
|
224
|
-
clientUserMessageId: row.client_user_message_id,
|
|
225
|
-
id: row.id,
|
|
226
|
-
inputJson: row.input_json,
|
|
227
|
-
projectId: row.project_id,
|
|
228
|
-
status: row.status,
|
|
229
|
-
taskId: row.task_id,
|
|
230
|
-
...row.execution_json === null ? {} : { executionJson: row.execution_json }
|
|
231
|
-
};
|
|
232
|
-
}
|
|
233
|
-
function createTaskQueueOperations(database2) {
|
|
234
|
-
let statements;
|
|
235
|
-
const getStatements = () => {
|
|
236
|
-
if (statements !== void 0) return statements;
|
|
237
|
-
const list = database2.prepare(`
|
|
22
|
+
`),s.has("pet_id")||e.exec("ALTER TABLE global_settings ADD COLUMN pet_id TEXT;");})();}function N(e){return {clientUserMessageId:e.client_user_message_id,id:e.id,inputJson:e.input_json,projectId:e.project_id,status:e.status,taskId:e.task_id,...e.execution_json===null?{}:{executionJson:e.execution_json}}}function U(e){let s,n=()=>{if(s!==void 0)return s;let o=e.prepare(`
|
|
238
23
|
SELECT project_id, task_id, id, client_user_message_id, input_json, status, execution_json
|
|
239
24
|
FROM task_queue WHERE project_id = ? AND task_id = ? ORDER BY position
|
|
240
|
-
`);
|
|
241
|
-
const move = database2.prepare(
|
|
242
|
-
"UPDATE task_queue SET position = ? WHERE project_id = ? AND task_id = ? AND id = ?"
|
|
243
|
-
);
|
|
244
|
-
const reorder = database2.transaction((projectId, taskId, queuedSubmissionIds) => {
|
|
245
|
-
const currentIds = list.all(projectId, taskId).map((row) => row.id);
|
|
246
|
-
const requestedIds = new Set(queuedSubmissionIds);
|
|
247
|
-
if (currentIds.length !== queuedSubmissionIds.length || requestedIds.size !== currentIds.length || currentIds.some((id) => !requestedIds.has(id))) {
|
|
248
|
-
throw new Error("Task queue order must contain every queued submission exactly once");
|
|
249
|
-
}
|
|
250
|
-
queuedSubmissionIds.forEach((id, index) => move.run(-index - 1, projectId, taskId, id));
|
|
251
|
-
queuedSubmissionIds.forEach((id, index) => move.run(index, projectId, taskId, id));
|
|
252
|
-
});
|
|
253
|
-
statements = {
|
|
254
|
-
insert: database2.prepare(`
|
|
25
|
+
`),a=e.prepare("UPDATE task_queue SET position = ? WHERE project_id = ? AND task_id = ? AND id = ?"),i=e.transaction((c,_,d)=>{let u=o.all(c,_).map(t=>t.id),r=new Set(d);if(u.length!==d.length||r.size!==u.length||u.some(t=>!r.has(t)))throw new Error("Task queue order must contain every queued submission exactly once");d.forEach((t,p)=>a.run(-p-1,c,_,t)),d.forEach((t,p)=>a.run(p,c,_,t));});return s={insert:e.prepare(`
|
|
255
26
|
INSERT INTO task_queue (
|
|
256
27
|
project_id, task_id, id, client_user_message_id, input_json, status, position, updated_at, execution_json
|
|
257
28
|
) VALUES (?, ?, ?, ?, ?, ?, (
|
|
258
29
|
SELECT COALESCE(MAX(position) + 1, 0)
|
|
259
30
|
FROM task_queue WHERE project_id = ? AND task_id = ?
|
|
260
31
|
), ?, ?)
|
|
261
|
-
`),
|
|
262
|
-
list,
|
|
263
|
-
remove: database2.prepare(
|
|
264
|
-
"DELETE FROM task_queue WHERE project_id = ? AND task_id = ? AND id = ?"
|
|
265
|
-
),
|
|
266
|
-
reorder,
|
|
267
|
-
update: database2.prepare(`
|
|
32
|
+
`),list:o,remove:e.prepare("DELETE FROM task_queue WHERE project_id = ? AND task_id = ? AND id = ?"),reorder:i,update:e.prepare(`
|
|
268
33
|
UPDATE task_queue SET input_json = ?, status = ?, updated_at = ?
|
|
269
34
|
WHERE project_id = ? AND task_id = ? AND id = ? AND execution_json IS NULL
|
|
270
|
-
`),
|
|
271
|
-
execution: database2.prepare(`
|
|
35
|
+
`),execution:e.prepare(`
|
|
272
36
|
UPDATE task_queue SET execution_json = ?
|
|
273
37
|
WHERE project_id = ? AND task_id = ? AND id = ?
|
|
274
38
|
AND (? = 0 OR (execution_json IS NULL AND status = 'queued'))
|
|
275
|
-
`)
|
|
276
|
-
};
|
|
277
|
-
return statements;
|
|
278
|
-
};
|
|
279
|
-
return {
|
|
280
|
-
setTaskQueueExecution(payload) {
|
|
281
|
-
const { execution } = getStatements();
|
|
282
|
-
return execution.run(
|
|
283
|
-
payload.executionJson,
|
|
284
|
-
payload.projectId,
|
|
285
|
-
payload.taskId,
|
|
286
|
-
payload.id,
|
|
287
|
-
payload.claim ? 1 : 0
|
|
288
|
-
).changes > 0;
|
|
289
|
-
},
|
|
290
|
-
addTaskQueueRecord(payload) {
|
|
291
|
-
const { insert, list } = getStatements();
|
|
292
|
-
insert.run(
|
|
293
|
-
payload.projectId,
|
|
294
|
-
payload.taskId,
|
|
295
|
-
payload.id,
|
|
296
|
-
payload.clientUserMessageId,
|
|
297
|
-
payload.inputJson,
|
|
298
|
-
payload.status,
|
|
299
|
-
payload.projectId,
|
|
300
|
-
payload.taskId,
|
|
301
|
-
payload.updatedAt,
|
|
302
|
-
payload.execution === void 0 ? null : JSON.stringify(payload.execution)
|
|
303
|
-
);
|
|
304
|
-
return list.all(payload.projectId, payload.taskId).map(queueRecord).find((record) => record.id === payload.id);
|
|
305
|
-
},
|
|
306
|
-
deleteTaskQueueRecord(payload) {
|
|
307
|
-
const { remove } = getStatements();
|
|
308
|
-
return remove.run(payload.projectId, payload.taskId, payload.queuedSubmissionId).changes > 0;
|
|
309
|
-
},
|
|
310
|
-
listTaskQueueRecords(payload) {
|
|
311
|
-
const { list } = getStatements();
|
|
312
|
-
return list.all(payload.projectId, payload.taskId).map(queueRecord);
|
|
313
|
-
},
|
|
314
|
-
reorderTaskQueueRecords(payload) {
|
|
315
|
-
const { reorder } = getStatements();
|
|
316
|
-
reorder(payload.projectId, payload.taskId, payload.queuedSubmissionIds);
|
|
317
|
-
return null;
|
|
318
|
-
},
|
|
319
|
-
updateTaskQueueRecord(payload) {
|
|
320
|
-
const { list, update } = getStatements();
|
|
321
|
-
const changed = update.run(
|
|
322
|
-
payload.inputJson,
|
|
323
|
-
payload.status,
|
|
324
|
-
payload.updatedAt,
|
|
325
|
-
payload.projectId,
|
|
326
|
-
payload.taskId,
|
|
327
|
-
payload.queuedSubmissionId
|
|
328
|
-
).changes;
|
|
329
|
-
if (changed === 0) return void 0;
|
|
330
|
-
return list.all(payload.projectId, payload.taskId).map(queueRecord).find((record) => record.id === payload.queuedSubmissionId);
|
|
331
|
-
}
|
|
332
|
-
};
|
|
333
|
-
}
|
|
334
|
-
|
|
335
|
-
// packages/server/src/sqlite-state-worker-scheduled-tasks.js
|
|
336
|
-
function createScheduledTaskOperations(database2) {
|
|
337
|
-
const available = database2.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = ?").get("scheduled_task_state");
|
|
338
|
-
if (available === void 0) return {};
|
|
339
|
-
const read = database2.prepare("SELECT tasks_json FROM scheduled_task_state WHERE id = 1");
|
|
340
|
-
const write = database2.prepare(`
|
|
39
|
+
`)},s};return {setTaskQueueExecution(o){let{execution:a}=n();return a.run(o.executionJson,o.projectId,o.taskId,o.id,o.claim?1:0).changes>0},addTaskQueueRecord(o){let{insert:a,list:i}=n();return a.run(o.projectId,o.taskId,o.id,o.clientUserMessageId,o.inputJson,o.status,o.projectId,o.taskId,o.updatedAt,o.execution===void 0?null:JSON.stringify(o.execution)),i.all(o.projectId,o.taskId).map(N).find(c=>c.id===o.id)},deleteTaskQueueRecord(o){let{remove:a}=n();return a.run(o.projectId,o.taskId,o.queuedSubmissionId).changes>0},listTaskQueueRecords(o){let{list:a}=n();return a.all(o.projectId,o.taskId).map(N)},reorderTaskQueueRecords(o){let{reorder:a}=n();return a(o.projectId,o.taskId,o.queuedSubmissionIds),null},updateTaskQueueRecord(o){let{list:a,update:i}=n();if(i.run(o.inputJson,o.status,o.updatedAt,o.projectId,o.taskId,o.queuedSubmissionId).changes!==0)return a.all(o.projectId,o.taskId).map(N).find(_=>_.id===o.queuedSubmissionId)}}}function W(e){if(e.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = ?").get("scheduled_task_state")===void 0)return {};let n=e.prepare("SELECT tasks_json FROM scheduled_task_state WHERE id = 1"),o=e.prepare(`
|
|
341
40
|
INSERT INTO scheduled_task_state (id, tasks_json) VALUES (1, ?)
|
|
342
41
|
ON CONFLICT(id) DO UPDATE SET tasks_json = excluded.tasks_json
|
|
343
|
-
`)
|
|
344
|
-
const deleteAttachments = database2.prepare(
|
|
345
|
-
"DELETE FROM scheduled_task_attachments WHERE task_id = ?"
|
|
346
|
-
);
|
|
347
|
-
const insertAttachment = database2.prepare(`
|
|
42
|
+
`),a=e.prepare("DELETE FROM scheduled_task_attachments WHERE task_id = ?"),i=e.prepare(`
|
|
348
43
|
INSERT INTO scheduled_task_attachments (
|
|
349
44
|
task_id, attachment_id, project_id, kind, media_type, name, size, content
|
|
350
45
|
) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
351
|
-
`)
|
|
352
|
-
const listAttachments = database2.prepare(
|
|
353
|
-
"SELECT * FROM scheduled_task_attachments WHERE task_id = ? ORDER BY attachment_id"
|
|
354
|
-
);
|
|
355
|
-
const readAttachment = database2.prepare(`
|
|
46
|
+
`),c=e.prepare("SELECT * FROM scheduled_task_attachments WHERE task_id = ? ORDER BY attachment_id"),_=e.prepare(`
|
|
356
47
|
SELECT * FROM scheduled_task_attachments
|
|
357
48
|
WHERE project_id = ? AND attachment_id = ?
|
|
358
49
|
LIMIT 1
|
|
359
|
-
`)
|
|
360
|
-
const removeOrphanAttachments = database2.prepare(`
|
|
50
|
+
`),d=e.prepare(`
|
|
361
51
|
DELETE FROM scheduled_task_attachments
|
|
362
52
|
WHERE task_id NOT IN (SELECT json_extract(value, '$.id') FROM json_each(?))
|
|
363
|
-
`);
|
|
364
|
-
const replaceAttachments = (payload) => {
|
|
365
|
-
deleteAttachments.run(payload.taskId);
|
|
366
|
-
for (const item of payload.attachments) {
|
|
367
|
-
insertAttachment.run(
|
|
368
|
-
payload.taskId,
|
|
369
|
-
item.attachment.id,
|
|
370
|
-
payload.projectId,
|
|
371
|
-
item.attachment.kind,
|
|
372
|
-
item.attachment.mediaType,
|
|
373
|
-
item.attachment.name,
|
|
374
|
-
item.attachment.size,
|
|
375
|
-
item.content
|
|
376
|
-
);
|
|
377
|
-
}
|
|
378
|
-
};
|
|
379
|
-
const writeTasks = database2.transaction((payload) => {
|
|
380
|
-
write.run(payload.tasksJson);
|
|
381
|
-
if (payload.attachments !== void 0) replaceAttachments(payload.attachments);
|
|
382
|
-
removeOrphanAttachments.run(payload.tasksJson);
|
|
383
|
-
});
|
|
384
|
-
return {
|
|
385
|
-
listScheduledTaskAttachments(payload) {
|
|
386
|
-
return listAttachments.all(payload.taskId);
|
|
387
|
-
},
|
|
388
|
-
readScheduledTasks() {
|
|
389
|
-
return read.get()?.tasks_json ?? "[]";
|
|
390
|
-
},
|
|
391
|
-
readScheduledTaskAttachment(payload) {
|
|
392
|
-
return readAttachment.get(payload.projectId, payload.attachmentId);
|
|
393
|
-
},
|
|
394
|
-
writeScheduledTasks(payload) {
|
|
395
|
-
writeTasks(payload);
|
|
396
|
-
return null;
|
|
397
|
-
}
|
|
398
|
-
};
|
|
399
|
-
}
|
|
400
|
-
|
|
401
|
-
// packages/server/src/sqlite-submission-worker.js
|
|
402
|
-
function createSubmissionOperations(database2) {
|
|
403
|
-
if (!database2.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'task_submissions'").get())
|
|
404
|
-
return {};
|
|
405
|
-
const read = database2.prepare(
|
|
406
|
-
"SELECT record_json FROM task_submissions WHERE project_id = ? AND submission_key = ?"
|
|
407
|
-
);
|
|
408
|
-
const count = database2.prepare("SELECT COUNT(*) AS count FROM task_submissions");
|
|
409
|
-
const prune = database2.prepare(
|
|
410
|
-
"DELETE FROM task_submissions WHERE completed = 1 AND updated_at < ?"
|
|
411
|
-
);
|
|
412
|
-
const write = database2.prepare(`INSERT INTO task_submissions (project_id, submission_key, record_json, completed, updated_at)
|
|
53
|
+
`),u=t=>{a.run(t.taskId);for(let p of t.attachments)i.run(t.taskId,p.attachment.id,t.projectId,p.attachment.kind,p.attachment.mediaType,p.attachment.name,p.attachment.size,p.content);},r=e.transaction(t=>{o.run(t.tasksJson),t.attachments!==void 0&&u(t.attachments),d.run(t.tasksJson);});return {listScheduledTaskAttachments(t){return c.all(t.taskId)},readScheduledTasks(){return n.get()?.tasks_json??"[]"},readScheduledTaskAttachment(t){return _.get(t.projectId,t.attachmentId)},writeScheduledTasks(t){return r(t),null}}}function H(e){if(!e.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'task_submissions'").get())return {};let s=e.prepare("SELECT record_json FROM task_submissions WHERE project_id = ? AND submission_key = ?"),n=e.prepare("SELECT COUNT(*) AS count FROM task_submissions"),o=e.prepare("DELETE FROM task_submissions WHERE completed = 1 AND updated_at < ?"),a=e.prepare(`INSERT INTO task_submissions (project_id, submission_key, record_json, completed, updated_at)
|
|
413
54
|
VALUES (?, ?, ?, ?, ?) ON CONFLICT(project_id, submission_key) DO UPDATE SET
|
|
414
|
-
record_json = excluded.record_json, completed = excluded.completed, updated_at = excluded.updated_at`);
|
|
415
|
-
return {
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
},
|
|
419
|
-
writeSubmission: database2.transaction(({ projectId, key, recordJson, completed }) => {
|
|
420
|
-
const now = Date.now();
|
|
421
|
-
prune.run(now - 7 * 24 * 60 * 60 * 1e3);
|
|
422
|
-
if (!read.get(projectId, key) && count.get().count >= 1e4)
|
|
423
|
-
throw new Error("Submission recovery capacity is exhausted");
|
|
424
|
-
write.run(projectId, key, recordJson, completed ? 1 : 0, now);
|
|
425
|
-
return null;
|
|
426
|
-
})
|
|
427
|
-
};
|
|
428
|
-
}
|
|
429
|
-
|
|
430
|
-
// packages/server/src/sqlite-project-todo-worker.js
|
|
431
|
-
function createProjectTodoOperations(database2) {
|
|
432
|
-
if (!database2.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'project_todos'").get())
|
|
433
|
-
return {};
|
|
434
|
-
const list = database2.prepare(
|
|
435
|
-
"SELECT record_json FROM project_todos WHERE project_id = ? ORDER BY updated_at DESC, id"
|
|
436
|
-
);
|
|
437
|
-
const read = database2.prepare(
|
|
438
|
-
"SELECT version FROM project_todos WHERE project_id = ? AND id = ?"
|
|
439
|
-
);
|
|
440
|
-
const write = database2.prepare(`INSERT INTO project_todos (project_id, id, version, updated_at, record_json) VALUES (?, ?, ?, ?, ?)
|
|
441
|
-
ON CONFLICT(project_id, id) DO UPDATE SET version = excluded.version, updated_at = excluded.updated_at, record_json = excluded.record_json`);
|
|
442
|
-
const remove = database2.prepare("DELETE FROM project_todos WHERE project_id = ? AND id = ?");
|
|
443
|
-
const removeAttachments = database2.prepare(
|
|
444
|
-
"DELETE FROM project_todo_attachments WHERE project_id = ? AND todo_id = ?"
|
|
445
|
-
);
|
|
446
|
-
const writeAttachment = database2.prepare(
|
|
447
|
-
"INSERT INTO project_todo_attachments (project_id, todo_id, attachment_id, metadata, content) VALUES (?, ?, ?, ?, ?)"
|
|
448
|
-
);
|
|
449
|
-
const readAttachment = database2.prepare(
|
|
450
|
-
"SELECT metadata, content FROM project_todo_attachments WHERE project_id = ? AND attachment_id = ? LIMIT 1"
|
|
451
|
-
);
|
|
452
|
-
return {
|
|
453
|
-
listProjectTodos: ({ projectId }) => list.all(projectId).map((row) => row.record_json),
|
|
454
|
-
readProjectTodoAttachment: ({ projectId, attachmentId }) => readAttachment.get(projectId, attachmentId),
|
|
455
|
-
saveProjectTodo: database2.transaction(({ todo, expectedVersion, attachments }) => {
|
|
456
|
-
if ((read.get(todo.projectId, todo.id)?.version ?? null) !== expectedVersion) return false;
|
|
457
|
-
if (expectedVersion === null && list.all(todo.projectId).length >= 1e3)
|
|
458
|
-
throw new Error("Project todo capacity is exhausted");
|
|
459
|
-
write.run(todo.projectId, todo.id, todo.version, todo.updatedAt, JSON.stringify(todo));
|
|
460
|
-
removeAttachments.run(todo.projectId, todo.id);
|
|
461
|
-
for (const { attachment, content } of attachments)
|
|
462
|
-
writeAttachment.run(
|
|
463
|
-
todo.projectId,
|
|
464
|
-
todo.id,
|
|
465
|
-
attachment.id,
|
|
466
|
-
JSON.stringify(attachment),
|
|
467
|
-
content
|
|
468
|
-
);
|
|
469
|
-
return true;
|
|
470
|
-
}),
|
|
471
|
-
deleteProjectTodo: database2.transaction(({ projectId, todoId, expectedVersion }) => {
|
|
472
|
-
const current = read.get(projectId, todoId);
|
|
473
|
-
if (current === void 0) return false;
|
|
474
|
-
if (current.version !== expectedVersion) return null;
|
|
475
|
-
remove.run(projectId, todoId);
|
|
476
|
-
return true;
|
|
477
|
-
})
|
|
478
|
-
};
|
|
479
|
-
}
|
|
480
|
-
|
|
481
|
-
// packages/server/src/sqlite-async-question-worker.js
|
|
482
|
-
function createAsyncQuestionOperations(database2) {
|
|
483
|
-
if (!database2.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'async_questions'").get())
|
|
484
|
-
return {};
|
|
485
|
-
const list = database2.prepare(
|
|
486
|
-
// 同一回合的问题按发现顺序展示,不能按内容哈希重新排序。
|
|
487
|
-
"SELECT record_json FROM async_questions WHERE project_id = ? AND task_id = ? ORDER BY json_extract(record_json, '$.group.createdAt'), rowid"
|
|
488
|
-
);
|
|
489
|
-
const read = database2.prepare(
|
|
490
|
-
"SELECT record_json FROM async_questions WHERE project_id = ? AND task_id = ? AND id = ?"
|
|
491
|
-
);
|
|
492
|
-
const insert = database2.prepare(
|
|
493
|
-
"INSERT OR IGNORE INTO async_questions (project_id, task_id, id, status, record_json) VALUES (?, ?, ?, 'pending', ?)"
|
|
494
|
-
);
|
|
495
|
-
const update = database2.prepare(
|
|
496
|
-
"UPDATE async_questions SET status = ?, record_json = ? WHERE project_id = ? AND task_id = ? AND id = ? AND status = ?"
|
|
497
|
-
);
|
|
498
|
-
const count = database2.prepare(
|
|
499
|
-
"SELECT COUNT(*) AS count FROM async_questions WHERE project_id = ? AND task_id = ?"
|
|
500
|
-
);
|
|
501
|
-
return {
|
|
502
|
-
listAsyncQuestions: ({ projectId, taskId }) => list.all(projectId, taskId).map((row) => row.record_json),
|
|
503
|
-
discoverAsyncQuestions: database2.transaction(({ projectId, taskId, groups }) => {
|
|
504
|
-
for (const group of groups)
|
|
505
|
-
insert.run(projectId, taskId, group.id, JSON.stringify({ group }));
|
|
506
|
-
if (count.get(projectId, taskId).count > 1e4)
|
|
507
|
-
throw new Error("Async question capacity is exhausted");
|
|
508
|
-
return null;
|
|
509
|
-
}),
|
|
510
|
-
updateAsyncQuestion: ({ projectId, taskId, record, expectedStatus }) => update.run(
|
|
511
|
-
record.group.status,
|
|
512
|
-
JSON.stringify(record),
|
|
513
|
-
projectId,
|
|
514
|
-
taskId,
|
|
515
|
-
record.group.id,
|
|
516
|
-
expectedStatus
|
|
517
|
-
).changes === 1,
|
|
518
|
-
dismissAsyncQuestions: database2.transaction(({ projectId, taskId, ids }) => {
|
|
519
|
-
for (const id of ids) {
|
|
520
|
-
const row = read.get(projectId, taskId, id);
|
|
521
|
-
if (row === void 0) continue;
|
|
522
|
-
const record = JSON.parse(row.record_json);
|
|
523
|
-
record.group.status = "dismissed";
|
|
524
|
-
update.run("dismissed", JSON.stringify(record), projectId, taskId, id, "pending");
|
|
525
|
-
}
|
|
526
|
-
return null;
|
|
527
|
-
})
|
|
528
|
-
};
|
|
529
|
-
}
|
|
530
|
-
|
|
531
|
-
// packages/server/src/sqlite-state-worker-features.js
|
|
532
|
-
function createFeatureOperations(database2) {
|
|
533
|
-
return {
|
|
534
|
-
...createTaskQueueOperations(database2),
|
|
535
|
-
...createScheduledTaskOperations(database2),
|
|
536
|
-
...createSubmissionOperations(database2),
|
|
537
|
-
...createProjectTodoOperations(database2),
|
|
538
|
-
...createAsyncQuestionOperations(database2)
|
|
539
|
-
};
|
|
540
|
-
}
|
|
541
|
-
|
|
542
|
-
// packages/server/src/sqlite-worker-error.js
|
|
543
|
-
function serializeError(error) {
|
|
544
|
-
return {
|
|
545
|
-
message: error instanceof Error ? error.message : String(error),
|
|
546
|
-
name: error instanceof Error ? error.name : "Error"
|
|
547
|
-
};
|
|
548
|
-
}
|
|
549
|
-
|
|
550
|
-
// packages/server/src/sqlite-state-worker.js
|
|
551
|
-
function createOperations(database2) {
|
|
552
|
-
const statements = hasTable(database2, "projects") && hasTable(database2, "project_roots") ? {
|
|
553
|
-
upsertProject: database2.prepare(
|
|
554
|
-
`INSERT INTO projects (id, name, created_at, sort_order, kind)
|
|
55
|
+
record_json = excluded.record_json, completed = excluded.completed, updated_at = excluded.updated_at`);return {readSubmission({projectId:i,key:c}){return s.get(i,c)?.record_json},writeSubmission:e.transaction(({projectId:i,key:c,recordJson:_,completed:d})=>{let u=Date.now();if(o.run(u-10080*60*1e3),!s.get(i,c)&&n.get().count>=1e4)throw new Error("Submission recovery capacity is exhausted");return a.run(i,c,_,d?1:0,u),null})}}function q(e){if(!e.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'project_todos'").get())return {};let s=e.prepare("SELECT record_json FROM project_todos WHERE project_id = ? ORDER BY updated_at DESC, id"),n=e.prepare("SELECT version FROM project_todos WHERE project_id = ? AND id = ?"),o=e.prepare(`INSERT INTO project_todos (project_id, id, version, updated_at, record_json) VALUES (?, ?, ?, ?, ?)
|
|
56
|
+
ON CONFLICT(project_id, id) DO UPDATE SET version = excluded.version, updated_at = excluded.updated_at, record_json = excluded.record_json`),a=e.prepare("DELETE FROM project_todos WHERE project_id = ? AND id = ?"),i=e.prepare("DELETE FROM project_todo_attachments WHERE project_id = ? AND todo_id = ?"),c=e.prepare("INSERT INTO project_todo_attachments (project_id, todo_id, attachment_id, metadata, content) VALUES (?, ?, ?, ?, ?)"),_=e.prepare("SELECT metadata, content FROM project_todo_attachments WHERE project_id = ? AND attachment_id = ? LIMIT 1");return {listProjectTodos:({projectId:d})=>s.all(d).map(u=>u.record_json),readProjectTodoAttachment:({projectId:d,attachmentId:u})=>_.get(d,u),saveProjectTodo:e.transaction(({todo:d,expectedVersion:u,attachments:r})=>{if((n.get(d.projectId,d.id)?.version??null)!==u)return false;if(u===null&&s.all(d.projectId).length>=1e3)throw new Error("Project todo capacity is exhausted");o.run(d.projectId,d.id,d.version,d.updatedAt,JSON.stringify(d)),i.run(d.projectId,d.id);for(let{attachment:t,content:p}of r)c.run(d.projectId,d.id,t.id,JSON.stringify(t),p);return true}),deleteProjectTodo:e.transaction(({projectId:d,todoId:u,expectedVersion:r})=>{let t=n.get(d,u);return t===void 0?false:t.version!==r?null:(a.run(d,u),true)})}}function b(e){if(!e.prepare("SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'async_questions'").get())return {};let s=e.prepare("SELECT record_json FROM async_questions WHERE project_id = ? AND task_id = ? ORDER BY json_extract(record_json, '$.group.createdAt'), rowid"),n=e.prepare("SELECT record_json FROM async_questions WHERE project_id = ? AND task_id = ? AND id = ?"),o=e.prepare("INSERT OR IGNORE INTO async_questions (project_id, task_id, id, status, record_json) VALUES (?, ?, ?, 'pending', ?)"),a=e.prepare("UPDATE async_questions SET status = ?, record_json = ? WHERE project_id = ? AND task_id = ? AND id = ? AND status = ?"),i=e.prepare("SELECT COUNT(*) AS count FROM async_questions WHERE project_id = ? AND task_id = ?");return {listAsyncQuestions:({projectId:c,taskId:_})=>s.all(c,_).map(d=>d.record_json),discoverAsyncQuestions:e.transaction(({projectId:c,taskId:_,groups:d})=>{for(let u of d)o.run(c,_,u.id,JSON.stringify({group:u}));if(i.get(c,_).count>1e4)throw new Error("Async question capacity is exhausted");return null}),updateAsyncQuestion:({projectId:c,taskId:_,record:d,expectedStatus:u})=>a.run(d.group.status,JSON.stringify(d),c,_,d.group.id,u).changes===1,dismissAsyncQuestions:e.transaction(({projectId:c,taskId:_,ids:d})=>{for(let u of d){let r=n.get(c,_,u);if(r===void 0)continue;let t=JSON.parse(r.record_json);t.group.status="dismissed",a.run("dismissed",JSON.stringify(t),c,_,u,"pending");}return null})}}function B(e){return {...U(e),...W(e),...H(e),...q(e),...b(e)}}function x(e){return {message:e instanceof Error?e.message:String(e),name:e instanceof Error?e.name:"Error"}}function V(e){let s=new G(`${e}.scheduled-lock`,{timeout:5e3});s.exec(`CREATE TABLE IF NOT EXISTS run_owners (
|
|
57
|
+
run_id TEXT PRIMARY KEY, pid INTEGER NOT NULL
|
|
58
|
+
) STRICT`);let n=s.prepare("SELECT run_id, pid FROM run_owners"),o=s.prepare("DELETE FROM run_owners WHERE run_id = ?"),a=s.prepare("INSERT INTO run_owners (run_id, pid) VALUES (?, ?)");return {initialize(i){try{return s.transaction(i).immediate()}finally{s.pragma("busy_timeout = 0");}},close:()=>s.close(),operations:{acquireScheduledTaskLock(){if(s.inTransaction)return false;try{return s.exec("BEGIN IMMEDIATE"),!0}catch(i){if(i.code==="SQLITE_BUSY")return false;throw i}},releaseScheduledTaskLock(){return s.exec("COMMIT"),null},listActiveScheduledTaskRunIds(){let i=[];for(let c of n.all())try{process.kill(c.pid,0),i.push(c.run_id);}catch(_){_.code==="ESRCH"?o.run(c.run_id):i.push(c.run_id);}return i},claimScheduledTaskRun(i){return a.run(i.runId,process.pid),null},releaseScheduledTaskRun(i){return o.run(i.runId),null}}}}function z(e){let s=T(e,"projects")&&T(e,"project_roots")?{upsertProject:e.prepare(`INSERT INTO projects (id, name, created_at, sort_order, kind)
|
|
555
59
|
VALUES (?, ?, ?, (
|
|
556
60
|
SELECT COALESCE(MAX(sort_order) + 1, 0) FROM projects WHERE kind = 'user'
|
|
557
61
|
), 'user')
|
|
558
62
|
ON CONFLICT(id) DO UPDATE SET
|
|
559
63
|
name = excluded.name,
|
|
560
64
|
created_at = excluded.created_at
|
|
561
|
-
WHERE projects.kind = 'user'`
|
|
562
|
-
),
|
|
563
|
-
upsertProjectAtOrder: database2.prepare(
|
|
564
|
-
`INSERT INTO projects (id, name, created_at, sort_order, kind)
|
|
65
|
+
WHERE projects.kind = 'user'`),upsertProjectAtOrder:e.prepare(`INSERT INTO projects (id, name, created_at, sort_order, kind)
|
|
565
66
|
VALUES (?, ?, ?, ?, 'user')
|
|
566
67
|
ON CONFLICT(id) DO UPDATE SET
|
|
567
68
|
name = excluded.name,
|
|
568
69
|
created_at = excluded.created_at,
|
|
569
70
|
sort_order = excluded.sort_order
|
|
570
|
-
WHERE projects.kind = 'user'`
|
|
571
|
-
),
|
|
572
|
-
listProjects: database2.prepare(
|
|
573
|
-
"SELECT id, name, created_at FROM projects WHERE kind = 'user' ORDER BY sort_order, created_at, id"
|
|
574
|
-
),
|
|
575
|
-
listProjectRoots: database2.prepare(
|
|
576
|
-
`SELECT project_roots.project_id, project_roots.root_id, project_roots.path
|
|
71
|
+
WHERE projects.kind = 'user'`),listProjects:e.prepare("SELECT id, name, created_at FROM projects WHERE kind = 'user' ORDER BY sort_order, created_at, id"),listProjectRoots:e.prepare(`SELECT project_roots.project_id, project_roots.root_id, project_roots.path
|
|
577
72
|
FROM project_roots
|
|
578
73
|
JOIN projects ON projects.id = project_roots.project_id
|
|
579
74
|
WHERE projects.kind = 'user'
|
|
580
|
-
ORDER BY projects.sort_order, projects.created_at, projects.id, project_roots.position`
|
|
581
|
-
),
|
|
582
|
-
listProjectIds: database2.prepare(
|
|
583
|
-
"SELECT id FROM projects WHERE kind = 'user' ORDER BY sort_order, created_at, id"
|
|
584
|
-
),
|
|
585
|
-
readProject: database2.prepare("SELECT id, name, created_at FROM projects WHERE id = ?"),
|
|
586
|
-
readProjectWithOrder: database2.prepare(
|
|
587
|
-
"SELECT id, name, created_at, sort_order FROM projects WHERE id = ? AND kind = 'user'"
|
|
588
|
-
),
|
|
589
|
-
readProjectRoots: database2.prepare(
|
|
590
|
-
"SELECT project_id, root_id, path FROM project_roots WHERE project_id = ? ORDER BY position"
|
|
591
|
-
),
|
|
592
|
-
removeProjectRoots: database2.prepare("DELETE FROM project_roots WHERE project_id = ?"),
|
|
593
|
-
writeProjectRoot: database2.prepare(
|
|
594
|
-
"INSERT INTO project_roots (project_id, position, root_id, path) VALUES (?, ?, ?, ?)"
|
|
595
|
-
),
|
|
596
|
-
removeProject: database2.prepare("DELETE FROM projects WHERE id = ? AND kind = 'user'"),
|
|
597
|
-
copyProjectDefaults: database2.prepare(
|
|
598
|
-
`INSERT INTO project_defaults
|
|
75
|
+
ORDER BY projects.sort_order, projects.created_at, projects.id, project_roots.position`),listProjectIds:e.prepare("SELECT id FROM projects WHERE kind = 'user' ORDER BY sort_order, created_at, id"),readProject:e.prepare("SELECT id, name, created_at FROM projects WHERE id = ?"),readProjectWithOrder:e.prepare("SELECT id, name, created_at, sort_order FROM projects WHERE id = ? AND kind = 'user'"),readProjectRoots:e.prepare("SELECT project_id, root_id, path FROM project_roots WHERE project_id = ? ORDER BY position"),removeProjectRoots:e.prepare("DELETE FROM project_roots WHERE project_id = ?"),writeProjectRoot:e.prepare("INSERT INTO project_roots (project_id, position, root_id, path) VALUES (?, ?, ?, ?)"),removeProject:e.prepare("DELETE FROM projects WHERE id = ? AND kind = 'user'"),copyProjectDefaults:e.prepare(`INSERT INTO project_defaults
|
|
599
76
|
(project_id, model, reasoning_effort, updated_at, sandbox_mode,
|
|
600
77
|
approval_policy, approvals_reviewer, fast_mode)
|
|
601
78
|
SELECT ?, model, reasoning_effort, updated_at, sandbox_mode,
|
|
@@ -608,10 +85,7 @@ function createOperations(database2) {
|
|
|
608
85
|
sandbox_mode = excluded.sandbox_mode,
|
|
609
86
|
approval_policy = excluded.approval_policy,
|
|
610
87
|
approvals_reviewer = excluded.approvals_reviewer,
|
|
611
|
-
fast_mode = excluded.fast_mode`
|
|
612
|
-
),
|
|
613
|
-
copyTaskSettings: database2.prepare(
|
|
614
|
-
`INSERT INTO task_settings
|
|
88
|
+
fast_mode = excluded.fast_mode`),copyTaskSettings:e.prepare(`INSERT INTO task_settings
|
|
615
89
|
(project_id, task_id, approval_policy, model, reasoning_effort, updated_at,
|
|
616
90
|
sandbox_mode, approvals_reviewer)
|
|
617
91
|
SELECT ?, task_id, approval_policy, model, reasoning_effort, updated_at,
|
|
@@ -623,29 +97,12 @@ function createOperations(database2) {
|
|
|
623
97
|
reasoning_effort = excluded.reasoning_effort,
|
|
624
98
|
updated_at = excluded.updated_at,
|
|
625
99
|
sandbox_mode = excluded.sandbox_mode,
|
|
626
|
-
approvals_reviewer = excluded.approvals_reviewer`
|
|
627
|
-
),
|
|
628
|
-
writeProjectSortOrder: database2.prepare(
|
|
629
|
-
"UPDATE projects SET sort_order = ? WHERE id = ? AND kind = 'user'"
|
|
630
|
-
),
|
|
631
|
-
readProjectDefaults: database2.prepare(
|
|
632
|
-
`SELECT approval_policy, approvals_reviewer, fast_mode, model,
|
|
100
|
+
approvals_reviewer = excluded.approvals_reviewer`),writeProjectSortOrder:e.prepare("UPDATE projects SET sort_order = ? WHERE id = ? AND kind = 'user'"),readProjectDefaults:e.prepare(`SELECT approval_policy, approvals_reviewer, fast_mode, model,
|
|
633
101
|
reasoning_effort, sandbox_mode
|
|
634
|
-
FROM project_defaults WHERE project_id = ?`
|
|
635
|
-
),
|
|
636
|
-
readGlobalSettings: database2.prepare(
|
|
637
|
-
`SELECT approval_policy, approvals_reviewer, commit_message_model, commit_message_prompt,
|
|
102
|
+
FROM project_defaults WHERE project_id = ?`),readGlobalSettings:e.prepare(`SELECT approval_policy, approvals_reviewer, commit_message_model, commit_message_prompt,
|
|
638
103
|
model, reasoning_effort, sandbox_mode, default_open_app_id, fast_mode, follow_up_behavior, pet_enabled, pet_id
|
|
639
|
-
FROM global_settings WHERE id = 1`
|
|
640
|
-
|
|
641
|
-
readProviderConnection: database2.prepare(
|
|
642
|
-
`SELECT mode, custom_base_url, custom_models_json, updated_at
|
|
643
|
-
FROM provider_connection WHERE id = 1`
|
|
644
|
-
),
|
|
645
|
-
readTaskSettings: database2.prepare(
|
|
646
|
-
"SELECT approval_policy, approvals_reviewer, model, reasoning_effort, sandbox_mode FROM task_settings WHERE project_id = ? AND task_id = ?"
|
|
647
|
-
),
|
|
648
|
-
writeProjectDefaults: database2.prepare(`
|
|
104
|
+
FROM global_settings WHERE id = 1`),readProviderConnection:e.prepare(`SELECT mode, custom_base_url, custom_models_json, updated_at
|
|
105
|
+
FROM provider_connection WHERE id = 1`),readTaskSettings:e.prepare("SELECT approval_policy, approvals_reviewer, model, reasoning_effort, sandbox_mode FROM task_settings WHERE project_id = ? AND task_id = ?"),writeProjectDefaults:e.prepare(`
|
|
649
106
|
INSERT INTO project_defaults (
|
|
650
107
|
project_id, approval_policy, approvals_reviewer, fast_mode, model,
|
|
651
108
|
reasoning_effort, sandbox_mode, updated_at
|
|
@@ -658,8 +115,7 @@ function createOperations(database2) {
|
|
|
658
115
|
reasoning_effort = excluded.reasoning_effort,
|
|
659
116
|
sandbox_mode = excluded.sandbox_mode,
|
|
660
117
|
updated_at = excluded.updated_at
|
|
661
|
-
`),
|
|
662
|
-
writeGlobalSettings: database2.prepare(`
|
|
118
|
+
`),writeGlobalSettings:e.prepare(`
|
|
663
119
|
INSERT INTO global_settings (
|
|
664
120
|
id, approval_policy, approvals_reviewer, commit_message_model, commit_message_prompt, model,
|
|
665
121
|
reasoning_effort, sandbox_mode, default_open_app_id, fast_mode, follow_up_behavior, pet_enabled, pet_id, updated_at
|
|
@@ -677,8 +133,7 @@ function createOperations(database2) {
|
|
|
677
133
|
follow_up_behavior = excluded.follow_up_behavior,
|
|
678
134
|
pet_enabled = excluded.pet_enabled, pet_id = excluded.pet_id,
|
|
679
135
|
updated_at = excluded.updated_at
|
|
680
|
-
`),
|
|
681
|
-
writeProviderConnection: database2.prepare(`
|
|
136
|
+
`),writeProviderConnection:e.prepare(`
|
|
682
137
|
INSERT INTO provider_connection (
|
|
683
138
|
id, mode, custom_base_url, custom_models_json, updated_at
|
|
684
139
|
) VALUES (1, ?, ?, ?, ?)
|
|
@@ -687,8 +142,7 @@ function createOperations(database2) {
|
|
|
687
142
|
custom_base_url = excluded.custom_base_url,
|
|
688
143
|
custom_models_json = excluded.custom_models_json,
|
|
689
144
|
updated_at = excluded.updated_at
|
|
690
|
-
`),
|
|
691
|
-
writeTaskSettings: database2.prepare(`
|
|
145
|
+
`),writeTaskSettings:e.prepare(`
|
|
692
146
|
INSERT INTO task_settings (
|
|
693
147
|
project_id, task_id, approval_policy, approvals_reviewer, model, reasoning_effort, sandbox_mode, updated_at
|
|
694
148
|
) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
|
@@ -699,299 +153,4 @@ function createOperations(database2) {
|
|
|
699
153
|
reasoning_effort = excluded.reasoning_effort,
|
|
700
154
|
sandbox_mode = excluded.sandbox_mode,
|
|
701
155
|
updated_at = excluded.updated_at
|
|
702
|
-
`)
|
|
703
|
-
} : void 0;
|
|
704
|
-
function requireStatements() {
|
|
705
|
-
if (statements === void 0) {
|
|
706
|
-
throw new Error("SQLite state tables are unavailable");
|
|
707
|
-
}
|
|
708
|
-
return statements;
|
|
709
|
-
}
|
|
710
|
-
function readStoredProject(projectId) {
|
|
711
|
-
const stateStatements = requireStatements();
|
|
712
|
-
return projectFromRows(
|
|
713
|
-
stateStatements.readProject.get(projectId),
|
|
714
|
-
stateStatements.readProjectRoots.all(projectId)
|
|
715
|
-
);
|
|
716
|
-
}
|
|
717
|
-
function readStoredProjects() {
|
|
718
|
-
const stateStatements = requireStatements();
|
|
719
|
-
return projectsFromRows(
|
|
720
|
-
stateStatements.listProjects.all(),
|
|
721
|
-
stateStatements.listProjectRoots.all()
|
|
722
|
-
);
|
|
723
|
-
}
|
|
724
|
-
function replaceStoredRoots(project) {
|
|
725
|
-
const stateStatements = requireStatements();
|
|
726
|
-
if (!Array.isArray(project.roots) || project.roots.length === 0) {
|
|
727
|
-
throw new Error("Project roots must contain a primary root");
|
|
728
|
-
}
|
|
729
|
-
const rootIds = project.roots.map((root) => root.id);
|
|
730
|
-
const paths = project.roots.map((root) => root.path);
|
|
731
|
-
if (rootIds.some((rootId) => typeof rootId !== "string" || rootId.length === 0)) {
|
|
732
|
-
throw new Error("Project root ids must be non-empty strings");
|
|
733
|
-
}
|
|
734
|
-
if (new Set(rootIds).size !== rootIds.length) {
|
|
735
|
-
throw new Error("Project root ids must be unique");
|
|
736
|
-
}
|
|
737
|
-
if (paths.some((path) => typeof path !== "string" || path.length === 0)) {
|
|
738
|
-
throw new Error("Project root paths must be non-empty strings");
|
|
739
|
-
}
|
|
740
|
-
if (new Set(paths).size !== paths.length) {
|
|
741
|
-
throw new Error("Project root paths must be unique");
|
|
742
|
-
}
|
|
743
|
-
stateStatements.removeProjectRoots.run(project.id);
|
|
744
|
-
paths.forEach((path, position) => {
|
|
745
|
-
stateStatements.writeProjectRoot.run(project.id, position, rootIds[position], path);
|
|
746
|
-
});
|
|
747
|
-
}
|
|
748
|
-
const reorderProjects = database2.transaction((projectIds) => {
|
|
749
|
-
const stateStatements = requireStatements();
|
|
750
|
-
const storedProjectIds = stateStatements.listProjectIds.all().map((row) => row.id);
|
|
751
|
-
const requestedProjectIds = new Set(projectIds);
|
|
752
|
-
const containsCompleteProjectSet = projectIds.length === storedProjectIds.length && requestedProjectIds.size === storedProjectIds.length && storedProjectIds.every((projectId) => requestedProjectIds.has(projectId));
|
|
753
|
-
if (!containsCompleteProjectSet) {
|
|
754
|
-
throw new Error("Project order must contain every project exactly once");
|
|
755
|
-
}
|
|
756
|
-
projectIds.forEach((projectId, sortOrder) => {
|
|
757
|
-
stateStatements.writeProjectSortOrder.run(sortOrder, projectId);
|
|
758
|
-
});
|
|
759
|
-
return readStoredProjects();
|
|
760
|
-
});
|
|
761
|
-
const replaceProjects = database2.transaction((projects) => {
|
|
762
|
-
const stateStatements = requireStatements();
|
|
763
|
-
const projectIds = new Set(projects.map((project) => project.id));
|
|
764
|
-
if (projectIds.size !== projects.length) {
|
|
765
|
-
throw new Error("Project projection must contain unique project ids");
|
|
766
|
-
}
|
|
767
|
-
for (const { id } of stateStatements.listProjectIds.all()) {
|
|
768
|
-
if (!projectIds.has(id)) {
|
|
769
|
-
stateStatements.removeProject.run(id);
|
|
770
|
-
}
|
|
771
|
-
}
|
|
772
|
-
projects.forEach((project, sortOrder) => {
|
|
773
|
-
stateStatements.upsertProjectAtOrder.run(
|
|
774
|
-
project.id,
|
|
775
|
-
project.name,
|
|
776
|
-
project.createdAt,
|
|
777
|
-
sortOrder
|
|
778
|
-
);
|
|
779
|
-
replaceStoredRoots(project);
|
|
780
|
-
});
|
|
781
|
-
return readStoredProjects();
|
|
782
|
-
});
|
|
783
|
-
const migrateProject = database2.transaction((legacyProjectId, project) => {
|
|
784
|
-
const stateStatements = requireStatements();
|
|
785
|
-
const legacy = stateStatements.readProjectWithOrder.get(legacyProjectId);
|
|
786
|
-
const sortOrder = legacy?.sort_order ?? stateStatements.listProjectIds.all().length;
|
|
787
|
-
stateStatements.upsertProjectAtOrder.run(
|
|
788
|
-
project.id,
|
|
789
|
-
project.name,
|
|
790
|
-
project.createdAt,
|
|
791
|
-
sortOrder
|
|
792
|
-
);
|
|
793
|
-
replaceStoredRoots(project);
|
|
794
|
-
if (legacyProjectId !== project.id && legacy !== void 0) {
|
|
795
|
-
stateStatements.copyProjectDefaults.run(project.id, legacyProjectId);
|
|
796
|
-
stateStatements.copyTaskSettings.run(project.id, legacyProjectId);
|
|
797
|
-
stateStatements.removeProject.run(legacyProjectId);
|
|
798
|
-
}
|
|
799
|
-
const stored = readStoredProject(project.id);
|
|
800
|
-
if (stored === void 0) {
|
|
801
|
-
throw new Error("Migrated Project projection could not be stored");
|
|
802
|
-
}
|
|
803
|
-
return stored;
|
|
804
|
-
});
|
|
805
|
-
const projectSourceMigrationStatements = hasTable(database2, "project_source_migration") ? {
|
|
806
|
-
complete: database2.prepare(
|
|
807
|
-
"UPDATE project_source_migration SET completed = 1 WHERE id = 1"
|
|
808
|
-
),
|
|
809
|
-
read: database2.prepare(
|
|
810
|
-
"SELECT completed, recover_unassigned FROM project_source_migration WHERE id = 1"
|
|
811
|
-
)
|
|
812
|
-
} : void 0;
|
|
813
|
-
return {
|
|
814
|
-
...createFeatureOperations(database2),
|
|
815
|
-
diagnose() {
|
|
816
|
-
database2.exec("BEGIN IMMEDIATE");
|
|
817
|
-
try {
|
|
818
|
-
database2.prepare(
|
|
819
|
-
"INSERT INTO schema_migrations (version, name, applied_at) VALUES (-1, 'doctor', ?)"
|
|
820
|
-
).run((/* @__PURE__ */ new Date()).toISOString());
|
|
821
|
-
} finally {
|
|
822
|
-
database2.exec("ROLLBACK");
|
|
823
|
-
}
|
|
824
|
-
const synchronousValue = database2.pragma("synchronous", { simple: true });
|
|
825
|
-
return {
|
|
826
|
-
busyTimeout: database2.pragma("busy_timeout", { simple: true }),
|
|
827
|
-
foreignKeys: database2.pragma("foreign_keys", { simple: true }) === 1,
|
|
828
|
-
integrityCheck: database2.pragma("integrity_check", { simple: true }),
|
|
829
|
-
journalMode: database2.pragma("journal_mode", { simple: true }),
|
|
830
|
-
migrationVersion: database2.prepare("SELECT COALESCE(MAX(version), 0) AS version FROM schema_migrations").get().version,
|
|
831
|
-
synchronous: synchronousValue === 1 ? "normal" : String(synchronousValue),
|
|
832
|
-
writable: true
|
|
833
|
-
};
|
|
834
|
-
},
|
|
835
|
-
completeProjectSourceMigration() {
|
|
836
|
-
if (projectSourceMigrationStatements === void 0) {
|
|
837
|
-
throw new Error("Project source migration state is unavailable");
|
|
838
|
-
}
|
|
839
|
-
projectSourceMigrationStatements.complete.run();
|
|
840
|
-
return null;
|
|
841
|
-
},
|
|
842
|
-
listProjects() {
|
|
843
|
-
return readStoredProjects();
|
|
844
|
-
},
|
|
845
|
-
readProject(payload) {
|
|
846
|
-
return readStoredProject(payload.projectId);
|
|
847
|
-
},
|
|
848
|
-
readProjectSourceMigration() {
|
|
849
|
-
if (projectSourceMigrationStatements === void 0) {
|
|
850
|
-
throw new Error("Project source migration state is unavailable");
|
|
851
|
-
}
|
|
852
|
-
const row = projectSourceMigrationStatements.read.get();
|
|
853
|
-
if (row === void 0) {
|
|
854
|
-
throw new Error("Project source migration state is missing");
|
|
855
|
-
}
|
|
856
|
-
return {
|
|
857
|
-
completed: row.completed === 1,
|
|
858
|
-
recoverUnassigned: row.recover_unassigned === 1
|
|
859
|
-
};
|
|
860
|
-
},
|
|
861
|
-
replaceProjects(payload) {
|
|
862
|
-
return replaceProjects(payload.projects);
|
|
863
|
-
},
|
|
864
|
-
upsertProject(payload) {
|
|
865
|
-
return database2.transaction((project) => {
|
|
866
|
-
const stateStatements = requireStatements();
|
|
867
|
-
stateStatements.upsertProject.run(project.id, project.name, project.createdAt);
|
|
868
|
-
replaceStoredRoots(project);
|
|
869
|
-
const stored = readStoredProject(project.id);
|
|
870
|
-
if (stored === void 0) {
|
|
871
|
-
throw new Error("Project projection could not be stored");
|
|
872
|
-
}
|
|
873
|
-
return stored;
|
|
874
|
-
})(payload.project);
|
|
875
|
-
},
|
|
876
|
-
migrateProject(payload) {
|
|
877
|
-
return migrateProject(payload.legacyProjectId, payload.project);
|
|
878
|
-
},
|
|
879
|
-
deleteProject(payload) {
|
|
880
|
-
return requireStatements().removeProject.run(payload.projectId).changes > 0;
|
|
881
|
-
},
|
|
882
|
-
setProjectOrder(payload) {
|
|
883
|
-
return reorderProjects(payload.projectIds);
|
|
884
|
-
},
|
|
885
|
-
readProjectDefaults(payload) {
|
|
886
|
-
return projectDefaultsFromRow(requireStatements().readProjectDefaults.get(payload.projectId));
|
|
887
|
-
},
|
|
888
|
-
readGlobalSettings() {
|
|
889
|
-
return globalSettingsFromRow(requireStatements().readGlobalSettings.get());
|
|
890
|
-
},
|
|
891
|
-
readProviderConnection() {
|
|
892
|
-
return providerConnectionFromRow(requireStatements().readProviderConnection.get());
|
|
893
|
-
},
|
|
894
|
-
readTaskSettings(payload) {
|
|
895
|
-
return taskSettingsFromRow(
|
|
896
|
-
requireStatements().readTaskSettings.get(payload.projectId, payload.taskId)
|
|
897
|
-
);
|
|
898
|
-
},
|
|
899
|
-
writeProjectDefaults(payload) {
|
|
900
|
-
const settings = payload.settings;
|
|
901
|
-
requireStatements().writeProjectDefaults.run(
|
|
902
|
-
payload.projectId,
|
|
903
|
-
serializeApprovalPolicy(settings.approvalPolicy),
|
|
904
|
-
settings.approvalsReviewer,
|
|
905
|
-
settings.fastMode ? 1 : 0,
|
|
906
|
-
settings.model,
|
|
907
|
-
settings.reasoningEffort,
|
|
908
|
-
settings.sandboxMode,
|
|
909
|
-
payload.updatedAt
|
|
910
|
-
);
|
|
911
|
-
return settings;
|
|
912
|
-
},
|
|
913
|
-
writeGlobalSettings(payload) {
|
|
914
|
-
const settings = payload.settings;
|
|
915
|
-
requireStatements().writeGlobalSettings.run(
|
|
916
|
-
serializeApprovalPolicy(settings.approvalPolicy),
|
|
917
|
-
settings.approvalsReviewer,
|
|
918
|
-
settings.commitMessageModel,
|
|
919
|
-
settings.commitMessagePrompt,
|
|
920
|
-
settings.model,
|
|
921
|
-
settings.reasoningEffort,
|
|
922
|
-
settings.sandboxMode,
|
|
923
|
-
settings.defaultOpenAppId,
|
|
924
|
-
settings.fastMode ? 1 : 0,
|
|
925
|
-
settings.followUpBehavior,
|
|
926
|
-
settings.pet.enabled ? 1 : 0,
|
|
927
|
-
settings.pet.selectedPetId,
|
|
928
|
-
payload.updatedAt
|
|
929
|
-
);
|
|
930
|
-
return settings;
|
|
931
|
-
},
|
|
932
|
-
writeProviderConnection(payload) {
|
|
933
|
-
requireStatements().writeProviderConnection.run(
|
|
934
|
-
payload.mode,
|
|
935
|
-
payload.customBaseUrl,
|
|
936
|
-
payload.customModelsJson,
|
|
937
|
-
payload.updatedAt
|
|
938
|
-
);
|
|
939
|
-
return null;
|
|
940
|
-
},
|
|
941
|
-
writeTaskSettings(payload) {
|
|
942
|
-
const settings = payload.settings;
|
|
943
|
-
requireStatements().writeTaskSettings.run(
|
|
944
|
-
payload.projectId,
|
|
945
|
-
payload.taskId,
|
|
946
|
-
serializeApprovalPolicy(settings.approvalPolicy),
|
|
947
|
-
settings.approvalsReviewer,
|
|
948
|
-
settings.model,
|
|
949
|
-
settings.reasoningEffort,
|
|
950
|
-
settings.sandboxMode,
|
|
951
|
-
payload.updatedAt
|
|
952
|
-
);
|
|
953
|
-
return settings;
|
|
954
|
-
}
|
|
955
|
-
};
|
|
956
|
-
}
|
|
957
|
-
var database;
|
|
958
|
-
try {
|
|
959
|
-
mkdirSync(resolve(workerData.databasePath, ".."), { recursive: true });
|
|
960
|
-
database = new Database(workerData.databasePath);
|
|
961
|
-
configureDatabase(database);
|
|
962
|
-
const previousMigrationVersion = readMigrationVersion(database);
|
|
963
|
-
runMigrations(database, workerData.migrations, (version) => {
|
|
964
|
-
if (version === 15) {
|
|
965
|
-
initializeProjectSourceMigration(database, previousMigrationVersion);
|
|
966
|
-
}
|
|
967
|
-
});
|
|
968
|
-
initializeProjectSourceMigration(database, previousMigrationVersion);
|
|
969
|
-
ensureGlobalSettingsCompatibility(database);
|
|
970
|
-
const operations = createOperations(database);
|
|
971
|
-
parentPort.on("message", (message) => {
|
|
972
|
-
try {
|
|
973
|
-
if (message.operation === "close") {
|
|
974
|
-
database.close();
|
|
975
|
-
parentPort.postMessage({ id: message.id, result: null, type: "response" });
|
|
976
|
-
parentPort.close();
|
|
977
|
-
return;
|
|
978
|
-
}
|
|
979
|
-
const operation = operations[message.operation];
|
|
980
|
-
if (typeof operation !== "function") {
|
|
981
|
-
throw new Error(`Unknown SQLite worker operation: ${String(message.operation)}`);
|
|
982
|
-
}
|
|
983
|
-
parentPort.postMessage({
|
|
984
|
-
id: message.id,
|
|
985
|
-
result: operation(message.payload),
|
|
986
|
-
type: "response"
|
|
987
|
-
});
|
|
988
|
-
} catch (error) {
|
|
989
|
-
parentPort.postMessage({ id: message.id, error: serializeError(error), type: "response" });
|
|
990
|
-
}
|
|
991
|
-
});
|
|
992
|
-
parentPort.postMessage({ type: "ready" });
|
|
993
|
-
} catch (error) {
|
|
994
|
-
database?.close();
|
|
995
|
-
parentPort.postMessage({ error: serializeError(error), type: "fatal" });
|
|
996
|
-
parentPort.close();
|
|
997
|
-
}
|
|
156
|
+
`)}:void 0;function n(){if(s===void 0)throw new Error("SQLite state tables are unavailable");return s}function o(r){let t=n();return h(t.readProject.get(r),t.readProjectRoots.all(r))}function a(){let r=n();return I(r.listProjects.all(),r.listProjectRoots.all())}function i(r){let t=n();if(!Array.isArray(r.roots)||r.roots.length===0)throw new Error("Project roots must contain a primary root");let p=r.roots.map(m=>m.id),l=r.roots.map(m=>m.path);if(p.some(m=>typeof m!="string"||m.length===0))throw new Error("Project root ids must be non-empty strings");if(new Set(p).size!==p.length)throw new Error("Project root ids must be unique");if(l.some(m=>typeof m!="string"||m.length===0))throw new Error("Project root paths must be non-empty strings");if(new Set(l).size!==l.length)throw new Error("Project root paths must be unique");t.removeProjectRoots.run(r.id),l.forEach((m,E)=>{t.writeProjectRoot.run(r.id,E,p[E],m);});}let c=e.transaction(r=>{let t=n(),p=t.listProjectIds.all().map(E=>E.id),l=new Set(r);if(!(r.length===p.length&&l.size===p.length&&p.every(E=>l.has(E))))throw new Error("Project order must contain every project exactly once");return r.forEach((E,J)=>{t.writeProjectSortOrder.run(J,E);}),a()}),_=e.transaction(r=>{let t=n(),p=new Set(r.map(l=>l.id));if(p.size!==r.length)throw new Error("Project projection must contain unique project ids");for(let{id:l}of t.listProjectIds.all())p.has(l)||t.removeProject.run(l);return r.forEach((l,m)=>{t.upsertProjectAtOrder.run(l.id,l.name,l.createdAt,m),i(l);}),a()}),d=e.transaction((r,t)=>{let p=n(),l=p.readProjectWithOrder.get(r),m=l?.sort_order??p.listProjectIds.all().length;p.upsertProjectAtOrder.run(t.id,t.name,t.createdAt,m),i(t),r!==t.id&&l!==void 0&&(p.copyProjectDefaults.run(t.id,r),p.copyTaskSettings.run(t.id,r),p.removeProject.run(r));let E=o(t.id);if(E===void 0)throw new Error("Migrated Project projection could not be stored");return E}),u=T(e,"project_source_migration")?{complete:e.prepare("UPDATE project_source_migration SET completed = 1 WHERE id = 1"),read:e.prepare("SELECT completed, recover_unassigned FROM project_source_migration WHERE id = 1")}:void 0;return {...B(e),diagnose(){e.exec("BEGIN IMMEDIATE");try{e.prepare("INSERT INTO schema_migrations (version, name, applied_at) VALUES (-1, 'doctor', ?)").run(new Date().toISOString());}finally{e.exec("ROLLBACK");}let r=e.pragma("synchronous",{simple:true});return {busyTimeout:e.pragma("busy_timeout",{simple:true}),foreignKeys:e.pragma("foreign_keys",{simple:true})===1,integrityCheck:e.pragma("integrity_check",{simple:true}),journalMode:e.pragma("journal_mode",{simple:true}),migrationVersion:e.prepare("SELECT COALESCE(MAX(version), 0) AS version FROM schema_migrations").get().version,synchronous:r===1?"normal":String(r),writable:true}},completeProjectSourceMigration(){if(u===void 0)throw new Error("Project source migration state is unavailable");return u.complete.run(),null},listProjects(){return a()},readProject(r){return o(r.projectId)},readProjectSourceMigration(){if(u===void 0)throw new Error("Project source migration state is unavailable");let r=u.read.get();if(r===void 0)throw new Error("Project source migration state is missing");return {completed:r.completed===1,recoverUnassigned:r.recover_unassigned===1}},replaceProjects(r){return _(r.projects)},upsertProject(r){return e.transaction(t=>{n().upsertProject.run(t.id,t.name,t.createdAt),i(t);let l=o(t.id);if(l===void 0)throw new Error("Project projection could not be stored");return l})(r.project)},migrateProject(r){return d(r.legacyProjectId,r.project)},deleteProject(r){return n().removeProject.run(r.projectId).changes>0},setProjectOrder(r){return c(r.projectIds)},readProjectDefaults(r){return L(n().readProjectDefaults.get(r.projectId))},readGlobalSettings(){return D(n().readGlobalSettings.get())},readProviderConnection(){return w(n().readProviderConnection.get())},readTaskSettings(r){return P(n().readTaskSettings.get(r.projectId,r.taskId))},writeProjectDefaults(r){let t=r.settings;return n().writeProjectDefaults.run(r.projectId,R(t.approvalPolicy),t.approvalsReviewer,t.fastMode?1:0,t.model,t.reasoningEffort,t.sandboxMode,r.updatedAt),t},writeGlobalSettings(r){let t=r.settings;return n().writeGlobalSettings.run(R(t.approvalPolicy),t.approvalsReviewer,t.commitMessageModel,t.commitMessagePrompt,t.model,t.reasoningEffort,t.sandboxMode,t.defaultOpenAppId,t.fastMode?1:0,t.followUpBehavior,t.pet.enabled?1:0,t.pet.selectedPetId,r.updatedAt),t},writeProviderConnection(r){return n().writeProviderConnection.run(r.mode,r.customBaseUrl,r.customModelsJson,r.updatedAt),null},writeTaskSettings(r){let t=r.settings;return n().writeTaskSettings.run(r.projectId,r.taskId,R(t.approvalPolicy),t.approvalsReviewer,t.model,t.reasoningEffort,t.sandboxMode,r.updatedAt),t}}}var f,j;try{mkdirSync(resolve(workerData.databasePath,".."),{recursive:!0}),j=V(workerData.databasePath),j.initialize(()=>{f=new G(workerData.databasePath),M(f);let s=C(f);y(f,workerData.migrations,n=>{n===15&&A(f,s);}),A(f,s),F(f);});let e={...z(f),...j.operations};parentPort.on("message",s=>{try{if(s.operation==="close"){j.close(),f.close(),parentPort.postMessage({id:s.id,result:null,type:"response"}),parentPort.close();return}let n=e[s.operation];if(typeof n!="function")throw new Error(`Unknown SQLite worker operation: ${String(s.operation)}`);parentPort.postMessage({id:s.id,result:n(s.payload),type:"response"});}catch(n){parentPort.postMessage({id:s.id,error:x(n),type:"response"});}}),parentPort.postMessage({type:"ready"});}catch(e){j?.close(),f?.close(),parentPort.postMessage({error:x(e),type:"fatal"}),parentPort.close();}
|