@detergent-software/conductor 3.0.0-dev.4 → 3.0.0-dev.40
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 +339 -0
- package/README.md +270 -123
- 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 +15 -10
- package/build/broker-cli.js.map +1 -1
- package/build/broker.js +1 -1
- package/build/broker.js.map +1 -1
- package/build/claude.js +48 -2
- package/build/claude.js.map +1 -1
- package/build/cli.js +221 -71
- 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 +158 -39
- 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 +140 -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 +43 -27
- package/build/console.js.map +1 -1
- package/build/credentials.js +49 -36
- package/build/credentials.js.map +1 -1
- package/build/daemon.js +57 -66
- package/build/daemon.js.map +1 -1
- package/build/file-lock.js +35 -3
- 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 +228 -82
- 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 +50 -34
- package/build/inbox.js.map +1 -1
- package/build/init.js +509 -0
- package/build/init.js.map +1 -0
- package/build/landing.js +86 -7
- 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 +4 -3
- package/build/lib/providers/index.js.map +1 -1
- package/build/lib/providers/npm/stage.js +28 -5
- 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 +1 -1
- package/build/logins.js.map +1 -1
- package/build/manager.js +131 -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 +323 -0
- package/build/npm-reads.js.map +1 -0
- 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 +19 -19
- package/build/project-check-cli.js.map +1 -1
- package/build/project-check.js +194 -108
- 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 -18
- package/build/watchers/ado.js.map +1 -1
- package/build/watchers/github.js +19 -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/npm.js +6 -4
- package/build/watchers/npm.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 +57 -53
- 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/config.js
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { readFileSync } from 'node:fs';
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
import { isMissing } from "./errors.js";
|
|
4
|
+
import { TERMINALS } from "./host/terminal.js";
|
|
4
5
|
import { parseJsonc } from "./jsonc.js";
|
|
5
|
-
import { renamedHint, renamedTo } from "./protocol.js";
|
|
6
6
|
import { INBOX_KINDS } from "./store.js";
|
|
7
7
|
// Where the notifier sends (design note, section 10): Remote Control through the conductor mod in
|
|
8
|
-
// the console,
|
|
9
|
-
|
|
8
|
+
// the console, Pushover from the daemon, and a webhook (design note v2, section 8) the daemon POSTs
|
|
9
|
+
// each push to as JSON. Teams is ATK-307.
|
|
10
|
+
export const CHANNELS = ['remote-control', 'pushover', 'webhook'];
|
|
11
|
+
export const SCHEDULER_MODES = ['on', 'off'];
|
|
10
12
|
export const DAYS = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];
|
|
11
13
|
// A local time of day, such as 07:00.
|
|
12
14
|
const clockTime = z.string().regex(/^([01]\d|2[0-3]):[0-5]\d$/, 'a local time as HH:MM, such as 07:00');
|
|
@@ -24,15 +26,7 @@ export const notifyRuleSchema = z.strictObject({
|
|
|
24
26
|
.string()
|
|
25
27
|
.regex(/^([01]\d|2[0-3]):[0-5]\d-([01]\d|2[0-3]):[0-5]\d$/, 'local times as HH:MM-HH:MM, such as 08:00-18:00')
|
|
26
28
|
.optional(),
|
|
27
|
-
kinds: z
|
|
28
|
-
.array(z.enum(INBOX_KINDS, {
|
|
29
|
-
error: (issue) => {
|
|
30
|
-
const word = typeof issue.input === 'string' ? issue.input : undefined;
|
|
31
|
-
return renamedTo(word) === undefined ? undefined : `"${word ?? ''}" is not an inbox kind${renamedHint(word)}`;
|
|
32
|
-
},
|
|
33
|
-
}))
|
|
34
|
-
.min(1)
|
|
35
|
-
.optional(),
|
|
29
|
+
kinds: z.array(z.enum(INBOX_KINDS)).min(1).optional(),
|
|
36
30
|
projects: z.array(z.string().min(1)).min(1).optional(),
|
|
37
31
|
remind: remindSchema.optional(),
|
|
38
32
|
to: z.array(z.enum(CHANNELS)),
|
|
@@ -50,8 +44,8 @@ export const BUILT_IN_PROFILES = {
|
|
|
50
44
|
],
|
|
51
45
|
};
|
|
52
46
|
// The credentials one project's provider calls use (credentials.ts), least privilege first: `token`
|
|
53
|
-
// (Linear's `credential`) names the
|
|
54
|
-
// scoped to this project, and wins over the machine's token and over the CLI login. `tenant` and
|
|
47
|
+
// (Linear's `credential`) names the credential in the machine's secret store (host/secrets.ts) whose
|
|
48
|
+
// password is a token scoped to this project, and wins over the machine's token and over the CLI login. `tenant` and
|
|
55
49
|
// `user` pick the CLI login (az's tenant, gh's account) when there is no token. Each is optional.
|
|
56
50
|
// The tenant reaches `az` through a shell on Windows, so it is a tenant id or domain and nothing else.
|
|
57
51
|
const credentialTarget = z.string().trim().min(1);
|
|
@@ -79,14 +73,12 @@ const projectAccountsSchema = z.strictObject({
|
|
|
79
73
|
// ~/.conductor/config.json: machine settings. Strict, so a misspelt key fails startup instead of
|
|
80
74
|
// being ignored. Rules live beside it, in rules.json (rules-service.ts).
|
|
81
75
|
export const configSchema = z.strictObject({
|
|
82
|
-
//
|
|
83
|
-
|
|
76
|
+
// The projects' clones the daemon owns (clones.ts, design note v2, section 2).
|
|
77
|
+
clones: z
|
|
84
78
|
.strictObject({
|
|
85
|
-
// How often each
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
// notify: only raise the inbox item that says so; off: no check.
|
|
89
|
-
mode: z.enum(['update', 'notify', 'off']).default('update'),
|
|
79
|
+
// How often each clone fetches origin, after which a changed .claude/conductor.json on the base
|
|
80
|
+
// branch is taken. A worktree's create fetches its base branch as well.
|
|
81
|
+
fetchMinutes: z.number().min(1).max(1440).default(10),
|
|
90
82
|
})
|
|
91
83
|
.prefault({}),
|
|
92
84
|
// The inbox (design note, section 7).
|
|
@@ -119,11 +111,11 @@ export const configSchema = z.strictObject({
|
|
|
119
111
|
profiles: z
|
|
120
112
|
.record(z.string().regex(/^[a-z][a-z0-9-]*$/, 'a profile name in lower case, such as away'), z.array(notifyRuleSchema))
|
|
121
113
|
.default({}),
|
|
122
|
-
// The app token and user key are secrets, so they live in
|
|
123
|
-
// password and user name) or in PUSHOVER_TOKEN and PUSHOVER_USER, never here.
|
|
114
|
+
// The app token and user key are secrets, so they live in the machine's secret store (the
|
|
115
|
+
// credential's password and user name) or in PUSHOVER_TOKEN and PUSHOVER_USER, never here.
|
|
124
116
|
pushover: z
|
|
125
117
|
.strictObject({
|
|
126
|
-
// Absent:
|
|
118
|
+
// Absent: conductor-pushover in ~/.conductor, none in a scratch home (pushoverCredential),
|
|
127
119
|
// so a daemon run for a test can't push to the machine's phone (ATK-506).
|
|
128
120
|
credential: z.string().min(1).optional(),
|
|
129
121
|
// Pushover's priority: -2 (no alert) to 1 (high). 2 (emergency) needs receipts, not built.
|
|
@@ -134,11 +126,31 @@ export const configSchema = z.strictObject({
|
|
|
134
126
|
remind: remindSchema.prefault({}),
|
|
135
127
|
// How often reminders, the quiet-hours summary and an expiring profile are checked.
|
|
136
128
|
tickSeconds: z.number().min(1).max(600).default(60),
|
|
129
|
+
// The webhook channel: each push is one POST of JSON to `url` (webhook.ts). `credential` names
|
|
130
|
+
// one in the machine's secret store whose password goes out as a bearer token. Off when absent:
|
|
131
|
+
// a rule that sends to `webhook` then fails, and `conduct notify` says why.
|
|
132
|
+
webhook: z
|
|
133
|
+
.strictObject({
|
|
134
|
+
credential: z.string().min(1).optional(),
|
|
135
|
+
timeoutSeconds: z.number().min(1).max(120).default(15),
|
|
136
|
+
url: z.url({ protocol: /^https?$/ }),
|
|
137
|
+
})
|
|
138
|
+
// The token would cross the network in the clear.
|
|
139
|
+
.refine((w) => w.credential === undefined || w.url.startsWith('https:') || isLoopback(w.url), {
|
|
140
|
+
message: 'a webhook with a credential needs an https URL (or one on this machine)',
|
|
141
|
+
path: ['url'],
|
|
142
|
+
})
|
|
143
|
+
.optional(),
|
|
137
144
|
})
|
|
138
145
|
.prefault({})
|
|
139
146
|
.refine((n) => Object.hasOwn(BUILT_IN_PROFILES, n.profile) || Object.hasOwn(n.profiles, n.profile), {
|
|
140
147
|
message: 'notify.profile names no profile (built in: away, default, focus)',
|
|
141
148
|
path: ['profile'],
|
|
149
|
+
})
|
|
150
|
+
// Pushes to it would fail every time, retried with no end.
|
|
151
|
+
.refine((n) => n.webhook !== undefined || !Object.values(n.profiles).some((p) => p.some((r) => r.to.includes('webhook'))), {
|
|
152
|
+
message: 'a profile sends to webhook, and notify.webhook has no url',
|
|
153
|
+
path: ['webhook'],
|
|
142
154
|
}),
|
|
143
155
|
// The one person this daemon serves (design note v2, section 6): the name messages call them by.
|
|
144
156
|
operator: z.strictObject({ name: z.string().trim().min(1).default('the operator') }).prefault({}),
|
|
@@ -172,9 +184,13 @@ export const configSchema = z.strictObject({
|
|
|
172
184
|
// The daily soft cap of the built-in `daily-cap` rule: past this many tokens today (cache
|
|
173
185
|
// reads aside), across projects, no new launches until tomorrow.
|
|
174
186
|
dailyTokens: z.int().min(1).default(20_000_000),
|
|
175
|
-
// on: launch and retire;
|
|
176
|
-
//
|
|
177
|
-
mode: z
|
|
187
|
+
// on: launch and retire; off: no timed queue, and a queue read on demand (`conduct queue`)
|
|
188
|
+
// logs the picks and does none of them. observe was removed in 3.0.0 (ATK-531).
|
|
189
|
+
mode: z
|
|
190
|
+
.enum(SCHEDULER_MODES, {
|
|
191
|
+
error: (issue) => issue.input === 'observe' ? 'observe was removed: use off, which launches nothing' : undefined,
|
|
192
|
+
})
|
|
193
|
+
.default('on'),
|
|
178
194
|
// Workers running at once across projects; each project's profile sets its own share. It is
|
|
179
195
|
// also the hard limit: no rule or focus gives a project more.
|
|
180
196
|
slots: z.int().min(1).max(16).default(4),
|
|
@@ -210,7 +226,7 @@ export const configSchema = z.strictObject({
|
|
|
210
226
|
conflictMinutes: z.number().positive().max(1440).default(30),
|
|
211
227
|
github: watcher(30, 30),
|
|
212
228
|
health: watcher(30, 30),
|
|
213
|
-
// Linear allows a key 1500 requests an hour, and
|
|
229
|
+
// Linear allows a key 1500 requests an hour, and the scheduler's queue reads use the same key.
|
|
214
230
|
linear: watcher(30, 10),
|
|
215
231
|
// A lost login's re-probe, and `conduct wait login`: each probe asks its provider once or twice.
|
|
216
232
|
login: watcher(60, 30),
|
|
@@ -219,6 +235,16 @@ export const configSchema = z.strictObject({
|
|
|
219
235
|
statsMinutes: z.number().min(1).max(1440).default(10),
|
|
220
236
|
})
|
|
221
237
|
.prefault({}),
|
|
238
|
+
// Workers run headless, as background sessions. `tab` also opens a tab on each launch, attached
|
|
239
|
+
// to the session; `conduct attach` opens one either way. `terminal` is where tabs and the console
|
|
240
|
+
// open (host/terminal.ts): auto is Windows Terminal, iTerm or Terminal on macOS, and tmux elsewhere.
|
|
241
|
+
// Was the profile's `workers.tab` until ATK-529: a machine's choice, not the repo's.
|
|
242
|
+
workers: z
|
|
243
|
+
.strictObject({
|
|
244
|
+
tab: z.boolean().default(false),
|
|
245
|
+
terminal: z.enum(TERMINALS).default('auto'),
|
|
246
|
+
})
|
|
247
|
+
.prefault({}),
|
|
222
248
|
});
|
|
223
249
|
// A missing file means every default; any other read error is a real problem.
|
|
224
250
|
export function loadConfig(file) {
|
|
@@ -236,6 +262,10 @@ export function loadConfig(file) {
|
|
|
236
262
|
export function parseConfig(text, source) {
|
|
237
263
|
return parseJsonc(text, configSchema, source);
|
|
238
264
|
}
|
|
265
|
+
function isLoopback(url) {
|
|
266
|
+
const host = new URL(url).hostname;
|
|
267
|
+
return host === 'localhost' || host === '[::1]' || /^127\.\d+\.\d+\.\d+$/.test(host);
|
|
268
|
+
}
|
|
239
269
|
function watcher(intervalSeconds, perMinute) {
|
|
240
270
|
return z
|
|
241
271
|
.strictObject({
|
package/build/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,kGAAkG;AAClG,+DAA+D;AAC/D,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,gBAAgB,EAAE,UAAU,CAAU,CAAC;AAGhE,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAU,CAAC;AAE/E,sCAAsC;AACtC,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,2BAA2B,EAAE,sCAAsC,CAAC,CAAC;AAExG,MAAM,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC;IAClC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IAC/C,gDAAgD;IAChD,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;CACzC,CAAC,CAAC;AAEH,kGAAkG;AAClG,sGAAsG;AACtG,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC,YAAY,CAAC;IAC7C,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC7C,qFAAqF;IACrF,KAAK,EAAE,CAAC;SACL,MAAM,EAAE;SACR,KAAK,CAAC,mDAAmD,EAAE,iDAAiD,CAAC;SAC7G,QAAQ,EAAE;IACb,KAAK,EAAE,CAAC;SACL,KAAK,CACJ,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE;QAClB,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;YACf,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;YACvE,OAAO,SAAS,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,EAAE,yBAAyB,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QAChH,CAAC;KACF,CAAC,CACH;SACA,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,EAAE;IACb,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACtD,MAAM,EAAE,YAAY,CAAC,QAAQ,EAAE;IAC/B,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;CAC9B,CAAC,CAAC;AAIH,uGAAuG;AACvG,gGAAgG;AAChG,kGAAkG;AAClG,sGAAsG;AACtG,sEAAsE;AACtE,MAAM,CAAC,MAAM,iBAAiB,GAAoD;IAChF,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;IAC5B,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,gBAAgB,EAAE,UAAU,CAAC,EAAE,CAAC;IACjD,KAAK,EAAE;QACL,EAAE,KAAK,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,gBAAgB,EAAE,UAAU,CAAC,EAAE;KACpH;CACF,CAAC;AAEF,oGAAoG;AACpG,sGAAsG;AACtG,iGAAiG;AACjG,kGAAkG;AAClG,uGAAuG;AACvG,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAClD,MAAM,qBAAqB,GAAG,CAAC,CAAC,YAAY,CAAC;IAC3C,GAAG,EAAE,CAAC;SACH,YAAY,CAAC;QACZ,MAAM,EAAE,CAAC;aACN,MAAM,EAAE;aACR,KAAK,CAAC,qBAAqB,EAAE,4CAA4C,CAAC;aAC1E,QAAQ,EAAE;QACb,KAAK,EAAE,gBAAgB,CAAC,QAAQ,EAAE;KACnC,CAAC;SACD,QAAQ,EAAE;IACb,MAAM,EAAE,CAAC;SACN,YAAY,CAAC;QACZ,KAAK,EAAE,gBAAgB,CAAC,QAAQ,EAAE;QAClC,IAAI,EAAE,CAAC;aACJ,MAAM,EAAE;aACR,KAAK,CAAC,4CAA4C,EAAE,oBAAoB,CAAC;aACzE,QAAQ,EAAE;KACd,CAAC;SACD,QAAQ,EAAE;IACb,MAAM,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC,CAAC,QAAQ,EAAE;CACpE,CAAC,CAAC;AAEH,iGAAiG;AACjG,yEAAyE;AACzE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,YAAY,CAAC;IACzC,mEAAmE;IACnE,QAAQ,EAAE,CAAC;SACR,YAAY,CAAC;QACZ,uFAAuF;QACvF,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;QACxD,sFAAsF;QACtF,iEAAiE;QACjE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;KAC5D,CAAC;SACD,QAAQ,CAAC,EAAE,CAAC;IACf,sCAAsC;IACtC,KAAK,EAAE,CAAC;SACL,YAAY,CAAC;QACZ,6FAA6F;QAC7F,4FAA4F;QAC5F,oFAAoF;QACpF,aAAa,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;KACjD,CAAC;SACD,QAAQ,CAAC,EAAE,CAAC;IACf,yCAAyC;IACzC,GAAG,EAAE,CAAC;SACH,YAAY,CAAC;QACZ,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QACvC,QAAQ,EAAE,CAAC;aACR,GAAG,EAAE;aACL,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC;aACd,OAAO,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;KAC5B,CAAC;SACD,QAAQ,CAAC,EAAE,CAAC;IACf,wEAAwE;IACxE,MAAM,EAAE,CAAC;SACN,YAAY,CAAC;QACZ,8FAA8F;QAC9F,0EAA0E;QAC1E,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5C,4DAA4D;QAC5D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;QAC7C,QAAQ,EAAE,CAAC;aACR,MAAM,CACL,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,mBAAmB,EAAE,4CAA4C,CAAC,EACnF,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAC1B;aACA,OAAO,CAAC,EAAE,CAAC;QACd,+FAA+F;QAC/F,8EAA8E;QAC9E,QAAQ,EAAE,CAAC;aACR,YAAY,CAAC;YACZ,+FAA+F;YAC/F,0EAA0E;YAC1E,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;YACxC,2FAA2F;YAC3F,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;SAC5C,CAAC;aACD,QAAQ,CAAC,EAAE,CAAC;QACf,0EAA0E;QAC1E,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjC,oFAAoF;QACpF,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;KACpD,CAAC;SACD,QAAQ,CAAC,EAAE,CAAC;SACZ,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE;QAClG,OAAO,EAAE,kEAAkE;QAC3E,IAAI,EAAE,CAAC,SAAS,CAAC;KAClB,CAAC;IACJ,iGAAiG;IACjG,QAAQ,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;IACjG,yFAAyF;IACzF,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1C,+FAA+F;IAC/F,+FAA+F;IAC/F,oFAAoF;IACpF,KAAK,EAAE,CAAC;SACL,YAAY,CAAC;QACZ,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;QACnD,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;KACnD,CAAC;SACD,QAAQ,CAAC,EAAE,CAAC;SACZ,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,0CAA0C,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IAC7G,8FAA8F;IAC9F,sFAAsF;IACtF,QAAQ,EAAE,CAAC;SACR,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,mBAAmB,EAAE,2CAA2C,CAAC,EAAE,qBAAqB,CAAC;SACjH,OAAO,CAAC,EAAE,CAAC;IACd,gGAAgG;IAChG,0EAA0E;IAC1E,UAAU,EAAE,CAAC;SACV,YAAY,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC;SAChD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,oCAAoC,EAAE,CAAC;SACjF,QAAQ,EAAE;SACV,OAAO,CAAC,IAAI,CAAC;IAChB,qEAAqE;IACrE,SAAS,EAAE,CAAC;SACT,YAAY,CAAC;QACZ,0FAA0F;QAC1F,iEAAiE;QACjE,WAAW,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;QAC/C,6FAA6F;QAC7F,iFAAiF;QACjF,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;QACpD,4FAA4F;QAC5F,8DAA8D;QAC9D,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QACxC,8CAA8C;QAC9C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;KACvD,CAAC;SACD,QAAQ,CAAC,EAAE,CAAC;IACf,gDAAgD;IAChD,QAAQ,EAAE,CAAC;SACR,YAAY,CAAC;QACZ,gGAAgG;QAChG,8FAA8F;QAC9F,8CAA8C;QAC9C,aAAa,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;QAC9C,0CAA0C;QAC1C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9C,iDAAiD;QACjD,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;QACnD,+DAA+D;QAC/D,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,6FAA6F;QAC7F,sDAAsD;QACtD,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;KACrD,CAAC;SACD,QAAQ,CAAC,EAAE,CAAC;IACf,+FAA+F;IAC/F,oGAAoG;IACpG,QAAQ,EAAE,CAAC;SACR,YAAY,CAAC;QACZ,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC;QACpB,8FAA8F;QAC9F,yCAAyC;QACzC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5D,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC;QACvB,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC;QACvB,sFAAsF;QACtF,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC;QACvB,iGAAiG;QACjG,KAAK,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC;QACtB,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC;QACpB,4EAA4E;QAC5E,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;KACtD,CAAC;SACD,QAAQ,CAAC,EAAE,CAAC;CAChB,CAAC,CAAC;AAIH,8EAA8E;AAC9E,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,SAAS,CAAC,KAAK,CAAC;YAAE,OAAO,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACpD,MAAM,KAAK,CAAC;IACd,CAAC;IACD,OAAO,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,MAAc;IACtD,OAAO,UAAU,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,OAAO,CAAC,eAAuB,EAAE,SAAiB;IACzD,OAAO,CAAC;SACL,YAAY,CAAC;QACZ,mFAAmF;QACnF,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC;QACrE,SAAS,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;KACtD,CAAC;SACD,QAAQ,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/build/console.js
CHANGED
|
@@ -7,13 +7,13 @@ import { inboxItemSchema } from "./store.js";
|
|
|
7
7
|
// appends `console.escalated`, and the conductor mod wakes the console's model with it. The console
|
|
8
8
|
// reports back with `console.handled`, whose cause is the escalation, so `conduct why` follows a
|
|
9
9
|
// finding to the rule behind it. An escalation raised while no console was open stays open until a
|
|
10
|
-
// console handles it, and the inbox tells
|
|
10
|
+
// console handles it, and the inbox tells the operator to start one (unattendedEscalations).
|
|
11
11
|
// Older ones are left out: an ask that waited two weeks is stale.
|
|
12
12
|
export const ESCALATION_DAYS = 14;
|
|
13
13
|
// The console skill, as the plugin namespaces it (plugin.ts).
|
|
14
14
|
export const CONSOLE_SKILL = 'conductor:conductor-console';
|
|
15
15
|
export const CONSOLE_WINDOW = 'conductor';
|
|
16
|
-
// How long escalations may wait with no console following the stream before
|
|
16
|
+
// How long escalations may wait with no console following the stream before the operator is told. It
|
|
17
17
|
// outlasts a console's own reconnects: the mod restarts `conduct events` within seconds, and the
|
|
18
18
|
// stream comes back as soon as a restarted daemon listens.
|
|
19
19
|
export const UNATTENDED_GRACE_MS = 30_000;
|
|
@@ -42,7 +42,7 @@ export class NoEscalationError extends ConductorError {
|
|
|
42
42
|
}
|
|
43
43
|
// `conduct console`'s claim on the daemon's gate. With no daemon there is no console stream to
|
|
44
44
|
// double, and an older one (404) can't tell: both go on. A forced start goes on past a daemon that
|
|
45
|
-
// doesn't answer as well, since the console is where
|
|
45
|
+
// doesn't answer as well, since the console is where the operator looks into that.
|
|
46
46
|
export async function claimConsole(paths, force) {
|
|
47
47
|
let answer;
|
|
48
48
|
try {
|
|
@@ -67,6 +67,32 @@ export async function claimConsole(paths, force) {
|
|
|
67
67
|
export function consoleArgs(pluginDir) {
|
|
68
68
|
return ['--plugin-dir', pluginDir, '-n', 'conductor', '--permission-mode', 'auto', '--', `/${CONSOLE_SKILL}`];
|
|
69
69
|
}
|
|
70
|
+
// What a Claude Code session gives its tool shells. A `claude` that inherits them runs as that
|
|
71
|
+
// session on the peer network whatever its -n says, so a `! conduct console` typed in a worker's tab
|
|
72
|
+
// made a console ListAgents named after the worker (ATK-559). User settings such as
|
|
73
|
+
// CLAUDE_CONFIG_DIR aren't in it.
|
|
74
|
+
const CLAUDE_SESSION_ENV = [
|
|
75
|
+
'AI_AGENT',
|
|
76
|
+
'CLAUDE_CODE_CHILD_SESSION',
|
|
77
|
+
'CLAUDE_CODE_ENTRYPOINT',
|
|
78
|
+
'CLAUDE_CODE_EXECPATH',
|
|
79
|
+
'CLAUDE_CODE_MESSAGING_SOCKET',
|
|
80
|
+
'CLAUDE_CODE_MESSAGING_TOKEN',
|
|
81
|
+
'CLAUDE_CODE_SESSION_ATTENDED',
|
|
82
|
+
'CLAUDE_CODE_SESSION_ID',
|
|
83
|
+
'CLAUDE_EFFORT',
|
|
84
|
+
'CLAUDE_JOB_DIR',
|
|
85
|
+
'CLAUDE_PID',
|
|
86
|
+
'CLAUDECODE',
|
|
87
|
+
];
|
|
88
|
+
// The console's environment: the caller's, without another session's identity, and with
|
|
89
|
+
// CONDUCTOR_CONSOLE=1, which the conductor mod needs.
|
|
90
|
+
export function consoleEnv(env) {
|
|
91
|
+
const own = { ...env };
|
|
92
|
+
for (const key of CLAUDE_SESSION_ENV)
|
|
93
|
+
delete own[key];
|
|
94
|
+
return { ...own, CONDUCTOR_CONSOLE: '1' };
|
|
95
|
+
}
|
|
70
96
|
export function consoleEscalations({ inbox, now = () => new Date(), store, }) {
|
|
71
97
|
const since = () => new Date(now().getTime() - ESCALATION_DAYS * 24 * 60 * 60_000).toISOString();
|
|
72
98
|
const open = () => store.openEscalations(since()).map(toEscalation);
|
|
@@ -127,30 +153,20 @@ export function consoleGate({ graceMs = CONSOLE_START_GRACE_MS, now = () => Date
|
|
|
127
153
|
},
|
|
128
154
|
};
|
|
129
155
|
}
|
|
130
|
-
//
|
|
131
|
-
// `
|
|
132
|
-
//
|
|
133
|
-
// the
|
|
134
|
-
export function
|
|
135
|
-
const
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
'
|
|
142
|
-
CONSOLE_WINDOW,
|
|
143
|
-
|
|
144
|
-
'--title',
|
|
145
|
-
'conductor console',
|
|
146
|
-
'-d',
|
|
147
|
-
dir,
|
|
148
|
-
nodePath,
|
|
149
|
-
cliPath,
|
|
150
|
-
'console',
|
|
151
|
-
'--here',
|
|
152
|
-
'--force',
|
|
153
|
-
];
|
|
156
|
+
// The console's tab: in the console's folder, running this CLI's `console --here`, which starts
|
|
157
|
+
// `claude` with CONDUCTOR_CONSOLE=1. --force: the command that opens the tab has claimed the start
|
|
158
|
+
// already. A terminal that starts tabs in an environment of its own (macOS, tmux) gets
|
|
159
|
+
// CONDUCTOR_HOME, so the console serves the same daemon as the command that opened it.
|
|
160
|
+
export function consoleTab(dir, nodePath, cliPath, env) {
|
|
161
|
+
const home = env.CONDUCTOR_HOME;
|
|
162
|
+
return {
|
|
163
|
+
command: [nodePath, cliPath, 'console', '--here', '--force'],
|
|
164
|
+
cwd: dir,
|
|
165
|
+
env: home ? { CONDUCTOR_HOME: home } : {},
|
|
166
|
+
hold: false,
|
|
167
|
+
title: 'conductor console',
|
|
168
|
+
window: CONSOLE_WINDOW,
|
|
169
|
+
};
|
|
154
170
|
}
|
|
155
171
|
// `conduct escalations`: each open one with its age, item and rule, then the ask.
|
|
156
172
|
export function escalationLines(escalations, now) {
|
package/build/console.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"console.js","sourceRoot":"","sources":["../src/console.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"console.js","sourceRoot":"","sources":["../src/console.ts"],"names":[],"mappings":"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"}
|
package/build/credentials.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import { credentialSaved, readCredential as readWindowsCredential, } from "./credential.js";
|
|
2
1
|
import { ConductorError } from "./errors.js";
|
|
3
|
-
import {
|
|
2
|
+
import { secretStore } from "./host/secrets.js";
|
|
3
|
+
import { adoBasic, adoOrgUrl, NotFound, ProviderError } from "./lib/providers/index.js";
|
|
4
4
|
import { outputOf, run as runCommand } from "./run.js";
|
|
5
5
|
// Each project's credentials (design note v2, section 8): every provider takes the first credential
|
|
6
6
|
// it finds, least privilege first.
|
|
7
|
-
// 1. project-token: a token scoped to the project, in the
|
|
8
|
-
// names (`projects.<name>.ado.token`, `github.token`,
|
|
9
|
-
//
|
|
7
|
+
// 1. project-token: a token scoped to the project, in the machine's secret store (host/secrets.ts)
|
|
8
|
+
// under the credential that machine config names (`projects.<name>.ado.token`, `github.token`,
|
|
9
|
+
// `linear.credential`);
|
|
10
|
+
// 2. machine-token: the machine's own token, from a conductor-only env var or the store
|
|
10
11
|
// (MACHINE_TOKENS), so another tool's env never changes what the conductor signs in as;
|
|
11
12
|
// 3. cli-login: `az` (the project's tenant, else the default account) or `gh` (the project's user,
|
|
12
13
|
// else the active account), last because it usually carries the widest permissions. Linear has
|
|
@@ -21,8 +22,8 @@ const ADO_RESOURCE = '499b84ac-1321-427f-aa17-267ca6975798';
|
|
|
21
22
|
// An az token lasts about an hour, a gh token until it is revoked; both are asked again well before,
|
|
22
23
|
// and a token's credential is read again as often, so a replaced or removed one is seen.
|
|
23
24
|
const TOKEN_MAX_AGE_MS = 20 * 60_000;
|
|
24
|
-
export const LINEAR_CREDENTIAL = '
|
|
25
|
-
// The machine's own token for each provider: the env vars in order, then the
|
|
25
|
+
export const LINEAR_CREDENTIAL = 'conductor-linear';
|
|
26
|
+
// The machine's own token for each provider: the env vars in order, then the store's credential.
|
|
26
27
|
export const MACHINE_TOKENS = {
|
|
27
28
|
ado: { credential: 'conductor-ado', env: ['CONDUCTOR_ADO_TOKEN'] },
|
|
28
29
|
github: { credential: 'conductor-github', env: ['CONDUCTOR_GITHUB_TOKEN'] },
|
|
@@ -35,7 +36,7 @@ const LINEAR_API = 'https://api.linear.app/graphql';
|
|
|
35
36
|
const TIMEOUT_MS = 20_000;
|
|
36
37
|
// A provider call that needs a login it doesn't have. It names the provider, the account and the
|
|
37
38
|
// command that signs in again. `conduct` reserves exit code 5 (LOGIN_NEEDED_EXIT) for worker verbs
|
|
38
|
-
// that hit it;
|
|
39
|
+
// that hit it; every other verb exits 1 for it, as for any ConductorError.
|
|
39
40
|
export class LoginNeeded extends ConductorError {
|
|
40
41
|
account;
|
|
41
42
|
// The message and the command in one line, for a wait's problem (`wait.check-failed`, a local
|
|
@@ -49,15 +50,15 @@ export class LoginNeeded extends ConductorError {
|
|
|
49
50
|
this.account = account;
|
|
50
51
|
}
|
|
51
52
|
}
|
|
52
|
-
// "github login lost for
|
|
53
|
+
// "github login lost for web (gh account contoso-bot)".
|
|
53
54
|
export function loginText(account, project) {
|
|
54
55
|
return `${account.provider} login lost${project === null ? '' : ` for ${project}`} (${account.label})`;
|
|
55
56
|
}
|
|
56
|
-
// The
|
|
57
|
-
//
|
|
57
|
+
// The credential the machine's own token is saved under. For Linear, CONDUCTOR_LINEAR_CREDENTIAL
|
|
58
|
+
// names another.
|
|
58
59
|
export function machineTarget(provider, env) {
|
|
59
60
|
if (provider === 'linear')
|
|
60
|
-
return env.
|
|
61
|
+
return env.CONDUCTOR_LINEAR_CREDENTIAL?.trim() || LINEAR_CREDENTIAL;
|
|
61
62
|
return MACHINE_TOKENS[provider].credential;
|
|
62
63
|
}
|
|
63
64
|
export function providerCredentials(deps) {
|
|
@@ -65,9 +66,7 @@ export function providerCredentials(deps) {
|
|
|
65
66
|
const fetcher = deps.fetch ?? globalThis.fetch;
|
|
66
67
|
const now = deps.now ?? Date.now;
|
|
67
68
|
const exec = deps.run ?? runCommand;
|
|
68
|
-
const
|
|
69
|
-
// A seam that reads credentials but checks none is asked for every target.
|
|
70
|
-
const isSaved = deps.credentialSaved ?? (deps.readCredential ? async () => 'unknown' : credentialSaved);
|
|
69
|
+
const secrets = deps.secrets ?? secretStore();
|
|
71
70
|
const lostNow = new Map();
|
|
72
71
|
// Each identity's authorization (ADO's header value, gh's token, Linear's key) and the source it
|
|
73
72
|
// came from, shared by every project with that identity. The calls that read them name their own
|
|
@@ -103,7 +102,7 @@ export function providerCredentials(deps) {
|
|
|
103
102
|
const entry = project === null ? undefined : deps.projects[project];
|
|
104
103
|
const target = provider === 'linear' ? entry?.linear?.credential : entry?.[provider]?.token;
|
|
105
104
|
if (target !== undefined)
|
|
106
|
-
return tokenAccount(provider, target, target, 'project-token');
|
|
105
|
+
return tokenAccount(secrets, provider, target, target, 'project-token');
|
|
107
106
|
switch (provider) {
|
|
108
107
|
case 'ado': {
|
|
109
108
|
const tenant = entry?.ado?.tenant ?? null;
|
|
@@ -126,7 +125,7 @@ export function providerCredentials(deps) {
|
|
|
126
125
|
case 'linear': {
|
|
127
126
|
const shown = machineTarget('linear', env);
|
|
128
127
|
return {
|
|
129
|
-
command:
|
|
128
|
+
command: secrets.saveCommand(shown, 'linear'),
|
|
130
129
|
id: MACHINE,
|
|
131
130
|
label: `${MACHINE_TOKENS.linear.env.join(', ')} or credential ${shown}`,
|
|
132
131
|
provider,
|
|
@@ -146,7 +145,7 @@ export function providerCredentials(deps) {
|
|
|
146
145
|
const base = configured(provider, project);
|
|
147
146
|
const as = (found) => ({ ...found, id: base.id });
|
|
148
147
|
if (base.source === 'project-token') {
|
|
149
|
-
const got = await read(base.id, env);
|
|
148
|
+
const got = await secrets.read(base.id, env);
|
|
150
149
|
if (!got.found)
|
|
151
150
|
throw failed(base, project, got.reason);
|
|
152
151
|
return { account: base, token: got.credential.secret };
|
|
@@ -165,12 +164,11 @@ export function providerCredentials(deps) {
|
|
|
165
164
|
}
|
|
166
165
|
}
|
|
167
166
|
// The machine's credential is optional: one that isn't saved, or can't be read, is passed over
|
|
168
|
-
// (the cheap
|
|
169
|
-
// after it.
|
|
167
|
+
// (the cheap check first: on Windows it starts no PowerShell). Linear has nothing after it.
|
|
170
168
|
const target = machineTarget(provider, env);
|
|
171
|
-
const stored = as(tokenAccount(provider, target, MACHINE, 'machine-token'));
|
|
172
|
-
const saved = await
|
|
173
|
-
const got = saved === 'missing' ? null : await read(target, env);
|
|
169
|
+
const stored = as(tokenAccount(secrets, provider, target, MACHINE, 'machine-token'));
|
|
170
|
+
const saved = await secrets.saved(target, env);
|
|
171
|
+
const got = saved === 'missing' ? null : await secrets.read(target, env);
|
|
174
172
|
if (got?.found)
|
|
175
173
|
return { account: stored, token: got.credential.secret };
|
|
176
174
|
if (provider === 'linear') {
|
|
@@ -284,12 +282,23 @@ export function providerCredentials(deps) {
|
|
|
284
282
|
};
|
|
285
283
|
const gh = (project) => (path) => ghApi(project, path);
|
|
286
284
|
const ghWrite = (project) => (method, path, body) => ghApi(project, path, { body, method });
|
|
287
|
-
// Another gh command as the project's credential, such as `run view --log-failed`; its output.
|
|
285
|
+
// Another gh command as the project's credential, such as `run view --log-failed`; its output. A
|
|
286
|
+
// 404 is NotFound. Any other failure is a ProviderError, transient when asking again may help (a
|
|
287
|
+
// timeout or kill, a 5xx, a rate limit, the network), so a caller can tell a log GitHub won't give
|
|
288
|
+
// yet ("still in progress") from one worth asking for again. A gh that didn't start is lasting.
|
|
288
289
|
const ghRun = (project) => async (args) => {
|
|
289
290
|
const { result, said } = await ghExec(project, args, { timeoutMs: 120_000 });
|
|
290
|
-
if (result.code
|
|
291
|
-
|
|
292
|
-
|
|
291
|
+
if (result.code === 0)
|
|
292
|
+
return result.stdout;
|
|
293
|
+
const asked = `gh ${args.join(' ')}`;
|
|
294
|
+
if (/HTTP 404/.test(said))
|
|
295
|
+
throw new NotFound(`${asked} failed: ${said}`);
|
|
296
|
+
const http = /HTTP (\d{3})/.exec(said)?.[1];
|
|
297
|
+
const status = http === undefined ? null : Number(http);
|
|
298
|
+
const transient = (result.code === null && !/ENOENT/.test(result.error ?? '')) ||
|
|
299
|
+
(status !== null && (status >= 500 || status === 429)) ||
|
|
300
|
+
/rate limit|abuse detection|error connecting|connection (?:reset|refused)|no such host|timeout|deadline exceeded|unexpected EOF/i.test(said);
|
|
301
|
+
throw new ProviderError(`${asked} failed: ${said}`, { status, transient });
|
|
293
302
|
};
|
|
294
303
|
// The project's Linear key, kept per identity. The key is only returned: never logged, stored or
|
|
295
304
|
// put on a command line.
|
|
@@ -318,10 +327,10 @@ export function providerCredentials(deps) {
|
|
|
318
327
|
},
|
|
319
328
|
worked: () => worked(account('linear', project), project),
|
|
320
329
|
});
|
|
321
|
-
const probe = async (provider, project) => {
|
|
330
|
+
const probe = async (provider, project, { organization } = {}) => {
|
|
322
331
|
try {
|
|
323
332
|
if (provider === 'ado')
|
|
324
|
-
await probeAdo(project);
|
|
333
|
+
await probeAdo(project, organization);
|
|
325
334
|
else if (provider === 'github')
|
|
326
335
|
await ghApi(project, 'user', { probing: true });
|
|
327
336
|
else
|
|
@@ -337,14 +346,14 @@ export function providerCredentials(deps) {
|
|
|
337
346
|
};
|
|
338
347
|
// A fresh ADO credential. az vouches for its own token; a token is asked who it is on the project's
|
|
339
348
|
// organization, which is the only way to learn ADO takes it (it answers 401, or 203 with its
|
|
340
|
-
// sign-in page, when it doesn't).
|
|
341
|
-
const probeAdo = async (project) => {
|
|
349
|
+
// sign-in page, when it doesn't). A check of a profile not stored yet names its organization.
|
|
350
|
+
const probeAdo = async (project, named) => {
|
|
342
351
|
adoTokens.delete(account('ado', project).id);
|
|
343
352
|
const value = await adoToken(project, true, true);
|
|
344
353
|
const which = account('ado', project);
|
|
345
354
|
if (which.source === 'cli-login')
|
|
346
355
|
return;
|
|
347
|
-
const organization = deps.adoOrganization?.(project) ?? null;
|
|
356
|
+
const organization = named ?? deps.adoOrganization?.(project) ?? null;
|
|
348
357
|
if (organization === null)
|
|
349
358
|
throw new Error('no Azure DevOps organization to ask whether it takes the token');
|
|
350
359
|
const response = await fetcher(adoOrgUrl({ organization }, 'connectionData', '7.1-preview'), {
|
|
@@ -383,18 +392,22 @@ export function providerCredentials(deps) {
|
|
|
383
392
|
linear: (project) => linear(project),
|
|
384
393
|
lost: () => [...lostNow.values()],
|
|
385
394
|
probe,
|
|
395
|
+
saveCommand: (provider, target) => secrets.saveCommand(target, tokenUser(provider)),
|
|
386
396
|
};
|
|
387
397
|
}
|
|
388
|
-
// The account of a token in the
|
|
389
|
-
function tokenAccount(provider, target, id, source) {
|
|
390
|
-
const user = provider === 'linear' ? 'linear' : 'pat';
|
|
398
|
+
// The account of a token in the store's credential `target`.
|
|
399
|
+
function tokenAccount(secrets, provider, target, id, source) {
|
|
391
400
|
const whose = source === 'project-token' ? 'project token' : 'machine token';
|
|
392
401
|
return {
|
|
393
|
-
command:
|
|
402
|
+
command: secrets.saveCommand(target, tokenUser(provider)),
|
|
394
403
|
id,
|
|
395
404
|
label: `${whose} in credential ${target}`,
|
|
396
405
|
provider,
|
|
397
406
|
source,
|
|
398
407
|
};
|
|
399
408
|
}
|
|
409
|
+
// The user name a token's credential is saved with.
|
|
410
|
+
function tokenUser(provider) {
|
|
411
|
+
return provider === 'linear' ? 'linear' : 'pat';
|
|
412
|
+
}
|
|
400
413
|
//# sourceMappingURL=credentials.js.map
|