@outerlayer/cli 0.8.6 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/README.md +24 -14
  3. package/dist/{agent-setup-LEQF4V5F.js → agent-setup-ODTDC3US.js} +8 -7
  4. package/dist/{build-3FSJR5OO.js → build-LELVCWHV.js} +2 -2
  5. package/dist/build-info.json +1 -1
  6. package/dist/{builder-5UFAF5LW.js → builder-5DKTBWT3.js} +5 -5
  7. package/dist/{check-443BADSD.js → check-VJRJ2KQ4.js} +69 -34
  8. package/dist/{chunk-Y7UQHKFY.js → chunk-3FMPZPJQ.js} +1 -4
  9. package/dist/chunk-3JVYMD4G.js +18 -0
  10. package/dist/{chunk-K4MGMSMN.js → chunk-4HMXH2OA.js} +8 -2
  11. package/dist/{chunk-H6IGIE3I.js → chunk-543OT6V5.js} +4 -4
  12. package/dist/chunk-5K3IUOPJ.js +178 -0
  13. package/dist/{chunk-HWMYGAKF.js → chunk-6CXYORUS.js} +1 -1
  14. package/dist/{inspect-XAUSB7L3.js → chunk-6MZSX4M7.js} +12 -6
  15. package/dist/{chunk-IS4DIGBQ.js → chunk-ABIWDUMS.js} +1 -13
  16. package/dist/{chunk-WLV4KCAW.js → chunk-BGWTYRSS.js} +1 -1
  17. package/dist/{chunk-2MFYKH3C.js → chunk-BMX3L7CR.js} +1 -1
  18. package/dist/{chunk-HKMPVPO7.js → chunk-BYT5O5RV.js} +7 -1
  19. package/dist/{chunk-WGLWDX5J.js → chunk-FKFGQJNN.js} +1 -1
  20. package/dist/{chunk-MSV44EB5.js → chunk-KPUJGBA4.js} +2 -2
  21. package/dist/{chunk-TY7EZC7U.js → chunk-KWCJLAHQ.js} +5 -5
  22. package/dist/{chunk-GJ3OWUFO.js → chunk-LBU4CLK5.js} +113 -24
  23. package/dist/{chunk-CDISNKM4.js → chunk-LTJPX7TX.js} +93 -13
  24. package/dist/{chunk-TFJGK4UB.js → chunk-LYESSQUA.js} +22 -4
  25. package/dist/{chunk-7KI224YS.js → chunk-M2PBLRB7.js} +1 -1
  26. package/dist/{chunk-2FWL7CE2.js → chunk-M6G7TJVF.js} +1 -1
  27. package/dist/{chunk-CRLAB4PM.js → chunk-NTLGWCWK.js} +1 -1
  28. package/dist/{chunk-ALCXFVUV.js → chunk-OSKO3PAL.js} +25 -19
  29. package/dist/{chunk-AIW6GLET.js → chunk-PDTSUOVT.js} +1 -1
  30. package/dist/{chunk-LKUUQ3XV.js → chunk-QPPPUKQJ.js} +1 -1
  31. package/dist/{chunk-6AFQOYO3.js → chunk-RWQWPZB4.js} +10 -6
  32. package/dist/{chunk-2E2MG3KW.js → chunk-S6IUUNCD.js} +1 -1
  33. package/dist/{chunk-AGMIJ725.js → chunk-SUMWRA7K.js} +1 -1
  34. package/dist/{chunk-NKU5OPYP.js → chunk-TB7EP24C.js} +1 -1
  35. package/dist/{chunk-DE4GLH3P.js → chunk-TV36SKEN.js} +2 -2
  36. package/dist/{chunk-J5DPVNL3.js → chunk-V42JY4F6.js} +2 -2
  37. package/dist/{chunk-FCDET2U5.js → chunk-VMK7I3TB.js} +3 -3
  38. package/dist/{chunk-IOG6LPEI.js → chunk-WJBJY5DQ.js} +2 -2
  39. package/dist/{chunk-SWGQAURM.js → chunk-XGCJNSI7.js} +26 -7
  40. package/dist/{chunk-FTW6C2E7.js → chunk-XZNO4QED.js} +10 -10
  41. package/dist/{chunk-NQWTCX3A.js → chunk-YCPV7FN6.js} +31 -19
  42. package/dist/{chunk-PK5NANMT.js → chunk-YT35WGIP.js} +5 -3
  43. package/dist/{chunk-DSPYQUH4.js → chunk-YU5GL7QS.js} +2 -2
  44. package/dist/{chunk-BL63NBJZ.js → chunk-ZEQMTBRD.js} +1 -1
  45. package/dist/{cli-PNMCZVQ4.js → cli-77URFYI7.js} +83 -83
  46. package/dist/{command-WKRTL3JQ.js → command-2LYWVGIK.js} +21 -21
  47. package/dist/{config-OOBPCY7Q.js → config-X45X7AS4.js} +3 -3
  48. package/dist/{connect-cmd-YEO7WRSL.js → connect-cmd-MPZWSEKY.js} +4 -4
  49. package/dist/{context-adopt-3REPEEQR.js → context-adopt-A77G67CP.js} +6 -5
  50. package/dist/{context-materialize-DU6B6RXF.js → context-materialize-KQZYATQZ.js} +6 -5
  51. package/dist/{dist-PKBWZAAL.js → dist-QY5CL5LB.js} +2 -2
  52. package/dist/{docker-5DUNHNOH.js → docker-V7B6UKPF.js} +6 -6
  53. package/dist/{doctor-FEIBPZL7.js → doctor-PUAL5LTL.js} +46 -35
  54. package/dist/{emit-artifact-cmd-S3CASUQK.js → emit-artifact-cmd-P3IWNSQY.js} +7 -7
  55. package/dist/{emit-cmd-ETI47BA6.js → emit-cmd-SU62J2PB.js} +4 -4
  56. package/dist/{emit-criteria-cmd-ZTUP7OGA.js → emit-criteria-cmd-GOSP6X74.js} +5 -5
  57. package/dist/{emit-finding-cmd-TTXBZ4B7.js → emit-finding-cmd-D554IQKU.js} +5 -5
  58. package/dist/{emit-result-cmd-34OC6TI5.js → emit-result-cmd-QACXTIBV.js} +7 -7
  59. package/dist/{exec-client-2UX6NHAO.js → exec-client-QTUO6TZT.js} +4 -4
  60. package/dist/{guest-init-VHQNFCFS.js → guest-init-4UW4HM6N.js} +4 -4
  61. package/dist/{hook-fast-CFLLVMSV.js → hook-fast-AQCAQIA6.js} +1 -1
  62. package/dist/{import-capture-cmd-Z3232HR4.js → import-capture-cmd-5NJVL2HN.js} +3 -3
  63. package/dist/{import-ruler-cmd-2PLXZXM7.js → import-ruler-cmd-TUK3MRPC.js} +2 -2
  64. package/dist/index.js +3 -3
  65. package/dist/{init-AHQHM56A.js → init-TMBE3BRN.js} +20 -20
  66. package/dist/{init-UZ5TXACM.js → init-WX5XE6L3.js} +47 -23
  67. package/dist/{init-cmd-F4FS5AVC.js → init-cmd-4FQKQLJ5.js} +14 -14
  68. package/dist/inspect-6UYAAXH7.js +6 -0
  69. package/dist/{install-C33LT5KQ.js → install-PYNCWSTV.js} +4 -4
  70. package/dist/{loop-U7GLISBM.js → loop-QLL4DKRF.js} +31 -30
  71. package/dist/{machine-Y3TBDMXD.js → machine-7T7FBSUL.js} +19 -19
  72. package/dist/{real-deps-AKVGIDPZ.js → real-deps-LS64D3M6.js} +2 -1
  73. package/dist/{session-sender-LKVVLAUP.js → session-sender-HVWTYG35.js} +6 -6
  74. package/dist/{starter-pack-L5WPXL4Q.js → starter-pack-I35VNYAR.js} +4 -4
  75. package/dist/{status-OQ23WOUP.js → status-SMF5JG2K.js} +24 -24
  76. package/dist/{sync-cmd-VH6HSMG5.js → sync-cmd-SLMPCUXO.js} +5 -5
  77. package/dist/{watch-HUKDEFUX.js → watch-TLM5QN5X.js} +5 -5
  78. package/dist/{work-claim-cmd-JLCU5SPP.js → work-claim-cmd-VSSZDFY5.js} +34 -12
  79. package/dist/{work-cmd-SBKQJBJ2.js → work-cmd-TK4VOOHL.js} +6 -6
  80. package/dist/{work-comment-cmd-TNUDUUAT.js → work-comment-cmd-VQCG72ZQ.js} +6 -6
  81. package/dist/{work-open-pr-cmd-IB57SMAD.js → work-open-pr-cmd-YESMWATB.js} +17 -9
  82. package/dist/{work-pr-cmd-HDDNFSKA.js → work-pr-cmd-6TMSCO3Q.js} +7 -6
  83. package/package.json +1 -1
  84. package/skill-pack/maintained/amend/SKILL.md +22 -12
  85. package/skill-pack/template/build/SKILL.md +13 -2
  86. package/skill-pack/template/build/references/evidence.md +2 -2
  87. package/dist/chunk-PVC36MFI.js +0 -103
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { autoConnectedLine, fetchFactories, promptOnTerminal, realConnectDeps, runConnect, runConnectCommand, saveFactoryConnection, selectFactory } from './chunk-TFJGK4UB.js';
4
- import './chunk-BL63NBJZ.js';
5
- import './chunk-CDISNKM4.js';
3
+ export { COMMIT_LINE, autoConnectedLine, fetchFactories, promptOnTerminal, realConnectDeps, runConnect, runConnectCommand, saveFactoryConnection, selectFactory } from './chunk-LYESSQUA.js';
4
+ import './chunk-ZEQMTBRD.js';
5
+ import './chunk-LTJPX7TX.js';
6
6
  import './chunk-USO2DKBD.js';
