conductor-remote 1.62.2 → 1.63.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-DbiS5Osj.js"></script>
16
+ <script type="module" crossorigin src="/assets/index-CTzJRyLU.js"></script>
17
17
  <link rel="stylesheet" crossorigin href="/assets/index-BhxPTIyU.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:"574d3c26604d0b89b022cb72ee047d00"},{url:"assets/workbox-window.prod.es5-BBnX5xw4.js",revision:null},{url:"assets/index-DbiS5Osj.js",revision:null},{url:"assets/index-BhxPTIyU.css",revision:null},{url:"apple-touch-icon.png",revision:"2b9301416b880d45d4bb655f2600d1f2"},{url:"icon-192.png",revision:"c5e01ac58768627e18ee7b8b6a9239ef"},{url:"icon-512.png",revision:"a40638c55e310312457a621c9a0002c8"},{url:"icon-maskable-512.png",revision:"a40638c55e310312457a621c9a0002c8"},{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:"c895548b5df74ddd23be27040cbf8552"},{url:"assets/workbox-window.prod.es5-BBnX5xw4.js",revision:null},{url:"assets/index-CTzJRyLU.js",revision:null},{url:"assets/index-BhxPTIyU.css",revision:null},{url:"apple-touch-icon.png",revision:"2b9301416b880d45d4bb655f2600d1f2"},{url:"icon-192.png",revision:"c5e01ac58768627e18ee7b8b6a9239ef"},{url:"icon-512.png",revision:"a40638c55e310312457a621c9a0002c8"},{url:"icon-maskable-512.png",revision:"a40638c55e310312457a621c9a0002c8"},{url:"icon.svg",revision:"c1aee186821798733dd477e69a0ef243"},{url:"manifest.webmanifest",revision:"cf88fbc5755108a7fe0616fa160a8a15"}],{}),e.cleanupOutdatedCaches(),e.registerRoute(new e.NavigationRoute(e.createHandlerBoundToURL("/index.html"),{denylist:[/^\/api\//]}))});
@@ -132,15 +132,29 @@ export class Reads {
132
132
  return this.listWorkspaces().find(w => w.id === id) ?? null;
133
133
  }
134
134
  /**
135
- * The repos Conductor knows about, in its own sidebar order. `root_path` is
135
+ * The repos Conductor knows about, most recently used first. `root_path` is
136
136
  * what a `conductor://…&path=` deep link needs to pick the target repo — with
137
137
  * no path Conductor silently falls back to the *first* repo.
138
+ *
139
+ * "Used" is the newest workspace in the repo, never `repos.updated_at`: that
140
+ * column moves when the repo's *settings* change, so the repo worked in every
141
+ * day here reads as last touched six weeks ago. Repos with no workspace at all
142
+ * keep Conductor's own sidebar order, behind every repo that has one.
143
+ *
144
+ * The `replace()`s are load-bearing: `created_at` is always `YYYY-MM-DD HH:MM:SS`
145
+ * while `updated_at` is written both that way (306 rows) and as ISO with a `Z`
146
+ * (1,819), and 'T' sorts after ' ', so an untouched string compare can rank an
147
+ * earlier ISO row above a later plain one on the same day.
138
148
  */
139
149
  listRepos() {
140
- const rows = this.db.query(`SELECT name, root_path, default_branch, icon, remote_url
141
- FROM repos
142
- WHERE COALESCE(hidden, 0) = 0
143
- ORDER BY (display_order IS NULL), display_order, name`);
150
+ const rows = this.db.query(`SELECT r.name, r.root_path, r.default_branch, r.icon, r.remote_url
151
+ FROM repos r
152
+ LEFT JOIN workspaces w ON w.repository_id = r.id
153
+ WHERE COALESCE(r.hidden, 0) = 0
154
+ GROUP BY r.id
155
+ ORDER BY (MAX(MAX(REPLACE(REPLACE(w.updated_at, 'T', ' '), 'Z', ''), w.created_at)) IS NULL),
156
+ MAX(MAX(REPLACE(REPLACE(w.updated_at, 'T', ' '), 'Z', ''), w.created_at)) DESC,
157
+ (r.display_order IS NULL), r.display_order, r.name`);
144
158
  return rows.map(r => ({
145
159
  name: r.name,
146
160
  root_path: r.root_path,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "conductor-remote",
3
- "version": "1.62.2",
3
+ "version": "1.63.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.",