@zhivex-ai/harness 1.3.0-rc.3 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/README.md +12 -10
  3. package/SECURITY.md +1 -1
  4. package/SUPPORT.md +4 -4
  5. package/contracts/engine-api.json +334 -0
  6. package/contracts/public-api.json +267 -1
  7. package/contracts/stable-api-signatures.json +43 -43
  8. package/dist/acp-cli.js +54 -18
  9. package/dist/approvals/approval-history.d.ts +22 -0
  10. package/dist/approvals/explicit-review.d.ts +24 -0
  11. package/dist/approvals/host-policy-identity.d.ts +3 -0
  12. package/dist/cli/arguments.d.ts +6 -2
  13. package/dist/cli/checkpoints.d.ts +230 -0
  14. package/dist/cli/cli-profiles.d.ts +4 -2
  15. package/dist/cli/governance-report.d.ts +5 -0
  16. package/dist/cli/policy-decisions.d.ts +9 -0
  17. package/dist/cli/policy.d.ts +5 -0
  18. package/dist/cli/presentation.d.ts +3 -1
  19. package/dist/cli/terminal/terminal-ui.d.ts +4 -0
  20. package/dist/{cli-entry-xmf48p6a.js → cli-entry-1gfg3brj.js} +14921 -10692
  21. package/dist/cli-entry-bx3vjw7h.js +656 -0
  22. package/dist/{index-fvca1xea.js → cli-entry-d5788aay.js} +339 -58
  23. package/dist/{cli-qgwvtk0w.js → cli-etsmtst3.js} +918 -2222
  24. package/dist/cli.js +3 -5
  25. package/dist/client/acp-mcp-admission.d.ts +32 -0
  26. package/dist/client/acp-mcp-host.d.ts +19 -0
  27. package/dist/client/acp-mcp-session.d.ts +14 -0
  28. package/dist/client/acp-stdio.d.ts +2 -0
  29. package/dist/client/acp.d.ts +4 -1
  30. package/dist/client/adapter.d.ts +13 -1
  31. package/dist/client/json-contracts.d.ts +107 -4
  32. package/dist/client/local-service.d.ts +2 -0
  33. package/dist/client/protocol.d.ts +127 -1
  34. package/dist/client/service-events.d.ts +4 -0
  35. package/dist/compat/cli-options.d.ts +13 -1
  36. package/dist/compat/code-support.js +23 -87
  37. package/dist/{config-q32jm1e6.js → config-c002f06f.js} +1 -1
  38. package/dist/{config-6gtpxvjv.js → config-j3jga5wh.js} +3 -1
  39. package/dist/context/adaptive-compaction.d.ts +1 -0
  40. package/dist/context/compaction.d.ts +1 -1
  41. package/dist/context/request-measurements.d.ts +17 -0
  42. package/dist/context/request-projection.d.ts +10 -0
  43. package/dist/context/task-memory.d.ts +1 -0
  44. package/dist/engine/acp.d.ts +2 -0
  45. package/dist/engine/acp.js +197 -1
  46. package/dist/engine/client.js +11 -4
  47. package/dist/engine/desktop-providers-v1.d.ts +4 -0
  48. package/dist/engine/desktop-providers-v1.js +18 -0
  49. package/dist/engine/desktop-state-v1.d.ts +10 -0
  50. package/dist/engine/desktop-state-v1.js +168 -0
  51. package/dist/engine/index.d.ts +12 -0
  52. package/dist/engine/index.js +571 -71
  53. package/dist/engine/mcp-stdio-v1.d.ts +11 -0
  54. package/dist/engine/mcp-stdio-v1.js +108 -0
  55. package/dist/engine/models.d.ts +3 -0
  56. package/dist/engine/models.js +894 -0
  57. package/dist/engine/protocol.d.ts +1 -0
  58. package/dist/engine/protocol.js +24 -0
  59. package/dist/engine/service.js +12 -5
  60. package/dist/execution/acceptance-snapshot.d.ts +2 -0
  61. package/dist/execution/execution-environment.d.ts +10 -0
  62. package/dist/execution/mcp-oci-channel.d.ts +11 -0
  63. package/dist/execution/mcp-oci-server.d.ts +38 -0
  64. package/dist/execution/mcp-oci-workspace.d.ts +23 -0
  65. package/dist/execution/mcp-resource-recovery.d.ts +19 -0
  66. package/dist/execution/mcp-workspace-snapshot.d.ts +20 -0
  67. package/dist/hostile-repository-demo.js +3169 -1163
  68. package/dist/{index-f4sb0e2q.js → index-2jrdcj6b.js} +17 -2
  69. package/dist/{index-77h9qr5h.js → index-3ah1f369.js} +40 -10
  70. package/dist/{index-pgqz45fj.js → index-42gp2hy8.js} +197 -1091
  71. package/dist/{index-41fkzt91.js → index-4jw3tvy8.js} +10 -2
  72. package/dist/index-6m08wvab.js +1768 -0
  73. package/dist/index-8705zxpr.js +145 -0
  74. package/dist/{index-d0wrghff.js → index-8vm2m34s.js} +225 -1416
  75. package/dist/index-8zzhggxv.js +477 -0
  76. package/dist/index-a97bezbz.js +1073 -0
  77. package/dist/index-azmwjp95.js +1004 -0
  78. package/dist/{cli-entry-0mmeag20.js → index-gq9xagx2.js} +122 -836
  79. package/dist/index-h0mqx2ed.js +1373 -0
  80. package/dist/index-hnaxfpb5.js +5589 -0
  81. package/dist/{index-2aymdsqc.js → index-qfpz5y2v.js} +24 -0
  82. package/dist/{index-kfgt9yqq.js → index-w2sj0wkw.js} +33 -10
  83. package/dist/index-wg1sd3at.js +80 -0
  84. package/dist/index-xqxeypt5.js +888 -0
  85. package/dist/index-yb239ghk.js +961 -0
  86. package/dist/index-z0qxmkm2.js +3389 -0
  87. package/dist/index.js +85 -72
  88. package/dist/integrations/mcp-host-session.d.ts +26 -0
  89. package/dist/integrations/mcp-stdio-admission.d.ts +54 -0
  90. package/dist/integrations/mcp-stdio-client.d.ts +44 -0
  91. package/dist/integrations/mcp-stdio-framing.d.ts +18 -0
  92. package/dist/integrations/mcp-stdio-launch.d.ts +20 -0
  93. package/dist/integrations/mcp-stdio-session.d.ts +7 -0
  94. package/dist/integrations/mcp-stdio-tools.d.ts +12 -0
  95. package/dist/internal/desktop/catalog.d.ts +2 -0
  96. package/dist/internal/desktop/persistence.d.ts +2 -3
  97. package/dist/internal/desktop/providers.d.ts +1 -0
  98. package/dist/models/catalog.d.ts +2 -0
  99. package/dist/persistence/governance-context.d.ts +126 -0
  100. package/dist/persistence/governance-report.d.ts +299 -0
  101. package/dist/persistence/host-database-backup.d.ts +28 -0
  102. package/dist/persistence/mcp-execution-journal.d.ts +19 -0
  103. package/dist/persistence/mcp-reconciliation.d.ts +33 -0
  104. package/dist/persistence/mcp-resource-journal.d.ts +54 -0
  105. package/dist/persistence/workspace-checkpoints.d.ts +138 -0
  106. package/dist/providers/anthropic-continuation.d.ts +5 -0
  107. package/dist/providers/providers.d.ts +1 -1
  108. package/dist/providers/vertex-auth.d.ts +27 -0
  109. package/dist/runtime/delegation-contracts.d.ts +9 -0
  110. package/dist/runtime/delegation-correction.d.ts +9 -0
  111. package/dist/runtime/delegation-result.d.ts +73 -0
  112. package/dist/runtime/error-diagnostics.d.ts +86 -0
  113. package/dist/runtime/harness.d.ts +11 -1
  114. package/dist/runtime/policy-decisions.d.ts +66 -0
  115. package/dist/runtime/policy-inspection.d.ts +52 -0
  116. package/dist/runtime/provider-diagnostics.d.ts +1 -0
  117. package/dist/runtime/runtime-instructions.d.ts +8 -0
  118. package/dist/runtime/task-acceptance-checks.d.ts +103 -0
  119. package/dist/runtime/task-acceptance-delivery.d.ts +107 -0
  120. package/dist/runtime/task-acceptance-host.d.ts +20 -0
  121. package/dist/runtime/task-acceptance-record.d.ts +107 -0
  122. package/dist/runtime/task-acceptance-validation.d.ts +25 -0
  123. package/dist/runtime/task-acceptance.d.ts +47 -0
  124. package/dist/runtime/time-to-safe-fix.d.ts +83 -0
  125. package/dist/runtime/tool-policy-file.d.ts +23 -0
  126. package/dist/runtime/tool-policy-paths.d.ts +5 -0
  127. package/dist/runtime/tool-policy.d.ts +6 -0
  128. package/dist/service-cli.js +14 -7
  129. package/dist/{service-client-cli-gs78wrxe.js → service-client-cli-3365rfav.js} +307 -248
  130. package/dist/verify-historical-migrations.js +3134 -1129
  131. package/dist/workspace/path-policy.d.ts +4 -0
  132. package/dist/zhx.js +3 -5
  133. package/docs/ACP.md +14 -2
  134. package/docs/ANTHROPIC.md +33 -0
  135. package/docs/CLI.md +132 -0
  136. package/docs/CLIENT_PROTOCOL.md +45 -0
  137. package/docs/CODE_RELEASE.md +35 -18
  138. package/docs/ENGINE_API.md +216 -7
  139. package/docs/EXTENSIBILITY.md +46 -3
  140. package/docs/FIRST_USE.md +6 -6
  141. package/docs/LOCAL_SERVICE.md +13 -0
  142. package/docs/MCP_STDIO.md +20 -0
  143. package/docs/README.md +1 -0
  144. package/docs/STABILITY.md +4 -2
  145. package/docs/SUPPORT_MATRIX.md +1 -1
  146. package/docs/TOOL_POLICY.md +81 -0
  147. package/docs/VERTEX.md +50 -0
  148. package/docs/adr/0002-isolated-mcp-stdio.md +135 -0
  149. package/docs/fixtures/mcp-stdio-contract-v1.json +189 -0
  150. package/docs/support-matrix.json +2 -0
  151. package/evaluations/representative-assembly-matrix.json +46 -1
  152. package/evaluations/task-acceptance-routes.json +7 -0
  153. package/examples/README.md +3 -3
  154. package/package.json +43 -12
  155. package/dist/cli-entry-64pdp3k5.js +0 -17
  156. package/dist/cli-entry-7h9savv5.js +0 -375
  157. package/dist/index-5wjwe91x.js +0 -9434
