stitchkit 0.111.2 → 0.112.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 (72) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/application/diagnostic-journal-contract.d.ts +1 -1
  3. package/dist/application/diagnostic-journal-contract.d.ts.map +1 -1
  4. package/dist/entrypoints/agent-runtime/coding-tools.js +3 -3
  5. package/dist/entrypoints/agent-runtime/harness.js +6 -6
  6. package/dist/entrypoints/agent-runtime/sandbox.js +3 -3
  7. package/dist/entrypoints/agent-runtime/sqlite/bun.js +5 -5
  8. package/dist/entrypoints/agent-runtime/sqlite/node.js +5 -5
  9. package/dist/entrypoints/agent-runtime/testing.js +5 -5
  10. package/dist/entrypoints/agent-runtime.js +12 -12
  11. package/dist/entrypoints/application/diagnostic-journal.js +1 -1
  12. package/dist/entrypoints/application/directory-inbox.js +3 -3
  13. package/dist/entrypoints/cli/publish.js +2 -2
  14. package/dist/entrypoints/cli.js +8 -8
  15. package/dist/entrypoints/files.js +2 -2
  16. package/dist/entrypoints/server.js +3 -3
  17. package/dist/entrypoints/telegram.js +1 -1
  18. package/dist/entrypoints/testing.js +1 -1
  19. package/dist/entrypoints/tools/connections.js +6 -4
  20. package/dist/entrypoints/tools/contract.js +2 -2
  21. package/dist/entrypoints/tools/invoker.js +6 -6
  22. package/dist/entrypoints/tools/mcp.js +8 -8
  23. package/dist/entrypoints/tools.js +11 -11
  24. package/dist/{index-mha6b4vk.js → index-02h0dfpr.js} +12 -5
  25. package/dist/{index-0z3kfphz.js → index-38gvr73z.js} +1 -1
  26. package/dist/{index-8jv0trhg.js → index-5as18gs2.js} +1 -1
  27. package/dist/{index-t2bsd0hm.js → index-5v5a9k2n.js} +92 -43
  28. package/dist/{index-c5374vpt.js → index-651xsm48.js} +4 -4
  29. package/dist/{index-w9mqgnz9.js → index-6b3pcq5z.js} +1 -1
  30. package/dist/{index-v2eyj2ws.js → index-bd7spznx.js} +20 -7
  31. package/dist/{index-7c046kxr.js → index-c7h371gr.js} +4 -4
  32. package/dist/{index-mnk5vgdr.js → index-d4cnhfdn.js} +1 -1
  33. package/dist/{index-t5sjh517.js → index-epmnrnth.js} +18 -1
  34. package/dist/{index-636mggad.js → index-ff3agzaf.js} +1 -1
  35. package/dist/{index-7c957abz.js → index-fh2ht88b.js} +1 -1
  36. package/dist/{index-q6crhe1n.js → index-h7accrrv.js} +19 -6
  37. package/dist/{index-0d8m0kee.js → index-hvg9hctd.js} +3 -3
  38. package/dist/{index-nx49x0tw.js → index-hy802jnr.js} +1 -1
  39. package/dist/{index-dd1z5kxb.js → index-jfk93gja.js} +3 -3
  40. package/dist/{index-cykxpxz5.js → index-jy9wq8tp.js} +1 -1
  41. package/dist/{index-ey15wx6j.js → index-n0adphfg.js} +1 -1
  42. package/dist/{index-ghwntn9n.js → index-vqdjym30.js} +2 -2
  43. package/dist/internal/exclusive-lock-owner.d.ts +53 -0
  44. package/dist/internal/exclusive-lock-owner.d.ts.map +1 -0
  45. package/dist/internal/exclusive-lock.d.ts +1 -28
  46. package/dist/internal/exclusive-lock.d.ts.map +1 -1
  47. package/dist/internal/open-descriptors.d.ts +18 -0
  48. package/dist/internal/open-descriptors.d.ts.map +1 -0
  49. package/dist/internal/with-exclusive-lock.d.ts +2 -12
  50. package/dist/internal/with-exclusive-lock.d.ts.map +1 -1
  51. package/dist/tools/cli/args.d.ts.map +1 -1
  52. package/dist/tools/cli/help.d.ts.map +1 -1
  53. package/dist/tools/connections/runtime.d.ts +1 -1
  54. package/dist/tools/connections/runtime.d.ts.map +1 -1
  55. package/dist/tools/execute-args.d.ts.map +1 -1
  56. package/dist/tools/schema/flatten-join.d.ts.map +1 -1
  57. package/dist/tools/schema/json-schema-origin.d.ts +17 -0
  58. package/dist/tools/schema/json-schema-origin.d.ts.map +1 -1
  59. package/llms/cli.2.txt +11 -1
  60. package/llms/cli.txt +10 -1
  61. package/llms/files.txt +1 -1
  62. package/llms/process.txt +10 -0
  63. package/llms/stitchkit.txt +3 -3
  64. package/llms/tools-connections.txt +1 -1
  65. package/llms/tools.txt +8 -3
  66. package/llms/{upgrading-0.101.0-0.111.0.txt → upgrading-0.103.0-0.112.0.txt} +34 -63
  67. package/llms/{upgrading-0.61.0-0.73.0.txt → upgrading-0.61.0-0.74.0.txt} +64 -3
  68. package/llms/{upgrading-0.74.0-0.100.0.txt → upgrading-0.75.0-0.102.0.txt} +63 -64
  69. package/llms/upgrading.txt +3 -3
  70. package/llms-full.txt +75 -10
  71. package/llms.txt +8 -8
  72. package/package.json +1 -1
