@detergent-software/conductor 1.3.0-dev.4 → 1.3.0-dev.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/README.md +19 -4
  3. package/build/checkout.js +139 -0
  4. package/build/checkout.js.map +1 -0
  5. package/build/cli.js +60 -23
  6. package/build/cli.js.map +1 -1
  7. package/build/code-host-cli.js +334 -0
  8. package/build/code-host-cli.js.map +1 -0
  9. package/build/code-host-service.js +42 -0
  10. package/build/code-host-service.js.map +1 -0
  11. package/build/code-host.js +115 -0
  12. package/build/code-host.js.map +1 -0
  13. package/build/conditions.js +5 -2
  14. package/build/conditions.js.map +1 -1
  15. package/build/credentials.js +14 -7
  16. package/build/credentials.js.map +1 -1
  17. package/build/daemon.js +3 -0
  18. package/build/daemon.js.map +1 -1
  19. package/build/help.js +43 -0
  20. package/build/help.js.map +1 -1
  21. package/build/lib/providers/ado/code-host.js +18 -6
  22. package/build/lib/providers/ado/code-host.js.map +1 -1
  23. package/build/lib/providers/ado/http.js +24 -1
  24. package/build/lib/providers/ado/http.js.map +1 -1
  25. package/build/lib/providers/ado/writes.js +130 -0
  26. package/build/lib/providers/ado/writes.js.map +1 -0
  27. package/build/lib/providers/github/code-host.js +20 -16
  28. package/build/lib/providers/github/code-host.js.map +1 -1
  29. package/build/lib/providers/github/gh.js.map +1 -1
  30. package/build/lib/providers/github/writes.js +200 -0
  31. package/build/lib/providers/github/writes.js.map +1 -0
  32. package/build/lib/providers/index.js +5 -3
  33. package/build/lib/providers/index.js.map +1 -1
  34. package/build/lib/providers/types.js +2 -1
  35. package/build/lib/providers/types.js.map +1 -1
  36. package/build/lib/providers/verdicts/pr.js.map +1 -1
  37. package/build/ownership.js +57 -0
  38. package/build/ownership.js.map +1 -0
  39. package/build/profile.js +23 -1
  40. package/build/profile.js.map +1 -1
  41. package/build/server.js +46 -6
  42. package/build/server.js.map +1 -1
  43. package/build/train-cli.js +7 -4
  44. package/build/train-cli.js.map +1 -1
  45. package/build/train.js +0 -10
  46. package/build/train.js.map +1 -1
  47. package/build/watchers/boards.js +6 -2
  48. package/build/watchers/boards.js.map +1 -1
  49. package/build/worktrees.js +26 -36
  50. package/build/worktrees.js.map +1 -1
  51. package/package.json +1 -1
