create-stitchkit 0.4.4 → 0.5.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 CHANGED
@@ -12,6 +12,59 @@ step is overwritten by the next release.
12
12
 
13
13
  ## [Unreleased]
14
14
 
15
+ ## [0.5.0] — 2026-09-01
16
+
17
+ ### ⚠️ Breaking changes
18
+
19
+ **Who must act:** two audiences. Anyone holding a generated **Agent** project
20
+ changes one key in one object, and nothing reports it when it goes wrong.
21
+ **Everyone** re-reads the Zod item: an API that accepted a timestamp without
22
+ seconds stops accepting it, which is a change in what your endpoints admit, not
23
+ in what your code compiles to.
24
+
25
+ - **The Agent approval policy keys `edit_file`, not `apply_patch`.** Stitchkit
26
+ 0.71.0 replaced `apply_patch` with a one-call `edit_file`, and `toolApproval`
27
+ names tools by string. A key matching no tool is not an error — an unlisted
28
+ tool falls through to "no approval required", so the effect of leaving the old
29
+ name is not that editing breaks. It is that editing stops asking: the one tool
30
+ the policy existed to gate now runs unattended, and the only visible sign is an
31
+ approval prompt that never appears.
32
+ `// before: toolApproval: { apply_patch: 'user-approval' }` →
33
+ `// after: toolApproval: { edit_file: 'user-approval' }`
34
+
35
+ - **Zod 4.5 makes seconds mandatory in `z.iso.datetime()`.** The template moves
36
+ to `zod@4.5.4`, and the tightening travels with it: `2026-08-08T00:15Z`
37
+ validated before and is refused now. Nothing in the generated code changes —
38
+ what changes is the set of inputs your API accepts, so a client that omitted
39
+ seconds starts receiving `BAD_REQUEST`. If you need the old latitude, say so
40
+ in the schema rather than by holding the version back:
41
+ `// before: z.iso.datetime()` → `// after: z.iso.datetime() // seconds now required`
42
+ The same release regenerates the committed **surface snapshots**: 4.5 encodes
43
+ a nullable as `type: ['string','null']` where 4.4 wrote `anyOf`, so every
44
+ affected shape fingerprint moves. A project of your own carrying
45
+ `surface.snapshot.json` regenerates it with `bun run surface:snapshot` and
46
+ reviews the diff — the hashes move, the operations do not.
47
+
48
+ ### Changed
49
+
50
+ - **The generated project targets the published `stitchkit@0.71.0` line.** The
51
+ catalog target and the frozen lockfile move together, so a fresh scaffold
52
+ receives `edit_file`, `list_directory`, `glob`, the typed coding-tool refusals
53
+ a model can act on, the context usage a step reports, and the peer-free
54
+ `stitchkit/telegram` leaf.
55
+ - **The whole toolchain moves to its current releases** — Zod 4.5.4 (see the
56
+ breaking note above), Biome 2.5.11, `@types/node` 26.4.0, and `ai` 7.0.87 in
57
+ the Agent template. One Zod resolves across the repository and both templates,
58
+ which is now a gate rather than a coincidence: two minors of Zod are two
59
+ incompatible type systems, and the error that surfaces names neither Zod nor
60
+ the file that moved it.
61
+ - **The Agent approval policy is exhaustive again.** 0.71.0 added
62
+ `list_directory` and `glob`; both are read-only and both were therefore
63
+ running under the framework's default rather than under the project's own
64
+ policy. They are now named `'approved'` beside `read_file` and `search_files`.
65
+ Nothing about what happens changes — what changes is that the file says so,
66
+ which is the whole reason the map is written out rather than defaulted.
67
+
15
68
  ## [0.4.4] — 2026-08-30
16
69
 
17
70
  ### Changed
package/UPGRADING.md CHANGED
@@ -60,6 +60,71 @@ the first scaffolder release with a migration channel of its own.
60
60
 
61
61
  ---
62
62
 
