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.
Files changed (41) hide show
  1. package/README.md +1 -1
  2. package/dist/commander.d.ts.map +1 -1
  3. package/dist/commander.js +2 -0
  4. package/dist/commands/policy.d.ts +6 -0
  5. package/dist/commands/policy.d.ts.map +1 -0
  6. package/dist/commands/policy.js +42 -0
  7. package/dist/commands/workflow.d.ts.map +1 -1
  8. package/dist/commands/workflow.js +18 -1
  9. package/dist/core/policy/evaluate.d.ts +14 -0
  10. package/dist/core/policy/evaluate.d.ts.map +1 -0
  11. package/dist/core/policy/evaluate.js +238 -0
  12. package/dist/core/policy/file.d.ts +3 -0
  13. package/dist/core/policy/file.d.ts.map +1 -0
  14. package/dist/core/policy/file.js +20 -0
  15. package/dist/core/policy/index.d.ts +5 -0
  16. package/dist/core/policy/index.d.ts.map +1 -0
  17. package/dist/core/policy/index.js +3 -0
  18. package/dist/core/policy/types.d.ts +91 -0
  19. package/dist/core/policy/types.d.ts.map +1 -0
  20. package/dist/core/policy/types.js +1 -0
  21. package/dist/core/workflow/engine.d.ts.map +1 -1
  22. package/dist/core/workflow/engine.js +261 -35
  23. package/dist/core/workflow/index.d.ts +1 -1
  24. package/dist/core/workflow/index.d.ts.map +1 -1
  25. package/dist/core/workflow/proof.d.ts +7 -0
  26. package/dist/core/workflow/proof.d.ts.map +1 -1
  27. package/dist/core/workflow/proof.js +33 -0
  28. package/dist/core/workflow/types.d.ts +33 -0
  29. package/dist/core/workflow/types.d.ts.map +1 -1
  30. package/package.json +6 -1
  31. package/src/commander.ts +2 -0
  32. package/src/commands/policy.ts +50 -0
  33. package/src/commands/workflow.ts +29 -1
  34. package/src/core/policy/evaluate.ts +311 -0
  35. package/src/core/policy/file.ts +20 -0
  36. package/src/core/policy/index.ts +26 -0
  37. package/src/core/policy/types.ts +107 -0
  38. package/src/core/workflow/engine.ts +283 -41
  39. package/src/core/workflow/index.ts +1 -0
  40. package/src/core/workflow/proof.ts +51 -0
  41. 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
- // Billing safeguard: on a harness's FIRST spawn this run, classify which
162
- // auth its children will use and refuse the silent-override state (an
163
- // exported API key shadowing a stored subscription login) unless the
164
- // caller explicitly opted into API billing. Cached agents never reach
165
- // this — no spawn, no billing.
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
- mode: opts.subscriptionOnly ? "subscription" : probe.mode,
172
- api_key_source: probe.apiKeySource,
173
- login: probe.login,
174
- subscription_only: Boolean(opts.subscriptionOnly),
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
- if (opts.subscriptionOnly) {
177
- if (probe.login === "absent") {
178
- throw new Error(`subscription-only: no stored login detected for ${harness}; ` +
179
- `log the harness CLI in (or drop --subscription-only for a key-only host)`);
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
- else if (probe.mode === "api-key-override" && !opts.allowApiBilling) {
184
- throw new Error(`${probe.apiKeySource} is set AND a stored ${harness} login exists — the key silently ` +
185
- `overrides your subscription auth, so children would bill per-token API rates. ` +
186
- `Either unset ${probe.apiKeySource}, run with --subscription-only to scrub it from ` +
187
- `child envs, or pass --allow-api-billing if API billing is intended`);
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
- else if (probe.mode === "api-key") {
190
- log(`[billing] ${harness}: API-key billing (${probe.apiKeySource}; no stored login detected) — ` +
191
- `children bill per-token rates`);
305
+ catch (error) {
306
+ agentProof.error = error.message;
307
+ throw error;
192
308
  }
193
- else if (probe.mode === "api-key-override") {
194
- log(`[billing] ${harness}: API-key billing (--allow-api-billing; key overrides stored login)`);
309
+ }
310
+ else {
311
+ try {
312
+ assertAgentCapacity(agentsSpawned, maxAgents);
195
313
  }
196
- else {
197
- log(`[billing] ${harness}: subscription login`);
314
+ catch (error) {
315
+ agentProof.error = error.message;
316
+ throw error;
198
317
  }
199
318
  }
200
- if (agentsSpawned >= maxAgents) {
201
- agentProof.error = `workflow agent cap reached (${maxAgents})`;
202
- throw new Error(`workflow agent cap reached (${maxAgents}); raise --max-agents deliberately if the fan-out is intended`);
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
- agentsSpawned++;
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 ctx = { agent, parallel, stage, log, evidence };
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,EACZ,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,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,CAwChF;AAED,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,CA8BhE"}
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":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "harnery",
3
- "version": "0.11.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);