@@ -0,0 +1,200 @@
1
+ // GENERATED from packages/providers by `pnpm sync-conductor`. Do not edit.
2
+ import { z } from 'zod';
3
+ import { NotFound, ProviderError } from "../errors.js";
4
+ import { githubSummary, pull } from "./code-host.js";
5
+ import { repoName } from "./gh.js";
6
+ const comment = z.looseObject({ html_url: z.string().nullish(), id: z.number() });
7
+ const settings = z.looseObject({
8
+ data: z.looseObject({
9
+ repository: z.looseObject({
10
+ autoMergeAllowed: z.boolean(),
11
+ branchProtectionRules: z.looseObject({
12
+ nodes: z.array(z.looseObject({
13
+ pattern: z.string(),
14
+ requiredApprovingReviewCount: z.number().nullish(),
15
+ requiresApprovingReviews: z.boolean().nullish(),
16
+ requiresCodeOwnerReviews: z.boolean().nullish(),
17
+ requiresLinearHistory: z.boolean().nullish(),
18
+ requiresStatusChecks: z.boolean().nullish(),
19
+ })),
20
+ }),
21
+ mergeCommitAllowed: z.boolean(),
22
+ }),
23
+ }),
24
+ });
25
+ const rules = z.array(z.looseObject({
26
+ parameters: z
27
+ .looseObject({
28
+ allowed_merge_methods: z.array(z.string()).optional(),
29
+ require_code_owner_review: z.boolean().optional(),
30
+ required_approving_review_count: z.number().optional(),
31
+ })
32
+ .nullish(),
33
+ type: z.string(),
34
+ }));
35
+ const SETTINGS_QUERY = `query($owner: String!, $name: String!) {
36
+ repository(owner: $owner, name: $name) {
37
+ autoMergeAllowed
38
+ mergeCommitAllowed
39
+ branchProtectionRules(first: 100) {
40
+ nodes {
41
+ pattern
42
+ requiresApprovingReviews
43
+ requiredApprovingReviewCount
44
+ requiresCodeOwnerReviews
45
+ requiresLinearHistory
46
+ requiresStatusChecks
47
+ }
48
+ }
49
+ }
50
+ }`;
51
+ const ENABLE_AUTO_MERGE = `mutation($id: ID!) {
52
+ enablePullRequestAutoMerge(input: { pullRequestId: $id, mergeMethod: MERGE }) {
53
+ pullRequest { number }
54
+ }
55
+ }`;
56
+ // GitHub's writes, through `gh` as the person (design note, decision 8): auto mode is GitHub's own
57
+ // auto-merge with the merge method and no approval, so the conductor never merges a PR itself.
58
+ export function githubCodeHostWrites(gh) {
59
+ const base = (repo) => `repos/${repoName(repo)}`;
60
+ const postComment = async ({ number, repo }, body) => {
61
+ const found = comment.parse(await gh.write('POST', `${base(repo)}/issues/${number}/comments`, { body }));
62
+ return { id: found.id, url: found.html_url ?? null };
63
+ };
64
+ return {
65
+ arm: async (ref, mode) => {
66
+ // Review mode arms nothing: a person merges on GitHub, with a merge commit.
67
+ if (mode === 'review')
68
+ return [];
69
+ const found = pull.parse(await gh.api(`${base(ref.repo)}/pulls/${ref.number}`));
70
+ if (found.auto_merge?.merge_method === 'merge')
71
+ return [];
72
+ // Someone armed it with another method: that is theirs to change, not the conductor's.
73
+ if (found.auto_merge) {
74
+ throw new ProviderError(`#${ref.number} already has auto-merge on with ${found.auto_merge.merge_method ?? 'another method'}, not a merge commit`);
75
+ }
76
+ if (!found.node_id)
77
+ throw new ProviderError(`GitHub gave PR #${ref.number} no node id to arm`);
78
+ try {
79
+ await gh.write('POST', 'graphql', { query: ENABLE_AUTO_MERGE, variables: { id: found.node_id } });
80
+ }
81
+ catch (error) {
82
+ // GitHub won't arm a PR it can merge now (its required checks have passed): the conductor
83
+ // doesn't merge it either, so a person does.
84
+ throw new ProviderError(`GitHub refused auto-merge on #${ref.number}: ${messageOf(error)}`);
85
+ }
86
+ return ['enabled auto-merge (merge commit)'];
87
+ },
88
+ createPr: async (repo, { base: into, body, head, title }) => {
89
+ const made = pull.parse(await gh.write('POST', `${base(repo)}/pulls`, { base: into, body, head, title }));
90
+ return { ...githubSummary(made), descriptionChars: made.body?.length ?? 0 };
91
+ },
92
+ identity: async () => z.looseObject({ login: z.string() }).parse(await gh.api('user')).login,
93
+ keepArmed: async () => ({ did: [], requeued: [] }),
94
+ landingCheck: (repo, into, mode) => mode === 'review' ? Promise.resolve({ ok: true }) : autoLanding(gh, repo, into),
95
+ note: postComment,
96
+ reply: async (ref, thread, body) => {
97
+ if (thread !== null)
98
+ throw new ProviderError('a GitHub PR has no threads: reply to the PR, without a thread');
99
+ return postComment(ref, body);
100
+ },
101
+ };
102
+ }
103
+ // Whether a pattern of GitHub's branch protection (fnmatch) names the branch: `*` and `?` within a
104
+ // path segment, `**` across them, and `[...]` a character class.
105
+ export function protects(pattern, branch) {
106
+ let source = '';
107
+ for (let i = 0; i < pattern.length; i++) {
108
+ const c = pattern[i] ?? '';
109
+ if (c === '*' && pattern[i + 1] === '*') {
110
+ source += '.*';
111
+ i++;
112
+ }
113
+ else if (c === '*')
114
+ source += '[^/]*';
115
+ else if (c === '?')
116
+ source += '[^/]';
117
+ else if (c === '[' && pattern.indexOf(']', i + 2) !== -1) {
118
+ const end = pattern.indexOf(']', i + 2);
119
+ const inside = pattern
120
+ .slice(i + 1, end)
121
+ .replace(/^!/, '^')
122
+ .replace(/\\/g, '\\\\');
123
+ source += `[${inside}]`;
124
+ i = end;
125
+ }
126
+ else
127
+ source += c.replace(/[.+?^${}()|[\]\\]/g, '\\$&');
128
+ }
129
+ return new RegExp(`^${source}$`).test(branch);
130
+ }
131
+ // Auto mode needs the repo's "Allow auto-merge" and merge commits, no required review or code
132
+ // owner's review (auto mode approves nothing), no rule against a merge commit (linear history, a
133
+ // ruleset's merge methods), no merge queue, and a required status check: GitHub arms auto-merge only on a PR it can't merge
134
+ // yet, so without one there is nothing to wait for. The branch's protection rules come from GraphQL
135
+ // and its rulesets from REST; a plan without rulesets (a private repo on GitHub Free) answers 403,
136
+ // which means none apply. Anything it can't read refuses: an unknown is not a yes.
137
+ async function autoLanding(gh, repo, branch) {
138
+ const name = repoName(repo);
139
+ let found;
140
+ try {
141
+ const answer = await gh.write('POST', 'graphql', {
142
+ query: SETTINGS_QUERY,
143
+ variables: { name: repo.repo, owner: repo.owner },
144
+ });
145
+ found = settings.parse(answer).data.repository;
146
+ }
147
+ catch (error) {
148
+ return { ok: false, reason: `couldn't read ${name}'s merge settings: ${messageOf(error)}` };
149
+ }
150
+ let ruleset = [];
151
+ try {
152
+ ruleset = rules.parse(await gh.api(`repos/${name}/rules/branches/${encodeURIComponent(branch)}`));
153
+ }
154
+ catch (error) {
155
+ if (!(error instanceof NotFound) && !/Upgrade to GitHub Pro/i.test(messageOf(error))) {
156
+ return { ok: false, reason: `couldn't read the rulesets on ${name}'s ${branch}: ${messageOf(error)}` };
157
+ }
158
+ }
159
+ if (!found.autoMergeAllowed)
160
+ return { ok: false, reason: `${name} doesn't allow auto-merge (Settings, General, "Allow auto-merge")` };
161
+ if (!found.mergeCommitAllowed)
162
+ return { ok: false, reason: `${name} doesn't allow merge commits` };
163
+ const protections = found.branchProtectionRules.nodes.filter((r) => protects(r.pattern, branch));
164
+ const reviews = Math.max(0, ...protections.map((r) => (r.requiresApprovingReviews ? (r.requiredApprovingReviewCount ?? 1) : 0)), ...ruleset.filter((r) => r.type === 'pull_request').map((r) => r.parameters?.required_approving_review_count ?? 0));
165
+ if (reviews > 0) {
166
+ return {
167
+ ok: false,
168
+ reason: `${name}'s ${branch} requires ${reviews} approving review${reviews === 1 ? '' : 's'}, and auto mode approves nothing: land it in review mode`,
169
+ };
170
+ }
171
+ const pullRules = ruleset.filter((r) => r.type === 'pull_request');
172
+ if (protections.some((r) => r.requiresCodeOwnerReviews) ||
173
+ pullRules.some((r) => r.parameters?.require_code_owner_review)) {
174
+ return { ok: false, reason: `${name}'s ${branch} requires a code owner's review: land it in review mode` };
175
+ }
176
+ if (pullRules.some((r) => r.parameters?.allowed_merge_methods && !r.parameters.allowed_merge_methods.includes('merge'))) {
177
+ return { ok: false, reason: `a ruleset on ${name}'s ${branch} doesn't allow merge commits` };
178
+ }
179
+ if (protections.some((r) => r.requiresLinearHistory) || ruleset.some((r) => r.type === 'required_linear_history')) {
180
+ return { ok: false, reason: `${name}'s ${branch} requires a linear history, so a merge commit can't land there` };
181
+ }
182
+ if (ruleset.some((r) => r.type === 'merge_queue')) {
183
+ return {
184
+ ok: false,
185
+ reason: `${name}'s ${branch} uses a merge queue, which auto mode doesn't drive: land it in review mode`,
186
+ };
187
+ }
188
+ const checks = protections.some((r) => r.requiresStatusChecks) || ruleset.some((r) => r.type === 'required_status_checks');
189
+ if (!checks) {
190
+ return {
191
+ ok: false,
192
+ reason: `${name}'s ${branch} has no required status check, so GitHub can't arm auto-merge (it merges at once or not at all): land it in review mode`,
193
+ };
194
+ }
195
+ return { ok: true };
196
+ }
197
+ function messageOf(error) {
198
+ return error instanceof Error ? error.message : String(error);
199
+ }
200
+ //# sourceMappingURL=writes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writes.js","sourceRoot":"","sources":["../../../../src/lib/providers/github/writes.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,14 @@
1
1
  // GENERATED from packages/providers by `pnpm sync-conductor`. Do not edit.
