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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/README.md +12 -10
  3. package/SECURITY.md +1 -1
  4. package/SUPPORT.md +4 -4
  5. package/contracts/engine-api.json +334 -0
  6. package/contracts/public-api.json +267 -1
  7. package/contracts/stable-api-signatures.json +43 -43
  8. package/dist/acp-cli.js +54 -18
  9. package/dist/approvals/approval-history.d.ts +22 -0
  10. package/dist/approvals/explicit-review.d.ts +24 -0
  11. package/dist/approvals/host-policy-identity.d.ts +3 -0
  12. package/dist/cli/arguments.d.ts +6 -2
  13. package/dist/cli/checkpoints.d.ts +230 -0
  14. package/dist/cli/cli-profiles.d.ts +4 -2
  15. package/dist/cli/governance-report.d.ts +5 -0
  16. package/dist/cli/policy-decisions.d.ts +9 -0
  17. package/dist/cli/policy.d.ts +5 -0
  18. package/dist/cli/presentation.d.ts +3 -1
  19. package/dist/cli/terminal/terminal-ui.d.ts +4 -0
  20. package/dist/{cli-entry-xmf48p6a.js → cli-entry-1gfg3brj.js} +14921 -10692
  21. package/dist/cli-entry-bx3vjw7h.js +656 -0
  22. package/dist/{index-fvca1xea.js → cli-entry-d5788aay.js} +339 -58
  23. package/dist/{cli-qgwvtk0w.js → cli-etsmtst3.js} +918 -2222
  24. package/dist/cli.js +3 -5
  25. package/dist/client/acp-mcp-admission.d.ts +32 -0
  26. package/dist/client/acp-mcp-host.d.ts +19 -0
  27. package/dist/client/acp-mcp-session.d.ts +14 -0
  28. package/dist/client/acp-stdio.d.ts +2 -0
  29. package/dist/client/acp.d.ts +4 -1
  30. package/dist/client/adapter.d.ts +13 -1
  31. package/dist/client/json-contracts.d.ts +107 -4
  32. package/dist/client/local-service.d.ts +2 -0
  33. package/dist/client/protocol.d.ts +127 -1
  34. package/dist/client/service-events.d.ts +4 -0
  35. package/dist/compat/cli-options.d.ts +13 -1
  36. package/dist/compat/code-support.js +23 -87
  37. package/dist/{config-q32jm1e6.js → config-c002f06f.js} +1 -1
  38. package/dist/{config-6gtpxvjv.js → config-j3jga5wh.js} +3 -1
  39. package/dist/context/adaptive-compaction.d.ts +1 -0
  40. package/dist/context/compaction.d.ts +1 -1
  41. package/dist/context/request-measurements.d.ts +17 -0
  42. package/dist/context/request-projection.d.ts +10 -0
  43. package/dist/context/task-memory.d.ts +1 -0
  44. package/dist/engine/acp.d.ts +2 -0
  45. package/dist/engine/acp.js +197 -1
  46. package/dist/engine/client.js +11 -4
  47. package/dist/engine/desktop-providers-v1.d.ts +4 -0
  48. package/dist/engine/desktop-providers-v1.js +18 -0
  49. package/dist/engine/desktop-state-v1.d.ts +10 -0
  50. package/dist/engine/desktop-state-v1.js +168 -0
  51. package/dist/engine/index.d.ts +12 -0
  52. package/dist/engine/index.js +571 -71
  53. package/dist/engine/mcp-stdio-v1.d.ts +11 -0
  54. package/dist/engine/mcp-stdio-v1.js +108 -0
  55. package/dist/engine/models.d.ts +3 -0
  56. package/dist/engine/models.js +894 -0
  57. package/dist/engine/protocol.d.ts +1 -0
  58. package/dist/engine/protocol.js +24 -0
  59. package/dist/engine/service.js +12 -5
  60. package/dist/execution/acceptance-snapshot.d.ts +2 -0
  61. package/dist/execution/execution-environment.d.ts +10 -0
  62. package/dist/execution/mcp-oci-channel.d.ts +11 -0
  63. package/dist/execution/mcp-oci-server.d.ts +38 -0
  64. package/dist/execution/mcp-oci-workspace.d.ts +23 -0
  65. package/dist/execution/mcp-resource-recovery.d.ts +19 -0
  66. package/dist/execution/mcp-workspace-snapshot.d.ts +20 -0
  67. package/dist/hostile-repository-demo.js +3169 -1163
  68. package/dist/{index-f4sb0e2q.js → index-2jrdcj6b.js} +17 -2
  69. package/dist/{index-77h9qr5h.js → index-3ah1f369.js} +40 -10
  70. package/dist/{index-pgqz45fj.js → index-42gp2hy8.js} +197 -1091
  71. package/dist/{index-41fkzt91.js → index-4jw3tvy8.js} +10 -2
  72. package/dist/index-6m08wvab.js +1768 -0
  73. package/dist/index-8705zxpr.js +145 -0
  74. package/dist/{index-d0wrghff.js → index-8vm2m34s.js} +225 -1416
  75. package/dist/index-8zzhggxv.js +477 -0
  76. package/dist/index-a97bezbz.js +1073 -0
  77. package/dist/index-azmwjp95.js +1004 -0
  78. package/dist/{cli-entry-0mmeag20.js → index-gq9xagx2.js} +122 -836
  79. package/dist/index-h0mqx2ed.js +1373 -0
  80. package/dist/index-hnaxfpb5.js +5589 -0
  81. package/dist/{index-2aymdsqc.js → index-qfpz5y2v.js} +24 -0
  82. package/dist/{index-kfgt9yqq.js → index-w2sj0wkw.js} +33 -10
  83. package/dist/index-wg1sd3at.js +80 -0
  84. package/dist/index-xqxeypt5.js +888 -0
  85. package/dist/index-yb239ghk.js +961 -0
  86. package/dist/index-z0qxmkm2.js +3389 -0
  87. package/dist/index.js +85 -72
  88. package/dist/integrations/mcp-host-session.d.ts +26 -0
  89. package/dist/integrations/mcp-stdio-admission.d.ts +54 -0
  90. package/dist/integrations/mcp-stdio-client.d.ts +44 -0
  91. package/dist/integrations/mcp-stdio-framing.d.ts +18 -0
  92. package/dist/integrations/mcp-stdio-launch.d.ts +20 -0
  93. package/dist/integrations/mcp-stdio-session.d.ts +7 -0
  94. package/dist/integrations/mcp-stdio-tools.d.ts +12 -0
  95. package/dist/internal/desktop/catalog.d.ts +2 -0
  96. package/dist/internal/desktop/persistence.d.ts +2 -3
  97. package/dist/internal/desktop/providers.d.ts +1 -0
  98. package/dist/models/catalog.d.ts +2 -0
  99. package/dist/persistence/governance-context.d.ts +126 -0
  100. package/dist/persistence/governance-report.d.ts +299 -0
  101. package/dist/persistence/host-database-backup.d.ts +28 -0
  102. package/dist/persistence/mcp-execution-journal.d.ts +19 -0
  103. package/dist/persistence/mcp-reconciliation.d.ts +33 -0
  104. package/dist/persistence/mcp-resource-journal.d.ts +54 -0
  105. package/dist/persistence/workspace-checkpoints.d.ts +138 -0
  106. package/dist/providers/anthropic-continuation.d.ts +5 -0
  107. package/dist/providers/providers.d.ts +1 -1
  108. package/dist/providers/vertex-auth.d.ts +27 -0
  109. package/dist/runtime/delegation-contracts.d.ts +9 -0
  110. package/dist/runtime/delegation-correction.d.ts +9 -0
  111. package/dist/runtime/delegation-result.d.ts +73 -0
  112. package/dist/runtime/error-diagnostics.d.ts +86 -0
  113. package/dist/runtime/harness.d.ts +11 -1
  114. package/dist/runtime/policy-decisions.d.ts +66 -0
  115. package/dist/runtime/policy-inspection.d.ts +52 -0
  116. package/dist/runtime/provider-diagnostics.d.ts +1 -0
  117. package/dist/runtime/runtime-instructions.d.ts +8 -0
  118. package/dist/runtime/task-acceptance-checks.d.ts +103 -0
  119. package/dist/runtime/task-acceptance-delivery.d.ts +107 -0
  120. package/dist/runtime/task-acceptance-host.d.ts +20 -0
  121. package/dist/runtime/task-acceptance-record.d.ts +107 -0
  122. package/dist/runtime/task-acceptance-validation.d.ts +25 -0
  123. package/dist/runtime/task-acceptance.d.ts +47 -0
  124. package/dist/runtime/time-to-safe-fix.d.ts +83 -0
  125. package/dist/runtime/tool-policy-file.d.ts +23 -0
  126. package/dist/runtime/tool-policy-paths.d.ts +5 -0
  127. package/dist/runtime/tool-policy.d.ts +6 -0
  128. package/dist/service-cli.js +14 -7
  129. package/dist/{service-client-cli-gs78wrxe.js → service-client-cli-3365rfav.js} +307 -248
  130. package/dist/verify-historical-migrations.js +3134 -1129
  131. package/dist/workspace/path-policy.d.ts +4 -0
  132. package/dist/zhx.js +3 -5
  133. package/docs/ACP.md +14 -2
  134. package/docs/ANTHROPIC.md +33 -0
  135. package/docs/CLI.md +132 -0
  136. package/docs/CLIENT_PROTOCOL.md +45 -0
  137. package/docs/CODE_RELEASE.md +35 -18
  138. package/docs/ENGINE_API.md +216 -7
  139. package/docs/EXTENSIBILITY.md +46 -3
  140. package/docs/FIRST_USE.md +6 -6
  141. package/docs/LOCAL_SERVICE.md +13 -0
  142. package/docs/MCP_STDIO.md +20 -0
  143. package/docs/README.md +1 -0
  144. package/docs/STABILITY.md +4 -2
  145. package/docs/SUPPORT_MATRIX.md +1 -1
  146. package/docs/TOOL_POLICY.md +81 -0
  147. package/docs/VERTEX.md +50 -0
  148. package/docs/adr/0002-isolated-mcp-stdio.md +135 -0
  149. package/docs/fixtures/mcp-stdio-contract-v1.json +189 -0
  150. package/docs/support-matrix.json +2 -0
  151. package/evaluations/representative-assembly-matrix.json +46 -1
  152. package/evaluations/task-acceptance-routes.json +7 -0
  153. package/examples/README.md +3 -3
  154. package/package.json +43 -12
  155. package/dist/cli-entry-64pdp3k5.js +0 -17
  156. package/dist/cli-entry-7h9savv5.js +0 -375
  157. package/dist/index-5wjwe91x.js +0 -9434