63
+ ## Released migration: 0.5.0
64
+
65
+ ### the approval policy names a tool that no longer exists
66
+
67
+ One code edit, and one thing to do to a machine that was left mid-question.
68
+
69
+ 1. **Rename the key.** In `src/runtime.ts`, inside `loop.toolApproval`, replace
70
+ `apply_patch: 'user-approval'` with `edit_file: 'user-approval'`. While you
71
+ are in that object, add `list_directory: 'approved'` and `glob: 'approved'`
72
+ beside `read_file` and `search_files` — 0.71.0 added both, they are read-only,
73
+ and an unlisted tool is governed by the framework's default rather than by
74
+ this file.
75
+
76
+ Do this **before** you start the upgraded agent, not after. The failure mode
77
+ is silent in the direction that costs you: a key matching no tool does not
78
+ raise, it simply stops gating, so the first edit after the upgrade is applied
79
+ without asking and looks exactly like an edit you approved.
80
+
81
+ 2. **Operator step — a durable session left waiting on the old tool cannot be
82
+ answered.** If an agent was interrupted while a `apply_patch` approval was
83
+ pending, that approval names a call for a tool the framework no longer
84
+ defines: approving it cannot execute anything, and the run will not move.
85
+ Interrupt that run, or drop the local state directory — `.stitchkit/` holds
86
+ `agent.sqlite`, the approval secret and the TUI logs, all of it local and
87
+ regenerated on the next start. There is nothing durable in it that a server
88
+ owns.
89
+
90
+ A session with no pending approval needs none of this and resumes normally.
91
+
92
+ 3. **The framework's own move is separate.** Going from a `0.70.x` line to
93
+ `0.71.0` is a Stitchkit upgrade with its own breaking notes — the coding-tool
94
+ surface changed for anyone calling it directly, not only through this
95
+ template. Read
96
+ [`docs/guide/upgrading.md`](../../docs/guide/upgrading.md), section
97
+ `Released migration: 0.71.0`.
98
+
99
+ ### the timestamp your API accepts got narrower
100
+
101
+ Zod moved to 4.5, and `z.iso.datetime()` now requires seconds. This is not a
102
+ code change — it is a change in what your endpoints admit, and it arrives the
103
+ moment you install.
104
+
105
+ 1. **Decide before you deploy, not after.** If any client sends
106
+ `2026-08-08T00:15Z`, it now receives `BAD_REQUEST` where it used to receive
107
+ `200`. Search your schemas for `z.iso.datetime()` and check who fills those
108
+ fields. A machine-to-machine caller you control is a one-line fix on its
109
+ side; a caller you do not control is a decision, and the honest form of it is
110
+ an explicit schema that accepts what you mean to accept — not a pinned Zod
111
+ version, which only moves the same day to a later one.
112
+
113
+ 2. **Regenerate your surface snapshot in the same commit.** 4.5 encodes a
114
+ nullable as `type: ["string","null"]` where 4.4 wrote `anyOf`, so the shape
115
+ fingerprints in `packages/backend/src/surface.snapshot.json` move without any
116
+ operation changing. Run `bun run surface:snapshot` and read the diff: only
117
+ `inputShape` / `outputShape` values may differ. If an operation appeared,
118
+ vanished, or changed its HTTP or tool exposure, that is **your** change and
119
+ Zod did not cause it.
120
+
121
+ 3. **Move one Zod, not several.** If your project vendors or links packages that
122
+ depend on Zod themselves, they must resolve the same minor. Two minors are
123
+ two incompatible type systems, and what surfaces is
124
+ `TS2589: Type instantiation is excessively deep` in a file you did not touch.
125
+ No operator step: nothing about a running machine changes.
126
+
127
+
63
128
  ## Released migration: 0.4.1
64
129
 
65
130
  ### a release refuses a stale artifact, and cleanup is bounded
@@ -6,7 +6,7 @@
6
6
  "hasInput": false,
7
7
  "hasOutput": true,
8
8
  "inputShape": null,
