@detergent-software/conductor 3.0.0-dev.4 → 3.0.0-dev.41

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.
Files changed (214) hide show
  1. package/CHANGELOG.md +352 -0
  2. package/README.md +274 -124
  3. package/build/brief-cli.js +5 -12
  4. package/build/brief-cli.js.map +1 -1
  5. package/build/brief.js +4 -3
  6. package/build/brief.js.map +1 -1
  7. package/build/broker-cli.js +15 -10
  8. package/build/broker-cli.js.map +1 -1
  9. package/build/broker.js +1 -1
  10. package/build/broker.js.map +1 -1
  11. package/build/claude.js +48 -2
  12. package/build/claude.js.map +1 -1
  13. package/build/cli.js +225 -71
  14. package/build/cli.js.map +1 -1
  15. package/build/clones.js +92 -0
  16. package/build/clones.js.map +1 -0
  17. package/build/code-host-cli.js +172 -40
  18. package/build/code-host-cli.js.map +1 -1
  19. package/build/code-host-service.js +35 -2
  20. package/build/code-host-service.js.map +1 -1
  21. package/build/code-host.js +140 -16
  22. package/build/code-host.js.map +1 -1
  23. package/build/conditions.js +33 -16
  24. package/build/conditions.js.map +1 -1
  25. package/build/config.js +58 -28
  26. package/build/config.js.map +1 -1
  27. package/build/console.js +43 -27
  28. package/build/console.js.map +1 -1
  29. package/build/credentials.js +86 -54
  30. package/build/credentials.js.map +1 -1
  31. package/build/daemon.js +57 -66
  32. package/build/daemon.js.map +1 -1
  33. package/build/file-lock.js +155 -40
  34. package/build/file-lock.js.map +1 -1
  35. package/build/follow-ups.js +2 -2
  36. package/build/follow-ups.js.map +1 -1
  37. package/build/help.js +237 -82
  38. package/build/help.js.map +1 -1
  39. package/build/history.js +10 -4
  40. package/build/history.js.map +1 -1
  41. package/build/host/credential-manager.js +109 -0
  42. package/build/host/credential-manager.js.map +1 -0
  43. package/build/host/keychain.js +44 -0
  44. package/build/host/keychain.js.map +1 -0
  45. package/build/host/launchd.js +118 -0
  46. package/build/host/launchd.js.map +1 -0
  47. package/build/host/libsecret.js +40 -0
  48. package/build/host/libsecret.js.map +1 -0
  49. package/build/host/macos-terminal.js +63 -0
  50. package/build/host/macos-terminal.js.map +1 -0
  51. package/build/host/platform.js +4 -0
  52. package/build/host/platform.js.map +1 -0
  53. package/build/host/secrets.js +46 -0
  54. package/build/host/secrets.js.map +1 -0
  55. package/build/host/shell.js +26 -0
  56. package/build/host/shell.js.map +1 -0
  57. package/build/host/startup.js +26 -0
  58. package/build/host/startup.js.map +1 -0
  59. package/build/host/systemd.js +91 -0
  60. package/build/host/systemd.js.map +1 -0
  61. package/build/host/task-scheduler.js +78 -0
  62. package/build/host/task-scheduler.js.map +1 -0
  63. package/build/host/terminal.js +46 -0
  64. package/build/host/terminal.js.map +1 -0
  65. package/build/host/tmux.js +39 -0
  66. package/build/host/tmux.js.map +1 -0
  67. package/build/host/windows-terminal.js +46 -0
  68. package/build/host/windows-terminal.js.map +1 -0
  69. package/build/in-process.js +6 -5
  70. package/build/in-process.js.map +1 -1
  71. package/build/inbox.js +57 -39
  72. package/build/inbox.js.map +1 -1
  73. package/build/init.js +509 -0
  74. package/build/init.js.map +1 -0
  75. package/build/landing.js +107 -10
  76. package/build/landing.js.map +1 -1
  77. package/build/lib/providers/ado/code-host.js +5 -1
  78. package/build/lib/providers/ado/code-host.js.map +1 -1
  79. package/build/lib/providers/ado/pipelines.js +138 -26
  80. package/build/lib/providers/ado/pipelines.js.map +1 -1
  81. package/build/lib/providers/ado/trigger.js +5 -0
  82. package/build/lib/providers/ado/trigger.js.map +1 -1
  83. package/build/lib/providers/ado/writes.js +17 -2
  84. package/build/lib/providers/ado/writes.js.map +1 -1
  85. package/build/lib/providers/github/actions.js +90 -3
  86. package/build/lib/providers/github/actions.js.map +1 -1
  87. package/build/lib/providers/github/code-host.js +2 -0
  88. package/build/lib/providers/github/code-host.js.map +1 -1
  89. package/build/lib/providers/github/writes.js +25 -2
  90. package/build/lib/providers/github/writes.js.map +1 -1
  91. package/build/lib/providers/index.js +4 -3
  92. package/build/lib/providers/index.js.map +1 -1
  93. package/build/lib/providers/npm/stage.js +28 -5
  94. package/build/lib/providers/npm/stage.js.map +1 -1
  95. package/build/lib/providers/timing.js +10 -0
  96. package/build/lib/providers/timing.js.map +1 -0
  97. package/build/lib/providers/verdicts/pr.js +47 -6
  98. package/build/lib/providers/verdicts/pr.js.map +1 -1
  99. package/build/lib/providers/verdicts/runs.js +12 -2
  100. package/build/lib/providers/verdicts/runs.js.map +1 -1
  101. package/build/logins.js +13 -6
  102. package/build/logins.js.map +1 -1
  103. package/build/manager.js +131 -55
  104. package/build/manager.js.map +1 -1
  105. package/build/note.js +5 -15
  106. package/build/note.js.map +1 -1
  107. package/build/notes.js +130 -23
  108. package/build/notes.js.map +1 -1
  109. package/build/notify.js +104 -42
  110. package/build/notify.js.map +1 -1
  111. package/build/npm-reads.js +323 -0
  112. package/build/npm-reads.js.map +1 -0
  113. package/build/ownership.js +2 -2
  114. package/build/paths.js +44 -1
  115. package/build/paths.js.map +1 -1
  116. package/build/plugin.js +4 -2
  117. package/build/plugin.js.map +1 -1
  118. package/build/profile-fields.js +153 -0
  119. package/build/profile-fields.js.map +1 -0
  120. package/build/profile-layers.js +264 -0
  121. package/build/profile-layers.js.map +1 -0
  122. package/build/profile.js +107 -51
  123. package/build/profile.js.map +1 -1
  124. package/build/project-check-cli.js +19 -19
  125. package/build/project-check-cli.js.map +1 -1
  126. package/build/project-check.js +194 -108
  127. package/build/project-check.js.map +1 -1
  128. package/build/protocol.js +5 -21
  129. package/build/protocol.js.map +1 -1
  130. package/build/pushover.js +5 -5
  131. package/build/pushover.js.map +1 -1
  132. package/build/queue.js +4 -4
  133. package/build/queue.js.map +1 -1
  134. package/build/registry.js +195 -36
  135. package/build/registry.js.map +1 -1
  136. package/build/release-kinds.js +34 -0
  137. package/build/release-kinds.js.map +1 -0
  138. package/build/rule-actions.js +8 -6
  139. package/build/rule-actions.js.map +1 -1
  140. package/build/rules-service.js +104 -47
  141. package/build/rules-service.js.map +1 -1
  142. package/build/rules.js +23 -23
  143. package/build/rules.js.map +1 -1
  144. package/build/run.js +20 -7
  145. package/build/run.js.map +1 -1
  146. package/build/runs.js +218 -68
  147. package/build/runs.js.map +1 -1
  148. package/build/scheduler.js +89 -13
  149. package/build/scheduler.js.map +1 -1
  150. package/build/search.js +2 -1
  151. package/build/search.js.map +1 -1
  152. package/build/server.js +51 -14
  153. package/build/server.js.map +1 -1
  154. package/build/spend.js +1 -1
  155. package/build/spend.js.map +1 -1
  156. package/build/store.js +79 -20
  157. package/build/store.js.map +1 -1
  158. package/build/supervise.js +1 -1
  159. package/build/supervise.js.map +1 -1
  160. package/build/timeline.js +104 -0
  161. package/build/timeline.js.map +1 -0
  162. package/build/tracker-reads-cli.js +4 -5
  163. package/build/tracker-reads-cli.js.map +1 -1
  164. package/build/trackers.js +56 -10
  165. package/build/trackers.js.map +1 -1
  166. package/build/train-cli.js +6 -5
  167. package/build/train-cli.js.map +1 -1
  168. package/build/train.js +2 -2
  169. package/build/train.js.map +1 -1
  170. package/build/upgrade.js +8 -9
  171. package/build/upgrade.js.map +1 -1
  172. package/build/wait.js +10 -10
  173. package/build/wait.js.map +1 -1
  174. package/build/watchers/ado.js +44 -20
  175. package/build/watchers/ado.js.map +1 -1
  176. package/build/watchers/github.js +21 -6
  177. package/build/watchers/github.js.map +1 -1
  178. package/build/watchers/index.js +2 -2
  179. package/build/watchers/index.js.map +1 -1
  180. package/build/watchers/linear-queue.js +47 -14
  181. package/build/watchers/linear-queue.js.map +1 -1
  182. package/build/watchers/linear-writes.js +26 -12
  183. package/build/watchers/linear-writes.js.map +1 -1
  184. package/build/watchers/linear.js +2 -2
  185. package/build/watchers/linear.js.map +1 -1
  186. package/build/watchers/npm.js +6 -4
  187. package/build/watchers/npm.js.map +1 -1
  188. package/build/watchers/source.js +5 -1
  189. package/build/watchers/source.js.map +1 -1
  190. package/build/webhook.js +80 -0
  191. package/build/webhook.js.map +1 -0
  192. package/build/why.js +1 -1
  193. package/build/why.js.map +1 -1
  194. package/build/worktrees.js +56 -93
  195. package/build/worktrees.js.map +1 -1
  196. package/package.json +61 -61
  197. package/plugin/.claude-plugin/plugin.json +1 -1
  198. package/plugin/hooks/model.ts +46 -6
  199. package/plugin/hooks/register.tsx +41 -2
  200. package/plugin/skills/conductor-console/SKILL.md +26 -27
  201. package/plugin/skills/work-item/SKILL.md +58 -54
  202. package/plugin/skills/work-item/trackers/ado-boards.md +2 -2
  203. package/plugin/skills/work-item/trackers/github-issues.md +1 -1
  204. package/plugin/skills/work-item/trackers/linear.md +2 -2
  205. package/plugin/types/index.d.ts +1 -1
  206. package/protocol/PROTOCOL.md +3 -9
  207. package/build/checkout-sync.js +0 -249
  208. package/build/checkout-sync.js.map +0 -1
  209. package/build/credential.js +0 -66
  210. package/build/credential.js.map +0 -1
  211. package/build/startup.js +0 -92
  212. package/build/startup.js.map +0 -1
  213. package/build/tab.js +0 -32
  214. package/build/tab.js.map +0 -1