2
- export { ADO_CAPABILITIES, adoChecks, adoCodeHost, adoPrState, adoReviews, adoThreads, } from "./ado/code-host.js";
3
- export { adoBase, adoHttp, adoPrUrl, adoRepoFromRemote, adoRequest, adoRunUrl, adoUrl, repoPath, } from "./ado/http.js";
2
+ export { ADO_CAPABILITIES, adoChecks, adoCodeHost, adoPrState, adoPullRequest, adoReviews, adoThreads, } from "./ado/code-host.js";
3
+ export { adoBase, adoHttp, adoOrgUrl, adoPrUrl, adoRepoFromRemote, adoRequest, adoRunUrl, adoSend, adoUrl, apiPath, repoPath, } from "./ado/http.js";
4
4
  export { adoPipelines, buildState, pendingApprovals } from "./ado/pipelines.js";
5
5
  export { parseTrigger, triggerFires } from "./ado/trigger.js";
6
+ export { adoCodeHostWrites, COMPLETION } from "./ado/writes.js";
6
7
  export { NotFound, ProviderError } from "./errors.js";
7
8
  export { githubActions, logText, workflowRunSnapshot, workflowRunState } from "./github/actions.js";
8
- export { GITHUB_CAPABILITIES, githubChecks, githubCodeHost, githubPrState, githubReviews, githubThreads, } from "./github/code-host.js";
9
+ export { GITHUB_CAPABILITIES, githubChecks, githubCodeHost, githubPrState, githubReviews, githubSummary, githubThreads, } from "./github/code-host.js";
9
10
  export { githubRepoRef, PASSING, repoName } from "./github/gh.js";
