@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
package/build/npm-reads.js
CHANGED
|
@@ -8,13 +8,21 @@ import { ProviderError, registryFor } from "./lib/providers/index.js";
|
|
|
8
8
|
import { outputOf, run } from "./run.js";
|
|
9
9
|
const npmConfig = z.record(z.string(), z.unknown());
|
|
10
10
|
const REDIRECTS = new Set([301, 302, 303, 307, 308]);
|
|
11
|
+
// The agent settings of a read with a credential but no proxy, CA or TLS change.
|
|
12
|
+
const DIRECT = { noProxy: [], proxy: {}, rejectUnauthorized: true };
|
|
13
|
+
// The .npmrc keys npm authorizes a registry with (npm-registry-fetch's auth.js): `//host/path/:<kind>`.
|
|
14
|
+
const CREDENTIAL_KEY = /^\/\/.+:(?:_auth|_authToken|_password|username)$/;
|
|
15
|
+
// npm's ${VAR} in an .npmrc key or value (@npmcli/config's env-replace.js): an unset VAR stays as
|
|
16
|
+
// written, ${VAR?} is empty when unset, and a backslash escapes it.
|
|
17
|
+
const ENV_EXPR = /(?<!\\)(\\*)\$\{([^${}?]+)(\?)?\}/g;
|
|
11
18
|
// How long a failed load of npm's settings stands before a read asks npm again: a lasting failure
|
|
12
19
|
// (npm off the daemon's PATH) shouldn't start a shell on every read.
|
|
13
20
|
const RETRY_LOAD_MS = 60_000;
|
|
14
21
|
// A fetch over Node's http and https agents, which route through a proxy (a CONNECT tunnel for
|
|
15
22
|
// https) and take a CA; Node's own fetch takes neither from npm's settings. Enough of fetch for
|
|
16
|
-
// npmStage: method, headers, signal, and a streamed body.
|
|
17
|
-
|
|
23
|
+
// npmStage: method, headers, signal, and a streamed body. Each hop sends the credential
|
|
24
|
+
// hopAuthorization gives it.
|
|
25
|
+
export function agentFetch(settings, authorization = () => undefined) {
|
|
18
26
|
const agents = new Map();
|
|
19
27
|
const agentFor = (url) => {
|
|
20
28
|
const proxy = proxyFor(settings, url);
|
|
@@ -34,11 +42,15 @@ export function agentFetch(settings) {
|
|
|
34
42
|
return agent;
|
|
35
43
|
};
|
|
36
44
|
// Follows a redirect as fetch does (a mirror may answer with its canonical path), up to 5 times.
|
|
37
|
-
const send = (url, init, redirects) => {
|
|
45
|
+
const send = (url, init, redirects, authFor) => {
|
|
38
46
|
const secure = url.protocol === 'https:';
|
|
47
|
+
const headers = new Headers(init?.headers);
|
|
48
|
+
const auth = authFor(url);
|
|
49
|
+
if (auth)
|
|
50
|
+
headers.set('authorization', auth);
|
|
39
51
|
const options = {
|
|
40
52
|
agent: agentFor(url),
|
|
41
|
-
headers: Object.fromEntries(
|
|
53
|
+
headers: Object.fromEntries(headers),
|
|
42
54
|
method: init?.method ?? 'GET',
|
|
43
55
|
signal: init?.signal ?? undefined,
|
|
44
56
|
};
|
|
@@ -48,10 +60,15 @@ export function agentFetch(settings) {
|
|
|
48
60
|
const { location } = response.headers;
|
|
49
61
|
if (REDIRECTS.has(status) && location) {
|
|
50
62
|
response.resume();
|
|
51
|
-
if (redirects >= 5)
|
|
63
|
+
if (redirects >= 5) {
|
|
52
64
|
reject(new TypeError(`more than 5 redirects from ${url.origin}`));
|
|
53
|
-
|
|
54
|
-
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
// A caller's own authorization stays on its origin, as fetch keeps it.
|
|
68
|
+
const next = new URL(location, url);
|
|
69
|
+
const kept = new Headers(init?.headers);
|
|
70
|
+
kept.delete('authorization');
|
|
71
|
+
resolve(send(next, next.origin === url.origin ? init : { ...init, headers: kept }, redirects + 1, authFor));
|
|
55
72
|
return;
|
|
56
73
|
}
|
|
57
74
|
const headers = new Headers();
|
|
@@ -71,7 +88,10 @@ export function agentFetch(settings) {
|
|
|
71
88
|
request.end();
|
|
72
89
|
});
|
|
73
90
|
};
|
|
74
|
-
return (input, init) =>
|
|
91
|
+
return (input, init) => {
|
|
92
|
+
const url = new URL(input instanceof Request ? input.url : input);
|
|
93
|
+
return send(url, init, 0, hopAuthorization(authorization, url));
|
|
94
|
+
};
|
|
75
95
|
}
|
|
76
96
|
// npm's proxy, CA and TLS settings for the reads, or null when plain fetch does. The proxy is the one
|
|
77
97
|
// npm picks (@npmcli/agent's getProxy): https-proxy or proxy from its settings, for either protocol;
|
|
@@ -97,9 +117,20 @@ export function agentSettings(config, env, readFile = (path) => readFileSync(pat
|
|
|
97
117
|
rejectUnauthorized,
|
|
98
118
|
};
|
|
99
119
|
}
|
|
120
|
+
// The credential each hop of a read that starts at `start` sends: npm's for the hop's own URL, else,
|
|
121
|
+
// on the start's origin, the start's, as npm falls back to the registry's. A redirect to another
|
|
122
|
+
// origin carries none of the start's, and a hop from https down to http carries none at all.
|
|
123
|
+
export function hopAuthorization(authorization, start) {
|
|
124
|
+
const first = authorization(start);
|
|
125
|
+
return (hop) => {
|
|
126
|
+
if (start.protocol === 'https:' && hop.protocol === 'http:')
|
|
127
|
+
return undefined;
|
|
128
|
+
return authorization(hop) ?? (hop.origin === start.origin ? first : undefined);
|
|
129
|
+
};
|
|
130
|
+
}
|
|
100
131
|
// The settings `npm install --global` reads (`conduct upgrade` installs that way): --global skips a
|
|
101
132
|
// project .npmrc, and the home folder keeps the caller's checkout out of it. npm leaves its tokens
|
|
102
|
-
// out of the list.
|
|
133
|
+
// out of the list: npmCredentials reads them.
|
|
103
134
|
export async function loadNpmConfig() {
|
|
104
135
|
const result = await run('npm', ['config', 'list', '--json', '--global'], {
|
|
105
136
|
cwd: homedir(),
|
|
@@ -118,6 +149,43 @@ export async function loadNpmConfig() {
|
|
|
118
149
|
throw new ProviderError("npm config list --json answered something other than npm's settings");
|
|
119
150
|
}
|
|
120
151
|
}
|
|
152
|
+
// npm's registry credentials, which `npm config list` leaves out: the `//host/path/:` keys of the
|
|
153
|
+
// .npmrc files it names, the user's over the global one (a global install reads no project
|
|
154
|
+
// .npmrc), or none when there are none. A file that isn't there has none; one that can't be read
|
|
155
|
+
// fails the reads. A URL takes the key npm-registry-fetch's auth.js picks: from `//host/path`,
|
|
156
|
+
// strip a segment or a slash at a time to the first with a token, an _auth, or a username and
|
|
157
|
+
// _password. The values stay in here: no message, event or log carries them. They are read once,
|
|
158
|
+
// with the rest of npm's settings: a new token reaches a running daemon on its next start.
|
|
159
|
+
export function npmCredentials(config, env, readFile = (path) => readFileSync(path, 'utf8')) {
|
|
160
|
+
const keys = new Map();
|
|
161
|
+
for (const setting of ['globalconfig', 'userconfig']) {
|
|
162
|
+
const path = text(config[setting]);
|
|
163
|
+
const rc = path ? readOptional(setting, path, readFile) : undefined;
|
|
164
|
+
for (const [key, value] of rc ? credentialsIn(rc, env) : [])
|
|
165
|
+
keys.set(key, value);
|
|
166
|
+
}
|
|
167
|
+
if (keys.size === 0)
|
|
168
|
+
return undefined;
|
|
169
|
+
return (url) => {
|
|
170
|
+
let key = `//${url.host}${url.pathname}`;
|
|
171
|
+
while (key.length > '//'.length) {
|
|
172
|
+
const token = keys.get(`${key}:_authToken`);
|
|
173
|
+
if (token)
|
|
174
|
+
return `Bearer ${token}`;
|
|
175
|
+
const auth = keys.get(`${key}:_auth`);
|
|
176
|
+
if (auth)
|
|
177
|
+
return `Basic ${auth}`;
|
|
178
|
+
const username = keys.get(`${key}:username`);
|
|
179
|
+
const password = keys.get(`${key}:_password`);
|
|
180
|
+
if (username && password) {
|
|
181
|
+
const plain = Buffer.from(password, 'base64').toString('utf8');
|
|
182
|
+
return `Basic ${Buffer.from(`${username}:${plain}`, 'utf8').toString('base64')}`;
|
|
183
|
+
}
|
|
184
|
+
key = key.replace(/(?:[^/]+|\/)$/, '');
|
|
185
|
+
}
|
|
186
|
+
return undefined;
|
|
187
|
+
};
|
|
188
|
+
}
|
|
121
189
|
// The reads npmStage takes, from npm's settings, loaded once on the first read. A failed load fails
|
|
122
190
|
// the reads with npm's reason, and a read a minute later loads again; a changed setting reaches a
|
|
123
191
|
// running daemon on its next start.
|
|
@@ -131,7 +199,9 @@ export function npmReads({ env = process.env, load = loadNpmConfig, now = () =>
|
|
|
131
199
|
return failed.settings;
|
|
132
200
|
const current = load().then((config) => {
|
|
133
201
|
const agent = agentSettings(config, env, readFile);
|
|
134
|
-
|
|
202
|
+
const authorization = npmCredentials(config, env, readFile);
|
|
203
|
+
const fetcher = agent || authorization ? agentFetch(agent ?? DIRECT, authorization) : globalThis.fetch;
|
|
204
|
+
return { config, fetch: fetcher };
|
|
135
205
|
});
|
|
136
206
|
loading = current;
|
|
137
207
|
current.catch(() => {
|
|
@@ -158,23 +228,68 @@ export function sharedNpmReads() {
|
|
|
158
228
|
// cafile that isn't there is no CA, as npm takes it; one that can't be read fails the reads.
|
|
159
229
|
function caOf(config, readFile) {
|
|
160
230
|
const cafile = text(config.cafile);
|
|
161
|
-
if (cafile)
|
|
162
|
-
|
|
163
|
-
return readFile(cafile);
|
|
164
|
-
}
|
|
165
|
-
catch (error) {
|
|
166
|
-
if (!(error instanceof Error))
|
|
167
|
-
throw error;
|
|
168
|
-
if ('code' in error && error.code === 'ENOENT')
|
|
169
|
-
return undefined;
|
|
170
|
-
throw new ProviderError(`could not read npm's cafile ${cafile}: ${error.message}`);
|
|
171
|
-
}
|
|
172
|
-
}
|
|
231
|
+
if (cafile)
|
|
232
|
+
return readOptional('cafile', cafile, readFile);
|
|
173
233
|
const ca = [config.ca].flat().filter((entry) => typeof entry === 'string' && entry !== '');
|
|
174
234
|
if (ca.length === 0)
|
|
175
235
|
return undefined;
|
|
176
236
|
return ca.length === 1 ? ca[0] : ca;
|
|
177
237
|
}
|
|
238
|
+
// The credential keys of an .npmrc, with npm's ${VAR} expanded in keys and values: ini's
|
|
239
|
+
// `key = value` lines above the first [section] line, as npm reads them.
|
|
240
|
+
function credentialsIn(rc, env) {
|
|
241
|
+
const found = [];
|
|
242
|
+
for (const raw of rc.split(/[\r\n]+/)) {
|
|
243
|
+
if (/^\[[^\]]*\]\s*$/.test(raw))
|
|
244
|
+
break;
|
|
245
|
+
const line = raw.trim();
|
|
246
|
+
const equals = line.indexOf('=');
|
|
247
|
+
if (line.startsWith(';') || line.startsWith('#') || equals < 0)
|
|
248
|
+
continue;
|
|
249
|
+
const key = envReplace(iniValue(line.slice(0, equals)), env);
|
|
250
|
+
if (CREDENTIAL_KEY.test(key))
|
|
251
|
+
found.push([key, envReplace(iniValue(line.slice(equals + 1)), env)]);
|
|
252
|
+
}
|
|
253
|
+
return found;
|
|
254
|
+
}
|
|
255
|
+
function envReplace(value, env) {
|
|
256
|
+
return value.replace(ENV_EXPR, (match, escapes, name, optional) => {
|
|
257
|
+
if (escapes.length % 2 === 1)
|
|
258
|
+
return match.slice((escapes.length + 1) / 2);
|
|
259
|
+
return escapes.slice(escapes.length / 2) + (env[name] ?? (optional ? '' : `\${${name}}`));
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
// An ini value as the ini package's unsafe() reads it: a quoted one as JSON (a single-quoted one
|
|
263
|
+
// without its quotes first), kept as it is when that isn't JSON; else up to an unescaped ; or #,
|
|
264
|
+
// with \; \# and \\ unescaped.
|
|
265
|
+
function iniValue(raw) {
|
|
266
|
+
const value = raw.trim();
|
|
267
|
+
if ((value.startsWith('"') && value.endsWith('"')) || (value.startsWith("'") && value.endsWith("'"))) {
|
|
268
|
+
const json = value.startsWith("'") ? value.slice(1, -1) : value;
|
|
269
|
+
try {
|
|
270
|
+
const parsed = JSON.parse(json);
|
|
271
|
+
return typeof parsed === 'string' ? parsed : JSON.stringify(parsed);
|
|
272
|
+
}
|
|
273
|
+
catch {
|
|
274
|
+
return json;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
let plain = '';
|
|
278
|
+
let escaped = false;
|
|
279
|
+
for (const char of value) {
|
|
280
|
+
if (escaped) {
|
|
281
|
+
plain += '\\;#'.includes(char) ? char : `\\${char}`;
|
|
282
|
+
escaped = false;
|
|
283
|
+
}
|
|
284
|
+
else if (char === '\\')
|
|
285
|
+
escaped = true;
|
|
286
|
+
else if (char === ';' || char === '#')
|
|
287
|
+
break;
|
|
288
|
+
else
|
|
289
|
+
plain += char;
|
|
290
|
+
}
|
|
291
|
+
return (escaped ? `${plain}\\` : plain).trim();
|
|
292
|
+
}
|
|
178
293
|
// npm's proxy for a registry URL, or none when noProxy names its host or a domain above it
|
|
179
294
|
// (@npmcli/agent's isNoProxy: `acme.test` covers `npm.acme.test`).
|
|
180
295
|
function proxyFor(settings, url) {
|
|
@@ -187,6 +302,20 @@ function proxyFor(settings, url) {
|
|
|
187
302
|
return undefined;
|
|
188
303
|
return url.protocol === 'https:' ? settings.proxy.https : settings.proxy.http;
|
|
189
304
|
}
|
|
305
|
+
// One of npm's settings files, or none when it isn't there, as npm takes it; one that can't be
|
|
306
|
+
// read fails the reads.
|
|
307
|
+
function readOptional(setting, path, readFile) {
|
|
308
|
+
try {
|
|
309
|
+
return readFile(path);
|
|
310
|
+
}
|
|
311
|
+
catch (error) {
|
|
312
|
+
if (!(error instanceof Error))
|
|
313
|
+
throw error;
|
|
314
|
+
if ('code' in error && error.code === 'ENOENT')
|
|
315
|
+
return undefined;
|
|
316
|
+
throw new ProviderError(`could not read npm's ${setting} ${path}: ${error.message}`);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
190
319
|
// The first value that is a string with something in it.
|
|
191
320
|
function text(...values) {
|
|
192
321
|
return values.find((value) => typeof value === 'string' && value !== '');
|
package/build/npm-reads.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"npm-reads.js","sourceRoot":"","sources":["../src/npm-reads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAqBzC,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AAEpD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAErD,kGAAkG;AAClG,qEAAqE;AACrE,MAAM,aAAa,GAAG,MAAM,CAAC;AAE7B,+FAA+F;AAC/F,gGAAgG;AAChG,0DAA0D;AAC1D,MAAM,UAAU,UAAU,CAAC,QAAuB;IAChD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC7C,MAAM,QAAQ,GAAG,CAAC,GAAQ,EAAE,EAAE;QAC5B,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,QAAQ,IAAI,KAAK,IAAI,EAAE,EAAE,CAAC;QAC7C,IAAI,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK;gBACH,GAAG,CAAC,QAAQ,KAAK,QAAQ;oBACvB,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC;wBACd,EAAE,EAAE,QAAQ,CAAC,EAAE;wBACf,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS;wBACpD,kBAAkB,EAAE,QAAQ,CAAC,kBAAkB;qBAChD,CAAC;oBACJ,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;YAC9E,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACzB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IACF,iGAAiG;IACjG,MAAM,IAAI,GAAG,CAAC,GAAQ,EAAE,IAA6B,EAAE,SAAiB,EAAqB,EAAE;QAC7F,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC;QACzC,MAAM,OAAO,GAAG;YACd,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC;YACpB,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACvD,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,KAAK;YAC7B,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,SAAS;SAClC,CAAC;QACF,OAAO,IAAI,OAAO,CAAW,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC/C,MAAM,MAAM,GAAG,CAAC,QAA8B,EAAE,EAAE;gBAChD,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,IAAI,CAAC,CAAC;gBACxC,MAAM,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC;gBACtC,IAAI,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;oBACtC,QAAQ,CAAC,MAAM,EAAE,CAAC;oBAClB,IAAI,SAAS,IAAI,CAAC;wBAAE,MAAM,CAAC,IAAI,SAAS,CAAC,8BAA8B,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;;wBACjF,OAAO,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC;oBAChE,OAAO;gBACT,CAAC;gBACD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;gBAC9B,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC7D,KAAK,MAAM,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;wBAAE,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;gBACpE,CAAC;gBACD,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;oBACvD,QAAQ,CAAC,MAAM,EAAE,CAAC;oBAClB,OAAO,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;oBACjD,OAAO;gBACT,CAAC;gBACD,OAAO,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAA+B,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YACrG,CAAC,CAAC;YACF,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YAClG,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IACF,OAAO,CAAC,KAA6B,EAAE,IAAkB,EAAE,EAAE,CAC3D,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,YAAY,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,sGAAsG;AACtG,qGAAqG;AACrG,0FAA0F;AAC1F,sGAAsG;AACtG,MAAM,UAAU,aAAa,CAC3B,MAAiB,EACjB,GAAsB,EACtB,WAAqC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC;IAEzE,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,UAAU,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;IACtE,MAAM,OAAO,GACX,UAAU,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;IAC7G,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC;IACpG,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;SAC9F,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;SAC5B,MAAM,CAAC,OAAO,CAAC,CAAC;IACnB,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAClC,MAAM,kBAAkB,GAAG,MAAM,CAAC,YAAY,CAAC,KAAK,KAAK,CAAC;IAC1D,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,IAAI,CAAC,EAAE,IAAI,kBAAkB;QAAE,OAAO,IAAI,CAAC;IACpE,OAAO;QACL,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrB,OAAO;QACP,KAAK,EAAE,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;QAC1F,kBAAkB;KACnB,CAAC;AACJ,CAAC;AAED,oGAAoG;AACpG,mGAAmG;AACnG,mBAAmB;AACnB,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE;QACxE,GAAG,EAAE,OAAO,EAAE;QACd,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO;QACnC,SAAS,EAAE,MAAM;KAClB,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,aAAa,CAAC,oDAAoD,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE;YACnG,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;IACL,CAAC;IACD,IAAI,CAAC;QACH,OAAO,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,aAAa,CAAC,qEAAqE,CAAC,CAAC;IACjG,CAAC;AACH,CAAC;AAED,oGAAoG;AACpG,kGAAkG;AAClG,oCAAoC;AACpC,MAAM,UAAU,QAAQ,CAAC,EACvB,GAAG,GAAG,OAAO,CAAC,GAAG,EACjB,IAAI,GAAG,aAAa,EACpB,GAAG,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,EACtB,QAAQ,MAMN,EAAE;IAEJ,IAAI,OAAO,GAAoB,IAAI,CAAC;IACpC,IAAI,MAAM,GAA8C,IAAI,CAAC;IAC7D,MAAM,QAAQ,GAAG,GAAG,EAAE;QACpB,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC;QAC5B,IAAI,MAAM,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC,EAAE,GAAG,aAAa;YAAE,OAAO,MAAM,CAAC,QAAQ,CAAC;QACxE,MAAM,OAAO,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACrC,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;YACnD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACzE,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,OAAO,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE;YACjB,IAAI,OAAO,KAAK,OAAO;gBAAE,OAAO;YAChC,OAAO,GAAG,IAAI,CAAC;YACf,MAAM,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;QAC5C,CAAC,CAAC,CAAC;QACH,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;IACF,OAAO;QACL,KAAK,EAAE,KAAK,EAAE,KAA6B,EAAE,IAAkB,EAAE,EAAE,CAAC,CAAC,MAAM,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC;QACzG,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,MAAM,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC;KACrE,CAAC;AACJ,CAAC;AAED,IAAI,MAAM,GAAoB,IAAI,CAAC;AAEnC,gGAAgG;AAChG,qFAAqF;AACrF,MAAM,UAAU,cAAc;IAC5B,MAAM,KAAK,QAAQ,EAAE,CAAC;IACtB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,oGAAoG;AACpG,6FAA6F;AAC7F,SAAS,IAAI,CAAC,MAAiB,EAAE,QAAkC;IACjE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACnC,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,CAAC;YACH,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC;gBAAE,MAAM,KAAK,CAAC;YAC3C,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,SAAS,CAAC;YACjE,MAAM,IAAI,aAAa,CAAC,+BAA+B,MAAM,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;IACD,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC;IAC5G,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACtC,OAAO,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACtC,CAAC;AAED,2FAA2F;AAC3F,mEAAmE;AACnE,SAAS,QAAQ,CAAC,QAAuB,EAAE,GAAQ;IACjD,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;IAC/C,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;QAC9C,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;QAC5D,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;IACH,IAAI,OAAO;QAAE,OAAO,SAAS,CAAC;IAC9B,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;AAChF,CAAC;AAED,yDAAyD;AACzD,SAAS,IAAI,CAAC,GAAG,MAAiB;IAChC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC;AAC5F,CAAC"}
|
|
1
|
+
{"version":3,"file":"npm-reads.js","sourceRoot":"","sources":["../src/npm-reads.ts"],"names":[],"mappings":"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"}
|
package/build/ownership.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// touch a PR that isn't the asking worker's: another item's, a branch the worktree isn't on, a title
|
|
4
4
|
// without the key, or auto mode where the landing rules say review.
|
|
5
5
|
const BRANCH_TYPES = ['build', 'chore', 'ci', 'docs', 'feat', 'fix', 'perf', 'refactor', 'revert', 'style', 'test'];
|
|
6
|
-
// <type>/<key>-<slug>, such as feat/
|
|
6
|
+
// <type>/<key>-<slug>, such as feat/eng-454-code-host-writes, or null when the type isn't a
|
|
7
7
|
// conventional commit type or the slug is empty once cleaned.
|
|
8
8
|
export function branchName(type, slug, item) {
|
|
9
9
|
const clean = slug
|
|
@@ -12,7 +12,7 @@ export function branchName(type, slug, item) {
|
|
|
12
12
|
.replace(/^-|-$/g, '');
|
|
13
13
|
return BRANCH_TYPES.includes(type) && clean ? `${type}/${item.toLowerCase()}-${clean}` : null;
|
|
14
14
|
}
|
|
15
|
-
// The item key in a branch or worktree name, with the project's key prefix:
|
|
15
|
+
// The item key in a branch or worktree name, with the project's key prefix: eng-454 → ENG-454.
|
|
16
16
|
export function itemKey(text, prefix) {
|
|
17
17
|
const found = new RegExp(`(?:^|[^A-Za-z0-9])(${escape(prefix)}-\\d+)(?![0-9])`, 'i').exec(text);
|
|
18
18
|
return found?.[1]?.toUpperCase() ?? null;
|
package/build/paths.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
import { realpathSync } from 'node:fs';
|
|
1
2
|
import { homedir } from 'node:os';
|
|
2
|
-
import { join, resolve } from 'node:path';
|
|
3
|
+
import { basename, dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';
|
|
4
|
+
// A project's name, as its profile and its folder under <home>/projects give it.
|
|
5
|
+
export const PROJECT_NAME = /^[a-z][a-z0-9-]*$/;
|
|
3
6
|
export function conductorPaths(home = process.env.CONDUCTOR_HOME || defaultHome()) {
|
|
4
7
|
const logs = join(home, 'logs');
|
|
5
8
|
return {
|
|
@@ -12,6 +15,7 @@ export function conductorPaths(home = process.env.CONDUCTOR_HOME || defaultHome(
|
|
|
12
15
|
pid: join(home, 'conductor.pid'),
|
|
13
16
|
plugin: join(home, 'plugin'),
|
|
14
17
|
port: join(home, 'port'),
|
|
18
|
+
projects: join(home, 'projects'),
|
|
15
19
|
rules: join(home, 'rules.json'),
|
|
16
20
|
stopRequest: join(home, 'supervisor.stop'),
|
|
17
21
|
supervisorPid: join(home, 'supervisor.pid'),
|
|
@@ -23,6 +27,45 @@ export function conductorPaths(home = process.env.CONDUCTOR_HOME || defaultHome(
|
|
|
23
27
|
export function isDefaultHome(home) {
|
|
24
28
|
return samePath(home, defaultHome());
|
|
25
29
|
}
|
|
30
|
+
// The project whose clone or worktree a path is in (<projects>/<name>/repo or
|
|
31
|
+
// <projects>/<name>/worktrees/<item>, or a folder below either), or null.
|
|
32
|
+
export function projectOfPath(paths, path) {
|
|
33
|
+
// Real paths on both sides: git reports a checkout's long form, and the home may be a junction or
|
|
34
|
+
// an 8.3 short name.
|
|
35
|
+
const rel = relative(realOr(paths.projects), realOr(path));
|
|
36
|
+
if (rel === '' || rel.startsWith('..') || isAbsolute(rel))
|
|
37
|
+
return null;
|
|
38
|
+
const [name, part] = rel.split(sep);
|
|
39
|
+
if (name === undefined || !(part === 'repo' || part === 'worktrees'))
|
|
40
|
+
return null;
|
|
41
|
+
return PROJECT_NAME.test(name) ? name : null;
|
|
42
|
+
}
|
|
43
|
+
export function projectPaths(paths, name) {
|
|
44
|
+
const dir = join(paths.projects, name);
|
|
45
|
+
return {
|
|
46
|
+
clone: join(dir, 'repo'),
|
|
47
|
+
dir,
|
|
48
|
+
profile: join(paths.projects, `${name}.json`),
|
|
49
|
+
worktrees: join(dir, 'worktrees'),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
// The path with links and short names resolved. A path that isn't there is its deepest folder that
|
|
53
|
+
// is, resolved, with the rest after it, so two spellings of one place still compare equal.
|
|
54
|
+
export function realOr(path) {
|
|
55
|
+
const full = resolve(path);
|
|
56
|
+
for (let dir = full, rest = '';;) {
|
|
57
|
+
try {
|
|
58
|
+
return join(realpathSync.native(dir), rest);
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
const parent = dirname(dir);
|
|
62
|
+
if (parent === dir)
|
|
63
|
+
return full;
|
|
64
|
+
rest = join(basename(dir), rest);
|
|
65
|
+
dir = parent;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
26
69
|
// Whether two paths name the same file, ignoring case on Windows.
|
|
27
70
|
export function samePath(a, b) {
|
|
28
71
|
const norm = (p) => {
|
package/build/paths.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAExF,iFAAiF;AACjF,MAAM,CAAC,MAAM,YAAY,GAAG,mBAAmB,CAAC;AAqChD,MAAM,UAAU,cAAc,CAAC,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,WAAW,EAAE;IAC/E,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAChC,OAAO;QACL,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC;QACjC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;QAC9B,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC;QAC9B,IAAI;QACJ,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC;QAChC,IAAI;QACJ,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC;QAChC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;QAC5B,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC;QACxB,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC;QAChC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC;QAC/B,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC;QAC1C,aAAa,EAAE,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC;QAC3C,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC;KAC3B,CAAC;AACJ,CAAC;AAED,mGAAmG;AACnG,yGAAyG;AACzG,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;AACvC,CAAC;AAED,8EAA8E;AAC9E,0EAA0E;AAC1E,MAAM,UAAU,aAAa,CAAC,KAAuC,EAAE,IAAY;IACjF,kGAAkG;IAClG,qBAAqB;IACrB,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3D,IAAI,GAAG,KAAK,EAAE,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACvE,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IAClF,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAuC,EAAE,IAAY;IAChF,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACvC,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;QACxB,GAAG;QACH,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,IAAI,OAAO,CAAC;QAC7C,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC;KAClC,CAAC;AACJ,CAAC;AAED,mGAAmG;AACnG,2FAA2F;AAC3F,MAAM,UAAU,MAAM,CAAC,IAAY;IACjC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,KAAK,IAAI,GAAG,GAAG,IAAI,EAAE,IAAI,GAAG,EAAE,IAAK,CAAC;QAClC,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,MAAM,KAAK,GAAG;gBAAE,OAAO,IAAI,CAAC;YAChC,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;YACjC,GAAG,GAAG,MAAM,CAAC;QACf,CAAC;IACH,CAAC;AACH,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,QAAQ,CAAC,CAAS,EAAE,CAAS;IAC3C,MAAM,IAAI,GAAG,CAAC,CAAS,EAAU,EAAE;QACjC,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACxB,OAAO,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAClE,CAAC,CAAC;IACF,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,WAAW;IAClB,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC;AACvC,CAAC"}
|
package/build/plugin.js
CHANGED
|
@@ -12,6 +12,8 @@ import { outputOf } from "./run.js";
|
|
|
12
12
|
// runs on silently without the plugin (ATK-522). Other sessions never see it.
|
|
13
13
|
// The plugin's name, which namespaces its skills: /conductor:work-item.
|
|
14
14
|
export const PLUGIN_NAME = 'conductor';
|
|
15
|
+
// The plugin's reference work skill: what `conduct init` writes as a new profile's `skills.work`.
|
|
16
|
+
export const WORK_SKILL = `${PLUGIN_NAME}:work-item`;
|
|
15
17
|
const USER_MOD = `${PLUGIN_NAME}@${PLUGIN_NAME}`;
|
|
16
18
|
// Claude Code writes these into a plugin folder each time it loads it (its API's types, a
|
|
17
19
|
// tsconfig), and the tests aren't shipped: a refresh neither copies nor removes them.
|
|
@@ -30,7 +32,7 @@ export function missingPluginSkills(dir, names) {
|
|
|
30
32
|
}
|
|
31
33
|
// Which of the named skills outside the plugin a session in the worktree wouldn't find: neither in
|
|
32
34
|
// its .claude/skills nor in the user's (`skillsHome`, ~/.claude/skills). A project's skills arrive
|
|
33
|
-
// through its `setup` (
|
|
35
|
+
// through its `setup` (a command that installs them), so this checks only that they arrived.
|
|
34
36
|
export function missingProjectSkills(worktree, names, skillsHome) {
|
|
35
37
|
const found = (dir, name) => existsSync(join(dir, name, 'SKILL.md'));
|
|
36
38
|
const missing = projectSkills(names).filter((name) => !found(join(worktree, '.claude', 'skills'), name) && !found(skillsHome, name));
|
|
@@ -39,7 +41,7 @@ export function missingProjectSkills(worktree, names, skillsHome) {
|
|
|
39
41
|
: `${missing.join(', ')} not in ${join(worktree, '.claude', 'skills')} or ${skillsHome} after setup`;
|
|
40
42
|
}
|
|
41
43
|
// A skill named `conductor:<skill>` is the conductor plugin's, which `--plugin-dir` loads; any
|
|
42
|
-
// other is one the project installs
|
|
44
|
+
// other is one the project installs itself. The note headings take the bare name.
|
|
43
45
|
export function noteName(name) {
|
|
44
46
|
return pluginSkill(name) ?? name;
|
|
45
47
|
}
|
package/build/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC9G,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAkB,MAAM,UAAU,CAAC;AAEpD,mGAAmG;AACnG,iGAAiG;AACjG,iGAAiG;AACjG,oGAAoG;AACpG,8EAA8E;AAE9E,wEAAwE;AACxE,MAAM,CAAC,MAAM,WAAW,GAAG,WAAW,CAAC;AACvC,MAAM,QAAQ,GAAG,GAAG,WAAW,IAAI,WAAW,EAAE,CAAC;AAEjD,0FAA0F;AAC1F,sFAAsF;AACtF,MAAM,SAAS,GAAG,CAAC,UAAU,EAAE,2BAA2B,EAAE,uBAAuB,CAAC,CAAC;AAErF,gGAAgG;AAChG,0DAA0D;AAC1D,MAAM,IAAI,GAAG,CAAC,oBAAoB,EAAE,kBAAkB,CAAC,CAAC;AAOxD,uGAAuG;AACvG,MAAM,UAAU,mBAAmB,CAAC,GAAW,EAAE,KAAwB;IACvE,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAC/B,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACpC,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QAChC,OAAO,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IACH,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,iCAAiC,GAAG,GAAG,CAAC;AACpG,CAAC;AAED,mGAAmG;AACnG,mGAAmG;AACnG,
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { gt, lt, valid } from 'semver';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { parseJsonc } from "./jsonc.js";
|
|
4
|
+
// The first conductor that reads protocol 2: one older refuses the profile on `protocol` first, so
|
|
5
|
+
// a field it already read needs no minimum.
|
|
6
|
+
export const PROTOCOL_2 = '2.0.0';
|
|
7
|
+
// The conductor that first read each profile field as it is written today (ATK-577): a reshaped
|
|
8
|
+
// field takes the version of its new shape. A profile that writes a field newer than PROTOCOL_2
|
|
9
|
+
// needs its `conductor` minimum at or above that version. The type makes a new field a typecheck
|
|
10
|
+
// error until it has a version; the README (On PATH) says which one a new field takes. A key
|
|
11
|
+
// two tracker kinds share takes the newer kind's (Linear's releaseWait is 2.0.0's).
|
|
12
|
+
export const FIELD_SINCE = {
|
|
13
|
+
approvers: PROTOCOL_2,
|
|
14
|
+
areaRelease: '2.2.0-dev.2',
|
|
15
|
+
baseBranch: PROTOCOL_2,
|
|
16
|
+
ci: PROTOCOL_2,
|
|
17
|
+
'ci.kind': PROTOCOL_2,
|
|
18
|
+
'ci.organization': '3.0.0-dev.31',
|
|
19
|
+
'ci.project': '3.0.0-dev.31',
|
|
20
|
+
codeHost: PROTOCOL_2,
|
|
21
|
+
'codeHost.kind': PROTOCOL_2,
|
|
22
|
+
'codeHost.organization': PROTOCOL_2,
|
|
23
|
+
'codeHost.owner': PROTOCOL_2,
|
|
24
|
+
'codeHost.project': PROTOCOL_2,
|
|
25
|
+
'codeHost.repo': PROTOCOL_2,
|
|
26
|
+
'codeHost.repository': PROTOCOL_2,
|
|
27
|
+
conductor: '3.0.0-dev.9',
|
|
28
|
+
gates: PROTOCOL_2,
|
|
29
|
+
health: PROTOCOL_2,
|
|
30
|
+
localFilesFrom: '3.0.0-dev.4',
|
|
31
|
+
name: PROTOCOL_2,
|
|
32
|
+
npm: PROTOCOL_2,
|
|
33
|
+
'npm.package': PROTOCOL_2,
|
|
34
|
+
ports: '3.0.0-dev.4',
|
|
35
|
+
protocol: PROTOCOL_2,
|
|
36
|
+
release: PROTOCOL_2,
|
|
37
|
+
'release.handoff': PROTOCOL_2,
|
|
38
|
+
releases: PROTOCOL_2,
|
|
39
|
+
'releases.key': PROTOCOL_2,
|
|
40
|
+
'releases.kind': PROTOCOL_2,
|
|
41
|
+
'releases.package': PROTOCOL_2,
|
|
42
|
+
'releases.pipeline': PROTOCOL_2,
|
|
43
|
+
rules: PROTOCOL_2,
|
|
44
|
+
'rules.do': PROTOCOL_2,
|
|
45
|
+
'rules.id': PROTOCOL_2,
|
|
46
|
+
'rules.note': PROTOCOL_2,
|
|
47
|
+
'rules.when': PROTOCOL_2,
|
|
48
|
+
setup: '3.0.0-dev.4',
|
|
49
|
+
skills: PROTOCOL_2,
|
|
50
|
+
'skills.aliases': PROTOCOL_2,
|
|
51
|
+
'skills.verify': PROTOCOL_2,
|
|
52
|
+
'skills.work': PROTOCOL_2,
|
|
53
|
+
slots: PROTOCOL_2,
|
|
54
|
+
tracker: PROTOCOL_2,
|
|
55
|
+
'tracker.areaLabelGroup': PROTOCOL_2,
|
|
56
|
+
'tracker.areaPrefix': PROTOCOL_2,
|
|
57
|
+
'tracker.areaRoot': PROTOCOL_2,
|
|
58
|
+
'tracker.humanLabel': PROTOCOL_2,
|
|
59
|
+
'tracker.key': PROTOCOL_2,
|
|
60
|
+
'tracker.kind': PROTOCOL_2,
|
|
61
|
+
'tracker.organization': PROTOCOL_2,
|
|
62
|
+
'tracker.owner': PROTOCOL_2,
|
|
63
|
+
'tracker.priority': PROTOCOL_2,
|
|
64
|
+
'tracker.project': PROTOCOL_2,
|
|
65
|
+
'tracker.query': PROTOCOL_2,
|
|
66
|
+
'tracker.queue': PROTOCOL_2,
|
|
67
|
+
'tracker.queue.label': '3.0.0-dev.32',
|
|
68
|
+
'tracker.queue.priority': '3.0.0-dev.32',
|
|
69
|
+
'tracker.queueLabel': PROTOCOL_2,
|
|
70
|
+
'tracker.releaseWait': '2.2.0-dev.3',
|
|
71
|
+
'tracker.releaseWait.label': '2.2.0-dev.3',
|
|
72
|
+
'tracker.releaseWait.shipped': '2.2.0-dev.3',
|
|
73
|
+
'tracker.repo': PROTOCOL_2,
|
|
74
|
+
'tracker.states': PROTOCOL_2,
|
|
75
|
+
'tracker.team': PROTOCOL_2,
|
|
76
|
+
'tracker.transitions': PROTOCOL_2,
|
|
77
|
+
'tracker.transitions.landed': PROTOCOL_2,
|
|
78
|
+
'tracker.transitions.pr-opened': PROTOCOL_2,
|
|
79
|
+
'tracker.transitions.started': PROTOCOL_2,
|
|
80
|
+
'tracker.triageLabel': PROTOCOL_2,
|
|
81
|
+
'tracker.workItemType': PROTOCOL_2,
|
|
82
|
+
train: PROTOCOL_2,
|
|
83
|
+
'train.maxHours': PROTOCOL_2,
|
|
84
|
+
'train.minimum': PROTOCOL_2,
|
|
85
|
+
'train.repo': PROTOCOL_2,
|
|
86
|
+
weight: PROTOCOL_2,
|
|
87
|
+
work: PROTOCOL_2,
|
|
88
|
+
'work.hooks': PROTOCOL_2,
|
|
89
|
+
'work.landing': PROTOCOL_2,
|
|
90
|
+
'work.landing.review': PROTOCOL_2,
|
|
91
|
+
'work.landing.reviewTiers': PROTOCOL_2,
|
|
92
|
+
workers: PROTOCOL_2,
|
|
93
|
+
'workers.tab': PROTOCOL_2,
|
|
94
|
+
};
|
|
95
|
+
// minimumProblems with the version that clears them, for `conduct project check`'s fix (ATK-580).
|
|
96
|
+
export function minimumCheck(text, source, since = FIELD_SINCE) {
|
|
97
|
+
const profile = parseJsonc(text, z.unknown(), source);
|
|
98
|
+
const conductor = typeof profile === 'object' && profile !== null && 'conductor' in profile ? profile.conductor : undefined;
|
|
99
|
+
const minimum = typeof conductor === 'string' ? valid(conductor) : null;
|
|
100
|
+
const theirs = minimum !== null
|
|
101
|
+
? `the profile's minimum is ${minimum}`
|
|
102
|
+
: conductor === undefined
|
|
103
|
+
? 'the profile sets no "conductor" minimum'
|
|
104
|
+
: `the profile's minimum ${JSON.stringify(conductor)} is not a version`;
|
|
105
|
+
// `tracker` and `tracker.releaseWait` for `tracker.releaseWait.label`.
|
|
106
|
+
const parents = new Set();
|
|
107
|
+
for (const path of Object.keys(since))
|
|
108
|
+
for (let dot = path.indexOf('.'); dot !== -1; dot = path.indexOf('.', dot + 1))
|
|
109
|
+
parents.add(path.slice(0, dot));
|
|
110
|
+
const problems = [];
|
|
111
|
+
let needs = null;
|
|
112
|
+
for (const path of new Set(writtenFields(profile, parents))) {
|
|
113
|
+
const version = since[path];
|
|
114
|
+
if (version === undefined)
|
|
115
|
+
problems.push(`${path}: no conductor version recorded for it in profile-fields.ts`);
|
|
116
|
+
else if (lt(minimum ?? PROTOCOL_2, version)) {
|
|
117
|
+
problems.push(`${path}: needs conductor ${version} or newer; ${theirs}`);
|
|
118
|
+
if (needs === null || gt(version, needs))
|
|
119
|
+
needs = version;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// Raising the minimum writes `conductor`, so the version also covers the conductor that reads it.
|
|
123
|
+
const key = since.conductor;
|
|
124
|
+
if (needs !== null && key !== undefined && gt(key, needs))
|
|
125
|
+
needs = key;
|
|
126
|
+
return { needs, problems };
|
|
127
|
+
}
|
|
128
|
+
// Where a profile's `conductor` minimum is below a field it writes, one line each: a field newer
|
|
129
|
+
// than the minimum, or than PROTOCOL_2 when it sets none, and a field with no recorded version. A
|
|
130
|
+
// conductor test holds this repo's own profile to it, so a PR that writes a new field raises the minimum too.
|
|
131
|
+
export function minimumProblems(text, source, since = FIELD_SINCE) {
|
|
132
|
+
return minimumCheck(text, source, since).problems;
|
|
133
|
+
}
|
|
134
|
+
// The fields a profile writes, by their paths in FIELD_SINCE, in the order it writes them. Fields
|
|
135
|
+
// a default fills in aren't written, so they need nothing. It looks inside a key only when it is
|
|
136
|
+
// one of `parents`, the paths FIELD_SINCE records fields below, so a record's own names (health's
|
|
137
|
+
// environments) aren't fields.
|
|
138
|
+
function* writtenFields(value, parents, prefix = '') {
|
|
139
|
+
if (Array.isArray(value)) {
|
|
140
|
+
for (const item of value)
|
|
141
|
+
yield* writtenFields(item, parents, prefix);
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
if (value === null || typeof value !== 'object')
|
|
145
|
+
return;
|
|
146
|
+
for (const [key, child] of Object.entries(value)) {
|
|
147
|
+
const path = prefix === '' ? key : `${prefix}.${key}`;
|
|
148
|
+
yield path;
|
|
149
|
+
if (parents.has(path))
|
|
150
|
+
yield* writtenFields(child, parents, path);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=profile-fields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile-fields.js","sourceRoot":"","sources":["../src/profile-fields.ts"],"names":[],"mappings":"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"}
|