stitchkit 0.94.1 → 0.95.1

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.
Files changed (35) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/dist/agent-runtime/provider-origin.d.ts +7 -0
  3. package/dist/agent-runtime/provider-origin.d.ts.map +1 -1
  4. package/dist/agent-runtime/run-operation-lifecycle.d.ts.map +1 -1
  5. package/dist/application/directory-inbox-contract.d.ts +129 -0
  6. package/dist/application/directory-inbox-contract.d.ts.map +1 -0
  7. package/dist/application/directory-inbox.d.ts +3 -0
  8. package/dist/application/directory-inbox.d.ts.map +1 -0
  9. package/dist/application/process-lifecycle-transitions.d.ts +175 -0
  10. package/dist/application/process-lifecycle-transitions.d.ts.map +1 -0
  11. package/dist/application/process-lifecycle.d.ts +3 -131
  12. package/dist/application/process-lifecycle.d.ts.map +1 -1
  13. package/dist/entrypoints/agent-runtime/harness.js +1 -1
  14. package/dist/entrypoints/agent-runtime.js +1 -1
  15. package/dist/entrypoints/application/directory-inbox.d.ts +11 -0
  16. package/dist/entrypoints/application/directory-inbox.d.ts.map +1 -0
  17. package/dist/entrypoints/application/directory-inbox.js +221 -0
  18. package/dist/entrypoints/application.d.ts +3 -1
  19. package/dist/entrypoints/application.d.ts.map +1 -1
  20. package/dist/entrypoints/application.js +151 -56
  21. package/dist/entrypoints/server.js +6 -219
  22. package/dist/index-5jrd0yng.js +114 -0
  23. package/dist/{index-7f68ghdn.js → index-8zja4pkf.js} +23 -1
  24. package/dist/index-tm88avnj.js +221 -0
  25. package/llms/application-directory-inbox.txt +9 -0
  26. package/llms/application.2.txt +7 -5
  27. package/llms/application.txt +88 -24
  28. package/llms/stitchkit.txt +4 -3
  29. package/llms/{upgrading-0.37.0-0.50.0.txt → upgrading-0.37.0-0.53.0.txt} +25 -3
  30. package/llms/{upgrading-0.53.0-0.67.0.txt → upgrading-0.55.0-0.68.0.txt} +53 -25
  31. package/llms/{upgrading-0.68.0-0.94.0.txt → upgrading-0.69.0-0.95.0.txt} +45 -53
  32. package/llms/upgrading.txt +3 -3
  33. package/llms-full.txt +141 -32
  34. package/llms.txt +6 -5
  35. package/package.json +5 -1
package/llms-full.txt CHANGED
@@ -67,11 +67,11 @@ own, recorded as an ADR.
67
67
  | `stitchkit/geo` | server (Bun or Node) | evolving | managed GeoIP reader generations, last-known-good reload and the optional MaxMind adapter |
68
68
  | `stitchkit/oauth` | browser **and** server | evolving | provider-neutral Authorization Code + PKCE request and one-shot callback transaction mechanics |
69
69
  | `stitchkit/google` | server (Bun or Node) | evolving | optional Google code exchange and verified OIDC identity adapter |
70
- | `stitchkit/observability` | server | stable<br>_redefined in 2 of the 39 minors since 0.56.2, most recently 0.92.0_ | request/tool event projections — `createObservability`, trace context, sanitisation |
70
+ | `stitchkit/observability` | server | stable<br>_redefined in 2 of the 40 minors since 0.56.2, most recently 0.92.0_ | request/tool event projections — `createObservability`, trace context, sanitisation |
71
71
  | `stitchkit/testing` | tests on Bun or Node | stable | in-process generated clients over a real Fetch handler, plus the managed-resource conformance kit |
72
72
  | `stitchkit/declaration` | browser + build and deployment tooling (Bun or Node) | evolving | `ProjectDeclarationSchema` — the one machine-readable statement a repository makes about itself |
