stitchkit 0.96.1 → 0.98.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.
Files changed (40) hide show
  1. package/CHANGELOG.md +50 -0
  2. package/dist/agent-runtime/schedule-contract.d.ts +52 -0
  3. package/dist/agent-runtime/schedule-contract.d.ts.map +1 -0
  4. package/dist/agent-runtime/schedule-dispatch.d.ts +26 -0
  5. package/dist/agent-runtime/schedule-dispatch.d.ts.map +1 -0
  6. package/dist/agent-runtime/schedule-records.d.ts +8 -14
  7. package/dist/agent-runtime/schedule-records.d.ts.map +1 -1
  8. package/dist/agent-runtime/schedule-tools.d.ts +1 -1
  9. package/dist/agent-runtime/schedule-tools.d.ts.map +1 -1
  10. package/dist/agent-runtime/schedules.d.ts +7 -92
  11. package/dist/agent-runtime/schedules.d.ts.map +1 -1
  12. package/dist/agent-runtime/sqlite-schema.d.ts.map +1 -1
  13. package/dist/agent-runtime/store-migrations/v3-to-v4.d.ts +4 -0
  14. package/dist/agent-runtime/store-migrations/v3-to-v4.d.ts.map +1 -0
  15. package/dist/entrypoints/agent-runtime/sqlite/bun.js +1 -1
  16. package/dist/entrypoints/agent-runtime/sqlite/node.js +1 -1
  17. package/dist/entrypoints/agent-runtime.d.ts +2 -1
  18. package/dist/entrypoints/agent-runtime.d.ts.map +1 -1
  19. package/dist/entrypoints/agent-runtime.js +289 -214
  20. package/dist/entrypoints/cli.js +1 -1
  21. package/dist/entrypoints/tools.js +1 -1
  22. package/dist/{index-p9e0w8hs.js → index-1m2thnq0.js} +25 -1
  23. package/dist/{index-t9rhjr9f.js → index-f1nb70ae.js} +45 -9
  24. package/dist/tools/cli/config.d.ts +5 -1
  25. package/dist/tools/cli/config.d.ts.map +1 -1
  26. package/dist/tools/cli/io.d.ts.map +1 -1
  27. package/dist/tools/cli/stdin.d.ts +6 -0
  28. package/dist/tools/cli/stdin.d.ts.map +1 -0
  29. package/llms/agent-runtime.2.txt +224 -0
  30. package/llms/agent-runtime.3.txt +1 -1
  31. package/llms/agent-runtime.txt +18 -225
  32. package/llms/cli.txt +15 -0
  33. package/llms/stitchkit.txt +3 -3
  34. package/llms/{upgrading-0.37.0-0.56.0.txt → upgrading-0.37.0-0.58.0.txt} +82 -3
  35. package/llms/{upgrading-0.57.0-0.69.0.txt → upgrading-0.59.0-0.71.0.txt} +108 -82
  36. package/llms/{upgrading-0.70.0-0.96.0.txt → upgrading-0.72.0-0.98.0.txt} +64 -108
  37. package/llms/upgrading.txt +3 -3
  38. package/llms-full.txt +98 -5
  39. package/llms.txt +5 -5
  40. package/package.json +1 -1
@@ -1,14 +1,75 @@
1
- # Upgrading 0.70.0 → 0.96.0 — stitchkit docs slice
1
+ # Upgrading 0.72.0 → 0.98.0 — stitchkit docs slice
2
2
 
3
3
  > Generated from the `docs/` tree by `bun run gen:llms`. The index of all slices is
4
4
  > `llms.txt` in this package.
5
5
 
6
- Contains: Guide: Upgrading, 0.70.0 → 0.96.0 (docs/guide/upgrading.md)
6
+ Contains: Guide: Upgrading, 0.72.0 → 0.98.0 (docs/guide/upgrading.md)
7
7
 
8
8
  ==============================================================================
9
- # Guide: Upgrading, 0.70.0 → 0.96.0 (docs/guide/upgrading.md)
9
+ # Guide: Upgrading, 0.72.0 → 0.98.0 (docs/guide/upgrading.md)
10
10
  ==============================================================================