package/llms-full.txt CHANGED
@@ -77,12 +77,12 @@ own, recorded as an ADR.
77
77
  | `stitchkit/geo` | server (Bun or Node) | evolving | managed GeoIP reader generations, last-known-good reload and the optional MaxMind adapter |
78
78
  | `stitchkit/oauth` | browser **and** server | evolving | provider-neutral Authorization Code + PKCE request and one-shot callback transaction mechanics |
79
79
  | `stitchkit/google` | server (Bun or Node) | evolving | optional Google code exchange and verified OIDC identity adapter |
80
- | `stitchkit/observability` | server | stable<br>_redefined in 2 of the 56 minors since 0.56.2, most recently 0.92.0_ | request/tool event projections — `createObservability`, trace context, sanitisation |
80
+ | `stitchkit/observability` | server | stable<br>_redefined in 2 of the 57 minors since 0.56.2, most recently 0.92.0_ | request/tool event projections — `createObservability`, trace context, sanitisation |
81
81
  | `stitchkit/testing` | tests on Bun or Node | stable | in-process generated clients over a real Fetch handler, the managed-resource conformance kit and manual time for schedules and retries |
82
82
  | `stitchkit/declaration` | browser + build and deployment tooling (Bun or Node) | evolving | `ProjectDeclarationSchema` — the one machine-readable statement a repository makes about itself |
83
83
  | `stitchkit/react` | browser + server rendering | stable | `createCursorQuery`, `createCacheBridge`, QueryClient and `ApiError` retry policy |
84
84
  | `stitchkit/react/keyboard` | browser | evolving | which part of a screen gets a key — ordered layers, one Escape per level, list zones with real focus; see [keyboard guide](keyboard.md) |
85
- | `stitchkit/agent-runtime` | server | evolving<br>_redefined in 23 of the 56 minors since 0.56.2, most recently 0.105.0_ | optional durable conversation/run loop, history, models, prompts, fencing and events |
85
+ | `stitchkit/agent-runtime` | server | evolving<br>_redefined in 23 of the 57 minors since 0.56.2, most recently 0.105.0_ | optional durable conversation/run loop, history, models, prompts, fencing and events |
86
86
  | `stitchkit/agent-runtime/sandbox` | server | evolving | optional Linux Bubblewrap sessions, durable workspaces and a host HTTP credential gateway; see [sandbox guide](sandbox.md) |
