@detergent-software/conductor 3.0.0-dev.14 → 3.0.0-dev.16

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 (61) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +59 -20
  3. package/build/brief-cli.js +1 -1
  4. package/build/brief-cli.js.map +1 -1
  5. package/build/broker-cli.js +7 -6
  6. package/build/broker-cli.js.map +1 -1
  7. package/build/cli.js +69 -17
  8. package/build/cli.js.map +1 -1
  9. package/build/clones.js +92 -0
  10. package/build/clones.js.map +1 -0
  11. package/build/code-host-cli.js +17 -18
  12. package/build/code-host-cli.js.map +1 -1
  13. package/build/config.js +5 -7
  14. package/build/config.js.map +1 -1
  15. package/build/daemon.js +16 -17
  16. package/build/daemon.js.map +1 -1
  17. package/build/help.js +68 -10
  18. package/build/help.js.map +1 -1
  19. package/build/in-process.js +5 -4
  20. package/build/in-process.js.map +1 -1
  21. package/build/inbox.js +14 -4
  22. package/build/inbox.js.map +1 -1
  23. package/build/init.js +508 -0
  24. package/build/init.js.map +1 -0
  25. package/build/manager.js +42 -31
  26. package/build/manager.js.map +1 -1
  27. package/build/note.js +1 -1
  28. package/build/note.js.map +1 -1
  29. package/build/paths.js +44 -1
  30. package/build/paths.js.map +1 -1
  31. package/build/profile-layers.js +264 -0
  32. package/build/profile-layers.js.map +1 -0
  33. package/build/profile.js +3 -18
  34. package/build/profile.js.map +1 -1
  35. package/build/project-check-cli.js +14 -9
  36. package/build/project-check-cli.js.map +1 -1
  37. package/build/project-check.js +81 -86
  38. package/build/project-check.js.map +1 -1
  39. package/build/registry.js +195 -36
  40. package/build/registry.js.map +1 -1
  41. package/build/rules-service.js +80 -41
  42. package/build/rules-service.js.map +1 -1
  43. package/build/rules.js +1 -1
  44. package/build/rules.js.map +1 -1
  45. package/build/server.js +3 -5
  46. package/build/server.js.map +1 -1
  47. package/build/store.js +46 -15
  48. package/build/store.js.map +1 -1
  49. package/build/tracker-reads-cli.js +4 -3
  50. package/build/tracker-reads-cli.js.map +1 -1
  51. package/build/train-cli.js +6 -5
  52. package/build/train-cli.js.map +1 -1
  53. package/build/wait.js +6 -6
  54. package/build/wait.js.map +1 -1
  55. package/build/worktrees.js +53 -90
  56. package/build/worktrees.js.map +1 -1
  57. package/package.json +1 -1
  58. package/plugin/skills/conductor-console/SKILL.md +1 -1
  59. package/plugin/skills/work-item/SKILL.md +1 -1
  60. package/build/checkout-sync.js +0 -249
  61. package/build/checkout-sync.js.map +0 -1
package/build/registry.js CHANGED
@@ -1,40 +1,199 @@
1
- import { existsSync, realpathSync } from 'node:fs';
2
- import { basename, dirname, join, resolve } from 'node:path';
1
+ import { existsSync, mkdirSync, readdirSync, renameSync, rmSync, statSync } from 'node:fs';
2
+ import { dirname, isAbsolute, join, resolve } from 'node:path';
3
3
  import { ConductorError } from "./errors.js";