73
73
  | `stitchkit/react` | browser + server rendering | stable | `createCursorQuery`, `createCacheBridge`, QueryClient and `ApiError` retry policy |
74
- | `stitchkit/agent-runtime` | server | evolving<br>_redefined in 21 of the 39 minors since 0.56.2, most recently 0.94.0_ | optional durable conversation/run loop, history, models, prompts, fencing and events |
74
+ | `stitchkit/agent-runtime` | server | evolving<br>_redefined in 21 of the 40 minors since 0.56.2, most recently 0.94.0_ | optional durable conversation/run loop, history, models, prompts, fencing and events |
75
75
  | `stitchkit/agent-runtime/sandbox` | server | evolving | optional Linux Bubblewrap sessions, durable workspaces and a host HTTP credential gateway; see [sandbox guide](sandbox.md) |
76
76
  | `stitchkit/agent-runtime/testing` | tests on Bun or Node | evolving | credential-free replay, scripted provider faults, deterministic race controls and the agent-store conformance kit |
77
77
  | `stitchkit/agent-runtime/harness` | server | evolving | resource-aware process-local facade over the canonical Agent runtime; supervision stays outside |
@@ -81,11 +81,12 @@ own, recorded as an ADR.
81
81
  | `stitchkit/agent-runtime/sqlite/bun` | server (Bun) | evolving | durable built-in SQLite store for the agent runtime |
82
82
  | `stitchkit/agent-runtime/sqlite/node` | server (Node ≥ 22.5) | evolving | durable built-in SQLite store for the agent runtime |
83
83
  | `stitchkit-tui` | terminal (Bun) | evolving | optional official OpenTUI host over a caller-composed headless runtime |
84
- | `stitchkit/application` | browser + server | evolving<br>_redefined in 7 of the 39 minors since 0.56.2, most recently 0.83.0_ | managed resource graph, readiness, admission, schedules, subtree restart and bounded shutdown |
84
+ | `stitchkit/application` | browser + server | evolving<br>_redefined in 8 of the 40 minors since 0.56.2, most recently 0.95.0_ | managed resource graph, readiness, admission, schedules, subtree restart and bounded shutdown |
85
85
  | `stitchkit/application/grammy` | server | evolving | isolated grammY polling and webhook lifecycle adapters |
86
86
  | `stitchkit/application/opentelemetry` | server | evolving | maps application snapshots onto an injected OpenTelemetry `Meter` |
87
87
  | `stitchkit/application/schemas` | browser + server | evolving | the application's snapshot, health and shutdown schemas alone, without the kernel |
88
88
  | `stitchkit/application/diagnostic-journal` | server | evolving | the local diagnostic journal — the one part of the kernel that spawns, locks and writes files |
89
+ | `stitchkit/application/directory-inbox` | server | evolving | the directory inbox — entries another program drops into a directory, delivered to the application at least once |
89
90
 
90
91
  Rule of thumb: browser code imports `stitchkit` and `stitchkit/react`; server
91
92
  code adds `stitchkit/server` (or `stitchkit/node` on Node) and opts into
@@ -7061,39 +7062,74 @@ application-owned.
7061
7062
  ## Durable process facts and owner notifications
7062
7063
 
7063
7064
  `createProcessLifecycleLedger` records a bounded versioned list of process runs.
