@dsh-enhanced/assistant-isolation 0.1.49 → 0.1.53

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/README.md +57 -5
  2. package/lib/audit-archive.d.ts +1 -1
  3. package/lib/audit-archive.d.ts.map +1 -1
  4. package/lib/audit-archive.js +5 -5
  5. package/lib/audit-archive.js.map +1 -1
  6. package/lib/cleanup-receipt.d.ts +2 -0
  7. package/lib/cleanup-receipt.d.ts.map +1 -1
  8. package/lib/cleanup-receipt.js +13 -7
  9. package/lib/cleanup-receipt.js.map +1 -1
  10. package/lib/cli.d.ts +2 -2
  11. package/lib/cli.d.ts.map +1 -1
  12. package/lib/cli.js +21 -14
  13. package/lib/cli.js.map +1 -1
  14. package/lib/config.d.ts +1 -0
  15. package/lib/config.d.ts.map +1 -1
  16. package/lib/config.js +6 -3
  17. package/lib/config.js.map +1 -1
  18. package/lib/diagnostics.js +2 -2
  19. package/lib/docker-socket.d.ts +10 -0
  20. package/lib/docker-socket.d.ts.map +1 -0
  21. package/lib/docker-socket.js +43 -0
  22. package/lib/docker-socket.js.map +1 -0
  23. package/lib/index.d.ts +3 -0
  24. package/lib/index.d.ts.map +1 -1
  25. package/lib/index.js +3 -0
  26. package/lib/index.js.map +1 -1
  27. package/lib/ledger.d.ts +8 -0
  28. package/lib/ledger.d.ts.map +1 -1
  29. package/lib/ledger.js +64 -9
  30. package/lib/ledger.js.map +1 -1
  31. package/lib/native-macos.d.ts +37 -0
  32. package/lib/native-macos.d.ts.map +1 -0
  33. package/lib/native-macos.js +229 -0
  34. package/lib/native-macos.js.map +1 -0
  35. package/lib/native-runtime.d.ts +28 -0
  36. package/lib/native-runtime.d.ts.map +1 -0
  37. package/lib/native-runtime.js +121 -0
  38. package/lib/native-runtime.js.map +1 -0
  39. package/lib/native-verifier-runner.d.ts +23 -0
  40. package/lib/native-verifier-runner.d.ts.map +1 -0
  41. package/lib/native-verifier-runner.js +379 -0
  42. package/lib/native-verifier-runner.js.map +1 -0
  43. package/lib/probe.d.ts +1 -1
  44. package/lib/probe.d.ts.map +1 -1
  45. package/lib/probe.js +7 -5
  46. package/lib/probe.js.map +1 -1
  47. package/lib/reconcile.d.ts +1 -1
  48. package/lib/reconcile.d.ts.map +1 -1
  49. package/lib/reconcile.js +4 -2
  50. package/lib/reconcile.js.map +1 -1
  51. package/lib/runner.d.ts.map +1 -1
  52. package/lib/runner.js +31 -5
  53. package/lib/runner.js.map +1 -1
  54. package/lib/service.d.ts.map +1 -1
  55. package/lib/service.js +6 -4
  56. package/lib/service.js.map +1 -1
  57. package/lib/state-socket-binding.d.ts +4 -0
  58. package/lib/state-socket-binding.d.ts.map +1 -0
  59. package/lib/state-socket-binding.js +64 -0
  60. package/lib/state-socket-binding.js.map +1 -0
  61. package/lib/types.d.ts +5 -0
  62. package/lib/types.d.ts.map +1 -1
  63. package/lib/verifier-runner.d.ts +1 -0
  64. package/lib/verifier-runner.d.ts.map +1 -1
  65. package/lib/verifier-runner.js +6 -3
  66. package/lib/verifier-runner.js.map +1 -1
  67. package/lib/version.d.ts +1 -1
  68. package/lib/version.js +1 -1
  69. package/package.json +4 -4
  70. package/runtime/native-macos-supervisor.mjs +51 -0
  71. package/runtime/supervisor.mjs +14 -4
package/lib/cli.js CHANGED
@@ -10,6 +10,8 @@ import { removeIsolatedContainer } from './runner.js';
10
10
  import { defaultStoragePolicy, validateStoragePolicy } from './storage-policy.js';
11
11
  import { maintainIsolationStorage } from './storage.js';
12
12
  import { archiveIsolationAudit, verifyIsolationAuditArchive } from './audit-archive.js';
