@outerlayer/cli 0.30.2-next.20261020115557 → 0.31.0-next.20261020121516
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-ZNYAXAWI.js → agent-setup-E7CMDUR5.js} +6 -6
- package/dist/{bridge-FI7OF2H3.js → bridge-3EG6Q34K.js} +2 -2
- package/dist/{build-PXRDWSN4.js → build-7QD3VJ6U.js} +4 -4
- package/dist/build-info.json +1 -1
- package/dist/{builder-UNVHUZL7.js → builder-JG34X757.js} +4 -4
- package/dist/{check-N3XNBPDH.js → check-EP4F6VOP.js} +46 -33
- package/dist/{chunk-B5CQJBZ2.js → chunk-2DH7VRLQ.js} +2 -2
- package/dist/{chunk-MBZTX4V2.js → chunk-4XPAQXJF.js} +1 -1
- package/dist/chunk-53SPRUEA.js +211 -0
- package/dist/{chunk-YVY3IVYV.js → chunk-77F7NGAZ.js} +3 -3
- package/dist/{chunk-PS3AHE6C.js → chunk-A2737R27.js} +2 -2
- package/dist/{chunk-DBELICD6.js → chunk-A4UGPQXT.js} +4 -4
- package/dist/{chunk-IRF2FKB5.js → chunk-APSYTJ6I.js} +1 -1
- package/dist/{chunk-EEZO2T24.js → chunk-BPPWINVG.js} +28 -70
- package/dist/{chunk-7YSR636F.js → chunk-CBEM7ZWX.js} +3 -3
- package/dist/{chunk-AM3GMWQK.js → chunk-F3EF56LQ.js} +1 -1
- package/dist/{chunk-3YLHIXLR.js → chunk-GIRXO5HA.js} +1 -1
- package/dist/{chunk-B7NT4YZ3.js → chunk-HB6SACVH.js} +22 -18
- package/dist/{chunk-WHCDULC4.js → chunk-HDSDUTX4.js} +17 -1
- package/dist/{chunk-TKJISBV6.js → chunk-HIGJTX5U.js} +1 -1
- package/dist/{chunk-SOWXLIDN.js → chunk-KP6R7CV3.js} +1 -1
- package/dist/{chunk-TGUWHA27.js → chunk-MCOG33O7.js} +2 -2
- package/dist/{chunk-4OKXGZM3.js → chunk-MIVAWAMF.js} +5 -5
- package/dist/{chunk-DLY22KHX.js → chunk-NIS2PIS4.js} +2 -2
- package/dist/{chunk-5HZDPOJI.js → chunk-NJS7JJYN.js} +3 -3
- package/dist/{chunk-SJ4DX2AD.js → chunk-OSVS2QVP.js} +2 -2
- package/dist/{chunk-3XUZPSBV.js → chunk-P2EVMNU6.js} +2 -2
- package/dist/{chunk-2ZMJFGOZ.js → chunk-P7BEZAEU.js} +7 -2
- package/dist/{chunk-MBVSVQVH.js → chunk-QQGZ5THT.js} +1 -1
- package/dist/{chunk-6CNNRO53.js → chunk-RJYKTWUP.js} +3 -3
- package/dist/{chunk-3F7RC3UA.js → chunk-RQGHHEM7.js} +3 -3
- package/dist/{chunk-IRTZYDZO.js → chunk-T5TBGOT6.js} +1 -1
- package/dist/{chunk-HMAYAMOQ.js → chunk-TYRORELN.js} +10 -10
- package/dist/{chunk-QWJBTFAF.js → chunk-TZQIEUDE.js} +1 -1
- package/dist/{chunk-ZNMVBHGJ.js → chunk-V52SJHWK.js} +2 -2
- package/dist/{chunk-5VWKCY2E.js → chunk-VJ4PORHS.js} +10 -10
- package/dist/{chunk-RJDJFRRY.js → chunk-WRW6QCI6.js} +1 -1
- package/dist/{chunk-44CGGHJF.js → chunk-X7UUIHGH.js} +1 -1
- package/dist/{chunk-I3WLYIIW.js → chunk-XAV6XCI2.js} +1 -1
- package/dist/{chunk-TN2XMMD7.js → chunk-XTNMIV77.js} +1 -1
- package/dist/{chunk-IUV6MUQB.js → chunk-Y5OU66XJ.js} +5 -5
- package/dist/{chunk-4SE6GXQA.js → chunk-YIOUHJQM.js} +5 -5
- package/dist/{chunk-D3LS7E7U.js → chunk-YV7WULXQ.js} +1 -1
- package/dist/{chunk-U5DC57AF.js → chunk-Z7HAIZ6X.js} +3 -3
- package/dist/{chunk-VL3CF4DZ.js → chunk-ZBN4JGTJ.js} +1 -1
- package/dist/{chunk-LJIFCG4G.js → chunk-ZZSQYOY5.js} +1 -1
- package/dist/{claude-launcher-ZDZQXW76.js → claude-launcher-IG7GKYIT.js} +1 -1
- package/dist/{cli-4464W6E6.js → cli-LI3WGWTD.js} +99 -99
- package/dist/{command-2MHSC5AE.js → command-FAXC7673.js} +22 -22
- package/dist/{config-VM6GKCCE.js → config-3JRFDYZL.js} +2 -2
- package/dist/{connect-cmd-U2DY4OZU.js → connect-cmd-BMMVPQUZ.js} +5 -5
- package/dist/{container-start-XMY3VOZB.js → container-start-I6CIYK3G.js} +21 -21
- package/dist/{control-plane-launch-2AC4BTWL.js → control-plane-launch-JCUNTTC3.js} +5 -5
- package/dist/{docker-K442NGCS.js → docker-4GU3IDBN.js} +4 -4
- package/dist/{doctor-5K4UTAT3.js → doctor-XSYJJHMJ.js} +46 -24
- package/dist/{emit-artifact-cmd-IK7GAS7V.js → emit-artifact-cmd-5PSOT6H6.js} +9 -9
- package/dist/{emit-criteria-cmd-TGBRMX3P.js → emit-criteria-cmd-T2HCUJIN.js} +6 -6
- package/dist/{emit-finding-cmd-KXCNLJLK.js → emit-finding-cmd-O2VWIDV3.js} +7 -7
- package/dist/{emit-result-cmd-WJBLCVDL.js → emit-result-cmd-D5SEY3GG.js} +9 -9
- package/dist/{emit-step-cmd-OYX5X65A.js → emit-step-cmd-RBAYCJVS.js} +7 -7
- package/dist/{exec-client-RMGGSTGR.js → exec-client-JLCFGCZT.js} +3 -3
- package/dist/{findings-cmd-HFDOB6AC.js → findings-cmd-R5SD5W6J.js} +7 -7
- package/dist/{fleet-readiness-5S2GCWZE.js → fleet-readiness-JEQ5ITV6.js} +5 -5
- package/dist/{governing-source-WM3WQ6J2.js → governing-source-VB2PXSWT.js} +9 -9
- package/dist/{guest-init-O7INUZWE.js → guest-init-BI7267TB.js} +4 -4
- package/dist/{hook-fast-A2N3PSXI.js → hook-fast-UFHR6EKZ.js} +1 -1
- package/dist/{host-key-HJ66C6MD.js → host-key-KAYMYRO3.js} +3 -3
- package/dist/{image-tag-LLXOFXKP.js → image-tag-OYT7UG7Y.js} +3 -3
- package/dist/index.js +4 -4
- package/dist/{init-WEFM7P2Y.js → init-MRMSJKXM.js} +21 -21
- package/dist/{init-IADOHXZR.js → init-UWDEHTRU.js} +21 -21
- package/dist/{init-cmd-6UPRZDCC.js → init-cmd-6XJVIDBZ.js} +10 -10
- package/dist/{init-update-RN2PZ3MT.js → init-update-OVEAWR2A.js} +8 -8
- package/dist/{install-GZ27NW6U.js → install-OIRIEOS7.js} +4 -4
- package/dist/{install-cmd-26OY23ZZ.js → install-cmd-IYWVR6WX.js} +5 -5
- package/dist/{logs-7O3ELY35.js → logs-C3RJ3ZTC.js} +2 -2
- package/dist/{loop-W2D5FHES.js → loop-7VRNUVEM.js} +33 -33
- package/dist/{machine-NESBHOCL.js → machine-NFK2XNY4.js} +17 -17
- package/dist/{mcp-serve-cmd-AT7G6J5V.js → mcp-serve-cmd-PB4UOTGL.js} +4 -4
- package/dist/{paths-32THAYBB.js → paths-OK2EZS7W.js} +2 -2
- package/dist/{pending-6CMYQHFL.js → pending-RKVRYOTF.js} +3 -3
- package/dist/{pidfile-3BH6WPOA.js → pidfile-BMFAUQAI.js} +3 -3
- package/dist/{record-WHPJCC6Y.js → record-26AH6WDB.js} +3 -3
- package/dist/{runner-env-6Q45P3IE.js → runner-env-66RAFIDJ.js} +5 -5
- package/dist/{runner-identity-KH7HADNF.js → runner-identity-KEN3K5CP.js} +4 -4
- package/dist/{runner-key-C4ZWPXYD.js → runner-key-RH3LXIWA.js} +21 -21
- package/dist/{session-sender-N4DOGRTN.js → session-sender-3USSYBMF.js} +10 -10
- package/dist/{spec-cmd-2ISEEZVA.js → spec-cmd-ZMGZSFBM.js} +7 -7
- package/dist/{status-GDI44URF.js → status-BX42CZLS.js} +24 -24
- package/dist/{sync-cmd-E5VRZ5DK.js → sync-cmd-GCIBKPC3.js} +9 -9
- package/dist/{watch-P6XAYDM2.js → watch-BKHTTS3D.js} +9 -9
- package/dist/{work-claim-cmd-MFPUOWXL.js → work-claim-cmd-QFP54F4D.js} +10 -10
- package/dist/{work-cmd-LXDWHKMQ.js → work-cmd-PHNJNLWA.js} +7 -7
- package/dist/{work-comment-cmd-2HSY4JA7.js → work-comment-cmd-SK5PTWOV.js} +7 -7
- package/dist/{work-logs-cmd-2MQR4JHN.js → work-logs-cmd-YZNVTMZQ.js} +7 -7
- package/dist/{work-open-pr-cmd-QUJVL4TF.js → work-open-pr-cmd-XAT4B35J.js} +8 -8
- package/dist/{work-pr-cmd-HOS5ZHJI.js → work-pr-cmd-HZBADML4.js} +7 -7
- package/dist/{work-stop-cmd-4J2NJ7KL.js → work-stop-cmd-Z44WRD7M.js} +7 -7
- package/package.json +1 -1
- package/dist/chunk-ERXY3FXG.js +0 -116
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
export { keepHandWritten, runAgentSetup } from './chunk-
|
|
3
|
+
export { keepHandWritten, runAgentSetup } from './chunk-XAV6XCI2.js';
|
|
4
4
|
import './chunk-XB7TRWI2.js';
|
|
5
5
|
import './chunk-KT4CN6OU.js';
|
|
6
6
|
import './chunk-XTKH5VAC.js';
|
|
7
7
|
import './chunk-QDDPVBIS.js';
|
|
8
8
|
import './chunk-ANPNT6PM.js';
|
|
9
|
-
import './chunk-
|
|
9
|
+
import './chunk-NIS2PIS4.js';
|
|
10
10
|
import './chunk-V6IYYQU3.js';
|
|
11
|
-
import './chunk-
|
|
11
|
+
import './chunk-F3EF56LQ.js';
|
|
12
12
|
import './chunk-PJDQPF5N.js';
|
|
13
|
-
import './chunk-
|
|
14
|
-
import './chunk-
|
|
15
|
-
import './chunk-
|
|
13
|
+
import './chunk-APSYTJ6I.js';
|
|
14
|
+
import './chunk-KP6R7CV3.js';
|
|
15
|
+
import './chunk-HDSDUTX4.js';
|
|
16
16
|
import './chunk-ZJSNLVCE.js';
|
|
17
17
|
import './chunk-BJ3KTMDH.js';
|
|
18
18
|
import './chunk-AKKVPUGK.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
export { BRIDGE_ADDRESS, BRIDGE_CIDR, CONTAINER_NO_PROXY, CONTAINER_PROXY, TUNNEL_PORT, dockerClientConfig, startBridgeForward, writeDockerClientConfig } from './chunk-
|
|
4
|
-
import './chunk-
|
|
3
|
+
export { BRIDGE_ADDRESS, BRIDGE_CIDR, CONTAINER_NO_PROXY, CONTAINER_PROXY, TUNNEL_PORT, dockerClientConfig, startBridgeForward, writeDockerClientConfig } from './chunk-XTNMIV77.js';
|
|
4
|
+
import './chunk-HDSDUTX4.js';
|
|
5
5
|
import './chunk-XD4ZCMA4.js';
|
|
6
6
|
import './chunk-MESOOLF4.js';
|
|
7
7
|
import './chunk-Z5GEFMRW.js';
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
export { buildRepositoryImage } from './chunk-
|
|
4
|
-
import './chunk-
|
|
3
|
+
export { buildRepositoryImage } from './chunk-Z7HAIZ6X.js';
|
|
4
|
+
import './chunk-T5TBGOT6.js';
|
|
5
5
|
import './chunk-JBJTC3UU.js';
|
|
6
6
|
export { RecipeError } from './chunk-SJZL5F3F.js';
|
|
7
|
-
import './chunk-
|
|
8
|
-
import './chunk-
|
|
7
|
+
import './chunk-KP6R7CV3.js';
|
|
8
|
+
import './chunk-HDSDUTX4.js';
|
|
9
9
|
import './chunk-XD4ZCMA4.js';
|
|
10
10
|
import './chunk-MESOOLF4.js';
|
|
11
11
|
import './chunk-Z5GEFMRW.js';
|
package/dist/build-info.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"id":"2026-10-
|
|
1
|
+
{"id":"2026-10-20T12:16:40.068Z+9978d2e","root":"/home/runner/_work/outerlayer/outerlayer","pkg":"outerlayer"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
export { MIN_BUILDX_VERSION, builderName, builderSpec, buildxState, ensureBuilder, ensureFailureCount, isOutOfMemory, proxyEnvironment, trackImageBuild } from './chunk-
|
|
3
|
+
export { MIN_BUILDX_VERSION, builderName, builderSpec, buildxState, ensureBuilder, ensureFailureCount, isOutOfMemory, proxyEnvironment, trackImageBuild } from './chunk-CBEM7ZWX.js';
|
|
4
4
|
import './chunk-YJLHUKYS.js';
|
|
5
5
|
import './chunk-SJZL5F3F.js';
|
|
6
6
|
import './chunk-FTGJ3DPV.js';
|
|
7
|
-
import './chunk-
|
|
8
|
-
import './chunk-
|
|
9
|
-
import './chunk-
|
|
7
|
+
import './chunk-APSYTJ6I.js';
|
|
8
|
+
import './chunk-KP6R7CV3.js';
|
|
9
|
+
import './chunk-HDSDUTX4.js';
|
|
10
10
|
import './chunk-IWFYKNAO.js';
|
|
11
11
|
import './chunk-XD4ZCMA4.js';
|
|
12
12
|
import './chunk-MESOOLF4.js';
|
|
@@ -1,60 +1,60 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { probeCredentials } from './chunk-
|
|
4
|
-
import './chunk-
|
|
3
|
+
import { probeCredentials } from './chunk-BPPWINVG.js';
|
|
4
|
+
import './chunk-HB6SACVH.js';
|
|
5
5
|
import './chunk-3JVYMD4G.js';
|
|
6
6
|
import './chunk-E7R2GIAW.js';
|
|
7
7
|
import './chunk-6C5MZ7UG.js';
|
|
8
|
-
import './chunk-
|
|
8
|
+
import './chunk-TZQIEUDE.js';
|
|
9
9
|
import './chunk-ZVB57WI6.js';
|
|
10
|
-
import './chunk-
|
|
11
|
-
import './chunk-
|
|
10
|
+
import './chunk-X7UUIHGH.js';
|
|
11
|
+
import './chunk-RJYKTWUP.js';
|
|
12
12
|
import './chunk-I3LTIAOR.js';
|
|
13
|
-
import './chunk-
|
|
14
|
-
import './chunk-
|
|
15
|
-
import './chunk-
|
|
13
|
+
import './chunk-V52SJHWK.js';
|
|
14
|
+
import './chunk-A4UGPQXT.js';
|
|
15
|
+
import './chunk-A2737R27.js';
|
|
16
16
|
import './chunk-ESVW4MJY.js';
|
|
17
|
-
import './chunk-
|
|
18
|
-
import { placeholderQueues, placeholderProblem, permissionModeProblems, permissionModeProblem, needsClaudeCredential, claudeCredentialCheck, claimPermissionProblem, formerSkillQueues, formerSkillProblem } from './chunk-
|
|
17
|
+
import './chunk-XTNMIV77.js';
|
|
18
|
+
import { placeholderQueues, placeholderProblem, permissionModeProblems, permissionModeProblem, managedProblems, managedFactsOf, needsClaudeCredential, claudeCredentialCheck, claimPermissionProblem, formerSkillQueues, formerSkillProblem } from './chunk-53SPRUEA.js';
|
|
19
19
|
import './chunk-YYYRBYWG.js';
|
|
20
|
-
import './chunk-
|
|
20
|
+
import './chunk-ZZSQYOY5.js';
|
|
21
21
|
import './chunk-TBT347UY.js';
|
|
22
|
-
import './chunk-
|
|
23
|
-
import './chunk-
|
|
24
|
-
import './chunk-
|
|
25
|
-
import './chunk-
|
|
26
|
-
import './chunk-
|
|
27
|
-
import './chunk-
|
|
28
|
-
import './chunk-
|
|
22
|
+
import './chunk-Y5OU66XJ.js';
|
|
23
|
+
import './chunk-P2EVMNU6.js';
|
|
24
|
+
import { probeHelper, HELPER_ENV, helperSocketPath } from './chunk-VJ4PORHS.js';
|
|
25
|
+
import './chunk-QQGZ5THT.js';
|
|
26
|
+
import './chunk-HIGJTX5U.js';
|
|
27
|
+
import './chunk-YIOUHJQM.js';
|
|
28
|
+
import './chunk-YV7WULXQ.js';
|
|
29
29
|
import './chunk-TQMI335S.js';
|
|
30
|
-
import './chunk-
|
|
31
|
-
import './chunk-
|
|
32
|
-
import { loadRunnerConfig, RunnerConfigError, checkHooks } from './chunk-
|
|
30
|
+
import './chunk-NJS7JJYN.js';
|
|
31
|
+
import { DEFAULT_UNIT_NAME } from './chunk-RQGHHEM7.js';
|
|
32
|
+
import { loadRunnerConfig, RunnerConfigError, checkHooks } from './chunk-P7BEZAEU.js';
|
|
33
33
|
import './chunk-UXYLWVTQ.js';
|
|
34
|
-
import './chunk-
|
|
35
|
-
import './chunk-
|
|
34
|
+
import './chunk-Z7HAIZ6X.js';
|
|
35
|
+
import './chunk-T5TBGOT6.js';
|
|
36
36
|
import './chunk-JBJTC3UU.js';
|
|
37
37
|
import './chunk-OGFGZQA3.js';
|
|
38
|
-
import './chunk-
|
|
38
|
+
import './chunk-CBEM7ZWX.js';
|
|
39
39
|
import './chunk-YJLHUKYS.js';
|
|
40
40
|
import './chunk-SJZL5F3F.js';
|
|
41
|
-
import './chunk-
|
|
42
|
-
import './chunk-
|
|
43
|
-
import './chunk-
|
|
41
|
+
import './chunk-MIVAWAMF.js';
|
|
42
|
+
import './chunk-OSVS2QVP.js';
|
|
43
|
+
import './chunk-GIRXO5HA.js';
|
|
44
44
|
import './chunk-HSUUTD4E.js';
|
|
45
45
|
import './chunk-FTGJ3DPV.js';
|
|
46
46
|
import './chunk-QDDPVBIS.js';
|
|
47
47
|
import './chunk-G2RRBBOX.js';
|
|
48
48
|
import './chunk-G2JWZDFA.js';
|
|
49
49
|
import './chunk-ANPNT6PM.js';
|
|
50
|
-
import './chunk-
|
|
50
|
+
import './chunk-NIS2PIS4.js';
|
|
51
51
|
import './chunk-V6IYYQU3.js';
|
|
52
|
-
import './chunk-
|
|
52
|
+
import './chunk-F3EF56LQ.js';
|
|
53
53
|
import './chunk-PJDQPF5N.js';
|
|
54
|
-
import './chunk-
|
|
55
|
-
import './chunk-
|
|
56
|
-
import { claudeEnvPath } from './chunk-
|
|
57
|
-
import './chunk-
|
|
54
|
+
import './chunk-APSYTJ6I.js';
|
|
55
|
+
import './chunk-KP6R7CV3.js';
|
|
56
|
+
import { claudeEnvPath } from './chunk-HDSDUTX4.js';
|
|
57
|
+
import './chunk-WRW6QCI6.js';
|
|
58
58
|
import './chunk-ZJSNLVCE.js';
|
|
59
59
|
import './chunk-2O5KA67H.js';
|
|
60
60
|
import './chunk-BKO6JEZI.js';
|
|
@@ -106,6 +106,19 @@ async function runRunnerCheck(configPath, deps = {}) {
|
|
|
106
106
|
if (modeProblems.length > 0) {
|
|
107
107
|
return { ok: false, check: "permission mode", message: `${configPath}: ${permissionModeProblem(modeProblems)}` };
|
|
108
108
|
}
|
|
109
|
+
if (config.managed === true) {
|
|
110
|
+
const files = [join(dirname(configPath), "runner.env"), claudeEnvPath(configPath)];
|
|
111
|
+
const env = {};
|
|
112
|
+
for (const path of files) {
|
|
113
|
+
const fromFile = readRunnerEnv(path);
|
|
114
|
+
if ("error" in fromFile) return { ok: false, check: "managed", message: `${configPath}: ${path} could not be read to look for a Claude credential: ${fromFile.error}` };
|
|
115
|
+
Object.assign(env, fromFile.env);
|
|
116
|
+
}
|
|
117
|
+
Object.assign(env, deps.env ?? process.env);
|
|
118
|
+
const asked = await (deps.helper ?? (() => probeHelper(env[HELPER_ENV] ?? helperSocketPath(DEFAULT_UNIT_NAME))))();
|
|
119
|
+
const unmet = managedProblems(managedFactsOf(config, { env, jailer: asked.ok ? "usable" : { problem: asked.detail } }))[0];
|
|
120
|
+
if (unmet !== void 0) return { ok: false, check: "managed", message: `${configPath}: ${unmet.reason}` };
|
|
121
|
+
}
|
|
109
122
|
let credentialLine;
|
|
110
123
|
if (needsClaudeCredential(config.hooks)) {
|
|
111
124
|
const env = deps.env ?? process.env;
|
|
@@ -1,10 +1,10 @@
|
|
|
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-
|
|
4
|
+
import { detectActiveSession, autoConnect, transcriptPathForSession } from './chunk-OSVS2QVP.js';
|
|
5
5
|
import { resolveRepoIdentity, defaultProjectsDir, findTranscripts, sessionIdFromPath, scrubText } from './chunk-FTGJ3DPV.js';
|
|
6
6
|
import { C } from './chunk-ANPNT6PM.js';
|
|
7
|
-
import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-
|
|
7
|
+
import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-F3EF56LQ.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';
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
3
|
import { sanitizeTerminal } from './chunk-HSUUTD4E.js';
|
|
4
4
|
import { isAgentsMdLayout } from './chunk-QDDPVBIS.js';
|
|
5
|
-
import { resolveGatewayCredentials, defaultFetch } from './chunk-
|
|
5
|
+
import { resolveGatewayCredentials, defaultFetch } from './chunk-F3EF56LQ.js';
|
|
6
6
|
import { versionAtLeast } from './chunk-HCVLP7XA.js';
|
|
7
7
|
import { findGitDirs } from './chunk-BJ3KTMDH.js';
|
|
8
8
|
import { machineSkillsState, staleClaudeSkills } from './chunk-UAFMC3PL.js';
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createRequire } from 'node:module';
|
|
3
|
+
import { isPlaceholderCommand } from './chunk-Y5OU66XJ.js';
|
|
4
|
+
import { describeCallFailure } from './chunk-YIOUHJQM.js';
|
|
5
|
+
import { checkFit } from './chunk-RQGHHEM7.js';
|
|
6
|
+
import { builtinKind } from './chunk-P7BEZAEU.js';
|
|
7
|
+
import { WorkCommandError, getJson } from './chunk-MIVAWAMF.js';
|
|
8
|
+
import { sanitizeTerminal } from './chunk-HSUUTD4E.js';
|
|
9
|
+
import { signerFor } from './chunk-APSYTJ6I.js';
|
|
10
|
+
import { CLAUDE_CREDENTIAL_VARIABLES, claudeCredential, claudeCredentialVariablesSet } from './chunk-HDSDUTX4.js';
|
|
11
|
+
import { closeSync, openSync, constants } from 'fs';
|
|
12
|
+
import { totalmem } from 'os';
|
|
13
|
+
|
|
14
|
+
createRequire(import.meta.url);
|
|
15
|
+
|
|
16
|
+
// src/runner/host-setup.ts
|
|
17
|
+
function placeholderQueues(config) {
|
|
18
|
+
return config.queues.filter((queue) => {
|
|
19
|
+
const command = config.commands[queue];
|
|
20
|
+
return command !== void 0 && isPlaceholderCommand(command);
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
function placeholderProblem(queues) {
|
|
24
|
+
const keys = queues.map((queue) => `runner.commands.${queue}`).join(", ");
|
|
25
|
+
return `${keys} ${queues.length === 1 ? "is" : "are"} still the placeholder \`runner init\` wrote, which fails every item. Edit ${queues.length === 1 ? "it" : "them"} to start your agent on item $OUTERLAYER_WORK`;
|
|
26
|
+
}
|
|
27
|
+
var CLAUDE_PERMISSION_MODES = ["acceptEdits", "auto", "bypassPermissions", "default", "dontAsk", "manual", "plan"];
|
|
28
|
+
var CLAUDE_COMMAND = /(?:^|[;&|(])\s*(?:(?:exec|env|nohup|time)\s+)*(?:[A-Za-z_][A-Za-z0-9_]*=\S*\s+)*(?:\S*\/)?claude\s/;
|
|
29
|
+
var PERMISSION_MODE_FLAG = /--permission-mode(?:=|\s+)(?:"([^"]*)"|'([^']*)'|([^\s;&|()]+))/g;
|
|
30
|
+
function permissionModeProblems(config) {
|
|
31
|
+
const problems = [];
|
|
32
|
+
for (const queue of config.queues) {
|
|
33
|
+
const command = config.commands[queue];
|
|
34
|
+
if (command === void 0 || !CLAUDE_COMMAND.test(command)) continue;
|
|
35
|
+
for (const match of command.matchAll(PERMISSION_MODE_FLAG)) {
|
|
36
|
+
const value = match[1] ?? match[2] ?? match[3] ?? "";
|
|
37
|
+
if (value.includes("$") || value.includes("`") || CLAUDE_PERMISSION_MODES.includes(value)) continue;
|
|
38
|
+
problems.push({ queue, command, value });
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return problems;
|
|
42
|
+
}
|
|
43
|
+
function permissionModeProblem(problems) {
|
|
44
|
+
return problems.map(({ queue, command, value }) => `runner.commands.${queue} is \`${command}\`, and \`${value}\` is not a permission mode Claude Code accepts (${CLAUDE_PERMISSION_MODES.join(", ")}). The command would fail only when a build ran it`).join(". ");
|
|
45
|
+
}
|
|
46
|
+
var FORMER_AMEND_COMMAND = /(^|["'\s])\/amend(?=["'\s]|$)/g;
|
|
47
|
+
function currentSkillCommand(command) {
|
|
48
|
+
return command.replace(FORMER_AMEND_COMMAND, "$1/outerlayer-amend");
|
|
49
|
+
}
|
|
50
|
+
function formerSkillQueues(config) {
|
|
51
|
+
return config.queues.filter((queue) => {
|
|
52
|
+
const command = config.commands[queue];
|
|
53
|
+
return command !== void 0 && currentSkillCommand(command) !== command;
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
function formerSkillProblem(queues) {
|
|
57
|
+
const keys = queues.map((queue) => `runner.commands.${queue}`).join(", ");
|
|
58
|
+
return `${keys} ${queues.length === 1 ? "starts" : "start"} /amend, which is now /outerlayer-amend. The runner runs /outerlayer-amend in its place; edit the config to say so`;
|
|
59
|
+
}
|
|
60
|
+
function needsClaudeCredential(hooks) {
|
|
61
|
+
return builtinKind(hooks.provision) !== "own";
|
|
62
|
+
}
|
|
63
|
+
var CREDENTIAL_FIX = "Run `claude setup-token`, then pipe the token it prints (or an Anthropic API key) to `outerlayer runner init --agent claude`, which stores it in the claude.env beside the config. Or start the runner with CLAUDE_CODE_OAUTH_TOKEN (or ANTHROPIC_API_KEY) set";
|
|
64
|
+
function claudeCredentialCheck(env, options = {}) {
|
|
65
|
+
const name = "Claude credential";
|
|
66
|
+
if (options.service !== void 0) {
|
|
67
|
+
const { unit, variables } = options.service;
|
|
68
|
+
if (variables.length === 0) {
|
|
69
|
+
return {
|
|
70
|
+
name,
|
|
71
|
+
status: "fail",
|
|
72
|
+
detail: `the service ${unit} has no Claude credential: neither ${CLAUDE_CREDENTIAL_VARIABLES.slice(0, 2).join(" nor ")} is set in its claude.env or runner.env, so every build fails at provision as agent_credential_missing`,
|
|
73
|
+
fix: `${CREDENTIAL_FIX}, then restart the service: sudo systemctl restart ${unit}.`
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
return { name, status: "pass", detail: `${variables[0]} is set in the claude.env or runner.env of the service ${unit}` };
|
|
77
|
+
}
|
|
78
|
+
const held = claudeCredential(env, { ignoreHeld: options.ignoreHeld === true });
|
|
79
|
+
if (held === void 0) {
|
|
80
|
+
return {
|
|
81
|
+
name,
|
|
82
|
+
status: "fail",
|
|
83
|
+
detail: `neither ${CLAUDE_CREDENTIAL_VARIABLES.slice(0, 2).join(" nor ")} is set, so every build fails at provision as agent_credential_missing`,
|
|
84
|
+
fix: `${CREDENTIAL_FIX}.`
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
const sameVariables = options.shell === true ? "; the runner must be started with the same variable" : "";
|
|
88
|
+
return { name, status: "pass", detail: `${held.variable} is set${sameVariables}` };
|
|
89
|
+
}
|
|
90
|
+
function missingPermissionOf(err) {
|
|
91
|
+
if (!(err instanceof WorkCommandError) || err.status !== 403) return void 0;
|
|
92
|
+
const permission = /missing required permission '([^']+)'/i.exec(err.message)?.[1];
|
|
93
|
+
return permission === void 0 ? void 0 : sanitizeTerminal(permission);
|
|
94
|
+
}
|
|
95
|
+
function missingPermissionFix(permission) {
|
|
96
|
+
return `use a key that holds ${permission}: create one with the Runner preset on the factory's API keys page, then run \`outerlayer login\` with it`;
|
|
97
|
+
}
|
|
98
|
+
async function claimPermissionProblem(config, fetchImpl = fetch) {
|
|
99
|
+
const unverified = (what, err) => ({
|
|
100
|
+
status: "unverified",
|
|
101
|
+
reason: sanitizeTerminal(`${what}: ${err instanceof Error ? describeCallFailure(err) : String(err)}`)
|
|
102
|
+
});
|
|
103
|
+
let signer;
|
|
104
|
+
try {
|
|
105
|
+
signer = await signerFor(config.configPath);
|
|
106
|
+
} catch (err) {
|
|
107
|
+
return unverified("this host's key could not be read, so whether the runner key can claim work was not checked", err);
|
|
108
|
+
}
|
|
109
|
+
try {
|
|
110
|
+
await getJson(config.url, "/v1/runner/host-key", config.apiKey, config.appId, fetchImpl, signer);
|
|
111
|
+
return { status: "ok" };
|
|
112
|
+
} catch (err) {
|
|
113
|
+
const permission = missingPermissionOf(err);
|
|
114
|
+
if (permission === void 0) return unverified("the host-key call did not say whether the runner key can claim work", err);
|
|
115
|
+
return { status: "lacks", problem: `the runner key lacks ${permission}, which a runner needs to claim work: ${missingPermissionFix(permission)}` };
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
function openKvm() {
|
|
119
|
+
try {
|
|
120
|
+
closeSync(openSync("/dev/kvm", constants.O_RDWR));
|
|
121
|
+
return "usable";
|
|
122
|
+
} catch (err) {
|
|
123
|
+
return err.code === "ENOENT" ? "absent" : "no-permission";
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
function realBlockedProbes() {
|
|
127
|
+
return { env: process.env, kvm: openKvm, totalMemoryBytes: totalmem, imageBuilder: "unknown" };
|
|
128
|
+
}
|
|
129
|
+
var DEFAULT_BUILD_MEMORY = "8g";
|
|
130
|
+
function managedProblems(facts) {
|
|
131
|
+
const problems = [];
|
|
132
|
+
if (builtinKind(facts.provision) !== "vm") {
|
|
133
|
+
problems.push({
|
|
134
|
+
condition: "jailer",
|
|
135
|
+
reason: `a managed runner needs builtin:vm hooks, and runner.hooks.provision is ${facts.provision}. Without them builds would run without the jailer. Set runner.hooks.provision and runner.hooks.cleanup to builtin:vm`
|
|
136
|
+
});
|
|
137
|
+
} else if (facts.jailer === "usable") ; else if (facts.jailer === "unknown") {
|
|
138
|
+
problems.push({ condition: "jailer", reason: "the runner has not yet asked the root helper whether builds run under the jailer, so builds would run without the jailer until it answers" });
|
|
139
|
+
} else {
|
|
140
|
+
const { problem } = facts.jailer;
|
|
141
|
+
const advice = problem.includes("pins no helper") || problem.includes("runner install") ? "" : ". Run `outerlayer runner install --service --replace` to install the root helper, then restart the service";
|
|
142
|
+
problems.push({ condition: "jailer", reason: `builds would run without the jailer, which a managed runner does not allow: ${problem}${advice}` });
|
|
143
|
+
}
|
|
144
|
+
if (facts.credentials.has("CLAUDE_CODE_OAUTH_TOKEN")) {
|
|
145
|
+
problems.push({
|
|
146
|
+
condition: "credential",
|
|
147
|
+
reason: "CLAUDE_CODE_OAUTH_TOKEN is set in the runner's environment or credentials directory, and a managed runner accepts only ANTHROPIC_API_KEY. Remove CLAUDE_CODE_OAUTH_TOKEN from the claude.env and runner.env beside the config, store ANTHROPIC_API_KEY, then restart the service"
|
|
148
|
+
});
|
|
149
|
+
} else if (!facts.credentials.has("ANTHROPIC_API_KEY")) {
|
|
150
|
+
problems.push({
|
|
151
|
+
condition: "credential",
|
|
152
|
+
reason: "there is no Claude credential in the runner's environment, and a managed runner needs ANTHROPIC_API_KEY. Store ANTHROPIC_API_KEY with `outerlayer runner init --agent claude`, which writes the claude.env beside the config, then restart the service"
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
if (facts.allowHosts === void 0) {
|
|
156
|
+
problems.push({
|
|
157
|
+
condition: "allowHosts",
|
|
158
|
+
reason: "runner.build.allowHosts is not set, and a managed runner needs it so that a build reaches only the public hosts it lists. List the hosts your builds need; an empty list allows none"
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
return problems;
|
|
162
|
+
}
|
|
163
|
+
function managedFactsOf(config, probes) {
|
|
164
|
+
return {
|
|
165
|
+
provision: config.hooks.provision,
|
|
166
|
+
jailer: probes.jailer ?? "unknown",
|
|
167
|
+
credentials: claudeCredentialVariablesSet(probes.env),
|
|
168
|
+
allowHosts: config.build?.allowHosts
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
function checkBlocked(config, probes) {
|
|
172
|
+
const placeholders = placeholderQueues(config);
|
|
173
|
+
if (placeholders.length > 0) return { reason: `${placeholderProblem(placeholders)}. The runner takes work again once the config is edited` };
|
|
174
|
+
if (config.managed === true) {
|
|
175
|
+
const unmet = managedProblems(managedFactsOf(config, probes))[0];
|
|
176
|
+
if (unmet !== void 0) return { reason: unmet.reason };
|
|
177
|
+
}
|
|
178
|
+
const kind = builtinKind(config.hooks.provision);
|
|
179
|
+
if (kind === "container" || kind === "vm") {
|
|
180
|
+
const fit = checkFit({
|
|
181
|
+
concurrency: config.concurrency,
|
|
182
|
+
buildMemory: config.build?.memory ?? DEFAULT_BUILD_MEMORY,
|
|
183
|
+
usableBytes: probes.totalMemoryBytes()
|
|
184
|
+
});
|
|
185
|
+
if (!fit.fits) return { reason: `${fit.message}. Lower runner.concurrency or runner.build.memory` };
|
|
186
|
+
}
|
|
187
|
+
const kvm = kind === "vm" ? probes.kvm() : "usable";
|
|
188
|
+
if (kvm === "absent") {
|
|
189
|
+
return { reason: "/dev/kvm does not exist on this machine, so builtin:vm cannot start a microVM. Use a host with KVM enabled, or builtin:container hooks" };
|
|
190
|
+
}
|
|
191
|
+
if (kvm !== "usable") {
|
|
192
|
+
return {
|
|
193
|
+
reason: "the runner cannot open /dev/kvm, so builtin:vm cannot start a microVM. Add the runner's account to the kvm group, then restart the service, because a service reads its groups only when it starts"
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
if (kind === "container" || kind === "vm") {
|
|
197
|
+
const builder = probes.imageBuilder;
|
|
198
|
+
if (builder === "unknown") {
|
|
199
|
+
return { reason: "the runner is still preparing its image builder, the container that limits image builds to runner.build.memory, so it claims nothing yet" };
|
|
200
|
+
}
|
|
201
|
+
if (builder !== "usable") return { reason: `${builder.problem}. The runner takes work again once its image builder works` };
|
|
202
|
+
}
|
|
203
|
+
if (kind !== "own" && claudeCredential(probes.env) === void 0) {
|
|
204
|
+
return {
|
|
205
|
+
reason: "there is no Claude credential in the runner's environment. Store CLAUDE_CODE_OAUTH_TOKEN (from `claude setup-token`) or ANTHROPIC_API_KEY with `outerlayer runner init --agent claude`, which writes the claude.env beside the config, then restart the service"
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
return void 0;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
export { checkBlocked, claimPermissionProblem, claudeCredentialCheck, currentSkillCommand, formerSkillProblem, formerSkillQueues, managedFactsOf, managedProblems, missingPermissionFix, missingPermissionOf, needsClaudeCredential, permissionModeProblem, permissionModeProblems, placeholderProblem, placeholderQueues, realBlockedProbes };
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { launcherPath, writeLauncher, LauncherWriteError, pathNotes } from './chunk-
|
|
4
|
-
import { currentVersion, currentLink, isInLayout, packageRootIn, versionDir, switchCurrent, execStartLine } from './chunk-
|
|
3
|
+
import { launcherPath, writeLauncher, LauncherWriteError, pathNotes } from './chunk-ZBN4JGTJ.js';
|
|
4
|
+
import { currentVersion, currentLink, isInLayout, packageRootIn, versionDir, switchCurrent, execStartLine } from './chunk-ZZSQYOY5.js';
|
|
5
5
|
import { compareVersions } from './chunk-TQMI335S.js';
|
|
6
|
-
import { RUNNER_DIR_MODE } from './chunk-
|
|
6
|
+
import { RUNNER_DIR_MODE } from './chunk-KP6R7CV3.js';
|
|
7
7
|
import { realpathSync, readFileSync, mkdirSync, rmSync, cpSync, existsSync } from 'fs';
|
|
8
8
|
import { dirname, sep, join } from 'path';
|
|
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-ESVW4MJY.js';
|
|
4
|
-
import { autoConnect, detectActiveSession } from './chunk-
|
|
4
|
+
import { autoConnect, detectActiveSession } from './chunk-OSVS2QVP.js';
|
|
5
5
|
import { acquireSpoolLockAt } from './chunk-HSUUTD4E.js';
|
|
6
6
|
import { resolveRepoIdentity } from './chunk-FTGJ3DPV.js';
|
|
7
7
|
import { C } from './chunk-ANPNT6PM.js';
|
|
8
|
-
import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-
|
|
8
|
+
import { resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-F3EF56LQ.js';
|
|
9
9
|
import { launchedItemForSession } from './chunk-T2Q7ISPE.js';
|
|
10
10
|
import { parseTrackerNumber, trackerNumberError } from './chunk-WZBHBH3J.js';
|
|
11
11
|
import { StepNameSchema, StepBodySchema } from './chunk-IWFYKNAO.js';
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { uploadSpooledSteps } from './chunk-
|
|
3
|
+
import { uploadSpooledSteps } from './chunk-A2737R27.js';
|
|
4
4
|
import { LaunchFilter } from './chunk-ESVW4MJY.js';
|
|
5
5
|
import { RepoFilter } from './chunk-TBT347UY.js';
|
|
6
6
|
import { migrateLegacyArtifactSidecars, planArtifactUpload, artifactsStatePath, sanitizeTerminal, acquireArtifactSpoolLock, artifactBlobsDir, resolveArtifactTurnIndex, isArtifactTombstoned, ARTIFACT_RETRY_MAX_AGE_MS, writeArtifactSpoolState, reclaimUnneededArtifactBlobs, neededArtifactShas } from './chunk-HSUUTD4E.js';
|
|
7
7
|
import { setCustomScrubbers, setLocalIdentity, tailTranscript, enrichSessionRepo, scanAll, setRepoRoot, resolveRepoIdentity, sessionIdFromPath, scrubDeep, SOURCE_ADAPTERS } from './chunk-FTGJ3DPV.js';
|
|
8
8
|
import { C } from './chunk-ANPNT6PM.js';
|
|
9
|
-
import { cliFetch, resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-
|
|
9
|
+
import { cliFetch, resolveGatewayCredentials, defaultFetch, unauthorizedMessage } from './chunk-F3EF56LQ.js';
|
|
10
10
|
import { readCloudConfig, cloudConfigPath, writeCloudConfig } from './chunk-PJDQPF5N.js';
|
|
11
|
-
import { signerFor, signRunnerRequest } from './chunk-
|
|
12
|
-
import { writeSyncStatus, spoolDir } from './chunk-
|
|
11
|
+
import { signerFor, signRunnerRequest } from './chunk-APSYTJ6I.js';
|
|
12
|
+
import { writeSyncStatus, spoolDir } from './chunk-WRW6QCI6.js';
|
|
13
13
|
import { readLatestProvenanceForSession, readContextProvenance } from './chunk-ZJSNLVCE.js';
|
|
14
14
|
import { hookExecSpoolPath } from './chunk-2O5KA67H.js';
|
|
15
15
|
import { applyReportedCost } from './chunk-BKO6JEZI.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { hostKeyPath, runnerDir, RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-
|
|
3
|
+
import { hostKeyPath, runnerDir, RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-KP6R7CV3.js';
|
|
4
4
|
import { generateKeyPairSync, createPrivateKey, createPublicKey, sign } from 'crypto';
|
|
5
5
|
import { existsSync, mkdirSync, writeFileSync, readFileSync } from 'fs';
|
|
6
6
|
|