7064
- Start, readiness and shutdown target both `runId` and `pid`, so hot reload and
7065
- PID reuse cannot close the wrong generation. A start classifies what happened to
7066
- the newest run before it, and the classification is decided by three facts —
7067
- whether that run recorded its own exit, whether the pid is the same, and whether
7068
- the version changed:
7065
+ Start, readiness, draining and shutdown target both `runId` and `pid`, so hot
7066
+ reload and PID reuse cannot close the wrong generation. `lifecycleLedgerResource`
7067
+ drives it from the kernel's phases: `start` records the start, `activate` the
7068
+ readiness, `stopAdmission` the drain — the run's `unavailableAt`, the moment it
7069
+ stops answering new work — and `close` / `force` the stop. A run that stops
7070
+ without ever becoming ready (a failed startup rolls back with `close` only)
7071
+ ends as `startup-failed`, not `clean`.
7072
+
7073
+ A start classifies what happened to the newest run before it, and the
7074
+ classification is decided by four facts — whether that run recorded its own
7075
+ exit, whether the pid is the same, whether the version changed and whether it
7076
+ ever became ready:
7069
7077
 
7070
7078
  | newest run | same pid | version | `previousExit` | predecessor's `termination` |
7071
7079
  |---|---|---|---|---|
7072
7080
  | none | — | — | `first-boot` | — |
7073
- | recorded `stoppedAt` | — | — | `clean` / `forced` / `abnormal` as recorded | unchanged |
7074
- | still `active` | yes | — | `hot-reload` | `hot-reload`, closed at the new start |
7075
- | still `active` | no | changed | `handoff` | stays `active`; it records its own stop later |
7076
- | still `active` | no | same | `abnormal` (default) | `abnormal`, closed at the new start — an upper bound, the crash time is unknown |
7081
+ | recorded `stoppedAt` | — | — | `clean` / `forced` / `startup-failed` / `abnormal` as recorded | unchanged |
7082
+ | still open | yes | — | `hot-reload` | `hot-reload`, closed at the new start |
7083
+ | still open | no | changed | `handoff` | stays open; it records its own stop later |
7084
+ | still open, was ready | no | same | `abnormal` (default) | `abnormal`, closed at the new start — an upper bound, the crash time is unknown |
7085
+ | still open, never ready | no | same | `startup-failed` (default) | `startup-failed`, closed at the new start |
7086
+
7087
+ Every other open run the start finds was abandoned too and is closed the same
7088
+ way — two crashes in a row leave two open runs, and both are closed, not only
7089
+ the newest. Open means `active` or `draining`.
7077
7090
 
7078
7091
  A version of `unknown` on either side is never a version change, so a dev build
7079
7092
  after a crashed release reads `abnormal`, not `handoff`. `forced` means the
7080
7093
  process itself acknowledged a kill; `abnormal` means a successor found it dead.
7081
7094
 
7082
- The last row is a choice, and the default is the single-process deployment:
7095
+ ### Downtime is the window nobody answered in
7096
+
7097
+ `ReadyFact.downtimeMs` is `readyAt` of the new run minus `unavailableAt` of the
7098
+ last run that served — the predecessor's drain plus the successor's boot. A
7099
+ 110 s forced drain followed by a 4 s boot is 114 s of downtime; the gap between
7100
+ the two processes alone would read 4 s before and after that defect was fixed.
7101
+ Runs that never became ready answered nobody, so the count passes them: after a
7102
+ failed start it still opens where the last serving run stopped answering. It is
7103
+ `0` when that run still answers (a handoff whose predecessor has not drained
7104
+ yet) and `null` on first boot and when the end was never timed — a crash or a
7105
+ hot reload records no `unavailableAt`. `unavailableSince` names the moment it is
7106
+ counted from. The gap between two processes is still there, under its own
7107
+ name: `StartFact.processGapMs` is the start minus the predecessor's recorded
7108
+ stop.
7109
+
7110
+ The ledger records what the process says while it can say it. stitchkit never
7111
+ calls `process.exit` (ADR 0074), so a stop is recorded on the kernel's `close`
7112
+ or `force` path, both awaited. An application that exits the process on its
7113
+ own before its shutdown settles loses that last write; the successor then
7114
+ finds the run open and closes it as `abnormal`, keeping the `unavailableAt`
7115
+ already recorded — which is why the drain moment is written first, at
7116
+ `stopAdmission`, and the downtime survives a stop that was never recorded.
7117
+
7118
+ The `abnormal` default is a choice, and it is the single-process deployment:
7083
7119
  one process per build, a new pid of the same build means the old one stopped
