@clemrig/factory 0.18.1 → 0.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -19
- package/dist/app/factory.d.ts +2 -0
- package/dist/app/factory.js +5 -1
- package/dist/app/factory.js.map +1 -1
- package/dist/app/review.d.ts +16 -0
- package/dist/app/review.js +87 -0
- package/dist/app/review.js.map +1 -0
- package/dist/app/workflows/implement.js +3 -7
- package/dist/app/workflows/implement.js.map +1 -1
- package/dist/app/workflows/stages/deliver.d.ts +5 -4
- package/dist/app/workflows/stages/deliver.js +47 -53
- package/dist/app/workflows/stages/deliver.js.map +1 -1
- package/dist/app/workflows/stages/prepare.js +11 -7
- package/dist/app/workflows/stages/prepare.js.map +1 -1
- package/dist/app/workflows/stages/resume.js +0 -4
- package/dist/app/workflows/stages/resume.js.map +1 -1
- package/dist/app/workflows/stages/review.d.ts +7 -5
- package/dist/app/workflows/stages/review.js +75 -24
- package/dist/app/workflows/stages/review.js.map +1 -1
- package/dist/app/workflows/stages/run.d.ts +1 -2
- package/dist/app/workflows/tidy.js +2 -3
- package/dist/app/workflows/tidy.js.map +1 -1
- package/dist/cli/ui.d.ts +4 -2
- package/dist/cli/ui.js +17 -5
- package/dist/cli/ui.js.map +1 -1
- package/dist/domain/board.d.ts +2 -0
- package/dist/domain/board.js +4 -1
- package/dist/domain/board.js.map +1 -1
- package/dist/domain/description.d.ts +57 -5
- package/dist/domain/description.js +133 -12
- package/dist/domain/description.js.map +1 -1
- package/dist/domain/diff.d.ts +8 -0
- package/dist/domain/diff.js +90 -0
- package/dist/domain/diff.js.map +1 -0
- package/dist/domain/pull-request.d.ts +9 -21
- package/dist/domain/pull-request.js +44 -229
- package/dist/domain/pull-request.js.map +1 -1
- package/dist/domain/review-page.d.ts +171 -0
- package/dist/domain/review-page.js +200 -0
- package/dist/domain/review-page.js.map +1 -0
- package/dist/domain/review.d.ts +85 -5
- package/dist/domain/review.js +109 -18
- package/dist/domain/review.js.map +1 -1
- package/dist/domain/spec.d.ts +1 -1
- package/dist/domain/spec.js.map +1 -1
- package/dist/system/environment.d.ts +6 -0
- package/dist/system/environment.js +19 -0
- package/dist/system/environment.js.map +1 -1
- package/dist/system/factory.d.ts +2 -0
- package/dist/system/factory.js +4 -0
- package/dist/system/factory.js.map +1 -1
- package/dist/system/git.d.ts +5 -1
- package/dist/system/git.js +19 -2
- package/dist/system/git.js.map +1 -1
- package/dist/system/github.d.ts +3 -12
- package/dist/system/github.js +7 -31
- package/dist/system/github.js.map +1 -1
- package/dist/system/run-files.d.ts +14 -0
- package/dist/system/run-files.js +51 -8
- package/dist/system/run-files.js.map +1 -1
- package/package.json +2 -2
- package/prompts/describe.md +36 -15
- package/prompts/plan.md +7 -5
- package/prompts/review.md +38 -21
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { code, step } from "@clemrig/flow";
|
|
2
|
-
import { ghVersionProblem } from "../../../domain/pull-request.js";
|
|
3
2
|
import { parseSpec } from "../../../domain/spec.js";
|
|
4
3
|
import { isTidyBranch, tidySlug } from "../../../domain/tidy.js";
|
|
5
4
|
import { failureFeedback, } from "../../../domain/verification.js";
|
|
6
5
|
import { runBrowser } from "../../../system/browser.js";
|
|
7
6
|
import { runChecks } from "../../../system/checks.js";
|
|
7
|
+
import { uiUrl } from "../../../system/environment.js";
|
|
8
8
|
import * as git from "../../../system/git.js";
|
|
9
9
|
import * as github from "../../../system/github.js";
|
|
10
10
|
import { artifactPath, hasArtifact, isIssue, readArtifact, } from "../../../system/issues.js";
|
|
@@ -25,14 +25,18 @@ async function baseProblems(dir, base) {
|
|
|
25
25
|
problems.push(`${base} must match origin/${base}: push or pull first`);
|
|
26
26
|
return problems;
|
|
27
27
|
}
|
|
28
|
-
/**
|
|
28
|
+
/**
|
|
29
|
+
* The repository on GitHub, when gh is logged in to open its pull request and
|
|
30
|
+
* the review page it links to has a valid address; otherwise why not.
|
|
31
|
+
*/
|
|
29
32
|
async function gitHubProblems(dir) {
|
|
30
33
|
const problems = [];
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
problems.push(
|
|
34
|
+
try {
|
|
35
|
+
uiUrl();
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
problems.push(message(error));
|
|
39
|
+
}
|
|
36
40
|
if (!(await github.isAuthenticated(dir))) {
|
|
37
41
|
problems.push("gh is not logged in: run gh auth login");
|
|
38
42
|
return { problems };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prepare.js","sourceRoot":"","sources":["../../../../src/app/workflows/stages/prepare.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAwB,IAAI,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"prepare.js","sourceRoot":"","sources":["../../../../src/app/workflows/stages/prepare.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,10 +9,6 @@ import { facts, short, specCommitOf } from "./run.js";
|
|
|
9
9
|
export async function resumeProblem({ dir, state, }) {
|
|
10
10
|
if (state.stage === "prepare")
|
|
11
11
|
return undefined;
|
|
12
|
-
// Its pull request is open: only its screenshots remain to attach, from the
|
|
13
|
-
// run's folder, whatever the repository is on.
|
|
14
|
-
if (state.stage === "attach")
|
|
15
|
-
return undefined;
|
|
16
12
|
// Stopped once its last stage was done, such as by Ctrl-C.
|
|
17
13
|
const { pullRequest } = state.data;
|
|
18
14
|
if (typeof pullRequest === "string")
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resume.js","sourceRoot":"","sources":["../../../../src/app/workflows/stages/resume.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,GAAG,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAEtD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,EAClC,GAAG,EACH,KAAK,GAC+B;IACpC,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAChD,
|
|
1
|
+
{"version":3,"file":"resume.js","sourceRoot":"","sources":["../../../../src/app/workflows/stages/resume.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,11 +9,13 @@ export declare const diff: Stage<"ok">;
|
|
|
9
9
|
* The reviewing agent: it judges the change against the spec, from the code
|
|
10
10
|
* and the checks alone. From the second round on, it first reviews the change
|
|
11
11
|
* knowing nothing of the earlier reviews, then, in the same conversation,
|
|
12
|
-
* checks what the previous one found against the code as it is now
|
|
13
|
-
* its
|
|
14
|
-
* answer that cannot be judged, such as a
|
|
15
|
-
* ran, goes to the gate
|
|
16
|
-
* would leave that review alone to repeat.
|
|
12
|
+
* checks what the previous one found against the code as it is now; the gate
|
|
13
|
+
* keeps its first answer and adds that check to it, so that nothing found
|
|
14
|
+
* earlier is lost on the way. A first answer that cannot be judged, such as a
|
|
15
|
+
* note sent while its sub-agents still ran, goes to the gate alone: checked
|
|
16
|
+
* against the previous review, it would leave that review alone to repeat.
|
|
17
|
+
* A check the gate cannot judge answers again alone: the first answer, which
|
|
18
|
+
* the gate judged, stands, and receives no correction meant for the check.
|
|
17
19
|
*/
|
|
18
20
|
export declare function reviewer(profile: AgentProfile, app?: AppDeclaration): Stage<"ok" | "modified">;
|
|
19
21
|
/** An unmet criterion or a blocking finding sends the change back, unless the operator accepted the review. */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { agent, gate, step, z, } from "@clemrig/flow";
|
|
2
|
-
import { largeChangeLines, reviewChanges, reviewOutput, reviewProblem, } from "../../../domain/review.js";
|
|
2
|
+
import { composeReview, largeChangeLines, recheckOutput, recheckProblem, recheckRequest, reviewChanges, reviewOutput, reviewProblem, } from "../../../domain/review.js";
|
|
3
3
|
import * as git from "../../../system/git.js";
|
|
4
4
|
import { keepInRun } from "../../../system/run-files.js";
|
|
5
5
|
import { browserContext, readers, reading, runningApp } from "./agents.js";
|
|
@@ -37,53 +37,104 @@ export const diff = step(async ({ dir, state, log, runDir }) => {
|
|
|
37
37
|
log(`Large change: the review reads its diff from ${changes.diffFile}`);
|
|
38
38
|
return { changes, reviewedTree };
|
|
39
39
|
});
|
|
40
|
+
const invalid = (error) => `Invalid structured output:\n${z.prettifyError(error)}`;
|
|
41
|
+
/** It names the answer at fault, and sends back the check alone. */
|
|
42
|
+
const checkPrefix = "The check of the previous review: ";
|
|
43
|
+
const checkProblem = (problem) => ({
|
|
44
|
+
problem: `${checkPrefix}${problem}`,
|
|
45
|
+
});
|
|
40
46
|
/** The review an agent's answer gives, or why it cannot be judged. */
|
|
41
47
|
function readReview(output, criteria) {
|
|
42
48
|
const parsed = reviewOutput.safeParse(output);
|
|
43
49
|
if (!parsed.success)
|
|
44
|
-
return {
|
|
45
|
-
problem: `Invalid structured output:\n${z.prettifyError(parsed.error)}`,
|
|
46
|
-
};
|
|
50
|
+
return { problem: invalid(parsed.error) };
|
|
47
51
|
const problem = reviewProblem(parsed.data, criteria);
|
|
48
52
|
return problem ? { problem } : { review: parsed.data };
|
|
49
53
|
}
|
|
54
|
+
/**
|
|
55
|
+
* The review the reviewer's answers give, or why they cannot be judged: its
|
|
56
|
+
* answer alone in the first round, then its first answer with its check of
|
|
57
|
+
* the previous review.
|
|
58
|
+
*/
|
|
59
|
+
function judgedReview(state) {
|
|
60
|
+
const { criteria, reviews } = facts(state);
|
|
61
|
+
const previous = reviews?.at(-1);
|
|
62
|
+
if (!previous)
|
|
63
|
+
return readReview(state.output, criteria);
|
|
64
|
+
const answers = (state.output ?? {});
|
|
65
|
+
const read = readReview(answers.first, criteria);
|
|
66
|
+
if ("problem" in read)
|
|
67
|
+
return read;
|
|
68
|
+
const parsed = recheckOutput.safeParse(answers.recheck);
|
|
69
|
+
if (!parsed.success)
|
|
70
|
+
return checkProblem(invalid(parsed.error));
|
|
71
|
+
const problem = recheckProblem(parsed.data, read.review, previous);
|
|
72
|
+
if (problem)
|
|
73
|
+
return checkProblem(problem);
|
|
74
|
+
return { review: composeReview(read.review, parsed.data, previous) };
|
|
75
|
+
}
|
|
50
76
|
/**
|
|
51
77
|
* The reviewing agent: it judges the change against the spec, from the code
|
|
52
78
|
* and the checks alone. From the second round on, it first reviews the change
|
|
53
79
|
* knowing nothing of the earlier reviews, then, in the same conversation,
|
|
54
|
-
* checks what the previous one found against the code as it is now
|
|
55
|
-
* its
|
|
56
|
-
* answer that cannot be judged, such as a
|
|
57
|
-
* ran, goes to the gate
|
|
58
|
-
* would leave that review alone to repeat.
|
|
80
|
+
* checks what the previous one found against the code as it is now; the gate
|
|
81
|
+
* keeps its first answer and adds that check to it, so that nothing found
|
|
82
|
+
* earlier is lost on the way. A first answer that cannot be judged, such as a
|
|
83
|
+
* note sent while its sub-agents still ran, goes to the gate alone: checked
|
|
84
|
+
* against the previous review, it would leave that review alone to repeat.
|
|
85
|
+
* A check the gate cannot judge answers again alone: the first answer, which
|
|
86
|
+
* the gate judged, stands, and receives no correction meant for the check.
|
|
59
87
|
*/
|
|
60
88
|
export function reviewer(profile, app) {
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
89
|
+
const fresh = agent({
|
|
90
|
+
profile,
|
|
91
|
+
schema: reviewOutput,
|
|
92
|
+
session: reviewSession,
|
|
93
|
+
context: ({ state }) => {
|
|
94
|
+
const { slug, spec, changes, checks } = facts(state);
|
|
95
|
+
return { issue: slug, spec, changes, checks, ...browserContext(state) };
|
|
96
|
+
},
|
|
97
|
+
});
|
|
98
|
+
const recheck = (previous, answer) => agent({
|
|
99
|
+
profile,
|
|
100
|
+
schema: recheckOutput,
|
|
101
|
+
session: reviewSession,
|
|
102
|
+
context: () => recheckRequest(previous, answer),
|
|
65
103
|
});
|
|
66
|
-
const recheck = call(({ state }) => ({
|
|
67
|
-
previous: facts(state).reviews?.at(-1),
|
|
68
|
-
}));
|
|
69
104
|
return runningApp(app, reading(readers.review, {
|
|
70
105
|
...fresh,
|
|
71
106
|
async run(context) {
|
|
72
|
-
const
|
|
73
|
-
const { reviews, criteria } = facts(
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
107
|
+
const { state } = context;
|
|
108
|
+
const { reviews, criteria } = facts(state);
|
|
109
|
+
const previous = reviews?.at(-1);
|
|
110
|
+
if (!previous)
|
|
111
|
+
return fresh.run(context);
|
|
112
|
+
const correction = typeof state.feedback === "string" &&
|
|
113
|
+
state.feedback.startsWith(checkPrefix)
|
|
114
|
+
? state.feedback
|
|
115
|
+
: undefined;
|
|
116
|
+
const kept = correction === undefined
|
|
117
|
+
? undefined
|
|
118
|
+
: state.output?.first;
|
|
119
|
+
if (kept !== undefined)
|
|
120
|
+
context.log("The check of the previous review is sent back alone: the review's own answer stands");
|
|
121
|
+
const first = kept ?? (await fresh.run(context)).output;
|
|
122
|
+
const read = readReview(first, criteria);
|
|
123
|
+
if ("problem" in read) {
|
|
77
124
|
context.log("The review's own answer cannot be judged: sent back before the previous review is checked");
|
|
78
|
-
return first;
|
|
125
|
+
return { outcome: "ok", output: { first } };
|
|
79
126
|
}
|
|
80
|
-
|
|
127
|
+
const second = await recheck(previous, read.review).run({
|
|
128
|
+
...context,
|
|
129
|
+
state: { ...state, feedback: correction },
|
|
130
|
+
});
|
|
131
|
+
return { ...second, output: { first, recheck: second.output } };
|
|
81
132
|
},
|
|
82
133
|
}));
|
|
83
134
|
}
|
|
84
135
|
/** An unmet criterion or a blocking finding sends the change back, unless the operator accepted the review. */
|
|
85
136
|
export const judgeReview = gate(["approved", "changes", "invalid"], async ({ state }) => {
|
|
86
|
-
const read =
|
|
137
|
+
const read = judgedReview(state);
|
|
87
138
|
if ("problem" in read)
|
|
88
139
|
return { outcome: "invalid", reason: read.problem };
|
|
89
140
|
const { review } = read;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../../../src/app/workflows/stages/review.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,EACL,IAAI,
|
|
1
|
+
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../../../src/app/workflows/stages/review.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,10 +17,9 @@ export interface Facts {
|
|
|
17
17
|
/** The spec's Objective, which the pull request recalls. */
|
|
18
18
|
objective: string;
|
|
19
19
|
criteria: Criterion[];
|
|
20
|
-
/** The repository on GitHub: its page
|
|
20
|
+
/** The repository on GitHub: its page. */
|
|
21
21
|
repository: {
|
|
22
22
|
url: string;
|
|
23
|
-
public: boolean;
|
|
24
23
|
};
|
|
25
24
|
/** The agents' browser, when `.factory/` installs one. */
|
|
26
25
|
browser?: string;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defineWorkflow, END, node, retry } from "@clemrig/flow";
|
|
2
2
|
import { TIDY } from "../../domain/tidy.js";
|
|
3
3
|
import { commitSpec, judgeChoice, release, scout, survey, tidyResult, } from "./stages/choose.js";
|
|
4
|
-
import {
|
|
4
|
+
import { deliver, describer, judgeDescription } from "./stages/deliver.js";
|
|
5
5
|
import { implementer, judgeImplementation } from "./stages/implement.js";
|
|
6
6
|
import { commitPlan, judgePlan, planner } from "./stages/plan.js";
|
|
7
7
|
import { prepareTidy } from "./stages/prepare.js";
|
|
@@ -67,8 +67,7 @@ export function tidy(definition) {
|
|
|
67
67
|
ok: "deliver",
|
|
68
68
|
invalid: retry("describe", 2),
|
|
69
69
|
}),
|
|
70
|
-
deliver: node(deliver, { done: END
|
|
71
|
-
attach: node(attach, { ok: END }),
|
|
70
|
+
deliver: node(deliver, { done: END }),
|
|
72
71
|
},
|
|
73
72
|
resumeProblem,
|
|
74
73
|
// Also called for a failed run, which opened no pull request.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tidy.js","sourceRoot":"","sources":["../../../src/app/workflows/tidy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EACL,UAAU,EACV,WAAW,EACX,OAAO,EACP,KAAK,EACL,MAAM,EACN,UAAU,GACX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,
|
|
1
|
+
{"version":3,"file":"tidy.js","sourceRoot":"","sources":["../../../src/app/workflows/tidy.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/ui.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { Factory } from "../app/factory.js";
|
|
2
2
|
/**
|
|
3
|
-
* `factory ui`: serves the Kanban of the repository's issues,
|
|
4
|
-
* of its runs under `/runs
|
|
3
|
+
* `factory ui`: serves the Kanban of the repository's issues, the dashboard
|
|
4
|
+
* of its runs under `/runs/` and each delivered run's review page, until
|
|
5
|
+
* Ctrl-C, on `port` or one the system chooses. It also answers the host of
|
|
6
|
+
* `FACTORY_UI_URL`, which a proxy such as `tailscale serve` keeps.
|
|
5
7
|
*/
|
|
6
8
|
export declare function ui(factory: Factory, port?: number, loadError?: string): Promise<number>;
|
package/dist/cli/ui.js
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import { basename } from "node:path";
|
|
2
|
-
import { startFactoryUi } from "@clemrig/factory-ui";
|
|
2
|
+
import { startFactoryUi, } from "@clemrig/factory-ui";
|
|
3
3
|
import { dashboardHandler } from "@clemrig/flow-ui";
|
|
4
4
|
import { readBoard } from "../app/board.js";
|
|
5
|
+
import { uiAddress } from "../app/factory.js";
|
|
6
|
+
import { readReviewAnswers, readReviewPage, readReviewScreenshot, saveReviewAnswers, } from "../app/review.js";
|
|
5
7
|
import { presentResult } from "../app/runs.js";
|
|
6
8
|
/**
|
|
7
|
-
* `factory ui`: serves the Kanban of the repository's issues,
|
|
8
|
-
* of its runs under `/runs
|
|
9
|
+
* `factory ui`: serves the Kanban of the repository's issues, the dashboard
|
|
10
|
+
* of its runs under `/runs/` and each delivered run's review page, until
|
|
11
|
+
* Ctrl-C, on `port` or one the system chooses. It also answers the host of
|
|
12
|
+
* `FACTORY_UI_URL`, which a proxy such as `tailscale serve` keeps.
|
|
9
13
|
*/
|
|
10
14
|
export async function ui(factory, port, loadError) {
|
|
11
15
|
const label = basename(factory.dir);
|
|
@@ -17,14 +21,22 @@ export async function ui(factory, port, loadError) {
|
|
|
17
21
|
// Mounted under `/runs/`: the Kanban is one level up.
|
|
18
22
|
home: { label: "Board", href: "../" },
|
|
19
23
|
});
|
|
24
|
+
const address = uiAddress();
|
|
20
25
|
const page = await startFactoryUi({
|
|
21
26
|
title: "factory",
|
|
22
27
|
label,
|
|
23
|
-
//
|
|
28
|
+
// What the factory computes is what the pages show: checked here, where both meet.
|
|
24
29
|
board: () => readBoard(factory, loadError),
|
|
25
30
|
runs,
|
|
31
|
+
review: {
|
|
32
|
+
page: (run) => readReviewPage(factory, run, (file) => `api/review/${encodeURIComponent(run)}/screenshots/${encodeURIComponent(file)}`),
|
|
33
|
+
answers: (run) => readReviewAnswers(factory, run),
|
|
34
|
+
saveAnswers: (run, answers) => saveReviewAnswers(factory, run, answers),
|
|
35
|
+
screenshot: (run, file) => readReviewScreenshot(factory, run, file),
|
|
36
|
+
},
|
|
37
|
+
...(address ? { hosts: [address.host] } : {}),
|
|
26
38
|
}, port);
|
|
27
|
-
process.stdout.write(`factory ui: ${page.url} (runs: ${page.url}runs/;
|
|
39
|
+
process.stdout.write(`factory ui: ${page.url} (runs: ${page.url}runs/; review pages: ${address?.href ?? page.url}review?run=<id>; Ctrl-C to stop)\n`);
|
|
28
40
|
await new Promise((resolve) => {
|
|
29
41
|
const stop = () => {
|
|
30
42
|
process.off("SIGINT", stop);
|
package/dist/cli/ui.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/cli/ui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/cli/ui.ts"],"names":[],"mappings":"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"}
|
package/dist/domain/board.d.ts
CHANGED
|
@@ -47,6 +47,8 @@ export interface IssueCard {
|
|
|
47
47
|
waitsFor: string[];
|
|
48
48
|
/** The newest pull request its deliveries recorded. */
|
|
49
49
|
pullRequest?: string;
|
|
50
|
+
/** The run that recorded it, when it has a review page: one that described its change. */
|
|
51
|
+
review?: string;
|
|
50
52
|
/** The last run of each shown workflow, newest first. */
|
|
51
53
|
runs: RunProgress[];
|
|
52
54
|
}
|
package/dist/domain/board.js
CHANGED
|
@@ -67,7 +67,8 @@ export function boardOf(issues, runs, shown, problems) {
|
|
|
67
67
|
// The last delivery sets the column. A new delivery updates the same pull
|
|
68
68
|
// request: the newest one recorded stays shown.
|
|
69
69
|
const delivery = last(DELIVERY);
|
|
70
|
-
const
|
|
70
|
+
const delivered = own.findLast((run) => pullRequestOf(run) !== undefined);
|
|
71
|
+
const pullRequest = delivered && pullRequestOf(delivered);
|
|
71
72
|
const cardRuns = shown
|
|
72
73
|
.flatMap((workflow) => {
|
|
73
74
|
const run = last(workflow.name);
|
|
@@ -91,6 +92,8 @@ export function boardOf(issues, runs, shown, problems) {
|
|
|
91
92
|
.filter(({ delivered }) => !delivered)
|
|
92
93
|
.map(({ slug }) => slug),
|
|
93
94
|
...(pullRequest ? { pullRequest } : {}),
|
|
95
|
+
// Runs delivered by an earlier factory have no description, nor its page.
|
|
96
|
+
...(delivered?.data.description ? { review: delivered.id } : {}),
|
|
94
97
|
runs: cardRuns,
|
|
95
98
|
},
|
|
96
99
|
};
|
package/dist/domain/board.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"board.js","sourceRoot":"","sources":["../../src/domain/board.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,YAAY,EAAqB,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAExD,4DAA4D;AAC5D,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,SAAS;IACT,YAAY;IACZ,WAAW;IACX,SAAS;IACT,YAAY;IACZ,MAAM;CACE,CAAC;
|
|
1
|
+
{"version":3,"file":"board.js","sourceRoot":"","sources":["../../src/domain/board.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,YAAY,EAAqB,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAExD,4DAA4D;AAC5D,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,SAAS;IACT,YAAY;IACZ,WAAW;IACX,SAAS;IACT,YAAY;IACZ,MAAM;CACE,CAAC;AAqEX,6GAA6G;AAC7G,MAAM,UAAU,QAAQ,CACtB,KAAiB,EACjB,YAAkD;IAElD,IAAI,KAAK,CAAC,SAAS;QAAE,OAAO,MAAM,CAAC;IACnC,IAAI,YAAY,EAAE,MAAM,KAAK,SAAS;QAAE,OAAO,WAAW,CAAC;IAC3D,IAAI,YAAY,EAAE,MAAM,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IACxD,IAAI,YAAY;QAAE,OAAO,YAAY,CAAC;IACtC,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,OAAO,CACrB,EAAE,KAAK,EAAE,WAAW,EAAgD,EACpE,GAAmD;IAEnD,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IACvE,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IAChD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAC7C,IAAI;QACJ,KAAK,EACH,GAAG,CAAC,MAAM,KAAK,WAAW,IAAI,KAAK,GAAG,EAAE;YACtC,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC;gBACpB,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS;oBACxB,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,QAAQ;QAClB,OAAO,EAAE,KAAK;aACX,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;aAC5D,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC;KAC9C,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,UAAU,CACjB,GAAa,EACb,QAAsD;IAEtD,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IAC3D,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;QAC7B,UAAU;QACV,OAAO;QACP,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,OAAO,CACrB,MAAoB,EACpB,IAAgB,EAChB,KAAsB,EACtB,QAAkB;IAElB,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC;QACnE,MAAM,IAAI,GAAG,CAAC,QAAgB,EAAE,EAAE,CAChC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;QACnD,0EAA0E;QAC1E,gDAAgD;QAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC;QAC1E,MAAM,WAAW,GAAG,SAAS,IAAI,aAAa,CAAC,SAAS,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,KAAK;aACnB,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YACpB,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAChC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxC,CAAC,CAAC;aACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;aAC9D,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;aACnE,IAAI,EAAE;aACN,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACV,OAAO;YACL,MAAM,EAAE,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;YACjC,QAAQ,EAAE,QAAQ,IAAI,KAAK,CAAC,SAAS;YACrC,IAAI,EAAE;gBACJ,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,4EAA4E;gBAC5E,QAAQ,EAAE,KAAK,CAAC,SAAS;oBACvB,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,KAAK,CAAC,YAAY;yBACf,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC;yBACrC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC;gBAC9B,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACvC,0EAA0E;gBAC1E,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChE,IAAI,EAAE,QAAQ;aACf;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC9B,IAAI;YACJ,KAAK,EAAE,MAAM;iBACV,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,KAAK,IAAI,CAAC;iBACvC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;iBACpD,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;QACH,QAAQ;KACT,CAAC;AACJ,CAAC"}
|
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
import { z } from "@clemrig/flow";
|
|
2
2
|
import type { ChangedFile } from "./review.js";
|
|
3
|
-
|
|
3
|
+
import type { Criterion } from "./spec.js";
|
|
4
|
+
/** What the review page draws: a mermaid diagram; a diff or a text block shows a shape as it is. */
|
|
4
5
|
export declare const visualKinds: readonly ["mermaid", "diff", "text"];
|
|
5
|
-
/**
|
|
6
|
+
/** The largest screenshot: the review page loads it whole, on a phone too. */
|
|
6
7
|
export declare const maxScreenshotBytes: number;
|
|
8
|
+
/** What a decision departs from: the spec's scope, a test that existed, or the spec's letter. */
|
|
9
|
+
export declare const decisionKinds: readonly ["beyond_spec", "changed_test", "spec_reading"];
|
|
10
|
+
/** What a decision's card shows: one of these, with its own fields. */
|
|
11
|
+
export declare const decisionVisualKinds: readonly ["reading", "diff", "screenshots", "list"];
|
|
7
12
|
/**
|
|
8
13
|
* The describing agent's response: what a reader who forgot the issue needs
|
|
9
|
-
* to review its pull request. As many items as the
|
|
14
|
+
* to review its pull request, on the review page. As many items as the
|
|
15
|
+
* change calls for.
|
|
10
16
|
*/
|
|
11
17
|
export declare const descriptionOutput: z.ZodObject<{
|
|
12
18
|
changes: z.ZodArray<z.ZodString>;
|
|
@@ -45,7 +51,53 @@ export declare const descriptionOutput: z.ZodObject<{
|
|
|
45
51
|
caption: z.ZodString;
|
|
46
52
|
}, z.core.$strict>>;
|
|
47
53
|
noScreenshots: z.ZodOptional<z.ZodString>;
|
|
54
|
+
decisions: z.ZodArray<z.ZodObject<{
|
|
55
|
+
kind: z.ZodEnum<{
|
|
56
|
+
beyond_spec: "beyond_spec";
|
|
57
|
+
changed_test: "changed_test";
|
|
58
|
+
spec_reading: "spec_reading";
|
|
59
|
+
}>;
|
|
60
|
+
title: z.ZodString;
|
|
61
|
+
criterion: z.ZodOptional<z.ZodString>;
|
|
62
|
+
advice: z.ZodEnum<{
|
|
63
|
+
accept: "accept";
|
|
64
|
+
revise: "revise";
|
|
65
|
+
}>;
|
|
66
|
+
recommendation: z.ZodString;
|
|
67
|
+
why: z.ZodString;
|
|
68
|
+
source: z.ZodOptional<z.ZodString>;
|
|
69
|
+
file: z.ZodOptional<z.ZodString>;
|
|
70
|
+
visual: z.ZodOptional<z.ZodObject<{
|
|
71
|
+
kind: z.ZodEnum<{
|
|
72
|
+
diff: "diff";
|
|
73
|
+
list: "list";
|
|
74
|
+
reading: "reading";
|
|
75
|
+
screenshots: "screenshots";
|
|
76
|
+
}>;
|
|
77
|
+
spec: z.ZodOptional<z.ZodString>;
|
|
78
|
+
read: z.ZodOptional<z.ZodString>;
|
|
79
|
+
file: z.ZodOptional<z.ZodString>;
|
|
80
|
+
from: z.ZodOptional<z.ZodNumber>;
|
|
81
|
+
to: z.ZodOptional<z.ZodNumber>;
|
|
82
|
+
files: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
83
|
+
items: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
84
|
+
}, z.core.$strict>>;
|
|
85
|
+
}, z.core.$strict>>;
|
|
86
|
+
manualChecks: z.ZodArray<z.ZodObject<{
|
|
87
|
+
title: z.ZodString;
|
|
88
|
+
expect: z.ZodString;
|
|
89
|
+
why: z.ZodString;
|
|
90
|
+
}, z.core.$strict>>;
|
|
48
91
|
}, z.core.$strict>;
|
|
49
92
|
export type Description = z.output<typeof descriptionOutput>;
|
|
50
|
-
/** What
|
|
51
|
-
export
|
|
93
|
+
/** What a description is checked against: the run's change, criteria, interpretations and deviations. */
|
|
94
|
+
export interface Described {
|
|
95
|
+
files: ChangedFile[];
|
|
96
|
+
/** The change's whole diff. */
|
|
97
|
+
diff: string;
|
|
98
|
+
criteria: Pick<Criterion, "id">[];
|
|
99
|
+
interpretations: number;
|
|
100
|
+
deviations: number;
|
|
101
|
+
}
|
|
102
|
+
/** What is wrong with a description of this change, the screenshots' files aside. */
|
|
103
|
+
export declare function descriptionProblems(description: Description, described: Described): string[];
|