9
- "outputShape": "49c1f81a53ca82ad",
9
+ "outputShape": "05d1386c30d82f6a",
10
10
  "http": [
11
11
  {
12
12
  "method": "GET",
@@ -26,7 +26,7 @@
26
26
  "hasInput": false,
27
27
  "hasOutput": true,
28
28
  "inputShape": null,
29
- "outputShape": "49c1f81a53ca82ad",
29
+ "outputShape": "05d1386c30d82f6a",
30
30
  "http": [
31
31
  {
32
32
  "method": "POST",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-stitchkit",
3
- "version": "0.4.4",
3
+ "version": "0.5.0",
4
4
  "description": "Create a production-shaped Stitchkit application",
5
5
  "license": "MIT",
6
6
  "author": "Max Listov <maxlistov@gmail.com>",
@@ -83,7 +83,7 @@
83
83
  "@types/react": "^19.2.18",
84
84
  "ai": "^7.0.84",
85
85
  "react": "^19.2.8",
86
- "stitchkit": "0.70.1",
86
+ "stitchkit": "0.71.0",
87
87
  "typescript": "^7.0.2"
88
88
  },
89
89
  "engines": {
package/template/bun.lock CHANGED
@@ -11,16 +11,16 @@
11
11
  "@app/config": "workspace:*",
12
12
  "@app/shared": "workspace:*",
13
13
  "@axe-core/playwright": "^4.13.0",
14
- "@biomejs/biome": "^2.5.10",
14
+ "@biomejs/biome": "^2.5.11",
15
15
  "@modelcontextprotocol/client": "^2.0.0",
16
16
  "@playwright/test": "^1.62.1",
17
17
  "@types/bun": "^1.4.0",
18
- "@types/node": "^26.3.0",
18
+ "@types/node": "^26.4.0",
19
19
  "oxc-parser": "^0.147.0",
20
20
  "socket.io-client": "^4.8.3",
21
21
  "stitchkit": "catalog:",
22
22
  "typescript": "^7.0.2",
23
- "zod": "^4.4.3",
23
+ "zod": "^4.5.4",
24
24
  },
25
25
  },
26
26
  "packages/backend": {
@@ -139,7 +139,7 @@
139
139
  },
140
140
  },
141
141
  "catalog": {
142
- "stitchkit": "^0.70.1",
142
+ "stitchkit": "^0.71.0",
143
143
  },
144
144
  "packages": {
145
145
  "@ai-sdk/gateway": ["@ai-sdk/gateway@4.0.63", "", { "dependencies": { "@ai-sdk/provider": "4.0.7", "@ai-sdk/provider-utils": "5.0.29", "@vercel/oidc": "3.2.0" }, "peerDependencies": { "zod": "^3.25.76 || ^4.1.8" } }, "sha512-D7BogSRg61QfTdr7AEcYn9h0I/e4QHvFXwIV1RW+DZZGJu1wSiX2cH06szZSYyKi7Eat50V4s4J8vggZUEs7eg=="],
@@ -168,23 +168,23 @@
168
168
 
169
169
  "@babel/types": ["@babel/types@7.29.8", "", { "dependencies": { "@babel/helper-string-parser": "^7.29.7", "@babel/helper-validator-identifier": "^7.29.7" } }, "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg=="],
170
170
 
171
- "@biomejs/biome": ["@biomejs/biome@2.5.10", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.5.10", "@biomejs/cli-darwin-x64": "2.5.10", "@biomejs/cli-linux-arm64": "2.5.10", "@biomejs/cli-linux-arm64-musl": "2.5.10", "@biomejs/cli-linux-x64": "2.5.10", "@biomejs/cli-linux-x64-musl": "2.5.10", "@biomejs/cli-win32-arm64": "2.5.10", "@biomejs/cli-win32-x64": "2.5.10" }, "bin": { "biome": "bin/biome" } }, "sha512-WRKXARA3kTuiV5sxqTpobJ/I0MVd4vk3pOL6wnp5az4LntFIhWTj1RWZq3DI9PCEN3lXcqy7p5aqUHzvq8AXyQ=="],
171
+ "@biomejs/biome": ["@biomejs/biome@2.5.11", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.5.11", "@biomejs/cli-darwin-x64": "2.5.11", "@biomejs/cli-linux-arm64": "2.5.11", "@biomejs/cli-linux-arm64-musl": "2.5.11", "@biomejs/cli-linux-x64": "2.5.11", "@biomejs/cli-linux-x64-musl": "2.5.11", "@biomejs/cli-win32-arm64": "2.5.11", "@biomejs/cli-win32-x64": "2.5.11" }, "bin": { "biome": "bin/biome" } }, "sha512-Tj0dnkLPdW0ASjHfj2D/ZkkvPU2wrFmnE1jWTD2xzV1ycapV1DutbYXk4NDnR3rYTi1ZCbNFD4G2gRMEY65WaA=="],
172
172
 
173
- "@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.5.10", "", { "os": "darwin", "cpu": "arm64" }, "sha512-ItCrxKK6SXVT6flYs0qIuBd4AA3TTTl4d66Re6YI2FuGZnN85NmuYNzkiTJUyYw8qBLv69L5zTUB6uyWd++h3Q=="],
173
+ "@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.5.11", "", { "os": "darwin", "cpu": "arm64" }, "sha512-6SGZxoKbXvUjMn1t6A98HqWISPnGNbYs0R/Rt2JarmXBSev+lva4QxUMWEBX9lX1Wo1XTJ78uk5xVDtG58SRZg=="],
174
174
 
175
- "@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@2.5.10", "", { "os": "darwin", "cpu": "x64" }, "sha512-yLsPU9pAmtChXDu8vhKAzErqe+LeeYuwuUB2FZMkRitsmdodxsYRa9KHrFispsUHzzOu+9HB3nP/TQxyia+Sjw=="],
175
+ "@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@2.5.11", "", { "os": "darwin", "cpu": "x64" }, "sha512-nYkXY7tLBEgnGbYapDKAyKzgt44ZEyG+AKalvTXtCWKYgepI9dw327q+cVgedxm+Udi1ZzHKUyZrIusHi/KQbw=="],
176
176
 
