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.
- package/CHANGELOG.md +50 -0
- package/dist/agent-runtime/schedule-contract.d.ts +52 -0
- package/dist/agent-runtime/schedule-contract.d.ts.map +1 -0
- package/dist/agent-runtime/schedule-dispatch.d.ts +26 -0
- package/dist/agent-runtime/schedule-dispatch.d.ts.map +1 -0
- package/dist/agent-runtime/schedule-records.d.ts +8 -14
- package/dist/agent-runtime/schedule-records.d.ts.map +1 -1
- package/dist/agent-runtime/schedule-tools.d.ts +1 -1
- package/dist/agent-runtime/schedule-tools.d.ts.map +1 -1
- package/dist/agent-runtime/schedules.d.ts +7 -92
- package/dist/agent-runtime/schedules.d.ts.map +1 -1
- package/dist/agent-runtime/sqlite-schema.d.ts.map +1 -1
- package/dist/agent-runtime/store-migrations/v3-to-v4.d.ts +4 -0
- package/dist/agent-runtime/store-migrations/v3-to-v4.d.ts.map +1 -0
- package/dist/entrypoints/agent-runtime/sqlite/bun.js +1 -1
- package/dist/entrypoints/agent-runtime/sqlite/node.js +1 -1
- package/dist/entrypoints/agent-runtime.d.ts +2 -1
- package/dist/entrypoints/agent-runtime.d.ts.map +1 -1
- package/dist/entrypoints/agent-runtime.js +289 -214
- package/dist/entrypoints/cli.js +1 -1
- package/dist/entrypoints/tools.js +1 -1
- package/dist/{index-p9e0w8hs.js → index-1m2thnq0.js} +25 -1
- package/dist/{index-t9rhjr9f.js → index-f1nb70ae.js} +45 -9
- package/dist/tools/cli/config.d.ts +5 -1
- package/dist/tools/cli/config.d.ts.map +1 -1
- package/dist/tools/cli/io.d.ts.map +1 -1
- package/dist/tools/cli/stdin.d.ts +6 -0
- package/dist/tools/cli/stdin.d.ts.map +1 -0
- package/llms/agent-runtime.2.txt +224 -0
- package/llms/agent-runtime.3.txt +1 -1
- package/llms/agent-runtime.txt +18 -225
- package/llms/cli.txt +15 -0
- package/llms/stitchkit.txt +3 -3
- package/llms/{upgrading-0.37.0-0.56.0.txt → upgrading-0.37.0-0.58.0.txt} +82 -3
- package/llms/{upgrading-0.57.0-0.69.0.txt → upgrading-0.59.0-0.71.0.txt} +108 -82
- package/llms/{upgrading-0.70.0-0.96.0.txt → upgrading-0.72.0-0.98.0.txt} +64 -108
- package/llms/upgrading.txt +3 -3
- package/llms-full.txt +98 -5
- package/llms.txt +5 -5
- package/package.json +1 -1
|
@@ -1,14 +1,75 @@
|
|
|
1
|
-
# Upgrading 0.
|
|
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.
|
|
6
|
+
Contains: Guide: Upgrading, 0.72.0 → 0.98.0 (docs/guide/upgrading.md)
|
|
7
7
|
|
|
8
8
|
==============================================================================
|
|
9
|
-
# Guide: Upgrading, 0.
|
|
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.
|
package/llms/upgrading.txt
CHANGED
|
@@ -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.
|
|
15
|
-
- 0.
|
|
16
|
-
- 0.37.0 → 0.
|
|
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
|
|
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
|
|
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
|
|
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-
|
|
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` |
|
|
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)
|
|
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)
|
|
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.
|
|
56
|
-
- **Upgrading 0.
|
|
57
|
-
- **Upgrading 0.37.0 → 0.
|
|
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