@coreplane/switchboard 1.224.0 → 1.226.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 (32) hide show
  1. package/dist/assets/config/config.example.yaml +5 -1
  2. package/dist/assets/deploy/cloudflare-resident/Dockerfile +47 -12
  3. package/dist/assets/deploy/cloudflare-sandbox/Dockerfile +28 -9
  4. package/dist/assets/package-lock.json +980 -4
  5. package/dist/assets/package.json +2 -1
  6. package/dist/assets/source.json +3 -3
  7. package/dist/assets/src/agents/registry.ts +1 -1
  8. package/dist/assets/src/core/chatMessage.ts +77 -0
  9. package/dist/assets/src/core/provider.ts +111 -0
  10. package/dist/assets/src/core/reviewVerdict.ts +1 -1
  11. package/dist/assets/src/core/runEvents.ts +22 -3
  12. package/dist/assets/src/core/runLedger/sessionLog.ts +1 -1
  13. package/dist/assets/src/core/runLedger/transcript.ts +1 -1
  14. package/dist/assets/src/core/runLedger/types.ts +2 -1
  15. package/dist/assets/web/dist/.vite/manifest.json +20 -20
  16. package/dist/assets/web/dist/assets/CostsPage-5pl3HB2F.js +2 -0
  17. package/dist/assets/web/dist/assets/{ResidentDetailPage-BXwWQRJt.js → ResidentDetailPage-BBOpejGX.js} +1 -1
  18. package/dist/assets/web/dist/assets/{ResidentsIndexPage-CwVN-3tl.js → ResidentsIndexPage-B8kFWHpB.js} +1 -1
  19. package/dist/assets/web/dist/assets/RunRoutePage-COWeVtIE.js +12 -0
  20. package/dist/assets/web/dist/assets/{RunsIndexPage-Tx5P767G.js → RunsIndexPage-BjH93cKx.js} +1 -1
  21. package/dist/assets/web/dist/assets/{ScheduledPage-C80zFu3G.js → ScheduledPage-grlNKvCA.js} +1 -1
  22. package/dist/assets/web/dist/assets/{StatusDot-BaGkjYs1.js → StatusDot-BQNoaXO6.js} +1 -1
  23. package/dist/assets/web/dist/assets/{Tooltip-BL-Cwe59.js → Tooltip-DVCeIzaa.js} +1 -1
  24. package/dist/assets/web/dist/assets/{dist-DZgVjemt.js → dist-B5Wfk-oY.js} +1 -1
  25. package/dist/assets/web/dist/assets/{main-BB6FMkeU.js → main-CN0U7d6s.js} +2 -2
  26. package/dist/assets/web/dist/assets/main-xLAsdkfB.css +1 -0
  27. package/dist/cli.js +1509 -953
  28. package/package.json +2 -1
  29. package/dist/assets/src/providers/types.ts +0 -158
  30. package/dist/assets/web/dist/assets/CostsPage-C-ximW1N.js +0 -2
  31. package/dist/assets/web/dist/assets/RunRoutePage-C0-RUb8o.js +0 -12
  32. package/dist/assets/web/dist/assets/main-43n8Y5qO.css +0 -1
@@ -24,7 +24,10 @@ providers:
24
24
  # vendor, so a model is named openrouter/anthropic/claude-sonnet-4 (the first
25
25
  # slash separates the provider; the rest is passed through). The compatible
26
26
  # adapter sends no effort tier, turns document inputs into a text note and
27
- # asks for no provider-side prompt caching.
27
+ # asks for no provider-side prompt caching. The request router and memory
28
+ # reflection reach it through pi's model library instead (the same block,
29
+ # the same key), which applies its own OpenRouter rules there, prompt-cache
30
+ # markers included.
28
31
  # openrouter:
29
32
  # type: openai-compatible
30
33
  # baseUrl: https://openrouter.ai/api/v1
@@ -369,6 +372,7 @@ workspaceDir: ./workspaces
369
372
  # Spend reporting: GET /costs (Access-gated). Optional. See docs/reference/specs/costs.md.
370
373
  # costs:
371
374
  # cloudflareAccountId: <32-hex account id>
375
+ # cloudflareAccountName: acme-infra # optional: how the page names the account beside its share (else the id's first hex)
372
376
  # cloudflareTokenEnv: CF_ANALYTICS_TOKEN # token with Account Analytics:Read
373
377
  # anthropicAdminKeyEnv: ANTHROPIC_ADMIN_KEY # optional: sk-ant-admin… for LLM spend
374
378
  # groups:
@@ -1,6 +1,7 @@
1
1
  # Resident container image: the @cloudflare/sandbox base (Ubuntu 22.04; already
2
- # ships git, curl, jq, npm, bun, cloudflared and a Node 22 this image replaces
3
- # with Node 24 below) plus GitHub tooling and a pool of unprivileged users.
2
+ # ships git, curl, jq, npm, cloudflared, and a Node 22 and a bun this image
3
+ # replaces with pinned ones below) plus GitHub tooling and a pool of
4
+ # unprivileged users.
4
5
 
