@opensoftware/foreman 0.1.0 → 0.3.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 +180 -9
- package/dist/adapters/forge.js +9 -0
- package/dist/adapters/forge.js.map +1 -0
- package/dist/adapters/harness.js +12 -1
- package/dist/adapters/harness.js.map +1 -1
- package/dist/adapters/inference.js +14 -0
- package/dist/adapters/inference.js.map +1 -0
- package/dist/adapters/program.js +21 -0
- package/dist/adapters/program.js.map +1 -0
- package/dist/adapters/sandbox.js +3 -15
- package/dist/adapters/sandbox.js.map +1 -1
- package/dist/commands/runs.js +23 -5
- package/dist/commands/runs.js.map +1 -1
- package/dist/commands/serve.js +60 -37
- package/dist/commands/serve.js.map +1 -1
- package/dist/domain/definition.js +30 -4
- package/dist/domain/definition.js.map +1 -1
- package/dist/domain/run.js +70 -13
- package/dist/domain/run.js.map +1 -1
- package/dist/workflows/activities.js +65 -13
- package/dist/workflows/activities.js.map +1 -1
- package/dist/workflows/run.js +25 -4
- package/dist/workflows/run.js.map +1 -1
- package/dist/workflows.bundle.js +34 -5
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"AAAA,6GAA6G;AAC7G,
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../src/commands/serve.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,28 @@
|
|
|
1
|
-
/**
|
|
1
|
+
/**
|
|
2
|
+
* The problems that only the foreman sees: two sandbox or inference adapters, a stage whose agent the factory does not
|
|
3
|
+
* declare, checks without exactly one forge adapter, or an inference adapter without its config.
|
|
4
|
+
*/
|
|
2
5
|
export function stageProblems(factory) {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
+
return oneAdapter(factory, "sandbox").concat(oneAdapter(factory, "inference"), stageAgentProblems(factory), checkProblems(factory), inferenceProblems(factory));
|
|
7
|
+
}
|
|
8
|
+
function oneAdapter(factory, port) {
|
|
9
|
+
const adapters = Object.keys(factory.providers?.[port] ?? {}).length;
|
|
10
|
+
return adapters > 1 ? [{ path: `/providers/${port}`, message: `name one ${port} adapter, not ${adapters}` }] : [];
|
|
11
|
+
}
|
|
12
|
+
function inferenceProblems(factory) {
|
|
13
|
+
const named = Object.keys(factory.providers?.inference ?? {}).length > 0;
|
|
14
|
+
if (named && !factory.inference)
|
|
15
|
+
return [{ path: "/inference", message: "give the inference adapter's config as inference.config" }];
|
|
16
|
+
if (!named && factory.inference)
|
|
17
|
+
return [{ path: "/inference", message: "name one inference adapter under providers.inference" }];
|
|
18
|
+
return [];
|
|
19
|
+
}
|
|
20
|
+
function checkProblems(factory) {
|
|
21
|
+
if (Object.keys(factory.providers?.forge ?? {}).length === 1)
|
|
22
|
+
return [];
|
|
23
|
+
return (factory.workflow ?? []).flatMap((stage, index) => stage.checks?.length
|
|
24
|
+
? [{ path: `/workflow/${index}/checks`, message: "name one forge adapter under providers.forge" }]
|
|
25
|
+
: []);
|
|
6
26
|
}
|
|
7
27
|
function stageAgentProblems(factory) {
|
|
8
28
|
return (factory.workflow ?? []).flatMap((stage, index) => {
|
|
@@ -16,9 +36,13 @@ function stageAgentProblems(factory) {
|
|
|
16
36
|
export const agentOf = (stage) => stage.agent ?? stage.stage;
|
|
17
37
|
/** The definition of a checked factory, with the text of each prompt from `read`. */
|
|
18
38
|
export function definitionOf(factory, read) {
|
|
39
|
+
const forge = Object.keys(factory.providers?.forge ?? {})[0];
|
|
40
|
+
const inference = Object.keys(factory.providers?.inference ?? {})[0];
|
|
19
41
|
return {
|
|
20
42
|
factory: factory.factory,
|
|
21
43
|
sandboxAdapter: Object.keys(factory.providers?.sandbox ?? {})[0] ?? "docker",
|
|
44
|
+
...(forge ? { forgeAdapter: forge } : {}),
|
|
45
|
+
...(inference && factory.inference ? { inference: { adapter: inference, ...factory.inference } } : {}),
|
|
22
46
|
stages: (factory.workflow ?? []).map((stage) => {
|
|
23
47
|
const agent = agentOf(stage);
|
|
24
48
|
const declared = factory.agents[agent];
|
|
@@ -26,8 +50,10 @@ export function definitionOf(factory, read) {
|
|
|
26
50
|
stage: stage.stage,
|
|
27
51
|
agent,
|
|
28
52
|
harness: declared.harness,
|
|
53
|
+
model: declared.model,
|
|
29
54
|
prompt: read(declared.prompt),
|
|
30
55
|
...(stage.gate ? { gate: stage.gate } : {}),
|
|
56
|
+
...(stage.checks?.length ? { checks: stage.checks } : {}),
|
|
31
57
|
...(declared.sandbox ? { sandbox: { ...declared.sandbox, secrets: secretsOf(declared.secrets ?? []) } } : {}),
|
|
32
58
|
};
|
|
33
59
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"definition.js","sourceRoot":"","sources":["../../src/domain/definition.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"definition.js","sourceRoot":"","sources":["../../src/domain/definition.ts"],"names":[],"mappings":"AAqCA;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,OAA0B;IACtD,OAAO,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,MAAM,CAC1C,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC,EAChC,kBAAkB,CAAC,OAAO,CAAC,EAC3B,aAAa,CAAC,OAAO,CAAC,EACtB,iBAAiB,CAAC,OAAO,CAAC,CAC3B,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,OAA0B,EAAE,IAA6B;IAC3E,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IACrE,OAAO,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,IAAI,EAAE,EAAE,OAAO,EAAE,YAAY,IAAI,iBAAiB,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACpH,CAAC;AAED,SAAS,iBAAiB,CAAC,OAA0B;IACnD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IACzE,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,SAAS;QAC7B,OAAO,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,yDAAyD,EAAE,CAAC,CAAC;IACtG,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,SAAS;QAC7B,OAAO,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,sDAAsD,EAAE,CAAC,CAAC;IACnG,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,aAAa,CAAC,OAA0B;IAC/C,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACxE,OAAO,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CACvD,KAAK,CAAC,MAAM,EAAE,MAAM;QAClB,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,KAAK,SAAS,EAAE,OAAO,EAAE,8CAA8C,EAAE,CAAC;QAClG,CAAC,CAAC,EAAE,CACP,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,OAA0B;IACpD,OAAO,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACvD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7B,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;YAC1B,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,aAAa,KAAK,GAAG,EAAE,CAAC,CAAC;IAC1G,CAAC,CAAC,CAAC;AACL,CAAC;AAED,mEAAmE;AACnE,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,KAAwC,EAAU,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC;AAExG,qFAAqF;AACrF,MAAM,UAAU,YAAY,CAAC,OAA0B,EAAE,IAA8B;IACrF,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,cAAc,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ;QAC5E,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtG,MAAM,EAAE,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YAC7B,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAwC,CAAC;YAC9E,OAAO;gBACL,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,KAAK;gBACL,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;gBAC7B,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3C,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzD,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC9G,CAAC;QACJ,CAAC,CAAC;KACH,CAAC;AACJ,CAAC;AAED,8GAA8G;AAC9G,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,SAAiB,EAAU,EAAE,CAC1D,SAAS;KACN,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;KACjC,WAAW,EAAE;KACb,OAAO,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;AAEhC,mGAAmG;AACnG,SAAS,SAAS,CAAC,UAAoB;IACrC,OAAO,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AACnG,CAAC"}
|
package/dist/domain/run.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// A run of the factory's workflow for one work item, without I/O (ADR 0067): its ID, its first view, the next step,
|
|
1
|
+
// A run of the factory's workflow for one work item, without I/O (ADR 0067, ADR 0070): its ID, its first view, the next step,
|
|
2
2
|
// how each fact changes the view, and the events it publishes. The workflow asks for each step and applies each fact
|
|
3
3
|
// through local activities, so this code runs in the worker's own thread, not in Temporal's sandbox.
|
|
4
4
|
import { createHash } from "node:crypto";
|
|
@@ -17,15 +17,22 @@ export function firstView(workItem, definition, version, startedAt) {
|
|
|
17
17
|
};
|
|
18
18
|
}
|
|
19
19
|
export const hasEnded = (view) => ENDED.has(view.state);
|
|
20
|
-
|
|
20
|
+
/** The next step; a stage whose checks are pending reads them again after `checkPollMs`. */
|
|
21
|
+
export function nextStep(view, definition, checkPollMs) {
|
|
21
22
|
if (hasEnded(view))
|
|
22
23
|
return { kind: "end" };
|
|
23
24
|
// A run whose last stage succeeded is complete, so a run that goes on has a stage that did not succeed.
|
|
24
25
|
const index = view.stages.findIndex((stage) => stage.state !== "succeeded");
|
|
25
26
|
const stage = view.stages[index];
|
|
27
|
+
const plan = definition.stages[index];
|
|
28
|
+
if (stage.state === "blocked" && stage.takenOverAt)
|
|
29
|
+
return { kind: "await-hand-back", index };
|
|
26
30
|
if (stage.state === "blocked" && stage.gateId)
|
|
27
31
|
return { kind: "await-gate", index, gateId: stage.gateId };
|
|
28
|
-
|
|
32
|
+
// Checks come before the gate: nobody is asked to approve a change whose checks fail.
|
|
33
|
+
if (plan?.checks?.length && !stage.checks?.every((check) => check.state === "success"))
|
|
34
|
+
return { kind: "read-checks", index, delayMs: stage.checks ? checkPollMs : 0 };
|
|
35
|
+
if (plan?.gate && !stage.gateId)
|
|
29
36
|
return { kind: "request-gate", index };
|
|
30
37
|
return { kind: "run-stage", index };
|
|
31
38
|
}
|
|
@@ -36,18 +43,26 @@ export function apply(view, fact, at) {
|
|
|
36
43
|
switch (fact.kind) {
|
|
37
44
|
case "gate":
|
|
38
45
|
return gate(next, fact, end);
|
|
46
|
+
case "checks":
|
|
47
|
+
return checks(next, fact, end);
|
|
39
48
|
case "stage-started": {
|
|
40
49
|
Object.assign(next.stages[fact.index], { state: "running", startedAt: at });
|
|
41
50
|
return next;
|
|
42
51
|
}
|
|
43
52
|
case "stage-ended": {
|
|
44
|
-
const state = stageStateOf(fact.stopReason);
|
|
45
53
|
const stage = next.stages[fact.index];
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
54
|
+
if (fact.sessionId)
|
|
55
|
+
stage.sessionId = fact.sessionId;
|
|
56
|
+
if (fact.pullRequest)
|
|
57
|
+
next.pullRequest = fact.pullRequest;
|
|
58
|
+
if (fact.takenOver) {
|
|
59
|
+
Object.assign(stage, { state: "blocked", takenOverAt: at });
|
|
60
|
+
return { ...next, state: "blocked", folder: fact.takenOver.folder };
|
|
61
|
+
}
|
|
62
|
+
return stageEnded(next, fact.index, stageStateOf(fact.stopReason), at);
|
|
50
63
|
}
|
|
64
|
+
case "handed-back":
|
|
65
|
+
return stageEnded({ ...next, state: "running" }, fact.index, "succeeded", at);
|
|
51
66
|
case "cancelled":
|
|
52
67
|
case "error": {
|
|
53
68
|
const stopped = fact.kind === "cancelled" ? "cancelled" : "failed";
|
|
@@ -58,6 +73,13 @@ export function apply(view, fact, at) {
|
|
|
58
73
|
}
|
|
59
74
|
}
|
|
60
75
|
}
|
|
76
|
+
/** The view after the stage at `index` ended in `state`: a stage that did not succeed ends the run. */
|
|
77
|
+
function stageEnded(next, index, state, at) {
|
|
78
|
+
Object.assign(next.stages[index], { state, endedAt: at });
|
|
79
|
+
if (state !== "succeeded")
|
|
80
|
+
return { ...next, state: state === "cancelled" ? "cancelled" : "failed", endedAt: at };
|
|
81
|
+
return index === next.stages.length - 1 ? { ...next, state: "complete", endedAt: at } : next;
|
|
82
|
+
}
|
|
61
83
|
function gate(next, fact, end) {
|
|
62
84
|
const stage = next.stages[fact.index];
|
|
63
85
|
stage.gateId = fact.gateId;
|
|
@@ -72,6 +94,39 @@ function gate(next, fact, end) {
|
|
|
72
94
|
stage.state = "rejected";
|
|
73
95
|
return end("failed");
|
|
74
96
|
}
|
|
97
|
+
function checks(next, fact, end) {
|
|
98
|
+
const stage = next.stages[fact.index];
|
|
99
|
+
if (fact.checks.length)
|
|
100
|
+
stage.checks = fact.checks;
|
|
101
|
+
const failed = fact.checks.find((check) => check.state === "failure" || check.state === "error");
|
|
102
|
+
const reason = fact.reason ?? (failed && `the check ${failed.name} ended with ${failed.state}`);
|
|
103
|
+
if (reason) {
|
|
104
|
+
Object.assign(stage, { state: "failed", reason });
|
|
105
|
+
return end("failed");
|
|
106
|
+
}
|
|
107
|
+
if (fact.checks.every((check) => check.state === "success")) {
|
|
108
|
+
stage.state = "pending";
|
|
109
|
+
return { ...next, state: "running" };
|
|
110
|
+
}
|
|
111
|
+
stage.state = "blocked";
|
|
112
|
+
return { ...next, state: "blocked" };
|
|
113
|
+
}
|
|
114
|
+
/** The states of the named checks in what the forge port's `pr` printed; a check it does not list is pending. */
|
|
115
|
+
export function checksOf(names, printed) {
|
|
116
|
+
return names.map((name) => {
|
|
117
|
+
const state = printed.find((check) => check.name === name)?.state;
|
|
118
|
+
return { name, state: state === "success" || state === "failure" || state === "error" ? state : "pending" };
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
// A pull request's page on GitHub (/pull/<n>) or Forgejo (/pulls/<n>), as runlog finds it.
|
|
122
|
+
const PULL_REQUEST = /https?:\/\/[^\s"'<>()]+\/([^/\s"'<>()]+)\/([^/\s"'<>()]+)\/pulls?\/(\d+)/g;
|
|
123
|
+
/** The last pull request link in the text. */
|
|
124
|
+
export const lastPullRequestIn = (text) => [...text.matchAll(PULL_REQUEST)].pop()?.[0];
|
|
125
|
+
/** The repository `<owner>/<name>` and number of a pull request link. */
|
|
126
|
+
export function pullRequestOf(url) {
|
|
127
|
+
const [, owner, name, number] = [...url.matchAll(PULL_REQUEST)][0];
|
|
128
|
+
return { repo: `${owner}/${name}`, number: number };
|
|
129
|
+
}
|
|
75
130
|
/** How a turn's stop reason ends its stage (harness port): only `end_turn` succeeds. */
|
|
76
131
|
export function stageStateOf(stopReason) {
|
|
77
132
|
if (stopReason === "end_turn")
|
|
@@ -80,18 +135,19 @@ export function stageStateOf(stopReason) {
|
|
|
80
135
|
return "cancelled";
|
|
81
136
|
return "failed";
|
|
82
137
|
}
|
|
83
|
-
/** The prompt of a stage: the agent's prompt, then the work item. */
|
|
84
|
-
export function promptOf(agentPrompt, workItem) {
|
|
138
|
+
/** The prompt of a stage: the agent's prompt, then the work item and the run's pull request. */
|
|
139
|
+
export function promptOf(agentPrompt, workItem, pullRequest) {
|
|
85
140
|
const description = workItem.description ? `\n\n${workItem.description}` : "";
|
|
86
|
-
|
|
141
|
+
const link = pullRequest ? `\n\nPull request: ${pullRequest}` : "";
|
|
142
|
+
return `${agentPrompt.trimEnd()}\n\n# Work item ${workItem.id}\n\n${workItem.title}${description}${link}\n`;
|
|
87
143
|
}
|
|
88
144
|
/** The signal in a request's body, or the problem with it as "<JSON Pointer>: <what is wrong>". */
|
|
89
145
|
export function signalOf(body) {
|
|
90
146
|
const { type, message } = (typeof body === "object" && body !== null ? body : {});
|
|
91
|
-
if (type === "cancel")
|
|
147
|
+
if (type === "cancel" || type === "take-over" || type === "hand-back")
|
|
92
148
|
return { type };
|
|
93
149
|
if (type !== "steer")
|
|
94
|
-
return `/type: must be "steer" or "
|
|
150
|
+
return `/type: must be "steer", "cancel", "take-over" or "hand-back"`;
|
|
95
151
|
if (typeof message !== "string" || message === "")
|
|
96
152
|
return "/message: a steering message needs the text";
|
|
97
153
|
return { type, message };
|
|
@@ -141,6 +197,7 @@ export function runCompleted(view) {
|
|
|
141
197
|
endedAt,
|
|
142
198
|
requester: view.workItem.requester,
|
|
143
199
|
source: view.workItem.origin.source,
|
|
200
|
+
...(view.pullRequest ? { pullRequests: [view.pullRequest] } : {}),
|
|
144
201
|
},
|
|
145
202
|
};
|
|
146
203
|
}
|
package/dist/domain/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/domain/run.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/domain/run.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,30 +1,62 @@
|
|
|
1
1
|
// The activities of a run (ADR 0067). `next` and `apply` are local activities around the domain, so a run's logic runs
|
|
2
|
-
// in the worker's thread; the others reach outside: the sandbox, the harness, gatekeeper and NATS.
|
|
2
|
+
// in the worker's thread; the others reach outside: the sandbox, the harness, the forge, gatekeeper and NATS. Each
|
|
3
|
+
// stage's agent gets the factory's inference gateway with the run's key (ADR 0070).
|
|
3
4
|
import { mkdirSync } from "node:fs";
|
|
4
5
|
import { join } from "node:path";
|
|
5
6
|
import { Context } from "@temporalio/activity";
|
|
7
|
+
import { pullRequestChecks } from "../adapters/forge.js";
|
|
6
8
|
import { startTurn } from "../adapters/harness.js";
|
|
7
9
|
import { SUBJECTS } from "../adapters/nats.js";
|
|
8
10
|
import { createSandbox } from "../adapters/sandbox.js";
|
|
9
|
-
import { apply, gateSummaryOf, nextStep, promptOf, runCompleted, runStarted, } from "../domain/run.js";
|
|
11
|
+
import { apply, checksOf, gateSummaryOf, lastPullRequestIn, nextStep, promptOf, pullRequestOf, runCompleted, runStarted, } from "../domain/run.js";
|
|
10
12
|
/** The command line of an adapter by its name, as program and arguments. */
|
|
11
13
|
const commandLine = (lines, name, otherwise) => (lines[name] ?? otherwise).split(" ");
|
|
12
14
|
export function activities(deps) {
|
|
13
|
-
/**
|
|
14
|
-
|
|
15
|
+
/** Each run's key of the gateway, made once per run while this worker lives; never in Temporal's history. */
|
|
16
|
+
const keys = new Map();
|
|
17
|
+
const keyOf = (gateway, runId, budget) => {
|
|
18
|
+
const key = keys.get(runId) ?? gateway.key(runId, budget);
|
|
19
|
+
keys.set(runId, key);
|
|
20
|
+
return key;
|
|
21
|
+
};
|
|
22
|
+
/** The variables of the gateway that every harness adapter finds its own in (ADR 0070); none without a gateway. */
|
|
23
|
+
async function gatewayEnv(view, definition, model) {
|
|
24
|
+
const { gateway } = deps;
|
|
25
|
+
if (!gateway)
|
|
26
|
+
return {};
|
|
27
|
+
const key = await keyOf(gateway, view.runId, definition.inference?.budget);
|
|
28
|
+
return {
|
|
29
|
+
OPENAI_BASE_URL: gateway.url,
|
|
30
|
+
OPENAI_API_KEY: key,
|
|
31
|
+
OPENAI_MODEL: model,
|
|
32
|
+
ANTHROPIC_BASE_URL: gateway.url.replace(/\/v1\/?$/, ""),
|
|
33
|
+
ANTHROPIC_API_KEY: key,
|
|
34
|
+
ANTHROPIC_MODEL: model,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* The turn's stop reason, and whether a person took the stage over; meanwhile it sends the run's new steering
|
|
39
|
+
* messages, ends the turn when a person takes the stage at `index` over, and reports that the stage lives.
|
|
40
|
+
*/
|
|
41
|
+
async function untilDone(turn, runId, index, steered) {
|
|
15
42
|
const context = Context.current();
|
|
16
43
|
context.cancellationSignal.addEventListener("abort", () => turn.cancel());
|
|
17
44
|
let sent = steered;
|
|
45
|
+
let takenOver = false;
|
|
18
46
|
const watch = setInterval(() => {
|
|
19
47
|
context.heartbeat();
|
|
20
|
-
deps.
|
|
21
|
-
for (const message of
|
|
48
|
+
deps.control(runId).then(({ steering, takeOver }) => {
|
|
49
|
+
for (const message of steering.slice(sent))
|
|
22
50
|
turn.steer(message);
|
|
23
|
-
sent = Math.max(sent,
|
|
51
|
+
sent = Math.max(sent, steering.length);
|
|
52
|
+
if (takeOver === index && !takenOver) {
|
|
53
|
+
takenOver = true;
|
|
54
|
+
turn.cancel();
|
|
55
|
+
}
|
|
24
56
|
}, () => undefined);
|
|
25
57
|
}, deps.pollMs);
|
|
26
58
|
try {
|
|
27
|
-
return await turn.done;
|
|
59
|
+
return { stopReason: await turn.done, takenOver };
|
|
28
60
|
}
|
|
29
61
|
finally {
|
|
30
62
|
clearInterval(watch);
|
|
@@ -33,7 +65,7 @@ export function activities(deps) {
|
|
|
33
65
|
}
|
|
34
66
|
return {
|
|
35
67
|
async next(view, definition) {
|
|
36
|
-
return nextStep(view, definition);
|
|
68
|
+
return nextStep(view, definition, deps.checkPollMs);
|
|
37
69
|
},
|
|
38
70
|
async apply(view, fact) {
|
|
39
71
|
return apply(view, fact, deps.now());
|
|
@@ -56,6 +88,16 @@ export function activities(deps) {
|
|
|
56
88
|
});
|
|
57
89
|
return { kind: "gate", index, gateId: gate.id, state: gate.state };
|
|
58
90
|
},
|
|
91
|
+
/** The stage's checks on the run's pull request, through the forge adapter that the factory names. */
|
|
92
|
+
async readChecks(view, definition, index) {
|
|
93
|
+
const names = definition.stages[index]?.checks ?? [];
|
|
94
|
+
if (!view.pullRequest)
|
|
95
|
+
return { kind: "checks", index, checks: [], reason: "no earlier stage linked a pull request" };
|
|
96
|
+
const { repo, number } = pullRequestOf(view.pullRequest);
|
|
97
|
+
const adapter = definition.forgeAdapter;
|
|
98
|
+
const printed = await pullRequestChecks(commandLine(deps.forges, adapter, `npx -y @opensoftware/forge-${adapter}`), { ...deps.env, ...deps.forgeEnv }, repo, number);
|
|
99
|
+
return { kind: "checks", index, checks: checksOf(names, printed) };
|
|
100
|
+
},
|
|
59
101
|
/** Runs the stage's agent, in a sandbox when it declares one; steering messages from the `steered`-th on are for it. */
|
|
60
102
|
async runStage(view, definition, index, steered) {
|
|
61
103
|
const plan = definition.stages[index];
|
|
@@ -74,11 +116,12 @@ export function activities(deps) {
|
|
|
74
116
|
.join(",");
|
|
75
117
|
const harness = commandLine(deps.harnesses, plan.harness, `npx -y @opensoftware/harness-${plan.harness} run`);
|
|
76
118
|
const adapter = definition.sandboxAdapter;
|
|
119
|
+
const model = await gatewayEnv(view, definition, plan.model);
|
|
77
120
|
const sandbox = plan.sandbox
|
|
78
|
-
? await createSandbox(commandLine(deps.sandboxes, adapter, `npx -y @opensoftware/sandbox-${adapter}`), { ...plan.sandbox, env: { OTEL_RESOURCE_ATTRIBUTES: resource } }, cwd, view.runId, deps.env)
|
|
121
|
+
? await createSandbox(commandLine(deps.sandboxes, adapter, `npx -y @opensoftware/sandbox-${adapter}`), { ...plan.sandbox, env: { OTEL_RESOURCE_ATTRIBUTES: resource, ...model } }, cwd, view.runId, deps.env)
|
|
79
122
|
: undefined;
|
|
80
123
|
try {
|
|
81
|
-
const prompt = promptOf(plan.prompt, view.workItem);
|
|
124
|
+
const prompt = promptOf(plan.prompt, view.workItem, view.pullRequest);
|
|
82
125
|
const turn = await startTurn(sandbox
|
|
83
126
|
? { command: sandbox.exec(harness), cwd, folder: await sandbox.copyIn(), env: deps.env, prompt }
|
|
84
127
|
: {
|
|
@@ -89,12 +132,21 @@ export function activities(deps) {
|
|
|
89
132
|
...deps.env,
|
|
90
133
|
OSF_DATA: join(deps.data, "harness", plan.harness),
|
|
91
134
|
OTEL_RESOURCE_ATTRIBUTES: resource,
|
|
135
|
+
...model,
|
|
92
136
|
},
|
|
93
137
|
prompt,
|
|
94
138
|
});
|
|
95
|
-
const stopReason = await untilDone(turn, view.runId, steered);
|
|
139
|
+
const { stopReason, takenOver } = await untilDone(turn, view.runId, index, steered);
|
|
96
140
|
await sandbox?.copyOut();
|
|
97
|
-
|
|
141
|
+
const pullRequest = lastPullRequestIn(turn.transcript());
|
|
142
|
+
return {
|
|
143
|
+
kind: "stage-ended",
|
|
144
|
+
index,
|
|
145
|
+
stopReason,
|
|
146
|
+
sessionId: turn.sessionId,
|
|
147
|
+
...(pullRequest ? { pullRequest } : {}),
|
|
148
|
+
...(takenOver ? { takenOver: { folder: cwd } } : {}),
|
|
149
|
+
};
|
|
98
150
|
}
|
|
99
151
|
finally {
|
|
100
152
|
await sandbox?.destroy();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activities.js","sourceRoot":"","sources":["../../src/workflows/activities.ts"],"names":[],"mappings":"AAAA,uHAAuH;AACvH,
|
|
1
|
+
{"version":3,"file":"activities.js","sourceRoot":"","sources":["../../src/workflows/activities.ts"],"names":[],"mappings":"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"}
|
package/dist/workflows/run.js
CHANGED
|
@@ -2,11 +2,14 @@
|
|
|
2
2
|
// activity `next` for each step, waits, and hands each fact to `apply`; the logic is in the domain.
|
|
3
3
|
// Stryker disable all: this file runs in Temporal's workflow sandbox, a V8 context of its own that Stryker's mutant
|
|
4
4
|
// switch and coverage never reach; every mutant here would count as not run (ADR 0067).
|
|
5
|
-
import { ActivityCancellationType, CancellationScope, condition, defineQuery, defineSignal, isCancellation, proxyActivities, proxyLocalActivities, setHandler, } from "@temporalio/workflow";
|
|
5
|
+
import { ActivityCancellationType, CancellationScope, condition, defineQuery, defineSignal, isCancellation, proxyActivities, proxyLocalActivities, setHandler, sleep, } from "@temporalio/workflow";
|
|
6
6
|
export const viewQuery = defineQuery("view");
|
|
7
|
-
export const
|
|
7
|
+
export const controlQuery = defineQuery("control");
|
|
8
8
|
export const steerSignal = defineSignal("steer");
|
|
9
9
|
export const gateSignal = defineSignal("gate");
|
|
10
|
+
/** A person takes over the stage at this index (ADR 0070). */
|
|
11
|
+
export const takeOverSignal = defineSignal("take-over");
|
|
12
|
+
export const handBackSignal = defineSignal("hand-back");
|
|
10
13
|
const local = proxyLocalActivities({ startToCloseTimeout: "1 minute" });
|
|
11
14
|
const remote = proxyActivities({
|
|
12
15
|
startToCloseTimeout: "1 day",
|
|
@@ -18,10 +21,18 @@ export async function factoryRun({ view, definition }) {
|
|
|
18
21
|
let run = view;
|
|
19
22
|
const steering = [];
|
|
20
23
|
const decisions = [];
|
|
24
|
+
let takeOver;
|
|
25
|
+
let handedBack = false;
|
|
21
26
|
setHandler(viewQuery, () => run);
|
|
22
|
-
setHandler(
|
|
27
|
+
setHandler(controlQuery, () => ({ steering, ...(takeOver === undefined ? {} : { takeOver }) }));
|
|
23
28
|
setHandler(steerSignal, (message) => void steering.push(message));
|
|
24
29
|
setHandler(gateSignal, (decision) => void decisions.push(decision));
|
|
30
|
+
setHandler(takeOverSignal, (index) => {
|
|
31
|
+
takeOver = index;
|
|
32
|
+
});
|
|
33
|
+
setHandler(handBackSignal, () => {
|
|
34
|
+
handedBack = true;
|
|
35
|
+
});
|
|
25
36
|
const settle = async (fact) => {
|
|
26
37
|
run = await CancellationScope.nonCancellable(() => local.apply(run, fact));
|
|
27
38
|
};
|
|
@@ -29,7 +40,12 @@ export async function factoryRun({ view, definition }) {
|
|
|
29
40
|
await remote.publishStarted(run);
|
|
30
41
|
for (let step = await local.next(run, definition); step.kind !== "end"; step = await local.next(run, definition)) {
|
|
31
42
|
const { index } = step;
|
|
32
|
-
if (step.kind === "
|
|
43
|
+
if (step.kind === "read-checks") {
|
|
44
|
+
if (step.delayMs)
|
|
45
|
+
await sleep(step.delayMs);
|
|
46
|
+
run = await local.apply(run, await remote.readChecks(run, definition, index));
|
|
47
|
+
}
|
|
48
|
+
else if (step.kind === "request-gate") {
|
|
33
49
|
run = await local.apply(run, await remote.requestGate(run, definition, index));
|
|
34
50
|
}
|
|
35
51
|
else if (step.kind === "await-gate") {
|
|
@@ -38,6 +54,11 @@ export async function factoryRun({ view, definition }) {
|
|
|
38
54
|
const decision = decisions.find((candidate) => candidate.gateId === gateId);
|
|
39
55
|
run = await local.apply(run, { kind: "gate", index, ...decision });
|
|
40
56
|
}
|
|
57
|
+
else if (step.kind === "await-hand-back") {
|
|
58
|
+
await condition(() => handedBack);
|
|
59
|
+
[handedBack, takeOver] = [false, undefined];
|
|
60
|
+
run = await local.apply(run, { kind: "handed-back", index });
|
|
61
|
+
}
|
|
41
62
|
else {
|
|
42
63
|
run = await local.apply(run, { kind: "stage-started", index });
|
|
43
64
|
await settle(await remote.runStage(run, definition, index, steering.length));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/workflows/run.ts"],"names":[],"mappings":"AAAA,gHAAgH;AAChH,oGAAoG;AACpG,oHAAoH;AACpH,wFAAwF;AACxF,OAAO,EACL,wBAAwB,EACxB,iBAAiB,EACjB,SAAS,EACT,WAAW,EACX,YAAY,EACZ,cAAc,EACd,eAAe,EACf,oBAAoB,EACpB,UAAU,
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/workflows/run.ts"],"names":[],"mappings":"AAAA,gHAAgH;AAChH,oGAAoG;AACpG,oHAAoH;AACpH,wFAAwF;AACxF,OAAO,EACL,wBAAwB,EACxB,iBAAiB,EACjB,SAAS,EACT,WAAW,EACX,YAAY,EACZ,cAAc,EACd,eAAe,EACf,oBAAoB,EACpB,UAAU,EACV,KAAK,GACN,MAAM,sBAAsB,CAAC;AAI9B,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAU,MAAM,CAAC,CAAC;AACtD,MAAM,CAAC,MAAM,YAAY,GAAG,WAAW,CAAU,SAAS,CAAC,CAAC;AAC5D,MAAM,CAAC,MAAM,WAAW,GAAG,YAAY,CAAW,OAAO,CAAC,CAAC;AAC3D,MAAM,CAAC,MAAM,UAAU,GAAG,YAAY,CAAiB,MAAM,CAAC,CAAC;AAC/D,8DAA8D;AAC9D,MAAM,CAAC,MAAM,cAAc,GAAG,YAAY,CAAW,WAAW,CAAC,CAAC;AAClE,MAAM,CAAC,MAAM,cAAc,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;AAExD,MAAM,KAAK,GAAG,oBAAoB,CAAa,EAAE,mBAAmB,EAAE,UAAU,EAAE,CAAC,CAAC;AACpF,MAAM,MAAM,GAAG,eAAe,CAAa;IACzC,mBAAmB,EAAE,OAAO;IAC5B,gBAAgB,EAAE,UAAU;IAC5B,KAAK,EAAE,EAAE,eAAe,EAAE,CAAC,EAAE;IAC7B,gBAAgB,EAAE,wBAAwB,CAAC,2BAA2B;CACvE,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,EAAE,IAAI,EAAE,UAAU,EAAY;IAC7D,IAAI,GAAG,GAAG,IAAI,CAAC;IACf,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,SAAS,GAAmB,EAAE,CAAC;IACrC,IAAI,QAA4B,CAAC;IACjC,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,UAAU,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IACjC,UAAU,CAAC,YAAY,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAChG,UAAU,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAClE,UAAU,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACpE,UAAU,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE;QACnC,QAAQ,GAAG,KAAK,CAAC;IACnB,CAAC,CAAC,CAAC;IACH,UAAU,CAAC,cAAc,EAAE,GAAG,EAAE;QAC9B,UAAU,GAAG,IAAI,CAAC;IACpB,CAAC,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,KAAK,EAAE,IAAU,EAAE,EAAE;QAClC,GAAG,GAAG,MAAM,iBAAiB,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;IAC7E,CAAC,CAAC;IACF,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QACjC,KAAK,IAAI,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,CAAC;YACjH,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;YACvB,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;gBAChC,IAAI,IAAI,CAAC,OAAO;oBAAE,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAC5C,GAAG,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;YAChF,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;gBACxC,GAAG,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;YACjF,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBACtC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;gBACxB,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC;gBAChF,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,KAAK,MAAM,CAAiB,CAAC;gBAC5F,GAAG,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAC;YACrE,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;gBAC3C,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC;gBAClC,CAAC,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;gBAC5C,GAAG,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;YAC/D,CAAC;iBAAM,CAAC;gBACN,GAAG,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC;gBAC/D,MAAM,MAAM,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;YAC/E,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC1G,CAAC;IACD,MAAM,iBAAiB,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3E,OAAO,GAAG,CAAC;AACb,CAAC"}
|