conductor-remote 1.72.0 → 1.73.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/index.html CHANGED
@@ -13,7 +13,7 @@
13
13
  <title>Conductor Remote</title>
14
14
  <!-- Runs before the module bundle so it can catch a stale shell that fails to boot. -->
15
15
  <script src="/self-heal.js"></script>
16
- <script type="module" crossorigin src="/assets/index-BiP5UAB3.js"></script>
16
+ <script type="module" crossorigin src="/assets/index-BGKsDXx_.js"></script>
17
17
  <link rel="stylesheet" crossorigin href="/assets/index-CXd-zI4t.css">
18
18
  <link rel="manifest" href="/manifest.webmanifest"></head>
19
19
  <body>
package/dist/sw.js CHANGED
@@ -1 +1 @@
1
- if(!self.define){let e,s={};const i=(i,n)=>(i=new URL(i+".js",n).href,s[i]||new Promise(s=>{if("document"in self){const e=document.createElement("script");e.src=i,e.onload=s,document.head.appendChild(e)}else e=i,importScripts(i),s()}).then(()=>{let e=s[i];if(!e)throw new Error(`Module ${i} didn’t register its module`);return e}));self.define=(n,r)=>{const o=e||("document"in self?document.currentScript.src:"")||location.href;if(s[o])return;let l={};const t=e=>i(e,o),c={module:{uri:o},exports:l,require:t};s[o]=Promise.all(n.map(e=>c[e]||t(e))).then(e=>(r(...e),l))}}define(["./workbox-9c191d2f"],function(e){"use strict";importScripts("/push-sw.js"),self.addEventListener("message",e=>{e.data&&"SKIP_WAITING"===e.data.type&&self.skipWaiting()}),e.clientsClaim(),e.precacheAndRoute([{url:"self-heal.js",revision:"49bd63adb25a09341f8d2610e8bd3c76"},{url:"push-sw.js",revision:"e1e682e2e5e88fa03b7808ae9db8e098"},{url:"index.html",revision:"15ad71c3bd098f4c06e817e7008ddc1d"},{url:"assets/workbox-window.prod.es5-BBnX5xw4.js",revision:null},{url:"assets/index-CXd-zI4t.css",revision:null},{url:"assets/index-BiP5UAB3.js",revision:null},{url:"apple-touch-icon.png",revision:"1127bb396b4648add53dce3f22c92aee"},{url:"icon-192.png",revision:"c5e01ac58768627e18ee7b8b6a9239ef"},{url:"icon-512.png",revision:"a40638c55e310312457a621c9a0002c8"},{url:"icon-maskable-512.png",revision:"a9b0d962686287452216492cd2247499"},{url:"icon.svg",revision:"c1aee186821798733dd477e69a0ef243"},{url:"manifest.webmanifest",revision:"cf88fbc5755108a7fe0616fa160a8a15"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("/index.html"),{denylist:[/^\/api\//]}))});
1
+ if(!self.define){let e,s={};const i=(i,n)=>(i=new URL(i+".js",n).href,s[i]||new Promise(s=>{if("document"in self){const e=document.createElement("script");e.src=i,e.onload=s,document.head.appendChild(e)}else e=i,importScripts(i),s()}).then(()=>{let e=s[i];if(!e)throw new Error(`Module ${i} didn’t register its module`);return e}));self.define=(n,r)=>{const o=e||("document"in self?document.currentScript.src:"")||location.href;if(s[o])return;let l={};const t=e=>i(e,o),c={module:{uri:o},exports:l,require:t};s[o]=Promise.all(n.map(e=>c[e]||t(e))).then(e=>(r(...e),l))}}define(["./workbox-9c191d2f"],function(e){"use strict";importScripts("/push-sw.js"),self.addEventListener("message",e=>{e.data&&"SKIP_WAITING"===e.data.type&&self.skipWaiting()}),e.clientsClaim(),e.precacheAndRoute([{url:"self-heal.js",revision:"49bd63adb25a09341f8d2610e8bd3c76"},{url:"push-sw.js",revision:"e1e682e2e5e88fa03b7808ae9db8e098"},{url:"index.html",revision:"118285d1a8e07d7e262ee1b0b3c0a545"},{url:"assets/workbox-window.prod.es5-BBnX5xw4.js",revision:null},{url:"assets/index-CXd-zI4t.css",revision:null},{url:"assets/index-BGKsDXx_.js",revision:null},{url:"apple-touch-icon.png",revision:"1127bb396b4648add53dce3f22c92aee"},{url:"icon-192.png",revision:"c5e01ac58768627e18ee7b8b6a9239ef"},{url:"icon-512.png",revision:"a40638c55e310312457a621c9a0002c8"},{url:"icon-maskable-512.png",revision:"a9b0d962686287452216492cd2247499"},{url:"icon.svg",revision:"c1aee186821798733dd477e69a0ef243"},{url:"manifest.webmanifest",revision:"cf88fbc5755108a7fe0616fa160a8a15"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("/index.html"),{denylist:[/^\/api\//]}))});
@@ -37,7 +37,13 @@ export function attachPrStatus(workspaces) {
37
37
  else {
38
38
  const c = w.worktree ? conflictCache.get(w.worktree) : undefined;
39
39
  // Optimistically green until the local merge check says otherwise (self-corrects within CONFLICT_TTL).
40
- w.pr_status = c?.conflicts ? 'conflicts' : hasFailedChecks(pr.statusCheckRollup) ? 'checks_failed' : 'mergeable';
40
+ w.pr_status = c?.conflicts
41
+ ? 'conflicts'
42
+ : hasFailedChecks(pr.statusCheckRollup)
43
+ ? 'checks_failed'
44
+ : hasPendingChecks(pr.statusCheckRollup)
45
+ ? 'checks_pending'
46
+ : 'mergeable';
41
47
  if (w.worktree && (!c || now - c.at > CONFLICT_TTL))
42
48
  refreshConflict(w.worktree, w.baseBranch);
43
49
  }
@@ -94,12 +100,27 @@ const FAILED_CHECK_CONCLUSIONS = new Set([
94
100
  const FAILED_CHECK_STATES = new Set(['ERROR', 'FAILURE']);
95
101
  /**
96
102
  * Check runs carry their terminal result in `conclusion`; legacy status contexts
97
- * use `state`. Pending checks remain green because this marker calls out failures.
103
+ * use `state`. A check still running is not a failure `hasPendingChecks` reports
104
+ * that separately, and is only asked once this one has said no.
98
105
  */
99
106
  export function hasFailedChecks(checks) {
100
107
  return !!checks?.some(check => (check.conclusion && FAILED_CHECK_CONCLUSIONS.has(check.conclusion)) ||
101
108
  (check.state && FAILED_CHECK_STATES.has(check.state)));
102
109
  }
110
+ const PENDING_CHECK_STATES = new Set(['EXPECTED', 'PENDING']);
111
+ /**
112
+ * Is any check still running? A check run says so in `status` — anything short of
113
+ * `COMPLETED`, which covers `QUEUED`, `IN_PROGRESS`, `WAITING`, `REQUESTED` and
114
+ * whatever GitHub adds next — and a legacy status context says it in `state`.
115
+ *
116
+ * Worth its own status rather than folding into green: this repo's `main` carries
117
+ * no branch protection, so `gh pr merge` will not refuse a PR whose CI is still in
118
+ * flight (measured: the run takes ~50s). A phone showing "Ready to merge" for that
119
+ * minute is the one claim the relay makes that GitHub will not check for it.
120
+ */
121
+ export function hasPendingChecks(checks) {
122
+ return !!checks?.some(check => (check.status && check.status !== 'COMPLETED') || (check.state && PENDING_CHECK_STATES.has(check.state)));
123
+ }
103
124
  function refreshConflict(worktree, base) {
104
125
  if (conflictInflight.has(worktree))
105
126
  return;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "conductor-remote",
3
- "version": "1.72.0",
3
+ "version": "1.73.0",
4
4
  "type": "module",
5
5
  "packageManager": "yarn@4.15.0",
6
6
  "description": "Phone control panel for local Conductor agents. Reads ride SQLite + git; prompts ride Conductor's own dispatch path.",