@detergent-software/conductor 3.0.0-dev.8 → 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.
- package/CHANGELOG.md +482 -0
- package/README.md +275 -125
- package/build/brief-cli.js +5 -12
- package/build/brief-cli.js.map +1 -1
- package/build/brief.js +4 -3
- package/build/brief.js.map +1 -1
- package/build/broker-cli.js +42 -15
- package/build/broker-cli.js.map +1 -1
- package/build/broker.js +1 -1
- package/build/broker.js.map +1 -1
- package/build/cli.js +221 -63
- package/build/cli.js.map +1 -1
- package/build/clones.js +92 -0
- package/build/clones.js.map +1 -0
- package/build/code-host-cli.js +172 -40
- package/build/code-host-cli.js.map +1 -1
- package/build/code-host-service.js +35 -2
- package/build/code-host-service.js.map +1 -1
- package/build/code-host.js +138 -16
- package/build/code-host.js.map +1 -1
- package/build/conditions.js +33 -16
- package/build/conditions.js.map +1 -1
- package/build/config.js +58 -28
- package/build/config.js.map +1 -1
- package/build/console.js +17 -27
- package/build/console.js.map +1 -1
- package/build/credentials.js +86 -54
- package/build/credentials.js.map +1 -1
- package/build/daemon.js +54 -65
- package/build/daemon.js.map +1 -1
- package/build/file-lock.js +155 -40
- package/build/file-lock.js.map +1 -1
- package/build/follow-ups.js +2 -2
- package/build/follow-ups.js.map +1 -1
- package/build/help.js +241 -83
- package/build/help.js.map +1 -1
- package/build/history.js +10 -4
- package/build/history.js.map +1 -1
- package/build/host/credential-manager.js +109 -0
- package/build/host/credential-manager.js.map +1 -0
- package/build/host/keychain.js +44 -0
- package/build/host/keychain.js.map +1 -0
- package/build/host/launchd.js +118 -0
- package/build/host/launchd.js.map +1 -0
- package/build/host/libsecret.js +40 -0
- package/build/host/libsecret.js.map +1 -0
- package/build/host/macos-terminal.js +63 -0
- package/build/host/macos-terminal.js.map +1 -0
- package/build/host/platform.js +4 -0
- package/build/host/platform.js.map +1 -0
- package/build/host/secrets.js +46 -0
- package/build/host/secrets.js.map +1 -0
- package/build/host/shell.js +26 -0
- package/build/host/shell.js.map +1 -0
- package/build/host/startup.js +26 -0
- package/build/host/startup.js.map +1 -0
- package/build/host/systemd.js +91 -0
- package/build/host/systemd.js.map +1 -0
- package/build/host/task-scheduler.js +78 -0
- package/build/host/task-scheduler.js.map +1 -0
- package/build/host/terminal.js +46 -0
- package/build/host/terminal.js.map +1 -0
- package/build/host/tmux.js +39 -0
- package/build/host/tmux.js.map +1 -0
- package/build/host/windows-terminal.js +46 -0
- package/build/host/windows-terminal.js.map +1 -0
- package/build/in-process.js +6 -5
- package/build/in-process.js.map +1 -1
- package/build/inbox.js +57 -39
- package/build/inbox.js.map +1 -1
- package/build/init.js +509 -0
- package/build/init.js.map +1 -0
- package/build/landing.js +107 -10
- package/build/landing.js.map +1 -1
- package/build/lib/providers/ado/code-host.js +5 -1
- package/build/lib/providers/ado/code-host.js.map +1 -1
- package/build/lib/providers/ado/pipelines.js +138 -26
- package/build/lib/providers/ado/pipelines.js.map +1 -1
- package/build/lib/providers/ado/trigger.js +5 -0
- package/build/lib/providers/ado/trigger.js.map +1 -1
- package/build/lib/providers/ado/writes.js +17 -2
- package/build/lib/providers/ado/writes.js.map +1 -1
- package/build/lib/providers/github/actions.js +90 -3
- package/build/lib/providers/github/actions.js.map +1 -1
- package/build/lib/providers/github/code-host.js +2 -0
- package/build/lib/providers/github/code-host.js.map +1 -1
- package/build/lib/providers/github/writes.js +25 -2
- package/build/lib/providers/github/writes.js.map +1 -1
- package/build/lib/providers/index.js +3 -2
- package/build/lib/providers/index.js.map +1 -1
- package/build/lib/providers/npm/stage.js +14 -1
- package/build/lib/providers/npm/stage.js.map +1 -1
- package/build/lib/providers/timing.js +10 -0
- package/build/lib/providers/timing.js.map +1 -0
- package/build/lib/providers/verdicts/pr.js +47 -6
- package/build/lib/providers/verdicts/pr.js.map +1 -1
- package/build/lib/providers/verdicts/runs.js +12 -2
- package/build/lib/providers/verdicts/runs.js.map +1 -1
- package/build/logins.js +13 -6
- package/build/logins.js.map +1 -1
- package/build/manager.js +121 -55
- package/build/manager.js.map +1 -1
- package/build/note.js +5 -15
- package/build/note.js.map +1 -1
- package/build/notes.js +130 -23
- package/build/notes.js.map +1 -1
- package/build/notify.js +104 -42
- package/build/notify.js.map +1 -1
- package/build/npm-reads.js +151 -22
- package/build/npm-reads.js.map +1 -1
- package/build/ownership.js +2 -2
- package/build/paths.js +44 -1
- package/build/paths.js.map +1 -1
- package/build/plugin.js +4 -2
- package/build/plugin.js.map +1 -1
- package/build/profile-fields.js +153 -0
- package/build/profile-fields.js.map +1 -0
- package/build/profile-layers.js +264 -0
- package/build/profile-layers.js.map +1 -0
- package/build/profile.js +107 -51
- package/build/profile.js.map +1 -1
- package/build/project-check-cli.js +17 -19
- package/build/project-check-cli.js.map +1 -1
- package/build/project-check.js +166 -104
- package/build/project-check.js.map +1 -1
- package/build/protocol.js +5 -21
- package/build/protocol.js.map +1 -1
- package/build/pushover.js +5 -5
- package/build/pushover.js.map +1 -1
- package/build/queue.js +4 -4
- package/build/queue.js.map +1 -1
- package/build/registry.js +195 -36
- package/build/registry.js.map +1 -1
- package/build/release-kinds.js +34 -0
- package/build/release-kinds.js.map +1 -0
- package/build/rule-actions.js +8 -6
- package/build/rule-actions.js.map +1 -1
- package/build/rules-service.js +104 -47
- package/build/rules-service.js.map +1 -1
- package/build/rules.js +23 -23
- package/build/rules.js.map +1 -1
- package/build/run.js +20 -7
- package/build/run.js.map +1 -1
- package/build/runs.js +218 -68
- package/build/runs.js.map +1 -1
- package/build/scheduler.js +89 -13
- package/build/scheduler.js.map +1 -1
- package/build/search.js +2 -1
- package/build/search.js.map +1 -1
- package/build/server.js +51 -14
- package/build/server.js.map +1 -1
- package/build/spend.js +1 -1
- package/build/spend.js.map +1 -1
- package/build/store.js +79 -20
- package/build/store.js.map +1 -1
- package/build/supervise.js +1 -1
- package/build/supervise.js.map +1 -1
- package/build/timeline.js +104 -0
- package/build/timeline.js.map +1 -0
- package/build/tracker-reads-cli.js +4 -5
- package/build/tracker-reads-cli.js.map +1 -1
- package/build/trackers.js +56 -10
- package/build/trackers.js.map +1 -1
- package/build/train-cli.js +6 -5
- package/build/train-cli.js.map +1 -1
- package/build/train.js +2 -2
- package/build/train.js.map +1 -1
- package/build/upgrade.js +8 -9
- package/build/upgrade.js.map +1 -1
- package/build/wait.js +10 -10
- package/build/wait.js.map +1 -1
- package/build/watchers/ado.js +42 -19
- package/build/watchers/ado.js.map +1 -1
- package/build/watchers/github.js +18 -4
- package/build/watchers/github.js.map +1 -1
- package/build/watchers/index.js +2 -2
- package/build/watchers/index.js.map +1 -1
- package/build/watchers/linear-queue.js +47 -14
- package/build/watchers/linear-queue.js.map +1 -1
- package/build/watchers/linear-writes.js +26 -12
- package/build/watchers/linear-writes.js.map +1 -1
- package/build/watchers/linear.js +2 -2
- package/build/watchers/linear.js.map +1 -1
- package/build/watchers/source.js +5 -1
- package/build/watchers/source.js.map +1 -1
- package/build/webhook.js +80 -0
- package/build/webhook.js.map +1 -0
- package/build/why.js +1 -1
- package/build/why.js.map +1 -1
- package/build/worktrees.js +56 -93
- package/build/worktrees.js.map +1 -1
- package/package.json +61 -61
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/hooks/model.ts +46 -6
- package/plugin/hooks/register.tsx +41 -2
- package/plugin/skills/conductor-console/SKILL.md +26 -27
- package/plugin/skills/work-item/SKILL.md +58 -54
- package/plugin/skills/work-item/trackers/ado-boards.md +2 -2
- package/plugin/skills/work-item/trackers/github-issues.md +1 -1
- package/plugin/skills/work-item/trackers/linear.md +2 -2
- package/plugin/types/index.d.ts +1 -1
- package/protocol/PROTOCOL.md +3 -9
- package/build/checkout-sync.js +0 -249
- package/build/checkout-sync.js.map +0 -1
- package/build/credential.js +0 -66
- package/build/credential.js.map +0 -1
- package/build/startup.js +0 -92
- package/build/startup.js.map +0 -1
- package/build/tab.js +0 -32
- package/build/tab.js.map +0 -1
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
import { spawnSync } from 'node:child_process';
|
|
2
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { lt, valid } from 'semver';
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
import { ConductorError, isMissing } from "./errors.js";
|
|
7
|
+
import { issueLines, parseJsonc } from "./jsonc.js";
|
|
8
|
+
import { packageInfo } from "./package-info.js";
|
|
9
|
+
import { PROJECT_NAME, projectOfPath, projectPaths } from "./paths.js";
|
|
10
|
+
import { PROFILE_FILE, profileSchema, ProfileTooNewError } from "./profile.js";
|
|
11
|
+
import { PROTOCOL } from "./protocol.js";
|
|
12
|
+
// A project's profile in layers (design note v2, section 7): the machine's
|
|
13
|
+
// <home>/projects/<name>.json over the repo's optional .claude/conductor.json. Objects merge key by
|
|
14
|
+
// key with the machine winning, arrays are replaced whole, and `rules` stack: the machine's first,
|
|
15
|
+
// so one of its rules shadows a repo rule with the same id. The merge runs on the files as written,
|
|
16
|
+
// before the schema reads them, so a machine file beside a repo profile can be partial.
|
|
17
|
+
export const LAYERS = ['machine', 'repo'];
|
|
18
|
+
export const profileSourcesSchema = z.object({
|
|
19
|
+
// Each field's source by its dotted path, an array counting as one value; `default` when neither
|
|
20
|
+
// file writes it. `rules` is listed rule by rule instead.
|
|
21
|
+
fields: z.record(z.string(), z.enum(['default', ...LAYERS])),
|
|
22
|
+
// The machine profile, when there is one.
|
|
23
|
+
machine: z.string().nullable(),
|
|
24
|
+
// Where the repo layer was read, when there is one: `.claude/conductor.json at origin/<base>`.
|
|
25
|
+
repo: z.string().nullable(),
|
|
26
|
+
// The layer of each rule of the profile's `rules`, in order.
|
|
27
|
+
rules: z.array(z.enum(LAYERS)),
|
|
28
|
+
});
|
|
29
|
+
export const gitSync = (args, cwd) => {
|
|
30
|
+
const result = spawnSync('git', args, { cwd, encoding: 'utf8', timeout: 30_000, windowsHide: true });
|
|
31
|
+
return {
|
|
32
|
+
code: result.status ?? 1,
|
|
33
|
+
stderr: result.stderr ?? (result.error ? String(result.error) : ''),
|
|
34
|
+
stdout: result.stdout ?? '',
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
// The repo layer's path inside a commit: git spells it with forward slashes on every platform.
|
|
38
|
+
const PROFILE_IN_GIT = '.claude/conductor.json';
|
|
39
|
+
const rawSchema = z.record(z.string(), z.unknown());
|
|
40
|
+
// The profile the worker verbs read where they run, without the daemon: the checkout's own
|
|
41
|
+
// .claude/conductor.json (the branch's, as a worker's change to it would be) under the project's
|
|
42
|
+
// machine file. The project is the one whose folder the checkout is in (<home>/projects/<name>/…),
|
|
43
|
+
// else the one its own profile names, so a person's worktree of their own checkout reads too.
|
|
44
|
+
// Null when neither layer exists: no project's checkout.
|
|
45
|
+
export function checkoutProfile(paths, checkout) {
|
|
46
|
+
const repo = readLayer(join(checkout, PROFILE_FILE));
|
|
47
|
+
const name = projectOfPath(paths, checkout) ?? (typeof repo?.raw.name === 'string' ? repo.raw.name : null);
|
|
48
|
+
// A name the schema will refuse names no machine file either.
|
|
49
|
+
const machine = name !== null && PROJECT_NAME.test(name) ? readLayer(projectPaths(paths, name).profile) : null;
|
|
50
|
+
if (name === null || (machine === null && repo === null))
|
|
51
|
+
return null;
|
|
52
|
+
return layerProfile(name, { machine, repo });
|
|
53
|
+
}
|
|
54
|
+
// The layers merged and read: each layer's `conductor` minimum first, then the protocol, then the
|
|
55
|
+
// schema, so a profile written for another version gets one clear message. `name` is the project's
|
|
56
|
+
// registered name, which a machine file may repeat but not change.
|
|
57
|
+
export function layerProfile(name, layers, running) {
|
|
58
|
+
const { machine, repo } = layers;
|
|
59
|
+
const present = [machine, repo].filter((l) => l !== null);
|
|
60
|
+
const source = present.map((l) => l.label).join(' over ');
|
|
61
|
+
if (machine !== null && machine.raw.name !== undefined && machine.raw.name !== name) {
|
|
62
|
+
throw new ConductorError(`${machine.label} renames the project`, [
|
|
63
|
+
`name: ${JSON.stringify(machine.raw.name)} is not "${name}", the name its file and folder give it; drop it, or put "${name}" back`,
|
|
64
|
+
]);
|
|
65
|
+
}
|
|
66
|
+
for (const layer of present) {
|
|
67
|
+
const minimum = typeof layer.raw.conductor === 'string' ? valid(layer.raw.conductor) : null;
|
|
68
|
+
if (minimum === null)
|
|
69
|
+
continue;
|
|
70
|
+
const version = running ?? packageInfo().version;
|
|
71
|
+
if (lt(version, minimum))
|
|
72
|
+
throw new ProfileTooNewError(layer.label, minimum, version);
|
|
73
|
+
}
|
|
74
|
+
const merged = mergeLayers(machine?.raw ?? {}, repo?.raw ?? {});
|
|
75
|
+
merged.name = name;
|
|
76
|
+
if (merged.protocol !== PROTOCOL) {
|
|
77
|
+
throw new ConductorError(`${source} is invalid`, [
|
|
78
|
+
`protocol: ${JSON.stringify(merged.protocol ?? null)} is not supported; this conductor speaks protocol ${PROTOCOL}`,
|
|
79
|
+
]);
|
|
80
|
+
}
|
|
81
|
+
const parsed = profileSchema.safeParse(merged);
|
|
82
|
+
if (!parsed.success)
|
|
83
|
+
throw new ConductorError(`${source} is invalid`, issueLines(parsed.error));
|
|
84
|
+
const machineRules = Array.isArray(machine?.raw.rules) ? machine.raw.rules.length : 0;
|
|
85
|
+
return {
|
|
86
|
+
layers,
|
|
87
|
+
profile: parsed.data,
|
|
88
|
+
sources: {
|
|
89
|
+
fields: fieldSources(parsed.data, machine?.raw ?? null, repo?.raw ?? null),
|
|
90
|
+
machine: machine?.label ?? null,
|
|
91
|
+
repo: repo?.label ?? null,
|
|
92
|
+
rules: parsed.data.rules.map((_rule, i) => (i < machineRules ? 'machine' : 'repo')),
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
// The repo layer over which the machine layer goes, key by key; `rules` stack, the machine's first.
|
|
97
|
+
export function mergeLayers(machine, repo) {
|
|
98
|
+
const merged = mergeValue(repo, machine);
|
|
99
|
+
if (!isRecord(merged))
|
|
100
|
+
return {};
|
|
101
|
+
const rules = [...listOf(machine.rules), ...listOf(repo.rules)];
|
|
102
|
+
if (machine.rules !== undefined || repo.rules !== undefined)
|
|
103
|
+
merged.rules = rules;
|
|
104
|
+
return merged;
|
|
105
|
+
}
|
|
106
|
+
// The profile of the checkout a verb runs in, as checkoutProfile reads it, under the conductor home
|
|
107
|
+
// `paths` names. Throws a ConductorError when it is no project's checkout or the profile doesn't read.
|
|
108
|
+
export function profileHere(checkout, paths) {
|
|
109
|
+
const layered = checkoutProfile(paths, checkout);
|
|
110
|
+
if (layered === null) {
|
|
111
|
+
throw new ConductorError(`no ${PROFILE_FILE} in ${checkout}`, [
|
|
112
|
+
"run it in a project's worktree or checkout; a project with no committed profile keeps it in ~/.conductor/projects/<name>.json",
|
|
113
|
+
]);
|
|
114
|
+
}
|
|
115
|
+
return layered.profile;
|
|
116
|
+
}
|
|
117
|
+
// `conduct profile <name>`: the files, each field with its value and source, then the rules in the
|
|
118
|
+
// order they are checked, each with its layer.
|
|
119
|
+
export function profileLines(name, { profile, sources }) {
|
|
120
|
+
const rows = Object.keys(sources.fields)
|
|
121
|
+
.sort()
|
|
122
|
+
.map((path) => [path, show(valueAt(profile, path)), sources.fields[path] ?? 'default']);
|
|
123
|
+
const width = Math.max(0, ...rows.map(([path]) => path.length));
|
|
124
|
+
const lines = [
|
|
125
|
+
`profile ${name}`,
|
|
126
|
+
` machine: ${sources.machine ?? '(no machine profile)'}`,
|
|
127
|
+
` repo: ${sources.repo ?? '(no repo profile)'}`,
|
|
128
|
+
'',
|
|
129
|
+
...rows.map(([path, value, source]) => ` ${path.padEnd(width)} ${source.padEnd(7)} ${value}`),
|
|
130
|
+
];
|
|
131
|
+
if (profile.rules.length > 0) {
|
|
132
|
+
lines.push('', "rules (the machine's first: a rule shadows a later one with its id):");
|
|
133
|
+
profile.rules.forEach((rule, i) => {
|
|
134
|
+
const does = typeof rule.do === 'string' ? rule.do : rule.do.join('; ');
|
|
135
|
+
const when = rule.when === undefined ? '' : `when ${rule.when} → `;
|
|
136
|
+
lines.push(` ${(sources.rules[i] ?? 'repo').padEnd(7)} ${rule.id ?? `#${i + 1}`}: ${when}${does}`);
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
return lines;
|
|
140
|
+
}
|
|
141
|
+
// The profile a daemon-owned clone conducts: the machine file over .claude/conductor.json at
|
|
142
|
+
// origin/<base> in <home>/projects/<name>/repo. The base is the machine's baseBranch, else
|
|
143
|
+
// origin/HEAD's branch; when the repo's file there names another baseBranch, the file is read once
|
|
144
|
+
// more at that one. `running` is this conductor's version, for the layers' `conductor` minimums.
|
|
145
|
+
export function projectProfile(paths, name, git = gitSync, running) {
|
|
146
|
+
const { clone, profile: file } = projectPaths(paths, name);
|
|
147
|
+
if (!existsSync(join(clone, '.git')))
|
|
148
|
+
throw new ConductorError(`${name} has no clone at ${clone}`, ['add it with `conduct project add <url | path>`']);
|
|
149
|
+
const machine = readLayer(file);
|
|
150
|
+
const machineBase = typeof machine?.raw.baseBranch === 'string' ? machine.raw.baseBranch : null;
|
|
151
|
+
let base = machineBase ?? originHead(git, clone);
|
|
152
|
+
let repo = repoLayerAt(git, clone, base);
|
|
153
|
+
const named = typeof repo?.raw.baseBranch === 'string' ? repo.raw.baseBranch : null;
|
|
154
|
+
if (machineBase === null && named !== null && named !== base) {
|
|
155
|
+
base = named;
|
|
156
|
+
repo = repoLayerAt(git, clone, base);
|
|
157
|
+
}
|
|
158
|
+
if (machine === null && repo === null) {
|
|
159
|
+
throw new ConductorError(`${name} has no profile`, [
|
|
160
|
+
`neither ${file} nor ${PROFILE_IN_GIT} at origin/${base} in ${clone}`,
|
|
161
|
+
`write ${file} (a whole profile), or commit ${PROFILE_IN_GIT} to the repo`,
|
|
162
|
+
]);
|
|
163
|
+
}
|
|
164
|
+
return layerProfile(name, { machine, repo }, running);
|
|
165
|
+
}
|
|
166
|
+
// A profile file's text as a layer. Throws a ConductorError naming the file when it isn't a JSONC
|
|
167
|
+
// object.
|
|
168
|
+
export function rawLayer(text, label) {
|
|
169
|
+
return { label, raw: parseJsonc(text, rawSchema, label) };
|
|
170
|
+
}
|
|
171
|
+
// A profile file as a layer; null when there is no file.
|
|
172
|
+
export function readLayer(file) {
|
|
173
|
+
let text;
|
|
174
|
+
try {
|
|
175
|
+
text = readFileSync(file, 'utf8');
|
|
176
|
+
}
|
|
177
|
+
catch (error) {
|
|
178
|
+
if (isMissing(error))
|
|
179
|
+
return null;
|
|
180
|
+
throw new ConductorError(`could not read ${file}`, [String(error)]);
|
|
181
|
+
}
|
|
182
|
+
return rawLayer(text, file);
|
|
183
|
+
}
|
|
184
|
+
// .claude/conductor.json at origin/<base> in a clone, or null when that commit has none.
|
|
185
|
+
export function repoLayerAt(git, clone, base) {
|
|
186
|
+
const ref = `origin/${base}`;
|
|
187
|
+
if (git(['rev-parse', '--verify', '--quiet', `${ref}^{commit}`], clone).code !== 0) {
|
|
188
|
+
throw new ConductorError(`${clone} has no ${ref}`, [
|
|
189
|
+
`check baseBranch ("${base}"); the conductor fetches the clone every few minutes`,
|
|
190
|
+
]);
|
|
191
|
+
}
|
|
192
|
+
const spec = `${ref}:${PROFILE_IN_GIT}`;
|
|
193
|
+
if (git(['cat-file', '-e', spec], clone).code !== 0)
|
|
194
|
+
return null;
|
|
195
|
+
const shown = git(['show', spec], clone);
|
|
196
|
+
if (shown.code !== 0)
|
|
197
|
+
throw new ConductorError(`git show ${spec} failed in ${clone}`, [shown.stderr.trim()]);
|
|
198
|
+
return rawLayer(shown.stdout, `${PROFILE_IN_GIT} at ${ref} in ${clone}`);
|
|
199
|
+
}
|
|
200
|
+
// Each field's source, by its dotted path in the profile as read: the machine's when its file
|
|
201
|
+
// writes the field, else the repo's, else the default's. Arrays and `rules` count as one value;
|
|
202
|
+
// `name` is the registration's, which only a repo file of the same name can claim.
|
|
203
|
+
function fieldSources(profile, machine, repo) {
|
|
204
|
+
const fields = {};
|
|
205
|
+
const walk = (value, path) => {
|
|
206
|
+
if (isRecord(value) && Object.keys(value).length > 0) {
|
|
207
|
+
for (const [key, child] of Object.entries(value))
|
|
208
|
+
walk(child, [...path, key]);
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
fields[path.join('.')] = has(machine, path) ? 'machine' : has(repo, path) ? 'repo' : 'default';
|
|
212
|
+
};
|
|
213
|
+
for (const [key, value] of Object.entries(profile))
|
|
214
|
+
if (key !== 'rules')
|
|
215
|
+
walk(value, [key]);
|
|
216
|
+
fields.name = repo?.name === profile.name && machine?.name === undefined ? 'repo' : 'machine';
|
|
217
|
+
return fields;
|
|
218
|
+
}
|
|
219
|
+
function has(raw, path) {
|
|
220
|
+
let at = raw;
|
|
221
|
+
for (const key of path) {
|
|
222
|
+
if (!isRecord(at) || !Object.hasOwn(at, key))
|
|
223
|
+
return false;
|
|
224
|
+
at = at[key];
|
|
225
|
+
}
|
|
226
|
+
return at !== undefined;
|
|
227
|
+
}
|
|
228
|
+
function isRecord(value) {
|
|
229
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
230
|
+
}
|
|
231
|
+
function listOf(value) {
|
|
232
|
+
return Array.isArray(value) ? value : [];
|
|
233
|
+
}
|
|
234
|
+
function mergeValue(under, over) {
|
|
235
|
+
if (over === undefined)
|
|
236
|
+
return under;
|
|
237
|
+
if (!isRecord(under) || !isRecord(over))
|
|
238
|
+
return over;
|
|
239
|
+
const merged = { ...under };
|
|
240
|
+
for (const [key, value] of Object.entries(over))
|
|
241
|
+
merged[key] = mergeValue(under[key], value);
|
|
242
|
+
return merged;
|
|
243
|
+
}
|
|
244
|
+
// origin/HEAD's branch in a clone: the remote's default branch, which a clone records.
|
|
245
|
+
function originHead(git, clone) {
|
|
246
|
+
const head = git(['symbolic-ref', '--short', 'refs/remotes/origin/HEAD'], clone);
|
|
247
|
+
const branch = head.code === 0 ? head.stdout.trim().replace(/^origin\//, '') : '';
|
|
248
|
+
if (branch === '') {
|
|
249
|
+
throw new ConductorError(`${clone} has no origin/HEAD`, [
|
|
250
|
+
`run git -C "${clone}" remote set-head origin --auto, or set baseBranch in the machine profile`,
|
|
251
|
+
]);
|
|
252
|
+
}
|
|
253
|
+
return branch;
|
|
254
|
+
}
|
|
255
|
+
function show(value) {
|
|
256
|
+
return typeof value === 'string' ? value : (JSON.stringify(value) ?? '(unset)');
|
|
257
|
+
}
|
|
258
|
+
function valueAt(profile, path) {
|
|
259
|
+
let at = profile;
|
|
260
|
+
for (const key of path.split('.'))
|
|
261
|
+
at = isRecord(at) ? at[key] : undefined;
|
|
262
|
+
return at;
|
|
263
|
+
}
|
|
264
|
+
//# sourceMappingURL=profile-layers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile-layers.js","sourceRoot":"","sources":["../src/profile-layers.ts"],"names":[],"mappings":"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"}
|
package/build/profile.js
CHANGED
|
@@ -1,13 +1,17 @@
|
|
|
1
|
-
import { readFileSync } from 'node:fs';
|
|
2
1
|
import { isAbsolute, join } from 'node:path';
|
|
2
|
+
import { lt, valid } from 'semver';
|
|
3
3
|
import { z } from 'zod';
|
|
4
|
-
import { ConductorError
|
|
4
|
+
import { ConductorError } from "./errors.js";
|
|
5
5
|
import { parseJsonc } from "./jsonc.js";
|
|
6
|
-
import {
|
|
6
|
+
import { packageInfo } from "./package-info.js";
|
|
7
|
+
import { PROJECT_NAME } from "./paths.js";
|
|
8
|
+
import { noteName, WORK_SKILL } from "./plugin.js";
|
|
7
9
|
import { PROTOCOL } from "./protocol.js";
|
|
10
|
+
import { GATES } from "./release-kinds.js";
|
|
8
11
|
import { ruleInputSchema } from "./rule-input.js";
|
|
12
|
+
import { defaultTag } from "./upgrade.js";
|
|
9
13
|
export const PROFILE_FILE = join('.claude', 'conductor.json');
|
|
10
|
-
const name = z.string().regex(
|
|
14
|
+
const name = z.string().regex(PROJECT_NAME, 'lowercase letters, digits and dashes, starting with a letter');
|
|
11
15
|
const text = z.string().trim().min(1);
|
|
12
16
|
// The state each phase note moves an item to, over the tracker kind's defaults (tracker-writes.ts);
|
|
13
17
|
// null leaves it as it is.
|
|
@@ -20,7 +24,7 @@ const transitions = z
|
|
|
20
24
|
// note). Off when absent.
|
|
21
25
|
const releaseWait = z.strictObject({ label: text, shipped: text }).optional();
|
|
22
26
|
// A repo's .claude/conductor.json: what the conductor needs to know about a project, as data.
|
|
23
|
-
// Each adapter kind is a discriminated union, so ADO Boards
|
|
27
|
+
// Each adapter kind is a discriminated union, so ADO Boards arrives as one more variant.
|
|
24
28
|
const profileFields = z.strictObject({
|
|
25
29
|
// Who may answer a Plan besides the tracker account behind the daemon (design note v2, section 6):
|
|
26
30
|
// emails on Linear, unique names on Boards (the UPN, usually the email), logins on GitHub,
|
|
@@ -33,9 +37,10 @@ const profileFields = z.strictObject({
|
|
|
33
37
|
areaRelease: z.enum(['merge', 'pr']).default('merge'),
|
|
34
38
|
baseBranch: text,
|
|
35
39
|
// The CI that builds the project's repo: Azure Pipelines or GitHub Actions (`conduct runs`, `wait
|
|
36
|
-
// merge`).
|
|
40
|
+
// merge`). Azure Pipelines builds a GitHub repo too (ATK-530): beside a GitHub code host it names
|
|
41
|
+
// the organization and project whose pipelines build it (code-host.ts, ciOf).
|
|
37
42
|
ci: z.discriminatedUnion('kind', [
|
|
38
|
-
z.strictObject({ kind: z.literal('ado-pipelines') }),
|
|
43
|
+
z.strictObject({ kind: z.literal('ado-pipelines'), organization: z.url().optional(), project: text.optional() }),
|
|
39
44
|
z.strictObject({ kind: z.literal('github-actions') }),
|
|
40
45
|
]),
|
|
41
46
|
codeHost: z.discriminatedUnion('kind', [
|
|
@@ -43,12 +48,21 @@ const profileFields = z.strictObject({
|
|
|
43
48
|
// A GitHub repo (ATK-428): its PRs, checks and auto-merge.
|
|
44
49
|
z.strictObject({
|
|
45
50
|
kind: z.literal('github'),
|
|
46
|
-
owner: z.string().regex(/^[\w.-]+$/, 'a GitHub owner, such as
|
|
51
|
+
owner: z.string().regex(/^[\w.-]+$/, 'a GitHub owner, such as contoso'),
|
|
47
52
|
repo: z.string().regex(/^[\w.-]+$/, 'a GitHub repo name, without the owner'),
|
|
48
53
|
}),
|
|
49
54
|
]),
|
|
50
|
-
// The
|
|
51
|
-
|
|
55
|
+
// The oldest conductor that reads this profile (ATK-573): the version that first read its newest
|
|
56
|
+
// field (profile-fields.ts records each one's), a -dev.N while that is only on `dev`. parseProfile
|
|
57
|
+
// checks it before the rest, so an older conductor says which version to upgrade to instead of
|
|
58
|
+
// listing fields it doesn't know.
|
|
59
|
+
conductor: z
|
|
60
|
+
.string()
|
|
61
|
+
.refine((v) => valid(v) !== null, 'a version, such as 3.0.0-dev.8')
|
|
62
|
+
.optional(),
|
|
63
|
+
// The kinds of item that wait on a person in this project: plan, merge and each release kind's gate
|
|
64
|
+
// (release-kinds.ts: npm-otp for an npm-stage), which `conduct project check` looks for.
|
|
65
|
+
gates: z.array(z.enum(GATES)).min(1),
|
|
52
66
|
// Each environment's /health URL, for `conduct wait health <env>`.
|
|
53
67
|
health: z.record(name, z.url()).optional(),
|
|
54
68
|
// A checkout the operator keeps whose gitignored files matching its .worktreeinclude are copied
|
|
@@ -67,11 +81,13 @@ const profileFields = z.strictObject({
|
|
|
67
81
|
// The worker protocol the project's work skill speaks (protocol.ts); only this conductor's.
|
|
68
82
|
protocol: z.literal(PROTOCOL),
|
|
69
83
|
release: z.strictObject({ handoff: text }),
|
|
70
|
-
// The pipelines that stage a release for a merge (`conduct runs`, `wait merge`)
|
|
71
|
-
// `package` on npm for a person's `npm stage approve`.
|
|
72
|
-
// file name (release-cli), path or own name.
|
|
84
|
+
// The pipelines that stage a release for a merge (`conduct runs`, `wait merge`), each of a kind
|
|
85
|
+
// release-kinds.ts reads: `npm-stage` stages `package` on npm for a person's `npm stage approve`.
|
|
86
|
+
// `pipeline` names it as --for does: its YAML file name (release-cli), path or own name.
|
|
73
87
|
releases: z
|
|
74
|
-
.array(z.
|
|
88
|
+
.array(z.discriminatedUnion('kind', [
|
|
89
|
+
z.strictObject({ key: name, kind: z.literal('npm-stage'), package: text, pipeline: text }),
|
|
90
|
+
]))
|
|
75
91
|
.default([]),
|
|
76
92
|
// Project rules (design note, section 9): checked before the machine's and the defaults, for
|
|
77
93
|
// this project's items only. They change by PR, and the daemon reloads them on save.
|
|
@@ -86,15 +102,23 @@ const profileFields = z.strictObject({
|
|
|
86
102
|
slots: z.int().min(1).max(8),
|
|
87
103
|
tracker: z.discriminatedUnion('kind', [
|
|
88
104
|
z.strictObject({
|
|
89
|
-
|
|
90
|
-
|
|
105
|
+
// The label group whose labels are the Areas. null: the team has none, so no item holds an
|
|
106
|
+
// Area (as a Boards item at its root), and `conduct file` files without one.
|
|
107
|
+
areaLabelGroup: text.nullable().default('Area'),
|
|
108
|
+
humanLabel: text.default('human'),
|
|
91
109
|
kind: z.literal('linear'),
|
|
92
|
-
// The conducted queue: the team's projects that have a priority set
|
|
93
|
-
queue
|
|
110
|
+
// The conducted queue: the team's projects that have a priority set, or the team's open
|
|
111
|
+
// issues carrying a label, in one queue at `priority` (as GitHub Issues' queueLabel).
|
|
112
|
+
queue: z
|
|
113
|
+
.union([
|
|
114
|
+
z.literal('prioritized-projects'),
|
|
115
|
+
z.strictObject({ label: text, priority: z.int().min(1).max(4).default(3) }),
|
|
116
|
+
])
|
|
117
|
+
.default('prioritized-projects'),
|
|
94
118
|
releaseWait,
|
|
95
119
|
team: text,
|
|
96
120
|
transitions,
|
|
97
|
-
// A new item a worker filed carries this label until
|
|
121
|
+
// A new item a worker filed carries this label until the operator triages it: the queue never picks it,
|
|
98
122
|
// and the inbox says it is new (ATK-277). Off when absent.
|
|
99
123
|
triageLabel: text.optional(),
|
|
100
124
|
}),
|
|
@@ -136,7 +160,7 @@ const profileFields = z.strictObject({
|
|
|
136
160
|
// The repo the issues live in; by default the code host's.
|
|
137
161
|
owner: z
|
|
138
162
|
.string()
|
|
139
|
-
.regex(/^[\w.-]+$/, 'a GitHub owner, such as
|
|
163
|
+
.regex(/^[\w.-]+$/, 'a GitHub owner, such as contoso')
|
|
140
164
|
.optional(),
|
|
141
165
|
// The queue's priority against other projects' (a Linear project's 1, urgent, to 4, low).
|
|
142
166
|
priority: z.int().min(1).max(4).default(3),
|
|
@@ -154,7 +178,7 @@ const profileFields = z.strictObject({
|
|
|
154
178
|
}),
|
|
155
179
|
]),
|
|
156
180
|
// Skill trains (train.ts, ATK-285): the GitHub repo whose PRs carrying a `<work skill> · Train`
|
|
157
|
-
// note ride one PR to its default branch. The daemon asks
|
|
181
|
+
// note ride one PR to its default branch. The daemon asks the operator for `conduct train` once `minimum`
|
|
158
182
|
// wait, one is urgent, or the oldest has waited `maxHours`. Off when absent.
|
|
159
183
|
train: z
|
|
160
184
|
.strictObject({
|
|
@@ -181,14 +205,28 @@ const profileFields = z.strictObject({
|
|
|
181
205
|
.prefault({}),
|
|
182
206
|
})
|
|
183
207
|
.prefault({}),
|
|
184
|
-
//
|
|
185
|
-
//
|
|
208
|
+
// Moved to the machine's config.json (workers.tab, ATK-529), and ignored here. Still read, so a
|
|
209
|
+
// profile written for an older conductor isn't refused; `conduct project check` warns about it.
|
|
186
210
|
workers: z.strictObject({ tab: z.boolean().default(false) }).prefault({}),
|
|
187
211
|
});
|
|
188
212
|
// ADO Boards takes its organization and project from an Azure DevOps code host, and GitHub Issues
|
|
189
213
|
// its owner and repo from a GitHub one; beside a code host of the other kind each names them.
|
|
214
|
+
// Azure Pipelines names an organization and project only to build a GitHub repo.
|
|
190
215
|
export const profileSchema = profileFields.superRefine((profile, ctx) => {
|
|
191
|
-
const { codeHost, tracker } = profile;
|
|
216
|
+
const { ci, codeHost, tracker } = profile;
|
|
217
|
+
// Without them beside a GitHub code host the profile still reads, as it did before they existed;
|
|
218
|
+
// `conduct runs` and `project check` refuse its CI (ciOf).
|
|
219
|
+
if (ci.kind === 'ado-pipelines' && codeHost.kind === 'ado') {
|
|
220
|
+
for (const key of ['organization', 'project']) {
|
|
221
|
+
if (ci[key] === undefined)
|
|
222
|
+
continue;
|
|
223
|
+
ctx.addIssue({
|
|
224
|
+
code: 'custom',
|
|
225
|
+
message: "only beside a github code host: Azure Pipelines builds an Azure DevOps repo in the repo's own",
|
|
226
|
+
path: ['ci', key],
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
}
|
|
192
230
|
const missing = (key, what) => ctx.addIssue({
|
|
193
231
|
code: 'custom',
|
|
194
232
|
message: `required beside a ${codeHost.kind} code host: ${what}`,
|
|
@@ -213,31 +251,57 @@ export const profileSchema = profileFields.superRefine((profile, ctx) => {
|
|
|
213
251
|
});
|
|
214
252
|
}
|
|
215
253
|
});
|
|
216
|
-
// The Azure DevOps organization the project's ADO calls go to: its code host's, else its board's
|
|
217
|
-
// null for a project with
|
|
254
|
+
// The Azure DevOps organization the project's ADO calls go to: its code host's, else its board's,
|
|
255
|
+
// else its Azure Pipelines'; null for a project with none on Azure DevOps.
|
|
218
256
|
export function adoOrganization(profile) {
|
|
219
257
|
if (profile.codeHost.kind === 'ado')
|
|
220
258
|
return profile.codeHost.organization;
|
|
221
|
-
|
|
259
|
+
if (profile.tracker.kind === 'ado-boards' && profile.tracker.organization)
|
|
260
|
+
return profile.tracker.organization;
|
|
261
|
+
return profile.ci.kind === 'ado-pipelines' ? (profile.ci.organization ?? null) : null;
|
|
262
|
+
}
|
|
263
|
+
// Whether the project's items have Areas: all but a Linear team with no Area group.
|
|
264
|
+
export function hasAreas(profile) {
|
|
265
|
+
return profile.tracker.kind !== 'linear' || profile.tracker.areaLabelGroup !== null;
|
|
222
266
|
}
|
|
223
267
|
// The `<skill> · ` headings that mark a project's notes: its work skill's, then each alias's.
|
|
224
|
-
// Without a profile,
|
|
225
|
-
//
|
|
226
|
-
//
|
|
268
|
+
// Without a profile, the plugin's own work skill's. The conductor plugin's skills head their notes
|
|
269
|
+
// with the bare name: `work-item · `, not `conductor:work-item · `, so notes from before and after
|
|
270
|
+
// a move to the plugin read alike. A project whose older notes carry another name lists it in
|
|
271
|
+
// `skills.aliases`.
|
|
227
272
|
export function notePrefixes(profile) {
|
|
228
|
-
const names = profile ? [profile.skills.work, ...profile.skills.aliases] : [
|
|
273
|
+
const names = profile ? [profile.skills.work, ...profile.skills.aliases] : [WORK_SKILL];
|
|
229
274
|
return [...new Set(names.map(noteName))].map((skill) => `${skill} · `);
|
|
230
275
|
}
|
|
231
|
-
// The key prefix of the project's items: the Linear team (
|
|
276
|
+
// The key prefix of the project's items: the Linear team (ENG-311), or the Boards or GitHub Issues
|
|
232
277
|
// key (CAD-1234, PAR-12).
|
|
233
278
|
export function trackerKey(profile) {
|
|
234
279
|
return profile.tracker.kind === 'linear' ? profile.tracker.team : profile.tracker.key;
|
|
235
280
|
}
|
|
236
|
-
const
|
|
237
|
-
//
|
|
238
|
-
//
|
|
239
|
-
export
|
|
240
|
-
|
|
281
|
+
const versionsOnly = z.looseObject({ conductor: z.unknown().optional(), protocol: z.unknown().optional() });
|
|
282
|
+
// A profile whose `conductor` minimum is newer than this conductor. `upgrade` brings the machine up
|
|
283
|
+
// to it: from `dev` for a -dev.N minimum, else from `latest`.
|
|
284
|
+
export class ProfileTooNewError extends ConductorError {
|
|
285
|
+
upgrade;
|
|
286
|
+
constructor(source, minimum, running) {
|
|
287
|
+
const upgrade = `conduct upgrade --tag ${defaultTag(minimum)}`;
|
|
288
|
+
super(`${source} is invalid`, [`conductor: needs ${minimum} or newer; this is ${running}: run \`${upgrade}\``]);
|
|
289
|
+
this.name = 'ProfileTooNewError';
|
|
290
|
+
this.upgrade = upgrade;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
// The conductor minimum, then the protocol, are checked first, so a profile written for another
|
|
294
|
+
// version gets one clear message instead of a list of schema differences. `running` is this
|
|
295
|
+
// conductor's version, read only for a profile with a minimum.
|
|
296
|
+
export function parseProfile(text, source, running) {
|
|
297
|
+
const { conductor, protocol } = parseJsonc(text, versionsOnly, source);
|
|
298
|
+
// As semver reads it: `v3.0.0-dev.9` and `3.0.0-dev.9+abc` both mean 3.0.0-dev.9.
|
|
299
|
+
const minimum = typeof conductor === 'string' ? valid(conductor) : null;
|
|
300
|
+
if (minimum !== null) {
|
|
301
|
+
const version = running ?? packageInfo().version;
|
|
302
|
+
if (lt(version, minimum))
|
|
303
|
+
throw new ProfileTooNewError(source, minimum, version);
|
|
304
|
+
}
|
|
241
305
|
if (protocol !== PROTOCOL) {
|
|
242
306
|
throw new ConductorError(`${source} is invalid`, [
|
|
243
307
|
`protocol: ${JSON.stringify(protocol ?? null)} is not supported; this conductor speaks protocol ${PROTOCOL}`,
|
|
@@ -245,19 +309,11 @@ export function parseProfile(text, source) {
|
|
|
245
309
|
}
|
|
246
310
|
return parseJsonc(text, profileSchema, source);
|
|
247
311
|
}
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
catch (error) {
|
|
255
|
-
if (!isMissing(error))
|
|
256
|
-
throw error;
|
|
257
|
-
throw new ConductorError(`no ${PROFILE_FILE} in ${root}`, [
|
|
258
|
-
'a conducted project commits its profile at .claude/conductor.json',
|
|
259
|
-
]);
|
|
260
|
-
}
|
|
261
|
-
return { path, profile: parseProfile(source, path) };
|
|
312
|
+
// Why a profile didn't read, in one line: a ConductorError's problems after its file line (the
|
|
313
|
+
// version it needs, the fields), so a verb that turns it into its own refusal keeps them.
|
|
314
|
+
export function profileProblem(error) {
|
|
315
|
+
if (!(error instanceof ConductorError))
|
|
316
|
+
return error instanceof Error ? error.message : String(error);
|
|
317
|
+
return error.details.length > 0 ? error.details.join('; ') : error.message;
|
|
262
318
|
}
|
|
263
319
|
//# sourceMappingURL=profile.js.map
|
package/build/profile.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../src/profile.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../src/profile.ts"],"names":[],"mappings":"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"}
|