7
7
  import './chunk-N6LURUEF.js';
8
8
  import './chunk-YRYMNBGQ.js';
9
9
  import './chunk-PLMTLGYH.js';
10
- import './chunk-PK5NANMT.js';
10
+ import './chunk-YT35WGIP.js';
11
11
  import './chunk-EABW6AJQ.js';
12
12
  import './chunk-BJ3KTMDH.js';
13
13
  import './chunk-VNVZDWO3.js';
@@ -1,14 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { defaultGitRunner, hasSymlinkComponent } from './chunk-6AFQOYO3.js';
3
+ import { defaultGitRunner, hasSymlinkComponent } from './chunk-RWQWPZB4.js';
4
4
  import './chunk-ZJSNLVCE.js';
5
- import { writeContextManifest, writePinIfChanged, touchLastCheck, clearDegraded, writeSourceCache, SOURCE_CACHE_TTL_SUCCESS_MS, writeBuildHold } from './chunk-2MFYKH3C.js';
6
- import './chunk-WLV4KCAW.js';
7
- import './chunk-NKU5OPYP.js';
5
+ import { writeContextManifest, writePinIfChanged, touchLastCheck, clearDegraded, writeSourceCache, SOURCE_CACHE_TTL_SUCCESS_MS, writeBuildHold } from './chunk-BMX3L7CR.js';
6
+ import './chunk-BGWTYRSS.js';
7
+ import './chunk-TB7EP24C.js';
8
8
  import './chunk-YO4PSLVB.js';
9
9
  import './chunk-PLMTLGYH.js';
10
- import './chunk-PK5NANMT.js';
10
+ import './chunk-YT35WGIP.js';
11
11
  import './chunk-EABW6AJQ.js';
12
+ import './chunk-BYT5O5RV.js';
12
13
  import './chunk-RA3O54FC.js';
13
14
  import './chunk-V7NIVOFD.js';
14
15
  import './chunk-ZM2IMMYN.js';
@@ -1,14 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { defaultGitRunner, hasSymlinkComponent, materializeContext, parseOwnerRepo, parseRemoteHost, resolveGitCommonDir } from './chunk-6AFQOYO3.js';
3
+ export { defaultGitRunner, hasSymlinkComponent, materializeContext, parseOwnerRepo, parseRemoteHost, resolveGitCommonDir } from './chunk-RWQWPZB4.js';
4
4
  import './chunk-ZJSNLVCE.js';
5
- import './chunk-2MFYKH3C.js';
6
- import './chunk-WLV4KCAW.js';
7
- import './chunk-NKU5OPYP.js';
5
+ import './chunk-BMX3L7CR.js';
6
+ import './chunk-BGWTYRSS.js';
7
+ import './chunk-TB7EP24C.js';
8
8
  import './chunk-YO4PSLVB.js';