13
+ import { configuredDockerSocketPath } from './docker-socket.js';
14
+ import { stateSocketBindingMatches } from './state-socket-binding.js';
13
15
  function privateLedger(stateRoot, dockerPath) {
14
16
  if (!isAbsolute(stateRoot) || realpathSync(stateRoot) !== stateRoot)
15
17
  throw new Error('canonical state root required');
@@ -24,12 +26,14 @@ function privateLedger(stateRoot, dockerPath) {
24
26
  return file;
25
27
  }
26
28
  /** Operator entry point, separate from the model's tool registry. */
27
- export async function revokeIsolationGrant(stateRoot, grantId, revision, dockerPath = '/usr/bin/docker') {
29
+ export async function revokeIsolationGrant(stateRoot, grantId, revision, dockerPath = process.platform === 'darwin' ? '/usr/local/bin/docker' : '/usr/bin/docker', socketPath) {
28
30
  const file = privateLedger(stateRoot, dockerPath);
31
+ const boundSocket = configuredDockerSocketPath(socketPath);
29
32
  const ledger = new IsolationLedger(file);
30
33
  try {
31
34
  ledger.revoke(grantId, revision, 'external-operator-revoke');
32
- let containersRemoved = true;
35
+ const bindingMatches = stateSocketBindingMatches(stateRoot, boundSocket);
36
+ let containersRemoved = bindingMatches;
33
37
  let cursor = '';
34
38
  for (;;) {
35
39
  const page = ledger.recoverable(cursor);
@@ -37,7 +41,8 @@ export async function revokeIsolationGrant(stateRoot, grantId, revision, dockerP
37
41
  break;
38
42
  cursor = page.at(-1).id;
39
43
  for (const job of page)
40
- if (job.grantId === grantId && !await removeIsolatedContainer(dockerPath, job.containerName))
44
+ if (job.grantId === grantId && bindingMatches
45
+ && !await removeIsolatedContainer(dockerPath, job.containerName, { socketPath: boundSocket }))
41
46
  containersRemoved = false;
42
47
  }
43
48
  // Revocation is durable. A running controller also polls it and prevents any
@@ -49,7 +54,8 @@ export async function revokeIsolationGrant(stateRoot, grantId, revision, dockerP
49
54
  }
50
55
  }
51
56
  /** Reconcile only settled requests; a live Host owns its own background sweep. */
52
- export async function reconcileIsolation(stateRoot, dockerPath = '/usr/bin/docker', signal = new AbortController().signal) {
57
+ export async function reconcileIsolation(stateRoot, dockerPath = process.platform === 'darwin' ? '/usr/local/bin/docker' : '/usr/bin/docker', signal = new AbortController().signal, socketPath) {
58
+ const boundSocket = configuredDockerSocketPath(socketPath);
53
59
  const ledger = new IsolationLedger(privateLedger(stateRoot, dockerPath));
54
60
  const abort = new AbortController();
55
61
  let timer;
@@ -77,7 +83,8 @@ export async function reconcileIsolation(stateRoot, dockerPath = '/usr/bin/docke
77
83
  abort.signal.throwIfAborted();
78
84
  counts.checked++;
79
85
  const combined = AbortSignal.any([signal, abort.signal, AbortSignal.timeout(30_000)]);
80
- if (await reconcileUnknownJob(ledger, controller, job, dockerPath, combined))
86
+ if (stateSocketBindingMatches(stateRoot, boundSocket)
87
+ && await reconcileUnknownJob(ledger, controller, job, dockerPath, combined, boundSocket))
81
88
  counts.released++;
82
89
  else
83
90
  counts.retained++;
@@ -129,9 +136,9 @@ if (process.argv[1] !== undefined && import.meta.url === pathToFileURL(process.a
129
136
  const [command, stateRoot, grantId, revision, dockerPath, ...extra] = process.argv.slice(2);
130
137
  try {
131
138
  if (command === 'probe') {
132
- if (!stateRoot || revision !== undefined)
133
- throw new Error('usage: dsh-isolation probe sha256:image-id [/absolute/docker]');
134
- process.stdout.write(`${JSON.stringify(await probeIsolationRuntime(stateRoot, grantId))}\n`);
139
+ if (!stateRoot || dockerPath !== undefined || extra.length > 0)
140
+ throw new Error('usage: dsh-isolation probe sha256:image-id [/absolute/docker [/absolute/docker.sock]]');
141
+ process.stdout.write(`${JSON.stringify(await probeIsolationRuntime(stateRoot, grantId, revision))}\n`);
135
142
  }
136
143
  else if (command === 'maintain') {
137
144
  if (stateRoot === undefined || dockerPath !== undefined || (grantId !== undefined && !/^(0|[1-9][0-9]*)$/.test(grantId)))
@@ -139,14 +146,14 @@ if (process.argv[1] !== undefined && import.meta.url === pathToFileURL(process.a
139
146
  process.stdout.write(`${JSON.stringify(await maintainIsolation(stateRoot, grantId === undefined ? 0 : Number(grantId), revision))}\n`);
140
147
  }
141
148
  else if (command === 'reconcile') {
142
- if (stateRoot === undefined || revision !== undefined)
143
- throw new Error('usage: dsh-isolation reconcile /absolute/private/state-root [/absolute/docker]');
149
+ if (stateRoot === undefined || dockerPath !== undefined || extra.length > 0)
150
+ throw new Error('usage: dsh-isolation reconcile /absolute/private/state-root [/absolute/docker [/absolute/docker.sock]]');
144
151
  const abort = new AbortController();
145
152
  const cancel = () => abort.abort();
146
153
  process.once('SIGINT', cancel);
147
154
  process.once('SIGTERM', cancel);
148
155
  try {
149
- process.stdout.write(`${JSON.stringify(await reconcileIsolation(stateRoot, grantId, abort.signal))}\n`);
156
+ process.stdout.write(`${JSON.stringify(await reconcileIsolation(stateRoot, grantId, abort.signal, revision))}\n`);
150
157
  }
151
158
  finally {
152
159
  process.removeListener('SIGINT', cancel);
@@ -167,9 +174,9 @@ if (process.argv[1] !== undefined && import.meta.url === pathToFileURL(process.a
167
174
  process.stdout.write(`${JSON.stringify(verifyIsolationAuditArchive(stateRoot))}\n`);
168
175
  }
169
176
  else {
170
- if (command !== 'revoke' || stateRoot === undefined || grantId === undefined || revision === undefined || extra.length > 0 || !/^[1-9][0-9]*$/.test(revision))
171
- throw new Error('usage: dsh-isolation revoke /absolute/private/state-root grant-id revision [/absolute/docker]');
172
- const result = await revokeIsolationGrant(stateRoot, grantId, Number(revision), dockerPath);
177
+ if (command !== 'revoke' || stateRoot === undefined || grantId === undefined || revision === undefined || extra.length > 1 || !/^[1-9][0-9]*$/.test(revision))
178
+ throw new Error('usage: dsh-isolation revoke /absolute/private/state-root grant-id revision [/absolute/docker [/absolute/docker.sock]]');
179
+ const result = await revokeIsolationGrant(stateRoot, grantId, Number(revision), dockerPath, extra[0]);
173
180
  process.stdout.write(`${JSON.stringify(result)}\n`);
174
181
  if (!result.containersRemoved)
175
182
  process.exitCode = 2;
package/lib/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/lib/config.d.ts CHANGED
@@ -4,6 +4,7 @@ export interface Config {
4
4
  stateRoot?: string;
5
5
  image?: string;
6
6
  dockerPath?: string;
7
+ socketPath?: string;
7
8
  grants?: IsolationGrant[];
8
9
  limits?: Partial<IsolationLimits>;
9
10
  storage?: Partial<IsolationStoragePolicy>;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,0BAA0B,CAAA;AAI7C,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AAEzF,MAAM,WAAW,MAAM;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,cAAc,EAAE,CAAA;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,CAAA;IACzC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,0BAA0B,CAAC,EAAE,MAAM,CAAA;CACpC;AACD,eAAO,MAAM,aAAa,EAAE,eACwH,CAAA;AAEpJ,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,CAiBhC,CAAA;AACF,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG;IAAE,MAAM,EAAE,eAAe,CAAC;IAAC,OAAO,EAAE,sBAAsB,CAAA;CAAE,CA0B7H"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,0BAA0B,CAAA;AAK7C,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AAEzF,MAAM,WAAW,MAAM;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,cAAc,EAAE,CAAA;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAA;IACjC,OAAO,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,CAAA;IACzC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,0BAA0B,CAAC,EAAE,MAAM,CAAA;CACpC;AACD,eAAO,MAAM,aAAa,EAAE,eACwH,CAAA;AAEpJ,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,CAkBhC,CAAA;AACF,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG;IAAE,MAAM,EAAE,eAAe,CAAC;IAAC,OAAO,EAAE,sBAAsB,CAAA;CAAE,CA2B7H"}
package/lib/config.js CHANGED
@@ -2,12 +2,14 @@ import Schema from '@deepseek-ai/schemastery';
2
2
  import { homedir } from 'node:os';
3
3
  import { isAbsolute, join, resolve } from 'node:path';
4
4
  import { defaultStoragePolicy, plannedStorageBytes, validateStoragePolicy } from './storage-policy.js';
5
+ import { configuredDockerSocketPath } from './docker-socket.js';
5
6
  export const defaultLimits = { maxDurationMs: 60_000, maxInputBytes: 1_048_576,
6
7
  maxOutputBytes: 65_536, maxArtifactBytes: 262_144, maxFiles: 32, memoryMiB: 256, workspaceMiB: 64, workspaceInodes: 4096, pidsLimit: 64, cpus: 1 };
7
8
  const integer = (max) => Schema.number().step(1).min(1).max(max);
8
9
  export const Config = Schema.object({
9
10
  stateRoot: Schema.string().default(join(homedir(), '.dsh', 'assistant-isolation')),
10
- image: Schema.string(), dockerPath: Schema.string().default('/usr/bin/docker'),
11
+ image: Schema.string(), dockerPath: Schema.string().default(process.platform === 'darwin' ? '/usr/local/bin/docker' : '/usr/bin/docker'),
12
+ socketPath: Schema.string(),
11
13
  grants: Schema.array(Schema.object({
12
14
  id: Schema.string().required(), revision: integer(Number.MAX_SAFE_INTEGER).required(),
13
15
  principalDigest: Schema.string().required(), principalRecordId: Schema.string().required(),
@@ -25,7 +27,8 @@ export const Config = Schema.object({
25
27
  });
26
28
  export function validateConfig(input) {
27
29
  const stateRoot = input.stateRoot ?? join(homedir(), '.dsh', 'assistant-isolation');
28
- const dockerPath = input.dockerPath ?? '/usr/bin/docker';
30
+ const dockerPath = input.dockerPath ?? (process.platform === 'darwin' ? '/usr/local/bin/docker' : '/usr/bin/docker');
31
+ const socketPath = configuredDockerSocketPath(input.socketPath);
29
32
  const grants = structuredClone(input.grants ?? []);
30
33
  const image = input.image ?? '';
31
34
  if (!isAbsolute(stateRoot) || resolve(stateRoot) !== stateRoot || stateRoot === '/' || /[\p{Cc},]/u.test(stateRoot)
@@ -56,6 +59,6 @@ export function validateConfig(input) {
56
59
  throw new Error('assistant-isolation: invalid grant scope');
57
60
  if (storage.maxStateBytes < plannedStorageBytes(limits))
58
61
  throw new Error('assistant-isolation: storage budget below planned job allocation');
59
- return { stateRoot, dockerPath, image, grants, limits, storage, maxConcurrentJobs, maxReservedMemoryMiB, maxReservedWorkspaceInodes };
62
+ return { stateRoot, dockerPath, socketPath, image, grants, limits, storage, maxConcurrentJobs, maxReservedMemoryMiB, maxReservedWorkspaceInodes };
60
63
  }
61
64
  //# sourceMappingURL=config.js.map
package/lib/config.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -59,10 +59,10 @@ export function inspectIsolationGrant(input) {
59
59
  database.exec('PRAGMA query_only=ON; PRAGMA busy_timeout=250; BEGIN;');
60
60
  transaction = true;
61
61
  const version = database.prepare('PRAGMA user_version').get().user_version;
62
- if (version !== 6)
62
+ if (version !== 7)
63
63
  return unavailable('schema-unsupported');
64
64
  const schema = database.prepare("SELECT value FROM schema_meta WHERE key='schema-version'").get();
65
- if (schema?.value !== '6')
65
+ if (schema?.value !== '7')
66
66
  return unavailable('schema-unsupported');
67
67
  const row = database.prepare('SELECT revision, expires_at, max_runs, max_total_duration_ms, revoked, principal_digest, principal_record_id, principal_version, workspace, agent_preset FROM isolation_grants WHERE id=?').get(grant.id);
68
68
  if (row !== undefined) {
@@ -0,0 +1,10 @@
1
+ export interface DockerSocket {
2
+ path: string;
3
+ dev: number;
4
+ ino: number;
5
+ }
6
+ export declare function configuredDockerSocketPath(path: string | undefined, platform?: NodeJS.Platform, home?: string): string;
7
+ /** Resolve once for a job and retain the inode through supervisor and cleanup. */
8
+ export declare function resolveLocalDockerSocket(path: string, platform?: NodeJS.Platform, home?: string): DockerSocket;
9
+ export declare function sameLocalDockerSocket(socket: DockerSocket): boolean;
10
+ //# sourceMappingURL=docker-socket.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker-socket.d.ts","sourceRoot":"","sources":["../src/docker-socket.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAAG,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE;AAExE,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,kBAAmB,EAAE,IAAI,SAAY,GAAG,MAAM,CAU1H;AAED,kFAAkF;AAClF,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,kBAAmB,EAAE,IAAI,SAAY,GAAG,YAAY,CAclH;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAKnE"}
@@ -0,0 +1,43 @@
1
+ import { lstatSync, realpathSync, statSync } from 'node:fs';
2
+ import { homedir } from 'node:os';
3
+ import { isAbsolute, join, resolve } from 'node:path';
4
+ export function configuredDockerSocketPath(path, platform = process.platform, home = homedir()) {
5
+ const value = path ?? (platform === 'darwin' ? join(home, '.docker', 'run', 'docker.sock') : '/var/run/docker.sock');
6
+ if (!isAbsolute(value) || resolve(value) !== value || /[\p{Cc},]/u.test(value) || value.includes('://'))
7
+ throw new Error('assistant-isolation: canonical absolute local Docker socket required');
8
+ if (platform === 'darwin') {
9
+ const directory = join(home, '.docker', 'run');
10
+ if (value !== join(directory, 'docker.sock')) {
11
+ throw new Error('assistant-isolation: macOS Docker socket must be in the current user Docker run directory');
12
+ }
13
+ }
14
+ return value;
15
+ }
16
+ /** Resolve once for a job and retain the inode through supervisor and cleanup. */
17
+ export function resolveLocalDockerSocket(path, platform = process.platform, home = homedir()) {
18
+ configuredDockerSocketPath(path, platform, home);
19
+ const canonical = realpathSync(path);
20
+ if (platform === 'darwin' && canonical !== path)
21
+ throw new Error('assistant-isolation: macOS Docker socket must not be a symlink');
22
+ const info = lstatSync(canonical);
23
+ if (!info.isSocket())
24
+ throw new Error('assistant-isolation: Docker endpoint is not a local Unix socket');
25
+ if (platform === 'darwin') {
26
+ const directory = join(home, '.docker', 'run');
27
+ const parent = statSync(directory);
28
+ if (!parent.isDirectory() || parent.uid !== process.getuid?.() || (parent.mode & 0o022) !== 0 || info.uid !== process.getuid?.()) {
29
+ throw new Error('assistant-isolation: macOS Docker socket must be owned by the current user');
30
+ }
31
+ }
32
+ return { path: canonical, dev: info.dev, ino: info.ino };
33
+ }
34
+ export function sameLocalDockerSocket(socket) {
35
+ try {
36
+ const info = lstatSync(socket.path);
37
+ return info.isSocket() && info.dev === socket.dev && info.ino === socket.ino;
38
+ }
39
+ catch {
40
+ return false;
41
+ }
42
+ }
43
+ //# sourceMappingURL=docker-socket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker-socket.js","sourceRoot":"","sources":["../src/docker-socket.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts CHANGED
@@ -4,6 +4,9 @@ import { AssistantIsolationService, Config } from './service.js';
4
4
  export declare const name = "dsh-enhanced-assistant-isolation";
5
5
  export { version, AssistantIsolationService, Config };
6
6
  export { IsolatedVerifierRunner, type IsolatedVerifierRunnerConfig } from './verifier-runner.js';
7
+ export { runNativeMacProcess, type NativeMacProcessInput, type NativeMacProcessResult, type NativeMacReadRoot } from './native-macos.js';
8
+ export { validateNativeMacRuntime, verifyNativeMacRuntime, hashNativeMacRuntimeTree, nativeMacRuntimeDigest, type NativeMacRuntime } from './native-runtime.js';
9
+ export { NativeMacVerifierRunner, type NativeMacVerifierRunnerConfig } from './native-verifier-runner.js';
7
10
  export { inspectIsolationGrant, type IsolationGrantDiagnostic, type IsolationGrantDiagnosticReason } from './diagnostics.js';
8
11
  export { probeIsolationRuntime } from './probe.js';
9
12
  export * from './audit-archive.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,yBAAyB,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAEhE,eAAO,MAAM,IAAI,qCAAqC,CAAA;AACtD,OAAO,EAAE,OAAO,EAAE,yBAAyB,EAAE,MAAM,EAAE,CAAA;AACrD,OAAO,EAAE,sBAAsB,EAAE,KAAK,4BAA4B,EAAE,MAAM,sBAAsB,CAAA;AAChG,OAAO,EAAE,qBAAqB,EAAE,KAAK,wBAAwB,EAAE,KAAK,8BAA8B,EAAE,MAAM,kBAAkB,CAAA;AAC5H,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAClD,cAAc,oBAAoB,CAAA;AAClC,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAA;AACvD,mBAAmB,YAAY,CAAA;AAE/B,wBAAsB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,GAAE,MAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAA2D;;;;;;AAExI,wBAAsC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,yBAAyB,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAEhE,eAAO,MAAM,IAAI,qCAAqC,CAAA;AACtD,OAAO,EAAE,OAAO,EAAE,yBAAyB,EAAE,MAAM,EAAE,CAAA;AACrD,OAAO,EAAE,sBAAsB,EAAE,KAAK,4BAA4B,EAAE,MAAM,sBAAsB,CAAA;AAChG,OAAO,EAAE,mBAAmB,EAAE,KAAK,qBAAqB,EAAE,KAAK,sBAAsB,EAAE,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACxI,OAAO,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAC/J,OAAO,EAAE,uBAAuB,EAAE,KAAK,6BAA6B,EAAE,MAAM,6BAA6B,CAAA;AACzG,OAAO,EAAE,qBAAqB,EAAE,KAAK,wBAAwB,EAAE,KAAK,8BAA8B,EAAE,MAAM,kBAAkB,CAAA;AAC5H,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAClD,cAAc,oBAAoB,CAAA;AAClC,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAA;AACvD,mBAAmB,YAAY,CAAA;AAE/B,wBAAsB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,GAAE,MAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAA2D;;;;;;AAExI,wBAAsC"}
package/lib/index.js CHANGED
@@ -3,6 +3,9 @@ import { AssistantIsolationService, Config } from './service.js';
3
3
  export const name = 'dsh-enhanced-assistant-isolation';
4
4
  export { version, AssistantIsolationService, Config };
5
5
  export { IsolatedVerifierRunner } from './verifier-runner.js';
6
+ export { runNativeMacProcess } from './native-macos.js';
7
+ export { validateNativeMacRuntime, verifyNativeMacRuntime, hashNativeMacRuntimeTree, nativeMacRuntimeDigest } from './native-runtime.js';
8
+ export { NativeMacVerifierRunner } from './native-verifier-runner.js';
6
9
  export { inspectIsolationGrant } from './diagnostics.js';
7
10
  export { probeIsolationRuntime } from './probe.js';
8
11
  export * from './audit-archive.js';
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,yBAAyB,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAEhE,MAAM,CAAC,MAAM,IAAI,GAAG,kCAAkC,CAAA;AACtD,OAAO,EAAE,OAAO,EAAE,yBAAyB,EAAE,MAAM,EAAE,CAAA;AACrD,OAAO,EAAE,sBAAsB,EAAqC,MAAM,sBAAsB,CAAA;AAChG,OAAO,EAAE,qBAAqB,EAAsE,MAAM,kBAAkB,CAAA;AAC5H,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAClD,cAAc,oBAAoB,CAAA;AAClC,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAA;AAGvD,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,GAAY,EAAE,SAAiB,EAAE,IAAmB,MAAM,IAAI,yBAAyB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,KAAK,CAAA,CAAC,CAAC;AACxI,iFAAiF;AACjF,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,yBAAyB,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAEhE,MAAM,CAAC,MAAM,IAAI,GAAG,kCAAkC,CAAA;AACtD,OAAO,EAAE,OAAO,EAAE,yBAAyB,EAAE,MAAM,EAAE,CAAA;AACrD,OAAO,EAAE,sBAAsB,EAAqC,MAAM,sBAAsB,CAAA;AAChG,OAAO,EAAE,mBAAmB,EAAmF,MAAM,mBAAmB,CAAA;AACxI,OAAO,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,sBAAsB,EAAyB,MAAM,qBAAqB,CAAA;AAC/J,OAAO,EAAE,uBAAuB,EAAsC,MAAM,6BAA6B,CAAA;AACzG,OAAO,EAAE,qBAAqB,EAAsE,MAAM,kBAAkB,CAAA;AAC5H,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAClD,cAAc,oBAAoB,CAAA;AAClC,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAA;AAGvD,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,GAAY,EAAE,SAAiB,EAAE,IAAmB,MAAM,IAAI,yBAAyB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,KAAK,CAAA,CAAC,CAAC;AACxI,iFAAiF;AACjF,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA"}
package/lib/ledger.d.ts CHANGED
@@ -36,6 +36,7 @@ export declare class IsolationLedger {
36
36
  resourceReservation?: ResourceReservation;
37
37
  storageBudget?: IsolationStorageBudget;
38
38
  artifactBinding?: IsolationArtifactBinding;
39
+ backend?: 'docker' | 'macos-seatbelt';
39
40
  }): {
40
41
  job: IsolationJob;
41
42
  created: boolean;
@@ -44,6 +45,13 @@ export declare class IsolationLedger {
44
45
  markDispatched(jobId: string, expectedVersion: number, authority: IsolationControllerAuthority): IsolationJob;
45
46
  start(jobId: string, expectedVersion: number, authority?: IsolationControllerAuthority): IsolationJob;
46
47
  settle(jobId: string, expectedVersion: number, input: IsolationResult, authority?: IsolationControllerAuthority, creationWitness?: CreationWitness): IsolationJob;
48
+ /** A Host-verified durable supervisor receipt is the only native dispatch settlement proof. */
49
+ settleNativeReceipt(jobId: string, expectedVersion: number, binding: {
50
+ requestDigest: string;
51
+ nonce: string;
52
+ nativeResourceId: string;
53
+ }, input: IsolationResult, authority: IsolationControllerAuthority): IsolationJob;
54
+ findNativeVerifierJob(principalDigest: string, stateRoot: string, key: string): IsolationJob | undefined;
47
55
  /** Host-only release after exact cleanup; outcome and origin evidence remain immutable. */
48
56
  settleReconciledUnknown(jobId: string, expectedVersion: number, proof: {
49
57
  original: CreationWitness;
@@ -1 +1 @@
1
- {"version":3,"file":"ledger.d.ts","sourceRoot":"","sources":["../src/ledger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ledger.d.ts","sourceRoot":"","sources":["../src/ledger.ts"],"names":[],"mappings":"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"}
package/lib/ledger.js CHANGED
@@ -14,7 +14,7 @@ export class IsolationLedgerError extends Error {
14
14
  this.name = 'IsolationLedgerError';
15
15
  }
16
16
  }
17
- const schemaVersion = 6;
17
+ const schemaVersion = 7;
18
18
  const outputMaximum = 1_048_576;
19
19
  const artifactMaximum = 128;
20
20
  const textMaximum = 16_384;
@@ -112,8 +112,20 @@ function open(path) {
112
112
  database.exec(`BEGIN IMMEDIATE; ALTER TABLE isolation_jobs ADD COLUMN reserved_storage_bytes INTEGER NOT NULL DEFAULT 0; UPDATE schema_meta SET value='5' WHERE key='schema-version'; PRAGMA user_version=5; COMMIT;`);
113
113
  if ([1, 2, 3, 4, 5].includes(version))
114
114
  database.exec(`BEGIN IMMEDIATE; ALTER TABLE isolation_jobs ADD COLUMN artifact_binding_json TEXT; UPDATE schema_meta SET value='6' WHERE key='schema-version'; PRAGMA user_version=6; COMMIT;`);
115
+ if ([0, 1, 2, 3, 4, 5, 6].includes(version))
116
+ database.exec(`BEGIN IMMEDIATE;
117
+ CREATE TABLE isolation_jobs_v7 (id TEXT PRIMARY KEY, grant_id TEXT NOT NULL, grant_revision INTEGER NOT NULL, principal_digest TEXT NOT NULL, principal_record_id TEXT NOT NULL, principal_version INTEGER NOT NULL, workspace TEXT NOT NULL, agent_preset TEXT NOT NULL, session_id TEXT NOT NULL, idempotency_key TEXT NOT NULL, request_digest TEXT NOT NULL, container_name TEXT UNIQUE, backend_kind TEXT NOT NULL CHECK(backend_kind IN ('docker','macos-seatbelt')), native_resource_id TEXT UNIQUE, native_nonce TEXT, deadline INTEGER NOT NULL, reserved_duration_ms INTEGER NOT NULL, reserved_memory_mib INTEGER NOT NULL DEFAULT 0, reserved_workspace_inodes INTEGER NOT NULL DEFAULT 0, reserved_storage_bytes INTEGER NOT NULL DEFAULT 0, status TEXT NOT NULL CHECK(status IN ('prepared','running','succeeded','failed','cancelled','timed-out','unknown')), version INTEGER NOT NULL, created_at INTEGER NOT NULL, updated_at INTEGER NOT NULL, result_json TEXT, dispatch_attempted INTEGER NOT NULL DEFAULT 0 CHECK(dispatch_attempted IN (0,1)), creation_witness_json TEXT, artifact_binding_json TEXT, CHECK((backend_kind='docker' AND container_name IS NOT NULL AND native_resource_id IS NULL AND native_nonce IS NULL) OR (backend_kind='macos-seatbelt' AND container_name IS NULL AND native_resource_id IS NOT NULL AND native_nonce IS NOT NULL AND reserved_memory_mib=0 AND reserved_workspace_inodes=0)), UNIQUE(principal_digest, principal_record_id, principal_version, workspace, agent_preset, session_id, grant_id, idempotency_key)) STRICT;
118
+ INSERT INTO isolation_jobs_v7 (id,grant_id,grant_revision,principal_digest,principal_record_id,principal_version,workspace,agent_preset,session_id,idempotency_key,request_digest,container_name,backend_kind,deadline,reserved_duration_ms,reserved_memory_mib,reserved_workspace_inodes,reserved_storage_bytes,status,version,created_at,updated_at,result_json,dispatch_attempted,creation_witness_json,artifact_binding_json)
119
+ SELECT id,grant_id,grant_revision,principal_digest,principal_record_id,principal_version,workspace,agent_preset,session_id,idempotency_key,request_digest,container_name,'docker',deadline,reserved_duration_ms,reserved_memory_mib,reserved_workspace_inodes,reserved_storage_bytes,status,version,created_at,updated_at,result_json,dispatch_attempted,creation_witness_json,artifact_binding_json FROM isolation_jobs;
120
+ DROP TABLE isolation_jobs; ALTER TABLE isolation_jobs_v7 RENAME TO isolation_jobs;
121
+ CREATE INDEX isolation_jobs_grant ON isolation_jobs(grant_id);
122
+ CREATE INDEX isolation_jobs_recoverable ON isolation_jobs(status, updated_at);
123
+ UPDATE schema_meta SET value='7' WHERE key='schema-version'; PRAGMA user_version=7; COMMIT;`);
115
124
  database.exec("CREATE INDEX IF NOT EXISTS isolation_artifact_contract ON isolation_jobs(json_extract(artifact_binding_json, '$.admission.contractId')) WHERE artifact_binding_json IS NOT NULL");
116
- if (version !== 0 && version !== 1 && version !== 2 && version !== 3 && version !== 4 && version !== 5 && version !== schemaVersion)
125
+ if (![0, 1, 2, 3, 4, 5, 6, schemaVersion].includes(version))
126
+ fail('schema');
127
+ const marker = database.prepare("SELECT value FROM schema_meta WHERE key='schema-version'").get();
128
+ if (marker?.value !== '7' || database.prepare('PRAGMA user_version').get().user_version !== 7)
117
129
  fail('schema');
118
130
  if (path !== ':memory:')
119
131
  chmodSync(path, 0o600);
@@ -163,7 +175,10 @@ export class IsolationLedger {
163
175
  }
164
176
  #decodeJob(row) {
165
177
  const jobIdentity = identity({ principalDigest: row.principal_digest, principalRecordId: row.principal_record_id, principalVersion: row.principal_version, workspace: row.workspace, agentPreset: row.agent_preset });
166
- if (!text(row.id) || !text(row.grant_id) || !safePositive(row.grant_revision) || !text(row.session_id) || !text(row.idempotency_key) || !text(row.request_digest) || !text(row.container_name) || !positiveTime(row.deadline) || !safePositive(row.reserved_duration_ms) || !safeTime(row.reserved_memory_mib) || !safeTime(row.reserved_workspace_inodes) || !safeTime(row.reserved_storage_bytes) || !safePositive(row.version) || !safeTime(row.created_at) || !safeTime(row.updated_at) || row.updated_at < row.created_at || !['prepared', 'running', 'succeeded', 'failed', 'cancelled', 'timed-out', 'unknown'].includes(row.status))
178
+ if (!text(row.id) || !text(row.grant_id) || !safePositive(row.grant_revision) || !text(row.session_id) || !text(row.idempotency_key) || !text(row.request_digest) || !positiveTime(row.deadline) || !safePositive(row.reserved_duration_ms) || !safeTime(row.reserved_memory_mib) || !safeTime(row.reserved_workspace_inodes) || !safeTime(row.reserved_storage_bytes) || !safePositive(row.version) || !safeTime(row.created_at) || !safeTime(row.updated_at) || row.updated_at < row.created_at || !['prepared', 'running', 'succeeded', 'failed', 'cancelled', 'timed-out', 'unknown'].includes(row.status))
179
+ fail('schema');
180
+ if (!((row.backend_kind === 'docker' && text(row.container_name) && row.native_resource_id === null && row.native_nonce === null)
181
+ || (row.backend_kind === 'macos-seatbelt' && row.container_name === null && text(row.native_resource_id) && text(row.native_nonce) && row.reserved_memory_mib === 0 && row.reserved_workspace_inodes === 0)))
167
182
  fail('schema');
168
183
  if (![0, 1].includes(row.dispatch_attempted))
169
184
  fail('schema');
@@ -201,7 +216,7 @@ export class IsolationLedger {
201
216
  }
202
217
  else if (row.status !== 'prepared' && row.status !== 'running')
203
218
  fail('schema');
204
- return frozen({ ...(binding ? { artifactBinding: binding } : {}), id: row.id, grantId: row.grant_id, grantRevision: row.grant_revision, identity: jobIdentity, sessionId: row.session_id, idempotencyKey: row.idempotency_key, requestDigest: row.request_digest, containerName: row.container_name, deadline: row.deadline, reservedDurationMs: row.reserved_duration_ms, reservedMemoryMiB: row.reserved_memory_mib, reservedWorkspaceInodes: row.reserved_workspace_inodes, reservedStorageBytes: row.reserved_storage_bytes, dispatchAttempted: row.dispatch_attempted === 1, ...(witness ? { creationWitness: witness } : {}), status: row.status, version: row.version, createdAt: row.created_at, updatedAt: row.updated_at, ...(parsed ? { result: parsed } : {}) });
219
+ return frozen({ ...(binding ? { artifactBinding: binding } : {}), id: row.id, grantId: row.grant_id, grantRevision: row.grant_revision, identity: jobIdentity, sessionId: row.session_id, idempotencyKey: row.idempotency_key, requestDigest: row.request_digest, containerName: row.container_name ?? '', backend: row.backend_kind, ...(row.native_resource_id ? { nativeResourceId: row.native_resource_id } : {}), ...(row.native_nonce ? { nativeNonce: row.native_nonce } : {}), deadline: row.deadline, reservedDurationMs: row.reserved_duration_ms, reservedMemoryMiB: row.reserved_memory_mib, reservedWorkspaceInodes: row.reserved_workspace_inodes, reservedStorageBytes: row.reserved_storage_bytes, dispatchAttempted: row.dispatch_attempted === 1, ...(witness ? { creationWitness: witness } : {}), status: row.status, version: row.version, createdAt: row.created_at, updatedAt: row.updated_at, ...(parsed ? { result: parsed } : {}) });
205
220
  }
206
221
  syncGrants(grants, authority) {
207
222
  if (!Array.isArray(grants))
@@ -239,7 +254,7 @@ export class IsolationLedger {
239
254
  });
240
255
  }
241
256
  prepare(input) {
242
- if (!input || typeof input !== 'object' || ![6, 7, 8, 9, 10, 11].includes(Object.keys(input).length) || !onlyKeys(input, ['identity', 'sessionId', 'grantId', 'idempotencyKey', 'requestDigest', 'durationMs', 'maxActiveJobs', 'authority', 'resourceReservation', 'storageBudget', 'artifactBinding']) || !text(input.sessionId) || !text(input.grantId) || !text(input.idempotencyKey) || !text(input.requestDigest) || !safePositive(input.durationMs) || (input.maxActiveJobs !== undefined && !safePositive(input.maxActiveJobs)))
257
+ if (!input || typeof input !== 'object' || ![6, 7, 8, 9, 10, 11, 12].includes(Object.keys(input).length) || !onlyKeys(input, ['identity', 'sessionId', 'grantId', 'idempotencyKey', 'requestDigest', 'durationMs', 'maxActiveJobs', 'authority', 'resourceReservation', 'storageBudget', 'artifactBinding', 'backend']) || !text(input.sessionId) || !text(input.grantId) || !text(input.idempotencyKey) || !text(input.requestDigest) || !safePositive(input.durationMs) || (input.maxActiveJobs !== undefined && !safePositive(input.maxActiveJobs)) || (input.backend !== undefined && input.backend !== 'docker' && input.backend !== 'macos-seatbelt') || (input.backend === 'macos-seatbelt' && input.resourceReservation !== undefined))
243
258
  fail('invalid-input');
244
259
  const binding = input.artifactBinding === undefined ? undefined : artifactBinding(input.artifactBinding);
245
260
  const reservation = input.resourceReservation === undefined ? undefined : input.resourceReservation;
@@ -256,8 +271,8 @@ export class IsolationLedger {
256
271
  const existing = this.#database.prepare('SELECT * FROM isolation_jobs WHERE principal_digest=? AND principal_record_id=? AND principal_version=? AND workspace=? AND agent_preset=? AND session_id=? AND grant_id=? AND idempotency_key=?').get(who.principalDigest, who.principalRecordId, who.principalVersion, who.workspace, who.agentPreset, input.sessionId, input.grantId, input.idempotencyKey);
257
272
  if (existing) {
258
273
  const job = this.#decodeJob(existing);
259
- if (job.requestDigest !== input.requestDigest)
260
- fail('conflict', 'idempotency key has a different request digest');
274
+ if (job.requestDigest !== input.requestDigest || job.backend !== (input.backend ?? 'docker'))
275
+ fail('conflict', 'idempotency key has a different request or backend');
261
276
  return { job, created: false };
262
277
  }
263
278
  const current = this.#grant(input.grantId);
@@ -304,7 +319,8 @@ export class IsolationLedger {
304
319
  }
305
320
  const id = randomUUID();
306
321
  const deadline = Math.min(now + input.durationMs, current.expires_at);
307
- this.#database.prepare("INSERT INTO isolation_jobs(id,grant_id,grant_revision,principal_digest,principal_record_id,principal_version,workspace,agent_preset,session_id,idempotency_key,request_digest,container_name,deadline,reserved_duration_ms,reserved_memory_mib,reserved_workspace_inodes,reserved_storage_bytes,dispatch_attempted,status,version,created_at,updated_at) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0, 'prepared',1,?,?)").run(id, input.grantId, current.revision, who.principalDigest, who.principalRecordId, who.principalVersion, who.workspace, who.agentPreset, input.sessionId, input.idempotencyKey, input.requestDigest, `dsh-isolation-${id}`, deadline, input.durationMs, reservation?.memoryMiB ?? 0, reservation?.workspaceInodes ?? 0, storage?.reservedBytes ?? 0, now, now);
322
+ const native = input.backend === 'macos-seatbelt';
323
+ this.#database.prepare("INSERT INTO isolation_jobs(id,grant_id,grant_revision,principal_digest,principal_record_id,principal_version,workspace,agent_preset,session_id,idempotency_key,request_digest,container_name,backend_kind,native_resource_id,native_nonce,deadline,reserved_duration_ms,reserved_memory_mib,reserved_workspace_inodes,reserved_storage_bytes,dispatch_attempted,status,version,created_at,updated_at) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0, 'prepared',1,?,?)").run(id, input.grantId, current.revision, who.principalDigest, who.principalRecordId, who.principalVersion, who.workspace, who.agentPreset, input.sessionId, input.idempotencyKey, input.requestDigest, native ? null : `dsh-isolation-${id}`, native ? 'macos-seatbelt' : 'docker', native ? `native-${id}` : null, native ? randomUUID() : null, deadline, input.durationMs, reservation?.memoryMiB ?? 0, reservation?.workspaceInodes ?? 0, storage?.reservedBytes ?? 0, now, now);
308
324
  if (binding)
309
325
  this.#database.prepare('UPDATE isolation_jobs SET artifact_binding_json=? WHERE id=?').run(JSON.stringify(binding), id);
310
326
  this.#audit(now, 'job-prepared', id, input.grantId, `revision:${current.revision}${reservation ? `;reservation:memoryMiB:${reservation.memoryMiB},workspaceInodes:${reservation.workspaceInodes}` : ''}${storage ? `;storageBytes:${storage.reservedBytes}` : ''}`);
@@ -389,6 +405,8 @@ export class IsolationLedger {
389
405
  fail('conflict', 'job version differs');
390
406
  if (witness && !job.dispatchAttempted)
391
407
  fail('invalid-state');
408
+ if (job.backend === 'macos-seatbelt' && job.dispatchAttempted && value.status !== 'unknown')
409
+ fail('invalid-state', 'native dispatch requires a durable receipt');
392
410
  if (job.dispatchAttempted && value.status === 'unknown' && value.quiescent)
393
411
  fail('invalid-state', 'dispatch requires independent quiescence evidence');
394
412
  if (job.status !== 'prepared' && job.status !== 'running') {
@@ -411,6 +429,43 @@ export class IsolationLedger {
411
429
  return this.#job(jobId);
412
430
  });
413
431
  }
432
+ /** A Host-verified durable supervisor receipt is the only native dispatch settlement proof. */
433
+ settleNativeReceipt(jobId, expectedVersion, binding, input, authority) {
434
+ const value = result(input);
435
+ if (!text(jobId) || !safePositive(expectedVersion) || value.jobId !== jobId || value.status === 'unknown' || !value.quiescent
436
+ || !binding || !text(binding.requestDigest) || !text(binding.nonce) || !text(binding.nativeResourceId))
437
+ fail('invalid-input');
438
+ const controller = this.#authority(authority);
439
+ if (!controller)
440
+ fail('invalid-input');
441
+ return this.#transaction(() => {
442
+ const now = this.#nowValue();
443
+ this.#requireController(controller, now);
444
+ const job = this.#job(jobId);
445
+ if (!job)
446
+ fail('not-found');
447
+ if (job.version !== expectedVersion)
448
+ fail('conflict');
449
+ if (job.backend !== 'macos-seatbelt' || !job.dispatchAttempted || job.requestDigest !== binding.requestDigest
450
+ || job.nativeNonce !== binding.nonce || job.nativeResourceId !== binding.nativeResourceId)
451
+ fail('invalid-state');
452
+ if (job.result?.quiescent && equal(job.result, value))
453
+ return job;
454
+ if (!['prepared', 'running', 'unknown'].includes(job.status))
455
+ fail('invalid-state');
456
+ const changed = this.#database.prepare("UPDATE isolation_jobs SET status=?, result_json=?, version=version+1, updated_at=? WHERE id=? AND version=? AND status IN ('prepared','running','unknown')").run(value.status, JSON.stringify(value), now, jobId, expectedVersion);
457
+ if (changed.changes !== 1)
458
+ fail('conflict');
459
+ this.#audit(now, 'native-receipt-settled', jobId, job.grantId, value.status);
460
+ return this.#job(jobId);
461
+ });
462
+ }
463
+ findNativeVerifierJob(principalDigest, stateRoot, key) {
464
+ if (!text(principalDigest) || !text(stateRoot) || !text(key))
465
+ fail('invalid-input');
466
+ const row = this.#database.prepare("SELECT * FROM isolation_jobs WHERE backend_kind='macos-seatbelt' AND principal_digest=? AND workspace=? AND idempotency_key=? AND grant_id='verification' AND agent_preset='verification'").get(principalDigest, stateRoot, key);
467
+ return row ? this.#decodeJob(row) : undefined;
468
+ }
414
469
  /** Host-only release after exact cleanup; outcome and origin evidence remain immutable. */
415
470
  settleReconciledUnknown(jobId, expectedVersion, proof, authority) {
416
471
  if (!text(jobId) || !safePositive(expectedVersion) || !proof || !safeTime(proof.checkedAt))
@@ -438,7 +493,7 @@ export class IsolationLedger {
438
493
  fail('not-found');
439
494
  if (job.version !== expectedVersion || !equal(job.creationWitness, original))
440
495
  fail('conflict');
441
- if (!job.dispatchAttempted || job.status !== 'unknown' || !job.result || job.result.quiescent
496
+ if (job.backend !== 'docker' || !job.dispatchAttempted || job.status !== 'unknown' || !job.result || job.result.quiescent
442
497
  || original.requestsSettled !== true || !processExited(original.supervisor))
443
498
  fail('invalid-state');
444
499
  if (original.daemon.engineId !== current.engineId || original.daemon.dockerPath !== current.dockerPath