package/build/daemon.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import { mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
2
- import { briefPrs, briefService, linearBriefs } from "./brief.js";
2
+ import { briefPrs, briefService } from "./brief.js";
3
3
  import { broker } from "./broker.js";
4
- import { checkoutSync, gitPort } from "./checkout-sync.js";
5
4
  import { claudeCli } from "./claude.js";
6
5
  import { ping } from "./client.js";
6
+ import { clones } from "./clones.js";
7
7
  import { codeHostService } from "./code-host-service.js";
8
8
  import { projectHosts, prStatus } from "./code-host.js";
9
9
  import { TRACKER_API } from "./conditions.js";
@@ -12,13 +12,14 @@ import { consoleEscalations, unattendedEscalations } from "./console.js";
12
12
  import { providerCredentials } from "./credentials.js";
13
13
  import { ConductorError } from "./errors.js";
14
14
  import { followUpService } from "./follow-ups.js";
15
+ import { terminal, workerTabs } from "./host/terminal.js";
15
16
  import { storeOrganizations } from "./in-process.js";
16
17
  import { inboxService } from "./inbox.js";
17
18
  import { acquirePidLock, processAlive } from "./lock.js";
18
19
  import { rotatingLog } from "./log.js";
19
20
  import { loginEvents, loginReprobe } from "./logins.js";
20
21
  import { sessionManager } from "./manager.js";
21
- import { linearNotes, noteService } from "./notes.js";
22
+ import { noteService } from "./notes.js";
22
23
  import { notifierService } from "./notify.js";
23
24
  import { overridesService } from "./overrides.js";
24
25
  import { isDefaultHome } from "./paths.js";
@@ -36,20 +37,14 @@ import { createApi } from "./server.js";
36
37
  import { claudeProjectsDir } from "./spend.js";
37
38
  import { openStore } from "./store.js";
38
39
  import {} from "./supervise.js";
39
- import { windowsTerminalTab } from "./tab.js";
40
40
  import { ensureToken } from "./token.js";
41
- import { routedBriefs, routedLabels, routedNotes, routedQueue, trackerWrites } from "./trackers.js";
41
+ import { projectTracker } from "./trackers.js";
42
42
  import { trainWatch } from "./train.js";
43
- import { boardsBriefs } from "./watchers/boards-brief.js";
44
- import { boardsQueue } from "./watchers/boards-queue.js";
45
- import { boardsLabels, boardsNotes } from "./watchers/boards-writes.js";
46
43
  import { defaultSources, startWatchers } from "./watchers/index.js";
47
- import { issuesBriefs } from "./watchers/issues-brief.js";
48
- import { issuesQueue } from "./watchers/issues-queue.js";
49
- import { issuesLabels, issuesNotes } from "./watchers/issues-writes.js";
50
- import { linearLabels } from "./watchers/linear-labels.js";
51
- import { linearQueue } from "./watchers/linear-queue.js";
44
+ import {} from "./watchers/linear-labels.js";
45
+ import {} from "./watchers/linear-queue.js";
52
46
  import { rateBudget } from "./watchers/source.js";
47
+ import { webhookFor } from "./webhook.js";
53
48
  import { gitWorktrees } from "./worktrees.js";
54
49
  // A pid file younger than this belongs to a daemon that may still be starting (it writes the pid
55
50
  // file before the port file), so a second start refuses even though nothing answers yet.
@@ -82,7 +77,7 @@ export class AlreadyRunningError extends ConductorError {
82
77
  export function daemonRunning(paths) {
83
78
  return async ({ ageMs, pid }) => processAlive(pid) && (ageMs < STARTUP_GRACE_MS || (await ping(paths, pid)));
84
79
  }
85
- // Under the logon task nobody sees stderr, so a crash goes to the log before the process exits. The
80
+ // Under the logon startup nobody sees stderr, so a crash goes to the log before the process exits. The
86
81
  // next start records the exit (daemon.exited-uncleanly).
87
82
  export function logCrashes(log, source = process) {
88
83
  for (const event of ['uncaughtException', 'unhandledRejection']) {
@@ -102,9 +97,9 @@ export function reviseSweeper(notes, log, everyMs) {
102
97
  const pass = () => {
103
98
  sweeping ??= notes
104
99
  .sweep()
105
- .then(({ revised, unreadable }) => {
100
+ .then(({ revised, unreadable, woken }) => {
106
101
  if (revised.length > 0)
107
- log.log('info', 'found a revise of an approved plan', { items: revised });
102
+ log.log('info', 'found a revise of an approved plan', { items: revised, woken });
108
103
  if (unreadable.length > 0)
109
104
  log.log('warn', 'the revise sweep could not read some items', { unreadable });
110
105
  })
@@ -150,27 +145,25 @@ export async function startDaemon(paths, { consoleGraceMs, keepaliveMs, ports =
150
145
  updateProject: (project) => void opened.upsertProject(project),
151
146
  });
152
147
  const plain = ports.worktrees ?? gitWorktrees();
153
- // A worktree create fetches and adds from the main checkout, so it waits out a check that may be
154
- // pulling and installing there (checkout-sync.ts).
148
+ // A worktree create fetches and adds in the project's clone, so it waits out a fetch of the
149
+ // clone that may be running, and none starts there until it ends (clones.ts).
155
150
  const worktrees = {
156
- auditSkills: (checkout, skills) => plain.auditSkills(checkout, skills),
157
151
  branchOf: (path) => plain.branchOf(path),
158
- checkSkills: (worktree, skills) => plain.checkSkills(worktree, skills),
159
- create: async (request) => {
160
- await checkout.settled();
161
- return plain.create(request);
162
- },
152
+ create: (request) => fetches.using(request.clone, () => plain.create(request)),
163
153
  missingSkills: (worktree, skills) => plain.missingSkills(worktree, skills),
164
- remove: (root, path, options) => plain.remove(root, path, options),
154
+ // A remove prunes and deletes a branch in the clone: no fetch writes its refs meanwhile either.
155
+ remove: (path, options) => fetches.using(options.repo, () => plain.remove(path, options)),
156
+ repoOf: (path) => plain.repoOf(path),
165
157
  unfinishedWork: (path) => plain.unfinishedWork(path),
166
158
  };
167
159
  const portBroker = broker({ free: ports.portFree, pool: config.ports, store: opened });
160
+ const claude = ports.claude ?? claudeCli();
168
161
  const manager = sessionManager({
169
162
  broker: portBroker,
170
- claude: ports.claude ?? claudeCli(),
163
+ claude,
171
164
  config: config.sessions,
172
165
  log,
173
- openTab: ports.openTab ?? windowsTerminalTab(),
166
+ paths,
174
167
  pluginDir: paths.plugin,
175
168
  // Park, resume and compact as the rules say (the defaults park-on-wait, resume-on-wait and
176
169
  // compact-on-park). A resume for a review comment is also a `pr.comment`, so a rule on that
@@ -202,6 +195,7 @@ export async function startDaemon(paths, { consoleGraceMs, keepaliveMs, ports =
202
195
  // The code hosts are set up below, before anything retires.
203
196
  prs: (profile, ref) => prStatus(hosts)(profile, ref),
204
197
  store: opened,
198
+ tabs: workerTabsFor(config.workers, ports.openTab),
205
199
  worktrees,
206
200
  });
207
201
  // One set of accounts for every provider call: the watchers' and the tracker reads and writes
@@ -213,15 +207,9 @@ export async function startDaemon(paths, { consoleGraceMs, keepaliveMs, ports =
213
207
  projects: config.projects,
214
208
  });
215
209
  const reprobe = loginReprobe({ credentials, intervalMs: config.watchers.login.intervalSeconds * 1000, log });
216
- const boards = { credentials };
217
- const issues = { credentials };
218
- const linear = { credentials };
219
- const tracker = ports.noteTracker ??
220
- routedNotes({
221
- 'ado-boards': boardsNotes(boards),
222
- 'github-issues': issuesNotes(issues),
223
- linear: linearNotes(linear),
224
- });
210
+ // Every project's tracker, as its account; a port stands in for one seam in tests.
211
+ const trackers = projectTracker({ credentials });
212
+ const tracker = ports.noteTracker ?? trackers.notes;
225
213
  const inbox = inboxService({ onWaitResolved: () => void manager.sweep(), store: opened, tracker });
226
214
  const escalations = consoleEscalations({ inbox, store: opened });
227
215
  const unattended = unattendedEscalations({ escalations, graceMs: consoleGraceMs, inbox });
@@ -233,28 +221,26 @@ export async function startDaemon(paths, { consoleGraceMs, keepaliveMs, ports =
233
221
  github: rateBudget(config.watchers.github.perMinute),
234
222
  linear: rateBudget(config.watchers.linear.perMinute),
235
223
  };
236
- const checkout = checkoutSync({
224
+ const fetches = clones({
237
225
  config,
238
- inbox,
239
226
  log,
240
- ports: { checkSkills: (root, names) => plain.checkSkills(root, names), git: gitPort() },
227
+ paths,
228
+ refresh: (project) => rules.refresh(project),
241
229
  store: opened,
242
230
  });
243
231
  const trains = trainWatch({ credentials, inbox, log, store: opened });
244
- const queueReader = ports.queueReader ??
245
- routedQueue({
246
- 'ado-boards': boardsQueue(boards),
247
- 'github-issues': issuesQueue(issues),
248
- linear: linearQueue(linear),
249
- });
232
+ const queueReader = ports.queueReader ?? trackers.queue;
250
233
  // Called once the watchers have started.
251
234
  const trackerBudget = (profile) => {
252
235
  const api = TRACKER_API[profile.tracker.kind];
253
236
  return watchers.budget(api) ?? ownBudgets[api];
254
237
  };
255
238
  // The projects' code hosts, as their accounts: the worker verbs' writes, the briefs' PR reads and
256
- // the scheduler's.
257
- const hosts = ports.codeHosts ?? ((project) => projectHosts(credentials, project));
239
+ // the scheduler's. Each repo's CI is the one the project's stored profile names.
240
+ const hosts = ports.codeHosts ??
241
+ ((project) => projectHosts(credentials, project, {
242
+ profile: opened.getProject(project)?.profile ?? null,
243
+ }));
258
244
  const scheduler = schedulerService({
259
245
  budget: trackerBudget,
260
246
  config,
@@ -262,6 +248,7 @@ export async function startDaemon(paths, { consoleGraceMs, keepaliveMs, ports =
262
248
  log,
263
249
  manager,
264
250
  overrides,
251
+ profileRefusal: (project) => rules.profileRefusal(project),
265
252
  prs: prStatus(hosts),
266
253
  reader: queueReader,
267
254
  rules: () => rules.rules(),
@@ -273,15 +260,11 @@ export async function startDaemon(paths, { consoleGraceMs, keepaliveMs, ports =
273
260
  pushover: ports.pushover ??
274
261
  pushoverSender({ credential: pushoverCredential(config.notify.pushover.credential, paths.home) }),
275
262
  store: opened,
263
+ webhook: ports.webhook ?? webhookFor(config.notify.webhook),
276
264
  });
277
265
  const actions = ruleActions({
278
266
  inbox,
279
- labels: ports.labels ??
280
- routedLabels({
281
- 'ado-boards': boardsLabels(boards),
282
- 'github-issues': issuesLabels(issues),
283
- linear: linearLabels(linear),
284
- }),
267
+ labels: ports.labels ?? trackers.labels,
285
268
  log,
286
269
  manager,
287
270
  mode: config.scheduler.mode,
@@ -343,17 +326,14 @@ export async function startDaemon(paths, { consoleGraceMs, keepaliveMs, ports =
343
326
  const briefs = briefService({
344
327
  // The item's PR, read on its project's code host as the verbs read it.
345
328
  prs: briefPrs(hosts),
346
- reader: ports.briefReader ??
347
- routedBriefs({
348
- 'ado-boards': boardsBriefs(boards),
349
- 'github-issues': issuesBriefs(issues),
350
- linear: linearBriefs(linear),
351
- }),
329
+ reader: ports.briefReader ?? trackers.briefs,
352
330
  store: opened,
353
331
  });
354
- const writes = ports.trackerWrites ?? trackerWrites({ credentials });
332
+ const writes = ports.trackerWrites ?? trackers.writes;
355
333
  const notes = noteService({
356
334
  briefs,
335
+ // A revise the sweep finds resolves its worker's waits; run the manager's sweep now to resume it.
336
+ onWaitResolved: () => void manager.sweep(),
357
337
  operator: config.operator.name,
358
338
  planApproval: (plan) => actions.planApproval(plan),
359
339
  store: opened,
@@ -364,12 +344,15 @@ export async function startDaemon(paths, { consoleGraceMs, keepaliveMs, ports =
364
344
  const api = createApi({
365
345
  briefs,
366
346
  broker: portBroker,
367
- // The throwaway worktree goes through the same create as a launch, after the checkout sync.
347
+ // The throwaway worktree goes through the same create as a launch, after a clone's fetch.
368
348
  checkProject: (project, options) => checkProject({
369
349
  budget: trackerBudget,
350
+ claude,
370
351
  credentials,
371
352
  fetch: ports.fetch,
372
- hosts,
353
+ // The profile being checked, which may not be the stored one yet.
354
+ hosts: (profile) => ports.codeHosts?.(profile.name) ?? projectHosts(credentials, profile.name, { profile }),
355
+ paths,
373
356
  // The copy workers load, as the launch checks it.
374
357
  pluginDir: paths.plugin,
375
358
  ports: portBroker,
@@ -387,7 +370,7 @@ export async function startDaemon(paths, { consoleGraceMs, keepaliveMs, ports =
387
370
  notes,
388
371
  notifier,
389
372
  overrides,
390
- registerProject: (path) => registerProject(opened, path, rules.checkProfile),
373
+ registerProject: (name) => registerProject(opened, paths, name, rules.checkProfile),
391
374
  requestShutdown: () => void stop('api'),
392
375
  rules,
393
376
  scheduler,
@@ -403,7 +386,7 @@ export async function startDaemon(paths, { consoleGraceMs, keepaliveMs, ports =
403
386
  await revisions.stop();
404
387
  await actions.stop();
405
388
  await scheduler.stop();
406
- await checkout.stop();
389
+ await fetches.stop();
407
390
  await trains.stop();
408
391
  await reprobe.stop();
409
392
  await watchers.stop();
@@ -438,7 +421,7 @@ export async function startDaemon(paths, { consoleGraceMs, keepaliveMs, ports =
438
421
  opened.appendEvent({ data: { pid: process.pid, port, version }, kind: 'daemon.started' });
439
422
  // Before the manager launches or resumes anyone: conductor sessions load this copy (plugin.ts).
440
423
  refreshPluginCopy(paths, opened, log);
441
- // Only the machine's own home: a scratch one (tests, a local run) must not touch Jason's install.
424
+ // Only the machine's own home: a scratch one (tests, a local run) must not touch the operator's install.
442
425
  if (isDefaultHome(paths.home))
443
426
  void retireUserModOnce(opened, log);
444
427
  inbox.start();
@@ -449,7 +432,7 @@ export async function startDaemon(paths, { consoleGraceMs, keepaliveMs, ports =
449
432
  watchers.start();
450
433
  reprobe.start();
451
434
  scheduler.start();
452
- checkout.start();
435
+ fetches.start();
453
436
  trains.start();
454
437
  actions.start();
455
438
  revisions.start();
@@ -465,6 +448,14 @@ export async function startDaemon(paths, { consoleGraceMs, keepaliveMs, ports =
465
448
  throw error;
466
449
  }
467
450
  }
451
+ // The workers' tabs, in config.json's terminal and on each launch when it says so. `open` replaces
452
+ // the terminal (tests record the tabs instead), with no hint: the host's terminal isn't the one
453
+ // that opened them.
454
+ export function workerTabsFor(workers, open) {
455
+ return open === undefined
456
+ ? workerTabs(terminal({ choice: workers.terminal }), workers.tab)
457
+ : { hint: () => null, onLaunch: workers.tab, open };
458
+ }
468
459
  function addressOf(address) {
469
460
  if (address === null || typeof address === 'string')
470
461
  throw new Error('the API is not listening on TCP');
@@ -1 +1 @@
1
- {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
@@ -1,19 +1,22 @@
1
- import { randomUUID } from 'node:crypto';
2
- import { linkSync, readFileSync, renameSync, statSync, unlinkSync, writeFileSync } from 'node:fs';
1
+ import { createHash, randomUUID } from 'node:crypto';
2
+ import * as nodeFs from 'node:fs';
3
3
  import { join } from 'node:path';
4
+ import { setTimeout as delay } from 'node:timers/promises';
4
5
  import { lockVerdict } from "./broker.js";
5
- export async function fileLock(request, { now = Date.now, pollMs, sleep = (ms) => new Promise((done) => setTimeout(done, ms)), }) {
6
+ import { hasCode, isMissing } from "./errors.js";
7
+ export async function fileLock(request, { fs = nodeFs, now = Date.now, pollMs, refreshPatienceMs = REFRESH_PATIENCE_MS, sleep = (ms) => new Promise((done) => setTimeout(done, ms)), }) {
8
+ const { linkSync, readFileSync, renameSync, statSync, unlinkSync, writeFileSync } = fs;
6
9
  const { name, owner } = request;
7
10
  const file = join(request.commonDir, `${request.project}-lock-${name}.json`);
8
- const read = (path = file) => {
11
+ const read = () => {
9
12
  try {
10
- return JSON.parse(readFileSync(path, 'utf8'));
13
+ return JSON.parse(readFileSync(file, 'utf8'));
11
14
  }
12
15
  catch (error) {
13
- if (error.code === 'ENOENT')
16
+ if (isMissing(error))
14
17
  return null;
15
18
  try {
16
- return { at: statSync(path).mtime.toISOString(), owner: null };
19
+ return { at: statSync(file).mtime.toISOString(), owner: null };
17
20
  }
18
21
  catch {
19
22
  return null;
@@ -22,9 +25,29 @@ export async function fileLock(request, { now = Date.now, pollMs, sleep = (ms) =
22
25
  };
23
26
  // The broker's rule, on the file's { owner, at }: an unreadable owner is nobody's.
24
27
  const verdict = (held) => lockVerdict(held && { holder: held.owner ?? '', name, since: held.at }, owner, new Date(now()));
28
+ // A lock's id, or for one with none (unreadable, or written before ids) its owner and time.
29
+ const identity = (held) => typeof held.id === 'string' && /^[\w-]+$/.test(held.id)
30
+ ? held.id
31
+ : createHash('sha256')
32
+ .update(JSON.stringify([held.owner, held.at]))
33
+ .digest('hex')
34
+ .slice(0, 16);
35
+ const same = (found, judged) => found !== null && identity(found) === identity(judged);
36
+ // Deletes a file of this session's (a claim, a temp, a moved-aside lock). One a scanner holds open
37
+ // on Windows stays, rather than failing a change that is done: a claim left so is abandoned after
38
+ // CLAIM_ABANDONED_MS.
39
+ const discard = (path) => {
40
+ try {
41
+ unlinkSync(path);
42
+ }
43
+ catch (error) {
44
+ if (!isMissing(error) && !heldOpen(error))
45
+ throw error;
46
+ }
47
+ };
25
48
  const temp = () => {
26
49
  const path = `${file}.${process.pid}.${randomUUID()}`;
27
- writeFileSync(path, JSON.stringify({ at: new Date(now()).toISOString(), owner }));
50
+ writeFileSync(path, JSON.stringify({ at: new Date(now()).toISOString(), id: randomUUID(), owner }));
28
51
  return path;
29
52
  };
30
53
  const create = () => {
@@ -36,56 +59,137 @@ export async function fileLock(request, { now = Date.now, pollMs, sleep = (ms) =
36
59
  unlinkSync(path);
37
60
  }
38
61
  };
39
- // Moves a stale lock aside. If what it moved isn't the lock it judged stale (a fresh one came in
40
- // between), it goes back.
41
- const clearStale = (judged) => {
42
- const tomb = `${file}.stale.${randomUUID()}`;
43
- try {
44
- renameSync(file, tomb);
45
- }
46
- catch (error) {
47
- if (error.code === 'ENOENT')
48
- return;
49
- throw error;
50
- }
51
- const moved = read(tomb);
52
- if (moved?.owner !== judged.owner || moved?.at !== judged.at) {
62
+ // Claims the lock as read, so nobody else removes or replaces it until the returned function
63
+ // deletes the claim. Null while someone else holds the claim.
64
+ const claim = (held) => {
65
+ const path = `${file}.claim.${identity(held)}`;
66
+ for (let tries = 0; tries < 2; tries++) {
67
+ const made = `${path}.${process.pid}.${randomUUID()}`;
68
+ writeFileSync(made, '');
53
69
  try {
54
- linkSync(tomb, file);
70
+ linkSync(made, path);
71
+ return () => discard(path);
55
72
  }
56
73
  catch (error) {
57
- if (error.code !== 'EEXIST')
74
+ if (!hasCode(error, 'EEXIST'))
58
75
  throw error;
59
76
  }
77
+ finally {
78
+ discard(made);
79
+ }
80
+ if (!abandoned(path))
81
+ return null;
82
+ discard(path);
83
+ }
84
+ return null;
85
+ };
86
+ // A claim lasts milliseconds, on the real clock (the caller's now is the lock's); one gone already
87
+ // is free to take.
88
+ const abandoned = (path) => {
89
+ try {
90
+ return Date.now() - statSync(path).mtimeMs > CLAIM_ABANDONED_MS;
60
91
  }
61
- unlinkSync(tomb);
92
+ catch (error) {
93
+ if (isMissing(error))
94
+ return true;
95
+ throw error;
96
+ }
97
+ };
98
+ // Under the lock's claim: moved aside before it is deleted, as Windows keeps an open file's name
99
+ // until its last handle closes, and a reader may have it open.
100
+ const remove = () => {
101
+ const tomb = `${file}.gone.${randomUUID()}`;
102
+ renameSync(file, tomb);
103
+ discard(tomb);
62
104
  };
63
105
  if (request.action === 'status') {
64
106
  const held = read();
65
107
  return { file, lock: name, verdict: verdict(held), ...(held ? { heldBy: held.owner, since: held.at } : {}) };
66
108
  }
67
109
  if (request.action === 'release') {
68
- const held = read();
69
- const judged = verdict(held);
70
- if (judged === 'mine')
71
- unlinkSync(file);
72
- return {
73
- lock: name,
74
- released: judged === 'mine',
75
- ...((judged === 'held' || judged === 'stale') && held ? { heldBy: held.owner } : {}),
76
- };
110
+ // Someone else's claim lasts milliseconds, or until it is abandoned.
111
+ const releaseUntil = Date.now() + CLAIM_ABANDONED_MS + refreshPatienceMs;
112
+ for (;;) {
113
+ const held = read();
114
+ const judged = verdict(held);
115
+ if (judged !== 'mine' || held === null) {
116
+ return {
117
+ lock: name,
118
+ released: false,
119
+ ...((judged === 'held' || judged === 'stale') && held ? { heldBy: held.owner } : {}),
120
+ };
121
+ }
122
+ const unclaim = claim(held);
123
+ if (unclaim) {
124
+ try {
125
+ if (same(read(), held)) {
126
+ remove();
127
+ return { lock: name, released: true };
128
+ }
129
+ }
130
+ finally {
131
+ unclaim();
132
+ }
133
+ continue; // it changed (taken over, or refreshed by its owner elsewhere): judge again
134
+ }
135
+ // A takeover of the stale lock, or its owner's refresh elsewhere, holds the claim.
136
+ if (Date.now() >= releaseUntil)
137
+ return { heldBy: held.owner, lock: name, released: false };
138
+ await delay(REFRESH_WAIT_MS);
139
+ }
77
140
  }
78
141
  const until = now() + request.waitMinutes * 60_000;
142
+ let refreshUntil = null;
79
143
  for (;;) {
80
144
  const held = read();
81
145
  const judged = verdict(held);
82
- if (judged === 'mine') {
83
- renameSync(temp(), file);
84
- return { acquired: true, lock: name, owner, refreshed: true };
146
+ if (judged === 'mine' && held) {
147
+ const unclaim = claim(held);
148
+ if (unclaim) {
149
+ try {
150
+ if (!same(read(), held))
151
+ continue; // judge again: it was taken over meanwhile
152
+ const path = temp();
153
+ try {
154
+ renameSync(path, file);
155
+ return { acquired: true, lock: name, owner, refreshed: true };
156
+ }
157
+ catch (error) {
158
+ try {
159
+ unlinkSync(path);
160
+ }
161
+ catch {
162
+ // the rename's error is the one to report
163
+ }
164
+ if (!heldOpen(error))
165
+ throw error;
166
+ }
167
+ }
168
+ finally {
169
+ unclaim();
170
+ }
171
+ }
172
+ // A rename Windows refused, or a claim someone else holds: tried again for a while.
173
+ refreshUntil ??= Date.now() + refreshPatienceMs;
174
+ // Still ours, only not refreshed: it goes stale from its last acquire, `since`.
175
+ if (Date.now() >= refreshUntil)
176
+ return { acquired: true, lock: name, owner, refreshed: false, since: held.at };
177
+ await delay(REFRESH_WAIT_MS);
178
+ continue; // judge again: it may have gone stale and been taken over meanwhile
85
179
  }
86
180
  if (judged === 'stale' && held) {
87
- clearStale(held);
88
- continue; // free now, or someone else won it: judge again
181
+ const unclaim = claim(held);
182
+ if (unclaim) {
183
+ try {
184
+ if (same(read(), held))
185
+ remove();
186
+ }
187
+ finally {
188
+ unclaim();
189
+ }
190
+ continue; // free now, or someone else won it: judge again
191
+ }
192
+ // Someone else is taking it over: wait as for a held lock.
89
193
  }
90
194
  if (judged === 'free') {
91
195
  try {
@@ -93,7 +197,7 @@ export async function fileLock(request, { now = Date.now, pollMs, sleep = (ms) =
93
197
  return { acquired: true, lock: name, owner };
94
198
  }
95
199
  catch (error) {
96
- if (error.code !== 'EEXIST')
200
+ if (!hasCode(error, 'EEXIST'))
97
201
  throw error;
98
202
  continue; // someone created it between the read and the create
99
203
  }
@@ -103,4 +207,15 @@ export async function fileLock(request, { now = Date.now, pollMs, sleep = (ms) =
103
207
  await sleep(pollMs);
104
208
  }
105
209
  }
210
+ // A refresh renames over the lock file, which Windows refuses (EPERM) while any other handle has it
211
+ // open, as a scanner of the lock just written or another worktree's read does (ATK-652). Most
212
+ // holds end within a second, but under load one outlasted 10 s, so it tries again for a second,
213
+ // on the real clock and timer (the caller's now and sleep are the lock's), then answers that the
214
+ // lock is still the caller's but wasn't refreshed. The claim is let go between tries.
215
+ const REFRESH_PATIENCE_MS = 1000;
216
+ const REFRESH_WAIT_MS = 50;
217
+ const CLAIM_ABANDONED_MS = 10_000;
218
+ function heldOpen(error) {
219
+ return hasCode(error, 'EPERM') || hasCode(error, 'EBUSY');
220
+ }
106
221
  //# sourceMappingURL=file-lock.js.map