7084
- answering. Where two processes of **one** build overlap on purpose — a
7085
- cluster, a zero-downtime reload of the same build — pass
7086
- `sameVersionOverlap: 'handoff'` to the ledger, and the predecessor stays
7087
- `active` until it records its own shutdown. The cost of that setting is
7088
- symmetric: a real crash under it is reported as a handoff and the dead run
7089
- stays `active` in the ledger until retention drops it. The list is kept in the
7090
- order the transitions wrote it — every write goes through one atomic update,
7091
- so that order is the causal one, and a successor whose clock lags its
7092
- predecessor still finds it at the head; `startedAt` is data, not the sort key.
7093
- Retention (`retain`, default 20) drops finished runs first and an active one —
7094
- a live handoff predecessor — only when nothing finished is left. Facts are
7095
- published through the ledger's own subscription and resource value;
7096
- `ApplicationEventSink` remains the strict application-state stream.
7120
+ answering. Where processes of **one** build overlap on purpose — a cluster, a
7121
+ zero-downtime reload of the same build — pass `sameVersionOverlap: 'handoff'`
7122
+ to the ledger, and every open run stays open until it records its own
7123
+ shutdown. The cost of that setting is symmetric: a real crash under it is
7124
+ reported as a handoff and the dead run stays open in the ledger until
7125
+ retention drops it. The list is kept in the order the transitions wrote it —
7126
+ every write goes through one atomic update, so that order is the causal one,
7127
+ and a successor whose clock lags its predecessor still finds it at the head;
7128
+ `startedAt` is data, not the sort key. Retention (`retain`, default 20) drops
7129
+ finished runs first and an open one — a live handoff predecessor — only when
7130
+ nothing finished is left. Facts are published through the ledger's own
7131
+ subscription and resource value; `ApplicationEventSink` remains the strict
7132
+ application-state stream.
7097
7133
 
7098
7134
  `createNotificationOutbox` is the transport-neutral durable delivery side. It
7099
7135
  persists before send, claims an item with an expiring lease, carries one stable
@@ -7116,7 +7152,36 @@ deadline holds `stop()` — and so the resource's `force()` — for that one cal
7116
7152
  so give the transport a timeout. Superseding a key that is being sent right now
7117
7153
  does not recall it: the send completes, and only its receipt is not written.
7118
7154
 
7119
- Both primitives depend on the structural `StateStore`. On a server,
7155
+ `createDirectoryInbox` is the receiving side for another program on the same
7156
+ host: it drops entries — a release transition, say — into a directory, and
7157
+ the application takes each one at least once. It is a managed resource of its
7158
+ own (`createDirectoryInbox({ id, directory, schema, handle })`, imported from
7159
+ `stitchkit/application/directory-inbox` because it touches files; its types
7160
+ and schemas are in `stitchkit/application`) and publishes a handle with
7161
+ `flush()` and `state()`. The producer writes each entry
7162
+ atomically as `<name>.json` — a temporary name, then a rename; names that start
7163
+ with a dot are never read. Entries are delivered in name order, and only after
7164
+ `activate`: none reaches the application before it is ready. `stopAdmission`
7165
+ stops taking new ones, `drain` waits for the one in flight, and `force` aborts
7166
+ the `signal` its handler was given.
7167
+
7168
+ Taken and done are separate durable records. Before `handle` runs, the entry
7169
+ is claimed with a lease (`leaseMs`, default five minutes); after it returns,
7170
+ a receipt replaces the claim and only then is the file removed. A process that
7171
+ died mid-delivery leaves a claim, and the entry is taken again once the lease
7172
+ runs out — at least once, not exactly once, so a handler that sends somewhere
7173
+ should carry the entry's `key` as its idempotency key. A process that died
7174
+ after the receipt leaves only the file, which the next pass removes without
7175
+ delivering it again. A handler that throws is retried after a backoff from one
7176
+ second doubling to five minutes; an entry that fails `schema`, is over
7177
+ `maxEntryBytes` or was taken `maxAttempts` times (default 20 — the count
7178
+ survives restarts, so an entry whose handling kills the process is not taken
7179
+ forever) is moved to `rejected/` with its reason and reported to `onRejected`,
7180
+ and the entries after it keep flowing. The state lives in
7181
+ `<directory>/.inbox-state.json` under `createFileStateStore`'s inter-process
7182
+ lock unless a `store` is supplied.
7183
+
7184
+ These primitives depend on the structural `StateStore`. On a server,
7120
7185
  `createFileStateStore` supplies the shared Zod-validated JSON adapter with an
