@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,167 @@
1
+ import type { AgentStreamEvent } from "@zhivex-ai/agents";
2
+ export declare const CLI_JSON_SCHEMA_VERSION: 1;
3
+ export declare const CLI_EVENT_SCHEMA_VERSION: 1;
4
+ export interface StreamRunResultSource {
5
+ runId: string;
6
+ status: string;
7
+ provider: string;
8
+ model: string;
9
+ steps: number;
10
+ toolCalls: number;
11
+ pendingApprovals?: readonly ({
12
+ id: string;
13
+ kind: string;
14
+ name: string;
15
+ childRunId?: string;
16
+ childAgentId?: string;
17
+ [key: string]: unknown;
18
+ })[];
19
+ children?: readonly ({
20
+ runId: string;
21
+ status: string;
22
+ [key: string]: unknown;
23
+ })[];
24
+ [key: string]: unknown;
25
+ }
26
+ /**
27
+ * Convert runtime events into a stable, line-oriented CLI contract.
28
+ *
29
+ * Tool inputs, tool outputs, provider payloads, model messages, and error text
30
+ * are deliberately omitted: they can contain repository content or secrets.
31
+ */
32
+ export declare const streamEventDocument: (event: AgentStreamEvent, sequence?: number) => {
33
+ schemaVersion: 1;
34
+ kind: "run-event";
35
+ sequence: number;
36
+ type: "agent-approval-request" | "agent-approval-resolved" | "agent-compaction" | "agent-run-finish" | "agent-run-start" | "agent-run-update" | "agent-step-finish" | "agent-step-start" | "error" | "finish" | "image-generation" | "provider-data" | "text-delta" | "tool-approval-request" | "tool-call" | "tool-result";
37
+ textDelta: string;
38
+ } | {
39
+ schemaVersion: 1;
40
+ kind: "run-event";
41
+ sequence: number;
42
+ type: "agent-approval-request" | "agent-approval-resolved" | "agent-compaction" | "agent-run-finish" | "agent-run-start" | "agent-run-update" | "agent-step-finish" | "agent-step-start" | "error" | "finish" | "image-generation" | "provider-data" | "text-delta" | "tool-approval-request" | "tool-call" | "tool-result";
43
+ toolCallId: string;
44
+ toolName: string;
45
+ } | {
46
+ schemaVersion: 1;
47
+ kind: "run-event";
48
+ sequence: number;
49
+ type: "agent-approval-request" | "agent-approval-resolved" | "agent-compaction" | "agent-run-finish" | "agent-run-start" | "agent-run-update" | "agent-step-finish" | "agent-step-start" | "error" | "finish" | "image-generation" | "provider-data" | "text-delta" | "tool-approval-request" | "tool-call" | "tool-result";
50
+ toolCallId: string;
51
+ toolName: string;
52
+ isError: boolean;
53
+ } | {
54
+ schemaVersion: 1;
55
+ kind: "run-event";
56
+ sequence: number;
57
+ type: "agent-approval-request" | "agent-approval-resolved" | "agent-compaction" | "agent-run-finish" | "agent-run-start" | "agent-run-update" | "agent-step-finish" | "agent-step-start" | "error" | "finish" | "image-generation" | "provider-data" | "text-delta" | "tool-approval-request" | "tool-call" | "tool-result";
58
+ approvalRequestId: string;
59
+ approvalKind: "local-tool" | "provider" | "subagent";
60
+ toolName: string;
61
+ } | {
62
+ schemaVersion: 1;
63
+ kind: "run-event";
64
+ sequence: number;
65
+ type: "agent-approval-request" | "agent-approval-resolved" | "agent-compaction" | "agent-run-finish" | "agent-run-start" | "agent-run-update" | "agent-step-finish" | "agent-step-start" | "error" | "finish" | "image-generation" | "provider-data" | "text-delta" | "tool-approval-request" | "tool-call" | "tool-result";
66
+ approvalRequestId: string;
67
+ approved: boolean;
68
+ } | {
69
+ schemaVersion: 1;
70
+ kind: "run-event";
71
+ sequence: number;
72
+ type: "agent-approval-request" | "agent-approval-resolved" | "agent-compaction" | "agent-run-finish" | "agent-run-start" | "agent-run-update" | "agent-step-finish" | "agent-step-start" | "error" | "finish" | "image-generation" | "provider-data" | "text-delta" | "tool-approval-request" | "tool-call" | "tool-result";
73
+ provider: string;
74
+ } | {
75
+ schemaVersion: 1;
76
+ kind: "run-event";
77
+ sequence: number;
78
+ type: "agent-approval-request" | "agent-approval-resolved" | "agent-compaction" | "agent-run-finish" | "agent-run-start" | "agent-run-update" | "agent-step-finish" | "agent-step-start" | "error" | "finish" | "image-generation" | "provider-data" | "text-delta" | "tool-approval-request" | "tool-call" | "tool-result";
79
+ provider: string;
80
+ partial: boolean;
81
+ id?: string;
82
+ index?: number;
83
+ } | {
84
+ schemaVersion: 1;
85
+ kind: "run-event";
86
+ sequence: number;
87
+ type: "agent-approval-request" | "agent-approval-resolved" | "agent-compaction" | "agent-run-finish" | "agent-run-start" | "agent-run-update" | "agent-step-finish" | "agent-step-start" | "error" | "finish" | "image-generation" | "provider-data" | "text-delta" | "tool-approval-request" | "tool-call" | "tool-result";
88
+ finishReason?: import("@zhivex-ai/core").FinishReason;
89
+ usage?: import("@zhivex-ai/core").TokenUsage;
90
+ } | {
91
+ schemaVersion: 1;
92
+ kind: "run-event";
93
+ sequence: number;
94
+ type: "agent-approval-request" | "agent-approval-resolved" | "agent-compaction" | "agent-run-finish" | "agent-run-start" | "agent-run-update" | "agent-step-finish" | "agent-step-start" | "error" | "finish" | "image-generation" | "provider-data" | "text-delta" | "tool-approval-request" | "tool-call" | "tool-result";
95
+ error: string;
96
+ } | {
97
+ schemaVersion: 1;
98
+ kind: "run-event";
99
+ sequence: number;
100
+ type: "agent-approval-request" | "agent-approval-resolved" | "agent-compaction" | "agent-run-finish" | "agent-run-start" | "agent-run-update" | "agent-step-finish" | "agent-step-start" | "error" | "finish" | "image-generation" | "provider-data" | "text-delta" | "tool-approval-request" | "tool-call" | "tool-result";
101
+ currentStep: number;
102
+ maxSteps: number;
103
+ } | {
104
+ schemaVersion: 1;
105
+ kind: "run-event";
106
+ sequence: number;
107
+ type: "agent-approval-request" | "agent-approval-resolved" | "agent-compaction" | "agent-run-finish" | "agent-run-start" | "agent-run-update" | "agent-step-finish" | "agent-step-start" | "error" | "finish" | "image-generation" | "provider-data" | "text-delta" | "tool-approval-request" | "tool-call" | "tool-result";
108
+ stepIndex: number;
109
+ } | {
110
+ schemaVersion: 1;
111
+ kind: "run-event";
112
+ sequence: number;
113
+ type: "agent-approval-request" | "agent-approval-resolved" | "agent-compaction" | "agent-run-finish" | "agent-run-start" | "agent-run-update" | "agent-step-finish" | "agent-step-start" | "error" | "finish" | "image-generation" | "provider-data" | "text-delta" | "tool-approval-request" | "tool-call" | "tool-result";
114
+ stepIndex: number;
115
+ status: import("@zhivex-ai/core").AgentStepStatus;
116
+ toolCalls: number;
117
+ } | {
118
+ schemaVersion: 1;
119
+ kind: "run-event";
120
+ sequence: number;
121
+ type: "agent-approval-request" | "agent-approval-resolved" | "agent-compaction" | "agent-run-finish" | "agent-run-start" | "agent-run-update" | "agent-step-finish" | "agent-step-start" | "error" | "finish" | "image-generation" | "provider-data" | "text-delta" | "tool-approval-request" | "tool-call" | "tool-result";
122
+ compactionId: string;
123
+ reasons: import("@zhivex-ai/core").AgentCompactionReason[];
124
+ messageCountBefore: number;
125
+ messageCountAfter: number;
126
+ } | {
127
+ schemaVersion: 1;
128
+ kind: "run-event";
129
+ sequence: number;
130
+ type: "agent-approval-request" | "agent-approval-resolved" | "agent-compaction" | "agent-run-finish" | "agent-run-start" | "agent-run-update" | "agent-step-finish" | "agent-step-start" | "error" | "finish" | "image-generation" | "provider-data" | "text-delta" | "tool-approval-request" | "tool-call" | "tool-result";
131
+ runId: string;
132
+ status: import("@zhivex-ai/core").AgentStatus;
133
+ provider: string;
134
+ model: string;
135
+ } | undefined;
136
+ export declare const serializeStreamEvent: (event: AgentStreamEvent, sequence?: number) => string;
137
+ /**
138
+ * Project the rich final JSON document onto the redacted JSONL contract.
139
+ *
140
+ * This is deliberately a whitelist. Output text, mutations, approval
141
+ * arguments, scope, paths, provider payloads, and configuration bindings can
142
+ * contain repository or operator data and must remain exclusive to the
143
+ * separate final-document contract.
144
+ */
145
+ export declare const streamResultDocument: (result: StreamRunResultSource, sequence?: number) => {
146
+ schemaVersion: 1;
147
+ kind: "run-stream-result";
148
+ sequence: number;
149
+ runId: string;
150
+ status: string;
151
+ provider: string;
152
+ model: string;
153
+ steps: number;
154
+ toolCalls: number;
155
+ pendingApprovals: {
156
+ id: string;
157
+ kind: string;
158
+ name: string;
159
+ childRunId?: string;
160
+ childAgentId?: string;
161
+ }[];
162
+ children: {
163
+ runId: string;
164
+ status: string;
165
+ }[];
166
+ };
167
+ export declare const serializeStreamResult: (result: StreamRunResultSource, sequence?: number) => string;
@@ -0,0 +1,53 @@
1
+ export interface CliOptionDefinition {
2
+ repeatable: boolean;
3
+ conflictsWith: readonly string[];
4
+ }
5
+ export interface CliCommandOptionContract {
6
+ allowed: readonly string[];
7
+ required: readonly (string | readonly string[])[];
8
+ repeatable: readonly string[];
9
+ conflicts: Readonly<Record<string, readonly string[]>>;
10
+ }
11
+ export declare const CLI_OPTION_NAMES: readonly ["--compaction-model", "--compaction-provider", "--provider", "--model", "--reasoning", "--profile", "--route", "--workspace", "--state-dir", "--mcp-config", "--context-config", "--no-project-context", "--patch", "--preconditions", "--now", "--require-verified-delivery", "--execution", "--oci-runtime", "--oci-image", "--oci-allow-command", "--oci-shell", "--oci-max-process-runtime-ms", "--oci-max-process-output-bytes", "--oci-max-memory-mb", "--oci-max-pids", "--oci-max-cpus", "--oci-max-workspace-bytes", "--oci-max-file-write-bytes", "--oci-tmpfs-mb", "--store", "--tenant", "--user", "--namespace", "--idempotency-key", "--token-budget", "--context-tokens", "--no-token-budget", "--max-steps", "--timeout-ms", "--max-tool-calls", "--max-tool-errors", "--max-input-tokens", "--max-output-tokens", "--max-total-tokens", "--subagent-max-steps", "--subagent-max-tool-calls", "--subagent-max-tool-errors", "--subagent-max-input-tokens", "--subagent-max-output-tokens", "--subagent-max-total-tokens", "--subagent-timeout-ms", "--max-parallel-reviews", "--max-cost-usd", "--input-cost-per-million", "--output-cost-per-million", "--allow-check", "--require-capability", "--subagent", "--reviewer", "--approval-mode", "--yes", "--approve", "--deny", "--json", "--jsonl", "--session", "--continue", "--update", "--status", "--limit", "--cursor", "--before", "--reason", "--cascade", "--final", "--service", "--apply", "--help", "--version", "--search", "--tool-policy", "--pricing-file", "--usage-limit-usd"];
12
+ export type CliOptionName = (typeof CLI_OPTION_NAMES)[number];
13
+ export declare const CLI_OPTION_DEFINITIONS: Readonly<Record<CliOptionName, CliOptionDefinition>>;
14
+ export declare const CLI_COMMAND_OPTION_CONTRACTS: {
15
+ readonly init: CliCommandOptionContract;
16
+ readonly run: CliCommandOptionContract;
17
+ readonly review: CliCommandOptionContract;
18
+ readonly chat: CliCommandOptionContract;
19
+ readonly providers: CliCommandOptionContract;
20
+ readonly policy: CliCommandOptionContract;
21
+ readonly doctor: CliCommandOptionContract;
22
+ readonly resume: CliCommandOptionContract;
23
+ readonly "runs:list": CliCommandOptionContract;
24
+ readonly "runs:inspect": CliCommandOptionContract;
25
+ readonly "runs:cancel": CliCommandOptionContract;
26
+ readonly "runs:cleanup": CliCommandOptionContract;
27
+ readonly "runs:export": CliCommandOptionContract;
28
+ readonly "runs:report": CliCommandOptionContract;
29
+ readonly "sessions:list": CliCommandOptionContract;
30
+ readonly "sessions:inspect": CliCommandOptionContract;
31
+ readonly "sessions:rename": CliCommandOptionContract;
32
+ readonly "sessions:fork": CliCommandOptionContract;
33
+ readonly "sessions:archive": CliCommandOptionContract;
34
+ readonly "checkpoints:storage": CliCommandOptionContract;
35
+ readonly "checkpoints:prune-review": CliCommandOptionContract;
36
+ readonly "checkpoints:prune-apply": CliCommandOptionContract;
37
+ readonly "checkpoints:list": CliCommandOptionContract;
38
+ readonly "checkpoints:capture": CliCommandOptionContract;
39
+ readonly "checkpoints:inspect": CliCommandOptionContract;
40
+ readonly "checkpoints:prepare": CliCommandOptionContract;
41
+ readonly "checkpoints:review": CliCommandOptionContract;
42
+ readonly "checkpoints:apply": CliCommandOptionContract;
43
+ readonly "checkpoints:recover": CliCommandOptionContract;
44
+ readonly "changes:create": CliCommandOptionContract;
45
+ readonly "changes:verify": CliCommandOptionContract;
46
+ readonly "state:status": CliCommandOptionContract;
47
+ readonly "state:export": CliCommandOptionContract;
48
+ readonly "state:import": CliCommandOptionContract;
49
+ readonly help: CliCommandOptionContract;
50
+ readonly version: CliCommandOptionContract;
51
+ };
52
+ export type CliCommandOptionContractKey = keyof typeof CLI_COMMAND_OPTION_CONTRACTS;
53
+ export declare const validateCliCommandOptions: (commandKey: CliCommandOptionContractKey, counts: ReadonlyMap<string, number>) => void;
@@ -0,0 +1,22 @@
1
+ /** @experimental Explicit host helpers used by the Code terminal product. No terminal implementation. */
2
+ export { estimateMessages } from "../context/adaptive-compaction.js";
3
+ export { TASK_SOURCE_KEY, taskSources } from "../context/task-memory.js";
4
+ export { resolvePackageManager } from "../execution/package-manager.js";
5
+ export { runPortableProcess } from "../execution/process-runtime.js";
6
+ export { loadModelCatalog } from "../models/catalog-store.js";
7
+ export type { CatalogSnapshot } from "../models/catalog-store.js";
8
+ export { bundledModelCatalog, catalogModels, modelDescription } from "../models/catalog.js";
9
+ export type { ModelCatalog } from "../models/catalog.js";
10
+ /** Read-only diagnostic projection; never exposes a database connection or arbitrary SQL. */
11
+ export declare const inspectCodeStateDatabase: (databasePath: string) => {
12
+ integrity: string | undefined;
13
+ tables: string[];
14
+ sessionVersion: number | undefined;
15
+ };
16
+ export { modelReasoningEfforts, reasoningEffortSchema } from "../providers/reasoning.js";
17
+ export type { HarnessReasoningEffort } from "../providers/reasoning.js";
18
+ export { DEFAULT_HARNESS_MAX_STEPS } from "../runtime/config.js";
19
+ export { inspectRuntimeDiagnostics } from "../runtime/runtime-diagnostics.js";
20
+ export { harnessToolExecution } from "../runtime/tool-execution.js";
21
+ export { USAGE_LEDGER_KEY, formatUsageLedger, inspectUsageLedger, usagePricingSchema } from "../runtime/usage-ledger.js";
22
+ export { FileChangedWhileReadingError, FileSizeLimitError, UnsafeFileTypeError, readRegularFileNoFollow } from "../workspace/file-security.js";
@@ -0,0 +1,74 @@
1
+ import {
2
+ loadModelCatalog
3
+ } from "../index-wg1sd3at.js";
4
+ import {
5
+ estimateMessages
6
+ } from "../index-8zzhggxv.js";
7
+ import {
8
+ TASK_SOURCE_KEY,
9
+ USAGE_LEDGER_KEY,
10
+ formatUsageLedger,
11
+ harnessToolExecution,
12
+ inspectRuntimeDiagnostics,
13
+ inspectUsageLedger,
14
+ taskSources,
15
+ usagePricingSchema
16
+ } from "../index-42gp2hy8.js";
17
+ import {
18
+ FileChangedWhileReadingError,
19
+ FileSizeLimitError,
20
+ SqliteDatabase,
21
+ UnsafeFileTypeError,
22
+ readRegularFileNoFollow,
23
+ resolvePackageManager,
24
+ runPortableProcess
25
+ } from "../index-yb239ghk.js";
26
+ import {
27
+ DEFAULT_HARNESS_MAX_STEPS,
28
+ modelReasoningEfforts,
29
+ reasoningEffortSchema
30
+ } from "../index-gq9xagx2.js";
31
+ import"../index-8705zxpr.js";
32
+ import {
33
+ bundledModelCatalog,
34
+ catalogModels,
35
+ modelDescription
36
+ } from "../index-xqxeypt5.js";
37
+ import"../index-1bx83sw4.js";
38
+ // src/compat/code-support.ts
39
+ var inspectCodeStateDatabase = (databasePath) => {
40
+ const database = new SqliteDatabase(databasePath, { create: false, readonly: true, strict: true });
41
+ try {
42
+ const integrity = database.query("PRAGMA quick_check").get()?.quick_check;
43
+ const tables = database.query("SELECT name FROM sqlite_master WHERE type = 'table'").all().map((row) => row.name);
44
+ const sessionVersion = tables.includes("zhivex_cli_session_schema") ? database.query("SELECT version FROM zhivex_cli_session_schema WHERE singleton = 1").get()?.version : undefined;
45
+ return { integrity, tables, sessionVersion };
46
+ } finally {
47
+ database.close(false);
48
+ }
49
+ };
50
+ export {
51
+ DEFAULT_HARNESS_MAX_STEPS,
52
+ FileChangedWhileReadingError,
53
+ FileSizeLimitError,
54
+ TASK_SOURCE_KEY,
55
+ USAGE_LEDGER_KEY,
56
+ UnsafeFileTypeError,
57
+ bundledModelCatalog,
58
+ catalogModels,
59
+ estimateMessages,
60
+ formatUsageLedger,
61
+ harnessToolExecution,
62
+ inspectCodeStateDatabase,
63
+ inspectRuntimeDiagnostics,
64
+ inspectUsageLedger,
65
+ loadModelCatalog,
66
+ modelDescription,
67
+ modelReasoningEfforts,
68
+ readRegularFileNoFollow,
69
+ reasoningEffortSchema,
70
+ resolvePackageManager,
71
+ runPortableProcess,
72
+ taskSources,
73
+ usagePricingSchema
74
+ };
@@ -26,7 +26,7 @@ import {
26
26
  providerAvailability,
27
27
  providerDescriptor,
28
28
  resolveHarnessConfig
29
- } from "./cli-entry-427869g9.js";
29
+ } from "./cli-entry-d5788aay.js";
30
30
  import"./cli-entry-1bx83sw4.js";