@@ -0,0 +1,145 @@
1
+ // src/providers/vertex-auth.ts
2
+ import { GoogleAuth } from "google-auth-library";
3
+ import { createVertex } from "@zhivex-ai/vertex";
4
+ import { wrapLanguageModel } from "@zhivex-ai/core";
5
+
6
+ // src/runtime/provider-diagnostics.ts
7
+ import { z } from "zod";
8
+ var providerDiagnosticSchema = z.strictObject({
9
+ reason: z.enum(["previous_response_unavailable", "context_length_exceeded", "authentication", "payment_required", "permission", "rate_limit", "model_unavailable", "invalid_request", "server_error", "unknown"]),
10
+ parameter: z.enum(["previous_response_id", "input", "messages", "tools", "model", "max_output_tokens", "max_tokens", "temperature", "other", "none"]),
11
+ bodyState: z.enum(["parsed", "malformed", "too_large", "unavailable", "read_timeout"])
12
+ });
13
+ function providerDiagnostic(body, status) {
14
+ let reason = status === 401 ? "authentication" : status === 402 ? "payment_required" : status === 403 ? "permission" : status === 429 ? "rate_limit" : status && status >= 500 ? "server_error" : "unknown";
15
+ let parameter = "none";
16
+ if (typeof body !== "string")
17
+ return { reason, parameter, bodyState: "unavailable" };
18
+ if (Buffer.byteLength(body) > 8192)
19
+ return { reason, parameter, bodyState: "too_large" };
20
+ try {
21
+ const parsed = JSON.parse(body);
22
+ const detail = parsed?.error ?? parsed;
23
+ const code = [detail?.code, detail?.status, detail?.type].find((value) => typeof value === "string") ?? "";
24
+ const message = typeof detail?.message === "string" ? detail.message : "";
25
+ const param = providerDiagnosticSchema.shape.parameter.safeParse(detail?.param);
26
+ parameter = param.success ? param.data : detail?.param == null ? "none" : "other";
27
+ if (/response/i.test(message) && /not found|expired/i.test(message) && (parameter === "previous_response_id" || parameter === "none"))
28
+ reason = "previous_response_unavailable";
29
+ else if (["context_length_exceeded", "context_window_exceeded"].includes(code))
30
+ reason = "context_length_exceeded";
31
+ else if (["invalid_api_key", "authentication_error", "UNAUTHENTICATED"].includes(code))
32
+ reason = "authentication";
33
+ else if (["permission_denied", "permission_error", "PERMISSION_DENIED"].includes(code))
34
+ reason = "permission";
35
+ else if (["rate_limit_exceeded", "rate_limit_error", "RESOURCE_EXHAUSTED"].includes(code))
36
+ reason = "rate_limit";
37
+ else if (["model_not_found", "model_not_available", "NOT_FOUND"].includes(code))
38
+ reason = "model_unavailable";
39
+ else if (["invalid_request_error", "INVALID_ARGUMENT"].includes(code) || status === 400 || status === 422)
40
+ reason = "invalid_request";
41
+ return { reason, parameter, bodyState: "parsed" };
42
+ } catch {
43
+ return { reason, parameter, bodyState: "malformed" };
44
+ }
45
+ }
46
+
47
+ // src/providers/vertex-auth.ts
48
+ var CLOUD_PLATFORM_SCOPE = "https://www.googleapis.com/auth/cloud-platform";
49
+ function vertexRoute(env) {
50
+ const projectId = (env.GOOGLE_CLOUD_PROJECT ?? "").trim();
51
+ const location = (env.VERTEX_LOCATION ?? "").trim();
52
+ if (!/^(?:[a-z][a-z0-9-]{4,61}[a-z0-9]|[0-9]{6,20})$/.test(projectId)) {
53
+ throw new Error("Vertex requires a valid GOOGLE_CLOUD_PROJECT.");
54
+ }
55
+ if (!/^(?:global|us|eu|[a-z]+-[a-z]+[0-9]+)$/.test(location)) {
56
+ throw new Error("Vertex requires an explicit valid VERTEX_LOCATION.");
57
+ }
58
+ return Object.freeze({ projectId, location });
59
+ }
60
+ function vertexConfigured(env) {
61
+ try {
62
+ vertexRoute(env);
63
+ return true;
64
+ } catch {
65
+ return false;
66
+ }
67
+ }
68
+ var VERTEX_ENVIRONMENT = ["GOOGLE_CLOUD_PROJECT", "VERTEX_LOCATION", "GOOGLE_APPLICATION_CREDENTIALS"];
69
+ function vertexEnvironment(env) {
70
+ return Object.fromEntries(VERTEX_ENVIRONMENT.flatMap((name) => env[name] ? [[name, env[name]]] : []));
71
+ }
72
+ function vertexTokenSource(env, route, createAuth = (options) => new GoogleAuth(options)) {
73
+ const keyFilename = env.GOOGLE_APPLICATION_CREDENTIALS?.trim();
74
+ const auth = createAuth({
75
+ projectId: route.projectId,
76
+ scopes: [CLOUD_PLATFORM_SCOPE],
77
+ ...keyFilename ? { keyFilename } : {}
78
+ });
79
+ return async () => {
80
+ try {
81
+ const token = await auth.getAccessToken();
82
+ if (!token)
83
+ throw new Error("Empty ADC token");
84
+ return token;
85
+ } catch {
86
+ throw new VertexAuthenticationError;
87
+ }
88
+ };
89
+ }
90
+
91
+ class VertexAuthenticationError extends Error {
92
+ status = 401;
93
+ retryable = false;
94
+ constructor() {
95
+ super("Vertex ADC credentials are unavailable or could not be refreshed. Configure Application Default Credentials and retry.");
96
+ this.name = "VertexAuthenticationError";
97
+ }
98
+ }
99
+ function createVertexModel(model, env, createAuth) {
100
+ const route = vertexRoute(env);
101
+ const adapter = createVertex({
102
+ ...route,
103
+ getAccessToken: vertexTokenSource(env, route, createAuth)
104
+ })(model);
105
+ return wrapLanguageModel(adapter, [{
106
+ name: "harness-vertex-sanitized-errors",
107
+ async wrapGenerate(_context, next) {
108
+ try {
109
+ return await next();
110
+ } catch (error) {
111
+ throw safeVertexError(error);
112
+ }
113
+ },
114
+ async wrapStream(_context, next) {
115
+ let stream;
116
+ try {
117
+ stream = await next();
118
+ } catch (error) {
119
+ throw safeVertexError(error);
120
+ }
121
+ return async function* () {
122
+ try {
123
+ yield* stream;
124
+ } catch (error) {
125
+ throw safeVertexError(error);
126
+ }
127
+ }();
128
+ }
129
+ }]);
130
+ }
131
+ function safeVertexError(error) {
132
+ if (error instanceof VertexAuthenticationError)
133
+ return error;
134
+ const record = error && typeof error === "object" ? error : {};
135
+ if (record.name === "AbortError")
136
+ return new DOMException("Vertex request cancelled.", "AbortError");
137
+ const status = typeof record.status === "number" && Number.isInteger(record.status) && record.status >= 100 && record.status <= 599 ? record.status : undefined;
138
+ return Object.assign(new Error("Vertex request failed. Check the sanitized provider diagnosis."), {
139
+ ...status ? { status } : {},
140
+ provider: providerDiagnostic(record.responseBody ?? record.body, status),
141
+ retryable: record.retryable === true
142
+ });
143
+ }
144
+
145
+ export { providerDiagnosticSchema, providerDiagnostic, vertexRoute, vertexConfigured, VERTEX_ENVIRONMENT, vertexEnvironment, vertexTokenSource, createVertexModel };