7121
7186
  inter-process lock, unique temporary file, fsync and atomic rename. The lock
7122
7187
  is a file with a heartbeat: the holder refreshes its mtime every third of
@@ -12664,6 +12729,48 @@ analytics policy belong to the application.
12664
12729
 
12665
12730
  # Upgrading stitchkit
12666
12731
 
12732
+ ## Released migration: 0.95.0
12733
+
12734
+ One breaking change in `stitchkit/application`: the process lifecycle ledger
12735
+ counts downtime as the window nobody answered in, and gains the `draining`
12736
+ phase and the `startup-failed` outcome. A ledger file written by an earlier
12737
+ version loads unchanged — the new `unavailableAt` reads as `null`.
12738
+
12739
+ 1. **Read downtime from the ready fact.** **Who must act:** a project that
12740
+ reads `downtimeMs` from a `started` fact. It is gone from `StartFact`; the
12741
+ number it carried is `processGapMs`. The downtime now arrives with the new
12742
+ run's readiness:
12743
+
12744
+ ```ts
12745
+ // before
12746
+ ledger.subscribe((fact) => {
12747
+ if (fact.type === 'started') report(fact.previousExit, fact.downtimeMs);
12748
+ });
12749
+ // after
12750
+ ledger.subscribe((fact) => {
12751
+ if (fact.type === 'started') previousExit = fact.previousExit;
12752
+ if (fact.type === 'ready') report(previousExit, fact.downtimeMs);
12753
+ });
12754
+ ```
12755
+
12756
+ 2. **Handle the new values.** **Who must act:** a project that switches
12757
+ exhaustively over `LifecycleTermination` (new: `draining`,
12758
+ `startup-failed`), `PreviousExit` (new: `startup-failed`) or
12759
+ `ProcessLifecycleFact` (new: `DrainingFact`, `type: 'draining'`). The type
12760
+ checker names each switch. An open run is `active` or `draining`; a check
12761
+ written as `termination === 'active'` to mean "still running" becomes
12762
+ `termination === 'active' || termination === 'draining'`.
12763
+ `TransitionReadyInput` is renamed `TransitionRunInput` — the same fields,
12764
+ now also taken by `transitionProcessDraining`; rename the import.
12765
+
12766
+ 3. **Record the drain and the readiness when driving the ledger by hand.**
12767
+ **Who must act:** only a project that calls `createProcessLifecycleLedger`
12768
+ methods itself instead of mounting `lifecycleLedgerResource`. Call
12769
+ `recordDraining()` where the application stops admitting work, before it
12770
+ drains; without it downtime is counted from the recorded stop. Call
12771
+ `recordReady()` when the run serves; a run stopped without it now ends
12772
+ `startup-failed`, not `clean`.
12773
+
12667
12774
  ## Released migration: 0.94.0
12668
12775
 
12669
12776
  One breaking minor that consolidates: tool options move into one group, and
@@ -16892,15 +16999,17 @@ cutovers are covered by the executable
16892
16999
  | `createApplication` | function | compose a validated resource DAG into one startup, readiness, admission and shutdown state machine |
