@zhivex-ai/harness 1.2.0 → 1.3.0-rc.7

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 (164) hide show
  1. package/CHANGELOG.md +64 -0
  2. package/README.md +9 -10
  3. package/contracts/engine-api.json +2921 -0
  4. package/contracts/public-api.json +267 -1
  5. package/contracts/stable-api-signatures.json +43 -43
  6. package/dist/acp-cli.js +137 -15002
  7. package/dist/approvals/approval-history.d.ts +22 -0
  8. package/dist/approvals/explicit-review.d.ts +24 -0
  9. package/dist/approvals/host-policy-identity.d.ts +3 -0
  10. package/dist/cli/arguments.d.ts +6 -2
  11. package/dist/cli/checkpoints.d.ts +230 -0
  12. package/dist/cli/cli-options.d.ts +2 -41
  13. package/dist/cli/cli-profiles.d.ts +4 -2
  14. package/dist/cli/cli-stream.d.ts +2 -167
  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/run-document.d.ts +2 -91
  20. package/dist/cli/terminal/terminal-continuation.d.ts +2 -3
  21. package/dist/cli/terminal/terminal-ui.d.ts +4 -0
  22. package/dist/{cli-entry-c2f58zj2.js → cli-entry-ae7x44d4.js} +14969 -10731
  23. package/dist/{cli-entry-427869g9.js → cli-entry-d5788aay.js} +388 -47
  24. package/dist/cli-entry-ev76ezcd.js +656 -0
  25. package/dist/{cli-3jmy4h5h.js → cli-t7hrhayq.js} +918 -2223
  26. package/dist/cli.js +3 -5
  27. package/dist/client/acp-mcp-admission.d.ts +32 -0
  28. package/dist/client/acp-mcp-host.d.ts +19 -0
  29. package/dist/client/acp-mcp-session.d.ts +14 -0
  30. package/dist/client/acp-stdio.d.ts +2 -0
  31. package/dist/client/acp.d.ts +4 -1
  32. package/dist/client/adapter.d.ts +13 -1
  33. package/dist/client/continuation.d.ts +3 -0
  34. package/dist/client/json-contracts.d.ts +107 -4
  35. package/dist/client/local-service.d.ts +2 -0
  36. package/dist/client/protocol.d.ts +127 -1
  37. package/dist/client/run-document.d.ts +91 -0
  38. package/dist/client/service-events.d.ts +4 -0
  39. package/dist/client/stream.d.ts +167 -0
  40. package/dist/compat/cli-options.d.ts +53 -0
  41. package/dist/compat/code-support.d.ts +22 -0
  42. package/dist/compat/code-support.js +74 -0
  43. package/dist/{config-1k9t4jhh.js → config-c002f06f.js} +1 -1
  44. package/dist/config-j3jga5wh.js +61 -0
  45. package/dist/context/adaptive-compaction.d.ts +1 -0
  46. package/dist/context/compaction.d.ts +1 -1
  47. package/dist/context/request-measurements.d.ts +17 -0
  48. package/dist/context/request-projection.d.ts +10 -0
  49. package/dist/context/task-memory.d.ts +1 -0
  50. package/dist/engine/acp.d.ts +6 -0
  51. package/dist/engine/acp.js +205 -0
  52. package/dist/engine/client.d.ts +6 -0
  53. package/dist/engine/client.js +28 -0
  54. package/dist/engine/desktop-providers-v1.d.ts +4 -0
  55. package/dist/engine/desktop-providers-v1.js +18 -0
  56. package/dist/engine/desktop-state-v1.d.ts +10 -0
  57. package/dist/engine/desktop-state-v1.js +168 -0
  58. package/dist/engine/index.d.ts +73 -0
  59. package/dist/engine/index.js +977 -0
  60. package/dist/engine/mcp-stdio-v1.d.ts +11 -0
  61. package/dist/engine/mcp-stdio-v1.js +108 -0
  62. package/dist/engine/models.d.ts +3 -0
  63. package/dist/engine/models.js +894 -0
  64. package/dist/engine/protocol.d.ts +7 -0
  65. package/dist/engine/protocol.js +182 -0
  66. package/dist/engine/service.d.ts +5 -0
  67. package/dist/engine/service.js +28 -0
  68. package/dist/execution/acceptance-snapshot.d.ts +2 -0
  69. package/dist/execution/execution-environment.d.ts +10 -0
  70. package/dist/execution/mcp-oci-channel.d.ts +11 -0
  71. package/dist/execution/mcp-oci-server.d.ts +38 -0
  72. package/dist/execution/mcp-oci-workspace.d.ts +23 -0
  73. package/dist/execution/mcp-resource-recovery.d.ts +19 -0
  74. package/dist/execution/mcp-workspace-snapshot.d.ts +20 -0
  75. package/dist/hostile-repository-demo.js +3368 -1304
  76. package/dist/index-1bx83sw4.js +4 -0
  77. package/dist/index-2gz7jv7g.js +549 -0
  78. package/dist/{cli-entry-b1mfvmxe.js → index-2jrdcj6b.js} +72 -115
  79. package/dist/index-3ah1f369.js +356 -0
  80. package/dist/index-42gp2hy8.js +1555 -0
  81. package/dist/index-4jw3tvy8.js +301 -0
  82. package/dist/index-8705zxpr.js +145 -0
  83. package/dist/index-8vm2m34s.js +2080 -0
  84. package/dist/index-8zzhggxv.js +477 -0
  85. package/dist/index-a97bezbz.js +1073 -0
  86. package/dist/index-gq9xagx2.js +1343 -0
  87. package/dist/index-h0mqx2ed.js +1373 -0
  88. package/dist/index-jgrx804e.js +5589 -0
  89. package/dist/index-qfpz5y2v.js +174 -0
  90. package/dist/index-t60rva31.js +1004 -0
  91. package/dist/index-wg1sd3at.js +80 -0
  92. package/dist/index-xqxeypt5.js +888 -0
  93. package/dist/index-yb239ghk.js +961 -0
  94. package/dist/index-z0qxmkm2.js +3389 -0
  95. package/dist/index-z4e8d0ph.js +1768 -0
  96. package/dist/index.js +251 -18649
  97. package/dist/integrations/mcp-host-session.d.ts +26 -0
  98. package/dist/integrations/mcp-stdio-admission.d.ts +54 -0
  99. package/dist/integrations/mcp-stdio-client.d.ts +44 -0
  100. package/dist/integrations/mcp-stdio-framing.d.ts +18 -0
  101. package/dist/integrations/mcp-stdio-launch.d.ts +20 -0
  102. package/dist/integrations/mcp-stdio-session.d.ts +7 -0
  103. package/dist/integrations/mcp-stdio-tools.d.ts +12 -0
  104. package/dist/internal/desktop/catalog.d.ts +2 -0
  105. package/dist/internal/desktop/persistence.d.ts +2 -3
  106. package/dist/internal/desktop/providers.d.ts +1 -0
  107. package/dist/models/catalog.d.ts +2 -0
  108. package/dist/persistence/governance-context.d.ts +126 -0
  109. package/dist/persistence/governance-report.d.ts +299 -0
  110. package/dist/persistence/host-database-backup.d.ts +28 -0
  111. package/dist/persistence/mcp-execution-journal.d.ts +19 -0
  112. package/dist/persistence/mcp-reconciliation.d.ts +33 -0
  113. package/dist/persistence/mcp-resource-journal.d.ts +54 -0
  114. package/dist/persistence/workspace-checkpoints.d.ts +138 -0
  115. package/dist/providers/anthropic-continuation.d.ts +5 -0
  116. package/dist/providers/providers.d.ts +1 -1
  117. package/dist/providers/vertex-auth.d.ts +27 -0
  118. package/dist/runtime/delegation-contracts.d.ts +9 -0
  119. package/dist/runtime/delegation-correction.d.ts +9 -0
  120. package/dist/runtime/delegation-result.d.ts +73 -0
  121. package/dist/runtime/error-diagnostics.d.ts +86 -0
  122. package/dist/runtime/harness.d.ts +11 -1
  123. package/dist/runtime/policy-decisions.d.ts +66 -0
  124. package/dist/runtime/policy-inspection.d.ts +52 -0
  125. package/dist/runtime/provider-diagnostics.d.ts +1 -0
  126. package/dist/runtime/runtime-instructions.d.ts +8 -0
  127. package/dist/runtime/task-acceptance-checks.d.ts +103 -0
  128. package/dist/runtime/task-acceptance-delivery.d.ts +107 -0
  129. package/dist/runtime/task-acceptance-host.d.ts +20 -0
  130. package/dist/runtime/task-acceptance-record.d.ts +107 -0
  131. package/dist/runtime/task-acceptance-validation.d.ts +25 -0
  132. package/dist/runtime/task-acceptance.d.ts +47 -0
  133. package/dist/runtime/time-to-safe-fix.d.ts +83 -0
  134. package/dist/runtime/tool-policy-file.d.ts +23 -0
  135. package/dist/runtime/tool-policy-paths.d.ts +5 -0
  136. package/dist/runtime/tool-policy.d.ts +6 -0
  137. package/dist/service-cli.js +19 -14504
  138. package/dist/{service-client-cli-yx56n0hc.js → service-client-cli-kns4mf57.js} +307 -248
  139. package/dist/verify-historical-migrations.js +3314 -1251
  140. package/dist/workspace/path-policy.d.ts +4 -0
  141. package/dist/zhx.js +3 -5
  142. package/docs/ACP.md +14 -2
  143. package/docs/ANTHROPIC.md +33 -0
  144. package/docs/CLI.md +132 -0
  145. package/docs/CLIENT_PROTOCOL.md +45 -0
  146. package/docs/CODE_RELEASE.md +93 -0
  147. package/docs/ENGINE_API.md +319 -0
  148. package/docs/EXTENSIBILITY.md +46 -3
  149. package/docs/FIRST_USE.md +6 -6
  150. package/docs/LOCAL_SERVICE.md +13 -0
  151. package/docs/MCP_STDIO.md +20 -0
  152. package/docs/README.md +6 -0
  153. package/docs/STABILITY.md +9 -1
  154. package/docs/SUPPORT_MATRIX.md +1 -1
  155. package/docs/TOOL_POLICY.md +81 -0
  156. package/docs/VERTEX.md +50 -0
  157. package/docs/adr/0002-isolated-mcp-stdio.md +135 -0
  158. package/docs/fixtures/mcp-stdio-contract-v1.json +189 -0
  159. package/docs/support-matrix.json +2 -0
  160. package/evaluations/representative-assembly-matrix.json +64 -1
  161. package/evaluations/task-acceptance-routes.json +7 -0
  162. package/examples/README.md +1 -1
  163. package/package.json +74 -12
  164. package/dist/cli-entry-64pdp3k5.js +0 -17