@@ -8,13 +8,16 @@ import {
8
8
  formatAppliedFiles,
9
9
  formatConsoleHelp,
10
10
  formatConsoleWelcome,
11
+ formatPolicyDecision,
12
+ harnessPolicyDecisionEventSchema,
11
13
  navigateConsole,
14
+ printPolicyInspection,
12
15
  sanitizeTerminalText,
13
16
  serializeStreamResult
14
- } from "./cli-entry-xmf48p6a.js";
17
+ } from "./cli-entry-1gfg3brj.js";
15
18
  import {
16
19
  HARNESS_VERSION
17
- } from "./cli-entry-64pdp3k5.js";
20
+ } from "./cli-entry-bx3vjw7h.js";
18
21
  import {
19
22
  HARNESS_ERROR_CODES,
20
23
  HARNESS_ERROR_SCHEMA_VERSION,
@@ -22,7 +25,7 @@ import {
22
25
  HarnessStateConflictError,
23
26
  PROVIDERS,
24
27
  reasoningEffortSchema
25
- } from "./cli-entry-0mmeag20.js";
28
+ } from "./cli-entry-d5788aay.js";
26
29
  import {
27
30
  __require
28
31
  } from "./cli-entry-1bx83sw4.js";
@@ -35,7 +38,7 @@ import { setTimeout as delay } from "node:timers/promises";
35
38
  import { createServer, request as httpRequest } from "node:http";
36
39
  import { mkdir, lstat, realpath, open, unlink, chmod } from "node:fs/promises";
37
40
  import path from "node:path";
38
- import { z as z5 } from "zod";
41
+ import { z as z4 } from "zod";
39
42
 
40
43
  // src/client/protocol.ts
41
44
  import { z } from "zod";
@@ -46,12 +49,36 @@ var scoped = { projectId: id };
46
49
  var session = { ...scoped, sessionId: id };
47
50
  var run = { ...session, runId: id };
48
51
  var mutation = { idempotencyKey: id };
