@ccdd/project 3.1.1 → 3.2.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/dist/monitor-ui/assets/GraphView-BSZlEAs3.js +27 -0
- package/dist/monitor-ui/assets/ValidationView-DaEF78J-.js +1 -0
- package/dist/monitor-ui/assets/{elk-api-DDn2L4-3.js → elk-api-D5d3gWoP.js} +1 -1
- package/dist/monitor-ui/assets/{elk.bundled-Bmx50hLH.js → elk.bundled-0eaKiuBP.js} +1 -1
- package/dist/monitor-ui/assets/index-BQlWbkpH.js +8 -0
- package/dist/monitor-ui/assets/index-DDwx11D7.css +1 -0
- package/dist/monitor-ui/index.html +2 -2
- package/dist/src/artifacts/data.d.ts +5 -0
- package/dist/src/artifacts/data.js +100 -0
- package/dist/src/artifacts/data.js.map +1 -0
- package/dist/src/artifacts/groups.d.ts +6 -2
- package/dist/src/artifacts/groups.js +17 -1
- package/dist/src/artifacts/groups.js.map +1 -1
- package/dist/src/artifacts/index.d.ts +13 -2
- package/dist/src/artifacts/index.js +2 -0
- package/dist/src/artifacts/index.js.map +1 -1
- package/dist/src/artifacts/mcp-server.js +1 -1
- package/dist/src/artifacts/mcp-server.js.map +1 -1
- package/dist/src/artifacts/sources.d.ts +11 -0
- package/dist/src/artifacts/sources.js +106 -0
- package/dist/src/artifacts/sources.js.map +1 -0
- package/dist/src/artifacts/tool-check.d.ts +3 -0
- package/dist/src/artifacts/tool-check.js +32 -27
- package/dist/src/artifacts/tool-check.js.map +1 -1
- package/dist/src/broker/config.js +9 -2
- package/dist/src/broker/config.js.map +1 -1
- package/dist/src/broker/graph.d.ts +5 -0
- package/dist/src/broker/graph.js +3 -3
- package/dist/src/broker/graph.js.map +1 -1
- package/dist/src/broker/human-claims.d.ts +20 -2
- package/dist/src/broker/human-claims.js +50 -5
- package/dist/src/broker/human-claims.js.map +1 -1
- package/dist/src/broker/index.d.ts +2 -1
- package/dist/src/broker/index.js +10 -4
- package/dist/src/broker/index.js.map +1 -1
- package/dist/src/contracts.d.ts +4 -2
- package/dist/src/definitions.d.ts +13 -1
- package/dist/src/executors/human-preparation.d.ts +7 -1
- package/dist/src/executors/human-preparation.js +9 -2
- package/dist/src/executors/human-preparation.js.map +1 -1
- package/dist/src/executors/index.js +5 -1
- package/dist/src/executors/index.js.map +1 -1
- package/dist/src/executors/pi.js +2 -1
- package/dist/src/executors/pi.js.map +1 -1
- package/dist/src/monitor/human-preparation.d.ts +4 -0
- package/dist/src/monitor/human-preparation.js +43 -0
- package/dist/src/monitor/human-preparation.js.map +1 -0
- package/dist/src/monitor/server.js +4 -1
- package/dist/src/monitor/server.js.map +1 -1
- package/dist/src/monitor/store.js +2 -0
- package/dist/src/monitor/store.js.map +1 -1
- package/dist/src/monitor/types.d.ts +12 -2
- package/dist/src/monitor/ui/graph-layout.d.ts +1 -1
- package/dist/src/project/identity.js +7 -1
- package/dist/src/project/identity.js.map +1 -1
- package/dist/src/project/index.js +3 -1
- package/dist/src/project/index.js.map +1 -1
- package/dist/src/requester/index.js +9 -1
- package/dist/src/requester/index.js.map +1 -1
- package/dist/src/review/client.js +2 -1
- package/dist/src/review/client.js.map +1 -1
- package/dist/src/review/server.js +2 -1
- package/dist/src/review/server.js.map +1 -1
- package/dist/src/sdk.d.ts +7 -1
- package/dist/src/sdk.js +2 -0
- package/dist/src/sdk.js.map +1 -1
- package/dist/src/tools/contracts.d.ts +55 -6
- package/dist/src/tools/diagnostics.d.ts +11 -0
- package/dist/src/tools/diagnostics.js +75 -0
- package/dist/src/tools/diagnostics.js.map +1 -0
- package/dist/src/tools/manifest.js +1 -0
- package/dist/src/tools/manifest.js.map +1 -1
- package/dist/src/tools/runner.d.ts +2 -0
- package/dist/src/tools/runner.js +32 -12
- package/dist/src/tools/runner.js.map +1 -1
- package/dist/src/tools/runtime-host.js +73 -17
- package/dist/src/tools/runtime-host.js.map +1 -1
- package/dist/src/tools/schema.js +1 -1
- package/dist/src/tools/schema.js.map +1 -1
- package/dist/src/workspaces/index.d.ts +10 -2
- package/dist/src/workspaces/index.js +22 -7
- package/dist/src/workspaces/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/monitor-ui/assets/GraphView-CzM-UdPe.js +0 -27
- package/dist/monitor-ui/assets/ValidationView-C3G5cwXp.js +0 -1
- package/dist/monitor-ui/assets/_plugin-vue_export-helper-BDNMzG2s.js +0 -1
- package/dist/monitor-ui/assets/index-B4RYcPAo.js +0 -8
- package/dist/monitor-ui/assets/index-SA3sxGLr.css +0 -1
|
@@ -6,45 +6,35 @@ import { prepareWorkspace } from '../workspaces/index.js';
|
|
|
6
6
|
import { createReviewTools } from '../tools/runner.js';
|
|
7
7
|
import { assertArtifactAudience } from './types.js';
|
|
8
8
|
import { isArtifactGroup, resolveArtifactScope } from './groups.js';
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
if (aborted || code === 'ABORTED')
|
|
12
|
-
return { code: 'ABORTED', message: 'Artifact tool diagnosis was cancelled.' };
|
|
13
|
-
if (code === 'WORKSPACE_CHANGED' || code === 'WORKSPACE_CACHE_TAMPERED')
|
|
14
|
-
return { code, message: 'The workspace changed during Artifact tool diagnosis.' };
|
|
15
|
-
if (code === 'ARTIFACT_TOOLS_UNAVAILABLE')
|
|
16
|
-
return { code, message: 'A Critic references an Artifact with no tools for its reviewer kind. Register the corresponding agentTools or humanTools.' };
|
|
17
|
-
if (code === 'HUMAN_TOOL_TIMEOUT')
|
|
18
|
-
return { code, message: 'The registered Human tool exceeded its configured time limit.' };
|
|
19
|
-
if (code === 'HUMAN_TOOL_UNAVAILABLE')
|
|
20
|
-
return { code, message: 'The registered Human tool executable is unavailable.' };
|
|
21
|
-
if (code === 'HUMAN_TOOL_FAILED')
|
|
22
|
-
return { code, message: 'The registered Human tool did not finish successfully.' };
|
|
23
|
-
return { code: 'ARTIFACT_TOOL_CHECK_FAILED', message: 'Artifact tool diagnosis failed. Check the configuration, selected tool, scoped arguments and workspace access.' };
|
|
24
|
-
}
|
|
9
|
+
import { prepareArtifactInputs } from './sources.js';
|
|
10
|
+
import { safeToolFailure, toolFailureStage } from '../tools/diagnostics.js';
|
|
25
11
|
/** Diagnose registered tools without creating a Broker, Run, request, alarm, Agent session or verdict. */
|
|
26
12
|
export async function diagnoseArtifactTools({ repoPath, mode = 'copy', stateDir, artifactId, audience, toolName, arguments: args, execute = false, signal }) {
|
|
27
13
|
const report = { ok: false, status: 'NOT_READY', mode, checkedAt: new Date().toISOString(), checks: [], tools: [] };
|
|
28
14
|
let workspace;
|
|
15
|
+
let stage = 'preflight';
|
|
29
16
|
try {
|
|
30
17
|
if ((audience !== undefined && audience !== 'agent' && audience !== 'human') || (execute && (!artifactId || !audience || !toolName)) || (!execute && args !== undefined))
|
|
31
18
|
throw new Error('Actual tool execution requires explicit Artifact, audience and tool selection.');
|
|
32
19
|
signal?.throwIfAborted();
|
|
20
|
+
stage = 'snapshot';
|
|
33
21
|
const context = await localContext({ repoPath, stateDir });
|
|
34
22
|
workspace = await prepareWorkspace({ repoPath: context.repoPath, stateDir: context.stateDir, mode, signal });
|
|
35
23
|
const worktreePath = workspace.descriptor.path;
|
|
36
24
|
report.snapshotHash = workspace.descriptor.hash;
|
|
37
25
|
// Cached copies are retained: a desktop viewer can continue reading after its launcher exits.
|
|
38
26
|
report.workspacePath = worktreePath;
|
|
39
|
-
|
|
27
|
+
stage = 'preflight';
|
|
28
|
+
const loaded = await readWorkspaceConfig(worktreePath);
|
|
29
|
+
const config = await prepareArtifactInputs(loaded.config, worktreePath, 'review', workspace.signal);
|
|
40
30
|
const { configManifest } = config;
|
|
41
31
|
if (artifactId !== undefined && !Object.hasOwn(config.artifacts, artifactId))
|
|
42
32
|
throw new Error('Unknown selected Artifact.');
|
|
43
33
|
if (execute && artifactId !== undefined && isArtifactGroup(config.artifacts[artifactId])) {
|
|
44
|
-
report.checks.push({ artifactId, ok: false, message: 'Groups collect member tools. Select a leaf Artifact with --artifact to execute its tool.' });
|
|
34
|
+
report.checks.push({ artifactId, stage, ok: false, code: 'ARTIFACT_GROUP_NOT_EXECUTABLE', message: 'Groups collect member tools. Select a leaf Artifact with --artifact to execute its tool.' });
|
|
45
35
|
return report;
|
|
46
36
|
}
|
|
47
|
-
const selectedScope = resolveArtifactScope(config.artifacts, artifactId === undefined ? Object.keys(config.artifacts) : [artifactId]);
|
|
37
|
+
const selectedScope = resolveArtifactScope(config.artifacts, artifactId === undefined ? Object.keys(config.artifacts) : [artifactId], config.artifactInputs);
|
|
48
38
|
const selected = selectedScope.artifacts;
|
|
49
39
|
if (!selected.length)
|
|
50
40
|
throw new Error('Unknown selected Artifact.');
|
|
@@ -54,18 +44,21 @@ export async function diagnoseArtifactTools({ repoPath, mode = 'copy', stateDir,
|
|
|
54
44
|
assertArtifactAudience({ profile: critic.profile, ...resolveArtifactScope(config.artifacts, [critic.target, ...critic.deps]), artifactTypes: config.artifactTypes, configManifest });
|
|
55
45
|
}
|
|
56
46
|
catch (error) {
|
|
57
|
-
report.checks.push({ ok: false, ...
|
|
47
|
+
report.checks.push({ stage, ok: false, ...safeToolFailure(error) });
|
|
58
48
|
}
|
|
59
49
|
}
|
|
60
50
|
}
|
|
61
51
|
for (const targetAudience of audience ? [audience] : ['agent', 'human']) {
|
|
52
|
+
stage = 'preflight';
|
|
62
53
|
const registry = await createReviewTools({ worktreePath, ...selectedScope, artifactTypes: config.artifactTypes, configManifest, audience: targetAudience, runDir: join(context.stateDir, 'tool-check', randomUUID()), signal: workspace.signal });
|
|
54
|
+
if (execute && targetAudience === audience && registry.outputDir)
|
|
55
|
+
report.outputDir = registry.outputDir;
|
|
63
56
|
try {
|
|
64
57
|
// Explicit Artifact selection makes the short operation name unambiguous; published names win.
|
|
65
58
|
const resolvedToolName = toolName === undefined || registry.tools.some(tool => tool.name === toolName) || artifactId === undefined ? toolName : `${toolName}_${artifactId}`;
|
|
66
59
|
const definitions = registry.tools.filter(tool => resolvedToolName === undefined || tool.name === resolvedToolName);
|
|
67
60
|
if (toolName !== undefined && !definitions.length) {
|
|
68
|
-
report.checks.push({ artifactId, audience: targetAudience, toolName, ok: false, message: 'The selected tool is not registered for this Artifact and reviewer kind.' });
|
|
61
|
+
report.checks.push({ artifactId, audience: targetAudience, toolName, stage, ok: false, code: 'ARTIFACT_TOOL_NOT_REGISTERED', message: 'The selected tool is not registered for this Artifact and reviewer kind.' });
|
|
69
62
|
continue;
|
|
70
63
|
}
|
|
71
64
|
report.tools.push(...definitions.map(tool => ({ ...tool, audience: targetAudience })));
|
|
@@ -73,21 +66,31 @@ export async function diagnoseArtifactTools({ repoPath, mode = 'copy', stateDir,
|
|
|
73
66
|
if (definitions.some(tool => tool.artifactId === artifact.id))
|
|
74
67
|
continue;
|
|
75
68
|
const required = audience !== undefined || config.critics.some(critic => critic.profile.kind === targetAudience && resolveArtifactScope(config.artifacts, [critic.target, ...critic.deps]).artifacts.some(leaf => leaf.id === artifact.id));
|
|
76
|
-
report.checks.push({ artifactId: artifact.id, audience: targetAudience, ok: !required, message: `No ${targetAudience} tools are available for this Artifact. It cannot be used by a ${targetAudience} Critic.` });
|
|
69
|
+
report.checks.push({ artifactId: artifact.id, audience: targetAudience, stage, ok: !required, ...(required ? { code: 'ARTIFACT_TOOLS_UNAVAILABLE' } : {}), message: `No ${targetAudience} tools are available for this Artifact. It cannot be used by a ${targetAudience} Critic.` });
|
|
77
70
|
}
|
|
78
|
-
report.checks.push(...(await registry.preflight({ toolName: resolvedToolName })).map(check => ({ ...check, audience: targetAudience })));
|
|
71
|
+
report.checks.push(...(await registry.preflight({ toolName: resolvedToolName })).map(check => ({ ...check, ...(!check.ok ? safeToolFailure({ code: check.code ?? 'ARTIFACT_TOOL_PREFLIGHT_FAILED' }) : {}), stage: 'preflight', audience: targetAudience })));
|
|
79
72
|
if (execute && targetAudience === audience && definitions.length === 1 && report.checks.every(check => check.ok)) {
|
|
73
|
+
registry.validateArguments(definitions[0].name, args ?? {});
|
|
74
|
+
stage = 'input-integrity';
|
|
80
75
|
await workspace.assertUnchanged();
|
|
76
|
+
stage = 'execute';
|
|
81
77
|
const result = await registry.call(definitions[0].name, args ?? {});
|
|
78
|
+
stage = 'input-integrity';
|
|
82
79
|
await workspace.assertUnchanged();
|
|
83
80
|
report.result = result;
|
|
84
|
-
report.checks.push({ artifactId, audience, toolName: definitions[0].name, ok: true, message: 'The selected registered tool completed successfully. No review result was created.' });
|
|
81
|
+
report.checks.push({ artifactId, audience, toolName: definitions[0].name, stage: 'execute', ok: true, message: 'The selected registered tool completed successfully. No review result was created.' });
|
|
85
82
|
}
|
|
86
83
|
}
|
|
87
84
|
finally {
|
|
88
|
-
|
|
85
|
+
try {
|
|
86
|
+
await registry.close();
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
report.checks.push({ artifactId, audience: targetAudience, toolName, stage, ok: false, ...safeToolFailure(error) });
|
|
90
|
+
}
|
|
89
91
|
}
|
|
90
92
|
}
|
|
93
|
+
stage = 'input-integrity';
|
|
91
94
|
await workspace.assertUnchanged();
|
|
92
95
|
}
|
|
93
96
|
catch (error) {
|
|
@@ -95,16 +98,18 @@ export async function diagnoseArtifactTools({ repoPath, mode = 'copy', stateDir,
|
|
|
95
98
|
// A mutated workspace can abort a running program before its boundary check resumes.
|
|
96
99
|
// Preserve that integrity failure instead of relabeling it as an ordinary cancellation.
|
|
97
100
|
const reason = workspace?.signal.aborted && !signal?.aborted ? workspace.signal.reason : error;
|
|
98
|
-
report.checks.push({ artifactId, audience, toolName, ok: false, ...
|
|
101
|
+
report.checks.push({ artifactId, audience, toolName, stage: toolFailureStage(reason, stage), ok: false, ...safeToolFailure(reason, signal?.aborted ?? false) });
|
|
99
102
|
}
|
|
100
103
|
finally {
|
|
101
104
|
try {
|
|
102
105
|
await workspace?.close();
|
|
103
106
|
}
|
|
104
107
|
catch {
|
|
105
|
-
report.checks.push({ ok: false, code: 'WORKSPACE_CLEANUP_FAILED', message: 'Could not finish workspace observation cleanup.' });
|
|
108
|
+
report.checks.push({ stage: 'input-integrity', ok: false, code: 'WORKSPACE_CLEANUP_FAILED', message: 'Could not finish workspace observation cleanup.' });
|
|
106
109
|
}
|
|
107
110
|
report.ok = report.checks.length > 0 && report.checks.every(check => check.ok);
|
|
111
|
+
if (!report.ok)
|
|
112
|
+
delete report.result;
|
|
108
113
|
report.status = report.ok ? 'READY' : 'NOT_READY';
|
|
109
114
|
report.checkedAt = new Date().toISOString();
|
|
110
115
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-check.js","sourceRoot":"","sources":["../../../src/artifacts/tool-check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAA4C,MAAM,wBAAwB,CAAC;AAEpG,OAAO,EAAE,iBAAiB,EAA6B,MAAM,oBAAoB,CAAC;AAElF,OAAO,EAAE,sBAAsB,EAAyB,MAAM,YAAY,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"tool-check.js","sourceRoot":"","sources":["../../../src/artifacts/tool-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import path from 'node:path';
|
|
2
2
|
import { lstat, readFile, readdir, realpath } from 'node:fs/promises';
|
|
3
3
|
import { validateArtifactType } from '../artifacts/types.js';
|
|
4
|
-
import { isArtifactGroup, validateArtifactDefinitions } from '../artifacts/groups.js';
|
|
4
|
+
import { isArtifactGroup, isGeneratedArtifact, resolveArtifactScope, validateArtifactDefinitions } from '../artifacts/groups.js';
|
|
5
5
|
import { createGraphDefinition } from './graph.js';
|
|
6
6
|
import { openToolHost } from '../tools/host.js';
|
|
7
7
|
const errorCode = (error) => error !== null && typeof error === 'object' && 'code' in error ? error.code : undefined;
|
|
@@ -74,7 +74,7 @@ export async function readWorkspaceConfig(repoPath, signal) {
|
|
|
74
74
|
if (object(config) && object(config.artifacts)) {
|
|
75
75
|
validateArtifactDefinitions(config.artifacts);
|
|
76
76
|
for (const artifact of Object.values(config.artifacts)) {
|
|
77
|
-
if (!isArtifactGroup(artifact))
|
|
77
|
+
if (!isArtifactGroup(artifact) && !isGeneratedArtifact(artifact))
|
|
78
78
|
await walk(validateRelativePath(artifact.path));
|
|
79
79
|
}
|
|
80
80
|
}
|
|
@@ -98,6 +98,11 @@ export function validateConfig(config, tree) {
|
|
|
98
98
|
if (!Object.hasOwn(config.artifactTypes, artifact.type)) {
|
|
99
99
|
throw new Error(`Invalid artifact definition or unknown type: ${id}`);
|
|
100
100
|
}
|
|
101
|
+
if (isGeneratedArtifact(artifact)) {
|
|
102
|
+
if (!object(config.configManifest) || !object(config.configManifest.sources) || !Object.hasOwn(config.configManifest.sources, artifact.source) || !config.artifactTypes[artifact.type].custom)
|
|
103
|
+
throw new Error(`Generated Artifact ${id} requires a registered TS source and tools.`);
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
101
106
|
const artifactPath = validateRelativePath(artifact.path);
|
|
102
107
|
const entries = tree.filter(entry => entry.path === artifactPath || entry.path.startsWith(`${artifactPath}/`));
|
|
103
108
|
if (entries.length === 0 || entries.some(entry => !['blob', 'tree'].includes(entry.type) || entry.mode === '120000')) {
|
|
@@ -135,6 +140,8 @@ export function validateConfig(config, tree) {
|
|
|
135
140
|
!Array.isArray(profile.args) || profile.args.some(arg => typeof arg !== 'string'))) {
|
|
136
141
|
throw new Error(`Runtime profile requires command and string args: ${critic.id}`);
|
|
137
142
|
}
|
|
143
|
+
if (profile.kind === 'runtime' && resolveArtifactScope(artifacts, [critic.target, ...critic.deps]).artifacts.some(artifact => artifact.kind === 'generated'))
|
|
144
|
+
throw new Error('Runtime Critics require file Artifacts; use an Agent or Human Critic for generated data.');
|
|
138
145
|
}
|
|
139
146
|
createGraphDefinition(config);
|
|
140
147
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/broker/config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/broker/config.ts"],"names":[],"mappings":"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"}
|
package/dist/src/broker/graph.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { isArtifactGroup, validateArtifactDefinitions } from '../artifacts/groups.js';
|
|
1
|
+
import { isArtifactGroup, isGeneratedArtifact, validateArtifactDefinitions } from '../artifacts/groups.js';
|
|
2
2
|
const object = (value) => value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
3
3
|
const identifier = /^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$/;
|
|
4
4
|
const statuses = new Set(['BLOCKED', 'QUEUED', 'RUNNING', 'WAITING_HUMAN', 'GREEN', 'RED', 'ERROR']);
|
|
@@ -48,7 +48,7 @@ export function createGraphDefinition(config) {
|
|
|
48
48
|
validateArtifactDefinitions(config.artifacts);
|
|
49
49
|
const graph = {
|
|
50
50
|
version: 1,
|
|
51
|
-
artifacts: Object.fromEntries(Object.entries(config.artifacts).map(([id, artifact]) => [id, { ...(isArtifactGroup(artifact) ? { kind: 'group', members: [...artifact.members] } : { type: artifact.type, path: artifact.path }), ...(artifact.basis === undefined ? {} : { basis: artifact.basis }), ...(artifact.stale ? { stale: structuredClone(artifact.stale) } : {}) }])),
|
|
51
|
+
artifacts: Object.fromEntries(Object.entries(config.artifacts).map(([id, artifact]) => [id, isGeneratedArtifact(artifact) ? structuredClone(artifact) : { ...(isArtifactGroup(artifact) ? { kind: 'group', members: [...artifact.members] } : { type: artifact.type, path: artifact.path }), ...(artifact.basis === undefined ? {} : { basis: artifact.basis }), ...(artifact.stale ? { stale: structuredClone(artifact.stale) } : {}) }])),
|
|
52
52
|
critics: config.critics.map(critic => ({ id: critic.id, title: critic.title, target: critic.target, deps: [...critic.deps], kind: critic.profile.kind })),
|
|
53
53
|
};
|
|
54
54
|
validateGraphDefinition(graph);
|
|
@@ -80,7 +80,7 @@ export function projectGraph(graph, requests) {
|
|
|
80
80
|
else
|
|
81
81
|
status = ['ERROR', 'RED', 'RUNNING', 'WAITING_HUMAN', 'QUEUED', 'BLOCKED'].find(candidate => own.some(critic => critic.status === candidate)) ?? 'UNREVIEWED';
|
|
82
82
|
}
|
|
83
|
-
return { id, ...(isArtifactGroup(artifact) ? { kind: 'group', members: [...artifact.members] } : { type: artifact.type, path: artifact.path }), basis: artifact.basis === true, status, criticIds: own.map(critic => critic.id), passed, total: own.length, included };
|
|
83
|
+
return { id, ...(isArtifactGroup(artifact) ? { kind: 'group', members: [...artifact.members] } : isGeneratedArtifact(artifact) ? { kind: 'generated', type: artifact.type, source: artifact.source } : { type: artifact.type, path: artifact.path }), basis: artifact.basis === true, status, criticIds: own.map(critic => critic.id), passed, total: own.length, included };
|
|
84
84
|
});
|
|
85
85
|
const edges = new Map();
|
|
86
86
|
for (const critic of critics)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../../src/broker/graph.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../../src/broker/graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ReviewRequest } from '../contracts.js';
|
|
2
|
-
import type { HumanPreparation } from '../executors/human-preparation.js';
|
|
2
|
+
import type { HumanPreparation, HumanPreparationPhase, HumanPreparationProgress } from '../executors/human-preparation.js';
|
|
3
|
+
import type { WorkspaceScanProgress } from '../workspaces/index.js';
|
|
3
4
|
export declare const HUMAN_PREPARATION_LEASE_MS = 120000;
|
|
4
5
|
export interface HumanTryClaim {
|
|
5
6
|
id: string;
|
|
@@ -7,6 +8,22 @@ export interface HumanTryClaim {
|
|
|
7
8
|
startedAt: string;
|
|
8
9
|
expiresAt: string;
|
|
9
10
|
}
|
|
11
|
+
export interface HumanPreparationAttempt extends HumanTryClaim {
|
|
12
|
+
status: 'preparing' | 'released' | 'expired' | 'claimed';
|
|
13
|
+
heartbeatAt: string;
|
|
14
|
+
phase: HumanPreparationPhase;
|
|
15
|
+
phaseStartedAt: string;
|
|
16
|
+
completedAt?: string;
|
|
17
|
+
previousAttemptId?: string;
|
|
18
|
+
timings: {
|
|
19
|
+
phase: HumanPreparationPhase;
|
|
20
|
+
startedAt: string;
|
|
21
|
+
completedAt: string;
|
|
22
|
+
durationMs: number;
|
|
23
|
+
}[];
|
|
24
|
+
progress?: WorkspaceScanProgress;
|
|
25
|
+
failureCode?: 'cancelled' | 'checks-failed' | 'input-invalid' | 'preparation-failed';
|
|
26
|
+
}
|
|
10
27
|
export declare function activeTryClaim(request: Pick<ReviewRequest, 'tryClaim'>, at?: number): HumanTryClaim | undefined;
|
|
11
28
|
interface ClaimStore {
|
|
12
29
|
transaction<T>(action: () => T): T;
|
|
@@ -20,7 +37,8 @@ interface ClaimStore {
|
|
|
20
37
|
export declare function createHumanClaims(store: ClaimStore): {
|
|
21
38
|
begin(id: string, reviewerId: string, leaseMs?: number): HumanTryClaim;
|
|
22
39
|
renew(id: string, reviewerId: string, attemptId: string, leaseMs?: number): HumanTryClaim;
|
|
23
|
-
|
|
40
|
+
progress(id: string, reviewerId: string, attemptId: string, update: HumanPreparationProgress): void;
|
|
41
|
+
release(id: string, reviewerId: string, attemptId: string, failureCode?: HumanPreparationAttempt['failureCode']): boolean;
|
|
24
42
|
confirm(id: string, reviewerId: string, attemptId: string, preparation: HumanPreparation): ReviewRequest;
|
|
25
43
|
};
|
|
26
44
|
export {};
|
|
@@ -6,6 +6,10 @@ export function activeTryClaim(request, at = Date.now()) {
|
|
|
6
6
|
}
|
|
7
7
|
/** All assignment transitions compare a persisted attempt inside one transaction. */
|
|
8
8
|
export function createHumanClaims(store) {
|
|
9
|
+
const finishPhase = (preparation, at) => {
|
|
10
|
+
preparation.timings.push({ phase: preparation.phase, startedAt: preparation.phaseStartedAt, completedAt: at, durationMs: Math.max(0, Date.parse(at) - Date.parse(preparation.phaseStartedAt)) });
|
|
11
|
+
preparation.timings = preparation.timings.slice(-12);
|
|
12
|
+
};
|
|
9
13
|
const waiting = (id, reviewerId) => {
|
|
10
14
|
if (typeof reviewerId !== 'string' || !reviewerId.trim() || reviewerId.length > 200)
|
|
11
15
|
throw new Error('A reviewerId is required.');
|
|
@@ -36,11 +40,14 @@ export function createHumanClaims(store) {
|
|
|
36
40
|
throw new Error('This review is already claimed by a reviewer.');
|
|
37
41
|
if (activeTryClaim(request))
|
|
38
42
|
throw new Error('This review is being prepared by another claim attempt.');
|
|
43
|
+
const previousAttemptId = request.tryClaim?.id ?? request.preparationAttempt?.id;
|
|
39
44
|
if (request.tryClaim)
|
|
40
|
-
store.event(request, 'human.claim.expired',
|
|
41
|
-
|
|
45
|
+
store.event(request, 'human.claim.expired', `Preparation attempt ${request.tryClaim.id} expired.`);
|
|
46
|
+
const startedAt = new Date().toISOString();
|
|
47
|
+
request.tryClaim = { id: randomUUID(), reviewerId, startedAt, expiresAt: new Date(Date.now() + duration).toISOString() };
|
|
48
|
+
request.preparationAttempt = { ...request.tryClaim, status: 'preparing', heartbeatAt: startedAt, phase: 'validating-input', phaseStartedAt: startedAt, timings: [], ...(previousAttemptId ? { previousAttemptId } : {}) };
|
|
42
49
|
store.save(request);
|
|
43
|
-
store.event(request, 'human.claim.preparing',
|
|
50
|
+
store.event(request, 'human.claim.preparing', `Human preparation attempt ${request.tryClaim.id} started${previousAttemptId ? ` after ${previousAttemptId}` : ''}.`);
|
|
44
51
|
return structuredClone(request.tryClaim);
|
|
45
52
|
});
|
|
46
53
|
store.changed();
|
|
@@ -51,20 +58,53 @@ export function createHumanClaims(store) {
|
|
|
51
58
|
const result = store.transaction(() => {
|
|
52
59
|
const request = attempt(id, reviewerId, attemptId);
|
|
53
60
|
request.tryClaim.expiresAt = new Date(Date.now() + duration).toISOString();
|
|
61
|
+
if (request.preparationAttempt?.id === attemptId) {
|
|
62
|
+
request.preparationAttempt.expiresAt = request.tryClaim.expiresAt;
|
|
63
|
+
request.preparationAttempt.heartbeatAt = new Date().toISOString();
|
|
64
|
+
}
|
|
54
65
|
store.save(request);
|
|
55
66
|
return structuredClone(request.tryClaim);
|
|
56
67
|
});
|
|
57
68
|
store.changed();
|
|
58
69
|
return result;
|
|
59
70
|
},
|
|
60
|
-
|
|
71
|
+
progress(id, reviewerId, attemptId, update) {
|
|
72
|
+
store.transaction(() => {
|
|
73
|
+
const request = attempt(id, reviewerId, attemptId), preparation = request.preparationAttempt;
|
|
74
|
+
if (!preparation || preparation.id !== attemptId)
|
|
75
|
+
return;
|
|
76
|
+
const at = new Date().toISOString();
|
|
77
|
+
if (preparation.phase !== update.phase) {
|
|
78
|
+
finishPhase(preparation, at);
|
|
79
|
+
preparation.phase = update.phase;
|
|
80
|
+
preparation.phaseStartedAt = at;
|
|
81
|
+
if (update.phase !== 'confirming-assignment')
|
|
82
|
+
delete preparation.progress;
|
|
83
|
+
}
|
|
84
|
+
preparation.heartbeatAt = at;
|
|
85
|
+
if (update.progress)
|
|
86
|
+
preparation.progress = { ...update.progress };
|
|
87
|
+
store.save(request);
|
|
88
|
+
});
|
|
89
|
+
store.changed();
|
|
90
|
+
},
|
|
91
|
+
release(id, reviewerId, attemptId, failureCode) {
|
|
61
92
|
const released = store.transaction(() => {
|
|
62
93
|
const request = store.read(id);
|
|
63
94
|
if (!request || request.status !== 'WAITING_HUMAN' || request.claimedBy || request.tryClaim?.id !== attemptId || request.tryClaim.reviewerId !== reviewerId)
|
|
64
95
|
return false;
|
|
96
|
+
const expired = !activeTryClaim(request);
|
|
97
|
+
if (request.preparationAttempt?.id === attemptId) {
|
|
98
|
+
const preparation = request.preparationAttempt;
|
|
99
|
+
preparation.status = expired ? 'expired' : 'released';
|
|
100
|
+
preparation.completedAt = expired ? preparation.expiresAt : new Date().toISOString();
|
|
101
|
+
if (failureCode)
|
|
102
|
+
preparation.failureCode = failureCode;
|
|
103
|
+
finishPhase(preparation, preparation.completedAt);
|
|
104
|
+
}
|
|
65
105
|
delete request.tryClaim;
|
|
66
106
|
store.save(request);
|
|
67
|
-
store.event(request, 'human.claim.released',
|
|
107
|
+
store.event(request, expired ? 'human.claim.expired' : 'human.claim.released', `Human preparation attempt ${attemptId} ${expired ? 'expired' : 'was released'}; retry Claim when ready.`);
|
|
68
108
|
return true;
|
|
69
109
|
});
|
|
70
110
|
if (released)
|
|
@@ -91,6 +131,11 @@ export function createHumanClaims(store) {
|
|
|
91
131
|
request.claimedBy = reviewerId;
|
|
92
132
|
request.claimedAt = new Date().toISOString();
|
|
93
133
|
request.claimAttemptId = attemptId;
|
|
134
|
+
if (request.preparationAttempt?.id === attemptId) {
|
|
135
|
+
request.preparationAttempt.status = 'claimed';
|
|
136
|
+
request.preparationAttempt.completedAt = request.claimedAt;
|
|
137
|
+
finishPhase(request.preparationAttempt, request.claimedAt);
|
|
138
|
+
}
|
|
94
139
|
delete request.tryClaim;
|
|
95
140
|
store.save(request);
|
|
96
141
|
store.event(request, 'human.claimed', `Review claimed by ${reviewerId}.`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"human-claims.js","sourceRoot":"","sources":["../../../src/broker/human-claims.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"human-claims.js","sourceRoot":"","sources":["../../../src/broker/human-claims.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAIzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,MAAM,CAAC,MAAM,0BAA0B,GAAG,OAAO,CAAC;AAkBlD,MAAM,UAAU,cAAc,CAAC,OAAwC,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE;IACtF,OAAO,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;AACxG,CAAC;AAWD,qFAAqF;AACrF,MAAM,UAAU,iBAAiB,CAAC,KAAiB;IACjD,MAAM,WAAW,GAAG,CAAC,WAAoC,EAAE,EAAU,EAAE,EAAE;QACvE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,cAAc,EAAE,WAAW,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC;QACjM,WAAW,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,CAAC,EAAU,EAAE,UAAkB,EAAE,EAAE;QACjD,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,UAAU,CAAC,MAAM,GAAG,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAClI,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,eAAe;YAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QACtJ,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC7B,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,CAAC,YAAY,GAAG,0BAA0B,EAAE,EAAE;QAC1D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,YAAY,GAAG,EAAE,IAAI,YAAY,GAAG,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QACvJ,OAAO,YAAY,CAAC;IACtB,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,CAAC,EAAU,EAAE,UAAkB,EAAE,SAAiB,EAAE,EAAE;QACpE,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QACxC,IAAI,OAAO,CAAC,SAAS,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,QAAS,CAAC,UAAU,KAAK,UAAU,IAAI,OAAO,CAAC,QAAS,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;YACvI,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;QACnF,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;IACF,OAAO;QACL,KAAK,CAAC,EAAU,EAAE,UAAkB,EAAE,OAAgB;YACpD,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;YAChC,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;gBACpC,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;gBACxC,IAAI,OAAO,CAAC,SAAS;oBAAE,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;gBACxF,IAAI,cAAc,CAAC,OAAO,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;gBACxG,MAAM,iBAAiB,GAAG,OAAO,CAAC,QAAQ,EAAE,EAAE,IAAI,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC;gBACjF,IAAI,OAAO,CAAC,QAAQ;oBAAE,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,OAAO,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,CAAC;gBACzH,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBAC3C,OAAO,CAAC,QAAQ,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;gBACzH,OAAO,CAAC,kBAAkB,GAAG,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC1N,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,uBAAuB,EAAE,6BAA6B,OAAO,CAAC,QAAQ,CAAC,EAAE,WAAW,iBAAiB,CAAC,CAAC,CAAC,UAAU,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBACzL,OAAO,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC3C,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,OAAO,EAAE,CAAC;YAAC,OAAO,MAAM,CAAC;QACjC,CAAC;QACD,KAAK,CAAC,EAAU,EAAE,UAAkB,EAAE,SAAiB,EAAE,OAAgB;YACvE,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;YAChC,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;gBACpC,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;gBACnD,OAAO,CAAC,QAAS,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;gBAC5E,IAAI,OAAO,CAAC,kBAAkB,EAAE,EAAE,KAAK,SAAS,EAAE,CAAC;oBACjD,OAAO,CAAC,kBAAkB,CAAC,SAAS,GAAG,OAAO,CAAC,QAAS,CAAC,SAAS,CAAC;oBACnE,OAAO,CAAC,kBAAkB,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBACpE,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAAC,OAAO,eAAe,CAAC,OAAO,CAAC,QAAS,CAAC,CAAC;YACjE,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,OAAO,EAAE,CAAC;YAAC,OAAO,MAAM,CAAC;QACjC,CAAC;QACD,QAAQ,CAAC,EAAU,EAAE,UAAkB,EAAE,SAAiB,EAAE,MAAgC;YAC1F,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;gBACrB,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,kBAAkB,CAAC;gBAC7F,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,EAAE,KAAK,SAAS;oBAAE,OAAO;gBACzD,MAAM,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBACpC,IAAI,WAAW,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC;oBACvC,WAAW,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;oBAC7B,WAAW,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;oBAAC,WAAW,CAAC,cAAc,GAAG,EAAE,CAAC;oBAClE,IAAI,MAAM,CAAC,KAAK,KAAK,uBAAuB;wBAAE,OAAO,WAAW,CAAC,QAAQ,CAAC;gBAC5E,CAAC;gBACD,WAAW,CAAC,WAAW,GAAG,EAAE,CAAC;gBAC7B,IAAI,MAAM,CAAC,QAAQ;oBAAE,WAAW,CAAC,QAAQ,GAAG,EAAE,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACnE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACtB,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,CAAC;QACD,OAAO,CAAC,EAAU,EAAE,UAAkB,EAAE,SAAiB,EAAE,WAAoD;YAC7G,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;gBACtC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC/B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,eAAe,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,QAAQ,EAAE,EAAE,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,KAAK,UAAU;oBAAE,OAAO,KAAK,CAAC;gBAC1K,MAAM,OAAO,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;gBACzC,IAAI,OAAO,CAAC,kBAAkB,EAAE,EAAE,KAAK,SAAS,EAAE,CAAC;oBACjD,MAAM,WAAW,GAAG,OAAO,CAAC,kBAAkB,CAAC;oBAC/C,WAAW,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;oBACtD,WAAW,CAAC,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;oBACrF,IAAI,WAAW;wBAAE,WAAW,CAAC,WAAW,GAAG,WAAW,CAAC;oBACvD,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;gBACpD,CAAC;gBACD,OAAO,OAAO,CAAC,QAAQ,CAAC;gBACxB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,sBAAsB,EAAE,6BAA6B,SAAS,IAAI,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,2BAA2B,CAAC,CAAC;gBAC/M,OAAO,IAAI,CAAC;YACd,CAAC,CAAC,CAAC;YACH,IAAI,QAAQ;gBAAE,KAAK,CAAC,OAAO,EAAE,CAAC;YAAC,OAAO,QAAQ,CAAC;QACjD,CAAC;QACD,OAAO,CAAC,EAAU,EAAE,UAAkB,EAAE,SAAiB,EAAE,WAA6B;YACtF,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;gBACpC,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;gBACnD,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,YAAY,KAAK,OAAO,CAAC,YAAY,IAAI,WAAW,CAAC,UAAU,KAAK,OAAO,CAAC,cAAc,EAAE,UAAU;oBAAE,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;gBAClO,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,eAAe,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBACjF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC;oBAC5E,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,KAAK,IAAI,IAAI,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC;oBAClG,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;oBACtF,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,KAAK,IAAI,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;gBACtL,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;oBAC3B,MAAM,aAAa,GAAG,mBAAmB,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;oBAC7L,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;oBACjG,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;wBAAE,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAC;gBACnJ,CAAC;gBACD,OAAO,CAAC,SAAS,GAAG,UAAU,CAAC;gBAAC,OAAO,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBAC7E,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC;gBACnC,IAAI,OAAO,CAAC,kBAAkB,EAAE,EAAE,KAAK,SAAS,EAAE,CAAC;oBACjD,OAAO,CAAC,kBAAkB,CAAC,MAAM,GAAG,SAAS,CAAC;oBAAC,OAAO,CAAC,kBAAkB,CAAC,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC;oBAC1G,WAAW,CAAC,OAAO,CAAC,kBAAkB,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;gBAC7D,CAAC;gBACD,OAAO,OAAO,CAAC,QAAQ,CAAC;gBACxB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,eAAe,EAAE,qBAAqB,UAAU,GAAG,CAAC,CAAC;gBAC/F,OAAO,OAAO,CAAC;YACjB,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,OAAO,EAAE,CAAC;YAAC,OAAO,MAAM,CAAC;QACjC,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -140,6 +140,7 @@ export declare function createBroker({ repoPath, stateDir, repoId, executors, wo
|
|
|
140
140
|
claimedBy?: string | null;
|
|
141
141
|
claimedAt?: string | null;
|
|
142
142
|
tryClaim?: import("./human-claims.js").HumanTryClaim;
|
|
143
|
+
preparationAttempt?: import("./human-claims.js").HumanPreparationAttempt;
|
|
143
144
|
claimAttemptId?: string;
|
|
144
145
|
notifiedAt?: string | null;
|
|
145
146
|
errorCode?: string | null;
|
|
@@ -157,7 +158,7 @@ export declare function createBroker({ repoPath, stateDir, repoId, executors, wo
|
|
|
157
158
|
leaseMs?: number;
|
|
158
159
|
}): import("./human-claims.js").HumanTryClaim;
|
|
159
160
|
renewHumanTryClaim: (id: string, reviewerId: string, attemptId: string, leaseMs?: number) => import("./human-claims.js").HumanTryClaim;
|
|
160
|
-
releaseHumanTryClaim: (id: string, reviewerId: string, attemptId: string) => boolean;
|
|
161
|
+
releaseHumanTryClaim: (id: string, reviewerId: string, attemptId: string, failureCode?: import("./human-claims.js").HumanPreparationAttempt['failureCode']) => boolean;
|
|
161
162
|
confirmHumanClaim: (id: string, reviewerId: string, attemptId: string, preparation: import("../executors/human-preparation.js").HumanPreparation) => ReviewRequest;
|
|
162
163
|
claimHuman(requestId: string, reviewerId: unknown, { signal }?: {
|
|
163
164
|
signal?: AbortSignal;
|
package/dist/src/broker/index.js
CHANGED
|
@@ -15,6 +15,7 @@ import { createHumanClaims, HUMAN_PREPARATION_LEASE_MS } from './human-claims.js
|
|
|
15
15
|
import { prepareHumanReview } from '../executors/human-preparation.js';
|
|
16
16
|
import { prepareWorkspace, reopenWorkspace } from '../workspaces/index.js';
|
|
17
17
|
import { createProjectSnapshot } from '../project/identity.js';
|
|
18
|
+
import { assertGeneratedReviewInputs, prepareArtifactInputs } from '../artifacts/sources.js';
|
|
18
19
|
import { includedCritics, planProject } from '../project/query.js';
|
|
19
20
|
import { readEvidence } from '../project/store.js';
|
|
20
21
|
const object = (value) => value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
@@ -460,6 +461,7 @@ export function createBroker({ repoPath, stateDir, repoId = 'demo', executors, w
|
|
|
460
461
|
signal.throwIfAborted();
|
|
461
462
|
await workspace.assertUnchanged();
|
|
462
463
|
const request = required(requestData(requestId), 'Request');
|
|
464
|
+
assertGeneratedReviewInputs(request);
|
|
463
465
|
const runDir = path.join(stateDir, 'runs', runId, request.id);
|
|
464
466
|
fs.mkdirSync(runDir, { recursive: true, mode: 0o700 });
|
|
465
467
|
if (required(runData(runId), 'Run').project) {
|
|
@@ -664,7 +666,8 @@ export function createBroker({ repoPath, stateDir, repoId = 'demo', executors, w
|
|
|
664
666
|
await requireExecutors().validateWorkspace?.(repoPath);
|
|
665
667
|
const workspace = await workspaceAdapter.prepareWorkspace({ repoPath, stateDir, mode });
|
|
666
668
|
try {
|
|
667
|
-
const
|
|
669
|
+
const loaded = await readWorkspaceConfig(workspace.descriptor.path);
|
|
670
|
+
const config = await prepareArtifactInputs(loaded.config, workspace.descriptor.path, 'review', workspace.signal);
|
|
668
671
|
const snapshot = await createProjectSnapshot(config, workspace.descriptor.path, workspace.descriptor.hash, workspace.signal);
|
|
669
672
|
const ids = includedCritics(snapshot, selection, recursive);
|
|
670
673
|
const templates = [];
|
|
@@ -795,14 +798,16 @@ export function createBroker({ repoPath, stateDir, repoId = 'demo', executors, w
|
|
|
795
798
|
catch (error) {
|
|
796
799
|
controller.abort(error);
|
|
797
800
|
}
|
|
798
|
-
}, HUMAN_PREPARATION_LEASE_MS / 3);
|
|
801
|
+
}, Math.min(5_000, HUMAN_PREPARATION_LEASE_MS / 3));
|
|
799
802
|
try {
|
|
800
|
-
const prepared = await prepareHumanReview(request, request.workspace, path.join(stateDir, 'runs', request.runId, request.id, 'preparation', attempt.id), executionSignal);
|
|
803
|
+
const prepared = await prepareHumanReview(request, request.workspace, path.join(stateDir, 'runs', request.runId, request.id, 'preparation', attempt.id), executionSignal, progress => humanClaims.progress(requestId, reviewerId, attempt.id, progress));
|
|
801
804
|
executionSignal.throwIfAborted();
|
|
805
|
+
humanClaims.progress(requestId, reviewerId, attempt.id, { phase: 'confirming-assignment' });
|
|
802
806
|
return humanClaims.confirm(requestId, reviewerId, attempt.id, prepared);
|
|
803
807
|
}
|
|
804
808
|
catch (error) {
|
|
805
|
-
|
|
809
|
+
const code = errorCode(error);
|
|
810
|
+
humanClaims.release(requestId, reviewerId, attempt.id, signal?.aborted ? 'cancelled' : code === 'HUMAN_PREPARATION_FAILED' ? 'checks-failed' : typeof code === 'string' && code.startsWith('WORKSPACE_') ? 'input-invalid' : 'preparation-failed');
|
|
806
811
|
throw error;
|
|
807
812
|
}
|
|
808
813
|
finally {
|
|
@@ -925,6 +930,7 @@ export function createBroker({ repoPath, stateDir, repoId = 'demo', executors, w
|
|
|
925
930
|
let inputsValidated = false;
|
|
926
931
|
try {
|
|
927
932
|
workspace = await workspaceAdapter.reopenWorkspace(request.workspace);
|
|
933
|
+
assertGeneratedReviewInputs(request);
|
|
928
934
|
await workspace.assertUnchanged();
|
|
929
935
|
workspace.signal.throwIfAborted();
|
|
930
936
|
ensureOpen();
|