11
11
 
12
+ ## Released migration: 0.98.0
13
+
14
+ ### automatic stdin availability
15
+
16
+ **Who must act:** CLI applications or scripts relying on automatic stdin routing
17
+ from a producer that can take more than 250 ms to write its first byte.
18
+
19
+ Automatic routing now probes for the first byte for 250 ms. An empty open pipe
20
+ leaves the required field unset and normal validation reports its name. Once
21
+ data arrives, the entire stream is read until EOF without a total deadline.
22
+
23
+ ```sh
24
+ # before: may now fail if the producer starts late
25
+ slow-producer | myapp generate
26
+ # after: provide the value explicitly after the producer completes
27
+ myapp generate --prompt "$(slow-producer)"
28
+ ```
29
+
30
+ For large input that should stay in a pipe, supply a `CliConfig.stdin` reader
31
+ that waits for the producer and EOF; this existing hook is not wrapped in the
32
+ availability probe. A custom reader owns its limits and error handling.
33
+ `-` remains literal data. TTY and empty EOF produce ordinary validation errors;
34
+ explicit arguments skip stdin. JSONL stream/batch commands, MCP/serve and
35
+ long-running handlers have no new deadline. See ADR 0203.
36
+
37
+ ## Released migration: 0.97.0
38
+
39
+ ### schedule delivery
40
+
41
+ **Who must act:** consumers of `createAgentScheduleService`, exhaustive switches on
42
+ `AgentSchedule.state`, and operators opening existing agent-runtime SQLite stores.
43
+
44
+ - Stop old scheduler processes and back up SQLite before startup. The store migrates
45
+ transactionally to v4; old binaries cannot open it. Rollback uses the backup.
46
+ - Handle `failed` as a terminal schedule state. To refuse future delivery (including
47
+ recurring delivery), return `{ status: 'terminal', reason: 'destination closed' }`.
48
+ The occurrence remains unadvanced; `schedule/failed` carries `terminal: true`.
49
+ - A throw or `{ status: 'retry', reason: 'temporarily unavailable' }` retries the same
50
+ key after 1, 2, 4, 8, 16, 32, then 60 seconds. `nextAt` remains the original due time;
51
+ `retryAt`, `attempts` and `lastError` expose retry diagnostics. Success clears them.
52
+ - Resolve `void` only after durable consumer admission. Honor the supplied `signal`:
53
+ dispatch has a 30-second deadline and a 60-second lease. Durable deduplication by
54
+ `idempotencyKey` is required even after abort or crash; do not implement sleeps in dispatch.
55
+ - Stale/cancelled attempts emit no `schedule/fired` or `schedule/late`. Observe the
56
+ cancellation event instead of relying on a synthetic cancelled firing.
57
+
58
+ ```ts
59
+ // before
60
+ async function dispatch(request) {
61
+ if (await destinationClosed(request.conversationId)) throw new Error('closed')
62
+ await admit(request)
63
+ }
64
+ // after: use this callback as createAgentScheduleService({ dispatch, ... })
65
+ async function dispatch(request) {
66
+ if (await destinationClosed(request.conversationId)) {
67
+ return { status: 'terminal', reason: 'destination closed' }
68
+ }
69
+ await admit({ ...request, signal: request.signal }) // durably deduplicates idempotencyKey
70
+ }
71
+ ```
72
+
12
73
  ## Released migration: 0.96.0
13
74
 
14
75
  ### resource-context-admission
@@ -1040,108 +1101,3 @@ const snapshot: CreditWindowSnapshot = { state: 'open', capacityBytes: 100, /*
1040
1101
  // after
1041
1102
  const snapshot: CreditWindowSnapshot = { state: 'open', capacityBytes: 100, /* … */ waiting: 0 }
