@detergent-software/conductor 3.0.0-dev.9 → 3.0.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.
Files changed (210) hide show
  1. package/CHANGELOG.md +475 -0
  2. package/README.md +271 -125
  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 +41 -14
  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/cli.js +221 -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 +172 -40
  16. package/build/code-host-cli.js.map +1 -1
  17. package/build/code-host-service.js +35 -2
  18. package/build/code-host-service.js.map +1 -1
  19. package/build/code-host.js +138 -16
  20. package/build/code-host.js.map +1 -1
  21. package/build/conditions.js +33 -16
  22. package/build/conditions.js.map +1 -1
  23. package/build/config.js +58 -28
  24. package/build/config.js.map +1 -1
  25. package/build/console.js +17 -27
  26. package/build/console.js.map +1 -1
  27. package/build/credentials.js +86 -54
  28. package/build/credentials.js.map +1 -1
  29. package/build/daemon.js +53 -65
  30. package/build/daemon.js.map +1 -1
  31. package/build/file-lock.js +155 -40
  32. package/build/file-lock.js.map +1 -1
  33. package/build/follow-ups.js +2 -2
  34. package/build/follow-ups.js.map +1 -1
  35. package/build/help.js +241 -83
  36. package/build/help.js.map +1 -1
  37. package/build/history.js +10 -4
  38. package/build/history.js.map +1 -1
  39. package/build/host/credential-manager.js +109 -0
  40. package/build/host/credential-manager.js.map +1 -0
  41. package/build/host/keychain.js +44 -0
  42. package/build/host/keychain.js.map +1 -0
  43. package/build/host/launchd.js +118 -0
  44. package/build/host/launchd.js.map +1 -0
  45. package/build/host/libsecret.js +40 -0
  46. package/build/host/libsecret.js.map +1 -0
  47. package/build/host/macos-terminal.js +63 -0
  48. package/build/host/macos-terminal.js.map +1 -0
  49. package/build/host/platform.js +4 -0
  50. package/build/host/platform.js.map +1 -0
  51. package/build/host/secrets.js +46 -0
  52. package/build/host/secrets.js.map +1 -0
  53. package/build/host/shell.js +26 -0
  54. package/build/host/shell.js.map +1 -0
  55. package/build/host/startup.js +26 -0
  56. package/build/host/startup.js.map +1 -0
  57. package/build/host/systemd.js +91 -0
  58. package/build/host/systemd.js.map +1 -0
  59. package/build/host/task-scheduler.js +78 -0
  60. package/build/host/task-scheduler.js.map +1 -0
  61. package/build/host/terminal.js +46 -0
  62. package/build/host/terminal.js.map +1 -0
  63. package/build/host/tmux.js +39 -0
  64. package/build/host/tmux.js.map +1 -0
  65. package/build/host/windows-terminal.js +46 -0
  66. package/build/host/windows-terminal.js.map +1 -0
  67. package/build/in-process.js +5 -4
  68. package/build/in-process.js.map +1 -1
  69. package/build/inbox.js +47 -35
  70. package/build/inbox.js.map +1 -1
  71. package/build/init.js +509 -0
  72. package/build/init.js.map +1 -0
  73. package/build/landing.js +107 -10
  74. package/build/landing.js.map +1 -1
  75. package/build/lib/providers/ado/code-host.js +5 -1
  76. package/build/lib/providers/ado/code-host.js.map +1 -1
  77. package/build/lib/providers/ado/pipelines.js +138 -26
  78. package/build/lib/providers/ado/pipelines.js.map +1 -1
  79. package/build/lib/providers/ado/trigger.js +5 -0
  80. package/build/lib/providers/ado/trigger.js.map +1 -1
  81. package/build/lib/providers/ado/writes.js +17 -2
  82. package/build/lib/providers/ado/writes.js.map +1 -1
  83. package/build/lib/providers/github/actions.js +90 -3
  84. package/build/lib/providers/github/actions.js.map +1 -1
  85. package/build/lib/providers/github/code-host.js +2 -0
  86. package/build/lib/providers/github/code-host.js.map +1 -1
  87. package/build/lib/providers/github/writes.js +25 -2
  88. package/build/lib/providers/github/writes.js.map +1 -1
  89. package/build/lib/providers/index.js +3 -2
  90. package/build/lib/providers/index.js.map +1 -1
  91. package/build/lib/providers/npm/stage.js +14 -1
  92. package/build/lib/providers/npm/stage.js.map +1 -1
  93. package/build/lib/providers/timing.js +10 -0
  94. package/build/lib/providers/timing.js.map +1 -0
  95. package/build/lib/providers/verdicts/pr.js +47 -6
  96. package/build/lib/providers/verdicts/pr.js.map +1 -1
  97. package/build/lib/providers/verdicts/runs.js +12 -2
  98. package/build/lib/providers/verdicts/runs.js.map +1 -1
  99. package/build/logins.js +13 -6
  100. package/build/logins.js.map +1 -1
  101. package/build/manager.js +121 -55
  102. package/build/manager.js.map +1 -1
  103. package/build/note.js +5 -15
  104. package/build/note.js.map +1 -1
  105. package/build/notes.js +130 -23
  106. package/build/notes.js.map +1 -1
  107. package/build/notify.js +104 -42
  108. package/build/notify.js.map +1 -1
  109. package/build/npm-reads.js +151 -22
  110. package/build/npm-reads.js.map +1 -1
  111. package/build/ownership.js +2 -2
  112. package/build/paths.js +44 -1
  113. package/build/paths.js.map +1 -1
  114. package/build/plugin.js +4 -2
  115. package/build/plugin.js.map +1 -1
  116. package/build/profile-fields.js +153 -0
  117. package/build/profile-fields.js.map +1 -0
  118. package/build/profile-layers.js +264 -0
  119. package/build/profile-layers.js.map +1 -0
  120. package/build/profile.js +69 -49
  121. package/build/profile.js.map +1 -1
  122. package/build/project-check-cli.js +17 -19
  123. package/build/project-check-cli.js.map +1 -1
  124. package/build/project-check.js +166 -104
  125. package/build/project-check.js.map +1 -1
  126. package/build/protocol.js +5 -21
  127. package/build/protocol.js.map +1 -1
  128. package/build/pushover.js +5 -5
  129. package/build/pushover.js.map +1 -1
  130. package/build/queue.js +4 -4
  131. package/build/queue.js.map +1 -1
  132. package/build/registry.js +195 -36
  133. package/build/registry.js.map +1 -1
  134. package/build/release-kinds.js +34 -0
  135. package/build/release-kinds.js.map +1 -0
  136. package/build/rule-actions.js +8 -6
  137. package/build/rule-actions.js.map +1 -1
  138. package/build/rules-service.js +83 -44
  139. package/build/rules-service.js.map +1 -1
  140. package/build/rules.js +23 -23
  141. package/build/rules.js.map +1 -1
  142. package/build/run.js +20 -7
  143. package/build/run.js.map +1 -1
  144. package/build/runs.js +218 -68
  145. package/build/runs.js.map +1 -1
  146. package/build/scheduler.js +78 -12
  147. package/build/scheduler.js.map +1 -1
  148. package/build/search.js +2 -1
  149. package/build/search.js.map +1 -1
  150. package/build/server.js +51 -14
  151. package/build/server.js.map +1 -1
  152. package/build/spend.js +1 -1
  153. package/build/spend.js.map +1 -1
  154. package/build/store.js +79 -20
  155. package/build/store.js.map +1 -1
  156. package/build/supervise.js +1 -1
  157. package/build/supervise.js.map +1 -1
  158. package/build/timeline.js +104 -0
  159. package/build/timeline.js.map +1 -0
  160. package/build/tracker-reads-cli.js +4 -3
  161. package/build/tracker-reads-cli.js.map +1 -1
  162. package/build/trackers.js +56 -10
  163. package/build/trackers.js.map +1 -1
  164. package/build/train-cli.js +6 -5
  165. package/build/train-cli.js.map +1 -1
  166. package/build/train.js +2 -2
  167. package/build/train.js.map +1 -1
  168. package/build/upgrade.js +8 -9
  169. package/build/upgrade.js.map +1 -1
  170. package/build/wait.js +10 -10
  171. package/build/wait.js.map +1 -1
  172. package/build/watchers/ado.js +42 -19
  173. package/build/watchers/ado.js.map +1 -1
  174. package/build/watchers/github.js +18 -4
  175. package/build/watchers/github.js.map +1 -1
  176. package/build/watchers/index.js +2 -2
  177. package/build/watchers/index.js.map +1 -1
  178. package/build/watchers/linear-queue.js +47 -14
  179. package/build/watchers/linear-queue.js.map +1 -1
  180. package/build/watchers/linear-writes.js +26 -12
  181. package/build/watchers/linear-writes.js.map +1 -1
  182. package/build/watchers/linear.js +2 -2
  183. package/build/watchers/linear.js.map +1 -1
  184. package/build/watchers/source.js +5 -1
  185. package/build/watchers/source.js.map +1 -1
  186. package/build/webhook.js +80 -0
  187. package/build/webhook.js.map +1 -0
  188. package/build/why.js +1 -1
  189. package/build/why.js.map +1 -1
  190. package/build/worktrees.js +56 -93
  191. package/build/worktrees.js.map +1 -1
  192. package/package.json +61 -61
  193. package/plugin/.claude-plugin/plugin.json +1 -1
  194. package/plugin/hooks/model.ts +46 -6
  195. package/plugin/hooks/register.tsx +41 -2
  196. package/plugin/skills/conductor-console/SKILL.md +26 -27
  197. package/plugin/skills/work-item/SKILL.md +58 -54
  198. package/plugin/skills/work-item/trackers/ado-boards.md +2 -2
  199. package/plugin/skills/work-item/trackers/github-issues.md +1 -1
  200. package/plugin/skills/work-item/trackers/linear.md +2 -2
  201. package/plugin/types/index.d.ts +1 -1
  202. package/protocol/PROTOCOL.md +3 -9
  203. package/build/checkout-sync.js +0 -249
  204. package/build/checkout-sync.js.map +0 -1
  205. package/build/credential.js +0 -66
  206. package/build/credential.js.map +0 -1
  207. package/build/startup.js +0 -92
  208. package/build/startup.js.map +0 -1
  209. package/build/tab.js +0 -32
  210. package/build/tab.js.map +0 -1
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"file-lock.js","sourceRoot":"","sources":["../src/file-lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClG,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAyB1C,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,OAAwB,EACxB,EACE,GAAG,GAAG,IAAI,CAAC,GAAG,EACd,MAAM,EACN,KAAK,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAO,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GACK;IAEhF,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAChC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,OAAO,CAAC,OAAO,SAAS,IAAI,OAAO,CAAC,CAAC;IAC7E,MAAM,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,EAAe,EAAE;QACxC,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAS,CAAC;QACxD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC;YACpE,IAAI,CAAC;gBACH,OAAO,EAAE,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YACjE,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IACF,mFAAmF;IACnF,MAAM,OAAO,GAAG,CAAC,IAAiB,EAAE,EAAE,CACpC,WAAW,CAAC,IAAI,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAClG,MAAM,IAAI,GAAG,GAAW,EAAE;QACxB,MAAM,IAAI,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,IAAI,UAAU,EAAE,EAAE,CAAC;QACtD,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAClF,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,GAAS,EAAE;QACxB,MAAM,IAAI,GAAG,IAAI,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,+BAA+B;QACvD,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC;IACF,iGAAiG;IACjG,0BAA0B;IAC1B,MAAM,UAAU,GAAG,CAAC,MAAY,EAAQ,EAAE;QACxC,MAAM,IAAI,GAAG,GAAG,IAAI,UAAU,UAAU,EAAE,EAAE,CAAC;QAC7C,IAAI,CAAC;YACH,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO;YAC/D,MAAM,KAAK,CAAC;QACd,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,KAAK,EAAE,KAAK,KAAK,MAAM,CAAC,KAAK,IAAI,KAAK,EAAE,EAAE,KAAK,MAAM,CAAC,EAAE,EAAE,CAAC;YAC7D,IAAI,CAAC;gBACH,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACvB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;oBAAE,MAAM,KAAK,CAAC;YACtE,CAAC;QACH,CAAC;QACD,UAAU,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC,CAAC;IAEF,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,IAAI,EAAE,CAAC;QACpB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAC/G,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,MAAM,KAAK,MAAM;YAAE,UAAU,CAAC,IAAI,CAAC,CAAC;QACxC,OAAO;YACL,IAAI,EAAE,IAAI;YACV,QAAQ,EAAE,MAAM,KAAK,MAAM;YAC3B,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACrF,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC;IACnD,SAAS,CAAC;QACR,MAAM,IAAI,GAAG,IAAI,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,UAAU,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;YACzB,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QAChE,CAAC;QACD,IAAI,MAAM,KAAK,OAAO,IAAI,IAAI,EAAE,CAAC;YAC/B,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,SAAS,CAAC,gDAAgD;QAC5D,CAAC;QACD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC;gBACT,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;YAC/C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;oBAAE,MAAM,KAAK,CAAC;gBACpE,SAAS,CAAC,qDAAqD;YACjE,CAAC;QACH,CAAC;QACD,IAAI,GAAG,EAAE,IAAI,KAAK;YAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC;QACjH,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"file-lock.js","sourceRoot":"","sources":["../src/file-lock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,MAAM,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,IAAI,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAwCjD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,OAAwB,EACxB,EACE,EAAE,GAAG,MAAM,EACX,GAAG,GAAG,IAAI,CAAC,GAAG,EACd,MAAM,EACN,iBAAiB,GAAG,mBAAmB,EACvC,KAAK,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAO,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAO1E;IAED,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC;IACvF,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAChC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,OAAO,CAAC,OAAO,SAAS,IAAI,OAAO,CAAC,CAAC;IAC7E,MAAM,IAAI,GAAG,GAAgB,EAAE;QAC7B,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAS,CAAC;QACxD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,SAAS,CAAC,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YAClC,IAAI,CAAC;gBACH,OAAO,EAAE,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YACjE,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IACF,mFAAmF;IACnF,MAAM,OAAO,GAAG,CAAC,IAAiB,EAAE,EAAE,CACpC,WAAW,CAAC,IAAI,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAClG,4FAA4F;IAC5F,MAAM,QAAQ,GAAG,CAAC,IAAU,EAAU,EAAE,CACtC,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACrD,CAAC,CAAC,IAAI,CAAC,EAAE;QACT,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC;aACjB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;aAC7C,MAAM,CAAC,KAAK,CAAC;aACb,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACtB,MAAM,IAAI,GAAG,CAAC,KAAkB,EAAE,MAAY,EAAW,EAAE,CAAC,KAAK,KAAK,IAAI,IAAI,QAAQ,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC;IACnH,mGAAmG;IACnG,kGAAkG;IAClG,sBAAsB;IACtB,MAAM,OAAO,GAAG,CAAC,IAAY,EAAQ,EAAE;QACrC,IAAI,CAAC;YACH,UAAU,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,MAAM,KAAK,CAAC;QACzD,CAAC;IACH,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,GAAW,EAAE;QACxB,MAAM,IAAI,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,IAAI,UAAU,EAAE,EAAE,CAAC;QACtD,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QACpG,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,GAAS,EAAE;QACxB,MAAM,IAAI,GAAG,IAAI,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,+BAA+B;QACvD,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC;IACF,6FAA6F;IAC7F,8DAA8D;IAC9D,MAAM,KAAK,GAAG,CAAC,IAAU,EAAuB,EAAE;QAChD,MAAM,IAAI,GAAG,GAAG,IAAI,UAAU,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;YACvC,MAAM,IAAI,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,IAAI,UAAU,EAAE,EAAE,CAAC;YACtD,aAAa,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACxB,IAAI,CAAC;gBACH,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBACrB,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC;oBAAE,MAAM,KAAK,CAAC;YAC7C,CAAC;oBAAS,CAAC;gBACT,OAAO,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC;YACD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IACF,mGAAmG;IACnG,mBAAmB;IACnB,MAAM,SAAS,GAAG,CAAC,IAAY,EAAW,EAAE;QAC1C,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,GAAG,kBAAkB,CAAC;QAClE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,SAAS,CAAC,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YAClC,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC;IACF,iGAAiG;IACjG,+DAA+D;IAC/D,MAAM,MAAM,GAAG,GAAS,EAAE;QACxB,MAAM,IAAI,GAAG,GAAG,IAAI,SAAS,UAAU,EAAE,EAAE,CAAC;QAC5C,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACvB,OAAO,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC,CAAC;IAEF,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,IAAI,EAAE,CAAC;QACpB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAC/G,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACjC,qEAAqE;QACrE,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,kBAAkB,GAAG,iBAAiB,CAAC;QACzE,SAAS,CAAC;YACR,MAAM,IAAI,GAAG,IAAI,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;YAC7B,IAAI,MAAM,KAAK,MAAM,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBACvC,OAAO;oBACL,IAAI,EAAE,IAAI;oBACV,QAAQ,EAAE,KAAK;oBACf,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACrF,CAAC;YACJ,CAAC;YACD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,CAAC;oBACH,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;wBACvB,MAAM,EAAE,CAAC;wBACT,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;oBACxC,CAAC;gBACH,CAAC;wBAAS,CAAC;oBACT,OAAO,EAAE,CAAC;gBACZ,CAAC;gBACD,SAAS,CAAC,4EAA4E;YACxF,CAAC;YACD,mFAAmF;YACnF,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,YAAY;gBAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;YAC3F,MAAM,KAAK,CAAC,eAAe,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC;IACnD,IAAI,YAAY,GAAkB,IAAI,CAAC;IACvC,SAAS,CAAC;QACR,MAAM,IAAI,GAAG,IAAI,EAAE,CAAC;QACpB,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,MAAM,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,CAAC;oBACH,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC;wBAAE,SAAS,CAAC,2CAA2C;oBAC9E,MAAM,IAAI,GAAG,IAAI,EAAE,CAAC;oBACpB,IAAI,CAAC;wBACH,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;wBACvB,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;oBAChE,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,IAAI,CAAC;4BACH,UAAU,CAAC,IAAI,CAAC,CAAC;wBACnB,CAAC;wBAAC,MAAM,CAAC;4BACP,0CAA0C;wBAC5C,CAAC;wBACD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;4BAAE,MAAM,KAAK,CAAC;oBACpC,CAAC;gBACH,CAAC;wBAAS,CAAC;oBACT,OAAO,EAAE,CAAC;gBACZ,CAAC;YACH,CAAC;YACD,oFAAoF;YACpF,YAAY,KAAK,IAAI,CAAC,GAAG,EAAE,GAAG,iBAAiB,CAAC;YAChD,gFAAgF;YAChF,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,YAAY;gBAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;YAC/G,MAAM,KAAK,CAAC,eAAe,CAAC,CAAC;YAC7B,SAAS,CAAC,oEAAoE;QAChF,CAAC;QACD,IAAI,MAAM,KAAK,OAAO,IAAI,IAAI,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,CAAC;oBACH,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC;wBAAE,MAAM,EAAE,CAAC;gBACnC,CAAC;wBAAS,CAAC;oBACT,OAAO,EAAE,CAAC;gBACZ,CAAC;gBACD,SAAS,CAAC,gDAAgD;YAC5D,CAAC;YACD,2DAA2D;QAC7D,CAAC;QACD,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YACtB,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC;gBACT,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;YAC/C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC;oBAAE,MAAM,KAAK,CAAC;gBAC3C,SAAS,CAAC,qDAAqD;YACjE,CAAC;QACH,CAAC;QACD,IAAI,GAAG,EAAE,IAAI,KAAK;YAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC;QACjH,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAED,oGAAoG;AACpG,8FAA8F;AAC9F,gGAAgG;AAChG,iGAAiG;AACjG,sFAAsF;AACtF,MAAM,mBAAmB,GAAG,IAAI,CAAC;AACjC,MAAM,eAAe,GAAG,EAAE,CAAC;AAC3B,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAElC,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC5D,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { ConductorError } from "./errors.js";
2
2
  import { itemKey } from "./ownership.js";
3
- import { trackerKey } from "./profile.js";
3
+ import { hasAreas, trackerKey } from "./profile.js";
4
4
  import { ACTIVE_STATUSES } from "./store.js";
5
5
  import { uniqueKeys } from "./tracker-writes.js";
6
6
  // The follow-up of `item` that the request asks for, refused when a key isn't one of the project's
@@ -17,7 +17,7 @@ export function followUpOf(request, item, profile) {
17
17
  const area = request.area.trim();
18
18
  if (title === '')
19
19
  throw new ConductorError('a follow-up needs a --title');
20
- if (area === '')
20
+ if (area === '' && hasAreas(profile))
21
21
  throw new ConductorError("a follow-up needs an --area, one of the tracker's Areas");
22
22
  if (request.body.trim() === '')
23
23
  throw new ConductorError("a follow-up's --body-file is empty");
@@ -1 +1 @@
1
- {"version":3,"file":"follow-ups.js","sourceRoot":"","sources":["../src/follow-ups.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"follow-ups.js","sourceRoot":"","sources":["../src/follow-ups.ts"],"names":[],"mappings":"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"}