@zhivex-ai/harness 0.6.1 → 0.7.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.
- package/CHANGELOG.md +30 -0
- package/README.md +43 -15
- package/ROADMAP.md +49 -19
- package/SUPPORT.md +2 -2
- package/dist/cli-stream.d.ts +167 -0
- package/dist/cli.d.ts +18 -27
- package/dist/cli.js +1865 -286
- package/dist/config.d.ts +8 -38
- package/dist/harness.d.ts +4 -1
- package/dist/hostile-repository-demo.js +396 -146
- package/dist/index.d.ts +9 -3
- package/dist/index.js +1422 -368
- package/dist/providers.d.ts +77 -0
- package/dist/routing.d.ts +16 -0
- package/dist/sessions.d.ts +122 -0
- package/dist/zhx.js +6910 -0
- package/docs/CLI.md +37 -2
- package/docs/DURABLE_OPERATIONS.md +31 -0
- package/docs/EXTENSIBILITY.md +33 -1
- package/docs/LIVE_CERTIFICATION.md +34 -135
- package/docs/RELEASE.md +10 -25
- package/package.json +6 -3
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,36 @@ All notable changes to Zhivex Harness are documented in this file.
|
|
|
4
4
|
|
|
5
5
|
The project follows Semantic Versioning. During `0.x`, minor releases may change user-facing contracts when the change is documented with a migration note. Patch releases remain backwards compatible bug fixes.
|
|
6
6
|
|
|
7
|
+
## 0.7.0 - 2026-08-20
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- The short `zhx` executable while retaining `zhivex-harness` for command compatibility.
|
|
12
|
+
- A durable interactive console backed by a scoped SQLite session index, including session list/inspect/rename/fork/archive and `/provider`, `/model`, `/route`, `/status`, `/diff`, `/review`, `/resume`, `/compact`, `/new`, and `/rename` commands.
|
|
13
|
+
- A public, validated, injectable provider registry with built-in Meta, Qwen, OpenAI, and provisional Gemini registrations. Gemini uses `@zhivex-ai/gemini@0.10.4` and `gemini-3.6-flash` by default.
|
|
14
|
+
- Repeatable per-role model routes for explorer, implementer, tester, and reviewer subagents.
|
|
15
|
+
- A redacted, sequence-numbered JSON Lines stream contract through `--jsonl`.
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
|
|
19
|
+
- Provider/model changes in the console create a new immutable run and compact/redact portable context rather than rebinding an old provider state.
|
|
20
|
+
- Durable harness fingerprints now include a non-secret hash of provider endpoint/region/workspace transport configuration.
|
|
21
|
+
- Provider diagnostics are registry-driven and continue to expose only declared variable names and booleans.
|
|
22
|
+
- The final JSON schema and resolved configuration schema remain at version `1` and `4` respectively.
|
|
23
|
+
|
|
24
|
+
### Migration from 0.6.x
|
|
25
|
+
|
|
26
|
+
- Prefer `zhx` for interactive use; existing `zhivex-harness` commands continue to work.
|
|
27
|
+
- Resolve or deny paused `0.6.x` approvals with the matching `0.6.x` artifact before upgrading. Harness-version binding intentionally rejects those resumes under `0.7.x`.
|
|
28
|
+
- Gemini is integrated but provisional until all credentialed harness live gates pass. Local tests, adapter evidence, and credential detection do not certify it.
|
|
29
|
+
- `--max-cost-usd` cannot be combined with per-role routes in `0.7.x`; pricing remains one operator-supplied pair and would misprice heterogeneous usage.
|
|
30
|
+
|
|
31
|
+
### Security
|
|
32
|
+
|
|
33
|
+
- Session metadata excludes prompts/messages/tool payloads and is isolated by canonical workspace and durable scope with bounded storage and optimistic SQLite transactions.
|
|
34
|
+
- JSONL projection omits tool inputs/outputs, approval arguments, provider payloads, images, raw errors, and full durable states.
|
|
35
|
+
- Provider/model handoff is blocked while an approval is pending and strips provider-specific tool payloads from future context.
|
|
36
|
+
|
|
7
37
|
## 0.6.1 - 2026-08-17
|
|
8
38
|
|
|
9
39
|
### Added
|
package/README.md
CHANGED
|
@@ -9,11 +9,11 @@
|
|
|
9
9
|
|
|
10
10
|

