@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.
- package/CHANGELOG.md +64 -0
- package/README.md +9 -10
- package/contracts/engine-api.json +2921 -0
- package/contracts/public-api.json +267 -1
- package/contracts/stable-api-signatures.json +43 -43
- package/dist/acp-cli.js +137 -15002
- package/dist/approvals/approval-history.d.ts +22 -0
- package/dist/approvals/explicit-review.d.ts +24 -0
- package/dist/approvals/host-policy-identity.d.ts +3 -0
- package/dist/cli/arguments.d.ts +6 -2
- package/dist/cli/checkpoints.d.ts +230 -0
- package/dist/cli/cli-options.d.ts +2 -41
- package/dist/cli/cli-profiles.d.ts +4 -2
- package/dist/cli/cli-stream.d.ts +2 -167
- package/dist/cli/governance-report.d.ts +5 -0
- package/dist/cli/policy-decisions.d.ts +9 -0
- package/dist/cli/policy.d.ts +5 -0
- package/dist/cli/presentation.d.ts +3 -1
- package/dist/cli/run-document.d.ts +2 -91
- package/dist/cli/terminal/terminal-continuation.d.ts +2 -3
- package/dist/cli/terminal/terminal-ui.d.ts +4 -0
- package/dist/{cli-entry-c2f58zj2.js → cli-entry-ae7x44d4.js} +14969 -10731
- package/dist/{cli-entry-427869g9.js → cli-entry-d5788aay.js} +388 -47
- package/dist/cli-entry-ev76ezcd.js +656 -0
- package/dist/{cli-3jmy4h5h.js → cli-t7hrhayq.js} +918 -2223
- package/dist/cli.js +3 -5
- package/dist/client/acp-mcp-admission.d.ts +32 -0
- package/dist/client/acp-mcp-host.d.ts +19 -0
- package/dist/client/acp-mcp-session.d.ts +14 -0
- package/dist/client/acp-stdio.d.ts +2 -0
- package/dist/client/acp.d.ts +4 -1
- package/dist/client/adapter.d.ts +13 -1
- package/dist/client/continuation.d.ts +3 -0
- package/dist/client/json-contracts.d.ts +107 -4
- package/dist/client/local-service.d.ts +2 -0
- package/dist/client/protocol.d.ts +127 -1
- package/dist/client/run-document.d.ts +91 -0
- package/dist/client/service-events.d.ts +4 -0
- package/dist/client/stream.d.ts +167 -0
- package/dist/compat/cli-options.d.ts +53 -0
- package/dist/compat/code-support.d.ts +22 -0
- package/dist/compat/code-support.js +74 -0
- package/dist/{config-1k9t4jhh.js → config-c002f06f.js} +1 -1
- package/dist/config-j3jga5wh.js +61 -0
- package/dist/context/adaptive-compaction.d.ts +1 -0
- package/dist/context/compaction.d.ts +1 -1
- package/dist/context/request-measurements.d.ts +17 -0
- package/dist/context/request-projection.d.ts +10 -0
- package/dist/context/task-memory.d.ts +1 -0
- package/dist/engine/acp.d.ts +6 -0
- package/dist/engine/acp.js +205 -0
- package/dist/engine/client.d.ts +6 -0
- package/dist/engine/client.js +28 -0
- package/dist/engine/desktop-providers-v1.d.ts +4 -0
- package/dist/engine/desktop-providers-v1.js +18 -0
- package/dist/engine/desktop-state-v1.d.ts +10 -0
- package/dist/engine/desktop-state-v1.js +168 -0
- package/dist/engine/index.d.ts +73 -0
- package/dist/engine/index.js +977 -0
- package/dist/engine/mcp-stdio-v1.d.ts +11 -0
- package/dist/engine/mcp-stdio-v1.js +108 -0
- package/dist/engine/models.d.ts +3 -0
- package/dist/engine/models.js +894 -0
- package/dist/engine/protocol.d.ts +7 -0
- package/dist/engine/protocol.js +182 -0
- package/dist/engine/service.d.ts +5 -0
- package/dist/engine/service.js +28 -0
- package/dist/execution/acceptance-snapshot.d.ts +2 -0
- package/dist/execution/execution-environment.d.ts +10 -0
- package/dist/execution/mcp-oci-channel.d.ts +11 -0
- package/dist/execution/mcp-oci-server.d.ts +38 -0
- package/dist/execution/mcp-oci-workspace.d.ts +23 -0
- package/dist/execution/mcp-resource-recovery.d.ts +19 -0
- package/dist/execution/mcp-workspace-snapshot.d.ts +20 -0
- package/dist/hostile-repository-demo.js +3368 -1304
- package/dist/index-1bx83sw4.js +4 -0
- package/dist/index-2gz7jv7g.js +549 -0
- package/dist/{cli-entry-b1mfvmxe.js → index-2jrdcj6b.js} +72 -115
- package/dist/index-3ah1f369.js +356 -0
- package/dist/index-42gp2hy8.js +1555 -0
- package/dist/index-4jw3tvy8.js +301 -0
- package/dist/index-8705zxpr.js +145 -0
- package/dist/index-8vm2m34s.js +2080 -0
- package/dist/index-8zzhggxv.js +477 -0
- package/dist/index-a97bezbz.js +1073 -0
- package/dist/index-gq9xagx2.js +1343 -0
- package/dist/index-h0mqx2ed.js +1373 -0
- package/dist/index-jgrx804e.js +5589 -0
- package/dist/index-qfpz5y2v.js +174 -0
- package/dist/index-t60rva31.js +1004 -0
- package/dist/index-wg1sd3at.js +80 -0
- package/dist/index-xqxeypt5.js +888 -0
- package/dist/index-yb239ghk.js +961 -0
- package/dist/index-z0qxmkm2.js +3389 -0
- package/dist/index-z4e8d0ph.js +1768 -0
- package/dist/index.js +251 -18649
- package/dist/integrations/mcp-host-session.d.ts +26 -0
- package/dist/integrations/mcp-stdio-admission.d.ts +54 -0
- package/dist/integrations/mcp-stdio-client.d.ts +44 -0
- package/dist/integrations/mcp-stdio-framing.d.ts +18 -0
- package/dist/integrations/mcp-stdio-launch.d.ts +20 -0
- package/dist/integrations/mcp-stdio-session.d.ts +7 -0
- package/dist/integrations/mcp-stdio-tools.d.ts +12 -0
- package/dist/internal/desktop/catalog.d.ts +2 -0
- package/dist/internal/desktop/persistence.d.ts +2 -3
- package/dist/internal/desktop/providers.d.ts +1 -0
- package/dist/models/catalog.d.ts +2 -0
- package/dist/persistence/governance-context.d.ts +126 -0
- package/dist/persistence/governance-report.d.ts +299 -0
- package/dist/persistence/host-database-backup.d.ts +28 -0
- package/dist/persistence/mcp-execution-journal.d.ts +19 -0
- package/dist/persistence/mcp-reconciliation.d.ts +33 -0
- package/dist/persistence/mcp-resource-journal.d.ts +54 -0
- package/dist/persistence/workspace-checkpoints.d.ts +138 -0
- package/dist/providers/anthropic-continuation.d.ts +5 -0
- package/dist/providers/providers.d.ts +1 -1
- package/dist/providers/vertex-auth.d.ts +27 -0
- package/dist/runtime/delegation-contracts.d.ts +9 -0
- package/dist/runtime/delegation-correction.d.ts +9 -0
- package/dist/runtime/delegation-result.d.ts +73 -0
- package/dist/runtime/error-diagnostics.d.ts +86 -0
- package/dist/runtime/harness.d.ts +11 -1
- package/dist/runtime/policy-decisions.d.ts +66 -0
- package/dist/runtime/policy-inspection.d.ts +52 -0
- package/dist/runtime/provider-diagnostics.d.ts +1 -0
- package/dist/runtime/runtime-instructions.d.ts +8 -0
- package/dist/runtime/task-acceptance-checks.d.ts +103 -0
- package/dist/runtime/task-acceptance-delivery.d.ts +107 -0
- package/dist/runtime/task-acceptance-host.d.ts +20 -0
- package/dist/runtime/task-acceptance-record.d.ts +107 -0
- package/dist/runtime/task-acceptance-validation.d.ts +25 -0
- package/dist/runtime/task-acceptance.d.ts +47 -0
- package/dist/runtime/time-to-safe-fix.d.ts +83 -0
- package/dist/runtime/tool-policy-file.d.ts +23 -0
- package/dist/runtime/tool-policy-paths.d.ts +5 -0
- package/dist/runtime/tool-policy.d.ts +6 -0
- package/dist/service-cli.js +19 -14504
- package/dist/{service-client-cli-yx56n0hc.js → service-client-cli-kns4mf57.js} +307 -248
- package/dist/verify-historical-migrations.js +3314 -1251
- package/dist/workspace/path-policy.d.ts +4 -0
- package/dist/zhx.js +3 -5
- package/docs/ACP.md +14 -2
- package/docs/ANTHROPIC.md +33 -0
- package/docs/CLI.md +132 -0
- package/docs/CLIENT_PROTOCOL.md +45 -0
- package/docs/CODE_RELEASE.md +93 -0
- package/docs/ENGINE_API.md +319 -0
- package/docs/EXTENSIBILITY.md +46 -3
- package/docs/FIRST_USE.md +6 -6
- package/docs/LOCAL_SERVICE.md +13 -0
- package/docs/MCP_STDIO.md +20 -0
- package/docs/README.md +6 -0
- package/docs/STABILITY.md +9 -1
- package/docs/SUPPORT_MATRIX.md +1 -1
- package/docs/TOOL_POLICY.md +81 -0
- package/docs/VERTEX.md +50 -0
- package/docs/adr/0002-isolated-mcp-stdio.md +135 -0
- package/docs/fixtures/mcp-stdio-contract-v1.json +189 -0
- package/docs/support-matrix.json +2 -0
- package/evaluations/representative-assembly-matrix.json +64 -1
- package/evaluations/task-acceptance-routes.json +7 -0
- package/examples/README.md +1 -1
- package/package.json +74 -12
- package/dist/cli-entry-64pdp3k5.js +0 -17
package/docs/VERTEX.md
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Google Cloud Vertex AI (provisional)
|
|
2
|
+
|
|
3
|
+
Vertex is a separate provider (`vertex`), using Google Cloud Application Default
|
|
4
|
+
Credentials (ADC). A Gemini API key does not configure this route. The bundled
|
|
5
|
+
`gemini-3.7-flash` selection is unverified; its pinned SDK requires `global`.
|
|
6
|
+
Use a model enabled for your project and location. No live certification,
|
|
7
|
+
pricing or context limits are inferred from the Gemini direct API.
|
|
8
|
+
|
|
9
|
+
## Configuration
|
|
10
|
+
|
|
11
|
+
Configure ADC on the host using your organization's Google Cloud workflow.
|
|
12
|
+
Local application-default credentials, an explicit ADC credential file, and
|
|
13
|
+
attached cloud identities are resolved by `google-auth-library`. Tokens are
|
|
14
|
+
cached and renewed by that library, not stored in Harness sessions or Keychain.
|
|
15
|
+
|
|
16
|
+
Set `GOOGLE_CLOUD_PROJECT` and `VERTEX_LOCATION` explicitly in the launching
|
|
17
|
+
environment. Set `GOOGLE_APPLICATION_CREDENTIALS` to an ADC file if required by
|
|
18
|
+
your deployment. Otherwise the host's standard ADC discovery applies. Harness
|
|
19
|
+
does not edit credential files or run a login flow. Static `VERTEX_ACCESS_TOKEN`,
|
|
20
|
+
`GOOGLE_ACCESS_TOKEN`, `VERTEX_API_KEY` and `GOOGLE_API_KEY` do not override ADC.
|
|
21
|
+
Custom Vertex endpoints are not supported by this integration.
|
|
22
|
+
|
|
23
|
+
Select `vertex` through the CLI provider selector or `--provider vertex`, then
|
|
24
|
+
choose your model. The CLI credentials screen explains ADC instead of asking for
|
|
25
|
+
an API key. In Desktop, launch the app with the same environment and select
|
|
26
|
+
Google Cloud Vertex AI in the model selector. The credentials screen checks
|
|
27
|
+
route configuration and can request an ADC token; it does not store/delete ADC.
|
|
28
|
+
Restart Desktop after changing its project or location.
|
|
29
|
+
|
|
30
|
+
Configuration presence is not an authentication or model-access check. ADC
|
|
31
|
+
renewal and generation can still fail due to expired grants, missing credentials,
|
|
32
|
+
IAM, model/region availability, quota or service errors. The ADC button only
|
|
33
|
+
checks token acquisition; it does not certify model access or issue generation.
|
|
34
|
+
|
|
35
|
+
## Durable execution and diagnostics
|
|
36
|
+
|
|
37
|
+
Project, location and the explicit ADC-file path are hashed into the durable
|
|
38
|
+
transport binding. A changed route cannot approve a run created on another route.
|
|
39
|
+
Token renewal does not change the binding. Account changes behind the same ADC
|
|
40
|
+
file remain governed by Google Cloud IAM; Harness does not fingerprint tokens.
|
|
41
|
+
Unconfigured Vertex does not change existing provider transport bindings.
|
|
42
|
+
|
|
43
|
+
Errors expose bounded categories for authentication, permission, unavailable
|
|
44
|
+
model/route, rate limit and server failures. Raw Google payloads, token values,
|
|
45
|
+
credential paths and service-account identities are not retained in errors.
|
|
46
|
+
|
|
47
|
+
The integration pins `@zhivex-ai/vertex@1.1.2` with Core 1.26.0 and
|
|
48
|
+
`google-auth-library@11.0.2`. Deterministic tests exercise the installed SDK's
|
|
49
|
+
transport, streaming, signed continuation, approval/reopen and route mismatch.
|
|
50
|
+
They are not evidence of a live project, renewable ADC or IAM authorization.
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# ADR 0002: Host-admitted MCP stdio inside OCI
|
|
2
|
+
|
|
3
|
+
Status: proposed for implementation review (HAR-HU-46), 2026-09-29.
|
|
4
|
+
This is a design contract and acceptance fixture specification. It does not
|
|
5
|
+
activate stdio, change configuration schema 1, or claim isolated execution passed.
|
|
6
|
+
|
|
7
|
+
## Evidence and compatibility baseline
|
|
8
|
+
|
|
9
|
+
- `src/integrations/mcp.ts`: configuration accepts `http`/`custom`; custom clients
|
|
10
|
+
require explicit host injection. Tool/resource allowlists, output bounds and
|
|
11
|
+
durable approvals already exist.
|
|
12
|
+
- `src/client/acp.ts`: client `mcpServers` must be empty. Preserve that rejection
|
|
13
|
+
until host admission and isolated launch are implemented together.
|
|
14
|
+
- `src/execution/execution-environment.ts`: OCI enforces network denial, read-only
|
|
15
|
+
root filesystem, unprivileged user, dropped capabilities, bounded resources,
|
|
16
|
+
private workspace volume and optional read-only dependencies. Its adapter has
|
|
17
|
+
finite `run`/`runBatch`, not an interactive stdio process lease. All MCP is
|
|
18
|
+
currently rejected with OCI enforcement before discovery.
|
|
19
|
+
- Installed `@zhivex-ai/core` 1.26.0 exposes `McpClient`, call options with abort,
|
|
20
|
+
timeout/idempotency key, and an HTTP transport; no executable stdio factory was
|
|
21
|
+
found in this dependency. The control-plane transport enum is not an executor.
|
|
22
|
+
|
|
23
|
+
MCP stdio uses UTF-8 newline-delimited JSON-RPC on stdin/stdout; stderr is a
|
|
24
|
+
separate diagnostic stream. Preserve message correlation and initialization.
|
|
25
|
+
Source: [MCP transport specification, 2025-11-25](https://modelcontextprotocol.io/specification/2025-11-25/basic/transports).
|
|
26
|
+
The proposed initial protocol is explicitly 2025-11-25; unsupported negotiation
|
|
27
|
+
fails before discovery. HTTP's existing version behavior remains unchanged.
|
|
28
|
+
|
|
29
|
+
## Boundary and authority
|
|
30
|
+
|
|
31
|
+
Choose the enforced OCI boundary, initially Docker with the existing platform
|
|
32
|
+
support policy. A future backend must pass the same fixtures before advertising
|
|
33
|
+
support. A process on the host, a filtered environment, a permission prompt or an
|
|
34
|
+
SDK transport alone is not this boundary. Missing Docker, attestation, resource
|
|
35
|
+
limits or interactive capability means rejection, never host fallback.
|
|
36
|
+
|
|
37
|
+
A client sends a *proposal*, not an executable command. Proposed fields are:
|
|
38
|
+
`schemaVersion: 1`, server ID, immutable image digest, absolute in-image executable,
|
|
39
|
+
argv array, protocol version, relative snapshot working directory, explicit tool
|
|
40
|
+
and resource allowlists, permissions, environment literals, secret references,
|
|
41
|
+
resource/deadline limits and snapshot identity. Unknown fields are rejected.
|
|
42
|
+
Host paths, shell command strings, PATH search, package installation at launch,
|
|
43
|
+
mutable image tags and interpreter flags that load host configuration are denied.
|
|
44
|
+
These are proposed host API fields, not accepted workspace configuration today.
|
|
45
|
+
|
|
46
|
+
The host validates and presents executable/argv, image, filesystem scope, allowed
|
|
47
|
+
tools, environment names, secret reference names and limits for explicit launch
|
|
48
|
+
admission. No image pull, subprocess, initialize or discovery occurs merely from
|
|
49
|
+
parsing configuration, opening a client session or importing a module. The host
|
|
50
|
+
may admit an already provisioned image only; image provisioning is a separate
|
|
51
|
+
host operation. The host issues an opaque single-use admission receipt bound to
|
|
52
|
+
principal, tenant/scope, workspace snapshot digest, session, full normalized
|
|
53
|
+
proposal digest, image identity, policy version and expiry. Client booleans,
|
|
54
|
+
model text and tool annotations cannot manufacture that receipt.
|
|
55
|
+
|
|
56
|
+
Admission checks are repeated immediately before launch. Configuration changes,
|
|
57
|
+
workspace/scope changes, expired receipts and reuse invalidate it. Raw receipt
|
|
58
|
+
capabilities are not serialized to the client or exported in run histories.
|
|
59
|
+
Launch admission grants no approval to call mutating tools. Existing per-call
|
|
60
|
+
approval remains required; server metadata cannot expand admitted permissions.
|
|
61
|
+
|
|
62
|
+
## Execution policy v1
|
|
63
|
+
|
|
64
|
+
| Surface | Required enforcement |
|
|
65
|
+
| --- | --- |
|
|
66
|
+
| Startup | Acquire isolated execution lease and private snapshot, attest image/policy, consume admission once, then start exact executable/argv without shell. Failure removes partial resources. |
|
|
67
|
+
| Environment | Start empty except host-fixed HOME/TMPDIR inside bounded tmpfs and minimal runtime locale. Admit explicitly named literal values. Reject injection/control variables including PATH, NODE_OPTIONS, loader paths and runtime preload flags. Never inherit process.env. |
|
|
68
|
+
| Secrets | None by default. Host resolves admitted opaque references immediately before launch and injects only named values in the isolated process environment. Missing/expired references fail closed. No secret values in argv, proposal, fingerprints, receipts, logs or fixtures. Redact stdout-derived diagnostics as well as stderr. The admitted server can read its granted secrets; isolation does not make it trustworthy. |
|
|
69
|
+
| Network | Deny all egress/ingress, DNS and host/metadata access using OCI network none. No domain allowlist or proxy exception in v1. A server requiring network is unsupported. |
|
|
70
|
+
| Filesystem | Read-only image root; private snapshot at /workspace; bounded tmpfs; optional declared read-only dependency tree. No host home, repository bind mount, credential directory, Docker socket or arbitrary volume. Read-only permission mounts workspace read-only. Write permission affects only private snapshot. |
|
|
71
|
+
| Publication | Isolated writes never mutate the host tree. Capture reviewed patch, validate preimages/path rules and obtain separate durable host approval before importing, using the existing execution delivery contract. |
|
|
72
|
+
| Resource limits | Host hard maxima intersect requested limits: memory, CPU, pids, workspace/write bytes, tmpfs, output and elapsed runtime. No client may increase a host limit. Reject unsupported enforcement. |
|
|
73
|
+
| Lifetime | One isolated server per admitted session; no cross-tenant reuse. No auto-restart or adoption after host restart. Reconnect requires fresh launch admission. |
|
|
74
|
+
|
|
75
|
+
The reusable execution policy remains authoritative; this proposal cannot weaken
|
|
76
|
+
its limits. SDK `McpClient` describes messages, not confinement. Bridge the admitted
|
|
77
|
+
process streams into an internal client implementing listTools/callTool and the
|
|
78
|
+
resource subset already allowed by Harness. Keep HTTP and existing injected
|
|
79
|
+
custom clients unchanged in non-OCI runs. Do not reinterpret arbitrary injected
|
|
80
|
+
clients as isolated. Preserve allowlists, bounded pagination, schema validation,
|
|
81
|
+
redaction and approval wrappers above the bridge.
|
|
82
|
+
|
|
83
|
+
## Lifecycle, framing and uncertain effects
|
|
84
|
+
|
|
85
|
+
Proposed lifecycle: proposed -> admitted -> starting -> initializing -> ready ->
|
|
86
|
+
closing -> closed, with failed terminal outcome at any nonterminal stage. Bind all
|
|
87
|
+
requests and audit events to admission and process-lease identities. Suggested
|
|
88
|
+
host defaults: start 10 s, initialize 10 s, existing list 5 s/call 30 s bounds,
|
|
89
|
+
maximum session 10 min, graceful stop 2 s followed by forced boundary removal.
|
|
90
|
+
These are finite absolute deadlines; receiving partial output cannot extend them.
|
|
91
|
+
Use the smaller host/request deadline and propagate AbortSignal. Limit in-flight
|
|
92
|
+
requests to one initially, 1 MiB UTF-8 frame and 64 KiB retained redacted stderr;
|
|
93
|
+
retain existing lower per-tool output limits. Apply backpressure with bounded
|
|
94
|
+
queues. Oversized/incomplete frames, invalid UTF-8/JSON, duplicate or unknown
|
|
95
|
+
response IDs and stdout log contamination close the transport with a typed error.
|
|
96
|
+
Server-initiated execution/sampling/elicitation requests are unsupported and must
|
|
97
|
+
not invoke host capabilities. Notifications cannot grant permissions.
|
|
98
|
+
|
|
99
|
+
On cancellation or timeout: stop new calls, best-effort protocol cancellation,
|
|
100
|
+
close stdin, terminate the isolated process tree, force-remove its boundary after
|
|
101
|
+
grace, reap handles and release leases. EOF/exit fails outstanding calls. A crash
|
|
102
|
+
or timeout after dispatch leaves a possibly effectful call `outcome_unknown` in
|
|
103
|
+
host audit until reconciled. Reconciliation requires confirmed resource cleanup, an explicit host-authorized decision bound to the journal revision and an evidence digest. Preserve the prior uncertain status and keep the original call key unreplayable; a future call requires a new admission and approval. Never replay it automatically, even with an SDK
|
|
104
|
+
idempotency key. Read-only calls are not automatically retried in v1 either.
|
|
105
|
+
Do not report cleanup success until the runtime confirms resources are gone;
|
|
106
|
+
otherwise retain a cleanup-required record for scoped orphan reconciliation.
|
|
107
|
+
|
|
108
|
+
The current finite OCI adapter cannot fulfill this contract unchanged. A future
|
|
109
|
+
optional interactive capability must expose attested launch, bounded stdin writes,
|
|
110
|
+
stdout/stderr reads, exit observation and idempotent close; acquisition owns the
|
|
111
|
+
lease. Missing capability fails before spawn. Do not implement stdio by calling
|
|
112
|
+
host spawn from `createHarnessMcpTools` or by buffering a never-ending `run`.
|
|
113
|
+
|
|
114
|
+
## Threats and review gates
|
|
115
|
+
|
|
116
|
+
| Threat | Control and evidence required |
|
|
117
|
+
| --- | --- |
|
|
118
|
+
| Client commands run during session creation | Reject before admission; zero host/container processes and zero discovery calls. |
|
|
119
|
+
| TOCTOU, swapped image/argv or replayed admission | Digest/identity recheck at launch; receipt scope/expiry/single-use tests. |
|
|
120
|
+
| Secret/environment exfiltration | Empty inherited environment, restricted references, network denial, redacted audit; canary checks inside/outside boundary. |
|
|
121
|
+
| Filesystem escape and host mutation | No bind mounts, no-follow snapshot/import rules, resource limits and reviewed publication; symlink/traversal fixtures. |
|
|
122
|
+
| Tool metadata or prompt injection escalates authority | Independent host policy and per-call approvals; untrusted descriptions/results remain data. |
|
|
123
|
+
| Hung/forking/noisy process | Absolute deadlines, frame/queue/stderr/resource bounds and whole-boundary cleanup. |
|
|
124
|
+
| Cross-scope reuse or uncertain effect replay | Scoped leases/admission; persisted unknown outcome; no reconnect/restart replay. |
|
|
125
|
+
| False isolation claim | Real OCI and installed-package gates, not mocks alone; unsupported backend denied. |
|
|
126
|
+
|
|
127
|
+
The [fixture catalogue](../fixtures/mcp-stdio-contract-v1.json) specifies positive
|
|
128
|
+
and negative acceptance before implementation. Every case is currently
|
|
129
|
+
`specified_not_executed`, not a passed test. Implementation must supply observations
|
|
130
|
+
for launch counts, process identity, network probes, host/snapshot digests, resource
|
|
131
|
+
cleanup and sanitized errors as specified. A fake runtime may prove host admission
|
|
132
|
+
logic; only real OCI can establish filesystem/network/process enforcement.
|
|
133
|
+
Existing MCP/ACP regression tests protect today's rejection boundary. Delivery
|
|
134
|
+
requires Node and Bun installed consumers plus real supported OCI execution,
|
|
135
|
+
including crash/cancel/orphan fixtures, before changing support/ACP capabilities.
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"status": "design_only",
|
|
4
|
+
"cases": [
|
|
5
|
+
{
|
|
6
|
+
"id": "admitted_read",
|
|
7
|
+
"kind": "positive",
|
|
8
|
+
"given": "Host admits immutable image and read-only snapshot",
|
|
9
|
+
"when": "initialize, list and call allowed read tool",
|
|
10
|
+
"observationsRequired": [
|
|
11
|
+
"exact argv launched only inside OCI",
|
|
12
|
+
"bounded result returned",
|
|
13
|
+
"host digest unchanged",
|
|
14
|
+
"cleanup confirmed"
|
|
15
|
+
],
|
|
16
|
+
"status": "specified_not_executed"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"id": "admitted_write",
|
|
20
|
+
"kind": "positive",
|
|
21
|
+
"given": "Launch and mutating call approved separately",
|
|
22
|
+
"when": "write private snapshot and request delivery",
|
|
23
|
+
"observationsRequired": [
|
|
24
|
+
"no host change before import approval",
|
|
25
|
+
"reviewed preimage import applies once"
|
|
26
|
+
],
|
|
27
|
+
"status": "specified_not_executed"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"id": "secret_reference",
|
|
31
|
+
"kind": "positive",
|
|
32
|
+
"given": "Host admits one secret reference",
|
|
33
|
+
"when": "read allowed env name and emit canary diagnostics",
|
|
34
|
+
"observationsRequired": [
|
|
35
|
+
"only named secret inside process",
|
|
36
|
+
"canary absent from audit and exports"
|
|
37
|
+
],
|
|
38
|
+
"status": "specified_not_executed"
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"id": "unadmitted_client",
|
|
42
|
+
"kind": "negative",
|
|
43
|
+
"given": "ACP/client supplies executable without host receipt",
|
|
44
|
+
"when": "open session and request discovery",
|
|
45
|
+
"observationsRequired": [
|
|
46
|
+
"no image pull",
|
|
47
|
+
"zero process starts",
|
|
48
|
+
"zero discovery calls"
|
|
49
|
+
],
|
|
50
|
+
"status": "specified_not_executed"
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
"id": "receipt_drift",
|
|
54
|
+
"kind": "negative",
|
|
55
|
+
"given": "Valid receipt then image, argv, snapshot or scope changes",
|
|
56
|
+
"when": "attempt launch for each independent mutation",
|
|
57
|
+
"observationsRequired": [
|
|
58
|
+
"rejected before process start"
|
|
59
|
+
],
|
|
60
|
+
"status": "specified_not_executed"
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"id": "receipt_replay",
|
|
64
|
+
"kind": "negative",
|
|
65
|
+
"given": "Expired or consumed receipt",
|
|
66
|
+
"when": "attempt launch",
|
|
67
|
+
"observationsRequired": [
|
|
68
|
+
"rejected before process start"
|
|
69
|
+
],
|
|
70
|
+
"status": "specified_not_executed"
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"id": "missing_backend",
|
|
74
|
+
"kind": "negative",
|
|
75
|
+
"given": "No interactive OCI capability or unavailable runtime",
|
|
76
|
+
"when": "admit request",
|
|
77
|
+
"observationsRequired": [
|
|
78
|
+
"unsupported error",
|
|
79
|
+
"no host fallback"
|
|
80
|
+
],
|
|
81
|
+
"status": "specified_not_executed"
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"id": "environment_injection",
|
|
85
|
+
"kind": "negative",
|
|
86
|
+
"given": "Ambient credential canary and requested NODE_OPTIONS",
|
|
87
|
+
"when": "attempt admission",
|
|
88
|
+
"observationsRequired": [
|
|
89
|
+
"control variable rejected",
|
|
90
|
+
"ambient env never inherited"
|
|
91
|
+
],
|
|
92
|
+
"status": "specified_not_executed"
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"id": "network_escape",
|
|
96
|
+
"kind": "negative",
|
|
97
|
+
"given": "Admitted malicious process",
|
|
98
|
+
"when": "probe DNS, public IP and metadata IP",
|
|
99
|
+
"observationsRequired": [
|
|
100
|
+
"all probes denied by real OCI",
|
|
101
|
+
"no host proxy"
|
|
102
|
+
],
|
|
103
|
+
"status": "specified_not_executed"
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"id": "filesystem_escape",
|
|
107
|
+
"kind": "negative",
|
|
108
|
+
"given": "Snapshot contains symlink and traversal attempts",
|
|
109
|
+
"when": "read host home and write outside workspace",
|
|
110
|
+
"observationsRequired": [
|
|
111
|
+
"host files inaccessible",
|
|
112
|
+
"host digest unchanged",
|
|
113
|
+
"unsafe import denied"
|
|
114
|
+
],
|
|
115
|
+
"status": "specified_not_executed"
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
"id": "permission_escalation",
|
|
119
|
+
"kind": "negative",
|
|
120
|
+
"given": "Read tool annotation claims write is safe",
|
|
121
|
+
"when": "call undeclared or mutating tool",
|
|
122
|
+
"observationsRequired": [
|
|
123
|
+
"host permissions prevail",
|
|
124
|
+
"no mutation without approval"
|
|
125
|
+
],
|
|
126
|
+
"status": "specified_not_executed"
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
"id": "protocol_abuse",
|
|
130
|
+
"kind": "negative",
|
|
131
|
+
"given": "Noisy or hostile stdio server",
|
|
132
|
+
"when": "send oversized/incomplete frames, malformed UTF8, unknown/duplicate IDs and server requests",
|
|
133
|
+
"observationsRequired": [
|
|
134
|
+
"bounded buffers",
|
|
135
|
+
"typed error or unsupported-method response",
|
|
136
|
+
"no host execution"
|
|
137
|
+
],
|
|
138
|
+
"status": "specified_not_executed"
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
"id": "hung_call",
|
|
142
|
+
"kind": "negative",
|
|
143
|
+
"given": "Server receives an approved effectful call then hangs",
|
|
144
|
+
"when": "expire absolute deadline",
|
|
145
|
+
"observationsRequired": [
|
|
146
|
+
"unknown outcome retained",
|
|
147
|
+
"no automatic replay",
|
|
148
|
+
"process tree terminated"
|
|
149
|
+
],
|
|
150
|
+
"status": "specified_not_executed"
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
"id": "cancel_tree",
|
|
154
|
+
"kind": "negative",
|
|
155
|
+
"given": "Server forks children and ignores graceful termination",
|
|
156
|
+
"when": "cancel run",
|
|
157
|
+
"observationsRequired": [
|
|
158
|
+
"admission closed",
|
|
159
|
+
"forced removal after grace",
|
|
160
|
+
"no leaked descendants or leases"
|
|
161
|
+
],
|
|
162
|
+
"status": "specified_not_executed"
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
"id": "crash_restart",
|
|
166
|
+
"kind": "negative",
|
|
167
|
+
"given": "Host or server crashes after dispatch",
|
|
168
|
+
"when": "reopen host session",
|
|
169
|
+
"observationsRequired": [
|
|
170
|
+
"no replay",
|
|
171
|
+
"fresh admission required",
|
|
172
|
+
"orphan cleanup scoped to owner"
|
|
173
|
+
],
|
|
174
|
+
"status": "specified_not_executed"
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
"id": "cleanup_failure",
|
|
178
|
+
"kind": "negative",
|
|
179
|
+
"given": "Runtime cannot confirm boundary removal",
|
|
180
|
+
"when": "close session",
|
|
181
|
+
"observationsRequired": [
|
|
182
|
+
"cleanup-required retained",
|
|
183
|
+
"no false closed-success",
|
|
184
|
+
"bounded reconciliation"
|
|
185
|
+
],
|
|
186
|
+
"status": "specified_not_executed"
|
|
187
|
+
}
|
|
188
|
+
]
|
|
189
|
+
}
|
package/docs/support-matrix.json
CHANGED
|
@@ -24,6 +24,8 @@
|
|
|
24
24
|
{ "id": "provider-meta", "dimension": "provider", "target": "Meta muse-spark-1.2", "level": "supported", "evidence": ["docs/LIVE_CERTIFICATION.md", "release-status.json"] },
|
|
25
25
|
{ "id": "provider-qwen", "dimension": "provider", "target": "Qwen qwen3.8-max", "level": "supported", "evidence": ["docs/LIVE_CERTIFICATION.md", "release-status.json"] },
|
|
26
26
|
{ "id": "provider-openai", "dimension": "provider", "target": "OpenAI gpt-5.6-luna", "level": "supported", "evidence": ["docs/LIVE_CERTIFICATION.md", "release-status.json"] },
|
|
27
|
+
{ "id": "provider-vertex", "dimension": "provider", "target": "Google Cloud Vertex AI (ADC)", "level": "provisional", "evidence": ["docs/VERTEX.md", "tests/vertex-provider.test.ts", "tests/vertex-auth.test.ts"] },
|
|
28
|
+
{ "id": "provider-anthropic", "dimension": "provider", "target": "Anthropic direct API / claude-sonnet-5", "level": "provisional", "evidence": ["docs/ANTHROPIC.md"] },
|
|
27
29
|
{ "id": "provider-gemini", "dimension": "provider", "target": "Gemini gemini-3.6-flash / 3.7-flash", "level": "provisional", "evidence": ["docs/LIVE_CERTIFICATION.md"] }
|
|
28
30
|
]
|
|
29
31
|
}
|
|
@@ -45,7 +45,14 @@
|
|
|
45
45
|
"v1.2.0-rc.11",
|
|
46
46
|
"v1.2.0-rc.12",
|
|
47
47
|
"v1.2.0-rc.13",
|
|
48
|
-
"v1.2.0"
|
|
48
|
+
"v1.2.0",
|
|
49
|
+
"v1.3.0-rc.1",
|
|
50
|
+
"v1.3.0-rc.2",
|
|
51
|
+
"v1.3.0-rc.3",
|
|
52
|
+
"v1.3.0-rc.4",
|
|
53
|
+
"v1.3.0-rc.5",
|
|
54
|
+
"v1.3.0-rc.6",
|
|
55
|
+
"v1.3.0-rc.7"
|
|
49
56
|
],
|
|
50
57
|
"expectedModels": [
|
|
51
58
|
{
|
|
@@ -399,6 +406,62 @@
|
|
|
399
406
|
"qwen": "qwen3.8-flash",
|
|
400
407
|
"openai": "gpt-6-luna"
|
|
401
408
|
}
|
|
409
|
+
},
|
|
410
|
+
{
|
|
411
|
+
"releaseTag": "v1.3.0-rc.1",
|
|
412
|
+
"models": {
|
|
413
|
+
"meta": "muse-spark-1.3-contributor",
|
|
414
|
+
"qwen": "qwen3.8-flash",
|
|
415
|
+
"openai": "gpt-6-luna"
|
|
416
|
+
}
|
|
417
|
+
},
|
|
418
|
+
{
|
|
419
|
+
"releaseTag": "v1.3.0-rc.2",
|
|
420
|
+
"models": {
|
|
421
|
+
"meta": "muse-spark-1.3-contributor",
|
|
422
|
+
"qwen": "qwen3.8-flash",
|
|
423
|
+
"openai": "gpt-6-luna"
|
|
424
|
+
}
|
|
425
|
+
},
|
|
426
|
+
{
|
|
427
|
+
"releaseTag": "v1.3.0-rc.3",
|
|
428
|
+
"models": {
|
|
429
|
+
"meta": "muse-spark-1.3-contributor",
|
|
430
|
+
"qwen": "qwen3.8-flash",
|
|
431
|
+
"openai": "gpt-6-luna"
|
|
432
|
+
}
|
|
433
|
+
},
|
|
434
|
+
{
|
|
435
|
+
"releaseTag": "v1.3.0-rc.4",
|
|
436
|
+
"models": {
|
|
437
|
+
"meta": "muse-spark-1.3",
|
|
438
|
+
"qwen": "qwen3.8-max",
|
|
439
|
+
"openai": "gpt-6-luna"
|
|
440
|
+
}
|
|
441
|
+
},
|
|
442
|
+
{
|
|
443
|
+
"releaseTag": "v1.3.0-rc.5",
|
|
444
|
+
"models": {
|
|
445
|
+
"meta": "muse-spark-1.3-contributor",
|
|
446
|
+
"qwen": "qwen3.8-flash",
|
|
447
|
+
"openai": "gpt-6-luna"
|
|
448
|
+
}
|
|
449
|
+
},
|
|
450
|
+
{
|
|
451
|
+
"releaseTag": "v1.3.0-rc.6",
|
|
452
|
+
"models": {
|
|
453
|
+
"meta": "muse-spark-1.3-contributor",
|
|
454
|
+
"qwen": "qwen3.8-flash",
|
|
455
|
+
"openai": "gpt-6-luna"
|
|
456
|
+
}
|
|
457
|
+
},
|
|
458
|
+
{
|
|
459
|
+
"releaseTag": "v1.3.0-rc.7",
|
|
460
|
+
"models": {
|
|
461
|
+
"meta": "muse-spark-1.3-contributor",
|
|
462
|
+
"qwen": "qwen3.8-flash",
|
|
463
|
+
"openai": "gpt-6-luna"
|
|
464
|
+
}
|
|
402
465
|
}
|
|
403
466
|
],
|
|
404
467
|
"expectedCases": [
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
[
|
|
2
|
+
{ "provider": "openai", "model": "gpt-6-luna", "route": "direct-api" },
|
|
3
|
+
{ "provider": "qwen", "model": "qwen3.8-flash", "route": "direct-api" },
|
|
4
|
+
{ "provider": "meta", "model": "muse-spark-1.3-contributor", "route": "direct-api" },
|
|
5
|
+
{ "provider": "gemini", "model": "gemini-3.6-flash", "route": "direct-api" },
|
|
6
|
+
{ "provider": "anthropic", "model": "claude-sonnet-5", "route": "direct-api" }
|
|
7
|
+
]
|
package/examples/README.md
CHANGED
|
@@ -8,7 +8,7 @@ Requirements: Bun 1.4.0+, Node.js 22.13.0+, and Git on macOS or Linux. After pro
|
|
|
8
8
|
harness_demo_dir=$(mktemp -d)
|
|
9
9
|
cd "$harness_demo_dir"
|
|
10
10
|
printf '{"name":"harness-first-run","private":true}\n' > package.json
|
|
11
|
-
bun add --exact --ignore-scripts @zhivex-ai/harness@1.
|
|
11
|
+
bun add --exact --ignore-scripts @zhivex-ai/harness@1.3.0-rc.7
|
|
12
12
|
./node_modules/.bin/zhx --version
|
|
13
13
|
./node_modules/.bin/zhx --help
|
|
14
14
|
./node_modules/.bin/zhx doctor --provider openai --json
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zhivex-ai/harness",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0-rc.7",
|
|
4
4
|
"description": "Governed, provider-portable runtime for coding agents with durable approvals and isolated repository execution.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -45,6 +45,46 @@
|
|
|
45
45
|
".": {
|
|
46
46
|
"types": "./dist/index.d.ts",
|
|
47
47
|
"import": "./dist/index.js"
|
|
48
|
+
},
|
|
49
|
+
"./engine": {
|
|
50
|
+
"types": "./dist/engine/index.d.ts",
|
|
51
|
+
"import": "./dist/engine/index.js"
|
|
52
|
+
},
|
|
53
|
+
"./protocol": {
|
|
54
|
+
"types": "./dist/engine/protocol.d.ts",
|
|
55
|
+
"import": "./dist/engine/protocol.js"
|
|
56
|
+
},
|
|
57
|
+
"./client": {
|
|
58
|
+
"types": "./dist/engine/client.d.ts",
|
|
59
|
+
"import": "./dist/engine/client.js"
|
|
60
|
+
},
|
|
61
|
+
"./service": {
|
|
62
|
+
"types": "./dist/engine/service.d.ts",
|
|
63
|
+
"import": "./dist/engine/service.js"
|
|
64
|
+
},
|
|
65
|
+
"./acp": {
|
|
66
|
+
"types": "./dist/engine/acp.d.ts",
|
|
67
|
+
"import": "./dist/engine/acp.js"
|
|
68
|
+
},
|
|
69
|
+
"./code-support": {
|
|
70
|
+
"types": "./dist/compat/code-support.d.ts",
|
|
71
|
+
"import": "./dist/compat/code-support.js"
|
|
72
|
+
},
|
|
73
|
+
"./models": {
|
|
74
|
+
"types": "./dist/engine/models.d.ts",
|
|
75
|
+
"import": "./dist/engine/models.js"
|
|
76
|
+
},
|
|
77
|
+
"./desktop/v1/state": {
|
|
78
|
+
"types": "./dist/engine/desktop-state-v1.d.ts",
|
|
79
|
+
"import": "./dist/engine/desktop-state-v1.js"
|
|
80
|
+
},
|
|
81
|
+
"./desktop/v1/providers": {
|
|
82
|
+
"types": "./dist/engine/desktop-providers-v1.d.ts",
|
|
83
|
+
"import": "./dist/engine/desktop-providers-v1.js"
|
|
84
|
+
},
|
|
85
|
+
"./mcp/stdio/v1": {
|
|
86
|
+
"types": "./dist/engine/mcp-stdio-v1.d.ts",
|
|
87
|
+
"import": "./dist/engine/mcp-stdio-v1.js"
|
|
48
88
|
}
|
|
49
89
|
},
|
|
50
90
|
"files": [
|
|
@@ -56,6 +96,7 @@
|
|
|
56
96
|
"LICENSE",
|
|
57
97
|
"docs/CHANGE_ENVELOPES.md",
|
|
58
98
|
"docs/CLI.md",
|
|
99
|
+
"docs/CODE_RELEASE.md",
|
|
59
100
|
"docs/images/cli-conversation.png",
|
|
60
101
|
"docs/CLIENT_PROTOCOL.md",
|
|
61
102
|
"docs/CONTEXT_ENGINEERING.md",
|
|
@@ -87,14 +128,21 @@
|
|
|
87
128
|
"evaluations/*.jsonl",
|
|
88
129
|
"benchmarks/README.md",
|
|
89
130
|
"docs/ACP.md",
|
|
90
|
-
"docs/WORKSPACE_CHECKPOINTS.md"
|
|
131
|
+
"docs/WORKSPACE_CHECKPOINTS.md",
|
|
132
|
+
"docs/ENGINE_API.md",
|
|
133
|
+
"docs/ANTHROPIC.md",
|
|
134
|
+
"docs/MCP_STDIO.md",
|
|
135
|
+
"docs/adr/0002-isolated-mcp-stdio.md",
|
|
136
|
+
"docs/VERTEX.md",
|
|
137
|
+
"docs/TOOL_POLICY.md",
|
|
138
|
+
"docs/fixtures/mcp-stdio-contract-v1.json"
|
|
91
139
|
],
|
|
92
140
|
"scripts": {
|
|
93
141
|
"models:check": "bun run scripts/validate-model-catalog.ts",
|
|
94
142
|
"models:import": "bun run scripts/generate-console-models.ts",
|
|
95
143
|
"dev": "bun run build && node --env-file-if-exists=.env dist/cli.js",
|
|
96
144
|
"start": "node dist/cli.js",
|
|
97
|
-
"build": "bun run scripts/clean-dist.ts && bun build ./src/index.ts ./src/service-cli.ts ./src/acp-cli.ts --outdir ./dist --target node --packages external && bun build ./src/cli-entry.ts --outdir ./dist --target node --packages external --splitting && mv ./dist/cli-entry.js ./dist/cli.js && cp ./dist/cli.js ./dist/zhx.js && bun build ./scripts/verify-historical-migrations.ts --outfile ./dist/verify-historical-migrations.js --target node --packages external && bun build ./scripts/hostile-repository-demo.ts --outfile ./dist/hostile-repository-demo.js --target node --packages external && tsc --emitDeclarationOnly",
|
|
145
|
+
"build": "bun run scripts/clean-dist.ts && bun build ./src/index.ts ./src/service-cli.ts ./src/acp-cli.ts ./src/engine/index.ts ./src/engine/protocol.ts ./src/engine/client.ts ./src/engine/service.ts ./src/engine/acp.ts ./src/engine/models.ts ./src/engine/desktop-state-v1.ts ./src/engine/desktop-providers-v1.ts ./src/compat/code-support.ts ./src/engine/mcp-stdio-v1.ts --root ./src --outdir ./dist --target node --packages external --splitting && bun build ./src/engine/protocol.ts ./src/engine/models.ts --outdir ./dist/engine --target browser --packages external && bun build ./src/cli-entry.ts --outdir ./dist --target node --packages external --splitting && mv ./dist/cli-entry.js ./dist/cli.js && cp ./dist/cli.js ./dist/zhx.js && bun build ./scripts/verify-historical-migrations.ts --outfile ./dist/verify-historical-migrations.js --target node --packages external && bun build ./scripts/hostile-repository-demo.ts --outfile ./dist/hostile-repository-demo.js --target node --packages external && tsc --emitDeclarationOnly",
|
|
98
146
|
"prepack": "bun run build",
|
|
99
147
|
"architecture:check": "bun run scripts/check-architecture.ts",
|
|
100
148
|
"docs:check": "bun run scripts/check-docs.ts",
|
|
@@ -143,24 +191,38 @@
|
|
|
143
191
|
"smoke:console": "bun run build && python3 scripts/console-pty-smoke.py && python3 scripts/console-entry-smoke.py",
|
|
144
192
|
"smoke:credentials": "node --experimental-strip-types scripts/credential-store-smoke.ts",
|
|
145
193
|
"release:preflight": "bun run scripts/release-preflight.ts",
|
|
146
|
-
"release:prepare": "bun run scripts/prepare-release.ts"
|
|
194
|
+
"release:prepare": "bun run scripts/prepare-release.ts",
|
|
195
|
+
"build:code": "bun run --cwd packages/code build",
|
|
196
|
+
"test:code": "bun run --cwd packages/code test",
|
|
197
|
+
"smoke:engine-code": "bun run scripts/smoke-engine-code.ts",
|
|
198
|
+
"smoke:state-upgrade": "bun run scripts/smoke-state-upgrade.ts",
|
|
199
|
+
"smoke:global-code": "node scripts/smoke-global-code.mjs",
|
|
200
|
+
"dev:code": "bun run build && bun run packages/code/scripts/link-local-engine.ts && bun run build:code",
|
|
201
|
+
"typecheck:code": "bun run --cwd packages/code typecheck",
|
|
202
|
+
"evaluate:tasks": "bun run scripts/task-acceptance.ts",
|
|
203
|
+
"prepare:desktop": "bun run build && bun pm pack --ignore-scripts --quiet --filename desktop/.harness-candidate.tgz && bun run desktop/scripts/prepare-harness.ts desktop/.harness-candidate.tgz",
|
|
204
|
+
"smoke:mcp:installed": "bun run build && bun scripts/mcp-installed-smoke.ts"
|
|
147
205
|
},
|
|
148
206
|
"dependencies": {
|
|
149
|
-
"@zhivex-ai/agents": "1.10.
|
|
150
|
-
"@zhivex-ai/
|
|
151
|
-
"@zhivex-ai/
|
|
207
|
+
"@zhivex-ai/agents": "1.10.2",
|
|
208
|
+
"@zhivex-ai/anthropic": "0.13.1",
|
|
209
|
+
"@zhivex-ai/core": "1.28.0",
|
|
210
|
+
"@zhivex-ai/gemini": "0.13.0",
|
|
152
211
|
"@zhivex-ai/meta": "0.2.8",
|
|
153
|
-
"@zhivex-ai/openai": "0.13.
|
|
154
|
-
"@zhivex-ai/qwen": "0.16.
|
|
212
|
+
"@zhivex-ai/openai": "0.13.7",
|
|
213
|
+
"@zhivex-ai/qwen": "0.16.3",
|
|
214
|
+
"@zhivex-ai/vertex": "1.2.2",
|
|
215
|
+
"google-auth-library": "11.1.0",
|
|
155
216
|
"zod": "4.6.5"
|
|
156
217
|
},
|
|
157
218
|
"overrides": {
|
|
158
|
-
"@zhivex-ai/core": "1.
|
|
219
|
+
"@zhivex-ai/core": "1.28.0"
|
|
159
220
|
},
|
|
160
221
|
"devDependencies": {
|
|
161
|
-
"@
|
|
222
|
+
"@agentclientprotocol/sdk": "1.5.1",
|
|
223
|
+
"@modelcontextprotocol/server": "2.2.0",
|
|
162
224
|
"@types/bun": "1.4.2",
|
|
163
|
-
"@types/node": "^26.6.
|
|
225
|
+
"@types/node": "^26.6.3",
|
|
164
226
|
"typescript": "7.0.2",
|
|
165
227
|
"typescript-compiler-api": "npm:typescript@6.0.3"
|
|
166
228
|
},
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
// src/version.ts
|
|
2
|
-
import { createRequire } from "node:module";
|
|
3
|
-
var packageMetadata = createRequire(import.meta.url)("../package.json");
|
|
4
|
-
if (typeof packageMetadata.version !== "string" || packageMetadata.version.length === 0) {
|
|
5
|
-
throw new Error("package.json must contain a non-empty version.");
|
|
6
|
-
}
|
|
7
|
-
if (typeof packageMetadata.engines?.node !== "string" || packageMetadata.engines.node.length === 0) {
|
|
8
|
-
throw new Error("package.json must contain a non-empty engines.node requirement.");
|
|
9
|
-
}
|
|
10
|
-
if (typeof packageMetadata.engines?.bun !== "string" || packageMetadata.engines.bun.length === 0) {
|
|
11
|
-
throw new Error("package.json must contain a non-empty engines.bun requirement.");
|
|
12
|
-
}
|
|
13
|
-
var HARNESS_VERSION = packageMetadata.version;
|
|
14
|
-
var NODE_ENGINE_RANGE = packageMetadata.engines.node;
|
|
15
|
-
var BUN_ENGINE_RANGE = packageMetadata.engines.bun;
|
|
16
|
-
|
|
17
|
-
export { HARNESS_VERSION, NODE_ENGINE_RANGE, BUN_ENGINE_RANGE };
|