11
+ export { githubCodeHostWrites, protects } from "./github/writes.js";
10
12
  export { isNote, noteHeading } from "./notes.js";
11
13
  export { NPM_REGISTRY, npmStage, parseStageLine } from "./npm/stage.js";
12
14
  export { checksSettled, needsAnswer, prVerdict } from "./verdicts/pr.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/providers/index.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,OAAO,EACL,gBAAgB,EAChB,SAAS,EACT,WAAW,EAEX,UAAU,EAEV,UAAU,EAEV,UAAU,GACX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,OAAO,EAEP,OAAO,EACP,QAAQ,EACR,iBAAiB,EAEjB,UAAU,EACV,SAAS,EAET,MAAM,EACN,QAAQ,GACT,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,YAAY,EAAgB,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACpG,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,cAAc,EACd,aAAa,EACb,aAAa,EACb,aAAa,GACd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAW,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAoB,WAAW,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAExE,OAAO,EAAsB,aAAa,EAAE,WAAW,EAAkB,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7G,OAAO,EACL,SAAS,EACT,cAAc,EACd,YAAY,EAGZ,WAAW,EACX,SAAS,GACV,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAuC,YAAY,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/providers/index.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,OAAO,EACL,gBAAgB,EAChB,SAAS,EACT,WAAW,EAEX,UAAU,EACV,cAAc,EAEd,UAAU,EAEV,UAAU,GACX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,OAAO,EAEP,OAAO,EACP,SAAS,EACT,QAAQ,EACR,iBAAiB,EAEjB,UAAU,EACV,SAAS,EAET,OAAO,EAEP,MAAM,EACN,OAAO,EACP,QAAQ,GACT,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,YAAY,EAAgB,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACpG,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,cAAc,EACd,aAAa,EACb,aAAa,EACb,aAAa,EACb,aAAa,GACd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAA0B,aAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1F,OAAO,EAAE,oBAAoB,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAAE,MAAM,EAAoB,WAAW,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAExE,OAAO,EAAsB,aAAa,EAAE,WAAW,EAAkB,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7G,OAAO,EACL,SAAS,EACT,cAAc,EACd,YAAY,EAGZ,WAAW,EACX,SAAS,GACV,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAuC,YAAY,EAAE,MAAM,qBAAqB,CAAC"}
@@ -3,6 +3,7 @@
3
3
  // writes", sections 2 and 3): a tracker for items, a code host for git and PRs, a CI for the runs a
4
4
  // merge starts, and a release for what those runs stage. Each axis is an interface with one adapter
5
5
  // per provider, every adapter normalizes its host's answers into the snapshots below, and the
6
- // verdicts (verdicts/) read only the snapshots. This step has the reads; the writes come later.
6
+ // verdicts (verdicts/) read only the snapshots. A code host's writes (CodeHostWrites) take their own
7
+ // transport, so a caller that only reads never holds one that writes.
7
8
  export {};