1042
1103
  ```
1043
-
1044
- ## Released migration: 0.71.0
1045
-
1046
- The Agent coding tools. Two of the three changes are visible to the compiler;
1047
- the third is the one to read carefully, because nothing will point at it.
1048
-
1049
- ### If you implement `authorize`
1050
-
1051
- The operation union gained `edit`, `list` and `glob` and lost `patch`. An
1052
- exhaustive matcher stops compiling and the compiler shows you every arm. **A
1053
- matcher with a default branch does not**, and that is the dangerous case:
1054
-
1055
- ```ts
1056
- // before — and after this upgrade, silently wrong in both directions
1057
- if (request.operation === 'patch') return reviewPatch(request)
1058
- return true // now also authorizes edit, list and glob
1059
- // …or: return false // now also kills edit_file
1060
- ```
1061
-
1062
- ```ts
1063
- // after
1064
- switch (request.operation) {
1065
- case 'edit': return reviewEdit(request) // the old `patch` payload, unchanged
1066
- case 'list':
1067
- case 'glob': return true // or your own policy
1068
- // …existing read / write / search / shell / artifact-read arms
1069
- }
1070
- ```
1071
-
1072
- `write` gained `createsDirectories` — the workspace-relative directories the
1073
- call would create, outermost first, reported **before** anything is created. A
1074
- host that wants to refuse implicit directory creation now can.
1075
-
1076
- ### If you call `apply_patch`
1077
-
1078
- It is `edit_file`, and it is one call:
1079
-
1080
- ```ts
1081
- // before
1082
- const read = await readFile({ path })
1083
- await applyPatch({ path, baseSha256: read.sha256, oldText, newText, dryRun: true })
1084
- await applyPatch({ path, baseSha256: read.sha256, oldText, newText, dryRun: false })
1085
-
1086
- // after
1087
- await editFile({ path, oldText, newText })
1088
- ```
1089
-
1090
- `expectedSha256` is optional and still refuses a stale base with `CONFLICT` when
1091
- you pass it; `edit_file` returns the resulting `sha256`, so a chain of edits
1092
- never needs to re-read. If you key an approval policy or a UI label on the string
1093
- `apply_patch`, update the key — nothing will fail loudly.
1094
-
1095
- ### If you match on `INTERNAL_SERVER_ERROR` from a coding tool
1096
-
1097
- Ordinary outcomes no longer arrive that way. A missing file is `NOT_FOUND`, an
1098
- existing file without `overwrite` is `CONFLICT`, an ambiguous snippet is
1099
- `CONFLICT` with the occurrence count, a path outside the root is `FORBIDDEN`.
1100
- Code that treated any coding-tool failure as an internal fault will now see
1101
- codes it did not before; code that showed the model an empty error now has a
1102
- sentence and a `hint` to show it. Host-level causes are unchanged and still
1103
- scrubbed.
1104
-
1105
- ### If you write files into new directories
1106
-
1107
- Nothing to change: `write_file` creates missing parents inside the root. Read
1108
- `createdDirectories` in the result if you want to notice a typo — a path that
1109
- was a failure before is now a successful write into a new tree.
1110
-
1111
- ### If you want a step to know its context budget
1112
-
1113
- Opt in by reading it; nothing is injected for you:
1114
-
1115
- ```ts
1116
- loop: {
1117
- prepareStep: ({ contextUsage }) => {
1118
- const used = contextUsage?.usedTokens
1119
- if (used?.provenance === 'unavailable') return {} // no step has landed yet
1120
- const fraction = (used?.value ?? 0) / (contextUsage?.contextWindow ?? 1)
1121
- // …render it wherever you put it
1122
- return {}
1123
- },
1124
- }
1125
- ```
1126
-
1127
- Put it at the **tail** of the conversation rather than in the system
1128
- instructions unless you have a reason: changing the system prompt on every step
1129
- invalidates the provider's prefix cache for the whole conversation, and on a long
1130
- run that is a multiple of the input cost.
1131
-
1132
- ## Released migration: 0.70.0
1133
-
1134
- ### Descriptor-backed Agent filesystem containment
1135
-
1136
- Built-in coding file/search tools and `createAgentHarnessFileResources` now require a runtime
1137
- that can address an opened directory descriptor: Linux `/proc/self/fd`, or the packaged macOS
1138
- Node-API backend added in 0.70.1. This is what keeps a mutable parent rename or outside-symlink replacement from changing
1139
- the authorized target between validation and the actual effect.
1140
-
1141
- No call-site change is needed on those platforms. The 0.70.0 notes incorrectly inferred macOS and
1142
- FreeBSD support from `/dev/fd`; macOS is restored by 0.70.1 and FreeBSD remains unsupported. On
1143
- Windows or another platform without that
1144
- boundary, move the built-in filesystem operations to a supported worker or replace them with
1145
- application-owned tools backed by an equivalent native handle API. They fail closed rather than
1146
- falling back to path spelling. `run_command` remains separately available under its explicit
1147
- executable alias and authorization policy; this change does not claim an executable sandbox.
@@ -11,9 +11,9 @@ Contains: Guide: Upgrading, general (docs/guide/upgrading.md)
11
11
 
12
12
  Load this slice, then every range slice between your installed version and the target:
13
13
 
14
- - 0.70.0 → 0.96.0: `llms/upgrading-0.70.0-0.96.0.txt`
15
- - 0.57.0 → 0.69.0: `llms/upgrading-0.57.0-0.69.0.txt`
16
- - 0.37.0 → 0.56.0: `llms/upgrading-0.37.0-0.56.0.txt`
14
+ - 0.72.0 → 0.98.0: `llms/upgrading-0.72.0-0.98.0.txt`
15
+ - 0.59.0 → 0.71.0: `llms/upgrading-0.59.0-0.71.0.txt`
16
+ - 0.37.0 → 0.58.0: `llms/upgrading-0.37.0-0.58.0.txt`
17
17
 
18
18
  # Upgrading stitchkit
19
19
 
package/llms-full.txt CHANGED
@@ -68,11 +68,11 @@ own, recorded as an ADR.
68
68
  | `stitchkit/geo` | server (Bun or Node) | evolving | managed GeoIP reader generations, last-known-good reload and the optional MaxMind adapter |
69
69
  | `stitchkit/oauth` | browser **and** server | evolving | provider-neutral Authorization Code + PKCE request and one-shot callback transaction mechanics |
70
70
  | `stitchkit/google` | server (Bun or Node) | evolving | optional Google code exchange and verified OIDC identity adapter |
71
- | `stitchkit/observability` | server | stable<br>_redefined in 2 of the 41 minors since 0.56.2, most recently 0.92.0_ | request/tool event projections — `createObservability`, trace context, sanitisation |
71
+ | `stitchkit/observability` | server | stable<br>_redefined in 2 of the 43 minors since 0.56.2, most recently 0.92.0_ | request/tool event projections — `createObservability`, trace context, sanitisation |
72
72
  | `stitchkit/testing` | tests on Bun or Node | stable | in-process generated clients over a real Fetch handler, plus the managed-resource conformance kit |
73
73
  | `stitchkit/declaration` | browser + build and deployment tooling (Bun or Node) | evolving | `ProjectDeclarationSchema` — the one machine-readable statement a repository makes about itself |
74
74
  | `stitchkit/react` | browser + server rendering | stable | `createCursorQuery`, `createCacheBridge`, QueryClient and `ApiError` retry policy |
75
- | `stitchkit/agent-runtime` | server | evolving<br>_redefined in 21 of the 41 minors since 0.56.2, most recently 0.94.0_ | optional durable conversation/run loop, history, models, prompts, fencing and events |
75
+ | `stitchkit/agent-runtime` | server | evolving<br>_redefined in 22 of the 43 minors since 0.56.2, most recently 0.97.0_ | optional durable conversation/run loop, history, models, prompts, fencing and events |
76
76
  | `stitchkit/agent-runtime/sandbox` | server | evolving | optional Linux Bubblewrap sessions, durable workspaces and a host HTTP credential gateway; see [sandbox guide](sandbox.md) |
77
77
  | `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 |
