trellis 3.1.34 → 3.2.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 +16 -5
- package/README.md +19 -2
- package/bin/trellis.mjs +2 -75
- package/dist/better-sqlite-backend-2P4F6AOJ.js +209 -0
- package/dist/{better-sqlite-backend-ahx5p0br.js → better-sqlite-backend-PII64VE6.js} +37 -25
- package/dist/better-sqlite-backend-VUBVQ7SN.js +209 -0
- package/dist/better-sqlite-backend-Y3AQN65E.js +159 -0
- package/dist/better-sqlite-backend-Y3M7DXOX.js +159 -0
- package/dist/boot-middleware-FJDGVUM4.js +9 -0
- package/dist/boot-middleware-MHLHFCUC.js +9 -0
- package/dist/boot-middleware-MLJUTLUM.js +9 -0
- package/dist/boot-middleware-ZZPDZNYR.js +9 -0
- package/dist/{index-wncptktd.js → chunk-276LKLZR.js} +126 -59
- package/dist/chunk-2BRTCEHB.js +143 -0
- package/dist/chunk-2CX5UCRV.js +111 -0
- package/dist/chunk-2ESYSVXG.js +48 -0
- package/dist/{index-yp88he8n.js → chunk-2I5JU73Y.js} +88 -64
- package/dist/{index-w5wccer3.js → chunk-2UNSRRNB.js} +10 -5
- package/dist/{index-4wxa8xz4.js → chunk-335UEHQR.js} +158 -22
- package/dist/chunk-36VSSTL7.js +357 -0
- package/dist/chunk-3ETIIPPB.js +1077 -0
- package/dist/chunk-3GDRZTAW.js +45 -0
- package/dist/chunk-44FFQKQX.js +142 -0
- package/dist/chunk-4CF2L46N.js +29 -0
- package/dist/chunk-4HYPLFJD.js +150 -0
- package/dist/chunk-4XIVMVHC.js +361 -0
- package/dist/chunk-5CINODKT.js +41 -0
- package/dist/chunk-5ESGWJ5L.js +45 -0
- package/dist/chunk-5FGLQGMF.js +1676 -0
- package/dist/chunk-5IQZFITY.js +357 -0
- package/dist/{index-wt8rz4gn.js → chunk-5JWFAQDW.js} +41 -23
- package/dist/{index-7pjz3tsy.js → chunk-62UHTVU3.js} +50 -16
- package/dist/{index-h32txmxe.js → chunk-66UJQT2I.js} +6 -13
- package/dist/chunk-6CTA6MCE.js +340 -0
- package/dist/{index-4cdr7x2x.js → chunk-6RNNVOAS.js} +178 -109
- package/dist/chunk-6X23PZ6H.js +969 -0
- package/dist/chunk-7C7LL6MB.js +315 -0
- package/dist/chunk-7F4HM3JG.js +394 -0
- package/dist/chunk-7KJ7T4D3.js +910 -0
- package/dist/chunk-7QQQNUB5.js +92 -0
- package/dist/{index-53f3b8p8.js → chunk-7QWJBS72.js} +210 -165
- package/dist/chunk-7R36OZK3.js +957 -0
- package/dist/chunk-7UPKCOHE.js +946 -0
- package/dist/chunk-7WQGTFVJ.js +7434 -0
- package/dist/chunk-A3BONW34.js +35 -0
- package/dist/chunk-AHMDVHBL.js +141 -0
- package/dist/chunk-AW6A4OZY.js +171 -0
- package/dist/chunk-B3ZIFA2O.js +2240 -0
- package/dist/chunk-BJ5EKCJ5.js +458 -0
- package/dist/chunk-BJ7EZ7FP.js +145 -0
- package/dist/chunk-BQBUVMRN.js +171 -0
- package/dist/chunk-BRGYDO7D.js +223 -0
- package/dist/chunk-BXSTJVE3.js +67 -0
- package/dist/chunk-C5KPSEDN.js +359 -0
- package/dist/chunk-CCTNYTUC.js +940 -0
- package/dist/chunk-CYQ2OVD2.js +35 -0
- package/dist/chunk-DDAK7YOE.js +299 -0
- package/dist/chunk-DRILKBY6.js +965 -0
- package/dist/chunk-DXE24HNN.js +45 -0
- package/dist/chunk-E7ICUNW7.js +945 -0
- package/dist/chunk-EAL2PUOE.js +10022 -0
- package/dist/chunk-ELT7MLZB.js +109 -0
- package/dist/chunk-EO3J7GRP.js +0 -0
- package/dist/chunk-EWEIRF6G.js +171 -0
- package/dist/chunk-F5VDGQJC.js +120 -0
- package/dist/chunk-FCPL3IEQ.js +98 -0
- package/dist/{index-nq520y6k.js → chunk-FDPKYSV7.js} +43 -31
- package/dist/chunk-FES3TC24.js +171 -0
- package/dist/chunk-FF36CQHZ.js +61 -0
- package/dist/chunk-FKQO5A3H.js +35 -0
- package/dist/chunk-FOWKR5TW.js +129 -0
- package/dist/chunk-FZVCXDYW.js +150 -0
- package/dist/chunk-G3XIHPSQ.js +361 -0
- package/dist/chunk-GD5QJXSS.js +98 -0
- package/dist/chunk-GFZCJ4EH.js +108 -0
- package/dist/chunk-GKJLYLVU.js +359 -0
- package/dist/chunk-GLM4HGN4.js +55 -0
- package/dist/chunk-GNXHXNVQ.js +113 -0
- package/dist/chunk-GSR6ILTM.js +277 -0
- package/dist/chunk-GWRIMRSX.js +45 -0
- package/dist/chunk-H72UW2HJ.js +45 -0
- package/dist/chunk-HGI74PXB.js +7417 -0
- package/dist/chunk-HGRA37LO.js +145 -0
- package/dist/chunk-HO4TURXW.js +1078 -0
- package/dist/chunk-HXSRQO3L.js +145 -0
- package/dist/chunk-IG2X2BVO.js +373 -0
- package/dist/chunk-IIJVDD54.js +373 -0
- package/dist/chunk-IUWVEEOX.js +145 -0
- package/dist/chunk-IX4BBOIT.js +394 -0
- package/dist/{index-yhwjgfvj.js → chunk-IXU4RMQM.js} +67 -60
- package/dist/chunk-J3WYZO3Q.js +211 -0
- package/dist/{index-vkpkfwhq.js → chunk-J6OUIION.js} +234 -194
- package/dist/{index-xzym9w0m.js → chunk-JA7AIHRK.js} +12 -7
- package/dist/chunk-JUEMDWLU.js +233 -0
- package/dist/chunk-K46RNFDE.js +171 -0
- package/dist/chunk-KAGU2XMY.js +359 -0
- package/dist/chunk-KCVYJNVX.js +394 -0
- package/dist/chunk-KFQGP6VL.js +33 -0
- package/dist/chunk-KKDRMIV6.js +419 -0
- package/dist/chunk-KQ4A2D2P.js +910 -0
- package/dist/chunk-KSU2GW22.js +958 -0
- package/dist/chunk-KYLIQ3YI.js +399 -0
- package/dist/chunk-KZYJJIRN.js +946 -0
- package/dist/chunk-LFOX744K.js +96 -0
- package/dist/{index-rv1p47gp.js → chunk-LHOVJEWR.js} +2756 -2307
- package/dist/{index-h9e2efx4.js → chunk-LNUIGRDZ.js} +71 -55
- package/dist/chunk-LOPXTPF3.js +120 -0
- package/dist/chunk-LZR3VIFU.js +907 -0
- package/dist/chunk-MBNBTJCR.js +394 -0
- package/dist/chunk-MCKGQKYU.js +15 -0
- package/dist/{index-skhn0agf.js → chunk-MLC5BUYO.js} +19 -20
- package/dist/chunk-MPXUVGT3.js +104 -0
- package/dist/chunk-MU6EOS6F.js +0 -0
- package/dist/chunk-MWRQ2TXT.js +357 -0
- package/dist/{index-nzb3am4f.js → chunk-NO73OK2I.js} +43 -21
- package/dist/chunk-NPE2YJHK.js +394 -0
- package/dist/{index-xhcp6xrn.js → chunk-NSDXU6QX.js} +654 -500
- package/dist/chunk-NXIRDSZ6.js +145 -0
- package/dist/chunk-NZWFNHCS.js +407 -0
- package/dist/chunk-O2AV5WMN.js +48 -0
- package/dist/{index-h7zxhhhh.js → chunk-OB4CMMX6.js} +46 -38
- package/dist/chunk-OBKU74FU.js +7411 -0
- package/dist/chunk-OQNDWRDE.js +145 -0
- package/dist/chunk-OVWAJMB6.js +394 -0
- package/dist/chunk-PDHLBTTD.js +45 -0
- package/dist/chunk-PEQNRKLG.js +210 -0
- package/dist/chunk-QERIS7QY.js +7403 -0
- package/dist/chunk-QHA2DM3C.js +373 -0
- package/dist/chunk-QLM4HSYC.js +45 -0
- package/dist/chunk-RSWUFTO2.js +857 -0
- package/dist/chunk-S2OT3TQJ.js +283 -0
- package/dist/chunk-S5PHSN5K.js +907 -0
- package/dist/chunk-SIAA4J6H.js +21 -0
- package/dist/chunk-SPSPV5BC.js +390 -0
- package/dist/chunk-SQBNLUIA.js +171 -0
- package/dist/chunk-STLN6A6B.js +355 -0
- package/dist/chunk-TCKXSOBP.js +123 -0
- package/dist/chunk-U7HV7GU2.js +17 -0
- package/dist/chunk-UBGUDMUV.js +59 -0
- package/dist/chunk-UGZHOGRA.js +39 -0
- package/dist/chunk-UICF66FS.js +359 -0
- package/dist/chunk-UK3EQREE.js +1078 -0
- package/dist/chunk-UPKPURVY.js +394 -0
- package/dist/chunk-URC74VCN.js +959 -0
- package/dist/chunk-USEINYUL.js +12 -0
- package/dist/{index-bmyt7k8n.js → chunk-UZRUP7QW.js} +12 -4
- package/dist/chunk-V3G7Q3QQ.js +102 -0
- package/dist/chunk-VDAKEOML.js +857 -0
- package/dist/chunk-VUJ6SA55.js +303 -0
- package/dist/chunk-VUJQLIML.js +141 -0
- package/dist/chunk-VWKLKLYB.js +267 -0
- package/dist/chunk-VYC3RZMK.js +277 -0
- package/dist/chunk-WMERMSWI.js +154 -0
- package/dist/chunk-WMR777PO.js +2213 -0
- package/dist/{index-n9f2qyh5.js → chunk-X46IECAC.js} +55 -33
- package/dist/chunk-X5FLTRUB.js +517 -0
- package/dist/chunk-X762XWVC.js +419 -0
- package/dist/chunk-XEN3OEYY.js +2234 -0
- package/dist/chunk-XMQ7G77X.js +260 -0
- package/dist/chunk-XZQ66K7A.js +124 -0
- package/dist/{index-w7ng765c.js → chunk-YCM7ZYEZ.js} +102 -49
- package/dist/chunk-YY3GF7DH.js +7411 -0
- package/dist/chunk-ZE5R3H4C.js +907 -0
- package/dist/chunk-ZHVI7BQN.js +1077 -0
- package/dist/chunk-ZMN5LUB7.js +7411 -0
- package/dist/chunk-ZUV4MD5U.js +94 -0
- package/dist/cli/errors.d.ts +6 -0
- package/dist/cli/errors.d.ts.map +1 -0
- package/dist/cli/examples.d.ts +23 -0
- package/dist/cli/examples.d.ts.map +1 -0
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +2338 -6190
- package/dist/client/index.d.ts +6 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +41 -21
- package/dist/client/live.d.ts +67 -0
- package/dist/client/live.d.ts.map +1 -0
- package/dist/client/reactive.d.ts +31 -0
- package/dist/client/reactive.d.ts.map +1 -0
- package/dist/client/sdk.d.ts +26 -2
- package/dist/client/sdk.d.ts.map +1 -1
- package/dist/client/sdk.js +9 -0
- package/dist/client/vcs-client.d.ts +129 -0
- package/dist/client/vcs-client.d.ts.map +1 -0
- package/dist/cms/index.js +171 -163
- package/dist/{config-8hczw0rs.js → config-KMY6RRK3.js} +8 -9
- package/dist/config-PFTP67TR.js +19 -0
- package/dist/config-VDMK2DUJ.js +19 -0
- package/dist/core/computation/index.d.ts +5 -0
- package/dist/core/computation/index.d.ts.map +1 -0
- package/dist/core/computation/rollup.d.ts +18 -0
- package/dist/core/computation/rollup.d.ts.map +1 -0
- package/dist/core/index.d.ts +5 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +168 -101
- package/dist/core/kernel/boot-middleware.d.ts +10 -0
- package/dist/core/kernel/boot-middleware.d.ts.map +1 -0
- package/dist/core/kernel/logic-middleware.d.ts +7 -1
- package/dist/core/kernel/logic-middleware.d.ts.map +1 -1
- package/dist/core/kernel/trellis-kernel.d.ts.map +1 -1
- package/dist/core/ontology/types.d.ts +5 -0
- package/dist/core/ontology/types.d.ts.map +1 -1
- package/dist/core/persist/better-sqlite-backend.d.ts +9 -2
- package/dist/core/persist/better-sqlite-backend.d.ts.map +1 -1
- package/dist/core/persist/factory.d.ts +6 -7
- package/dist/core/persist/factory.d.ts.map +1 -1
- package/dist/core/persist/factory.js +2 -3
- package/dist/core/persist/sqljs-backend.js +2 -3
- package/dist/db/index.d.ts +4 -1
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +69 -56
- package/dist/db/inspector.js +11 -19
- package/dist/decisions/index.js +9 -10
- package/dist/deploy-66EC752W.js +9 -0
- package/dist/deploy-SO7AFK6L.js +9 -0
- package/dist/embeddings/auto-embed.d.ts +2 -2
- package/dist/embeddings/auto-embed.d.ts.map +1 -1
- package/dist/embeddings/index.js +20 -22
- package/dist/embeddings/search.d.ts +2 -1
- package/dist/embeddings/search.d.ts.map +1 -1
- package/dist/embeddings/store.d.ts +25 -4
- package/dist/embeddings/store.d.ts.map +1 -1
- package/dist/engine-7GXBM4IT.js +7 -0
- package/dist/engine-NSR6BIF7.js +7 -0
- package/dist/engine.d.ts +32 -12
- package/dist/engine.d.ts.map +1 -1
- package/dist/factory-2P64OC7M.js +34 -0
- package/dist/factory-YP4ZZK5K.js +34 -0
- package/dist/import-AJLYHFIA.js +10 -0
- package/dist/import-UZEKXU3B.js +10 -0
- package/dist/index.js +102 -93
- package/dist/launch-explorer-AI6L2AWJ.js +91 -0
- package/dist/launch-explorer-HZ4ZJA4X.js +95 -0
- package/dist/links/index.js +24 -26
- package/dist/plugins/agent-memory/index.js +316 -0
- package/dist/plugins/idea-garden/index.js +165 -0
- package/dist/plugins/plan-approval/index.js +579 -0
- package/dist/plugins/proactive-watcher/index.js +194 -0
- package/dist/{index-2r4jxwnb.js → query-GJL3CVGN.js} +14 -15
- package/dist/query-MBJSK3EB.js +31 -0
- package/dist/query-TJHEVSKL.js +31 -0
- package/dist/query-WUIKOHPE.js +524 -0
- package/dist/query-XYLTJYSA.js +31 -0
- package/dist/react/index.js +39 -70
- package/dist/react/realtime.js +11 -0
- package/dist/react/schema-hooks.js +87 -0
- package/dist/realtime/broadcast-channel-transport.d.ts +43 -0
- package/dist/realtime/broadcast-channel-transport.d.ts.map +1 -0
- package/dist/realtime/durable-object-relay-transport.d.ts +96 -0
- package/dist/realtime/durable-object-relay-transport.d.ts.map +1 -0
- package/dist/realtime/index.d.ts +44 -0
- package/dist/realtime/index.d.ts.map +1 -0
- package/dist/realtime/index.js +40 -0
- package/dist/realtime/memory-hub.d.ts +32 -0
- package/dist/realtime/memory-hub.d.ts.map +1 -0
- package/dist/realtime/persistent-channel.d.ts +105 -0
- package/dist/realtime/persistent-channel.d.ts.map +1 -0
- package/dist/realtime/presence.d.ts +73 -0
- package/dist/realtime/presence.d.ts.map +1 -0
- package/dist/realtime/relay-persistence.d.ts +37 -0
- package/dist/realtime/relay-persistence.d.ts.map +1 -0
- package/dist/realtime/relay-persistence.js +107 -0
- package/dist/realtime/relay-server.d.ts +103 -0
- package/dist/realtime/relay-server.d.ts.map +1 -0
- package/dist/realtime/room.d.ts +98 -0
- package/dist/realtime/room.d.ts.map +1 -0
- package/dist/realtime/text.d.ts +73 -0
- package/dist/realtime/text.d.ts.map +1 -0
- package/dist/realtime/types.d.ts +89 -0
- package/dist/realtime/types.d.ts.map +1 -0
- package/dist/realtime/websocket-relay-transport.d.ts +28 -0
- package/dist/realtime/websocket-relay-transport.d.ts.map +1 -0
- package/dist/realtime.bundle.js +1100 -0
- package/dist/remote-manager-BLJZ6KF6.js +224 -0
- package/dist/{remote-manager-xvbg4230.js → remote-manager-BPYE46SI.js} +24 -15
- package/dist/remote-manager-FMESEAFA.js +224 -0
- package/dist/remote-manager-K2WZ5RHY.js +223 -0
- package/dist/remote-manager-SG545WNY.js +224 -0
- package/dist/remote-manager-SG5PQKCH.js +224 -0
- package/dist/remote-manager-WGP6MIQZ.js +224 -0
- package/dist/scaffold/write.d.ts.map +1 -1
- package/dist/schema/define.d.ts +137 -0
- package/dist/schema/define.d.ts.map +1 -0
- package/dist/schema/entity-projection.d.ts +34 -0
- package/dist/schema/entity-projection.d.ts.map +1 -0
- package/dist/schema/eql.d.ts +46 -0
- package/dist/schema/eql.d.ts.map +1 -0
- package/dist/schema/index.d.ts +21 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +45 -0
- package/dist/schema/kernel-resolve.d.ts +21 -0
- package/dist/schema/kernel-resolve.d.ts.map +1 -0
- package/dist/schema/mutations.d.ts +20 -0
- package/dist/schema/mutations.d.ts.map +1 -0
- package/dist/schema/resolve.d.ts +21 -0
- package/dist/schema/resolve.d.ts.map +1 -0
- package/dist/sdk-3KBB3E6V.js +16 -0
- package/dist/sdk-4ZQO6UTU.js +16 -0
- package/dist/sdk-6JA6GV3G.js +16 -0
- package/dist/sdk-6VTP5UTZ.js +16 -0
- package/dist/sdk-7VS6TYCD.js +16 -0
- package/dist/sdk-HQ3FTLRT.js +16 -0
- package/dist/sdk-HZ7NU3XE.js +15 -0
- package/dist/sdk-KBQE2OXT.js +16 -0
- package/dist/sdk-LZ7W3EEY.js +9 -0
- package/dist/sdk-MSCDZ7JU.js +15 -0
- package/dist/sdk-WNZOGO3S.js +15 -0
- package/dist/sdk-YLV33ZCW.js +9 -0
- package/dist/sdk-ZSUD2LLJ.js +16 -0
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +69 -61
- package/dist/server/node-adapter.js +5 -104
- package/dist/server/realtime.d.ts +10 -2
- package/dist/server/realtime.d.ts.map +1 -1
- package/dist/server/server.d.ts +7 -16
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/sprites.d.ts.map +1 -1
- package/dist/server/tenancy.d.ts.map +1 -1
- package/dist/server-AFXFFBWA.js +11 -0
- package/dist/server-AGHC4VUL.js +11 -0
- package/dist/server-BOH7M4TT.js +13 -0
- package/dist/server-DBUY2KY5.js +11 -0
- package/dist/server-GWBQJPRG.js +11 -0
- package/dist/server-IGBIIJSF.js +13 -0
- package/dist/server-JZZFULVU.js +11 -0
- package/dist/server-L5XAF4M5.js +11 -0
- package/dist/server-NYFUHANA.js +12 -0
- package/dist/server-OABUB2LO.js +12 -0
- package/dist/server-P2CKZWWV.js +12 -0
- package/dist/{sprites-vc4qbrp1.js → sprites-RU3E4XQN.js} +6 -7
- package/dist/sprites-XVSMQLSI.js +15 -0
- package/dist/sql-wasm-FORCZFHZ.js +2148 -0
- package/dist/sql-wasm-JZH76RLO.js +2148 -0
- package/dist/sqljs-backend-CJQOIQYE.js +266 -0
- package/dist/sqljs-backend-KWXBUDUO.js +266 -0
- package/dist/state-demo.bundle.js +1033 -0
- package/dist/svelte/index.d.ts +17 -0
- package/dist/svelte/index.d.ts.map +1 -0
- package/dist/svelte/index.js +51 -0
- package/dist/svelte/schema-hooks.d.ts +45 -0
- package/dist/svelte/schema-hooks.d.ts.map +1 -0
- package/dist/svelte/schema-hooks.js +71 -0
- package/dist/svelte/stores.d.ts +78 -0
- package/dist/svelte/stores.d.ts.map +1 -0
- package/dist/sync/http-transport.d.ts +3 -3
- package/dist/sync/http-transport.d.ts.map +1 -1
- package/dist/sync/index.d.ts +15 -1
- package/dist/sync/index.d.ts.map +1 -1
- package/dist/sync/index.js +617 -0
- package/dist/sync/memory-room.d.ts +37 -0
- package/dist/sync/memory-room.d.ts.map +1 -0
- package/dist/sync/memory-transport.d.ts +3 -3
- package/dist/sync/memory-transport.d.ts.map +1 -1
- package/dist/sync/partykit-room.d.ts +40 -0
- package/dist/sync/partykit-room.d.ts.map +1 -0
- package/dist/sync/partykit-transport.d.ts +84 -0
- package/dist/sync/partykit-transport.d.ts.map +1 -0
- package/dist/sync/room-core.d.ts +53 -0
- package/dist/sync/room-core.d.ts.map +1 -0
- package/dist/sync/sync-engine.d.ts +40 -2
- package/dist/sync/sync-engine.d.ts.map +1 -1
- package/dist/sync/sync-room-server.d.ts +39 -0
- package/dist/sync/sync-room-server.d.ts.map +1 -0
- package/dist/sync/types.d.ts +70 -3
- package/dist/sync/types.d.ts.map +1 -1
- package/dist/sync/vcs-sync-peer.d.ts +63 -0
- package/dist/sync/vcs-sync-peer.d.ts.map +1 -0
- package/dist/sync/ws-transport.d.ts +2 -2
- package/dist/sync/ws-transport.d.ts.map +1 -1
- package/dist/tenancy-CBWYEVUB.js +11 -0
- package/dist/tenancy-FO6WVYFN.js +13 -0
- package/dist/tenancy-FWDBESMX.js +14 -0
- package/dist/tenancy-HGPIS5QA.js +13 -0
- package/dist/tenancy-HXFALA37.js +14 -0
- package/dist/tenancy-OP34NFFS.js +14 -0
- package/dist/tenancy-S676GLID.js +14 -0
- package/dist/tenancy-V7ARWNNV.js +14 -0
- package/dist/tenancy-ZDN4GXK5.js +13 -0
- package/dist/tenancy-ZT5VMY7B.js +14 -0
- package/dist/ui/client.html +355 -67
- package/dist/ui/launch-explorer.d.ts +22 -0
- package/dist/ui/launch-explorer.d.ts.map +1 -0
- package/dist/ui/server.d.ts +1 -1
- package/dist/ui/server.d.ts.map +1 -1
- package/dist/vcs/blob-store.d.ts.map +1 -1
- package/dist/vcs/idb-op-log.d.ts +67 -0
- package/dist/vcs/idb-op-log.d.ts.map +1 -0
- package/dist/vcs/index.d.ts +1 -0
- package/dist/vcs/index.d.ts.map +1 -1
- package/dist/vcs/index.js +81 -72
- package/dist/vcs/issue.d.ts +22 -5
- package/dist/vcs/issue.d.ts.map +1 -1
- package/dist/vcs/lane-materialize.d.ts +5 -0
- package/dist/vcs/lane-materialize.d.ts.map +1 -1
- package/dist/vcs/op-log.d.ts +28 -2
- package/dist/vcs/op-log.d.ts.map +1 -1
- package/dist/vcs/ops.d.ts +10 -0
- package/dist/vcs/ops.d.ts.map +1 -1
- package/dist/{vm-config-6xhsj6b3.js → vm-config-JI4OXKDQ.js} +9 -10
- package/dist/vm-config-YZRJ3KUB.js +21 -0
- package/dist/vue/hooks.d.ts +64 -0
- package/dist/vue/hooks.d.ts.map +1 -0
- package/dist/vue/index.d.ts +19 -0
- package/dist/vue/index.d.ts.map +1 -0
- package/dist/vue/index.js +59 -0
- package/dist/vue/schema-hooks.d.ts +41 -0
- package/dist/vue/schema-hooks.d.ts.map +1 -0
- package/dist/vue/schema-hooks.js +64 -0
- package/package.json +118 -16
- package/dist/deploy-999q207z.js +0 -10
- package/dist/engine-y0724kjq.js +0 -8
- package/dist/import-s2b8e0ft.js +0 -11
- package/dist/index-a76rekgs.js +0 -67
- package/dist/index-c9h37r6h.js +0 -1
- package/dist/index-hr9qvv77.js +0 -860
- package/dist/index-k5b0xskw.js +0 -1
- package/dist/index-y6a4kj0p.js +0 -43
- package/dist/sdk-bepky0xs.js +0 -16
- package/dist/server-szdjx0nt.js +0 -13
- package/dist/sqlite-backend-0vsmc6qj.js +0 -8
- package/dist/tenancy-pjm32b4v.js +0 -14
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Notable changes by release date and version. See [trellis.computer/changelog](https://trellis.computer/changelog) for the public site copy.
|
|
4
|
+
|
|
5
|
+
## trellis [3.2.0] — 2026-06-08
|
|
6
|
+
|
|
7
|
+
- **Typed realtime SDK:** `trellis/schema` — `defineType`, `entityQuery`, `WhereFilter` operators, nested `InferResolvedType`, server `hydrateAndResolve` on subscription push.
|
|
8
|
+
- **Live client:** `liveEntities` / `liveEntity` in `trellis/client` with id-scoped subscriptions (`entityQuery`) instead of full-type scans.
|
|
9
|
+
- **Framework hooks:** `trellis/svelte/typed`, `trellis/vue/typed`, `trellis/react/typed` — typed `useEntities` / `useEntity` adapters.
|
|
10
|
+
- **Studio plugin exports:** `trellis/plugins/plan-approval`, `proactive-watcher`, `idea-garden`, `agent-memory` ship in `dist/` for npm consumers (Trellis Studio / opencode).
|
|
11
|
+
- **Ontology:** idempotent `registerType` — duplicate schema registration returns quietly (409 swallowed client-side).
|
|
12
|
+
- **Realtime:** explorer graph-nav + collections demos; collab presence session lifecycle hardening.
|
|
13
|
+
|
|
14
|
+
## trellis [3.1.32] — 2026-05-29
|
|
4
15
|
|
|
5
16
|
- **Agent Lanes (W1–W4):** `trellis lane` — isolated per-agent op journals under `.trellis/lanes/`, `create` / `enter` / `leave` / `status` / `diff` / `promote` / `drop`.
|
|
6
17
|
- **`trellis lane promote`:** replay lane ops onto integration with `--dry-run`, `--explain`, and hard/soft/file conflict detection.
|
|
@@ -10,7 +21,7 @@
|
|
|
10
21
|
- **`getBranchHeadOpHash`:** latest `headOpHash` fact wins (fixes stale head during promote).
|
|
11
22
|
- **Op log lock:** configurable timeout via `TRELLIS_OPLOG_LOCK_MS`.
|
|
12
23
|
|
|
13
|
-
## 3.1.14
|
|
24
|
+
## trellis [3.1.14] — 2026-05-22
|
|
14
25
|
|
|
15
26
|
- CLI `trellis --version` now reports the real package version from `package.json` (was hardcoded `0.1.0`).
|
|
16
27
|
- CLI `-p` / cwd resolution walks up to the nearest `.trellis` repo root (monorepo subfolders work without passing the root path).
|
|
@@ -18,7 +29,7 @@
|
|
|
18
29
|
- `issue create` accepts `--description` as an alias for `--desc`.
|
|
19
30
|
- `bin/trellis.mjs` launcher finds Homebrew Bun when Node's `PATH` is minimal (`npx trellis` / agent shells).
|
|
20
31
|
|
|
21
|
-
## 3.1.2
|
|
32
|
+
## trellis [3.1.2] — 2026-05-12
|
|
22
33
|
|
|
23
34
|
- Fixed `trellis/cms` collection reads for inferred collections whose normalized key differs from the stored entity type casing, such as `blogpost` reading `BlogPost` entities.
|
|
24
35
|
- Added graph-link awareness to CMS entries so reference links such as `post --author--> author` appear in `fields` and can be expanded.
|
|
@@ -29,10 +40,10 @@
|
|
|
29
40
|
- Added CMS client/scaffold tests and included them in the default test script.
|
|
30
41
|
- Added `directory` support to CMS consumer scaffolds for multi-instance opencode routing.
|
|
31
42
|
|
|
32
|
-
## 3.1.1
|
|
43
|
+
## trellis [3.1.1] — 2026-05-12
|
|
33
44
|
|
|
34
45
|
- Published the first `trellis/cms` SDK package update after adding scaffold helpers.
|
|
35
46
|
|
|
36
|
-
## 3.1.0
|
|
47
|
+
## trellis [3.1.0] — 2026-05-12
|
|
37
48
|
|
|
38
49
|
- Added the `trellis/cms` subpath with `createCmsClient`, collection reads, entry reads, polling subscriptions, reference expansion, collection discovery, and consumer scaffold helpers for vanilla, React, Solid, and Vue.
|
package/README.md
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Trellis
|
|
3
|
+
description: The Agentic Framework — a local-first semantic graph OS for code, agents, and decisions.
|
|
4
|
+
created: 2026-05-30
|
|
5
|
+
updated: 2026-06-05
|
|
6
|
+
---
|
|
7
|
+
|
|
1
8
|
# Trellis
|
|
2
9
|
|
|
3
10
|
> **The Agentic Framework**
|
|
@@ -44,8 +51,9 @@ echo "# My Project" > README.md
|
|
|
44
51
|
trellis issue create -t "Bootstrap Visualization"
|
|
45
52
|
trellis milestone create -m "Initial Release"
|
|
46
53
|
|
|
47
|
-
# 5. Launch the
|
|
48
|
-
trellis
|
|
54
|
+
# 5. Launch the live graph explorer (SvelteKit + realtime sidecar)
|
|
55
|
+
trellis ui
|
|
56
|
+
# Legacy VCS-only visualizer: trellis ui --legacy --port 3333
|
|
49
57
|
|
|
50
58
|
# 6. Create coding session with trellis harness
|
|
51
59
|
trellis code
|
|
@@ -72,6 +80,15 @@ After running `trellis init`, you'll see a progressive disclosure success screen
|
|
|
72
80
|
|
|
73
81
|
See the [CLI guide](https://trellis.computer/docs/cli) for complete documentation.
|
|
74
82
|
|
|
83
|
+
### Typed SDK + realtime (React, Vue, Svelte)
|
|
84
|
+
|
|
85
|
+
Reference apps and stable entrypoints: [docs/sdk-typed-realtime.md](./docs/sdk-typed-realtime.md).
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
just graph-nav # typed live nav — examples/graph-nav
|
|
89
|
+
just universal-presence # presence, chat, text — examples/universal-presence
|
|
90
|
+
```
|
|
91
|
+
|
|
75
92
|
---
|
|
76
93
|
|
|
77
94
|
## CMS Client SDK
|
package/bin/trellis.mjs
CHANGED
|
@@ -1,76 +1,3 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
// Trellis CLI launcher.
|
|
3
|
-
|
|
4
|
-
// The bundled CLI in dist/ is built with `--target bun` and uses Bun-specific
|
|
5
|
-
// APIs at runtime. This launcher works under either runtime:
|
|
6
|
-
// - If invoked by bun, it imports the bundle directly.
|
|
7
|
-
// - If invoked by node (the default for `npx trellis`), it re-execs the same
|
|
8
|
-
// script under bun. If bun is missing, it prints actionable install hints.
|
|
9
|
-
|
|
10
|
-
import { spawnSync } from 'node:child_process';
|
|
11
|
-
import { fileURLToPath } from 'node:url';
|
|
12
|
-
import { dirname, join, delimiter } from 'node:path';
|
|
13
|
-
import { existsSync } from 'node:fs';
|
|
14
|
-
|
|
15
|
-
const isWindows = process.platform === 'win32';
|
|
16
|
-
|
|
17
|
-
if (process.versions?.bun) {
|
|
18
|
-
await import('../dist/cli/index.js');
|
|
19
|
-
} else {
|
|
20
|
-
const bun =
|
|
21
|
-
findOnPath('bun') ??
|
|
22
|
-
findUserBun() ??
|
|
23
|
-
(existsSync('/opt/homebrew/bin/bun') ? '/opt/homebrew/bin/bun' : null);
|
|
24
|
-
if (!bun) {
|
|
25
|
-
process.stderr.write(
|
|
26
|
-
[
|
|
27
|
-
'',
|
|
28
|
-
'Trellis requires Bun to run.',
|
|
29
|
-
'',
|
|
30
|
-
'Install Bun:',
|
|
31
|
-
' macOS/Linux: curl -fsSL https://bun.sh/install | bash',
|
|
32
|
-
' Windows: powershell -c "irm bun.sh/install.ps1 | iex"',
|
|
33
|
-
'',
|
|
34
|
-
'More info: https://bun.sh',
|
|
35
|
-
'',
|
|
36
|
-
].join('\n'),
|
|
37
|
-
);
|
|
38
|
-
process.exit(1);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
const here = fileURLToPath(import.meta.url);
|
|
42
|
-
const result = spawnSync(bun, [here, ...process.argv.slice(2)], {
|
|
43
|
-
stdio: 'inherit',
|
|
44
|
-
env: process.env,
|
|
45
|
-
});
|
|
46
|
-
const code = result.status ?? 1;
|
|
47
|
-
if (code !== 0 && result.error) {
|
|
48
|
-
process.stderr.write(`${result.error.message}\n`);
|
|
49
|
-
}
|
|
50
|
-
process.exit(code);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
function findOnPath(cmd) {
|
|
54
|
-
const PATH = process.env.PATH || '';
|
|
55
|
-
const exts = isWindows ? ['.exe', '.cmd', '.bat', ''] : [''];
|
|
56
|
-
for (const dir of PATH.split(isWindows ? ';' : delimiter)) {
|
|
57
|
-
if (!dir) continue;
|
|
58
|
-
for (const ext of exts) {
|
|
59
|
-
const p = join(dir, cmd + ext);
|
|
60
|
-
if (existsSync(p)) return p;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
return null;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
function findUserBun() {
|
|
67
|
-
const home = process.env.HOME || process.env.USERPROFILE;
|
|
68
|
-
if (!home) return null;
|
|
69
|
-
const candidates = isWindows
|
|
70
|
-
? [join(home, '.bun', 'bin', 'bun.exe')]
|
|
71
|
-
: [join(home, '.bun', 'bin', 'bun')];
|
|
72
|
-
for (const p of candidates) {
|
|
73
|
-
if (existsSync(p)) return p;
|
|
74
|
-
}
|
|
75
|
-
return null;
|
|
76
|
-
}
|
|
2
|
+
// Trellis CLI launcher — runs under Node.js (>=20) or any WebContainer.
|
|
3
|
+
import '../dist/cli/index.js';
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import {
|
|
2
|
+
__require
|
|
3
|
+
} from "./chunk-KFQGP6VL.js";
|
|
4
|
+
|
|
5
|
+
// src/core/persist/better-sqlite-backend.ts
|
|
6
|
+
var SCHEMA_SQL = `
|
|
7
|
+
CREATE TABLE IF NOT EXISTS ops (
|
|
8
|
+
hash TEXT PRIMARY KEY,
|
|
9
|
+
kind TEXT NOT NULL,
|
|
10
|
+
timestamp TEXT NOT NULL,
|
|
11
|
+
agent_id TEXT NOT NULL,
|
|
12
|
+
previous_hash TEXT,
|
|
13
|
+
payload TEXT NOT NULL
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
CREATE TABLE IF NOT EXISTS snapshots (
|
|
17
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
18
|
+
last_op_hash TEXT NOT NULL,
|
|
19
|
+
data TEXT NOT NULL,
|
|
20
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
CREATE TABLE IF NOT EXISTS blobs (
|
|
24
|
+
hash TEXT PRIMARY KEY,
|
|
25
|
+
content BLOB NOT NULL
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
CREATE INDEX IF NOT EXISTS idx_ops_kind ON ops(kind);
|
|
29
|
+
CREATE INDEX IF NOT EXISTS idx_ops_timestamp ON ops(timestamp);
|
|
30
|
+
CREATE INDEX IF NOT EXISTS idx_ops_agent ON ops(agent_id);
|
|
31
|
+
CREATE INDEX IF NOT EXISTS idx_ops_previous ON ops(previous_hash);
|
|
32
|
+
CREATE INDEX IF NOT EXISTS idx_snapshots_op ON snapshots(last_op_hash);
|
|
33
|
+
`;
|
|
34
|
+
var BetterSqliteKernelBackend = class {
|
|
35
|
+
db;
|
|
36
|
+
_stmts;
|
|
37
|
+
_initialized = false;
|
|
38
|
+
constructor(dbPath) {
|
|
39
|
+
try {
|
|
40
|
+
const createRequire = __require("module").createRequire;
|
|
41
|
+
const req = createRequire(__filename);
|
|
42
|
+
const Database = req("better-sqlite3");
|
|
43
|
+
this.db = new Database(dbPath);
|
|
44
|
+
} catch (e) {
|
|
45
|
+
throw new Error(
|
|
46
|
+
`Failed to initialize SQLite backend: ${e instanceof Error ? e.message : "Unknown error"}. Ensure better-sqlite3 is installed: npm install better-sqlite3`
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
_prepareStatements() {
|
|
51
|
+
const db = this.db;
|
|
52
|
+
this._stmts = {
|
|
53
|
+
insert: db.prepare(
|
|
54
|
+
"INSERT OR REPLACE INTO ops (hash, kind, timestamp, agent_id, previous_hash, payload) VALUES (?, ?, ?, ?, ?, ?)"
|
|
55
|
+
),
|
|
56
|
+
readAll: db.prepare("SELECT * FROM ops ORDER BY timestamp ASC"),
|
|
57
|
+
readUntil: db.prepare(
|
|
58
|
+
"SELECT * FROM ops WHERE rowid <= (SELECT rowid FROM ops WHERE hash = ?) ORDER BY rowid ASC"
|
|
59
|
+
),
|
|
60
|
+
readAfter: db.prepare(
|
|
61
|
+
"SELECT * FROM ops WHERE rowid > (SELECT rowid FROM ops WHERE hash = ?) ORDER BY rowid ASC"
|
|
62
|
+
),
|
|
63
|
+
getByHash: db.prepare("SELECT * FROM ops WHERE hash = ?"),
|
|
64
|
+
getLast: db.prepare("SELECT * FROM ops ORDER BY timestamp DESC LIMIT 1"),
|
|
65
|
+
count: db.prepare("SELECT COUNT(*) as count FROM ops"),
|
|
66
|
+
saveSnapshot: db.prepare(
|
|
67
|
+
"INSERT INTO snapshots (last_op_hash, data, created_at) VALUES (?, ?, ?)"
|
|
68
|
+
),
|
|
69
|
+
loadLatestSnapshot: db.prepare(
|
|
70
|
+
"SELECT * FROM snapshots ORDER BY id DESC LIMIT 1"
|
|
71
|
+
),
|
|
72
|
+
putBlob: db.prepare(
|
|
73
|
+
"INSERT OR REPLACE INTO blobs (hash, content) VALUES (?, ?)"
|
|
74
|
+
),
|
|
75
|
+
getBlob: db.prepare("SELECT content FROM blobs WHERE hash = ?"),
|
|
76
|
+
hasBlob: db.prepare("SELECT 1 FROM blobs WHERE hash = ?")
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
init() {
|
|
80
|
+
if (this._initialized) return;
|
|
81
|
+
this.db.exec(SCHEMA_SQL);
|
|
82
|
+
this._prepareStatements();
|
|
83
|
+
this._initialized = true;
|
|
84
|
+
}
|
|
85
|
+
append(op) {
|
|
86
|
+
const payload = JSON.stringify({
|
|
87
|
+
facts: op.facts,
|
|
88
|
+
links: op.links,
|
|
89
|
+
deleteFacts: op.deleteFacts,
|
|
90
|
+
deleteLinks: op.deleteLinks
|
|
91
|
+
});
|
|
92
|
+
this._stmts.insert.run(
|
|
93
|
+
op.hash,
|
|
94
|
+
op.kind,
|
|
95
|
+
op.timestamp,
|
|
96
|
+
op.agentId,
|
|
97
|
+
op.previousHash ?? null,
|
|
98
|
+
payload
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
appendBatch(ops) {
|
|
102
|
+
for (const op of ops) {
|
|
103
|
+
this.append(op);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
readAll() {
|
|
107
|
+
const rows = this._stmts.readAll.all();
|
|
108
|
+
return rows.map(this._rowToOp);
|
|
109
|
+
}
|
|
110
|
+
readUntil(opHash) {
|
|
111
|
+
const row = this._stmts.getByHash.get(opHash);
|
|
112
|
+
if (!row) return [];
|
|
113
|
+
const rows = this._stmts.readUntil.all(opHash);
|
|
114
|
+
return rows.map(this._rowToOp);
|
|
115
|
+
}
|
|
116
|
+
readUntilTimestamp(isoTimestamp) {
|
|
117
|
+
const rows = this.db.prepare("SELECT * FROM ops WHERE timestamp <= ? ORDER BY timestamp ASC").all(isoTimestamp);
|
|
118
|
+
return rows.map(this._rowToOp);
|
|
119
|
+
}
|
|
120
|
+
readAfter(opHash) {
|
|
121
|
+
const row = this._stmts.getByHash.get(opHash);
|
|
122
|
+
if (!row) return this.readAll();
|
|
123
|
+
const rows = this._stmts.readAfter.all(opHash);
|
|
124
|
+
return rows.map(this._rowToOp);
|
|
125
|
+
}
|
|
126
|
+
getByHash(hash) {
|
|
127
|
+
return this.getOpByHash(hash);
|
|
128
|
+
}
|
|
129
|
+
getOpByHash(hash) {
|
|
130
|
+
const row = this._stmts.getByHash.get(hash);
|
|
131
|
+
return row ? this._rowToOp(row) : void 0;
|
|
132
|
+
}
|
|
133
|
+
getLastOp() {
|
|
134
|
+
const row = this._stmts.getLast.get();
|
|
135
|
+
return row ? this._rowToOp(row) : void 0;
|
|
136
|
+
}
|
|
137
|
+
getOpCount() {
|
|
138
|
+
const row = this._stmts.count.get();
|
|
139
|
+
return row?.count ?? 0;
|
|
140
|
+
}
|
|
141
|
+
count() {
|
|
142
|
+
return this.getOpCount();
|
|
143
|
+
}
|
|
144
|
+
saveSnapshot(lastOpHash, data) {
|
|
145
|
+
this._stmts.saveSnapshot.run(
|
|
146
|
+
lastOpHash,
|
|
147
|
+
JSON.stringify(data),
|
|
148
|
+
(/* @__PURE__ */ new Date()).toISOString()
|
|
149
|
+
);
|
|
150
|
+
}
|
|
151
|
+
loadLatestSnapshot() {
|
|
152
|
+
const row = this._stmts.loadLatestSnapshot.get();
|
|
153
|
+
if (!row) return void 0;
|
|
154
|
+
return {
|
|
155
|
+
lastOpHash: row.last_op_hash,
|
|
156
|
+
data: JSON.parse(row.data)
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
putBlob(hash, content) {
|
|
160
|
+
this._stmts.putBlob.run(hash, Buffer.from(content));
|
|
161
|
+
}
|
|
162
|
+
getBlob(hash) {
|
|
163
|
+
const row = this._stmts.getBlob.get(hash);
|
|
164
|
+
if (!row) return void 0;
|
|
165
|
+
return new Uint8Array(row.content);
|
|
166
|
+
}
|
|
167
|
+
hasBlob(hash) {
|
|
168
|
+
const row = this._stmts.hasBlob.get(hash);
|
|
169
|
+
return !!row;
|
|
170
|
+
}
|
|
171
|
+
findCommonAncestor(hashA, hashB) {
|
|
172
|
+
const ancestorsA = /* @__PURE__ */ new Set();
|
|
173
|
+
let cursor = hashA;
|
|
174
|
+
while (cursor) {
|
|
175
|
+
ancestorsA.add(cursor);
|
|
176
|
+
const op = this.getOpByHash(cursor);
|
|
177
|
+
cursor = op?.previousHash;
|
|
178
|
+
}
|
|
179
|
+
cursor = hashB;
|
|
180
|
+
while (cursor) {
|
|
181
|
+
if (ancestorsA.has(cursor)) {
|
|
182
|
+
return this.getOpByHash(cursor);
|
|
183
|
+
}
|
|
184
|
+
const op = this.getOpByHash(cursor);
|
|
185
|
+
cursor = op?.previousHash;
|
|
186
|
+
}
|
|
187
|
+
return void 0;
|
|
188
|
+
}
|
|
189
|
+
close() {
|
|
190
|
+
this.db?.close();
|
|
191
|
+
}
|
|
192
|
+
_rowToOp(row) {
|
|
193
|
+
const payload = JSON.parse(row.payload);
|
|
194
|
+
return {
|
|
195
|
+
hash: row.hash,
|
|
196
|
+
kind: row.kind,
|
|
197
|
+
timestamp: row.timestamp,
|
|
198
|
+
agentId: row.agent_id,
|
|
199
|
+
previousHash: row.previous_hash ?? void 0,
|
|
200
|
+
facts: payload.facts,
|
|
201
|
+
links: payload.links,
|
|
202
|
+
deleteFacts: payload.deleteFacts,
|
|
203
|
+
deleteLinks: payload.deleteLinks
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
};
|
|
207
|
+
export {
|
|
208
|
+
BetterSqliteKernelBackend
|
|
209
|
+
};
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
// @bun
|
|
2
1
|
import {
|
|
3
2
|
__require
|
|
4
|
-
} from "./
|
|
3
|
+
} from "./chunk-KFQGP6VL.js";
|
|
5
4
|
|
|
6
5
|
// src/core/persist/better-sqlite-backend.ts
|
|
7
|
-
var __filename = "/Users/trentbrew/TURTLE/Projects/Packages/trellis-package/src/core/persist/better-sqlite-backend.ts";
|
|
8
6
|
var SCHEMA_SQL = `
|
|
9
7
|
CREATE TABLE IF NOT EXISTS ops (
|
|
10
8
|
hash TEXT PRIMARY KEY,
|
|
@@ -33,8 +31,7 @@ CREATE INDEX IF NOT EXISTS idx_ops_agent ON ops(agent_id);
|
|
|
33
31
|
CREATE INDEX IF NOT EXISTS idx_ops_previous ON ops(previous_hash);
|
|
34
32
|
CREATE INDEX IF NOT EXISTS idx_snapshots_op ON snapshots(last_op_hash);
|
|
35
33
|
`;
|
|
36
|
-
|
|
37
|
-
class BetterSqliteKernelBackend {
|
|
34
|
+
var BetterSqliteKernelBackend = class {
|
|
38
35
|
db;
|
|
39
36
|
_stmts;
|
|
40
37
|
_initialized = false;
|
|
@@ -45,27 +42,38 @@ class BetterSqliteKernelBackend {
|
|
|
45
42
|
const Database = req("better-sqlite3");
|
|
46
43
|
this.db = new Database(dbPath);
|
|
47
44
|
} catch (e) {
|
|
48
|
-
throw new Error(
|
|
45
|
+
throw new Error(
|
|
46
|
+
`Failed to initialize SQLite backend: ${e instanceof Error ? e.message : "Unknown error"}. Ensure better-sqlite3 is installed: npm install better-sqlite3`
|
|
47
|
+
);
|
|
49
48
|
}
|
|
50
49
|
this._stmts = this._prepareStatements();
|
|
51
50
|
}
|
|
52
51
|
_prepareStatements() {
|
|
53
52
|
const db = this.db;
|
|
54
53
|
return {
|
|
55
|
-
insert: db.prepare(
|
|
54
|
+
insert: db.prepare(
|
|
55
|
+
"INSERT OR REPLACE INTO ops (hash, kind, timestamp, agent_id, previous_hash, payload) VALUES (?, ?, ?, ?, ?, ?)"
|
|
56
|
+
),
|
|
56
57
|
readAll: db.prepare("SELECT * FROM ops ORDER BY timestamp ASC"),
|
|
57
|
-
readUntil: db.prepare(
|
|
58
|
-
|
|
58
|
+
readUntil: db.prepare(
|
|
59
|
+
"SELECT * FROM ops WHERE timestamp <= (SELECT timestamp FROM ops WHERE hash = ?) ORDER BY timestamp ASC"
|
|
60
|
+
),
|
|
61
|
+
readAfter: db.prepare(
|
|
62
|
+
"SELECT * FROM ops WHERE timestamp > (SELECT timestamp FROM ops WHERE hash = ?) ORDER BY timestamp ASC"
|
|
63
|
+
),
|
|
59
64
|
getByHash: db.prepare("SELECT * FROM ops WHERE hash = ?"),
|
|
60
65
|
getLast: db.prepare("SELECT * FROM ops ORDER BY timestamp DESC LIMIT 1"),
|
|
61
66
|
count: db.prepare("SELECT COUNT(*) as count FROM ops"),
|
|
62
|
-
saveSnapshot: db.prepare(
|
|
63
|
-
|
|
67
|
+
saveSnapshot: db.prepare(
|
|
68
|
+
"INSERT INTO snapshots (last_op_hash, data, created_at) VALUES (?, ?, ?)"
|
|
69
|
+
),
|
|
70
|
+
loadLatestSnapshot: db.prepare(
|
|
71
|
+
"SELECT * FROM snapshots ORDER BY id DESC LIMIT 1"
|
|
72
|
+
)
|
|
64
73
|
};
|
|
65
74
|
}
|
|
66
75
|
init() {
|
|
67
|
-
if (this._initialized)
|
|
68
|
-
return;
|
|
76
|
+
if (this._initialized) return;
|
|
69
77
|
this.db.exec(SCHEMA_SQL);
|
|
70
78
|
this._initialized = true;
|
|
71
79
|
}
|
|
@@ -76,7 +84,14 @@ class BetterSqliteKernelBackend {
|
|
|
76
84
|
deleteFacts: op.deleteFacts,
|
|
77
85
|
deleteLinks: op.deleteLinks
|
|
78
86
|
});
|
|
79
|
-
this._stmts.insert.run(
|
|
87
|
+
this._stmts.insert.run(
|
|
88
|
+
op.hash,
|
|
89
|
+
op.kind,
|
|
90
|
+
op.timestamp,
|
|
91
|
+
op.agentId,
|
|
92
|
+
op.previousHash ?? null,
|
|
93
|
+
payload
|
|
94
|
+
);
|
|
80
95
|
}
|
|
81
96
|
readAll() {
|
|
82
97
|
const rows = this._stmts.readAll.all();
|
|
@@ -84,8 +99,7 @@ class BetterSqliteKernelBackend {
|
|
|
84
99
|
}
|
|
85
100
|
readUntil(opHash) {
|
|
86
101
|
const row = this._stmts.getByHash.get(opHash);
|
|
87
|
-
if (!row)
|
|
88
|
-
return [];
|
|
102
|
+
if (!row) return [];
|
|
89
103
|
const rows = this._stmts.readUntil.all(opHash);
|
|
90
104
|
return rows.map(this._rowToOp);
|
|
91
105
|
}
|
|
@@ -95,30 +109,28 @@ class BetterSqliteKernelBackend {
|
|
|
95
109
|
}
|
|
96
110
|
readAfter(opHash) {
|
|
97
111
|
const row = this._stmts.getByHash.get(opHash);
|
|
98
|
-
if (!row)
|
|
99
|
-
return this.readAll();
|
|
112
|
+
if (!row) return this.readAll();
|
|
100
113
|
const rows = this._stmts.readAfter.all(opHash);
|
|
101
114
|
return rows.map(this._rowToOp);
|
|
102
115
|
}
|
|
103
116
|
getByHash(hash) {
|
|
104
117
|
const row = this._stmts.getByHash.get(hash);
|
|
105
|
-
return row ? this._rowToOp(row) :
|
|
118
|
+
return row ? this._rowToOp(row) : void 0;
|
|
106
119
|
}
|
|
107
120
|
getLastOp() {
|
|
108
121
|
const row = this._stmts.getLast.get();
|
|
109
|
-
return row ? this._rowToOp(row) :
|
|
122
|
+
return row ? this._rowToOp(row) : void 0;
|
|
110
123
|
}
|
|
111
124
|
getOpCount() {
|
|
112
125
|
const row = this._stmts.count.get();
|
|
113
126
|
return row?.count ?? 0;
|
|
114
127
|
}
|
|
115
128
|
saveSnapshot(hash, data) {
|
|
116
|
-
this._stmts.saveSnapshot.run(hash, data, new Date().toISOString());
|
|
129
|
+
this._stmts.saveSnapshot.run(hash, data, (/* @__PURE__ */ new Date()).toISOString());
|
|
117
130
|
}
|
|
118
131
|
loadLatestSnapshot() {
|
|
119
132
|
const row = this._stmts.loadLatestSnapshot.get();
|
|
120
|
-
if (!row)
|
|
121
|
-
return;
|
|
133
|
+
if (!row) return void 0;
|
|
122
134
|
return {
|
|
123
135
|
lastOpHash: row.last_op_hash,
|
|
124
136
|
data: row.data
|
|
@@ -134,14 +146,14 @@ class BetterSqliteKernelBackend {
|
|
|
134
146
|
kind: row.kind,
|
|
135
147
|
timestamp: row.timestamp,
|
|
136
148
|
agentId: row.agent_id,
|
|
137
|
-
previousHash: row.previous_hash ??
|
|
149
|
+
previousHash: row.previous_hash ?? void 0,
|
|
138
150
|
facts: payload.facts,
|
|
139
151
|
links: payload.links,
|
|
140
152
|
deleteFacts: payload.deleteFacts,
|
|
141
153
|
deleteLinks: payload.deleteLinks
|
|
142
154
|
};
|
|
143
155
|
}
|
|
144
|
-
}
|
|
156
|
+
};
|
|
145
157
|
export {
|
|
146
158
|
BetterSqliteKernelBackend
|
|
147
159
|
};
|