@outerlayer/cli 0.25.2 → 0.26.1

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 (69) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.md +0 -1
  3. package/dist/{agent-setup-YHFZB2BC.js → agent-setup-PZYQWN4H.js} +3 -3
  4. package/dist/{build-ONH22PN5.js → build-JK2DLT6X.js} +2 -2
  5. package/dist/build-info.json +1 -1
  6. package/dist/{builder-WPULEVMY.js → builder-TMA25KRR.js} +2 -2
  7. package/dist/{check-SSEVZJN5.js → check-3CBJVXZD.js} +19 -19
  8. package/dist/{chunk-APBTVIM4.js → chunk-4R24DSL2.js} +4 -4
  9. package/dist/{chunk-H3AEZIYB.js → chunk-6M4LNO22.js} +1 -1
  10. package/dist/{chunk-F4267APM.js → chunk-7I6GZSN3.js} +1 -1
  11. package/dist/{chunk-PCADYUQT.js → chunk-7NKVMAP6.js} +2 -2
  12. package/dist/{chunk-3RBQSPW5.js → chunk-AINUN2TT.js} +1 -1
  13. package/dist/{chunk-Z453MOUL.js → chunk-BMWIUSTZ.js} +3 -3
  14. package/dist/{chunk-WVM6PM2N.js → chunk-D7V33CAH.js} +3 -3
  15. package/dist/{chunk-P7UQZFNY.js → chunk-EORWWFPA.js} +2 -2
  16. package/dist/{chunk-CP24ZXXR.js → chunk-GAWZ7ATV.js} +12 -9
  17. package/dist/{chunk-WXKAHUGA.js → chunk-GQOT37HL.js} +5 -5
  18. package/dist/{chunk-FQCLEH34.js → chunk-HXFRJKMU.js} +2 -2
  19. package/dist/{chunk-XBCJI6SV.js → chunk-IIFMFX6J.js} +2 -2
  20. package/dist/{chunk-Z6SWQV77.js → chunk-ILL2CWOU.js} +16 -9
  21. package/dist/{chunk-QBENN6GA.js → chunk-JUTN2HUP.js} +2 -2
  22. package/dist/{chunk-ITP76BST.js → chunk-PNHNKMA3.js} +3 -3
  23. package/dist/{chunk-C3AMVSMS.js → chunk-QIIMZC7W.js} +1 -1
  24. package/dist/{chunk-GJZEUQ6D.js → chunk-QRZLUUNN.js} +13 -0
  25. package/dist/{chunk-WMEADVIX.js → chunk-TBJ7KO2A.js} +8 -8
  26. package/dist/{chunk-G2T4HCGT.js → chunk-TEVO3RUV.js} +1 -1
  27. package/dist/{chunk-CLUUAX6O.js → chunk-TPAF24PK.js} +2 -2
  28. package/dist/{chunk-D4UDE2AP.js → chunk-W3NVHOCS.js} +1 -1
  29. package/dist/{chunk-DZUANBKP.js → chunk-XPKI5OMT.js} +4 -4
  30. package/dist/{claude-launcher-FXFXYW2E.js → claude-launcher-O2U6P6ZD.js} +1 -1
  31. package/dist/{cli-ZBZFCRTK.js → cli-7HVTFJZO.js} +64 -113
  32. package/dist/{command-A2XBWQGB.js → command-2Q5UDZUO.js} +11 -11
  33. package/dist/{connect-cmd-HAFFAVEO.js → connect-cmd-2JHSLBXK.js} +2 -2
  34. package/dist/{container-start-L6LCWH6Z.js → container-start-SCCR2PRD.js} +12 -12
  35. package/dist/{control-plane-launch-FRK5IZXC.js → control-plane-launch-654RV5PO.js} +2 -2
  36. package/dist/{docker-FATVQG5M.js → docker-4X2A5HDY.js} +2 -2
  37. package/dist/{doctor-EI22PDR5.js → doctor-3QA5Y5HG.js} +16 -13
  38. package/dist/{emit-artifact-cmd-Y2GMWCSD.js → emit-artifact-cmd-SFUSDWZM.js} +6 -6
  39. package/dist/{emit-criteria-cmd-LI7OLHEC.js → emit-criteria-cmd-VMZIRJCQ.js} +3 -3
  40. package/dist/{emit-finding-cmd-3LU7C356.js → emit-finding-cmd-KMJNYQI7.js} +3 -3
  41. package/dist/{emit-result-cmd-NKAKRBW2.js → emit-result-cmd-NEICBIDU.js} +6 -6
  42. package/dist/{emit-step-cmd-JQ23TRF5.js → emit-step-cmd-AUHA3EXY.js} +4 -4
  43. package/dist/{governing-source-73APROH6.js → governing-source-J5DF65X5.js} +6 -6
  44. package/dist/{hook-fast-GD7F2EBL.js → hook-fast-REXH5P6R.js} +1 -1
  45. package/dist/index.js +4 -4
  46. package/dist/{init-MRREKVT5.js → init-NEUTUGEQ.js} +12 -12
  47. package/dist/{init-ZN47OUB3.js → init-UMON3HZK.js} +12 -12
  48. package/dist/{init-cmd-ZGQ6HMZD.js → init-cmd-54DMRBNO.js} +6 -6
  49. package/dist/{init-update-HTHYQOHU.js → init-update-FJDKY4SJ.js} +4 -4
  50. package/dist/{loop-JTKSTVDV.js → loop-6JKW5QR5.js} +19 -19
  51. package/dist/{machine-RCIMAKOA.js → machine-XF55O56X.js} +11 -11
  52. package/dist/{mcp-serve-cmd-QBFQN553.js → mcp-serve-cmd-U5N5DK3H.js} +1 -1
  53. package/dist/{runner-identity-C2O6Q3RR.js → runner-identity-NH6RLVMI.js} +2 -2
  54. package/dist/{runner-key-ENQLA4Q6.js → runner-key-FUNSJ564.js} +12 -12
  55. package/dist/{session-sender-535VA2CA.js → session-sender-P5GVOIUY.js} +7 -7
  56. package/dist/{spec-cmd-KERLZ6GJ.js → spec-cmd-HMFW552G.js} +4 -4
  57. package/dist/{status-OTZ3VX47.js → status-ULZVKQ7G.js} +15 -15
  58. package/dist/{sync-cmd-EIRKU5FA.js → sync-cmd-VCLCOME6.js} +6 -6
  59. package/dist/{watch-SMF5CW5T.js → watch-SVGL24OX.js} +6 -6
  60. package/dist/{work-claim-cmd-JCUBRZKN.js → work-claim-cmd-WQF5RTCT.js} +6 -6
  61. package/dist/{work-cmd-C3CFJZYD.js → work-cmd-TGSNYPSG.js} +4 -4
  62. package/dist/{work-comment-cmd-NDE3O7PN.js → work-comment-cmd-O3FVX6M4.js} +4 -4
  63. package/dist/{work-logs-cmd-KUGBBJAO.js → work-logs-cmd-2RMJFVNZ.js} +4 -4
  64. package/dist/{work-open-pr-cmd-TFIGKPRL.js → work-open-pr-cmd-5EP7BKRE.js} +5 -5
  65. package/dist/{work-pr-cmd-KKCLXRJL.js → work-pr-cmd-DKTBEFHO.js} +4 -4
  66. package/dist/{work-stop-cmd-QUEDBM4Q.js → work-stop-cmd-TNJYBLMN.js} +4 -4
  67. package/package.json +2 -2
  68. package/dist/import-capture-cmd-TCOKNVBM.js +0 -73
  69. package/dist/import-ruler-cmd-VJOHOJQ7.js +0 -173