87
87
  | `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 |
88
88
  | `stitchkit/agent-runtime/harness` | server | evolving | resource-aware process-local facade over the canonical Agent runtime; supervision stays outside |
@@ -94,7 +94,7 @@ own, recorded as an ADR.
94
94
  | `stitchkit/agent-runtime/sqlite/bun` | server (Bun) | evolving | durable built-in SQLite store for the agent runtime |
95
95
  | `stitchkit/agent-runtime/sqlite/node` | server (Node ≥ 22.5) | evolving | durable built-in SQLite store for the agent runtime |
96
96
  | `stitchkit-tui` | terminal (Bun) | evolving | optional official OpenTUI host over a caller-composed headless runtime |
97
- | `stitchkit/application` | browser + server | evolving<br>_redefined in 14 of the 56 minors since 0.56.2, most recently 0.110.0_ | managed resource graph, readiness, admission, schedules, subtree restart and bounded shutdown |
97
+ | `stitchkit/application` | browser + server | evolving<br>_redefined in 14 of the 57 minors since 0.56.2, most recently 0.110.0_ | managed resource graph, readiness, admission, schedules, subtree restart and bounded shutdown |
98
98
  | `stitchkit/application/grammy` | server | evolving | a grammY bot as application resources — configuration, then polling with updates admitted by batch — and the webhook adapter |
99
99
  | `stitchkit/application/opentelemetry` | server | evolving | maps application snapshots onto an injected OpenTelemetry `Meter` |
100
100
  | `stitchkit/application/schemas` | browser + server | evolving | the application's snapshot, health and shutdown schemas alone, without the kernel |
@@ -4428,12 +4428,17 @@ A field that is a number in every variant is advertised as a number, not as a
4428
4428
  bare description. Scalar collisions keep every provable kind in a deterministic
4429
4429
  JSON Schema type array. If any alternative is an object or array, the property
4430
4430
  retains distinct structural alternatives in `anyOf`: object properties, typed
4431
- array items, bounds and nullable values remain available to the model. The
4431
+ array items, bounds and nullable values remain available to the model. Each
4432
+ alternative is described by the discriminator values that select it
4433
+ (`When type = image.`, or `When type = photo | video.` for a shape two values share),
4434
+ so the model can pair a shape with its value; the order of the alternatives is
4435
+ canonical, not the order of the variants. The
4432
4436
  containing discriminated union still becomes one object; flat mode does not
4433
4437
  promise to remove every nested union keyword. Only a branch whose kind is
4434
4438
  actually unknowable, such as a free-form schema or unresolved reference, leaves
4435
- the collision unconstrained. → ADRs [0044](../decisions/0044-a-collided-field-keeps-its-type.md)
4436
- and [0205](../decisions/0205-flat-tool-collisions-retain-structural-alternatives.md).
4439
+ the collision unconstrained. → ADRs [0044](../decisions/0044-a-collided-field-keeps-its-type.md),
4440
+ [0205](../decisions/0205-flat-tool-collisions-retain-structural-alternatives.md)
4441
+ and [0267](../decisions/0267-a-flat-alternative-names-the-values-that-select-it.md).
4437
4442
 
4438
4443
  It is **deep** because the projection walks the generated JSON Schema document,
4439
4444
  including objects, arrays, tuples and schema-definition nodes. Structurally
@@ -8916,6 +8921,16 @@ unlink. Recovery depth is capped at 16; a deeper stale chain refuses recovery wi
8916
8921
  the bounded `LOCK_TIMEOUT`. Live owners, unknown process-lifetime evidence and unsafe records are never
8917
8922
  reclaimed. Concurrent writers cannot bypass a guard while a prior unlink is paused.
8918
8923
 
8924
+ A record that names this very process is held only while a descriptor of this process is open
8925
+ on the lock: the holder keeps the one it created the lock with until it releases. A process image
8926
+ replaced in place — `execve`, which is how `bun --watch` restarts — keeps its PID and kernel start
8927
+ time, so its record still matches, but not that descriptor, and the new image takes the lock over
8928
+ at once instead of waiting for the PID to change. Worker threads and a second copy of the package
8929
+ in the same process share the descriptor table, so a hold any of them takes is never displaced.
8930
+ The check counts only when `/dev/fd` lists the descriptor it opens itself; a listing it cannot
8931
+ prove complete means "unknown", which never reclaims. A replaced image of another process is
8932
+ still judged alive.
8933
+
8919
8934
  ## Libraries with a Zod-only runtime
8920
8935
 
8921
8936
  Public leaves keep optional peers out of their import closure. Installing `stitchkit` still
@@ -9926,6 +9941,15 @@ string, the schema says what it should be:
9926
9941
  | `z.record(z.string(), z.unknown())` | `--data '{"code":"007"}'` or `--data.code=007` → `"007"` |
9927
9942
  | `.optional()` / `.default()` | not required |
9928
9943
 
9944
+ An array option takes **one value per occurrence**, never a bare list after the flag.
9945
+ Repeat it (`--tag a --tag b`) or assign the whole array (`--tag:='["a","b"]'`).
9946
+ Without an explicit command `positionals` policy, combining any named array option
9947
+ with bare positionals is refused before dispatch: schema-order inference could otherwise
9948
+ assign the remaining array elements to unrelated fields. This includes short aliases,
9949
+ dotted array leaves, whole-array JSON and tokens after `--`, regardless of token order.
9950
+ Name the scalar fields too, or declare their exact positional destinations. An explicitly
9951
+ declared trailing positional array is the variadic form described below.
9952
+
9929
9953
  Use the inline `:=` form to assign a whole JSON value without scalar coercion:
9930
9954
 
9931
9955
  ```bash
