@outerlayer/cli 0.33.0-next.20261021234516 → 0.33.0-next.20261022110058
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -11
- package/dist/{agent-setup-UY5NBT7C.js → agent-setup-2MJXGAZ5.js} +10 -10
- package/dist/{artifact-link-cmd-2MBHG3PO.js → artifact-link-cmd-6FF2Y6QI.js} +2 -2
- package/dist/{build-SK5BYBER.js → build-NCELVKHF.js} +2 -2
- package/dist/build-disk-5GIWYDOB.js +18 -0
- package/dist/build-info.json +1 -1
- package/dist/{builder-K2XIVSSZ.js → builder-EELBB7SI.js} +5 -5
- package/dist/{check-AXDPZJU4.js → check-EJKRXI2N.js} +36 -34
- package/dist/{chunk-N3KK5BKF.js → chunk-2GHI2J26.js} +7 -7
- package/dist/{chunk-AKR32WHV.js → chunk-5DNCFOXA.js} +9 -7
- package/dist/{chunk-UIBTEDLA.js → chunk-6JNCNHSV.js} +5 -5
- package/dist/{chunk-ZRTMS4C7.js → chunk-6WUQSARX.js} +11 -10
- package/dist/{chunk-EG7KPSSP.js → chunk-72BIONOT.js} +6 -6
- package/dist/{chunk-CMU6QJHE.js → chunk-AESNEWYR.js} +2 -2
- package/dist/{chunk-LN4WDONI.js → chunk-AVTI3FL5.js} +1 -1
- package/dist/{chunk-5RUH3PCG.js → chunk-B3EE7OKK.js} +4 -4
- package/dist/{chunk-Y3LIJIRH.js → chunk-BJQ25STI.js} +4 -4
- package/dist/{chunk-6TFTRVOA.js → chunk-C3XLVHN6.js} +2 -2
- package/dist/{chunk-X5LFLYSD.js → chunk-D7ECJX4J.js} +15 -38
- package/dist/{chunk-UWEJ6HGB.js → chunk-DY7Y7UT4.js} +2 -2
- package/dist/{chunk-AKHGQKNR.js → chunk-E6CO3MJE.js} +34 -2
- package/dist/{chunk-DM4EGXDO.js → chunk-EWVYQLD3.js} +1 -1
- package/dist/{chunk-O6NG67Y7.js → chunk-FQW7TKIU.js} +2 -2
- package/dist/{chunk-KUTZ6XLS.js → chunk-G63KT5I5.js} +1 -1
- package/dist/{chunk-Q2D4M3GC.js → chunk-GFYEMCPP.js} +1 -1
- package/dist/{chunk-4IG6EZHU.js → chunk-HJYBWJAS.js} +2 -2
- package/dist/{chunk-CV2S5L4J.js → chunk-HVIYKGK5.js} +79 -12
- package/dist/{chunk-TPGHCH2H.js → chunk-IK6M37BI.js} +14 -2
- package/dist/{chunk-TNJXCNQ6.js → chunk-JHTJPQSL.js} +4 -4
- package/dist/{chunk-RVWADVBN.js → chunk-JZ4FXSLI.js} +3 -3
- package/dist/{chunk-HT7LVCTX.js → chunk-L3DUKDTR.js} +2 -2
- package/dist/{chunk-KDM77TVX.js → chunk-LCVR4UIS.js} +2 -2
- package/dist/{chunk-OGCG5LOX.js → chunk-LJG6EMLJ.js} +1 -1
- package/dist/{chunk-72YES3RL.js → chunk-LWODW66U.js} +16 -16
- package/dist/chunk-MBE6FEQ3.js +111 -0
- package/dist/{chunk-RW52CUFX.js → chunk-NSPRS7WK.js} +1 -1
- package/dist/{chunk-DE7YSNDX.js → chunk-OJ63GRZ2.js} +2 -2
- package/dist/{chunk-Q4YVHYHT.js → chunk-QJNFO7TQ.js} +3 -3
- package/dist/{chunk-NOXK3QW6.js → chunk-QSSYXK6C.js} +3 -3
- package/dist/{chunk-LHYO4RDP.js → chunk-R6QCSHKC.js} +2 -1
- package/dist/{chunk-CHXYLCMA.js → chunk-S2IJQER5.js} +256 -256
- package/dist/{chunk-RQKQTRXM.js → chunk-THTBXIK5.js} +4 -4
- package/dist/{chunk-M5OBRUQE.js → chunk-UIUGTW5C.js} +2 -2
- package/dist/{chunk-YH2632RT.js → chunk-V2EUC2MJ.js} +43 -20
- package/dist/{chunk-SFJD4MRY.js → chunk-WHRR55PC.js} +14 -7
- package/dist/{chunk-LBPK2TPR.js → chunk-XTBGPISI.js} +17 -6
- package/dist/chunk-YYYRBYWG.js +32 -0
- package/dist/{claude-launcher-STSKZNW3.js → claude-launcher-GJON3VHY.js} +5 -5
- package/dist/{cli-WAXIJAES.js → cli-5JSVOAE5.js} +90 -90
- package/dist/{command-2JEY6X6U.js → command-7IY3XGAG.js} +24 -23
- package/dist/{connect-cmd-WFHAPGCZ.js → connect-cmd-AQSJVDQU.js} +8 -8
- package/dist/{container-start-TTEHOSJK.js → container-start-BPQHJMNF.js} +25 -24
- package/dist/{context-cleanup-UBOJHGQM.js → context-cleanup-BX5Y3AFL.js} +3 -3
- package/dist/{control-plane-launch-R4X63DYW.js → control-plane-launch-K7YD6KEN.js} +6 -6
- package/dist/{dist-ADFLG3AY.js → dist-ACTRIBVW.js} +2 -2
- package/dist/{docker-UYS5N5B7.js → docker-UKJBLZLW.js} +5 -5
- package/dist/{doctor-3XPT5F2Y.js → doctor-JUR62PMF.js} +48 -25
- package/dist/{emit-artifact-cmd-FR5PUUJR.js → emit-artifact-cmd-HI3EYJA3.js} +13 -13
- package/dist/{emit-cmd-JOO6ZTEI.js → emit-cmd-OX6LYS6I.js} +6 -6
- package/dist/{emit-criteria-cmd-DKPZJTIN.js → emit-criteria-cmd-IC5OIZX2.js} +9 -9
- package/dist/{emit-demo-cmd-Q3BCRULM.js → emit-demo-cmd-HWDC3MAK.js} +212 -102
- package/dist/{emit-finding-cmd-VM4KIVEM.js → emit-finding-cmd-A7RBLHTN.js} +10 -10
- package/dist/{emit-result-cmd-SEKL6HUU.js → emit-result-cmd-2WVVAGST.js} +12 -12
- package/dist/{emit-step-cmd-4YAWK4VE.js → emit-step-cmd-KNVHYSXT.js} +10 -10
- package/dist/{findings-cmd-RXYIWXY4.js → findings-cmd-ISP3P3UY.js} +10 -10
- package/dist/{fleet-readiness-VIX76RNL.js → fleet-readiness-O2WAJJVT.js} +8 -8
- package/dist/{governing-source-APGCKDTS.js → governing-source-PMWZJCXJ.js} +13 -13
- package/dist/{guest-init-BI7267TB.js → guest-init-3LNAL3TB.js} +2 -2
- package/dist/{hook-fast-NVBMSE3N.js → hook-fast-FJ2PMBML.js} +1 -1
- package/dist/index.js +4 -4
- package/dist/{init-XWQJEW6H.js → init-YRSKJNSB.js} +25 -24
- package/dist/{init-BR4Z4T2Q.js → init-ZXV6LILS.js} +26 -25
- package/dist/{init-cmd-IEMYX6KA.js → init-cmd-3F436JBW.js} +18 -18
- package/dist/{init-update-HOTJISWA.js → init-update-6OPETOBA.js} +17 -17
- package/dist/{layout-ZI4RJ6MT.js → layout-JGF7MJHG.js} +4 -4
- package/dist/{login-browser-WUSIVD5E.js → login-browser-3RIZQJY2.js} +2 -2
- package/dist/{loop-3NRAMJA4.js → loop-MCR3EUSZ.js} +36 -34
- package/dist/{machine-LUXL7SFT.js → machine-35YQ7MGN.js} +23 -22
- package/dist/{machine-skills-REHDWINX.js → machine-skills-AGERT2HN.js} +4 -4
- package/dist/{runner-identity-DR5I3NBT.js → runner-identity-GO762MHZ.js} +5 -5
- package/dist/{runner-key-OLMCAOTD.js → runner-key-BQSR6MK4.js} +25 -24
- package/dist/{session-sender-PLQ5NOEW.js → session-sender-ENL3IBVD.js} +13 -13
- package/dist/{spec-cmd-NIAQWMLE.js → spec-cmd-SLJT7MRX.js} +10 -10
- package/dist/{starter-pack-OESK7UX2.js → starter-pack-UBEC5LTE.js} +5 -5
- package/dist/{status-4HNX45UZ.js → status-GQEAZBUJ.js} +29 -28
- package/dist/{sync-cmd-UTESQMDU.js → sync-cmd-Z4BYKM6K.js} +12 -12
- package/dist/{watch-4UC4FGI5.js → watch-MBEA6QB4.js} +12 -12
- package/dist/{work-claim-cmd-ODYRE44S.js → work-claim-cmd-TLXRPJWO.js} +12 -12
- package/dist/{work-cmd-QQDUI3YX.js → work-cmd-DYM67Z3F.js} +10 -10
- package/dist/{work-comment-cmd-FIOMDPIZ.js → work-comment-cmd-CRRWP3AH.js} +10 -10
- package/dist/{work-logs-cmd-DA6MPQ6O.js → work-logs-cmd-7LFOEVXI.js} +10 -10
- package/dist/{work-open-pr-cmd-QG2FT7OW.js → work-open-pr-cmd-XXQ75PSU.js} +11 -11
- package/dist/{work-pr-cmd-XNXWWLS5.js → work-pr-cmd-ZVE7EGSC.js} +10 -10
- package/dist/{work-stop-cmd-2KLZ2UH2.js → work-stop-cmd-GVFSTGLK.js} +10 -10
- package/package.json +1 -1
- package/skill-pack/maintained/outerlayer-evidence/SKILL.md +8 -5
- package/dist/{chunk-RJYKTWUP.js → chunk-ELYHDWCC.js} +1 -1
|
@@ -22277,6 +22277,10 @@ var ARTIFACT_MAX_GIT_BRANCH_LENGTH = 255;
|
|
|
22277
22277
|
var ARTIFACT_MAX_COMMIT_SHA_LENGTH = 64;
|
|
22278
22278
|
var ARTIFACT_MAX_SESSION_ID_LENGTH = 128;
|
|
22279
22279
|
var Sha256Schema = external_exports.string().regex(/^[0-9a-f]{64}$/);
|
|
22280
|
+
var ArtifactRangeSchema = external_exports.object({
|
|
22281
|
+
start: external_exports.number().finite().min(0),
|
|
22282
|
+
end: external_exports.number().finite()
|
|
22283
|
+
}).refine((range) => range.end > range.start, { message: "end must be after start", path: ["end"] });
|
|
22280
22284
|
var ArtifactSpoolRecordSchema = external_exports.looseObject({
|
|
22281
22285
|
rec: external_exports.literal("artifact"),
|
|
22282
22286
|
artifactId: external_exports.string().min(1).max(64),
|
|
@@ -22319,7 +22323,12 @@ var ArtifactSpoolRecordSchema = external_exports.looseObject({
|
|
|
22319
22323
|
replacesTargets: external_exports.array(external_exports.string().regex(/^[A-Za-z0-9_.:-]{1,64}$/)).min(2).max(ARTIFACT_MAX_REPLACES_TARGETS).optional(),
|
|
22320
22324
|
/** The tests `--test` selected from a JUnit results file, with any
|
|
22321
22325
|
* location the caller gave. Absent when the whole file is bound. */
|
|
22322
|
-
tests: TestSelectionListSchema.optional()
|
|
22326
|
+
tests: TestSelectionListSchema.optional(),
|
|
22327
|
+
/** The part of a video this artifact proves, in seconds from its start. */
|
|
22328
|
+
range: ArtifactRangeSchema.optional(),
|
|
22329
|
+
/** True when the bytes may already be stored: `sync` sends the record with
|
|
22330
|
+
* no blob first and sends the blob only when the gateway asks for it. */
|
|
22331
|
+
blobOptional: external_exports.boolean().optional()
|
|
22323
22332
|
});
|
|
22324
22333
|
var ArtifactTombstoneRecordSchema = external_exports.looseObject({
|
|
22325
22334
|
rec: external_exports.literal("artifact-tombstone"),
|
|
@@ -22737,7 +22746,30 @@ var DemoRecordV2Schema = external_exports.strictObject({
|
|
|
22737
22746
|
schemaVersion: external_exports.literal(2),
|
|
22738
22747
|
chapters: external_exports.array(DemoRecordChapterV2Schema).min(1).max(DEMO_CHAPTERS_MAX)
|
|
22739
22748
|
});
|
|
22740
|
-
external_exports.
|
|
22749
|
+
var DemoRecordChapterV3Schema = external_exports.strictObject({
|
|
22750
|
+
...chapterFields,
|
|
22751
|
+
/** The `clientArtifactId` of the chapter's artifact: a range of the whole video, or its own clip. */
|
|
22752
|
+
artifactId: external_exports.string().min(1).max(64),
|
|
22753
|
+
/** The chapter's span in the artifact's video, in seconds from its start. In clip mode the video is the chapter's own clip. */
|
|
22754
|
+
range: ArtifactRangeSchema,
|
|
22755
|
+
bound: external_exports.boolean(),
|
|
22756
|
+
comparable: DemoComparableSchema,
|
|
22757
|
+
stills: external_exports.array(DemoStillSchema.pick({ check: true, sha256: true })).max(DEMO_CHECKS_MAX),
|
|
22758
|
+
difference: external_exports.strictObject({ check: external_exports.number().int().min(0), region: DemoRegionSchema }).optional()
|
|
22759
|
+
}).refine((chapter) => chapter.end > chapter.start, { message: "a chapter must end after it starts", path: ["end"] }).refine((chapter) => chapter.comparable === "no" === (chapter.difference !== void 0), {
|
|
22760
|
+
message: "a chapter has a difference exactly when it is not comparable",
|
|
22761
|
+
path: ["difference"]
|
|
22762
|
+
});
|
|
22763
|
+
var DemoRecordVideoSchema = external_exports.union([
|
|
22764
|
+
external_exports.strictObject({ artifactId: external_exports.string().min(1).max(64) }),
|
|
22765
|
+
external_exports.strictObject({ omitted: external_exports.literal("size"), bytes: external_exports.number().int().nonnegative() })
|
|
22766
|
+
]);
|
|
22767
|
+
var DemoRecordV3Schema = external_exports.strictObject({
|
|
22768
|
+
schemaVersion: external_exports.literal(3),
|
|
22769
|
+
video: DemoRecordVideoSchema,
|
|
22770
|
+
chapters: external_exports.array(DemoRecordChapterV3Schema).min(1).max(DEMO_CHAPTERS_MAX)
|
|
22771
|
+
});
|
|
22772
|
+
external_exports.discriminatedUnion("schemaVersion", [DemoRecordV1Schema, DemoRecordV2Schema, DemoRecordV3Schema]);
|
|
22741
22773
|
/*! Bundled license information:
|
|
22742
22774
|
|
|
22743
22775
|
xmlchars/xml/1.0/ed5.js:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { ArtifactTombstoneRecordSchema, ArtifactSpoolRecordSchema } from './chunk-
|
|
3
|
+
import { ArtifactTombstoneRecordSchema, ArtifactSpoolRecordSchema } from './chunk-E6CO3MJE.js';
|
|
4
4
|
import { homeFromEnv } from './chunk-VNVZDWO3.js';
|
|
5
5
|
import { mkdirSync, appendFileSync, writeFileSync, renameSync, unlinkSync, existsSync, readdirSync, readFileSync, statSync } from 'fs';
|
|
6
6
|
import { join, dirname } from 'path';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { detectMachine, supportsContainerBuilds, reachDockerStep, describeMachineDocker, supportsMicroVmBuilds } from './chunk-CMU6QJHE.js';
|
|
4
|
-
import { MIN_ENGINE_MAJOR } from './chunk-X5LFLYSD.js';
|
|
5
3
|
import { hasStoredCredential, AGENT_COMMANDS, storeClaudeCredential, credentialFromStdin, isAgentName } from './chunk-52C3SSNF.js';
|
|
4
|
+
import { detectMachine, supportsContainerBuilds, reachDockerStep, describeMachineDocker, supportsMicroVmBuilds } from './chunk-AESNEWYR.js';
|
|
5
|
+
import { MIN_ENGINE_MAJOR } from './chunk-D7ECJX4J.js';
|
|
6
6
|
import { runnerCredentialProblem } from './chunk-ALSE7YKX.js';
|
|
7
7
|
import { runnerDir, RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-ESP5VZBD.js';
|
|
8
8
|
import { existsSync, readFileSync, mkdirSync, writeFileSync } from 'fs';
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
3
|
import { MAINTAINED_SKILLS } from './chunk-CDDED64E.js';
|
|
4
4
|
import { resolvePackageVersion } from './chunk-RA3O54FC.js';
|
|
5
|
-
import { splitRawFile } from './chunk-
|
|
5
|
+
import { splitRawFile } from './chunk-LJG6EMLJ.js';
|
|
6
6
|
import { existsSync, readFileSync, mkdirSync, writeFileSync, readdirSync } from 'fs';
|
|
7
7
|
import { join, dirname } from 'path';
|
|
8
8
|
import { fileURLToPath } from 'url';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { loadMachineSkillFiles, resolvePackRoot } from './chunk-
|
|
3
|
+
import { loadMachineSkillFiles, resolvePackRoot } from './chunk-G63KT5I5.js';
|
|
4
4
|
import { MAINTAINED_SKILLS, maintainedLineVersion } from './chunk-CDDED64E.js';
|
|
5
5
|
import { resolvePackageVersion } from './chunk-RA3O54FC.js';
|
|
6
6
|
import { homeFromEnv } from './chunk-VNVZDWO3.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { AGENTS_SKILLS_BASE, OUTERLAYER_SKILLS_BASE } from './chunk-
|
|
4
|
-
import { normalizePath, CONTEXT_PIN_FILENAME } from './chunk-
|
|
3
|
+
import { AGENTS_SKILLS_BASE, OUTERLAYER_SKILLS_BASE } from './chunk-G63KT5I5.js';
|
|
4
|
+
import { normalizePath, CONTEXT_PIN_FILENAME } from './chunk-LJG6EMLJ.js';
|
|
5
5
|
import { existsSync, readdirSync, readFileSync, mkdirSync, writeFileSync, lstatSync, readlinkSync, symlinkSync, rmdirSync } from 'fs';
|
|
6
6
|
import { relative, sep, join } from 'path';
|
|
7
7
|
|
|
@@ -1,28 +1,29 @@
|
|
|
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, MICROVM_COMMAND_DIR, commandLogOffset, startMicroVmCommand, microVmCommandLine, runCommand, execCommandLine, startSender, startHostServices, finishJob, sampleGuest, foldSample, isContainerTracked, isMicroVmTracked, probeMicroVmCommand, probeCommand, appendCommandLog, judgeProbe, EXIT_CODE_FILE, isTracked, isGroupAlive, outcomeFromExitCode, isTimedOut, readCpuUsec, isIdle, stopOrphanedMicroVms, unfinishedJobs, listUnreadableJobs, listAdoptableJobs, retryFailedReleases, recoverLostJobs, GUEST_USAGE_INTERVAL_MS, hookLimitsFor, AttemptLogBook, microVmOomKills, needsRenew, renewLease, RENEW_INTERVAL_SECONDS, listTrackedJobs, restartSender, serveLease, vmAlive, writeGuestGhConfig, ALREADY_RELEASED, inTeardown } from './chunk-
|
|
3
|
+
import { releaseLease, isUnfinished, setStage, jobEnv, runHook, describeHookEnd, provisionMicroVm, deliverCommitHooks, provisionProcess, provisionEnvironment, readProvisionOut, resolveHostBuild, workdirProblem, listenOnBroker, hostEnvironment, hostCommandEnvironment, execArgv, MICROVM_COMMAND_DIR, commandLogOffset, startMicroVmCommand, microVmCommandLine, runCommand, execCommandLine, startSender, startHostServices, finishJob, sampleGuest, foldSample, isContainerTracked, isMicroVmTracked, probeMicroVmCommand, probeCommand, appendCommandLog, judgeProbe, EXIT_CODE_FILE, isTracked, isGroupAlive, outcomeFromExitCode, isTimedOut, readCpuUsec, isIdle, stopOrphanedMicroVms, unfinishedJobs, listUnreadableJobs, listAdoptableJobs, retryFailedReleases, recoverLostJobs, GUEST_USAGE_INTERVAL_MS, hookLimitsFor, AttemptLogBook, microVmOomKills, needsRenew, renewLease, RENEW_INTERVAL_SECONDS, listTrackedJobs, restartSender, serveLease, vmAlive, writeGuestGhConfig, ALREADY_RELEASED, inTeardown } from './chunk-LWODW66U.js';
|
|
4
|
+
import { JOB_STATE_FORMAT, readsJobState, jobStateFormatOf } from './chunk-ZVB57WI6.js';
|
|
4
5
|
import { readHousekeepingRecord, writeHousekeepingRecord } from './chunk-LH3KULPL.js';
|
|
5
6
|
import { decideInstalledSwitch } from './chunk-3JVYMD4G.js';
|
|
6
7
|
import { fetchVersionMeta, npmVersion, npmSupportsProvenance, fetchTarballDigest, fetchProvenance, installVersion, auditSignatures } from './chunk-E7R2GIAW.js';
|
|
7
8
|
import { fitImageBuildMemory } from './chunk-M5ZXOQYS.js';
|
|
8
9
|
import { RUNNER_PROTOCOL } from './chunk-YKYCE4HY.js';
|
|
9
10
|
import { writePendingUpdate } from './chunk-CNRMP6EN.js';
|
|
10
|
-
import {
|
|
11
|
-
import { currentSkillCommand, formerSkillProblem, realBlockedProbes, checkBlocked } from './chunk-LBPK2TPR.js';
|
|
11
|
+
import { currentSkillCommand, formerSkillProblem, realBlockedProbes, checkBlocked } from './chunk-XTBGPISI.js';
|
|
12
12
|
import { writeMarker, readMarker, currentVersion, removeMarker, entryIn, versionDir, startedThroughCurrent, switchCurrent, isInLayout, cleanVersions, stagingDir } from './chunk-3VGDZ23W.js';
|
|
13
13
|
import { RepoFilter } from './chunk-TBT347UY.js';
|
|
14
|
-
import { leaseTimeLeftMs, createContainerRuntime, withTunnelLog, LEASE_SECONDS, provisionContainer, leaseExpiresAtMs, deliverContainerHooks, lifecycleSteps, lifecycleFailureReason, prepareBranch, containerCommandExec, setUpRunnerCgroup, sweepImageBuilders,
|
|
15
|
-
import {
|
|
14
|
+
import { leaseTimeLeftMs, createContainerRuntime, withTunnelLog, LEASE_SECONDS, provisionContainer, leaseExpiresAtMs, deliverContainerHooks, lifecycleSteps, lifecycleFailureReason, prepareBranch, containerCommandExec, setUpRunnerCgroup, sweepImageBuilders, measureDisk, parseCpuList, ensureTunnel, keepGhConfigCurrent, filesAreCopied, gitRemoteFor, startServicesFor, createLeaseChannel } from './chunk-D7ECJX4J.js';
|
|
15
|
+
import { claimPidFile, writePidFile, readPidFile, releasePidFile } from './chunk-IPJ6HR7E.js';
|
|
16
|
+
import { startTimeOf, isSameProcess } from './chunk-JBJTC3UU.js';
|
|
17
|
+
import { describeCallFailure, retrySend, shortClaim, relativeToRunner, formatDuration, BuildTokens, classifyRefusal, refusalCode, createRunnerLog, formatClock } from './chunk-LCVR4UIS.js';
|
|
16
18
|
import { tagToPull, pullInstruction, imageTag, writeUpdateStatus } from './chunk-533QGXGZ.js';
|
|
17
19
|
import { isVersion, compareVersions, satisfiesRange } from './chunk-TQMI335S.js';
|
|
20
|
+
import { freeBytes, formatBytes } from './chunk-YYYRBYWG.js';
|
|
21
|
+
import { writeJobFile, ensureRunnerIdentity, readJobFile, builderName, runnerLabelValue, ensureFailureCount, builderSpec, ensureBuilder, spawnRun, BUILD_LABEL, RUNNER_LABEL, readJobFileChecked } from './chunk-S2IJQER5.js';
|
|
18
22
|
import { isBuiltinContainer, isBuiltinVm, isBuiltinProcess, loadRunnerConfig, checkHooks, builtinKind, DEFAULT_UPDATE_MAX_WAIT_HOURS } from './chunk-ALSE7YKX.js';
|
|
19
|
-
import { claimPidFile, writePidFile, readPidFile, releasePidFile } from './chunk-IPJ6HR7E.js';
|
|
20
|
-
import { startTimeOf, isSameProcess } from './chunk-JBJTC3UU.js';
|
|
21
|
-
import { writeJobFile, ensureRunnerIdentity, readJobFile, builderName, runnerLabelValue, ensureFailureCount, builderSpec, ensureBuilder, spawnRun, BUILD_LABEL, RUNNER_LABEL, readJobFileChecked } from './chunk-CHXYLCMA.js';
|
|
22
23
|
import { exceedsDisk } from './chunk-YJLHUKYS.js';
|
|
23
|
-
import { isSignatureRefusal, WorkCommandError, getJson, postJson } from './chunk-
|
|
24
|
+
import { isSignatureRefusal, WorkCommandError, getJson, postJson } from './chunk-6JNCNHSV.js';
|
|
24
25
|
import { loadHostKey, ensureHostKey, signerFor } from './chunk-JT3YO5MH.js';
|
|
25
|
-
import { RUNNER_DIR_MODE, runnerDir, buildDir, attemptStamp, jobDir, RUNNER_FILE_MODE, jobsDir, pidFilePath, spoolDir,
|
|
26
|
+
import { RUNNER_DIR_MODE, runnerDir, buildDir, attemptStamp, jobDir, RUNNER_FILE_MODE, jobsDir, pidFilePath, spoolDir, imagesDir, rootfsDir, builderCacheDiskPath } from './chunk-ESP5VZBD.js';
|
|
26
27
|
import { parseClaimIdentity, parseClaimedRepositories, parseUnreachable, repositoriesOf, primaryOf, sharedUserEnvironment, JOB_MOUNT, takeClaudeCredential, heldClaudeCredential, currentClaudeCredential } from './chunk-HDSDUTX4.js';
|
|
27
28
|
import { resolveVersion } from './chunk-RA3O54FC.js';
|
|
28
29
|
import { fdName } from './chunk-XD4ZCMA4.js';
|
|
@@ -537,6 +538,7 @@ function settleUpdate(args) {
|
|
|
537
538
|
|
|
538
539
|
// src/runner/housekeeping/docker.ts
|
|
539
540
|
var KIND_LABEL = "ai.outerlayer.kind";
|
|
541
|
+
var RECIPE_KEY_LABEL = "ai.outerlayer.recipe-key";
|
|
540
542
|
var NO_BUILDER = /no builder .* found/i;
|
|
541
543
|
function failure(result, what) {
|
|
542
544
|
return new Error(`${what}: ${result.stderr.trim() || `docker exited ${result.status}`}`);
|
|
@@ -624,6 +626,21 @@ function createHousekeepingDocker(deps) {
|
|
|
624
626
|
labels: row.Config?.Labels ?? {}
|
|
625
627
|
}));
|
|
626
628
|
},
|
|
629
|
+
async listLabelledImages() {
|
|
630
|
+
const listed = await run("docker", ["image", "ls", "--all", "--no-trunc", "--quiet", "--filter", `label=${KIND_LABEL}`]);
|
|
631
|
+
if (listed.status !== 0) throw failure(listed, "docker image ls");
|
|
632
|
+
const ids = [...new Set(listed.stdout.split("\n").map((l) => l.trim()).filter(Boolean))];
|
|
633
|
+
if (ids.length === 0) return [];
|
|
634
|
+
const inspected = await run("docker", ["image", "inspect", ...ids]);
|
|
635
|
+
if (inspected.status !== 0) throw failure(inspected, "docker image inspect");
|
|
636
|
+
return JSON.parse(inspected.stdout).map((row) => ({
|
|
637
|
+
id: row.Id,
|
|
638
|
+
size: row.Size ?? 0,
|
|
639
|
+
labels: row.Config?.Labels ?? {},
|
|
640
|
+
tags: (row.RepoTags ?? []).filter((tag) => tag !== "<none>:<none>"),
|
|
641
|
+
createdMs: Date.parse(row.Created ?? "")
|
|
642
|
+
}));
|
|
643
|
+
},
|
|
627
644
|
async removeImage(id) {
|
|
628
645
|
const result = await run("docker", ["rmi", id]);
|
|
629
646
|
if (result.status !== 0) throw failure(result, `docker rmi ${id}`);
|
|
@@ -747,6 +764,46 @@ async function removeDanglingImages(docker, log, live) {
|
|
|
747
764
|
}
|
|
748
765
|
return freed;
|
|
749
766
|
}
|
|
767
|
+
var UNRECORDED_IMAGE_GRACE_MS = 60 * 60 * 1e3;
|
|
768
|
+
function recordedImages(configPath) {
|
|
769
|
+
const imageIds = /* @__PURE__ */ new Set();
|
|
770
|
+
const recipeKeys = /* @__PURE__ */ new Set();
|
|
771
|
+
const root = imagesDir(configPath);
|
|
772
|
+
for (const owner of listDir(root)) {
|
|
773
|
+
for (const repo of listDir(join(root, owner))) {
|
|
774
|
+
for (const entry of listDir(join(root, owner, repo))) {
|
|
775
|
+
const file = join(root, owner, repo, entry, "image.json");
|
|
776
|
+
if (!existsSync(file)) continue;
|
|
777
|
+
let record;
|
|
778
|
+
try {
|
|
779
|
+
record = JSON.parse(readFileSync(file, "utf8"));
|
|
780
|
+
} catch {
|
|
781
|
+
return void 0;
|
|
782
|
+
}
|
|
783
|
+
if (typeof record.imageId === "string") imageIds.add(record.imageId);
|
|
784
|
+
if (typeof record.recipeKey === "string") recipeKeys.add(record.recipeKey);
|
|
785
|
+
}
|
|
786
|
+
}
|
|
787
|
+
}
|
|
788
|
+
return { imageIds, recipeKeys };
|
|
789
|
+
}
|
|
790
|
+
async function removeUnrecordedImages(docker, log, recorded, live, nowMs) {
|
|
791
|
+
let freed = 0;
|
|
792
|
+
for (const image of await docker.listLabelledImages()) {
|
|
793
|
+
const kind = image.labels[KIND_LABEL];
|
|
794
|
+
if (image.tags.length === 0 || live.has(image.id)) continue;
|
|
795
|
+
if (!(nowMs - image.createdMs >= UNRECORDED_IMAGE_GRACE_MS)) continue;
|
|
796
|
+
if (kind === "build" ? recorded.imageIds.has(image.id) : kind === "recipe" ? recorded.recipeKeys.has(image.labels[RECIPE_KEY_LABEL] ?? "") : true) continue;
|
|
797
|
+
try {
|
|
798
|
+
for (const tag of image.tags) await docker.removeImage(tag);
|
|
799
|
+
freed += image.size;
|
|
800
|
+
log.line(`housekeeping: removed ${kind} image ${image.tags.join(", ")} (${formatBytes(image.size)}), no image record names it`);
|
|
801
|
+
} catch (err) {
|
|
802
|
+
log.error(`housekeeping: could not remove image ${image.tags.join(", ")}: ${describeCallFailure(err)}`);
|
|
803
|
+
}
|
|
804
|
+
}
|
|
805
|
+
return freed;
|
|
806
|
+
}
|
|
750
807
|
async function runHousekeeping(options) {
|
|
751
808
|
const { docker, log } = options;
|
|
752
809
|
const nowMs = options.now().getTime();
|
|
@@ -796,6 +853,16 @@ async function runHousekeeping(options) {
|
|
|
796
853
|
}
|
|
797
854
|
}
|
|
798
855
|
if (canTell && listed !== void 0) {
|
|
856
|
+
const recorded = recordedImages(options.configPath);
|
|
857
|
+
if (recorded === void 0) {
|
|
858
|
+
log.error("housekeeping: an image record does not parse, so no tagged image is removed this pass");
|
|
859
|
+
} else {
|
|
860
|
+
try {
|
|
861
|
+
freed += await removeUnrecordedImages(docker, log, recorded, liveImageIds(jobs.unfinished), nowMs);
|
|
862
|
+
} catch (err) {
|
|
863
|
+
log.error(`housekeeping: the runner's images could not be listed: ${describeCallFailure(err)}`);
|
|
864
|
+
}
|
|
865
|
+
}
|
|
799
866
|
freed += await removeStaleRootDisks(root, jobs.unfinished, options);
|
|
800
867
|
try {
|
|
801
868
|
freed += await removeDanglingImages(docker, log, liveImageIds(jobs.unfinished));
|
|
@@ -1770,7 +1837,7 @@ var CLAIM_REFUSAL_CODES = new Set(
|
|
|
1770
1837
|
"pull_request_from_fork pull_request_on_default_branch pull_request_ambiguous pull_request_repository_not_connected repository_not_reachable branch_claimed_elsewhere".split(" ")
|
|
1771
1838
|
);
|
|
1772
1839
|
async function tryClaimAndStart(state, item, queue) {
|
|
1773
|
-
const { postJson: postJson2 } = await import('./work-cmd-
|
|
1840
|
+
const { postJson: postJson2 } = await import('./work-cmd-DYM67Z3F.js');
|
|
1774
1841
|
const log = logOf(state);
|
|
1775
1842
|
const hostKey = await loadHostKey(state.config.configPath);
|
|
1776
1843
|
const claim = await retrySend(
|
|
@@ -2966,7 +3033,7 @@ async function start(configPath, deps = { fetchImpl: fetch }) {
|
|
|
2966
3033
|
check: update.check ? () => update.check(configPath) : async () => {
|
|
2967
3034
|
const held = heldClaudeCredential();
|
|
2968
3035
|
const env = held === void 0 ? process.env : { ...process.env, [held.variable]: held.value };
|
|
2969
|
-
return (await import('./check-
|
|
3036
|
+
return (await import('./check-EJKRXI2N.js')).runRunnerCheck(configPath, { fetchImpl: deps.fetchImpl, env });
|
|
2970
3037
|
},
|
|
2971
3038
|
now: () => (deps.now ?? (() => /* @__PURE__ */ new Date()))().getTime(),
|
|
2972
3039
|
log
|
|
@@ -3,7 +3,7 @@ import { createRequire } from 'node:module';
|
|
|
3
3
|
import { claimPidFile, RunnerAlreadyRunningError, releasePidFile } from './chunk-IPJ6HR7E.js';
|
|
4
4
|
import { startTimeOf } from './chunk-JBJTC3UU.js';
|
|
5
5
|
import { RecipeError, locateRecipe, readRecipe, assertBuildable, writeSanitizedRecipe, classifyProperties, SANITIZED_NAME } from './chunk-3Z3MPR55.js';
|
|
6
|
-
import { GH_VERSION, VOICE_PACK_FILES, VOICE_PACK_VERSION, FFMPEG_STATIC, FFMPEG_BUILD_TAG, GH_SHA256, TINI_SHA256, TINI_VERSION, CLAUDE_CODE_VERSION, NODE_IMAGE, DEFAULT_BASE_IMAGE, MEDIA_PINS } from './chunk-
|
|
6
|
+
import { GH_VERSION, VOICE_PACK_FILES, VOICE_PACK_VERSION, FFMPEG_STATIC, FFMPEG_BUILD_TAG, GH_SHA256, TINI_SHA256, TINI_VERSION, CLAUDE_CODE_VERSION, NODE_IMAGE, DEFAULT_BASE_IMAGE, MEDIA_PINS, PLAYWRIGHT_VERSION } from './chunk-R6QCSHKC.js';
|
|
7
7
|
import { RUNNER_DIR_MODE, RUNNER_FILE_MODE, repoCacheDir, imagesDir, attemptStamp, runnerDir, rootfsPathFor } from './chunk-ESP5VZBD.js';
|
|
8
8
|
import { PROXY_WARNING_FLAG, withGitConfig, tokenHeader } from './chunk-HDSDUTX4.js';
|
|
9
9
|
import { RELAY_ID, RELAY_USER } from './chunk-MESOOLF4.js';
|
|
@@ -158,7 +158,19 @@ function plain(name, value, allowed) {
|
|
|
158
158
|
}
|
|
159
159
|
var DEFAULT_PACKAGES = ["git", "ca-certificates", "curl", "build-essential", "python3", "python3-pip", "python3-venv", "unzip", "jq"];
|
|
160
160
|
function defaultDockerfile(baseImage, nodeImage) {
|
|
161
|
-
return
|
|
161
|
+
return [
|
|
162
|
+
ubuntuWithNode(baseImage, nodeImage, DEFAULT_PACKAGES),
|
|
163
|
+
// The browsers live in one shared folder so any user finds them. A build container's root filesystem is
|
|
164
|
+
// read-only, so the build user cannot add to this folder: a repository that needs another Playwright version
|
|
165
|
+
// installs that version's Chromium into a writable folder by setting PLAYWRIGHT_BROWSERS_PATH.
|
|
166
|
+
// `install --with-deps` runs apt-get as root and works on amd64 and arm64.
|
|
167
|
+
"ENV PLAYWRIGHT_BROWSERS_PATH=/ms-playwright",
|
|
168
|
+
"RUN mkdir -p /ms-playwright \\",
|
|
169
|
+
` && npx -y playwright@${plain("the Playwright version", PLAYWRIGHT_VERSION, /^[0-9.]+$/)} install --with-deps chromium \\`,
|
|
170
|
+
" && chmod -R a+rX /ms-playwright \\",
|
|
171
|
+
" && rm -rf /var/lib/apt/lists/* /root/.npm",
|
|
172
|
+
""
|
|
173
|
+
].join("\n");
|
|
162
174
|
}
|
|
163
175
|
function ubuntuWithNode(baseImage, nodeImage, packages) {
|
|
164
176
|
return [
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { isAgentsMdLayout, discoverOuterlayerPaths, isForeignTree, toRepoRelative } from './chunk-
|
|
3
|
+
import { isAgentsMdLayout, discoverOuterlayerPaths, isForeignTree, toRepoRelative } from './chunk-HJYBWJAS.js';
|
|
4
4
|
import { C } from './chunk-ANPNT6PM.js';
|
|
5
|
-
import { retiredSkillPaths, removeRetiredSkills } from './chunk-
|
|
6
|
-
import { maintainedFilesForExistingSkills, loadMaintainedFiles, writeMaintainedFiles } from './chunk-
|
|
5
|
+
import { retiredSkillPaths, removeRetiredSkills } from './chunk-UIUGTW5C.js';
|
|
6
|
+
import { maintainedFilesForExistingSkills, loadMaintainedFiles, writeMaintainedFiles } from './chunk-G63KT5I5.js';
|
|
7
7
|
import { cliInvocation } from './chunk-CRB3POP4.js';
|
|
8
|
-
import { emitTree, generatedHeaderSource, parseOuterlayerConfig, classifyTree } from './chunk-
|
|
8
|
+
import { emitTree, generatedHeaderSource, parseOuterlayerConfig, classifyTree } from './chunk-LJG6EMLJ.js';
|
|
9
9
|
import { existsSync, readFileSync, mkdirSync, writeFileSync, copyFileSync, unlinkSync, rmdirSync, readdirSync } from 'fs';
|
|
10
10
|
import { join, dirname } from 'path';
|
|
11
11
|
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { removeRetiredSkills } from './chunk-
|
|
3
|
+
import { removeRetiredSkills } from './chunk-UIUGTW5C.js';
|
|
4
4
|
import { defaultFetch, resolveGatewayCredentials } from './chunk-VQ2JGZSC.js';
|
|
5
5
|
import { withTokenHeader } from './chunk-HDSDUTX4.js';
|
|
6
6
|
import { appendContextProvenance } from './chunk-ZJSNLVCE.js';
|
|
7
|
-
import { loadMaintainedFiles, writeMaintainedFiles } from './chunk-
|
|
7
|
+
import { loadMaintainedFiles, writeMaintainedFiles } from './chunk-G63KT5I5.js';
|
|
8
8
|
import { cliInvocation } from './chunk-CRB3POP4.js';
|
|
9
9
|
import { writeDegraded, writeSourceCache, SOURCE_CACHE_TTL_RETRY_MS, writeContextManifest, SOURCE_CACHE_TTL_SUCCESS_MS, readSourceCache, isSourceCacheFresh, clearDegraded } from './chunk-YQR6E6OV.js';
|
|
10
|
-
import { normalizeRepoName, parseOuterlayerConfig, classifyTree, emitTree } from './chunk-
|
|
10
|
+
import { normalizeRepoName, parseOuterlayerConfig, classifyTree, emitTree } from './chunk-LJG6EMLJ.js';
|
|
11
11
|
import { homeFromEnv } from './chunk-VNVZDWO3.js';
|
|
12
12
|
import { execFileSync } from 'child_process';
|
|
13
13
|
import { existsSync, mkdirSync, writeFileSync, chmodSync, lstatSync, readFileSync, copyFileSync } from 'fs';
|
|
@@ -680,11 +680,11 @@ async function missingControlPlane(cwd, sessionId, home, env) {
|
|
|
680
680
|
const dirs = findGitDirs(cwd);
|
|
681
681
|
if (dirs === void 0) return void 0;
|
|
682
682
|
if (existsSync(join(dirs.gitCommonDir, "outerlayer", "materialized.json")) || hasExcludeBlock(dirs.gitCommonDir)) {
|
|
683
|
-
const { cleanupEarlierCopies } = await import('./context-cleanup-
|
|
683
|
+
const { cleanupEarlierCopies } = await import('./context-cleanup-BX5Y3AFL.js');
|
|
684
684
|
cleanupEarlierCopies(dirs);
|
|
685
685
|
}
|
|
686
686
|
if (!contextPossiblyGoverned(cwd, home)) return void 0;
|
|
687
|
-
const { governanceOf } = await import('./control-plane-launch-
|
|
687
|
+
const { governanceOf } = await import('./control-plane-launch-K7YD6KEN.js');
|
|
688
688
|
if (await governanceOf({ cwd, env, home }) !== "governed") return void 0;
|
|
689
689
|
recordMissingContext(dirs, sessionId, home);
|
|
690
690
|
const launcher = `${cliInvocation()} claude`;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { WorkCommandError, postJson } from './chunk-
|
|
4
|
-
import { defaultGitRunner, materializeContext, isStagingWriteFault, lookupGoverningSource } from './chunk-
|
|
3
|
+
import { WorkCommandError, postJson } from './chunk-6JNCNHSV.js';
|
|
4
|
+
import { defaultGitRunner, materializeContext, isStagingWriteFault, lookupGoverningSource } from './chunk-JZ4FXSLI.js';
|
|
5
5
|
import { signingFetchFor } from './chunk-VQ2JGZSC.js';
|
|
6
6
|
import { signerFor } from './chunk-JT3YO5MH.js';
|
|
7
7
|
import { SHIM_DIR, stagedContextDir, contextHomeDir, deliveryDir, keptContextDir } from './chunk-ESP5VZBD.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { RESERVED_EMIT_NAMES, ARTIFACT_KINDS, ArtifactCriterionIdSchema } from './chunk-
|
|
3
|
+
import { RESERVED_EMIT_NAMES, ARTIFACT_KINDS, ArtifactCriterionIdSchema } from './chunk-E6CO3MJE.js';
|
|
4
4
|
import { __commonJS, __require, __toESM } from './chunk-Z5GEFMRW.js';
|
|
5
5
|
|
|
6
6
|
createRequire(import.meta.url);
|
|
@@ -1,33 +1,33 @@
|
|
|
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 { DOCKERD_LOG, HELPER_PATH, HELPER_RECORD } from './chunk-
|
|
5
|
-
import { zodProblem } from './chunk-I3LTIAOR.js';
|
|
6
|
-
import { senderPidfile } from './chunk-Q4YVHYHT.js';
|
|
7
|
-
import { installScrubContext } from './chunk-SFJD4MRY.js';
|
|
4
|
+
import { DOCKERD_LOG, HELPER_PATH, HELPER_RECORD } from './chunk-ELYHDWCC.js';
|
|
8
5
|
import { writeDockerClientConfig } from './chunk-XTNMIV77.js';
|
|
9
|
-
import {
|
|
6
|
+
import { zodProblem } from './chunk-I3LTIAOR.js';
|
|
7
|
+
import { senderPidfile } from './chunk-QJNFO7TQ.js';
|
|
8
|
+
import { installScrubContext } from './chunk-WHRR55PC.js';
|
|
9
|
+
import { ADDED_USER, shellQuote, GH_CONFIG_YML, ghHostsYml, AssetError, obtainImage, ensureRootfs, makeBuildsDirPrivate, gitRemoteFor, startServicesFor, createLeaseChannel, createBuildDisk, machineConfig, startJailedInto, resolveAgentUser, AgentUserError, runBuildSteps, LEASE_SECONDS, createContainerRuntime, stopContainer, cleanupContainer, outOfMemoryReason, containerSenderCommand, signalInContainer, syncInContainer, copyTranscriptsFromContainer, MANAGED_UNJAILED_REASON, senderAliveScript, helperFirecrackerNote, isLiteralAddress, stopJailed, deleteBuildDisk, startCheckContainer, lifecycleSteps, lifecycleFailureReason, writeEvalInput, DeliveryFailure, EVAL_INPUT_NAME, copyTranscripts, senderSignalScript, containerJudgeEnvironment, ROOT_DISK_ID_PREFIX, copyJudgeTree } from './chunk-D7ECJX4J.js';
|
|
10
|
+
import { readBranchHead, fetchCommit, diffBetween } from './chunk-IK6M37BI.js';
|
|
11
|
+
import { isSameProcess, startTimeOf } from './chunk-JBJTC3UU.js';
|
|
10
12
|
import { waitForAgent, vmExecArgs } from './chunk-QQGZ5THT.js';
|
|
11
13
|
import { socketPathProblem, vsockLinks, LEASE_LINK, linkVsockSockets } from './chunk-HIGJTX5U.js';
|
|
12
|
-
import { describeCallFailure, resolveGoverningSource, refusalCode, removeStagedContext, stageGovernedContext, pinnedSourceOf, commandWithShim, logStamp, createRunnerLog, removeKeptContext, formatDuration, retrySend, formatClock, WORKFLOW_PERMISSION_REASON, keptContextTree } from './chunk-
|
|
14
|
+
import { describeCallFailure, resolveGoverningSource, refusalCode, removeStagedContext, stageGovernedContext, pinnedSourceOf, commandWithShim, logStamp, createRunnerLog, removeKeptContext, formatDuration, retrySend, formatClock, WORKFLOW_PERMISSION_REASON, keptContextTree } from './chunk-LCVR4UIS.js';
|
|
15
|
+
import { HASH_ARGV, parseProgramHash, JUDGE_PROGRAM, writeJobFile, readJobFile, childEnvironment, withAnswerProtocol, judgeCommand, MAX_REPORT_BYTES, JUDGE_MAX_TURNS, JUDGE_DIR, COMMAND_DIR, MAX_ITEMS_BYTES } from './chunk-S2IJQER5.js';
|
|
16
|
+
import { CLAUDE_CODE_VERSION, FIRECRACKER_VERSION } from './chunk-R6QCSHKC.js';
|
|
13
17
|
import { imageBuildOf, isBuiltinContainer, isBuiltinProcess, isBuiltinVm, DEFAULT_CHECK_TIME_LIMIT_MINUTES } from './chunk-ALSE7YKX.js';
|
|
14
|
-
import { readBranchHead, fetchCommit, diffBetween } from './chunk-TPGHCH2H.js';
|
|
15
|
-
import { isSameProcess, startTimeOf } from './chunk-JBJTC3UU.js';
|
|
16
|
-
import { HASH_ARGV, parseProgramHash, JUDGE_PROGRAM, writeJobFile, readJobFile, childEnvironment, withAnswerProtocol, judgeCommand, MAX_REPORT_BYTES, JUDGE_MAX_TURNS, JUDGE_DIR, COMMAND_DIR, MAX_ITEMS_BYTES } from './chunk-CHXYLCMA.js';
|
|
17
18
|
import { parseSize } from './chunk-YJLHUKYS.js';
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import { scrubText } from './chunk-AKR32WHV.js';
|
|
19
|
+
import { WorkCommandError, postJson, isSignatureRefusal, getJson } from './chunk-6JNCNHSV.js';
|
|
20
|
+
import { planArtifactUpload } from './chunk-EWVYQLD3.js';
|
|
21
|
+
import { scrubText } from './chunk-5DNCFOXA.js';
|
|
22
22
|
import { readCloudConfig } from './chunk-PJDQPF5N.js';
|
|
23
23
|
import { signerFor } from './chunk-JT3YO5MH.js';
|
|
24
24
|
import { RUNNER_FILE_MODE, runnerDir, buildDir, vsockPath } from './chunk-ESP5VZBD.js';
|
|
25
25
|
import { JOB_MOUNT, claudeCredential, repositoriesOf, primaryOf, buildEnvironment, CHECKOUT_DIR, parseIsolation, proxyEnvironment, withProxyWarningHidden, containerLocalAddress, destinationEnvironment, CLAUDE_CREDENTIAL_VARIABLES, builtInEnvironment, withHooksPath, startBuildServices, BUILT_IN_NAMES, AGENT_CREDENTIAL_MISSING, sharedUserEnvironment, headerVariables, authorEnvironment, withTunnelRecord, commitIdentityRecord, RELAY_PORT, repositoryPath, lifecycleWorkdir, CHECK_ITEMS_FILE, currentClaudeCredential, removedClaudeCredentialValues, checkEnvironment, EVAL_INPUT_DIR } from './chunk-HDSDUTX4.js';
|
|
26
|
-
import { resolvePackRoot } from './chunk-
|
|
26
|
+
import { resolvePackRoot } from './chunk-G63KT5I5.js';
|
|
27
27
|
import { MAINTAINED_SKILLS } from './chunk-CDDED64E.js';
|
|
28
28
|
import { resolveVersion } from './chunk-RA3O54FC.js';
|
|
29
|
-
import { parsePolicy } from './chunk-
|
|
30
|
-
import { CheckItemsSchema, CHECK_ITEM_REASON_MAX_LENGTH } from './chunk-
|
|
29
|
+
import { parsePolicy } from './chunk-LJG6EMLJ.js';
|
|
30
|
+
import { CheckItemsSchema, CHECK_ITEM_REASON_MAX_LENGTH } from './chunk-E6CO3MJE.js';
|
|
31
31
|
import { homeFromEnv } from './chunk-VNVZDWO3.js';
|
|
32
32
|
import { fdName } from './chunk-XD4ZCMA4.js';
|
|
33
33
|
import { RUNNER_WORDED_REASONS, UNKNOWN_TRACKING_REASON } from './chunk-MESOOLF4.js';
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
3
|
+
import { formatBytes, freeBytes } from './chunk-YYYRBYWG.js';
|
|
4
|
+
import { BUILD_LABEL, RUNNER_LABEL, runnerLabelValue } from './chunk-S2IJQER5.js';
|
|
5
|
+
import { parseSize } from './chunk-YJLHUKYS.js';
|
|
6
|
+
import { buildsDir, rootfsDir, runnerDir } from './chunk-ESP5VZBD.js';
|
|
7
|
+
import { spawnSync } from 'child_process';
|
|
8
|
+
import { existsSync, statSync, readdirSync } from 'fs';
|
|
9
|
+
import { join } from 'path';
|
|
10
|
+
|
|
11
|
+
createRequire(import.meta.url);
|
|
12
|
+
function checkDiskFit(input) {
|
|
13
|
+
const limit = parseSize(input.buildDisk);
|
|
14
|
+
if (limit === void 0) return { fits: true };
|
|
15
|
+
const { freeBytes: free, heldBytes: held, rootDiskBytes: root } = input.facts;
|
|
16
|
+
const neededBytes = input.concurrency * (limit + root);
|
|
17
|
+
const availableBytes = free + held;
|
|
18
|
+
if (neededBytes <= availableBytes) return { fits: true };
|
|
19
|
+
const oneBuild = root > 0 ? `runner.build.disk ${input.buildDisk} plus a root disk of ${formatBytes(root)}` : `runner.build.disk ${input.buildDisk}`;
|
|
20
|
+
return {
|
|
21
|
+
fits: false,
|
|
22
|
+
neededBytes,
|
|
23
|
+
availableBytes,
|
|
24
|
+
message: `the builds' disks do not fit: runner.concurrency ${input.concurrency} times the space one build can hold (${oneBuild}) needs ${formatBytes(neededBytes)}, and ${formatBytes(availableBytes)} is available (${formatBytes(free)} free plus ${formatBytes(held)} held by running builds)`
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
function allocatedBytes(path) {
|
|
28
|
+
try {
|
|
29
|
+
return statSync(path).blocks * 512;
|
|
30
|
+
} catch {
|
|
31
|
+
return 0;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function listDir(path) {
|
|
35
|
+
try {
|
|
36
|
+
return readdirSync(path);
|
|
37
|
+
} catch {
|
|
38
|
+
return void 0;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function microVmFacts(configPath) {
|
|
42
|
+
const builds = buildsDir(configPath);
|
|
43
|
+
const free = freeBytes(builds);
|
|
44
|
+
if (free === void 0) return void 0;
|
|
45
|
+
let held = 0;
|
|
46
|
+
if (existsSync(builds)) {
|
|
47
|
+
const entries = listDir(builds);
|
|
48
|
+
if (entries === void 0) return void 0;
|
|
49
|
+
for (const entry of entries) held += allocatedBytes(join(builds, entry, "build.ext4"));
|
|
50
|
+
}
|
|
51
|
+
let root = 0;
|
|
52
|
+
const roots = rootfsDir(runnerDir(configPath));
|
|
53
|
+
if (existsSync(roots)) {
|
|
54
|
+
const entries = listDir(roots);
|
|
55
|
+
if (entries === void 0) return void 0;
|
|
56
|
+
for (const entry of entries) {
|
|
57
|
+
if (!entry.endsWith(".ext4")) continue;
|
|
58
|
+
try {
|
|
59
|
+
root = Math.max(root, statSync(join(roots, entry)).size);
|
|
60
|
+
} catch {
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return { freeBytes: free, heldBytes: held, rootDiskBytes: root };
|
|
65
|
+
}
|
|
66
|
+
var DOCKER_TIMEOUT_MS = 1e4;
|
|
67
|
+
var DEFAULT_BUILD_DISK = "40g";
|
|
68
|
+
var DOCKER_CACHE_MS = 6e4;
|
|
69
|
+
var DEFAULT_VOLUMES_DIR = "/var/lib/docker/volumes";
|
|
70
|
+
function runDocker(args, spawn = spawnSync) {
|
|
71
|
+
const result = spawn("docker", args, { encoding: "utf8", timeout: DOCKER_TIMEOUT_MS });
|
|
72
|
+
return result.status === 0 ? result.stdout : void 0;
|
|
73
|
+
}
|
|
74
|
+
var SIZE_UNITS = { b: 1, kb: 1e3, mb: 1e6, gb: 1e9, tb: 1e12 };
|
|
75
|
+
function volumeBytes(dfOutput, names) {
|
|
76
|
+
let total = 0;
|
|
77
|
+
for (const line of dfOutput.split("\n")) {
|
|
78
|
+
const [name, , size] = line.trim().split(/\s+/);
|
|
79
|
+
if (name === void 0 || size === void 0 || !names.has(name)) continue;
|
|
80
|
+
const match = /^([\d.]+)([A-Za-z]+)$/.exec(size);
|
|
81
|
+
const unit = match === null ? void 0 : SIZE_UNITS[match[2].toLowerCase()];
|
|
82
|
+
if (match !== null && unit !== void 0) total += Number(match[1]) * unit;
|
|
83
|
+
}
|
|
84
|
+
return total;
|
|
85
|
+
}
|
|
86
|
+
function containerFacts(cache, configPath, docker, now) {
|
|
87
|
+
if (cache.reading === void 0 || cache.reading.configPath !== configPath || now - cache.reading.at > DOCKER_CACHE_MS) {
|
|
88
|
+
const root = docker(["info", "--format", "{{.DockerRootDir}}"])?.trim();
|
|
89
|
+
const listed = docker(["volume", "ls", "--quiet", "--filter", `label=${BUILD_LABEL}`, "--filter", `label=${RUNNER_LABEL}=${runnerLabelValue(configPath)}`]);
|
|
90
|
+
const names = new Set((listed ?? "").split("\n").map((n) => n.trim()).filter((n) => n !== ""));
|
|
91
|
+
const df = listed === void 0 || names.size === 0 ? void 0 : docker(["system", "df", "-v"]);
|
|
92
|
+
const held = listed === void 0 ? void 0 : names.size === 0 ? 0 : df === void 0 ? void 0 : volumeBytes(df, names);
|
|
93
|
+
cache.reading = {
|
|
94
|
+
at: now,
|
|
95
|
+
configPath,
|
|
96
|
+
held,
|
|
97
|
+
volumes: root === void 0 || root === "" ? DEFAULT_VOLUMES_DIR : join(root, "volumes")
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
if (cache.reading.held === void 0) return void 0;
|
|
101
|
+
const free = freeBytes(cache.reading.volumes);
|
|
102
|
+
return free === void 0 ? void 0 : { freeBytes: free, heldBytes: cache.reading.held, rootDiskBytes: 0 };
|
|
103
|
+
}
|
|
104
|
+
function realBuildDiskProbe(deps = {}) {
|
|
105
|
+
const cache = {};
|
|
106
|
+
const docker = deps.docker ?? ((args) => runDocker(args));
|
|
107
|
+
const now = deps.now ?? Date.now;
|
|
108
|
+
return (kind, configPath) => kind === "vm" ? microVmFacts(configPath) : containerFacts(cache, configPath, docker, now());
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export { DEFAULT_BUILD_DISK, DOCKER_CACHE_MS, checkDiskFit, realBuildDiskProbe, runDocker, volumeBytes };
|
|
@@ -5,7 +5,7 @@ import { C } from './chunk-ANPNT6PM.js';
|
|
|
5
5
|
import { readCloudConfigStrict, CloudConfigError, readCloudConfig, writeCloudConfig, cloudConfigPath } from './chunk-PJDQPF5N.js';
|
|
6
6
|
import { findGitDirs } from './chunk-BJ3KTMDH.js';
|
|
7
7
|
import { cliInvocation } from './chunk-CRB3POP4.js';
|
|
8
|
-
import { CLI_LOGIN_MACHINE_NAME_MAX, CliLoginPollResponseSchema, CLI_LOGIN_KIND, CliLoginRefusalSchema, CliLoginStartedSchema } from './chunk-
|
|
8
|
+
import { CLI_LOGIN_MACHINE_NAME_MAX, CliLoginPollResponseSchema, CLI_LOGIN_KIND, CliLoginRefusalSchema, CliLoginStartedSchema } from './chunk-E6CO3MJE.js';
|
|
9
9
|
import { homeFromEnv } from './chunk-VNVZDWO3.js';
|
|
10
10
|
import { generateKeyPairSync, privateDecrypt, constants, createPrivateKey } from 'crypto';
|
|
11
11
|
import { spawn } from 'child_process';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { autoConnect, detectActiveSession } from './chunk-
|
|
4
|
-
import { resolveRepoIdentity } from './chunk-
|
|
3
|
+
import { autoConnect, detectActiveSession } from './chunk-C3XLVHN6.js';
|
|
4
|
+
import { resolveRepoIdentity } from './chunk-5DNCFOXA.js';
|
|
5
5
|
import { C } from './chunk-ANPNT6PM.js';
|
|
6
6
|
import { defaultFetch, unauthorizedMessage, resolveGatewayCredentials } from './chunk-VQ2JGZSC.js';
|
|
7
7
|
import { parseWorkItemEnv } from './chunk-T2Q7ISPE.js';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { LiveUploader } from './chunk-
|
|
4
|
-
import { CaptureDaemon } from './chunk-
|
|
5
|
-
import { spoolDir } from './chunk-
|
|
3
|
+
import { LiveUploader } from './chunk-WHRR55PC.js';
|
|
4
|
+
import { CaptureDaemon } from './chunk-5DNCFOXA.js';
|
|
5
|
+
import { spoolDir } from './chunk-L3DUKDTR.js';
|
|
6
6
|
import { parseWorkItemEnv } from './chunk-T2Q7ISPE.js';
|
|
7
7
|
import { homeFromEnv } from './chunk-VNVZDWO3.js';
|
|
8
8
|
import { mkdirSync, writeFileSync, rmSync } from 'fs';
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
3
|
import { launchRefusalForSession } from './chunk-ESVW4MJY.js';
|
|
4
|
-
import { detectActiveSession, autoConnect, transcriptPathForSession } from './chunk-
|
|
5
|
-
import { resolveRepoIdentity, defaultProjectsDir, findTranscripts, sessionIdFromPath, scrubText } from './chunk-
|
|
4
|
+
import { detectActiveSession, autoConnect, transcriptPathForSession } from './chunk-C3XLVHN6.js';
|
|
5
|
+
import { resolveRepoIdentity, defaultProjectsDir, findTranscripts, sessionIdFromPath, scrubText } from './chunk-5DNCFOXA.js';
|
|
6
6
|
import { C } from './chunk-ANPNT6PM.js';
|
|
7
7
|
import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-VQ2JGZSC.js';
|
|
8
8
|
import { readLatestProvenanceForSession } from './chunk-ZJSNLVCE.js';
|
|
9
9
|
import { launchedItemForSession } from './chunk-T2Q7ISPE.js';
|
|
10
10
|
import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
|
|
11
11
|
import { cliInvocation } from './chunk-CRB3POP4.js';
|
|
12
|
-
import { FindingBatchSchema, FindingsResponseSchema, SAME_PROBLEM_RULES } from './chunk-
|
|
12
|
+
import { FindingBatchSchema, FindingsResponseSchema, SAME_PROBLEM_RULES } from './chunk-E6CO3MJE.js';
|
|
13
13
|
import { homeFromEnv } from './chunk-VNVZDWO3.js';
|
|
14
14
|
import { readFileSync, existsSync } from 'fs';
|
|
15
15
|
import { join, dirname, basename } from 'path';
|
|
@@ -103,5 +103,6 @@ var FFMPEG_STATIC = {
|
|
|
103
103
|
}
|
|
104
104
|
};
|
|
105
105
|
var MEDIA_PINS = `${VOICE_PACK_VERSION}+${FFMPEG_BUILD_TAG}`;
|
|
106
|
+
var PLAYWRIGHT_VERSION = "1.64.1";
|
|
106
107
|
|
|
107
|
-
export { BUILDER_DISK_BASE_URL, BUILDER_DISK_SHA256, BUILDER_DISK_VERSION, BUILDKIT_IMAGE, CLAUDE_CODE_VERSION, DEFAULT_BASE_IMAGE, FFMPEG_BUILD_TAG, FFMPEG_STATIC, FIRECRACKER_BINARY_SHA256, FIRECRACKER_SHA256, FIRECRACKER_VERSION, GH_SHA256, GH_VERSION, GUEST_ASSETS_BASE_URL, GUEST_ASSETS_VERSION, GUEST_HELPER_SHA256, GUEST_KERNEL_SHA256, HOST_HELPER_ASSETS_VERSION, HOST_HELPER_BASE_URL, HOST_HELPER_SHA256, JAILER_BINARY_SHA256, MEDIA_PINS, MICROVM_ARCHES, NODE_IMAGE, TINI_SHA256, TINI_VERSION, VOICE_PACK_FILES, VOICE_PACK_VERSION, builderDiskPinned, firecrackerArch, guestAssetsPinned, hostHelperPinned };
|
|
108
|
+
export { BUILDER_DISK_BASE_URL, BUILDER_DISK_SHA256, BUILDER_DISK_VERSION, BUILDKIT_IMAGE, CLAUDE_CODE_VERSION, DEFAULT_BASE_IMAGE, FFMPEG_BUILD_TAG, FFMPEG_STATIC, FIRECRACKER_BINARY_SHA256, FIRECRACKER_SHA256, FIRECRACKER_VERSION, GH_SHA256, GH_VERSION, GUEST_ASSETS_BASE_URL, GUEST_ASSETS_VERSION, GUEST_HELPER_SHA256, GUEST_KERNEL_SHA256, HOST_HELPER_ASSETS_VERSION, HOST_HELPER_BASE_URL, HOST_HELPER_SHA256, JAILER_BINARY_SHA256, MEDIA_PINS, MICROVM_ARCHES, NODE_IMAGE, PLAYWRIGHT_VERSION, TINI_SHA256, TINI_VERSION, VOICE_PACK_FILES, VOICE_PACK_VERSION, builderDiskPinned, firecrackerArch, guestAssetsPinned, hostHelperPinned };
|