@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
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** Explicit Harness integration surface. See contracts/engine-api.json for stability tiers. */
|
|
2
|
+
export { HARNESS_CLIENT_PROTOCOL_VERSION, harnessClientCommandSchema, harnessClientRequestSchema } from "../client/protocol.js";
|
|
3
|
+
export type { HarnessClientCommand, HarnessClientRequest, HarnessClientErrorCode, HarnessClientSession, HarnessClientRun, HarnessClientData, HarnessClientResponse, HarnessClientNegotiation, HarnessClientAdapterOptions, HarnessClientAdapter } from "../client/protocol.js";
|
|
4
|
+
export { createHarnessClientAdapter } from "../client/adapter.js";
|
|
5
|
+
export { runResultDocument } from "../client/run-document.js";
|
|
6
|
+
export { terminalContinuationMessages } from "../client/continuation.js";
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createHarnessClientAdapter,
|
|
3
|
+
runResultDocument,
|
|
4
|
+
terminalContinuationMessages
|
|
5
|
+
} from "../index-jgrx804e.js";
|
|
6
|
+
import"../index-h0mqx2ed.js";
|
|
7
|
+
import"../index-8zzhggxv.js";
|
|
8
|
+
import"../index-42gp2hy8.js";
|
|
9
|
+
import"../index-t60rva31.js";
|
|
10
|
+
import"../index-z0qxmkm2.js";
|
|
11
|
+
import"../index-yb239ghk.js";
|
|
12
|
+
import"../index-gq9xagx2.js";
|
|
13
|
+
import"../index-8705zxpr.js";
|
|
14
|
+
import"../index-xqxeypt5.js";
|
|
15
|
+
import {
|
|
16
|
+
HARNESS_CLIENT_PROTOCOL_VERSION,
|
|
17
|
+
harnessClientCommandSchema,
|
|
18
|
+
harnessClientRequestSchema
|
|
19
|
+
} from "../index-qfpz5y2v.js";
|
|
20
|
+
import"../index-1bx83sw4.js";
|
|
21
|
+
export {
|
|
22
|
+
HARNESS_CLIENT_PROTOCOL_VERSION,
|
|
23
|
+
createHarnessClientAdapter,
|
|
24
|
+
harnessClientCommandSchema,
|
|
25
|
+
harnessClientRequestSchema,
|
|
26
|
+
runResultDocument,
|
|
27
|
+
terminalContinuationMessages
|
|
28
|
+
};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** Host-only integration helpers; never import this entrypoint from a renderer. */
|
|
2
|
+
export { loadModelCatalog } from "../models/catalog-store.js";
|
|
3
|
+
export type { CatalogLoadOptions, CatalogSnapshot } from "../models/catalog-store.js";
|
|
4
|
+
export { vertexConfigured, vertexEnvironment, vertexTokenSource, vertexRoute } from "../providers/vertex-auth.js";
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import {
|
|
2
|
+
loadModelCatalog
|
|
3
|
+
} from "../index-wg1sd3at.js";
|
|
4
|
+
import {
|
|
5
|
+
vertexConfigured,
|
|
6
|
+
vertexEnvironment,
|
|
7
|
+
vertexRoute,
|
|
8
|
+
vertexTokenSource
|
|
9
|
+
} from "../index-8705zxpr.js";
|
|
10
|
+
import"../index-xqxeypt5.js";
|
|
11
|
+
import"../index-1bx83sw4.js";
|
|
12
|
+
export {
|
|
13
|
+
loadModelCatalog,
|
|
14
|
+
vertexConfigured,
|
|
15
|
+
vertexEnvironment,
|
|
16
|
+
vertexRoute,
|
|
17
|
+
vertexTokenSource
|
|
18
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** Versioned, host-only Desktop update/recovery contract. No renderer or SQL API. */
|
|
2
|
+
export { DESKTOP_DATABASE_BACKUP_LIMIT as HOST_DATABASE_SNAPSHOT_LIMIT, createDesktopDatabaseBackup as createHostDatabaseSnapshot, verifyDesktopDatabaseBackup as verifyHostDatabaseSnapshot, verifyDesktopDatabaseState as verifyHostDatabaseState } from "../persistence/host-database-backup.js";
|
|
3
|
+
export type { DesktopDatabaseBackup as HostDatabaseSnapshot, DesktopBackupConfig as HostDatabaseSnapshotConfig } from "../persistence/host-database-backup.js";
|
|
4
|
+
export { HARNESS_SQLITE_FILE } from "../persistence/operations.js";
|
|
5
|
+
export { validateStateDirectory } from "../persistence/state-directory.js";
|
|
6
|
+
export { validateRecordedWorkspace } from "../persistence/recorded-workspace.js";
|
|
7
|
+
export { acquireSqliteAccess, adoptExclusiveSqliteAccess, exclusiveSqliteAccessDescriptor } from "../persistence/sqlite-access.js";
|
|
8
|
+
export type { SqliteAccessLease } from "../persistence/sqlite-access.js";
|
|
9
|
+
export { protectPersistenceSecret } from "../persistence/persistence-secrets.js";
|
|
10
|
+
export { readRegularFileNoFollow, statRegularFileNoFollow } from "../workspace/file-security.js";
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createArchivedHarnessStateBackup,
|
|
3
|
+
createHarnessStateBackup,
|
|
4
|
+
validateRecordedWorkspace
|
|
5
|
+
} from "../index-a97bezbz.js";
|
|
6
|
+
import {
|
|
7
|
+
HARNESS_SQLITE_FILE
|
|
8
|
+
} from "../index-h0mqx2ed.js";
|
|
9
|
+
import {
|
|
10
|
+
validateStateDirectory
|
|
11
|
+
} from "../index-42gp2hy8.js";
|
|
12
|
+
import"../index-z0qxmkm2.js";
|
|
13
|
+
import {
|
|
14
|
+
SqliteDatabase,
|
|
15
|
+
acquireSqliteAccess,
|
|
16
|
+
adoptExclusiveSqliteAccess,
|
|
17
|
+
exclusiveSqliteAccessDescriptor,
|
|
18
|
+
protectPersistenceSecret,
|
|
19
|
+
readRegularFileNoFollow,
|
|
20
|
+
statRegularFileNoFollow
|
|
21
|
+
} from "../index-yb239ghk.js";
|
|
22
|
+
import"../index-gq9xagx2.js";
|
|
23
|
+
import"../index-8705zxpr.js";
|
|
24
|
+
import"../index-xqxeypt5.js";
|
|
25
|
+
import"../index-1bx83sw4.js";
|
|
26
|
+
|
|
27
|
+
// src/persistence/host-database-backup.ts
|
|
28
|
+
import { createHash } from "node:crypto";
|
|
29
|
+
import { constants } from "node:fs";
|
|
30
|
+
import { chmod, lstat, mkdir, mkdtemp, open, realpath, rm } from "node:fs/promises";
|
|
31
|
+
import path from "node:path";
|
|
32
|
+
var DESKTOP_DATABASE_BACKUP_LIMIT = 128 * 1024 * 1024;
|
|
33
|
+
function assertIdle(db) {
|
|
34
|
+
const terminal = "('completed','failed','cancelled','timed_out')";
|
|
35
|
+
if (db.query(`SELECT count(*) AS n FROM zhivex_agent_runs WHERE json_extract(state_json,'$.status') IS NULL OR json_extract(state_json,'$.status') NOT IN ${terminal} OR coalesce(json_array_length(json_extract(state_json,'$.pendingApprovals')),0)>0`).get().n || db.query("SELECT count(*) AS n FROM zhivex_agent_runs_leases WHERE expires_at_ms > ?").get(Date.now()).n || db.query(`SELECT count(*) AS n FROM zhivex_cli_session_runs WHERE status NOT IN ${terminal}`).get().n || db.query("SELECT count(*) AS n FROM zhivex_agent_runs_tool_journal WHERE json_extract(entry_json,'$.status') IS NULL OR json_extract(entry_json,'$.status') NOT IN ('completed','failed')").get().n)
|
|
36
|
+
throw new Error("BACKUP_WORK_ACTIVE");
|
|
37
|
+
}
|
|
38
|
+
async function privateDirectory(directory) {
|
|
39
|
+
const stat = await lstat(directory);
|
|
40
|
+
if (!stat.isDirectory() || stat.isSymbolicLink() || stat.uid !== process.getuid?.() || stat.mode & 63)
|
|
41
|
+
throw new Error;
|
|
42
|
+
return realpath(directory);
|
|
43
|
+
}
|
|
44
|
+
async function createDesktopDatabaseBackup(config, backupRoot) {
|
|
45
|
+
let directory;
|
|
46
|
+
try {
|
|
47
|
+
await validateStateDirectory(config.workspace, config.stateDirectory);
|
|
48
|
+
const sourceDirectory = await privateDirectory(config.stateDirectory);
|
|
49
|
+
const source = path.join(sourceDirectory, HARNESS_SQLITE_FILE);
|
|
50
|
+
const sourceStat = await statRegularFileNoFollow(source, { label: "desktop database", requireSingleLink: true });
|
|
51
|
+
if (sourceStat.uid !== process.getuid?.() || sourceStat.mode & 63 || sourceStat.size > DESKTOP_DATABASE_BACKUP_LIMIT)
|
|
52
|
+
throw new Error;
|
|
53
|
+
await mkdir(backupRoot, { recursive: true, mode: 448 });
|
|
54
|
+
directory = await mkdtemp(path.join(await privateDirectory(backupRoot), "database-"));
|
|
55
|
+
const destination = path.join(directory, HARNESS_SQLITE_FILE);
|
|
56
|
+
const sourceDb = new SqliteDatabase(source, { readonly: true, ...config.accessLease ? { accessLease: config.accessLease } : {} });
|
|
57
|
+
try {
|
|
58
|
+
sourceDb.exec("PRAGMA busy_timeout=1000");
|
|
59
|
+
const before = sourceDb.query("PRAGMA data_version").get().data_version;
|
|
60
|
+
if (sourceDb.query("PRAGMA page_count").get().page_count * sourceDb.query("PRAGMA page_size").get().page_size > DESKTOP_DATABASE_BACKUP_LIMIT)
|
|
61
|
+
throw new Error;
|
|
62
|
+
assertIdle(sourceDb);
|
|
63
|
+
sourceDb.query("VACUUM INTO ?").run(destination);
|
|
64
|
+
if (sourceDb.query("PRAGMA data_version").get().data_version !== before)
|
|
65
|
+
throw new Error;
|
|
66
|
+
} finally {
|
|
67
|
+
sourceDb.close();
|
|
68
|
+
}
|
|
69
|
+
await chmod(destination, 384);
|
|
70
|
+
const snapshot = new SqliteDatabase(destination, { readonly: true });
|
|
71
|
+
try {
|
|
72
|
+
if (snapshot.query("PRAGMA quick_check").all().some((row) => row.quick_check !== "ok"))
|
|
73
|
+
throw new Error;
|
|
74
|
+
assertIdle(snapshot);
|
|
75
|
+
} finally {
|
|
76
|
+
snapshot.close();
|
|
77
|
+
}
|
|
78
|
+
const logical = await (config.workspaceAbsent ? createArchivedHarnessStateBackup : createHarnessStateBackup)({ ...config, stateDirectory: directory, storeBackend: "sqlite" });
|
|
79
|
+
const finalDb = new SqliteDatabase(destination);
|
|
80
|
+
try {
|
|
81
|
+
const checkpoint = finalDb.query("PRAGMA wal_checkpoint(TRUNCATE)").get();
|
|
82
|
+
if (checkpoint && checkpoint.busy !== 0)
|
|
83
|
+
throw new Error;
|
|
84
|
+
} finally {
|
|
85
|
+
finalDb.close();
|
|
86
|
+
}
|
|
87
|
+
const file = await open(destination, constants.O_RDONLY | constants.O_NOFOLLOW);
|
|
88
|
+
try {
|
|
89
|
+
await file.sync();
|
|
90
|
+
} finally {
|
|
91
|
+
await file.close();
|
|
92
|
+
}
|
|
93
|
+
const contents = await readRegularFileNoFollow(destination, { label: "desktop backup", maxBytes: DESKTOP_DATABASE_BACKUP_LIMIT, requireSingleLink: true });
|
|
94
|
+
const result = { directory, size: contents.contents.length, sha256: createHash("sha256").update(contents.contents).digest("hex"), logicalChecksum: logical.checksum };
|
|
95
|
+
const parent = await open(directory, constants.O_RDONLY | constants.O_NOFOLLOW);
|
|
96
|
+
try {
|
|
97
|
+
await parent.sync();
|
|
98
|
+
} finally {
|
|
99
|
+
await parent.close();
|
|
100
|
+
}
|
|
101
|
+
const rootHandle = await open(path.dirname(directory), constants.O_RDONLY | constants.O_NOFOLLOW);
|
|
102
|
+
try {
|
|
103
|
+
await rootHandle.sync();
|
|
104
|
+
} finally {
|
|
105
|
+
await rootHandle.close();
|
|
106
|
+
}
|
|
107
|
+
return result;
|
|
108
|
+
} catch {
|
|
109
|
+
if (directory)
|
|
110
|
+
try {
|
|
111
|
+
await rm(directory, { recursive: true, force: true });
|
|
112
|
+
} catch {
|
|
113
|
+
throw new Error("DESKTOP_BACKUP_CLEANUP_FAILED");
|
|
114
|
+
}
|
|
115
|
+
throw new Error("DESKTOP_BACKUP_FAILED");
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
async function verifyDesktopDatabaseBackup(backup) {
|
|
119
|
+
try {
|
|
120
|
+
await privateDirectory(backup.directory);
|
|
121
|
+
const contents = await readRegularFileNoFollow(path.join(backup.directory, HARNESS_SQLITE_FILE), { label: "desktop backup", maxBytes: DESKTOP_DATABASE_BACKUP_LIMIT, requireSingleLink: true });
|
|
122
|
+
if (contents.stat.uid !== process.getuid?.() || contents.stat.mode & 63 || contents.contents.length !== backup.size || createHash("sha256").update(contents.contents).digest("hex") !== backup.sha256)
|
|
123
|
+
throw new Error;
|
|
124
|
+
} catch {
|
|
125
|
+
throw new Error("DESKTOP_BACKUP_INVALID");
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
async function verifyDesktopDatabaseState(config) {
|
|
129
|
+
try {
|
|
130
|
+
await validateRecordedWorkspace(config.workspace, config.workspaceAbsent === true);
|
|
131
|
+
await validateStateDirectory(config.workspace, config.stateDirectory);
|
|
132
|
+
const directory = await privateDirectory(config.stateDirectory), filename = path.join(directory, HARNESS_SQLITE_FILE);
|
|
133
|
+
const stat = await statRegularFileNoFollow(filename, { label: "desktop state", requireSingleLink: true });
|
|
134
|
+
if (stat.uid !== process.getuid?.() || stat.mode & 63 || stat.size > DESKTOP_DATABASE_BACKUP_LIMIT)
|
|
135
|
+
throw new Error;
|
|
136
|
+
exclusiveSqliteAccessDescriptor(config.accessLease, filename);
|
|
137
|
+
const db = new SqliteDatabase(filename, { readonly: true, create: false, accessLease: config.accessLease });
|
|
138
|
+
try {
|
|
139
|
+
db.exec("PRAGMA busy_timeout=1000");
|
|
140
|
+
if (db.query("PRAGMA page_count").get().page_count * db.query("PRAGMA page_size").get().page_size > DESKTOP_DATABASE_BACKUP_LIMIT)
|
|
141
|
+
throw new Error;
|
|
142
|
+
if (db.query("PRAGMA quick_check").all().some((row) => row.quick_check !== "ok"))
|
|
143
|
+
throw new Error;
|
|
144
|
+
assertIdle(db);
|
|
145
|
+
} finally {
|
|
146
|
+
db.close();
|
|
147
|
+
}
|
|
148
|
+
await createArchivedHarnessStateBackup(config, { accessLease: config.accessLease });
|
|
149
|
+
exclusiveSqliteAccessDescriptor(config.accessLease, filename);
|
|
150
|
+
} catch {
|
|
151
|
+
throw new Error("DESKTOP_DATABASE_STATE_INVALID");
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
export {
|
|
155
|
+
HARNESS_SQLITE_FILE,
|
|
156
|
+
DESKTOP_DATABASE_BACKUP_LIMIT as HOST_DATABASE_SNAPSHOT_LIMIT,
|
|
157
|
+
acquireSqliteAccess,
|
|
158
|
+
adoptExclusiveSqliteAccess,
|
|
159
|
+
createDesktopDatabaseBackup as createHostDatabaseSnapshot,
|
|
160
|
+
exclusiveSqliteAccessDescriptor,
|
|
161
|
+
protectPersistenceSecret,
|
|
162
|
+
readRegularFileNoFollow,
|
|
163
|
+
statRegularFileNoFollow,
|
|
164
|
+
validateRecordedWorkspace,
|
|
165
|
+
validateStateDirectory,
|
|
166
|
+
verifyDesktopDatabaseBackup as verifyHostDatabaseSnapshot,
|
|
167
|
+
verifyDesktopDatabaseState as verifyHostDatabaseState
|
|
168
|
+
};
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/** Terminal-free host engine surface. Named aliases retain their historical stability tiers. */
|
|
2
|
+
export { DEFAULT_ALLOWED_CHECKS, DEFAULT_OCI_EXECUTION, DEFAULT_SUBAGENT_BUDGET, HARNESS_CONFIG_MIGRATABLE_SCHEMA_VERSIONS, HARNESS_CONFIG_SCHEMA_VERSION, HARNESS_EXECUTION_BACKENDS, HARNESS_EXECUTION_POLICY_VERSION, HARNESS_OCI_RUNTIMES, HARNESS_OCI_SHELL_MODES, HARNESS_REQUIRED_CAPABILITIES, HARNESS_SUBAGENT_PROFILES, BUILTIN_PROVIDER_REGISTRATIONS, DEFAULT_PROVIDER_REGISTRY, PROVIDERS, PROVIDER_DESCRIPTORS, createProviderModel, createProviderRegistry, defaultHarnessNamespace, migrateHarnessConfigInput, parseProvider, providerAvailability, providerDescriptor, resolveHarnessConfig } from "../runtime/config.js";
|
|
3
|
+
export type { BuiltInHarnessProvider, HarnessBudget, HarnessCompactionConfig, HarnessContextConfig, HarnessConfig, HarnessConfigInput, HarnessConfigMigrationResult, HarnessCostBudget, HarnessExecutionBackend, HarnessExecutionConfig, HarnessOciRuntime, HarnessOciShellMode, HarnessOrchestrationConfig, HarnessProvider, HarnessProviderRegistry, HarnessRequiredCapability, HarnessStoreBackend, HarnessSubagentProfile, ProviderCapability, ProviderAvailability, ProviderCredentials, ProviderDescriptor, ProviderDiagnosticsDescriptor, ProviderEnumDiagnostic, ProviderModelFactory, ProviderModelFactoryContext, ProviderPresenceDiagnostic, ProviderRegistration, ProviderSupport } from "../runtime/config.js";
|
|
4
|
+
export { createHarnessRouteModels, parseHarnessModelRoute, resolveHarnessModelRoutes, serializeHarnessModelRoutes } from "../providers/routing.js";
|
|
5
|
+
export type { HarnessModelRoute } from "../providers/routing.js";
|
|
6
|
+
export { CLI_EVENT_SCHEMA_VERSION, CLI_JSON_SCHEMA_VERSION, serializeStreamEvent, serializeStreamResult, streamEventDocument, streamResultDocument } from "../client/stream.js";
|
|
7
|
+
export type { StreamRunResultSource } from "../client/stream.js";
|
|
8
|
+
export { CLI_COMMAND_OPTION_CONTRACTS, CLI_OPTION_DEFINITIONS, CLI_OPTION_NAMES, validateCliCommandOptions } from "../compat/cli-options.js";
|
|
9
|
+
export type { CliCommandOptionContract, CliCommandOptionContractKey, CliOptionDefinition, CliOptionName } from "../compat/cli-options.js";
|
|
10
|
+
export { cliChangeEnvelopeVerificationDocumentSchema, cliDoctorDocumentSchema, cliErrorDocumentSchema, cliInitDocumentSchema, cliJsonDocumentSchema, cliJsonLineDocumentSchema, cliProviderDocumentSchema, cliReviewGroupDocumentSchema, cliRunCancellationDocumentSchema, cliRunCleanupDocumentSchema, cliRunEventDocumentSchema, cliRunExportDocumentSchema, cliRunInspectionDocumentSchema, cliRunListDocumentSchema, cliRunResultDocumentSchema, cliSessionDocumentSchema, cliSessionListDocumentSchema, cliStateExportDocumentSchema, cliStateImportDocumentSchema, cliStateStatusDocumentSchema, cliStreamErrorDocumentSchema, cliStreamResultDocumentSchema, parseCliJsonDocument, parseCliJsonLineDocument } from "../client/json-contracts.js";
|
|
11
|
+
export type { CliChangeEnvelopeVerificationDocument, CliInitDocument, CliJsonDocument, CliJsonLineDocument, CliReviewGroupDocument, CliRunEventDocument, CliRunInspectionDocument, CliRunListDocument, CliRunResultDocument, CliSessionDocument, CliStreamErrorDocument, CliStreamResultDocument } from "../client/json-contracts.js";
|
|
12
|
+
export { HARNESS_SESSION_INDEX_FILE, HARNESS_SESSION_SCHEMA_VERSION, SESSION_RUN_STATUSES, TERMINAL_SESSION_RUN_STATUSES, openCliSessionStore, openSessionStore } from "../persistence/sessions.js";
|
|
13
|
+
export { HARNESS_STATE_BACKUP_MAX_BYTES, HARNESS_STATE_BACKUP_SCHEMA_VERSION, createHarnessStateBackup, exportHarnessStateBackup, importHarnessStateBackup, importHarnessStateBackupFile, inspectHarnessState, readHarnessStateBackup, stateBackupBundleSchema } from "../persistence/state-backup.js";
|
|
14
|
+
export type { HarnessStateBackupBundle, HarnessStateImportOptions } from "../persistence/state-backup.js";
|
|
15
|
+
export type { AppendSessionRunInput, CliSession, CliSessionStore, CliSessionSummary, CreateSessionInput, ForkSessionInput, ListSessionsQuery, OpenSessionStoreOptions, SessionRetentionResult, SessionRunReference, SessionRunStatus, UpdateSessionInput, UpdateSessionRunInput } from "../persistence/sessions.js";
|
|
16
|
+
export { CliOciRuntimeAdapter, HARNESS_EXECUTION_ARTIFACT_SCHEMA_VERSION, HARNESS_OCI_LABEL, HARNESS_OCI_LABEL_VALUE, cleanupHarnessExecutionArtifacts, createHarnessOciExecutionEnvironment, describeOciCommand, executionFingerprintInput, harnessExecutionSession } from "../execution/execution-environment.js";
|
|
17
|
+
export type { CreateHarnessOciEnvironmentOptions, EnvironmentPatchImportResult, EnvironmentPatchInspection, ExecutionArtifactCleanupResult, HarnessCommandResult, HarnessEnvironmentStatus, HarnessExecutionIoMetrics, HarnessExecutionSession, HarnessOciExecutionEnvironment, HarnessOciRuntimeAdapter, OciCommandBatchResult, OciImageInspection, OciCommandResult, OciPhaseLatencies, OciRunBatchRequest, OciRunRequest } from "../execution/execution-environment.js";
|
|
18
|
+
export { assertHarnessModelCapabilities, inspectHarnessModelCapabilities, selectHarnessModel } from "../providers/capabilities.js";
|
|
19
|
+
export type { HarnessModelCandidate, HarnessModelCapabilityReport, HarnessModelSelection } from "../providers/capabilities.js";
|
|
20
|
+
export { HARNESS_MCP_CONFIG_SCHEMA_VERSION, HARNESS_MCP_PERMISSIONS, createHarnessMcpTools, createHttpMcpClient, loadHarnessMcpConfiguration, normalizeHarnessMcpConfiguration } from "../integrations/mcp.js";
|
|
21
|
+
export type { HarnessMcpClients, HarnessMcpConfiguration, HarnessMcpHttpOptions, HarnessMcpPermission, HarnessMcpServerConfig, HarnessMcpTransport, McpClient, McpListedTool } from "../integrations/mcp.js";
|
|
22
|
+
export { HARNESS_SUBAGENT_PROFILE_DESCRIPTORS, createHarnessSubagents, runHarnessReviewGroup } from "../runtime/orchestration.js";
|
|
23
|
+
export type { HarnessReviewGroupResult, HarnessSubagentProfileDescriptor, HarnessSubagentRuntime } from "../runtime/orchestration.js";
|
|
24
|
+
export { BUN_ENGINE_RANGE, HARNESS_VERSION, NODE_ENGINE_RANGE } from "../version.js";
|
|
25
|
+
export { HARNESS_ERROR_SCHEMA_VERSION, HARNESS_ERROR_CODES, HarnessApprovalError, HarnessConfigError, HarnessError, HarnessExecutionError, HarnessProviderError, HarnessStateConflictError, HarnessWorkspaceError, harnessErrorDocument, normalizeHarnessError } from "../runtime/errors.js";
|
|
26
|
+
export type { HarnessErrorCategory, HarnessErrorCode, HarnessErrorDocument, HarnessErrorOptions } from "../runtime/errors.js";
|
|
27
|
+
export { CHANGE_ENVELOPE_DIGEST_ALGORITHM, CHANGE_ENVELOPE_SCHEMA_VERSION, MAX_CHANGE_ENVELOPE_APPROVALS, MAX_CHANGE_ENVELOPE_APPROVAL_SCOPES, MAX_CHANGE_ENVELOPE_ATTESTATIONS, MAX_CHANGE_ENVELOPE_CHECKS, canonicalizeChangeEnvelope, changeEnvelopeApprovalSchema, changeEnvelopeBaseSchema, changeEnvelopeCheckSchema, changeEnvelopeEvidenceSchema, changeEnvelopeFingerprintsSchema, changeEnvelopeInputSchema, changeEnvelopePatchSchema, changeEnvelopePreconditionsSchema, changeEnvelopeSchema, computeChangeEnvelopeDigest, computeChangeEnvelopeEvidenceDigest, createChangeEnvelope, digestChangeEnvelopeArtifact, externalAttestationReferenceSchema, verifyChangeEnvelope } from "../workspace/change-envelope.js";
|
|
28
|
+
export type { ChangeEnvelope, ChangeEnvelopeApproval, ChangeEnvelopeCheck, ChangeEnvelopeEvidence, ChangeEnvelopePreconditions, ChangeEnvelopeVerificationIssue, ChangeEnvelopeVerificationIssueCode, ChangeEnvelopeVerificationOptions, ChangeEnvelopeVerificationResult, CreateChangeEnvelopeInput, ExternalAttestationReference } from "../workspace/change-envelope.js";
|
|
29
|
+
export { EDIT_CONTRACT_SCHEMA_VERSION, EDIT_DIGEST_ALGORITHM, MAX_EDIT_CHANGES, MAX_EDIT_FILE_BYTES, MAX_EDIT_PROPOSAL_BYTES, applyEditProposalInputSchema, createEditProposal, editContractDocument, editChangeSchema, editChangesSchema, editProposalInputSchema, editProposalChangeSchema, editProposalSchema, fileDigestSchema, moveFileInputSchema, mutationAuditEntrySchema, mutationOperationSchema, quarantineFileInputSchema, restoreFileInputSchema, validateEditProposal, workspaceFilePathSchema } from "../workspace/edit-contracts.js";
|
|
30
|
+
export type { ApplyEditProposalInput, ApplyPatchResult, EditContractDocument, EditChange, EditProposal, EditProposalChange, FileDigest, MoveFileInput, MoveFileResult, MutationAuditEntry, MutationOperation, QuarantineFileInput, QuarantineFileResult, RestoreFileInput, RestoreFileResult } from "../workspace/edit-contracts.js";
|
|
31
|
+
export { HARNESS_INSTRUCTIONS, appendUserMessage, compactHarnessMessages, createExecutionEnvironmentTools, createHarness, estimateMessageTokens, runHarness } from "../runtime/harness.js";
|
|
32
|
+
export { HARNESS_OPERATIONS_SCHEMA_VERSION, HARNESS_SQLITE_FILE, TERMINAL_RUN_STATUSES, cancelHarnessRun, cleanupHarnessRuns, inspectHarnessRun, listHarnessRuns, migrateLegacyFileRuns, openHarnessPersistence } from "../persistence/operations.js";
|
|
33
|
+
export { validateStateDirectory } from "../persistence/state-directory.js";
|
|
34
|
+
export type { HarnessMigrationResult, HarnessPersistence, HarnessRunQuery } from "../persistence/operations.js";
|
|
35
|
+
export type { CreateHarnessOptions, HarnessRunOptions, HarnessRunDiagnostics, ZhivexHarness } from "../runtime/harness.js";
|
|
36
|
+
export { DEFAULT_HARNESS_CONTEXT_MANIFEST, DEFAULT_HARNESS_PROJECT_INSTRUCTIONS, HARNESS_CONTEXT_BUNDLE_SCHEMA_VERSION, HARNESS_CONTEXT_CONFIG_SCHEMA_VERSION, HARNESS_LIFECYCLE_EVENTS, MAX_HARNESS_CONTEXT_FILES, MAX_HARNESS_CONTEXT_FILE_BYTES, MAX_HARNESS_CONTEXT_TOTAL_BYTES, MAX_HARNESS_SKILLS, MAX_HARNESS_SKILL_DIRECTORIES, MAX_HARNESS_SKILL_FILE_BYTES, createEmptyHarnessContextBundle, createHarnessLifecycleDispatcher, harnessContextConfigurationSchema, harnessContextFingerprintInput, harnessLifecycleFingerprintInput, harnessSkillLoadInputSchema, isHarnessContextDigest, loadHarnessProjectContext, loadHarnessSkill, renderHarnessContextInstructions } from "../context/context-engineering.js";
|
|
37
|
+
export type { HarnessContextBundle, HarnessContextConfiguration, HarnessContextManifestIdentity, HarnessContextSource, HarnessLifecycleEvent, HarnessLifecycleEventName, HarnessLifecycleHookFailure, HarnessLifecycleHookRegistration, HarnessLoadedSkill, HarnessSkillIndexEntry, LoadHarnessProjectContextOptions } from "../context/context-engineering.js";
|
|
38
|
+
export { Workspace } from "../workspace/workspace.js";
|
|
39
|
+
export type { CommandResult, HarnessCheck, ListFilesOptions, ListFilesResult, ReadFilesRequest, SearchFilesOptions, SearchManyOptions, SearchManyQuery, SearchMatch, WorkspaceFile, WorkspaceTopologyFile, WorkspaceIndexDiagnostics } from "../workspace/workspace.js";
|
|
40
|
+
export { DEFAULT_TIME_TO_SAFE_FIX_GOAL, TIME_TO_SAFE_FIX_CARRIERS, TIME_TO_SAFE_FIX_DIAGNOSTIC_CODES, TIME_TO_SAFE_FIX_FAILURE_ORIGINS, TIME_TO_SAFE_FIX_FAILURE_STAGES, TIME_TO_SAFE_FIX_GOALS, TIME_TO_SAFE_FIX_PROFILES, TIME_TO_SAFE_FIX_SCHEMA_VERSION, classifyTimeToSafeFixFailure, createTimeToSafeFixCases, createTimeToSafeFixReport, createTimeToSafeFixSample, injectTimeToSafeFixAttack, timeToSafeFixDriverResultSchema, timeToSafeFixLatencyStatistics, timeToSafeFixTaskSchema } from "../runtime/time-to-safe-fix.js";
|
|
41
|
+
export type { TimeToSafeFixAggregate, TimeToSafeFixCarrier, TimeToSafeFixCase, TimeToSafeFixDriverResult, TimeToSafeFixDiagnosticCode, TimeToSafeFixFailureOrigin, TimeToSafeFixFailureStage, TimeToSafeFixGoal, TimeToSafeFixLatencyStatistics, TimeToSafeFixProfile, TimeToSafeFixRate, TimeToSafeFixRatioStatistics, TimeToSafeFixReport, TimeToSafeFixSample, TimeToSafeFixTask } from "../runtime/time-to-safe-fix.js";
|
|
42
|
+
export { HARNESS_CLIENT_PROTOCOL_VERSION, harnessClientCommandSchema, harnessClientRequestSchema, createHarnessClientAdapter } from "../client/index.js";
|
|
43
|
+
export type { HarnessClientCommand, HarnessClientRequest, HarnessClientErrorCode, HarnessClientSession, HarnessClientRun, HarnessClientData, HarnessClientResponse, HarnessClientNegotiation, HarnessClientAdapter } from "../client/index.js";
|
|
44
|
+
export { startHarnessLocalService, recoverHarnessLocalService, readHarnessLocalCredentials, requestHarnessLocalService, harnessLocalCredentialsSchema } from "../client/local-service.js";
|
|
45
|
+
export type { HarnessLocalService, HarnessLocalServiceOptions, HarnessLocalCredentials } from "../client/local-service.js";
|
|
46
|
+
export { openHarnessActivityStore } from "../client/service-events.js";
|
|
47
|
+
export type { HarnessActivityEvent, HarnessActivitySnapshot, HarnessActivityPage, HarnessActivityStore, HarnessActivityOptions } from "../client/service-events.js";
|
|
48
|
+
export type { HarnessClientAdapterOptions } from "../client/index.js";
|
|
49
|
+
export type { HarnessDelegationContract } from "../runtime/delegation-contracts.js";
|
|
50
|
+
export { createSemanticCompactor, SEMANTIC_COMPACTION_VERSION } from "../context/semantic-compaction.js";
|
|
51
|
+
export { recommendCompactionModels } from "../models/compaction-recommendations.js";
|
|
52
|
+
export type { CompactionRecommendationRequest, CompactionModelAssessment, CompactionModelRecommendations } from "../models/compaction-recommendations.js";
|
|
53
|
+
export { createHarnessToolPolicy, applyHarnessToolPolicy, harnessToolPolicySchema } from "../runtime/tool-policy.js";
|
|
54
|
+
export type { HarnessToolPolicy, HarnessToolPolicyDecision } from "../runtime/tool-policy.js";
|
|
55
|
+
export { createProgressMonitor } from "../runtime/progress-monitor.js";
|
|
56
|
+
export type { ProgressMonitorState, ProgressSignal } from "../runtime/progress-monitor.js";
|
|
57
|
+
export { createAcpConnection } from "../client/acp.js";
|
|
58
|
+
export { serveAcpStdio } from "../client/acp-stdio.js";
|
|
59
|
+
export { openWorkspaceCheckpointStore } from "../persistence/workspace-checkpoints.js";
|
|
60
|
+
export type { WorkspaceCheckpoint, WorkspaceRestoreOperation } from "../persistence/workspace-checkpoints.js";
|
|
61
|
+
export type { HarnessMcpResourceClient } from "../integrations/mcp.js";
|
|
62
|
+
/** Experimental read-only host policy view. */
|
|
63
|
+
export { inspectHarnessPolicy } from "../runtime/policy-inspection.js";
|
|
64
|
+
export type { HarnessPolicyInspection } from "../runtime/policy-inspection.js";
|
|
65
|
+
/** Experimental application-owned task acceptance; enforcement is a separate layer. */
|
|
66
|
+
export { taskAcceptanceContractSchema, compileTaskAcceptanceContract } from '../runtime/task-acceptance.js';
|
|
67
|
+
export type { TaskAcceptanceContract } from '../runtime/task-acceptance.js';
|
|
68
|
+
export { inspectHarnessTaskAcceptance, reviseHarnessTaskAcceptance } from '../runtime/task-acceptance-host.js';
|
|
69
|
+
export type { TaskAcceptanceLedger } from '../runtime/task-acceptance-record.js';
|
|
70
|
+
/** Experimental bounded portable governance projection. */
|
|
71
|
+
export { exportHarnessGovernanceReport, harnessGovernanceReportSchema, renderHarnessGovernanceMarkdown } from '../persistence/governance-report.js';
|
|
72
|
+
export type { HarnessGovernanceReport, HarnessGovernanceOptions } from '../persistence/governance-report.js';
|
|
73
|
+
export type { GovernanceSessionSource } from '../persistence/governance-context.js';
|