78
78
  | `stitchkit/agent-runtime/harness` | server | evolving | resource-aware process-local facade over the canonical Agent runtime; supervision stays outside |
@@ -82,7 +82,7 @@ own, recorded as an ADR.
82
82
  | `stitchkit/agent-runtime/sqlite/bun` | server (Bun) | evolving | durable built-in SQLite store for the agent runtime |
83
83
  | `stitchkit/agent-runtime/sqlite/node` | server (Node ≥ 22.5) | evolving | durable built-in SQLite store for the agent runtime |
84
84
  | `stitchkit-tui` | terminal (Bun) | evolving | optional official OpenTUI host over a caller-composed headless runtime |
85
- | `stitchkit/application` | browser + server | evolving<br>_redefined in 9 of the 41 minors since 0.56.2, most recently 0.96.0_ | managed resource graph, readiness, admission, schedules, subtree restart and bounded shutdown |
85
+ | `stitchkit/application` | browser + server | evolving<br>_redefined in 9 of the 43 minors since 0.56.2, most recently 0.96.0_ | managed resource graph, readiness, admission, schedules, subtree restart and bounded shutdown |
86
86
  | `stitchkit/application/grammy` | server | evolving | a grammY bot as application resources — configuration, then polling with updates admitted by batch — and the webhook adapter |