16893
17000
  | `StateStore` / `StateStoreUpdate` | _type_ | async atomic read/update boundary shared by durable application state machines |
16894
17001
  | `createProcessLifecycleLedger` / `ProcessLifecycleLedger` / `ProcessLifecycleLedgerConfig` | function / _type_ | durable bounded run history and typed fact subscription |
16895
- | `LifecycleRunSchema` / `LifecycleRun` / `LifecycleStateSchema` / `LifecycleState` / `LifecycleTerminationSchema` / `LifecycleTermination` | schema / _type_ | versioned process-run state and termination vocabulary |
16896
- | `PreviousExitSchema` / `PreviousExit` / `StartFact` / `ReadyFact` / `ShutdownFact` / `ProcessLifecycleFact` | schema / _type_ | first-boot, hot-reload, clean, forced, handoff and abnormal lifecycle facts |
16897
- | `transitionProcessStart` / `transitionProcessReady` / `transitionProcessShutdown` | function | pure idempotent runId+pid-owned transitions |
16898
- | `LifecycleTransition` / `TransitionStartInput` / `TransitionReadyInput` / `TransitionShutdownInput` / `SameVersionOverlap` | _type_ | pure transition inputs, the same-build overlap policy (`abnormal` default / `handoff`) and state+fact result |
16899
- | `lifecycleLedgerResource` / `LifecycleLedgerResource` / `LifecycleLedgerResourceConfig` | function / _type_ | managed-resource adapter that records start, readiness and shutdown |
17002
+ | `LifecycleRunSchema` / `LifecycleRun` / `LifecycleStateSchema` / `LifecycleState` / `LifecycleTerminationSchema` / `LifecycleTermination` | schema / _type_ | versioned process-run state — open (`active`, `draining` with `unavailableAt`) and ended (`clean`, `forced`, `startup-failed`, `hot-reload`, `abnormal`) |
17003
+ | `PreviousExitSchema` / `PreviousExit` / `StartFact` / `ReadyFact` / `DrainingFact` / `ShutdownFact` / `ProcessLifecycleFact` | schema / _type_ | first-boot, hot-reload, clean, forced, startup-failed, handoff and abnormal lifecycle facts; `processGapMs` on start, `downtimeMs` (unavailable → ready) on ready |
17004
+ | `transitionProcessStart` / `transitionProcessReady` / `transitionProcessDraining` / `transitionProcessShutdown` | function | pure idempotent runId+pid-owned transitions |
17005
+ | `LifecycleTransition` / `TransitionStartInput` / `TransitionRunInput` / `TransitionShutdownInput` / `SameVersionOverlap` | _type_ | pure transition inputs (`TransitionRunInput` for ready and draining, extended with `forced` for shutdown), the same-build overlap policy (`abnormal` default / `handoff`) and state+fact result |
17006
+ | `lifecycleLedgerResource` / `LifecycleLedgerResource` / `LifecycleLedgerResourceConfig` | function / _type_ | managed-resource adapter that records start, readiness, admission stop (draining) and shutdown |
16900
17007
  | `createNotificationOutbox` / `NotificationOutbox` / `NotificationOutboxConfig` | function / _type_ | bounded at-least-once queue with durable claims, leases, retries and supersede |
16901
17008
  | `NotificationOutboxItem` / `NotificationOutboxReceipt` / `NotificationOutboxState` / `NotificationSend` / `NotificationFailureClassification` / `DroppedNotification` / `EnqueueNotification` | _type_ | versioned queue records, stable send identity and delivery decisions |
16902
17009
  | `notificationOutboxStateSchema` | function | strict persisted-state schema over an application payload schema |
16903
17010
  | `notificationOutboxResource` / `NotificationOutboxResource` / `NotificationOutboxResourceConfig` | function / _type_ | thin managed-resource scheduler over an outbox handle |