@@ -0,0 +1,977 @@
1
+ import {
2
+ CHANGE_ENVELOPE_DIGEST_ALGORITHM,
3
+ CHANGE_ENVELOPE_SCHEMA_VERSION,
4
+ DEFAULT_TIME_TO_SAFE_FIX_GOAL,
5
+ MAX_CHANGE_ENVELOPE_APPROVALS,
6
+ MAX_CHANGE_ENVELOPE_APPROVAL_SCOPES,
7
+ MAX_CHANGE_ENVELOPE_ATTESTATIONS,
8
+ MAX_CHANGE_ENVELOPE_CHECKS,
9
+ TIME_TO_SAFE_FIX_CARRIERS,
10
+ TIME_TO_SAFE_FIX_DIAGNOSTIC_CODES,
11
+ TIME_TO_SAFE_FIX_FAILURE_ORIGINS,
12
+ TIME_TO_SAFE_FIX_FAILURE_STAGES,
13
+ TIME_TO_SAFE_FIX_GOALS,
14
+ TIME_TO_SAFE_FIX_PROFILES,
15
+ TIME_TO_SAFE_FIX_SCHEMA_VERSION,
16
+ canonicalizeChangeEnvelope,
17
+ changeEnvelopeApprovalSchema,
18
+ changeEnvelopeBaseSchema,
19
+ changeEnvelopeCheckSchema,
20
+ changeEnvelopeEvidenceSchema,
21
+ changeEnvelopeFingerprintsSchema,
22
+ changeEnvelopeInputSchema,
23
+ changeEnvelopePatchSchema,
24
+ changeEnvelopePreconditionsSchema,
25
+ changeEnvelopeSchema,
26
+ classifyTimeToSafeFixFailure,
27
+ cliChangeEnvelopeVerificationDocumentSchema,
28
+ cliDoctorDocumentSchema,
29
+ cliErrorDocumentSchema,
30
+ cliInitDocumentSchema,
31
+ cliJsonDocumentSchema,
32
+ cliJsonLineDocumentSchema,
33
+ cliProviderDocumentSchema,
34
+ cliReviewGroupDocumentSchema,
35
+ cliRunCancellationDocumentSchema,
36
+ cliRunCleanupDocumentSchema,
37
+ cliRunEventDocumentSchema,
38
+ cliRunExportDocumentSchema,
39
+ cliRunInspectionDocumentSchema,
40
+ cliRunListDocumentSchema,
41
+ cliRunResultDocumentSchema,
42
+ cliSessionDocumentSchema,
43
+ cliSessionListDocumentSchema,
44
+ cliStateExportDocumentSchema,
45
+ cliStateImportDocumentSchema,
46
+ cliStateStatusDocumentSchema,
47
+ cliStreamErrorDocumentSchema,
48
+ cliStreamResultDocumentSchema,
49
+ computeChangeEnvelopeDigest,
50
+ computeChangeEnvelopeEvidenceDigest,
51
+ createChangeEnvelope,
52
+ createTimeToSafeFixCases,
53
+ createTimeToSafeFixReport,
54
+ createTimeToSafeFixSample,
55
+ digestChangeEnvelopeArtifact,
56
+ externalAttestationReferenceSchema,
57
+ injectTimeToSafeFixAttack,
58
+ parseCliJsonDocument,
59
+ parseCliJsonLineDocument,
60
+ recommendCompactionModels,
61
+ timeToSafeFixDriverResultSchema,
62
+ timeToSafeFixLatencyStatistics,
63
+ timeToSafeFixTaskSchema,
64
+ verifyChangeEnvelope
65
+ } from "../index-8vm2m34s.js";
66
+ import {
67
+ HARNESS_STATE_BACKUP_MAX_BYTES,
68
+ HARNESS_STATE_BACKUP_SCHEMA_VERSION,
69
+ createHarnessStateBackup,
70
+ exportHarnessStateBackup,
71
+ importHarnessStateBackup,
72
+ importHarnessStateBackupFile,
73
+ inspectHarnessState,
74
+ readHarnessStateBackup,
75
+ stateBackupBundleSchema
76
+ } from "../index-a97bezbz.js";
77
+ import {
78
+ CLI_COMMAND_OPTION_CONTRACTS,
79
+ CLI_OPTION_DEFINITIONS,
80
+ CLI_OPTION_NAMES,
81
+ createHarnessRouteModels,
82
+ parseHarnessModelRoute,
83
+ resolveHarnessModelRoutes,
84
+ serializeHarnessModelRoutes,
85
+ validateCliCommandOptions
86
+ } from "../index-2jrdcj6b.js";
87
+ import {
88
+ harnessLocalCredentialsSchema,
89
+ openHarnessActivityStore,
90
+ readHarnessLocalCredentials,
91
+ recoverHarnessLocalService,
92
+ requestHarnessLocalService,
93
+ startHarnessLocalService
94
+ } from "../index-2gz7jv7g.js";
95
+ import {
96
+ createAcpConnection,
97
+ serveAcpStdio
98
+ } from "../index-3ah1f369.js";
99
+ import {
100
+ APPROVAL_HISTORY_KEY,
101
+ DEFAULT_HARNESS_CONTEXT_MANIFEST,
102
+ DEFAULT_HARNESS_PROJECT_INSTRUCTIONS,
103
+ HARNESS_CONTEXT_BUNDLE_SCHEMA_VERSION,
104
+ HARNESS_CONTEXT_CONFIG_SCHEMA_VERSION,
105
+ HARNESS_INSTRUCTIONS,
106
+ HARNESS_LIFECYCLE_EVENTS,
107
+ HARNESS_SUBAGENT_PROFILE_DESCRIPTORS,
108
+ MAX_HARNESS_CONTEXT_FILES,
109
+ MAX_HARNESS_CONTEXT_FILE_BYTES,
110
+ MAX_HARNESS_CONTEXT_TOTAL_BYTES,
111
+ MAX_HARNESS_SKILLS,
112
+ MAX_HARNESS_SKILL_DIRECTORIES,
113
+ MAX_HARNESS_SKILL_FILE_BYTES,
114
+ SEMANTIC_COMPACTION_VERSION,
115
+ appendUserMessage,
116
+ applyHarnessToolPolicy,
117
+ approvalDecisionViews,
118
+ assertHarnessModelCapabilities,
119
+ compactHarnessMessages,
120
+ createEmptyHarnessContextBundle,
121
+ createExecutionEnvironmentTools,
122
+ createHarness,
123
+ createHarnessClientAdapter,
124
+ createHarnessLifecycleDispatcher,
125
+ createHarnessSubagents,
126
+ createHarnessToolPolicy,
127
+ createProgressMonitor,
128
+ createSemanticCompactor,
129
+ estimateMessageTokens,
130
+ harnessContextConfigurationSchema,
131
+ harnessContextFingerprintInput,
132
+ harnessLifecycleFingerprintInput,
133
+ harnessPolicyDecisionEventSchema,
134
+ harnessSkillLoadInputSchema,
135
+ harnessToolPolicySchema,
136
+ inspectHarnessModelCapabilities,
137
+ inspectHarnessPolicy,
138
+ inspectHarnessTaskAcceptance,
139
+ isHarnessContextDigest,
140
+ loadHarnessProjectContext,
141
+ loadHarnessSkill,
142
+ renderHarnessContextInstructions,
143
+ reviseHarnessTaskAcceptance,
144
+ runHarness,
145
+ runHarnessReviewGroup,
146
+ selectHarnessModel
147
+ } from "../index-jgrx804e.js";
148
+ import {
149
+ HARNESS_OPERATIONS_SCHEMA_VERSION,
150
+ HARNESS_SQLITE_FILE,
151
+ TERMINAL_RUN_STATUSES,
152
+ cancelHarnessRun,
153
+ cleanupHarnessRuns,
154
+ inspectHarnessRun,
155
+ listHarnessRuns,
156
+ migrateLegacyFileRuns,
157
+ openHarnessPersistence,
158
+ openWorkspaceCheckpointStore
159
+ } from "../index-h0mqx2ed.js";
160
+ import"../index-8zzhggxv.js";
161
+ import {
162
+ HARNESS_SESSION_INDEX_FILE,
163
+ HARNESS_SESSION_SCHEMA_VERSION,
164
+ SESSION_RUN_STATUSES,
165
+ TASK_ACCEPTANCE_EVIDENCE_KEY,
166
+ TERMINAL_SESSION_RUN_STATUSES,
167
+ USAGE_LEDGER_KEY,
168
+ compileTaskAcceptanceContract,
169
+ inspectRuntimeManifest,
170
+ inspectUsageLedger,
171
+ openCliSessionStore,
172
+ openSessionStore,
173
+ readTaskAcceptanceLedger,
174
+ taskAcceptanceContractSchema,
175
+ validateStateDirectory
176
+ } from "../index-42gp2hy8.js";
177
+ import {
178
+ BUN_ENGINE_RANGE,
179
+ HARNESS_MCP_CONFIG_SCHEMA_VERSION,
180
+ HARNESS_MCP_PERMISSIONS,
181
+ HARNESS_VERSION,
182
+ NODE_ENGINE_RANGE,
183
+ createHarnessMcpTools,
184
+ createHttpMcpClient,
185
+ loadHarnessMcpConfiguration,
186
+ normalizeHarnessMcpConfiguration
187
+ } from "../index-t60rva31.js";
188
+ import {
189
+ CliOciRuntimeAdapter,
190
+ HARNESS_EXECUTION_ARTIFACT_SCHEMA_VERSION,
191
+ HARNESS_OCI_LABEL,
192
+ HARNESS_OCI_LABEL_VALUE,
193
+ Workspace,
194
+ cleanupHarnessExecutionArtifacts,
195
+ createHarnessOciExecutionEnvironment,
196
+ describeOciCommand,
197
+ executionFingerprintInput,
198
+ harnessExecutionSession
199
+ } from "../index-z0qxmkm2.js";
200
+ import {
201
+ EDIT_CONTRACT_SCHEMA_VERSION,
202
+ EDIT_DIGEST_ALGORITHM,
203
+ MAX_EDIT_CHANGES,
204
+ MAX_EDIT_FILE_BYTES,
205
+ MAX_EDIT_PROPOSAL_BYTES,
206
+ applyEditProposalInputSchema,
207
+ createEditProposal,
208
+ editChangeSchema,
209
+ editChangesSchema,
210
+ editContractDocument,
211
+ editProposalChangeSchema,
212
+ editProposalInputSchema,
213
+ editProposalSchema,
214
+ fileDigestSchema,
215
+ moveFileInputSchema,
216
+ mutationAuditEntrySchema,
217
+ mutationOperationSchema,
218
+ quarantineFileInputSchema,
219
+ restoreFileInputSchema,
220
+ taskCheckReceiptSchema,
221
+ validateEditProposal,
222
+ workspaceFilePathSchema
223
+ } from "../index-yb239ghk.js";
224
+ import {
225
+ BUILTIN_PROVIDER_REGISTRATIONS,
226
+ DEFAULT_ALLOWED_CHECKS,
227
+ DEFAULT_OCI_EXECUTION,
228
+ DEFAULT_PROVIDER_REGISTRY,
229
+ DEFAULT_SUBAGENT_BUDGET,
230
+ HARNESS_CONFIG_MIGRATABLE_SCHEMA_VERSIONS,
231
+ HARNESS_CONFIG_SCHEMA_VERSION,
232
+ HARNESS_ERROR_CODES,
233
+ HARNESS_ERROR_SCHEMA_VERSION,
234
+ HARNESS_EXECUTION_BACKENDS,
235
+ HARNESS_EXECUTION_POLICY_VERSION,
236
+ HARNESS_OCI_RUNTIMES,
237
+ HARNESS_OCI_SHELL_MODES,
238
+ HARNESS_REQUIRED_CAPABILITIES,
239
+ HARNESS_SUBAGENT_PROFILES,
240
+ HarnessApprovalError,
241
+ HarnessConfigError,
242
+ HarnessError,
243
+ HarnessExecutionError,
244
+ HarnessProviderError,
245
+ HarnessStateConflictError,
246
+ HarnessWorkspaceError,
247
+ PROVIDERS,
248
+ PROVIDER_DESCRIPTORS,
249
+ createProviderModel,
250
+ createProviderRegistry,
251
+ defaultHarnessNamespace,
252
+ harnessErrorDocument,
253
+ migrateHarnessConfigInput,
254
+ normalizeHarnessError,
255
+ parseProvider,
256
+ providerAvailability,
257
+ providerDescriptor,
258
+ resolveHarnessConfig
259
+ } from "../index-gq9xagx2.js";
260
+ import"../index-8705zxpr.js";
261
+ import"../index-xqxeypt5.js";
262
+ import {
263
+ CLI_EVENT_SCHEMA_VERSION,
264
+ CLI_JSON_SCHEMA_VERSION,
265
+ HARNESS_CLIENT_PROTOCOL_VERSION,
266
+ harnessClientCommandSchema,
267
+ harnessClientRequestSchema,
268
+ serializeStreamEvent,
269
+ serializeStreamResult,
270
+ streamEventDocument,
271
+ streamResultDocument
272
+ } from "../index-qfpz5y2v.js";
273
+ import"../index-1bx83sw4.js";
274
+ // src/persistence/governance-report.ts
275
+ import { createHash as createHash2 } from "node:crypto";
276
+ import { z as z2 } from "zod";
277
+
278
+ // src/persistence/governance-context.ts
279
+ import { createHash } from "node:crypto";
280
+ import { z } from "zod";
281
+ var digest = z.string().regex(/^sha256:[a-f0-9]{64}$/);
282
+ var count = z.number().int().nonnegative().safe();
283
+ var governanceReference = (kind, value) => "sha256:" + createHash("sha256").update(JSON.stringify([kind, value])).digest("hex");
284
+ var governanceSessionSchema = z.strictObject({ availability: z.enum(["recorded", "unavailable"]), reference: digest.nullable(), revision: count.nullable() });
285
+ var governanceHistorySchema = z.strictObject({
286
+ availability: z.enum(["recorded", "unavailable"]),
287
+ retention: z.enum(["unknown", "retained", "expired"]),
288
+ incomplete: z.boolean(),
289
+ policyDecisions: z.array(z.strictObject({
290
+ runReference: digest,
291
+ sequence: count,
292
+ toolReference: digest,
293
+ phase: z.enum(["approval-request", "tool-entry"]),
294
+ decision: z.enum(["allow", "ask_user", "deny"]),
295
+ policyDigest: digest.nullable(),
296
+ source: z.enum(["operator-file", "application", "baseline"]),
297
+ ruleReferences: z.array(digest).max(128),
298
+ explicitReviewRequired: z.boolean()
299
+ })).max(512)
300
+ });
301
+ var governanceEnvelopeSchema = z.strictObject({
302
+ source: z.literal("caller-supplied"),
303
+ envelopeId: digest.nullable(),
304
+ patchReference: digest.nullable(),
305
+ patchDigest: digest.nullable(),
306
+ linkedRunReferences: z.array(digest).max(64),
307
+ schemaValid: z.boolean(),
308
+ integrity: z.enum(["valid", "invalid"]),
309
+ expiration: z.enum(["unknown", "current", "expired", "not-yet-valid"]),
310
+ checkedAt: z.iso.datetime(),
311
+ expiredApprovals: count,
312
+ authenticity: z.literal("not-verified"),
313
+ patchBytes: z.literal("not-verified")
314
+ });
315
+ async function readGovernanceSession(source, rootRunId, runIds) {
316
+ const session = { availability: "unavailable", reference: null, revision: null };
317
+ const history = { availability: "unavailable", retention: "unknown", incomplete: true, policyDecisions: [] };
318
+ if (!source)
319
+ return { session, history, verify: async () => {} };
320
+ const initial = await source.index.get(source.id);
321
+ if (!initial || initial.sessionId !== source.id || !initial.runs.some((run) => run.runId === rootRunId))
322
+ throw new Error("GOVERNANCE_SESSION_MISMATCH");
323
+ const captured = JSON.stringify(initial);
324
+ session.availability = "recorded";
325
+ session.reference = governanceReference("session", initial.sessionId);
326
+ session.revision = initial.revision;
327
+ const pages = [];
328
+ if (source.history) {
329
+ let cursor = 0;
330
+ history.availability = "recorded";
331
+ history.retention = "retained";
332
+ history.incomplete = false;
333
+ for (let pageIndex = 0;pageIndex < 50; pageIndex++) {
334
+ const page = source.history.replay(source.id, cursor);
335
+ pages.push({ cursor, digest: governanceReference("history-page", JSON.stringify(page)) });
336
+ if (page.schemaVersion !== 1 || !Number.isSafeInteger(page.nextCursor) || page.nextCursor < cursor || page.events.length > 200)
337
+ throw new Error("GOVERNANCE_HISTORY_INVALID");
338
+ if (page.cursorExpired || page.policyEvidenceIncomplete) {
339
+ history.retention = "expired";
340
+ history.incomplete = true;
341
+ }
342
+ let lastSequence = cursor;
343
+ for (const event of page.events) {
344
+ if (event.sessionId !== source.id || !Number.isSafeInteger(event.sequence) || event.sequence <= lastSequence || event.sequence > page.nextCursor)
345
+ throw new Error("GOVERNANCE_HISTORY_INVALID");
346
+ lastSequence = event.sequence;
347
+ if (!runIds.has(event.runId) || event.activity.type !== "policy-decision")
348
+ continue;
349
+ const parsed = harnessPolicyDecisionEventSchema.safeParse(event.activity);
350
+ if (!parsed.success) {
351
+ history.incomplete = true;
352
+ continue;
353
+ }
354
+ if (history.policyDecisions.length === 512) {
355
+ history.incomplete = true;
356
+ continue;
357
+ }
358
+ const value = parsed.data;
359
+ history.policyDecisions.push({
360
+ runReference: governanceReference("run", event.runId),
361
+ sequence: event.sequence,
362
+ toolReference: governanceReference("tool", value.toolName),
363
+ phase: value.phase,
364
+ decision: value.decision,
365
+ policyDigest: value.policyDigest,
366
+ source: value.source,
367
+ ruleReferences: value.ruleIds.map((rule) => governanceReference("rule", rule)),
368
+ explicitReviewRequired: value.explicitReviewRequired
369
+ });
370
+ }
371
+ if (page.cursorExpired || !page.hasMore)
372
+ break;
373
+ if (page.nextCursor === cursor)
374
+ throw new Error("GOVERNANCE_HISTORY_INVALID");
375
+ cursor = page.nextCursor;
376
+ if (pageIndex === 49)
377
+ history.incomplete = true;
378
+ }
379
+ }
380
+ return { session, history, verify: async () => {
381
+ for (const page of pages)
382
+ if (governanceReference("history-page", JSON.stringify(source.history.replay(source.id, page.cursor))) !== page.digest)
383
+ throw new Error("GOVERNANCE_STATE_CHANGED");
384
+ if (JSON.stringify(await source.index.get(source.id)) !== captured)
385
+ throw new Error("GOVERNANCE_STATE_CHANGED");
386
+ } };
387
+ }
388
+ function projectGovernanceEnvelopes(envelopes, patches, now) {
389
+ if (envelopes.length > 32)
390
+ throw new Error("GOVERNANCE_ENVELOPE_LIMIT");
391
+ return envelopes.map((input) => {
392
+ if (Buffer.byteLength(JSON.stringify(input) ?? "") > 256 * 1024)
393
+ throw new Error("GOVERNANCE_ENVELOPE_LIMIT");
394
+ const parsed = changeEnvelopeSchema.safeParse(input);
395
+ const proof = verifyChangeEnvelope(input, { now });
396
+ const envelope = parsed.success ? parsed.data : undefined;
397
+ return governanceEnvelopeSchema.parse({
398
+ source: "caller-supplied",
399
+ envelopeId: envelope?.envelopeId ?? null,
400
+ patchReference: envelope ? governanceReference("patch", envelope.patch.patchId) : null,
401
+ patchDigest: envelope?.patch.patchDigest ?? null,
402
+ linkedRunReferences: envelope ? [...patches.get(envelope.patch.patchId) ?? []] : [],
403
+ schemaValid: parsed.success,
404
+ integrity: proof.integrity.envelopeDigestValid && proof.integrity.evidenceDigestValid ? "valid" : "invalid",
405
+ expiration: !envelope ? "unknown" : proof.expiration.envelopeNotYetValid ? "not-yet-valid" : proof.expiration.envelopeExpired ? "expired" : "current",
406
+ checkedAt: proof.expiration.checkedAt,
407
+ expiredApprovals: proof.expiration.expiredApprovalIds.length,
408
+ authenticity: "not-verified",
409
+ patchBytes: "not-verified"
410
+ });
411
+ });
412
+ }
413
+
414
+ // src/persistence/governance-report.ts
415
+ var digest2 = z2.string().regex(/^sha256:[a-f0-9]{64}$/);
416
+ var version = z2.string().regex(/^\d+\.\d+\.\d+(?:[-+][a-zA-Z0-9.-]+)?$/);
417
+ var bindingSchema = z2.object({ schemaVersion: z2.literal(1), id: z2.literal("zhivex-harness"), version, fingerprint: digest2, algorithm: z2.literal("sha256") });
418
+ var count2 = z2.number().int().nonnegative().safe();
419
+ var status = z2.enum(["created", "running", "waiting_approval", "cancel_requested", "completed", "failed", "cancelled", "timed_out", "unknown"]);
420
+ var availability = z2.enum(["recorded", "unavailable", "invalid"]);
421
+ var providerReason = z2.enum(["empty_arguments", "invalid_json", "arguments_too_large", "incomplete_arguments", "inconsistent_metadata", "response_failed", "response_incomplete", "stream_truncated"]);
422
+ var deliveryReason = z2.enum(["TASK_ACCEPTANCE_NO_DELIVERY_EVIDENCE", "TASK_ACCEPTANCE_SCOPE_VIOLATION", "TASK_ACCEPTANCE_RUN_NOT_COMPLETED", "TASK_ACCEPTANCE_RUN_NOT_FINISHED", "TASK_ACCEPTANCE_IMPORT_UNCONFIRMED", "TASK_ACCEPTANCE_CHECKS_MISSING", "TASK_ACCEPTANCE_DELIVERY_DRIFT", "TASK_ACCEPTANCE_DELIVERY_INSPECTION_FAILED", "TASK_ACCEPTANCE_HUMAN_REVIEW_REQUIRED", "TASK_ACCEPTANCE_VERIFIED"]);
423
+ var deliveryStatus = z2.enum(["pending", "incomplete", "failed", "pending_review", "verified", "unknown"]);
424
+ var checkSchema = z2.strictObject({
425
+ reference: digest2,
426
+ argvDigest: digest2,
427
+ patchId: digest2,
428
+ snapshotDigest: digest2,
429
+ exitCode: z2.number().int(),
430
+ timedOut: z2.boolean(),
431
+ unchanged: z2.boolean()
432
+ });
433
+ var deliverySchema = z2.object({
434
+ schemaVersion: z2.literal(1),
435
+ contractRevision: count2,
436
+ contractDigest: digest2,
437
+ status: deliveryStatus,
438
+ checks: z2.array(taskCheckReceiptSchema).max(32),
439
+ delivery: z2.object({ runId: z2.string().max(512), executionIdentity: z2.string().max(512), patchId: digest2, snapshotDigest: digest2 }).optional()
440
+ });
441
+ var approvalSchema = z2.strictObject({
442
+ reference: digest2,
443
+ toolReference: digest2,
444
+ approved: z2.boolean(),
445
+ origin: z2.enum(["interactive", "automatic", "application", "unknown"]),
446
+ channelReference: digest2,
447
+ policyDigest: digest2.nullable(),
448
+ status: z2.enum(["rejected", "approved", "applied", "succeeded", "failed", "unknown"]),
449
+ proposalId: digest2.nullable(),
450
+ exitCode: z2.number().int().nullable(),
451
+ timedOut: z2.boolean().nullable(),
452
+ effects: z2.array(z2.strictObject({ pathReference: digest2, beforeDigest: digest2.nullable(), afterDigest: digest2.nullable() })).max(50)
453
+ });
454
+ var delegationReason = z2.enum(["valid", "invalid_json", "invalid_schema", "task_mismatch", "incomplete", "duplicate_claim", "path_denied", "evidence_missing", "coverage_missing", "missing_child", "child_identity_unavailable"]);
455
+ var delegationSchema = z2.strictObject({
456
+ taskReference: digest2,
457
+ childReference: digest2.nullable(),
458
+ recordedAcceptance: z2.boolean(),
459
+ reason: delegationReason,
460
+ semanticReview: z2.enum(["pending", "not_requested"]),
461
+ correctionsUsed: count2.nullable()
462
+ });
463
+ var delegationInput = z2.object({ schemaVersion: z2.literal(1), evaluations: z2.array(z2.object({
464
+ taskId: z2.string().max(128),
465
+ childRunId: z2.string().max(512).nullable(),
466
+ childStatus: z2.string().max(32),
467
+ accepted: z2.boolean(),
468
+ reason: delegationReason,
469
+ semanticReview: z2.enum(["pending", "not_requested"]),
470
+ correctionsUsed: count2.optional()
471
+ })).max(64) });
472
+ var runSchema = z2.strictObject({
473
+ reference: digest2,
474
+ parentReference: digest2.nullable(),
475
+ revision: count2.nullable(),
476
+ status,
477
+ finalized: z2.boolean(),
478
+ failure: z2.enum(["run_failed", "cancelled", "timed_out", "not_reported"]).nullable(),
479
+ failureDetails: z2.strictObject({ providerToolReason: providerReason.nullable(), diagnosticReference: digest2.nullable(), deliveryReason: deliveryReason.nullable() }),
480
+ identity: z2.literal("not-verified"),
481
+ runtimePolicy: z2.enum(["assistant-v3-durable-closure"]).nullable(),
482
+ contract: z2.strictObject({
483
+ availability,
484
+ digest: digest2.nullable(),
485
+ revision: count2.nullable(),
486
+ requiredChecks: count2.nullable(),
487
+ humanReviewsPending: count2.nullable(),
488
+ allowedWritePathReferences: z2.array(digest2).max(256),
489
+ protectedPathReferences: z2.array(digest2).max(256),
490
+ checks: z2.array(z2.strictObject({ reference: digest2, argvDigest: digest2, kind: z2.enum(["argv", "package-script"]), backend: z2.enum(["none", "oci"]), approval: z2.literal("required") })).max(32),
491
+ humanReviewReferences: z2.array(digest2).max(32)
492
+ }),
493
+ delivery: z2.strictObject({
494
+ availability,
495
+ status: deliveryStatus,
496
+ patchId: digest2.nullable(),
497
+ snapshotDigest: digest2.nullable(),
498
+ interpretation: z2.literal("recorded-checkpoint-not-current-workspace-verification"),
499
+ checks: z2.array(checkSchema).max(32)
500
+ }),
501
+ approvals: z2.strictObject({ availability, items: z2.array(approvalSchema).max(512) }),
502
+ usage: z2.strictObject({
503
+ availability: z2.enum(["recorded", "unavailable"]),
504
+ calls: count2.nullable(),
505
+ inputTokens: count2.nullable(),
506
+ outputTokens: count2.nullable(),
507
+ complete: z2.boolean().nullable(),
508
+ estimatedUsd: z2.number().finite().nonnegative().nullable(),
509
+ costKind: z2.literal("estimate-not-invoice")
510
+ }),
511
+ journal: z2.strictObject({ availability: z2.enum(["recorded", "unavailable"]), entries: count2, failed: count2, unfinished: count2 }),
512
+ delegations: z2.strictObject({ availability, interpretation: z2.literal("recorded-checkpoint-not-semantic-review"), items: z2.array(delegationSchema).max(64) }),
513
+ children: z2.array(digest2).max(64)
514
+ });
515
+ var harnessGovernanceReportSchema = z2.strictObject({
516
+ schemaVersion: z2.literal(1),
517
+ kind: z2.literal("harness-governance-report"),
518
+ exporterVersion: z2.string().regex(/^\d+\.\d+\.\d+(?:[-+][a-zA-Z0-9.-]+)?$/),
519
+ executionArtifact: z2.strictObject({ version: version.nullable(), digest: z2.null(), availability: z2.enum(["recorded-version", "unavailable"]), configurationFingerprint: digest2.nullable(), authenticity: z2.literal("not-verified") }),
520
+ rootReference: digest2,
521
+ identity: z2.literal("not-verified"),
522
+ referencePolicy: z2.literal("sha256-domain-separated-pseudonyms-not-anonymity"),
523
+ session: governanceSessionSchema,
524
+ eventHistory: governanceHistorySchema,
525
+ changeEnvelopes: z2.array(governanceEnvelopeSchema).max(32),
526
+ runs: z2.array(runSchema).max(64),
527
+ missingChildren: z2.array(digest2).max(64),
528
+ limitations: z2.array(z2.enum(["tree_limit", "missing_child", "invalid_contract", "invalid_delivery", "invalid_approvals", "journal_unavailable"])).max(6)
529
+ });
530
+ var MAX_JOURNAL = 2048;
531
+ var MAX_REPORT_BYTES = 2 * 1024 * 1024;
532
+ var sameScope = (state, scope) => !state.scope || state.scope.tenantId === scope?.tenantId && state.scope.userId === scope?.userId && state.scope.namespace === scope?.namespace;
533
+ function projectRun(state, journal, limitations) {
534
+ const runStatus = status.safeParse(state.status);
535
+ const stateStatus = runStatus.success ? runStatus.data : "unknown";
536
+ let ledger;
537
+ let contractAvailability = "unavailable";
538
+ try {
539
+ ledger = readTaskAcceptanceLedger(state);
540
+ if (ledger)
541
+ contractAvailability = "recorded";
542
+ } catch {
543
+ contractAvailability = "invalid";
544
+ limitations.add("invalid_contract");
545
+ }
546
+ const contract = ledger?.revisions.at(-1);
547
+ const rawDelivery = state.metadata?.[TASK_ACCEPTANCE_EVIDENCE_KEY];
548
+ const parsedDelivery = deliverySchema.safeParse(rawDelivery);
549
+ const bound = parsedDelivery.success && contract && parsedDelivery.data.contractDigest === contract.digest && parsedDelivery.data.contractRevision === contract.revision && (!parsedDelivery.data.delivery || parsedDelivery.data.delivery.runId === state.runId);
550
+ const candidate = bound ? parsedDelivery.data : undefined;
551
+ const verified = candidate?.status === "verified" || candidate?.status === "pending_review";
552
+ const validSuccess = !verified || stateStatus === "completed" && candidate.delivery && contract && contract.contract.requiredChecks.every((required) => candidate.checks.some((check) => check.checkId === required.id && check.runId === state.runId && check.argvDigest === "sha256:" + createHash2("sha256").update(JSON.stringify([required.command, ...required.args])).digest("hex") && check.contractDigest === contract.digest && check.contractRevision === contract.revision && check.exitCode === 0 && !check.timedOut && check.unchanged && check.patchId === candidate.delivery.patchId && check.snapshotDigest === candidate.delivery.snapshotDigest && check.executionIdentity === candidate.delivery.executionIdentity)) && candidate.status === "pending_review" === contract.contract.humanReview.length > 0;
553
+ const delivery = validSuccess ? candidate : undefined;
554
+ if (rawDelivery !== undefined && !delivery)
555
+ limitations.add("invalid_delivery");
556
+ const approvals = { availability: state.metadata?.[APPROVAL_HISTORY_KEY] === undefined ? "unavailable" : "recorded", items: [] };
557
+ try {
558
+ for (let offset = 0;offset < 512; offset += 25) {
559
+ const rows = approvalDecisionViews(state, journal ?? [], offset);
560
+ for (const row of rows)
561
+ approvals.items.push({
562
+ reference: governanceReference("approval", row.approvalId),
563
+ toolReference: governanceReference("tool", row.name),
564
+ approved: row.approved,
565
+ origin: row.provenance?.origin ?? "unknown",
566
+ channelReference: governanceReference("channel", row.provenance?.channel ?? "unknown"),
567
+ policyDigest: row.provenance?.policyDigest ?? null,
568
+ status: row.status,
569
+ proposalId: row.evidence?.proposalId ?? null,
570
+ exitCode: row.evidence?.exitCode ?? null,
571
+ timedOut: row.evidence?.timedOut ?? null,
572
+ effects: (row.evidence?.effects ?? []).map((effect) => ({ pathReference: governanceReference("path", effect.path), beforeDigest: effect.beforeDigest, afterDigest: effect.afterDigest }))
573
+ });
574
+ if (rows.length < 25)
575
+ break;
576
+ }
577
+ } catch {
578
+ approvals.availability = "invalid";
579
+ approvals.items = [];
580
+ limitations.add("invalid_approvals");
581
+ }
582
+ const parsedUsage = inspectUsageLedger(state.metadata?.[USAGE_LEDGER_KEY]);
583
+ const usage = parsedUsage?.runId === state.runId ? parsedUsage : null;
584
+ const rawDelegations = state.metadata?.zhivexDelegationAcceptanceV1;
585
+ const delegations = delegationInput.safeParse(rawDelegations);
586
+ const manifest = inspectRuntimeManifest(state.metadata?.effectiveRuntime);
587
+ return {
588
+ reference: governanceReference("run", state.runId),
589
+ parentReference: state.parentRunId ? governanceReference("run", state.parentRunId) : null,
590
+ revision: count2.safeParse(state.revision).success ? state.revision : null,
591
+ status: stateStatus,
592
+ finalized: ["completed", "failed", "cancelled", "timed_out"].includes(stateStatus),
593
+ failure: stateStatus === "failed" ? "run_failed" : stateStatus === "cancelled" ? "cancelled" : stateStatus === "timed_out" ? "timed_out" : state.error ? "not_reported" : null,
594
+ failureDetails: {
595
+ providerToolReason: providerReason.safeParse(state.error?.reason).success ? state.error.reason : null,
596
+ diagnosticReference: state.error?.diagnosticCode ? governanceReference("diagnostic", state.error.diagnosticCode) : null,
597
+ deliveryReason: deliveryReason.safeParse(rawDelivery && typeof rawDelivery === "object" && !Array.isArray(rawDelivery) ? rawDelivery.reason : undefined).success ? rawDelivery.reason : null
598
+ },
599
+ identity: "not-verified",
600
+ runtimePolicy: manifest?.policyVersion ?? null,
601
+ contract: {
602
+ availability: contractAvailability,
603
+ digest: contract?.digest ?? null,
604
+ revision: contract?.revision ?? null,
605
+ requiredChecks: contract?.contract.requiredChecks.length ?? null,
606
+ humanReviewsPending: contract?.contract.humanReview.length ?? null,
607
+ allowedWritePathReferences: contract?.contract.allowedWritePaths.map((file) => governanceReference("path", file)) ?? [],
608
+ protectedPathReferences: contract?.contract.protectedFiles.map((file) => governanceReference("path", file)) ?? [],
609
+ checks: contract?.contract.requiredChecks.map((check) => ({ reference: governanceReference("check", check.id), argvDigest: "sha256:" + createHash2("sha256").update(JSON.stringify([check.command, ...check.args])).digest("hex"), kind: check.kind, backend: check.execution.backend, approval: check.execution.approval })) ?? [],
610
+ humanReviewReferences: contract?.contract.humanReview.map((review) => governanceReference("review", review.id)) ?? []
611
+ },
612
+ delivery: {
613
+ availability: delivery ? "recorded" : rawDelivery === undefined ? "unavailable" : "invalid",
614
+ status: delivery?.status ?? "unknown",
615
+ patchId: delivery?.delivery?.patchId ?? null,
616
+ snapshotDigest: delivery?.delivery?.snapshotDigest ?? null,
617
+ interpretation: "recorded-checkpoint-not-current-workspace-verification",
618
+ checks: (delivery?.checks ?? []).filter((check) => check.runId === state.runId && check.contractDigest === contract?.digest && check.contractRevision === contract?.revision).map((check) => ({ reference: governanceReference("check", check.checkId), argvDigest: check.argvDigest, patchId: check.patchId, snapshotDigest: check.snapshotDigest, exitCode: check.exitCode, timedOut: check.timedOut, unchanged: check.unchanged }))
619
+ },
620
+ approvals,
621
+ usage: {
622
+ availability: usage ? "recorded" : "unavailable",
623
+ calls: usage?.calls ?? null,
624
+ inputTokens: usage?.inputTokens ?? null,
625
+ outputTokens: usage?.outputTokens ?? null,
626
+ complete: usage?.usageComplete ?? null,
627
+ estimatedUsd: usage?.estimatedUsd ?? null,
628
+ costKind: "estimate-not-invoice"
629
+ },
630
+ journal: {
631
+ availability: journal ? "recorded" : "unavailable",
632
+ entries: journal?.length ?? 0,
633
+ failed: journal?.filter((entry) => entry.status === "failed").length ?? 0,
634
+ unfinished: journal?.filter((entry) => entry.status !== "completed" && entry.status !== "failed").length ?? 0
635
+ },
636
+ delegations: {
637
+ availability: rawDelegations === undefined ? "unavailable" : delegations.success ? "recorded" : "invalid",
638
+ interpretation: "recorded-checkpoint-not-semantic-review",
639
+ items: delegations.success ? delegations.data.evaluations.map((item) => ({
640
+ taskReference: governanceReference("task", item.taskId),
641
+ childReference: item.childRunId ? governanceReference("run", item.childRunId) : null,
642
+ recordedAcceptance: item.accepted,
643
+ reason: item.reason,
644
+ semanticReview: item.semanticReview,
645
+ correctionsUsed: item.correctionsUsed ?? null
646
+ })) : []
647
+ },
648
+ children: (state.childRuns ?? []).slice(0, 64).map((child) => governanceReference("run", child.runId))
649
+ };
650
+ }
651
+ async function exportHarnessGovernanceReport(store, scope, runId, options = {}) {
652
+ const limitations = new Set;
653
+ const runs = [], missingChildren = [];
654
+ const observed = [];
655
+ const queue = [{ id: runId }], seen = new Set;
656
+ while (queue.length && runs.length + missingChildren.length < 64) {
657
+ const item = queue.shift();
658
+ if (seen.has(item.id))
659
+ continue;
660
+ seen.add(item.id);
661
+ const loaded = await store.load(item.id, scope);
662
+ const state = loaded ? structuredClone(loaded) : undefined;
663
+ if (!state || state.runId !== item.id || !sameScope(state, scope) || item.parent !== undefined && state.parentRunId !== item.parent) {
664
+ if (item.parent === undefined)
665
+ throw new Error("GOVERNANCE_RUN_UNAVAILABLE");
666
+ missingChildren.push(governanceReference("run", item.id));
667
+ limitations.add("missing_child");
668
+ continue;
669
+ }
670
+ const loadedJournal = await store.listToolCalls?.(state.runId, scope);
671
+ const journal = loadedJournal ? structuredClone(loadedJournal) : undefined;
672
+ if (journal && journal.length > MAX_JOURNAL)
673
+ throw new Error("GOVERNANCE_JOURNAL_LIMIT");
674
+ if (journal?.some((entry) => entry.runId !== state.runId))
675
+ throw new Error("GOVERNANCE_JOURNAL_SCOPE");
676
+ if (!journal)
677
+ limitations.add("journal_unavailable");
678
+ observed.push({ state, journal });
679
+ runs.push(projectRun(state, journal, limitations));
680
+ if ((state.childRuns?.length ?? 0) > 64)
681
+ limitations.add("tree_limit");
682
+ for (const child of (state.childRuns ?? []).slice(0, 64))
683
+ queue.push({ id: child.runId, parent: state.runId });
684
+ }
685
+ if (queue.length)
686
+ limitations.add("tree_limit");
687
+ const context = await readGovernanceSession(options.session, runId, new Set(observed.map((item) => item.state.runId)));
688
+ for (const { state, journal } of observed) {
689
+ const current = await store.load(state.runId, scope);
690
+ const currentJournal = await store.listToolCalls?.(state.runId, scope);
691
+ if (!current || JSON.stringify(current) !== JSON.stringify(state) || JSON.stringify(currentJournal) !== JSON.stringify(journal))
692
+ throw new Error("GOVERNANCE_STATE_CHANGED");
693
+ }
694
+ await context.verify();
695
+ const patches = new Map;
696
+ for (const run of runs)
697
+ for (const patch of new Set([run.delivery.patchId, ...run.approvals.items.map((row) => row.proposalId)].filter((id) => id !== null)))
698
+ patches.set(patch, [...patches.get(patch) ?? [], run.reference]);
699
+ const binding = bindingSchema.safeParse(observed[0]?.state.harness);
700
+ const report = harnessGovernanceReportSchema.parse({
701
+ schemaVersion: 1,
702
+ kind: "harness-governance-report",
703
+ exporterVersion: HARNESS_VERSION,
704
+ executionArtifact: { version: binding.success ? binding.data.version : null, digest: null, availability: binding.success ? "recorded-version" : "unavailable", configurationFingerprint: binding.success ? binding.data.fingerprint : null, authenticity: "not-verified" },
705
+ rootReference: governanceReference("run", runId),
706
+ identity: "not-verified",
707
+ referencePolicy: "sha256-domain-separated-pseudonyms-not-anonymity",
708
+ session: context.session,
709
+ eventHistory: context.history,
710
+ changeEnvelopes: projectGovernanceEnvelopes(options.changeEnvelopes ?? [], patches, options.now ?? Date.now()),
711
+ runs,
712
+ missingChildren,
713
+ limitations: [...limitations].sort()
714
+ });
715
+ if (Buffer.byteLength(JSON.stringify(report)) > MAX_REPORT_BYTES)
716
+ throw new Error("GOVERNANCE_REPORT_LIMIT");
717
+ return report;
718
+ }
719
+ function renderHarnessGovernanceMarkdown(input) {
720
+ const report = harnessGovernanceReportSchema.parse(input);
721
+ return [
722
+ "# Execution and governance report",
723
+ "",
724
+ `Schema: ${report.schemaVersion}. Exporter: ${report.exporterVersion}.`,
725
+ `Identity: not verified. Recorded execution version: ${report.executionArtifact.version ?? "unavailable"}. Artifact digest: unavailable. Hash references are pseudonyms, not signatures.`,
726
+ "Delivery describes a recorded checkpoint; export does not recheck the workspace.",
727
+ "",
728
+ "| Run reference | Execution | Recorded delivery | Usage |",
729
+ "| --- | --- | --- | --- |",
730
+ ...report.runs.map((run) => `| ${run.reference} | ${run.status} | ${run.delivery.status} | ${run.usage.availability === "unavailable" ? "unavailable" : `${run.usage.inputTokens} input / ${run.usage.outputTokens} output (${run.usage.complete ? "complete" : "incomplete"})`} |`),
731
+ "",
732
+ `Missing children: ${report.missingChildren.length}. Limitations: ${report.limitations.join(", ") || "none detected"}.`,
733
+ `Session: ${report.session.availability}. Event history: ${report.eventHistory.availability}. Retention: ${report.eventHistory.retention}. Incomplete: ${report.eventHistory.incomplete}.`,
734
+ `Change envelopes: ${report.changeEnvelopes.length}. Envelope integrity does not verify patch bytes or authenticity. Estimates are not invoices.`,
735
+ ""
736
+ ].join(`
737
+ `);
738
+ }
739
+ export {
740
+ BUILTIN_PROVIDER_REGISTRATIONS,
741
+ BUN_ENGINE_RANGE,
742
+ CHANGE_ENVELOPE_DIGEST_ALGORITHM,
743
+ CHANGE_ENVELOPE_SCHEMA_VERSION,
744
+ CLI_COMMAND_OPTION_CONTRACTS,
745
+ CLI_EVENT_SCHEMA_VERSION,
746
+ CLI_JSON_SCHEMA_VERSION,
747
+ CLI_OPTION_DEFINITIONS,
748
+ CLI_OPTION_NAMES,
749
+ CliOciRuntimeAdapter,
750
+ DEFAULT_ALLOWED_CHECKS,
751
+ DEFAULT_HARNESS_CONTEXT_MANIFEST,
752
+ DEFAULT_HARNESS_PROJECT_INSTRUCTIONS,
753
+ DEFAULT_OCI_EXECUTION,
754
+ DEFAULT_PROVIDER_REGISTRY,
755
+ DEFAULT_SUBAGENT_BUDGET,
756
+ DEFAULT_TIME_TO_SAFE_FIX_GOAL,
757
+ EDIT_CONTRACT_SCHEMA_VERSION,
758
+ EDIT_DIGEST_ALGORITHM,
759
+ HARNESS_CLIENT_PROTOCOL_VERSION,
760
+ HARNESS_CONFIG_MIGRATABLE_SCHEMA_VERSIONS,
761
+ HARNESS_CONFIG_SCHEMA_VERSION,
762
+ HARNESS_CONTEXT_BUNDLE_SCHEMA_VERSION,
763
+ HARNESS_CONTEXT_CONFIG_SCHEMA_VERSION,
764
+ HARNESS_ERROR_CODES,
765
+ HARNESS_ERROR_SCHEMA_VERSION,
766
+ HARNESS_EXECUTION_ARTIFACT_SCHEMA_VERSION,
767
+ HARNESS_EXECUTION_BACKENDS,
768
+ HARNESS_EXECUTION_POLICY_VERSION,
769
+ HARNESS_INSTRUCTIONS,
770
+ HARNESS_LIFECYCLE_EVENTS,
771
+ HARNESS_MCP_CONFIG_SCHEMA_VERSION,
772
+ HARNESS_MCP_PERMISSIONS,
773
+ HARNESS_OCI_LABEL,
774
+ HARNESS_OCI_LABEL_VALUE,
775
+ HARNESS_OCI_RUNTIMES,
776
+ HARNESS_OCI_SHELL_MODES,
777
+ HARNESS_OPERATIONS_SCHEMA_VERSION,
778
+ HARNESS_REQUIRED_CAPABILITIES,
779
+ HARNESS_SESSION_INDEX_FILE,
780
+ HARNESS_SESSION_SCHEMA_VERSION,
781
+ HARNESS_SQLITE_FILE,
782
+ HARNESS_STATE_BACKUP_MAX_BYTES,
783
+ HARNESS_STATE_BACKUP_SCHEMA_VERSION,
784
+ HARNESS_SUBAGENT_PROFILES,
785
+ HARNESS_SUBAGENT_PROFILE_DESCRIPTORS,
786
+ HARNESS_VERSION,
787
+ HarnessApprovalError,
788
+ HarnessConfigError,
789
+ HarnessError,
790
+ HarnessExecutionError,
791
+ HarnessProviderError,
792
+ HarnessStateConflictError,
793
+ HarnessWorkspaceError,
794
+ MAX_CHANGE_ENVELOPE_APPROVALS,
795
+ MAX_CHANGE_ENVELOPE_APPROVAL_SCOPES,
796
+ MAX_CHANGE_ENVELOPE_ATTESTATIONS,
797
+ MAX_CHANGE_ENVELOPE_CHECKS,
798
+ MAX_EDIT_CHANGES,
799
+ MAX_EDIT_FILE_BYTES,
800
+ MAX_EDIT_PROPOSAL_BYTES,
801
+ MAX_HARNESS_CONTEXT_FILES,
802
+ MAX_HARNESS_CONTEXT_FILE_BYTES,
803
+ MAX_HARNESS_CONTEXT_TOTAL_BYTES,
804
+ MAX_HARNESS_SKILLS,
805
+ MAX_HARNESS_SKILL_DIRECTORIES,
806
+ MAX_HARNESS_SKILL_FILE_BYTES,
807
+ NODE_ENGINE_RANGE,
808
+ PROVIDERS,
809
+ PROVIDER_DESCRIPTORS,
810
+ SEMANTIC_COMPACTION_VERSION,
811
+ SESSION_RUN_STATUSES,
812
+ TERMINAL_RUN_STATUSES,
813
+ TERMINAL_SESSION_RUN_STATUSES,
814
+ TIME_TO_SAFE_FIX_CARRIERS,
815
+ TIME_TO_SAFE_FIX_DIAGNOSTIC_CODES,
816
+ TIME_TO_SAFE_FIX_FAILURE_ORIGINS,
817
+ TIME_TO_SAFE_FIX_FAILURE_STAGES,
818
+ TIME_TO_SAFE_FIX_GOALS,
819
+ TIME_TO_SAFE_FIX_PROFILES,
820
+ TIME_TO_SAFE_FIX_SCHEMA_VERSION,
821
+ Workspace,
822
+ appendUserMessage,
823
+ applyEditProposalInputSchema,
824
+ applyHarnessToolPolicy,
825
+ assertHarnessModelCapabilities,
826
+ cancelHarnessRun,
827
+ canonicalizeChangeEnvelope,
828
+ changeEnvelopeApprovalSchema,
829
+ changeEnvelopeBaseSchema,
830
+ changeEnvelopeCheckSchema,
831
+ changeEnvelopeEvidenceSchema,
832
+ changeEnvelopeFingerprintsSchema,
833
+ changeEnvelopeInputSchema,
834
+ changeEnvelopePatchSchema,
835
+ changeEnvelopePreconditionsSchema,
836
+ changeEnvelopeSchema,
837
+ classifyTimeToSafeFixFailure,
838
+ cleanupHarnessExecutionArtifacts,
839
+ cleanupHarnessRuns,
840
+ cliChangeEnvelopeVerificationDocumentSchema,
841
+ cliDoctorDocumentSchema,
842
+ cliErrorDocumentSchema,
843
+ cliInitDocumentSchema,
844
+ cliJsonDocumentSchema,
845
+ cliJsonLineDocumentSchema,
846
+ cliProviderDocumentSchema,
847
+ cliReviewGroupDocumentSchema,
848
+ cliRunCancellationDocumentSchema,
849
+ cliRunCleanupDocumentSchema,
850
+ cliRunEventDocumentSchema,
851
+ cliRunExportDocumentSchema,
852
+ cliRunInspectionDocumentSchema,
853
+ cliRunListDocumentSchema,
854
+ cliRunResultDocumentSchema,
855
+ cliSessionDocumentSchema,
856
+ cliSessionListDocumentSchema,
857
+ cliStateExportDocumentSchema,
858
+ cliStateImportDocumentSchema,
859
+ cliStateStatusDocumentSchema,
860
+ cliStreamErrorDocumentSchema,
861
+ cliStreamResultDocumentSchema,
862
+ compactHarnessMessages,
863
+ compileTaskAcceptanceContract,
864
+ computeChangeEnvelopeDigest,
865
+ computeChangeEnvelopeEvidenceDigest,
866
+ createAcpConnection,
867
+ createChangeEnvelope,
868
+ createEditProposal,
869
+ createEmptyHarnessContextBundle,
870
+ createExecutionEnvironmentTools,
871
+ createHarness,
872
+ createHarnessClientAdapter,
873
+ createHarnessLifecycleDispatcher,
874
+ createHarnessMcpTools,
875
+ createHarnessOciExecutionEnvironment,
876
+ createHarnessRouteModels,
877
+ createHarnessStateBackup,
878
+ createHarnessSubagents,
879
+ createHarnessToolPolicy,
880
+ createHttpMcpClient,
881
+ createProgressMonitor,
882
+ createProviderModel,
883
+ createProviderRegistry,
884
+ createSemanticCompactor,
885
+ createTimeToSafeFixCases,
886
+ createTimeToSafeFixReport,
887
+ createTimeToSafeFixSample,
888
+ defaultHarnessNamespace,
889
+ describeOciCommand,
890
+ digestChangeEnvelopeArtifact,
891
+ editChangeSchema,
892
+ editChangesSchema,
893
+ editContractDocument,
894
+ editProposalChangeSchema,
895
+ editProposalInputSchema,
896
+ editProposalSchema,
897
+ estimateMessageTokens,
898
+ executionFingerprintInput,
899
+ exportHarnessGovernanceReport,
900
+ exportHarnessStateBackup,
901
+ externalAttestationReferenceSchema,
902
+ fileDigestSchema,
903
+ harnessClientCommandSchema,
904
+ harnessClientRequestSchema,
905
+ harnessContextConfigurationSchema,
906
+ harnessContextFingerprintInput,
907
+ harnessErrorDocument,
908
+ harnessExecutionSession,
909
+ harnessGovernanceReportSchema,
910
+ harnessLifecycleFingerprintInput,
911
+ harnessLocalCredentialsSchema,
912
+ harnessSkillLoadInputSchema,
913
+ harnessToolPolicySchema,
914
+ importHarnessStateBackup,
915
+ importHarnessStateBackupFile,
916
+ injectTimeToSafeFixAttack,
917
+ inspectHarnessModelCapabilities,
918
+ inspectHarnessPolicy,
919
+ inspectHarnessRun,
920
+ inspectHarnessState,
921
+ inspectHarnessTaskAcceptance,
922
+ isHarnessContextDigest,
923
+ listHarnessRuns,
924
+ loadHarnessMcpConfiguration,
925
+ loadHarnessProjectContext,
926
+ loadHarnessSkill,
927
+ migrateHarnessConfigInput,
928
+ migrateLegacyFileRuns,
929
+ moveFileInputSchema,
930
+ mutationAuditEntrySchema,
931
+ mutationOperationSchema,
932
+ normalizeHarnessError,
933
+ normalizeHarnessMcpConfiguration,
934
+ openCliSessionStore,
935
+ openHarnessActivityStore,
936
+ openHarnessPersistence,
937
+ openSessionStore,
938
+ openWorkspaceCheckpointStore,
939
+ parseCliJsonDocument,
940
+ parseCliJsonLineDocument,
941
+ parseHarnessModelRoute,
942
+ parseProvider,
943
+ providerAvailability,
944
+ providerDescriptor,
945
+ quarantineFileInputSchema,
946
+ readHarnessLocalCredentials,
947
+ readHarnessStateBackup,
948
+ recommendCompactionModels,
949
+ recoverHarnessLocalService,
950
+ renderHarnessContextInstructions,
951
+ renderHarnessGovernanceMarkdown,
952
+ requestHarnessLocalService,
953
+ resolveHarnessConfig,
954
+ resolveHarnessModelRoutes,
955
+ restoreFileInputSchema,
956
+ reviseHarnessTaskAcceptance,
957
+ runHarness,
958
+ runHarnessReviewGroup,
959
+ selectHarnessModel,
960
+ serializeHarnessModelRoutes,
961
+ serializeStreamEvent,
962
+ serializeStreamResult,
963
+ serveAcpStdio,
964
+ startHarnessLocalService,
965
+ stateBackupBundleSchema,
966
+ streamEventDocument,
967
+ streamResultDocument,
968
+ taskAcceptanceContractSchema,
969
+ timeToSafeFixDriverResultSchema,
970
+ timeToSafeFixLatencyStatistics,
971
+ timeToSafeFixTaskSchema,
972
+ validateCliCommandOptions,
973
+ validateEditProposal,
974
+ validateStateDirectory,
975
+ verifyChangeEnvelope,
976
+ workspaceFilePathSchema
977
+ };