5
6
  # The Node this image ships (copied in below), at the exact tag every image in
6
7
  # this repository shares — its major is .nvmrc's, which is what CI runs and
@@ -64,14 +65,14 @@ RUN node --version | grep -qx 'v24.21.0' \
64
65
  && npm --version >/dev/null \
65
66
  && npx --version >/dev/null
66
67
 
67
- # pnpm + yarn: the base ships npm + bun but neither pnpm nor yarn, so a
68
- # repo whose onboard table is detected as pnpm or yarn (resident-repos item 52 —
69
- # every manager `detectCommands` can emit must exist here, or the table fails
70
- # deterministically at provision) couldn't be provisioned (install → build).
71
- # corepack is NOT on this base's PATH (unlike the older sandbox base), so both
72
- # come from npm at build time. yarn here is classic (1.x); a Yarn Berry repo
73
- # bootstraps through it via the `yarnPath` release it commits under
74
- # `.yarn/releases`.
68
+ # pnpm + yarn + bun: the base ships npm and a bun of its own, but neither pnpm
69
+ # nor yarn, so a repo whose onboard table is detected as pnpm or yarn
70
+ # (resident-repos item 52 — every manager `detectCommands` can emit must exist
71
+ # here, or the table fails deterministically at provision) couldn't be
72
+ # provisioned (install → build). corepack is NOT on this base's PATH (unlike
73
+ # the older sandbox base), so all three come from npm at build time. yarn here
74
+ # is classic (1.x); a Yarn Berry repo bootstraps through it via the `yarnPath`
75
+ # release it commits under `.yarn/releases`.
75
76
  #
76
77
  # EXACT versions, enforced by src/deploy/imagePins.test.ts. This line once read
77
78
  # `pnpm@latest yarn@latest`, which made the pnpm major a property of the last
@@ -87,9 +88,38 @@ RUN node --version | grep -qx 'v24.21.0' \
87
88
  # pinning pnpm@10.10.0 gets exactly that), so provisioning needs the registry,
88
89
  # not just the image. The grep asserts the pin took, so a resolution surprise
89
90
  # fails the build instead of a provision.
90
- RUN npm install -g pnpm@10.34.5 yarn@1.22.22 \
91
+ #
92
+ # bun is the opposite case, which is why it is pinned here instead of taken
93
+ # from the base: bun does NOT self-manage `packageManager`, so the version
94
+ # baked here IS the one a repo's `bun install` runs, whatever the repo pins.
95
+ # The base ships bun as a real binary at /usr/local/bin/bun on the 1.3 line,
96
+ # and 1.3.x rejects a `bun.lock` at lockfileVersion 3 as "Unknown lockfile
97
+ # version" (bun 1.4 stamps v3 when `overrides` carry scoped `name@range`
98
+ # rules) — so a repo pinning `bun@1.4.2` with such a lockfile failed
99
+ # `deps-install` at EVERY attach (`bun install v1.3.14 … "lockfileVersion":
100
+ # 3`) and every run on it fell to a cold sandbox. For bun the pin is a ceiling
101
+ # as well as a floor: it must be at or above what any onboarded repo pins, and
102
+ # it moves by a commit here, never by a base bump. The base's binary is
103
+ # removed first: npm will not write its `bun` link over a file it does not
104
+ # own, and a leftover would be a second bun to find. It has to be THIS
105
+ # directory: a thread's commands run through `su`, whose PATH is
106
+ # /etc/environment's (pam_env), not this file's ENV — /usr/local/bin is on it,
107
+ # a prefix of our own would not be. The container server
108
+ # (/container-server/sandbox) is a standalone bun-compiled executable and does
109
+ # not run through this binary. The npm `bun` package is a placeholder until
110
+ # its postinstall runs: that script moves the linux-x64 binary out of the
111
+ # platform optional dependency into the package's own `bin` (no second copy),
112
+ # and npm's global installs are growing an allowlist for install scripts
113
+ # (`allow-scripts`; 11.19 warns about every script outside it), so the one
114
+ # script this layer depends on is allowed by name. The grep proves the bun on
115
+ # PATH is the pin, and the proof runs again as worker1 below. The npm cache
116
+ # (bun's tarball is large) is dropped in the same layer.
117
+ RUN rm -f /usr/local/bin/bun \
118
+ && npm install -g --allow-scripts=bun pnpm@10.34.5 yarn@1.22.22 bun@1.4.2 \
119
+ && npm cache clean --force \
91
120
  && pnpm --version | grep -qx '10\.34\.5' \
92
- && yarn --version | grep -qx '1\.22\.22'
121
+ && yarn --version | grep -qx '1\.22\.22' \
122
+ && bun --version | grep -qx '1\.4\.2'
93
123
 
94
124
  # squashfs-tools (`unsquashfs`): the SDK's presigned restore does not extract