177
- "@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@2.5.10", "", { "os": "linux", "cpu": "arm64" }, "sha512-VG8uQW/86a1roLaIFvtIbEigxIdzdJ190oGyg1tV7VYeQtOS+x10sflk7WbuXgw91EtZX5DlIIIej1YqkNLlcg=="],
177
+ "@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@2.5.11", "", { "os": "linux", "cpu": "arm64" }, "sha512-3PVLSTD9RR73rvVPt5G3T1gc+ycggWEGfTD7RvzzbtcDPD27NxgxBbAFfpm7DXJKW6VLHWE1lLMGvFt2Qxjcow=="],
178
178
 
179
- "@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@2.5.10", "", { "os": "linux", "cpu": "arm64" }, "sha512-t1QAKZwQJRB4dvgJSgFiQ4BNfNPChg69BNonz854qLVxnjT3UvDzQg9mbkTJRu35ZqU0Rw10A73J8Urgbg2RPw=="],
179
+ "@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@2.5.11", "", { "os": "linux", "cpu": "arm64" }, "sha512-qhyZUMyCbWYFV2bAwRNVvfMVZ+hv7WYl6mossGrxC+uiQQXhvsuWWU8zz6jYX0mChZd9MgQZbm4vozTmG/5iGw=="],
180
180
 
181
- "@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@2.5.10", "", { "os": "linux", "cpu": "x64" }, "sha512-4O6T0eq2heoHZN0a9UX+rWQoxXEBaKf+lRi2hbsGlHneUz9BWXM76nEWMK7Eeq8gzMxR1khQB6BFpAASpeXqGg=="],
181
+ "@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@2.5.11", "", { "os": "linux", "cpu": "x64" }, "sha512-JOytptlsgM33B2MMFUg8iBrb4IKpbD5JnJrSeYiaFEeAj4vuXx0iQSQZ4qK7sqyMtfjZxxPdNdMZZVL4y/mFyA=="],
182
182
 
183
- "@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@2.5.10", "", { "os": "linux", "cpu": "x64" }, "sha512-pgDDqp9JybHm2I0KRgzN6i4+lt8xu4iqxUwLzglUMmOmyRTU1AYBGKzh9sNMOtIjah7xoWvKHlLVetvyifzoiQ=="],
183
+ "@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@2.5.11", "", { "os": "linux", "cpu": "x64" }, "sha512-oRRlrchG5EfrEL/EmtT1qUjSNHk3/5LGeZhQqADBBAJF1b1ET6964xEKe7aGlGARzDfza8H/seEsFJl7S6Ql9w=="],
184
184
 
185
- "@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@2.5.10", "", { "os": "win32", "cpu": "arm64" }, "sha512-pxAbxduPO4xq/Cvgaa2lOrs9BB0hEXmmDqfMNP4ZOffGOkUrD1/QGw9UAMpFQpX2P8MqTIIRuQKcmetum4Oa6A=="],
185
+ "@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@2.5.11", "", { "os": "win32", "cpu": "arm64" }, "sha512-e49E6K9hzH/ohJNx8Y26mY8HaV4I4ZViIeoqhKsmoXLKHhQnMeBAVqCgsGf2Wa3lXlS7RkporDXMHHWkzvZzFw=="],
186
186
 
