@coreplane/switchboard 1.243.0 → 1.245.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 +6 -3
- package/dist/assets/deploy/cloudflare/worker.ts +2 -0
- package/dist/assets/deploy/cloudflare-memory/worker.ts +148 -0
- package/dist/assets/deploy/cloudflare-resident/gc.ts +8 -1
- package/dist/assets/deploy/cloudflare-resident/threadErr.ts +337 -0
- package/dist/assets/deploy/cloudflare-resident/tsconfig.json +1 -1
- package/dist/assets/deploy/cloudflare-resident/worker.ts +258 -173
- package/dist/assets/deploy/cloudflare-sandbox/worker.ts +18 -12
- package/dist/assets/deploy/secrets.manifest.json +12 -0
- package/dist/assets/package-lock.json +3 -3
- package/dist/assets/package.json +1 -1
- package/dist/assets/source.json +3 -3
- package/dist/assets/src/agents/registry.ts +5 -5
- package/dist/assets/src/config/profile.ts +17 -1
- package/dist/assets/src/core/authz/types.ts +18 -0
- package/dist/assets/src/core/budgets.ts +61 -0
- package/dist/assets/src/core/coordinator/contract.ts +32 -0
- package/dist/assets/src/core/coordinator/driver.ts +75 -12
- package/dist/assets/src/core/delivery.ts +1 -1
- package/dist/assets/src/core/reviewVerdict.ts +101 -24
- package/dist/assets/src/core/runEvents.ts +76 -8
- package/dist/assets/src/core/runFriction.ts +2 -1
- package/dist/assets/src/core/runRecord.ts +65 -0
- package/dist/assets/src/core/ship/contract.ts +2 -1
- package/dist/assets/src/core/ship/coordinator.ts +235 -33
- package/dist/assets/src/core/ship/renewal.ts +155 -0
- package/dist/assets/src/core/trace/attrs.ts +11 -0
- package/dist/assets/src/core/trace/types.ts +4 -3
- package/dist/assets/src/execution/residentRefresh.ts +46 -7
- package/dist/assets/src/execution/residentText.ts +8 -3
- package/dist/assets/src/mcp/registry.ts +3 -0
- package/dist/assets/web/dist/.vite/manifest.json +491 -472
- package/dist/assets/web/dist/assets/AppShell-qqs_p96-.js +1 -0
- package/dist/assets/web/dist/assets/CostsPage-Dd9aXxxI.js +2 -0
- package/dist/assets/web/dist/assets/DeliveryPage-D90FTjYq.js +1 -0
- package/dist/assets/web/dist/assets/HomePage-VLTFopnl.js +2 -0
- package/dist/assets/web/dist/assets/InputMenu-lQP3ia9D.js +1 -0
- package/dist/assets/web/dist/assets/NotFoundPage-8ViskpN3.js +1 -0
- package/dist/assets/web/dist/assets/PendingTurnRow-D2gHef5v.js +1 -0
- package/dist/assets/web/dist/assets/ResidentDetailPage-nWLN8BOd.js +1 -0
- package/dist/assets/web/dist/assets/ResidentsIndexPage-D3Q48CJW.js +1 -0
- package/dist/assets/web/dist/assets/RunFoldRow-CHy_IfZG.js +1 -0
- package/dist/assets/web/dist/assets/RunRoutePage-C6kX5om4.js +9 -0
- package/dist/assets/web/dist/assets/RunsIndexPage-DjxGj1Q5.js +1 -0
- package/dist/assets/web/dist/assets/RunsTabs-WyeG5tKb.js +1 -0
- package/dist/assets/web/dist/assets/ScheduledPage-B8D5AU4d.js +1 -0
- package/dist/assets/web/dist/assets/SettingSelect-UTHsqUUS.js +1 -0
- package/dist/assets/web/dist/assets/SettingsPage-BoW7Zjzt.js +1 -0
- package/dist/assets/web/dist/assets/StatusDot-BGHureCJ.js +1 -0
- package/dist/assets/web/dist/assets/Tooltip-CiP8qPd7.js +1 -0
- package/dist/assets/web/dist/assets/UnitRoutePage-2zEeRBP1.js +1 -0
- package/dist/assets/web/dist/assets/{angular-html-oBNfPJR0.js → angular-html-qXhb9ti8.js} +1 -1
- package/dist/assets/web/dist/assets/{angular-ts-BvNwsyWA.js → angular-ts-DzvdyoUZ.js} +1 -1
- package/dist/assets/web/dist/assets/{apl-CNUdRlYf.js → apl-Ck7Ru2Sm.js} +1 -1
- package/dist/assets/web/dist/assets/{astro-Zb0NriSe.js → astro-CwehvReb.js} +1 -1
- package/dist/assets/web/dist/assets/{blade-qPRVheqq.js → blade-WSyVbSFK.js} +1 -1
- package/dist/assets/web/dist/assets/{c-D8Awx4YO.js → c-DMHI1wDz.js} +1 -1
- package/dist/assets/web/dist/assets/{chapel-Bt72Mhsx.js → chapel-BF8AYK8_.js} +1 -1
- package/dist/assets/web/dist/assets/{cobol-BOBacexg.js → cobol-UAfImuWu.js} +1 -1
- package/dist/assets/web/dist/assets/{coffee-E4u0liHW.js → coffee-D54hi96d.js} +1 -1
- package/dist/assets/web/dist/assets/{cpp-q2sLNlul.js → cpp-BRWfLgBc.js} +1 -1
- package/dist/assets/web/dist/assets/{crystal-DyWqUnlb.js → crystal-CSqC5deT.js} +1 -1
- package/dist/assets/web/dist/assets/{css-CQY0hFsD.js → css-D4ZuRFGk.js} +1 -1
- package/dist/assets/web/dist/assets/{dist-twkFmSUY.js → dist-73ZMn_Mg.js} +2 -2
- package/dist/assets/web/dist/assets/{durationTone-BobbycC-.js → durationTone-D51enaGR.js} +1 -1
- package/dist/assets/web/dist/assets/{edge-C1MwhJkX.js → edge-DDPtNbZc.js} +1 -1
- package/dist/assets/web/dist/assets/{elixir-Bb3YbHfn.js → elixir-BTQkQfsJ.js} +1 -1
- package/dist/assets/web/dist/assets/{elm-DAN9IGQw.js → elm-B_PkLzGZ.js} +1 -1
- package/dist/assets/web/dist/assets/{erb-BEB8Xlsj.js → erb-DfjIMVM_.js} +1 -1
- package/dist/assets/web/dist/assets/{eventSource-tRprhqm7.js → eventSource-By0B_w4S.js} +1 -1
- package/dist/assets/web/dist/assets/{git-rebase-tqpjRfxO.js → git-rebase-DP8wmn7K.js} +1 -1
- package/dist/assets/web/dist/assets/{glimmer-js-Ccbo65zR.js → glimmer-js-G12VK2gK.js} +1 -1
- package/dist/assets/web/dist/assets/{glimmer-ts-B6WBVMpE.js → glimmer-ts-D3XiSI8E.js} +1 -1
- package/dist/assets/web/dist/assets/{glsl-tRec3Fcu.js → glsl-DOKAhMj-.js} +1 -1
- package/dist/assets/web/dist/assets/{graphql-P8kbxT4F.js → graphql-CJB_fmON.js} +1 -1
- package/dist/assets/web/dist/assets/{hack-H9Zhkagy.js → hack-BHqtRWap.js} +1 -1
- package/dist/assets/web/dist/assets/{haml-DtEnpn7Z.js → haml-DwotyarS.js} +1 -1
- package/dist/assets/web/dist/assets/{handlebars-DkgPfoAz.js → handlebars-B6fDaA3U.js} +1 -1
- package/dist/assets/web/dist/assets/{html-derivative-DwozLrEx.js → html-derivative-C5bpQmmI.js} +1 -1
- package/dist/assets/web/dist/assets/{html-D30RXpIs.js → html-s52taj36.js} +1 -1
- package/dist/assets/web/dist/assets/{http-DXuzBAPm.js → http-99zC935r.js} +1 -1
- package/dist/assets/web/dist/assets/{hurl-d1UUJIt_.js → hurl-Bgk-4-0x.js} +1 -1
- package/dist/assets/web/dist/assets/{indexRow-B_s5tKyq.js → indexRow-BmK74Vp1.js} +1 -1
- package/dist/assets/web/dist/assets/{java-DL0gWf34.js → java-CuV_c5I0.js} +1 -1
- package/dist/assets/web/dist/assets/{javascript-Cl7vavnS.js → javascript-CZlOvSMQ.js} +1 -1
- package/dist/assets/web/dist/assets/{jinja-CfQOWMX9.js → jinja-BuXeZ4Tu.js} +1 -1
- package/dist/assets/web/dist/assets/{jison-KdYirlqm.js → jison-DIuP0hkG.js} +1 -1
- package/dist/assets/web/dist/assets/{json-C9cDQ-Qj.js → json-CZ74vfoD.js} +1 -1
- package/dist/assets/web/dist/assets/{jsx-CRx5NItd.js → jsx-BNjRs8Vj.js} +1 -1
- package/dist/assets/web/dist/assets/{julia-CmsQsZQl.js → julia-OCE-fFOg.js} +1 -1
- package/dist/assets/web/dist/assets/{just-CsM3Q8TE.js → just-CtvD87WF.js} +1 -1
- package/dist/assets/web/dist/assets/{latex-BXCh5YRX.js → latex-C3kf86OR.js} +1 -1
- package/dist/assets/web/dist/assets/{liquid-BF2vwK8p.js → liquid-B1WI--Kp.js} +1 -1
- package/dist/assets/web/dist/assets/{lua-DcMBATrl.js → lua-DtoT0gKg.js} +1 -1
- package/dist/assets/web/dist/assets/main-ClluP-Qf.js +28 -0
- package/dist/assets/web/dist/assets/main-CpkwzHX6.css +1 -0
- package/dist/assets/web/dist/assets/{marko-88MndKvG.js → marko-BE2MC6Yt.js} +1 -1
- package/dist/assets/web/dist/assets/{mdc-DJ4kVAd8.js → mdc-BwO4weXJ.js} +1 -1
- package/dist/assets/web/dist/assets/{nginx-CP6mRgtV.js → nginx-BTuOgGVC.js} +1 -1
- package/dist/assets/web/dist/assets/{nim-QQfj3fpF.js → nim-CiIUM-oV.js} +1 -1
- package/dist/assets/web/dist/assets/{org-Bke3eBzc.js → org-L78DEWB-.js} +1 -1
- package/dist/assets/web/dist/assets/{perl-Bkh0N7Kz.js → perl-KqHOm4Ft.js} +1 -1
- package/dist/assets/web/dist/assets/{php-Dnv1Piya.js → php-C41XbEkn.js} +1 -1
- package/dist/assets/web/dist/assets/{pug-D6peFFI7.js → pug-B12-4i-k.js} +1 -1
- package/dist/assets/web/dist/assets/{qml-D8PEs-C-.js → qml--fw2Up5c.js} +1 -1
- package/dist/assets/web/dist/assets/{r-B1EL9b_j.js → r-Db1JBXrC.js} +1 -1
- package/dist/assets/web/dist/assets/{razor-BsMTIh2b.js → razor-BYpVBgbu.js} +1 -1
- package/dist/assets/web/dist/assets/{regexp-HhvC8spD.js → regexp-BMqGLSPc.js} +1 -1
- package/dist/assets/web/dist/assets/{rst-D5paAxpg.js → rst-B63n7-Sa.js} +1 -1
- package/dist/assets/web/dist/assets/{ruby-BrQwhLrl.js → ruby-D3VI8UYv.js} +1 -1
- package/dist/assets/web/dist/assets/{sas-afot2B1o.js → sas-DxRf8ZAR.js} +1 -1
- package/dist/assets/web/dist/assets/{scss-Efm-mwuG.js → scss-DRRA6d6A.js} +1 -1
- package/dist/assets/web/dist/assets/seed-DFfT5S_N.js +6 -0
- package/dist/assets/web/dist/assets/{settingsApi-priOPiwu.js → settingsApi-Dm6eaQcu.js} +1 -1
- package/dist/assets/web/dist/assets/{shellscript-BK0Vv5fT.js → shellscript-CoOBe3_y.js} +1 -1
- package/dist/assets/web/dist/assets/{shellsession-BGqlMC7N.js → shellsession-DOV1HYxf.js} +1 -1
- package/dist/assets/web/dist/assets/{soy-M0b4UwGM.js → soy-Acpmpp1W.js} +1 -1
- package/dist/assets/web/dist/assets/{sql-sxe6IE9j.js → sql-DeT9N-fA.js} +1 -1
- package/dist/assets/web/dist/assets/{sseReplay-C9m_EB8J.js → sseReplay-DPXVxhL5.js} +5 -5
- package/dist/assets/web/dist/assets/{stata-nPF_ddLP.js → stata-CbxXAMO4.js} +1 -1
- package/dist/assets/web/dist/assets/{surrealql-D_GrC6u7.js → surrealql-BdKbi4hc.js} +1 -1
- package/dist/assets/web/dist/assets/{svelte-DwL1AtNP.js → svelte-tAcjDM7R.js} +1 -1
- package/dist/assets/web/dist/assets/{templ-7s7LTDkc.js → templ-CObINNJj.js} +1 -1
- package/dist/assets/web/dist/assets/{tex-Bx-5fMxe.js → tex-BYwpZT1J.js} +1 -1
- package/dist/assets/web/dist/assets/{ts-tags-DUMJnke_.js → ts-tags-BciREL5R.js} +1 -1
- package/dist/assets/web/dist/assets/{tsx-BN8biPDe.js → tsx-CRiv3Pr3.js} +1 -1
- package/dist/assets/web/dist/assets/{twig-8nIu84TN.js → twig-DuZZ1Ej0.js} +1 -1
- package/dist/assets/web/dist/assets/{typescript-BooSPq_S.js → typescript-jkHz_5HZ.js} +1 -1
- package/dist/assets/web/dist/assets/{typst-CTBiBsem.js → typst-DOac4Gal.js} +1 -1
- package/dist/assets/web/dist/assets/{vue-C6Ft4Lea.js → vue-CgOX5wXA.js} +1 -1
- package/dist/assets/web/dist/assets/{vue-html-Ba36dD5D.js → vue-html-Duu99VNw.js} +1 -1
- package/dist/assets/web/dist/assets/{vue-vine-NkFexVo2.js → vue-vine-Bmj_wvRJ.js} +1 -1
- package/dist/assets/web/dist/assets/wallClock-DD_fPuSY.js +1 -0
- package/dist/assets/web/dist/assets/{xml-C_THnHXZ.js → xml-BtUIVeWH.js} +1 -1
- package/dist/assets/web/dist/assets/{xsl-D8G5xqjY.js → xsl-wX71n1E5.js} +1 -1
- package/dist/assets/web/dist/assets/{yaml-jAMIJzge.js → yaml-CdLdXvmz.js} +1 -1
- package/dist/cli.js +4330 -1256
- package/package.json +1 -1
- package/dist/assets/web/dist/assets/AppShell-IDMGG6yi.js +0 -1
- package/dist/assets/web/dist/assets/CostsPage-CwXOmkeQ.js +0 -2
- package/dist/assets/web/dist/assets/DeliveryPage-n1tz5I_v.js +0 -1
- package/dist/assets/web/dist/assets/HomePage-PRxjQiGG.js +0 -2
- package/dist/assets/web/dist/assets/NotFoundPage-C97EhJcQ.js +0 -1
- package/dist/assets/web/dist/assets/PendingTurnRow-BT9RhFZ7.js +0 -1
- package/dist/assets/web/dist/assets/ResidentDetailPage-DACalNVF.js +0 -1
- package/dist/assets/web/dist/assets/ResidentsIndexPage-SHPdu6uZ.js +0 -1
- package/dist/assets/web/dist/assets/RunFoldRow-0SdOmOr5.js +0 -1
- package/dist/assets/web/dist/assets/RunRoutePage-BaFS2p8I.js +0 -9
- package/dist/assets/web/dist/assets/RunsIndexPage-DYI-iALj.js +0 -1
- package/dist/assets/web/dist/assets/RunsTabs-BUfdk0lH.js +0 -1
- package/dist/assets/web/dist/assets/ScheduledPage-DJ8HiCPt.js +0 -1
- package/dist/assets/web/dist/assets/SettingsPage-DLiN5IgY.js +0 -1
- package/dist/assets/web/dist/assets/StatusDot-Dw0T1M-P.js +0 -1
- package/dist/assets/web/dist/assets/Tooltip-BbLuIAiS.js +0 -1
- package/dist/assets/web/dist/assets/UnitRoutePage-DicUG96U.js +0 -1
- package/dist/assets/web/dist/assets/main-B4kEF3Sg.css +0 -1
- package/dist/assets/web/dist/assets/main-d-w-tIKt.js +0 -28
- package/dist/assets/web/dist/assets/seed-DeKSHrt2.js +0 -6
- package/dist/assets/web/dist/assets/wallClock-61NpVkY6.js +0 -1
|
@@ -186,6 +186,22 @@ export function killStaleBuildProcessesCommand(user: string, dir: string): strin
|
|
|
186
186
|
* failure however it died. */
|
|
187
187
|
const INTERRUPTION_SIGNATURE = /\bexit 143\b|Session terminated|SIGTERM|^restore-interrupted:/;
|
|
188
188
|
|
|
189
|
+
/** The wordings git gives when the MIRROR itself is broken: its `origin`
|
|
190
|
+
* remote gone from `config`, the repository not a repository, an object store
|
|
191
|
+
* with bad, corrupt or unreadable objects, a local file it cannot open. None
|
|
192
|
+
* of these is GitHub's doing, and none is cured by waiting for GitHub. */
|
|
193
|
+
const MIRROR_FAILURE_WORDING =
|
|
194
|
+
/'origin' does not appear to be a git repository|not a git repository|\bbad object\b|\bcorrupt\b|unable to read (?:tree|object|commit|blob)|object file .* is empty|cannot open \.git\/|unable to open object|missing object/i;
|
|
195
|
+
|
|
196
|
+
/** Whether a failed mirror fetch failed on the mirror (the resident's own
|
|
197
|
+
* disk — item 67 counts it) rather than on GitHub (`github-unreachable`, a
|
|
198
|
+
* serviceable reason that parks on repeat, item 16b). GitHub is the default:
|
|
199
|
+
* a message names the mirror only through the wordings above, so an unknown
|
|
200
|
+
* failure keeps the reading it always had. */
|
|
201
|
+
export function fetchFailureIsMirrors(message: string): boolean {
|
|
202
|
+
return MIRROR_FAILURE_WORDING.test(message);
|
|
203
|
+
}
|
|
204
|
+
|
|
189
205
|
/** Message wording of the Sandbox SDK's runtime-replacement error family — the
|
|
190
206
|
* container went away UNDER a live SDK call, so the failure never reaches the
|
|
191
207
|
* shell-kill signature above: a step that dies this way surfaces as
|
|
@@ -225,14 +241,17 @@ const INTERRUPTION_SIGNATURE = /\bexit 143\b|Session terminated|SIGTERM|^restore
|
|
|
225
241
|
export const RUNTIME_MOVED_WORDING =
|
|
226
242
|
/previous runtime incarnation|interrupted because the runtime changed|runtime identity is no longer active|sandbox lifetime is no longer current|platform was updating the sandbox runtime|no longer identifies pid/i;
|
|
227
243
|
/** The platform's words for a container that is down under a command (see
|
|
228
|
-
* `RUNTIME_MOVED_WORDING`): the spawn refusal of a stopped container
|
|
229
|
-
* binding's not-running refusal,
|
|
244
|
+
* `RUNTIME_MOVED_WORDING`): the spawn refusal of a stopped container, the
|
|
245
|
+
* binding's not-running refusal, and the SDK's "The container just exited"
|
|
246
|
+
* for a container that died under a live exec (a roll landing mid-step; the
|
|
247
|
+
* bot side reads the same words as a roll, residentWake's
|
|
248
|
+
* CONTAINER_GONE_WORDING), each anchored to the full phrase so a genuine
|
|
230
249
|
* crash ("container exited with unexpected exit code") and the readiness
|
|
231
250
|
* probe ("the container is not listening") never match. The harness's
|
|
232
251
|
* container seam reads the same two as a container down under its one more
|
|
233
252
|
* command — a wait, never a judgement (harness.md item 6). */
|
|
234
253
|
export const STOPPED_CONTAINER_WORDING =
|
|
235
|
-
/process supervisor is closed|container is not running, consider calling start/i;
|
|
254
|
+
/process supervisor is closed|container is not running, consider calling start|the container just exited/i;
|
|
236
255
|
export const RUNTIME_REPLACEMENT_WORDING = new RegExp(
|
|
237
256
|
`${RUNTIME_MOVED_WORDING.source}|${STOPPED_CONTAINER_WORDING.source}`,
|
|
238
257
|
"i",
|
|
@@ -339,10 +358,30 @@ export const WAKE_PORT_READY_MS = 3 * 60_000;
|
|
|
339
358
|
* SDK by a test. */
|
|
340
359
|
export const SDK_RUNTIME_RECORD_KEY = "currentRuntimeIdentity";
|
|
341
360
|
|
|
342
|
-
/** The DOMException the SDK's connect abort raises
|
|
343
|
-
* `
|
|
344
|
-
* own `
|
|
345
|
-
|
|
361
|
+
/** The DOMException the SDK's connect abort raises — `fetchUpgradeAttempt`
|
|
362
|
+
* calls `controller.abort()` with no reason when `DEFAULT_CONNECT_TIMEOUT_MS`
|
|
363
|
+
* passes, so the runtime's own `AbortError` with the message exactly `The
|
|
364
|
+
* operation was aborted`. Anchored on the WHOLE message: a command's own
|
|
365
|
+
* `Aborted (core dumped)` never matches, and neither does a `TimeoutError`'s
|
|
366
|
+
* `The operation was aborted due to timeout` — the text `AbortSignal.timeout`
|
|
367
|
+
* raises, a route's own bound on a slow GitHub, not a silent runtime. A
|
|
368
|
+
* wrapper is read by its `cause`, where the DOMException rides whole; a
|
|
369
|
+
* wrapper that only pasted the sentence into a longer message is not the
|
|
370
|
+
* signal. */
|
|
371
|
+
export const RUNTIME_UNREACHABLE_WORDING = /^The operation was aborted\.?$/;
|
|
372
|
+
|
|
373
|
+
/** `err` and its `cause` chain, bounded like the SDK's own `selfAndCauses`
|
|
374
|
+
* walker: the SDK wraps platform errors, so the telling message can sit one or
|
|
375
|
+
* two links down. The one walker for every reader of a throw's chain — the
|
|
376
|
+
* resident Worker's classifiers and its thread-error builders, the sandbox
|
|
377
|
+
* Worker's — so the depth bound and the shape are decided once. */
|
|
378
|
+
export function* selfAndCauses(err: unknown): Generator<unknown> {
|
|
379
|
+
let current = err;
|
|
380
|
+
for (let depth = 0; depth < 8 && current != null; depth++) {
|
|
381
|
+
yield current;
|
|
382
|
+
current = typeof current === "object" ? (current as { cause?: unknown }).cause : undefined;
|
|
383
|
+
}
|
|
384
|
+
}
|
|
346
385
|
|
|
347
386
|
/** Is this one link of an error's cause chain the SDK's connect abort? By
|
|
348
387
|
* name first (the DOMException's `AbortError`), by the DOMException's message
|
|
@@ -38,7 +38,12 @@ export function residentErrorText(text: string): string {
|
|
|
38
38
|
return redactAndCap(stripAnsi(text), RESIDENT_ERROR_CAP);
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
/** The free-text fields a resident body carries: `error` (the reply), `reason`
|
|
42
|
+
* (the answer's own word or a lifecycle reason), `stateReason` (the lifecycle
|
|
43
|
+
* reason beside `state` on a thread route's 503 — the same remote text
|
|
44
|
+
* `reason` used to carry there, item 62), `summary`. A field added to a
|
|
45
|
+
* resident answer that carries remote output is added HERE first. */
|
|
46
|
+
const SANITIZED_FIELDS = ["error", "reason", "stateReason", "summary"] as const;
|
|
42
47
|
|
|
43
48
|
/** How deep the sanitizer descends. The deepest resident shape today is
|
|
44
49
|
* `/residents` → `residents[]` → `live` → `reason` (depth 3); the bound exists
|
|
@@ -48,8 +53,8 @@ const SANITIZE_DEPTH = 4;
|
|
|
48
53
|
/** A parsed resident body with its free-text fields made safe, at every level:
|
|
49
54
|
* `/residents` nests each resident's `state`/`reason` (or an `error`) under
|
|
50
55
|
* `residents[].live`, and `repo list` renders those. In each plain object only
|
|
51
|
-
* `error`, `reason` and `summary` are touched (when strings) —
|
|
52
|
-
* reply-sized cap, the
|
|
56
|
+
* `error`, `reason`, `stateReason` and `summary` are touched (when strings) —
|
|
57
|
+
* `error` at the reply-sized cap, the others at the card-sized one; `stderr` is
|
|
53
58
|
* rewritten only when it mirrors `error` (the thread routes' failure shape
|
|
54
59
|
* copies the error into stderr). Every other field — `needs`, `state`,
|
|
55
60
|
* `stdout`, `status`, bindings, numbers — passes through untouched. Arrays are
|
|
@@ -238,6 +238,9 @@ export interface McpServerView {
|
|
|
238
238
|
promotedFromName?: string;
|
|
239
239
|
/** A user row's owner (the id after `user:` in `scopeKey`) as a display name, when the lookup answered. */
|
|
240
240
|
ownerName?: string;
|
|
241
|
+
/** A channel row's channel (the id after `channel:` in `scopeKey`) as its name without the hash,
|
|
242
|
+
* when the lookup answered. */
|
|
243
|
+
channelName?: string;
|
|
241
244
|
/** A higher tier holds this name, so runs use that entry and this one is idle (`mcpServersFor`'s
|
|
242
245
|
* `shadowedBy`, the winning scope key — `org`, or `channel:<id>`); absent when this entry serves. */
|
|
243
246
|
shadowedBy?: string;
|