@detergent-software/conductor 3.0.0-dev.3 → 3.0.0-dev.31

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 (175) hide show
  1. package/CHANGELOG.md +251 -0
  2. package/README.md +203 -64
  3. package/build/brief-cli.js +1 -1
  4. package/build/brief-cli.js.map +1 -1
  5. package/build/broker-cli.js +24 -25
  6. package/build/broker-cli.js.map +1 -1
  7. package/build/broker.js +66 -92
  8. package/build/broker.js.map +1 -1
  9. package/build/claude.js +50 -7
  10. package/build/claude.js.map +1 -1
  11. package/build/cli.js +143 -63
  12. package/build/cli.js.map +1 -1
  13. package/build/clones.js +92 -0
  14. package/build/clones.js.map +1 -0
  15. package/build/code-host-cli.js +126 -37
  16. package/build/code-host-cli.js.map +1 -1
  17. package/build/code-host-service.js +13 -1
  18. package/build/code-host-service.js.map +1 -1
  19. package/build/code-host.js +82 -16
  20. package/build/code-host.js.map +1 -1
  21. package/build/conditions.js +27 -10
  22. package/build/conditions.js.map +1 -1
  23. package/build/config.js +58 -14
  24. package/build/config.js.map +1 -1
  25. package/build/console.js +40 -24
  26. package/build/console.js.map +1 -1
  27. package/build/credentials.js +47 -34
  28. package/build/credentials.js.map +1 -1
  29. package/build/daemon.js +45 -25
  30. package/build/daemon.js.map +1 -1
  31. package/build/help.js +179 -42
  32. package/build/help.js.map +1 -1
  33. package/build/history.js +4 -2
  34. package/build/history.js.map +1 -1
  35. package/build/host/credential-manager.js +109 -0
  36. package/build/host/credential-manager.js.map +1 -0
  37. package/build/host/keychain.js +44 -0
  38. package/build/host/keychain.js.map +1 -0
  39. package/build/host/launchd.js +118 -0
  40. package/build/host/launchd.js.map +1 -0
  41. package/build/host/libsecret.js +40 -0
  42. package/build/host/libsecret.js.map +1 -0
  43. package/build/host/macos-terminal.js +63 -0
  44. package/build/host/macos-terminal.js.map +1 -0
  45. package/build/host/platform.js +4 -0
  46. package/build/host/platform.js.map +1 -0
  47. package/build/host/secrets.js +46 -0
  48. package/build/host/secrets.js.map +1 -0
  49. package/build/host/shell.js +26 -0
  50. package/build/host/shell.js.map +1 -0
  51. package/build/host/startup.js +26 -0
  52. package/build/host/startup.js.map +1 -0
  53. package/build/host/systemd.js +91 -0
  54. package/build/host/systemd.js.map +1 -0
  55. package/build/host/task-scheduler.js +78 -0
  56. package/build/host/task-scheduler.js.map +1 -0
  57. package/build/host/terminal.js +46 -0
  58. package/build/host/terminal.js.map +1 -0
  59. package/build/host/tmux.js +39 -0
  60. package/build/host/tmux.js.map +1 -0
  61. package/build/host/windows-terminal.js +46 -0
  62. package/build/host/windows-terminal.js.map +1 -0
  63. package/build/in-process.js +6 -5
  64. package/build/in-process.js.map +1 -1
  65. package/build/inbox.js +63 -17
  66. package/build/inbox.js.map +1 -1
  67. package/build/init.js +510 -0
  68. package/build/init.js.map +1 -0
  69. package/build/landing.js +86 -7
  70. package/build/landing.js.map +1 -1
  71. package/build/lib/providers/ado/code-host.js +5 -1
  72. package/build/lib/providers/ado/code-host.js.map +1 -1
  73. package/build/lib/providers/ado/pipelines.js +138 -26
  74. package/build/lib/providers/ado/pipelines.js.map +1 -1
  75. package/build/lib/providers/ado/trigger.js +5 -0
  76. package/build/lib/providers/ado/trigger.js.map +1 -1
  77. package/build/lib/providers/ado/writes.js +10 -1
  78. package/build/lib/providers/ado/writes.js.map +1 -1
  79. package/build/lib/providers/github/actions.js +90 -3
  80. package/build/lib/providers/github/actions.js.map +1 -1
  81. package/build/lib/providers/github/code-host.js +2 -0
  82. package/build/lib/providers/github/code-host.js.map +1 -1
  83. package/build/lib/providers/github/writes.js +24 -2
  84. package/build/lib/providers/github/writes.js.map +1 -1
  85. package/build/lib/providers/index.js +4 -3
  86. package/build/lib/providers/index.js.map +1 -1
  87. package/build/lib/providers/npm/stage.js +28 -5
  88. package/build/lib/providers/npm/stage.js.map +1 -1
  89. package/build/lib/providers/timing.js +10 -0
  90. package/build/lib/providers/timing.js.map +1 -0
  91. package/build/lib/providers/verdicts/pr.js +47 -6
  92. package/build/lib/providers/verdicts/pr.js.map +1 -1
  93. package/build/lib/providers/verdicts/runs.js +12 -2
  94. package/build/lib/providers/verdicts/runs.js.map +1 -1
  95. package/build/local-files.js +95 -0
  96. package/build/local-files.js.map +1 -0
  97. package/build/manager.js +171 -47
  98. package/build/manager.js.map +1 -1
  99. package/build/note.js +1 -1
  100. package/build/note.js.map +1 -1
  101. package/build/notify.js +101 -39
  102. package/build/notify.js.map +1 -1
  103. package/build/npm-reads.js +323 -0
  104. package/build/npm-reads.js.map +1 -0
  105. package/build/paths.js +44 -1
  106. package/build/paths.js.map +1 -1
  107. package/build/plugin.js +10 -0
  108. package/build/plugin.js.map +1 -1
  109. package/build/profile-fields.js +151 -0
  110. package/build/profile-fields.js.map +1 -0
  111. package/build/profile-layers.js +264 -0
  112. package/build/profile-layers.js.map +1 -0
  113. package/build/profile.js +93 -50
  114. package/build/profile.js.map +1 -1
  115. package/build/project-check-cli.js +19 -11
  116. package/build/project-check-cli.js.map +1 -1
  117. package/build/project-check.js +206 -108
  118. package/build/project-check.js.map +1 -1
  119. package/build/pushover.js +5 -5
  120. package/build/pushover.js.map +1 -1
  121. package/build/registry.js +195 -36
  122. package/build/registry.js.map +1 -1
  123. package/build/release-kinds.js +34 -0
  124. package/build/release-kinds.js.map +1 -0
  125. package/build/rule-actions.js +4 -2
  126. package/build/rule-actions.js.map +1 -1
  127. package/build/rules-service.js +101 -44
  128. package/build/rules-service.js.map +1 -1
  129. package/build/rules.js +15 -15
  130. package/build/rules.js.map +1 -1
  131. package/build/run.js +20 -7
  132. package/build/run.js.map +1 -1
  133. package/build/runs.js +217 -67
  134. package/build/runs.js.map +1 -1
  135. package/build/scheduler.js +11 -1
  136. package/build/scheduler.js.map +1 -1
  137. package/build/server.js +6 -25
  138. package/build/server.js.map +1 -1
  139. package/build/spend.js +4 -0
  140. package/build/spend.js.map +1 -1
  141. package/build/store.js +86 -25
  142. package/build/store.js.map +1 -1
  143. package/build/timeline.js +104 -0
  144. package/build/timeline.js.map +1 -0
  145. package/build/tracker-reads-cli.js +4 -5
  146. package/build/tracker-reads-cli.js.map +1 -1
  147. package/build/train-cli.js +6 -5
  148. package/build/train-cli.js.map +1 -1
  149. package/build/upgrade.js +8 -9
  150. package/build/upgrade.js.map +1 -1
  151. package/build/wait.js +9 -9
  152. package/build/wait.js.map +1 -1
  153. package/build/watchers/ado.js +42 -18
  154. package/build/watchers/ado.js.map +1 -1
  155. package/build/watchers/github.js +19 -4
  156. package/build/watchers/github.js.map +1 -1
  157. package/build/watchers/index.js +2 -2
  158. package/build/watchers/index.js.map +1 -1
  159. package/build/watchers/npm.js +6 -4
  160. package/build/watchers/npm.js.map +1 -1
  161. package/build/webhook.js +80 -0
  162. package/build/webhook.js.map +1 -0
  163. package/build/worktrees.js +199 -92
  164. package/build/worktrees.js.map +1 -1
  165. package/package.json +61 -61
  166. package/plugin/skills/conductor-console/SKILL.md +4 -4
  167. package/plugin/skills/work-item/SKILL.md +13 -11
  168. package/build/checkout-sync.js +0 -249
  169. package/build/checkout-sync.js.map +0 -1
  170. package/build/credential.js +0 -66
  171. package/build/credential.js.map +0 -1
  172. package/build/startup.js +0 -92
  173. package/build/startup.js.map +0 -1
  174. package/build/tab.js +0 -32
  175. package/build/tab.js.map +0 -1
