@ccdd/project 6.0.2 → 6.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/README.md +17 -3
- package/dist/src/broker/admission.d.ts +1 -1
- package/dist/src/broker/changes.d.ts +3 -0
- package/dist/src/broker/changes.js +6 -2
- package/dist/src/broker/changes.js.map +1 -1
- package/dist/src/broker/coalescing.js +2 -2
- package/dist/src/broker/coalescing.js.map +1 -1
- package/dist/src/broker/config.js +17 -4
- package/dist/src/broker/config.js.map +1 -1
- package/dist/src/broker/index.d.ts +17 -1
- package/dist/src/broker/index.js +96 -17
- package/dist/src/broker/index.js.map +1 -1
- package/dist/src/broker/ownership.d.ts +1 -0
- package/dist/src/broker/ownership.js +9 -1
- package/dist/src/broker/ownership.js.map +1 -1
- package/dist/src/broker/readiness.js +2 -1
- package/dist/src/broker/readiness.js.map +1 -1
- package/dist/src/broker/storage.d.ts +6 -0
- package/dist/src/broker/storage.js +1 -0
- package/dist/src/broker/storage.js.map +1 -1
- package/dist/src/contracts.d.ts +3 -0
- package/dist/src/definitions.d.ts +7 -0
- package/dist/src/diagnostic-scope.d.ts +5 -0
- package/dist/src/diagnostic-scope.js +4 -0
- package/dist/src/diagnostic-scope.js.map +1 -0
- package/dist/src/execution-scope.d.ts +7 -0
- package/dist/src/execution-scope.js +3 -0
- package/dist/src/execution-scope.js.map +1 -0
- package/dist/src/executors/launch-host.d.ts +1 -0
- package/dist/src/executors/launch-host.js +33 -0
- package/dist/src/executors/launch-host.js.map +1 -0
- package/dist/src/executors/pi.js +3 -3
- package/dist/src/executors/pi.js.map +1 -1
- package/dist/src/executors/process.js +22 -3
- package/dist/src/executors/process.js.map +1 -1
- package/dist/src/monitor/store.js +1 -1
- package/dist/src/monitor/store.js.map +1 -1
- package/dist/src/offline-guard.d.ts +1 -0
- package/dist/src/offline-guard.js +27 -0
- package/dist/src/offline-guard.js.map +1 -0
- package/dist/src/project/cli.js +36 -15
- package/dist/src/project/cli.js.map +1 -1
- package/dist/src/project/identity.d.ts +7 -1
- package/dist/src/project/identity.js +27 -13
- package/dist/src/project/identity.js.map +1 -1
- package/dist/src/project/index.d.ts +4 -0
- package/dist/src/project/index.js +7 -4
- package/dist/src/project/index.js.map +1 -1
- package/dist/src/project/load-check-worker.d.ts +1 -0
- package/dist/src/project/load-check-worker.js +12 -0
- package/dist/src/project/load-check-worker.js.map +1 -0
- package/dist/src/project/load-check.d.ts +83 -0
- package/dist/src/project/load-check.js +225 -0
- package/dist/src/project/load-check.js.map +1 -0
- package/dist/src/project/query.js +8 -2
- package/dist/src/project/query.js.map +1 -1
- package/dist/src/project/store.js +4 -1
- package/dist/src/project/store.js.map +1 -1
- package/dist/src/project/types.d.ts +7 -0
- package/dist/src/provenance.d.ts +24 -0
- package/dist/src/provenance.js +83 -0
- package/dist/src/provenance.js.map +1 -0
- package/dist/src/resources.d.ts +49 -0
- package/dist/src/resources.js +306 -0
- package/dist/src/resources.js.map +1 -0
- package/dist/src/response-schema.js +1 -1
- package/dist/src/response-schema.js.map +1 -1
- package/dist/src/result-view.d.ts +5 -0
- package/dist/src/result-view.js +5 -5
- package/dist/src/result-view.js.map +1 -1
- package/dist/src/tools/contracts.d.ts +2 -0
- package/dist/src/tools/environment.js +30 -8
- package/dist/src/tools/environment.js.map +1 -1
- package/dist/src/tools/runner.js +10 -3
- package/dist/src/tools/runner.js.map +1 -1
- package/dist/src/worker-client.d.ts +1 -0
- package/dist/src/worker-client.js +6 -3
- package/dist/src/worker-client.js.map +1 -1
- package/dist/src/worker.js +4 -1
- package/dist/src/worker.js.map +1 -1
- package/package.json +8 -4
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
import { DatabaseSync } from 'node:sqlite';
|
|
2
|
+
import { randomUUID, createHash } from 'node:crypto';
|
|
3
|
+
import { mkdirSync, readFileSync, realpathSync, readdirSync } from 'node:fs';
|
|
4
|
+
import { homedir } from 'node:os';
|
|
5
|
+
import { join, resolve } from 'node:path';
|
|
6
|
+
import { setTimeout as delay } from 'node:timers/promises';
|
|
7
|
+
import { ownerAlive, ownProcessIdentity, processIdentity } from './broker/ownership.js';
|
|
8
|
+
export const resourceDefaults = { identityCapacity: 100, defaultProviderCapacity: 4, providers: {} };
|
|
9
|
+
export function resourcePaths() {
|
|
10
|
+
return { config: join(process.env.CCDD_CONFIG_HOME || join(process.env.XDG_CONFIG_HOME || join(homedir(), '.config'), 'ccdd'), 'resources.json'),
|
|
11
|
+
database: join(process.env.CCDD_STATE_HOME || join(homedir(), '.local', 'state', 'ccdd'), 'resources.sqlite') };
|
|
12
|
+
}
|
|
13
|
+
function integer(value, name, minimum = 1) {
|
|
14
|
+
if (!Number.isSafeInteger(value) || value < minimum)
|
|
15
|
+
throw new Error(`${name} must be an integer >= ${minimum}.`);
|
|
16
|
+
return value;
|
|
17
|
+
}
|
|
18
|
+
function record(value) { return !!value && typeof value === 'object' && !Array.isArray(value); }
|
|
19
|
+
export function readResourceConfiguration() {
|
|
20
|
+
let input;
|
|
21
|
+
try {
|
|
22
|
+
input = JSON.parse(readFileSync(resourcePaths().config, 'utf8'));
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
if (error.code === 'ENOENT')
|
|
26
|
+
return structuredClone(resourceDefaults);
|
|
27
|
+
throw error;
|
|
28
|
+
}
|
|
29
|
+
if (!record(input) || Object.keys(input).some(key => !['identityCapacity', 'defaultProviderCapacity', 'providers'].includes(key)))
|
|
30
|
+
throw new Error('Invalid local resources.json; allowed fields: identityCapacity, defaultProviderCapacity, providers.');
|
|
31
|
+
const providers = {};
|
|
32
|
+
if (input.providers !== undefined && !record(input.providers))
|
|
33
|
+
throw new Error('providers must be a map.');
|
|
34
|
+
for (const [name, value] of Object.entries(input.providers ?? {})) {
|
|
35
|
+
if (!name || !record(value) || Object.keys(value).some(key => !['capacity', 'models'].includes(key)))
|
|
36
|
+
throw new Error('Each provider requires capacity and optional models.');
|
|
37
|
+
if (value.models !== undefined && !record(value.models))
|
|
38
|
+
throw new Error('models must map model names to capacities.');
|
|
39
|
+
const models = Object.fromEntries(Object.entries(value.models ?? {}).map(([model, capacity]) => [model, integer(capacity, `providers.${name}.models.${model}`)]));
|
|
40
|
+
providers[name] = { capacity: integer(value.capacity, `providers.${name}.capacity`), ...(value.models === undefined ? {} : { models }) };
|
|
41
|
+
}
|
|
42
|
+
return { identityCapacity: integer(input.identityCapacity ?? 100, 'identityCapacity'), defaultProviderCapacity: integer(input.defaultProviderCapacity ?? 4, 'defaultProviderCapacity'), providers };
|
|
43
|
+
}
|
|
44
|
+
export function canonicalRepositoryId(repoPath) { let canonical; try {
|
|
45
|
+
canonical = realpathSync(repoPath);
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
if (error.code !== 'ENOENT')
|
|
49
|
+
throw error;
|
|
50
|
+
canonical = resolve(repoPath);
|
|
51
|
+
} return createHash('sha256').update(canonical).digest('hex'); }
|
|
52
|
+
export function rejectIdentityConcurrency(value) { if (value !== undefined)
|
|
53
|
+
throw new Error('identityConcurrency/--identity-concurrency was removed. Set local resources.json identityCapacity (default 100) and Artifact stale.weight (1–100, default 25).'); }
|
|
54
|
+
export function validateIdentityWeight(weight = 25, config = readResourceConfiguration()) {
|
|
55
|
+
integer(weight, 'Identity weight');
|
|
56
|
+
if (weight > 100)
|
|
57
|
+
throw new Error('Identity weight must be an integer from 1 to 100.');
|
|
58
|
+
if (weight > config.identityCapacity)
|
|
59
|
+
throw new Error(`Identity weight ${weight} exceeds local identityCapacity ${config.identityCapacity}; raise local capacity or lower the declared weight.`);
|
|
60
|
+
return weight;
|
|
61
|
+
}
|
|
62
|
+
export function validateMaxExecutions(value) { if (value !== undefined)
|
|
63
|
+
integer(value, 'maxExecutions', 0); }
|
|
64
|
+
/** One machine database is authoritative. No repository store transaction encloses a wait. */
|
|
65
|
+
export function openResources() {
|
|
66
|
+
const filename = resourcePaths().database;
|
|
67
|
+
mkdirSync(join(filename, '..'), { recursive: true, mode: 0o700 });
|
|
68
|
+
const db = new DatabaseSync(filename, { timeout: 5000 });
|
|
69
|
+
db.exec(`PRAGMA journal_mode=WAL; PRAGMA foreign_keys=ON;
|
|
70
|
+
CREATE TABLE IF NOT EXISTS submissions (id TEXT PRIMARY KEY, max_executions INTEGER, created_at TEXT NOT NULL);
|
|
71
|
+
CREATE TABLE IF NOT EXISTS resource_leases (seq INTEGER PRIMARY KEY AUTOINCREMENT, token TEXT UNIQUE NOT NULL, pid INTEGER NOT NULL, process_identity TEXT, heartbeat INTEGER NOT NULL,
|
|
72
|
+
lane TEXT NOT NULL, state TEXT NOT NULL, run_id TEXT REFERENCES submissions(id), request_id TEXT, provider TEXT, model TEXT, repo TEXT NOT NULL, repo_cap INTEGER, weight INTEGER NOT NULL);
|
|
73
|
+
CREATE INDEX IF NOT EXISTS resource_lane ON resource_leases(lane,state,seq);
|
|
74
|
+
CREATE TABLE IF NOT EXISTS execution_attempts (token TEXT PRIMARY KEY, run_id TEXT NOT NULL REFERENCES submissions(id), request_id TEXT NOT NULL, state TEXT NOT NULL, reserved_at TEXT NOT NULL, started_at TEXT, terminal_at TEXT);
|
|
75
|
+
CREATE INDEX IF NOT EXISTS budget_attempts ON execution_attempts(run_id,state);
|
|
76
|
+
CREATE TABLE IF NOT EXISTS resource_children (token TEXT NOT NULL, pid INTEGER NOT NULL, process_identity TEXT, PRIMARY KEY(token,pid));`);
|
|
77
|
+
if (!db.prepare('PRAGMA table_info(execution_attempts)').all().some(row => row.name === 'provenance')) {
|
|
78
|
+
transactionInit();
|
|
79
|
+
}
|
|
80
|
+
function transactionInit() { db.exec('BEGIN IMMEDIATE'); try {
|
|
81
|
+
if (!db.prepare('PRAGMA table_info(execution_attempts)').all().some(row => row.name === 'provenance'))
|
|
82
|
+
db.exec('ALTER TABLE execution_attempts ADD COLUMN provenance TEXT');
|
|
83
|
+
db.exec('COMMIT');
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
db.exec('ROLLBACK');
|
|
87
|
+
throw error;
|
|
88
|
+
} }
|
|
89
|
+
let closed = false;
|
|
90
|
+
const transaction = (fn) => { db.exec('BEGIN IMMEDIATE'); try {
|
|
91
|
+
const result = fn();
|
|
92
|
+
db.exec('COMMIT');
|
|
93
|
+
return result;
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
db.exec('ROLLBACK');
|
|
97
|
+
throw error;
|
|
98
|
+
} };
|
|
99
|
+
function childrenGone(token) {
|
|
100
|
+
const children = db.prepare('SELECT * FROM resource_children WHERE token=?').all(token);
|
|
101
|
+
let gone = true;
|
|
102
|
+
for (const child of children) {
|
|
103
|
+
const pid = Number(child.pid);
|
|
104
|
+
if (process.platform === 'linux') {
|
|
105
|
+
// Detached launch groups retain orphan descendants after their leader dies.
|
|
106
|
+
const members = readdirSync('/proc').filter(name => /^\d+$/.test(name)).flatMap(name => {
|
|
107
|
+
try {
|
|
108
|
+
const stat = readFileSync(`/proc/${name}/stat`, 'utf8');
|
|
109
|
+
const fields = stat.slice(stat.lastIndexOf(')') + 2).split(' ');
|
|
110
|
+
return Number(fields[2]) === pid && fields[0] !== 'Z' ? [{ pid: Number(name), identity: `linux:${fields[19]}` }] : [];
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
return [];
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
// Never signal a reused group leader. An orphan group cannot be reused while it has members.
|
|
117
|
+
const identity = processIdentity(pid);
|
|
118
|
+
if (identity && identity !== child.process_identity) {
|
|
119
|
+
db.prepare('DELETE FROM resource_children WHERE token=? AND pid=?').run(token, pid);
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
for (const member of members) {
|
|
123
|
+
if (processIdentity(member.pid) !== member.identity)
|
|
124
|
+
continue;
|
|
125
|
+
try {
|
|
126
|
+
process.kill(member.pid, 'SIGKILL');
|
|
127
|
+
}
|
|
128
|
+
catch { }
|
|
129
|
+
}
|
|
130
|
+
if (members.length)
|
|
131
|
+
gone = false;
|
|
132
|
+
else
|
|
133
|
+
db.prepare('DELETE FROM resource_children WHERE token=? AND pid=?').run(token, pid);
|
|
134
|
+
}
|
|
135
|
+
else if (ownerAlive({ pid, process_identity: child.process_identity, run_id: '', token, claimed_at: '' })) {
|
|
136
|
+
try {
|
|
137
|
+
process.kill(pid, 'SIGKILL');
|
|
138
|
+
}
|
|
139
|
+
catch { }
|
|
140
|
+
gone = false;
|
|
141
|
+
}
|
|
142
|
+
else
|
|
143
|
+
db.prepare('DELETE FROM resource_children WHERE token=? AND pid=?').run(token, pid);
|
|
144
|
+
}
|
|
145
|
+
return gone;
|
|
146
|
+
}
|
|
147
|
+
function reclaim() {
|
|
148
|
+
// A bounded release failure leaves an accountable cleanup row, not an eternal live-owner slot.
|
|
149
|
+
for (const row of db.prepare("SELECT token FROM resource_leases WHERE state='releasing'").all()) {
|
|
150
|
+
if (!childrenGone(String(row.token)))
|
|
151
|
+
continue;
|
|
152
|
+
db.prepare("UPDATE execution_attempts SET state='refunded',terminal_at=? WHERE token=? AND state='reserved'").run(new Date().toISOString(), row.token);
|
|
153
|
+
db.prepare('DELETE FROM resource_leases WHERE token=?').run(row.token);
|
|
154
|
+
}
|
|
155
|
+
const owners = db.prepare('SELECT DISTINCT pid,process_identity FROM resource_leases').all();
|
|
156
|
+
for (const owner of owners) {
|
|
157
|
+
if (ownerAlive({ ...owner, run_id: '', token: '', claimed_at: '' }))
|
|
158
|
+
continue;
|
|
159
|
+
// Only a positively dead process is reclaimed; heartbeat age alone is never authority.
|
|
160
|
+
const rows = db.prepare('SELECT token FROM resource_leases WHERE pid=? AND process_identity IS ?').all(owner.pid, owner.process_identity);
|
|
161
|
+
for (const row of rows) {
|
|
162
|
+
if (!childrenGone(String(row.token)))
|
|
163
|
+
continue;
|
|
164
|
+
db.prepare("UPDATE execution_attempts SET state='refunded',terminal_at=? WHERE token=? AND state='reserved'").run(new Date().toISOString(), row.token);
|
|
165
|
+
db.prepare('DELETE FROM resource_leases WHERE token=?').run(row.token);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
function release(token) {
|
|
170
|
+
transaction(() => {
|
|
171
|
+
const row = db.prepare('SELECT pid,process_identity FROM resource_leases WHERE token=?').get(token);
|
|
172
|
+
if (!row || row.pid !== process.pid || row.process_identity !== ownProcessIdentity)
|
|
173
|
+
return;
|
|
174
|
+
if (!childrenGone(token))
|
|
175
|
+
throw new Error('Child cleanup has not completed; resource lease is retained.');
|
|
176
|
+
db.prepare("UPDATE execution_attempts SET state='refunded',terminal_at=? WHERE token=? AND state='reserved'").run(new Date().toISOString(), token);
|
|
177
|
+
db.prepare('DELETE FROM resource_leases WHERE token=?').run(token);
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
async function acquire(request, { signal, waiting }) {
|
|
181
|
+
signal.throwIfAborted();
|
|
182
|
+
const identity = request.identityWeight !== undefined, config = readResourceConfiguration();
|
|
183
|
+
const weight = identity ? validateIdentityWeight(request.identityWeight, config) : 1;
|
|
184
|
+
if (request.repoCap !== undefined)
|
|
185
|
+
integer(request.repoCap, 'Repository executor cap');
|
|
186
|
+
const provider = identity ? null : request.provider ?? '$runtime', model = request.model ?? null;
|
|
187
|
+
const lane = identity ? 'identity' : `provider:${provider}`, token = randomUUID();
|
|
188
|
+
transaction(() => {
|
|
189
|
+
reclaim();
|
|
190
|
+
if (!identity && !db.prepare('SELECT id FROM submissions WHERE id=?').get(request.runId))
|
|
191
|
+
throw new Error('Submission has no durable execution budget. Stop old workers and resubmit with the current worker protocol.');
|
|
192
|
+
db.prepare("INSERT INTO resource_leases(token,pid,process_identity,heartbeat,lane,state,run_id,request_id,provider,model,repo,repo_cap,weight) VALUES(?,?,?,?,?,'waiting',?,?,?,?,?,?,?)")
|
|
193
|
+
.run(token, process.pid, ownProcessIdentity, Date.now(), lane, identity ? null : request.runId, request.requestId, provider, model, request.repo, request.repoCap ?? null, weight);
|
|
194
|
+
});
|
|
195
|
+
let heartbeat;
|
|
196
|
+
try {
|
|
197
|
+
let reported = false;
|
|
198
|
+
while (true) {
|
|
199
|
+
signal.throwIfAborted();
|
|
200
|
+
const admitted = transaction(() => {
|
|
201
|
+
reclaim();
|
|
202
|
+
const current = db.prepare('SELECT * FROM resource_leases WHERE token=?').get(token);
|
|
203
|
+
if (!current)
|
|
204
|
+
throw new Error('Resource lease disappeared before admission.');
|
|
205
|
+
const limits = readResourceConfiguration();
|
|
206
|
+
if (identity)
|
|
207
|
+
validateIdentityWeight(weight, limits);
|
|
208
|
+
const earlier = db.prepare("SELECT token FROM resource_leases WHERE lane=? AND state='waiting' AND seq<? LIMIT 1").get(lane, current.seq);
|
|
209
|
+
if (earlier)
|
|
210
|
+
return false;
|
|
211
|
+
const active = db.prepare("SELECT * FROM resource_leases WHERE state IN ('active','releasing')").all();
|
|
212
|
+
if (identity) {
|
|
213
|
+
if (active.filter(row => row.lane === lane).reduce((sum, row) => sum + row.weight, 0) + weight > limits.identityCapacity)
|
|
214
|
+
return false;
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
const pool = limits.providers[provider], capacity = pool?.capacity ?? limits.defaultProviderCapacity;
|
|
218
|
+
if (active.filter(row => row.provider === provider).length >= capacity)
|
|
219
|
+
return false;
|
|
220
|
+
const modelCapacity = model ? pool?.models?.[model] : undefined;
|
|
221
|
+
if (modelCapacity !== undefined && active.filter(row => row.provider === provider && row.model === model).length >= modelCapacity)
|
|
222
|
+
return false;
|
|
223
|
+
// All active declarations participate, so callers cannot raise a running repo's tighter cap.
|
|
224
|
+
const peers = active.filter(row => row.repo === request.repo && row.lane !== 'identity');
|
|
225
|
+
const caps = [...peers.flatMap(row => row.repo_cap === null ? [] : [row.repo_cap]), ...request.repoCap === undefined ? [] : [request.repoCap]];
|
|
226
|
+
if (caps.length && peers.length >= Math.min(...caps))
|
|
227
|
+
return false;
|
|
228
|
+
const budget = db.prepare('SELECT max_executions FROM submissions WHERE id=?').get(request.runId);
|
|
229
|
+
const used = Number(db.prepare("SELECT count(*) AS n FROM execution_attempts WHERE run_id=? AND state!='refunded'").get(request.runId).n);
|
|
230
|
+
if (budget.max_executions !== null && used >= Number(budget.max_executions))
|
|
231
|
+
throw Object.assign(new Error(`Submission maxExecutions ${budget.max_executions} exhausted; reuse/coalescing does not authorize another start.`), { code: 'EXECUTION_BUDGET_EXHAUSTED' });
|
|
232
|
+
db.prepare("INSERT INTO execution_attempts(token,run_id,request_id,state,reserved_at) VALUES(?,?,?,'reserved',?)").run(token, request.runId, request.requestId, new Date().toISOString());
|
|
233
|
+
}
|
|
234
|
+
db.prepare("UPDATE resource_leases SET state='active',heartbeat=? WHERE token=?").run(Date.now(), token);
|
|
235
|
+
return true;
|
|
236
|
+
});
|
|
237
|
+
if (admitted)
|
|
238
|
+
break;
|
|
239
|
+
if (!reported) {
|
|
240
|
+
waiting(identity ? 'Waiting for machine identity capacity (FIFO).' : `Waiting for machine provider capacity: ${provider} (FIFO).`);
|
|
241
|
+
reported = true;
|
|
242
|
+
}
|
|
243
|
+
await delay(25, undefined, { signal });
|
|
244
|
+
}
|
|
245
|
+
let released = false;
|
|
246
|
+
heartbeat = setInterval(() => { if (!closed) {
|
|
247
|
+
try {
|
|
248
|
+
db.prepare('UPDATE resource_leases SET heartbeat=? WHERE token=? AND pid=? AND process_identity IS ?').run(Date.now(), token, process.pid, ownProcessIdentity);
|
|
249
|
+
}
|
|
250
|
+
catch { /* A bounded busy failure cannot invalidate a live holder. */ }
|
|
251
|
+
} }, 2000);
|
|
252
|
+
heartbeat.unref();
|
|
253
|
+
return { token,
|
|
254
|
+
trackChild(pid) {
|
|
255
|
+
const identity = processIdentity(pid);
|
|
256
|
+
db.prepare('INSERT INTO resource_children(token,pid,process_identity) VALUES(?,?,?)').run(token, pid, identity);
|
|
257
|
+
return () => { if (process.platform !== 'linux')
|
|
258
|
+
db.prepare('DELETE FROM resource_children WHERE token=? AND pid=? AND process_identity IS ?').run(token, pid, identity); };
|
|
259
|
+
},
|
|
260
|
+
started(provenance = null) {
|
|
261
|
+
transaction(() => {
|
|
262
|
+
const lease = db.prepare("SELECT token FROM resource_leases WHERE token=? AND pid=? AND process_identity IS ? AND state='active'").get(token, process.pid, ownProcessIdentity);
|
|
263
|
+
if (!lease)
|
|
264
|
+
throw new Error('Resource ownership lost before execution start.');
|
|
265
|
+
db.prepare("UPDATE execution_attempts SET state='started',started_at=?,provenance=? WHERE token=? AND state='reserved'").run(new Date().toISOString(), provenance === null ? null : JSON.stringify(provenance), token);
|
|
266
|
+
});
|
|
267
|
+
},
|
|
268
|
+
terminal() { transaction(() => { db.prepare("UPDATE execution_attempts SET state='terminal',terminal_at=? WHERE token=? AND state='started'").run(new Date().toISOString(), token); }); },
|
|
269
|
+
async release() {
|
|
270
|
+
if (released)
|
|
271
|
+
return;
|
|
272
|
+
db.prepare("UPDATE resource_leases SET state='releasing' WHERE token=? AND pid=? AND process_identity IS ?").run(token, process.pid, ownProcessIdentity);
|
|
273
|
+
const deadline = Date.now() + 5000;
|
|
274
|
+
while (!transaction(() => childrenGone(token))) {
|
|
275
|
+
if (Date.now() >= deadline)
|
|
276
|
+
throw new Error('Tracked child cleanup exceeded 5000 ms; resource lease remains held.');
|
|
277
|
+
await delay(10);
|
|
278
|
+
}
|
|
279
|
+
release(token);
|
|
280
|
+
released = true;
|
|
281
|
+
clearInterval(heartbeat);
|
|
282
|
+
}, };
|
|
283
|
+
}
|
|
284
|
+
catch (error) {
|
|
285
|
+
clearInterval(heartbeat);
|
|
286
|
+
release(token);
|
|
287
|
+
throw error;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
return {
|
|
291
|
+
registerSubmission(id, maxExecutions) {
|
|
292
|
+
validateMaxExecutions(maxExecutions);
|
|
293
|
+
transaction(() => {
|
|
294
|
+
db.prepare('INSERT OR IGNORE INTO submissions(id,max_executions,created_at) VALUES(?,?,?)').run(id, maxExecutions ?? null, new Date().toISOString());
|
|
295
|
+
if (db.prepare('SELECT max_executions FROM submissions WHERE id=?').get(id).max_executions !== (maxExecutions ?? null))
|
|
296
|
+
throw new Error('A submission budget is immutable.');
|
|
297
|
+
});
|
|
298
|
+
},
|
|
299
|
+
budget(id) { const row = db.prepare('SELECT max_executions FROM submissions WHERE id=?').get(id); return row ? { maxExecutions: row.max_executions, attempts: db.prepare('SELECT * FROM execution_attempts WHERE run_id=? ORDER BY reserved_at,token').all(id).map(attempt => ({ ...attempt, state: String(attempt.state), token: String(attempt.token), requestId: String(attempt.request_id), executionProvenance: attempt.provenance ? JSON.parse(String(attempt.provenance)) : null })) } : null; },
|
|
300
|
+
acquire,
|
|
301
|
+
admission(repo, repoCap) { return { acquire: (request, options) => acquire({ ...request, repo, repoCap }, options) }; },
|
|
302
|
+
close() { if (closed)
|
|
303
|
+
return; closed = true; db.close(); },
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
//# sourceMappingURL=resources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../../src/resources.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Compile } from 'typebox/compile';
|
|
2
2
|
import { jsonCopy, object, validateSchema } from './tools/schema.js';
|
|
3
3
|
export const auditFields = new Set(['provider', 'model', 'stdout', 'stderr', 'durationMs', 'exitCode', 'toolCalls']);
|
|
4
|
-
const reserved = new Set(['verdict', 'reference', 'reusedFrom', ...auditFields]);
|
|
4
|
+
const reserved = new Set(['verdict', 'reference', 'reusedFrom', 'executionProvenance', 'attemptId', ...auditFields]);
|
|
5
5
|
/** Owner schemas describe extra top-level result fields, never transport or audit fields. */
|
|
6
6
|
export function validateResponseSchema(schema) {
|
|
7
7
|
validateSchema(schema);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response-schema.js","sourceRoot":"","sources":["../../src/response-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGrE,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;AACrH,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"response-schema.js","sourceRoot":"","sources":["../../src/response-schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ExecutionProvenance } from './provenance.js';
|
|
1
2
|
import type { ReviewRequest } from './contracts.js';
|
|
2
3
|
import type { RunView } from './broker/index.js';
|
|
3
4
|
import type { CriticValidation, ProjectPlan, ProjectQuery, ValidationEvidence } from './project/types.js';
|
|
@@ -12,12 +13,15 @@ export interface ReviewReference {
|
|
|
12
13
|
stateDir: string;
|
|
13
14
|
}
|
|
14
15
|
export interface RequesterResult {
|
|
16
|
+
executionProvenance: ExecutionProvenance | null;
|
|
15
17
|
verdict: 'GREEN' | 'RED';
|
|
16
18
|
reference: ReviewReference;
|
|
17
19
|
reusedFrom?: ReviewReference;
|
|
18
20
|
[field: string]: unknown;
|
|
19
21
|
}
|
|
20
22
|
export interface RequesterRequest {
|
|
23
|
+
attemptId: string | null;
|
|
24
|
+
executionProvenance: ExecutionProvenance | null;
|
|
21
25
|
id: string;
|
|
22
26
|
runId: string;
|
|
23
27
|
criticId: string;
|
|
@@ -32,6 +36,7 @@ export interface RequesterRequest {
|
|
|
32
36
|
}
|
|
33
37
|
export interface ResultReference {
|
|
34
38
|
requestId: string;
|
|
39
|
+
executionProvenance: ExecutionProvenance | null;
|
|
35
40
|
}
|
|
36
41
|
export type RequesterCritic = Omit<CriticValidation, 'input' | 'result'> & {
|
|
37
42
|
inputKey: string;
|
package/dist/src/result-view.js
CHANGED
|
@@ -3,18 +3,18 @@ import { resolve } from 'node:path';
|
|
|
3
3
|
export const reviewReference = (stateDir, runId, requestId) => ({ runId, requestId, stateDir: resolve(stateDir) });
|
|
4
4
|
/** Whitelists deliberately keep new audit fields out of requester output. Never mutate stored evidence. */
|
|
5
5
|
export function requesterEvidence(evidence, stateDir) {
|
|
6
|
-
return { ...semanticResult(evidence.result), verdict: evidence.verdict,
|
|
6
|
+
return { ...semanticResult(evidence.result), executionProvenance: evidence.executionProvenance ?? null, verdict: evidence.verdict,
|
|
7
7
|
reference: reviewReference(stateDir, evidence.runId, evidence.requestId) };
|
|
8
8
|
}
|
|
9
9
|
export function requesterRequest(request, stateDir) {
|
|
10
10
|
const reference = reviewReference(stateDir, request.runId, request.id), inputKey = request.validationInput?.key ?? null;
|
|
11
11
|
return { id: request.id, runId: request.runId, criticId: request.criticId, target: request.target, status: request.status,
|
|
12
|
-
inputKey, reference, error: request.error, errorCode: request.errorCode, blockedReason: request.blockedReason,
|
|
13
|
-
result: request.result ? { ...semanticResult(request.result), verdict: request.result.verdict, reference } : null };
|
|
12
|
+
attemptId: request.attemptId ?? null, executionProvenance: request.executionProvenance ?? null, inputKey, reference, error: request.error, errorCode: request.errorCode, blockedReason: request.blockedReason,
|
|
13
|
+
result: request.result ? { ...semanticResult(request.result), executionProvenance: request.executionProvenance ?? null, verdict: request.result.verdict, reference } : null };
|
|
14
14
|
}
|
|
15
15
|
function requesterCritic(critic) {
|
|
16
16
|
const { input, result, ...rest } = critic;
|
|
17
|
-
return { ...rest, inputKey: input.key, result: result ? { requestId: result.requestId } : null };
|
|
17
|
+
return { ...rest, inputKey: input.key, result: result ? { requestId: result.requestId, executionProvenance: result.executionProvenance ?? null } : null };
|
|
18
18
|
}
|
|
19
19
|
export function requesterQuery(query, stateDir) {
|
|
20
20
|
return { ...query, critics: query.critics.map(critic => requesterCritic(critic)),
|
|
@@ -30,7 +30,7 @@ export function requesterRun(run, stateDir) {
|
|
|
30
30
|
return { id: run.id, status: run.status, workspaceIntegrity: run.workspace?.integrity ?? 'content',
|
|
31
31
|
reference: reviewReference(stateDir, run.id, null), error: run.error,
|
|
32
32
|
results: uniqueResults([...requests.flatMap(request => request.result ? [request.result] : []), ...validationResults]).map(result => result.reference.runId === run.id ? result : { ...result, reusedFrom: result.reference }),
|
|
33
|
-
requests: requests.map(({ result, ...request }) => ({ ...request, result: result ? { requestId: request.id } : null })),
|
|
33
|
+
requests: requests.map(({ result, ...request }) => ({ ...request, result: result ? { requestId: request.id, executionProvenance: result.executionProvenance } : null })),
|
|
34
34
|
...(plan ? { validation: validation } : {}) };
|
|
35
35
|
}
|
|
36
36
|
function uniqueResults(results) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"result-view.js","sourceRoot":"","sources":["../../src/result-view.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"result-view.js","sourceRoot":"","sources":["../../src/result-view.ts"],"names":[],"mappings":"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"}
|
|
@@ -66,6 +66,8 @@ export interface ScriptToolContext {
|
|
|
66
66
|
tmpDir: string;
|
|
67
67
|
/** Canonical paths and logical connections for this review's allowed scope. */
|
|
68
68
|
scope: ArtifactScope;
|
|
69
|
+
/** Declared workspace-relative runtime paths mapped to pinned bytes for this attempt. */
|
|
70
|
+
executionPaths?: Record<string, string>;
|
|
69
71
|
}
|
|
70
72
|
export interface ScriptToolRequest {
|
|
71
73
|
version: 1;
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { diagnosticScope } from '../diagnostic-scope.js';
|
|
2
|
+
import { executionScope } from '../execution-scope.js';
|
|
1
3
|
import { spawn } from 'node:child_process';
|
|
2
4
|
import { mkdir, realpath } from 'node:fs/promises';
|
|
3
5
|
import { dirname, join, resolve } from 'node:path';
|
|
@@ -27,6 +29,7 @@ function checkEnvironment(outputDir, tmpDir) {
|
|
|
27
29
|
return {
|
|
28
30
|
...Object.fromEntries(names.flatMap(name => process.env[name] === undefined ? [] : [[name, process.env[name]]])),
|
|
29
31
|
CCDD_OUTPUT_DIR: outputDir, CCDD_TMP_DIR: tmpDir, TMPDIR: tmpDir, TMP: tmpDir, TEMP: tmpDir,
|
|
32
|
+
...(diagnosticScope.getStore() ? { NODE_OPTIONS: `--import=${diagnosticScope.getStore().guard}`, CCDD_OFFLINE_GUARD_LOG: process.env.CCDD_OFFLINE_GUARD_LOG } : {}),
|
|
30
33
|
XDG_CACHE_HOME: join(tmpDir, 'cache'), CARGO_TARGET_DIR: join(outputDir, 'cargo-target'),
|
|
31
34
|
};
|
|
32
35
|
}
|
|
@@ -34,9 +37,18 @@ function checkEnvironment(outputDir, tmpDir) {
|
|
|
34
37
|
export function runEnvironmentScript({ command, args, cwd, outputDir, tmpDir, signal, timeoutMs = 30000, label = 'Environment check', description = 'Environment check passed.' }) {
|
|
35
38
|
signal?.throwIfAborted();
|
|
36
39
|
return new Promise(resolveCheck => {
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
|
|
40
|
+
const guarded = !!executionScope.getStore();
|
|
41
|
+
let child;
|
|
42
|
+
try {
|
|
43
|
+
child = spawn(guarded ? process.execPath : command, guarded ? [fileURLToPath(new URL('../executors/launch-host.js', import.meta.url)), command, ...args] : args, {
|
|
44
|
+
cwd, env: checkEnvironment(outputDir, tmpDir), shell: false, detached: process.platform !== 'win32', stdio: guarded ? ['ignore', 'pipe', 'pipe', 'ipc'] : ['ignore', 'pipe', 'pipe'], windowsHide: true,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
resolveCheck({ ok: false, stdout: '', message: `${label} could not be started: ${error instanceof Error ? error.message : String(error)}` });
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
let untrack;
|
|
40
52
|
const chunks = [], stdout = [];
|
|
41
53
|
let bytes = 0, retained = 0, settled = false, failure, killTimer;
|
|
42
54
|
const kill = (kind) => { try {
|
|
@@ -61,7 +73,7 @@ export function runEnvironmentScript({ command, args, cwd, outputDir, tmpDir, si
|
|
|
61
73
|
return;
|
|
62
74
|
failure = message;
|
|
63
75
|
kill('SIGTERM');
|
|
64
|
-
killTimer = setTimeout(() => { kill('SIGKILL');
|
|
76
|
+
killTimer = setTimeout(() => { kill('SIGKILL'); }, 500);
|
|
65
77
|
};
|
|
66
78
|
const abort = () => stop(`${label} was cancelled.`);
|
|
67
79
|
const timer = setTimeout(() => stop(`${label} timed out after ${timeoutMs} ms.`), timeoutMs);
|
|
@@ -79,12 +91,22 @@ export function runEnvironmentScript({ command, args, cwd, outputDir, tmpDir, si
|
|
|
79
91
|
stdout.push(chunk.subarray(0, 65536 - bytes)); capture(chunk); });
|
|
80
92
|
child.stderr.on('data', capture);
|
|
81
93
|
signal?.addEventListener('abort', abort, { once: true });
|
|
82
|
-
child.on('error', () => {
|
|
94
|
+
child.on('error', () => { failure ??= `${label} could not be started.`; kill('SIGKILL'); });
|
|
83
95
|
// A readiness check may not leave a background process after its script exits.
|
|
84
96
|
child.on('exit', () => kill('SIGKILL'));
|
|
85
|
-
child.on('close', code => finish(!failure && code === 0, failure ?? (code === 0 ? description : `${label} failed (exit ${code ?? 'signal'}): ${description}`)));
|
|
86
|
-
|
|
87
|
-
|
|
97
|
+
child.on('close', code => { untrack?.(); finish(!failure && code === 0, failure ?? (code === 0 ? description : `${label} failed (exit ${code ?? 'signal'}): ${description}`)); });
|
|
98
|
+
try {
|
|
99
|
+
if (child.pid)
|
|
100
|
+
untrack = executionScope.getStore()?.trackChild(child.pid);
|
|
101
|
+
if (signal?.aborted)
|
|
102
|
+
abort();
|
|
103
|
+
else if (guarded)
|
|
104
|
+
child.send?.('admitted', error => { if (error)
|
|
105
|
+
stop(`${label} launch admission failed: ${error.message}`); });
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
stop(`${label} child registration failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
109
|
+
}
|
|
88
110
|
});
|
|
89
111
|
}
|
|
90
112
|
/** Explicit Human claim preparation only. The caller owns workspace integrity checks and the Try Claim lease. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../../../src/tools/environment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAEvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAMhD,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,IAAY,EAAE,SAAiB;IAC9E,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAClC,IAAI,QAAQ,GAAG,MAAM,CAAC;IACtB,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACxH,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,IAAI,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;YAC9H,MAAM;QACR,CAAC;QACD,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IACD,MAAM,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC;AAC1B,CAAC;AAED,yHAAyH;AACzH,SAAS,gBAAgB,CAAC,SAAiB,EAAE,MAAc;IACzD,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,iBAAiB,EAAE,YAAY,EAAE,iBAAiB,EAAE,0BAA0B,CAAC,CAAC;IACnO,OAAO;QACL,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,CAAE,CAAC,CAAC;QAClH,eAAe,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;QAC3F,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,EAAE,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC;KACzF,CAAC;AACJ,CAAC;AAED,6GAA6G;AAC7G,MAAM,UAAU,oBAAoB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,KAAK,EAAE,KAAK,GAAG,mBAAmB,EAAE,WAAW,GAAG,2BAA2B,EAG9K;IACC,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,OAAO,IAAI,OAAO,CAAC,YAAY,CAAC,EAAE;QAChC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE;
|
|
1
|
+
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../../../src/tools/environment.ts"],"names":[],"mappings":"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"}
|
package/dist/src/tools/runner.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { diagnosticScope } from '../diagnostic-scope.js';
|
|
2
|
+
import { executionScope } from '../execution-scope.js';
|
|
3
|
+
import { pinnedArgument } from '../provenance.js';
|
|
1
4
|
import { constants } from 'node:fs';
|
|
2
5
|
import { access, lstat, mkdir, mkdtemp, readFile, realpath, rm } from 'node:fs/promises';
|
|
3
6
|
import { tmpdir } from 'node:os';
|
|
@@ -86,6 +89,7 @@ async function executable(command, cwd, workspace) {
|
|
|
86
89
|
function toolEnvironment(outputDir, temporary) {
|
|
87
90
|
const names = ['PATH', 'LANG', 'LC_ALL', 'SYSTEMROOT', 'WINDIR', 'DISPLAY', 'WAYLAND_DISPLAY', 'XAUTHORITY', 'XDG_RUNTIME_DIR', 'DBUS_SESSION_BUS_ADDRESS'];
|
|
88
91
|
return { ...Object.fromEntries(names.flatMap(name => process.env[name] === undefined ? [] : [[name, process.env[name]]])),
|
|
92
|
+
...(diagnosticScope.getStore() ? { NODE_OPTIONS: `--import=${diagnosticScope.getStore().guard}`, CCDD_OFFLINE_GUARD_LOG: process.env.CCDD_OFFLINE_GUARD_LOG } : {}),
|
|
89
93
|
HOME: temporary, USERPROFILE: temporary, TMPDIR: temporary, TMP: temporary, TEMP: temporary,
|
|
90
94
|
XDG_CACHE_HOME: join(temporary, 'cache'), CARGO_TARGET_DIR: join(outputDir, 'cargo-target'),
|
|
91
95
|
CCDD_OUTPUT_DIR: outputDir, CCDD_TMP_DIR: temporary };
|
|
@@ -224,13 +228,16 @@ export async function createReviewTools(options) {
|
|
|
224
228
|
const invoke = async (tool, actual) => {
|
|
225
229
|
controller.signal.throwIfAborted();
|
|
226
230
|
const cwd = scope[tool.artifactId].path, script = definition(tool).script;
|
|
227
|
-
const
|
|
231
|
+
const execution = executionScope.getStore();
|
|
232
|
+
const pin = (value) => execution ? pinnedArgument(value, cwd, root, execution.runtimeRoot, execution.declaredPaths) : value;
|
|
233
|
+
const command = pin(await executable(script.command, cwd, root));
|
|
234
|
+
const scriptArgs = [...(diagnosticScope.getStore() && command === process.execPath ? ['--import', diagnosticScope.getStore().guard] : []), ...script.args.map(pin)];
|
|
228
235
|
const callDir = await mkdtemp(join(outputDir, 'call-')), temporary = join(callDir, '.tmp');
|
|
229
236
|
await mkdir(temporary);
|
|
230
|
-
const request = { version: 1, context: { artifactId: tool.artifactId, artifactPath: cwd, outputDir: callDir, tmpDir: temporary, scope }, args: actual };
|
|
237
|
+
const request = { version: 1, context: { artifactId: tool.artifactId, artifactPath: cwd, outputDir: callDir, tmpDir: temporary, scope, ...(execution ? { executionPaths: Object.fromEntries((tool.metadata.executionPaths ?? []).map(name => [name, join(execution.runtimeRoot, name)])) } : {}) }, args: actual };
|
|
231
238
|
let processResult;
|
|
232
239
|
try {
|
|
233
|
-
processResult = await runProcess(command,
|
|
240
|
+
processResult = await runProcess(command, scriptArgs, { cwd, input: JSON.stringify(request), env: toolEnvironment(callDir, temporary), signal: controller.signal,
|
|
234
241
|
timeoutMs: tool.metadata.timeoutMs ?? 120000, maxOutputBytes: 16 * 1024 * 1024 });
|
|
235
242
|
}
|
|
236
243
|
catch (error) {
|