package/CHANGELOG.md CHANGED
@@ -1,5 +1,28 @@
1
1
  # @outerlayer/cli
2
2
 
3
+ ## 0.26.1
4
+
5
+ ### Patch Changes
6
+
7
+ - a5a32a4: Pin a saved credential to its own gateway. A login or API key stored in the
8
+ config file is now sent only to the gateway address it was created for. If
9
+ `OUTERLAYER_URL` or `--url` names a different host and no key is supplied for
10
+ that call, the command refuses instead of sending the saved credential — and
11
+ the session transcripts a sync carries with it — to a host you did not choose.
12
+ To reach a different gateway, pass its own key: `--url <addr> --api-key <key>`,
13
+ or set `OUTERLAYER_API_KEY` beside `OUTERLAYER_URL`.
14
+
15
+ ## 0.26.0
16
+
17
+ ### Minor Changes
18
+
19
+ - 9dab934: Remove `outerlayer import capture`, `outerlayer import ruler` and `outerlayer hooks install-git`. `outerlayer init` installs the maintained skills, and `outerlayer init --update` refreshes them. `outerlayer init` and `outerlayer sync` remove the git hooks that an earlier version installed.
20
+
21
+ ### Patch Changes
22
+
23
+ - 847b8eb: MicroVM builds use Firecracker 1.17.0. On a host with the root helper, run `outerlayer runner install --service --replace` so its builds use it too. Until then, `outerlayer doctor` and each build's log say the helper runs an older Firecracker.
24
+ - 0405fed: MicroVM builds no longer stop after a CLI update that pins a new Firecracker, guest kernel or guest helper. The runner keeps each file under its pinned hash and downloads the new one.
25
+
3
26
  ## 0.25.2
4
27
 
5
28
  ### Patch Changes
package/README.md CHANGED
@@ -437,7 +437,6 @@ before it gives up.
437
437
  | `outerlayer daemon` | Run the copy-out daemon in the foreground (`--once` for a single sweep, which uploads nothing). Once cloud credentials exist, it also streams a launched session's new turns as they land — see Privacy, above. `outerlayer watch` is the former name and still works, with a warning. |
438
438
  | `outerlayer doctor` | Check the installation: hooks, status-line freshness, sync health and, with a factory key, the GitHub App access builds need. `--json` prints the checks and a summary for scripts. |
439
439
  | `outerlayer context emit [--check]` | Compile `.outerlayer/` into each configured target tool's native files (targets come from `.outerlayer/config.json`). `--check` computes outputs and diffs against disk without writing (CI mode). Bare `outerlayer emit` with no name still compiles, with a deprecation warning. |