52
+ var checkpoint = { ...session, checkpointId: z.string().uuid() };
53
+ var restore = { ...session, operationId: z.string().uuid() };
54
+ var fileDigest = z.string().regex(/^sha256:[a-f0-9]{64}$/);
49
55
  var harnessClientCommandSchema = z.discriminatedUnion("method", [
50
56
  z.object({ method: z.literal("project.get"), ...scoped }).strict(),
57
+ z.object({ method: z.literal("policy.get"), ...scoped }).strict(),
51
58
  z.object({ method: z.literal("session.list"), ...scoped, search: z.string().max(256).optional() }).strict(),
52
59
  z.object({ method: z.literal("session.create"), ...scoped, ...mutation, title: z.string().max(256).optional() }).strict(),
53
60
  z.object({ method: z.literal("session.get"), ...session }).strict(),
54
61
  z.object({ method: z.literal("session.rename"), ...session, ...mutation, expectedRevision: revision, title: z.string().max(256) }).strict(),
62
+ z.object({ method: z.literal("checkpoint.list"), ...session }).strict(),
63
+ z.object({ method: z.literal("checkpoint.inspect"), ...checkpoint }).strict(),
64
+ z.object({
65
+ method: z.literal("checkpoint.capture"),
66
+ ...session,
67
+ ...mutation,
68
+ expectedRevision: revision,
69
+ turnId: id,
70
+ paths: z.array(z.string().min(1).max(1024)).min(1).max(20)
71
+ }).strict(),
72
+ z.object({
73
+ method: z.literal("restore.prepare"),
74
+ ...checkpoint,
75
+ ...mutation,
76
+ expectedRevision: revision,
77
+ expected: z.record(z.string().min(1).max(1024), fileDigest).refine((value) => Object.keys(value).length >= 1 && Object.keys(value).length <= 20)
78
+ }).strict(),
79
+ z.object({ method: z.literal("restore.get"), ...restore }).strict(),
80
+ z.object({ method: z.literal("restore.apply"), ...restore, ...mutation, expectedRevision: revision, reviewedProposalId: fileDigest }).strict(),
81
+ z.object({ method: z.literal("restore.recoverFork"), ...restore, ...mutation, expectedRevision: revision, forkSessionId: id }).strict(),
55
82
  z.object({ method: z.literal("run.start"), ...session, ...mutation, expectedRevision: revision, prompt: z.string().min(1).max(64 * 1024) }).strict(),
56
83
  z.object({ method: z.literal("run.get"), ...run, includeReview: z.boolean().optional(), includeDiff: z.boolean().optional(), decisionOffset: z.number().int().min(0).max(512).optional() }).strict(),
57
84
  z.object({
@@ -70,26 +97,19 @@ var harnessClientRequestSchema = z.object({
70
97
  command: harnessClientCommandSchema
71
98
  }).strict();
72
99
 
73
- // src/approvals/approval-history.ts
74
- import { z as z2 } from "zod";
75
- var rowSchema = z2.object({ approvalId: z2.string().max(256), digest: z2.string().regex(/^[a-f0-9]{64}$/), toolCallId: z2.string().max(256).optional(), name: z2.string().max(256), inputDigest: z2.string().regex(/^[a-f0-9]{64}$/).optional(), approved: z2.boolean(), decidedAt: z2.number().int().nonnegative(), reviewedRevision: z2.number().int().nonnegative() }).strict();
76
-
77
100
  // src/approvals/approval-diff.ts
78
- import { z as z3 } from "zod";
79
- var sha = z3.string().regex(/^sha256:[a-f0-9]{64}$/);
80
- var file = z3.object({ path: z3.string().max(1024), expectedDigest: sha.nullable(), before: z3.string().nullable(), after: z3.string().nullable(), afterDigest: sha.nullable(), beforeMode: z3.number().int().optional(), afterMode: z3.number().int().optional(), operation: z3.enum(["create", "update", "delete"]).optional() }).strict();
81
- var archive = z3.object({ approvalId: z3.string().max(256), digest: z3.string().regex(/^[a-f0-9]{64}$/), proposalId: sha, files: z3.array(file).min(1).max(50) }).strict();
82
- var archives = z3.array(archive).max(512);
101
+ import { z as z2 } from "zod";
102
+ var sha = z2.string().regex(/^sha256:[a-f0-9]{64}$/);
103
+ var file = z2.object({ path: z2.string().max(1024), expectedDigest: sha.nullable(), before: z2.string().nullable(), after: z2.string().nullable(), afterDigest: sha.nullable(), beforeMode: z2.number().int().optional(), afterMode: z2.number().int().optional(), operation: z2.enum(["create", "update", "delete"]).optional() }).strict();
104
+ var archive = z2.object({ approvalId: z2.string().max(256), digest: z2.string().regex(/^[a-f0-9]{64}$/), proposalId: sha, files: z2.array(file).min(1).max(50) }).strict();
105
+ var archives = z2.array(archive).max(512);
83
106
  var maxBytes = 2 * 1024 * 1024;
84
107
 
85
108
  // src/approvals/approval-preview.ts
86
- import { z as z4 } from "zod";
87
-
88
- // src/client/service-events.ts
89
- import { createRedactionPolicy } from "@zhivex-ai/agents";
109
+ import { z as z3 } from "zod";
90
110
 
91
111
  // src/client/local-service.ts
92
- var harnessLocalCredentialsSchema = z5.object({ schemaVersion: z5.literal(1), socketPath: z5.string().min(1), token: z5.string().regex(/^[a-f0-9]{64}$/) }).strict();
112
+ var harnessLocalCredentialsSchema = z4.object({ schemaVersion: z4.literal(1), socketPath: z4.string().min(1), token: z4.string().regex(/^[a-f0-9]{64}$/) }).strict();
93
113
  var readHarnessLocalCredentials = async (filename) => {
94
114
  const { constants } = await import("node:fs");
95
115
  const file2 = await open(filename, constants.O_RDONLY | constants.O_NOFOLLOW);
@@ -141,26 +161,26 @@ var requestHarnessLocalService = async (credentials, endpoint, payload) => {
141
161
  };
142
162
 
143
163
  // src/client/json-contracts.ts
144
- import { z as z6 } from "zod";
145
- var observationalDocument = (shape) => z6.object(shape).passthrough();
146
- var jsonBase = { schemaVersion: z6.literal(CLI_JSON_SCHEMA_VERSION) };
164
+ import { z as z5 } from "zod";
165
+ var observationalDocument = (shape) => z5.object(shape).passthrough();
166
+ var jsonBase = { schemaVersion: z5.literal(CLI_JSON_SCHEMA_VERSION) };
147
167
  var eventBase = {
148
- schemaVersion: z6.literal(CLI_EVENT_SCHEMA_VERSION),
149
- sequence: z6.number().int().nonnegative()
168
+ schemaVersion: z5.literal(CLI_EVENT_SCHEMA_VERSION),
169
+ sequence: z5.number().int().nonnegative()
150
170
  };
151
- var nonnegativeInteger = z6.number().int().nonnegative();
152
- var digestSchema = z6.string().regex(/^sha256:[a-f0-9]{64}$/);
171
+ var nonnegativeInteger = z5.number().int().nonnegative();
172
+ var digestSchema = z5.string().regex(/^sha256:[a-f0-9]{64}$/);
153
173
  var jsonObjectSchema = observationalDocument({});
154
174
  var scopeSchema = observationalDocument({
155
- tenantId: z6.string().min(1),
156
- userId: z6.string().min(1).optional(),
157
- namespace: z6.string().min(1).optional()
175
+ tenantId: z5.string().min(1),
176
+ userId: z5.string().min(1).optional(),
177
+ namespace: z5.string().min(1).optional()
158
178
  });
159
179
  var runIdentity = {
160
- runId: z6.string().min(1),
161
- status: z6.string().min(1),
162
- provider: z6.string().min(1),
163
- model: z6.string().min(1)
180
+ runId: z5.string().min(1),
181
+ status: z5.string().min(1),
182
+ provider: z5.string().min(1),
183
+ model: z5.string().min(1)
164
184
  };
165
185
  var runSummarySchema = observationalDocument({
166
186
  ...runIdentity,
@@ -176,24 +196,24 @@ var runSummarySchema = observationalDocument({
176
196
  updatedAt: nonnegativeInteger
177
197
  });
178
198
  var sessionRunSchema = observationalDocument({
179
- turnId: z6.string().min(1),
199
+ turnId: z5.string().min(1),
180
200
  sequence: nonnegativeInteger,
181
- runId: z6.string().min(1),
182
- provider: z6.string().min(1),
183
- model: z6.string().min(1),
184
- status: z6.string().min(1),
201
+ runId: z5.string().min(1),
202
+ provider: z5.string().min(1),
203
+ model: z5.string().min(1),
204
+ status: z5.string().min(1),
185
205
  createdAt: nonnegativeInteger,
186
206
  updatedAt: nonnegativeInteger
187
207
  });
188
208
  var sessionSchema = observationalDocument({
189
- schemaVersion: z6.literal(1),
190
- sessionId: z6.string().min(1),
191
- workspaceKey: z6.string().min(1),
192
- scopeKey: z6.string().min(1),
209
+ schemaVersion: z5.literal(1),
210
+ sessionId: z5.string().min(1),
211
+ workspaceKey: z5.string().min(1),
212
+ scopeKey: z5.string().min(1),
193
213
  revision: nonnegativeInteger,
194
214
  createdAt: nonnegativeInteger,
195
215
  updatedAt: nonnegativeInteger,
196
- runs: z6.array(sessionRunSchema)
216
+ runs: z5.array(sessionRunSchema)
197
217
  });
198
218
  var tokenUsageSchema = observationalDocument({
199
219
  inputTokens: nonnegativeInteger.optional(),
@@ -202,17 +222,17 @@ var tokenUsageSchema = observationalDocument({
202
222
  outputTokens: nonnegativeInteger.optional(),
203
223
  reasoningTokens: nonnegativeInteger.optional(),
204
224
  totalTokens: nonnegativeInteger.optional(),
205
- speed: z6.enum(["standard", "fast"]).optional()
225
+ speed: z5.enum(["standard", "fast"]).optional()
206
226
  });
207
227
  var budgetConfigSchema = observationalDocument({
208
- unlimitedTokens: z6.boolean().optional(),
228
+ unlimitedTokens: z5.boolean().optional(),
209
229
  maxSteps: nonnegativeInteger,
210
230
  maxToolCalls: nonnegativeInteger,
211
231
  maxToolErrors: nonnegativeInteger,
212
232
  maxInputTokens: nonnegativeInteger,
213
233
  maxOutputTokens: nonnegativeInteger,
214
234
  maxTotalTokens: nonnegativeInteger,
215
- includeChildRuns: z6.boolean()
235
+ includeChildRuns: z5.boolean()
216
236
  });
217
237
  var budgetConsumptionSchema = observationalDocument({
218
238
  steps: nonnegativeInteger,
@@ -233,117 +253,117 @@ var budgetRemainingSchema = observationalDocument({
233
253
  var budgetStatusSchema = observationalDocument({
234
254
  consumption: budgetConsumptionSchema,
235
255
  remaining: budgetRemainingSchema,
236
- includeChildRuns: z6.boolean()
256
+ includeChildRuns: z5.boolean()
237
257
  });
238
258
  var costEstimateSchema = observationalDocument({
239
- inputCost: z6.number().nonnegative().optional(),
240
- outputCost: z6.number().nonnegative().optional(),
241
- totalCost: z6.number().nonnegative().optional(),
242
- currency: z6.string().min(1).optional(),
259
+ inputCost: z5.number().nonnegative().optional(),
260
+ outputCost: z5.number().nonnegative().optional(),
261
+ totalCost: z5.number().nonnegative().optional(),
262
+ currency: z5.string().min(1).optional(),
243
263
  usage: tokenUsageSchema.optional()
244
264
  });
245
265
  var mutationAuditSchema = observationalDocument({
246
- id: z6.string().min(1),
247
- operation: z6.enum(["create", "update", "move", "quarantine", "restore"]),
248
- path: z6.string().min(1),
249
- destination: z6.string().min(1).optional(),
266
+ id: z5.string().min(1),
267
+ operation: z5.enum(["create", "update", "move", "quarantine", "restore"]),
268
+ path: z5.string().min(1),
269
+ destination: z5.string().min(1).optional(),
250
270
  beforeDigest: digestSchema.optional(),
251
271
  afterDigest: digestSchema.optional(),
252
- timestamp: z6.iso.datetime(),
253
- quarantineId: z6.string().min(1).optional()
272
+ timestamp: z5.iso.datetime(),
273
+ quarantineId: z5.string().min(1).optional()
254
274
  });
255
275
  var approvalSummarySchema = observationalDocument({
256
- id: z6.string().min(1),
257
- kind: z6.string().min(1),
258
- name: z6.string().min(1),
259
- arguments: z6.json(),
260
- childRunId: z6.string().min(1).optional(),
261
- childAgentId: z6.string().min(1).optional()
276
+ id: z5.string().min(1),
277
+ kind: z5.string().min(1),
278
+ name: z5.string().min(1),
279
+ arguments: z5.json(),
280
+ childRunId: z5.string().min(1).optional(),
281
+ childAgentId: z5.string().min(1).optional()
262
282
  });
263
283
  var childRunSummarySchema = observationalDocument({
264
- runId: z6.string().min(1),
265
- agentId: z6.string().min(1).optional(),
266
- toolName: z6.string().min(1).optional(),
267
- status: z6.string().min(1),
284
+ runId: z5.string().min(1),
285
+ agentId: z5.string().min(1).optional(),
286
+ toolName: z5.string().min(1).optional(),
287
+ status: z5.string().min(1),
268
288
  steps: nonnegativeInteger,
269
289
  toolCalls: nonnegativeInteger,
270
290
  toolErrors: nonnegativeInteger,
271
291
  usage: tokenUsageSchema.optional()
272
292
  });
273
293
  var capabilityReportSchema = observationalDocument({
274
- provider: z6.string().min(1),
275
- model: z6.string().min(1),
276
- supportTier: z6.string().min(1).optional(),
294
+ provider: z5.string().min(1),
295
+ model: z5.string().min(1),
296
+ supportTier: z5.string().min(1).optional(),
277
297
  capabilities: observationalDocument({
278
- streaming: z6.boolean(),
279
- tools: z6.boolean(),
280
- "structured-output": z6.boolean(),
281
- "parallel-tools": z6.boolean(),
282
- reasoning: z6.boolean(),
283
- "web-search": z6.boolean()
298
+ streaming: z5.boolean(),
299
+ tools: z5.boolean(),
300
+ "structured-output": z5.boolean(),
301
+ "parallel-tools": z5.boolean(),
302
+ reasoning: z5.boolean(),
303
+ "web-search": z5.boolean()
284
304
  })
285
305
  });
286
- var providerConfigurationSchema = z6.object({
287
- customEndpoint: z6.boolean(),
288
- endpointValid: z6.boolean(),
289
- endpointSecure: z6.boolean()
290
- }).catchall(z6.boolean());
306
+ var providerConfigurationSchema = z5.object({
307
+ customEndpoint: z5.boolean(),
308
+ endpointValid: z5.boolean(),
309
+ endpointSecure: z5.boolean()
310
+ }).catchall(z5.boolean());
291
311
  var providerAvailabilitySchema = observationalDocument({
292
- id: z6.string().min(1),
293
- name: z6.string().min(1),
294
- defaultModel: z6.string().min(1),
295
- credentialNames: z6.array(z6.string().min(1)),
296
- capabilities: z6.array(z6.enum(["streaming", "tool-calling", "approval-resume"])),
297
- support: z6.enum(["certified", "provisional"]),
298
- configured: z6.boolean(),
299
- credentials: z6.array(observationalDocument({
300
- name: z6.string().min(1),
301
- present: z6.boolean()
312
+ id: z5.string().min(1),
313
+ name: z5.string().min(1),
314
+ defaultModel: z5.string().min(1),
315
+ credentialNames: z5.array(z5.string().min(1)),
316
+ capabilities: z5.array(z5.enum(["streaming", "tool-calling", "approval-resume"])),
317
+ support: z5.enum(["certified", "provisional"]),
318
+ configured: z5.boolean(),
319
+ credentials: z5.array(observationalDocument({
320
+ name: z5.string().min(1),
321
+ present: z5.boolean()
302
322
  })),
303
323
  configuration: providerConfigurationSchema
304
324
  });
305
325
  var orchestrationConfigSchema = observationalDocument({
306
- profiles: z6.array(z6.enum(["explorer", "implementer", "tester", "reviewer"])),
326
+ profiles: z5.array(z5.enum(["explorer", "implementer", "tester", "reviewer"])),
307
327
  childBudget: budgetConfigSchema,
308
328
  childTimeoutMs: nonnegativeInteger,
309
329
  maxParallelReviews: nonnegativeInteger
310
330
  });
311
- var executionConfigSchema = z6.discriminatedUnion("backend", [
312
- observationalDocument({ backend: z6.literal("none") }),
331
+ var executionConfigSchema = z5.discriminatedUnion("backend", [
332
+ observationalDocument({ backend: z5.literal("none") }),
313
333
  observationalDocument({
314
- backend: z6.literal("oci"),
315
- policyVersion: z6.string().min(1),
316
- runtime: z6.enum(["docker", "podman"]),
317
- image: z6.string().min(1),
318
- allowedCommands: z6.array(z6.string().min(1)),
319
- shellMode: z6.enum(["deny", "ask"]),
334
+ backend: z5.literal("oci"),
335
+ policyVersion: z5.string().min(1),
336
+ runtime: z5.enum(["docker", "podman"]),
337
+ image: z5.string().min(1),
338
+ allowedCommands: z5.array(z5.string().min(1)),
339
+ shellMode: z5.enum(["deny", "ask"]),
320
340
  maxProcessRuntimeMs: nonnegativeInteger,
321
341
  maxProcessOutputBytes: nonnegativeInteger,
322
342
  maxMemoryMb: nonnegativeInteger,
323
343
  maxPids: nonnegativeInteger,
324
- maxCpus: z6.number().positive(),
344
+ maxCpus: z5.number().positive(),
325
345
  maxWorkspaceBytes: nonnegativeInteger,
326
346
  maxFileWriteBytes: nonnegativeInteger,
327
347
  tmpfsMb: nonnegativeInteger
328
348
  })
329
349
  ]);
330
350
  var executionBindingSchema = observationalDocument({
331
- environmentId: z6.string().min(1),
332
- environmentVersion: z6.string().min(1).optional(),
333
- fingerprint: z6.string().min(1),
334
- workspaceId: z6.string().min(1).optional()
351
+ environmentId: z5.string().min(1),
352
+ environmentVersion: z5.string().min(1).optional(),
353
+ fingerprint: z5.string().min(1),
354
+ workspaceId: z5.string().min(1).optional()
335
355
  });
336
356
  var ociImageSchema = observationalDocument({
337
- runtime: z6.enum(["docker", "podman"]),
338
- runtimeVersion: z6.string().min(1),
339
- imageReference: z6.string().min(1),
340
- imageId: z6.string().min(1),
341
- imageDigest: z6.string().min(1)
357
+ runtime: z5.enum(["docker", "podman"]),
358
+ runtimeVersion: z5.string().min(1),
359
+ imageReference: z5.string().min(1),
360
+ imageId: z5.string().min(1),
361
+ imageDigest: z5.string().min(1)
342
362
  });
343
- var runExecutionSchema = z6.discriminatedUnion("backend", [
344
- observationalDocument({ backend: z6.literal("none") }),
363
+ var runExecutionSchema = z5.discriminatedUnion("backend", [
364
+ observationalDocument({ backend: z5.literal("none") }),
345
365
  observationalDocument({
346
- backend: z6.literal("oci"),
366
+ backend: z5.literal("oci"),
347
367
  binding: executionBindingSchema,
348
368
  image: ociImageSchema
349
369
  })
@@ -354,44 +374,44 @@ var migrationResultSchema = observationalDocument({
354
374
  migratedToolCalls: nonnegativeInteger
355
375
  });
356
376
  var runStoreSchema = observationalDocument({
357
- backend: z6.enum(["sqlite", "file"]),
358
- stateDirectory: z6.string().min(1),
377
+ backend: z5.enum(["sqlite", "file"]),
378
+ stateDirectory: z5.string().min(1),
359
379
  migration: migrationResultSchema.optional()
360
380
  });
361
381
  var doctorCheckSchema = observationalDocument({
362
- id: z6.string().min(1),
363
- status: z6.enum(["pass", "warn", "fail"]),
364
- message: z6.string(),
365
- details: z6.record(z6.string(), z6.union([
366
- z6.boolean(),
367
- z6.number(),
368
- z6.string(),
369
- z6.array(z6.string())
382
+ id: z5.string().min(1),
383
+ status: z5.enum(["pass", "warn", "fail"]),
384
+ message: z5.string(),
385
+ details: z5.record(z5.string(), z5.union([
386
+ z5.boolean(),
387
+ z5.number(),
388
+ z5.string(),
389
+ z5.array(z5.string())
370
390
  ]))
371
391
  });
372
392
  var doctorConfigurationSchema = observationalDocument({
373
- requireVerifiedDelivery: z6.boolean().optional(),
374
- provider: z6.string().min(1),
375
- model: z6.string().min(1),
376
- workspace: z6.string().min(1),
377
- stateDirectory: z6.string().min(1),
378
- storeBackend: z6.enum(["sqlite", "file"]),
393
+ requireVerifiedDelivery: z5.boolean().optional(),
394
+ provider: z5.string().min(1),
395
+ model: z5.string().min(1),
396
+ workspace: z5.string().min(1),
397
+ stateDirectory: z5.string().min(1),
398
+ storeBackend: z5.enum(["sqlite", "file"]),
379
399
  scope: scopeSchema,
380
400
  maxSteps: nonnegativeInteger,
381
401
  timeoutMs: nonnegativeInteger,
382
402
  budget: budgetConfigSchema,
383
403
  costBudget: observationalDocument({
384
- maxCostUsd: z6.number().nonnegative(),
385
- inputCostPer1kTokens: z6.number().nonnegative(),
386
- outputCostPer1kTokens: z6.number().nonnegative()
404
+ maxCostUsd: z5.number().nonnegative(),
405
+ inputCostPer1kTokens: z5.number().nonnegative(),
406
+ outputCostPer1kTokens: z5.number().nonnegative()
387
407
  }).optional(),
388
408
  compaction: observationalDocument({
389
409
  maxMessages: nonnegativeInteger,
390
410
  maxEstimatedInputTokens: nonnegativeInteger,
391
411
  keepRecentMessages: nonnegativeInteger
392
412
  }),
393
- allowedChecks: z6.array(z6.string().min(1)),
394
- requiredCapabilities: z6.array(z6.enum([
413
+ allowedChecks: z5.array(z5.string().min(1)),
414
+ requiredCapabilities: z5.array(z5.enum([
395
415
  "streaming",
396
416
  "tools",
397
417
  "structured-output",
@@ -400,24 +420,24 @@ var doctorConfigurationSchema = observationalDocument({
400
420
  "web-search"
401
421
  ])),
402
422
  orchestration: orchestrationConfigSchema,
403
- context: observationalDocument({ enabled: z6.boolean(), configPath: z6.string().min(1) }),
423
+ context: observationalDocument({ enabled: z5.boolean(), configPath: z5.string().min(1) }),
404
424
  execution: executionConfigSchema,
405
- mcpConfigPath: z6.string().min(1).optional()
425
+ mcpConfigPath: z5.string().min(1).optional()
406
426
  });
407
427
  var cliRunResultDocumentSchema = observationalDocument({
408
428
  ...jsonBase,
409
- kind: z6.literal("run-result"),
429
+ kind: z5.literal("run-result"),
410
430
  ...runIdentity,
411
- output: z6.string(),
431
+ output: z5.string(),
412
432
  steps: nonnegativeInteger,
413
433
  toolCalls: nonnegativeInteger,
414
- mutations: z6.array(mutationAuditSchema),
415
- pendingApprovals: z6.array(approvalSummarySchema),
416
- children: z6.array(childRunSummarySchema),
434
+ mutations: z5.array(mutationAuditSchema),
435
+ pendingApprovals: z5.array(approvalSummarySchema),
436
+ children: z5.array(childRunSummarySchema),
417
437
  usage: tokenUsageSchema.optional(),
418
438
  budget: budgetStatusSchema,
419
439
  costBudget: observationalDocument({
420
- limitUsd: z6.number().nonnegative(),
440
+ limitUsd: z5.number().nonnegative(),
421
441
  estimate: costEstimateSchema
422
442
  }).optional(),
423
443
  scope: scopeSchema,
@@ -425,65 +445,65 @@ var cliRunResultDocumentSchema = observationalDocument({
425
445
  orchestration: observationalDocument({
426
446
  profiles: orchestrationConfigSchema.shape.profiles,
427
447
  childBudget: budgetConfigSchema,
428
- mcpServers: z6.array(z6.string().min(1))
448
+ mcpServers: z5.array(z5.string().min(1))
429
449
  }),
430
450
  execution: runExecutionSchema,
431
451
  store: runStoreSchema,
432
- stateDirectory: z6.string()
452
+ stateDirectory: z5.string()
433
453
  });
434
454
  var cliProviderDocumentSchema = observationalDocument({
435
455
  ...jsonBase,
436
- kind: z6.literal("providers"),
437
- providers: z6.array(providerAvailabilitySchema)
456
+ kind: z5.literal("providers"),
457
+ providers: z5.array(providerAvailabilitySchema)
438
458
  });
439
459
  var cliInitDocumentSchema = observationalDocument({
440
460
  ...jsonBase,
441
- kind: z6.literal("init"),
461
+ kind: z5.literal("init"),
442
462
  profile: observationalDocument({
443
- name: z6.string().min(1),
444
- path: z6.string().min(1),
463
+ name: z5.string().min(1),
464
+ path: z5.string().min(1),
445
465
  schemaVersion: nonnegativeInteger,
446
- provider: z6.enum(PROVIDERS),
447
- model: z6.string().min(1),
466
+ provider: z5.enum(PROVIDERS),
467
+ model: z5.string().min(1),
448
468
  reasoningEffort: reasoningEffortSchema.optional()
449
469
  }),
450
470
  credential: observationalDocument({
451
- configured: z6.boolean(),
452
- names: z6.array(z6.string().min(1))
471
+ configured: z5.boolean(),
472
+ names: z5.array(z5.string().min(1))
453
473
  }),
454
474
  next: observationalDocument({
455
- doctor: z6.string().min(1),
456
- run: z6.string().min(1)
475
+ doctor: z5.string().min(1),
476
+ run: z5.string().min(1)
457
477
  })
458
478
  });
459
479
  var cliDoctorDocumentSchema = observationalDocument({
460
480
  ...jsonBase,
461
- kind: z6.literal("doctor"),
462
- ok: z6.boolean(),
463
- harnessVersion: z6.string().min(1),
481
+ kind: z5.literal("doctor"),
482
+ ok: z5.boolean(),
483
+ harnessVersion: z5.string().min(1),
464
484
  configSchemaVersion: nonnegativeInteger,
465
485
  configuration: doctorConfigurationSchema,
466
- checks: z6.array(doctorCheckSchema),
467
- providers: z6.array(providerAvailabilitySchema)
486
+ checks: z5.array(doctorCheckSchema),
487
+ providers: z5.array(providerAvailabilitySchema)
468
488
  });
469
489
  var cliReviewGroupDocumentSchema = observationalDocument({
470
490
  ...jsonBase,
471
- kind: z6.literal("review-group"),
472
- groupId: z6.string().min(1),
473
- status: z6.enum(["completed", "failed"]),
474
- profiles: z6.array(z6.string().min(1)).min(1),
475
- outputs: z6.array(observationalDocument({
476
- status: z6.enum(["fulfilled", "rejected"]),
477
- name: z6.string().min(1).optional(),
478
- agentId: z6.string().min(1).optional(),
479
- runId: z6.string().min(1).optional(),
480
- runStatus: z6.string().min(1).optional(),
481
- output: z6.string().optional(),
491
+ kind: z5.literal("review-group"),
492
+ groupId: z5.string().min(1),
493
+ status: z5.enum(["completed", "failed"]),
494
+ profiles: z5.array(z5.string().min(1)).min(1),
495
+ outputs: z5.array(observationalDocument({
496
+ status: z5.enum(["fulfilled", "rejected"]),
497
+ name: z5.string().min(1).optional(),
498
+ agentId: z5.string().min(1).optional(),
499
+ runId: z5.string().min(1).optional(),
500
+ runStatus: z5.string().min(1).optional(),
501
+ output: z5.string().optional(),
482
502
  steps: nonnegativeInteger.optional(),
483
503
  usage: tokenUsageSchema.optional(),
484
504
  error: observationalDocument({
485
- code: z6.enum(HARNESS_ERROR_CODES),
486
- category: z6.enum([
505
+ code: z5.enum(HARNESS_ERROR_CODES),
506
+ category: z5.enum([
487
507
  "configuration",
488
508
  "usage",
489
509
  "workspace",
@@ -492,16 +512,16 @@ var cliReviewGroupDocumentSchema = observationalDocument({
492
512
  "approval",
493
513
  "execution"
494
514
  ]),
495
- retryable: z6.boolean()
515
+ retryable: z5.boolean()
496
516
  }).optional()
497
517
  }))
498
518
  });
499
519
  var cliRunListDocumentSchema = observationalDocument({
500
520
  ...jsonBase,
501
- kind: z6.literal("run-list"),
521
+ kind: z5.literal("run-list"),
502
522
  scope: scopeSchema,
503
- backend: z6.string().min(1),
504
- runs: z6.array(runSummarySchema)
523
+ backend: z5.string().min(1),
524
+ runs: z5.array(runSummarySchema)
505
525
  });
506
526
  var runInspectionShape = {
507
527
  run: runSummarySchema,
@@ -510,25 +530,25 @@ var runInspectionShape = {
510
530
  trace: jsonObjectSchema,
511
531
  hierarchy: jsonObjectSchema,
512
532
  ledger: jsonObjectSchema,
513
- toolJournal: z6.array(jsonObjectSchema)
533
+ toolJournal: z5.array(jsonObjectSchema)
514
534
  };
515
535
  var cliRunInspectionDocumentSchema = observationalDocument({
516
536
  ...jsonBase,
517
- kind: z6.literal("run-inspection"),
537
+ kind: z5.literal("run-inspection"),
518
538
  ...runInspectionShape
519
539
  });
520
540
  var cliRunExportDocumentSchema = observationalDocument({
521
541
  ...jsonBase,
522
- kind: z6.literal("run-export"),
542
+ kind: z5.literal("run-export"),
523
543
  ...runInspectionShape
524
544
  });
525
545
  var cliRunCancellationDocumentSchema = observationalDocument({
526
546
  ...jsonBase,
527
- kind: z6.literal("run-cancellation"),
528
- cascade: z6.boolean(),
547
+ kind: z5.literal("run-cancellation"),
548
+ cascade: z5.boolean(),
529
549
  run: runSummarySchema.optional(),
530
550
  parent: runSummarySchema.optional(),
531
- children: z6.array(runSummarySchema).optional()
551
+ children: z5.array(runSummarySchema).optional()
532
552
  }).superRefine((document, context) => {
533
553
  if (!document.cascade && !document.run || document.cascade && (!document.parent || !document.children)) {
534
554
  context.addIssue({ code: "custom", message: "Cancellation payload does not match cascade mode." });
@@ -536,27 +556,27 @@ var cliRunCancellationDocumentSchema = observationalDocument({
536
556
  });
537
557
  var cliRunCleanupDocumentSchema = observationalDocument({
538
558
  ...jsonBase,
539
- kind: z6.literal("run-cleanup"),
559
+ kind: z5.literal("run-cleanup"),
540
560
  before: nonnegativeInteger,
541
- statuses: z6.array(z6.string().min(1)),
561
+ statuses: z5.array(z5.string().min(1)),
542
562
  deleted: nonnegativeInteger
543
563
  });
544
564
  var cliSessionListDocumentSchema = observationalDocument({
545
565
  ...jsonBase,
546
- kind: z6.literal("session-list"),
547
- sessions: z6.array(sessionSchema)
566
+ kind: z5.literal("session-list"),
567
+ sessions: z5.array(sessionSchema)
548
568
  });
549
569
  var cliSessionDocumentSchema = observationalDocument({
550
570
  ...jsonBase,
551
- kind: z6.literal("session"),
571
+ kind: z5.literal("session"),
552
572
  session: sessionSchema
553
573
  });
554
574
  var cliChangeEnvelopeVerificationDocumentSchema = observationalDocument({
555
575
  ...jsonBase,
556
- kind: z6.literal("change-envelope-verification"),
557
- valid: z6.boolean(),
558
- verificationScope: z6.literal("integrity-expiration-and-preconditions-only"),
559
- issues: z6.array(jsonObjectSchema),
576
+ kind: z5.literal("change-envelope-verification"),
577
+ valid: z5.boolean(),
578
+ verificationScope: z5.literal("integrity-expiration-and-preconditions-only"),
579
+ issues: z5.array(jsonObjectSchema),
560
580
  integrity: jsonObjectSchema,
561
581
  expiration: jsonObjectSchema,
562
582
  checks: jsonObjectSchema,
@@ -565,32 +585,32 @@ var cliChangeEnvelopeVerificationDocumentSchema = observationalDocument({
565
585
  });
566
586
  var cliStateStatusDocumentSchema = observationalDocument({
567
587
  ...jsonBase,
568
- kind: z6.literal("state-status"),
569
- compatible: z6.boolean(),
588
+ kind: z5.literal("state-status"),
589
+ compatible: z5.boolean(),
570
590
  schemas: jsonObjectSchema,
571
- counts: z6.record(z6.string(), nonnegativeInteger)
591
+ counts: z5.record(z5.string(), nonnegativeInteger)
572
592
  });
573
593
  var cliStateExportDocumentSchema = observationalDocument({
574
594
  ...jsonBase,
575
- kind: z6.literal("state-export"),
576
- path: z6.string().min(1),
595
+ kind: z5.literal("state-export"),
596
+ path: z5.string().min(1),
577
597
  checksum: digestSchema,
578
- counts: z6.record(z6.string(), nonnegativeInteger)
598
+ counts: z5.record(z5.string(), nonnegativeInteger)
579
599
  });
580
600
  var cliStateImportDocumentSchema = observationalDocument({
581
601
  ...jsonBase,
582
- kind: z6.literal("state-import"),
583
- dryRun: z6.boolean(),
602
+ kind: z5.literal("state-import"),
603
+ dryRun: z5.boolean(),
584
604
  checksum: digestSchema,
585
- inserted: z6.record(z6.string(), nonnegativeInteger),
605
+ inserted: z5.record(z5.string(), nonnegativeInteger),
586
606
  identical: nonnegativeInteger
587
607
  });
588
608
  var cliErrorDocumentSchema = observationalDocument({
589
- schemaVersion: z6.literal(HARNESS_ERROR_SCHEMA_VERSION),
590
- kind: z6.literal("error"),
609
+ schemaVersion: z5.literal(HARNESS_ERROR_SCHEMA_VERSION),
610
+ kind: z5.literal("error"),
591
611
  error: observationalDocument({
592
- code: z6.enum(HARNESS_ERROR_CODES),
593
- category: z6.enum([
612
+ code: z5.enum(HARNESS_ERROR_CODES),
613
+ category: z5.enum([
594
614
  "configuration",
595
615
  "usage",
596
616
  "workspace",
@@ -599,10 +619,22 @@ var cliErrorDocumentSchema = observationalDocument({
599
619
  "approval",
600
620
  "execution"
601
621
  ]),
602
- retryable: z6.boolean()
622
+ retryable: z5.boolean()
603
623
  })
604
624
  });
605
- var cliJsonDocumentSchema = z6.union([
625
+ var cliPolicyInspectionSchema = observationalDocument({
626
+ ...jsonBase,
627
+ kind: z5.literal("policy-inspection"),
628
+ digest: digestSchema.nullable(),
629
+ source: z5.enum(["operator-file", "application", "baseline"]),
630
+ explicitReviewRequired: z5.boolean(),
631
+ tools: z5.array(observationalDocument({ name: z5.string(), requiresApproval: z5.boolean() })),
632
+ restrictions: z5.array(observationalDocument({ ruleId: z5.string(), tools: z5.array(z5.string()), decision: z5.enum(["allow", "ask_user", "deny"]), reason: z5.string(), pathCount: nonnegativeInteger })),
633
+ execution: observationalDocument({ configuredBackend: z5.enum(["none", "oci"]), activeBackend: z5.enum(["none", "oci"]), evidence: z5.literal("configuration-only") }),
634
+ limits: observationalDocument({ maxSteps: nonnegativeInteger, timeoutMs: nonnegativeInteger, budget: jsonObjectSchema })
635
+ });
636
+ var cliJsonDocumentSchema = z5.union([
637
+ cliPolicyInspectionSchema,
606
638
  cliRunResultDocumentSchema,
607
639
  cliInitDocumentSchema,
608
640
  cliProviderDocumentSchema,
@@ -624,47 +656,61 @@ var cliJsonDocumentSchema = z6.union([
624
656
  ]);
625
657
  var runEvent = (type, shape) => observationalDocument({
626
658
  ...eventBase,
627
- kind: z6.literal("run-event"),
628
- type: z6.literal(type),
659
+ kind: z5.literal("run-event"),
660
+ type: z5.literal(type),
629
661
  ...shape
630
662
  });
631
- var cliRunEventDocumentSchema = z6.discriminatedUnion("type", [
632
- runEvent("text-delta", { textDelta: z6.string() }),
663
+ var cliRunEventDocumentSchema = z5.discriminatedUnion("type", [
664
+ runEvent("policy-decision", {
665
+ phase: z5.enum(["approval-request", "tool-entry"]),
666
+ toolName: z5.string(),
667
+ decision: z5.enum(["allow", "ask_user", "deny"]),
668
+ ruleIds: z5.array(z5.string()),
669
+ reason: z5.string(),
670
+ reasonTruncated: z5.boolean(),
671
+ policyDigest: digestSchema.nullable(),
672
+ source: z5.enum(["operator-file", "application", "baseline"]),
673
+ approvalRequired: z5.boolean(),
674
+ explicitReviewRequired: z5.boolean(),
675
+ executionBackend: z5.enum(["none", "oci"]),
676
+ evidence: z5.literal("policy-evaluation")
677
+ }),
678
+ runEvent("text-delta", { textDelta: z5.string() }),
633
679
  runEvent("tool-call", {
634
- toolCallId: z6.string().min(1),
635
- toolName: z6.string().min(1)
680
+ toolCallId: z5.string().min(1),
681
+ toolName: z5.string().min(1)
636
682
  }),
637
683
  runEvent("tool-result", {
638
- toolCallId: z6.string().min(1),
639
- toolName: z6.string().min(1),
640
- isError: z6.boolean()
684
+ toolCallId: z5.string().min(1),
685
+ toolName: z5.string().min(1),
686
+ isError: z5.boolean()
641
687
  }),
642
688
  runEvent("tool-approval-request", {
643
- approvalRequestId: z6.string().min(1),
644
- approvalKind: z6.string().min(1),
645
- toolName: z6.string().min(1)
689
+ approvalRequestId: z5.string().min(1),
690
+ approvalKind: z5.string().min(1),
691
+ toolName: z5.string().min(1)
646
692
  }),
647
693
  runEvent("agent-approval-request", {
648
- approvalRequestId: z6.string().min(1),
649
- approvalKind: z6.string().min(1),
650
- toolName: z6.string().min(1)
694
+ approvalRequestId: z5.string().min(1),
695
+ approvalKind: z5.string().min(1),
696
+ toolName: z5.string().min(1)
651
697
  }),
652
698
  runEvent("agent-approval-resolved", {
653
- approvalRequestId: z6.string().min(1),
654
- approved: z6.boolean()
699
+ approvalRequestId: z5.string().min(1),
700
+ approved: z5.boolean()
655
701
  }),
656
- runEvent("provider-data", { provider: z6.string().min(1) }),
702
+ runEvent("provider-data", { provider: z5.string().min(1) }),
657
703
  runEvent("image-generation", {
658
- provider: z6.string().min(1),
659
- partial: z6.boolean(),
660
- id: z6.string().min(1).optional(),
704
+ provider: z5.string().min(1),
705
+ partial: z5.boolean(),
706
+ id: z5.string().min(1).optional(),
661
707
  index: nonnegativeInteger.optional()
662
708
  }),
663
709
  runEvent("finish", {
664
- finishReason: z6.string().min(1).optional(),
710
+ finishReason: z5.string().min(1).optional(),
665
711
  usage: jsonObjectSchema.optional()
666
712
  }),
667
- runEvent("error", { error: z6.literal("Provider stream failed.") }),
713
+ runEvent("error", { error: z5.literal("Provider stream failed.") }),
668
714
  runEvent("agent-run-start", {
669
715
  currentStep: nonnegativeInteger,
670
716
  maxSteps: nonnegativeInteger
@@ -672,46 +718,46 @@ var cliRunEventDocumentSchema = z6.discriminatedUnion("type", [
672
718
  runEvent("agent-step-start", { stepIndex: nonnegativeInteger }),
673
719
  runEvent("agent-step-finish", {
674
720
  stepIndex: nonnegativeInteger,
675
- status: z6.string().min(1),
721
+ status: z5.string().min(1),
676
722
  toolCalls: nonnegativeInteger
677
723
  }),
678
724
  runEvent("agent-compaction", {
679
- compactionId: z6.string().min(1),
680
- reasons: z6.array(z6.string().min(1)),
725
+ compactionId: z5.string().min(1),
726
+ reasons: z5.array(z5.string().min(1)),
681
727
  messageCountBefore: nonnegativeInteger,
682
728
  messageCountAfter: nonnegativeInteger
683
729
  }),
684
730
  runEvent("agent-run-finish", {
685
- runId: z6.string().min(1),
686
- status: z6.string().min(1),
687
- provider: z6.string().min(1),
688
- model: z6.string().min(1)
731
+ runId: z5.string().min(1),
732
+ status: z5.string().min(1),
733
+ provider: z5.string().min(1),
734
+ model: z5.string().min(1)
689
735
  })
690
736
  ]);
691
737
  var cliStreamResultDocumentSchema = observationalDocument({
692
738
  ...eventBase,
693
- kind: z6.literal("run-stream-result"),
739
+ kind: z5.literal("run-stream-result"),
694
740
  ...runIdentity,
695
741
  steps: nonnegativeInteger,
696
742
  toolCalls: nonnegativeInteger,
697
- pendingApprovals: z6.array(observationalDocument({
698
- id: z6.string().min(1),
699
- kind: z6.string().min(1),
700
- name: z6.string().min(1),
701
- childRunId: z6.string().min(1).optional(),
702
- childAgentId: z6.string().min(1).optional()
743
+ pendingApprovals: z5.array(observationalDocument({
744
+ id: z5.string().min(1),
745
+ kind: z5.string().min(1),
746
+ name: z5.string().min(1),
747
+ childRunId: z5.string().min(1).optional(),
748
+ childAgentId: z5.string().min(1).optional()
703
749
  })),
704
- children: z6.array(observationalDocument({
705
- runId: z6.string().min(1),
706
- status: z6.string().min(1)
750
+ children: z5.array(observationalDocument({
751
+ runId: z5.string().min(1),
752
+ status: z5.string().min(1)
707
753
  }))
708
754
  });
709
755
  var cliStreamErrorDocumentSchema = observationalDocument({
710
756
  ...eventBase,
711
- kind: z6.literal("run-stream-error"),
757
+ kind: z5.literal("run-stream-error"),
712
758
  error: cliErrorDocumentSchema.shape.error
713
759
  });
714
- var cliJsonLineDocumentSchema = z6.union([
760
+ var cliJsonLineDocumentSchema = z5.union([
715
761
  cliRunEventDocumentSchema,
716
762
  cliStreamResultDocumentSchema,
717
763
  cliStreamErrorDocumentSchema
@@ -752,6 +798,13 @@ var runServiceCli = async (options, annotate) => {
752
798
  };
753
799
  const print = (document) => process.stdout.write((options.json ? JSON.stringify(document, null, 2) : sanitizeTerminalText(JSON.stringify(document, null, 2))) + `
754
800
  `);
801
+ if (options.command === "policy") {
802
+ const result = await call({ method: "policy.get" });
803
+ if (result.kind !== "policy")
804
+ throw new HarnessStateConflictError("Unexpected service policy response.");
805
+ printPolicyInspection(result.policy, options.json);
806
+ return;
807
+ }
755
808
  if (options.command === "sessions") {
756
809
  if (options.sessionsCommand === "list") {
757
810
  const sessions = await list(options.sessionSearch);
@@ -822,6 +875,12 @@ var runServiceCli = async (options, annotate) => {
822
875
  const observe = (a) => {
823
876
  if (options.json || options.jsonl)
824
877
  return;
878
+ if (a.type === "policy-decision") {
879
+ const decision2 = harnessPolicyDecisionEventSchema.safeParse(a);
880
+ if (decision2.success)
881
+ process.stderr.write(formatPolicyDecision(decision2.data) + `
882
+ `);
883
+ }
825
884
  history.observeService(a);
826
885
  if (a.type === "agent-step-start" || a.type === "agent-run-start")
827
886
  activity.phase("Waiting for model response");