@@ -1,10 +1,15 @@
1
+ // How long a failed build queued again counts as pending while the PR still shows the failed run.
2
+ // ADO starts the new build within seconds, so a failure that outlasts this is the PR's again.
3
+ export const REQUEUE_GRACE_MS = 15 * 60_000;
1
4
  // The PR's required builds and checks as one answer once none of them runs, or null while one does
2
5
  // (or none has reported yet). Only current ones count; a policy that isn't a build (reviewers,
3
- // comments) isn't a check. All of them expired is its own answer.
4
- export function checksSettled(checks) {
6
+ // comments) isn't a check. All of them expired is its own answer. With the PR's threads, a failed
7
+ // build a Requeue note queued again runs, as in prVerdict.
8
+ export function checksSettled(checks, { now = Date.now(), threads = [] } = {}) {
9
+ const queuedAgain = queuedAgainBy(threads, now);
5
10
  const builds = checks.filter((c) => c.required && c.kind !== 'policy' && c.current);
6
11
  const live = builds.filter((c) => c.state !== 'expired');
7
- if (builds.length === 0 || live.some((c) => c.state === 'pending'))
12
+ if (builds.length === 0 || live.some((c) => c.state === 'pending' || queuedAgain(c)))
8
13
  return null;
9
14
  if (live.length === 0)
10
15
  return { state: 'expired' };
@@ -26,7 +31,10 @@ export function needsAnswer(thread) {
26
31
  // waiting, with what it waits on.
27
32
  // Waiting lists ADO builds that only expired, to queue again, but only when nothing else is pending,
28
33
  // so a PR waiting days on a review doesn't rebuild every 12 hours.
29
- export function prVerdict(pr, { autoMergeExpected = false } = {}) {
34
+ // A failed build a Requeue note queued again is pending, not failed, for REQUEUE_GRACE_MS after the
35
+ // note, while the PR still shows its failed run: the new run's own failure is build-failed at once,
36
+ // as is a GitHub check of the same run that finished after the note (the re-run's attempt).
37
+ export function prVerdict(pr, { autoMergeExpected = false, now = Date.now() } = {}) {
30
38
  if (pr.state === 'merged')
31
39
  return { mergeCommit: pr.mergeCommit, outcome: 'merged' };
32
40
  if (pr.state === 'closed')
@@ -50,8 +58,9 @@ export function prVerdict(pr, { autoMergeExpected = false } = {}) {
50
58
  reviewers: against.map((r) => ({ at: r.at, name: r.by, ...(r.vote === undefined ? {} : { vote: r.vote }) })),
51
59
  };
52
60
  }
61
+ const queuedAgain = queuedAgainBy(pr.threads, now);
53
62
  const required = pr.checks.filter((c) => c.required);
54
- const failed = required.filter((c) => c.kind !== 'policy' && c.state === 'failed' && c.current);
63
+ const failed = required.filter((c) => c.kind !== 'policy' && c.state === 'failed' && c.current && !queuedAgain(c));
55
64
  if (failed.length > 0) {
56
65
  return { builds: failed.map(failedBuild), outcome: 'build-failed' };
57
66
  }
@@ -70,7 +79,7 @@ export function prVerdict(pr, { autoMergeExpected = false } = {}) {
70
79
  ...unsettled.map((c) => ({
71
80
  name: c.name,
72
81
  ...(c.policy === undefined ? {} : { policy: c.policy }),
73
- status: c.status,
82
+ status: queuedAgain(c) ? `queued again (run ${c.run} failed)` : c.status,
74
83
  ...(c.type === undefined ? {} : { type: c.type }),
75
84
  ...(c.state === 'expired' ? { expired: true } : {}),
76
85
  })),
@@ -86,6 +95,23 @@ export function prVerdict(pr, { autoMergeExpected = false } = {}) {
86
95
  : [];
87
96
  return { outcome: 'waiting', pending, requeue };
88
97
  }
98
+ // The failed builds the PR's Requeue notes queued again, oldest note first.
99
+ export function requeuedBuilds(threads) {
100
+ return threads.flatMap((t) => {
101
+ if (t.notePhase !== 'Requeue')
102
+ return [];
103
+ // The note that opened the thread, not a reply after it.
104
+ const { at, heading } = t.opening ?? { at: t.at, heading: t.excerpt.split(/\r?\n/)[0] ?? '' };
105
+ const found = /\brun: (\d+) \((.*)\) at ([0-9a-f]{7,40})\s*$/i.exec(heading);
106
+ if (!found?.[1] || found[2] === undefined || !found[3])
107
+ return [];
108
+ return [{ at, build: found[2], head: found[3].toLowerCase(), run: Number(found[1]) }];
109
+ });
110
+ }
111
+ // The heading of the note `conduct land --requeue` posts before it queues a failed build again.
112
+ export function requeueHeading(prefix, build, head) {
113
+ return `## ${prefix}Requeue · run: ${build.run} (${build.name ?? 'a build'}) at ${head}`;
114
+ }
89
115
  function failedBuild(c) {
90
116
  return {
91
117
  name: c.name,
@@ -95,4 +121,19 @@ function failedBuild(c) {
95
121
  url: c.url,
96
122
  };
97
123
  }
124
+ // Whether a check is a failed build a Requeue note queued again under REQUEUE_GRACE_MS ago. By
125
+ // run, from its newest note. A GitHub re-run keeps the run's id, so a check that finished after the
126
+ // note is the new attempt's result, not the failure it queued again.
127
+ function queuedAgainBy(threads, now) {
128
+ const again = new Map();
129
+ for (const r of requeuedBuilds(threads)) {
130
+ const at = Date.parse(r.at ?? '') || 0;
131
+ if (now - at < REQUEUE_GRACE_MS)
132
+ again.set(r.run, Math.max(at, again.get(r.run) ?? 0));
133
+ }
134
+ return (c) => {
135
+ const noted = c.state === 'failed' && c.run !== null ? again.get(c.run) : undefined;
136
+ return noted !== undefined && !(Date.parse(c.finished ?? '') > noted);
137
+ };
138
+ }
98
139
  //# sourceMappingURL=pr.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pr.js","sourceRoot":"","sources":["../../../../src/lib/providers/verdicts/pr.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pr.js","sourceRoot":"","sources":["../../../../src/lib/providers/verdicts/pr.ts"],"names":[],"mappings":"AAqDA,kGAAkG;AAClG,8FAA8F;AAC9F,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,GAAG,MAAM,CAAC;AAE5C,mGAAmG;AACnG,+FAA+F;AAC/F,kGAAkG;AAClG,2DAA2D;AAC3D,MAAM,UAAU,aAAa,CAC3B,MAAgC,EAChC,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,KAA4D,EAAE;IAE9F,MAAM,WAAW,GAAG,aAAa,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC;IACpF,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;IACzD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAClG,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IACnD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC;IACxD,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC;QACtB,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE;QACtG,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC1B,CAAC;AAED,mGAAmG;AACnG,aAAa;AACb,MAAM,UAAU,WAAW,CAAC,MAAsB;IAChD,OAAO,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,IAAI,CAAC;AAC7E,CAAC;AAED,8FAA8F;AAC9F,6FAA6F;AAC7F,+FAA+F;AAC/F,yFAAyF;AACzF,8FAA8F;AAC9F,kCAAkC;AAClC,qGAAqG;AACrG,mEAAmE;AACnE,oGAAoG;AACpG,oGAAoG;AACpG,4FAA4F;AAC5F,MAAM,UAAU,SAAS,CACvB,EAAc,EACd,EAAE,iBAAiB,GAAG,KAAK,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,KAAoD,EAAE;IAEnG,IAAI,EAAE,CAAC,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IACrF,IAAI,EAAE,CAAC,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;IAC3D,IAAI,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,YAAY,IAAI,EAAE,CAAC,SAAS,KAAK,EAAE,CAAC,YAAY,EAAE,CAAC;QACxE,OAAO;YACL,OAAO,EAAE,SAAS;YAClB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC;YAC3E,OAAO,EAAE,EAAE;SACZ,CAAC;IACJ,CAAC;IACD,IAAI,EAAE,CAAC,KAAK,KAAK,WAAW;QAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;IAC9D,IAAI,EAAE,CAAC,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;IAE5F,iGAAiG;IACjG,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,mBAAmB,CAAC,CAAC;IAC5E,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO;YACL,OAAO,EAAE,mBAAmB;YAC5B,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;SAC7G,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACrD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACnH,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;IACtE,CAAC;IAED,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO;SACpB,MAAM,CAAC,WAAW,CAAC;QACpB,yEAAyE;SACxE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;SAChG,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IACjG,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACzE,wFAAwF;IACxF,IAAI,iBAAiB,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,EAAE,CAAC,UAAU;QAAE,OAAO,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC;IAE3G,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAc;QACzB,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACvB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,GAAG,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;YACvD,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM;YACxE,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACjD,GAAG,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7D,CAAC,CAAC;QACH,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,wBAAwB,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACrF,GAAG,CAAC,EAAE,CAAC,UAAU;YACf,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,oCAAoC,EAAE,CAAC;YAChE,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK;gBAClB,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,sCAAsC,EAAE,CAAC,CAAC;KACxE,CAAC;IACF,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC;QAC3D,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAClG,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAClD,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,cAAc,CAAC,OAAkC;IAC/D,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QAC3B,IAAI,CAAC,CAAC,SAAS,KAAK,SAAS;YAAE,OAAO,EAAE,CAAC;QACzC,yDAAyD;QACzD,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAC9F,MAAM,KAAK,GAAG,gDAAgD,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC7E,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAAE,OAAO,EAAE,CAAC;QAClE,OAAO,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;AACL,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,cAAc,CAAC,MAAc,EAAE,KAA2C,EAAE,IAAY;IACtG,OAAO,MAAM,MAAM,kBAAkB,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC,IAAI,IAAI,SAAS,QAAQ,IAAI,EAAE,CAAC;AAC3F,CAAC;AAED,SAAS,WAAW,CAAC,CAAgB;IACnC,OAAO;QACL,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,GAAG,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;QACvD,GAAG,EAAE,CAAC,CAAC,GAAG;QACV,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,GAAG,EAAE,CAAC,CAAC,GAAG;KACX,CAAC;AACJ,CAAC;AAED,+FAA+F;AAC/F,oGAAoG;AACpG,qEAAqE;AACrE,SAAS,aAAa,CAAC,OAAkC,EAAE,GAAW;IACpE,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,KAAK,MAAM,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;QACxC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,GAAG,GAAG,EAAE,GAAG,gBAAgB;YAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzF,CAAC;IACD,OAAO,CAAC,CAAC,EAAE,EAAE;QACX,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACpF,OAAO,KAAK,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC;IACxE,CAAC,CAAC;AACJ,CAAC"}
@@ -7,6 +7,13 @@ export const stem = (file) => (file ?? '').replace(/^.*\//, '').replace(/\.ya?ml
7
7
  export function answersTo(pipeline, name) {
8
8
  return [pipeline.file, stem(pipeline.file), pipeline.name].some((key) => key?.toLowerCase() === name.toLowerCase());
9
9
  }
10
+ // Whether a not-queued run's batch still waits: the run ahead of it goes, or ended under SETTLE_MS
11
+ // ago (Azure DevOps lists the batch's run seconds after it ends).
12
+ export function heldBack(run, now) {
13
+ if (run.state !== 'not-queued' || run.behind === undefined)
14
+ return false;
15
+ return run.behind.finished === null || now - Date.parse(run.behind.finished) < SETTLE_MS;
16
+ }
10
17
  // The pipelines `--for` names, each answered to by exactly one; throws on a name no pipeline, or
11
18
  // more than one, answers to.
12
19
  export function pipelinesNamed(names, pipelines) {
@@ -38,8 +45,9 @@ export function releasedRuns(runs, releases) {
38
45
  // trigger, so nothing left means nothing to wait for, at once. Without that (GitHub Actions), no run
39
46
  // at all waits out the grace period first. A pipeline that should have run and hasn't, or whose
40
47
  // trigger couldn't be read, waits out the grace period too (ADO can list a run ten minutes after
41
- // the merge). Once a run has turned up, the rest of the merge's runs get SETTLE_MS (or the grace
42
- // period, when shorter) to queue. With `only` (`--for` names), the outcome comes from those alone.
48
+ // the merge). One whose batch waits behind a run still going (`behind`) waits as long as that run
49
+ // does, and SETTLE_MS after (heldBack). Once a run has turned up, the rest of the merge's runs get SETTLE_MS (or the grace period,
50
+ // when shorter) to queue. With `only` (`--for` names), the outcome comes from those alone.
43
51
  export function runsVerdict({ graceMs, mergedAt, now, only = null, runs, triggersKnown, }) {
44
52
  const listed = runs.filter((r) => r.state !== 'not-triggered');
45
53
  const named = (r) => (only ?? []).some((name) => answersTo(r.pipeline, name));
@@ -51,6 +59,8 @@ export function runsVerdict({ graceMs, mergedAt, now, only = null, runs, trigger
51
59
  outcome = 'waiting-for-approval';
52
60
  else if (has('queued') || has('running'))
53
61
  outcome = 'waiting';
62
+ else if (watched.some((r) => heldBack(r, now)))
63
+ outcome = 'waiting';
54
64
  else if ((has('not-queued') || has('unknown')) && age < graceMs)
55
65
  outcome = 'waiting';
56
66
  else if (watched.length === 0)
@@ -1 +1 @@
1
- {"version":3,"file":"runs.js","sourceRoot":"","sources":["../../../../src/lib/providers/verdicts/runs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runs.js","sourceRoot":"","sources":["../../../../src/lib/providers/verdicts/runs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,95 @@
1
+ import { existsSync, mkdirSync, readdirSync, readFileSync } from 'node:fs';
2
+ import { cp } from 'node:fs/promises';
3
+ import { dirname, join, matchesGlob, relative } from 'node:path';
4
+ import { ConductorError } from "./errors.js";
5
+ import { outputOf } from "./run.js";
6
+ export const INCLUDE_FILE = '.worktreeinclude';
7
+ // Copies the source checkout's included files into `target`; returns their paths, relative and with
8
+ // forward slashes. Git lists ignored paths with whole ignored directories collapsed, which keeps
9
+ // node_modules out of the walk. A pattern without a slash (".env*") matches at any depth but not
10
+ // inside an ignored directory; an anchored one ("apps/api/secrets/*.json") also reaches into one.
11
+ export async function copyLocalFiles(git, source, target) {
12
+ if (!existsSync(join(source, '.git')))
13
+ throw new ConductorError(`localFilesFrom ${source} is not a git checkout`, [
14
+ "set the profile's localFilesFrom to a checkout of the project you keep",
15
+ ]);
16
+ const patterns = includePatterns(join(source, INCLUDE_FILE));
17
+ if (patterns.length === 0)
18
+ return [];
19
+ const listed = await git(['ls-files', '--others', '--ignored', '--exclude-standard', '--directory', '-z'], source);
20
+ if (listed.code !== 0)
21
+ throw new ConductorError(`git couldn't list the ignored files in ${source}`, [outputOf(listed, 500)]);
22
+ const copied = [];
23
+ // Asynchronous, so an included directory of any size doesn't hold up the daemon.
24
+ const copy = async (rel) => {
25
+ const to = join(target, rel);
26
+ mkdirSync(dirname(to), { recursive: true });
27
+ await cp(join(source, rel), to, { recursive: true });
28
+ copied.push(rel);
29
+ };
30
+ // Git can list a directory and also entries inside it (apps/, apps/api/, ...), parents first, so
31
+ // anything under a directory already copied or walked is skipped.
32
+ const handled = ['.claude/worktrees'];
33
+ for (const entry of listed.stdout.split('\0').filter(Boolean)) {
34
+ const isDir = entry.endsWith('/');
35
+ const rel = isDir ? entry.slice(0, -1) : entry;
36
+ if (handled.some((dir) => rel === dir || rel.startsWith(`${dir}/`)))
37
+ continue;
38
+ if (isIncluded(patterns, rel, isDir))
39
+ await copy(rel);
40
+ else if (isDir)
41
+ for (const file of walkAnchored(patterns, source, rel))
42
+ await copy(file);
43
+ if (isDir)
44
+ handled.push(rel);
45
+ }
46
+ return copied;
47
+ }
48
+ export function includePatterns(file) {
49
+ if (!existsSync(file))
50
+ return [];
51
+ return readFileSync(file, 'utf8')
52
+ .split(/\r?\n/)
53
+ .map((line) => line.trim())
54
+ .filter((line) => line && !line.startsWith('#'))
55
+ .map((line) => {
56
+ const negated = line.startsWith('!');
57
+ let pattern = negated ? line.slice(1) : line;
58
+ const dirOnly = pattern.endsWith('/');
59
+ if (dirOnly)
60
+ pattern = pattern.slice(0, -1);
61
+ const anchored = pattern.includes('/');
62
+ if (pattern.startsWith('/'))
63
+ pattern = pattern.slice(1);
64
+ return { anchored, dirOnly, glob: anchored ? pattern : `**/${pattern}`, negated };
65
+ });
66
+ }
67
+ export function isIncluded(patterns, rel, isDir) {
68
+ const parts = rel.split('/');
69
+ for (let i = 1; i < parts.length; i++)
70
+ if (matchesLast(patterns, parts.slice(0, i).join('/'), true))
71
+ return true;
72
+ return matchesLast(patterns, rel, isDir);
73
+ }
74
+ function matchesLast(patterns, rel, isDir) {
75
+ let result = false;
76
+ for (const p of patterns) {
77
+ if (p.dirOnly && !isDir)
78
+ continue;
79
+ if (matchesGlob(rel, p.glob))
80
+ result = !p.negated;
81
+ }
82
+ return result;
83
+ }
84
+ function* walkAnchored(patterns, source, dir) {
85
+ if (!patterns.some((p) => p.anchored && !p.negated && p.glob.startsWith(`${dir}/`)))
86
+ return;
87
+ for (const entry of readdirSync(join(source, dir), { recursive: true, withFileTypes: true })) {
88
+ if (!entry.isFile())
89
+ continue;
90
+ const rel = relative(source, join(entry.parentPath, entry.name)).split('\\').join('/');
91
+ if (isIncluded(patterns, rel, false))
92
+ yield rel;
93
+ }
94
+ }
95
+ //# sourceMappingURL=local-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-files.js","sourceRoot":"","sources":["../src/local-files.ts"],"names":[],"mappings":"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"}