@coreplane/switchboard 1.240.0 → 1.241.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 +26 -7
- package/dist/assets/deploy/cloudflare/worker.ts +77 -18
- package/dist/assets/deploy/cloudflare-resident/worker.ts +1 -0
- package/dist/assets/deploy/secrets.manifest.json +6 -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 +27 -8
- package/dist/assets/src/core/authz/actor.ts +5 -0
- package/dist/assets/src/core/authz/grants.ts +20 -9
- package/dist/assets/src/core/coordinator/contract.ts +37 -0
- package/dist/assets/src/core/coordinator/driver.ts +17 -1
- package/dist/assets/src/core/coordinator/instancesRoute.ts +72 -0
- package/dist/assets/src/core/costs.ts +10 -5
- package/dist/assets/src/core/ship/coordinator.ts +22 -7
- package/dist/assets/src/core/trace/attrs.ts +1 -1
- package/dist/assets/src/execution/bindingPurge.ts +2 -2
- package/dist/assets/web/dist/.vite/manifest.json +422 -420
- package/dist/assets/web/dist/assets/AppShell-DEy5jRuS.js +1 -0
- package/dist/assets/web/dist/assets/{CostsPage-BD3w5j_S.js → CostsPage-BuHD-Bv7.js} +2 -2
- package/dist/assets/web/dist/assets/{DeliveryPage-BtvzKA1m.js → DeliveryPage-BGpPr5xr.js} +1 -1
- package/dist/assets/web/dist/assets/HomePage-dKBvWh-E.js +2 -0
- package/dist/assets/web/dist/assets/{NotFoundPage-DwOX1HaZ.js → NotFoundPage-DtmQM2gD.js} +1 -1
- package/dist/assets/web/dist/assets/PendingTurnRow-CrEAWx5b.js +1 -0
- package/dist/assets/web/dist/assets/{ResidentDetailPage-CUAOh5d9.js → ResidentDetailPage-C-48fxat.js} +1 -1
- package/dist/assets/web/dist/assets/{ResidentsIndexPage-B3KUlYy2.js → ResidentsIndexPage-CBBIjPOa.js} +1 -1
- package/dist/assets/web/dist/assets/RunFoldRow-B6vxjcBI.js +1 -0
- package/dist/assets/web/dist/assets/RunRoutePage-CQjd3Cz-.js +6 -0
- package/dist/assets/web/dist/assets/RunsIndexPage-Cy9G6D0p.js +1 -0
- package/dist/assets/web/dist/assets/{RunsTabs-BnkvCBrM.js → RunsTabs-CtNGNnhN.js} +1 -1
- package/dist/assets/web/dist/assets/{ScheduledPage-C1y9jgAk.js → ScheduledPage-Ci1Ygqnc.js} +1 -1
- package/dist/assets/web/dist/assets/SettingsPage-DxmJvAmT.js +1 -0
- package/dist/assets/web/dist/assets/{StatusDot-CiByEtoR.js → StatusDot-DPWE1JmO.js} +1 -1
- package/dist/assets/web/dist/assets/{Tooltip-DyRxk8A8.js → Tooltip-DKhSRH9t.js} +1 -1
- package/dist/assets/web/dist/assets/{UnitRoutePage-CnWyOizV.js → UnitRoutePage-DEN5bSQf.js} +1 -1
- package/dist/assets/web/dist/assets/{angular-html-DAQ_1T1v.js → angular-html-DgSK1qvr.js} +1 -1
- package/dist/assets/web/dist/assets/{angular-ts-D4kxRVp1.js → angular-ts-D3gNdiSG.js} +1 -1
- package/dist/assets/web/dist/assets/{apl-Dy07l64y.js → apl-CkHCYM8I.js} +1 -1
- package/dist/assets/web/dist/assets/{astro-DZIbTlc7.js → astro-DLm45axt.js} +1 -1
- package/dist/assets/web/dist/assets/{blade-CmSXWX3l.js → blade-BKa-VE-c.js} +1 -1
- package/dist/assets/web/dist/assets/{c-ggzVdJLK.js → c-C8NCNWai.js} +1 -1
- package/dist/assets/web/dist/assets/{chapel-Bo1wktsG.js → chapel-DqDQ7IKH.js} +1 -1
- package/dist/assets/web/dist/assets/{cobol-DJUmtKM2.js → cobol-j4vCD6AJ.js} +1 -1
- package/dist/assets/web/dist/assets/{coffee-BZWOVz4C.js → coffee-C6oDVH-0.js} +1 -1
- package/dist/assets/web/dist/assets/{cpp-Dtk39yMw.js → cpp-Bd3A1Rtc.js} +1 -1
- package/dist/assets/web/dist/assets/{crystal-CGf_-Zoj.js → crystal-CUOgOw0d.js} +1 -1
- package/dist/assets/web/dist/assets/{css-CX2fcL4u.js → css-RYljyv7G.js} +1 -1
- package/dist/assets/web/dist/assets/{dist-D8TaC961.js → dist-BnJXKHCY.js} +2 -2
- package/dist/assets/web/dist/assets/{edge-BYS8FtgQ.js → edge-BJhNdQDc.js} +1 -1
- package/dist/assets/web/dist/assets/{elixir-fhUpi3nO.js → elixir-g1AWOAfT.js} +1 -1
- package/dist/assets/web/dist/assets/{elm-DAQNiwsN.js → elm-CER5e4Dz.js} +1 -1
- package/dist/assets/web/dist/assets/{erb-CWzEys6U.js → erb-D5aOmMQf.js} +1 -1
- package/dist/assets/web/dist/assets/{git-rebase-9rY3p-Rw.js → git-rebase-D6rfV8jp.js} +1 -1
- package/dist/assets/web/dist/assets/{glimmer-js-tY7hy0nE.js → glimmer-js-BvDH3-mC.js} +1 -1
- package/dist/assets/web/dist/assets/{glimmer-ts-CTrLv5JF.js → glimmer-ts-DChtNs9V.js} +1 -1
- package/dist/assets/web/dist/assets/{glsl-BRJbiDfq.js → glsl-BHlsWrxf.js} +1 -1
- package/dist/assets/web/dist/assets/{graphql-B-MtVLh2.js → graphql-BsaBHb53.js} +1 -1
- package/dist/assets/web/dist/assets/{hack-BtIkOypQ.js → hack-0lbDosCd.js} +1 -1
- package/dist/assets/web/dist/assets/{haml-CoOH6gfa.js → haml-BKtco2vr.js} +1 -1
- package/dist/assets/web/dist/assets/{handlebars-DgrRu-GP.js → handlebars-BE_cj04z.js} +1 -1
- package/dist/assets/web/dist/assets/{html-DZaaI7ca.js → html-BNcr8EVd.js} +1 -1
- package/dist/assets/web/dist/assets/{html-derivative-DgHvT-qZ.js → html-derivative-BsJt2Kei.js} +1 -1
- package/dist/assets/web/dist/assets/{http-CvAd51yz.js → http-BR5P8ER_.js} +1 -1
- package/dist/assets/web/dist/assets/{hurl-CXGqAfzx.js → hurl-CtHalpWS.js} +1 -1
- package/dist/assets/web/dist/assets/{indexRow-Cse3JGb0.js → indexRow-BD1VT8o8.js} +1 -1
- package/dist/assets/web/dist/assets/{java-CIQStIXF.js → java-BXVdhN11.js} +1 -1
- package/dist/assets/web/dist/assets/{javascript-WbH8s7E3.js → javascript-CyoShgNQ.js} +1 -1
- package/dist/assets/web/dist/assets/{jinja-DzyWEVKC.js → jinja-BQYZzHex.js} +1 -1
- package/dist/assets/web/dist/assets/{jison-CrT-zCa-.js → jison-DqrUa1Eq.js} +1 -1
- package/dist/assets/web/dist/assets/{json-lHjpjXMQ.js → json-CQiTF9Jj.js} +1 -1
- package/dist/assets/web/dist/assets/{jsx-WTwYCHW6.js → jsx-Y16MkCYQ.js} +1 -1
- package/dist/assets/web/dist/assets/{julia-Bqpk9H7E.js → julia-zn16YONe.js} +1 -1
- package/dist/assets/web/dist/assets/{just-LdXk1r3m.js → just-DcVeN_MN.js} +1 -1
- package/dist/assets/web/dist/assets/{latex-h_y2A5KD.js → latex-BNNoF-WP.js} +1 -1
- package/dist/assets/web/dist/assets/{liquid-CY7bF2_p.js → liquid-DAi6qHzn.js} +1 -1
- package/dist/assets/web/dist/assets/{lua-oQ7XVZOY.js → lua-BswS0axw.js} +1 -1
- package/dist/assets/web/dist/assets/{main-CGO6fQ8k.js → main-B3is4sk6.js} +2 -2
- package/dist/assets/web/dist/assets/main-DP_zSemY.css +1 -0
- package/dist/assets/web/dist/assets/{marko-zv_qZ4QV.js → marko-C-4hkmQZ.js} +1 -1
- package/dist/assets/web/dist/assets/{mdc-Dl4kL_YK.js → mdc-0ZaHUkS7.js} +1 -1
- package/dist/assets/web/dist/assets/{nginx-CAHCZj4F.js → nginx-DBDg5tOR.js} +1 -1
- package/dist/assets/web/dist/assets/{nim-BOtmwCJH.js → nim-BVMz49Yw.js} +1 -1
- package/dist/assets/web/dist/assets/{org-DspQk3HQ.js → org-1hO_K6ya.js} +1 -1
- package/dist/assets/web/dist/assets/{perl-CAXmvVl0.js → perl-CVRQLvVk.js} +1 -1
- package/dist/assets/web/dist/assets/{php-CMUx4VyM.js → php-K9nCrB9n.js} +1 -1
- package/dist/assets/web/dist/assets/{pug-B55xVJTv.js → pug-CTxOcmO3.js} +1 -1
- package/dist/assets/web/dist/assets/{qml-DsNKCCRk.js → qml-CmCkfG5q.js} +1 -1
- package/dist/assets/web/dist/assets/{r-DbhP0VvO.js → r-pP47Xn1X.js} +1 -1
- package/dist/assets/web/dist/assets/{razor-BCpE6P-p.js → razor-BpW6r3tC.js} +1 -1
- package/dist/assets/web/dist/assets/{regexp-BllsjiN4.js → regexp-CINgdY4N.js} +1 -1
- package/dist/assets/web/dist/assets/{rst-CO5Rpq9V.js → rst-BZIUEq2Q.js} +1 -1
- package/dist/assets/web/dist/assets/{ruby-C2A4OgQq.js → ruby-nzAOxz6r.js} +1 -1
- package/dist/assets/web/dist/assets/{sas-Butzoyql.js → sas-QIS1bFth.js} +1 -1
- package/dist/assets/web/dist/assets/{scss-PEUwJBpf.js → scss-BuhBBVNt.js} +1 -1
- package/dist/assets/web/dist/assets/{shellscript-3Yhq0khE.js → shellscript-CQc1vXbk.js} +1 -1
- package/dist/assets/web/dist/assets/{shellsession-04Hkb7m3.js → shellsession-CoubCAUv.js} +1 -1
- package/dist/assets/web/dist/assets/{soy-BnId73cP.js → soy-CPRzlder.js} +1 -1
- package/dist/assets/web/dist/assets/{sql-BKwdc0ch.js → sql-W9krb8-9.js} +1 -1
- package/dist/assets/web/dist/assets/{sseReplay-DutHNghE.js → sseReplay-yji8a1wM.js} +1 -1
- package/dist/assets/web/dist/assets/{stata-BPPtNkay.js → stata-CuISJEC0.js} +1 -1
- package/dist/assets/web/dist/assets/{surrealql-CDPChcYP.js → surrealql-CSet7584.js} +1 -1
- package/dist/assets/web/dist/assets/{svelte-B15DIQ-z.js → svelte-ChXTSYwK.js} +1 -1
- package/dist/assets/web/dist/assets/{templ-D-rp_AiB.js → templ-Bm55v62k.js} +1 -1
- package/dist/assets/web/dist/assets/{tex-BnVDCD7p.js → tex-CICMX8Gj.js} +1 -1
- package/dist/assets/web/dist/assets/{ts-tags-cpujdyAR.js → ts-tags-CA1UzWyB.js} +1 -1
- package/dist/assets/web/dist/assets/{tsx-D1vO4L72.js → tsx-Dy04HNbv.js} +1 -1
- package/dist/assets/web/dist/assets/{twig-oQGnQGRc.js → twig-BBHsVnVD.js} +1 -1
- package/dist/assets/web/dist/assets/{typescript-CKSFpXiH.js → typescript-Dvc-wVBT.js} +1 -1
- package/dist/assets/web/dist/assets/{typst-DKHFo8BF.js → typst-Dvlqx3_q.js} +1 -1
- package/dist/assets/web/dist/assets/{vue-html-DpCp0_Sz.js → vue-html-D4YxT3An.js} +1 -1
- package/dist/assets/web/dist/assets/{vue-vine-y5d5wUb1.js → vue-vine-0YE7uQlH.js} +1 -1
- package/dist/assets/web/dist/assets/{vue-BstokpiS.js → vue-zWi1MNU2.js} +1 -1
- package/dist/assets/web/dist/assets/{xml-Br2hx5Ax.js → xml-gm-iksZB.js} +1 -1
- package/dist/assets/web/dist/assets/{xsl-Bc8Cobap.js → xsl-D_W5BcrY.js} +1 -1
- package/dist/assets/web/dist/assets/{yaml-LOITy_I1.js → yaml-CHmZ21wZ.js} +1 -1
- package/dist/cli.js +3411 -502
- package/package.json +1 -1
- package/dist/assets/web/dist/assets/AppShell-CM_fh-WW.js +0 -1
- package/dist/assets/web/dist/assets/HomePage-BU6aRCSe.js +0 -2
- package/dist/assets/web/dist/assets/RunFoldRow-Dulcbg25.js +0 -1
- package/dist/assets/web/dist/assets/RunRoutePage-DGoGrQZq.js +0 -6
- package/dist/assets/web/dist/assets/RunsIndexPage-37W7OZbC.js +0 -1
- package/dist/assets/web/dist/assets/SettingsPage-ggfB-Rqr.js +0 -1
- package/dist/assets/web/dist/assets/Slideover-CX-LEklF.js +0 -1
- package/dist/assets/web/dist/assets/main-O8UXRuEv.css +0 -1
|
@@ -448,6 +448,8 @@ export type CoordinatorAction =
|
|
|
448
448
|
recover?: { runId: string };
|
|
449
449
|
}
|
|
450
450
|
| { type: "merge"; step: string; prNumber: number; headSha: string }
|
|
451
|
+
/** Wait for the intake's checks-settled event at the approved head, bounded as the fallback. */
|
|
452
|
+
| { type: "wait-checks"; step: string; headSha: string; timeoutMs: number }
|
|
451
453
|
| { type: "sleep"; step: string; ms: number }
|
|
452
454
|
| { type: "end"; step: string; ending: UnitEnding };
|
|
453
455
|
|
|
@@ -508,6 +510,7 @@ export type StepReturn =
|
|
|
508
510
|
// fired, or a person merged — so the runner merged nothing (`by: other`).
|
|
509
511
|
| { type: "merge"; step: string; outcome: "merged"; by: "other"; sha: string; mergedAt: string; at: number }
|
|
510
512
|
| { type: "merge"; step: string; outcome: "pending" | "refused"; reason: string; at: number }
|
|
513
|
+
| { type: "wait-checks"; step: string; outcome: "event" | "timeout" }
|
|
511
514
|
| { type: "sleep"; step: string };
|
|
512
515
|
|
|
513
516
|
/** How one unit's pipeline ended — the truthful vocabulary the ship pipeline
|
|
@@ -628,7 +631,7 @@ type Phase =
|
|
|
628
631
|
dead?: "failed" | "interrupted";
|
|
629
632
|
}
|
|
630
633
|
| { at: "merge"; pr: PrRef; headSha: string; n: number; since: number }
|
|
631
|
-
| { at: "merge-
|
|
634
|
+
| { at: "merge-wait"; pr: PrRef; headSha: string; n: number; since: number }
|
|
632
635
|
| { at: "ended" };
|
|
633
636
|
|
|
634
637
|
export interface UnitPipelineState {
|
|
@@ -668,9 +671,16 @@ export const WAIT_MARGIN_MS = 5 * MIN;
|
|
|
668
671
|
* margin and the merge poll are the same number), and it keeps a round to a
|
|
669
672
|
* few steps: a coding child's 45 minutes are ten waits and ten reads. */
|
|
670
673
|
export const WAIT_CHUNK_MS = 5 * MIN;
|
|
671
|
-
/** How
|
|
672
|
-
|
|
674
|
+
/** How long the merge step waits for the guards at most. While checks are
|
|
675
|
+
* pending the machine waits on the intake's `checks-settled-<head>` event
|
|
676
|
+
* (http-ingress.md item 12) — one bounded wait per ask, the remainder of this
|
|
677
|
+
* cap, as the fallback when the event never arrives. */
|
|
673
678
|
export const MERGE_WAIT_MAX_MS = 60 * MIN;
|
|
679
|
+
/** One merge wait's fallback timeout: the old poll's cadence. The event wakes
|
|
680
|
+
* the machine at once when the intake delivers it; without one (the webhook
|
|
681
|
+
* not configured, a delivery lost) the door is still re-asked every chunk, so
|
|
682
|
+
* a merge is never slower than the poll it replaced. */
|
|
683
|
+
export const MERGE_WAIT_CHUNK_MS = 5 * MIN;
|
|
674
684
|
/** A `busy` without the live run's id: nothing to wait on, so a short sleep before the spawn is asked again. */
|
|
675
685
|
export const BUSY_RETRY_MS = 2 * MIN;
|
|
676
686
|
|
|
@@ -816,8 +826,13 @@ export function nextAction(s: UnitPipelineState): CoordinatorAction {
|
|
|
816
826
|
};
|
|
817
827
|
case "merge":
|
|
818
828
|
return { type: "merge", step: `${unit}/merge/${p.n}`, prNumber: p.pr.number, headSha: p.headSha };
|
|
819
|
-
case "merge-
|
|
820
|
-
return {
|
|
829
|
+
case "merge-wait":
|
|
830
|
+
return {
|
|
831
|
+
type: "wait-checks",
|
|
832
|
+
step: `${unit}/merge/wait/${p.n}`,
|
|
833
|
+
headSha: p.headSha,
|
|
834
|
+
timeoutMs: Math.max(MIN, Math.min(MERGE_WAIT_CHUNK_MS, MERGE_WAIT_MAX_MS - (s.clock - p.since))),
|
|
835
|
+
};
|
|
821
836
|
case "ended":
|
|
822
837
|
return { type: "end", step: `${unit}/end`, ending: s.ending! };
|
|
823
838
|
}
|
|
@@ -1349,11 +1364,11 @@ export function applyReturn(s: UnitPipelineState, ret: StepReturn): Transition {
|
|
|
1349
1364
|
reviewRounds: s.reviewRounds,
|
|
1350
1365
|
});
|
|
1351
1366
|
return {
|
|
1352
|
-
state: { ...clocked, phase: { at: "merge-
|
|
1367
|
+
state: { ...clocked, phase: { at: "merge-wait", pr: p.pr, headSha: p.headSha, n: p.n, since: p.since } },
|
|
1353
1368
|
notes: [],
|
|
1354
1369
|
};
|
|
1355
1370
|
}
|
|
1356
|
-
case "merge-
|
|
1371
|
+
case "merge-wait":
|
|
1357
1372
|
return {
|
|
1358
1373
|
state: { ...s, phase: { at: "merge", pr: p.pr, headSha: p.headSha, n: p.n + 1, since: p.since } },
|
|
1359
1374
|
notes: [],
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* field. */
|
|
9
9
|
|
|
10
10
|
export type Backend = "local" | "resident" | "sandbox" | "e2b";
|
|
11
|
-
export type Channel = "slack" | "http" | "mcp" | "cli";
|
|
11
|
+
export type Channel = "slack" | "http" | "mcp" | "cli" | "web";
|
|
12
12
|
|
|
13
13
|
/** Every attribute key any span may carry, with its value domain. */
|
|
14
14
|
export interface AttrDomain {
|
|
@@ -14,8 +14,8 @@ export interface PurgeableBinding {
|
|
|
14
14
|
export type PurgeDecision = { ok: true; purge: string[]; keptLive: string[] } | { ok: false; error: string };
|
|
15
15
|
|
|
16
16
|
/** Thread-key namespaces real channels mint (docs/reference/specs/http-ingress.md item 1,
|
|
17
|
-
* slack, mcp, the CLI). A purge is for synthetic keys only. */
|
|
18
|
-
const PRODUCTION_NAMESPACES = new Set(["slack", "http", "mcp", "cli"]);
|
|
17
|
+
* slack, mcp, the CLI, the web chat). A purge is for synthetic keys only. */
|
|
18
|
+
const PRODUCTION_NAMESPACES = new Set(["slack", "http", "mcp", "cli", "web"]);
|
|
19
19
|
|
|
20
20
|
/** A prefix must be a whole namespace (`load:`) or longer (`load:r1:`), never
|
|
21
21
|
* empty, never a bare partial namespace, never a production namespace. */
|