87
87
  | `stitchkit/application/opentelemetry` | server | evolving | maps application snapshots onto an injected OpenTelemetry `Meter` |
88
88
  | `stitchkit/application/schemas` | browser + server | evolving | the application's snapshot, health and shutdown schemas alone, without the kernel |
@@ -4846,7 +4846,7 @@ description: Configure Stitchkit's optional durable history, stream loop, run co
4846
4846
  type: architecture
4847
4847
  status: active
4848
4848
  created: 2026-08-22
4849
- updated: 2026-08-29
4849
+ updated: 2026-09-26 16:00 +07:00
4850
4850
  ---
4851
4851
 
4852
4852
  # Agent application runtime
@@ -5463,6 +5463,23 @@ has invoked a tool is never automatically replayed.
5463
5463
  `createAgentScheduleService` persists `at`, `after` and `every` input. Repeating
5464
5464
  schedules require an explicit IANA time zone. Dispatch uses a stable
5465
5465
  `schedule:<id>:<occurrence>` idempotency key, and restart lateness is recorded.
5466
+ Resolve `void` after durable admission; return `{ status: 'retry', reason }` for a
5467
+ transient refusal or `{ status: 'terminal', reason }` to stop the entire schedule in
5468
+ `failed` state. Throws retry too. Backoff is 1, 2, 4, 8, 16, 32, then 60 seconds,
5469
+ capped at 60 seconds and persisted across restart. `retryAt`, `attempts` and `lastError`
5470
+ show retry diagnostics; success resets them. `nextAt` and `lateByMs` retain the original
5471
+ occurrence time. Recurring schedules fire once after an idle stretch and advance to the
5472
+ next future slot on their original cadence.
5473
+
5474
+ Dispatch receives an `AbortSignal`, has a 30-second deadline and holds a unique
5475
+ 60-second lease. A late or cancelled attempt cannot settle or emit firing events.
5476
+ Honor the signal and durably deduplicate the key: a crash after admission but before
5477
+ settlement can replay delivery. This is at-least-once, not exactly-once.
5478
+ Due selection is indexed, limited to 32 parallel deliveries per tick; one hung batch
5479
+ can delay newly due work by at most its deadline. The service keeps one nearest-due
5480
+ timer plus per-attempt deadline timers. Storage failures use a bounded recovery timer;
5481
+ idle ticks do not write. SQLite v4 migration preserves due times and claims; stop older
5482
+ scheduler processes before migration. See [ADR 0202](../decisions/0202-schedule-retries-preserve-occurrence-identity.md).
5466
5483
  `createAgentScheduleTools` exposes the exact `schedule_after`, `schedule_at`,
5467
5484
  `schedule_every`, `schedule_list` and `schedule_cancel` surface.
5468
5485
 
@@ -7936,6 +7953,21 @@ fields in declaration order, so `myapp generate "a fox"` is
7936
7953
  `--prompt "a fox"`. A piped value fills the first required unset field:
7937
7954
  `echo "a fox" | myapp generate`.
7938
7955
 