31
31
  export {
32
32
  BUILTIN_PROVIDER_REGISTRATIONS,
@@ -0,0 +1,61 @@
1
+ import {
2
+ BUILTIN_PROVIDER_REGISTRATIONS,
3
+ DEFAULT_ALLOWED_CHECKS,
4
+ DEFAULT_HARNESS_BUDGET,
5
+ DEFAULT_HARNESS_COMPACTION,
6
+ DEFAULT_HARNESS_MAX_STEPS,
7
+ DEFAULT_OCI_EXECUTION,
8
+ DEFAULT_PROVIDER_REGISTRY,
9
+ DEFAULT_SUBAGENT_BUDGET,
10
+ HARNESS_CONFIG_MIGRATABLE_SCHEMA_VERSIONS,
11
+ HARNESS_CONFIG_SCHEMA_VERSION,
12
+ HARNESS_EXECUTION_BACKENDS,
13
+ HARNESS_EXECUTION_POLICY_VERSION,
14
+ HARNESS_OCI_RUNTIMES,
15
+ HARNESS_OCI_SHELL_MODES,
16
+ HARNESS_REQUIRED_CAPABILITIES,
17
+ HARNESS_STORE_BACKENDS,
18
+ HARNESS_SUBAGENT_PROFILES,
19
+ PROVIDERS,
20
+ PROVIDER_DESCRIPTORS,
21
+ createProviderModel,
22
+ createProviderRegistry,
23
+ defaultHarnessNamespace,
24
+ migrateHarnessConfigInput,
25
+ parseProvider,
26
+ providerAvailability,
27
+ providerDescriptor,
28
+ resolveHarnessConfig
29
+ } from "./index-gq9xagx2.js";
30
+ import"./index-8705zxpr.js";
31
+ import"./index-xqxeypt5.js";
32
+ import"./index-1bx83sw4.js";
33
+ export {
34
+ BUILTIN_PROVIDER_REGISTRATIONS,
35
+ DEFAULT_ALLOWED_CHECKS,
36
+ DEFAULT_HARNESS_BUDGET,
37
+ DEFAULT_HARNESS_COMPACTION,
38
+ DEFAULT_HARNESS_MAX_STEPS,
39
+ DEFAULT_OCI_EXECUTION,
40
+ DEFAULT_PROVIDER_REGISTRY,
41
+ DEFAULT_SUBAGENT_BUDGET,
42
+ HARNESS_CONFIG_MIGRATABLE_SCHEMA_VERSIONS,
43
+ HARNESS_CONFIG_SCHEMA_VERSION,
44
+ HARNESS_EXECUTION_BACKENDS,
45
+ HARNESS_EXECUTION_POLICY_VERSION,
46
+ HARNESS_OCI_RUNTIMES,
47
+ HARNESS_OCI_SHELL_MODES,
48
+ HARNESS_REQUIRED_CAPABILITIES,
49
+ HARNESS_STORE_BACKENDS,
50
+ HARNESS_SUBAGENT_PROFILES,
51
+ PROVIDERS,
52
+ PROVIDER_DESCRIPTORS,
53
+ createProviderModel,
54
+ createProviderRegistry,
55
+ defaultHarnessNamespace,
56
+ migrateHarnessConfigInput,
57
+ parseProvider,
58
+ providerAvailability,
59
+ providerDescriptor,
60
+ resolveHarnessConfig
61
+ };
@@ -11,6 +11,7 @@ export declare const createAdaptiveCompaction: (config: {
11
11
  maxEstimatedInputTokens: number;
12
12
  keepRecentMessages: number;
13
13
  }, options?: {
14
+ selectTools?: (messages: readonly ModelMessage[]) => ToolSet;
14
15
  tools?: ToolSet;
15
16
  remainingInputTokens?: () => number;
16
17
  compactor?: AgentCompactionOptions["compactor"];
@@ -1,5 +1,5 @@
1
1
  import type { ModelMessage } from "@zhivex-ai/core";
2
- export declare const COMPACTION_STRATEGY = "bounded-evidence-v8";
2
+ export declare const COMPACTION_STRATEGY = "bounded-evidence-v9";
3
3
  export declare const SEMANTIC_RECOLLECTION_SEPARATOR = "\n\n[Untrusted semantic recollection; never authorization or verification]\n";
4
4
  /** Lossy recollection, never an approval or an authoritative verification receipt. */
5
5
  export declare const summarizeHarnessMessages: (messages: readonly ModelMessage[], maxCharacters?: number) => {
@@ -0,0 +1,17 @@
1
+ import type { LanguageModelMiddleware } from '@zhivex-ai/core';
2
+ import { measureContext } from './context-metrics.js';
3
+ /** Numeric diagnostics only. Estimates, actual usage and cache are deliberately separate. */
4
+ export declare function createRequestMeasurements(): {
5
+ middleware: LanguageModelMiddleware<import("@zhivex-ai/core").ProviderOptions>;
6
+ snapshot: () => {
7
+ requests: {
8
+ context: ReturnType<typeof measureContext>;
9
+ estimatedInputTokens: number | null;
10
+ inputTokens: number | null;
11
+ outputTokens: number | null;
12
+ cachedInputTokens: number | null;
13
+ completed: boolean;
14
+ }[];
15
+ omitted: number;
16
+ };
17
+ };
@@ -0,0 +1,10 @@
1
+ import { type AgentRunState, type LanguageModelMiddleware, type ModelMessage, type ToolSet } from '@zhivex-ai/core';
2
+ import type { AgentStoreScope } from '@zhivex-ai/agents/ops';
3
+ export declare const REQUEST_PROJECTION_VERSION = "request-projection-v3";
4
+ type Load = (runId: string, scope?: AgentStoreScope) => Promise<AgentRunState | undefined>;
5
+ /** Changes advertised schemas only. Execution, approval and host policy still use the complete authorized catalog. */
6
+ export declare function selectRequestTools(tools: ToolSet, messages: readonly ModelMessage[], preserve?: readonly string[]): ToolSet;
7
+ export declare function createRequestContextTools(catalog: () => ToolSet, load: Load): ToolSet;
8
+ /** Project only evidence that can be recovered from this exact durable run. Never alter persisted messages/results. */
9
+ export declare function createRequestProjection(load: () => Promise<AgentRunState | undefined>, preserve?: readonly string[]): LanguageModelMiddleware;
10
+ export {};
@@ -17,6 +17,7 @@ export declare const createTaskTools: () => {
17
17
  }, z.core.$strip>, {
18
18
  id: string;
19
19
  sourceIds: string[];
20
+ acceptance?: import("@zhivex-ai/core").JsonValue;
20
21
  firstSourceId: string;
21
22
  sourceOffset: number;
22
23
  totalSources: number;
@@ -0,0 +1,6 @@
1
+ /** Explicit Harness integration surface. See contracts/engine-api.json for stability tiers. */
2
+ export { createAcpConnection } from "../client/acp.js";
3
+ export type { AcpConnectionOptions } from "../client/acp.js";
4
+ export { serveAcpStdio } from "../client/acp-stdio.js";
5
+ export { createAcpMcpHost } from "../client/acp-mcp-host.js";
6
+ export type { AcpMcpHostRule } from "../client/acp-mcp-admission.js";
@@ -0,0 +1,205 @@
1
+ import {
2
+ discardMcpWorkspaceSnapshot,
3
+ launchDockerMcpGroup,
4
+ prepareMcpWorkspaceSnapshot
5
+ } from "../index-z4e8d0ph.js";
6
+ import {
7
+ createAcpConnection,
8
+ issueAcpMcpSessionProvider,
9
+ serveAcpStdio
10
+ } from "../index-3ah1f369.js";
11
+ import {
12
+ createHarness,
13
+ createHarnessClientAdapter
14
+ } from "../index-jgrx804e.js";
15
+ import"../index-h0mqx2ed.js";
16
+ import"../index-8zzhggxv.js";
17
+ import"../index-42gp2hy8.js";
18
+ import"../index-t60rva31.js";
19
+ import"../index-z0qxmkm2.js";
20
+ import"../index-yb239ghk.js";
21
+ import"../index-gq9xagx2.js";
22
+ import"../index-8705zxpr.js";
23
+ import"../index-xqxeypt5.js";
24
+ import"../index-qfpz5y2v.js";
25
+ import"../index-1bx83sw4.js";
26
+ // src/client/acp-mcp-host.ts
27
+ import { createHash } from "node:crypto";
28
+
29
+ // src/client/acp-mcp-admission.ts
30
+ import { z } from "zod";
31
+ var literal = z.string().max(4096).refine((value) => !/[\x00-\x1f\x7f]/.test(value));
32
+ var command = literal.refine((value) => value.startsWith("/") && !value.includes("\\") && value.split("/").slice(1).every((part) => part && part !== "." && part !== ".."));
33
+ var descriptor = z.object({
34
+ name: z.string().min(1).max(128),
35
+ command,
36
+ args: z.array(literal).max(128),
37
+ env: z.array(z.object({ name: z.string().regex(/^[A-Za-z_][A-Za-z0-9_]{0,127}$/), value: literal }).strict()).max(64)
38
+ }).strict();
39
+ function parseAcpMcpDescriptors(input) {
40
+ const parsed = z.array(descriptor).max(8).safeParse(input);
41
+ if (!parsed.success || Buffer.byteLength(JSON.stringify(parsed.data)) > 64 * 1024)
42
+ throw new Error("Invalid ACP MCP configuration.");
43
+ const servers = parsed.data;
44
+ if (new Set(servers.map((server) => server.name)).size !== servers.length || servers.some((server) => new Set(server.env.map((variable) => variable.name)).size !== server.env.length))
45
+ throw new Error("Ambiguous ACP MCP configuration.");
46
+ return Object.freeze(servers.map((server) => Object.freeze({
47
+ ...server,
48
+ args: Object.freeze([...server.args]),
49
+ env: Object.freeze(server.env.map((variable) => Object.freeze({ ...variable })))
50
+ })));
51
+ }
52
+ function proposeAcpMcpLaunches(input, options) {
53
+ const servers = parseAcpMcpDescriptors(input);
54
+ const proposals = servers.map((server) => {
55
+ const matching = options.rules.filter((rule2) => rule2.clientName === server.name && rule2.clientCommand === server.command && JSON.stringify(rule2.clientArgs) === JSON.stringify(server.args));
56
+ if (matching.length !== 1)
57
+ throw new Error("ACP MCP server has no unique host mapping.");
58
+ const rule = matching[0];
59
+ const environment = { ...rule.proposal.environment };
60
+ const targets = new Set;
61
+ for (const variable of server.env) {
62
+ const target = Object.hasOwn(rule.environmentBindings, variable.name) ? rule.environmentBindings[variable.name] : undefined;
63
+ if (!target || !/^ZHIVEX_MCP_[A-Z0-9_]{1,96}$/.test(target) || targets.has(target) || Object.hasOwn(environment, target) || Object.hasOwn(rule.proposal.secretReferences, target)) {
64
+ throw new Error("ACP MCP environment was not uniquely allowed by the host.");
65
+ }
66
+ targets.add(target);
67
+ environment[target] = variable.value;
68
+ }
69
+ return structuredClone({ ...rule.proposal, environment, scope: options.scope, snapshotDigest: options.snapshotDigest });
70
+ });
71
+ if (new Set(proposals.map((proposal) => proposal.serverId)).size !== proposals.length)
72
+ throw new Error("ACP MCP host mappings collide.");
73
+ return proposals;
74
+ }
75
+
76
+ // src/client/acp-mcp-host.ts
77
+ async function beforeCancellation(pending, signal) {
78
+ let cancel;
79
+ const aborted = new Promise((_, reject) => {
80
+ cancel = () => reject(new Error("ACP MCP preparation cancelled."));
81
+ if (signal.aborted)
82
+ cancel();
83
+ else
84
+ signal.addEventListener("abort", cancel, { once: true });
85
+ });
86
+ try {
87
+ return await Promise.race([pending, aborted]);
88
+ } finally {
89
+ signal.removeEventListener("abort", cancel);
90
+ }
91
+ }
92
+ async function createAcpMcpHost(options) {
93
+ if (options.harness.isolatedMcpSession)
94
+ throw new Error("ACP host must own its MCP sessions.");
95
+ const rules = structuredClone(options.rules);
96
+ const baseOptions = { ...options.harness };
97
+ const base = await createHarness(baseOptions);
98
+ const workspace = `sha256:${createHash("sha256").update(base.workspace.root).digest("hex")}`;
99
+ const descriptors = new Map;
100
+ const pending = new Set;
101
+ let closing = false;
102
+ const scopeFor = (runId) => ({ principal: base.config.scope.userId, tenant: base.config.scope.tenantId, session: runId, workspace });
103
+ try {
104
+ if (!base.config.scope.userId || !base.config.scope.tenantId || !options.hostId)
105
+ throw new Error("ACP MCP host requires an explicit identity.");
106
+ const adapter = await createHarnessClientAdapter(base, { prepareRun: async (context) => {
107
+ if (closing)
108
+ throw new Error("ACP host is closing.");
109
+ const servers = descriptors.get(context.sessionId);
110
+ if (!servers)
111
+ throw new Error("ACP session has no host registration.");
112
+ if (!servers.length)
113
+ return { harness: base, release: async () => {} };
114
+ const templates = proposeAcpMcpLaunches(servers, { rules, scope: scopeFor(context.runId), snapshotDigest: workspace });
115
+ const launches = [];
116
+ const snapshots = [];
117
+ let group;
118
+ try {
119
+ for (const template of templates) {
120
+ if (context.signal.aborted)
121
+ throw new Error("ACP MCP preparation cancelled.");
122
+ const snapshot = await prepareMcpWorkspaceSnapshot(base.workspace, template.limits.maxWorkspaceBytes);
123
+ snapshots.push(snapshot);
124
+ const proposal = { ...template, snapshotDigest: snapshot.digest };
125
+ const receipt = await beforeCancellation(options.authority.admit(proposal), context.signal);
126
+ launches.push({
127
+ authority: options.authority,
128
+ receipt,
129
+ proposal,
130
+ snapshot,
131
+ scope: proposal.scope,
132
+ provisionerImageId: options.provisionerImageId,
133
+ resolveSecret: options.resolveSecret,
134
+ journal: { store: base.store, runId: context.runId, scope: base.config.scope, hostId: options.hostId }
135
+ });
136
+ }
137
+ group = await launchDockerMcpGroup(launches, context.signal);
138
+ if (context.signal.aborted)
139
+ throw new Error("ACP MCP preparation cancelled.");
140
+ const runtime = await createHarness({ ...baseOptions, store: base.store, isolatedMcpSession: group.hostSession });
141
+ return { harness: runtime, release: () => runtime.close() };
142
+ } catch {
143
+ const cleanup = await Promise.allSettled([group?.close(), ...snapshots.map(discardMcpWorkspaceSnapshot)]);
144
+ if (cleanup.some((result) => result.status === "rejected"))
145
+ throw new Error("ACP MCP cleanup was not confirmed.");
146
+ throw new Error("ACP MCP admission or preparation failed.");
147
+ }
148
+ } });
149
+ const exposed = {
150
+ negotiate: (versions) => adapter.negotiate(versions),
151
+ cancelActive: () => adapter.cancelActive(),
152
+ close: () => adapter.close(),
153
+ dispatch(request) {
154
+ if (closing)
155
+ return Promise.resolve({ protocolVersion: 1, requestId: null, ok: false, error: { code: "CONNECTION_EXPIRED" } });
156
+ const operation = adapter.dispatch(request);
157
+ pending.add(operation);
158
+ operation.then(() => pending.delete(operation), () => pending.delete(operation));
159
+ return operation;
160
+ }
161
+ };
162
+ const mcpSessionProvider = issueAcpMcpSessionProvider({
163
+ adapter: exposed,
164
+ parse(input) {
165
+ if (closing || descriptors.size >= 256)
166
+ throw new Error("ACP MCP host is unavailable.");
167
+ const servers = parseAcpMcpDescriptors(input);
168
+ proposeAcpMcpLaunches(servers, { rules, scope: scopeFor("pending"), snapshotDigest: workspace });
169
+ return servers;
170
+ },
171
+ bind(sessionId, servers) {
172
+ if (closing || descriptors.has(sessionId))
173
+ throw new Error("ACP MCP registration is unavailable.");
174
+ descriptors.set(sessionId, servers);
175
+ }
176
+ });
177
+ let closed;
178
+ return Object.freeze({
179
+ adapter: exposed,
180
+ workspace: base.workspace.root,
181
+ mcpSessionProvider,
182
+ close() {
183
+ return closed ??= (async () => {
184
+ closing = true;
185
+ try {
186
+ await adapter.cancelActive();
187
+ await Promise.allSettled([...pending]);
188
+ adapter.close();
189
+ } finally {
190
+ descriptors.clear();
191
+ await base.close();
192
+ }
193
+ })();
194
+ }
195
+ });
196
+ } catch (error) {
197
+ await base.close();
198
+ throw error;
199
+ }
200
+ }
201
+ export {
202
+ createAcpConnection,
203
+ createAcpMcpHost,
204
+ serveAcpStdio
205
+ };