187
- "@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.5.10", "", { "os": "win32", "cpu": "x64" }, "sha512-M+2dgBsl3lXRiTfgPVc2p3anS4Tocojke4rzFLScZ2Y/wmF+36dRb1iHCLiyGqOzQGyTplZH1HnEYviiAqi3nA=="],
187
+ "@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.5.11", "", { "os": "win32", "cpu": "x64" }, "sha512-QSQr/KjOgXA7OzXJUWS+oguKyAZ3Q0l/lnlDGbu397eKo83atuWUjBPJrsqbKNF6CARGw8XXJLGzpHC8Ryhd4Q=="],
188
188
 
189
189
  "@electric-sql/pglite": ["@electric-sql/pglite@0.4.3", "", {}, "sha512-ichuWTgtd4mOM1G4SpyGJa5trT03lWbMypDV0fUXUCXg5hiHqVAz/bZyV68NqmkLB7WcYmj1RMJVSp8HV/v/ZQ=="],
190
190
 
@@ -620,7 +620,7 @@
620
620
 
621
621
  "@types/mdast": ["@types/mdast@4.0.4", "", { "dependencies": { "@types/unist": "*" } }, "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA=="],
622
622
 
623
- "@types/node": ["@types/node@26.3.0", "", { "dependencies": { "undici-types": "~8.3.0" } }, "sha512-L3fgrnchriRC2ExBflb8j4uZZURHZfQsmQeyVzhjcHW4kkwVyo8/0h1B2MVzMTrYUJYu6G7EWs14hW/L9putqw=="],
623
+ "@types/node": ["@types/node@26.4.0", "", { "dependencies": { "undici-types": "~8.3.0" } }, "sha512-faiGnoIrLH/V8cibOMEAZ8pMw6oXqSukl29ra4mN8GdaB2ZewzeaLj+INpV5N+Z1eKWzY+IzaIZH2EIR6YZRNQ=="],
624
624
 
625
625
  "@types/pg": ["@types/pg@8.23.1", "", { "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^2.2.0" } }, "sha512-fKVHpikPdg4GKks3JuLEhvwSyvwzF23hnabPy6DD8ljVbC7+6J5dQzdv4arV6jqq57djnMgs1HKBxX4P8aBI3A=="],
626
626
 
@@ -1118,7 +1118,7 @@
1118
1118
 
1119
1119
  "std-env": ["std-env@3.10.0", "", {}, "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg=="],
1120
1120
 
1121
- "stitchkit": ["stitchkit@0.70.1", "", { "dependencies": { "ky": "^2.0.2" }, "peerDependencies": { "@modelcontextprotocol/ext-apps": "^1.7.2", "@modelcontextprotocol/server": "^2.0.0", "@openrouter/ai-sdk-provider": "^3.0.0", "@opentelemetry/api": "^1.9.0", "@socket.io/bun-engine": "^0.1.1", "@socket.io/component-emitter": "^3.1.2", "@tanstack/react-query": ">=5", "@types/bun": "^1.3.14", "ai": "^7.0.0", "grammy": "^1.45.1", "react": ">=18", "react-query-kit": "^3.3.3", "socket.io": "^4.8.3", "socket.io-client": "^4.8.3", "srvx": "^0.12.5", "zod": "^4.4.3" }, "optionalPeers": ["@modelcontextprotocol/ext-apps", "@modelcontextprotocol/server", "@openrouter/ai-sdk-provider", "@opentelemetry/api", "@socket.io/bun-engine", "@socket.io/component-emitter", "@tanstack/react-query", "@types/bun", "ai", "grammy", "react", "react-query-kit", "socket.io", "socket.io-client", "srvx"] }, "sha512-UySE/DO1p7XZDmbISX3+U9RCYpepqsElovnL4IgUu0C9BpsFXGbYpoF0nL38vpY8SLV2frLiZXyy05gmmyrhrg=="],
1121
+ "stitchkit": ["stitchkit@0.71.0", "", { "dependencies": { "ky": "^2.0.2" }, "peerDependencies": { "@modelcontextprotocol/ext-apps": "^1.7.2", "@modelcontextprotocol/server": "^2.0.0", "@openrouter/ai-sdk-provider": "^3.0.0", "@opentelemetry/api": "^1.9.0", "@socket.io/bun-engine": "^0.1.1", "@socket.io/component-emitter": "^3.1.2", "@tanstack/react-query": ">=5", "@types/bun": "^1.3.14", "ai": "^7.0.0", "grammy": "^1.45.1", "react": ">=18", "react-query-kit": "^3.3.3", "socket.io": "^4.8.3", "socket.io-client": "^4.8.3", "srvx": "^0.12.5", "zod": "^4.4.3" }, "optionalPeers": ["@modelcontextprotocol/ext-apps", "@modelcontextprotocol/server", "@openrouter/ai-sdk-provider", "@opentelemetry/api", "@socket.io/bun-engine", "@socket.io/component-emitter", "@tanstack/react-query", "@types/bun", "ai", "grammy", "react", "react-query-kit", "socket.io", "socket.io-client", "srvx"] }, "sha512-HXqTD1Sv534rWt+KKJV1Gp535NTRzbGFxNMuRAvo9TzuU0kZxBDF18gu+WexF9O8Z4jkhlfvTjXeRy/oQrnHwA=="],
1122
1122
 