@@ -10201,7 +10225,7 @@ Declared aliases render beside their canonical options, for example
10201
10225
 
10202
10226
  The argument table and `Application options:` show bounds from their JSON Schema,
10203
10227
  for example `<integer> [>=1, <=50]`, `<string> [length >=1, length <=12]`, and
10204
- `<value…> [items >=2, items <=4]`. Numeric `>` and `<` are exclusive, while `>=`
10228
+ `<value> [items >=2, items <=4]`. Numeric `>` and `<` are exclusive, while `>=`
10205
10229
  and `<=` include the endpoint; a zero limit is displayed too. Only limits the
10206
10230
  schema declares are shown: the safe-integer range every `z.int()` carries is the
10207
10231
  type, not a bound, so a bare integer prints `<integer>`, `.min(1)` prints `>=1` and
@@ -10771,6 +10795,16 @@ One unconvertible schema does not take the connection down. The tool
10771
10795
  is skipped and **named** (`onSkippedTool`, or a stderr line by default), so a
10772
10796
  surface of two hundred tools is not lost to one.
10773
10797
 
10798
+ **A discovered schema is checked locally, except for its unions.** The arguments are
10799
+ coerced and parsed against the schema the server advertised, so a missing field or a
10800
+ wrong scalar is refused before anything is sent. A union in that schema is not judged
10801
+ here: a server's presentation may join a discriminated union into one object whose
10802
+ shared field is an unlabelled `anyOf` (a stitchkit server with `flattenUnionInput`
10803
+ does), and judged against that, a wrong value could only be refused with every branch
10804
+ listed. The value goes to the server, which holds the original schema, and its refusal
10805
+ names the one wrong field — `blocks.0.data.artifactId: expected string` rather than
10806
+ `No union branch matched — branch 1 … and 6 more branches`.
10807
+
10774
10808
  MCP connection limits follow the operation phase. `initialize`, the initialized
