@dsh-enhanced/assistant-isolation 0.1.65 → 0.1.67

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 (116) hide show
  1. package/README.md +287 -9
  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 +31 -13
  5. package/lib/audit-archive.js.map +1 -1
  6. package/lib/cli.d.ts +7 -3
  7. package/lib/cli.d.ts.map +1 -1
  8. package/lib/cli.js +104 -23
  9. package/lib/cli.js.map +1 -1
  10. package/lib/config.d.ts +15 -2
  11. package/lib/config.d.ts.map +1 -1
  12. package/lib/config.js +49 -9
  13. package/lib/config.js.map +1 -1
  14. package/lib/diagnostics.js +2 -2
  15. package/lib/diagnostics.js.map +1 -1
  16. package/lib/index.d.ts +17 -1
  17. package/lib/index.d.ts.map +1 -1
  18. package/lib/index.js +17 -1
  19. package/lib/index.js.map +1 -1
  20. package/lib/ledger.d.ts +19 -2
  21. package/lib/ledger.d.ts.map +1 -1
  22. package/lib/ledger.js +371 -44
  23. package/lib/ledger.js.map +1 -1
  24. package/lib/linux-cgroups.d.ts +75 -0
  25. package/lib/linux-cgroups.d.ts.map +1 -0
  26. package/lib/linux-cgroups.js +517 -0
  27. package/lib/linux-cgroups.js.map +1 -0
  28. package/lib/linux-execution-contract.d.ts +123 -0
  29. package/lib/linux-execution-contract.d.ts.map +1 -0
  30. package/lib/linux-execution-contract.js +279 -0
  31. package/lib/linux-execution-contract.js.map +1 -0
  32. package/lib/linux-execution.d.ts +123 -0
  33. package/lib/linux-execution.d.ts.map +1 -0
  34. package/lib/linux-execution.js +1264 -0
  35. package/lib/linux-execution.js.map +1 -0
  36. package/lib/linux-job-recovery.d.ts +5 -0
  37. package/lib/linux-job-recovery.d.ts.map +1 -0
  38. package/lib/linux-job-recovery.js +63 -0
  39. package/lib/linux-job-recovery.js.map +1 -0
  40. package/lib/linux-namespace.d.ts +80 -0
  41. package/lib/linux-namespace.d.ts.map +1 -0
  42. package/lib/linux-namespace.js +471 -0
  43. package/lib/linux-namespace.js.map +1 -0
  44. package/lib/linux-repository-admission.d.ts +26 -0
  45. package/lib/linux-repository-admission.d.ts.map +1 -0
  46. package/lib/linux-repository-admission.js +64 -0
  47. package/lib/linux-repository-admission.js.map +1 -0
  48. package/lib/linux-repository-runner.d.ts +54 -0
  49. package/lib/linux-repository-runner.d.ts.map +1 -0
  50. package/lib/linux-repository-runner.js +614 -0
  51. package/lib/linux-repository-runner.js.map +1 -0
  52. package/lib/linux-runner-state-migration.d.ts +94 -0
  53. package/lib/linux-runner-state-migration.d.ts.map +1 -0
  54. package/lib/linux-runner-state-migration.js +463 -0
  55. package/lib/linux-runner-state-migration.js.map +1 -0
  56. package/lib/linux-runner-state.d.ts +53 -0
  57. package/lib/linux-runner-state.d.ts.map +1 -0
  58. package/lib/linux-runner-state.js +332 -0
  59. package/lib/linux-runner-state.js.map +1 -0
  60. package/lib/linux-runtime-source.d.ts +28 -0
  61. package/lib/linux-runtime-source.d.ts.map +1 -0
  62. package/lib/linux-runtime-source.js +237 -0
  63. package/lib/linux-runtime-source.js.map +1 -0
  64. package/lib/linux-runtime.d.ts +37 -0
  65. package/lib/linux-runtime.d.ts.map +1 -0
  66. package/lib/linux-runtime.js +192 -0
  67. package/lib/linux-runtime.js.map +1 -0
  68. package/lib/linux-system-snapshot.d.ts +47 -0
  69. package/lib/linux-system-snapshot.d.ts.map +1 -0
  70. package/lib/linux-system-snapshot.js +704 -0
  71. package/lib/linux-system-snapshot.js.map +1 -0
  72. package/lib/linux-user-namespace.d.ts +79 -0
  73. package/lib/linux-user-namespace.d.ts.map +1 -0
  74. package/lib/linux-user-namespace.js +234 -0
  75. package/lib/linux-user-namespace.js.map +1 -0
  76. package/lib/linux-verifier-runner.d.ts +27 -0
  77. package/lib/linux-verifier-runner.d.ts.map +1 -0
  78. package/lib/linux-verifier-runner.js +346 -0
  79. package/lib/linux-verifier-runner.js.map +1 -0
  80. package/lib/native-cgroup-roots.d.ts +20 -0
  81. package/lib/native-cgroup-roots.d.ts.map +1 -0
  82. package/lib/native-cgroup-roots.js +121 -0
  83. package/lib/native-cgroup-roots.js.map +1 -0
  84. package/lib/native-resources.d.ts +44 -0
  85. package/lib/native-resources.d.ts.map +1 -0
  86. package/lib/native-resources.js +354 -0
  87. package/lib/native-resources.js.map +1 -0
  88. package/lib/probe.d.ts +10 -0
  89. package/lib/probe.d.ts.map +1 -1
  90. package/lib/probe.js +52 -2
  91. package/lib/probe.js.map +1 -1
  92. package/lib/service.d.ts +1 -1
  93. package/lib/service.d.ts.map +1 -1
  94. package/lib/service.js +122 -9
  95. package/lib/service.js.map +1 -1
  96. package/lib/storage.d.ts.map +1 -1
  97. package/lib/storage.js +36 -6
  98. package/lib/storage.js.map +1 -1
  99. package/lib/tools.js +1 -1
  100. package/lib/tools.js.map +1 -1
  101. package/lib/types.d.ts +5 -1
  102. package/lib/types.d.ts.map +1 -1
  103. package/lib/verifier-runner.d.ts +4 -2
  104. package/lib/verifier-runner.d.ts.map +1 -1
  105. package/lib/verifier-runner.js +22 -1
  106. package/lib/verifier-runner.js.map +1 -1
  107. package/lib/version.d.ts +1 -1
  108. package/lib/version.js +1 -1
  109. package/package.json +15 -10
  110. package/runtime/linux-candidate-entry.py +82 -0
  111. package/runtime/linux-namespace-worker.mjs +561 -0
  112. package/runtime/linux-seccomp-policy.LICENSE +202 -0
  113. package/runtime/linux-seccomp-policy.json +886 -0
  114. package/runtime/linux-seccomp.py +106 -0
  115. package/runtime/linux-userns-launcher.py +149 -0
  116. package/runtime/linux-userns-proof.py +299 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linux-repository-runner.js","sourceRoot":"","sources":["../src/linux-repository-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ import { type LinuxRunnerStateSeal } from './linux-runner-state.js';
