harnery 0.11.0 → 0.12.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 +1 -1
- package/dist/commander.d.ts.map +1 -1
- package/dist/commander.js +2 -0
- package/dist/commands/policy.d.ts +6 -0
- package/dist/commands/policy.d.ts.map +1 -0
- package/dist/commands/policy.js +42 -0
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +18 -1
- package/dist/core/policy/evaluate.d.ts +14 -0
- package/dist/core/policy/evaluate.d.ts.map +1 -0
- package/dist/core/policy/evaluate.js +238 -0
- package/dist/core/policy/file.d.ts +3 -0
- package/dist/core/policy/file.d.ts.map +1 -0
- package/dist/core/policy/file.js +20 -0
- package/dist/core/policy/index.d.ts +5 -0
- package/dist/core/policy/index.d.ts.map +1 -0
- package/dist/core/policy/index.js +3 -0
- package/dist/core/policy/types.d.ts +91 -0
- package/dist/core/policy/types.d.ts.map +1 -0
- package/dist/core/policy/types.js +1 -0
- package/dist/core/workflow/engine.d.ts.map +1 -1
- package/dist/core/workflow/engine.js +261 -35
- package/dist/core/workflow/index.d.ts +1 -1
- package/dist/core/workflow/index.d.ts.map +1 -1
- package/dist/core/workflow/proof.d.ts +7 -0
- package/dist/core/workflow/proof.d.ts.map +1 -1
- package/dist/core/workflow/proof.js +33 -0
- package/dist/core/workflow/types.d.ts +33 -0
- package/dist/core/workflow/types.d.ts.map +1 -1
- package/package.json +6 -1
- package/src/commander.ts +2 -0
- package/src/commands/policy.ts +50 -0
- package/src/commands/workflow.ts +29 -1
- package/src/core/policy/evaluate.ts +311 -0
- package/src/core/policy/file.ts +20 -0
- package/src/core/policy/index.ts +26 -0
- package/src/core/policy/types.ts +107 -0
- package/src/core/workflow/engine.ts +283 -41
- package/src/core/workflow/index.ts +1 -0
- package/src/core/workflow/proof.ts +51 -0
- package/src/core/workflow/types.ts +43 -0
|
@@ -29,6 +29,7 @@ import { appendFileSync, existsSync, mkdirSync, readFileSync, statSync } from "n
|
|
|
29
29
|
import { isAbsolute, join, resolve } from "node:path";
|
|
30
30
|
import { pathToFileURL } from "node:url";
|
|
31
31
|
import { snapshotRepo } from "../context/index.js";
|
|
32
|
+
import { evaluatePolicy, normalizePolicy, PolicyDeniedError, policyDigest, summarizePolicyRequest, } from "../policy/index.js";
|
|
32
33
|
import { probeBilling } from "./billing.js";
|
|
33
34
|
import { buildWorkflowProof, createEvidenceRecord, digestResult, normalizeWorkflowMeta, writeWorkflowProof, } from "./proof.js";
|
|
34
35
|
import { WORKFLOW_PROOF_SCHEMA_VERSION } from "./types.js";
|
|
@@ -38,6 +39,8 @@ const DEFAULT_CONCURRENCY = 4;
|
|
|
38
39
|
const DEFAULT_MAX_ATTEMPTS = 2;
|
|
39
40
|
const DEFAULT_TIMEOUT_MS = 300_000;
|
|
40
41
|
const DEFAULT_MAX_TURNS = 25;
|
|
42
|
+
const DEFAULT_POLICY_ASK_TIMEOUT_MS = 60_000;
|
|
43
|
+
const MAX_POLICY_DECISIONS = 50;
|
|
41
44
|
export class WorkflowRunError extends Error {
|
|
42
45
|
runId;
|
|
43
46
|
proofPath;
|
|
@@ -67,6 +70,9 @@ export async function runWorkflow(scriptPath, opts) {
|
|
|
67
70
|
const cwd = opts.cwd ?? opts.coordRoot;
|
|
68
71
|
const log = opts.onLog ?? ((line) => process.stderr.write(`${line}\n`));
|
|
69
72
|
const defaultHarness = opts.defaultHarness ?? "claude-code";
|
|
73
|
+
const isolation = opts.isolation ?? "shared";
|
|
74
|
+
const networkAccess = opts.networkAccess ?? "unknown";
|
|
75
|
+
const policy = opts.policy ? normalizePolicy(opts.policy, { baseDir: cwd }) : undefined;
|
|
70
76
|
const repoBefore = snapshotRepo(cwd);
|
|
71
77
|
// Per-child fixed context overhead: children spawn in `cwd` and load its
|
|
72
78
|
// repo-instructions file into their system prompt, cache-writing it once
|
|
@@ -83,12 +89,15 @@ export async function runWorkflow(scriptPath, opts) {
|
|
|
83
89
|
let agentsSpawned = 0;
|
|
84
90
|
let agentsCached = 0;
|
|
85
91
|
let costUsd = 0;
|
|
92
|
+
let reservedCostUsd = 0;
|
|
86
93
|
let currentStage = "";
|
|
87
94
|
let agentSeq = 0;
|
|
88
95
|
let evidenceSeq = 0;
|
|
96
|
+
let policySeq = 0;
|
|
89
97
|
const billingProbed = new Map();
|
|
90
98
|
const agentProofs = new Map();
|
|
91
99
|
const evidenceRecords = [];
|
|
100
|
+
const policyDecisions = [];
|
|
92
101
|
const acceptanceIds = new Set(meta.acceptance.map((criterion) => criterion.id));
|
|
93
102
|
const journal = (event, data) => {
|
|
94
103
|
const line = JSON.stringify({
|
|
@@ -118,7 +127,90 @@ export async function runWorkflow(scriptPath, opts) {
|
|
|
118
127
|
inFlight--;
|
|
119
128
|
waiters.shift()?.();
|
|
120
129
|
};
|
|
130
|
+
// Policy checks that affect the shared cost reservation ledger serialize.
|
|
131
|
+
// Spawns still run concurrently after authorization; only the last-moment
|
|
132
|
+
// check-and-reserve section is exclusive.
|
|
133
|
+
let policyGate = Promise.resolve();
|
|
134
|
+
const withDispatchPolicyGate = async (work) => {
|
|
135
|
+
const previous = policyGate;
|
|
136
|
+
let open;
|
|
137
|
+
policyGate = new Promise((resolveGate) => {
|
|
138
|
+
open = resolveGate;
|
|
139
|
+
});
|
|
140
|
+
await previous;
|
|
141
|
+
try {
|
|
142
|
+
return await work();
|
|
143
|
+
}
|
|
144
|
+
finally {
|
|
145
|
+
open();
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
const authorizePolicyRequest = async (rawRequest) => {
|
|
149
|
+
if (!policy) {
|
|
150
|
+
throw new Error("external mutation authorization requires a host policy");
|
|
151
|
+
}
|
|
152
|
+
if (policyDecisions.length >= MAX_POLICY_DECISIONS) {
|
|
153
|
+
throw new Error(`workflow policy decision cap reached (${MAX_POLICY_DECISIONS}); split the workflow or reduce protected actions`);
|
|
154
|
+
}
|
|
155
|
+
const request = summarizePolicyRequest(rawRequest);
|
|
156
|
+
const evaluation = evaluatePolicy(policy, request);
|
|
157
|
+
const id = `p${++policySeq}`;
|
|
158
|
+
const checkedAt = new Date().toISOString();
|
|
159
|
+
journal("policy.check", {
|
|
160
|
+
id,
|
|
161
|
+
policy: policy.name,
|
|
162
|
+
policy_sha256: policyDigest(policy),
|
|
163
|
+
request,
|
|
164
|
+
verdict: evaluation.verdict,
|
|
165
|
+
rules: evaluation.rules,
|
|
166
|
+
});
|
|
167
|
+
let verdict = evaluation.verdict === "allow" ? "allow" : "deny";
|
|
168
|
+
let resolvedBy = "policy";
|
|
169
|
+
let reason = evaluation.reason;
|
|
170
|
+
if (evaluation.verdict === "ask") {
|
|
171
|
+
resolvedBy = "fail_closed";
|
|
172
|
+
if (!opts.resolvePolicyAsk) {
|
|
173
|
+
reason = `${evaluation.reason}; no host approval resolver is configured`;
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
try {
|
|
177
|
+
const resolution = await withTimeout(Promise.resolve(opts.resolvePolicyAsk(request, evaluation)), opts.policyAskTimeoutMs ?? DEFAULT_POLICY_ASK_TIMEOUT_MS);
|
|
178
|
+
if (!resolution || (resolution.verdict !== "allow" && resolution.verdict !== "deny")) {
|
|
179
|
+
reason = `${evaluation.reason}; host returned an invalid approval resolution`;
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
verdict = resolution.verdict;
|
|
183
|
+
resolvedBy = "host";
|
|
184
|
+
reason = boundedPolicyReason(resolution.reason ?? evaluation.reason);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
catch (error) {
|
|
188
|
+
reason = `${evaluation.reason}; approval failed closed: ${error.message}`;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
const decision = {
|
|
193
|
+
id,
|
|
194
|
+
checked_at: checkedAt,
|
|
195
|
+
policy: policy.name,
|
|
196
|
+
phase: request.phase,
|
|
197
|
+
initial_verdict: evaluation.verdict,
|
|
198
|
+
verdict,
|
|
199
|
+
resolved_by: resolvedBy,
|
|
200
|
+
reason: boundedPolicyReason(reason),
|
|
201
|
+
rule_codes: evaluation.rules.map((rule) => rule.code),
|
|
202
|
+
request,
|
|
203
|
+
};
|
|
204
|
+
policyDecisions.push(decision);
|
|
205
|
+
journal("policy.resolve", { ...decision });
|
|
206
|
+
if (decision.verdict === "deny") {
|
|
207
|
+
throw new PolicyDeniedError(`policy ${JSON.stringify(policy.name)} denied ${request.phase} ${JSON.stringify(request.action)}: ${decision.reason}`, decision.id);
|
|
208
|
+
}
|
|
209
|
+
return decision;
|
|
210
|
+
};
|
|
121
211
|
const agent = async (prompt, agentOpts = {}) => {
|
|
212
|
+
let reservedForDispatch = 0;
|
|
213
|
+
let spawnCountClaimed = false;
|
|
122
214
|
const harness = agentOpts.harness ?? defaultHarness;
|
|
123
215
|
const spawner = opts.spawners[harness];
|
|
124
216
|
if (!spawner) {
|
|
@@ -158,50 +250,125 @@ export async function runWorkflow(scriptPath, opts) {
|
|
|
158
250
|
log(`[${name}] ${currentStage || "(no stage)"} → ${id} ${label} (cached from ${opts.resumeFrom})`);
|
|
159
251
|
return cached.value;
|
|
160
252
|
}
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
if (!billingProbed.has(harness)) {
|
|
167
|
-
const probe = (opts.probeBilling ?? probeBilling)(harness);
|
|
168
|
-
billingProbed.set(harness, probe);
|
|
169
|
-
journal("billing.probe", {
|
|
253
|
+
if (policy) {
|
|
254
|
+
const estimateRequest = summarizePolicyRequest({
|
|
255
|
+
phase: "dispatch",
|
|
256
|
+
action: "spawn agent",
|
|
257
|
+
path: cwd,
|
|
170
258
|
harness,
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
259
|
+
model: agentOpts.model,
|
|
260
|
+
effort: agentOpts.effort,
|
|
261
|
+
max_attempts: maxAttempts,
|
|
262
|
+
max_turns: agentOpts.maxTurns ?? DEFAULT_MAX_TURNS,
|
|
263
|
+
timeout_ms: agentOpts.timeoutMs ?? DEFAULT_TIMEOUT_MS,
|
|
264
|
+
prompt_bytes: Buffer.byteLength(prompt),
|
|
265
|
+
isolation,
|
|
266
|
+
network_access: networkAccess,
|
|
267
|
+
current_cost_usd: round4(costUsd + reservedCostUsd),
|
|
268
|
+
projected_cost_usd: null,
|
|
175
269
|
});
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
270
|
+
let projectedCost = null;
|
|
271
|
+
if (policy.max_cost_usd !== undefined && opts.estimateDispatchCost) {
|
|
272
|
+
try {
|
|
273
|
+
const candidate = await opts.estimateDispatchCost(estimateRequest);
|
|
274
|
+
if (candidate !== null && (!Number.isFinite(candidate) || candidate < 0)) {
|
|
275
|
+
throw new Error("cost estimator returned a non-finite or negative value");
|
|
276
|
+
}
|
|
277
|
+
projectedCost = candidate;
|
|
278
|
+
}
|
|
279
|
+
catch (error) {
|
|
280
|
+
journal("policy.cost_estimate_failed", {
|
|
281
|
+
harness,
|
|
282
|
+
model: agentOpts.model ?? null,
|
|
283
|
+
error: boundedPolicyReason(error.message),
|
|
284
|
+
});
|
|
180
285
|
}
|
|
181
|
-
log(`[billing] ${harness}: subscription-only (API-key vars scrubbed from child env)`);
|
|
182
286
|
}
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
287
|
+
try {
|
|
288
|
+
await withDispatchPolicyGate(async () => {
|
|
289
|
+
assertAgentCapacity(agentsSpawned, maxAgents);
|
|
290
|
+
const dispatchRequest = {
|
|
291
|
+
...estimateRequest,
|
|
292
|
+
current_cost_usd: round4(costUsd + reservedCostUsd),
|
|
293
|
+
projected_cost_usd: projectedCost,
|
|
294
|
+
};
|
|
295
|
+
await authorizePolicyRequest(dispatchRequest);
|
|
296
|
+
if (policy.max_cost_usd !== undefined) {
|
|
297
|
+
reservedForDispatch =
|
|
298
|
+
projectedCost ?? Math.max(0, policy.max_cost_usd - dispatchRequest.current_cost_usd);
|
|
299
|
+
reservedCostUsd += reservedForDispatch;
|
|
300
|
+
}
|
|
301
|
+
agentsSpawned++;
|
|
302
|
+
spawnCountClaimed = true;
|
|
303
|
+
});
|
|
188
304
|
}
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
305
|
+
catch (error) {
|
|
306
|
+
agentProof.error = error.message;
|
|
307
|
+
throw error;
|
|
192
308
|
}
|
|
193
|
-
|
|
194
|
-
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
try {
|
|
312
|
+
assertAgentCapacity(agentsSpawned, maxAgents);
|
|
195
313
|
}
|
|
196
|
-
|
|
197
|
-
|
|
314
|
+
catch (error) {
|
|
315
|
+
agentProof.error = error.message;
|
|
316
|
+
throw error;
|
|
198
317
|
}
|
|
199
318
|
}
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
319
|
+
// Billing safeguard: on a harness's FIRST spawn this run, classify which
|
|
320
|
+
// auth its children will use and refuse the silent-override state (an
|
|
321
|
+
// exported API key shadowing a stored subscription login) unless the
|
|
322
|
+
// caller explicitly opted into API billing. Cached agents never reach
|
|
323
|
+
// this — no spawn, no billing.
|
|
324
|
+
try {
|
|
325
|
+
if (!billingProbed.has(harness)) {
|
|
326
|
+
const probe = (opts.probeBilling ?? probeBilling)(harness);
|
|
327
|
+
billingProbed.set(harness, probe);
|
|
328
|
+
journal("billing.probe", {
|
|
329
|
+
harness,
|
|
330
|
+
mode: opts.subscriptionOnly ? "subscription" : probe.mode,
|
|
331
|
+
api_key_source: probe.apiKeySource,
|
|
332
|
+
login: probe.login,
|
|
333
|
+
subscription_only: Boolean(opts.subscriptionOnly),
|
|
334
|
+
});
|
|
335
|
+
if (opts.subscriptionOnly) {
|
|
336
|
+
if (probe.login === "absent") {
|
|
337
|
+
throw new Error(`subscription-only: no stored login detected for ${harness}; ` +
|
|
338
|
+
`log the harness CLI in (or drop --subscription-only for a key-only host)`);
|
|
339
|
+
}
|
|
340
|
+
log(`[billing] ${harness}: subscription-only (API-key vars scrubbed from child env)`);
|
|
341
|
+
}
|
|
342
|
+
else if (probe.mode === "api-key-override" && !opts.allowApiBilling) {
|
|
343
|
+
throw new Error(`${probe.apiKeySource} is set AND a stored ${harness} login exists — the key silently ` +
|
|
344
|
+
`overrides your subscription auth, so children would bill per-token API rates. ` +
|
|
345
|
+
`Either unset ${probe.apiKeySource}, run with --subscription-only to scrub it from ` +
|
|
346
|
+
`child envs, or pass --allow-api-billing if API billing is intended`);
|
|
347
|
+
}
|
|
348
|
+
else if (probe.mode === "api-key") {
|
|
349
|
+
log(`[billing] ${harness}: API-key billing (${probe.apiKeySource}; no stored login detected) — ` +
|
|
350
|
+
`children bill per-token rates`);
|
|
351
|
+
}
|
|
352
|
+
else if (probe.mode === "api-key-override") {
|
|
353
|
+
log(`[billing] ${harness}: API-key billing (--allow-api-billing; key overrides stored login)`);
|
|
354
|
+
}
|
|
355
|
+
else {
|
|
356
|
+
log(`[billing] ${harness}: subscription login`);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
203
359
|
}
|
|
204
|
-
|
|
360
|
+
catch (error) {
|
|
361
|
+
reservedCostUsd = Math.max(0, reservedCostUsd - reservedForDispatch);
|
|
362
|
+
reservedForDispatch = 0;
|
|
363
|
+
if (spawnCountClaimed) {
|
|
364
|
+
agentsSpawned--;
|
|
365
|
+
spawnCountClaimed = false;
|
|
366
|
+
}
|
|
367
|
+
agentProof.error = error.message;
|
|
368
|
+
throw error;
|
|
369
|
+
}
|
|
370
|
+
if (!spawnCountClaimed)
|
|
371
|
+
agentsSpawned++;
|
|
205
372
|
await acquire();
|
|
206
373
|
try {
|
|
207
374
|
journal("agent.start", {
|
|
@@ -298,6 +465,7 @@ export async function runWorkflow(scriptPath, opts) {
|
|
|
298
465
|
throw error;
|
|
299
466
|
}
|
|
300
467
|
finally {
|
|
468
|
+
reservedCostUsd = Math.max(0, reservedCostUsd - reservedForDispatch);
|
|
301
469
|
release();
|
|
302
470
|
}
|
|
303
471
|
};
|
|
@@ -327,7 +495,22 @@ export async function runWorkflow(scriptPath, opts) {
|
|
|
327
495
|
journal("evidence.recorded", { ...record });
|
|
328
496
|
return record.id;
|
|
329
497
|
};
|
|
330
|
-
const
|
|
498
|
+
const authorize = async (input) => {
|
|
499
|
+
const network = input.network === true || input.service !== undefined || input.target !== undefined
|
|
500
|
+
? "enabled"
|
|
501
|
+
: "disabled";
|
|
502
|
+
return authorizePolicyRequest({
|
|
503
|
+
phase: "external_mutation",
|
|
504
|
+
action: input.action,
|
|
505
|
+
path: input.path ? resolve(cwd, input.path) : undefined,
|
|
506
|
+
isolation,
|
|
507
|
+
network_access: network,
|
|
508
|
+
service: input.service,
|
|
509
|
+
target: input.target,
|
|
510
|
+
current_cost_usd: round4(costUsd),
|
|
511
|
+
});
|
|
512
|
+
};
|
|
513
|
+
const ctx = { agent, parallel, stage, log, evidence, authorize };
|
|
331
514
|
const t0 = Date.now();
|
|
332
515
|
const startedAt = new Date(t0).toISOString();
|
|
333
516
|
journal("run.start", {
|
|
@@ -337,6 +520,9 @@ export async function runWorkflow(scriptPath, opts) {
|
|
|
337
520
|
acceptance: meta.acceptance,
|
|
338
521
|
max_agents: maxAgents,
|
|
339
522
|
concurrency,
|
|
523
|
+
policy: policy ? { name: policy.name, sha256: policyDigest(policy) } : null,
|
|
524
|
+
isolation,
|
|
525
|
+
network_access: networkAccess,
|
|
340
526
|
});
|
|
341
527
|
try {
|
|
342
528
|
const result = await mod.default(ctx);
|
|
@@ -364,6 +550,9 @@ export async function runWorkflow(scriptPath, opts) {
|
|
|
364
550
|
agents: Array.from(agentProofs.values()),
|
|
365
551
|
evidence: evidenceRecords,
|
|
366
552
|
harnessEvidence: opts.harnessEvidence,
|
|
553
|
+
policy: policy
|
|
554
|
+
? { config: policy, decisions: policyDecisions, isolation, networkAccess }
|
|
555
|
+
: undefined,
|
|
367
556
|
result,
|
|
368
557
|
});
|
|
369
558
|
writeWorkflowProof(proofPath, proof);
|
|
@@ -387,6 +576,7 @@ export async function runWorkflow(scriptPath, opts) {
|
|
|
387
576
|
harness: p.harness,
|
|
388
577
|
mode: opts.subscriptionOnly ? "subscription" : p.mode,
|
|
389
578
|
})),
|
|
579
|
+
policy: proof.policy?.summary,
|
|
390
580
|
};
|
|
391
581
|
return report;
|
|
392
582
|
}
|
|
@@ -417,6 +607,9 @@ export async function runWorkflow(scriptPath, opts) {
|
|
|
417
607
|
agents: Array.from(agentProofs.values()),
|
|
418
608
|
evidence: evidenceRecords,
|
|
419
609
|
harnessEvidence: opts.harnessEvidence,
|
|
610
|
+
policy: policy
|
|
611
|
+
? { config: policy, decisions: policyDecisions, isolation, networkAccess }
|
|
612
|
+
: undefined,
|
|
420
613
|
error: err.message,
|
|
421
614
|
});
|
|
422
615
|
writeWorkflowProof(proofPath, proof);
|
|
@@ -486,3 +679,36 @@ function loadResumeCache(coordRoot, resumeFrom) {
|
|
|
486
679
|
function round4(n) {
|
|
487
680
|
return Math.round(n * 10_000) / 10_000;
|
|
488
681
|
}
|
|
682
|
+
function assertAgentCapacity(agentsSpawned, maxAgents) {
|
|
683
|
+
if (agentsSpawned >= maxAgents) {
|
|
684
|
+
throw new Error(`workflow agent cap reached (${maxAgents}); raise --max-agents deliberately if the fan-out is intended`);
|
|
685
|
+
}
|
|
686
|
+
}
|
|
687
|
+
function boundedPolicyReason(value) {
|
|
688
|
+
const normalized = Array.from(value, (character) => {
|
|
689
|
+
const code = character.charCodeAt(0);
|
|
690
|
+
return code < 32 || code === 127 ? " " : character;
|
|
691
|
+
})
|
|
692
|
+
.join("")
|
|
693
|
+
.replace(/\s+/g, " ")
|
|
694
|
+
.trim();
|
|
695
|
+
return normalized.length > 2_000 ? `${normalized.slice(0, 1_999)}…` : normalized;
|
|
696
|
+
}
|
|
697
|
+
async function withTimeout(promise, timeoutMs) {
|
|
698
|
+
if (!Number.isFinite(timeoutMs) || timeoutMs <= 0) {
|
|
699
|
+
throw new Error("policyAskTimeoutMs must be a positive finite number");
|
|
700
|
+
}
|
|
701
|
+
let timer;
|
|
702
|
+
try {
|
|
703
|
+
return await Promise.race([
|
|
704
|
+
promise,
|
|
705
|
+
new Promise((_, reject) => {
|
|
706
|
+
timer = setTimeout(() => reject(new Error(`approval timed out after ${timeoutMs}ms`)), timeoutMs);
|
|
707
|
+
}),
|
|
708
|
+
]);
|
|
709
|
+
}
|
|
710
|
+
finally {
|
|
711
|
+
if (timer)
|
|
712
|
+
clearTimeout(timer);
|
|
713
|
+
}
|
|
714
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { runWorkflow, WorkflowRunError } from "./engine.js";
|
|
2
2
|
export { buildWorkflowProof, createEvidenceRecord, digestResult, normalizeWorkflowMeta, readWorkflowProof, renderWorkflowProof, rollupAcceptance, writeWorkflowProof, } from "./proof.js";
|
|
3
|
-
export type { AcceptanceCriterion, AcceptanceResult, AcceptanceStatus, AcceptanceSummary, AgentOpts, EngineOpts, EvidenceKind, EvidenceSource, EvidenceStatus, HarnessEvidenceCapability, HarnessEvidenceCoverage, HarnessName, ResultDigest, RunReport, Spawner, SpawnRequest, SpawnResult, StageSchema, WorkflowAgentProof, WorkflowContext, WorkflowEvidenceInput, WorkflowEvidenceRecord, WorkflowMeta, WorkflowModule, WorkflowProof, WorkflowProofUnknown, WorkflowRepoEvidence, WorkflowRepoSnapshot, WorkflowRunStatus, } from "./types.js";
|
|
3
|
+
export type { AcceptanceCriterion, AcceptanceResult, AcceptanceStatus, AcceptanceSummary, AgentOpts, EngineOpts, EvidenceKind, EvidenceSource, EvidenceStatus, HarnessEvidenceCapability, HarnessEvidenceCoverage, HarnessName, ResultDigest, RunReport, Spawner, SpawnRequest, SpawnResult, StageSchema, WorkflowAgentProof, WorkflowContext, WorkflowEvidenceInput, WorkflowEvidenceRecord, WorkflowMeta, WorkflowModule, WorkflowPolicyProof, WorkflowProof, WorkflowProofUnknown, WorkflowRepoEvidence, WorkflowRepoSnapshot, WorkflowRunStatus, } from "./types.js";
|
|
4
4
|
export { WORKFLOW_PROOF_SCHEMA_VERSION } from "./types.js";
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,YAAY,EACZ,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,SAAS,EACT,UAAU,EACV,YAAY,EACZ,cAAc,EACd,cAAc,EACd,yBAAyB,EACzB,uBAAuB,EACvB,WAAW,EACX,YAAY,EACZ,SAAS,EACT,OAAO,EACP,YAAY,EACZ,WAAW,EACX,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACrB,sBAAsB,EACtB,YAAY,EACZ,cAAc,EACd,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,YAAY,EACZ,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EACjB,SAAS,EACT,UAAU,EACV,YAAY,EACZ,cAAc,EACd,cAAc,EACd,yBAAyB,EACzB,uBAAuB,EACvB,WAAW,EACX,YAAY,EACZ,SAAS,EACT,OAAO,EACP,YAAY,EACZ,WAAW,EACX,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACrB,sBAAsB,EACtB,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,6BAA6B,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { RepoSnapshot } from "../context/index.js";
|
|
2
|
+
import type { NormalizedPolicy, PolicyDecision, PolicyIsolation, PolicyNetworkAccess } from "../policy/index.js";
|
|
2
3
|
import type { AcceptanceCriterion, AcceptanceResult, AcceptanceSummary, HarnessEvidenceCapability, ResultDigest, WorkflowAgentProof, WorkflowEvidenceInput, WorkflowEvidenceRecord, WorkflowMeta, WorkflowProof } from "./types.js";
|
|
3
4
|
export interface NormalizedWorkflowMeta {
|
|
4
5
|
name: string;
|
|
@@ -19,6 +20,12 @@ export interface BuildWorkflowProofInput {
|
|
|
19
20
|
agents: WorkflowAgentProof[];
|
|
20
21
|
evidence: WorkflowEvidenceRecord[];
|
|
21
22
|
harnessEvidence?: Readonly<Record<string, HarnessEvidenceCapability | undefined>>;
|
|
23
|
+
policy?: {
|
|
24
|
+
config: Readonly<NormalizedPolicy>;
|
|
25
|
+
decisions: readonly PolicyDecision[];
|
|
26
|
+
isolation: PolicyIsolation;
|
|
27
|
+
networkAccess: PolicyNetworkAccess;
|
|
28
|
+
};
|
|
22
29
|
result?: unknown;
|
|
23
30
|
error?: string;
|
|
24
31
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proof.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/proof.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EACV,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,yBAAyB,EAEzB,YAAY,EACZ,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,EACtB,YAAY,
|
|
1
|
+
{"version":3,"file":"proof.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/proof.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EACV,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,mBAAmB,EACpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EACV,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,yBAAyB,EAEzB,YAAY,EACZ,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,EACtB,YAAY,EAEZ,aAAa,EAId,MAAM,YAAY,CAAC;AAepB,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,mBAAmB,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,sBAAsB,CAAC;IAC7B,MAAM,EAAE,WAAW,GAAG,QAAQ,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC7B,QAAQ,EAAE,sBAAsB,EAAE,CAAC;IACnC,eAAe,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,yBAAyB,GAAG,SAAS,CAAC,CAAC,CAAC;IAClF,MAAM,CAAC,EAAE;QACP,MAAM,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC;QACnC,SAAS,EAAE,SAAS,cAAc,EAAE,CAAC;QACrC,SAAS,EAAE,eAAe,CAAC;QAC3B,aAAa,EAAE,mBAAmB,CAAC;KACpC,CAAC;IACF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,YAAY,GAAG,SAAS,EAC9B,YAAY,EAAE,MAAM,GACnB,sBAAsB,CAqCxB;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,KAAK,EAAE,qBAAqB,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,sBAAsB,CA6BzB;AAED,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,mBAAmB,EAAE,EAC/B,QAAQ,EAAE,sBAAsB,EAAE,GACjC;IAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAAC,OAAO,EAAE,iBAAiB,CAAA;CAAE,CAuB9D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,YAAY,CAQjF;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,GAAG,aAAa,CAyChF;AAgCD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI,CAe3E;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,CAkBjF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAoChE"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { createHash, randomUUID } from "node:crypto";
|
|
2
2
|
import { chmodSync, existsSync, mkdirSync, readFileSync, renameSync, statSync, unlinkSync, writeFileSync, } from "node:fs";
|
|
3
3
|
import { dirname, join } from "node:path";
|
|
4
|
+
import { policyDigest } from "../policy/index.js";
|
|
4
5
|
import { WORKFLOW_PROOF_SCHEMA_VERSION } from "./types.js";
|
|
5
6
|
const MAX_ACCEPTANCE_CRITERIA = 50;
|
|
6
7
|
const MAX_EVIDENCE_RECORDS = 200;
|
|
@@ -131,6 +132,7 @@ export function buildWorkflowProof(input) {
|
|
|
131
132
|
acceptance,
|
|
132
133
|
agents,
|
|
133
134
|
evidence: input.evidence,
|
|
135
|
+
policy: input.policy ? buildPolicyProof(input.policy) : undefined,
|
|
134
136
|
repository,
|
|
135
137
|
harnesses,
|
|
136
138
|
unknowns,
|
|
@@ -143,6 +145,33 @@ export function buildWorkflowProof(input) {
|
|
|
143
145
|
},
|
|
144
146
|
};
|
|
145
147
|
}
|
|
148
|
+
function buildPolicyProof(input) {
|
|
149
|
+
const decisions = input.decisions.map((decision) => ({
|
|
150
|
+
...decision,
|
|
151
|
+
reason: clipped(decision.reason, MAX_SUMMARY_CHARS),
|
|
152
|
+
request: {
|
|
153
|
+
...decision.request,
|
|
154
|
+
action: clipped(decision.request.action, MAX_REF_CHARS),
|
|
155
|
+
path: clippedOptional(decision.request.path, MAX_REF_CHARS),
|
|
156
|
+
target: clippedOptional(decision.request.target, MAX_REF_CHARS),
|
|
157
|
+
},
|
|
158
|
+
}));
|
|
159
|
+
return {
|
|
160
|
+
schema_version: input.config.schema_version,
|
|
161
|
+
name: input.config.name,
|
|
162
|
+
sha256: policyDigest(input.config),
|
|
163
|
+
isolation: input.isolation,
|
|
164
|
+
network_access: input.networkAccess,
|
|
165
|
+
config: input.config,
|
|
166
|
+
decisions,
|
|
167
|
+
summary: {
|
|
168
|
+
allowed: decisions.filter((decision) => decision.verdict === "allow").length,
|
|
169
|
+
denied: decisions.filter((decision) => decision.verdict === "deny").length,
|
|
170
|
+
asked: decisions.filter((decision) => decision.initial_verdict === "ask").length,
|
|
171
|
+
total: decisions.length,
|
|
172
|
+
},
|
|
173
|
+
};
|
|
174
|
+
}
|
|
146
175
|
export function writeWorkflowProof(path, proof) {
|
|
147
176
|
const body = `${JSON.stringify(proof, null, 2)}\n`;
|
|
148
177
|
const bytes = Buffer.byteLength(body);
|
|
@@ -198,6 +227,10 @@ export function renderWorkflowProof(proof) {
|
|
|
198
227
|
lines.push(` ${mark} ${criterion.id}: ${criterion.statement}${refs}`);
|
|
199
228
|
}
|
|
200
229
|
lines.push(`evidence: ${proof.evidence.length} record(s); agents: ${proof.agents.length}`);
|
|
230
|
+
if (proof.policy) {
|
|
231
|
+
lines.push(`policy: ${proof.policy.name}; ${proof.policy.summary.allowed} allowed, ` +
|
|
232
|
+
`${proof.policy.summary.denied} denied, ${proof.policy.summary.asked} asked`);
|
|
233
|
+
}
|
|
201
234
|
const repo = proof.repository;
|
|
202
235
|
const drift = repo.drift;
|
|
203
236
|
lines.push(`repository: branch ${repo.before.branch ?? "unknown"} -> ${repo.after.branch ?? "unknown"}; ` +
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* Design record: decision 0015 (portable coordination-aware workflows).
|
|
8
8
|
*/
|
|
9
|
+
import type { DispatchCostEstimator, ExternalMutationRequest, NormalizedPolicy, PolicyAskResolver, PolicyDecision, PolicyIsolation, PolicyNetworkAccess, PolicySpec } from "../policy/index.js";
|
|
9
10
|
import type { BillingMode, BillingProber } from "./billing.js";
|
|
10
11
|
export declare const WORKFLOW_PROOF_SCHEMA_VERSION: 1;
|
|
11
12
|
export type EvidenceKind = "test" | "command" | "artifact" | "change" | "review" | "observation";
|
|
@@ -131,6 +132,7 @@ export interface WorkflowProof {
|
|
|
131
132
|
};
|
|
132
133
|
agents: WorkflowAgentProof[];
|
|
133
134
|
evidence: WorkflowEvidenceRecord[];
|
|
135
|
+
policy?: WorkflowPolicyProof;
|
|
134
136
|
repository: WorkflowRepoEvidence;
|
|
135
137
|
harnesses: HarnessEvidenceCoverage[];
|
|
136
138
|
unknowns: WorkflowProofUnknown[];
|
|
@@ -142,6 +144,21 @@ export interface WorkflowProof {
|
|
|
142
144
|
};
|
|
143
145
|
};
|
|
144
146
|
}
|
|
147
|
+
export interface WorkflowPolicyProof {
|
|
148
|
+
schema_version: 1;
|
|
149
|
+
name: string;
|
|
150
|
+
sha256: string;
|
|
151
|
+
isolation: PolicyIsolation;
|
|
152
|
+
network_access: PolicyNetworkAccess;
|
|
153
|
+
config: NormalizedPolicy;
|
|
154
|
+
decisions: PolicyDecision[];
|
|
155
|
+
summary: {
|
|
156
|
+
allowed: number;
|
|
157
|
+
denied: number;
|
|
158
|
+
asked: number;
|
|
159
|
+
total: number;
|
|
160
|
+
};
|
|
161
|
+
}
|
|
145
162
|
export interface HarnessEvidenceCapability {
|
|
146
163
|
toolEvidence: HarnessEvidenceCoverage["tool_evidence"];
|
|
147
164
|
}
|
|
@@ -226,6 +243,8 @@ export interface WorkflowContext {
|
|
|
226
243
|
log: (message: string) => void;
|
|
227
244
|
/** Attach a bounded, sourced receipt to the run and optional acceptance criteria. */
|
|
228
245
|
evidence: (input: WorkflowEvidenceInput) => string;
|
|
246
|
+
/** Authorize one host-mediated external mutation before performing it. */
|
|
247
|
+
authorize: (input: ExternalMutationRequest) => Promise<PolicyDecision>;
|
|
229
248
|
}
|
|
230
249
|
export interface WorkflowMeta {
|
|
231
250
|
name: string;
|
|
@@ -272,6 +291,18 @@ export interface EngineOpts {
|
|
|
272
291
|
/** Capability claims used to state whether adapter-native tool evidence was
|
|
273
292
|
* available. Missing claims remain unknown. */
|
|
274
293
|
harnessEvidence?: Readonly<Record<HarnessName, HarnessEvidenceCapability | undefined>>;
|
|
294
|
+
/** Immutable host policy. Workflow scripts and model prompts cannot replace it. */
|
|
295
|
+
policy?: PolicySpec | NormalizedPolicy;
|
|
296
|
+
/** Host callback for ASK. Missing, invalid, throwing, or timed-out resolution denies. */
|
|
297
|
+
resolvePolicyAsk?: PolicyAskResolver;
|
|
298
|
+
/** Host-owned cost projection. Required to allow budgeted dispatches with known pricing. */
|
|
299
|
+
estimateDispatchCost?: DispatchCostEstimator;
|
|
300
|
+
/** Maximum wait for an ASK resolver (default 60 seconds). */
|
|
301
|
+
policyAskTimeoutMs?: number;
|
|
302
|
+
/** Execution boundary created by the host (default shared). */
|
|
303
|
+
isolation?: PolicyIsolation;
|
|
304
|
+
/** Network state of spawned harness subprocesses (default unknown). */
|
|
305
|
+
networkAccess?: PolicyNetworkAccess;
|
|
275
306
|
}
|
|
276
307
|
export interface RunReport {
|
|
277
308
|
runId: string;
|
|
@@ -295,5 +326,7 @@ export interface RunReport {
|
|
|
295
326
|
harness: HarnessName;
|
|
296
327
|
mode: BillingMode;
|
|
297
328
|
}>;
|
|
329
|
+
/** Policy verdict totals when the host supplied a policy. */
|
|
330
|
+
policy?: WorkflowPolicyProof["summary"];
|
|
298
331
|
}
|
|
299
332
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/workflow/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,qBAAqB,EACrB,uBAAuB,EACvB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,UAAU,EACX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE/D,eAAO,MAAM,6BAA6B,EAAG,CAAU,CAAC;AAExD,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,aAAa,CAAC;AACjG,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;AAC1E,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,QAAQ,CAAC;AACnD,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,aAAa,GAAG,SAAS,CAAC;AACvE,MAAM,MAAM,iBAAiB,GAAG,WAAW,GAAG,QAAQ,CAAC;AAEvD,MAAM,WAAW,mBAAmB;IAClC,0EAA0E;IAC1E,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,cAAc,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,gBAAiB,SAAQ,mBAAmB;IAC3D,MAAM,EAAE,gBAAgB,CAAC;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,0EAA0E;IAC1E,OAAO,EAAE,cAAc,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,WAAW,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,QAAQ,CAAC;IACjB,MAAM,EAAE,oBAAoB,CAAC;IAC7B,KAAK,EAAE,oBAAoB,CAAC;IAC5B,KAAK,EAAE;QACL,cAAc,EAAE,OAAO,CAAC;QACxB,YAAY,EAAE,OAAO,CAAC;QACtB,iBAAiB,EAAE,MAAM,EAAE,CAAC;QAC5B,mBAAmB,EAAE,MAAM,EAAE,CAAC;QAC9B,oBAAoB,EAAE,MAAM,EAAE,CAAC;QAC/B,kFAAkF;QAClF,UAAU,EAAE,OAAO,CAAC;QACpB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,WAAW,CAAC;IACrB,aAAa,EAAE;QACb,OAAO,EAAE,WAAW,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,CAAC;QAC7D,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,QAAQ,EAAE;QACR,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EACA,2BAA2B,GAC3B,iCAAiC,GACjC,uBAAuB,GACvB,0BAA0B,GAC1B,6BAA6B,CAAC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,OAAO,6BAA6B,CAAC;IACrD,GAAG,EAAE;QACH,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,iBAAiB,CAAC;QAC1B,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,YAAY,CAAC;KACvB,CAAC;IACF,UAAU,EAAE;QACV,QAAQ,EAAE,gBAAgB,EAAE,CAAC;QAC7B,OAAO,EAAE,iBAAiB,CAAC;KAC5B,CAAC;IACF,MAAM,EAAE,kBAAkB,EAAE,CAAC;IAC7B,QAAQ,EAAE,sBAAsB,EAAE,CAAC;IACnC,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,UAAU,EAAE,oBAAoB,CAAC;IACjC,SAAS,EAAE,uBAAuB,EAAE,CAAC;IACrC,QAAQ,EAAE,oBAAoB,EAAE,CAAC;IACjC,SAAS,EAAE;QACT,OAAO,EAAE;YACP,IAAI,EAAE,eAAe,CAAC;YACtB,MAAM,EAAE,MAAM,CAAC;YACf,KAAK,EAAE,MAAM,CAAC;SACf,CAAC;KACH,CAAC;CACH;AAED,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,CAAC,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,eAAe,CAAC;IAC3B,cAAc,EAAE,mBAAmB,CAAC;IACpC,MAAM,EAAE,gBAAgB,CAAC;IACzB,SAAS,EAAE,cAAc,EAAE,CAAC;IAC5B,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED,MAAM,WAAW,yBAAyB;IACxC,YAAY,EAAE,uBAAuB,CAAC,eAAe,CAAC,CAAC;CACxD;AAED,sEAAsE;AACtE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC3D,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACzC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,iBAAiB;IACjB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,qDAAqD;IACrD,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,SAAS;IACxB;;8EAE0E;IAC1E,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,iFAAiF;IACjF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;uDACmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;sDACkD;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;kBAEc;IACd,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAED;;kCAEkC;AAClC,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC;AAEjC,yDAAyD;AACzD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ;2EACuE;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;8DAC0D;IAC1D,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;8EAC8E;AAC9E,MAAM,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,YAAY,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;AAElE;+EAC+E;AAC/E,MAAM,WAAW,eAAe;IAC9B,6EAA6E;IAC7E,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9D,8EAA8E;IAC9E,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IAC3E,+DAA+D;IAC/D,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,2CAA2C;IAC3C,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,qFAAqF;IACrF,QAAQ,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,MAAM,CAAC;IACnD,0EAA0E;IAC1E,SAAS,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;CACxE;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,mBAAmB,EAAE,CAAC;CACpC;AAED,oFAAoF;AACpF,MAAM,WAAW,cAAc;IAC7B,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACrD;AAED,MAAM,WAAW,UAAU;IACzB,0DAA0D;IAC1D,SAAS,EAAE,MAAM,CAAC;IAClB;iDAC6C;IAC7C,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC;IAC7D,kFAAkF;IAClF,cAAc,CAAC,EAAE,WAAW,CAAC;IAC7B;;6EAEyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gEAAgE;IAChE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B;;+BAE2B;IAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;iCAG6B;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,yEAAyE;IACzE,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B;mDAC+C;IAC/C,eAAe,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,yBAAyB,GAAG,SAAS,CAAC,CAAC,CAAC;IACvF,mFAAmF;IACnF,MAAM,CAAC,EAAE,UAAU,GAAG,gBAAgB,CAAC;IACvC,yFAAyF;IACzF,gBAAgB,CAAC,EAAE,iBAAiB,CAAC;IACrC,4FAA4F;IAC5F,oBAAoB,CAAC,EAAE,qBAAqB,CAAC;IAC7C,6DAA6D;IAC7D,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,+DAA+D;IAC/D,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,uEAAuE;IACvE,aAAa,CAAC,EAAE,mBAAmB,CAAC;CACrC;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,iDAAiD;IACjD,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,4EAA4E;IAC5E,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,iBAAiB,CAAC;IAC9B;;gFAE4E;IAC5E,6BAA6B,EAAE,MAAM,CAAC;IACtC,6EAA6E;IAC7E,OAAO,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,WAAW,CAAC;QAAC,IAAI,EAAE,WAAW,CAAA;KAAE,CAAC,CAAC;IAC5D,6DAA6D;IAC7D,MAAM,CAAC,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAC;CACzC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "harnery",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.0",
|
|
4
4
|
"description": "Multi-agent coordination for AI coding agents - Claude Code, Cursor, and Codex.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Ryan Kelly",
|
|
@@ -67,6 +67,11 @@
|
|
|
67
67
|
"types": "./dist/core/workflow/index.d.ts",
|
|
68
68
|
"import": "./dist/core/workflow/index.js"
|
|
69
69
|
},
|
|
70
|
+
"./core/policy": {
|
|
71
|
+
"bun": "./src/core/policy/index.ts",
|
|
72
|
+
"types": "./dist/core/policy/index.d.ts",
|
|
73
|
+
"import": "./dist/core/policy/index.js"
|
|
74
|
+
},
|
|
70
75
|
"./lib/agent-browser": {
|
|
71
76
|
"bun": "./src/lib/agent-browser/index.ts",
|
|
72
77
|
"types": "./dist/lib/agent-browser/index.d.ts",
|
package/src/commander.ts
CHANGED
|
@@ -42,6 +42,7 @@ import { registerGrepCommand } from "./commands/grep.ts";
|
|
|
42
42
|
import { registerHarnessCommand } from "./commands/harness.ts";
|
|
43
43
|
import { registerInitCommand } from "./commands/init.ts";
|
|
44
44
|
import { registerOutlineCommand } from "./commands/outline.ts";
|
|
45
|
+
import { registerPolicyCommand } from "./commands/policy.ts";
|
|
45
46
|
import { registerPresenceCommand } from "./commands/presence.ts";
|
|
46
47
|
import { registerReadCommand } from "./commands/read.ts";
|
|
47
48
|
import { registerRelayCommand } from "./commands/relay.ts";
|
|
@@ -264,6 +265,7 @@ export function createHarneryProgram(opts: HarneryContextOpts = {}): Command {
|
|
|
264
265
|
registerEditBatchCommand(program, emit);
|
|
265
266
|
registerGrepCommand(program, emit, opts.context);
|
|
266
267
|
registerHarnessCommand(program, emit);
|
|
268
|
+
registerPolicyCommand(program, emit);
|
|
267
269
|
registerCookiesCommand(program, emit);
|
|
268
270
|
registerFetchCommand(program, emit, opts.context);
|
|
269
271
|
registerReadCommand(program, emit);
|