9
9
  import './chunk-PLMTLGYH.js';
10
- import './chunk-PK5NANMT.js';
10
+ import './chunk-YT35WGIP.js';
11
11
  import './chunk-EABW6AJQ.js';
12
+ import './chunk-BYT5O5RV.js';
12
13
  import './chunk-RA3O54FC.js';
13
14
  import './chunk-V7NIVOFD.js';
14
15
  import './chunk-ZM2IMMYN.js';
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { CaptureDaemon, PRICE_TABLE_SOURCE, SECRET_PATTERNS, SOURCE_ADAPTERS, SUPPORTED_VERSIONS, StatuslineAggregator, WARNING_CODES, claudeCodeAdapter, codexAdapter, codexSessionIdFromPath, compareVersions, completePrefix, computeStatuslineState, costOfUsage, cursorAdapter, cursorChatIdFromPath, defaultCodexSessionsDir, defaultCursorChatsDir, defaultCursorProjectsDir, defaultProjectsDir, defaultRawDir, enrichSessionRepo, findCodexRollouts, findCursorChats, findTranscripts, isNewerThanSupported, isPriceKnown, normalizeErrorSignature, normalizeRemote, parseCodexRollout, parseCursorChat, parseTranscript, readStatuslineState, readSyncWatermarkMs, remoteLookupFailed, resolvePrice, resolveRepoIdentity, rootChildIds, scanAll, scrubDeep, scrubText, sessionIdFromPath, setCustomScrubbers, setLocalIdentity, setRepoRoot, statuslineStatePath, tailTranscript, workspacesByHash, writeStatuslineState } from './chunk-CDISNKM4.js';
4
- import './chunk-PK5NANMT.js';
3
+ export { CaptureDaemon, PRICE_TABLE_SOURCE, SECRET_PATTERNS, SOURCE_ADAPTERS, SUPPORTED_VERSIONS, StatuslineAggregator, WARNING_CODES, claudeCodeAdapter, codexAdapter, codexSessionIdFromPath, compareVersions, completePrefix, computeStatuslineState, costOfUsage, cursorAdapter, cursorChatIdFromPath, defaultCodexSessionsDir, defaultCursorChatsDir, defaultCursorProjectsDir, defaultProjectsDir, defaultRawDir, enrichSessionRepo, findCodexRollouts, findCursorChats, findTranscripts, isNewerThanSupported, isPriceKnown, normalizeErrorSignature, normalizeRemote, parseCodexRollout, parseCursorChat, parseTranscript, readStatuslineState, readSyncWatermarkMs, remoteLookupFailed, resolvePrice, resolveRepoIdentity, rootChildIds, scanAll, scrubDeep, scrubText, sessionIdFromPath, setCustomScrubbers, setLocalIdentity, setRepoRoot, statuslineStatePath, tailTranscript, workspacesByHash, writeStatuslineState } from './chunk-LTJPX7TX.js';
4
+ import './chunk-YT35WGIP.js';
5
5
  import './chunk-Z5GEFMRW.js';
6
6
 
7
7
  createRequire(import.meta.url);
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { childEnvironment, createDockerHost, spawnRun } from './chunk-WGLWDX5J.js';
3
+ export { childEnvironment, createDockerHost, spawnRun } from './chunk-FKFGQJNN.js';
4
4
  import './chunk-QOZKPLVJ.js';
5
- import './chunk-DE4GLH3P.js';
5
+ import './chunk-TV36SKEN.js';
6
6
  import './chunk-CX22S5BA.js';
7
- import './chunk-CDISNKM4.js';
7
+ import './chunk-LTJPX7TX.js';
8
8
  import './chunk-7RQ73DLO.js';
9
- import './chunk-2FWL7CE2.js';
10
- import './chunk-HKMPVPO7.js';
11
- import './chunk-PK5NANMT.js';
9
+ import './chunk-M6G7TJVF.js';
10
+ import './chunk-YT35WGIP.js';
11
+ import './chunk-BYT5O5RV.js';
12
12
  import './chunk-ZM2IMMYN.js';
13
13
  import './chunk-Z5GEFMRW.js';
14
14
 
@@ -1,46 +1,46 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { needsClaudeCredential, claudeCredentialCheck, missingPermissionOf, missingPermissionFix } from './chunk-SWGQAURM.js';
3
+ import { needsClaudeCredential, claudeCredentialCheck, missingPermissionOf, missingPermissionFix } from './chunk-XGCJNSI7.js';
4
4
  import { launcherCheck } from './chunk-PTW6W5NR.js';
5
5
  import './chunk-TI7B7UEO.js';
6
6
  import { freeBytes, formatBytes } from './chunk-YYYRBYWG.js';
7
7
  import { RepoFilter } from './chunk-TBT347UY.js';
8
- import './chunk-IOG6LPEI.js';
9
- import { detectMachine, supportsContainerBuilds, describeMachineDocker, reachDockerStep, supportsMicroVmBuilds, microVmArchSupported, microVmAssetsPinned } from './chunk-LKUUQ3XV.js';
10
- import { MIN_ENGINE_MAJOR } from './chunk-GJ3OWUFO.js';
11
- import './chunk-Y7UQHKFY.js';
8
+ import './chunk-WJBJY5DQ.js';
9
+ import { detectMachine, supportsContainerBuilds, describeMachineDocker, reachDockerStep, supportsMicroVmBuilds, microVmArchSupported, microVmAssetsPinned } from './chunk-QPPPUKQJ.js';
10
+ import { MIN_ENGINE_MAJOR } from './chunk-LBU4CLK5.js';
11
+ import './chunk-3FMPZPJQ.js';
12
12
  import './chunk-N5FOE5PS.js';
13
13
  import './chunk-OGFGZQA3.js';
14
- import { resolveDevcontainerCli, spawnRun } from './chunk-WGLWDX5J.js';
14
+ import { resolveDevcontainerCli, spawnRun } from './chunk-FKFGQJNN.js';
15
15
  import { locateRecipe, assertBuildable, readRecipe, RecipeError } from './chunk-QOZKPLVJ.js';
16
- import { buildxState } from './chunk-DE4GLH3P.js';
16
+ import { buildxState } from './chunk-TV36SKEN.js';
17
17
  import { CLAUDE_CODE_VERSION } from './chunk-CX22S5BA.js';