10775
10809
  notification, `tools/list` and legacy endpoint discovery use `limits.discovery`;
10776
10810
  `tools/call` uses `limits.call`. A mounted call's handshake still uses discovery
@@ -16168,6 +16202,37 @@ analytics policy belong to the application.
16168
16202
 
16169
16203
  # Upgrading stitchkit
16170
16204
 
16205
+ ## Released migration: 0.112.0
16206
+
16207
+ **Who must act:** scripts using an array option together with bare positional arguments without a declared `positionals` policy, including calls to `parseCliArgs`.
16208
+
16209
+ An array flag consumes one value. Automatic schema-order positionals cannot distinguish additional array elements from values intended for unrelated fields, so the combination is refused before any handler or stdin read. The rule is independent of token order, includes aliases, dotted array leaves and whole-array JSON, and `--` does not bypass it. See [ADR 0268](../decisions/0268-named-cli-arrays-require-explicit-positional-destinations.md).
16210
+
16211
+ ```sh
16212
+ # before: the last two words could populate unrelated fields
16213
+ app resolve --references alpha.md beta.md gamma.md
16214
+ # after: repeat the option or assign the whole array
16215
+ app resolve --references alpha.md --references beta.md --references gamma.md
16216
+ app resolve --references:='["alpha.md","beta.md","gamma.md"]'
16217
+
16218
+ # before: even an intended scalar positional has an implicit destination
16219
+ app resolve project-one --references alpha.md
16220
+ # after: name it
16221
+ app resolve --projectId project-one --references alpha.md
16222
+ ```
16223
+
16224
+ Applications that intend positional syntax declare its destinations on the available command:
16225
+
16226
+ ```ts
16227
+ createCli({ ...config, positionals: { resolve: ['projectId'] } })
16228
+ // app resolve project-one --references alpha.md
16229
+
16230
+ createCli({ ...config, positionals: { resolve: ['references'] } })
16231
+ // app resolve alpha.md beta.md gamma.md
16232
+ ```
16233
+
16234
+ A declared trailing array accepts all remaining positional elements. Giving that same field both a flag and positional elements remains an error. An empty policy accepts flags only. Policies still target exact available command names: a partial dynamic catalogue needs no policy for an unavailable command to enforce this admission rule.
16235
+
16171
16236
  ## Released migration: 0.111.0
16172
16237
 
16173
16238
  **Who must act:** applications whose raw routes call `parseBody` on JSON larger than 1 MiB, and applications whose OAuth clients send `/register` or `/token` bodies larger than 64 KiB.
@@ -22904,7 +22969,7 @@ and approval path.
22904
22969
  | `ConnectionPhase` / `ConnectionOperation` / `ConnectionFailureContext` | _type_ | closed operation/phase vocabulary and measured read context for existing typed connection errors |
22905
22970
  | `ConnectionTimeoutError` / `ConnectionResponseTooLargeError` | class | bounded operation refusal, with phase, operation and finite observed bytes; safe tool projection retains the raw cause locally |
22906
22971
  | `defineOpenApiConnection` | function | declare one OpenAPI document (object, JSON text or JSON URL) as a tool surface |
22907
- | `mountConnections` | function | discover every connection and return readonly `RuntimeToolDefinition`s for `mountAgent` |
22972
+ | `mountConnections` | function | discover every connection and return readonly `RuntimeToolDefinition`s for `mountAgent`; a call's arguments are parsed against the discovered schema before sending, except its unions, which the server judges (ADR 0266) |
22908
22973
  | `ConnectionAuthorizationRequiredError` | class | typed reauthorization signal raised on `401` with credentials resolved again on the next call |
22909
22974
  | `ConnectionBudgetExceededError` | class | the mount would expose more foreign tools than its declared budget |
22910
22975
  | `ConnectionRequestError` | class | any non-`2xx` connection response other than the reauthorization signal |