17011
+ | `createDirectoryInbox` (from `stitchkit/application/directory-inbox`) / `DirectoryInbox` / `DirectoryInboxConfig` / `DirectoryInboxDelivery` / `DirectoryInboxResource` | function / _type_ | managed resource delivering each `<name>.json` entry another program drops into a directory to the application at least once, after readiness; separate durable taken/done records, leases, bounded retry |
17012
+ | `DirectoryInboxStateSchema` / `DirectoryInboxState` / `DirectoryInboxRejection` / `DirectoryInboxRejectionReasonSchema` / `DirectoryInboxRejectionReason` | schema / _type_ | the inbox's claims, receipts and rejections (`invalid`, `too-large`, `attempt-limit`) |
16904
17013
  | `ApplicationHandle.restart` | method | replace one resource and everything that depends on it, leaving the rest of the graph running and the process epoch unchanged |
16905
17014
  | `ApplicationRestartInputSchema` / `ApplicationRestartInput` | schema / _type_ | the resource to replace, by id, and optionally `gracePeriodMs` / `forceTimeoutMs` for this restart — the application's own shutdown budget otherwise |
16906
17015
  | `ApplicationRestartResultSchema` / `ApplicationRestartResult` | schema / _type_ | the subtree that was actually taken down and brought back, in start order, with the outcome, the reason on anything but success, and how long it took |
