trellis 3.1.35 → 3.2.2
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 +23 -5
- package/README.md +63 -156
- package/bin/trellis.mjs +2 -75
- package/dist/{better-sqlite-backend-ahx5p0br.js → better-sqlite-backend-2P4F6AOJ.js} +91 -29
- package/dist/boot-middleware-MHLHFCUC.js +9 -0
- package/dist/browser/index.d.ts +18 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +95 -0
- package/dist/{index-53f3b8p8.js → chunk-2W3MHTMG.js} +552 -213
- package/dist/chunk-44FFQKQX.js +142 -0
- package/dist/chunk-4HYPLFJD.js +150 -0
- package/dist/chunk-4XIVMVHC.js +361 -0
- package/dist/{index-yp88he8n.js → chunk-6CTA6MCE.js} +88 -64
- package/dist/chunk-6GEZ6DN5.js +394 -0
- package/dist/chunk-7ZFRVCUE.js +211 -0
- package/dist/chunk-CAG4FULI.js +121 -0
- package/dist/chunk-FF36CQHZ.js +61 -0
- package/dist/{index-h32txmxe.js → chunk-FKQO5A3H.js} +6 -13
- package/dist/{index-nq520y6k.js → chunk-FWRS4CSC.js} +46 -32
- package/dist/chunk-GFZCJ4EH.js +108 -0
- package/dist/chunk-GLM4HGN4.js +55 -0
- package/dist/{index-4cdr7x2x.js → chunk-GU374KWZ.js} +182 -111
- package/dist/chunk-H6JB3PZ3.js +45 -0
- package/dist/chunk-IZX2PLIB.js +1240 -0
- package/dist/chunk-J2TXUFCZ.js +289 -0
- package/dist/chunk-J3WYZO3Q.js +211 -0
- package/dist/{index-xzym9w0m.js → chunk-JA7AIHRK.js} +12 -7
- package/dist/chunk-JHHEXEDM.js +162 -0
- package/dist/chunk-JUEMDWLU.js +233 -0
- package/dist/chunk-KFQGP6VL.js +33 -0
- package/dist/chunk-KIJITUZB.js +419 -0
- package/dist/{index-4wxa8xz4.js → chunk-KQ4A2D2P.js} +162 -23
- package/dist/chunk-KSU2GW22.js +958 -0
- package/dist/{index-rv1p47gp.js → chunk-L5N5PR2S.js} +3015 -2480
- package/dist/{index-h9e2efx4.js → chunk-LNUIGRDZ.js} +71 -55
- package/dist/{index-skhn0agf.js → chunk-MLC5BUYO.js} +19 -20
- package/dist/chunk-MPXUVGT3.js +104 -0
- package/dist/chunk-N6MYZT4O.js +68 -0
- package/dist/chunk-O2AV5WMN.js +48 -0
- package/dist/chunk-PZ4XYZ4J.js +143 -0
- package/dist/chunk-QB5ISE47.js +419 -0
- package/dist/chunk-RSWUFTO2.js +857 -0
- package/dist/chunk-S3XLFZ27.js +1095 -0
- package/dist/{index-w5wccer3.js → chunk-S6GBJ2ZB.js} +28 -12
- package/dist/{index-7pjz3tsy.js → chunk-SGMDTWJJ.js} +57 -15
- package/dist/chunk-SPSPV5BC.js +390 -0
- package/dist/chunk-TCKXSOBP.js +123 -0
- package/dist/chunk-UBGUDMUV.js +59 -0
- package/dist/{index-wt8rz4gn.js → chunk-UQISRW6T.js} +97 -26
- package/dist/chunk-USEINYUL.js +12 -0
- package/dist/{index-bmyt7k8n.js → chunk-UZRUP7QW.js} +12 -4
- package/dist/{index-xhcp6xrn.js → chunk-VBYUTRXX.js} +695 -514
- package/dist/{index-vkpkfwhq.js → chunk-VDAKEOML.js} +234 -194
- package/dist/chunk-WXSWA3MV.js +0 -0
- package/dist/{index-n9f2qyh5.js → chunk-X5FLTRUB.js} +55 -33
- package/dist/{index-h7zxhhhh.js → chunk-XMQ7G77X.js} +46 -38
- package/dist/{index-w7ng765c.js → chunk-YCM7ZYEZ.js} +102 -49
- package/dist/cli/deploy-cli.d.ts +18 -0
- package/dist/cli/deploy-cli.d.ts.map +1 -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 +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +2426 -6225
- package/dist/client/index.browser.d.ts +29 -0
- package/dist/client/index.browser.d.ts.map +1 -0
- package/dist/client/index.browser.js +64 -0
- 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.browser.d.ts +104 -0
- package/dist/client/sdk.browser.d.ts.map +1 -0
- package/dist/client/sdk.browser.js +9 -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-PFTP67TR.js} +8 -9
- 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 +171 -104
- 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 +67 -54
- package/dist/db/inspector.js +11 -19
- package/dist/db/trellis.css +1 -1
- package/dist/decisions/index.js +9 -10
- package/dist/deploy-LQ7GUGJ5.js +9 -0
- package/dist/deploy-YNVG5E4E.js +9 -0
- package/dist/deploy-cli-24BCHAXY.js +67 -0
- package/dist/deploy-cli-C35HTITO.js +67 -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.d.ts +59 -19
- package/dist/engine.d.ts.map +1 -1
- package/dist/import-UZEKXU3B.js +10 -0
- package/dist/index.js +102 -93
- package/dist/launch-explorer-HZ4ZJA4X.js +95 -0
- package/dist/links/index.js +24 -26
- package/dist/mcp/server.d.ts.map +1 -1
- 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-XYLTJYSA.js} +14 -15
- 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-xvbg4230.js → remote-manager-ODE3T2KR.js} +25 -15
- package/dist/scaffold/seed.d.ts.map +1 -1
- package/dist/scaffold/write.d.ts +1 -1
- 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 +46 -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/server/deploy-meta.d.ts +25 -0
- package/dist/server/deploy-meta.d.ts.map +1 -0
- package/dist/server/deploy.d.ts +7 -2
- package/dist/server/deploy.d.ts.map +1 -1
- package/dist/server/index.d.ts +7 -2
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +100 -58
- package/dist/server/node-adapter.js +5 -104
- package/dist/server/realtime.d.ts +14 -3
- package/dist/server/realtime.d.ts.map +1 -1
- package/dist/server/server.d.ts +8 -16
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/sprites.d.ts +18 -1
- package/dist/server/sprites.d.ts.map +1 -1
- package/dist/server/tenancy.d.ts +4 -0
- package/dist/server/tenancy.d.ts.map +1 -1
- package/dist/server/usage-meter.d.ts +53 -0
- package/dist/server/usage-meter.d.ts.map +1 -0
- package/dist/server-MB3OPSPI.js +18 -0
- package/dist/server-ZVWGLLRF.js +18 -0
- package/dist/sprites-KQGTGM6W.js +27 -0
- package/dist/{sprites-vc4qbrp1.js → sprites-RU3E4XQN.js} +6 -7
- 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-NBLLGCNJ.js +14 -0
- package/dist/tenancy-POMWQP6M.js +16 -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/vcs/types.d.ts +2 -0
- package/dist/vcs/types.d.ts.map +1 -1
- package/dist/{vm-config-6xhsj6b3.js → vm-config-JI4OXKDQ.js} +9 -10
- 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 +130 -17
- 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-nzb3am4f.js +0 -80
- package/dist/index-wncptktd.js +0 -292
- package/dist/index-y6a4kj0p.js +0 -43
- package/dist/index-yhwjgfvj.js +0 -342
- 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,24 @@
|
|
|
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.2] — 2026-06-10
|
|
6
|
+
|
|
7
|
+
- **`trellis db serve` on Node:** preloads the default tenant with sql.js / better-sqlite3 before accepting traffic — fixes `create-trellis` scaffolds and any `npx trellis db serve` flow that hit `SqliteKernelBackend requires the Bun runtime`.
|
|
8
|
+
- **`TenantPool.get()` on Node:** fails fast with a preload hint instead of attempting `bun:sqlite`.
|
|
9
|
+
- **`TRELLIS_BACKEND`:** `sqljs` or `better-sqlite` env override for `db serve` and custom hosts (`resolvePoolBackendFromEnv`).
|
|
10
|
+
- **Gitignore:** `.trellis-db/`, `.trellis-db.json`, `.trellis-deploy/` at repo root.
|
|
11
|
+
|
|
12
|
+
## trellis [3.2.0] — 2026-06-08
|
|
13
|
+
|
|
14
|
+
- **Typed realtime SDK:** `trellis/schema` — `defineType`, `entityQuery`, `WhereFilter` operators, nested `InferResolvedType`, server `hydrateAndResolve` on subscription push.
|
|
15
|
+
- **Live client:** `liveEntities` / `liveEntity` in `trellis/client` with id-scoped subscriptions (`entityQuery`) instead of full-type scans.
|
|
16
|
+
- **Framework hooks:** `trellis/svelte/typed`, `trellis/vue/typed`, `trellis/react/typed` — typed `useEntities` / `useEntity` adapters.
|
|
17
|
+
- **Studio plugin exports:** `trellis/plugins/plan-approval`, `proactive-watcher`, `idea-garden`, `agent-memory` ship in `dist/` for npm consumers (Trellis Studio / opencode).
|
|
18
|
+
- **Ontology:** idempotent `registerType` — duplicate schema registration returns quietly (409 swallowed client-side).
|
|
19
|
+
- **Realtime:** explorer graph-nav + collections demos; collab presence session lifecycle hardening.
|
|
20
|
+
|
|
21
|
+
## trellis [3.1.32] — 2026-05-29
|
|
4
22
|
|
|
5
23
|
- **Agent Lanes (W1–W4):** `trellis lane` — isolated per-agent op journals under `.trellis/lanes/`, `create` / `enter` / `leave` / `status` / `diff` / `promote` / `drop`.
|
|
6
24
|
- **`trellis lane promote`:** replay lane ops onto integration with `--dry-run`, `--explain`, and hard/soft/file conflict detection.
|
|
@@ -10,7 +28,7 @@
|
|
|
10
28
|
- **`getBranchHeadOpHash`:** latest `headOpHash` fact wins (fixes stale head during promote).
|
|
11
29
|
- **Op log lock:** configurable timeout via `TRELLIS_OPLOG_LOCK_MS`.
|
|
12
30
|
|
|
13
|
-
## 3.1.14
|
|
31
|
+
## trellis [3.1.14] — 2026-05-22
|
|
14
32
|
|
|
15
33
|
- CLI `trellis --version` now reports the real package version from `package.json` (was hardcoded `0.1.0`).
|
|
16
34
|
- CLI `-p` / cwd resolution walks up to the nearest `.trellis` repo root (monorepo subfolders work without passing the root path).
|
|
@@ -18,7 +36,7 @@
|
|
|
18
36
|
- `issue create` accepts `--description` as an alias for `--desc`.
|
|
19
37
|
- `bin/trellis.mjs` launcher finds Homebrew Bun when Node's `PATH` is minimal (`npx trellis` / agent shells).
|
|
20
38
|
|
|
21
|
-
## 3.1.2
|
|
39
|
+
## trellis [3.1.2] — 2026-05-12
|
|
22
40
|
|
|
23
41
|
- 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
42
|
- Added graph-link awareness to CMS entries so reference links such as `post --author--> author` appear in `fields` and can be expanded.
|
|
@@ -29,10 +47,10 @@
|
|
|
29
47
|
- Added CMS client/scaffold tests and included them in the default test script.
|
|
30
48
|
- Added `directory` support to CMS consumer scaffolds for multi-instance opencode routing.
|
|
31
49
|
|
|
32
|
-
## 3.1.1
|
|
50
|
+
## trellis [3.1.1] — 2026-05-12
|
|
33
51
|
|
|
34
52
|
- Published the first `trellis/cms` SDK package update after adding scaffold helpers.
|
|
35
53
|
|
|
36
|
-
## 3.1.0
|
|
54
|
+
## trellis [3.1.0] — 2026-05-12
|
|
37
55
|
|
|
38
56
|
- 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,192 +1,99 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
>
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
<div align="center">
|
|
2
|
+
<img src="./logo.svg" alt="Trellis" width="88" height="88" />
|
|
3
|
+
<h1>Trellis</h1>
|
|
4
|
+
<p><strong>The Agentic Framework</strong> — a local-first, event-sourced graph engine for code, agents, and decisions.</p>
|
|
5
|
+
<p>
|
|
6
|
+
<a href="https://trellis.computer">Docs</a> ·
|
|
7
|
+
<a href="https://studio.trellis.computer">Studio</a> ·
|
|
8
|
+
<a href="https://github.com/trentbrew/trellis">GitHub</a>
|
|
9
|
+
</p>
|
|
10
|
+
</div>
|
|
11
11
|
|
|
12
12
|
---
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
Most agent frameworks focus on the _reasoning engine_ (the LLM) but treat _state_ as an afterthought. Trellis reverses this. It is the **System of Record for Decisions**, providing agents with a persistent, queryable, and auditable memory that compounds over time.
|
|
14
|
+
Most agent frameworks pour everything into the reasoning engine and treat state as an afterthought. Trellis inverts that. It is the **system of record for decisions**: a persistent, queryable, auditable memory where every thought, tool call, and file change is an immutable operation in a causal graph. It runs fully offline — servers may relay, accelerate, or back up, but never own your state.
|
|
17
15
|
|
|
18
|
-
**
|
|
19
|
-
|
|
20
|
-
- **
|
|
21
|
-
- **
|
|
22
|
-
- **Safe Exploration**: Agents can "fork" state to explore multiple paths
|
|
23
|
-
|
|
24
|
-
---
|
|
16
|
+
- **Durable memory** — every op is content-addressed and never rewritten or deleted.
|
|
17
|
+
- **Explainable by default** — decision traces record not just *what* happened, but *why*.
|
|
18
|
+
- **Safe to explore** — branch state to try multiple paths, then merge or discard.
|
|
19
|
+
- **Realtime** — one write updates current state, durable history, and every live subscriber.
|
|
25
20
|
|
|
26
|
-
##
|
|
21
|
+
## Install
|
|
27
22
|
|
|
28
23
|
```bash
|
|
29
|
-
# 1. Install
|
|
30
24
|
npm install -g trellis
|
|
31
|
-
|
|
32
|
-
# 2. Initialize a repository
|
|
33
|
-
mkdir my-project && cd my-project
|
|
34
|
-
trellis init
|
|
35
|
-
|
|
36
|
-
# The init command now offers two paths:
|
|
37
|
-
# ⚡ Minimal Setup: One-shot setup with auto-detected defaults
|
|
38
|
-
# 🔧 Custom Guided Setup: Full control over framework, IDEs, and features
|
|
39
|
-
|
|
40
|
-
# 3. Create content (tracked automatically)
|
|
41
|
-
echo "# My Project" > README.md
|
|
42
|
-
|
|
43
|
-
# 4. Add structured entities
|
|
44
|
-
trellis issue create -t "Bootstrap Visualization"
|
|
45
|
-
trellis milestone create -m "Initial Release"
|
|
46
|
-
|
|
47
|
-
# 5. Launch the local web client to explore your semantic graph
|
|
48
|
-
trellis web
|
|
49
|
-
|
|
50
|
-
# 6. Create coding session with trellis harness
|
|
51
|
-
trellis code
|
|
52
25
|
```
|
|
53
26
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
**Next steps (VCS):**
|
|
57
|
-
|
|
58
|
-
- `trellis status` — Check repository status
|
|
59
|
-
- `trellis log` — View recent history
|
|
60
|
-
- `trellis branch` — List or create branches
|
|
61
|
-
- `trellis milestone` — Create narrative checkpoints
|
|
62
|
-
- `trellis garden` — Discover abandoned work
|
|
63
|
-
- `trellis issue` — Create and track issues
|
|
64
|
-
|
|
65
|
-
**Semantic Substrate (Live local services):**
|
|
66
|
-
|
|
67
|
-
- `trellis web` — Launch local web client / graph visualizer
|
|
68
|
-
- `trellis query` — Run EQL-S semantic queries against your code graph
|
|
69
|
-
- Agent Rules — Active for your IDE. Agents will auto-detect the graph.
|
|
70
|
-
|
|
71
|
-

