@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.
- package/dist/assets/config/config.example.yaml +5 -1
- package/dist/assets/deploy/cloudflare-resident/Dockerfile +47 -12
- package/dist/assets/deploy/cloudflare-sandbox/Dockerfile +28 -9
- package/dist/assets/package-lock.json +980 -4
- package/dist/assets/package.json +2 -1
- package/dist/assets/source.json +3 -3
- package/dist/assets/src/agents/registry.ts +1 -1
- package/dist/assets/src/core/chatMessage.ts +77 -0
- package/dist/assets/src/core/provider.ts +111 -0
- package/dist/assets/src/core/reviewVerdict.ts +1 -1
- package/dist/assets/src/core/runEvents.ts +22 -3
- package/dist/assets/src/core/runLedger/sessionLog.ts +1 -1
- package/dist/assets/src/core/runLedger/transcript.ts +1 -1
- package/dist/assets/src/core/runLedger/types.ts +2 -1
- package/dist/assets/web/dist/.vite/manifest.json +20 -20
- package/dist/assets/web/dist/assets/CostsPage-5pl3HB2F.js +2 -0
- package/dist/assets/web/dist/assets/{ResidentDetailPage-BXwWQRJt.js → ResidentDetailPage-BBOpejGX.js} +1 -1
- package/dist/assets/web/dist/assets/{ResidentsIndexPage-CwVN-3tl.js → ResidentsIndexPage-B8kFWHpB.js} +1 -1
- package/dist/assets/web/dist/assets/RunRoutePage-COWeVtIE.js +12 -0
- package/dist/assets/web/dist/assets/{RunsIndexPage-Tx5P767G.js → RunsIndexPage-BjH93cKx.js} +1 -1
- package/dist/assets/web/dist/assets/{ScheduledPage-C80zFu3G.js → ScheduledPage-grlNKvCA.js} +1 -1
- package/dist/assets/web/dist/assets/{StatusDot-BaGkjYs1.js → StatusDot-BQNoaXO6.js} +1 -1
- package/dist/assets/web/dist/assets/{Tooltip-BL-Cwe59.js → Tooltip-DVCeIzaa.js} +1 -1
- package/dist/assets/web/dist/assets/{dist-DZgVjemt.js → dist-B5Wfk-oY.js} +1 -1
- package/dist/assets/web/dist/assets/{main-BB6FMkeU.js → main-CN0U7d6s.js} +2 -2
- package/dist/assets/web/dist/assets/main-xLAsdkfB.css +1 -0
- package/dist/cli.js +1509 -953
- package/package.json +2 -1
- package/dist/assets/src/providers/types.ts +0 -158
- package/dist/assets/web/dist/assets/CostsPage-C-ximW1N.js +0 -2
- package/dist/assets/web/dist/assets/RunRoutePage-C0-RUb8o.js +0 -12
- 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,
|
|
3
|
-
# with
|
|
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
|
|
68
|
-
# repo whose onboard table is detected as pnpm or yarn
|
|
69
|
-
# every manager `detectCommands` can emit must exist
|
|
70
|
-
# deterministically at provision) couldn't be
|
|
71
|
-
# corepack is NOT on this base's PATH (unlike
|
|
72
|
-
# come from npm at build time. yarn here
|
|
73
|
-
# bootstraps through it via the `yarnPath`
|
|
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
|
-
|
|
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
|
|
3
|
-
# (compilers, ffmpeg, a headless Chromium), so the
|
|
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
|
|
88
|
-
#
|
|
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
|
-
|
|
93
|
-
|
|
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);
|