package/llms.txt CHANGED
@@ -9,7 +9,7 @@ Build with stitchkit: define a contract once, then `implement` it and serve it (
9
9
  Load the slice for each entrypoint your code imports — `import … from 'stitchkit/server'` → `llms/server.txt`; the root `stitchkit` import → `llms/stitchkit.txt`. A slice holds that entrypoint's API reference section and the guide pages whose home it is; every guide lives in exactly one slice, and a slice that needs another's guide names it under "Also read". Each file is at most 50.0 KB; a longer one continues in numbered parts, each naming the next at its top. Moving across versions: load `llms/upgrading.txt` and the range slices it lists between your version and the target. `llms-full.txt` inlines everything; it is far larger than a context window, so do not read it whole.
10
10
 
11
11
  ## Entrypoint slices
12
- - **stitchkit**: [llms/stitchkit.txt](llms/stitchkit.txt) 15.1 KB → [llms/stitchkit.2.txt](llms/stitchkit.2.txt) 35.0 KB → [llms/stitchkit.3.txt](llms/stitchkit.3.txt) 14.2 KB
12
+ - **stitchkit**: [llms/stitchkit.txt](llms/stitchkit.txt) 15.3 KB → [llms/stitchkit.2.txt](llms/stitchkit.2.txt) 35.0 KB → [llms/stitchkit.3.txt](llms/stitchkit.3.txt) 14.2 KB
13
13
  - **stitchkit/live**: [llms/live.txt](llms/live.txt) 21.2 KB
14
14
  - **stitchkit/react**: [llms/react.txt](llms/react.txt) 8.6 KB
15
15
  - **stitchkit/tools**: [llms/tools.txt](llms/tools.txt) 44.9 KB → [llms/tools.2.txt](llms/tools.2.txt) 26.3 KB → [llms/tools.3.txt](llms/tools.3.txt) 25.4 KB
@@ -30,9 +30,10 @@ Load the slice for each entrypoint your code imports — `import … from 'stitc
30
30
  - **stitchkit/agent-runtime/openrouter**: [llms/agent-runtime-openrouter.txt](llms/agent-runtime-openrouter.txt) 1.1 KB
31
31
  - **stitchkit/agent-runtime/sqlite/bun**: [llms/agent-runtime-sqlite-bun.txt](llms/agent-runtime-sqlite-bun.txt) 1.8 KB
32
32
  - **stitchkit/agent-runtime/sqlite/node**: [llms/agent-runtime-sqlite-node.txt](llms/agent-runtime-sqlite-node.txt) 1.7 KB
33
- - **stitchkit/application**: [llms/application.txt](llms/application.txt) 38.0 KB → [llms/application.2.txt](llms/application.2.txt) 31.6 KB
33
+ - **stitchkit/application**: [llms/application.txt](llms/application.txt) 42.1 KB → [llms/application.2.txt](llms/application.2.txt) 32.6 KB
34
34
  - **stitchkit/application/grammy**: [llms/application-grammy.txt](llms/application-grammy.txt) 1.5 KB
35
35
  - **stitchkit/application/opentelemetry**: [llms/application-opentelemetry.txt](llms/application-opentelemetry.txt) 1.6 KB
36
+ - **stitchkit/application/directory-inbox**: [llms/application-directory-inbox.txt](llms/application-directory-inbox.txt) 0.3 KB
36
37
  - **stitchkit/application/diagnostic-journal**: [llms/application-diagnostic-journal.txt](llms/application-diagnostic-journal.txt) 1.4 KB
37
38
  - **stitchkit/application/schemas**: [llms/application-schemas.txt](llms/application-schemas.txt) 1.8 KB
38
39
  - **stitchkit/testing**: [llms/testing.txt](llms/testing.txt) 30.8 KB
@@ -50,9 +51,9 @@ Load the slice for each entrypoint your code imports — `import … from 'stitc
50
51
 
51
52
  ## Upgrading slices
52
53
  - **Upgrading — how to move across versions**: [llms/upgrading.txt](llms/upgrading.txt) 10.3 KB
53
- - **Upgrading 0.68.0 → 0.94.0**: [llms/upgrading-0.68.0-0.94.0.txt](llms/upgrading-0.68.0-0.94.0.txt) 46.5 KB
54
- - **Upgrading 0.53.0 → 0.67.0**: [llms/upgrading-0.53.0-0.67.0.txt](llms/upgrading-0.53.0-0.67.0.txt) 46.1 KB
55
- - **Upgrading 0.37.0 → 0.50.0**: [llms/upgrading-0.37.0-0.50.0.txt](llms/upgrading-0.37.0-0.50.0.txt) 31.6 KB
54
+ - **Upgrading 0.69.0 → 0.95.0**: [llms/upgrading-0.69.0-0.95.0.txt](llms/upgrading-0.69.0-0.95.0.txt) 46.6 KB
55
+ - **Upgrading 0.55.0 → 0.68.0**: [llms/upgrading-0.55.0-0.68.0.txt](llms/upgrading-0.55.0-0.68.0.txt) 47.0 KB
56
+ - **Upgrading 0.37.0 → 0.53.0**: [llms/upgrading-0.37.0-0.53.0.txt](llms/upgrading-0.37.0-0.53.0.txt) 32.6 KB
56
57
 
57
58
  ## Guide (web)
58
59
  - [Getting started](https://github.com/max-listov/stitchkit/blob/master/docs/guide/getting-started.md): install, entrypoints, and a first contract → server → client app
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "stitchkit",
3
- "version": "0.94.1",
3
+ "version": "0.95.1",
4
4
  "description": "Contract-first backend framework — one defineContract() into an HTTP API, MCP tools, AI-agent tools and a typed client. Bun and Node.",
5
5
  "keywords": [
6
6
  "bun",
@@ -146,6 +146,10 @@
146
146
  "types": "./dist/entrypoints/application/opentelemetry.d.ts",
147
147
  "import": "./dist/entrypoints/application/opentelemetry.js"
148
148
  },
149
+ "./application/directory-inbox": {
150
+ "types": "./dist/entrypoints/application/directory-inbox.d.ts",
151
+ "import": "./dist/entrypoints/application/directory-inbox.js"
152
+ },
149
153
  "./application/diagnostic-journal": {
150
154
  "types": "./dist/entrypoints/application/diagnostic-journal.d.ts",
151
155
  "import": "./dist/entrypoints/application/diagnostic-journal.js"