|
|
72
|
-
|
|
73
|
-
See the [CLI guide](https://trellis.computer/docs/cli) for complete documentation.
|
|
74
|
-
|
|
75
|
-
---
|
|
76
|
-
|
|
77
|
-
## CMS Client SDK
|
|
27
|
+
## Quick start
|
|
78
28
|
|
|
79
|
-
|
|
29
|
+
```bash
|
|
30
|
+
mkdir my-project && cd my-project
|
|
31
|
+
trellis init # guided or one-shot setup
|
|
32
|
+
trellis ui # live graph explorer
|
|
33
|
+
trellis code # start an agent coding session
|
|
34
|
+
```
|
|
80
35
|
|
|
81
|
-
|
|
82
|
-
import { createCmsClient } from 'trellis/cms';
|
|
36
|
+
Track work as graph-native entities instead of text commits:
|
|
83
37
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
38
|
+
```bash
|
|
39
|
+
trellis issue create -t "Bootstrap viz"
|
|
40
|
+
trellis milestone create -m "Initial release"
|
|
41
|
+
trellis garden # discover & revive abandoned work
|
|
42
|
+
trellis query 'find ?e where type = "Task"'
|
|
43
|
+
```
|
|
88
44
|
|
|
89
|
-
|
|
90
|
-
status: 'all',
|
|
91
|
-
expand: ['author'],
|
|
92
|
-
});
|
|
45
|
+
## Build a realtime app
|
|
93
46
|
|
|
94
|
-
|
|
95
|
-
(entries) => {
|
|
96
|
-
console.log(entries);
|
|
97
|
-
},
|
|
98
|
-
{
|
|
99
|
-
status: 'published',
|
|
100
|
-
onError: console.error,
|
|
101
|
-
},
|
|
102
|
-
);
|
|
47
|
+
Scaffold a typed, live-graph app — React, Vue, or Svelte — backed by Trellis:
|
|
103
48
|
|
|
104
|
-
|
|
49
|
+
```bash
|
|
50
|
+
npm create trellis@latest
|
|
105
51
|
```
|
|
106
52
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
- **References**: `expand` resolves reference ids from facts and graph links into nested entries.
|
|
111
|
-
- **Scaffolds**: `scaffoldConsumer({ collection, framework, directory })` generates starter consumer code for vanilla, React, Solid, or Vue.
|
|
53
|
+
```ts
|
|
54
|
+
import { defineType } from 'trellis/schema';
|
|
55
|
+
import { z } from 'zod';
|
|
112
56
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
## What is Trellis?
|
|
116
|
-
|
|
117
|
-
Trellis is an **event-sourced causal graph engine** that unifies version control, knowledge management, and semantic analysis. Every action is an immutable operation in a causal stream:
|
|
57
|
+
export const Task = defineType('Task', { title: z.string(), done: z.boolean() });
|
|
58
|
+
```
|
|
118
59
|
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
previousHash?: string; // Causal chain link
|
|
126
|
-
vcs: VcsPayload; // Op-specific data
|
|
127
|
-
signature?: string; // Ed25519 signature
|
|
128
|
-
}
|
|
60
|
+
```svelte
|
|
61
|
+
<script>
|
|
62
|
+
import { entitiesStore, mutations } from 'trellis/svelte/typed';
|
|
63
|
+
const tasks = entitiesStore(client, Task); // re-renders live, across every client
|
|
64
|
+
const task = mutations(client, Task);
|
|
65
|
+
</script>
|
|
129
66
|
```
|
|
130
67
|
|
|
131
|
-
|
|
68
|
+
A single mutation produces current state, durable history, and a realtime push to every subscriber — the same write path.
|
|
132
69
|
|
|
133
|
-
|
|
70
|
+
## API surface
|
|
134
71
|
|
|
135
|
-
|
|
136
|
-
| :-------------------- | :--------------------------------------- |
|
|
137
|
-
| `trellis` npm package | Core platform APIs via subpaths |
|
|
138
|
-
| `trellis` CLI | Repository management and automation |
|
|
139
|
-
| VS Code extension | Visual timeline and knowledge navigation |
|
|
72
|
+
The `trellis` package exposes focused subpaths:
|
|
140
73
|
|
|
141
|
-
|
|
74
|
+
| Import | Purpose |
|
|
75
|
+
| --- | --- |
|
|
76
|
+
| `trellis/client` | Local + remote client SDK |
|
|
77
|
+
| `trellis/schema` | `defineType`, typed entities, EQL-S queries |
|
|
78
|
+
| `trellis/{react,vue,svelte}/typed` | Live, schema-typed reads + mutations |
|
|
79
|
+
| `trellis/realtime` | Presence, chat, CRDT text |
|
|
80
|
+
| `trellis/cms` | Read content collections over HTTP |
|
|
81
|
+
| `trellis/server` | HTTP + WebSocket DB server |
|
|
142
82
|
|
|
143
83
|
## Documentation
|
|
144
84
|
|
|
145
|
-
- **[
|
|
146
|
-
- **[The Story](./docs/THE-STORY.md)** —
|
|
147
|
-
- **[
|
|
148
|
-
- **[Architecture](./docs/ARCHITECTURE.md)** — Current package layout and target runtime shape
|
|
149
|
-
- **[Five Pillars](./docs/PILLARS.md)** — Core architectural principles
|
|
150
|
-
- **[Design spec](./docs/DESIGN.md)** — Full architecture specification
|
|
151
|
-
- **[Roadmap](./docs/ROADMAP.md)** — Active Trellis issue and milestone sequence
|
|
152
|
-
- **[Agents guide](./docs/AGENTS.md)** — Building agents on Trellis
|
|
153
|
-
- **[Full documentation](https://trellis.computer)** — Published docs site
|
|
154
|
-
- **[CLI reference](./docs/README-ARCHIVED.md#cli-overview)** — Command details (archived)
|
|
155
|
-
- **[API modules](./docs/README-ARCHIVED.md#module--subpath-guide)** — Subpath imports (archived)
|
|
85
|
+
- **[trellis.computer](https://trellis.computer)** — full documentation
|
|
86
|
+
- **[The Story](./docs/THE-STORY.md)** — why Trellis exists
|
|
87
|
+
- **[Architecture](./docs/ARCHITECTURE.md)** · **[Design spec](./docs/DESIGN.md)** · **[Roadmap](./docs/ROADMAP.md)**
|
|
156
88
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
## Development
|
|
89
|
+
## Develop
|
|
160
90
|
|
|
161
91
|
```bash
|
|
162
|
-
#
|
|
163
|
-
# Requires Bun ≥ 1.0
|
|
164
|
-
|
|
165
|
-
# Install dependencies
|
|
166
|
-
bun install
|
|
167
|
-
|
|
168
|
-
# Run tests
|
|
92
|
+
bun install # requires Bun ≥ 1.0
|
|
169
93
|
bun test
|
|
170
|
-
|
|
171
|
-
# Build for npm
|
|
172
94
|
bun run build
|
|
173
95
|
```
|
|
174
96
|
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
## Status
|
|
178
|
-
|
|
179
|
-
| Phase | Deliverable | Status |
|
|
180
|
-
| :---- | :------------------------- | :----- |
|
|
181
|
-
| P0 | Causal stream + CLI | ✅ |
|
|
182
|
-
| P0.5 | VS Code extension | ✅ |
|
|
183
|
-
| P1 | Git import bridge | ✅ |
|
|
184
|
-
| P2 | Branches, milestones | ✅ |
|
|
185
|
-
| P2.5 | Blob store, modularization | ✅ |
|
|
186
|
-
| P3 | File-level diff + merge | ✅ |
|
|
187
|
-
| P4 | Identity + governance | ✅ |
|
|
188
|
-
| P5 | Idea Garden | ✅ |
|
|
189
|
-
|
|
190
|
-
---
|
|
97
|
+
## License
|
|
191
98
|
|
|
192
|
-
|
|
99
|
+
[AGPL-3.0-or-later](./LICENSE) © Turtle Labs LLC
|
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';
|
|
@@ -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,28 +42,44 @@ 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
|
-
this._stmts = this._prepareStatements();
|
|
51
49
|
}
|
|
52
50
|
_prepareStatements() {
|
|
53
51
|
const db = this.db;
|
|
54
|
-
|
|
55
|
-
insert: db.prepare(
|
|
52
|
+
this._stmts = {
|
|
53
|
+
insert: db.prepare(
|
|
54
|
+
"INSERT OR REPLACE INTO ops (hash, kind, timestamp, agent_id, previous_hash, payload) VALUES (?, ?, ?, ?, ?, ?)"
|
|
55
|
+
),
|
|
56
56
|
readAll: db.prepare("SELECT * FROM ops ORDER BY timestamp ASC"),
|
|
57
|
-
readUntil: db.prepare(
|
|
58
|
-
|
|
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
|
+
),
|
|
59
63
|
getByHash: db.prepare("SELECT * FROM ops WHERE hash = ?"),
|
|
60
64
|
getLast: db.prepare("SELECT * FROM ops ORDER BY timestamp DESC LIMIT 1"),
|
|
61
65
|
count: db.prepare("SELECT COUNT(*) as count FROM ops"),
|
|
62
|
-
saveSnapshot: db.prepare(
|
|
63
|
-
|
|
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 = ?")
|
|
64
77
|
};
|
|
65
78
|
}
|
|
66
79
|
init() {
|
|
67
|
-
if (this._initialized)
|
|
68
|
-
return;
|
|
80
|
+
if (this._initialized) return;
|
|
69
81
|
this.db.exec(SCHEMA_SQL);
|
|
82
|
+
this._prepareStatements();
|
|
70
83
|
this._initialized = true;
|
|
71
84
|
}
|
|
72
85
|
append(op) {
|
|
@@ -76,7 +89,19 @@ class BetterSqliteKernelBackend {
|
|
|
76
89
|
deleteFacts: op.deleteFacts,
|
|
77
90
|
deleteLinks: op.deleteLinks
|
|
78
91
|
});
|
|
79
|
-
this._stmts.insert.run(
|
|
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
|
+
}
|
|
80
105
|
}
|
|
81
106
|
readAll() {
|
|
82
107
|
const rows = this._stmts.readAll.all();
|
|
@@ -84,8 +109,7 @@ class BetterSqliteKernelBackend {
|
|
|
84
109
|
}
|
|
85
110
|
readUntil(opHash) {
|
|
86
111
|
const row = this._stmts.getByHash.get(opHash);
|
|
87
|
-
if (!row)
|
|
88
|
-
return [];
|
|
112
|
+
if (!row) return [];
|
|
89
113
|
const rows = this._stmts.readUntil.all(opHash);
|
|
90
114
|
return rows.map(this._rowToOp);
|
|
91
115
|
}
|
|
@@ -95,35 +119,73 @@ class BetterSqliteKernelBackend {
|
|
|
95
119
|
}
|
|
96
120
|
readAfter(opHash) {
|
|
97
121
|
const row = this._stmts.getByHash.get(opHash);
|
|
98
|
-
if (!row)
|
|
99
|
-
return this.readAll();
|
|
122
|
+
if (!row) return this.readAll();
|
|
100
123
|
const rows = this._stmts.readAfter.all(opHash);
|
|
101
124
|
return rows.map(this._rowToOp);
|
|
102
125
|
}
|
|
103
126
|
getByHash(hash) {
|
|
127
|
+
return this.getOpByHash(hash);
|
|
128
|
+
}
|
|
129
|
+
getOpByHash(hash) {
|
|
104
130
|
const row = this._stmts.getByHash.get(hash);
|
|
105
|
-
return row ? this._rowToOp(row) :
|
|
131
|
+
return row ? this._rowToOp(row) : void 0;
|
|
106
132
|
}
|
|
107
133
|
getLastOp() {
|
|
108
134
|
const row = this._stmts.getLast.get();
|
|
109
|
-
return row ? this._rowToOp(row) :
|
|
135
|
+
return row ? this._rowToOp(row) : void 0;
|
|
110
136
|
}
|
|
111
137
|
getOpCount() {
|
|
112
138
|
const row = this._stmts.count.get();
|
|
113
139
|
return row?.count ?? 0;
|
|
114
140
|
}
|
|
115
|
-
|
|
116
|
-
this.
|
|
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
|
+
);
|
|
117
150
|
}
|
|
118
151
|
loadLatestSnapshot() {
|
|
119
152
|
const row = this._stmts.loadLatestSnapshot.get();
|
|
120
|
-
if (!row)
|
|
121
|
-
return;
|
|
153
|
+
if (!row) return void 0;
|
|
122
154
|
return {
|
|
123
155
|
lastOpHash: row.last_op_hash,
|
|
124
|
-
data: row.data
|
|
156
|
+
data: JSON.parse(row.data)
|
|
125
157
|
};
|
|
126
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
|
+
}
|
|
127
189
|
close() {
|
|
128
190
|
this.db?.close();
|
|
129
191
|
}
|
|
@@ -134,14 +196,14 @@ class BetterSqliteKernelBackend {
|
|
|
134
196
|
kind: row.kind,
|
|
135
197
|
timestamp: row.timestamp,
|
|
136
198
|
agentId: row.agent_id,
|
|
137
|
-
previousHash: row.previous_hash ??
|
|
199
|
+
previousHash: row.previous_hash ?? void 0,
|
|
138
200
|
facts: payload.facts,
|
|
139
201
|
links: payload.links,
|
|
140
202
|
deleteFacts: payload.deleteFacts,
|
|
141
203
|
deleteLinks: payload.deleteLinks
|
|
142
204
|
};
|
|
143
205
|
}
|
|
144
|
-
}
|
|
206
|
+
};
|
|
145
207
|
export {
|
|
146
208
|
BetterSqliteKernelBackend
|
|
147
209
|
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trellis Browser — remote DB, schema, realtime, and live-read primitives.
|
|
3
|
+
*
|
|
4
|
+
* Import from `trellis/browser` in browser applications to avoid Node/server
|
|
5
|
+
* modules such as filesystem config, embedded tenancy, or local SQLite.
|
|
6
|
+
*
|
|
7
|
+
* @module trellis/browser
|
|
8
|
+
*/
|
|
9
|
+
export { TrellisDb, FetchError } from '../client/sdk.browser.js';
|
|
10
|
+
export type { AuthResult, EntityData, ListResult, QueryResult, Subscription, SubscriptionCallback, TrellisDbLocalOptions, TrellisDbOptions, TrellisDbRemoteOptions, UploadResult, } from '../client/sdk.browser.js';
|
|
11
|
+
export { Signal, BatchSignal } from '../client/reactive.js';
|
|
12
|
+
export { liveQuery, liveEntities, liveEntity } from '../client/live.js';
|
|
13
|
+
export type { LiveEntitiesOptions, LiveEntityOptions, LiveResource, ReadState, } from '../client/live.js';
|
|
14
|
+
export { defineType, rel, rollup, formula, entitiesQuery, entityQuery, escapeValue, formatEqlLiteral, isWhereFilter, whereCondition, entityMutations, resolveRelations, inverseForeignKey, bindingEntityId, bindingToEntity, entityRecordToPlain, hydrateBindings, isSparseBinding, } from '../schema/index.js';
|
|
15
|
+
export type { AnyType, ComputedField, ComputedMap, DefineTypeOptions, EntityMutations, InferEntitiesRead, InferEntityRead, InferResolvedType, InferType, Ref, Relation, RelationMap, RelTarget, ResolveSpec, ResolveSpecFor, TrellisType, WhereFilter, WhereInput, WhereOp, WhereValue, } from '../schema/index.js';
|
|
16
|
+
export { RealtimeRoom, MemoryHub, MemoryRealtimeTransport, BroadcastChannelTransport, WebSocketRelayTransport, DurableObjectRelayTransport, joinPresence, createPresenceTransport, PersistentChannel, localStorageChannelStore, DEFAULT_MAX_RECORDS, RealtimeText, REALTIME_PROTOCOL, } from '../realtime/index.js';
|
|
17
|
+
export type { BroadcastChannelTransportOptions, BroadcastEvent, ChannelRecord, ChannelStore, DurableObjectRelayReconnect, DurableObjectRelayTransportOptions, PersistentChannelOptions, PresenceOptions, PresencePeer, PresenceState, RealtimeMessage, RealtimeRoomOptions, RealtimeTransport, RealtimeTextOptions, TextNode, TextOp, WebSocketRelayTransportOptions, } from '../realtime/index.js';
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/browser/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACjE,YAAY,EACV,UAAU,EACV,UAAU,EACV,UAAU,EACV,WAAW,EACX,YAAY,EACZ,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,EAChB,sBAAsB,EACtB,YAAY,GACb,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACxE,YAAY,EACV,mBAAmB,EACnB,iBAAiB,EACjB,YAAY,EACZ,SAAS,GACV,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,UAAU,EACV,GAAG,EACH,MAAM,EACN,OAAO,EACP,aAAa,EACb,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,eAAe,EACf,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,OAAO,EACP,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,SAAS,EACT,GAAG,EACH,QAAQ,EACR,WAAW,EACX,SAAS,EACT,WAAW,EACX,cAAc,EACd,WAAW,EACX,WAAW,EACX,UAAU,EACV,OAAO,EACP,UAAU,GACX,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,YAAY,EACZ,SAAS,EACT,uBAAuB,EACvB,yBAAyB,EACzB,uBAAuB,EACvB,2BAA2B,EAC3B,YAAY,EACZ,uBAAuB,EACvB,iBAAiB,EACjB,wBAAwB,EACxB,mBAAmB,EACnB,YAAY,EACZ,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,gCAAgC,EAChC,cAAc,EACd,aAAa,EACb,YAAY,EACZ,2BAA2B,EAC3B,kCAAkC,EAClC,wBAAwB,EACxB,eAAe,EACf,YAAY,EACZ,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,QAAQ,EACR,MAAM,EACN,8BAA8B,GAC/B,MAAM,sBAAsB,CAAC"}
|