1123
1123
  "stringify-entities": ["stringify-entities@4.0.4", "", { "dependencies": { "character-entities-html4": "^2.0.0", "character-entities-legacy": "^3.0.0" } }, "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg=="],
1124
1124
 
@@ -1186,10 +1186,13 @@
1186
1186
 
1187
1187
  "zeptomatch": ["zeptomatch@2.1.0", "", { "dependencies": { "grammex": "^3.1.11", "graphmatch": "^1.1.0" } }, "sha512-KiGErG2J0G82LSpniV0CtIzjlJ10E04j02VOudJsPyPwNZgGnRKQy7I1R7GMyg/QswnE4l7ohSGrQbQbjXPPDA=="],
1188
1188
 
1189
- "zod": ["zod@4.4.3", "", {}, "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ=="],
1189
+ "zod": ["zod@4.5.4", "", {}, "sha512-sC95tT5iHHH9gtpj6A81kh+NEaRAUFN+qlUPDUbRfOMvNf5QCBqsb3WgvnpVtK5Y+4UfA6KqufotuTvMGiTlsA=="],
1190
1190
 
1191
1191
  "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="],
1192
1192
 
1193
+
1194
+
1195
+
1193
1196
  "@prisma/adapter-pg/@types/pg": ["@types/pg@8.21.0", "", { "dependencies": { "@types/node": "*", "pg-protocol": "*", "pg-types": "^2.2.0" } }, "sha512-AYdtudzabjLZgVgRZmAnU8bAnVUXzuJX2IYHeSIiIHm68olD+LgQYCGWdtcNYnP0uq9c4S4NibVG3Ni7VbKW7Q=="],
1194
1197
 
1195
1198
  "@prisma/adapter-pg/pg": ["pg@8.22.0", "", { "dependencies": { "pg-connection-string": "^2.14.0", "pg-pool": "^3.14.0", "pg-protocol": "^1.15.0", "pg-types": "2.2.0", "pgpass": "1.0.5" }, "optionalDependencies": { "pg-cloudflare": "^1.4.0" }, "peerDependencies": { "pg-native": ">=3.0.1" }, "optionalPeers": ["pg-native"] }, "sha512-8wih1vVIBMxoUM2oB4soJsD9tDnDpLv4OXBJ+EJzFsvycD+lfyIreC2gGHq78f8jbLLt+bvlPTFdFZfJkOuzAA=="],
@@ -1220,6 +1223,8 @@
1220
1223
 
1221
1224
  "@types/cors/@types/node": ["@types/node@26.2.0", "", { "dependencies": { "undici-types": "~8.3.0" } }, "sha512-5IviulTZeRNp2vAJ514cc/HUlY5nZ9fCbq9DMyC52BrhFZACo3nI0R7qBxhQmo/d27NFe96ur/b7Wwxklda+kg=="],
1222
1225
 
1226
+ "@types/pg/@types/node": ["@types/node@26.3.0", "", { "dependencies": { "undici-types": "~8.3.0" } }, "sha512-L3fgrnchriRC2ExBflb8j4uZZURHZfQsmQeyVzhjcHW4kkwVyo8/0h1B2MVzMTrYUJYu6G7EWs14hW/L9putqw=="],
1227
+
1223
1228
  "@types/ws/@types/node": ["@types/node@26.2.0", "", { "dependencies": { "undici-types": "~8.3.0" } }, "sha512-5IviulTZeRNp2vAJ514cc/HUlY5nZ9fCbq9DMyC52BrhFZACo3nI0R7qBxhQmo/d27NFe96ur/b7Wwxklda+kg=="],