|
|
11
11
|
|
|
12
|
-
Zhivex Harness runs coding agents against real repositories with conflict-safe edits, durable approvals, isolated execution, and redacted operational evidence. It is a Bun-first local CLI and TypeScript library portable across Meta, Qwen, and
|
|
12
|
+
Zhivex Harness runs coding agents against real repositories with conflict-safe edits, durable approvals, isolated execution, and redacted operational evidence. It is a Bun-first local CLI and TypeScript library portable across Meta, Qwen, OpenAI, and provisional Gemini support, built on the Stable `@zhivex-ai/agents` runtime.
|
|
13
13
|
|
|
14
14
|
The model provides capability. The harness controls what it may inspect, execute, change, resume, and prove. Every provider uses the same bounded tool and approval contract.
|
|
15
15
|
|
|
16
|
-
Version `0.
|
|
16
|
+
Version `0.7.0` is the source release candidate for the multi-provider agent console. The currently verified public npm release remains `0.6.1`; local validation does not imply that `0.7.0` has been published or live-certified. See [ROADMAP.md](./ROADMAP.md), [CHANGELOG.md](./CHANGELOG.md), the [CLI contract](./docs/CLI.md), the [extensibility guide](./docs/EXTENSIBILITY.md), and the [durable-operations guide](./docs/DURABLE_OPERATIONS.md).
|
|
17
17
|
|
|
18
18
|
## Why Zhivex Harness
|
|
19
19
|
|
|
@@ -40,10 +40,12 @@ bun run demo:hostile
|
|
|
40
40
|
|
|
41
41
|
The expected result is a schema-versioned JSON proof with `secretExcluded`, `networkDenied`, `exactlyOnceJournal`, and `staleHostImportBlocked` all set to `true`. Pass `--keep` to retain the disposable workspace for inspection. The complete scenario and evidence limits are documented in [docs/HOSTILE_REPOSITORY_DEMO.md](./docs/HOSTILE_REPOSITORY_DEMO.md).
|
|
42
42
|
|
|
43
|
-
## What 0.
|
|
43
|
+
## What 0.7 includes
|
|
44
44
|
|
|
45
|
-
-
|
|
46
|
-
-
|
|
45
|
+
- the short `zhx` command, with `zhivex-harness` retained as a compatible alias;
|
|
46
|
+
- one-shot execution plus a durable interactive console with named sessions, fork/archive operations, safe resume, status, diff, review, and explicit context compaction;
|
|
47
|
+
- an extensible provider registry, provider/model selection, provisional native Gemini support, and repeatable per-role routes such as `--route reviewer=gemini`;
|
|
48
|
+
- redacted, sequence-numbered `--jsonl` events for automation, while `--json` keeps the final-document contract;
|
|
47
49
|
- versioned configuration and JSON output contracts;
|
|
48
50
|
- a local `doctor` command that diagnoses Bun, workspace, Git, scripts, state, credentials, endpoints, and provider capabilities without making provider requests or exposing secret values;
|
|
49
51
|
- deterministic, cursor-paginated workspace listing and search with SHA-256 content digests;
|
|
@@ -79,10 +81,10 @@ It does not include arbitrary host shell access, `stdio` MCP, permanent deletion
|
|
|
79
81
|
|
|
80
82
|
```bash
|
|
81
83
|
bun add @zhivex-ai/harness
|
|
82
|
-
bunx zhivex-harness --version
|
|
84
|
+
bunx --package @zhivex-ai/harness zhx --version
|
|
83
85
|
```
|
|
84
86
|
|
|
85
|
-
To exercise the `0.
|
|
87
|
+
To exercise the `0.7.0` source checkout:
|
|
86
88
|
|
|
87
89
|
```bash
|
|
88
90
|
bun install --frozen-lockfile
|
|
@@ -96,28 +98,39 @@ Configure only the providers you plan to use:
|
|
|
96
98
|
OPENAI_API_KEY=...
|
|
97
99
|
MODEL_API_KEY=...
|
|
98
100
|
DASHSCOPE_API_KEY=...
|
|
101
|
+
GEMINI_API_KEY=...
|
|
99
102
|
```
|
|
100
103
|
|
|
101
|
-
`MODEL_API_KEY` is used by the Meta Model API. Qwen also accepts `QWEN_API_KEY`; `DASHSCOPE_API_KEY` takes precedence.
|
|
104
|
+
`MODEL_API_KEY` is used by the Meta Model API. Qwen also accepts `QWEN_API_KEY`; `DASHSCOPE_API_KEY` takes precedence. Gemini also accepts `GOOGLE_GENERATIVE_AI_API_KEY`.
|
|
102
105
|
|
|
103
106
|
## Diagnose the environment
|
|
104
107
|
|
|
105
108
|
`doctor` is local and does not contact provider endpoints:
|
|
106
109
|
|
|
107
110
|
```bash
|
|
108
|
-
|
|
109
|
-
|
|
111
|
+
zhx doctor
|
|
112
|
+
zhx doctor --provider qwen --json
|
|
110
113
|
```
|
|
111
114
|
|
|
112
115
|
For a source checkout, replace `zhivex-harness` with `bun run dev`.
|
|
113
116
|
|
|
114
117
|
## Usage
|
|
115
118
|
|
|
119
|
+
Start the durable console with the ergonomic command, or use the long alias in existing scripts:
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
zhx
|
|
123
|
+
zhx chat --continue
|
|
124
|
+
zhivex-harness --version
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Inside the console, `/help` lists `/provider`, `/model`, `/route`, `/status`, `/diff`, `/review`, `/resume`, `/compact`, `/new`, `/rename`, and `/exit`.
|
|
128
|
+
|
|
116
129
|
Show providers and detected configuration without printing secrets:
|
|
117
130
|
|
|
118
131
|
```bash
|
|
119
|
-
|
|
120
|
-
|
|
132
|
+
zhx providers
|
|
133
|
+
zhx providers --json
|
|
121
134
|
```
|
|
122
135
|
|
|
123
136
|
Run a task against the current directory:
|
|
@@ -126,6 +139,7 @@ Run a task against the current directory:
|
|
|
126
139
|
zhivex-harness run --provider openai "review the repository and fix the tests"
|
|
127
140
|
zhivex-harness run --provider meta "document the current architecture"
|
|
128
141
|
zhivex-harness run --provider qwen "implement the pending endpoint"
|
|
142
|
+
zhx run --provider gemini "review the proposed implementation"
|
|
129
143
|
```
|
|
130
144
|
|
|
131
145
|
Operate on another workspace:
|
|
@@ -137,9 +151,20 @@ zhivex-harness run --provider qwen --workspace ../my-app "fix the typecheck erro
|
|
|
137
151
|
Interactive mode:
|
|
138
152
|
|
|
139
153
|
```bash
|
|
140
|
-
|
|
154
|
+
zhx chat --provider meta
|
|
155
|
+
zhx chat --continue
|
|
156
|
+
zhx sessions list
|
|
141
157
|
```
|
|
142
158
|
|
|
159
|
+
Route only selected subagent roles; credentials are required only for providers actually instantiated:
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
zhx run --provider openai --route explorer=qwen --route reviewer=gemini \
|
|
163
|
+
"implement the change, then review it independently"
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
Routing with `--max-cost-usd` is rejected in `0.7.0`: aggregate usage cannot yet be priced correctly when roles use different models.
|
|
167
|
+
|
|
143
168
|
Writes and checks pause for approval. In a non-interactive execution, state is saved in `.zhivex-harness/runs/operations.sqlite`:
|
|
144
169
|
|
|
145
170
|
```bash
|
|
@@ -185,6 +210,7 @@ Structured automation output uses schema version `1`:
|
|
|
185
210
|
|
|
186
211
|
```bash
|
|
187
212
|
zhivex-harness run --provider qwen --json "analyze the issue without modifying files"
|
|
213
|
+
zhx run --provider gemini --jsonl "analyze the issue without modifying files"
|
|
188
214
|
```
|
|
189
215
|
|
|
190
216
|
The JSON shapes and exit codes are documented in [docs/CLI.md](./docs/CLI.md).
|
|
@@ -214,10 +240,11 @@ zhivex-harness run --execution oci --yes "inspect, implement, test, review the e
|
|
|
214
240
|
| Meta | `muse-spark-1.2` | `MODEL_API_KEY` · 0.6 edit, delegation, and OCI execution certified |
|
|
215
241
|
| Qwen | `qwen3.8-max` | `DASHSCOPE_API_KEY` or `QWEN_API_KEY` · 0.6 edit, delegation, and OCI execution certified |
|
|
216
242
|
| OpenAI | `gpt-5.4` | `OPENAI_API_KEY` · 0.6 edit, delegation, and OCI execution certified |
|
|
243
|
+
| Gemini | `gemini-3.6-flash` | `GEMINI_API_KEY` or `GOOGLE_GENERATIVE_AI_API_KEY` · provisional until the harness live matrix passes |
|
|
217
244
|
|
|
218
|
-
Override any model with `--model`. Optional provider overrides are `META_BASE_URL`, `QWEN_BASE_URL`, `QWEN_WORKSPACE_ID`, `QWEN_REGION`, and `
|
|
245
|
+
Override any model with `--model`. Optional provider overrides are `META_BASE_URL`, `QWEN_BASE_URL`, `QWEN_WORKSPACE_ID`, `QWEN_REGION`, `OPENAI_BASE_URL`, and `GEMINI_BASE_URL`. Non-credential transport settings are hash-bound to durable resumes without persisting their values.
|
|
219
246
|
|
|
220
|
-
Meta, Qwen, and OpenAI
|
|
247
|
+
Meta, Qwen, and OpenAI retain the published `0.6.x` support conclusion for the unchanged approval/restart, delegation/persistence, and enforced-execution paths. Controlled and official-SDK MCP interoperability are verified separately and do not imply compatibility with every server or protocol feature. Provider capability claims remain artifact- and date-bound under the [live certification contract](./docs/LIVE_CERTIFICATION.md); credential detection and deterministic tests do not replace real provider evidence.
|
|
221
248
|
|
|
222
249
|
## Security boundaries
|
|
223
250
|
|
|
@@ -258,4 +285,5 @@ The live gate is opt-in and billable:
|
|
|
258
285
|
|
|
259
286
|
```bash
|
|
260
287
|
ZHIVEX_HARNESS_LIVE=1 bun run scripts/live-provider-smoke.ts
|
|
288
|
+
ZHIVEX_HARNESS_LIVE=1 bun run smoke:live:routing
|
|
261
289
|
```
|
package/ROADMAP.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# Zhivex Harness Roadmap
|
|
2
2
|
|
|
3
3
|
- Status: active
|
|
4
|
-
- Baseline date: 2026-08-
|
|
4
|
+
- Baseline date: 2026-08-20
|
|
5
5
|
|
|
6
|
-
This roadmap takes the harness from its `0.1.0` MVP to a stable CLI and library contract. The `0.2.0` source baseline is tagged locally, `0.3.0` and `0.4.0` are private checkpoints, and `0.5.0`
|
|
6
|
+
This roadmap takes the harness from its `0.1.0` MVP to a stable CLI and library contract. The `0.2.0` source baseline is tagged locally, `0.3.0` and `0.4.0` are private checkpoints, and `0.5.0`, `0.6.0`, and `0.6.1` are published on npm. `0.7.0` is the source release candidate for the multi-provider agent console; publication and live certification remain separate operations. Releases are ordered by dependency and safety risk, not by calendar date. A version ships only when its exit criteria are satisfied.
|
|
7
7
|
|
|
8
8
|
## Planning principles
|
|
9
9
|
|
|
@@ -39,7 +39,8 @@ The `0.6.0` dependency batch pins and overrides `@zhivex-ai/core@1.6.0`, retaini
|
|
|
39
39
|
| `0.4.0` | Durable operations | Inspectable, budgeted, cancellable, evaluable runs | Private checkpoint | L |
|
|
40
40
|
| `0.5.0` | Extensibility and orchestration | Governed MCP and bounded multi-agent work | Published on npm | L |
|
|
41
41
|
| `0.6.0` | Enforced execution | Shell and checks inside a real isolation boundary | Published on npm | XL |
|
|
42
|
-
| `0.6.1` | Positioning and proof | Reproducible hostile-repository control evidence |
|
|
42
|
+
| `0.6.1` | Positioning and proof | Reproducible hostile-repository control evidence | Published on npm | S |
|
|
43
|
+
| `0.7.0` | Multi-provider agent console | Durable sessions, extensible providers, safe role routing, and automation events | Source release candidate | L |
|
|
43
44
|
| `1.0.0` | Stable contract | Supported compatibility and release guarantees | Planned | L |
|
|
44
45
|
|
|
45
46
|
Relative size is for sequencing only; dates require a capacity decision.
|
|
@@ -99,7 +100,7 @@ Required release evidence:
|
|
|
99
100
|
- migration and safety boundaries are documented without claiming host isolation or permanent deletion;
|
|
100
101
|
- `0.3.0` remains private until an explicit publication decision is made.
|
|
101
102
|
|
|
102
|
-
Validation
|
|
103
|
+
Validation summary:
|
|
103
104
|
|
|
104
105
|
- the trusted-editing implementation is merged into `main`;
|
|
105
106
|
- deterministic, installed-package, and package-inspection CI gates pass on Linux and macOS;
|
|
@@ -130,7 +131,7 @@ Exit criteria:
|
|
|
130
131
|
- Golden fixtures are deterministic and the regression gate runs in CI.
|
|
131
132
|
- Exported operational artifacts are redacted by default and schema-versioned.
|
|
132
133
|
|
|
133
|
-
Validation
|
|
134
|
+
Validation summary:
|
|
134
135
|
|
|
135
136
|
- deterministic tests, the five-case golden evaluation gate, typecheck, docs, build, and installed-tarball smoke pass;
|
|
136
137
|
- migration, idempotency, concurrent ownership, expired-lease recovery, cancellation, retention, Qwen token enforcement, and export redaction have regression coverage;
|
|
@@ -160,13 +161,12 @@ Exit criteria:
|
|
|
160
161
|
- MCP prompt injection and oversized/malformed result tests fail safely.
|
|
161
162
|
- Provider-specific limitations are recorded in a live support matrix.
|
|
162
163
|
|
|
163
|
-
Validation
|
|
164
|
+
Validation summary:
|
|
164
165
|
|
|
165
166
|
- deterministic tests, the seven-case golden evaluation gate, typecheck, docs, build, dependency audit, dry-run package inspection, and installed-tarball smoke pass;
|
|
166
167
|
- malformed MCP, HTTP handshake/session, injection/output bounds, approval/restart, child mutation exactly-once, cancellation, scoped hierarchy, aggregate budget, and parallel review have regression coverage;
|
|
167
|
-
- controlled Streamable HTTP MCP interoperability passed over
|
|
168
|
-
-
|
|
169
|
-
- Meta `muse-spark-1.2`, Qwen `qwen3.8-max`, and OpenAI `gpt-5.4` passed the separate model-directed reviewer delegation, child persistence, SQLite reopen, hierarchy, and aggregate-usage matrix at `2026-08-17T02:21:45.553Z`;
|
|
168
|
+
- controlled and official-SDK Streamable HTTP MCP interoperability passed over real loopback transports with session negotiation, bounded execution, and forced network approval;
|
|
169
|
+
- the certified provider cohort passed the separate model-directed reviewer delegation, child persistence, SQLite reopen, hierarchy, and aggregate-usage matrix;
|
|
170
170
|
- the exact `0.5.0` artifact was published and its post-publication registry/provenance verification completed; that evidence does not pre-certify `0.6.0`.
|
|
171
171
|
|
|
172
172
|
## 0.6.0 — Enforced execution environments
|
|
@@ -192,26 +192,56 @@ Exit criteria:
|
|
|
192
192
|
- Installed-artifact and live-provider tests exercise the enforced backend.
|
|
193
193
|
- The product is described as a local enforced runner, not a managed sandbox service.
|
|
194
194
|
|
|
195
|
-
Implementation
|
|
195
|
+
Implementation summary:
|
|
196
196
|
|
|
197
197
|
- the SDK execution-environment contract is implemented with a Docker/Podman adapter, immutable image identity, per-tool-call isolation, manifest authorization, and run fingerprint binding;
|
|
198
198
|
- the enforced policy denies network and undeclared tools, uses a non-root identity, read-only root, dropped capabilities, no-new-privileges, and bounded memory, CPU, PIDs, time, output, snapshot, imported-file, and tmpfs resources;
|
|
199
199
|
- repository tools and subagents share an ephemeral secret-free snapshot; package checks and argv-only commands run inside OCI, while network MCP fails closed under the no-network policy;
|
|
200
200
|
- content- and run-bound patch inspection plus a separate durable import approval are the only environment-to-host mutation path; deletes remain recoverable through quarantine;
|
|
201
201
|
- lifecycle metadata, cancellation removal, run-labeled container and quota-volume cleanup, terminal artifact retention cleanup, deterministic regression tests, installed-package smoke, and required Linux OCI workflow gates are implemented;
|
|
202
|
-
- the real Docker smoke passed
|
|
202
|
+
- the real Docker smoke passed against the pinned image identity, covering network/root/secret boundaries, capacity and resource limits, cancellation, transactional snapshot synchronization, patch import, and zero labeled orphans;
|
|
203
203
|
- the installed-package smoke passed with the public execution-environment API and snapshot/import flow;
|
|
204
204
|
- the exact local `0.6.0` tarball passed the 31-file allowlist, SHA-512 generation, isolated consumer install, binary, public API, durability, and execution-environment smoke;
|
|
205
|
-
-
|
|
206
|
-
- the base approval/restart
|
|
205
|
+
- the certified provider cohort passed the model-directed OCI command, patch review, separate import approval, journal, host-content, and binding matrix;
|
|
206
|
+
- the base approval/restart and bounded reviewer-delegation/persistence/hierarchy matrices passed against the release artifact;
|
|
207
207
|
- `@zhivex-ai/core@1.6.0` resolves as one runtime through the aligned dependency batch;
|
|
208
|
-
- annotated tag
|
|
208
|
+
- the annotated tag, protected publication, registry integrity, distribution tag, and SLSA workflow provenance agree with the release source.
|
|
209
209
|
|
|
210
210
|
### 0.6.1 positioning patch
|
|
211
211
|
|
|
212
212
|
`0.6.1` keeps the `0.6.0` runtime, CLI, configuration, state, and library contracts unchanged. It adds a launch-oriented package description, expanded discovery metadata, a deterministic social card, structured issue forms, and a hostile-repository demo that exposes the existing safety chain as one reproducible product proof.
|
|
213
213
|
|
|
214
|
-
Its deterministic demo test uses an injected OCI adapter. The public `bun run demo:hostile` command uses a real preloaded Docker/Podman image and proves secret exclusion, network denial, two durable approvals across persistence reopen, host immutability before import, exactly-once journal evidence, redacted inspection, and stale-host rejection.
|
|
214
|
+
Its deterministic demo test uses an injected OCI adapter. The public `bun run demo:hostile` command uses a real preloaded Docker/Podman image and proves secret exclusion, network denial, two durable approvals across persistence reopen, host immutability before import, exactly-once journal evidence, redacted inspection, and stale-host rejection. The annotated `v0.6.1` tag, npm artifact, registry integrity, and provenance were subsequently verified through the protected workflow.
|
|
215
|
+
|
|
216
|
+
## 0.7.0 — Multi-provider agent console
|
|
217
|
+
|
|
218
|
+
Status: 0.7.0 release candidate implemented in source. Deterministic and installed-artifact gates must pass before a release commit; Gemini and mixed-provider routing remain provisional until the required live validation is recorded.
|
|
219
|
+
|
|
220
|
+
Goal: turn the harness from a collection of one-shot commands into an ergonomic local agent console while preserving immutable runs and provider portability.
|
|
221
|
+
|
|
222
|
+
Scope:
|
|
223
|
+
|
|
224
|
+
- Publish the short `zhx` command while retaining `zhivex-harness` for scripts.
|
|
225
|
+
- Add a durable SQLite session index that links immutable runs without duplicating prompts, messages, tool payloads, or provider data.
|
|
226
|
+
- Add a public validated provider registry and native Gemini integration without aliasing an OpenAI-compatible transport.
|
|
227
|
+
- Route explorer, implementer, tester, and reviewer roles to explicit provider/model pairs.
|
|
228
|
+
- Add safe console commands for provider/model/routes, status, diff, review, session resume/new/rename, and deterministic redacted compaction.
|
|
229
|
+
- Add sequence-numbered redacted JSONL events for automation.
|
|
230
|
+
- Bind non-secret provider transport configuration into durable resume fingerprints.
|
|
231
|
+
|
|
232
|
+
Exit criteria:
|
|
233
|
+
|
|
234
|
+
- Registry, Gemini factory/diagnostics, sessions/reopen/fork/archive, routing, approval restart, JSONL redaction, and both CLI aliases pass deterministic and installed-package tests.
|
|
235
|
+
- Cross-provider handoff always starts a new run, is blocked by pending approvals, and carries no raw tool/provider payload.
|
|
236
|
+
- Existing `run`, `review`, `resume`, `runs`, final JSON, configuration schema, and `zhivex-harness` commands remain compatible.
|
|
237
|
+
- Gemini passes the base edit/restart, delegation, and OCI matrices before moving from provisional to certified.
|
|
238
|
+
- The exact tarball, release tag, registry integrity, and provenance are verified separately; source readiness is not publication.
|
|
239
|
+
|
|
240
|
+
Deferred after `0.7.0`:
|
|
241
|
+
|
|
242
|
+
- Per-provider/per-role cost pricing and evidence-backed routing presets.
|
|
243
|
+
- Additional hosted and local providers, added one by one through the same registry and certification contract.
|
|
244
|
+
- Remote workers or microVM backends; the current console stays local and Bun-first.
|
|
215
245
|
|
|
216
246
|
## 1.0.0 — Stable CLI and library contract
|
|
217
247
|
|
|
@@ -258,7 +288,7 @@ These can become separate post-1.0 tracks after the CLI/runtime contract and sec
|
|
|
258
288
|
|
|
259
289
|
## Immediate next actions
|
|
260
290
|
|
|
261
|
-
1.
|
|
262
|
-
2.
|
|
263
|
-
3.
|
|
264
|
-
4.
|
|
291
|
+
1. Finish the `0.7.0` deterministic, real-OCI, and installed-artifact gates from a clean release commit.
|
|
292
|
+
2. Complete the required live provider and mixed-routing certification; keep provisional paths provisional on any failure or missing evidence.
|
|
293
|
+
3. Dogfood durable `zhx` sessions, provider handoff, role routing, and JSONL consumption on representative repositories.
|
|
294
|
+
4. Only after those gates, complete the reviewed release workflow and verify registry integrity and provenance against the exact artifact.
|
package/SUPPORT.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Support
|
|
2
2
|
|
|
3
|
-
Zhivex Harness `0.
|
|
3
|
+
Zhivex Harness `0.7.x` is a pre-1.0 CLI and TypeScript library for Bun. Observable contracts may change in a later minor release when the change and migration path are documented in [CHANGELOG.md](./CHANGELOG.md). The source checkout may be a release candidate newer than the latest public npm artifact.
|
|
4
4
|
|
|
5
5
|
## Supported baseline
|
|
6
6
|
|
|
@@ -10,7 +10,7 @@ Zhivex Harness `0.6.x` is a pre-1.0 CLI and TypeScript library for Bun. Observab
|
|
|
10
10
|
- the provider/model combinations marked certified in the package documentation; and
|
|
11
11
|
- HTTPS or explicitly allowed loopback-HTTP MCP endpoints using the documented bounded JSON-RPC subset.
|
|
12
12
|
|
|
13
|
-
Only the most recent published `0.6.x`
|
|
13
|
+
Only the most recent published patch receives routine fixes. Meta, Qwen, and OpenAI retain their date-bound `0.6.x` certification; Gemini in `0.7.0` is provisional until the complete harness live matrix passes. Live provider evidence is account-, model-, endpoint-, and date-dependent; see [docs/LIVE_CERTIFICATION.md](./docs/LIVE_CERTIFICATION.md).
|
|
14
14
|
|
|
15
15
|
## Support channels
|
|
16
16
|
|
|
@@ -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
|
+
textDelta: string;
|
|
34
|
+
schemaVersion: 1;
|
|
35
|
+
kind: "run-event";
|
|
36
|
+
sequence: number;
|
|
37
|
+
type: "text-delta" | "tool-call" | "tool-result" | "tool-approval-request" | "provider-data" | "image-generation" | "finish" | "error" | "agent-run-start" | "agent-step-start" | "agent-step-finish" | "agent-approval-request" | "agent-approval-resolved" | "agent-compaction" | "agent-run-finish";
|
|
38
|
+
} | {
|
|
39
|
+
toolCallId: string;
|
|
40
|
+
toolName: string;
|
|
41
|
+
schemaVersion: 1;
|
|
42
|
+
kind: "run-event";
|
|
43
|
+
sequence: number;
|
|
44
|
+
type: "text-delta" | "tool-call" | "tool-result" | "tool-approval-request" | "provider-data" | "image-generation" | "finish" | "error" | "agent-run-start" | "agent-step-start" | "agent-step-finish" | "agent-approval-request" | "agent-approval-resolved" | "agent-compaction" | "agent-run-finish";
|
|
45
|
+
} | {
|
|
46
|
+
toolCallId: string;
|
|
47
|
+
toolName: string;
|
|
48
|
+
isError: boolean;
|
|
49
|
+
schemaVersion: 1;
|
|
50
|
+
kind: "run-event";
|
|
51
|
+
sequence: number;
|
|
52
|
+
type: "text-delta" | "tool-call" | "tool-result" | "tool-approval-request" | "provider-data" | "image-generation" | "finish" | "error" | "agent-run-start" | "agent-step-start" | "agent-step-finish" | "agent-approval-request" | "agent-approval-resolved" | "agent-compaction" | "agent-run-finish";
|
|
53
|
+
} | {
|
|
54
|
+
approvalRequestId: string;
|
|
55
|
+
approvalKind: "provider" | "local-tool" | "subagent";
|
|
56
|
+
toolName: string;
|
|
57
|
+
schemaVersion: 1;
|
|
58
|
+
kind: "run-event";
|
|
59
|
+
sequence: number;
|
|
60
|
+
type: "text-delta" | "tool-call" | "tool-result" | "tool-approval-request" | "provider-data" | "image-generation" | "finish" | "error" | "agent-run-start" | "agent-step-start" | "agent-step-finish" | "agent-approval-request" | "agent-approval-resolved" | "agent-compaction" | "agent-run-finish";
|
|
61
|
+
} | {
|
|
62
|
+
approvalRequestId: string;
|
|
63
|
+
approved: boolean;
|
|
64
|
+
schemaVersion: 1;
|
|
65
|
+
kind: "run-event";
|
|
66
|
+
sequence: number;
|
|
67
|
+
type: "text-delta" | "tool-call" | "tool-result" | "tool-approval-request" | "provider-data" | "image-generation" | "finish" | "error" | "agent-run-start" | "agent-step-start" | "agent-step-finish" | "agent-approval-request" | "agent-approval-resolved" | "agent-compaction" | "agent-run-finish";
|
|
68
|
+
} | {
|
|
69
|
+
provider: string;
|
|
70
|
+
schemaVersion: 1;
|
|
71
|
+
kind: "run-event";
|
|
72
|
+
sequence: number;
|
|
73
|
+
type: "text-delta" | "tool-call" | "tool-result" | "tool-approval-request" | "provider-data" | "image-generation" | "finish" | "error" | "agent-run-start" | "agent-step-start" | "agent-step-finish" | "agent-approval-request" | "agent-approval-resolved" | "agent-compaction" | "agent-run-finish";
|
|
74
|
+
} | {
|
|
75
|
+
index?: number;
|
|
76
|
+
id?: string;
|
|
77
|
+
provider: string;
|
|
78
|
+
partial: boolean;
|
|
79
|
+
schemaVersion: 1;
|
|
80
|
+
kind: "run-event";
|
|
81
|
+
sequence: number;
|
|
82
|
+
type: "text-delta" | "tool-call" | "tool-result" | "tool-approval-request" | "provider-data" | "image-generation" | "finish" | "error" | "agent-run-start" | "agent-step-start" | "agent-step-finish" | "agent-approval-request" | "agent-approval-resolved" | "agent-compaction" | "agent-run-finish";
|
|
83
|
+
} | {
|
|
84
|
+
usage?: import("@zhivex-ai/core").TokenUsage;
|
|
85
|
+
finishReason?: import("@zhivex-ai/core").FinishReason;
|
|
86
|
+
schemaVersion: 1;
|
|
87
|
+
kind: "run-event";
|
|
88
|
+
sequence: number;
|
|
89
|
+
type: "text-delta" | "tool-call" | "tool-result" | "tool-approval-request" | "provider-data" | "image-generation" | "finish" | "error" | "agent-run-start" | "agent-step-start" | "agent-step-finish" | "agent-approval-request" | "agent-approval-resolved" | "agent-compaction" | "agent-run-finish";
|
|
90
|
+
} | {
|
|
91
|
+
error: string;
|
|
92
|
+
schemaVersion: 1;
|
|
93
|
+
kind: "run-event";
|
|
94
|
+
sequence: number;
|
|
95
|
+
type: "text-delta" | "tool-call" | "tool-result" | "tool-approval-request" | "provider-data" | "image-generation" | "finish" | "error" | "agent-run-start" | "agent-step-start" | "agent-step-finish" | "agent-approval-request" | "agent-approval-resolved" | "agent-compaction" | "agent-run-finish";
|
|
96
|
+
} | {
|
|
97
|
+
currentStep: number;
|
|
98
|
+
maxSteps: number;
|
|
99
|
+
schemaVersion: 1;
|
|
100
|
+
kind: "run-event";
|
|
101
|
+
sequence: number;
|
|
102
|
+
type: "text-delta" | "tool-call" | "tool-result" | "tool-approval-request" | "provider-data" | "image-generation" | "finish" | "error" | "agent-run-start" | "agent-step-start" | "agent-step-finish" | "agent-approval-request" | "agent-approval-resolved" | "agent-compaction" | "agent-run-finish";
|
|
103
|
+
} | {
|
|
104
|
+
stepIndex: number;
|
|
105
|
+
schemaVersion: 1;
|
|
106
|
+
kind: "run-event";
|
|
107
|
+
sequence: number;
|
|
108
|
+
type: "text-delta" | "tool-call" | "tool-result" | "tool-approval-request" | "provider-data" | "image-generation" | "finish" | "error" | "agent-run-start" | "agent-step-start" | "agent-step-finish" | "agent-approval-request" | "agent-approval-resolved" | "agent-compaction" | "agent-run-finish";
|
|
109
|
+
} | {
|
|
110
|
+
stepIndex: number;
|
|
111
|
+
status: import("@zhivex-ai/core").AgentStepStatus;
|
|
112
|
+
toolCalls: number;
|
|
113
|
+
schemaVersion: 1;
|
|
114
|
+
kind: "run-event";
|
|
115
|
+
sequence: number;
|
|
116
|
+
type: "text-delta" | "tool-call" | "tool-result" | "tool-approval-request" | "provider-data" | "image-generation" | "finish" | "error" | "agent-run-start" | "agent-step-start" | "agent-step-finish" | "agent-approval-request" | "agent-approval-resolved" | "agent-compaction" | "agent-run-finish";
|
|
117
|
+
} | {
|
|
118
|
+
compactionId: string;
|
|
119
|
+
reasons: import("@zhivex-ai/core").AgentCompactionReason[];
|
|
120
|
+
messageCountBefore: number;
|
|
121
|
+
messageCountAfter: number;
|
|
122
|
+
schemaVersion: 1;
|
|
123
|
+
kind: "run-event";
|
|
124
|
+
sequence: number;
|
|
125
|
+
type: "text-delta" | "tool-call" | "tool-result" | "tool-approval-request" | "provider-data" | "image-generation" | "finish" | "error" | "agent-run-start" | "agent-step-start" | "agent-step-finish" | "agent-approval-request" | "agent-approval-resolved" | "agent-compaction" | "agent-run-finish";
|
|
126
|
+
} | {
|
|
127
|
+
runId: string;
|
|
128
|
+
status: import("@zhivex-ai/core").AgentStatus;
|
|
129
|
+
provider: string;
|
|
130
|
+
model: string;
|
|
131
|
+
schemaVersion: 1;
|
|
132
|
+
kind: "run-event";
|
|
133
|
+
sequence: number;
|
|
134
|
+
type: "text-delta" | "tool-call" | "tool-result" | "tool-approval-request" | "provider-data" | "image-generation" | "finish" | "error" | "agent-run-start" | "agent-step-start" | "agent-step-finish" | "agent-approval-request" | "agent-approval-resolved" | "agent-compaction" | "agent-run-finish";
|
|
135
|
+
};
|
|
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-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
|
+
childAgentId?: string;
|
|
157
|
+
childRunId?: string;
|
|
158
|
+
id: string;
|
|
159
|
+
kind: string;
|
|
160
|
+
name: string;
|
|
161
|
+
}[];
|
|
162
|
+
children: {
|
|
163
|
+
runId: string;
|
|
164
|
+
status: string;
|
|
165
|
+
}[];
|
|
166
|
+
};
|
|
167
|
+
export declare const serializeStreamResult: (result: StreamRunResultSource, sequence?: number) => string;
|
package/dist/cli.d.ts
CHANGED
|
@@ -3,7 +3,9 @@ import { type AgentApprovalRequest, type AgentRunInput, type AgentRunOutput, typ
|
|
|
3
3
|
import { providerAvailability, resolveHarnessConfig, type HarnessConfig, type HarnessConfigInput, type HarnessProvider, type HarnessSubagentProfile } from "./config.js";
|
|
4
4
|
import { type ZhivexHarness } from "./harness.js";
|
|
5
5
|
import { type HarnessOciRuntimeAdapter } from "./execution-environment.js";
|
|
6
|
-
|
|
6
|
+
import { type HarnessModelRoute } from "./routing.js";
|
|
7
|
+
import { CLI_JSON_SCHEMA_VERSION } from "./cli-stream.js";
|
|
8
|
+
export { CLI_JSON_SCHEMA_VERSION } from "./cli-stream.js";
|
|
7
9
|
export declare const HARNESS_RESUME_METADATA_KEY: "zhivexHarnessResume";
|
|
8
10
|
export declare const HARNESS_RESUME_METADATA_SCHEMA_VERSION: 1;
|
|
9
11
|
export declare const CLI_EXIT_CODES: {
|
|
@@ -12,8 +14,9 @@ export declare const CLI_EXIT_CODES: {
|
|
|
12
14
|
readonly usageError: 2;
|
|
13
15
|
readonly doctorFailed: 3;
|
|
14
16
|
};
|
|
15
|
-
type Command = "run" | "review" | "chat" | "providers" | "doctor" | "resume" | "runs" | "help" | "version";
|
|
17
|
+
type Command = "run" | "review" | "chat" | "providers" | "doctor" | "resume" | "runs" | "sessions" | "help" | "version";
|
|
16
18
|
type RunsCommand = "list" | "inspect" | "cancel" | "cleanup" | "export";
|
|
19
|
+
type SessionsCommand = "list" | "inspect" | "rename" | "fork" | "archive";
|
|
17
20
|
export interface CliOptions {
|
|
18
21
|
command: Command;
|
|
19
22
|
provider?: string;
|
|
@@ -36,8 +39,9 @@ export interface CliOptions {
|
|
|
36
39
|
outputCostPerMillion?: number;
|
|
37
40
|
allowedChecks?: string[];
|
|
38
41
|
requiredCapabilities?: string[];
|
|
39
|
-
subagentProfiles?:
|
|
42
|
+
subagentProfiles?: HarnessSubagentProfile[];
|
|
40
43
|
reviewers?: HarnessSubagentProfile[];
|
|
44
|
+
routes?: string[];
|
|
41
45
|
subagentMaxSteps?: number;
|
|
42
46
|
subagentMaxToolCalls?: number;
|
|
43
47
|
subagentMaxToolErrors?: number;
|
|
@@ -63,6 +67,11 @@ export interface CliOptions {
|
|
|
63
67
|
runId?: string;
|
|
64
68
|
idempotencyKey?: string;
|
|
65
69
|
runsCommand?: RunsCommand;
|
|
70
|
+
sessionsCommand?: SessionsCommand;
|
|
71
|
+
sessionId?: string;
|
|
72
|
+
sessionTitle?: string;
|
|
73
|
+
continueSession: boolean;
|
|
74
|
+
implicitCommand: boolean;
|
|
66
75
|
statuses?: AgentStatus[];
|
|
67
76
|
limit?: number;
|
|
68
77
|
cursor?: string;
|
|
@@ -73,12 +82,14 @@ export interface CliOptions {
|
|
|
73
82
|
yes: boolean;
|
|
74
83
|
approve?: boolean;
|
|
75
84
|
json: boolean;
|
|
85
|
+
jsonl: boolean;
|
|
76
86
|
}
|
|
77
87
|
export declare class CliUsageError extends Error {
|
|
78
88
|
constructor(message: string);
|
|
79
89
|
}
|
|
80
|
-
export declare const createHarnessResumeMetadata: (config: HarnessConfig) => NonNullable<AgentRunInput["metadata"]>;
|
|
90
|
+
export declare const createHarnessResumeMetadata: (config: HarnessConfig, routes?: ReadonlyMap<HarnessSubagentProfile, HarnessModelRoute>) => NonNullable<AgentRunInput["metadata"]>;
|
|
81
91
|
export declare const readHarnessResumeConfig: (state: Pick<AgentRunState, "metadata">) => HarnessConfigInput | undefined;
|
|
92
|
+
export declare const readHarnessResumeRoutes: (state: Pick<AgentRunState, "metadata">) => Map<"explorer" | "implementer" | "tester" | "reviewer", HarnessModelRoute>;
|
|
82
93
|
export declare const resumeCommand: (runId: string, config: HarnessConfig, approve?: boolean) => string;
|
|
83
94
|
export declare const parseCliArgs: (argv: string[]) => CliOptions;
|
|
84
95
|
export declare const summarizeApproval: (approval: AgentApprovalRequest) => string;
|
|
@@ -149,30 +160,11 @@ export declare const runResultDocument: (result: AgentRunOutput, harness: Zhivex
|
|
|
149
160
|
usage: import("@zhivex-ai/core").TokenUsage | undefined;
|
|
150
161
|
budget: import("@zhivex-ai/core").AgentBudgetStatus;
|
|
151
162
|
};
|
|
163
|
+
export declare const withTemporaryHarnessProfiles: <T>(profiles: readonly HarnessSubagentProfile[], configure: (profiles: readonly HarnessSubagentProfile[]) => Promise<void>, operation: () => Promise<T>) => Promise<T>;
|
|
152
164
|
export declare const providersDocument: (env?: NodeJS.ProcessEnv) => {
|
|
153
165
|
schemaVersion: 1;
|
|
154
166
|
kind: "providers";
|
|
155
|
-
providers:
|
|
156
|
-
configured: boolean;
|
|
157
|
-
credentials: {
|
|
158
|
-
name: string;
|
|
159
|
-
present: boolean;
|
|
160
|
-
}[];
|
|
161
|
-
configuration: {
|
|
162
|
-
workspaceIdConfigured?: boolean;
|
|
163
|
-
regionConfigured?: boolean;
|
|
164
|
-
regionValid?: boolean;
|
|
165
|
-
customEndpoint: boolean;
|
|
166
|
-
endpointValid: boolean;
|
|
167
|
-
endpointSecure: boolean;
|
|
168
|
-
};
|
|
169
|
-
id: HarnessProvider;
|
|
170
|
-
name: string;
|
|
171
|
-
defaultModel: string;
|
|
172
|
-
credentialNames: readonly string[];
|
|
173
|
-
capabilities: readonly import("./config.js").ProviderCapability[];
|
|
174
|
-
support: import("./config.js").ProviderSupport;
|
|
175
|
-
}[];
|
|
167
|
+
providers: readonly import("./providers.js").ProviderAvailability[];
|
|
176
168
|
};
|
|
177
169
|
export type DoctorCheckStatus = "pass" | "warn" | "fail";
|
|
178
170
|
export interface DoctorCheck {
|
|
@@ -215,6 +207,5 @@ export interface DoctorContext {
|
|
|
215
207
|
}
|
|
216
208
|
export declare const createDoctorReport: (options?: Pick<CliOptions, "provider" | "model" | "workspace" | "stateDirectory" | "storeBackend" | "tenantId" | "userId" | "namespace" | "maxSteps" | "timeoutMs" | "maxToolCalls" | "maxToolErrors" | "maxInputTokens" | "maxOutputTokens" | "maxTotalTokens" | "maxCostUsd" | "inputCostPerMillion" | "outputCostPerMillion" | "allowedChecks" | "requiredCapabilities" | "subagentProfiles" | "subagentMaxSteps" | "subagentMaxToolCalls" | "subagentMaxToolErrors" | "subagentMaxInputTokens" | "subagentMaxOutputTokens" | "subagentMaxTotalTokens" | "subagentTimeoutMs" | "maxParallelReviews" | "executionBackend" | "ociRuntime" | "ociImage" | "ociAllowedCommands" | "ociMaxProcessRuntimeMs" | "ociMaxProcessOutputBytes" | "ociMaxMemoryMb" | "ociMaxPids" | "ociMaxCpus" | "ociMaxWorkspaceBytes" | "ociMaxFileWriteBytes" | "ociTmpfsMb" | "mcpConfigPath">, context?: DoctorContext) => Promise<DoctorReport>;
|
|
217
209
|
export declare const formatDoctorReport: (report: DoctorReport) => string;
|
|
218
|
-
export declare const cliExitCodeForError: (error: unknown) =>
|
|
210
|
+
export declare const cliExitCodeForError: (error: unknown) => 1 | 2;
|
|
219
211
|
export declare const main: (argv?: string[]) => Promise<void>;
|
|
220
|
-
export {};
|