7956
+ Automatic stdin routing skips TTYs and waits at most **250 ms for the first byte**.
7957
+ An empty open pipe or EOF without data leaves the field unset, so normal schema
7958
+ validation reports the missing field instead of waiting indefinitely. Once any
7959
+ byte arrives, the reader collects the entire stream until EOF, including chunks
7960
+ separated by long pauses; it decodes UTF-8 after collecting all bytes and trims
7961
+ surrounding whitespace. Read errors or a close before EOF fail the invocation.
7962
+ Explicit arguments and commands without required unset fields never read stdin.
7963
+
7964
+ A producer that takes longer than 250 ms to start must supply its value as an
7965
+ argument (for example, `myapp generate --prompt "$(slow-producer)"`) or the
7966
+ application must provide an explicit `CliConfig.stdin` reader that waits for it.
7967
+ That hook is not wrapped in the availability timeout. `-` remains literal data,
7968
+ not a special stdin marker. JSONL stream/batch commands own their input and wait
7969
+ for lines as usual; MCP/serve and long-running handlers have no new deadline.
7970
+
7939
7971
  A token is an option only when it is a long form (`--name`, `--name=value`,
7940
7972
  `--`) or `-` followed by a letter. Anything else that starts with `-` is data:
7941
7973
  `myapp note a "- item"` fills a positional, and after an option that expects a
@@ -13002,6 +13034,67 @@ analytics policy belong to the application.
13002
13034
 
13003
13035
  # Upgrading stitchkit
13004
13036
 
13037
+ ## Released migration: 0.98.0
13038
+
13039
+ ### automatic stdin availability
13040
+
13041
+ **Who must act:** CLI applications or scripts relying on automatic stdin routing
13042
+ from a producer that can take more than 250 ms to write its first byte.
13043
+
13044
+ Automatic routing now probes for the first byte for 250 ms. An empty open pipe
13045
+ leaves the required field unset and normal validation reports its name. Once
13046
+ data arrives, the entire stream is read until EOF without a total deadline.
13047
+
13048
+ ```sh
13049
+ # before: may now fail if the producer starts late
13050
+ slow-producer | myapp generate
13051
+ # after: provide the value explicitly after the producer completes
13052
+ myapp generate --prompt "$(slow-producer)"
13053
+ ```
13054
+
13055
+ For large input that should stay in a pipe, supply a `CliConfig.stdin` reader
13056
+ that waits for the producer and EOF; this existing hook is not wrapped in the
13057
+ availability probe. A custom reader owns its limits and error handling.
13058
+ `-` remains literal data. TTY and empty EOF produce ordinary validation errors;
13059
+ explicit arguments skip stdin. JSONL stream/batch commands, MCP/serve and
13060
+ long-running handlers have no new deadline. See ADR 0203.
13061
+
13062
+ ## Released migration: 0.97.0
13063
+
13064
+ ### schedule delivery
13065
+
13066
+ **Who must act:** consumers of `createAgentScheduleService`, exhaustive switches on
13067
+ `AgentSchedule.state`, and operators opening existing agent-runtime SQLite stores.
13068
+
13069
+ - Stop old scheduler processes and back up SQLite before startup. The store migrates
13070
+ transactionally to v4; old binaries cannot open it. Rollback uses the backup.
13071
+ - Handle `failed` as a terminal schedule state. To refuse future delivery (including
13072
+ recurring delivery), return `{ status: 'terminal', reason: 'destination closed' }`.
13073
+ The occurrence remains unadvanced; `schedule/failed` carries `terminal: true`.
13074
+ - A throw or `{ status: 'retry', reason: 'temporarily unavailable' }` retries the same
13075
+ key after 1, 2, 4, 8, 16, 32, then 60 seconds. `nextAt` remains the original due time;
13076
+ `retryAt`, `attempts` and `lastError` expose retry diagnostics. Success clears them.
13077
+ - Resolve `void` only after durable consumer admission. Honor the supplied `signal`:
13078
+ dispatch has a 30-second deadline and a 60-second lease. Durable deduplication by
13079
+ `idempotencyKey` is required even after abort or crash; do not implement sleeps in dispatch.
13080
+ - Stale/cancelled attempts emit no `schedule/fired` or `schedule/late`. Observe the
13081
+ cancellation event instead of relying on a synthetic cancelled firing.
13082
+
13083
+ ```ts
13084
+ // before
13085
+ async function dispatch(request) {
13086
+ if (await destinationClosed(request.conversationId)) throw new Error('closed')
13087
+ await admit(request)
13088
+ }
13089
+ // after: use this callback as createAgentScheduleService({ dispatch, ... })
13090
+ async function dispatch(request) {
13091
+ if (await destinationClosed(request.conversationId)) {
13092
+ return { status: 'terminal', reason: 'destination closed' }
13093
+ }
13094
+ await admit({ ...request, signal: request.signal }) // durably deduplicates idempotencyKey
13095
+ }
13096
+ ```
13097
+
13005
13098
  ## Released migration: 0.96.0