@@ -23013,7 +23078,7 @@ available from `stitchkit/contract`.
23013
23078
  | `writeFileAtomic` / `writeFileAtomicSync` / `WriteFileAtomicOptions` | function / _type_ | replace a file atomically: a random staging name created exclusively (never through a planted link), the mode set on the descriptor before the file is visible (default `0o600`, not masked by the umask), `fsync`, rename; a failure leaves the target and no staging file. The asynchronous form keeps the event loop running. A process killed before publication leaves its staging file; sweeping it is the caller's job |
23014
23079
  | `isAtomicStagingName` | function | true for a staging file name of an atomic write of this library (`.stitchkit-<24 lowercase hex>.tmp`, also used by the managed writer and the chunk spool); the form is a stable contract, and changing it is a breaking change ([ADR 0242](../decisions/0242-atomic-staging-name-is-a-public-contract.md)) |
23015
23080
  | `sweepAtomicStaging` / `SweepAtomicStagingOptions` | function / _type_ | remove abandoned staging files from one `directory`: only regular files matching `isAtomicStagingName` and older than the required `olderThanMs`, never following a symlink or entering a subdirectory; stops on `signal`; returns the removed names, `[]` for a `directory` that does not exist |
23016
- | `withExclusiveLock` / `ExclusiveLockOptions` / `ExclusiveLock` / `ExclusiveLockOwner` | function / _type_ | run work under an exclusive lock between processes — a file recording its owner (pid, host, machine identity, time and nullable kernel process identity); waits up to `timeoutMs` (default 10 s) and stops on `signal`; a dead owner on this machine is taken over, a live, slow or foreign one never is; the lock is published with its owner already recorded (temporary file plus hard link), so a stalled holder is never displaced; a legacy empty lock file is taken by age only when `ownerlessGraceMs` is a number (default `null`: never; an abandoned empty reclaim guard is taken after 5 000 ms unless a value is set); exact `mode` is independent of umask; shared readers need a common group and traversable directories |
23081
+ | `withExclusiveLock` / `ExclusiveLockOptions` / `ExclusiveLock` / `ExclusiveLockOwner` | function / _type_ | run work under an exclusive lock between processes — a file recording its owner (pid, host, machine identity, time and nullable kernel process identity); waits up to `timeoutMs` (default 10 s) and stops on `signal`; a dead owner on this machine is taken over, a live, slow or foreign one never is; a lock recorded by this very process is held only while one of its descriptors is open on it, so the lock an earlier image of the same PID left (`bun --watch` restarts in place) is taken over at once; the lock is published with its owner already recorded (temporary file plus hard link), so a stalled holder is never displaced; a legacy empty lock file is taken by age only when `ownerlessGraceMs` is a number (default `null`: never; an abandoned empty reclaim guard is taken after 5 000 ms unless a value is set); exact `mode` is independent of umask; shared readers need a common group and traversable directories |
23017
23082
  | `ExclusiveLockError` | class | `LOCK_TIMEOUT` naming the resource and its holder, or `LOCK_ABORTED` with the signal's reason |