18
- import './chunk-HWMYGAKF.js';
19
- import './chunk-2E2MG3KW.js';
20
- import { getJson, WorkCommandError, signatureRefusalMessage } from './chunk-TY7EZC7U.js';
21
- import './chunk-MSV44EB5.js';
18
+ import './chunk-6CXYORUS.js';
19
+ import './chunk-S6IUUNCD.js';
20
+ import { getJson, WorkCommandError, signatureRefusalMessage } from './chunk-KWCJLAHQ.js';
21
+ import './chunk-KPUJGBA4.js';
22
22
  import './chunk-BFESLKPP.js';
23
- import './chunk-TFJGK4UB.js';
24
- import './chunk-BL63NBJZ.js';
25
- import { compareVersions } from './chunk-CDISNKM4.js';
23
+ import './chunk-LYESSQUA.js';
24
+ import './chunk-ZEQMTBRD.js';
25
+ import { compareVersions } from './chunk-LTJPX7TX.js';
26
26
  import './chunk-USO2DKBD.js';
27
27
  import './chunk-N6LURUEF.js';
28
28
  import './chunk-YRYMNBGQ.js';
29
- import { builtinKind } from './chunk-7KI224YS.js';
29
+ import { builtinKind } from './chunk-M2PBLRB7.js';
30
30
  import { allowHostProblem, MAX_ALLOW_HOSTS } from './chunk-UXYLWVTQ.js';
31
31
  import { parseSize } from './chunk-7RQ73DLO.js';
32
- import './chunk-2FWL7CE2.js';
33
- import './chunk-HKMPVPO7.js';
32
+ import './chunk-M6G7TJVF.js';
34
33
  import './chunk-WZBHBH3J.js';
35
- import { defaultGitRunner } from './chunk-6AFQOYO3.js';
34
+ import { defaultGitRunner } from './chunk-RWQWPZB4.js';
36
35
  import './chunk-ZJSNLVCE.js';
37
- import './chunk-2MFYKH3C.js';
38
- import './chunk-WLV4KCAW.js';
39
- import './chunk-NKU5OPYP.js';
36
+ import './chunk-BMX3L7CR.js';
37
+ import './chunk-BGWTYRSS.js';
38
+ import './chunk-TB7EP24C.js';
40
39
  import { defaultFetch } from './chunk-YO4PSLVB.js';
41
40
  import './chunk-PLMTLGYH.js';
42
- import './chunk-PK5NANMT.js';
41
+ import './chunk-YT35WGIP.js';
43
42
  import './chunk-EABW6AJQ.js';
43
+ import './chunk-BYT5O5RV.js';
44
44
  import './chunk-RA3O54FC.js';
45
45
  import { loadHostKey } from './chunk-V7NIVOFD.js';
46
46
  import { runnerDir, hostKeyPath, jobsDir } from './chunk-ZM2IMMYN.js';
@@ -371,21 +371,28 @@ async function controlPlaneAccessCheck(env, fetchImpl) {
371
371
  }
372
372
  repositories.push({ host, repository: `${owner}/${repo}` });
373
373
  }