13006
13099
 
13007
13100
  ### resource-context-admission
@@ -17685,7 +17778,7 @@ Server-only optional application runtime. See the
17685
17778
  | `AgentSandboxProcess` / `AgentSandboxOutputStream` | _types_ | structural child/output interface for optional lifecycle-owned `AgentProcessSandbox.spawn`, without Node ambient type dependencies |
17686
17779
  | `AgentEventSearchResultSchema` / `AgentEventSearchResult` / `createSqliteAgentEventSearch` / `createAgentEventSearchTools` | schema / _type_ / functions | authorized FTS5 search with exact event addresses and `session_*` tools |
17687
17780
  | `createSqliteAgentSpillStore` | function | durable content-address-checked artifact storage, bounded read/search, retention facts and archive participation |
17688
- | `AgentScheduleSchema` / `AgentSchedule` / `AgentScheduleService` / `createAgentScheduleService` / `createAgentScheduleTools` | schema / _types_ / functions | durable `at`/`after`/timezone-explicit `every`, stable dispatch identity and Agent tools |
17781
+ | `AgentScheduleSchema` / `AgentSchedule` / `AgentScheduleService` / `AgentScheduleDeliveryOutcomeSchema` / `AgentScheduleDeliveryOutcome` / `createAgentScheduleService` / `createAgentScheduleTools` | schemas / _types_ / functions | durable `at`/`after`/timezone-explicit `every`, indexed retry eligibility, typed retry/terminal failure, bounded dispatch and fenced stable occurrence identity (ADR 0202) |
17689
17782
  | `AgentChildBudgetSchema` / `AgentChildBudget` / `AgentChildStateSchema` / `AgentChildState` / `AgentChildRecordSchema` / `AgentChildRecord` | schema / _type_ | durable child graph, bounded seed and measured budget state |
17690
17783
  | `AgentChildBlockingKindSchema` / `AgentChildBlockingKind` / `AgentChildBlockingSourceSchema` / `AgentChildBlockingSource` / `AgentChildBlockingEventSchema` / `AgentChildBlockingEvent` / `AgentChildBlockingDecision` | schemas / _types_ | parent-owned request identities; responses discriminate approval decisions from JSON input values |
17691
17784
  | `AgentChildHandle` / `AgentChildManager` / `SqliteAgentChildManagerConfig` / `createSqliteAgentChildManager` / `createAgentChildTools` / `agentChildBudgetStopPolicy` | _type_ / functions | host execution port, child lifecycle, cascade (given to `createAgentRuntime` as `children`), messaging, Agent tools, and the child runtime's own budget stop policy — `recordStepUsage` at every step boundary, `policy_stop` as `child-budget` when spent |