8
9
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lib/providers/types.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,6FAA6F;AAC7F,oGAAoG;AACpG,oGAAoG;AACpG,8FAA8F;AAC9F,gGAAgG"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lib/providers/types.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,6FAA6F;AAC7F,oGAAoG;AACpG,oGAAoG;AACpG,8FAA8F;AAC9F,qGAAqG;AACrG,sEAAsE"}
@@ -1 +1 @@
1
- {"version":3,"file":"pr.js","sourceRoot":"","sources":["../../../../src/lib/providers/verdicts/pr.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pr.js","sourceRoot":"","sources":["../../../../src/lib/providers/verdicts/pr.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ // Who may ask for a code-host write (providers design note, section 7). The threat model is
2
+ // mistakes, not malice: one person, one machine, a loopback API. So a write is refused when it would
3
+ // touch a PR that isn't the asking worker's: another item's, a branch the worktree isn't on, a title
4
+ // without the key, or auto mode where the landing rules say review.
5
+ const BRANCH_TYPES = ['build', 'chore', 'ci', 'docs', 'feat', 'fix', 'perf', 'refactor', 'revert', 'style', 'test'];
6
+ // <type>/<key>-<slug>, such as feat/atk-454-code-host-writes, or null when the type isn't a
7
+ // conventional commit type or the slug is empty once cleaned.
8
+ export function branchName(type, slug, item) {
9
+ const clean = slug
10
+ .toLowerCase()
11
+ .replace(/[^a-z0-9]+/g, '-')
12
+ .replace(/^-|-$/g, '');
13
+ return BRANCH_TYPES.includes(type) && clean ? `${type}/${item.toLowerCase()}-${clean}` : null;
14
+ }
15
+ // The item key in a branch or worktree name, with the project's key prefix: atk-454 → ATK-454.
16
+ export function itemKey(text, prefix) {
17
+ const found = new RegExp(`(?:^|[^A-Za-z0-9])(${escape(prefix)}-\\d+)(?![0-9])`, 'i').exec(text);
18
+ return found?.[1]?.toUpperCase() ?? null;
19
+ }
20
+ // Which landing mode a change gets: review when it touches a review path or its plan's tier is a
21
+ // review tier, else auto. The reasons say which.
22
+ export function landingMode({ files, review, reviewTiers, tier, }) {
23
+ const under = (file) => review.find((prefix) => file === prefix.replace(/\/$/, '') || file.startsWith(prefix));
24
+ const matched = files.filter((file) => under(file) !== undefined);
25
+ const reasons = [
26
+ ...(tier !== null && reviewTiers.includes(tier) ? [`a ${tier}-tier plan`] : []),
27
+ ...(matched.length > 0 ? [`changes under ${[...new Set(matched.map(under))].join(', ')}`] : []),
28
+ ];
29
+ return { matched, mode: reasons.length > 0 ? 'review' : 'auto', reasons };
30
+ }
31
+ // Why a worker on `item` may not open (or land) a PR from `head` with `title`, or null. The head is
32
+ // the branch the checkout is on now; a branch without the item's key is another item's work.
33
+ export function prRefusal({ base, head, item, prefix, title, }) {
34
+ if (!head)
35
+ return 'the checkout is on no branch (a detached HEAD)';
36
+ if (head === base || head === 'main')
37
+ return `refusing a PR from ${head}, the base branch`;
38
+ if (itemKey(head, prefix) !== item)
39
+ return `the branch ${head} doesn't carry ${item}: rename it (conduct branch)`;
40
+ const keys = titleKeys(title, prefix);
41
+ if (keys === null) {
42
+ return `the title must carry the item keys, such as "fix(api): … (${item})" or "fix(cli): … (${item}, ${prefix}-130)"`;
43
+ }
44
+ if (!keys.includes(item))
45
+ return `the title carries ${keys.join(', ')}, not ${item}`;
46
+ return null;
47
+ }
48
+ // The keys a PR title carries in parentheses, "(KEY-72)" or "(KEY-128, KEY-130)", or null without.
49
+ export function titleKeys(title, prefix) {
50
+ const key = `${escape(prefix)}-\\d+`;
51
+ const found = new RegExp(`\\((${key}(?:, ${key})*)\\)`, 'i').exec(title);
52
+ return found?.[1] ? found[1].split(', ').map((k) => k.toUpperCase()) : null;
53
+ }
54
+ function escape(text) {
55
+ return text.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
56
+ }
57
+ //# sourceMappingURL=ownership.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ownership.js","sourceRoot":"","sources":["../src/ownership.ts"],"names":[],"mappings":"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"}
package/build/profile.js CHANGED
@@ -13,11 +13,17 @@ const text = z.string().trim().min(1);
13
13
  const port = z.int().min(1).max(65535);
14
14
  // A repo's .claude/conductor.json: what the conductor needs to know about a project, as data.
15
15
  // Each adapter kind is a discriminated union, so ADO Boards (Cadence) arrives as one more variant.
16
- export const profileSchema = z.strictObject({
16
+ const profileFields = z.strictObject({
17
17
  baseBranch: text,
18
18
  ci: z.discriminatedUnion('kind', [z.strictObject({ kind: z.literal('ado-pipelines') })]),
19
19
  codeHost: z.discriminatedUnion('kind', [
20
20
  z.strictObject({ kind: z.literal('ado'), organization: z.url(), project: text, repository: text }),
21
+ // A GitHub repo (ATK-428): its PRs, checks and auto-merge.
22
+ z.strictObject({
23
+ kind: z.literal('github'),
24
+ owner: z.string().regex(/^[\w.-]+$/, 'a GitHub owner, such as EmergentSoftware'),
25
+ repo: z.string().regex(/^[\w.-]+$/, 'a GitHub repo name, without the owner'),
26
+ }),
21
27
  ]),
22
28
  // The kinds of note that wait on a person in this project (worker protocol v1).
23
29
  gates: z.array(z.enum(['merge', 'npm-otp', 'plan'])).min(1),
@@ -113,6 +119,22 @@ export const profileSchema = z.strictObject({
113
119
  // attached to its background session.
114
120
  workers: z.strictObject({ tab: z.boolean().default(false) }).prefault({}),
115
121
  });
122
+ // ADO Boards takes its organization and project from an Azure DevOps code host; beside a GitHub
123
+ // one it names them.
124
+ export const profileSchema = profileFields.superRefine((profile, ctx) => {
125
+ const { codeHost, tracker } = profile;
126
+ if (tracker.kind !== 'ado-boards' || codeHost.kind === 'ado')
127
+ return;
128
+ for (const key of ['organization', 'project']) {
129
+ if (tracker[key] === undefined) {
130
+ ctx.addIssue({
131
+ code: 'custom',
132
+ message: `required beside a ${codeHost.kind} code host: the board's Azure DevOps ${key}`,
133
+ path: ['tracker', key],
134
+ });
135
+ }
136
+ }
137
+ });
116
138
  // The profile's base ports by name, without maxSlot.
117
139
  export function basePorts(profile) {
118
140
  const { maxSlot: _maxSlot, ...ports } = profile.ports;
@@ -1 +1 @@
1
- {"version":3,"file":"profile.js","sourceRoot":"","sources":["../src/profile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"profile.js","sourceRoot":"","sources":["../src/profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,oGAAoG;AACpG,mFAAmF;AACnF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC;AAC1B,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;AAE9D,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,mBAAmB,EAAE,8DAA8D,CAAC,CAAC;AACnH,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACtC,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAEvC,8FAA8F;AAC9F,mGAAmG;AACnG,MAAM,aAAa,GAAG,CAAC,CAAC,YAAY,CAAC;IACnC,UAAU,EAAE,IAAI;IAChB,EAAE,EAAE,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC;IACxF,QAAQ,EAAE,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;QACrC,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;QAClG,2DAA2D;QAC3D,CAAC,CAAC,YAAY,CAAC;YACb,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;YACzB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,0CAA0C,CAAC;YAChF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,uCAAuC,CAAC;SAC7E,CAAC;KACH,CAAC;IACF,gFAAgF;IAChF,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3D,mEAAmE;IACnE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE;IAC1C,IAAI;IACJ,kDAAkD;IAClD,GAAG,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE;IACjD,+FAA+F;IAC/F,mGAAmG;IACnG,KAAK,EAAE,CAAC;SACL,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;SACzD,QAAQ,CAAC,IAAI,CAAC;SACd,MAAM,CACL,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,SAAS,CAAC,EAC9D,qDAAqD,CACtD;QACD,qEAAqE;SACpE,MAAM,CACL,CAAC,KAAK,EAAE,EAAE,CACR,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CACtB,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,SAAS,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAC5F,EACH,4BAA4B,CAC7B;IACH,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC7B,OAAO,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC1C,6FAA6F;IAC7F,qFAAqF;IACrF,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC3C,6FAA6F;IAC7F,wFAAwF;IACxF,MAAM,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACxF,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5B,OAAO,EAAE,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;QACpC,CAAC,CAAC,YAAY,CAAC;YACb,cAAc,EAAE,IAAI;YACpB,UAAU,EAAE,IAAI;YAChB,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;YACzB,qEAAqE;YACrE,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC;YACxC,2FAA2F;YAC3F,+FAA+F;YAC/F,WAAW,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE;YACtE,IAAI,EAAE,IAAI;YACV,iGAAiG;YACjG,2DAA2D;YAC3D,WAAW,EAAE,IAAI,CAAC,QAAQ,EAAE;SAC7B,CAAC;QACF,8FAA8F;QAC9F,0DAA0D;QAC1D,CAAC,CAAC,YAAY,CAAC;YACb,2FAA2F;YAC3F,2DAA2D;YAC3D,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;YACzB,UAAU,EAAE,IAAI;YAChB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,8BAA8B,CAAC;YACjE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;YAC7B,kFAAkF;YAClF,YAAY,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;YAChC,0FAA0F;YAC1F,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;YAC1C,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE;YACxB,8FAA8F;YAC9F,KAAK,EAAE,IAAI;YACX,8FAA8F;YAC9F,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;YACxG,uCAAuC;YACvC,WAAW,EAAE,IAAI,CAAC,QAAQ,EAAE;SAC7B,CAAC;KACH,CAAC;IACF,gGAAgG;IAChG,mGAAmG;IACnG,6EAA6E;IAC7E,KAAK,EAAE,CAAC;SACL,YAAY,CAAC;QACZ,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3C,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QAClC,IAAI,EAAE,IAAI;KACX,CAAC;SACD,QAAQ,EAAE;IACb,2FAA2F;IAC3F,4DAA4D;IAC5D,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7C,iGAAiG;IACjG,2FAA2F;IAC3F,gGAAgG;IAChG,uFAAuF;IACvF,IAAI,EAAE,CAAC;SACJ,YAAY,CAAC;QACZ,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE;QACtB,OAAO,EAAE,CAAC;aACP,YAAY,CAAC;YACZ,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;YACjC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;SAC7D,CAAC;aACD,QAAQ,CAAC,EAAE,CAAC;QACf,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;KAC5F,CAAC;SACD,QAAQ,CAAC,EAAE,CAAC;IACf,2FAA2F;IAC3F,sCAAsC;IACtC,OAAO,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;CAC1E,CAAC,CAAC;AAEH,gGAAgG;AAChG,qBAAqB;AACrB,MAAM,CAAC,MAAM,aAAa,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;IACtE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IACtC,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK;QAAE,OAAO;IACrE,KAAK,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,SAAS,CAAU,EAAE,CAAC;QACvD,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;YAC/B,GAAG,CAAC,QAAQ,CAAC;gBACX,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,qBAAqB,QAAQ,CAAC,IAAI,wCAAwC,GAAG,EAAE;gBACxF,IAAI,EAAE,CAAC,SAAS,EAAE,GAAG,CAAC;aACvB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;AACH,CAAC,CAAC,CAAC;AAIH,qDAAqD;AACrD,MAAM,UAAU,SAAS,CAAC,OAAgB;IACxC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC;IACtD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,8FAA8F;AAC9F,6FAA6F;AAC7F,MAAM,UAAU,YAAY,CAAC,OAAmD;IAC9E,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IAC1F,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC;AAC7C,CAAC;AAED,kGAAkG;AAClG,MAAM,UAAU,UAAU,CAAC,OAAiC;IAC1D,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;AACxF,CAAC;AAED,MAAM,YAAY,GAAG,CAAC,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAEzE,iGAAiG;AACjG,2CAA2C;AAC3C,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,MAAc;IACvD,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;IAC5D,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,IAAI,cAAc,CAAC,GAAG,MAAM,aAAa,EAAE;YAC/C,aAAa,IAAI,CAAC,SAAS,CAAC,QAAQ,IAAI,IAAI,CAAC,qDAAqD,QAAQ,EAAE;SAC7G,CAAC,CAAC;IACL,CAAC;IACD,OAAO,UAAU,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACtC,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YAAE,MAAM,KAAK,CAAC;QACnC,MAAM,IAAI,cAAc,CAAC,MAAM,YAAY,OAAO,IAAI,EAAE,EAAE;YACxD,mEAAmE;SACpE,CAAC,CAAC;IACL,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;AACvD,CAAC"}
package/build/server.js CHANGED
@@ -2,8 +2,10 @@ import { createServer } from 'node:http';
2
2
  import { isAbsolute } from 'node:path';
3
3
  import { z } from 'zod';
4
4
  import { BriefError } from "./brief.js";
5
+ import {} from "./code-host-service.js";
5
6
  import { CHANNELS } from "./config.js";
6
7
  import { consoleGate, NoEscalationError } from "./console.js";
8
+ import { LoginNeeded } from "./credentials.js";
7
9
  import { ConductorError } from "./errors.js";
8
10
  import { historyReport } from "./history.js";
9
11
  import { NotePostError, PlanRevisedError } from "./notes.js";
@@ -15,7 +17,9 @@ import { INBOX_KINDS } from "./store.js";
15
17
  import { bearerMatches } from "./token.js";
16
18
  import { explain } from "./why.js";
17
19
  const KEEPALIVE_MS = 15_000;
18
- const MAX_BODY_BYTES = 64 * 1024;
20
+ // A PR's description travels in a body: GitHub keeps 65,536 characters, up to 3 bytes each in
21
+ // UTF-8 and more once JSON escapes them.
22
+ const MAX_BODY_BYTES = 512 * 1024;
19
23
  const addProjectBody = z.strictObject({
20
24
  path: z.string().refine((path) => isAbsolute(path), 'must be an absolute path'),
21
25
  });
@@ -36,6 +40,12 @@ const lockBody = z.strictObject({
36
40
  owner: z.string().trim().min(1).optional(),
37
41
  });
38
42
  const waitBody = z.strictObject({ condition: z.string().min(1), worker: z.int().positive() });
43
+ // POST /workers/:id/prs: open the worker's PR (`conduct pr create`); `repo` as --repo names it.
44
+ const prBody = z.strictObject({
45
+ body: z.string().trim().min(1),
46
+ repo: z.string().min(1).optional(),
47
+ title: z.string().trim().min(1),
48
+ });
39
49
  const noteBody = z.strictObject({ body: z.string().trim().min(1), worker: z.int().positive().optional() });
40
50
  const answerBody = z.discriminatedUnion('action', [
41
51
  z.strictObject({ action: z.literal('approve'), text: z.string().trim().min(1).optional() }),
@@ -84,7 +94,7 @@ const cacheBody = z.discriminatedUnion('action', [
84
94
  ]);
85
95
  const ESCALATION_ROUTE = /^\/console\/escalations\/(\d+)$/;
86
96
  const INBOX_ROUTE = /^\/inbox\/(\d+)\/resolve$/;
87
- const WORKER_ROUTE = /^\/workers\/(\d+)(\/attach)?$/;
97
+ const WORKER_ROUTE = /^\/workers\/(\d+)(?:\/(attach|prs))?$/;
88
98
  const WAIT_ROUTE = /^\/waits\/(\d+)$/;
89
99
  const ITEM_ROUTE = /^\/items\/([^/]+)\/(brief|notes)$/;
90
100
  const LOCK_ROUTE = /^\/locks\/([\w-]+)$/;
@@ -132,7 +142,8 @@ export function createApi(deps) {
132
142
  const url = new URL(req.url ?? '/', 'http://127.0.0.1');
133
143
  const workerRoute = WORKER_ROUTE.exec(url.pathname);
134
144
  if (workerRoute) {
135
- await worker(req, res, url, Number(workerRoute[1]), workerRoute[2] !== undefined);
145
+ const sub = workerRoute[2] === 'attach' || workerRoute[2] === 'prs' ? workerRoute[2] : 'worker';
146
+ await worker(req, res, url, Number(workerRoute[1]), sub);
136
147
  return;
137
148
  }
138
149
  const whyRoute = WHY_ROUTE.exec(url.pathname);
@@ -477,14 +488,21 @@ export function createApi(deps) {
477
488
  throw error;
478
489
  }
479
490
  }
480
- // GET /workers/:id, DELETE /workers/:id[?force=true] (retire), POST /workers/:id/attach.
481
- async function worker(req, res, url, id, attach) {
491
+ // GET /workers/:id, DELETE /workers/:id[?force=true] (retire), POST /workers/:id/attach, and the
492
+ // worker's own code-host writes: POST /workers/:id/prs.
493
+ async function worker(req, res, url, id, sub) {
482
494
  const found = deps.store.getWorker(id);
483
495
  if (!found) {
484
496
  send(res, 404, { error: 'not_found' });
485
497
  return;
486
498
  }
487
- const route = `${req.method} ${attach ? 'attach' : 'worker'}`;
499
+ const route = `${req.method} ${sub}`;
500
+ if (route === 'POST prs') {
501
+ const body = await parseBody(req, res, prBody);
502
+ if (body)
503
+ await codeHostWrite(res, 201, () => deps.codeHost.openPr(id, body));
504
+ return;
505
+ }
488
506
  try {
489
507
  if (route === 'GET worker') {
490
508
  send(res, 200, { events: deps.store.workerEvents(id, 5), worker: found });
@@ -506,6 +524,28 @@ export function createApi(deps) {
506
524
  send(res, 409, { details: error.details, error: error.message });
507
525
  }
508
526
  }
527
+ // A worker's code-host write: 409 for a refusal (ownership, a PR already open), 503 for a lost
528
+ // login (the verb exits 5 and the worker waits on `conduct wait login`), 502 when the host failed.
529
+ async function codeHostWrite(res, status, write) {
530
+ try {
531
+ send(res, status, await write());
532
+ }
533
+ catch (error) {
534
+ if (error instanceof LoginNeeded) {
535
+ send(res, 503, {
536
+ details: error.details,
537
+ error: error.message,
538
+ login: { command: error.account.command, provider: error.account.provider },
539
+ });
540
+ }
541
+ else if (error instanceof ConductorError) {
542
+ send(res, 409, { details: error.details, error: error.message });
543
+ }
544
+ else {
545
+ send(res, 502, { error: error instanceof Error ? error.message : String(error) });
546
+ }
547
+ }
548
+ }
509
549
  // Server-sent events from the append-only log. `Last-Event-ID` (a reconnecting EventSource) or
510
550
  // `?since=<id>` replays everything after that id first; without either the stream starts live.
511
551
  // Replay and subscribe run in one synchronous block, so no event falls between them.