374
+ let listing;
375
+ let hasApp;
376
+ try {
377
+ const { data } = await getJson(env.gateway.url, "/v1/repositories/access", env.gateway.apiKey, env.gateway.appId, fetchImpl, signer);
378
+ listing = { ok: true, data };
379
+ hasApp = true;
380
+ } catch (err) {
381
+ listing = { ok: false, message: err instanceof Error ? err.message : String(err) };
382
+ hasApp = err instanceof WorkCommandError && err.code === "github_unavailable";
383
+ }
374
384
  if (listFactory) {
375
- try {
376
- const { data } = await getJson(env.gateway.url, "/v1/repositories/access", env.gateway.apiKey, env.gateway.appId, fetchImpl, signer);
385
+ if (!listing.ok) {
386
+ warnings.push(`could not list the factory's repositories: ${listing.message}`);
387
+ } else if (!Array.isArray(listing.data)) {
388
+ warnings.push("the gateway's answer listed no repositories");
389
+ } else {
377
390
  const filter = new RepoFilter(env.repos);
378
- if (!Array.isArray(data)) {
379
- warnings.push("the gateway's answer listed no repositories");
380
- } else {
381
- for (const row of data) {
382
- if (typeof row.repository !== "string") continue;
383
- const known = repositories.some((r) => r.host === "github.com" && r.repository === row.repository);
384
- if (!known && filter.allows(`github.com/${row.repository}`)) repositories.push({ host: "github.com", repository: row.repository });
385
- }
391
+ for (const row of listing.data) {
392
+ if (typeof row.repository !== "string") continue;
393
+ const known = repositories.some((r) => r.host === "github.com" && r.repository === row.repository);
394
+ if (!known && filter.allows(`github.com/${row.repository}`)) repositories.push({ host: "github.com", repository: row.repository });
386
395
  }
387
- } catch (err) {
388
- warnings.push(`could not list the factory's repositories: ${err instanceof Error ? err.message : String(err)}`);
389
396
  }
390
397
  }
391
398
  for (const { host, repository } of repositories) {
@@ -398,6 +405,10 @@ async function controlPlaneAccessCheck(env, fetchImpl) {
398
405
  continue;
399
406
  }
400
407
  for (const source of sources) {
408
+ if (hasApp) {
409
+ readable.push(source.repository);
410
+ continue;
411
+ }
401
412
  const url = env.controlPlaneUrl?.(source.repository, host) ?? `https://${host}/${source.repository}.git`;
402
413
  const listed = git(["ls-remote", url, source.ref], { cwd: tmpdir(), timeoutMs: 15e3 });
403
414
  if (listed.ok) {
@@ -419,7 +430,7 @@ async function controlPlaneAccessCheck(env, fetchImpl) {
419
430
  return {
420
431
  name,
421
432
  status: "pass",
422
- detail: readable.length > 0 ? `this host's git login reads ${[...new Set(readable)].join(", ")}` : repositories.length === 0 ? "the factory has no repositories this runner builds" : `no control plane governs ${repositories.length === 1 ? "the repository" : "any of the repositories"} ${listFactory ? "connected to the factory" : "in repos.include"}`
433
+ detail: readable.length > 0 ? hasApp ? `the runner reads ${[...new Set(readable)].join(", ")} through the GitHub App, so this host needs no git login for it` : `this host's git login reads ${[...new Set(readable)].join(", ")}` : repositories.length === 0 ? "the factory has no repositories this runner builds" : `no control plane governs ${repositories.length === 1 ? "the repository" : "any of the repositories"} ${listFactory ? "connected to the factory" : "in repos.include"}`
423
434
  };
424
435
  }
425
436
  function imageBuildLimitCheck(state, buildMemory) {
@@ -1,15 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { staleBuildRefusal, staleBuildWarning, detectCi } from './chunk-H6IGIE3I.js';
3
+ import { staleBuildRefusal, staleBuildWarning, detectCi } from './chunk-543OT6V5.js';
4
4
  import { launchRefusalForSession } from './chunk-HHJDN6AU.js';
5
5
  import './chunk-TBT347UY.js';
6
6
  import './chunk-F7CU5ABH.js';
7
7
  import './chunk-BKO6JEZI.js';
8
- import { autoConnect } from './chunk-MSV44EB5.js';
8
+ import { autoConnect } from './chunk-KPUJGBA4.js';
9
9
  import { detectActiveSession } from './chunk-BFESLKPP.js';
10
- import './chunk-TFJGK4UB.js';
11
- import { readEffectiveArtifactSpoolState, localArtifactIds, isArtifactTombstoned, artifactBlobsDir, appendArtifactRecord, artifactsSpoolPath, findPendingArtifactRecord, appendArtifactTombstone } from './chunk-BL63NBJZ.js';
12
- import { resolveRepoIdentity } from './chunk-CDISNKM4.js';
10
+ import './chunk-LYESSQUA.js';
11
+ import { readEffectiveArtifactSpoolState, localArtifactIds, isArtifactTombstoned, artifactBlobsDir, appendArtifactRecord, artifactsSpoolPath, findPendingArtifactRecord, appendArtifactTombstone } from './chunk-ZEQMTBRD.js';
12
+ import { resolveRepoIdentity } from './chunk-LTJPX7TX.js';
13
13
  import './chunk-USO2DKBD.js';
14
14
  import './chunk-N6LURUEF.js';
15
15
  import './chunk-YRYMNBGQ.js';
@@ -19,11 +19,11 @@ import './chunk-5QRP3MVS.js';
19
19
  import './chunk-ZJSNLVCE.js';
20
20
  import { defaultFetch } from './chunk-YO4PSLVB.js';
21
21
  import { resolveGatewayCredentials, unauthorizedMessage } from './chunk-PLMTLGYH.js';
22
- import { ARTIFACT_MAX_CAPTION_LENGTH, ArtifactCriterionIdSchema, ARTIFACT_MAX_FILENAME_LENGTH, mediaTypeForArtifactPath, inferArtifactKind, ARTIFACT_MAX_REPLACES_TARGETS, parseTestSelector, parseJunit, bindTests } from './chunk-PK5NANMT.js';
22
+ import { ARTIFACT_MAX_CAPTION_LENGTH, ArtifactCriterionIdSchema, ARTIFACT_MAX_FILENAME_LENGTH, mediaTypeForArtifactPath, inferArtifactKind, ARTIFACT_MAX_REPLACES_TARGETS, parseTestSelector, parseJunit, bindTests } from './chunk-YT35WGIP.js';
23
23
  import './chunk-EABW6AJQ.js';
24
24
  import './chunk-V7NIVOFD.js';
25
25
  import './chunk-ZM2IMMYN.js';
26
- import './chunk-K4MGMSMN.js';
26
+ import './chunk-4HMXH2OA.js';
27
27
  import './chunk-XCCLFVXM.js';
28
28
  import './chunk-BJ3KTMDH.js';
29
29
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { EmitError, runEmit } from './chunk-DSPYQUH4.js';
4
- import './chunk-WLV4KCAW.js';
5
- import './chunk-NKU5OPYP.js';
6
- import './chunk-PK5NANMT.js';
3
+ export { EmitError, runEmit } from './chunk-YU5GL7QS.js';
4
+ import './chunk-BGWTYRSS.js';
5
+ import './chunk-TB7EP24C.js';
6
+ import './chunk-YT35WGIP.js';
7
7
  import './chunk-RA3O54FC.js';
8
8
  import './chunk-Z5GEFMRW.js';
9
9
 
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { launchRefusalForSession } from './chunk-HHJDN6AU.js';
4
- import { autoConnect } from './chunk-MSV44EB5.js';
4
+ import { autoConnect } from './chunk-KPUJGBA4.js';
5
5
  import { detectActiveSession } from './chunk-BFESLKPP.js';
6
- import './chunk-TFJGK4UB.js';
7
- import './chunk-BL63NBJZ.js';
8
- import { resolveRepoIdentity } from './chunk-CDISNKM4.js';
6
+ import './chunk-LYESSQUA.js';
7
+ import './chunk-ZEQMTBRD.js';
8
+ import { resolveRepoIdentity } from './chunk-LTJPX7TX.js';
9
9
  import './chunk-USO2DKBD.js';
10
10
  import './chunk-N6LURUEF.js';
11
11
  import './chunk-YRYMNBGQ.js';
@@ -13,7 +13,7 @@ import { launchedItemForSession } from './chunk-GQD22KKN.js';
13
13
  import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
14
14
  import { defaultFetch } from './chunk-YO4PSLVB.js';
15
15
  import { resolveGatewayCredentials, unauthorizedMessage } from './chunk-PLMTLGYH.js';
16
- import { CriteriaListSchema } from './chunk-PK5NANMT.js';
16
+ import { CriteriaListSchema } from './chunk-YT35WGIP.js';
17
17
  import './chunk-EABW6AJQ.js';
18
18
  import './chunk-V7NIVOFD.js';
19
19
  import './chunk-ZM2IMMYN.js';
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { launchRefusalForSession } from './chunk-HHJDN6AU.js';
4
- import { autoConnect } from './chunk-MSV44EB5.js';
4
+ import { autoConnect } from './chunk-KPUJGBA4.js';
5
5
  import { detectActiveSession } from './chunk-BFESLKPP.js';
6
- import './chunk-TFJGK4UB.js';
7
- import './chunk-BL63NBJZ.js';
8
- import { resolveRepoIdentity } from './chunk-CDISNKM4.js';
6
+ import './chunk-LYESSQUA.js';
7
+ import './chunk-ZEQMTBRD.js';
8
+ import { resolveRepoIdentity } from './chunk-LTJPX7TX.js';
9
9
  import './chunk-USO2DKBD.js';
10
10
  import './chunk-N6LURUEF.js';
11
11
  import './chunk-YRYMNBGQ.js';
@@ -14,7 +14,7 @@ import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
14
14
  import { readLatestProvenanceForSession } from './chunk-ZJSNLVCE.js';
15
15
  import { defaultFetch } from './chunk-YO4PSLVB.js';
16
16
  import { resolveGatewayCredentials, unauthorizedMessage } from './chunk-PLMTLGYH.js';
17
- import { FindingBatchSchema } from './chunk-PK5NANMT.js';
17
+ import { FindingBatchSchema } from './chunk-YT35WGIP.js';
18
18
  import './chunk-EABW6AJQ.js';
19
19
  import './chunk-V7NIVOFD.js';
20
20
  import './chunk-ZM2IMMYN.js';
@@ -1,15 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { detectCi } from './chunk-H6IGIE3I.js';
3
+ import { detectCi } from './chunk-543OT6V5.js';
4
4
  import { launchRefusalForSession } from './chunk-HHJDN6AU.js';
5
5
  import './chunk-TBT347UY.js';
6
6
  import './chunk-F7CU5ABH.js';
7
7
  import './chunk-BKO6JEZI.js';
8
- import { autoConnect } from './chunk-MSV44EB5.js';
8
+ import { autoConnect } from './chunk-KPUJGBA4.js';
9
9
  import { detectActiveSession } from './chunk-BFESLKPP.js';
10
- import './chunk-TFJGK4UB.js';
11
- import './chunk-BL63NBJZ.js';
12
- import { resolveRepoIdentity } from './chunk-CDISNKM4.js';
10
+ import './chunk-LYESSQUA.js';
11
+ import './chunk-ZEQMTBRD.js';
12
+ import { resolveRepoIdentity } from './chunk-LTJPX7TX.js';
13
13
  import './chunk-USO2DKBD.js';
14
14
  import './chunk-N6LURUEF.js';
15
15
  import './chunk-YRYMNBGQ.js';
@@ -19,11 +19,11 @@ import './chunk-5QRP3MVS.js';
19
19
  import './chunk-ZJSNLVCE.js';
20
20
  import { defaultFetch } from './chunk-YO4PSLVB.js';
21
21
  import { resolveGatewayCredentials, unauthorizedMessage } from './chunk-PLMTLGYH.js';
22
- import { EmittedNameSchema, EMITTED_RESULT_MAX_LINK_LENGTH, EMITTED_RESULTS, EMITTED_RESULT_MAX_BODY_LENGTH } from './chunk-PK5NANMT.js';
22
+ import { EmittedNameSchema, EMITTED_RESULT_MAX_LINK_LENGTH, EMITTED_RESULTS, EMITTED_RESULT_MAX_BODY_LENGTH } from './chunk-YT35WGIP.js';
23
23
  import './chunk-EABW6AJQ.js';
24
24
  import './chunk-V7NIVOFD.js';
25
25
  import './chunk-ZM2IMMYN.js';
26
- import './chunk-K4MGMSMN.js';
26
+ import './chunk-4HMXH2OA.js';
27
27
  import './chunk-XCCLFVXM.js';
28
28
  import './chunk-BJ3KTMDH.js';
29
29
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { CAPTURE_LIMIT_BYTES, ExecConnectionError, HANDSHAKE_TIMEOUT_MS, execCapture, runExec, runVmExec, vmExecArgs, waitForAgent } from './chunk-HWMYGAKF.js';
4
- import './chunk-2E2MG3KW.js';
5
- import './chunk-2FWL7CE2.js';
6
- import './chunk-HKMPVPO7.js';
3
+ export { CAPTURE_LIMIT_BYTES, ExecConnectionError, HANDSHAKE_TIMEOUT_MS, execCapture, runExec, runVmExec, vmExecArgs, waitForAgent } from './chunk-6CXYORUS.js';
4
+ import './chunk-S6IUUNCD.js';
5
+ import './chunk-M6G7TJVF.js';
6
+ import './chunk-BYT5O5RV.js';
7
7
  import './chunk-Z5GEFMRW.js';
8
8
 
9
9
  createRequire(import.meta.url);
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { DOCKERD_LOG, HELPER_PATH, realGuestHost, relayPortsFrom, runGuestInit } from './chunk-J5DPVNL3.js';
4
- import './chunk-2E2MG3KW.js';
5
- import './chunk-2FWL7CE2.js';
6
- import './chunk-HKMPVPO7.js';
3
+ export { DOCKERD_LOG, HELPER_PATH, realGuestHost, relayPortsFrom, runGuestInit } from './chunk-V42JY4F6.js';
4
+ import './chunk-S6IUUNCD.js';
5
+ import './chunk-M6G7TJVF.js';
6
+ import './chunk-BYT5O5RV.js';
7
7
  import './chunk-Z5GEFMRW.js';
8
8
 
9
9
  createRequire(import.meta.url);
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { AUTO_SYNC_DEBOUNCE_MS, WORK_LEASE_RENEW_DEBOUNCE_MS, WORK_LINK_RETRIES, contextPossiblyGoverned, handleWorkLaunch, handleWorkSessionEnd, hookFiredMarkerPath, logHookError, maybeAutoSync, maybeRenewWorkLease, recordLinkExitFailure, runHookFast, spoolDir } from './chunk-K4MGMSMN.js';
3
+ export { AUTO_SYNC_DEBOUNCE_MS, WORK_LEASE_RENEW_DEBOUNCE_MS, WORK_LINK_RETRIES, contextPossiblyGoverned, handleWorkLaunch, handleWorkSessionEnd, hookFiredMarkerPath, logHookError, markWorkLeaseRenewed, maybeAutoSync, maybeRenewWorkLease, recordLinkExitFailure, runHookFast, spoolDir } from './chunk-4HMXH2OA.js';
4
4
  import './chunk-XCCLFVXM.js';
5
5
  import './chunk-BJ3KTMDH.js';
6
6
  import './chunk-VNVZDWO3.js';
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { loadMaintainedFiles, writeMaintainedFiles } from './chunk-WLV4KCAW.js';
4
- import './chunk-NKU5OPYP.js';
5
- import './chunk-PK5NANMT.js';
3
+ import { loadMaintainedFiles, writeMaintainedFiles } from './chunk-BGWTYRSS.js';
4
+ import './chunk-TB7EP24C.js';
5
+ import './chunk-YT35WGIP.js';
6
6
  import './chunk-RA3O54FC.js';
7
7
  import './chunk-Z5GEFMRW.js';
8
8
  import { statSync, existsSync, readFileSync, writeFileSync } from 'fs';
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { normalizePath } from './chunk-NKU5OPYP.js';
4
- import './chunk-PK5NANMT.js';
3
+ import { normalizePath } from './chunk-TB7EP24C.js';
4
+ import './chunk-YT35WGIP.js';
5
5
  import './chunk-Z5GEFMRW.js';
6
6
  import { existsSync, readdirSync, readFileSync, mkdirSync, writeFileSync } from 'fs';
7
7
  import { join, dirname } from 'path';
package/dist/index.js CHANGED
@@ -6,7 +6,7 @@ createRequire(import.meta.url);
6
6
  // src/index.ts
7
7
  var argv = process.argv.slice(2);
8
8
  if (argv[0] === "hook") {
9
- const { runHookFast } = await import('./hook-fast-CFLLVMSV.js');
9
+ const { runHookFast } = await import('./hook-fast-AQCAQIA6.js');
10
10
  await runHookFast(argv[1]);
11
11
  process.exit(0);
12
12
  }
@@ -21,6 +21,6 @@ if (argv[0] === "statusline") {
21
21
  await runStatuslineFast(argv.slice(1));
22
22
  process.exit(0);
23
23
  }
24
- (await import('./hook-fast-CFLLVMSV.js')).recordLinkExitFailure(argv);
25
- var { runCli } = await import('./cli-PNMCZVQ4.js');
24
+ (await import('./hook-fast-AQCAQIA6.js')).recordLinkExitFailure(argv);
25
+ var { runCli } = await import('./cli-77URFYI7.js');
26
26
  await runCli(process.argv);
@@ -1,40 +1,40 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- export { PLACEHOLDER_MARKER, RunnerInitError, isPlaceholderCommand, readConfigObject, runRunnerInit } from './chunk-IOG6LPEI.js';
4
- import './chunk-LKUUQ3XV.js';
5
- import './chunk-GJ3OWUFO.js';
6
- import './chunk-Y7UQHKFY.js';
3
+ export { PLACEHOLDER_MARKER, RunnerInitError, isPlaceholderCommand, readConfigObject, runRunnerInit } from './chunk-WJBJY5DQ.js';
4
+ import './chunk-QPPPUKQJ.js';
5
+ import './chunk-LBU4CLK5.js';
6
+ import './chunk-3FMPZPJQ.js';
7
7
  import './chunk-N5FOE5PS.js';
8
8
  import './chunk-OGFGZQA3.js';
9
- import './chunk-WGLWDX5J.js';
9
+ import './chunk-FKFGQJNN.js';
10
10
  import './chunk-QOZKPLVJ.js';
11
- import './chunk-DE4GLH3P.js';
11
+ import './chunk-TV36SKEN.js';
12
12
  import './chunk-CX22S5BA.js';
13
- import './chunk-HWMYGAKF.js';
14
- import './chunk-2E2MG3KW.js';
15
- import './chunk-TY7EZC7U.js';
16
- import './chunk-MSV44EB5.js';
13
+ import './chunk-6CXYORUS.js';
14
+ import './chunk-S6IUUNCD.js';
15
+ import './chunk-KWCJLAHQ.js';
16
+ import './chunk-KPUJGBA4.js';
17
17
  import './chunk-BFESLKPP.js';
18
- import './chunk-TFJGK4UB.js';
19
- import './chunk-BL63NBJZ.js';
20
- import './chunk-CDISNKM4.js';
18
+ import './chunk-LYESSQUA.js';
19
+ import './chunk-ZEQMTBRD.js';
20
+ import './chunk-LTJPX7TX.js';
21
21
  import './chunk-USO2DKBD.js';
22
22
  import './chunk-N6LURUEF.js';
23
23
  import './chunk-YRYMNBGQ.js';
24
24
  import './chunk-UXYLWVTQ.js';
25
25
  import './chunk-7RQ73DLO.js';
26
- import './chunk-2FWL7CE2.js';
27
- import './chunk-HKMPVPO7.js';
26
+ import './chunk-M6G7TJVF.js';
28
27
  import './chunk-WZBHBH3J.js';
29
- import './chunk-6AFQOYO3.js';
28
+ import './chunk-RWQWPZB4.js';
30
29
  import './chunk-ZJSNLVCE.js';
31
- import './chunk-2MFYKH3C.js';
32
- import './chunk-WLV4KCAW.js';
33
- import './chunk-NKU5OPYP.js';
30
+ import './chunk-BMX3L7CR.js';
31
+ import './chunk-BGWTYRSS.js';
32
+ import './chunk-TB7EP24C.js';
34
33
  import './chunk-YO4PSLVB.js';
35
34
  import './chunk-PLMTLGYH.js';
36
- import './chunk-PK5NANMT.js';
35
+ import './chunk-YT35WGIP.js';
37
36
  import './chunk-EABW6AJQ.js';
37
+ import './chunk-BYT5O5RV.js';
38
38
  import './chunk-RA3O54FC.js';
39
39
  import './chunk-V7NIVOFD.js';
40
40
  import './chunk-ZM2IMMYN.js';
@@ -1,44 +1,45 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { readConfigObject, RunnerInitError } from './chunk-IOG6LPEI.js';
4
- import './chunk-LKUUQ3XV.js';
5
- import './chunk-GJ3OWUFO.js';
3
+ import { npmSupportsProvenance } from './chunk-ABIWDUMS.js';
4
+ import { readConfigObject, RunnerInitError } from './chunk-WJBJY5DQ.js';
5
+ import './chunk-QPPPUKQJ.js';
6
+ import './chunk-LBU4CLK5.js';
6
7
  import { VM_SERVICE_NAME } from './chunk-FBTE2A2X.js';
7
8
  import { checkFit, RUNNER_RESERVE_BYTES } from './chunk-JKIWMRFH.js';
8
9
  import { writeLaunchAgent } from './chunk-LF6MLJCY.js';
9
- import './chunk-Y7UQHKFY.js';
10
+ import './chunk-3FMPZPJQ.js';
10
11
  import './chunk-N5FOE5PS.js';
11
12
  import './chunk-OGFGZQA3.js';
12
- import './chunk-WGLWDX5J.js';
13
+ import './chunk-FKFGQJNN.js';
13
14
  import './chunk-QOZKPLVJ.js';
14
- import './chunk-DE4GLH3P.js';
15
+ import './chunk-TV36SKEN.js';
15
16
  import './chunk-CX22S5BA.js';
16
- import './chunk-HWMYGAKF.js';
17
- import './chunk-2E2MG3KW.js';
18
- import './chunk-TY7EZC7U.js';
19
- import './chunk-MSV44EB5.js';
17
+ import './chunk-6CXYORUS.js';
18
+ import './chunk-S6IUUNCD.js';
19
+ import './chunk-KWCJLAHQ.js';
20
+ import './chunk-KPUJGBA4.js';
20
21
  import './chunk-BFESLKPP.js';
21
- import './chunk-TFJGK4UB.js';
22
- import './chunk-BL63NBJZ.js';
23
- import './chunk-CDISNKM4.js';
22
+ import './chunk-LYESSQUA.js';
23
+ import './chunk-ZEQMTBRD.js';
24
+ import './chunk-LTJPX7TX.js';
24
25
  import './chunk-USO2DKBD.js';
25
26
  import './chunk-N6LURUEF.js';
26
27
  import './chunk-YRYMNBGQ.js';
27
- import { resolveBuild, resolveHousekeeping } from './chunk-7KI224YS.js';
28
+ import { resolveBuild, resolveHousekeeping } from './chunk-M2PBLRB7.js';
28
29
  import './chunk-UXYLWVTQ.js';
29
30
  import { parseSize } from './chunk-7RQ73DLO.js';
30
- import './chunk-2FWL7CE2.js';
31
- import './chunk-HKMPVPO7.js';
31
+ import './chunk-M6G7TJVF.js';
32
32
  import './chunk-WZBHBH3J.js';
33
- import './chunk-6AFQOYO3.js';
33
+ import './chunk-RWQWPZB4.js';
34
34
  import './chunk-ZJSNLVCE.js';
35
- import './chunk-2MFYKH3C.js';
36
- import './chunk-WLV4KCAW.js';
37
- import './chunk-NKU5OPYP.js';
35
+ import './chunk-BMX3L7CR.js';
36
+ import './chunk-BGWTYRSS.js';
37
+ import './chunk-TB7EP24C.js';
38
38
  import './chunk-YO4PSLVB.js';
39
39
  import './chunk-PLMTLGYH.js';
40
- import './chunk-PK5NANMT.js';
40
+ import './chunk-YT35WGIP.js';
41
41
  import './chunk-EABW6AJQ.js';
42
+ import './chunk-BYT5O5RV.js';
42
43
  import './chunk-RA3O54FC.js';
43
44
  import './chunk-V7NIVOFD.js';
44
45
  import { hostKeyPath } from './chunk-ZM2IMMYN.js';
@@ -80,6 +81,11 @@ var VmInitError = class extends Error {
80
81
  var MIN_NODE_MAJOR = 22;
81
82
  var TARBALL_IN_VM = "/tmp/outerlayer-cli.tgz";
82
83
  var NODE_VERSION = /^v(\d+)\./;
84
+ var NPM_PACKAGE = "npm@10";
85
+ var NODE_PREFIX = "/usr";
86
+ var APT_NPM_DIVERTED = "/usr/bin/npm.distrib";
87
+ var NPM_BESIDE_NODE = '"$(dirname "$(command -v node)")/npm" --version';
88
+ var PROGRESS_INTERVAL_MS = 3e4;
83
89
  var quote = (text) => `'${text.replace(/'/g, `'\\''`)}'`;
84
90
  async function runVmInit(configPath, deps) {
85
91
  const { lima } = deps;
@@ -130,11 +136,23 @@ async function runVmInit(configPath, deps) {
130
136
  if (result.status !== 0) throw failed(`the VM step \`${argv.join(" ")}\``, result);
131
137
  return result.stdout;
132
138
  };
139
+ const stillRunning = async (what, step) => {
140
+ const startedAt = Date.now();
141
+ const timer = setInterval(() => {
142
+ const seconds = Math.floor((Date.now() - startedAt) / 1e3);
143
+ progress(`still ${what}: ${seconds < 60 ? `${seconds} s` : `${Math.floor(seconds / 60)} min`} so far`);
144
+ }, deps.progressIntervalMs ?? PROGRESS_INTERVAL_MS);
145
+ try {
146
+ return await step;
147
+ } finally {
148
+ clearInterval(timer);
149
+ }
150
+ };
133
151
  progress(`creating the Linux VM ${instance}: this downloads an image and can take several minutes`);
134
- const created = await lima.create({ instance, cpus: size.cpus, memoryGiB: size.memoryGiB, diskGiB: size.diskGiB });
152
+ const created = await stillRunning("creating the VM", lima.create({ instance, cpus: size.cpus, memoryGiB: size.memoryGiB, diskGiB: size.diskGiB }));
135
153
  if (created.status !== 0) throw failed("`limactl create`", created);
136
154
  progress("starting the VM");
137
- const started = await lima.start(instance);
155
+ const started = await stillRunning("starting the VM", lima.start(instance));
138
156
  if (started.status !== 0) throw failed("`limactl start`", started);
139
157
  const user = (await sh(["id", "-un"])).trim();
140
158
  const home = (await sh(["printenv", "HOME"])).trim();
@@ -145,6 +163,12 @@ async function runVmInit(configPath, deps) {
145
163
  if (!(Number(NODE_VERSION.exec(node)?.[1]) >= MIN_NODE_MAJOR)) {
146
164
  throw new VmInitError(`the VM's Node is ${node}, and the runner needs Node ${MIN_NODE_MAJOR} or later. ${leftBehind}`);
147
165
  }
166
+ for (const bin of ["/usr/bin/npm", "/usr/bin/npx"]) await sh(["sudo", "dpkg-divert", "--local", "--rename", "--add", bin]);
167
+ await sh(["sudo", APT_NPM_DIVERTED, "install", "--global", NPM_PACKAGE, "--prefix", NODE_PREFIX]);
168
+ const npm = (await sh(["sh", "-c", NPM_BESIDE_NODE])).trim();
169
+ if (!npmSupportsProvenance(npm)) {
170
+ throw new VmInitError(`the VM's npm is ${npm}, and the runner's self-update needs npm 9.5 or later to verify a release's provenance. ${leftBehind}`);
171
+ }
148
172
  if (deps.cliPackage === void 0) {
149
173
  await sh(["sudo", "npm", "install", "--global", `@outerlayer/cli@${deps.version}`]);
150
174
  } else {