@detergent-software/conductor 1.4.0-dev.1 → 1.4.0-dev.3
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 +27 -0
- package/README.md +20 -4
- package/build/brief-cli.js +103 -23
- package/build/brief-cli.js.map +1 -1
- package/build/brief.js +107 -9
- package/build/brief.js.map +1 -1
- package/build/cli.js +21 -2
- package/build/cli.js.map +1 -1
- package/build/code-host-cli.js +46 -2
- package/build/code-host-cli.js.map +1 -1
- package/build/daemon.js +18 -5
- package/build/daemon.js.map +1 -1
- package/build/follow-ups.js +72 -0
- package/build/follow-ups.js.map +1 -0
- package/build/help.js +22 -4
- package/build/help.js.map +1 -1
- package/build/in-process.js +30 -0
- package/build/in-process.js.map +1 -0
- package/build/note.js +90 -14
- package/build/note.js.map +1 -1
- package/build/notes.js +104 -16
- package/build/notes.js.map +1 -1
- package/build/profile.js +10 -0
- package/build/profile.js.map +1 -1
- package/build/server.js +30 -7
- package/build/server.js.map +1 -1
- package/build/tracker-writes.js +72 -0
- package/build/tracker-writes.js.map +1 -0
- package/build/trackers.js +15 -0
- package/build/trackers.js.map +1 -1
- package/build/watchers/boards-writes.js +182 -34
- package/build/watchers/boards-writes.js.map +1 -1
- package/build/watchers/boards.js +7 -2
- package/build/watchers/boards.js.map +1 -1
- package/build/watchers/linear-writes.js +198 -0
- package/build/watchers/linear-writes.js.map +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,33 @@
|
|
|
2
2
|
|
|
3
3
|
Releases are tagged `conductor-v<version>` and staged on npm by `atk-conductor-release` (`pipelines/release-conductor.yml`), which writes each section below. `scripts/check-changelog.mjs` fails when a tag has no section here.
|
|
4
4
|
|
|
5
|
+
## [1.4.0-dev.3](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/branchCompare?baseVersion=GTconductor-v1.4.0-dev.2&targetVersion=GTconductor-v1.4.0-dev.3) (2026-10-15)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
* **conductor:** a brief with the phase, the PR and the comments (ATK-456) ([cfd0f11](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/cfd0f11e8881f43eb0d4d4d4f93800738f81d57f))
|
|
10
|
+
* **conductor:** conduct file, in-process notes and the PR reference (ATK-456) ([0b3311b](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/0b3311b7ec877cc7846d1c5607c35c653c43b58d))
|
|
11
|
+
* **conductor:** phase notes move the tracker state (ATK-456) ([6c93b91](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/6c93b91fc7f0487c41ddfe357248a3bfdc97a463))
|
|
12
|
+
|
|
13
|
+
### Bug Fixes
|
|
14
|
+
|
|
15
|
+
* **conductor:** guard the brief found in review (ATK-456) ([5d7debe](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/5d7debe7cd670bc20798f7d55438bfc24d1095be))
|
|
16
|
+
* **conductor:** guard the note and follow-up paths found in review (ATK-456) ([6d881da](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/6d881daca5d5c5103943fba6a1560f7ae4db36de)), closes [AB#12](https://emergentcode.visualstudio.com/Emergent%20Software/_workitems/edit/12)
|
|
17
|
+
|
|
18
|
+
### Refactoring
|
|
19
|
+
|
|
20
|
+
* **conductor:** the brief names its PR with the notes' helper (ATK-456) ([7b3f009](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/7b3f009715cce46a4ac02697bdca3680ab9f78f5))
|
|
21
|
+
|
|
22
|
+
## [1.4.0-dev.2](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/branchCompare?baseVersion=GTconductor-v1.4.0-dev.1&targetVersion=GTconductor-v1.4.0-dev.2) (2026-10-15)
|
|
23
|
+
|
|
24
|
+
### Features
|
|
25
|
+
|
|
26
|
+
* **conductor:** tracker writes for Linear and ADO Boards (ATK-456) ([b86911e](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/b86911ea478c8c4da90b6b5f8cf8586094b1fc4a))
|
|
27
|
+
|
|
28
|
+
### Bug Fixes
|
|
29
|
+
|
|
30
|
+
* **conductor:** guard the tracker writes found in review (ATK-456) ([50c9987](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/50c998778997f5eb2b914339ed3c58f726fde83c))
|
|
31
|
+
|
|
5
32
|
## [1.4.0-dev.1](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/branchCompare?baseVersion=GTconductor-v1.3.1-dev.1&targetVersion=GTconductor-v1.4.0-dev.1) (2026-10-15)
|
|
6
33
|
|
|
7
34
|
### Features
|
package/README.md
CHANGED
|
@@ -106,12 +106,22 @@ Worker statuses: `launching`, `running`, `parked`, `stopped-unexpectedly`, `fail
|
|
|
106
106
|
|
|
107
107
|
A worker writes each phase note (`## <work skill> · <Phase>[ · <kind>: <one line>]`, such as `## work-issue · PR opened`) with `conduct note <item> <file>`. The daemon posts the file as a comment on the item in the tracker, then records the phase at once: on the worker (`phase` in `GET /fleet` and `conduct status`), on the item, and as a `note.posted` event. A PR opened note also records the worker's PR (`pr`, such as `ado:Emergent.AgenticToolkit#1850` or `github:<owner>/<repo>#458`) from its first PR link, replacing an earlier one; until then, the worker's first `pr:` wait records it. `conduct status` and the console's fleet pane show it. The worker is `--worker <worker>`, else the one whose worktree is the current checkout, else the project's live worker on that item. The project is the worker's, else the one whose tracker key (the Linear team, or the Boards `key`) is the item's key prefix.
|
|
108
108
|
|
|
109
|
+
**State follows the notes** (providers design note, section 5). A `Started`, `PR opened` or `Landed` note (not a Handoff) also moves the item, to the state its phase maps to in the profile's `tracker.transitions`:
|
|
110
|
+
|
|
111
|
+
| Phase | Linear default | ADO Boards default (Scrum) |
|
|
112
|
+
|---|---|---|
|
|
113
|
+
| `started` | In Progress, assigned to the key's owner | Committed, assigned to the `az` identity |
|
|
114
|
+
| `pr-opened` | In Review, the PR attached | no change, the PR linked (an `ArtifactLink` for an ADO PR, a `Hyperlink` for a GitHub one) |
|
|
115
|
+
| `landed` | Done | Done |
|
|
116
|
+
|
|
117
|
+
A phase mapped to `null` moves nothing (`started` still assigns). A `Started` never reopens a closed item (`kept`); a `PR opened` on one does, for a follow-up PR. The PR linked is the worker's, else the note's first PR link. A write the tracker refuses is a warning on the note's answer and stderr, and a `tracker.transition-failed` event; the note stands, and the verb still exits 0. A write that took is `tracker.transitioned`. With no daemon, `conduct note` posts from the item's project checkout as its account, and moves the item the same way; nothing is recorded then.
|
|
118
|
+
|
|
109
119
|
The work skill is the profile's `skills.work`. A note headed with one of `skills.aliases` counts the same, there and wherever the daemon reads notes (approvals, `conduct wait item … note`, the review-thread checks of `conduct wait pr … comment`). So when a project renames its work skill (ATK's `work-issue` became `work-item`), the old name goes in `aliases` and items in flight keep their phases.
|
|
110
120
|
|
|
111
121
|
| Exit | Means | The worker then |
|
|
112
122
|
|---|---|---|
|
|
113
123
|
| 0 | posted | goes on |
|
|
114
|
-
| 3 | nobody posted it:
|
|
124
|
+
| 3 | nobody posted it: the tracker refused it (such as a read-only key), or no daemon and this isn't the item's project checkout | posts the note to the tracker itself, as before protocol v1 |
|
|
115
125
|
| 4 | not posted: Jason wrote `revise: …` after the item's newest Plan was approved, by him (a comment, `conduct approve`, the worker's tab) or by the conductor (`auto-approve now`, see Rules); stdout has his words | stops, re-plans with them, posts a new Plan and waits for approval, which the gate now holds |
|
|
116
126
|
| 1 | refused (no heading, no project) or unclear (the daemon or Linear didn't answer the write) | reads the message; when it says the note may be there, looks before posting again |
|
|
117
127
|
|
|
@@ -123,9 +133,11 @@ On Linear the daemon uses the key the watchers read (below), so that key needs *
|
|
|
123
133
|
- the title, URL, status (name and type), the tracker's project, Area and labels;
|
|
124
134
|
- the blockers, the items it blocks and the related items, each with its status and title;
|
|
125
135
|
- its phase notes (time, phase, kind and line), the newest Plan, and the `approve` / `revise:` after it with its words;
|
|
136
|
+
- the work skill's `phase`: `orient`, `plan`, `awaiting-approval`, `implement`, `wait`, `land`, `done`, `abandoned` or `canceled`, from the status, the notes and the PR;
|
|
137
|
+
- the `pr`: its worker's, else the newest `PR opened` note's link, read on the project's code host, with its state and verdict (or why it couldn't be read);
|
|
126
138
|
- the description.
|
|
127
139
|
|
|
128
|
-
`--json` prints it as one object.
|
|
140
|
+
`--json` prints it as one object. `--comments` adds every comment's words, time, and whether the key's owner wrote it. With no daemon it is read here, from the item's project checkout as its account.
|
|
129
141
|
|
|
130
142
|
The queue's snapshot has no descriptions, relations or comments, so the daemon reads the item itself:
|
|
131
143
|
- **Linear:** one GraphQL request with the watchers' key, and more only for comments past the first 100.
|
|
@@ -136,7 +148,7 @@ A brief is kept for 30 seconds. Anything the daemon sees happen to the item drop
|
|
|
136
148
|
| Exit | Means | The worker then |
|
|
137
149
|
|---|---|---|
|
|
138
150
|
| 0 | the brief | uses it |
|
|
139
|
-
| 3 | no daemon
|
|
151
|
+
| 3 | no daemon and this isn't the item's project checkout, or the tracker couldn't be read (no key, the tracker down) | reads the item from the tracker itself (the Linear MCP, or the work skill's helper) |
|
|
140
152
|
| 1 | refused: no project tracks the item, or the tracker has no such item | reads the message |
|
|
141
153
|
|
|
142
154
|
## Worker verbs
|
|
@@ -147,6 +159,8 @@ Protocol 2's verbs on git and the code host (providers design note, section 4),
|
|
|
147
159
|
- `conduct pr create` checks everything before it pushes, `--dry-run` included: the title carries the item key, the branch carries it too and isn't the base, the description fits the host (ADO 4,000 characters, GitHub 65,536), no PR is open from the branch yet, nothing is uncommitted, the branch is ahead of its base, and commitlint passes (skipped in a clone without it installed, whose own CI lints the PR). Then it pushes from the checkout and has the daemon open the PR (`POST /workers/:id/prs`). The daemon checks ownership again from its own records and the worktree, never from the request: the worker is live, the branch the worktree is on now (or the `--repo` checkout's) carries the worker's item, and the title carries it. It records the PR on the worker (`pr`; another repo's only while the worker has none) and logs `code-host.pr-created`. `conduct branch` renames only the item's own branch, never the base, `main` or another item's.
|
|
148
160
|
- `conduct land <pr>` sets the worker's PR up to land, as the helper's `land` did, and is safe to repeat. The PR must be the worker's (the same checks, and from the branch the checkout is on now, into its base). A brake already on it (a comment, a failed build, conflicts) is reported, and nothing is armed. A Landing note whose landing armed something, with that gone now, means someone cancelled it: `auto-merge-cancelled`, until `--rearm`. `--mode` is held to the profile's landing rules (`work.landing`) for the PR's files as pushed (`origin/<base>...origin/<head>`, fetched first) and the plan's tier. The daemon reads the tier from the item's Plan note; in-process it takes `--tier`, and auto is refused without one. Without `--mode` the rules pick it. Then it arms the host's own landing behind its capability check (`landingCheck`). On ADO that is a +10 vote in auto mode, with auto-complete and noFastForward. On GitHub it is auto-merge with a merge commit in auto mode, where the repo allows it; in review mode nothing is armed. It posts the Landing note last, and a new one whenever the mode changes, then prints the verdict. A failed build comes with its log, and a merge with whether it has two parents. The daemon logs `code-host.landing-armed` with the mode.
|
|
149
161
|
- `conduct wait pr <pr>` (no event word) is the verdict wait, `pr:<host>:<repo>#<n>:verdict`: it holds on the first verdict that isn't `waiting`, with a line such as `pr 2030 build-failed: <pipeline>`. While it waits on a PR whose landing the daemon recorded, the ADO watcher keeps it armed. It queues an expired build again (once per wait) and, in auto mode, restores a cleared vote (never over a negative one), logged as `code-host.kept-armed`. A local wait (no daemon) gives the same verdicts but keeps nothing armed.
|
|
162
|
+
- `conduct pr create` ends the description with the tracker's reference when it has one, before the length check: `AB#<id>` for an ADO Boards item on a GitHub PR, so the Boards GitHub app links it. Linear has none.
|
|
163
|
+
- `conduct file --title … --body-file … --area … [--related …] [--blocked-by …] [--human]` files a follow-up of the checkout's item: in Backlog, in the item's project, with one Area (a label of the profile's Area group, or a path below a board's `areaRoot`), the profile's `triageLabel`, and its `humanLabel` with `--human`. It is related to the item and each `--related`, and waits on each `--blocked-by` (keys, repeated or comma-separated). A key of another project, or an Area outside the group, is refused before anything is written. On Linear a relation that fails after the issue exists is a warning; on Boards the item and its links are one request. The daemon files it for the worker (`POST /workers/:id/follow-ups`) and logs `tracker.filed`. The worker searches for a duplicate first, with the tracker's own tools: this only files.
|
|
150
164
|
- `conduct pr threads <pr>` lists the PR's threads (on GitHub each comment and review) with `needsAnswer` (ATK-384). `conduct reply <pr> [<thread>]` answers on the worker's own PR: in the ADO thread named, or as a note on the PR. The text is headed `## <work skill> · Reply` unless it starts with a note heading. The daemon logs `code-host.replied`. `--repo` takes `github:<owner>/<repo>` (from its `.scratch/repos` checkout, into its default branch) or `ado:<repository>`; the profile's `codeHost` is the default.
|
|
151
165
|
- `conduct runs <sha>` is one look at a merge's runs, as the helper's `runs-watch --once` and `stage` were (ATK-455). It is a read, so it always runs here.
|
|
152
166
|
- **Which runs.** On Azure Pipelines (the profile's `ci: ado-pipelines`, for its Azure DevOps repo), they are the pipelines whose YAML trigger the merge fires. The YAML and the merge's changed files are read in the worktree, which fetches the base when it hasn't got the commit. On GitHub Actions (`--repo github:<owner>/<repo>`, or `ci: github-actions` for a GitHub repo), they are the runs the merge's push started.
|
|
@@ -162,6 +176,8 @@ Every write the conductor makes outside its own store, with what triggers it and
|
|
|
162
176
|
| Write | Trigger | Identity |
|
|
163
177
|
|---|---|---|
|
|
164
178
|
| A phase note on the item | `conduct note` (a worker) | the Linear key's owner; on Boards, the project's `az` identity |
|
|
179
|
+
| The item's state, its assignee on `started`, and the PR's link (see Notes) | a `Started`, `PR opened` or `Landed` note | the Linear key's owner, or the `az` identity |
|
|
180
|
+
| A follow-up item and its relations | `conduct file` → `POST /workers/:id/follow-ups` | the Linear key's owner, or the `az` identity |
|
|
165
181
|
| `approve` / `revise:` on the item | `conduct approve` / `revise`, the console | the Linear key's owner, or the `az` identity |
|
|
166
182
|
| An auto-approval comment | a rule's `auto-approve now` / `after` | the Linear key's owner, or the `az` identity |
|
|
167
183
|
| A label added or removed (`human`, `triage`, `shipped-open`) | a rule's `label add` / `remove` | the Linear key's owner, or the `az` identity (a tag) |
|
|
@@ -172,7 +188,7 @@ Every write the conductor makes outside its own store, with what triggers it and
|
|
|
172
188
|
| A reply on the worker's PR | `conduct reply` → `POST /workers/:id/replies` | the project's `az` identity, or its gh account |
|
|
173
189
|
| A train: its branch, the members' merges into it, its PR, a note on each member | `conduct train` (you) | the project's gh account |
|
|
174
190
|
|
|
175
|
-
Accounts are per project (see Accounts). Each code-host write is an event: `code-host.pr-created`, `code-host.landing-armed`, `code-host.kept-armed`, `code-host.replied`.
|
|
191
|
+
Accounts are per project (see Accounts). Each code-host write is an event: `code-host.pr-created`, `code-host.landing-armed`, `code-host.kept-armed`, `code-host.replied`. So is each tracker write a worker causes: `tracker.transitioned` (or `tracker.transition-failed`) and `tracker.filed`. Rules still never change an item's state: only its phase notes do.
|
|
176
192
|
|
|
177
193
|
## Inbox
|
|
178
194
|
|
package/build/brief-cli.js
CHANGED
|
@@ -1,70 +1,150 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { briefLines } from "./brief.js";
|
|
2
|
+
import { BriefError, briefLines, briefOf, briefPrs, linearBriefs, notedPr, } from "./brief.js";
|
|
3
3
|
import { callApi, NotRunningError } from "./client.js";
|
|
4
|
+
import { projectHosts } from "./code-host.js";
|
|
5
|
+
import {} from "./credentials.js";
|
|
4
6
|
import { ConductorError } from "./errors.js";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
7
|
+
import { checkoutProject, localCredentials } from "./in-process.js";
|
|
8
|
+
import { ITEM } from "./notes.js";
|
|
9
|
+
import { notePrefixes } from "./profile.js";
|
|
10
|
+
import { routedBriefs } from "./trackers.js";
|
|
11
|
+
import { boardsBriefs } from "./watchers/boards-brief.js";
|
|
12
|
+
// Exit code for a brief nobody gave (no conductor answered, and this isn't the item's project
|
|
13
|
+
// checkout to read it from; or the conductor couldn't read the tracker): the worker reads the item
|
|
14
|
+
// from the tracker itself. A refusal (no project tracks the item, the tracker has no such item)
|
|
15
|
+
// exits 1.
|
|
8
16
|
export const NOT_BRIEFED = 3;
|
|
9
|
-
// The daemon asks the tracker once or a few times, each within 20 s.
|
|
10
|
-
const BRIEF_TIMEOUT_MS =
|
|
17
|
+
// The daemon asks the tracker once or a few times, and the code host for the PR, each within 20 s.
|
|
18
|
+
const BRIEF_TIMEOUT_MS = 90_000;
|
|
11
19
|
const link = z.object({ id: z.string(), status: z.string().nullable(), title: z.string().nullable() });
|
|
12
20
|
export const briefSchema = z.object({
|
|
13
21
|
approval: z.object({ at: z.string(), kind: z.enum(['approve', 'revise']), text: z.string() }).nullable(),
|
|
14
22
|
area: z.string().nullable(),
|
|
15
23
|
blockedBy: z.array(link),
|
|
16
24
|
blocks: z.array(link),
|
|
25
|
+
comments: z.array(z.object({ at: z.string(), body: z.string(), byViewer: z.boolean() })),
|
|
17
26
|
description: z.string(),
|
|
18
27
|
item: z.string(),
|
|
19
28
|
labels: z.array(z.string()),
|
|
20
29
|
notes: z.array(z.object({ at: z.string(), kind: z.string().nullable(), line: z.string().nullable(), phase: z.string() })),
|
|
30
|
+
phase: z.enum(['abandoned', 'awaiting-approval', 'canceled', 'done', 'implement', 'land', 'orient', 'plan', 'wait']),
|
|
21
31
|
plan: z.string().nullable(),
|
|
32
|
+
pr: z
|
|
33
|
+
.object({
|
|
34
|
+
error: z.string().optional(),
|
|
35
|
+
outcome: z
|
|
36
|
+
.enum([
|
|
37
|
+
'abandoned',
|
|
38
|
+
'auto-merge-cancelled',
|
|
39
|
+
'build-failed',
|
|
40
|
+
'changes-requested',
|
|
41
|
+
'conflicts',
|
|
42
|
+
'merge-failed',
|
|
43
|
+
'merged',
|
|
44
|
+
'review-comment',
|
|
45
|
+
'waiting',
|
|
46
|
+
])
|
|
47
|
+
.nullable(),
|
|
48
|
+
ref: z.string(),
|
|
49
|
+
state: z.enum(['closed', 'merged', 'open']).nullable(),
|
|
50
|
+
title: z.string().nullable(),
|
|
51
|
+
url: z.string().nullable(),
|
|
52
|
+
})
|
|
53
|
+
.nullable(),
|
|
22
54
|
project: z.string(),
|
|
23
55
|
readAt: z.string(),
|
|
24
56
|
related: z.array(link),
|
|
25
|
-
|
|
26
|
-
revise: z.object({ at: z.string(), text: z.string() }).nullable().default(null),
|
|
57
|
+
revise: z.object({ at: z.string(), text: z.string() }).nullable(),
|
|
27
58
|
status: z.object({ name: z.string(), type: z.string().nullable() }),
|
|
28
59
|
title: z.string(),
|
|
29
60
|
trackerProject: z.string().nullable(),
|
|
30
61
|
url: z.string().nullable(),
|
|
31
62
|
});
|
|
32
63
|
const refused = z.object({ details: z.array(z.string()).optional(), error: z.string() });
|
|
33
|
-
// `conduct brief <item>`: the item's context
|
|
34
|
-
//
|
|
64
|
+
// `conduct brief <item>`: the item's context, as text or JSON; its comments with --comments. From
|
|
65
|
+
// the daemon, else read here from this checkout's project. Returns the exit code: 0, NOT_BRIEFED,
|
|
66
|
+
// or 1 (thrown) when it was refused.
|
|
35
67
|
export async function briefCommand(paths, item, options, io) {
|
|
36
|
-
const notBriefed = (why) => {
|
|
37
|
-
io.err(`no brief: ${why}; read the item from the tracker yourself`);
|
|
38
|
-
return NOT_BRIEFED;
|
|
39
|
-
};
|
|
40
68
|
let answer;
|
|
41
69
|
try {
|
|
42
70
|
answer = await callApi(paths, {
|
|
43
71
|
method: 'GET',
|
|
44
|
-
path: `/items/${encodeURIComponent(item)}/brief
|
|
72
|
+
path: `/items/${encodeURIComponent(item)}/brief?${new URLSearchParams({
|
|
73
|
+
...(options.fresh ? { fresh: 'true' } : {}),
|
|
74
|
+
...(options.comments ? { comments: 'true' } : {}),
|
|
75
|
+
}).toString()}`,
|
|
45
76
|
timeoutMs: BRIEF_TIMEOUT_MS,
|
|
46
77
|
});
|
|
47
78
|
}
|
|
48
79
|
catch (error) {
|
|
49
80
|
if (error instanceof NotRunningError)
|
|
50
|
-
return
|
|
81
|
+
return briefHere(paths, item, options, io, 'the conductor is not running');
|
|
51
82
|
throw error;
|
|
52
83
|
}
|
|
53
84
|
if (answer.status === 200) {
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
85
|
+
const given = z.object({ brief: briefSchema }).safeParse(answer.body);
|
|
86
|
+
// A conductor of another version gives a brief of another shape: read it here instead.
|
|
87
|
+
if (!given.success)
|
|
88
|
+
return briefHere(paths, item, options, io, "this conductor's brief is of another version");
|
|
89
|
+
print(given.data.brief, options, io);
|
|
59
90
|
return 0;
|
|
60
91
|
}
|
|
61
92
|
const error = refused.safeParse(answer.body).data;
|
|
62
93
|
// A daemon from before the brief API answers its route's `not_found`; a missing item says which.
|
|
63
94
|
if (answer.status === 404 && error?.error === 'not_found')
|
|
64
|
-
return
|
|
95
|
+
return briefHere(paths, item, options, io, 'this conductor has no brief API');
|
|
65
96
|
// The conductor couldn't read the tracker (no key, the tracker down): the worker still may.
|
|
66
97
|
if (answer.status === 502)
|
|
67
|
-
return notBriefed(`${error?.error ?? 'the conductor could not read the tracker'}${error?.details?.length ? ` (${error.details.join('; ')})` : ''}`);
|
|
98
|
+
return notBriefed(io, `${error?.error ?? 'the conductor could not read the tracker'}${error?.details?.length ? ` (${error.details.join('; ')})` : ''}`);
|
|
68
99
|
throw new ConductorError(error?.error ?? `the API answered ${answer.status}`, error?.details ?? []);
|
|
69
100
|
}
|
|
101
|
+
// The brief read here, with no conductor: the tracker and the PR as this checkout's project's
|
|
102
|
+
// account. Without a daemon there is no worker, so the PR is the newest PR opened note's.
|
|
103
|
+
async function briefHere(paths, item, options, io, why) {
|
|
104
|
+
if (!ITEM.test(item))
|
|
105
|
+
throw new ConductorError(`"${item}" is not a tracker item, such as ATK-311`);
|
|
106
|
+
const key = item.toUpperCase();
|
|
107
|
+
const here = await checkoutProject(io.cwd, key, why, 'read it from');
|
|
108
|
+
if ('refusal' in here)
|
|
109
|
+
return notBriefed(io, here.refusal);
|
|
110
|
+
const { profile } = here;
|
|
111
|
+
// The machine's accounts, built once, and only where a seam doesn't stand in for them. A config
|
|
112
|
+
// that can't be read is a brief that couldn't be read here (exit 3), as a tracker that is down.
|
|
113
|
+
let credentials;
|
|
114
|
+
const accounts = () => (credentials ??= localCredentials(paths));
|
|
115
|
+
// A PR it can't read (the accounts included) is an `error` on the brief, never a throw.
|
|
116
|
+
const prs = io.prs ?? briefPrs((project) => projectHosts(accounts(), project));
|
|
117
|
+
let read;
|
|
118
|
+
try {
|
|
119
|
+
const reader = io.reader ??
|
|
120
|
+
routedBriefs({
|
|
121
|
+
'ado-boards': boardsBriefs({ credentials: accounts() }),
|
|
122
|
+
linear: linearBriefs({ credentials: accounts() }),
|
|
123
|
+
});
|
|
124
|
+
read = await reader.read(key, profile);
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
if (error instanceof BriefError && error.reason === 'missing')
|
|
128
|
+
throw new ConductorError(error.message);
|
|
129
|
+
return notBriefed(io, error instanceof Error ? error.message : String(error));
|
|
130
|
+
}
|
|
131
|
+
const prefixes = notePrefixes(profile);
|
|
132
|
+
const ref = notedPr(read.comments, prefixes);
|
|
133
|
+
const brief = briefOf(key, profile.name, read, prefixes, new Date(), ref === null ? null : await prs(profile, ref));
|
|
134
|
+
io.err(`read here (${why})`);
|
|
135
|
+
print(brief, options, io);
|
|
136
|
+
return 0;
|
|
137
|
+
}
|
|
138
|
+
function notBriefed(io, why) {
|
|
139
|
+
io.err(`no brief: ${why}; read the item from the tracker yourself`);
|
|
140
|
+
return NOT_BRIEFED;
|
|
141
|
+
}
|
|
142
|
+
function print(brief, options, io) {
|
|
143
|
+
if (options.json) {
|
|
144
|
+
const { comments: _comments, ...rest } = brief;
|
|
145
|
+
io.out(JSON.stringify(options.comments ? brief : rest, null, 2));
|
|
146
|
+
}
|
|
147
|
+
else
|
|
148
|
+
briefLines(brief, { comments: options.comments === true }).forEach((line) => io.out(line));
|
|
149
|
+
}
|
|
70
150
|
//# sourceMappingURL=brief-cli.js.map
|
package/build/brief-cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brief-cli.js","sourceRoot":"","sources":["../src/brief-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,
|
|
1
|
+
{"version":3,"file":"brief-cli.js","sourceRoot":"","sources":["../src/brief-cli.ts"],"names":[],"mappings":"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"}
|
package/build/brief.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { ConductorError } from "./errors.js";
|
|
3
|
-
import { noteHeading } from "./lib/providers/index.js";
|
|
4
|
-
import { ITEM, projectFor } from "./notes.js";
|
|
3
|
+
import { noteHeading, prVerdict } from "./lib/providers/index.js";
|
|
4
|
+
import { firstPr, ITEM, projectFor } from "./notes.js";
|
|
5
5
|
import { notePrefixes } from "./profile.js";
|
|
6
|
+
import { ACTIVE_STATUSES } from "./store.js";
|
|
7
|
+
import { linkedPr } from "./tracker-writes.js";
|
|
6
8
|
import { linearApi, LinearRequestError } from "./watchers/linear-api.js";
|
|
7
9
|
import { approvalAfterPlan } from "./watchers/linear.js";
|
|
8
10
|
// `conduct brief` (design note, section 13): one item's context for a worker's orient step, read
|
|
@@ -18,8 +20,8 @@ export class BriefError extends ConductorError {
|
|
|
18
20
|
this.reason = reason;
|
|
19
21
|
}
|
|
20
22
|
}
|
|
21
|
-
// The brief as a reader sees it, for `conduct brief` without --json
|
|
22
|
-
export function briefLines(brief) {
|
|
23
|
+
// The brief as a reader sees it, for `conduct brief` without --json; its comments with `comments`.
|
|
24
|
+
export function briefLines(brief, { comments = false } = {}) {
|
|
23
25
|
const links = (label, list) => list.length === 0
|
|
24
26
|
? []
|
|
25
27
|
: [`${label}:`, ...list.map((l) => ` ${l.id} ${l.status ?? '?'} ${l.title ?? ''}`.trimEnd())];
|
|
@@ -28,10 +30,18 @@ export function briefLines(brief) {
|
|
|
28
30
|
: brief.approval === null
|
|
29
31
|
? `none after the Plan of ${brief.plan}`
|
|
30
32
|
: `${brief.approval.kind} ${brief.approval.at}: "${brief.approval.text}"`;
|
|
33
|
+
const { pr } = brief;
|
|
34
|
+
const prLine = pr === null
|
|
35
|
+
? 'pr: none'
|
|
36
|
+
: pr.error !== undefined
|
|
37
|
+
? `pr: ${pr.ref} unread: ${pr.error}`
|
|
38
|
+
: `pr: ${pr.ref} ${pr.state ?? '?'} ${pr.outcome ?? '?'}${pr.url ? ` ${pr.url}` : ''}`;
|
|
31
39
|
return [
|
|
32
40
|
`${brief.item} ${brief.title}`,
|
|
33
41
|
...(brief.url ? [brief.url] : []),
|
|
34
42
|
`status: ${brief.status.name}${brief.status.type && brief.status.type !== brief.status.name.toLowerCase() ? ` (${brief.status.type})` : ''}`,
|
|
43
|
+
`phase: ${brief.phase}`,
|
|
44
|
+
prLine,
|
|
35
45
|
`project: ${brief.project}${brief.trackerProject ? ` · ${brief.trackerProject}` : ''}`,
|
|
36
46
|
`area: ${brief.area ?? 'none'}`,
|
|
37
47
|
`labels: ${brief.labels.length > 0 ? brief.labels.join(', ') : 'none'}`,
|
|
@@ -48,11 +58,24 @@ export function briefLines(brief) {
|
|
|
48
58
|
...(brief.revise ? [`revised after it: ${brief.revise.at}: "${brief.revise.text}"`] : []),
|
|
49
59
|
'',
|
|
50
60
|
brief.description.trim() || '(no description)',
|
|
61
|
+
...(comments
|
|
62
|
+
? [
|
|
63
|
+
'',
|
|
64
|
+
brief.comments.length === 0 ? 'comments: none' : 'comments:',
|
|
65
|
+
...brief.comments.flatMap((c) => [
|
|
66
|
+
` ${c.at} ${c.byViewer ? 'the key owner' : 'someone else'}`,
|
|
67
|
+
...c.body
|
|
68
|
+
.trim()
|
|
69
|
+
.split(/\r?\n/)
|
|
70
|
+
.map((line) => ` ${line}`.trimEnd()),
|
|
71
|
+
]),
|
|
72
|
+
]
|
|
73
|
+
: []),
|
|
51
74
|
];
|
|
52
75
|
}
|
|
53
76
|
// The brief from what the tracker gave: the comments as phase notes, the newest Plan, and the
|
|
54
77
|
// approval after it.
|
|
55
|
-
export function briefOf(item, project, read, prefixes, at) {
|
|
78
|
+
export function briefOf(item, project, read, prefixes, at, pr = null) {
|
|
56
79
|
const { comments, viewer, ...fields } = read;
|
|
57
80
|
const sorted = [...comments].sort((a, b) => Date.parse(a.createdAt) - Date.parse(b.createdAt));
|
|
58
81
|
const notes = sorted.flatMap((c) => {
|
|
@@ -74,18 +97,78 @@ export function briefOf(item, project, read, prefixes, at) {
|
|
|
74
97
|
const revised = answers
|
|
75
98
|
.slice(answers.findLastIndex((c) => /^approved?\b/i.test(c.body.trim())) + 1)
|
|
76
99
|
.find((c) => /^revise\s*:/i.test(c.body.trim()));
|
|
100
|
+
const approval = found ? { ...found, text: said ? said.body.trim() : '' } : null;
|
|
101
|
+
const revise = revised ? { at: revised.createdAt, text: revised.body.trim() } : null;
|
|
77
102
|
return {
|
|
78
103
|
...fields,
|
|
79
|
-
approval
|
|
104
|
+
approval,
|
|
105
|
+
comments: sorted.map((c) => ({
|
|
106
|
+
at: c.createdAt,
|
|
107
|
+
body: c.body,
|
|
108
|
+
byViewer: viewer !== null && c.authorId === viewer,
|
|
109
|
+
})),
|
|
80
110
|
item,
|
|
81
111
|
notes,
|
|
112
|
+
phase: briefPhase(fields.status, notes, { approval, revise }, pr),
|
|
82
113
|
plan: notes.findLast((n) => n.phase === 'Plan')?.at ?? null,
|
|
114
|
+
pr,
|
|
83
115
|
project,
|
|
84
116
|
readAt: at.toISOString(),
|
|
85
|
-
revise
|
|
117
|
+
revise,
|
|
86
118
|
};
|
|
87
119
|
}
|
|
88
|
-
|
|
120
|
+
// The work skill's phase for an item: done or canceled by its status; then by its PR (open, merged,
|
|
121
|
+
// abandoned, or one that couldn't be read, which still waits); not started; then by its newest
|
|
122
|
+
// Plan: a `revise:` newer than its approval sends it back to plan, an approval (a `Plan approved`
|
|
123
|
+
// note or Jason's `approve`) to implement, and no answer yet waits.
|
|
124
|
+
export function briefPhase(status, notes, answers, pr) {
|
|
125
|
+
if (status.type === 'completed')
|
|
126
|
+
return 'done';
|
|
127
|
+
if (status.type === 'canceled')
|
|
128
|
+
return 'canceled';
|
|
129
|
+
if (pr?.state === 'merged')
|
|
130
|
+
return 'land';
|
|
131
|
+
if (pr?.state === 'closed')
|
|
132
|
+
return 'abandoned';
|
|
133
|
+
if (pr !== null)
|
|
134
|
+
return 'wait';
|
|
135
|
+
if (status.type === 'backlog' || status.type === 'unstarted' || status.type === 'triage')
|
|
136
|
+
return 'orient';
|
|
137
|
+
const plan = notes.findLast((n) => n.phase === 'Plan');
|
|
138
|
+
if (!plan)
|
|
139
|
+
return 'plan';
|
|
140
|
+
const { approval, revise } = answers;
|
|
141
|
+
const noted = notes.findLast((n) => n.phase === 'Plan approved' && Date.parse(n.at) > Date.parse(plan.at));
|
|
142
|
+
const approvedAt = Math.max(noted ? Date.parse(noted.at) : -Infinity, approval?.kind === 'approve' ? Date.parse(approval.at) : -Infinity);
|
|
143
|
+
const revisedAt = Math.max(revise ? Date.parse(revise.at) : -Infinity, approval?.kind === 'revise' ? Date.parse(approval.at) : -Infinity);
|
|
144
|
+
if (revisedAt > approvedAt)
|
|
145
|
+
return 'plan';
|
|
146
|
+
return approvedAt > -Infinity ? 'implement' : 'awaiting-approval';
|
|
147
|
+
}
|
|
148
|
+
// The PR reader of the projects' code hosts: the PR as the host has it, with its verdict.
|
|
149
|
+
export function briefPrs(hosts) {
|
|
150
|
+
return async (profile, ref) => {
|
|
151
|
+
const link = linkedPr(ref, profile);
|
|
152
|
+
const unread = (error) => ({
|
|
153
|
+
error,
|
|
154
|
+
outcome: null,
|
|
155
|
+
ref,
|
|
156
|
+
state: null,
|
|
157
|
+
title: null,
|
|
158
|
+
url: link?.url ?? null,
|
|
159
|
+
});
|
|
160
|
+
if (link === null)
|
|
161
|
+
return unread(`${ref} isn't a PR ${profile.name}'s code host reads`);
|
|
162
|
+
try {
|
|
163
|
+
const pr = await hosts(profile.name)(link.repo).read(link.number, { notePrefixes: notePrefixes(profile) });
|
|
164
|
+
return { outcome: prVerdict(pr).outcome, ref, state: pr.state, title: pr.title, url: pr.url };
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
return unread(error instanceof Error ? error.message : String(error));
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
export function briefService({ now = () => new Date(), prs, reader, store, ttlMs = TTL_MS, }) {
|
|
89
172
|
const cache = new Map();
|
|
90
173
|
// Bumped by each event about an item, so a read that began before one isn't kept.
|
|
91
174
|
const changes = new Map();
|
|
@@ -129,13 +212,28 @@ export function briefService({ now = () => new Date(), reader, store, ttlMs = TT
|
|
|
129
212
|
const details = error instanceof ConductorError ? error.details : [];
|
|
130
213
|
throw new BriefError(`couldn't read ${key}: ${error instanceof Error ? error.message : String(error)}`, 'unreadable', details);
|
|
131
214
|
}
|
|
132
|
-
const
|
|
215
|
+
const prefixes = notePrefixes(project.profile);
|
|
216
|
+
// The PR its live worker has, else the one its newest PR opened note links.
|
|
217
|
+
const recorded = store
|
|
218
|
+
.listWorkers(ACTIVE_STATUSES)
|
|
219
|
+
.find((w) => !w.probe && w.project === project.name && w.item.toUpperCase() === key)?.pr;
|
|
220
|
+
const ref = recorded ?? notedPr(read.comments, prefixes);
|
|
221
|
+
const pr = prs && ref ? await prs(project.profile, ref) : null;
|
|
222
|
+
const brief = briefOf(key, project.name, read, prefixes, now(), pr);
|
|
133
223
|
if ((changes.get(key) ?? 0) === seen)
|
|
134
224
|
cache.set(key, { at: now().getTime(), brief });
|
|
135
225
|
return brief;
|
|
136
226
|
},
|
|
137
227
|
};
|
|
138
228
|
}
|
|
229
|
+
// The PR the newest PR opened note links, as a worker's `pr`; null without one.
|
|
230
|
+
export function notedPr(comments, prefixes) {
|
|
231
|
+
const opened = [...comments]
|
|
232
|
+
.sort((a, b) => Date.parse(a.createdAt) - Date.parse(b.createdAt))
|
|
233
|
+
.filter((c) => noteHeading(c.body, prefixes)?.phase === 'PR opened')
|
|
234
|
+
.at(-1);
|
|
235
|
+
return firstPr(opened?.body ?? '');
|
|
236
|
+
}
|
|
139
237
|
const STATE = 'state { name type }';
|
|
140
238
|
const LINKED = `identifier title ${STATE}`;
|
|
141
239
|
const COMMENTS = 'comments(first: 100, after: $after) { pageInfo { hasNextPage endCursor } nodes { body createdAt user { id } } }';
|
package/build/brief.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brief.js","sourceRoot":"","sources":["../src/brief.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"brief.js","sourceRoot":"","sources":["../src/brief.ts"],"names":[],"mappings":"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"}
|