440
- | `outerlayer import ruler` | Port a `.ruler/` tree ([Ruler](https://github.com/intellectronica/ruler)) into the equivalent `.outerlayer/` tree — mostly a rename; never overwrites an existing `.outerlayer/`. |
441
440
  | `outerlayer hooks wrap` / `outerlayer hooks unwrap` | Auto-wrap (or undo wrapping) `PreToolUse`/`PostToolUse` hooks for execution evidence — one spawn per firing. |
442
441
  | `outerlayer emit artifact <file> --caption <text> [--for <criterion-id>] [--pr <n>]` | Upload a proof artifact — screenshot, recording, report, or log — with its caption. Inside a recorded session it spools locally and ships on the next `sync`; otherwise it uploads immediately, anchored to a pull request or the current checkout. `--replaces` retires artifacts an earlier run uploaded. A JUnit XML file bound with `--for` proves a criterion that declares `test` proof; `--test <name[=path:line]>` binds only the named tests. |
443
442
  | `outerlayer emit <name> --result <pass\|fail> [--link <url>] [--body <text>\|--body-file <path>] --item <number>` | Record one named check's outcome on a work item. A check that ran carries the run URL as its proof (`--link`); a judgment you are making yourself carries one sentence (`--body`, or `--body-file` to read it from a file — `-` reads standard input). A `fail` needs at least one of the two; a `pass` needs neither. `--item` names the work item by the number printed when the item was created — always required, in or out of a recorded session; a session records checks on its own item like any other, stored as the session's, but cannot clear a person's fail. Prints the recorded check's id. Who recorded it comes from your API key, never from what you send. |
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { keepHandWritten, runAgentSetup } from './chunk-H3AEZIYB.js';
3
+ export { keepHandWritten, runAgentSetup } from './chunk-6M4LNO22.js';
4
4
  import './chunk-WX2WEERU.js';
5
5
  import './chunk-VJBFQP3H.js';
6
- import './chunk-D4UDE2AP.js';
6
+ import './chunk-W3NVHOCS.js';
7
7
  import './chunk-MQ743JX3.js';
8
- import './chunk-GJZEUQ6D.js';
8
+ import './chunk-QRZLUUNN.js';
9
9
  import './chunk-ZJSNLVCE.js';
10
10
  import './chunk-BJ3KTMDH.js';
11
11
  import './chunk-YVZJ6GKF.js';
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { buildRepositoryImage } from './chunk-3RBQSPW5.js';
3
+ export { buildRepositoryImage } from './chunk-AINUN2TT.js';
4
4
  import './chunk-PYSKSROG.js';
5
5
  import './chunk-JBJTC3UU.js';
6
- export { RecipeError } from './chunk-APBTVIM4.js';
6
+ export { RecipeError } from './chunk-4R24DSL2.js';
7
7
  import './chunk-L4CW6LZQ.js';
8
8
  import './chunk-2K3TCQHW.js';
9
9
  import './chunk-JGD5TWQ2.js';
@@ -1 +1 @@
1
- {"id":"2026-10-16T13:07:36.429Z+ced0b55","root":"/home/runner/_work/outerlayer/outerlayer","pkg":"outerlayer"}
1
+ {"id":"2026-10-16T15:29:16.974Z+c2e9a47","root":"/home/runner/_work/outerlayer/outerlayer","pkg":"outerlayer"}
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { MIN_BUILDX_VERSION, builderName, builderSpec, buildxState, ensureBuilder, ensureFailureCount, isOutOfMemory, proxyEnvironment, trackImageBuild } from './chunk-F4267APM.js';
4
- import './chunk-APBTVIM4.js';
3
+ export { MIN_BUILDX_VERSION, builderName, builderSpec, buildxState, ensureBuilder, ensureFailureCount, isOutOfMemory, proxyEnvironment, trackImageBuild } from './chunk-7I6GZSN3.js';
4
+ import './chunk-4R24DSL2.js';
5
5
  import './chunk-7RQ73DLO.js';
6
6
  import './chunk-QE3UQAHK.js';
7
7
  import './chunk-QZBXLLTV.js';
@@ -1,53 +1,53 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { probeCredentials } from './chunk-WMEADVIX.js';
4
- import './chunk-CP24ZXXR.js';
3
+ import { probeCredentials } from './chunk-TBJ7KO2A.js';
4
+ import './chunk-GAWZ7ATV.js';
5
5
  import './chunk-TKL74NLB.js';
6
6
  import './chunk-ZVB57WI6.js';
7
7
  import './chunk-6FAP657M.js';
8
8
  import './chunk-3JVYMD4G.js';
9
9
  import './chunk-YETTWTAY.js';
10
10
  import './chunk-TPKYTORP.js';
11
- import './chunk-XBCJI6SV.js';
11
+ import './chunk-IIFMFX6J.js';
12
12
  import './chunk-2N72GPS2.js';
13
13
  import './chunk-UNF7MWEL.js';
14
- import './chunk-ITP76BST.js';
15
- import './chunk-P7UQZFNY.js';
14
+ import './chunk-PNHNKMA3.js';
15
+ import './chunk-EORWWFPA.js';
16
16
  import './chunk-ESVW4MJY.js';
17
- import { placeholderQueues, placeholderProblem, permissionModeProblems, permissionModeProblem, needsClaudeCredential, claudeCredentialCheck, claimPermissionProblem, formerSkillQueues, formerSkillProblem } from './chunk-Z453MOUL.js';
17
+ import { placeholderQueues, placeholderProblem, permissionModeProblems, permissionModeProblem, needsClaudeCredential, claudeCredentialCheck, claimPermissionProblem, formerSkillQueues, formerSkillProblem } from './chunk-BMWIUSTZ.js';
18
18
  import './chunk-4IFKLYMM.js';
19
19
  import './chunk-YYYRBYWG.js';
20
20
  import './chunk-TBT347UY.js';
21
- import './chunk-QBENN6GA.js';
22
- import './chunk-PCADYUQT.js';
23
- import './chunk-Z6SWQV77.js';
21
+ import './chunk-JUTN2HUP.js';
22
+ import './chunk-7NKVMAP6.js';
23
+ import './chunk-ILL2CWOU.js';
24
24
  import './chunk-665QWBNW.js';
25
25
  import './chunk-TQMI335S.js';
26
26
  import './chunk-5PMQDQFV.js';
27
27
  import './chunk-MLD2NA7N.js';
28
28
  import { parseRunnerEnv } from './chunk-6MZSX4M7.js';
29
- import './chunk-3RBQSPW5.js';
29
+ import './chunk-AINUN2TT.js';
30
30
  import './chunk-PYSKSROG.js';
31
31
  import './chunk-JBJTC3UU.js';
32
32
  import './chunk-OGFGZQA3.js';
33
- import './chunk-F4267APM.js';
34
- import './chunk-APBTVIM4.js';
33
+ import './chunk-7I6GZSN3.js';
34
+ import './chunk-4R24DSL2.js';
35
35
  import './chunk-HPOEVC2V.js';
36
36
  import './chunk-XGJUNNXL.js';
37
- import './chunk-WVM6PM2N.js';
38
- import './chunk-DZUANBKP.js';
39
- import './chunk-FQCLEH34.js';
40
- import './chunk-G2T4HCGT.js';
37
+ import './chunk-D7V33CAH.js';
38
+ import './chunk-XPKI5OMT.js';
39
+ import './chunk-HXFRJKMU.js';
40
+ import './chunk-TEVO3RUV.js';
41
41
  import './chunk-BUP5N3X6.js';
42
42
  import './chunk-XSPA5ODY.js';
43
43
  import './chunk-GOSFARMS.js';
44
44
  import { loadRunnerConfig, RunnerConfigError, checkHooks } from './chunk-JWRX5ZTT.js';
45
45
  import './chunk-UXYLWVTQ.js';
46
46
  import './chunk-7RQ73DLO.js';
47
- import './chunk-D4UDE2AP.js';
47
+ import './chunk-W3NVHOCS.js';
48
48
  import './chunk-MQ743JX3.js';
49
- import './chunk-GJZEUQ6D.js';
50
- import './chunk-C3AMVSMS.js';
49
+ import './chunk-QRZLUUNN.js';
50
+ import './chunk-QIIMZC7W.js';
51
51
  import './chunk-ZJSNLVCE.js';
52
52
  import './chunk-DYEFPYME.js';
53
53
  import './chunk-BKO6JEZI.js';
@@ -242,12 +242,12 @@ var MICROVM_ARCHES = ["x86_64"];
242
242
  function firecrackerArch(nodeArch) {
243
243
  return nodeArch === "x64" ? "x86_64" : nodeArch === "arm64" ? "aarch64" : nodeArch;
244
244
  }
245
- var FIRECRACKER_VERSION = "1.16.2";
245
+ var FIRECRACKER_VERSION = "1.17.0";
246
246
  var FIRECRACKER_SHA256 = {
247
- x86_64: "32e3cdcd4081f91fe2b024a266f57dcb3b4e5fec5033e0cb22467ad7f7820bda"
247
+ x86_64: "06094a1108ae9e82aa4c23a775aa92758f53f1175d422270d9d6162cb9ade558"
248
248
  };
249
249
  var FIRECRACKER_BINARY_SHA256 = {
250
- x86_64: "8227875ceda44177a4d501052dae4a2f9d7837362f5399f02cf0748e68418377"
250
+ x86_64: "99ad0f5cd0514a88aad0e9ae8cfdb3cc3b4ab9d190e1194602406c786b5de7a5"
251
251
  };
252
252
  var GUEST_ASSETS_VERSION = "1";
253
253
  var GUEST_ASSETS_BASE_URL = `https://github.com/outerlayerai/guest-assets/releases/download/guest-${GUEST_ASSETS_VERSION}`;
@@ -262,7 +262,7 @@ function guestAssetsPinned(arch) {
262
262
  return GUEST_KERNEL_SHA256[arch] !== zero && GUEST_HELPER_SHA256[arch] !== zero;
263
263
  }
264
264
  var JAILER_BINARY_SHA256 = {
265
- x86_64: "99832d2270741af67ffacd46da716b4b016338541af5a742907ab965b2e9ac9e"
265
+ x86_64: "65ef226e96f0ceda55ba643f445801ef2cc0ea667ef67cad8ac4f406c9c8434f"
266
266
  };
267
267
  var HOST_HELPER_ASSETS_VERSION = "4";
268
268
  var HOST_HELPER_BASE_URL = `https://github.com/outerlayerai/guest-assets/releases/download/guest-${HOST_HELPER_ASSETS_VERSION}`;
@@ -2,7 +2,7 @@
2
2
  import { createRequire } from 'node:module';
3
3
  import { runEmit } from './chunk-WX2WEERU.js';
4
4
  import { installStarterPack } from './chunk-VJBFQP3H.js';
5
- import { resolveGitCommonDir, defaultGitRunner } from './chunk-D4UDE2AP.js';
5
+ import { resolveGitCommonDir, defaultGitRunner } from './chunk-W3NVHOCS.js';
6
6
  import { addStdioMcpEntryIfAbsent, addDocsMcpEntryIfAbsent, DOCS_MCP_SERVER_NAME } from './chunk-YVZJ6GKF.js';
7
7
  import { C } from './chunk-ANPNT6PM.js';
8
8
  import { AGENTS_MD_LAYOUT, declareAgentsMdLayout, linkClaudeSkills, SKILLS_LINK_PATH, describeSkillsLink, isAgentsMdLayout, holdsTodaysLayoutSources, discoverOuterlayerPaths } from './chunk-JKNYTNYD.js';
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { RecipeError, BUILDKIT_IMAGE } from './chunk-APBTVIM4.js';
3
+ import { RecipeError, BUILDKIT_IMAGE } from './chunk-4R24DSL2.js';
4
4
  import { parseSize } from './chunk-7RQ73DLO.js';
5
5
  import { compareVersions } from './chunk-QE3UQAHK.js';
6
6
  import { ensureHostKey } from './chunk-F6DIHHBS.js';
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { MIN_ENGINE_MAJOR } from './chunk-Z6SWQV77.js';
3
+ import { MIN_ENGINE_MAJOR } from './chunk-ILL2CWOU.js';
4
4
  import { runnerImageVersion } from './chunk-665QWBNW.js';
5
- import { firecrackerArch, MICROVM_ARCHES, guestAssetsPinned } from './chunk-APBTVIM4.js';
5
+ import { firecrackerArch, MICROVM_ARCHES, guestAssetsPinned } from './chunk-4R24DSL2.js';
6
6
  import { spawnSync } from 'child_process';
7
7
  import { existsSync, accessSync, constants, statSync, readFileSync } from 'fs';
8
8
 
@@ -2,7 +2,7 @@
2
2
  import { createRequire } from 'node:module';
3
3
  import { claimPidFile, RunnerAlreadyRunningError, releasePidFile } from './chunk-PYSKSROG.js';
4
4
  import { startTimeOf } from './chunk-JBJTC3UU.js';
5
- import { CLAUDE_CODE_VERSION, NODE_IMAGE, DEFAULT_BASE_IMAGE, RecipeError, locateRecipe, readRecipe, assertBuildable, TINI_VERSION, GH_VERSION, writeSanitizedRecipe, classifyProperties, GH_SHA256, TINI_SHA256, SANITIZED_NAME } from './chunk-APBTVIM4.js';
5
+ import { CLAUDE_CODE_VERSION, NODE_IMAGE, DEFAULT_BASE_IMAGE, RecipeError, locateRecipe, readRecipe, assertBuildable, TINI_VERSION, GH_VERSION, writeSanitizedRecipe, classifyProperties, GH_SHA256, TINI_SHA256, SANITIZED_NAME } from './chunk-4R24DSL2.js';
6
6
  import { RUNNER_DIR_MODE, repoCacheDir, imagesDir, attemptStamp, runnerDir, rootfsPathFor, RUNNER_FILE_MODE } from './chunk-L4CW6LZQ.js';
7
7
  import { withGitConfig, tokenHeader, PROXY_WARNING_FLAG } from './chunk-2K3TCQHW.js';
8
8
  import { RELAY_ID, RELAY_USER } from './chunk-JGD5TWQ2.js';
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { isPlaceholderCommand } from './chunk-QBENN6GA.js';
4
- import { describeCallFailure } from './chunk-WVM6PM2N.js';
5
- import { WorkCommandError, getJson } from './chunk-DZUANBKP.js';
3
+ import { isPlaceholderCommand } from './chunk-JUTN2HUP.js';
4
+ import { describeCallFailure } from './chunk-D7V33CAH.js';
5
+ import { WorkCommandError, getJson } from './chunk-XPKI5OMT.js';
6
6
  import { sanitizeTerminal } from './chunk-BUP5N3X6.js';
7
7
  import { builtinKind } from './chunk-JWRX5ZTT.js';
8
8
  import { signerFor } from './chunk-F6DIHHBS.js';
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { WorkCommandError, postJson } from './chunk-DZUANBKP.js';
4
- import { defaultGitRunner, materializeContext, isStagingWriteFault, lookupGoverningSource } from './chunk-D4UDE2AP.js';
5
- import { signingFetchFor } from './chunk-GJZEUQ6D.js';
3
+ import { WorkCommandError, postJson } from './chunk-XPKI5OMT.js';
4
+ import { defaultGitRunner, materializeContext, isStagingWriteFault, lookupGoverningSource } from './chunk-W3NVHOCS.js';
5
+ import { signingFetchFor } from './chunk-QRZLUUNN.js';
6
6
  import { unsupportedLayout, layoutRefusalReason, composeDelivery } from './chunk-VPEGE3QZ.js';
7
7
  import { SHIM_SCRIPT, GOVERNANCE_VARIABLE } from './chunk-HCVLP7XA.js';
8
8
  import { readDegraded, readContextManifest, readSourceCache } from './chunk-YQR6E6OV.js';
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { launchRefusalForSession } from './chunk-ESVW4MJY.js';
4
- import { autoConnect, detectActiveSession } from './chunk-FQCLEH34.js';
4
+ import { autoConnect, detectActiveSession } from './chunk-HXFRJKMU.js';
5
5
  import { acquireSpoolLockAt } from './chunk-BUP5N3X6.js';
6
- import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-GJZEUQ6D.js';
6
+ import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-QRZLUUNN.js';
7
7
  import { resolveRepoIdentity } from './chunk-QE3UQAHK.js';
8
8
  import { C } from './chunk-ANPNT6PM.js';
9
9
  import { launchedItemForSession } from './chunk-T2Q7ISPE.js';
@@ -1,19 +1,19 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { readsJobState, READ_JOB_STATE_FORMATS, jobStateFormatOf } from './chunk-ZVB57WI6.js';
4
- import { senderPidfile } from './chunk-XBCJI6SV.js';
4
+ import { senderPidfile } from './chunk-IIFMFX6J.js';
5
5
  import { DOCKERD_LOG, HELPER_PATH, HELPER_RECORD } from './chunk-2N72GPS2.js';
6
6
  import { writeDockerClientConfig } from './chunk-UNF7MWEL.js';
7
- import { installScrubContext } from './chunk-ITP76BST.js';
8
- import { ADDED_USER, AssetError, obtainImage, ensureRootfs, gitRemoteFor, startServicesFor, createBuildDisk, machineConfig, resolveAgentUser, AgentUserError, runBuildSteps, shellQuote, LEASE_SECONDS, createContainerRuntime, stopContainer, cleanupContainer, outOfMemoryReason, containerSenderCommand, signalInContainer, syncInContainer, copyTranscriptsFromContainer, senderAliveScript, HelperRefusal, GH_CONFIG_YML, ghHostsYml, isLiteralAddress, deleteBuildDisk, startCheckContainer, lifecycleSteps, lifecycleFailureReason, writeEvalInput, DeliveryFailure, EVAL_INPUT_NAME, copyTranscripts, senderSignalScript, containerJudgeEnvironment, copyJudgeTree } from './chunk-Z6SWQV77.js';
9
- import { readBranchHead, fetchCommit, diffBetween } from './chunk-3RBQSPW5.js';
7
+ import { installScrubContext } from './chunk-PNHNKMA3.js';
8
+ import { ADDED_USER, AssetError, obtainImage, ensureRootfs, gitRemoteFor, startServicesFor, createBuildDisk, machineConfig, resolveAgentUser, AgentUserError, runBuildSteps, shellQuote, LEASE_SECONDS, createContainerRuntime, stopContainer, cleanupContainer, outOfMemoryReason, containerSenderCommand, signalInContainer, syncInContainer, copyTranscriptsFromContainer, senderAliveScript, helperFirecrackerNote, HelperRefusal, GH_CONFIG_YML, ghHostsYml, isLiteralAddress, deleteBuildDisk, startCheckContainer, lifecycleSteps, lifecycleFailureReason, writeEvalInput, DeliveryFailure, EVAL_INPUT_NAME, copyTranscripts, senderSignalScript, containerJudgeEnvironment, copyJudgeTree } from './chunk-ILL2CWOU.js';
9
+ import { readBranchHead, fetchCommit, diffBetween } from './chunk-AINUN2TT.js';
10
10
  import { isSameProcess, startTimeOf } from './chunk-JBJTC3UU.js';
11
- import { HASH_ARGV, parseProgramHash, JUDGE_PROGRAM, writeJobFile, readJobFile, COMMAND_DIR, childEnvironment, judgeCommand, JUDGE_MAX_TURNS, MAX_REPORT_BYTES, JUDGE_DIR } from './chunk-F4267APM.js';
12
- import { CLAUDE_CODE_VERSION } from './chunk-APBTVIM4.js';
11
+ import { HASH_ARGV, parseProgramHash, JUDGE_PROGRAM, writeJobFile, readJobFile, COMMAND_DIR, childEnvironment, judgeCommand, JUDGE_MAX_TURNS, MAX_REPORT_BYTES, JUDGE_DIR } from './chunk-7I6GZSN3.js';
12
+ import { CLAUDE_CODE_VERSION, FIRECRACKER_VERSION } from './chunk-4R24DSL2.js';
13
13
  import { waitForAgent, vmExecArgs } from './chunk-HPOEVC2V.js';
14
14
  import { socketPathProblem, vsockLinks, linkVsockSockets } from './chunk-XGJUNNXL.js';
15
- import { describeCallFailure, resolveGoverningSource, refusalCode, removeStagedContext, stageGovernedContext, pinnedSourceOf, commandWithShim, logStamp, createRunnerLog, formatDuration, retrySend, formatClock } from './chunk-WVM6PM2N.js';
16
- import { WorkCommandError, postJson, isSignatureRefusal, getJson } from './chunk-DZUANBKP.js';
15
+ import { describeCallFailure, resolveGoverningSource, refusalCode, removeStagedContext, stageGovernedContext, pinnedSourceOf, commandWithShim, logStamp, createRunnerLog, formatDuration, retrySend, formatClock } from './chunk-D7V33CAH.js';
16
+ import { WorkCommandError, postJson, isSignatureRefusal, getJson } from './chunk-XPKI5OMT.js';
17
17
  import { planArtifactUpload } from './chunk-BUP5N3X6.js';
18
18
  import { isBuiltinContainer, isBuiltinProcess, isBuiltinVm, DEFAULT_CHECK_TIME_LIMIT_MINUTES } from './chunk-JWRX5ZTT.js';
19
19
  import { parseSize } from './chunk-7RQ73DLO.js';
@@ -214,7 +214,10 @@ function makeBuildsDirPrivate(buildDir2) {
214
214
  }
215
215
  async function helperFor(runtime, log) {
216
216
  const probe = await runtime.vm.helper.probe();
217
- if (probe.ok) return probe.client;
217
+ if (probe.ok) {
218
+ if (probe.firecracker !== FIRECRACKER_VERSION) log(`${helperFirecrackerNote(probe.firecracker)}; run \`outerlayer runner install --service --replace\` to update it`);
219
+ return probe.client;
220
+ }
218
221
  if (probe.reason === "unsupported") log(probe.detail);
219
222
  else if (probe.unreachable === true) log(`${probe.detail}, so this build runs without the jailer`);
220
223
  return void 0;
@@ -1,12 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { checkStarterFiles, contextIsGoverned, checkBuildSkill } from './chunk-XFGL53GU.js';
4
- import { resolveCredentials, getJson, WorkCommandError } from './chunk-DZUANBKP.js';
5
- import { isLinkedRepository } from './chunk-G2T4HCGT.js';
4
+ import { resolveCredentials, getJson, WorkCommandError } from './chunk-XPKI5OMT.js';
5
+ import { isLinkedRepository } from './chunk-TEVO3RUV.js';
6
6
  import { sanitizeTerminal } from './chunk-BUP5N3X6.js';
7
7
  import { checkFormerSkillNames } from './chunk-MQ743JX3.js';
8
- import { resolveGatewayCredentials, defaultFetch } from './chunk-GJZEUQ6D.js';
9
- import { sanitizeForContext, spoolDir, assessSyncHealth, readSyncStatus, SYNC_STALE_AFTER_MS, formatAgo, checkInstalledCliStaleness, workspaceRootOf, hookFiredMarkerPath, refreshCommand } from './chunk-C3AMVSMS.js';
8
+ import { resolveGatewayCredentials, defaultFetch } from './chunk-QRZLUUNN.js';
9
+ import { sanitizeForContext, spoolDir, assessSyncHealth, readSyncStatus, SYNC_STALE_AFTER_MS, formatAgo, checkInstalledCliStaleness, workspaceRootOf, hookFiredMarkerPath, refreshCommand } from './chunk-QIIMZC7W.js';
10
10
  import { readStatuslineState, STATE_FRESH_MS } from './chunk-DXDF43YG.js';
11
11
  import { hookCommandEscapesControlPlane, CONTROL_PLANE_DIR_VARIABLE } from './chunk-HCVLP7XA.js';
12
12
  import { findGitDirs } from './chunk-BJ3KTMDH.js';
@@ -1186,7 +1186,7 @@ async function gatherDoctorChecks() {
1186
1186
  const { runnerVmCheck } = await import('./doctor-53F2PYY7.js');
1187
1187
  checks.push(runnerVmCheck(configPath, { lima: realLima(), home: homeFromEnv(), instance: runnerVm.instance }));
1188
1188
  } else if (hasRunnerBlock(configPath)) {
1189
- const { runnerHostChecks } = await import('./doctor-EI22PDR5.js');
1189
+ const { runnerHostChecks } = await import('./doctor-3QA5Y5HG.js');
1190
1190
  const hooks = (() => {
1191
1191
  try {
1192
1192
  return loadRunnerConfig(configPath).hooks;
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { fetchFactories, selectFactory, saveFactoryConnection, autoConnectedLine } from './chunk-G2T4HCGT.js';
4
- import { resolveGatewayCredentials } from './chunk-GJZEUQ6D.js';
3
+ import { fetchFactories, selectFactory, saveFactoryConnection, autoConnectedLine } from './chunk-TEVO3RUV.js';
4
+ import { resolveGatewayCredentials } from './chunk-QRZLUUNN.js';
5
5
  import { findGitDirs, readRepoConnection } from './chunk-BJ3KTMDH.js';
6
6
  import { resolveRepoIdentity } from './chunk-QE3UQAHK.js';
7
7
  import { cliInvocation } from './chunk-CRB3POP4.js';
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { LiveUploader } from './chunk-ITP76BST.js';
4
- import { spoolDir } from './chunk-C3AMVSMS.js';
3
+ import { LiveUploader } from './chunk-PNHNKMA3.js';
4
+ import { spoolDir } from './chunk-QIIMZC7W.js';
5
5
  import { CaptureDaemon } from './chunk-QE3UQAHK.js';
6
6
  import { parseWorkItemEnv } from './chunk-T2Q7ISPE.js';
7
7
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
@@ -1,15 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { runnerImageVersion } from './chunk-665QWBNW.js';
4
- import { readDefaultBranchHead, cloneRepository, buildRepositoryImage } from './chunk-3RBQSPW5.js';
4
+ import { readDefaultBranchHead, cloneRepository, buildRepositoryImage } from './chunk-AINUN2TT.js';
5
5
  import { startTimeOf, isSameProcess } from './chunk-JBJTC3UU.js';
6
6
  import { currentCliBuild } from './chunk-OGFGZQA3.js';
7
- import { createDockerHost, builderSpec, runnerLabelValue, RUNNER_LABEL, BUILD_LABEL, prepareRunArgs, containerRunArgs, HASH_ARGV, parseProgramHash, JUDGE_PROGRAM, containerExecArgs, childEnvironment, JUDGE_DIR, JUDGE_REPORT, MAX_REPORT_BYTES, spawnRun } from './chunk-F4267APM.js';
8
- import { hostHelperPinned, firecrackerArch, MICROVM_ARCHES, RecipeError, DOCKER_FEATURE, CLAUDE_CODE_VERSION, GUEST_HELPER_SHA256, GUEST_ASSETS_BASE_URL, GUEST_KERNEL_SHA256, JAILER_BINARY_SHA256, FIRECRACKER_BINARY_SHA256, FIRECRACKER_SHA256, FIRECRACKER_VERSION, GUEST_ASSETS_VERSION, DEFAULT_BASE_IMAGE } from './chunk-APBTVIM4.js';
7
+ import { createDockerHost, builderSpec, runnerLabelValue, RUNNER_LABEL, BUILD_LABEL, prepareRunArgs, containerRunArgs, HASH_ARGV, parseProgramHash, JUDGE_PROGRAM, containerExecArgs, childEnvironment, JUDGE_DIR, JUDGE_REPORT, MAX_REPORT_BYTES, spawnRun } from './chunk-7I6GZSN3.js';
8
+ import { FIRECRACKER_VERSION, hostHelperPinned, firecrackerArch, MICROVM_ARCHES, RecipeError, DOCKER_FEATURE, CLAUDE_CODE_VERSION, GUEST_HELPER_SHA256, GUEST_ASSETS_BASE_URL, GUEST_KERNEL_SHA256, JAILER_BINARY_SHA256, FIRECRACKER_BINARY_SHA256, FIRECRACKER_SHA256, GUEST_ASSETS_VERSION, DEFAULT_BASE_IMAGE } from './chunk-4R24DSL2.js';
9
9
  import { execCapture } from './chunk-HPOEVC2V.js';
10
10
  import { GUEST_CID } from './chunk-XGJUNNXL.js';
11
- import { describeCallFailure, controlPlaneTokenFailure, refusalCode, resolveGoverningSource, removeStagedContext, stageGovernedContext, pinnedSourceOf, commandWithShim, shimScript } from './chunk-WVM6PM2N.js';
12
- import { WorkCommandError } from './chunk-DZUANBKP.js';
11
+ import { describeCallFailure, controlPlaneTokenFailure, refusalCode, resolveGoverningSource, removeStagedContext, stageGovernedContext, pinnedSourceOf, commandWithShim, shimScript } from './chunk-D7V33CAH.js';
12
+ import { WorkCommandError } from './chunk-XPKI5OMT.js';
13
13
  import { hostAllowed } from './chunk-UXYLWVTQ.js';
14
14
  import { parseDuKilobytes } from './chunk-7RQ73DLO.js';
15
15
  import { sharedSkillNames, skillConflictMessage } from './chunk-VPEGE3QZ.js';
@@ -213,6 +213,9 @@ function helperClient(socketPath, options = {}) {
213
213
  }
214
214
  };
215
215
  }
216
+ function helperFirecrackerNote(helperFirecracker) {
217
+ return `the root helper runs Firecracker ${helperFirecracker}, not the ${FIRECRACKER_VERSION} this release pins, so microVM builds run under the jailer with Firecracker ${helperFirecracker}`;
218
+ }
216
219
  function reinstallMessage(protocol) {
217
220
  const spoken = protocol === void 0 ? "a protocol it does not name" : `protocol ${protocol}`;
218
221
  return `the root helper speaks ${spoken}, which this runner does not support, so microVM builds run without the jailer; run \`outerlayer runner install --service --replace\` to install the helper that goes with this release`;
@@ -476,8 +479,12 @@ async function download(file, url, fetchImpl) {
476
479
  if (!response.ok) throw new AssetError(file, `${file} could not be downloaded from ${url}: the server answered ${response.status}`);
477
480
  return Buffer.from(await response.arrayBuffer());
478
481
  }
482
+ function keptPath(dir, sha256, name) {
483
+ mkdirSync(join(dir, sha256), { recursive: true, mode: RUNNER_DIR_MODE });
484
+ return join(dir, sha256, name);
485
+ }
479
486
  async function ensureFile(dir, file, pin, fetchImpl, mode) {
480
- const path = join(dir, file);
487
+ const path = keptPath(dir, pin.sha256, file);
481
488
  if (existsSync(path)) {
482
489
  const actual2 = sha256Of(readFileSync(path));
483
490
  if (actual2 !== pin.sha256) throw pinProblem(file, pin.sha256, actual2, `at ${path}`);
@@ -499,7 +506,7 @@ function extractWithTar(arch, program = "firecracker") {
499
506
  }
500
507
  async function ensureFirecracker(input) {
501
508
  const { dir, arch, pins, fetchImpl } = input;
502
- const firecracker = join(dir, "firecracker");
509
+ const firecracker = keptPath(dir, pins.firecracker.binarySha256, "firecracker");
503
510
  if (existsSync(firecracker)) {
504
511
  const actual = sha256Of(readFileSync(firecracker));
505
512
  if (actual !== pins.firecracker.binarySha256) throw pinProblem("firecracker", pins.firecracker.binarySha256, actual, `at ${firecracker}`);
@@ -549,7 +556,7 @@ async function ensureJailer(options) {
549
556
  const fetchImpl = options.fetchImpl ?? fetch;
550
557
  const dir = vmAssetsDir(options.runnerDir);
551
558
  mkdirSync(dir, { recursive: true, mode: RUNNER_DIR_MODE });
552
- const jailer = join(dir, "jailer");
559
+ const jailer = keptPath(dir, expected, "jailer");
553
560
  if (existsSync(jailer)) {
554
561
  const actual = sha256Of(readFileSync(jailer));
555
562
  if (actual !== expected) throw pinProblem("jailer", expected, actual, `at ${jailer}`);
@@ -3304,4 +3311,4 @@ async function startCheckContainer(input) {
3304
3311
  };
3305
3312
  }
3306
3313
 
3307
- export { ADDED_USER, AgentUserError, AssetError, DeliveryFailure, EVAL_INPUT_NAME, GH_CONFIG_YML, HelperRefusal, LEASE_SECONDS, MIN_ENGINE_MAJOR, cleanupContainer, containerCommandExec, containerJudgeEnvironment, containerSenderCommand, copyJudgeTree, copyTranscripts, copyTranscriptsFromContainer, createBuildDisk, createContainerRuntime, deleteBuildDisk, deliverContainerHooks, ensureFirecrackerAndJailer, ensureRootfs, ensureTunnel, filesAreCopied, ghHostsYml, gitRemoteFor, helperSocketPath, isLiteralAddress, keepGhConfigCurrent, leaseExpiresAtMs, lifecycleFailureReason, lifecycleSteps, machineConfig, measureDisk, obtainImage, outOfMemoryReason, parseCpuList, prepareBranch, probeHelper, provisionContainer, resolveAgentUser, runBuildSteps, senderAliveScript, senderSignalScript, setUpRunnerCgroup, shellQuote, signalInContainer, startCheckContainer, startServicesFor, stopContainer, syncInContainer, writeEvalInput };
3314
+ export { ADDED_USER, AgentUserError, AssetError, DeliveryFailure, EVAL_INPUT_NAME, GH_CONFIG_YML, HelperRefusal, LEASE_SECONDS, MIN_ENGINE_MAJOR, cleanupContainer, containerCommandExec, containerJudgeEnvironment, containerSenderCommand, copyJudgeTree, copyTranscripts, copyTranscriptsFromContainer, createBuildDisk, createContainerRuntime, deleteBuildDisk, deliverContainerHooks, ensureFirecrackerAndJailer, ensureRootfs, ensureTunnel, filesAreCopied, ghHostsYml, gitRemoteFor, helperFirecrackerNote, helperSocketPath, isLiteralAddress, keepGhConfigCurrent, leaseExpiresAtMs, lifecycleFailureReason, lifecycleSteps, machineConfig, measureDisk, obtainImage, outOfMemoryReason, parseCpuList, prepareBranch, probeHelper, provisionContainer, resolveAgentUser, runBuildSteps, senderAliveScript, senderSignalScript, setUpRunnerCgroup, shellQuote, signalInContainer, startCheckContainer, startServicesFor, stopContainer, syncInContainer, writeEvalInput };
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { detectMachine, supportsContainerBuilds, reachDockerStep, describeMachineDocker, supportsMicroVmBuilds } from './chunk-PCADYUQT.js';
4
- import { MIN_ENGINE_MAJOR } from './chunk-Z6SWQV77.js';
3
+ import { detectMachine, supportsContainerBuilds, reachDockerStep, describeMachineDocker, supportsMicroVmBuilds } from './chunk-7NKVMAP6.js';
4
+ import { MIN_ENGINE_MAJOR } from './chunk-ILL2CWOU.js';
5
5
  import { hasStoredCredential, AGENT_COMMANDS, storeClaudeCredential, credentialFromStdin, isAgentName } from './chunk-5PMQDQFV.js';
6
6
  import { runnerCredentialProblem } from './chunk-JWRX5ZTT.js';
7
7
  import { runnerDir, RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-L4CW6LZQ.js';
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { uploadSpooledSteps } from './chunk-P7UQZFNY.js';
3
+ import { uploadSpooledSteps } from './chunk-EORWWFPA.js';
4
4
  import { LaunchFilter } from './chunk-ESVW4MJY.js';
5
5
  import { RepoFilter } from './chunk-TBT347UY.js';
6
6
  import { migrateLegacyArtifactSidecars, planArtifactUpload, artifactsStatePath, sanitizeTerminal, acquireArtifactSpoolLock, artifactBlobsDir, resolveArtifactTurnIndex, isArtifactTombstoned, ARTIFACT_RETRY_MAX_AGE_MS, writeArtifactSpoolState, reclaimUnneededArtifactBlobs, neededArtifactShas } from './chunk-BUP5N3X6.js';
7
- import { cliFetch, resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-GJZEUQ6D.js';
8
- import { writeSyncStatus, spoolDir } from './chunk-C3AMVSMS.js';
7
+ import { cliFetch, resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-QRZLUUNN.js';
8
+ import { writeSyncStatus, spoolDir } from './chunk-QIIMZC7W.js';
9
9
  import { readLatestProvenanceForSession, readContextProvenance } from './chunk-ZJSNLVCE.js';
10
10
  import { hookExecSpoolPath } from './chunk-DYEFPYME.js';
11
11
  import { applyReportedCost } from './chunk-BKO6JEZI.js';
@@ -628,7 +628,7 @@ async function missingControlPlane(cwd, sessionId, home, env) {
628
628
  cleanupEarlierCopies(dirs);
629
629
  }
630
630
  if (!contextPossiblyGoverned(cwd, home)) return void 0;
631
- const { governanceOf } = await import('./control-plane-launch-FRK5IZXC.js');
631
+ const { governanceOf } = await import('./control-plane-launch-654RV5PO.js');
632
632
  if (await governanceOf({ cwd, env, home }) !== "governed") return void 0;
633
633
  recordMissingContext(dirs, sessionId, home);
634
634
  const launcher = `${cliInvocation()} claude`;
@@ -13,7 +13,15 @@ createRequire(import.meta.url);
13
13
  var MISSING_HELP = `Run \`${cliInvocation()} login\` to sign in, or set OUTERLAYER_URL / OUTERLAYER_API_KEY / OUTERLAYER_APP_ID. Mint a key in the dashboard: Settings \u2192 API keys.`;
14
14
  var NO_FACTORY_MESSAGE = `you are logged in, but no factory is chosen for this repository. Run \`${cliInvocation()} connect\` to choose one, or pass --app-id / set OUTERLAYER_APP_ID.`;
15
15
  var NO_FACTORY_OUTSIDE_REPOSITORY_MESSAGE = "you are logged in, but this directory is not in a git repository, so no factory is chosen. Pass --app-id / set OUTERLAYER_APP_ID, or run this from inside a connected repository.";
16
+ var ORIGIN_MISMATCH_MESSAGE = "the gateway address is not the one your saved credential belongs to. A saved login or key is only sent to the address it was created for, so nothing can redirect it \u2014 or the session transcripts a sync carries with it \u2014 to a host set through OUTERLAYER_URL or --url. To call a different gateway, pass its own key too: --url <addr> --api-key <key>, or set OUTERLAYER_API_KEY beside OUTERLAYER_URL.";
16
17
  var LOGIN_TOKEN_PREFIX = "olu_";
18
+ function sameOrigin(a, b) {
19
+ try {
20
+ return new URL(a).origin === new URL(b).origin;
21
+ } catch {
22
+ return false;
23
+ }
24
+ }
17
25
  function unauthorizedMessage(credential) {
18
26
  return credential.startsWith(LOGIN_TOKEN_PREFIX) ? `not authorized \u2014 the login is expired or was revoked. Run \`${cliInvocation()} login\` to sign in again.` : "not authorized \u2014 the API key is unknown, expired, or bound to a different factory. Mint a fresh key: dashboard \u2192 Settings \u2192 API keys.";
19
27
  }
@@ -26,6 +34,11 @@ function resolveGatewayCredentials(sources = {}) {
26
34
  const credential = key ?? config.accountToken;
27
35
  const cwd = sources.cwd ?? process.cwd();
28
36
  const appId = sources.appId ?? (env.OUTERLAYER_APP_ID || void 0) ?? (kind === "key" ? config.appId : readRepoConnection(cwd)?.appId);
37
+ const suppliedKey = sources.apiKey !== void 0 || Boolean(env.OUTERLAYER_API_KEY);
38
+ const savedCredential = credential != null && !suppliedKey && (credential === config.apiKey || credential === config.accountToken);
39
+ if (savedCredential && url && config.url && !sameOrigin(url, config.url)) {
40
+ return { ok: false, message: ORIGIN_MISMATCH_MESSAGE, url, credential, appId, kind };
41
+ }
29
42
  if (credential && url && !appId && kind === "login") {
30
43
  const message = findGitDirs(cwd) === void 0 ? NO_FACTORY_OUTSIDE_REPOSITORY_MESSAGE : NO_FACTORY_MESSAGE;
31
44
  return { ok: false, message, url, credential, appId, kind };
@@ -1,25 +1,25 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { releaseLease, isUnfinished, setStage, jobEnv, runHook, describeHookEnd, provisionMicroVm, deliverCommitHooks, provisionProcess, provisionEnvironment, readProvisionOut, resolveHostBuild, workdirProblem, listenOnBroker, hostEnvironment, hostCommandEnvironment, execArgv, microVmCommandLine, runCommand, commandLogOffset, execCommandLine, startSender, startHostServices, finishJob, isContainerTracked, probeCommand, appendCommandLog, judgeProbe, EXIT_CODE_FILE, isGroupAlive, outcomeFromExitCode, isTimedOut, readCpuUsec, isIdle, stopOrphanedMicroVms, unfinishedJobs, listUnreadableJobs, listAdoptableJobs, retryFailedReleases, recoverLostJobs, hookLimitsFor, AttemptLogBook, needsRenew, renewLease, RENEW_INTERVAL_SECONDS, listTrackedJobs, restartSender, ALREADY_RELEASED, inTeardown } from './chunk-CP24ZXXR.js';
3
+ import { releaseLease, isUnfinished, setStage, jobEnv, runHook, describeHookEnd, provisionMicroVm, deliverCommitHooks, provisionProcess, provisionEnvironment, readProvisionOut, resolveHostBuild, workdirProblem, listenOnBroker, hostEnvironment, hostCommandEnvironment, execArgv, microVmCommandLine, runCommand, commandLogOffset, execCommandLine, startSender, startHostServices, finishJob, isContainerTracked, probeCommand, appendCommandLog, judgeProbe, EXIT_CODE_FILE, isGroupAlive, outcomeFromExitCode, isTimedOut, readCpuUsec, isIdle, stopOrphanedMicroVms, unfinishedJobs, listUnreadableJobs, listAdoptableJobs, retryFailedReleases, recoverLostJobs, hookLimitsFor, AttemptLogBook, needsRenew, renewLease, RENEW_INTERVAL_SECONDS, listTrackedJobs, restartSender, ALREADY_RELEASED, inTeardown } from './chunk-GAWZ7ATV.js';
4
4
  import { writePendingUpdate } from './chunk-TKL74NLB.js';
5
5
  import { JOB_STATE_FORMAT, readsJobState, jobStateFormatOf } from './chunk-ZVB57WI6.js';
6
6
  import { readHousekeepingRecord, writeHousekeepingRecord } from './chunk-6FAP657M.js';
7
7
  import { decideInstalledSwitch } from './chunk-3JVYMD4G.js';
8
8
  import { fetchVersionMeta, npmVersion, npmSupportsProvenance, fetchTarballDigest, fetchProvenance, installVersion, auditSignatures } from './chunk-YETTWTAY.js';
9
9
  import { RUNNER_PROTOCOL } from './chunk-TPKYTORP.js';
10
- import { currentSkillCommand, formerSkillProblem, placeholderQueues, placeholderProblem } from './chunk-Z453MOUL.js';
10
+ import { currentSkillCommand, formerSkillProblem, placeholderQueues, placeholderProblem } from './chunk-BMWIUSTZ.js';
11
11
  import { writeMarker, readMarker, currentVersion, removeMarker, entryIn, versionDir, startedThroughCurrent, switchCurrent, isInLayout, cleanVersions, stagingDir } from './chunk-4IFKLYMM.js';
12
12
  import { freeBytes, formatBytes } from './chunk-YYYRBYWG.js';
13
13
  import { RepoFilter } from './chunk-TBT347UY.js';
14
- import { LEASE_SECONDS, provisionContainer, leaseExpiresAtMs, deliverContainerHooks, lifecycleSteps, lifecycleFailureReason, prepareBranch, containerCommandExec, measureDisk, setUpRunnerCgroup, createContainerRuntime, parseCpuList, ensureTunnel, keepGhConfigCurrent, filesAreCopied } from './chunk-Z6SWQV77.js';
14
+ import { LEASE_SECONDS, provisionContainer, leaseExpiresAtMs, deliverContainerHooks, lifecycleSteps, lifecycleFailureReason, prepareBranch, containerCommandExec, measureDisk, setUpRunnerCgroup, createContainerRuntime, parseCpuList, ensureTunnel, keepGhConfigCurrent, filesAreCopied } from './chunk-ILL2CWOU.js';
15
15
  import { tagToPull, pullInstruction, imageTag, writeUpdateStatus } from './chunk-665QWBNW.js';
16
16
  import { isVersion, compareVersions, satisfiesRange } from './chunk-TQMI335S.js';
17
17
  import { checkFit } from './chunk-MLD2NA7N.js';
18
18
  import { claimPidFile, readPidFile, releasePidFile } from './chunk-PYSKSROG.js';
19
19
  import { startTimeOf, isSameProcess } from './chunk-JBJTC3UU.js';
20
- import { writeJobFile, ensureRunnerIdentity, readJobFile, builderName, runnerLabelValue, ensureFailureCount, builderSpec, ensureBuilder, spawnRun, BUILD_LABEL, RUNNER_LABEL, readJobFileChecked } from './chunk-F4267APM.js';
21
- import { describeCallFailure, retrySend, shortClaim, relativeToRunner, formatDuration, BuildTokens, classifyRefusal, refusalCode, createRunnerLog, formatClock } from './chunk-WVM6PM2N.js';
22
- import { isSignatureRefusal, WorkCommandError, getJson, postJson } from './chunk-DZUANBKP.js';
20
+ import { writeJobFile, ensureRunnerIdentity, readJobFile, builderName, runnerLabelValue, ensureFailureCount, builderSpec, ensureBuilder, spawnRun, BUILD_LABEL, RUNNER_LABEL, readJobFileChecked } from './chunk-7I6GZSN3.js';
21
+ import { describeCallFailure, retrySend, shortClaim, relativeToRunner, formatDuration, BuildTokens, classifyRefusal, refusalCode, createRunnerLog, formatClock } from './chunk-D7V33CAH.js';
22
+ import { isSignatureRefusal, WorkCommandError, getJson, postJson } from './chunk-XPKI5OMT.js';
23
23
  import { isBuiltinContainer, isBuiltinVm, isBuiltinProcess, loadRunnerConfig, checkHooks, builtinKind, DEFAULT_UPDATE_MAX_WAIT_HOURS } from './chunk-JWRX5ZTT.js';
24
24
  import { exceedsDisk } from './chunk-7RQ73DLO.js';
25
25
  import { resolveVersion } from './chunk-RA3O54FC.js';
@@ -1746,7 +1746,7 @@ var CLAIM_REFUSAL_CODES = new Set(
1746
1746
  "pull_request_from_fork pull_request_on_default_branch pull_request_ambiguous pull_request_repository_not_connected repository_not_reachable branch_claimed_elsewhere".split(" ")
1747
1747
  );
1748
1748
  async function tryClaimAndStart(state, item, queue) {
1749
- const { postJson: postJson2 } = await import('./work-cmd-C3CFJZYD.js');
1749
+ const { postJson: postJson2 } = await import('./work-cmd-TGSNYPSG.js');
1750
1750
  const log = logOf(state);
1751
1751
  const hostKey = await loadHostKey(state.config.configPath);
1752
1752
  const claim = await retrySend(
@@ -2730,7 +2730,7 @@ async function start(configPath, deps = { fetchImpl: fetch }) {
2730
2730
  const outcome = await onStartUnderMarker({
2731
2731
  configPath,
2732
2732
  own: ownVersionOf(deps),
2733
- check: update.check ? () => update.check(configPath) : async () => (await import('./check-SSEVZJN5.js')).runRunnerCheck(configPath, { fetchImpl: deps.fetchImpl }),
2733
+ check: update.check ? () => update.check(configPath) : async () => (await import('./check-3CBJVXZD.js')).runRunnerCheck(configPath, { fetchImpl: deps.fetchImpl }),
2734
2734
  now: () => (deps.now ?? (() => /* @__PURE__ */ new Date()))().getTime(),
2735
2735
  log
2736
2736
  });
@@ -2,7 +2,7 @@
2
2
  import { createRequire } from 'node:module';
3
3
  import { sanitizeTerminal } from './chunk-BUP5N3X6.js';
4
4
  import { DEFAULT_DASHBOARD } from './chunk-XSPA5ODY.js';
5
- import { cliFetch, resolveGatewayCredentials } from './chunk-GJZEUQ6D.js';
5
+ import { cliFetch, resolveGatewayCredentials } from './chunk-QRZLUUNN.js';
6
6
  import { writeRepoConnection, findGitDirs, readRepoConnection } from './chunk-BJ3KTMDH.js';
7
7
  import { remoteLookupFailed } from './chunk-QE3UQAHK.js';
8
8
  import { readCloudConfig } from './chunk-EABW6AJQ.js';
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { autoConnect, detectActiveSession } from './chunk-FQCLEH34.js';
4
- import { defaultFetch, unauthorizedMessage, resolveGatewayCredentials } from './chunk-GJZEUQ6D.js';
3
+ import { autoConnect, detectActiveSession } from './chunk-HXFRJKMU.js';
4
+ import { defaultFetch, unauthorizedMessage, resolveGatewayCredentials } from './chunk-QRZLUUNN.js';
5
5
  import { resolveRepoIdentity } from './chunk-QE3UQAHK.js';
6
6
  import { C } from './chunk-ANPNT6PM.js';
7
7
  import { parseWorkItemEnv } from './chunk-T2Q7ISPE.js';
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { removeRetiredSkills } from './chunk-MQ743JX3.js';
4
- import { defaultFetch, resolveGatewayCredentials } from './chunk-GJZEUQ6D.js';
4
+ import { defaultFetch, resolveGatewayCredentials } from './chunk-QRZLUUNN.js';
5
5
  import { appendContextProvenance } from './chunk-ZJSNLVCE.js';
6
6
  import { loadMaintainedFiles, writeMaintainedFiles } from './chunk-HBISTTG3.js';
7
7
  import { cliInvocation } from './chunk-CRB3POP4.js';