2
+ export interface LinuxVerifierHandoverInput {
3
+ /** Runner role directory name (audit only); paths are supplied explicitly. */
4
+ name: string;
5
+ /** Physical private state root inside the staging copy (cp target). */
6
+ stageStateRoot: string;
7
+ /** Physical seal destination inside the staging copy. */
8
+ stageSealPath: string;
9
+ /** Logical live state root recorded as the new grant workspace and in the seal. */
10
+ liveStateRoot: string;
11
+ /** Logical live seal path returned in the ref for the owner config. */
12
+ liveSealPath: string;
13
+ /** Digest currently frozen in the staged grant; binds the copy to live authority. */
14
+ oldAuthorityDigest: string;
15
+ /** Recomputed owner authority digest; must differ so request keys never collide. */
16
+ newAuthorityDigest: string;
17
+ /** Pre-upgrade workspace when the home itself is being relocated. */
18
+ oldWorkspace?: string;
19
+ /** Seal the caller already published with resealLinuxRunnerState over the same
20
+ * staging tree. Optional: omitting it keeps the original reseal-on-handover
21
+ * behavior and still refuses a pre-existing staged seal. */
22
+ existingSeal?: LinuxRunnerStateSeal;
23
+ expiresAt: number;
24
+ maxRuns: number;
25
+ maxTotalDurationMs: number;
26
+ /** Injected settlement timestamp; the primitive never reads a clock. */
27
+ now: number;
28
+ }
29
+ export interface LinuxVerifierHandoverResult {
30
+ readonly seal: LinuxRunnerStateSeal;
31
+ readonly jobsMigrated: number;
32
+ readonly activeSettled: number;
33
+ }
34
+ export declare function migrateLinuxVerifierRunnerState(input: LinuxVerifierHandoverInput): LinuxVerifierHandoverResult;
35
+ export interface LinuxRepositoryHandoverInput {
36
+ stageStateRoot: string;
37
+ stageSealPath: string;
38
+ liveStateRoot: string;
39
+ liveSealPath: string;
40
+ }
41
+ /** The repository runner is linux-native only: its state is a brand-new empty
42
+ * sealed ledger, even when verifier ledgers carry migrated Docker history. */
43
+ export declare function prepareLinuxRepositoryHandoverState(input: LinuxRepositoryHandoverInput): LinuxRunnerStateSeal;
44
+ export interface LinuxVerifierHandoverPreparationInput {
45
+ /** Runner role directory name (audit only); paths are supplied explicitly. */
46
+ name: string;
47
+ /** Physical private state root inside the staging copy (cp target). */
48
+ stageStateRoot: string;
49
+ /** Physical seal destination inside the staging copy. */
50
+ stageSealPath: string;
51
+ /** Logical live state root recorded in the seal and returned as the grant workspace. */
52
+ liveStateRoot: string;
53
+ /** Logical live seal path returned in the ref for the owner config. */
54
+ liveSealPath: string;
55
+ }
56
+ export interface LinuxVerifierHandoverPreparation {
57
+ readonly seal: LinuxRunnerStateSeal;
58
+ /** Identity of the staging copy's Docker-era grant. `principalDigest` is the
59
+ * `oldAuthorityDigest` the handover expects; the numeric fields are
60
+ * cross-checks only, because the caller supplies freshly compiled new terms. */
61
+ readonly grant: {
62
+ readonly principalDigest: string;
63
+ readonly revision: number;
64
+ readonly expiresAt: number;
65
+ readonly maxRuns: number;
66
+ readonly maxTotalDurationMs: number;
67
+ };
68
+ }
69
+ export declare function prepareLinuxVerifierHandoverState(input: LinuxVerifierHandoverPreparationInput): LinuxVerifierHandoverPreparation;
70
+ export interface LinuxVerifierStagingPreparation {
71
+ /** `handover` when the staging copy carries the Docker-era verifier ledger;
72
+ * `fresh` when the role never ran under Docker and the staged tree has no
73
+ * ledger at all. */
74
+ readonly mode: 'handover' | 'fresh';
75
+ readonly seal: LinuxRunnerStateSeal;
76
+ /** Only a handover result carries the staged Docker-era grant identity. */
77
+ readonly grant?: LinuxVerifierHandoverPreparation['grant'];
78
+ }
79
+ /**
80
+ * One-shot staging seam for one verifier role of a Docker-era owner Home.
81
+ *
82
+ * The branch is decided from the staged tree, before anything is written: a
83
+ * staged ledger means the role has Docker-era verifier history and must go
84
+ * through prepareLinuxVerifierHandoverState (which upgrades it to v9 and
85
+ * publishes the seal its grant rewrite needs). A role the Docker-era Home never
86
+ * ran has no ledger — the live Home's verifier state directories are empty
87
+ * because that history lives in the Docker-era control plane — so its native
88
+ * state is exactly a fresh install's: an empty v9 ledger sealed under
89
+ * `logicalStateRoot`/`logicalSealPath`. The caller cannot request the weaker
90
+ * path for a role that has history, and a staged seal without a ledger is
91
+ * refused instead of overwritten.
92
+ */
93
+ export declare function prepareLinuxVerifierStagingState(input: LinuxVerifierHandoverPreparationInput): LinuxVerifierStagingPreparation;
94
+ //# sourceMappingURL=linux-runner-state-migration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linux-runner-state-migration.d.ts","sourceRoot":"","sources":["../src/linux-runner-state-migration.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,KAAK,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AA2J5D,MAAM,WAAW,0BAA0B;IACzC,8EAA8E;IAC9E,IAAI,EAAE,MAAM,CAAA;IACZ,uEAAuE;IACvE,cAAc,EAAE,MAAM,CAAA;IACtB,yDAAyD;IACzD,aAAa,EAAE,MAAM,CAAA;IACrB,mFAAmF;IACnF,aAAa,EAAE,MAAM,CAAA;IACrB,uEAAuE;IACvE,YAAY,EAAE,MAAM,CAAA;IACpB,qFAAqF;IACrF,kBAAkB,EAAE,MAAM,CAAA;IAC1B,oFAAoF;IACpF,kBAAkB,EAAE,MAAM,CAAA;IAC1B,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;gEAE4D;IAC5D,YAAY,CAAC,EAAE,oBAAoB,CAAA;IACnC,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,kBAAkB,EAAE,MAAM,CAAA;IAC1B,wEAAwE;IACxE,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAA;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;CAC/B;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,0BAA0B,GAAG,2BAA2B,CAwI9G;AAED,MAAM,WAAW,4BAA4B;IAC3C,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;CACrB;AAED;8EAC8E;AAC9E,wBAAgB,mCAAmC,CAAC,KAAK,EAAE,4BAA4B,GAAG,oBAAoB,CAe7G;AAED,MAAM,WAAW,qCAAqC;IACpD,8EAA8E;IAC9E,IAAI,EAAE,MAAM,CAAA;IACZ,uEAAuE;IACvE,cAAc,EAAE,MAAM,CAAA;IACtB,yDAAyD;IACzD,aAAa,EAAE,MAAM,CAAA;IACrB,wFAAwF;IACxF,aAAa,EAAE,MAAM,CAAA;IACrB,uEAAuE;IACvE,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAA;IACnC;;oFAEgF;IAChF,QAAQ,CAAC,KAAK,EAAE;QACd,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;QAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;QACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;QAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;QACxB,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAA;KACpC,CAAA;CACF;AA6BD,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,qCAAqC,GAC3C,gCAAgC,CAuDlC;AAED,MAAM,WAAW,+BAA+B;IAC9C;;wBAEoB;IACpB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAA;IACnC,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAA;IACnC,2EAA2E;IAC3E,QAAQ,CAAC,KAAK,CAAC,EAAE,gCAAgC,CAAC,OAAO,CAAC,CAAA;CAC3D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,qCAAqC,GAC3C,+BAA+B,CAoBjC"}
@@ -0,0 +1,463 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { chmodSync, closeSync, constants, fstatSync, lstatSync, mkdirSync, openSync, readFileSync, realpathSync, unlinkSync } from 'node:fs';
3
+ import { dirname, isAbsolute, join, resolve } from 'node:path';
4
+ import { DatabaseSync } from 'node:sqlite';
5
+ import { grantDigest, IsolationLedger } from './ledger.js';
6
+ import { linuxRunnerStateSchemaDigest, resealLinuxRunnerState, validateLinuxRunnerStateSeal } from './linux-runner-state.js';
7
+ /**
8
+ * Authorized Docker (or macOS seatbelt) -> linux-native backend handover for a
9
+ * single verifier runner ledger, executed offline against a disposable staging
10
+ * copy of the owner home.
11
+ *
12
+ * Guarantees:
13
+ * - the grant keeps id 'verification' / revision 1; only its identity five,
14
+ * terms and digest are rewritten, with the exact freeze-order byte formula
15
+ * syncGrants uses, so the native runner's first sync is a no-op;
16
+ * - historical job rows keep their identity five columns and are only flagged
17
+ * migrated=1. The unique eight-tuple therefore never collides with a native
18
+ * request (new authority digest) while grant_id-keyed usage keeps counting;
19
+ * - prepared/running rows are settled to unknown/quiescent:false by direct
20
+ * SQL identical to settle()'s terminal update, and their Docker creation
21
+ * witnesses are retired to isolation_audit rather than carried forward;
22
+ * - the Docker-era controller lease is expired inside the same transaction, so
23
+ * the first linux-native claim fences forward immediately instead of waiting
24
+ * for the old owner's wall-clock TTL to lapse;
25
+ * - the ledger is checkpointed with no sidecars and resealed over the staging
26
+ * file identities while recording the logical live paths.
27
+ *
28
+ * A caller that must publish the seal before the handover (so the new authority
29
+ * digest can be recomputed from it) first calls
30
+ * prepareLinuxVerifierHandoverState, which upgrades the staged ledger to v9 and
31
+ * publishes the seal over it (it never reads a clock and performs no audited
32
+ * write). It then passes that ref as `existingSeal` to the handover itself. The primitive then proves the staged
33
+ * seal is that exact reference and that its body still binds the staging tree,
34
+ * performs the same rewrite, and returns the reusable ref instead of resealing.
35
+ * Without `existingSeal` nothing changes: a staged seal is still refused.
36
+ *
37
+ * The primitive never reads a clock and never opens a runner: the orchestrator
38
+ * supplies every value after recompiling the owner authority itself. Because the
39
+ * rewritten grant is pinned to revision 1, the orchestrator must also pass the
40
+ * exact expiresAt/maxRuns/maxTotalDurationMs the upgraded owner configuration
41
+ * grants: a later syncGrants with different terms fails as a revision-digest
42
+ * mismatch, which would only surface after the cutover.
43
+ *
44
+ * Not covered: a linux-native runner whose seal was written under schema 8 is
45
+ * refused (its jobs are native history, and seals require ledgerSchemaVersion 9).
46
+ * Such a state needs an explicit resealLinuxRunnerState({ requireEmpty: false })
47
+ * caller, or discard-and-reinstall; this primitive never silently reinterprets it.
48
+ */
49
+ const DIGEST = /^[a-f0-9]{64}$/u;
50
+ const NAME = /^[a-z0-9][a-z0-9-]{0,63}$/u;
51
+ const UUID = /^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$/u;
52
+ const SEAL_KEYS = ['schemaVersion', 'protocol', 'id', 'kind', 'uid', 'stateRoot', 'ledger', 'ledgerSchemaVersion', 'schemaSha256'];
53
+ const sha = (value) => createHash('sha256').update(value).digest('hex');
54
+ function fail(message) { throw new Error(`Linux runner handover: ${message}`); }
55
+ function canonical(value) {
56
+ return typeof value === 'string' && isAbsolute(value) && resolve(value) === value && value !== '/' && !/[\p{Cc}\\]/u.test(value);
57
+ }
58
+ function positive(value, maximum) {
59
+ return Number.isSafeInteger(value) && value >= 1 && value <= maximum;
60
+ }
61
+ function privateDirectory(path) {
62
+ const info = lstatSync(path);
63
+ if (realpathSync(path) !== path || !info.isDirectory() || info.isSymbolicLink()
64
+ || info.uid !== process.getuid?.() || (info.mode & 0o777) !== 0o700)
65
+ fail('staging directory is not private and canonical');
66
+ }
67
+ function privateSealParent(path) {
68
+ mkdirSync(path, { recursive: true, mode: 0o700 });
69
+ chmodSync(path, 0o700);
70
+ privateDirectory(path);
71
+ }
72
+ function present(path) {
73
+ try {
74
+ lstatSync(path);
75
+ return true;
76
+ }
77
+ catch (error) {
78
+ if (error.code !== 'ENOENT')
79
+ throw error;
80
+ return false;
81
+ }
82
+ }
83
+ function removeSidecar(path) {
84
+ let info;
85
+ try {
86
+ info = lstatSync(path);
87
+ }
88
+ catch (error) {
89
+ if (error.code === 'ENOENT')
90
+ return;
91
+ throw error;
92
+ }
93
+ if (!info.isFile() || info.isSymbolicLink() || info.nlink !== 1 || info.uid !== process.getuid?.())
94
+ fail('ledger sidecar is not a private regular file');
95
+ unlinkSync(path);
96
+ }
97
+ function exact(value, keys) {
98
+ return !!value && typeof value === 'object' && Object.getPrototypeOf(value) === Object.prototype
99
+ && Reflect.ownKeys(value).length === keys.length && keys.every(key => Object.hasOwn(value, key))
100
+ && Object.values(Object.getOwnPropertyDescriptors(value)).every(item => item.enumerable && 'value' in item);
101
+ }
102
+ function sealIdentity(value) {
103
+ return exact(value, ['path', 'dev', 'ino']) && canonical(value.path)
104
+ && Number.isSafeInteger(value.dev) && Number(value.dev) >= 0
105
+ && Number.isSafeInteger(value.ino) && Number(value.ino) >= 0;
106
+ }
107
+ /** Read back a staged seal written by resealLinuxRunnerState. The body records
108
+ * physical staging dev/ino next to the logical live paths, so this proves the
109
+ * reusable ref, the tree and the ledger all still describe the same state. */
110
+ function readStagedSeal(path) {
111
+ const info = lstatSync(path);
112
+ if (!info.isFile() || info.isSymbolicLink() || info.nlink !== 1 || info.uid !== process.getuid?.()
113
+ || (info.mode & 0o777) !== 0o600 || info.size > 16_384)
114
+ fail('existing seal is not a private canonical file');
115
+ const fd = openSync(path, constants.O_RDONLY | constants.O_NOFOLLOW);
116
+ try {
117
+ const opened = fstatSync(fd);
118
+ if (opened.dev !== info.dev || opened.ino !== info.ino)
119
+ fail('existing seal changed while being read');
120
+ const bytes = readFileSync(fd);
121
+ const body = JSON.parse(bytes.toString('utf8'));
122
+ if (!exact(body, SEAL_KEYS) || body.schemaVersion !== 1 || body.protocol !== 'dsh-linux-runner-state/v1'
123
+ || typeof body.id !== 'string' || !UUID.test(body.id) || body.kind !== 'verification'
124
+ || body.uid !== process.getuid?.() || !sealIdentity(body.stateRoot) || !sealIdentity(body.ledger)
125
+ || body.ledgerSchemaVersion !== 9 || typeof body.schemaSha256 !== 'string' || !DIGEST.test(body.schemaSha256))
126
+ fail('existing seal body differs');
127
+ const after = lstatSync(path);
128
+ if (after.dev !== info.dev || after.ino !== info.ino || after.nlink !== 1)
129
+ fail('existing seal changed while being read');
130
+ return { body: body, bytes };
131
+ }
132
+ finally {
133
+ closeSync(fd);
134
+ }
135
+ }
136
+ /** Prove `ref` is the staged seal and still binds the staging copy and the live
137
+ * locations. Runs before any ledger mutation and again before returning it. */
138
+ function assertReusableSeal(input, value) {
139
+ let ref;
140
+ try {
141
+ ref = validateLinuxRunnerStateSeal(value);
142
+ }
143
+ catch {
144
+ fail('invalid handover input');
145
+ }
146
+ if (ref.path !== input.liveSealPath)
147
+ fail('existing seal does not bind the live seal path');
148
+ if (!present(input.stageSealPath))
149
+ fail('existing seal is missing from the staging copy');
150
+ const { body, bytes } = readStagedSeal(input.stageSealPath);
151
+ if (sha(bytes) !== ref.sha256)
152
+ fail('existing seal reference differs from the staged seal');
153
+ const ledgerPath = join(input.stageStateRoot, 'ledger.sqlite');
154
+ if (body.stateRoot.path !== input.liveStateRoot || body.ledger.path !== join(input.liveStateRoot, 'ledger.sqlite'))
155
+ fail('existing seal logical locations differ from the handover');
156
+ let digest;
157
+ try {
158
+ digest = linuxRunnerStateSchemaDigest(ledgerPath);
159
+ }
160
+ catch (error) {
161
+ fail(`existing seal ledger is not sealable (${error.message})`);
162
+ }
163
+ if (body.schemaSha256 !== digest)
164
+ fail('existing seal schema digest differs from the staged ledger');
165
+ const root = lstatSync(input.stageStateRoot), ledger = lstatSync(ledgerPath);
166
+ if (body.stateRoot.dev !== root.dev || body.stateRoot.ino !== root.ino
167
+ || body.ledger.dev !== ledger.dev || body.ledger.ino !== ledger.ino)
168
+ fail('existing seal identities differ from the staging copy');
169
+ return ref;
170
+ }
171
+ export function migrateLinuxVerifierRunnerState(input) {
172
+ if (process.platform !== 'linux' || !process.getuid?.())
173
+ fail('requires non-root Linux');
174
+ if (!input || typeof input !== 'object' || Object.getPrototypeOf(input) !== Object.prototype
175
+ || Reflect.ownKeys(input).some(key => !['name', 'stageStateRoot', 'stageSealPath', 'liveStateRoot', 'liveSealPath',
176
+ 'oldAuthorityDigest', 'newAuthorityDigest', 'oldWorkspace', 'existingSeal', 'expiresAt', 'maxRuns',
177
+ 'maxTotalDurationMs', 'now'].includes(String(key)))
178
+ || typeof input.name !== 'string' || !NAME.test(input.name)
179
+ || !canonical(input.stageStateRoot) || !canonical(input.stageSealPath)
180
+ || !canonical(input.liveStateRoot) || !canonical(input.liveSealPath)
181
+ || (input.oldWorkspace !== undefined && !canonical(input.oldWorkspace))
182
+ || !DIGEST.test(input.oldAuthorityDigest) || !DIGEST.test(input.newAuthorityDigest)
183
+ || input.oldAuthorityDigest === input.newAuthorityDigest
184
+ || !positive(input.expiresAt, Number.MAX_SAFE_INTEGER)
185
+ || !positive(input.maxRuns, 10_000) || !positive(input.maxTotalDurationMs, 86_400_000)
186
+ || !Number.isSafeInteger(input.now) || input.now < 0)
187
+ fail('invalid handover input');
188
+ const oldWorkspace = input.oldWorkspace ?? input.liveStateRoot;
189
+ if (input.stageSealPath === input.stageStateRoot || input.stageSealPath.startsWith(input.stageStateRoot + '/')
190
+ || input.stageStateRoot.startsWith(input.stageSealPath + '/')
191
+ || input.liveSealPath === input.liveStateRoot || input.liveSealPath.startsWith(input.liveStateRoot + '/')
192
+ || input.liveStateRoot.startsWith(input.liveSealPath + '/'))
193
+ fail('state and seal paths are nested');
194
+ privateDirectory(input.stageStateRoot);
195
+ privateDirectory(dirname(input.stageStateRoot));
196
+ const ledgerPath = join(input.stageStateRoot, 'ledger.sqlite');
197
+ let staged;
198
+ try {
199
+ staged = lstatSync(ledgerPath);
200
+ }
201
+ catch {
202
+ fail('verifier ledger is missing from the staging copy');
203
+ }
204
+ if (!staged.isFile() || staged.isSymbolicLink() || staged.uid !== process.getuid() || (staged.mode & 0o777) !== 0o600 || staged.nlink !== 1)
205
+ fail('verifier ledger is not private and canonical');
206
+ // Reuse path: the staged seal is expected, but only the exact caller-published
207
+ // reference that still binds this copy and the live locations is accepted.
208
+ const existingSeal = input.existingSeal === undefined ? undefined : assertReusableSeal(input, input.existingSeal);
209
+ if (existingSeal === undefined && present(input.stageSealPath))
210
+ fail('staging state was already handed over');
211
+ // Opening through the current ledger brings any older schema to v9 (adding the
212
+ // migrated column) using the shipped migration chain; the handover then only
213
+ // performs its own audited, authority-specific rewrite.
214
+ const migrated = new IsolationLedger(ledgerPath, { now: () => input.now });
215
+ migrated.close();
216
+ let activeSettled = 0, jobsMigrated = 0;
217
+ const database = new DatabaseSync(ledgerPath, { enableForeignKeyConstraints: true });
218
+ try {
219
+ database.exec('PRAGMA foreign_keys = ON; PRAGMA busy_timeout = 5000; PRAGMA synchronous = FULL;');
220
+ database.exec('BEGIN IMMEDIATE');
221
+ try {
222
+ if (database.prepare('PRAGMA user_version').get()?.user_version !== 9
223
+ || database.prepare("SELECT value FROM schema_meta WHERE key='schema-version'").get()?.value !== '9')
224
+ fail('ledger is not schema 9');
225
+ const grant = database.prepare('SELECT digest, 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('verification');
226
+ if (!grant)
227
+ fail('verification grant is missing from the staged ledger');
228
+ if (grant.revision !== 1 || grant.principal_version !== 1 || grant.agent_preset !== 'verification'
229
+ || grant.principal_digest !== input.oldAuthorityDigest
230
+ || grant.principal_record_id !== `verification:${input.oldAuthorityDigest}`
231
+ || grant.workspace !== oldWorkspace)
232
+ fail('staged verification grant does not match the live authority');
233
+ if (database.prepare("SELECT 1 FROM isolation_jobs WHERE backend_kind='linux-native' LIMIT 1").get())
234
+ fail('staged ledger already contains linux-native jobs');
235
+ const counts = database.prepare('SELECT COUNT(*) AS total, COALESCE(SUM(CASE WHEN migrated=1 THEN 1 ELSE 0 END),0) AS done FROM isolation_jobs').get();
236
+ if (counts.total > 0 && counts.done === counts.total)
237
+ fail('staged ledger was already handed over');
238
+ if (counts.done !== 0)
239
+ fail('staged ledger is partially migrated');
240
+ jobsMigrated = counts.total;
241
+ const active = database.prepare("SELECT id, version, backend_kind, dispatch_attempted, creation_witness_json FROM isolation_jobs WHERE status IN ('prepared','running')").all();
242
+ const audit = database.prepare('INSERT INTO isolation_audit(occurred_at, action, job_id, grant_id, detail) VALUES (?, ?, ?, ?, ?)');
243
+ const settle = database.prepare("UPDATE isolation_jobs SET status='unknown', result_json=?, creation_witness_json=NULL, version=version+1, updated_at=? WHERE id=? AND version=? AND status IN ('prepared','running')");
244
+ for (const job of active) {
245
+ audit.run(input.now, 'backend-handover-witness-retired', job.id, 'verification', JSON.stringify({ backend: job.backend_kind, dispatchAttempted: job.dispatch_attempted,
246
+ witnessSha256: job.creation_witness_json === null ? null : sha(job.creation_witness_json) }));
247
+ const result = { jobId: job.id, status: 'unknown', quiescent: false, stdout: '', stderr: '', artifacts: [], reason: 'verification-recovery-no-replay' };
248
+ const changed = settle.run(JSON.stringify(result), input.now, job.id, job.version);
249
+ if (changed.changes !== 1)
250
+ fail('active job settlement changed an unexpected row');
251
+ activeSettled += 1;
252
+ }
253
+ // Identity five columns of every historical row stay untouched; the row is
254
+ // only fenced from replay, capacity and recovery. Terminal rows keep their
255
+ // witnesses and results byte-for-byte.
256
+ const flagged = database.prepare('UPDATE isolation_jobs SET migrated=1 WHERE migrated=0').run();
257
+ if (flagged.changes !== jobsMigrated)
258
+ fail('job migration count differs');
259
+ const next = {
260
+ principalDigest: input.newAuthorityDigest,
261
+ principalRecordId: `verification:${input.newAuthorityDigest}`,
262
+ principalVersion: 1,
263
+ workspace: input.liveStateRoot,
264
+ agentPreset: 'verification',
265
+ id: 'verification', revision: 1,
266
+ expiresAt: input.expiresAt, maxRuns: input.maxRuns, maxTotalDurationMs: input.maxTotalDurationMs,
267
+ };
268
+ const rewritten = database.prepare('UPDATE isolation_grants SET digest=?, revision=1, expires_at=?, max_runs=?, max_total_duration_ms=?, revoked=0, revoke_reason=NULL, principal_digest=?, principal_record_id=?, principal_version=?, workspace=?, agent_preset=? WHERE id=?')
269
+ .run(grantDigest(next), input.expiresAt, input.maxRuns, input.maxTotalDurationMs, next.principalDigest, next.principalRecordId, next.principalVersion, next.workspace, next.agentPreset, 'verification');
270
+ if (rewritten.changes !== 1)
271
+ fail('verification grant rewrite changed an unexpected row');
272
+ // Retire the Docker-era controller lease in the same transaction. The
273
+ // staged row still names the old owner UUID with a wall-clock expiry, so
274
+ // claimController would reject the new owner until that TTL lapsed; an
275
+ // expired lease makes the first native claim fence forward immediately.
276
+ const retired = database.prepare('UPDATE isolation_controller SET expires_at=? WHERE singleton=1').run(input.now);
277
+ if (retired.changes > 1)
278
+ fail('controller retirement changed an unexpected row');
279
+ const backends = database.prepare('SELECT DISTINCT backend_kind AS backend FROM isolation_jobs ORDER BY backend_kind').all();
280
+ audit.run(input.now, 'backend-handover-controller-retired', null, 'verification', JSON.stringify({ leasesRetired: retired.changes }));
281
+ audit.run(input.now, 'backend-handover', null, 'verification', JSON.stringify({ name: input.name, from: backends.map(item => item.backend), to: 'linux-native',
282
+ jobs: jobsMigrated, active: activeSettled,
283
+ fromAuthority: input.oldAuthorityDigest, toAuthority: input.newAuthorityDigest }));
284
+ database.exec('COMMIT');
285
+ }
286
+ catch (error) {
287
+ try {
288
+ database.exec('ROLLBACK');
289
+ }
290
+ catch { /* Preserve the original failure. */ }
291
+ throw error;
292
+ }
293
+ const checkpoint = database.prepare('PRAGMA wal_checkpoint(TRUNCATE)').get();
294
+ if (!checkpoint || checkpoint.busy !== 0)
295
+ fail('ledger checkpoint did not complete');
296
+ }
297
+ finally {
298
+ database.close();
299
+ }
300
+ if (present(`${ledgerPath}-journal`))
301
+ fail('staged ledger left a rollback journal behind');
302
+ removeSidecar(`${ledgerPath}-wal`);
303
+ removeSidecar(`${ledgerPath}-shm`);
304
+ chmodSync(ledgerPath, 0o600);
305
+ if (existingSeal !== undefined) {
306
+ // The published seal is returned unchanged, so prove the rewrite left the
307
+ // sealed identities and schema exactly as they were before the transaction.
308
+ return Object.freeze({ seal: assertReusableSeal(input, existingSeal), jobsMigrated, activeSettled });
309
+ }
310
+ privateSealParent(dirname(input.stageSealPath));
311
+ const seal = resealLinuxRunnerState({
312
+ stateRoot: input.stageStateRoot, sealPath: input.stageSealPath, kind: 'verification',
313
+ logicalStateRoot: input.liveStateRoot, logicalSealPath: input.liveSealPath,
314
+ });
315
+ return Object.freeze({ seal, jobsMigrated, activeSettled });
316
+ }
317
+ /** The repository runner is linux-native only: its state is a brand-new empty
318
+ * sealed ledger, even when verifier ledgers carry migrated Docker history. */
319
+ export function prepareLinuxRepositoryHandoverState(input) {
320
+ if (process.platform !== 'linux' || !process.getuid?.())
321
+ fail('requires non-root Linux');
322
+ if (!input || typeof input !== 'object' || Object.getPrototypeOf(input) !== Object.prototype
323
+ || Reflect.ownKeys(input).length !== 4
324
+ || !canonical(input.stageStateRoot) || !canonical(input.stageSealPath)
325
+ || !canonical(input.liveStateRoot) || !canonical(input.liveSealPath))
326
+ fail('invalid repository handover input');
327
+ privateDirectory(dirname(input.stageStateRoot));
328
+ mkdirSync(input.stageStateRoot, { recursive: true, mode: 0o700 });
329
+ chmodSync(input.stageStateRoot, 0o700);
330
+ privateDirectory(input.stageStateRoot);
331
+ privateSealParent(dirname(input.stageSealPath));
332
+ return resealLinuxRunnerState({
333
+ stateRoot: input.stageStateRoot, sealPath: input.stageSealPath, kind: 'repository', requireEmpty: true,
334
+ logicalStateRoot: input.liveStateRoot, logicalSealPath: input.liveSealPath,
335
+ });
336
+ }
337
+ /**
338
+ * Publish the verification seal over an unsealed staging copy before the new
339
+ * owner authority digest is compiled, then let migrateLinuxVerifierRunnerState
340
+ * (given this exact ref as `existingSeal`) perform the audited rewrite.
341
+ *
342
+ * Opening through the shipped ledger upgrades an older staging copy to v9 with
343
+ * the same chain the handover would use; that path is data-only, so the schema
344
+ * digest sealed here survives the later grant/job rewrite. One-shot by design:
345
+ * an existing staged seal means the handover already ran, and a staging copy
346
+ * whose grant is not the live Docker-era owner grant is never sealed.
347
+ */
348
+ function verifierPreparationInput(input) {
349
+ const uid = process.getuid?.();
350
+ if (process.platform !== 'linux' || !uid)
351
+ fail('requires non-root Linux');
352
+ if (!input || typeof input !== 'object' || Object.getPrototypeOf(input) !== Object.prototype
353
+ || Reflect.ownKeys(input).length !== 5
354
+ || !['name', 'stageStateRoot', 'stageSealPath', 'liveStateRoot', 'liveSealPath'].every(key => Object.hasOwn(input, key))
355
+ || typeof input.name !== 'string' || !NAME.test(input.name)
356
+ || !canonical(input.stageStateRoot) || !canonical(input.stageSealPath)
357
+ || !canonical(input.liveStateRoot) || !canonical(input.liveSealPath))
358
+ fail('invalid verifier handover preparation input');
359
+ if (input.stageSealPath === input.stageStateRoot || input.stageSealPath.startsWith(input.stageStateRoot + '/')
360
+ || input.stageStateRoot.startsWith(input.stageSealPath + '/')
361
+ || input.liveSealPath === input.liveStateRoot || input.liveSealPath.startsWith(input.liveStateRoot + '/')
362
+ || input.liveStateRoot.startsWith(input.liveSealPath + '/'))
363
+ fail('state and seal paths are nested');
364
+ return uid;
365
+ }
366
+ export function prepareLinuxVerifierHandoverState(input) {
367
+ const uid = verifierPreparationInput(input);
368
+ privateDirectory(dirname(input.stageStateRoot));
369
+ privateDirectory(input.stageStateRoot);
370
+ const ledgerPath = join(input.stageStateRoot, 'ledger.sqlite');
371
+ let staged;
372
+ try {
373
+ staged = lstatSync(ledgerPath);
374
+ }
375
+ catch {
376
+ fail('verifier ledger is missing from the staging copy');
377
+ }
378
+ if (!staged.isFile() || staged.isSymbolicLink() || staged.uid !== uid || (staged.mode & 0o777) !== 0o600 || staged.nlink !== 1)
379
+ fail('verifier ledger is not private and canonical');
380
+ // Publish exactly once: a staged seal is the handover's fingerprint, so it is
381
+ // never replaced on trust (reseal would otherwise unlink it).
382
+ if (present(input.stageSealPath))
383
+ fail('staging state was already handed over');
384
+ // The caller's `now` belongs to the audited handover; this pre-seal step only
385
+ // brings the schema forward, so it deliberately uses the ledger's own clock.
386
+ new IsolationLedger(ledgerPath).close();
387
+ const database = new DatabaseSync(ledgerPath, { enableForeignKeyConstraints: true });
388
+ let grant;
389
+ try {
390
+ database.exec('PRAGMA foreign_keys = ON; PRAGMA busy_timeout = 5000; PRAGMA synchronous = FULL;');
391
+ grant = database.prepare('SELECT revision, expires_at, max_runs, max_total_duration_ms, revoked, principal_digest,'
392
+ + ' principal_record_id, principal_version, agent_preset FROM isolation_grants WHERE id=?').get('verification');
393
+ }
394
+ finally {
395
+ try {
396
+ database.exec('PRAGMA wal_checkpoint(TRUNCATE)');
397
+ }
398
+ catch { /* Sidecars are probed below. */ }
399
+ database.close();
400
+ }
401
+ removeSidecar(`${ledgerPath}-wal`);
402
+ removeSidecar(`${ledgerPath}-shm`);
403
+ chmodSync(ledgerPath, 0o600);
404
+ if (!grant)
405
+ fail('verifier grant is not the staged owner grant');
406
+ const { revision, expires_at: expiresAt, max_runs: maxRuns, max_total_duration_ms: maxTotalDurationMs, revoked, principal_digest: principalDigest, principal_record_id: principalRecordId, principal_version: principalVersion, agent_preset: preset } = grant;
407
+ if (revision !== 1 || principalVersion !== 1 || preset !== 'verification' || revoked !== 0
408
+ || typeof principalDigest !== 'string' || !DIGEST.test(principalDigest)
409
+ || principalRecordId !== `verification:${principalDigest}`)
410
+ fail('verifier grant is not the staged owner grant');
411
+ // The caps are the ceilings the native runner config can express, so oversized
412
+ // Docker-era terms are refused with their own cause instead of being reported
413
+ // as an identity mismatch.
414
+ if (!positive(expiresAt, Number.MAX_SAFE_INTEGER)
415
+ || !positive(maxRuns, 10_000) || !positive(maxTotalDurationMs, 86_400_000))
416
+ fail('verifier grant exceeds the native handover budget');
417
+ privateSealParent(dirname(input.stageSealPath));
418
+ const seal = resealLinuxRunnerState({
419
+ stateRoot: input.stageStateRoot, sealPath: input.stageSealPath, kind: 'verification', requireEmpty: false,
420
+ logicalStateRoot: input.liveStateRoot, logicalSealPath: input.liveSealPath,
421
+ });
422
+ return Object.freeze({
423
+ seal,
424
+ grant: Object.freeze({ principalDigest, revision: 1, expiresAt, maxRuns, maxTotalDurationMs }),
425
+ });
426
+ }
427
+ /**
428
+ * One-shot staging seam for one verifier role of a Docker-era owner Home.
429
+ *
430
+ * The branch is decided from the staged tree, before anything is written: a
431
+ * staged ledger means the role has Docker-era verifier history and must go
432
+ * through prepareLinuxVerifierHandoverState (which upgrades it to v9 and
433
+ * publishes the seal its grant rewrite needs). A role the Docker-era Home never
434
+ * ran has no ledger — the live Home's verifier state directories are empty
435
+ * because that history lives in the Docker-era control plane — so its native
436
+ * state is exactly a fresh install's: an empty v9 ledger sealed under
437
+ * `logicalStateRoot`/`logicalSealPath`. The caller cannot request the weaker
438
+ * path for a role that has history, and a staged seal without a ledger is
439
+ * refused instead of overwritten.
440
+ */
441
+ export function prepareLinuxVerifierStagingState(input) {
442
+ verifierPreparationInput(input);
443
+ if (!present(input.stageStateRoot)) {
444
+ mkdirSync(input.stageStateRoot, { recursive: true, mode: 0o700 });
445
+ chmodSync(input.stageStateRoot, 0o700);
446
+ }
447
+ privateDirectory(dirname(input.stageStateRoot));
448
+ privateDirectory(input.stageStateRoot);
449
+ const ledgerPath = join(input.stageStateRoot, 'ledger.sqlite');
450
+ if (present(ledgerPath)) {
451
+ const handedOver = prepareLinuxVerifierHandoverState(input);
452
+ return Object.freeze({ mode: 'handover', seal: handedOver.seal, grant: handedOver.grant });
453
+ }
454
+ if (present(input.stageSealPath))
455
+ fail('staging state was already sealed or handed over');
456
+ privateSealParent(dirname(input.stageSealPath));
457
+ const seal = resealLinuxRunnerState({
458
+ stateRoot: input.stageStateRoot, sealPath: input.stageSealPath, kind: 'verification', requireEmpty: true,
459
+ logicalStateRoot: input.liveStateRoot, logicalSealPath: input.liveSealPath,
460
+ });
461
+ return Object.freeze({ mode: 'fresh', seal });
462
+ }
463
+ //# sourceMappingURL=linux-runner-state-migration.js.map