23018
23083
  | `createChunkSpool` | function | the server half of a chunked upload: parts on disk under `owner` + client-minted `uploadId`, each with a size+sha256 receipt; idempotent `open` and `put`, the first writer of a part wins across processes, `assemble` in order once every part is in, `sweep` of untouched uploads — [guide](../guide/client.md#chunked-uploads) |
23019
23084
  | `ChunkSpool` / `ChunkSpoolConfig` / `ChunkSpoolKey` / `ChunkSpoolOpen` / `ChunkSpoolPart` / `ChunkSpoolAssembly` | _type_ | the spool, its directory, part size, file limit, meta schema and age; an upload's key; its declaration; one part; the assembled parts with a concatenating `stream()` |
@@ -23385,7 +23450,7 @@ SDK nor the `ai` peer.
23385
23450
  |--------|------|---------|
23386
23451
  | `createCli` | function | build and run a CLI from contracts — [guide](../guide/cli.md) |
23387
23452
  | `defineCliCommand` | function | define one Zod-typed CLI-only executable command with optional validated-result presentation/exit policy |
23388
- | `parseCliArgs` | function | argv → typed tool args against a schema; inline `--field:=JSON` assigns a whole JSON value, including null, while ordinary string flags remain lexical (advanced) |
23453
+ | `parseCliArgs` | function | argv → typed tool args against a schema; inline `--field:=JSON` assigns a whole JSON value, including null, while ordinary string flags remain lexical; named array options together with bare positionals require an explicit `positionals` policy (advanced) |
23389
23454
  | `routeCliArgv` | function | select the command out of argv without duplicating the global-option grammar (advanced) |
23390
23455
  | `extractCliGlobalOptions` | function | lift the application's own global options out of argv before routing (advanced) |
23391
23456
  | `coerceJsonArgs` | function | the second half of `parseCliArgs` — parse array/object values a consumer sends itself, including discovered MCP object guards restored from JSON Schema, without the `stitchkit/tools` barrel |
package/llms.txt CHANGED
@@ -13,12 +13,12 @@ Load the slice for each entrypoint your code imports — `import … from 'stitc
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/react/keyboard**: [llms/react-keyboard.txt](llms/react-keyboard.txt) 9.2 KB
16
- - **stitchkit/tools**: [llms/tools.txt](llms/tools.txt) 46.4 KB → [llms/tools.2.txt](llms/tools.2.txt) 30.4 KB → [llms/tools.3.txt](llms/tools.3.txt) 26.3 KB
16
+ - **stitchkit/tools**: [llms/tools.txt](llms/tools.txt) 46.7 KB → [llms/tools.2.txt](llms/tools.2.txt) 30.4 KB → [llms/tools.3.txt](llms/tools.3.txt) 26.3 KB
17
17
  - **stitchkit/tools/mcp**: [llms/tools-mcp.txt](llms/tools-mcp.txt) 1.8 KB
18
18
  - **stitchkit/tools/contract**: [llms/tools-contract.txt](llms/tools-contract.txt) 0.2 KB
19
19
  - **stitchkit/tools/invoker**: [llms/tools-invoker.txt](llms/tools-invoker.txt) 0.2 KB
20
- - **stitchkit/tools/connections**: [llms/tools-connections.txt](llms/tools-connections.txt) 3.7 KB
21
- - **stitchkit/cli**: [llms/cli.txt](llms/cli.txt) 44.6 KB → [llms/cli.2.txt](llms/cli.2.txt) 20.6 KB
20
+ - **stitchkit/tools/connections**: [llms/tools-connections.txt](llms/tools-connections.txt) 3.8 KB
21
+ - **stitchkit/cli**: [llms/cli.txt](llms/cli.txt) 45.3 KB → [llms/cli.2.txt](llms/cli.2.txt) 21.4 KB
22
22
  - **stitchkit/cli/publish**: [llms/cli-publish.txt](llms/cli-publish.txt) 1.5 KB
23
23
  - **stitchkit/remote**: [llms/remote.txt](llms/remote.txt) 1.0 KB
24
24
  - **stitchkit/contract**: [llms/contract.txt](llms/contract.txt) 31.9 KB
@@ -41,7 +41,7 @@ Load the slice for each entrypoint your code imports — `import … from 'stitc
41
41
  - **stitchkit/application/schemas**: [llms/application-schemas.txt](llms/application-schemas.txt) 1.8 KB
42
42
  - **stitchkit/testing**: [llms/testing.txt](llms/testing.txt) 33.6 KB
43
43
  - **stitchkit/agent-runtime/sandbox**: [llms/agent-runtime-sandbox.txt](llms/agent-runtime-sandbox.txt) 8.3 KB
44
- - **stitchkit/files**: [llms/files.txt](llms/files.txt) 5.5 KB
44
+ - **stitchkit/files**: [llms/files.txt](llms/files.txt) 5.7 KB
45
45
  - **stitchkit/telegram**: [llms/telegram.txt](llms/telegram.txt) 36.6 KB
46
46
  - **stitchkit/telegram/html**: [llms/telegram-html.txt](llms/telegram-html.txt) 2.7 KB
47
47
  - **stitchkit/telegram/screens**: [llms/telegram-screens.txt](llms/telegram-screens.txt) 21.2 KB
@@ -56,7 +56,7 @@ Load the slice for each entrypoint your code imports — `import … from 'stitc
56
56
  - **stitchkit/node**: [llms/node.txt](llms/node.txt) 3.1 KB
57
57
  - **stitchkit/agent-runtime/react**: [llms/agent-runtime-react.txt](llms/agent-runtime-react.txt) 1.0 KB
58
58
  - **stitchkit/agent-runtime/realtime**: [llms/agent-runtime-realtime.txt](llms/agent-runtime-realtime.txt) 2.6 KB
59
- - **stitchkit/process**: [llms/process.txt](llms/process.txt) 43.7 KB → [llms/process.2.txt](llms/process.2.txt) 4.3 KB
59
+ - **stitchkit/process**: [llms/process.txt](llms/process.txt) 44.4 KB → [llms/process.2.txt](llms/process.2.txt) 4.3 KB
60
60
  - **stitchkit/process/owner-loss**: [llms/process-owner-loss.txt](llms/process-owner-loss.txt) 0.9 KB
61
61
  - **stitchkit/files/packaging**: [llms/files-packaging.txt](llms/files-packaging.txt) 3.5 KB
62
62
  - **stitchkit/http**: [llms/http.txt](llms/http.txt) 0.9 KB
@@ -64,9 +64,9 @@ Load the slice for each entrypoint your code imports — `import … from 'stitc
64
64
 
65
65
  ## Upgrading slices
66
66
  - **Upgrading — how to move across versions**: [llms/upgrading.txt](llms/upgrading.txt) 12.7 KB
67
- - **Upgrading 0.101.0 → 0.111.0**: [llms/upgrading-0.101.0-0.111.0.txt](llms/upgrading-0.101.0-0.111.0.txt) 46.9 KB
68
- - **Upgrading 0.74.0 → 0.100.0**: [llms/upgrading-0.74.0-0.100.0.txt](llms/upgrading-0.74.0-0.100.0.txt) 45.1 KB
69
- - **Upgrading 0.61.0 → 0.73.0**: [llms/upgrading-0.61.0-0.73.0.txt](llms/upgrading-0.61.0-0.73.0.txt) 41.2 KB
67
+ - **Upgrading 0.103.0 → 0.112.0**: [llms/upgrading-0.103.0-0.112.0.txt](llms/upgrading-0.103.0-0.112.0.txt) 46.6 KB
68
+ - **Upgrading 0.75.0 → 0.102.0**: [llms/upgrading-0.75.0-0.102.0.txt](llms/upgrading-0.75.0-0.102.0.txt) 44.8 KB
69
+ - **Upgrading 0.61.0 → 0.74.0**: [llms/upgrading-0.61.0-0.74.0.txt](llms/upgrading-0.61.0-0.74.0.txt) 43.5 KB
70
70
  - **Upgrading 0.44.0 → 0.60.0**: [llms/upgrading-0.44.0-0.60.0.txt](llms/upgrading-0.44.0-0.60.0.txt) 43.9 KB
71
71
  - **Upgrading 0.37.0 → 0.37.0**: [llms/upgrading-0.37.0.txt](llms/upgrading-0.37.0.txt) 6.2 KB
72
72
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "stitchkit",
3
- "version": "0.111.2",
3
+ "version": "0.112.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",