1224
1229
 
1225
1230
  "@visx/vendor/@types/d3-array": ["@types/d3-array@3.0.3", "", {}, "sha512-Reoy+pKnvsksN0lQUlcH6dOGjRZ/3WRwXR//m+/8lt1BXeI4xyaUZoqULNjyXXRuh0Mj4LNpkCvhUpQlY3X5xQ=="],
@@ -1236,6 +1241,8 @@
1236
1241
 
1237
1242
  "accepts/negotiator": ["negotiator@0.6.3", "", {}, "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="],
1238
1243
 
1244
+ "bun-types/@types/node": ["@types/node@26.3.0", "", { "dependencies": { "undici-types": "~8.3.0" } }, "sha512-L3fgrnchriRC2ExBflb8j4uZZURHZfQsmQeyVzhjcHW4kkwVyo8/0h1B2MVzMTrYUJYu6G7EWs14hW/L9putqw=="],
1245
+
1239
1246
  "engine.io/@types/node": ["@types/node@26.2.0", "", { "dependencies": { "undici-types": "~8.3.0" } }, "sha512-5IviulTZeRNp2vAJ514cc/HUlY5nZ9fCbq9DMyC52BrhFZACo3nI0R7qBxhQmo/d27NFe96ur/b7Wwxklda+kg=="],
1240
1247
 
1241
1248
  "pg-types/postgres-array": ["postgres-array@2.0.0", "", {}, "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA=="],
@@ -7,7 +7,7 @@
7
7
  "packages/*"
8
8
  ],
9
9
  "catalog": {
10
- "stitchkit": "^0.70.1"
10
+ "stitchkit": "^0.71.0"
11
11
  },
12
12
  "scripts": {
13
13
  "dev": "bun scripts/dev.ts",
@@ -42,16 +42,16 @@
42
42
  "@app/config": "workspace:*",
43
43
  "@app/shared": "workspace:*",
44
44
  "@axe-core/playwright": "^4.13.0",
45
- "@biomejs/biome": "^2.5.10",
45
+ "@biomejs/biome": "^2.5.11",
46
46
  "@modelcontextprotocol/client": "^2.0.0",
47
47
  "@playwright/test": "^1.62.1",
48
48
  "@types/bun": "^1.4.0",
49
- "@types/node": "^26.3.0",
49
+ "@types/node": "^26.4.0",
50
50
  "oxc-parser": "^0.147.0",
51
51
  "socket.io-client": "^4.8.3",
52
52
  "stitchkit": "catalog:",
53
53
  "typescript": "^7.0.2",
54
- "zod": "^4.4.3"
54
+ "zod": "^4.5.4"
55
55
  },
56
56
  "engines": {
57
57
  "bun": ">=1.2.0",
@@ -16,11 +16,11 @@
16
16
  "build": "bun build src/index.ts --outdir dist --target bun --packages external"
17
17
  },
18
18
  "dependencies": {
19
- "stitchkit-tui": "file:../../../tui",
20
19
  "@openrouter/ai-sdk-provider": "^3.0.0",
21
- "ai": "^7.0.84",
20
+ "ai": "^7.0.87",
22
21
  "stitchkit": "file:../../../core",
23
- "zod": "4.4.3"
22
+ "stitchkit-tui": "file:../../../tui",
23
+ "zod": "4.5.4"
24
24
  },
25
25
  "devDependencies": {
26
26
  "@typescript/native-preview": "7.0.0-dev.20260707.2",
@@ -118,9 +118,11 @@ export async function createStarterHarness(
118
118
  toolApproval: {
119
119
  read_file: 'approved',
120
120
  search_files: 'approved',
121
+ list_directory: 'approved',
122
+ glob: 'approved',
121
123
  read_resource: 'approved',
122
124
  write_file: 'user-approval',
123
- apply_patch: 'user-approval',
125
+ edit_file: 'user-approval',
124
126
  run_command: 'user-approval',
125
127
  },
126
128
  toolApprovalSecret: await persistentApprovalSecret(stateDirectory),