@coreplane/switchboard 1.267.1 → 1.267.2
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/package-lock.json +51 -4
- package/dist/assets/package.json +1 -1
- package/dist/assets/source.json +3 -3
- package/dist/assets/src/core/publicationPush.ts +31 -9
- package/dist/assets/src/core/ship/coordinator.ts +11 -1
- package/dist/assets/web/dist/.vite/manifest.json +488 -488
- package/dist/assets/web/dist/assets/AppShell-CCPwPqvc.js +1 -0
- package/dist/assets/web/dist/assets/{CostChart-4TeDdbvJ.js → CostChart-Y5BqJKLA.js} +2 -2
- package/dist/assets/web/dist/assets/CostsPage-RRggVvIx.js +1 -0
- package/dist/assets/web/dist/assets/DeliveryPage-CuIBLfup.js +1 -0
- package/dist/assets/web/dist/assets/HomePage-BQmun9kS.js +1 -0
- package/dist/assets/web/dist/assets/InputMenu-ymuqElZB.js +1 -0
- package/dist/assets/web/dist/assets/{MetricsPage-BQBuIuYU.js → MetricsPage-D2YGsI8C.js} +1 -1
- package/dist/assets/web/dist/assets/NotFoundPage-DZ6ysTXd.js +1 -0
- package/dist/assets/web/dist/assets/PendingTurnRow-BPyJ2f-i.js +1 -0
- package/dist/assets/web/dist/assets/PlanePage-C_gVx0Dg.js +1 -0
- package/dist/assets/web/dist/assets/ResidentDetailPage-CT6v9INM.js +1 -0
- package/dist/assets/web/dist/assets/ResidentsIndexPage-CWqPFf40.js +1 -0
- package/dist/assets/web/dist/assets/{RunFoldRow-BOWvSoIv.js → RunFoldRow-C1w-mwch.js} +1 -1
- package/dist/assets/web/dist/assets/RunRoutePage-zWMHTzla.js +9 -0
- package/dist/assets/web/dist/assets/RunsIndexPage-DF16D2Gg.js +1 -0
- package/dist/assets/web/dist/assets/RunsTabs-D7rsC4GR.js +1 -0
- package/dist/assets/web/dist/assets/ScheduledPage-CyRs0fXN.js +1 -0
- package/dist/assets/web/dist/assets/SettingSelect-CEkCLVWd.js +1 -0
- package/dist/assets/web/dist/assets/SettingsPage-BRuMCHSj.js +1 -0
- package/dist/assets/web/dist/assets/SilentTurn-D4MMDjWO.js +2 -0
- package/dist/assets/web/dist/assets/SlackMark-DjJTK2tD.js +1 -0
- package/dist/assets/web/dist/assets/StatusDot-BIAQN7iD.js +1 -0
- package/dist/assets/web/dist/assets/Tooltip-CxiQ7luL.js +1 -0
- package/dist/assets/web/dist/assets/UnitRoutePage-BQB5mAAl.js +1 -0
- package/dist/assets/web/dist/assets/{angular-html-BRRhsdQE.js → angular-html-DR_aiq_z.js} +1 -1
- package/dist/assets/web/dist/assets/{angular-ts-BFj-mqCm.js → angular-ts-DdAdPC99.js} +1 -1
- package/dist/assets/web/dist/assets/{apl-CsBuy1IL.js → apl-CFsVwJXV.js} +1 -1
- package/dist/assets/web/dist/assets/{astro-cVaqxBZq.js → astro-CV6XNX3T.js} +1 -1
- package/dist/assets/web/dist/assets/{blade-MEP5mWha.js → blade-BGvEqTv7.js} +1 -1
- package/dist/assets/web/dist/assets/browser-BWnzWwaT.js +6 -0
- package/dist/assets/web/dist/assets/{c-D4NGQ_Pd.js → c-ViUYuFAx.js} +1 -1
- package/dist/assets/web/dist/assets/{chapel-BkWImsIy.js → chapel-CZ7_YbfP.js} +1 -1
- package/dist/assets/web/dist/assets/{cobol-RPDSPSET.js → cobol-Dc8kYvS6.js} +1 -1
- package/dist/assets/web/dist/assets/{coffee-DZ5z7oVX.js → coffee-C0musOvn.js} +1 -1
- package/dist/assets/web/dist/assets/{cpp-CrBtIaRZ.js → cpp-ToPQGcGd.js} +1 -1
- package/dist/assets/web/dist/assets/{crystal-DJesYi6f.js → crystal-DUJIaO8W.js} +1 -1
- package/dist/assets/web/dist/assets/{css-DO9mjau-.js → css-BTcEgWyQ.js} +1 -1
- package/dist/assets/web/dist/assets/{dist-XRrc0hhm.js → dist-I2OEmPqz.js} +2 -2
- package/dist/assets/web/dist/assets/{edge-C3VzbSW0.js → edge-D8sh1uAj.js} +1 -1
- package/dist/assets/web/dist/assets/{elixir-BkD_Vhfe.js → elixir-D5vOtHrB.js} +1 -1
- package/dist/assets/web/dist/assets/{elm-KIM0mFPk.js → elm-B_5xqTuz.js} +1 -1
- package/dist/assets/web/dist/assets/{erb-D2ruCqb2.js → erb-DBEct7_l.js} +1 -1
- package/dist/assets/web/dist/assets/{eventSource-Cv0AFlMi.js → eventSource-Ds6_gjPD.js} +1 -1
- package/dist/assets/web/dist/assets/{git-rebase-CnfbQTxA.js → git-rebase-lWoTL0Qh.js} +1 -1
- package/dist/assets/web/dist/assets/{glimmer-js-CbiwFXWH.js → glimmer-js-DNfSP4GT.js} +1 -1
- package/dist/assets/web/dist/assets/{glimmer-ts-DV8ii0Pv.js → glimmer-ts-DpPeWMLs.js} +1 -1
- package/dist/assets/web/dist/assets/{glsl-CgmznWkA.js → glsl-m6Ziz8q0.js} +1 -1
- package/dist/assets/web/dist/assets/{graphql-BK-bBYfH.js → graphql-shD9521e.js} +1 -1
- package/dist/assets/web/dist/assets/{hack-DnwTTP5n.js → hack-D_Mf_2gv.js} +1 -1
- package/dist/assets/web/dist/assets/{haml-DAVJsWwT.js → haml-BuEAF47S.js} +1 -1
- package/dist/assets/web/dist/assets/{handlebars-voOVfxFL.js → handlebars-D2aiSYtv.js} +1 -1
- package/dist/assets/web/dist/assets/{html-3FTqwaPk.js → html-CRjXJZot.js} +1 -1
- package/dist/assets/web/dist/assets/{html-derivative-CSlhLDQn.js → html-derivative-CYpQX_KK.js} +1 -1
- package/dist/assets/web/dist/assets/{http-Vx4ilPfS.js → http-D6vXMpc_.js} +1 -1
- package/dist/assets/web/dist/assets/{hurl-DxyZDE3R.js → hurl-B634cMJT.js} +1 -1
- package/dist/assets/web/dist/assets/{java-nWqdjNJG.js → java-BlINdAve.js} +1 -1
- package/dist/assets/web/dist/assets/{javascript-Dr82HOwp.js → javascript-BBEMmUOu.js} +1 -1
- package/dist/assets/web/dist/assets/{jinja-BhjLrPOt.js → jinja-BIA8TYHJ.js} +1 -1
- package/dist/assets/web/dist/assets/{jison-DilGIUa8.js → jison-aepfTbzH.js} +1 -1
- package/dist/assets/web/dist/assets/{json-CrOcvmhJ.js → json-DmYZ1boG.js} +1 -1
- package/dist/assets/web/dist/assets/{jsx-BW_RX-fo.js → jsx-GkaaF4_W.js} +1 -1
- package/dist/assets/web/dist/assets/{julia-CWH071DB.js → julia-DRtMztOz.js} +1 -1
- package/dist/assets/web/dist/assets/{just-DkhhoWBy.js → just-PvoeEWoy.js} +1 -1
- package/dist/assets/web/dist/assets/{latex-cuHJ4TUT.js → latex-Bujuo3AZ.js} +1 -1
- package/dist/assets/web/dist/assets/{liquid-DG6afYQN.js → liquid-B0h0HkS3.js} +1 -1
- package/dist/assets/web/dist/assets/{lua-C5CMnCPS.js → lua-6O-O1CSO.js} +1 -1
- package/dist/assets/web/dist/assets/main-DYwKyLY5.js +28 -0
- package/dist/assets/web/dist/assets/{marko-Dy2_DuC4.js → marko-XS_tpV0N.js} +1 -1
- package/dist/assets/web/dist/assets/{mdc-BMKb_EeA.js → mdc-DxULuTS1.js} +1 -1
- package/dist/assets/web/dist/assets/{nginx-og0RgMKf.js → nginx-n2RAfCKE.js} +1 -1
- package/dist/assets/web/dist/assets/{nim-CQxTQQP0.js → nim-DJxdqD8U.js} +1 -1
- package/dist/assets/web/dist/assets/{org-b5lkq_Pl.js → org-R9yxwZ2v.js} +1 -1
- package/dist/assets/web/dist/assets/{perl-D9X5_i_J.js → perl-zKAUtl73.js} +1 -1
- package/dist/assets/web/dist/assets/{php-CwUxvLX0.js → php-Dk50x1WE.js} +1 -1
- package/dist/assets/web/dist/assets/{pug-uOIOExr0.js → pug-C3TSg8JJ.js} +1 -1
- package/dist/assets/web/dist/assets/{qml-g5RoADf-.js → qml-CL1nqvCt.js} +1 -1
- package/dist/assets/web/dist/assets/{r-5LdAopD3.js → r-Bo44Yl7y.js} +1 -1
- package/dist/assets/web/dist/assets/{razor-DwrvFLYQ.js → razor-k2Dt2qXz.js} +1 -1
- package/dist/assets/web/dist/assets/{regexp-dGtAaxC-.js → regexp-Uy_HNe6G.js} +1 -1
- package/dist/assets/web/dist/assets/{rst-wFdW0brr.js → rst-U0zcRJ60.js} +1 -1
- package/dist/assets/web/dist/assets/{ruby-DPglN6I9.js → ruby-DUyqwP37.js} +1 -1
- package/dist/assets/web/dist/assets/{sas-CUbCs40d.js → sas-CxC8bRy1.js} +1 -1
- package/dist/assets/web/dist/assets/{scss-B-DUiI1c.js → scss-DaqXj6RQ.js} +1 -1
- package/dist/assets/web/dist/assets/{shellscript-lGOV7Ram.js → shellscript-CI49IoFh.js} +1 -1
- package/dist/assets/web/dist/assets/{shellsession-BDWtAAjr.js → shellsession-DJxotIOK.js} +1 -1
- package/dist/assets/web/dist/assets/{soy-zod_dcOy.js → soy-BjVAVuCU.js} +1 -1
- package/dist/assets/web/dist/assets/{sql-BG0HSSoM.js → sql-CzxBKQd1.js} +1 -1
- package/dist/assets/web/dist/assets/{sseReplay-BsNQPLmJ.js → sseReplay-BDVyc8HX.js} +3 -3
- package/dist/assets/web/dist/assets/{stata-BVUMLp1W.js → stata-DLMv_9_X.js} +1 -1
- package/dist/assets/web/dist/assets/{surrealql-DiSUbHKF.js → surrealql-BzbVEZbO.js} +1 -1
- package/dist/assets/web/dist/assets/{svelte-DZenT45Y.js → svelte-DTSfopUt.js} +1 -1
- package/dist/assets/web/dist/assets/{templ-BWKRNM0-.js → templ-BPxFlKQj.js} +1 -1
- package/dist/assets/web/dist/assets/{tex-CbMzBlkK.js → tex-B_KndQwK.js} +1 -1
- package/dist/assets/web/dist/assets/{ts-tags-CZsVorDN.js → ts-tags-CG7tgvBl.js} +1 -1
- package/dist/assets/web/dist/assets/{tsx-R1r3mH4W.js → tsx-CN9eqIdJ.js} +1 -1
- package/dist/assets/web/dist/assets/{twig-BjPMyjKH.js → twig-CKPbB5ca.js} +1 -1
- package/dist/assets/web/dist/assets/{typescript-Bx-66VN_.js → typescript-BQAXVjHJ.js} +1 -1
- package/dist/assets/web/dist/assets/{typst-fW037Eo6.js → typst-D3EaP9Ui.js} +1 -1
- package/dist/assets/web/dist/assets/{vue-D1V_GNxW.js → vue-DuQwQ__D.js} +1 -1
- package/dist/assets/web/dist/assets/{vue-html-C-4pTZ-s.js → vue-html-UEJn5cLD.js} +1 -1
- package/dist/assets/web/dist/assets/{vue-vine-C-QsX3hR.js → vue-vine-DDdijZY2.js} +1 -1
- package/dist/assets/web/dist/assets/{wallClock-x0hjr0J_.js → wallClock-DaewxNMY.js} +1 -1
- package/dist/assets/web/dist/assets/{xml-BJTJXPgC.js → xml-BezNDynk.js} +1 -1
- package/dist/assets/web/dist/assets/{xsl-Xc9lukqe.js → xsl-Bzb2zIr8.js} +1 -1
- package/dist/assets/web/dist/assets/{yaml-Dw-FMsQa.js → yaml-DOccVRRG.js} +1 -1
- package/dist/cli.js +74 -20
- package/package.json +1 -1
- package/dist/assets/web/dist/assets/AppShell-DPJVhUGP.js +0 -1
- package/dist/assets/web/dist/assets/CostsPage-8HDgvuWB.js +0 -1
- package/dist/assets/web/dist/assets/DeliveryPage-QyS6_Q0m.js +0 -1
- package/dist/assets/web/dist/assets/HomePage-Bm40r0wF.js +0 -1
- package/dist/assets/web/dist/assets/InputMenu-BRV35UWP.js +0 -1
- package/dist/assets/web/dist/assets/NotFoundPage-CDjMfCcj.js +0 -1
- package/dist/assets/web/dist/assets/PendingTurnRow-BqY-EaZR.js +0 -1
- package/dist/assets/web/dist/assets/PlanePage-VmzjNLAz.js +0 -1
- package/dist/assets/web/dist/assets/ResidentDetailPage-hjX3tRCh.js +0 -1
- package/dist/assets/web/dist/assets/ResidentsIndexPage-BKGnlCEh.js +0 -1
- package/dist/assets/web/dist/assets/RunRoutePage-D9ztf-uE.js +0 -9
- package/dist/assets/web/dist/assets/RunsIndexPage-DTYQbhtr.js +0 -1
- package/dist/assets/web/dist/assets/RunsTabs-C7Ua3XX5.js +0 -1
- package/dist/assets/web/dist/assets/ScheduledPage-BAYR0tuv.js +0 -1
- package/dist/assets/web/dist/assets/SettingSelect-CEeA4iuC.js +0 -1
- package/dist/assets/web/dist/assets/SettingsPage-BlYBmCG9.js +0 -1
- package/dist/assets/web/dist/assets/SilentTurn-CHfzRQW8.js +0 -2
- package/dist/assets/web/dist/assets/SlackMark-DB0MGiF5.js +0 -1
- package/dist/assets/web/dist/assets/StatusDot-BMkUFVE8.js +0 -1
- package/dist/assets/web/dist/assets/Tooltip-Dfot16IA.js +0 -1
- package/dist/assets/web/dist/assets/UnitRoutePage-BdZoT-4d.js +0 -1
- package/dist/assets/web/dist/assets/browser-CCImen5O.js +0 -6
- package/dist/assets/web/dist/assets/main-B32N1vUh.js +0 -28
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "switchboard",
|
|
3
|
-
"version": "1.267.
|
|
3
|
+
"version": "1.267.2",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "switchboard",
|
|
9
|
-
"version": "1.267.
|
|
9
|
+
"version": "1.267.2",
|
|
10
10
|
"license": "Apache-2.0",
|
|
11
11
|
"workspaces": [
|
|
12
12
|
"web",
|
|
@@ -21023,7 +21023,7 @@
|
|
|
21023
21023
|
},
|
|
21024
21024
|
"packages/switchboard": {
|
|
21025
21025
|
"name": "@coreplane/switchboard",
|
|
21026
|
-
"version": "1.267.
|
|
21026
|
+
"version": "1.267.2",
|
|
21027
21027
|
"license": "Apache-2.0",
|
|
21028
21028
|
"dependencies": {
|
|
21029
21029
|
"@earendil-works/pi-ai": "0.85.1",
|
|
@@ -21053,7 +21053,7 @@
|
|
|
21053
21053
|
"dependencies": {
|
|
21054
21054
|
"@nuxt/ui": "^4.11.0",
|
|
21055
21055
|
"@pierre/diffs": "1.4.2",
|
|
21056
|
-
"@vueuse/core": "^
|
|
21056
|
+
"@vueuse/core": "^15.0.0",
|
|
21057
21057
|
"vue": "^3.5.42",
|
|
21058
21058
|
"vue-router": "^5.3.1"
|
|
21059
21059
|
},
|
|
@@ -21076,6 +21076,53 @@
|
|
|
21076
21076
|
"engines": {
|
|
21077
21077
|
"node": ">=22"
|
|
21078
21078
|
}
|
|
21079
|
+
},
|
|
21080
|
+
"web/node_modules/@vueuse/core": {
|
|
21081
|
+
"version": "15.0.0",
|
|
21082
|
+
"resolved": "https://registry.npmjs.org/@vueuse/core/-/core-15.0.0.tgz",
|
|
21083
|
+
"integrity": "sha512-Zv67h5mrk7YHDJsRObx+DXaCBz6RKBUpxqLesJ+3xZNPG6yuQs7ja7kg3veFrrouYLWAqydQ7CwGEbLVxB43Ng==",
|
|
21084
|
+
"license": "MIT",
|
|
21085
|
+
"dependencies": {
|
|
21086
|
+
"@types/web-bluetooth": "^0.0.21",
|
|
21087
|
+
"@vueuse/metadata": "15.0.0",
|
|
21088
|
+
"@vueuse/shared": "15.0.0"
|
|
21089
|
+
},
|
|
21090
|
+
"engines": {
|
|
21091
|
+
"node": ">=22"
|
|
21092
|
+
},
|
|
21093
|
+
"funding": {
|
|
21094
|
+
"url": "https://github.com/sponsors/antfu"
|
|
21095
|
+
},
|
|
21096
|
+
"peerDependencies": {
|
|
21097
|
+
"vue": "^3.5.0"
|
|
21098
|
+
}
|
|
21099
|
+
},
|
|
21100
|
+
"web/node_modules/@vueuse/core/node_modules/@vueuse/shared": {
|
|
21101
|
+
"version": "15.0.0",
|
|
21102
|
+
"resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-15.0.0.tgz",
|
|
21103
|
+
"integrity": "sha512-vbNXhGrbV53xPOMSyOzMHQRvhMgZf7oNDw2RChUetVxwTIEkInQ1joZ9JbT0G3z2n2AJNjvmCWeM9ySYrnvogA==",
|
|
21104
|
+
"license": "MIT",
|
|
21105
|
+
"engines": {
|
|
21106
|
+
"node": ">=22"
|
|
21107
|
+
},
|
|
21108
|
+
"funding": {
|
|
21109
|
+
"url": "https://github.com/sponsors/antfu"
|
|
21110
|
+
},
|
|
21111
|
+
"peerDependencies": {
|
|
21112
|
+
"vue": "^3.5.0"
|
|
21113
|
+
}
|
|
21114
|
+
},
|
|
21115
|
+
"web/node_modules/@vueuse/metadata": {
|
|
21116
|
+
"version": "15.0.0",
|
|
21117
|
+
"resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-15.0.0.tgz",
|
|
21118
|
+
"integrity": "sha512-sfWE5LADAKJ0KnjtGliMdSN8Ij/L7uP6rXIZlgPloAI4zvvefbw6H5Lt7KJA6RqQOYgVqWF5Guj50HHMIzygBg==",
|
|
21119
|
+
"license": "MIT",
|
|
21120
|
+
"engines": {
|
|
21121
|
+
"node": ">=22"
|
|
21122
|
+
},
|
|
21123
|
+
"funding": {
|
|
21124
|
+
"url": "https://github.com/sponsors/antfu"
|
|
21125
|
+
}
|
|
21079
21126
|
}
|
|
21080
21127
|
}
|
|
21081
21128
|
}
|
package/dist/assets/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "switchboard",
|
|
3
|
-
"version": "1.267.
|
|
3
|
+
"version": "1.267.2",
|
|
4
4
|
"private": true,
|
|
5
5
|
"description": "Mention it in Slack and an agent reviews the PR, ships the fix, or answers the question — on the model you choose, with its tools running where you decide.",
|
|
6
6
|
"license": "Apache-2.0",
|
package/dist/assets/source.json
CHANGED
|
@@ -15,14 +15,19 @@ const refName = (s: string): boolean =>
|
|
|
15
15
|
/^[a-zA-Z0-9_/-]+(?:\.[a-zA-Z0-9_/-]+)*$/.test(s) && !s.includes("..") && !s.startsWith("-");
|
|
16
16
|
const shortRef = (s: string): string => s.replace(/^refs\/heads\//, "");
|
|
17
17
|
|
|
18
|
+
/** Broad enough to count competing Git config pushes; leasedPushCommand
|
|
19
|
+
* separately proves whether one selected call is authorized evidence. */
|
|
20
|
+
export const mentionsGitPush = (command: string): boolean => /\bgit(?:\s+-c\s+\S+)*\s+push\b/.test(command);
|
|
21
|
+
|
|
18
22
|
/** Deliberately not a shell interpreter. Only a standalone literal push can
|
|
19
23
|
* attest its result: pipelines, scripts, substitutions and compound commands
|
|
20
24
|
* cannot prove which operation produced stdout or the successful exit. */
|
|
21
25
|
export function leasedPushCommand(command: string): { ref: string; expectedHeadSha: string } | undefined {
|
|
22
26
|
if (command.length >= COMMAND_CAP) return;
|
|
23
27
|
const literal = command.replace(/[ \t]+2>&1[ \t]*$/, "");
|
|
24
|
-
|
|
25
|
-
|
|
28
|
+
const prefix = /^git(?: -c http\.postBuffer=[0-9]+)? push\s/.exec(literal);
|
|
29
|
+
if (!prefix || /[\n\r'"`$;|<>\\&]/.test(literal)) return;
|
|
30
|
+
const words = literal.slice(prefix[0].length).trim().split(/\s+/);
|
|
26
31
|
const leases = words.filter((w) => w.startsWith("--force-with-lease="));
|
|
27
32
|
if (leases.length !== 1) return;
|
|
28
33
|
const lease = /^--force-with-lease=refs\/heads\/([^:]+):([a-f0-9]{40})$/.exec(leases[0]!);
|
|
@@ -42,13 +47,14 @@ export function pairedPublicationPush(
|
|
|
42
47
|
binding: ExistingPrPublicationBinding,
|
|
43
48
|
head: string,
|
|
44
49
|
callId?: string,
|
|
50
|
+
gitDoorBaseUrl?: string,
|
|
45
51
|
): PushEvent | undefined {
|
|
46
52
|
if (!fullSha(head) || !fullSha(binding.expectedHeadSha) || head === binding.expectedHeadSha) return;
|
|
47
53
|
const calls = events.filter(
|
|
48
54
|
(e): e is Extract<RunEvent, { type: "tool_call" }> =>
|
|
49
55
|
e.type === "tool_call" &&
|
|
50
56
|
e.tool === "bash" &&
|
|
51
|
-
(callId === undefined ?
|
|
57
|
+
(callId === undefined ? mentionsGitPush(e.command ?? e.summary) : e.callId === callId),
|
|
52
58
|
);
|
|
53
59
|
if (calls.length !== 1) return;
|
|
54
60
|
const call = calls[0]!;
|
|
@@ -76,20 +82,36 @@ export function pairedPublicationPush(
|
|
|
76
82
|
)
|
|
77
83
|
return;
|
|
78
84
|
let lines = result.output.trim().split(/\r?\n/);
|
|
79
|
-
const tracking =
|
|
85
|
+
const tracking = [
|
|
86
|
+
`branch '${binding.publicationRef}' set up to track 'origin/${binding.publicationRef}'.`,
|
|
87
|
+
`Branch '${binding.publicationRef}' set up to track remote branch '${binding.publicationRef}' from 'origin'.`,
|
|
88
|
+
];
|
|
80
89
|
if (
|
|
81
90
|
/(?:^|\s)(?:-u|--set-upstream)(?:\s|$)/.test(call.command) &&
|
|
82
|
-
lines.filter((line) => line
|
|
91
|
+
lines.filter((line) => tracking.includes(line)).length === 1
|
|
83
92
|
)
|
|
84
|
-
lines = lines.filter((line) => line
|
|
93
|
+
lines = lines.filter((line) => !tracking.includes(line));
|
|
85
94
|
if (lines.length !== 2) return;
|
|
86
|
-
const
|
|
95
|
+
const githubRemote = /^To (?:https:\/\/github\.com\/|git@github\.com:|github\.com:)([^\s]+?)(?:\.git)?$/.exec(
|
|
96
|
+
lines[0]!,
|
|
97
|
+
);
|
|
98
|
+
let doorRemote: string | undefined;
|
|
99
|
+
if (gitDoorBaseUrl !== undefined) {
|
|
100
|
+
try {
|
|
101
|
+
doorRemote = `${new URL(gitDoorBaseUrl).origin}/git/${binding.repo}`;
|
|
102
|
+
} catch {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
const remoteMatches =
|
|
107
|
+
doorRemote === undefined
|
|
108
|
+
? githubRemote?.[1]?.toLowerCase() === binding.repo.toLowerCase()
|
|
109
|
+
: lines[0] === `To ${doorRemote}` || lines[0] === `To ${doorRemote}.git`;
|
|
87
110
|
const update = /^\s*\+?\s*([a-f0-9]{7,40})(\.{2,3})([a-f0-9]{7,40})\s+(\S+) -> (\S+)( \(forced update\))?$/.exec(
|
|
88
111
|
lines[1]!,
|
|
89
112
|
);
|
|
90
113
|
if (
|
|
91
|
-
!
|
|
92
|
-
remote[1]!.toLowerCase() !== binding.repo.toLowerCase() ||
|
|
114
|
+
!remoteMatches ||
|
|
93
115
|
!update ||
|
|
94
116
|
!binding.expectedHeadSha.startsWith(update[1]!) ||
|
|
95
117
|
!head.startsWith(update[3]!) ||
|
|
@@ -3883,9 +3883,16 @@ function renderUnitReportWithWake(
|
|
|
3883
3883
|
const rounds = `${e.reviewRounds} review round${e.reviewRounds === 1 ? "" : "s"}`;
|
|
3884
3884
|
const prUrl = s.pr?.url;
|
|
3885
3885
|
const prLine = prUrl ? ` PR: ${prUrl}` : "";
|
|
3886
|
+
const spentCapAction = (): string | undefined => {
|
|
3887
|
+
const cap = s.input.grant?.costCapUsd;
|
|
3888
|
+
if (cap === undefined || s.spendUsd === null || s.spendUsd < cap) return undefined;
|
|
3889
|
+
return `Next action: $${s.spendUsd.toFixed(2)} spent against the original $${cap.toFixed(2)} cost cap; this unit cannot start another child. Continue ${prUrl ? `the existing pull request (${prUrl})` : "the saved branch"} only under separate authorization, then request review of its exact head.`;
|
|
3890
|
+
};
|
|
3886
3891
|
const nextAction = (checkpoint?: { branch: string; sha: string }): string => {
|
|
3887
3892
|
if (durableWake)
|
|
3888
3893
|
return `The unit remains live; a reply in this thread is recorded as its continuation action${prUrl ? ` from the open pull request (${prUrl})` : " from the saved branch state"}.`;
|
|
3894
|
+
const cappedAction = spentCapAction();
|
|
3895
|
+
if (cappedAction !== undefined) return cappedAction;
|
|
3889
3896
|
const reconcile = checkpoint
|
|
3890
3897
|
? `verify \`${checkpoint.sha.slice(0, 7)}\` is on \`${checkpoint.branch}\`, then reconcile the remote branch and pull request if needed`
|
|
3891
3898
|
: prUrl
|
|
@@ -4167,7 +4174,10 @@ function renderUnitReportWithWake(
|
|
|
4167
4174
|
]);
|
|
4168
4175
|
case "no_verdict":
|
|
4169
4176
|
if (!shows(verbosity, "verbose"))
|
|
4170
|
-
return
|
|
4177
|
+
return join([
|
|
4178
|
+
`⚠️ No verdict from review round ${e.round.index} — aborted after ${rounds}.${prLine}`,
|
|
4179
|
+
spentCapAction(),
|
|
4180
|
+
]);
|
|
4171
4181
|
return join([
|
|
4172
4182
|
`⚠️ Review round ${e.round.index} ended without a submitted verdict (budget, refusal, or stop) — ship never converts that into a request for changes, so no findings step ran.`,
|
|
4173
4183
|
writeUpPointer(s, e.round.kind, s.reviewRunByRound[e.round.index]),
|