95
125
  # an archive, it MOUNTS it (squashfuse + fuse-overlayfs at the handle's dir)
@@ -199,3 +229,8 @@ RUN su -s /bin/bash worker1 -c "playwright screenshot --viewport-size=640,480 'd
199
229
  # and pi answers without a writable home (its config directory is the run's
200
230
  # own, named by PI_CODING_AGENT_DIR at start).
201
231
  RUN su -s /bin/bash worker1 -c "pi --version | grep -qx '0.85.1'"
232
+
233
+ # bun once more, as worker1: a thread's `bun install` runs as the thread's user
234
+ # through the same `su`, whose PATH is /etc/environment's rather than this
235
+ # file's — so the BUILD proves that PATH resolves the pin, not the base's bun.
236
+ RUN su -s /bin/bash worker1 -c "bun --version | grep -qx '1\.4\.2'"
@@ -1,7 +1,7 @@
1
1
  # Sandbox container image: the @cloudflare/sandbox base plus git + gh, a Docker
2
- # engine, Node 24 with pnpm, and the toolchain a run builds and looks with
3
- # (compilers, ffmpeg, a headless Chromium), so the coding/review/explore
4
- # agents work out of the box.
2
+ # engine, Node 24 with pnpm and a pinned bun, and the toolchain a run builds
3
+ # and looks with (compilers, ffmpeg, a headless Chromium), so the
4
+ # coding/review/explore agents work out of the box.
5
5
 
6
6
  # The Node this image ships (copied in below), at the exact tag every image in
7
7
  # this repository shares — its major is .nvmrc's, which is what CI runs and
@@ -76,7 +76,7 @@ RUN node --version | grep -qx 'v24.21.0' \
76
76
  && npm --version >/dev/null \
77
77
  && npx --version >/dev/null
78
78
 
79
- # pnpm: the base image ships Node + npm (corepack is under
79
+ # pnpm + bun: the base image ships Node + npm (corepack is under
80
80
  # /usr/local/lib/node_modules but not on PATH) and not pnpm, so coding runs in pnpm repos hit
81
81
  # `pnpm: command not found` on install/build. Installed globally with npm, the
82
82
  # same way the resident image does it, so this version is here before any run
@@ -84,13 +84,32 @@ RUN node --version | grep -qx 'v24.21.0' \
84
84
  # repo's own `packageManager` field and fetches it, so a pnpm repo that pins
85
85
  # one still needs the registry on its first install.
86
86
  #
87
- # EXACT version, enforced by src/deploy/imagePins.test.ts, same pin and same
88
- # reason as the resident image (deploy/cloudflare-resident/Dockerfile): with
87
+ # EXACT versions, enforced by src/deploy/imagePins.test.ts, same pins and same
88
+ # reasons as the resident image (deploy/cloudflare-resident/Dockerfile): with
89
89
  # `@latest` here the pnpm major moved on a rebuild, and pnpm 11 stopped
90
90
  # reading `package.json`'s `pnpm` field. pnpm still honours a repo's own
91
- # `packageManager`, so this is the floor for repos that name none.
92
- RUN npm install -g pnpm@10.34.5 \
93
- && pnpm --version | grep -qx '10\.34\.5'
91
+ # `packageManager`, so this is the floor for repos that name none. bun does
92
+ # NOT honour it: the version baked here is the one a repo's `bun install`
93
+ # runs, and the base's own bun — a real binary at /usr/local/bin/bun, 1.3.12
94
+ # on this base, measured — rejects a `bun.lock` at lockfileVersion 3 as
95
+ # "Unknown lockfile version" (bun 1.4 stamps v3 when `overrides` carry scoped
96
+ # `name@range` rules), so a coding run in such a repo fails its install
97
+ # exactly as the resident's attach did. The pin must therefore sit at
98
+ # or above what any repo we run pins, and it moves by a commit, not a base
99
+ # bump. The base's binary is removed first (npm will not write its `bun` link
100
+ # over a file it does not own; the container server at
101
+ # /container-server/sandbox is a standalone bun-compiled executable and does
102
+ # not run through it), bun's postinstall is allowed by name (the npm package
103
+ # is a placeholder until that script moves the real binary in from the
104
+ # platform optional dependency, and npm's global installs are growing an
105
+ # `allow-scripts` allowlist for install scripts), the grep proves the bun on
106
+ # PATH is the pin, and the npm cache (bun's tarball is large) is dropped in
107
+ # the same layer.
108
+ RUN rm -f /usr/local/bin/bun \
109
+ && npm install -g --allow-scripts=bun pnpm@10.34.5 bun@1.4.2 \
110
+ && npm cache clean --force \
111
+ && pnpm --version | grep -qx '10\.34\.5' \
112
+ && bun --version | grep -qx '1\.4\.2'
94
113
 
95
114
  # The toolchain for what a run BUILDS and LOOKS AT — the same layer as the
96
115
  # resident image's (deploy/cloudflare-resident/Dockerfile);