4
- import { PROFILE_FILE, readProfile } from "./profile.js";
5
- // The checkout a path is in (a worktree's own directory, or the main checkout) and the project's
6
- // main checkout, found as projectRoot says.
7
- export function checkoutOf(path) {
8
- let start;
4
+ import { PROJECT_NAME, projectPaths, samePath } from "./paths.js";
5
+ import { gitSync, projectProfile, repoLayerAt } from "./profile-layers.js";
6
+ import { outputOf, run } from "./run.js";
7
+ const gitRun = (args, cwd) => run('git', args, { cwd, timeoutMs: 30 * 60_000 });
8
+ // A clone in the making, <projects>/.adding-<time>, until it has its name. One an hour old is left by
9
+ // an add that was stopped.
10
+ const STAGING = '.adding-';
11
+ const STALE_STAGING_MS = 60 * 60_000;
12
+ // How long the move into place waits for a scanner (Defender, the indexer) to let go of a new clone.
13
+ const MOVE_MS = 30_000;
14
+ // Clones the project's remote into <home>/projects/<name>/repo, or fetches the clone that is there.
15
+ // The name is `name`, else the one the repo's .claude/conductor.json gives on its base branch. It
16
+ // clones into a staging folder first, so a clone that fails part way leaves no project folder.
17
+ export async function cloneProject(paths, source, options = {}) {
18
+ const git = options.git ?? gitRun;
19
+ const say = options.say ?? (() => { });
20
+ if (options.name !== undefined && !PROJECT_NAME.test(options.name))
21
+ throw new ConductorError(`"${options.name}" is not a project name`, [
22
+ 'lowercase letters, digits and dashes, starting with a letter',
23
+ ]);
24
+ const url = await remoteOf(git, source);
25
+ // A project added again: its clone is found by its name, or without one by its origin, so the
26
+ // repo isn't cloned again only to read the name.
27
+ const name = options.name ?? (await cloneOf(git, paths, url));
28
+ if (name !== null) {
29
+ const kept = await reuse(git, paths, name, url);
30
+ if (kept)
31
+ return kept;
32
+ }
33
+ mkdirSync(paths.projects, { recursive: true });
34
+ const at = (options.now ?? (() => new Date()))().getTime();
35
+ sweepStaging(paths, at);
36
+ const staging = join(paths.projects, `${STAGING}${at}`);
37
+ say(`cloning ${url} …`);
38
+ // Long paths: a worktree's node_modules passes 260 characters on Windows.
39
+ const cloned = await git(['clone', '--quiet', '-c', 'core.longpaths=true', url, staging], paths.projects);
40
+ if (cloned.code !== 0) {
41
+ rmSync(staging, { force: true, recursive: true });
42
+ throw new ConductorError(`git clone ${url} failed`, [outputOf(cloned, 1500)]);
43
+ }
44
+ let named;
45
+ let kept;
9
46
  try {
10
- start = realpathSync.native(resolve(path));
11
- }
12
- catch {
13
- throw new ConductorError(`${path} does not exist`);
14
- }
15
- for (let dir = start;; dir = dirname(dir)) {
16
- const parent = dirname(dir);
17
- if (basename(parent) === 'worktrees' && basename(dirname(parent)) === '.claude')
18
- return { checkout: dir, root: dirname(dirname(parent)) };
19
- if (existsSync(join(dir, PROFILE_FILE)))
20
- return { checkout: dir, root: dir };
21
- if (parent === dir)
22
- return { checkout: start, root: start };
23
- }
24
- }
25
- // A project is registered by its main checkout. From the given path this walks up, the way git
26
- // finds .git, to the first directory that holds .claude/conductor.json. A worktree at
27
- // <root>/.claude/worktrees/<name> belongs to <root>, the way scripts/dev-ports.mjs resolves it, so
28
- // `conduct project add .` works from any directory of any checkout. With no profile on the way up,
29
- // the given directory is the answer, and reading its profile says what is missing.
30
- export function projectRoot(path) {
31
- return checkoutOf(path).root;
32
- }
33
- // `check` refuses a profile before it is stored: the daemon checks its rules against config.json.
34
- export function registerProject(store, path, check = () => { }) {
35
- const root = projectRoot(path);
36
- const { path: profilePath, profile } = readProfile(root);
37
- check(profile, profilePath);
38
- return store.upsertProject({ profile, profilePath, root });
47
+ named = name ?? repoName(options.gitSync ?? gitSync, staging, url);
48
+ // The name the repo gives may be a project's cloned from another remote: refused, as by name.
49
+ kept = name === null ? await reuse(git, paths, named, url) : null;
50
+ }
51
+ catch (error) {
52
+ rmSync(staging, { force: true, recursive: true });
53
+ throw error;
54
+ }
55
+ if (kept) {
56
+ rmSync(staging, { force: true, recursive: true });
57
+ return kept;
58
+ }
59
+ const { clone } = projectPaths(paths, named);
60
+ mkdirSync(dirname(clone), { recursive: true });
61
+ await moveInto(staging, clone, options.sleep);
62
+ return { clone, cloned: true, name: named, url };
63
+ }
64
+ // A row from before clones names the person's checkout it was registered by: the daemon conducts
65
+ // only its own clone, so it conducts this one no longer until it is added again.
66
+ export function registeredByCheckout(paths, project) {
67
+ return !samePath(project.clone, projectPaths(paths, project.name).clone);
68
+ }
69
+ // Registers the project whose clone is <home>/projects/<name>/repo: its layered profile, which
70
+ // `check` may refuse before anything is stored (the daemon checks its rules against config.json).
71
+ // A registered name is updated in place, so its inbox, items and workers stay.
72
+ export function registerProject(store, paths, name, check = () => { }, git = gitSync) {
73
+ if (!PROJECT_NAME.test(name))
74
+ throw new ConductorError(`"${name}" is not a project name`);
75
+ const { clone } = projectPaths(paths, name);
76
+ if (!existsSync(join(clone, '.git')))
77
+ throw new ConductorError(`${name} has no clone at ${clone}`, ['add it with `conduct project add <url | path>`']);
78
+ const layered = projectProfile(paths, name, git);
79
+ check(layered);
80
+ const origin = git(['remote', 'get-url', 'origin'], clone);
81
+ return store.upsertProject(stored(paths, name, layered, origin.code === 0 ? origin.stdout.trim() || null : null));
82
+ }
83
+ // Whether two remote URLs name the same repo: case, a URL's user (Azure DevOps puts the
84
+ // organization there, https://org@dev.azure.com/…), and a trailing .git or slash aside.
85
+ export function sameRemote(a, b) {
86
+ const norm = (url) => url
87
+ .trim()
88
+ .replace(/^([a-z][a-z0-9+.-]*:\/\/)[^@/]+@/i, '$1')
89
+ .replace(/\/+$/, '')
90
+ .replace(/\.git$/i, '')
91
+ .toLowerCase();
92
+ return norm(a) === norm(b);
93
+ }
94
+ // What the store keeps of a project's resolved profile. The url is the clone's origin.
95
+ export function stored(paths, name, { profile, sources }, url) {
96
+ const { clone, profile: profilePath } = projectPaths(paths, name);
97
+ return { clone, profile, profilePath, sources, url };
98
+ }
99
+ // The project whose clone has `url` as its origin, or null.
100
+ async function cloneOf(git, paths, url) {
101
+ if (!existsSync(paths.projects))
102
+ return null;
103
+ for (const entry of readdirSync(paths.projects, { withFileTypes: true })) {
104
+ if (!entry.isDirectory() || !PROJECT_NAME.test(entry.name))
105
+ continue;
106
+ const { clone } = projectPaths(paths, entry.name);
107
+ if (!existsSync(join(clone, '.git')))
108
+ continue;
109
+ const origin = await git(['remote', 'get-url', 'origin'], clone);
110
+ if (origin.code === 0 && sameRemote(origin.stdout, url))
111
+ return entry.name;
112
+ }
113
+ return null;
114
+ }
115
+ // Renames the staging folder into place, again while something still holds a file in it. A
116
+ // failure leaves the clone in staging, where the message points.
117
+ async function moveInto(staging, clone, sleep = (ms) => new Promise((done) => setTimeout(done, ms))) {
118
+ for (let waited = 0;; waited += 1000) {
119
+ try {
120
+ renameSync(staging, clone);
121
+ return;
122
+ }
123
+ catch (error) {
124
+ if (waited >= MOVE_MS)
125
+ throw new ConductorError(`the clone couldn't be moved to ${clone}`, [
126
+ String(error),
127
+ `it is in ${staging}: move it there by hand, then run the add again`,
128
+ ]);
129
+ await sleep(1000);
130
+ }
131
+ }
132
+ }
133
+ // A path to a checkout gives its origin; anything else, a bare repository's path among them, is the
134
+ // URL itself.
135
+ async function remoteOf(git, source) {
136
+ const path = resolve(source);
137
+ if (!existsSync(path))
138
+ return source;
139
+ if (!statSync(path).isDirectory())
140
+ throw new ConductorError(`${path} is not a checkout`);
141
+ if ((await git(['rev-parse', '--is-bare-repository'], path)).stdout.trim() === 'true')
142
+ return source;
143
+ const origin = await git(['remote', 'get-url', 'origin'], path);
144
+ const url = origin.stdout.trim();
145
+ if (origin.code !== 0 || url === '')
146
+ throw new ConductorError(`${path} has no origin to clone from`, [
147
+ "the conductor clones the remote, never the folder: give the URL instead, or set the checkout's origin",
148
+ ]);
149
+ // A local path origin is the checkout's: as git reads it from there, not from where the clone runs.
150
+ const local = !/^[a-z][a-z0-9+.-]*:\/\//i.test(url) && !/^[^/\\]+@[^/\\:]+:/.test(url) && !isAbsolute(url);
151
+ return local ? resolve(path, url) : url;
152
+ }
153
+ // The name the repo's own profile gives, on its base branch, for a project added without --name.
154
+ function repoName(git, clone, url) {
155
+ const head = git(['symbolic-ref', '--short', 'refs/remotes/origin/HEAD'], clone);
156
+ const base = head.code === 0 ? head.stdout.trim().replace(/^origin\//, '') : '';
157
+ let layer = base === '' ? null : repoLayerAt(git, clone, base);
158
+ const named = typeof layer?.raw.baseBranch === 'string' ? layer.raw.baseBranch : null;
159
+ if (named !== null && named !== base)
160
+ layer = repoLayerAt(git, clone, named);
161
+ const name = layer?.raw.name;
162
+ if (typeof name === 'string' && PROJECT_NAME.test(name))
163
+ return name;
164
+ throw new ConductorError(`${url} has no .claude/conductor.json that names the project`, [
165
+ 'name it: conduct project add <url | path> --name <name>, with its profile in <home>/projects/<name>.json',
166
+ ]);
167
+ }
168
+ // The project's clone when it is there already: fetched, once its origin is the same remote. Null
169
+ // when there is none yet.
170
+ async function reuse(git, paths, name, url) {
171
+ const { clone } = projectPaths(paths, name);
172
+ if (!existsSync(clone))
173
+ return null;
174
+ // Git runs only in a repository of its own here, never in one that encloses the folder.
175
+ if (!existsSync(join(clone, '.git')))
176
+ throw new ConductorError(`${clone} is there but isn't a clone`, [
177
+ 'it may be left from an add that failed: look at what is in it, delete it, then add the project again',
178
+ ]);
179
+ const origin = await git(['remote', 'get-url', 'origin'], clone);
180
+ if (origin.code !== 0 || !sameRemote(origin.stdout, url)) {
181
+ throw new ConductorError(`${clone} is a clone of another remote`, [
182
+ `its origin is ${origin.stdout.trim() || '(none)'}, not ${url}`,
183
+ `add it under another --name, or remove ${name} (\`conduct project remove ${name}\`) and its folder first`,
184
+ ]);
185
+ }
186
+ const fetched = await git(['fetch', '--quiet', '--prune', 'origin'], clone);
187
+ if (fetched.code !== 0)
188
+ throw new ConductorError(`git fetch failed in ${clone}`, [outputOf(fetched, 1000)]);
189
+ return { clone, cloned: false, name, url: origin.stdout.trim() };
190
+ }
191
+ // Removes the staging folders of adds that were stopped part way.
192
+ function sweepStaging(paths, now) {
193
+ for (const entry of readdirSync(paths.projects)) {
194
+ const at = Number(entry.startsWith(STAGING) ? entry.slice(STAGING.length) : Number.NaN);
195
+ if (now - at > STALE_STAGING_MS)
196
+ rmSync(join(paths.projects, entry), { force: true, recursive: true });
197
+ }
39
198
  }
40
199
  //# sourceMappingURL=registry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAI7D,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAgB,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEvE,iGAAiG;AACjG,4CAA4C;AAC5C,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,IAAI,KAAa,CAAC;IAClB,IAAI,CAAC;QACH,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,cAAc,CAAC,GAAG,IAAI,iBAAiB,CAAC,CAAC;IACrD,CAAC;IACD,KAAK,IAAI,GAAG,GAAG,KAAK,GAAI,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,QAAQ,CAAC,MAAM,CAAC,KAAK,WAAW,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,SAAS;YAC7E,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QAC3D,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;QAC7E,IAAI,MAAM,KAAK,GAAG;YAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAC9D,CAAC;AACH,CAAC;AAED,+FAA+F;AAC/F,sFAAsF;AACtF,mGAAmG;AACnG,mGAAmG;AACnG,mFAAmF;AACnF,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;AAC/B,CAAC;AAED,kGAAkG;AAClG,MAAM,UAAU,eAAe,CAC7B,KAAY,EACZ,IAAY,EACZ,QAAkD,GAAG,EAAE,GAAE,CAAC;IAE1D,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IACzD,KAAK,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAC5B,OAAO,KAAK,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7D,CAAC"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,10 @@ import { BUILT_IN_PROFILES } from "./config.js";
5
5
  import { ConductorError, isMissing } from "./errors.js";
6
6
  import { issueLines, parseJsonc } from "./jsonc.js";
7
7
  import { overrideViewSchema } from "./overrides.js";
8
- import { ProfileTooNewError, readProfile } from "./profile.js";
8
+ import { projectPaths } from "./paths.js";
9
+ import { projectProfile } from "./profile-layers.js";
10
+ import { ProfileTooNewError } from "./profile.js";
11
+ import { registeredByCheckout, stored } from "./registry.js";
9
12
  import { rulesFileSchema } from "./rule-input.js";
10
13
  import { clockFields, compileRules, defaultRules, describeAction, EVENT_ATOMS, fieldOf, FIELDS, literal, scopeOf, SCOPES, selectRules, } from "./rules.js";
11
14
  const DEBOUNCE_MS = 250;
@@ -94,6 +97,7 @@ export function rulesService(deps) {
94
97
  const { config, paths } = deps;
95
98
  const now = deps.now ?? (() => new Date());
96
99
  const emit = deps.emit ?? (() => { });
100
+ const resolveProfile = deps.resolveProfile ?? ((name) => projectProfile(paths, name));
97
101
  const limits = {
98
102
  profiles: [...new Set([...Object.keys(BUILT_IN_PROFILES), ...Object.keys(config.notify.profiles)])].sort(),
99
103
  slots: config.scheduler.slots,
@@ -129,7 +133,7 @@ export function rulesService(deps) {
129
133
  // Compiles one source's rules into `sources`, keeping its last good rules when they're refused.
130
134
  // `onDisk` says that `read` read the file itself. A project's rules come from its stored profile,
131
135
  // so reading the same ones again says nothing about a refused file on disk: that refusal stays.
132
- const load = (key, file, origin, read, onDisk) => {
136
+ const load = (key, file, project, read, compile, onDisk) => {
133
137
  const previous = sources.get(key);
134
138
  let inputs;
135
139
  let rules;
@@ -138,12 +142,12 @@ export function rulesService(deps) {
138
142
  const parsed = rulesFileSchema.safeParse(inputs);
139
143
  if (!parsed.success)
140
144
  throw new ConductorError(`${file} is invalid`, issueLines(parsed.error));
141
- rules = compileRules(parsed.data, origin, limits);
145
+ rules = compile(parsed.data);
142
146
  }
143
147
  catch (error) {
144
148
  if (!(error instanceof ConductorError))
145
149
  throw error;
146
- reject(key, file, origin.project, error);
150
+ reject(key, file, project, error);
147
151
  return;
148
152
  }
149
153
  const text = JSON.stringify(inputs);
@@ -156,14 +160,29 @@ export function rulesService(deps) {
156
160
  // A first load says so only when there are rules; after that, any change or a cleared refusal.
157
161
  if (previous === undefined ? rules.length > 0 : previous.key !== text || refused !== null) {
158
162
  emit({
159
- data: { count: rules.length, file, project: origin.project },
163
+ data: { count: rules.length, file, project },
160
164
  kind: 'rules.loaded',
161
- project: origin.project,
165
+ project,
162
166
  });
163
167
  }
164
168
  };
169
+ // A project's rules in their layers (design note v2, section 7): its machine profile's first, so one
170
+ // shadows a repo rule with its id, then the repo's. Each layer is compiled on its own: the same id
171
+ // in both is the point, where one file may not use an id twice.
172
+ const projectRules = (name, inputs, layers, files) => [
173
+ ...compileRules(inputs.filter((_rule, i) => layers[i] === 'machine'), { file: files.machine, layer: 'machine', project: name, source: 'project' }, limits),
174
+ ...compileRules(inputs.filter((_rule, i) => layers[i] !== 'machine'), { file: files.repo, project: name, source: 'project' }, limits),
175
+ ];
176
+ // Where each layer's rules were read, for their refs' `file` and a refusal's message.
177
+ const filesOf = (project, layered) => {
178
+ const sourcesNow = layered?.sources ?? project.sources;
179
+ return {
180
+ machine: sourcesNow?.machine ?? projectPaths(paths, project.name).profile,
181
+ repo: sourcesNow?.repo ?? project.profilePath,
182
+ };
183
+ };
165
184
  const loadMachine = () => {
166
- load('machine', paths.rules, { file: paths.rules, project: null, source: 'machine' }, () => {
185
+ load('machine', paths.rules, null, () => {
167
186
  let text;
168
187
  try {
169
188
  text = readFileSync(paths.rules, 'utf8');
@@ -174,7 +193,7 @@ export function rulesService(deps) {
174
193
  throw new ConductorError(`could not read ${paths.rules}`, [String(error)]);
175
194
  }
176
195
  return parseJsonc(text, z.unknown(), paths.rules);
177
- }, true);
196
+ }, (inputs) => compileRules(inputs, { file: paths.rules, project: null, source: 'machine' }, limits), true);
178
197
  };
179
198
  const loadProjects = () => {
180
199
  const live = new Set();
@@ -188,7 +207,7 @@ export function rulesService(deps) {
188
207
  const { profile } = project;
189
208
  if (!profile)
190
209
  continue;
191
- load(key, project.profilePath, { file: project.profilePath, project: project.name, source: 'project' }, () => profile.rules, false);
210
+ load(key, project.profilePath, project.name, () => profile.rules, (inputs) => projectRules(project.name, inputs, project.sources?.rules ?? [], filesOf(project)), false);
192
211
  }
193
212
  for (const key of [...sources.keys()])
194
213
  if (key.startsWith('project:') && !live.has(key))
@@ -206,20 +225,26 @@ export function rulesService(deps) {
206
225
  rewatchProjects();
207
226
  };
208
227
  const all = () => [...[...sources.values()].flatMap((s) => s.rules), ...defaults];
209
- // A project's profile changed on disk: take the whole of it when it reads, keeps the registered
210
- // name and its rules load. Stored, it is in force for the scheduler, the watchers and the rest,
211
- // which read the store. Refused, the stored copy stays: the last good one, or one this build no
212
- // longer reads, which a good file then replaces. A project keeps the name it was registered under:
213
- // a second name would conduct it twice, so a rename removes the old registration, then adds the new.
228
+ // A project's profile changed (its machine file saved, or a fetch of its clone brought another
229
+ // repo layer): take the whole of it when it reads and its rules load. Stored, it is in force for
230
+ // the scheduler, the watchers and the rest, which read the store. Refused, the stored copy stays:
231
+ // the last good one, or one this build no longer reads, which a good profile then replaces.
214
232
  const refreshProject = (name) => {
215
233
  const project = deps.listProjects().find((p) => p.name === name);
216
234
  if (!project)
217
235
  return;
218
236
  const key = `project:${name}`;
219
- const origin = { file: project.profilePath, project: name, source: 'project' };
220
- let profile;
237
+ // Registered by a person's checkout before the daemon owned clones: unreadable until it is added
238
+ // again, so nothing launches from that checkout.
239
+ if (registeredByCheckout(paths, project)) {
240
+ reject(key, projectPaths(paths, name).profile, name, new ConductorError(`${name} is registered by the checkout ${project.clone}`, [
241
+ `the conductor conducts a clone of its own now, and never works in your checkout: run \`conduct project add "${project.clone}"\`, which clones its origin into ${projectPaths(paths, name).clone} and keeps the registration`,
242
+ ]), true);
243
+ return;
244
+ }
245
+ let layered;
221
246
  try {
222
- profile = readProfile(project.root).profile;
247
+ layered = resolveProfile(name);
223
248
  }
224
249
  catch (error) {
225
250
  if (!(error instanceof ConductorError))
@@ -227,14 +252,10 @@ export function rulesService(deps) {
227
252
  reject(key, project.profilePath, name, error, true);
228
253
  return;
229
254
  }
255
+ const { profile } = layered;
256
+ const files = filesOf(project, layered);
230
257
  try {
231
- if (profile.name !== name) {
232
- throw new ConductorError(`${project.profilePath} renames the project`, [
233
- `name: "${profile.name}" is not the registered "${name}"; a project keeps its name, so put "${name}" back`,
234
- `or rename it: \`conduct project remove ${name}\`, then \`conduct project add "${project.root}"\``,
235
- ]);
236
- }
237
- compileRules(profile.rules, origin, limits);
258
+ projectRules(name, profile.rules, layered.sources.rules, files);
238
259
  }
239
260
  catch (error) {
240
261
  if (!(error instanceof ConductorError))
@@ -242,29 +263,34 @@ export function rulesService(deps) {
242
263
  reject(key, project.profilePath, name, error);
243
264
  return;
244
265
  }
245
- if (JSON.stringify(profile) !== JSON.stringify(project.profile)) {
246
- deps.updateProject?.({ profile, profilePath: project.profilePath, root: project.root });
266
+ if (JSON.stringify(profile) !== JSON.stringify(project.profile) ||
267
+ JSON.stringify(layered.sources) !== JSON.stringify(project.sources)) {
268
+ deps.updateProject?.(stored(paths, name, layered, project.url));
247
269
  }
248
270
  // In force now, not only once the project.updated reload runs (and for a CLI that stores
249
- // nothing). A good file also clears its refusal.
250
- load(key, project.profilePath, origin, () => profile.rules, true);
271
+ // nothing). A good profile also clears its refusal.
272
+ load(key, project.profilePath, name, () => profile.rules, (inputs) => projectRules(name, inputs, layered.sources.rules, files), true);
251
273
  };
252
274
  // A profile that can't be read for another reason (a lock, a permission) is refused like a bad
253
275
  // one: that project stays on its stored profile, says so, and the others still load.
254
- const refreshProjects = () => {
255
- for (const project of deps.listProjects()) {
256
- if (!project.enabled)
257
- continue;
258
- try {
259
- refreshProject(project.name);
260
- }
261
- catch (error) {
262
- reject(`project:${project.name}`, project.profilePath, project.name, new ConductorError(`could not read ${project.profilePath}`, [String(error)]));
263
- }
276
+ const refreshSafely = (project) => {
277
+ try {
278
+ refreshProject(project.name);
279
+ }
280
+ catch (error) {
281
+ reject(`project:${project.name}`, project.profilePath, project.name, new ConductorError(`could not read ${project.name}'s profile`, [String(error)]));
264
282
  }
265
283
  };
266
- const checkProfile = (profile, file) => {
267
- compileRules(profile.rules, { file, project: profile.name, source: 'project' }, limits);
284
+ const refreshProjects = () => {
285
+ for (const project of deps.listProjects())
286
+ if (project.enabled)
287
+ refreshSafely(project);
288
+ };
289
+ const checkProfile = ({ profile, sources: layers }) => {
290
+ projectRules(profile.name, profile.rules, layers.rules, {
291
+ machine: layers.machine ?? projectPaths(paths, profile.name).profile,
292
+ repo: layers.repo ?? projectPaths(paths, profile.name).profile,
293
+ });
268
294
  };
269
295
  const later = (key, action) => {
270
296
  clearTimeout(timers.get(key));
@@ -314,9 +340,17 @@ export function rulesService(deps) {
314
340
  };
315
341
  const view = () => {
316
342
  const rules = all();
343
+ // A project's machine-profile rule comes before its repo rules, so it replaces a later one
344
+ // with its id (selectRules' order).
317
345
  const replacedBy = (rule) => {
318
- if (rule.id === null || rule.source === 'project')
346
+ if (rule.id === null)
319
347
  return [];
348
+ if (rule.source === 'project') {
349
+ const at = rules.indexOf(rule);
350
+ return rules
351
+ .filter((r, i) => r.source === 'project' && r.project === rule.project && r.id === rule.id && i < at)
352
+ .map((r) => r.ref);
353
+ }
320
354
  return rules
321
355
  .filter((r) => r.id === rule.id &&
322
356
  r !== rule &&
@@ -373,6 +407,11 @@ export function rulesService(deps) {
373
407
  const source = sources.get(`project:${project}`);
374
408
  return source?.unreadable ? source.rejected : null;
375
409
  },
410
+ refresh: (name) => {
411
+ const project = deps.listProjects().find((p) => p.name === name && p.enabled);
412
+ if (project)
413
+ refreshSafely(project);
414
+ },
376
415
  reload,
377
416
  rules: all,
378
417
  // The first load is here, not at construction, so the daemon's inbox already listens for a
@@ -1 +1 @@
1
- {"version":3,"file":"rules-service.js","sourceRoot":"","sources":["../src/rules-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rules-service.js","sourceRoot":"","sources":["../src/rules-service.ts"],"names":[],"mappings":"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"}
package/build/rules.js CHANGED
@@ -869,7 +869,7 @@ function compileRule(input, index, origin, limits) {
869
869
  index,
870
870
  note: input.note ?? null,
871
871
  project: origin.project,
872
- ref: `${origin.source === 'project' ? `project.${origin.project ?? '?'}` : origin.source}:${key}`,
872
+ ref: `${origin.source === 'project' ? `project.${origin.project ?? '?'}${origin.layer === 'machine' ? '.machine' : ''}` : origin.source}:${key}`,
873
873
  scope,
874
874
  source: origin.source,
875
875
  text: { do: does, when: input.when ?? null },