package/llms.txt CHANGED
@@ -16,13 +16,13 @@ Load the slice for each entrypoint your code imports — `import … from 'stitc
16
16
  - **stitchkit/tools/contract**: [llms/tools-contract.txt](llms/tools-contract.txt) 0.2 KB
17
17
  - **stitchkit/tools/invoker**: [llms/tools-invoker.txt](llms/tools-invoker.txt) 0.2 KB
18
18
  - **stitchkit/tools/connections**: [llms/tools-connections.txt](llms/tools-connections.txt) 3.1 KB
19
- - **stitchkit/cli**: [llms/cli.txt](llms/cli.txt) 41.3 KB → [llms/cli.2.txt](llms/cli.2.txt) 8.1 KB
19
+ - **stitchkit/cli**: [llms/cli.txt](llms/cli.txt) 42.3 KB → [llms/cli.2.txt](llms/cli.2.txt) 8.1 KB
20
20
  - **stitchkit/remote**: [llms/remote.txt](llms/remote.txt) 1.0 KB
21
21
  - **stitchkit/contract**: [llms/contract.txt](llms/contract.txt) 31.9 KB
22
22
  - **stitchkit/primitives**: [llms/primitives.txt](llms/primitives.txt) 9.3 KB
23
23
  - **stitchkit/server**: [llms/server.txt](llms/server.txt) 45.3 KB → [llms/server.2.txt](llms/server.2.txt) 14.6 KB → [llms/server.3.txt](llms/server.3.txt) 42.7 KB → [llms/server.4.txt](llms/server.4.txt) 37.5 KB → [llms/server.5.txt](llms/server.5.txt) 21.8 KB
24
24
  - **stitchkit/observability**: [llms/observability.txt](llms/observability.txt) 43.4 KB
25
- - **stitchkit/agent-runtime**: [llms/agent-runtime.txt](llms/agent-runtime.txt) 46.6 KB → [llms/agent-runtime.2.txt](llms/agent-runtime.2.txt) 29.8 KB → [llms/agent-runtime.3.txt](llms/agent-runtime.3.txt) 31.8 KB
25
+ - **stitchkit/agent-runtime**: [llms/agent-runtime.txt](llms/agent-runtime.txt) 36.4 KB → [llms/agent-runtime.2.txt](llms/agent-runtime.2.txt) 41.3 KB → [llms/agent-runtime.3.txt](llms/agent-runtime.3.txt) 32.0 KB
26
26
  - **stitchkit/agent-runtime/testing**: [llms/agent-runtime-testing.txt](llms/agent-runtime-testing.txt) 2.2 KB
27
27
  - **stitchkit/agent-runtime/harness**: [llms/agent-runtime-harness.txt](llms/agent-runtime-harness.txt) 4.1 KB
28
28
  - **stitchkit/agent-runtime/coding-tools**: [llms/agent-runtime-coding-tools.txt](llms/agent-runtime-coding-tools.txt) 4.9 KB
@@ -52,9 +52,9 @@ Load the slice for each entrypoint your code imports — `import … from 'stitc
52
52
 
53
53
  ## Upgrading slices
54
54
  - **Upgrading — how to move across versions**: [llms/upgrading.txt](llms/upgrading.txt) 10.3 KB
55
- - **Upgrading 0.70.0 → 0.96.0**: [llms/upgrading-0.70.0-0.96.0.txt](llms/upgrading-0.70.0-0.96.0.txt) 46.3 KB
56
- - **Upgrading 0.57.0 → 0.69.0**: [llms/upgrading-0.57.0-0.69.0.txt](llms/upgrading-0.57.0-0.69.0.txt) 44.4 KB
57
- - **Upgrading 0.37.0 → 0.56.0**: [llms/upgrading-0.37.0-0.56.0.txt](llms/upgrading-0.37.0-0.56.0.txt) 36.9 KB
55
+ - **Upgrading 0.72.0 → 0.98.0**: [llms/upgrading-0.72.0-0.98.0.txt](llms/upgrading-0.72.0-0.98.0.txt) 44.8 KB
56
+ - **Upgrading 0.59.0 → 0.71.0**: [llms/upgrading-0.59.0-0.71.0.txt](llms/upgrading-0.59.0-0.71.0.txt) 45.6 KB
57
+ - **Upgrading 0.37.0 → 0.58.0**: [llms/upgrading-0.37.0-0.58.0.txt](llms/upgrading-0.37.0-0.58.0.txt) 40.0 KB
58
58
 
59
59
  ## Guide (web)
60
60
  - [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.96.1",
3
+ "version": "0.98.0",
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",