@outerlayer/cli 0.34.0-next.20261027190442 → 0.34.0-next.20261028002917
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/dist/{agent-setup-THDNZ5ME.js → agent-setup-6FPE6EYN.js} +6 -6
- package/dist/{bridge-MLB57JP6.js → bridge-JGIHPGMY.js} +2 -2
- package/dist/{build-25GDCEZ7.js → build-AAQ4PVP2.js} +9 -9
- package/dist/{build-disk-NFMQCZM3.js → build-disk-L7JRQA22.js} +7 -7
- package/dist/build-info.json +1 -1
- package/dist/{builder-OWDGC3VQ.js → builder-LMLAVVVF.js} +6 -6
- package/dist/{check-IFHLERRX.js → check-ZULOZVV4.js} +38 -38
- package/dist/{chunk-JO4SAEHH.js → chunk-23XAA7YD.js} +2 -2
- package/dist/{chunk-7SJNVGVC.js → chunk-32FAPJFD.js} +5 -5
- package/dist/{chunk-4HA4S3U2.js → chunk-3E7QAXUW.js} +152 -7
- package/dist/{chunk-3FTIUB7I.js → chunk-3X6OSXSB.js} +1 -1
- package/dist/{chunk-3RRYEZAC.js → chunk-3XOLOV5A.js} +3 -3
- package/dist/{chunk-PMIW6OGQ.js → chunk-4A5OJOCR.js} +9 -9
- package/dist/{chunk-NO6E72RM.js → chunk-4J5GRWAY.js} +1 -1
- package/dist/{chunk-4QQJTJUN.js → chunk-57WFXHCB.js} +1 -1
- package/dist/{chunk-36M4KVBT.js → chunk-5IUC2B6J.js} +2 -2
- package/dist/{chunk-7TLGRE5F.js → chunk-5LUN7TTR.js} +2 -2
- package/dist/{chunk-OP2L7OXA.js → chunk-6LS62EO4.js} +3 -3
- package/dist/{chunk-FVVHQIZR.js → chunk-6OLXDSQ6.js} +1 -1
- package/dist/{chunk-AV5T7HV3.js → chunk-6Q7O4MRI.js} +1 -1
- package/dist/{chunk-UZIAZXXO.js → chunk-77D5ENBA.js} +1 -1
- package/dist/{chunk-FLHBUQ2W.js → chunk-AHWMY3MS.js} +155 -10
- package/dist/{chunk-3VJYDWFV.js → chunk-AJTGTSNA.js} +1 -1
- package/dist/{chunk-5FHBVV25.js → chunk-BQ4C47K2.js} +7 -7
- package/dist/{chunk-EYJRVHBN.js → chunk-BTDBDTUY.js} +2 -2
- package/dist/{chunk-X7M73LKT.js → chunk-CM4J53WZ.js} +1 -1
- package/dist/{chunk-WX2HW2G2.js → chunk-D3CT6XQ4.js} +10 -3
- package/dist/{chunk-HJCNWEQK.js → chunk-D6SH7DWA.js} +2 -2
- package/dist/{chunk-LYX2RRSF.js → chunk-EGJY6MBC.js} +2 -2
- package/dist/{chunk-T6ALNN3H.js → chunk-F3BGTGQC.js} +1 -1
- package/dist/{chunk-BS3OYFAD.js → chunk-G4SOMWXL.js} +1 -1
- package/dist/{chunk-BS4CZMT6.js → chunk-GET5HKLM.js} +1 -1
- package/dist/{chunk-6IMQXBTZ.js → chunk-GJYGOFF3.js} +5 -5
- package/dist/{chunk-Y4WJ4BLX.js → chunk-GMEXR6PY.js} +6 -6
- package/dist/{chunk-JWMJMQRF.js → chunk-GXMMILQ4.js} +4 -4
- package/dist/{chunk-WR2GRWK3.js → chunk-I4YOWQH7.js} +1 -1
- package/dist/{chunk-S5U6RKQX.js → chunk-ILTVAD5Y.js} +47 -176
- package/dist/{chunk-QRIE4JZE.js → chunk-JXY66VYX.js} +2 -2
- package/dist/{chunk-CMMEJJTL.js → chunk-KTVZ7TZY.js} +2 -2
- package/dist/{chunk-GMKDAF37.js → chunk-L2OARQKP.js} +17 -98
- package/dist/{chunk-CFJOONWM.js → chunk-LBKCYEJT.js} +1 -1
- package/dist/{chunk-OHTMTMFX.js → chunk-NBETYM32.js} +4 -4
- package/dist/{chunk-MXAYUZJF.js → chunk-NCKH3KCM.js} +5 -5
- package/dist/{chunk-RCAMBC3H.js → chunk-NOEJGR4X.js} +2 -2
- package/dist/{chunk-62URQYCB.js → chunk-PAGB3DCI.js} +1 -1
- package/dist/{chunk-Y7MF32DM.js → chunk-PBI4CM4M.js} +67 -60
- package/dist/{chunk-JVNQNKHV.js → chunk-PHIQHIRJ.js} +1 -1
- package/dist/{chunk-7Q7GQELE.js → chunk-PPQTTJSW.js} +5 -5
- package/dist/{chunk-GPO7F757.js → chunk-QJ2SNBHL.js} +1 -1
- package/dist/{chunk-W246VXU4.js → chunk-QNF7LT7W.js} +2 -2
- package/dist/{chunk-Z4LFCJT6.js → chunk-SWCOWG2C.js} +2 -2
- package/dist/{chunk-SKAML7GB.js → chunk-SYMBXSAT.js} +3 -3
- package/dist/{chunk-5ARXP3BP.js → chunk-UEDRRWZ3.js} +3 -3
- package/dist/{chunk-LSFP57LI.js → chunk-VB4QD4WN.js} +273 -122
- package/dist/{chunk-RJZZFAXS.js → chunk-VKYU4HHW.js} +1 -1
- package/dist/{chunk-2YPOSVC7.js → chunk-WEQMLC7P.js} +3 -3
- package/dist/{chunk-ANFNZCXZ.js → chunk-WSVE5QGL.js} +4 -4
- package/dist/{claude-launcher-LYGS66AC.js → claude-launcher-GGZEWVYJ.js} +1 -1
- package/dist/{cli-7S4PEKAV.js → cli-6WPETUBZ.js} +110 -110
- package/dist/{command-GQVFZHJ2.js → command-NSTOWAZ6.js} +26 -26
- package/dist/{config-5NWSCHIO.js → config-YPUOOZB6.js} +8 -8
- package/dist/{connect-cmd-HB3K3AHE.js → connect-cmd-RPEEANNE.js} +5 -5
- package/dist/{container-start-WRD3YZQR.js → container-start-OOBTGHWF.js} +32 -32
- package/dist/{context-show-cmd-RJIQS2KF.js → context-show-cmd-R5WCECOT.js} +6 -6
- package/dist/{control-plane-launch-TS4DFJF4.js → control-plane-launch-55CJGYBK.js} +5 -5
- package/dist/{demo-record-cmd-VVZGUCWB.js → demo-record-cmd-SFOWQPL7.js} +4 -4
- package/dist/{demo-voice-cmd-3ADGIWK6.js → demo-voice-cmd-ZOBRVHOK.js} +12 -12
- package/dist/{docker-5VGCFZV2.js → docker-VPJW5LXB.js} +6 -6
- package/dist/{doctor-N4I6IEKP.js → doctor-O2EJAPZB.js} +70 -27
- package/dist/{emit-artifact-cmd-WJT7AXTZ.js → emit-artifact-cmd-HBFYBXJR.js} +10 -10
- package/dist/{emit-criteria-cmd-45IYB535.js → emit-criteria-cmd-TPUL7M2R.js} +7 -7
- package/dist/{emit-demo-cmd-AIIQNPXS.js → emit-demo-cmd-5CUT7W3R.js} +12 -12
- package/dist/{emit-finding-cmd-6YTJK2NA.js → emit-finding-cmd-IKHGMACP.js} +7 -7
- package/dist/{emit-result-cmd-TZGFY743.js → emit-result-cmd-F7CI6SNZ.js} +9 -9
- package/dist/{emit-step-cmd-LGBTIAXC.js → emit-step-cmd-DVEKGHK7.js} +7 -7
- package/dist/{exec-client-LR67CA24.js → exec-client-H2JG36OS.js} +3 -3
- package/dist/find-unit-ACTOZVVS.js +19 -0
- package/dist/{findings-cmd-ETJXUDQI.js → findings-cmd-ODKZ462L.js} +7 -7
- package/dist/{fleet-readiness-MYIMDBF7.js → fleet-readiness-UHCBNW6A.js} +5 -5
- package/dist/{governing-source-GBJTVMK2.js → governing-source-SRECHKPR.js} +9 -9
- package/dist/{guest-init-GXPOW53F.js → guest-init-6FUC4XZX.js} +4 -4
- package/dist/{hook-fast-5WOGLR7V.js → hook-fast-WM6YZVBJ.js} +1 -1
- package/dist/{host-checks-33ZTDTSH.js → host-checks-FLIHLR35.js} +30 -30
- package/dist/{pending-6DDSCXUD.js → host-key-OSWPVMIA.js} +3 -3
- package/dist/{image-tag-OYHGRHVV.js → image-tag-LF3NEGSL.js} +3 -3
- package/dist/index.js +4 -4
- package/dist/{init-OXCOPKHP.js → init-LPD75DCX.js} +23 -23
- package/dist/{init-2YOAKLDN.js → init-OX677NNB.js} +23 -23
- package/dist/{init-cmd-BUWWUQKM.js → init-cmd-ZCLVC5RR.js} +10 -10
- package/dist/{init-update-TXQHBY3H.js → init-update-POKSLQDQ.js} +8 -8
- package/dist/{install-cmd-VZGXSS73.js → install-cmd-6SQVZEXL.js} +5 -5
- package/dist/{logs-42QPBCMC.js → logs-QHXZTSKZ.js} +2 -2
- package/dist/{loop-M3XDFD6O.js → loop-WM62DR42.js} +37 -37
- package/dist/{machine-3BI2SGAK.js → machine-7VPFAC6L.js} +23 -23
- package/dist/{mcp-serve-cmd-LYJQO6U4.js → mcp-serve-cmd-J32K42HM.js} +4 -4
- package/dist/{paths-QLFRPIKS.js → paths-4ZGWWNTG.js} +2 -2
- package/dist/{host-key-GAZM4EOH.js → pending-CRXJKKKI.js} +3 -3
- package/dist/{pidfile-WLZ427QQ.js → pidfile-VLZPRIBZ.js} +3 -3
- package/dist/{record-WGCMQLQS.js → record-4ZJPJTWO.js} +3 -3
- package/dist/{runner-env-6FSJOSWS.js → runner-env-W53VDVOK.js} +10 -10
- package/dist/{runner-identity-XODZ7YBP.js → runner-identity-BH42S2MU.js} +6 -6
- package/dist/{runner-key-KMTC4NCQ.js → runner-key-ESAZRV3A.js} +23 -23
- package/dist/{session-sender-U54EQJNR.js → session-sender-UB45MUKV.js} +10 -10
- package/dist/{spec-cmd-EM24GTAM.js → spec-cmd-H5B55O5L.js} +8 -8
- package/dist/{status-WVCQCBDQ.js → status-L2OYAZHY.js} +30 -30
- package/dist/{sync-cmd-Y5RKWVF7.js → sync-cmd-IWA5ZTI2.js} +9 -9
- package/dist/{update-steps-2D4YQAW2.js → update-steps-FWQ5ASZ6.js} +31 -31
- package/dist/{watch-X5VYY4LH.js → watch-NOEBVS6U.js} +9 -9
- package/dist/{work-claim-cmd-IU3YJQKR.js → work-claim-cmd-7P7U3OQ6.js} +14 -14
- package/dist/{work-cmd-LUKJHAMH.js → work-cmd-77GUT7LY.js} +7 -7
- package/dist/{work-comment-cmd-BDNFAVKL.js → work-comment-cmd-VS3BSPGM.js} +8 -8
- package/dist/{work-demo-cmd-GPDJHU6F.js → work-demo-cmd-S3GXBYIA.js} +7 -7
- package/dist/{work-logs-cmd-B6EX4RPE.js → work-logs-cmd-6BXIINCM.js} +7 -7
- package/dist/{work-open-pr-cmd-TRXDCMSG.js → work-open-pr-cmd-EPOFWJDC.js} +8 -8
- package/dist/{work-pr-cmd-5GUR5SIU.js → work-pr-cmd-DYSYOP74.js} +7 -7
- package/dist/{work-proofs-cmd-5BYAAW3H.js → work-proofs-cmd-DS2VX4E4.js} +8 -8
- package/dist/{work-proofs-record-USD4JWFP.js → work-proofs-record-LIQGUDWH.js} +15 -15
- package/dist/{work-stop-cmd-J47GZB2N.js → work-stop-cmd-HYQTDNUY.js} +7 -7
- package/package.json +1 -1
- package/skill-pack/maintained/outerlayer-build/SKILL.md +8 -0
- package/skill-pack/maintained/outerlayer-build/references/agent-briefs.md +8 -0
- package/skill-pack/maintained/outerlayer-build/references/review-loop.md +2 -2
- package/dist/find-unit-YGDFVHVU.js +0 -19
|
@@ -2,26 +2,26 @@
|
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
3
|
import { itemsSentence, criteriaOf, hostItemsOf, loadCitationFinder, MAX_TEST_FILE_BYTES, MAX_TEST_FILES, criterionInputs, planCriteria, parseJudgeAnswer, inCriteriaOrder, oneLineReason, judgedItems } from './chunk-6CK2OC4Q.js';
|
|
4
4
|
import { readsJobState, READ_JOB_STATE_FORMATS, jobStateFormatOf } from './chunk-ZVB57WI6.js';
|
|
5
|
-
import {
|
|
5
|
+
import { HELPER_PATH, DOCKERD_LOG, HELPER_RECORD } from './chunk-UEDRRWZ3.js';
|
|
6
6
|
import { zodProblem } from './chunk-I3LTIAOR.js';
|
|
7
|
-
import { senderPidfile } from './chunk-
|
|
8
|
-
import { installScrubContext } from './chunk-
|
|
9
|
-
import { writeDockerClientConfig } from './chunk-
|
|
7
|
+
import { senderPidfile } from './chunk-JXY66VYX.js';
|
|
8
|
+
import { installScrubContext } from './chunk-32FAPJFD.js';
|
|
9
|
+
import { writeDockerClientConfig } from './chunk-QJ2SNBHL.js';
|
|
10
10
|
import { upgradedStarterText } from './chunk-TZMDRHWB.js';
|
|
11
|
-
import { ADDED_USER, shellQuote, GH_CONFIG_YML, ghHostsYml, hasClaudeCredential, AssetError, obtainImage, ensureRootfs, makeBuildsDirPrivate, gitRemoteFor, startServicesFor, createLeaseChannel, createBuildDisk, machineConfig, startJailedInto, resolveAgentUser, AgentUserError, runBuildSteps, runtimeStepInput, keepUnpinnedRuntimes, createContainerRuntime, containerSenderCommand, hostCommandEnvironment, execArgv, signalInContainer, startHostServices, LEASE_SECONDS, managedBuildSettingsFor, stopContainer, cleanupContainer, outOfMemoryReason, closeHostBuild, dropManagedClaudeKey, dropManagedBuildSettings, startCheckContainer, lifecycleSteps, lifecycleFailureReason, writeEvalInput, DeliveryFailure, EVAL_INPUT_NAME, syncInContainer, copyTranscriptsFromContainer, MANAGED_UNJAILED_REASON, senderAliveScript, managedMachineLimits, withFactoryHosts, helperFirecrackerNote, managedClaudeKeyValues, managedBuildSettingValues, stopJailed, deleteBuildDisk, managedClaudeKeyFor, ROOT_DISK_ID_PREFIX, copyTranscripts, containerJudgeEnvironment, senderSignalScript, copyJudgeTree } from './chunk-
|
|
12
|
-
import { fetchCommit, readBranchHead, diffBetween } from './chunk-
|
|
13
|
-
import { waitForAgent, vmExecArgs } from './chunk-
|
|
14
|
-
import { socketPathProblem, vsockLinks, LEASE_LINK, linkVsockSockets } from './chunk-
|
|
15
|
-
import { describeCallFailure, resolveGoverningSource, prefetchGovernedContext, refusalCode, removeStagedContext, stageGovernedContext, pinnedSourceOf, commandWithShim, logStamp, createRunnerLog, removeKeptContext, formatDuration, retrySend, formatClock, keptContextTree, WORKFLOW_PERMISSION_REASON } from './chunk-
|
|
16
|
-
import { imageBuildOf, isBuiltinContainer, isBuiltinProcess, isBuiltinVm, egressSummary, DEFAULT_CHECK_TIME_LIMIT_MINUTES, optionalEgress } from './chunk-
|
|
17
|
-
import { formatBytes, DEFAULT_CACHE_DISK, allocatedBytes } from './chunk-
|
|
18
|
-
import { HASH_ARGV, parseProgramHash, JUDGE_PROGRAM, writeJobFile, readJobFile, parseSize, childEnvironment, withAnswerProtocol, judgeCommand, MAX_REPORT_BYTES, JUDGE_MAX_TURNS, JUDGE_DIR, COMMAND_DIR, MAX_ITEMS_BYTES } from './chunk-
|
|
19
|
-
import { CLAUDE_CODE_VERSION, FIRECRACKER_VERSION } from './chunk-
|
|
11
|
+
import { ADDED_USER, shellQuote, GH_CONFIG_YML, ghHostsYml, firstLine, hasClaudeCredential, AssetError, obtainImage, ensureRootfs, makeBuildsDirPrivate, gitRemoteFor, startServicesFor, createLeaseChannel, createBuildDisk, machineConfig, startJailedInto, resolveAgentUser, AgentUserError, runBuildSteps, runtimeStepInput, keepUnpinnedRuntimes, createContainerRuntime, containerSenderCommand, hostCommandEnvironment, execArgv, signalInContainer, startHostServices, LEASE_SECONDS, managedBuildSettingsFor, stopContainer, cleanupContainer, outOfMemoryReason, closeHostBuild, dropManagedClaudeKey, dropManagedBuildSettings, startCheckContainer, lifecycleSteps, lifecycleFailureReason, writeEvalInput, DeliveryFailure, EVAL_INPUT_NAME, syncInContainer, copyTranscriptsFromContainer, MANAGED_UNJAILED_REASON, senderAliveScript, managedMachineLimits, withFactoryHosts, helperFirecrackerNote, said, managedClaudeKeyValues, managedBuildSettingValues, stopJailed, deleteBuildDisk, managedClaudeKeyFor, ROOT_DISK_ID_PREFIX, copyTranscripts, containerJudgeEnvironment, senderSignalScript, copyJudgeTree } from './chunk-VB4QD4WN.js';
|
|
12
|
+
import { fetchCommit, readBranchHead, diffBetween } from './chunk-BQ4C47K2.js';
|
|
13
|
+
import { waitForAgent, vmExecArgs } from './chunk-PHIQHIRJ.js';
|
|
14
|
+
import { socketPathProblem, vsockLinks, LEASE_LINK, linkVsockSockets } from './chunk-G4SOMWXL.js';
|
|
15
|
+
import { describeCallFailure, resolveGoverningSource, prefetchGovernedContext, refusalCode, removeStagedContext, stageGovernedContext, pinnedSourceOf, commandWithShim, logStamp, createRunnerLog, removeKeptContext, formatDuration, retrySend, formatClock, keptContextTree, WORKFLOW_PERMISSION_REASON } from './chunk-PPQTTJSW.js';
|
|
16
|
+
import { imageBuildOf, isBuiltinContainer, isBuiltinProcess, isBuiltinVm, egressSummary, DEFAULT_CHECK_TIME_LIMIT_MINUTES, optionalEgress } from './chunk-GXMMILQ4.js';
|
|
17
|
+
import { formatBytes, DEFAULT_CACHE_DISK, allocatedBytes } from './chunk-EGJY6MBC.js';
|
|
18
|
+
import { HASH_ARGV, parseProgramHash, JUDGE_PROGRAM, writeJobFile, readJobFile, parseSize, identityScript, identityArgs, parseIdentity, mountableHome, homeCopyScript, homeCopyArgs, childEnvironment, withAnswerProtocol, judgeCommand, MAX_REPORT_BYTES, JUDGE_MAX_TURNS, JUDGE_DIR, COMMAND_DIR, MAX_ITEMS_BYTES } from './chunk-AHWMY3MS.js';
|
|
19
|
+
import { CLAUDE_CODE_VERSION, FIRECRACKER_VERSION } from './chunk-D3CT6XQ4.js';
|
|
20
20
|
import { isSameProcess, startTimeOf } from './chunk-JBJTC3UU.js';
|
|
21
|
-
import { WorkCommandError, postJson, isSignatureRefusal, getJson } from './chunk-
|
|
21
|
+
import { WorkCommandError, postJson, isSignatureRefusal, getJson } from './chunk-GJYGOFF3.js';
|
|
22
22
|
import { planArtifactUpload } from './chunk-IXPH4EXK.js';
|
|
23
23
|
import { readCloudConfig } from './chunk-PJDQPF5N.js';
|
|
24
|
-
import { signerFor } from './chunk-
|
|
24
|
+
import { signerFor } from './chunk-VKYU4HHW.js';
|
|
25
25
|
import { AGENTS_SKILLS_BASE, OUTERLAYER_SKILLS_BASE, resolvePackRoot } from './chunk-OVNF4LLC.js';
|
|
26
26
|
import { scrubText } from './chunk-A6PJSNP6.js';
|
|
27
27
|
import { MAINTAINED_SKILLS } from './chunk-CDDED64E.js';
|
|
@@ -29,8 +29,8 @@ import { resolveVersion } from './chunk-RA3O54FC.js';
|
|
|
29
29
|
import { parsePolicy } from './chunk-XFJ7YOPD.js';
|
|
30
30
|
import { CheckItemsSchema } from './chunk-DINRXUQA.js';
|
|
31
31
|
import { homeFromEnv } from './chunk-VNVZDWO3.js';
|
|
32
|
-
import { RUNNER_FILE_MODE, runnerDir, buildDir, vsockPath, jobConsolePath } from './chunk-
|
|
33
|
-
import { JOB_MOUNT, repositoriesOf, primaryOf, buildEnvironment, CHECKOUT_DIR, claudeCredential, AGENT_CREDENTIAL_MISSING, sharedUserEnvironment, headerVariables, authorEnvironment, withTunnelRecord, commitIdentityRecord, RELAY_PORT, repositoryPath, lifecycleWorkdir, CHECK_ITEMS_FILE, fdName,
|
|
32
|
+
import { RUNNER_FILE_MODE, runnerDir, buildDir, vsockPath, jobConsolePath } from './chunk-AJTGTSNA.js';
|
|
33
|
+
import { JOB_MOUNT, repositoriesOf, primaryOf, buildEnvironment, CHECKOUT_DIR, claudeCredential, AGENT_CREDENTIAL_MISSING, sharedUserEnvironment, headerVariables, authorEnvironment, withTunnelRecord, commitIdentityRecord, RELAY_PORT, repositoryPath, lifecycleWorkdir, CHECK_ITEMS_FILE, fdName, BUILD_HOME, CLAUDE_CREDENTIAL_VARIABLES, currentClaudeCredential, removedClaudeCredentialValues, managedClaudeCredential, checkEnvironment, EVAL_INPUT_DIR } from './chunk-L2OARQKP.js';
|
|
34
34
|
import { RUNNER_WORDED_REASONS, UNKNOWN_TRACKING_REASON } from './chunk-MESOOLF4.js';
|
|
35
35
|
import { randomBytes, createHash } from 'crypto';
|
|
36
36
|
import { rmSync, existsSync, statSync, appendFileSync, mkdirSync, chmodSync, writeFileSync, openSync, closeSync, readFileSync, readdirSync, lstatSync, realpathSync, fstatSync, readSync } from 'fs';
|
|
@@ -191,7 +191,7 @@ var DOCKER_LOG_LINES = 20;
|
|
|
191
191
|
var GUEST_GH_DIR = `${JOB_MOUNT}/gh`;
|
|
192
192
|
var GUEST_HOOKS_DIR = `${JOB_MOUNT}/git-hooks`;
|
|
193
193
|
var GUEST_CONTEXT_DIR = `${JOB_MOUNT}/context`;
|
|
194
|
-
var
|
|
194
|
+
var GUEST_PATH2 = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin";
|
|
195
195
|
function buildMemoryBytes(config) {
|
|
196
196
|
return parseSize(config.build?.memory ?? DEFAULT_MEMORY) ?? parseSize(DEFAULT_MEMORY);
|
|
197
197
|
}
|
|
@@ -227,9 +227,6 @@ function factoryVariablesOf(config, jobDir) {
|
|
|
227
227
|
if (held !== void 0) return held;
|
|
228
228
|
return config.managed === true ? [] : void 0;
|
|
229
229
|
}
|
|
230
|
-
function firstLine(text2) {
|
|
231
|
-
return text2.trim().split("\n")[0] ?? "";
|
|
232
|
-
}
|
|
233
230
|
function execEnvironment(image, env) {
|
|
234
231
|
const merged = { ...image, ...env.literals };
|
|
235
232
|
for (const [name, value] of Object.entries(env.passed)) if (value !== void 0) merged[name] = value;
|
|
@@ -256,11 +253,26 @@ async function writeGuestGhConfig(runtime, state, token) {
|
|
|
256
253
|
const result = await asRoot(runtime, state, ["/bin/sh", "-c", script], ghHostsYml(token));
|
|
257
254
|
if (result.status !== 0) throw new Error(`writing gh's configuration in the guest failed (exit ${result.status}): ${firstLine(result.stderr)}`);
|
|
258
255
|
}
|
|
259
|
-
async function
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
256
|
+
async function mountGuestHome(runtime, state, agentUser, known) {
|
|
257
|
+
let home = known;
|
|
258
|
+
if (home === void 0) {
|
|
259
|
+
if (agentUser === ADDED_USER) return void 0;
|
|
260
|
+
const read = await asRoot(runtime, state, [NODE_IN_GUEST, "-e", identityScript(), ...identityArgs(agentUser)]);
|
|
261
|
+
const found = parseIdentity(read.stdout);
|
|
262
|
+
if (read.status !== 0 || found === void 0) throw new Error(`reading the build's user from the image failed (exit ${read.status})${said(read.stderr)}`);
|
|
263
|
+
home = mountableHome(found?.home);
|
|
264
|
+
if (home === void 0) return void 0;
|
|
265
|
+
}
|
|
266
|
+
const copied = await runtime.vm.exec(state.vsockPath, { argv: [NODE_IN_GUEST, "-e", homeCopyScript(), ...homeCopyArgs(home)], user: agentUser, cwd: "/", env: { PATH: GUEST_PATH2, ...state.imageEnv, NODE_OPTIONS: "" } });
|
|
267
|
+
if (copied.status !== 0) throw new Error(`copying ${home} into the build's home failed (exit ${copied.status})${said(copied.stderr)}`);
|
|
268
|
+
const folder = shellQuote(home);
|
|
269
|
+
const mounted = await asRoot(runtime, state, ["/bin/sh", "-c", `[ -d ${folder} ] || exit ${NO_FOLDER}; exec ${HELPER_PATH} mount --bind --source ${BUILD_HOME} --target ${folder}`]);
|
|
270
|
+
if (mounted.status === NO_FOLDER) return void 0;
|
|
271
|
+
if (mounted.status !== 0) throw new Error(`mounting the build's home at ${home} failed (exit ${mounted.status})${said(mounted.stderr)}`);
|
|
272
|
+
return home;
|
|
273
|
+
}
|
|
274
|
+
var NODE_IN_GUEST = "/opt/outerlayer/bin/node";
|
|
275
|
+
var NO_FOLDER = 3;
|
|
264
276
|
async function unpackIntoGuest(runtime, state, dir, target, opts = {}) {
|
|
265
277
|
const script = opts.readOnly === true ? `set -e; rm -rf ${target}; mkdir -p ${target}; tar -x --no-same-owner -C ${target}; chmod -R a+rX,a-w ${target}` : `set -e; mkdir -p ${target}; tar -x --no-same-owner -C ${target}; chmod -R a+rX ${target}`;
|
|
266
278
|
const result = await asRoot(runtime, state, ["/bin/sh", "-c", script], tarOf(dir));
|
|
@@ -594,6 +606,12 @@ async function provisionMicroVm(input) {
|
|
|
594
606
|
throw err;
|
|
595
607
|
}
|
|
596
608
|
state.agentUser = agentUser;
|
|
609
|
+
try {
|
|
610
|
+
const home = await mountGuestHome(runtime, state, agentUser);
|
|
611
|
+
if (home !== void 0) state.home = home;
|
|
612
|
+
} catch (err) {
|
|
613
|
+
return bail(describeCallFailure(err));
|
|
614
|
+
}
|
|
597
615
|
const tools = await asRoot(runtime, state, ["cat", "/opt/outerlayer/tools.json"]);
|
|
598
616
|
const agentVersion = agentVersionOf(tools.status === 0 ? tools.stdout : "");
|
|
599
617
|
environment.agentVersion = agentVersion;
|
|
@@ -605,15 +623,7 @@ async function provisionMicroVm(input) {
|
|
|
605
623
|
const failure = await waitForDocker(runtime, state, agentUser, input.now ?? (() => /* @__PURE__ */ new Date()));
|
|
606
624
|
if (failure !== void 0) return bail(failure);
|
|
607
625
|
}
|
|
608
|
-
|
|
609
|
-
await writeGuestMavenSettings(runtime, state);
|
|
610
|
-
} catch (err) {
|
|
611
|
-
return bail(`the build's Maven settings could not be delivered: ${describeCallFailure(err)}`);
|
|
612
|
-
}
|
|
613
|
-
let execEnv = buildEnvironment({ ...envInput, imageEnv: state.imageEnv });
|
|
614
|
-
for (const notice of execEnv.notices) log.line(`${tag} ${notice}`);
|
|
615
|
-
const plainEnv = buildEnvironment({ ...envInput, imageEnv: state.imageEnv, proxyWarning: false });
|
|
616
|
-
const request = (argv, workdir, plain = false) => ({ argv, user: agentUser, cwd: workdir, env: execEnvironment(state.imageEnv, plain ? plainEnv : execEnv) });
|
|
626
|
+
const request = (argv, workdir) => ({ argv, user: agentUser, cwd: workdir, env: execEnvironment(state.imageEnv, env) });
|
|
617
627
|
const steps = await runBuildSteps({
|
|
618
628
|
repository,
|
|
619
629
|
branch: primary.branch,
|
|
@@ -622,7 +632,7 @@ async function provisionMicroVm(input) {
|
|
|
622
632
|
agentVersion,
|
|
623
633
|
lifecycle: report.apply.lifecycle,
|
|
624
634
|
exec: async (argv, workdir, opts) => {
|
|
625
|
-
const ran = await vm.exec(state.vsockPath, request(argv, workdir
|
|
635
|
+
const ran = await vm.exec(state.vsockPath, request(argv, workdir));
|
|
626
636
|
if (opts?.quiet !== true) appendFileSync(logPath, ran.stdout + ran.stderr);
|
|
627
637
|
return ran;
|
|
628
638
|
},
|
|
@@ -654,11 +664,7 @@ async function provisionMicroVm(input) {
|
|
|
654
664
|
keepIn: jobDir,
|
|
655
665
|
...input.requireBuildSkill === true ? { requireBuildSkill: true } : {},
|
|
656
666
|
// A repository with no devcontainer file builds on the universal image, whose runtimes the build chooses and installs.
|
|
657
|
-
...runtimeStepInput(report, services)
|
|
658
|
-
dropProxyWarning: () => {
|
|
659
|
-
state.proxyWarningDropped = true;
|
|
660
|
-
execEnv = plainEnv;
|
|
661
|
-
}
|
|
667
|
+
...runtimeStepInput(report, services)
|
|
662
668
|
});
|
|
663
669
|
if (!steps.ok) return bail(steps.reason, steps.aborted === true);
|
|
664
670
|
state.startCommit = steps.startCommit;
|
|
@@ -710,8 +716,6 @@ function vmExecFor(input, argv) {
|
|
|
710
716
|
unpinnedRuntimes: state.unpinnedRuntimes,
|
|
711
717
|
builtIns: state.builtIns === true,
|
|
712
718
|
identity: input.job.commitIdentity,
|
|
713
|
-
imageEnv: state.imageEnv,
|
|
714
|
-
proxyWarning: state.proxyWarningDropped !== true,
|
|
715
719
|
factoryVariables: factoryVariablesOf(input.config, input.jobDir)
|
|
716
720
|
});
|
|
717
721
|
const options = {
|
|
@@ -742,8 +746,6 @@ async function startMicroVmCommand(input) {
|
|
|
742
746
|
unpinnedRuntimes: state.unpinnedRuntimes,
|
|
743
747
|
builtIns: state.builtIns === true,
|
|
744
748
|
identity: input.job.commitIdentity,
|
|
745
|
-
imageEnv: state.imageEnv,
|
|
746
|
-
proxyWarning: state.proxyWarningDropped !== true,
|
|
747
749
|
factoryVariables: factoryVariablesOf(input.config, input.jobDir)
|
|
748
750
|
});
|
|
749
751
|
const started = await input.runtime.vm.exec(state.vsockPath, {
|
|
@@ -754,8 +756,8 @@ async function startMicroVmCommand(input) {
|
|
|
754
756
|
detach: state.commandDir ?? MICROVM_COMMAND_DIR
|
|
755
757
|
});
|
|
756
758
|
if (started.status !== 0) {
|
|
757
|
-
const
|
|
758
|
-
throw new Error(`the guest's exec agent exited ${started.status}${
|
|
759
|
+
const said2 = firstLine(started.stderr);
|
|
760
|
+
throw new Error(`the guest's exec agent exited ${started.status}${said2 === "" ? "" : `: ${said2}`}`);
|
|
759
761
|
}
|
|
760
762
|
}
|
|
761
763
|
async function endMicroVmCommand(runtime, state, jobDir, onError) {
|
|
@@ -787,8 +789,6 @@ async function syncInMicroVm(input) {
|
|
|
787
789
|
unpinnedRuntimes: state.unpinnedRuntimes,
|
|
788
790
|
builtIns: state.builtIns === true,
|
|
789
791
|
identity: job.commitIdentity,
|
|
790
|
-
imageEnv: state.imageEnv,
|
|
791
|
-
proxyWarning: state.proxyWarningDropped !== true,
|
|
792
792
|
factoryVariables: factoryVariablesOf(input.config, input.jobDir)
|
|
793
793
|
});
|
|
794
794
|
const result = await runtime.vm.exec(state.vsockPath, {
|
|
@@ -935,7 +935,8 @@ async function startCheckMicroVm(input) {
|
|
|
935
935
|
containerEnv: built.containerEnv,
|
|
936
936
|
imageEnv: built.imageEnv,
|
|
937
937
|
lifecycle: built.lifecycle,
|
|
938
|
-
...built.docker === true ? { docker: true } : {}
|
|
938
|
+
...built.docker === true ? { docker: true } : {},
|
|
939
|
+
...built.home === void 0 ? {} : { home: built.home }
|
|
939
940
|
};
|
|
940
941
|
const checksDir = join(jobDir, "checks");
|
|
941
942
|
mkdirSync(checksDir, { recursive: true });
|
|
@@ -1039,6 +1040,13 @@ async function startCheckMicroVm(input) {
|
|
|
1039
1040
|
if (!ready) {
|
|
1040
1041
|
return `the microVM did not start: ${silence(runtime, state, lastError, consoleNote(state, consolePath))}`;
|
|
1041
1042
|
}
|
|
1043
|
+
if (state.home !== void 0) {
|
|
1044
|
+
try {
|
|
1045
|
+
await mountGuestHome(runtime, state, agentUser, state.home);
|
|
1046
|
+
} catch (err) {
|
|
1047
|
+
return describeCallFailure(err);
|
|
1048
|
+
}
|
|
1049
|
+
}
|
|
1042
1050
|
if (built.docker === true) return waitForDocker(runtime, state, agentUser, () => /* @__PURE__ */ new Date());
|
|
1043
1051
|
return void 0;
|
|
1044
1052
|
};
|
|
@@ -1051,7 +1059,6 @@ async function startCheckMicroVm(input) {
|
|
|
1051
1059
|
repository,
|
|
1052
1060
|
hostEnv: runtime.hostEnv,
|
|
1053
1061
|
containerEnv: built.containerEnv ?? {},
|
|
1054
|
-
imageEnv: built.imageEnv,
|
|
1055
1062
|
// The checks of a managed build get its factory's variables, as its command did, and none of the runner's own.
|
|
1056
1063
|
factoryVariables: factoryVariablesOf(config, jobDir)
|
|
1057
1064
|
});
|
|
@@ -1360,7 +1367,7 @@ var POLL_MS = 200;
|
|
|
1360
1367
|
var ASK_AGAIN_MS = 1e3;
|
|
1361
1368
|
var EXIT_REPORT_WAIT_MS = 2e3;
|
|
1362
1369
|
var exitsLogged = /* @__PURE__ */ new Map();
|
|
1363
|
-
var
|
|
1370
|
+
var BUILD_HOME2 = "/build/home";
|
|
1364
1371
|
async function startSender(input) {
|
|
1365
1372
|
const { config, job, jobDir, deps } = input;
|
|
1366
1373
|
const tag = `#${job.item}`;
|
|
@@ -1419,7 +1426,7 @@ async function restartSender(input) {
|
|
|
1419
1426
|
const state = job.container;
|
|
1420
1427
|
if (state !== void 0 && job.itemKey !== void 0) {
|
|
1421
1428
|
const runtime = deps.runtime ?? createContainerRuntime();
|
|
1422
|
-
const pidfile = senderPidfile(
|
|
1429
|
+
const pidfile = senderPidfile(BUILD_HOME2, Number(job.item));
|
|
1423
1430
|
const sleep = deps.sleep ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
|
|
1424
1431
|
const running = async () => {
|
|
1425
1432
|
const probe = await runtime.host.exec({ container: state.container, user: state.agentUser ?? ADDED_USER, env: { literals: {}, passed: {} }, argv: ["/bin/sh", "-c", senderAliveScript(pidfile)] });
|
|
@@ -1485,8 +1492,8 @@ async function stopSender(input) {
|
|
|
1485
1492
|
if (sender === void 0) return;
|
|
1486
1493
|
const tag = `#${job.item}`;
|
|
1487
1494
|
const sleep = deps.sleep ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
|
|
1488
|
-
const inContainer = job.container === void 0 ? void 0 : { state: job.container, runtime: deps.runtime ?? createContainerRuntime(), pidfile: senderPidfile(
|
|
1489
|
-
const inGuest = job.microvm === void 0 ? void 0 : { state: job.microvm, runtime: deps.runtime ?? createContainerRuntime(), pidfile: senderPidfile(
|
|
1495
|
+
const inContainer = job.container === void 0 ? void 0 : { state: job.container, runtime: deps.runtime ?? createContainerRuntime(), pidfile: senderPidfile(BUILD_HOME2, Number(job.item)) };
|
|
1496
|
+
const inGuest = job.microvm === void 0 ? void 0 : { state: job.microvm, runtime: deps.runtime ?? createContainerRuntime(), pidfile: senderPidfile(BUILD_HOME2, Number(job.item)) };
|
|
1490
1497
|
const signalInside = async (signal) => {
|
|
1491
1498
|
if (inContainer !== void 0) return signalInContainer(inContainer.runtime, inContainer.state, inContainer.pidfile, signal).catch(() => void 0);
|
|
1492
1499
|
if (inGuest !== void 0) return signalInGuest(inGuest.runtime, inGuest.state, inGuest.pidfile, signal).catch(() => void 0);
|
|
@@ -1692,8 +1699,8 @@ function readJudgeReply(run, minutes) {
|
|
|
1692
1699
|
if (run.kind === "timeout") return { kind: "none", reason: `the judge ran out of time after ${minutes}`, limitKey: true };
|
|
1693
1700
|
const output = parseOutput(run.stdout);
|
|
1694
1701
|
if (output === void 0) {
|
|
1695
|
-
const
|
|
1696
|
-
return { kind: "none", reason: `the judge exited ${run.status} and printed no result${
|
|
1702
|
+
const said2 = firstLine2(run.stderr);
|
|
1703
|
+
return { kind: "none", reason: `the judge exited ${run.status} and printed no result${said2 === "" ? "" : `: ${said2}`}` };
|
|
1697
1704
|
}
|
|
1698
1705
|
if (output.subtype === "error_max_turns") return { kind: "none", reason: `the judge reached the turn limit of ${JUDGE_MAX_TURNS} turns before it gave a result` };
|
|
1699
1706
|
const lines = output.result.split(/\r\n|\r|\n/).map((line) => line.trim()).filter((line) => line !== "");
|
|
@@ -2020,9 +2027,9 @@ async function runJudge(input) {
|
|
|
2020
2027
|
return { id: entry.id, result: entry.result, ...reason2 === void 0 ? {} : { reason: reason2 } };
|
|
2021
2028
|
});
|
|
2022
2029
|
const failing = itemsSentence(items, { one: "check item", many: "check items" });
|
|
2023
|
-
const
|
|
2024
|
-
const result =
|
|
2025
|
-
const reason = failing ?? (
|
|
2030
|
+
const said2 = at.answer.answer.result ?? (at.reply.kind === "answered" ? at.reply.verdict : void 0);
|
|
2031
|
+
const result = said2 === "pass" && failing === void 0 ? "pass" : "fail";
|
|
2032
|
+
const reason = failing ?? (said2 === "fail" ? "the judge failed the change" : said2 === void 0 ? at.reply.kind === "none" ? at.reply.reason : "the judge gave no result" : void 0);
|
|
2026
2033
|
const report = renderJudgeReport({ check: check.name, result, reason, items, commit: at.head });
|
|
2027
2034
|
return await recordWhole(check, { ...where, result, reason, items, report });
|
|
2028
2035
|
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { WorkCommandError, postJson } from './chunk-
|
|
4
|
-
import { defaultGitRunner, materializeContext, fetchControlPlaneCommit, lookupGoverningSource } from './chunk-
|
|
5
|
-
import { signingFetchFor } from './chunk-
|
|
6
|
-
import { signerFor } from './chunk-
|
|
3
|
+
import { WorkCommandError, postJson } from './chunk-GJYGOFF3.js';
|
|
4
|
+
import { defaultGitRunner, materializeContext, fetchControlPlaneCommit, lookupGoverningSource } from './chunk-5IUC2B6J.js';
|
|
5
|
+
import { signingFetchFor } from './chunk-PAGB3DCI.js';
|
|
6
|
+
import { signerFor } from './chunk-VKYU4HHW.js';
|
|
7
7
|
import { unsupportedLayout, layoutRefusalReason, composeDelivery } from './chunk-FGF52V4V.js';
|
|
8
8
|
import { SHIM_SCRIPT, GOVERNANCE_VARIABLE } from './chunk-HCVLP7XA.js';
|
|
9
9
|
import { readDegraded, readContextManifest, readSourceCache } from './chunk-YQR6E6OV.js';
|
|
10
|
-
import { SHIM_DIR, stagedContextDir, contextHomeDir, deliveryDir, keptContextDir } from './chunk-
|
|
10
|
+
import { SHIM_DIR, stagedContextDir, contextHomeDir, deliveryDir, keptContextDir } from './chunk-AJTGTSNA.js';
|
|
11
11
|
import { fstatSync, mkdirSync, writeFileSync, chmodSync, rmSync, cpSync, readFileSync, existsSync, lstatSync } from 'fs';
|
|
12
12
|
import { relative, join, dirname } from 'path';
|
|
13
13
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { RELAY_PORT, BUILD_HOME } from './chunk-
|
|
3
|
+
import { RELAY_PORT, BUILD_HOME } from './chunk-L2OARQKP.js';
|
|
4
4
|
import { createServer, connect } from 'net';
|
|
5
5
|
|
|
6
6
|
createRequire(import.meta.url);
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
3
|
import { launchRefusalForSession } from './chunk-ESVW4MJY.js';
|
|
4
4
|
import { detectActiveSession } from './chunk-IP7BIBXJ.js';
|
|
5
|
-
import { autoConnect } from './chunk-
|
|
5
|
+
import { autoConnect } from './chunk-BTDBDTUY.js';
|
|
6
6
|
import { C } from './chunk-ANPNT6PM.js';
|
|
7
|
-
import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-
|
|
7
|
+
import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-PAGB3DCI.js';
|
|
8
8
|
import { resolveRepoIdentity } from './chunk-A6PJSNP6.js';
|
|
9
9
|
import { launchedItemForSession } from './chunk-T2Q7ISPE.js';
|
|
10
10
|
import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
3
|
import { detectActiveSession } from './chunk-IP7BIBXJ.js';
|
|
4
|
-
import { autoConnect } from './chunk-
|
|
4
|
+
import { autoConnect } from './chunk-BTDBDTUY.js';
|
|
5
5
|
import { C } from './chunk-ANPNT6PM.js';
|
|
6
|
-
import { defaultFetch, unauthorizedMessage, resolveGatewayCredentials } from './chunk-
|
|
6
|
+
import { defaultFetch, unauthorizedMessage, resolveGatewayCredentials } from './chunk-PAGB3DCI.js';
|
|
7
7
|
import { resolveRepoIdentity } from './chunk-A6PJSNP6.js';
|
|
8
8
|
import { parseWorkItemEnv } from './chunk-T2Q7ISPE.js';
|
|
9
9
|
import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { stripTerminalControls } from './chunk-
|
|
4
|
-
import { tagToPull, imageTag, pullInstruction, readUpdateStatus, runnerImageVersion } from './chunk-
|
|
3
|
+
import { stripTerminalControls } from './chunk-PBI4CM4M.js';
|
|
4
|
+
import { tagToPull, imageTag, pullInstruction, readUpdateStatus, runnerImageVersion } from './chunk-LBKCYEJT.js';
|
|
5
5
|
import { readFileSync } from 'fs';
|
|
6
6
|
|
|
7
7
|
createRequire(import.meta.url);
|
|
@@ -55,7 +55,7 @@ function envNamesOf(row, imageEnv) {
|
|
|
55
55
|
return [...new Set(names)].sort();
|
|
56
56
|
}
|
|
57
57
|
async function readOwnContainer(deps = {}) {
|
|
58
|
-
const run = deps.run ?? (await import('./docker-
|
|
58
|
+
const run = deps.run ?? (await import('./docker-VPJW5LXB.js')).spawnRun;
|
|
59
59
|
const ids = candidateIds(deps.env ?? process.env, deps.readFile ?? ((path) => readFileSync(path, "utf8")));
|
|
60
60
|
if (ids.length === 0) return { ok: false, reason: "the runner cannot tell which container it runs in: HOSTNAME is empty and /proc/self/mountinfo names none" };
|
|
61
61
|
let problem = "";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { TUNNEL_PORT, BRIDGE_ADDRESS, BRIDGE_CIDR } from './chunk-
|
|
4
|
-
import { EXEC_PORT } from './chunk-
|
|
3
|
+
import { TUNNEL_PORT, BRIDGE_ADDRESS, BRIDGE_CIDR } from './chunk-QJ2SNBHL.js';
|
|
4
|
+
import { EXEC_PORT } from './chunk-G4SOMWXL.js';
|
|
5
5
|
import { startTimeOf } from './chunk-JBJTC3UU.js';
|
|
6
|
-
import { RELAY_PORT } from './chunk-
|
|
6
|
+
import { RELAY_PORT } from './chunk-L2OARQKP.js';
|
|
7
7
|
import { spawn, spawnSync } from 'child_process';
|
|
8
8
|
import { symlinkSync, lstatSync, writeFileSync, chmodSync, mkdirSync, existsSync } from 'fs';
|
|
9
9
|
|