@outerlayer/cli 0.19.0 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/README.md +11 -2
- package/dist/{agent-setup-TPR4BBFV.js → agent-setup-AM42SA2D.js} +6 -6
- package/dist/build-info.json +1 -1
- package/dist/{check-UWQAL2MN.js → check-BR5D27CX.js} +17 -17
- package/dist/{chunk-7KSSBQTS.js → chunk-3ZR7Y23Y.js} +2 -2
- package/dist/{chunk-ZHAUSEEN.js → chunk-5VML45HH.js} +2 -2
- package/dist/{chunk-5MYFOW5V.js → chunk-AD3EYI7P.js} +110 -19
- package/dist/{chunk-6U3MV7TZ.js → chunk-B6SCN5NY.js} +6 -6
- package/dist/{chunk-DJ3ZUSC3.js → chunk-CGGPS7SI.js} +3 -3
- package/dist/{chunk-452TM7J4.js → chunk-EAEELQVQ.js} +2 -2
- package/dist/{chunk-HPJNLETG.js → chunk-FBTGMSQF.js} +1 -1
- package/dist/{chunk-DADWEUH3.js → chunk-GEMQLBMW.js} +3 -3
- package/dist/{chunk-5TN7GLYX.js → chunk-HOKXGFDR.js} +4 -4
- package/dist/{chunk-5GHGAF6P.js → chunk-JHGEBPLE.js} +2 -2
- package/dist/{chunk-UVG35MWF.js → chunk-LW7G5TJB.js} +1 -1
- package/dist/{chunk-6D7GT22T.js → chunk-PIZRPNKR.js} +2 -2
- package/dist/{chunk-NFIR3GEE.js → chunk-PSN33ERW.js} +2 -2
- package/dist/{chunk-7SJPQWBM.js → chunk-R22NZSGA.js} +2 -2
- package/dist/{chunk-XSZD4AZ6.js → chunk-XZ4H4X5F.js} +2 -2
- package/dist/{chunk-VRRGENS4.js → chunk-Z7K3L4FC.js} +31 -1
- package/dist/{chunk-BWSUPRDK.js → chunk-ZX4I2MEK.js} +1 -1
- package/dist/{claude-launcher-FPPHZPMR.js → claude-launcher-J5M44PFS.js} +1 -1
- package/dist/{cli-HROW5T7X.js → cli-MKF7TU7X.js} +86 -56
- package/dist/{command-OEAV7BVX.js → command-ZQNEPDS6.js} +8 -8
- package/dist/connect-cmd-UNYKGDAL.js +1 -1
- package/dist/{context-cleanup-HSVYDGMI.js → context-cleanup-CHEWNYU6.js} +3 -1
- package/dist/{control-plane-launch-NYVDJESK.js → control-plane-launch-34LNRJWR.js} +5 -5
- package/dist/{doctor-23BBJWBX.js → doctor-DHUM5DBB.js} +10 -10
- package/dist/{emit-artifact-cmd-O6SCM7TV.js → emit-artifact-cmd-XBHM647X.js} +3 -3
- package/dist/{emit-cmd-7SP3I6UZ.js → emit-cmd-W55AEBCA.js} +3 -3
- package/dist/{emit-criteria-cmd-LQNERZRV.js → emit-criteria-cmd-UNMWHOUY.js} +40 -5
- package/dist/{emit-result-cmd-RUICOKWQ.js → emit-result-cmd-5NZMLCJK.js} +3 -3
- package/dist/emit-step-cmd-347XNGPQ.js +1 -1
- package/dist/{governing-source-V5EEGPTA.js → governing-source-HAA4OW57.js} +6 -6
- package/dist/{hook-fast-YAZG5MDX.js → hook-fast-RL5E5OXE.js} +1 -1
- package/dist/index.js +4 -4
- package/dist/{init-LWHDMZQG.js → init-V6FOMD2V.js} +9 -9
- package/dist/{init-MOINY2DD.js → init-XG47KCI4.js} +9 -9
- package/dist/{init-cmd-HSMRID6A.js → init-cmd-Z4O4PPLZ.js} +16 -14
- package/dist/{init-update-LWX5MPPR.js → init-update-7DVAKWW3.js} +6 -6
- package/dist/{loop-SYYPVFYW.js → loop-EAZQMAE2.js} +17 -17
- package/dist/{machine-6X63G2KH.js → machine-TRHBT5NE.js} +8 -8
- package/dist/{runner-key-276SJU5R.js → runner-key-5FOWCW7J.js} +9 -9
- package/dist/{session-sender-GGIY5OAX.js → session-sender-U2BBUWNO.js} +4 -4
- package/dist/{spec-cmd-SIZBRN7D.js → spec-cmd-FVLJOFGC.js} +2 -2
- package/dist/starter-pack-6LQVLBIA.js +1 -1
- package/dist/{status-NAK6DYSF.js → status-BINH7MBG.js} +11 -11
- package/dist/{sync-cmd-G7GF4UTW.js → sync-cmd-VXOUFS4I.js} +3 -3
- package/dist/{watch-EVM5GSMP.js → watch-OH645CV2.js} +3 -3
- package/dist/{work-claim-cmd-3J3QW56U.js → work-claim-cmd-DRQCHCOK.js} +5 -5
- package/dist/{work-cmd-5EPPD33Y.js → work-cmd-5I3J2XQQ.js} +2 -2
- package/dist/{work-comment-cmd-2ACOZQAE.js → work-comment-cmd-UCCPWUSR.js} +2 -2
- package/dist/{work-logs-cmd-QDD2NMJL.js → work-logs-cmd-7352CJPG.js} +2 -2
- package/dist/{work-open-pr-cmd-XNCEI4ZM.js → work-open-pr-cmd-LSH4VHJM.js} +2 -2
- package/dist/work-pr-cmd-H4OQR26N.js +1 -1
- package/dist/work-stop-cmd-CRDHXQVW.js +52 -0
- package/package.json +1 -1
- package/dist/{artifact-link-cmd-W7XF5BFB.js → artifact-link-cmd-OWRI5AJX.js} +1 -1
- package/dist/{chunk-IXYZUUYQ.js → chunk-7UWVLZXD.js} +1 -1
- package/dist/{emit-finding-cmd-AJPKHIOV.js → emit-finding-cmd-7JHVRYOP.js} +1 -1
- package/dist/{import-capture-cmd-KKFFOGWP.js → import-capture-cmd-TK4XY7RD.js} +1 -1
- package/dist/{import-ruler-cmd-5P6JOXQN.js → import-ruler-cmd-T6LLO6Q7.js} +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# @outerlayer/cli
|
|
2
2
|
|
|
3
|
+
## 0.20.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 89270e0: `outerlayer emit criteria` reads an acceptance file ending in `.md`, so a person can record or replace an item's criteria from the file a build committed.
|
|
8
|
+
- bf0bf30: `outerlayer work stop --item <n>` asks the host building an item to stop. The runner reports what it is doing, so an item can say why nothing is building it.
|
|
9
|
+
|
|
10
|
+
## 0.19.1
|
|
11
|
+
|
|
12
|
+
### Patch Changes
|
|
13
|
+
|
|
14
|
+
- 331130f: A session start that removes an earlier CLI's copies also puts back `.outerlayer-pin.json` when that CLI rewrote it, so `git status` is clean afterwards. A staged change to the pin is left alone.
|
|
15
|
+
|
|
16
|
+
`outerlayer init --local --shell-function` adds the `claude` shell function, and `--local --no-shell-function` removes it. `--local` used to skip both flags without a word.
|
|
17
|
+
|
|
3
18
|
## 0.19.0
|
|
4
19
|
|
|
5
20
|
### Minor Changes
|
package/README.md
CHANGED
|
@@ -91,8 +91,10 @@ content:
|
|
|
91
91
|
work item's general thread or a criterion thread — the detected session id
|
|
92
92
|
rides along the same way it does for `emit`, only ever narrowing what the
|
|
93
93
|
comment may do; `outerlayer work threads` reads them back. `outerlayer work logs`
|
|
94
|
-
reads the runner's log for a host attempt.
|
|
95
|
-
|
|
94
|
+
reads the runner's log for a host attempt. `outerlayer work stop` sends
|
|
95
|
+
`POST /v1/work-items/<n>/claim/stop` with the optional note, and the
|
|
96
|
+
gateway records the request against the item's live host build. A runner
|
|
97
|
+
key needs `git.read` and `work.read` to
|
|
96
98
|
list and read items, and `work.claim` to claim, renew or release — `work.claim`
|
|
97
99
|
is not granted to a dashboard role by default, since a claim is a host's
|
|
98
100
|
lease, not a person's.
|
|
@@ -118,6 +120,12 @@ content:
|
|
|
118
120
|
off for want of disk it adds the free and needed bytes. While a check of
|
|
119
121
|
its own stops it claiming, it adds one sentence saying why, which can
|
|
120
122
|
include the host's usable memory and Docker's own error text, unscrubbed.
|
|
123
|
+
Every heartbeat also says what the runner is doing about new work (taking
|
|
124
|
+
work, draining, restarting, holding for an update, blocked or low on
|
|
125
|
+
disk), the queues and repository patterns it takes, and, while draining,
|
|
126
|
+
the numbers of the items it waits on. The reply can name a build that
|
|
127
|
+
someone stopped with `outerlayer work stop`; the runner then ends that
|
|
128
|
+
build and releases it as stopped, with the name of whoever stopped it.
|
|
121
129
|
When a build's command exits 0, it reads that work item once more, for its
|
|
122
130
|
evidence verdict, before releasing it: it sends nothing but the request.
|
|
123
131
|
Just before that read, the runner runs the repository's host checks. A host
|
|
@@ -408,6 +416,7 @@ before it gives up.
|
|
|
408
416
|
| `outerlayer emit artifact <file> --caption <text> [--for <criterion-id>] [--pr <n>]` | Upload a proof artifact — screenshot, recording, report, or log — with its caption. Inside a recorded session it spools locally and ships on the next `sync`; otherwise it uploads immediately, anchored to a pull request or the current checkout. `--replaces` retires artifacts an earlier run uploaded. A JUnit XML file bound with `--for` proves a criterion that declares `test` proof; `--test <name[=path:line]>` binds only the named tests. |
|
|
409
417
|
| `outerlayer emit <name> --result <pass\|fail> [--link <url>] [--body <text>\|--body-file <path>] --item <number>` | Record one named check's outcome on a work item. A check that ran carries the run URL as its proof (`--link`); a judgment you are making yourself carries one sentence (`--body`, or `--body-file` to read it from a file — `-` reads standard input). A `fail` needs at least one of the two; a `pass` needs neither. `--item` names the work item by the number printed when the item was created — always required, in or out of a recorded session; a session records checks on its own item like any other, stored as the session's, but cannot clear a person's fail. Prints the recorded check's id. Who recorded it comes from your API key, never from what you send. |
|
|
410
418
|
| `outerlayer work comment --item <n> [--criterion <id>] --body <text> [--artifact <id>] [--pass\|--fail\|--attach\|--ready]` | Post one comment on a work item's general thread, or on one acceptance criterion's own thread with `--criterion`. `--pass`/`--fail` need a person's own credential and apply to the whole item, so they work on the general thread only and the gateway refuses them with `--criterion`; `--attach` makes the named artifact that criterion's current proof; `--ready` hands a thread back to a person. The detected session id rides along automatically, only ever narrowing what the comment may do. |
|
|
419
|
+
| `outerlayer work stop --item <n> [--note <text>]` | Ask the host that holds the item's build to end it. The host reads the request at its next heartbeat and ends the build with outcome `stopped`, so the build may run a little longer. The item is not built again until a new build request. Needs `work.update`. Exits 1 when no host build is running for the item. |
|
|
411
420
|
| `outerlayer work logs --item <n> [--attempt <claim id>]` | Print the runner's log for a host attempt on a work item: the newest attempt a runner made, or the one `--attempt` names (an `id` from `claims` in `work status --json`). The log is what the runner did around the agent, with secrets removed on the host. Exits 1 for an attempt that is still running or that an older runner released without a log. |
|
|
412
421
|
| `outerlayer work threads --item <n>` | Read a work item's threads back — the general thread first, then one per criterion with proof or a comment, each with its `waitingOn`. |
|
|
413
422
|
| `outerlayer emit finding --id <id> --category <context\|flaky-test\|tooling\|environment\|defect\|other> --title <text> --file <path> --where <label> [--line <n>] [--item <number>] [--cause <text>] [--detail <text>] [--suggestion <text>] [--command <text>] [--error <text>] [--test <name>] [--symbol <name>] [--started-at <event> --ended-at <event>] [--problem <id> … --link-reason <text> \| --new] …` | Record one problem you hit in the factory. `--category` is one of `context` (an instruction that is wrong, broken or missing), `flaky-test`, `tooling`, `environment`, `defect` (a bug outside your own change) or `other`. A `context` finding also needs `--rule-path` and `--rule-relation` (`wrong`, `broken` or `missing`), and `--rule-quote` unless the relation is `missing`. `--cause`, `--detail`, `--suggestion`, `--command`, `--error` (the first error line), `--test` and `--symbol` carry what a fix needs. Every finding joins a factory-level problem: when a key of the finding matches a known problem it joins that problem; otherwise nothing is stored, the closest problems are printed, and the command exits with code 3. Run it again with `--problem <id> --link-reason <text>` (repeat `--problem` for each problem the finding reports) or with `--new`. Without `--started-at`, it prints the session's recent events with ids and times; name the event where you hit the problem and the one where you got past it with `--started-at` and `--ended-at`. Findings are informational; nothing reads one to pass or fail the work. `--item` names the work item; without it, inside a recorded session, the item that session was launched for is used automatically. Re-emitting the same `--id` on the item replaces that finding and keeps its problems. |
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
export { keepHandWritten, runAgentSetup } from './chunk-
|
|
4
|
-
import './chunk-
|
|
3
|
+
export { keepHandWritten, runAgentSetup } from './chunk-CGGPS7SI.js';
|
|
4
|
+
import './chunk-5VML45HH.js';
|
|
5
5
|
import './chunk-YVZJ6GKF.js';
|
|
6
6
|
import './chunk-6X4SQ5MY.js';
|
|
7
7
|
import './chunk-ANPNT6PM.js';
|
|
8
|
-
import './chunk-
|
|
9
|
-
import './chunk-
|
|
8
|
+
import './chunk-EAEELQVQ.js';
|
|
9
|
+
import './chunk-7UWVLZXD.js';
|
|
10
10
|
import './chunk-FVMYKL6L.js';
|
|
11
11
|
import './chunk-NTRCK4NH.js';
|
|
12
12
|
import './chunk-ZJSNLVCE.js';
|
|
13
13
|
import './chunk-BJ3KTMDH.js';
|
|
14
14
|
import './chunk-NNLA7LLQ.js';
|
|
15
|
-
import './chunk-WFSUUUAN.js';
|
|
16
|
-
import './chunk-7VUK5RFS.js';
|
|
17
15
|
import './chunk-EABW6AJQ.js';
|
|
18
16
|
import './chunk-CRB3POP4.js';
|
|
19
17
|
import './chunk-YQR6E6OV.js';
|
|
18
|
+
import './chunk-WFSUUUAN.js';
|
|
19
|
+
import './chunk-7VUK5RFS.js';
|
|
20
20
|
import './chunk-VNVZDWO3.js';
|
|
21
21
|
import './chunk-RA3O54FC.js';
|
|
22
22
|
import './chunk-M2ZWWTWZ.js';
|
package/dist/build-info.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"id":"2026-10-
|
|
1
|
+
{"id":"2026-10-14T00:32:09.011Z+25b1e13","root":"/home/runner/_work/outerlayer/outerlayer","pkg":"outerlayer"}
|
|
@@ -1,36 +1,36 @@
|
|
|
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-AD3EYI7P.js';
|
|
4
|
+
import './chunk-B6SCN5NY.js';
|
|
5
|
+
import './chunk-SADUQSO4.js';
|
|
5
6
|
import './chunk-MTP2QEVO.js';
|
|
6
7
|
import './chunk-S5PCA3SN.js';
|
|
7
8
|
import './chunk-3JVYMD4G.js';
|
|
8
9
|
import './chunk-YETTWTAY.js';
|
|
9
|
-
import './chunk-SADUQSO4.js';
|
|
10
10
|
import './chunk-I2UOAV7X.js';
|
|
11
|
-
import './chunk-
|
|
12
|
-
import './chunk-
|
|
11
|
+
import './chunk-ZX4I2MEK.js';
|
|
12
|
+
import './chunk-JHGEBPLE.js';
|
|
13
13
|
import './chunk-XNGMQ27R.js';
|
|
14
|
-
import './chunk-
|
|
14
|
+
import './chunk-R22NZSGA.js';
|
|
15
15
|
import './chunk-KYS3TQAG.js';
|
|
16
16
|
import './chunk-ESVW4MJY.js';
|
|
17
|
-
import { placeholderQueues, placeholderProblem, permissionModeProblems, permissionModeProblem, needsClaudeCredential, claudeCredentialCheck, claimPermissionProblem, formerSkillQueues, formerSkillProblem } from './chunk-
|
|
17
|
+
import { placeholderQueues, placeholderProblem, permissionModeProblems, permissionModeProblem, needsClaudeCredential, claudeCredentialCheck, claimPermissionProblem, formerSkillQueues, formerSkillProblem } from './chunk-GEMQLBMW.js';
|
|
18
18
|
import './chunk-YYYRBYWG.js';
|
|
19
19
|
import './chunk-AMFWYESY.js';
|
|
20
20
|
import './chunk-TBT347UY.js';
|
|
21
|
-
import './chunk-
|
|
21
|
+
import './chunk-PIZRPNKR.js';
|
|
22
22
|
import './chunk-7YP7T6GV.js';
|
|
23
|
-
import './chunk-
|
|
24
|
-
import './chunk-
|
|
23
|
+
import './chunk-LW7G5TJB.js';
|
|
24
|
+
import './chunk-3ZR7Y23Y.js';
|
|
25
25
|
import './chunk-OGFGZQA3.js';
|
|
26
26
|
import './chunk-VMJPFQNE.js';
|
|
27
27
|
import './chunk-3UZTIRLF.js';
|
|
28
28
|
import './chunk-GGOMT6KF.js';
|
|
29
29
|
import './chunk-X5H2WYMB.js';
|
|
30
|
-
import './chunk-
|
|
30
|
+
import './chunk-XZ4H4X5F.js';
|
|
31
31
|
import './chunk-QEFKA2QD.js';
|
|
32
32
|
import { parseRunnerEnv } from './chunk-6MZSX4M7.js';
|
|
33
|
-
import './chunk-
|
|
33
|
+
import './chunk-FBTGMSQF.js';
|
|
34
34
|
import './chunk-IF2OSI5T.js';
|
|
35
35
|
import './chunk-CG36IONK.js';
|
|
36
36
|
import './chunk-G3IJ3N6F.js';
|
|
@@ -43,7 +43,7 @@ import './chunk-QOZKPLVJ.js';
|
|
|
43
43
|
import './chunk-CX22S5BA.js';
|
|
44
44
|
import './chunk-ECODQ7II.js';
|
|
45
45
|
import './chunk-JBJTC3UU.js';
|
|
46
|
-
import './chunk-
|
|
46
|
+
import './chunk-PSN33ERW.js';
|
|
47
47
|
import './chunk-F7CU5ABH.js';
|
|
48
48
|
import './chunk-BKO6JEZI.js';
|
|
49
49
|
import './chunk-QNLX477Q.js';
|
|
@@ -53,20 +53,20 @@ import './chunk-T2Q7ISPE.js';
|
|
|
53
53
|
import './chunk-WZBHBH3J.js';
|
|
54
54
|
import './chunk-5QRP3MVS.js';
|
|
55
55
|
import './chunk-LLM3I5YU.js';
|
|
56
|
-
import './chunk-
|
|
57
|
-
import './chunk-
|
|
56
|
+
import './chunk-EAEELQVQ.js';
|
|
57
|
+
import './chunk-7UWVLZXD.js';
|
|
58
58
|
import './chunk-FVMYKL6L.js';
|
|
59
59
|
import './chunk-NTRCK4NH.js';
|
|
60
60
|
import './chunk-ZJSNLVCE.js';
|
|
61
61
|
import './chunk-BJ3KTMDH.js';
|
|
62
62
|
import './chunk-G2YNJIGF.js';
|
|
63
63
|
import './chunk-NNLA7LLQ.js';
|
|
64
|
-
import './chunk-WFSUUUAN.js';
|
|
65
|
-
import './chunk-7VUK5RFS.js';
|
|
66
64
|
import './chunk-EABW6AJQ.js';
|
|
67
65
|
import './chunk-CRB3POP4.js';
|
|
68
66
|
import './chunk-YQR6E6OV.js';
|
|
69
67
|
import './chunk-TUSYOL2O.js';
|
|
68
|
+
import './chunk-WFSUUUAN.js';
|
|
69
|
+
import './chunk-7VUK5RFS.js';
|
|
70
70
|
import './chunk-VNVZDWO3.js';
|
|
71
71
|
import './chunk-RA3O54FC.js';
|
|
72
72
|
import './chunk-M2ZWWTWZ.js';
|
|
@@ -5,8 +5,8 @@ import { createDockerHost, childEnvironment, spawnRun } from './chunk-VMJPFQNE.j
|
|
|
5
5
|
import { builderSpec, runnerLabelValue, RUNNER_LABEL, BUILD_LABEL, prepareRunArgs, containerRunArgs, HASH_ARGV, parseProgramHash, JUDGE_PROGRAM, containerExecArgs, JUDGE_DIR, MAX_REPORT_BYTES } from './chunk-3UZTIRLF.js';
|
|
6
6
|
import { execCapture } from './chunk-GGOMT6KF.js';
|
|
7
7
|
import { GUEST_CID } from './chunk-X5H2WYMB.js';
|
|
8
|
-
import { describeCallFailure, controlPlaneTokenFailure, refusalCode, resolveGoverningSource, removeStagedContext, stageGovernedContext, pinnedSourceOf, commandWithShim, shimScript } from './chunk-
|
|
9
|
-
import { WorkCommandError } from './chunk-
|
|
8
|
+
import { describeCallFailure, controlPlaneTokenFailure, refusalCode, resolveGoverningSource, removeStagedContext, stageGovernedContext, pinnedSourceOf, commandWithShim, shimScript } from './chunk-XZ4H4X5F.js';
|
|
9
|
+
import { WorkCommandError } from './chunk-FBTGMSQF.js';
|
|
10
10
|
import { hostAllowed } from './chunk-UXYLWVTQ.js';
|
|
11
11
|
import { parseDuKilobytes } from './chunk-7RQ73DLO.js';
|
|
12
12
|
import { readDefaultBranchHead, cloneRepository, buildRepositoryImage } from './chunk-3CWUOFV6.js';
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
3
|
import { C } from './chunk-ANPNT6PM.js';
|
|
4
|
-
import { retiredSkillPaths, removeRetiredSkills } from './chunk-
|
|
4
|
+
import { retiredSkillPaths, removeRetiredSkills } from './chunk-7UWVLZXD.js';
|
|
5
5
|
import { maintainedFilesForExistingSkills, loadMaintainedFiles, writeMaintainedFiles } from './chunk-NNLA7LLQ.js';
|
|
6
|
-
import { emitTree, parseOuterlayerConfig, classifyTree, generatedHeaderSource, CONTEXT_PIN_FILENAME, normalizePath } from './chunk-WFSUUUAN.js';
|
|
7
6
|
import { cliInvocation } from './chunk-CRB3POP4.js';
|
|
7
|
+
import { emitTree, parseOuterlayerConfig, classifyTree, generatedHeaderSource, CONTEXT_PIN_FILENAME, normalizePath } from './chunk-WFSUUUAN.js';
|
|
8
8
|
import { existsSync, readFileSync, mkdirSync, writeFileSync, copyFileSync, unlinkSync, rmdirSync, readdirSync } from 'fs';
|
|
9
9
|
import { join, dirname, relative, sep } from 'path';
|
|
10
10
|
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { LEASE_SECONDS, releaseLease, isUnfinished, setStage, jobEnv, runHook, describeHookEnd, provisionMicroVm, deliverCommitHooks, provisionProcess, provisionEnvironment, readProvisionOut, resolveHostBuild, workdirProblem, listenOnBroker, hostEnvironment, hostCommandEnvironment, execArgv, microVmCommandLine, runCommand, execCommandLine, startSender, startHostServices, finishJob, isGroupAlive, outcomeFromExitCode, isTimedOut, readCpuUsec, isIdle, stopOrphanedMicroVms, unfinishedJobs, listAdoptableJobs, retryFailedReleases, recoverLostJobs, hookLimitsFor, AttemptLogBook, needsRenew, renewLease, RENEW_INTERVAL_SECONDS, ALREADY_RELEASED } from './chunk-
|
|
3
|
+
import { LEASE_SECONDS, releaseLease, isUnfinished, setStage, jobEnv, runHook, describeHookEnd, provisionMicroVm, deliverCommitHooks, provisionProcess, provisionEnvironment, readProvisionOut, resolveHostBuild, workdirProblem, listenOnBroker, hostEnvironment, hostCommandEnvironment, execArgv, microVmCommandLine, runCommand, execCommandLine, startSender, startHostServices, finishJob, isGroupAlive, outcomeFromExitCode, isTimedOut, readCpuUsec, isIdle, stopOrphanedMicroVms, unfinishedJobs, listAdoptableJobs, retryFailedReleases, recoverLostJobs, hookLimitsFor, AttemptLogBook, needsRenew, renewLease, RENEW_INTERVAL_SECONDS, ALREADY_RELEASED } from './chunk-B6SCN5NY.js';
|
|
4
|
+
import { writeJobFile, readJobFile, readJobFileChecked } from './chunk-SADUQSO4.js';
|
|
4
5
|
import { writePendingUpdate } from './chunk-MTP2QEVO.js';
|
|
5
6
|
import { readHousekeepingRecord, writeHousekeepingRecord } from './chunk-S5PCA3SN.js';
|
|
6
7
|
import { decideInstalledSwitch } from './chunk-3JVYMD4G.js';
|
|
7
8
|
import { fetchVersionMeta, npmVersion, npmSupportsProvenance, fetchTarballDigest, fetchProvenance, installVersion, auditSignatures } from './chunk-YETTWTAY.js';
|
|
8
|
-
import { writeJobFile, readJobFile, readJobFileChecked } from './chunk-SADUQSO4.js';
|
|
9
9
|
import { compareVersions, satisfiesRange } from './chunk-I2UOAV7X.js';
|
|
10
|
-
import { RUNNER_PROTOCOL } from './chunk-
|
|
11
|
-
import { currentSkillCommand, formerSkillProblem, placeholderQueues, placeholderProblem } from './chunk-
|
|
10
|
+
import { RUNNER_PROTOCOL } from './chunk-ZX4I2MEK.js';
|
|
11
|
+
import { currentSkillCommand, formerSkillProblem, placeholderQueues, placeholderProblem } from './chunk-GEMQLBMW.js';
|
|
12
12
|
import { freeBytes, formatBytes } from './chunk-YYYRBYWG.js';
|
|
13
13
|
import { writeMarker, readMarker, currentVersion, removeMarker, entryIn, versionDir, startedThroughCurrent, switchCurrent, cleanVersions, isInLayout, stagingDir } from './chunk-AMFWYESY.js';
|
|
14
14
|
import { RepoFilter } from './chunk-TBT347UY.js';
|
|
15
|
-
import { provisionContainer, lifecycleSteps, lifecycleFailureReason, prepareBranch, containerCommandLine, measureDisk, setUpRunnerCgroup, parseCpuList, ensureTunnel, keepGhConfigCurrent, createContainerRuntime } from './chunk-
|
|
15
|
+
import { provisionContainer, lifecycleSteps, lifecycleFailureReason, prepareBranch, containerCommandLine, measureDisk, setUpRunnerCgroup, parseCpuList, ensureTunnel, keepGhConfigCurrent, createContainerRuntime } from './chunk-3ZR7Y23Y.js';
|
|
16
16
|
import { spawnRun } from './chunk-VMJPFQNE.js';
|
|
17
17
|
import { builderName, runnerLabelValue, ensureFailureCount, builderSpec, ensureBuilder, BUILD_LABEL, RUNNER_LABEL } from './chunk-3UZTIRLF.js';
|
|
18
|
-
import { describeCallFailure, retrySend, shortClaim, relativeToRunner, formatDuration, BuildTokens, classifyRefusal, refusalCode, createRunnerLog, formatClock } from './chunk-
|
|
18
|
+
import { describeCallFailure, retrySend, shortClaim, relativeToRunner, formatDuration, BuildTokens, classifyRefusal, refusalCode, createRunnerLog, formatClock } from './chunk-XZ4H4X5F.js';
|
|
19
19
|
import { checkFit } from './chunk-QEFKA2QD.js';
|
|
20
|
-
import { isSignatureRefusal, WorkCommandError, getJson, postJson } from './chunk-
|
|
20
|
+
import { isSignatureRefusal, WorkCommandError, getJson, postJson } from './chunk-FBTGMSQF.js';
|
|
21
21
|
import { isBuiltinContainer, isBuiltinVm, isBuiltinProcess, loadRunnerConfig, checkHooks, builtinKind, DEFAULT_UPDATE_MAX_WAIT_HOURS } from './chunk-P53VEAOF.js';
|
|
22
22
|
import { exceedsDisk } from './chunk-7RQ73DLO.js';
|
|
23
23
|
import { claimPidFile, readPidFile, releasePidFile } from './chunk-ECODQ7II.js';
|
|
@@ -85,6 +85,9 @@ var HEARTBEAT_TIMEOUT_MS = 1e4;
|
|
|
85
85
|
var ERROR_CODE_MAX = 100;
|
|
86
86
|
var ERROR_MESSAGE_MAX = 500;
|
|
87
87
|
var BLOCKED_REASON_MAX = 500;
|
|
88
|
+
var TAKES_PATTERNS_MAX = 50;
|
|
89
|
+
var TAKES_PATTERN_CHARS_MAX = 200;
|
|
90
|
+
var WAITING_ITEMS_MAX = 200;
|
|
88
91
|
var UNREACHABLE_MESSAGE = "the request did not reach the platform";
|
|
89
92
|
function noPlatformMessage(status) {
|
|
90
93
|
return `the request got HTTP ${status} with no error message from the platform`;
|
|
@@ -112,6 +115,35 @@ function workRequestFromFailure(err) {
|
|
|
112
115
|
function workRequestFromRetryFailure(outcome) {
|
|
113
116
|
return shapeWorkRequestFailure(outcome.code, outcome.status, outcome.message);
|
|
114
117
|
}
|
|
118
|
+
function stopsOf(data) {
|
|
119
|
+
const raw = data?.stops;
|
|
120
|
+
if (!Array.isArray(raw)) return [];
|
|
121
|
+
const stops = [];
|
|
122
|
+
for (const entry of raw) {
|
|
123
|
+
const stop = entry;
|
|
124
|
+
if (stop === null || typeof stop !== "object" || typeof stop.claimId !== "string") continue;
|
|
125
|
+
stops.push({
|
|
126
|
+
claimId: stop.claimId,
|
|
127
|
+
requestedByName: typeof stop.requestedByName === "string" ? stop.requestedByName : "",
|
|
128
|
+
note: typeof stop.note === "string" && stop.note !== "" ? stop.note : null
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
return stops;
|
|
132
|
+
}
|
|
133
|
+
function takesBody(takes) {
|
|
134
|
+
let truncated = false;
|
|
135
|
+
const list = (patterns) => {
|
|
136
|
+
const all = (patterns ?? []).filter((pattern) => typeof pattern === "string");
|
|
137
|
+
if (all.length > TAKES_PATTERNS_MAX) truncated = true;
|
|
138
|
+
return all.slice(0, TAKES_PATTERNS_MAX).map((pattern) => {
|
|
139
|
+
if (pattern.length > TAKES_PATTERN_CHARS_MAX) truncated = true;
|
|
140
|
+
return cutForGateway(pattern, TAKES_PATTERN_CHARS_MAX);
|
|
141
|
+
}).filter((pattern) => pattern !== "");
|
|
142
|
+
};
|
|
143
|
+
const include = list(takes.repos.include);
|
|
144
|
+
const exclude = list(takes.repos.exclude);
|
|
145
|
+
return { queues: takes.queues, repos: { include, exclude }, truncated };
|
|
146
|
+
}
|
|
115
147
|
async function sendHeartbeat(args, fetchImpl) {
|
|
116
148
|
const body = {
|
|
117
149
|
host: args.host,
|
|
@@ -132,7 +164,10 @@ async function sendHeartbeat(args, fetchImpl) {
|
|
|
132
164
|
// Free disk on the runner's file system, in bytes. Sent only while held, so a host with room sends nothing about its disk.
|
|
133
165
|
lowDisk: args.lowDisk === void 0 ? void 0 : { free: args.lowDisk.free, needed: args.lowDisk.needed },
|
|
134
166
|
// Why the runner claims nothing. Sent only while it holds, so a runner that takes work says nothing about it.
|
|
135
|
-
blocked: args.blocked === void 0 ? void 0 : { reason: cutForGateway(args.blocked.reason, BLOCKED_REASON_MAX) }
|
|
167
|
+
blocked: args.blocked === void 0 ? void 0 : { reason: cutForGateway(args.blocked.reason, BLOCKED_REASON_MAX) },
|
|
168
|
+
state: args.state,
|
|
169
|
+
waitingItems: args.waitingItems === void 0 ? void 0 : args.waitingItems.slice(0, WAITING_ITEMS_MAX),
|
|
170
|
+
takes: args.takes === void 0 ? void 0 : takesBody(args.takes)
|
|
136
171
|
};
|
|
137
172
|
try {
|
|
138
173
|
const response = await postJson(
|
|
@@ -146,11 +181,22 @@ async function sendHeartbeat(args, fetchImpl) {
|
|
|
146
181
|
await signerFor(args.configPath)
|
|
147
182
|
);
|
|
148
183
|
const runnerVersion = response.data?.runnerVersion;
|
|
149
|
-
|
|
184
|
+
const stops = stopsOf(response.data);
|
|
185
|
+
return typeof runnerVersion === "string" ? { ok: true, runnerVersion, stops } : { ok: true, stops };
|
|
150
186
|
} catch (err) {
|
|
151
187
|
return { ok: false, reason: describeCallFailure(err) };
|
|
152
188
|
}
|
|
153
189
|
}
|
|
190
|
+
|
|
191
|
+
// src/runner/host-state.ts
|
|
192
|
+
function hostState(flags) {
|
|
193
|
+
if (flags.draining) return "draining";
|
|
194
|
+
if (flags.restarting) return "restarting";
|
|
195
|
+
if (flags.holdingForUpdate) return "holding-for-update";
|
|
196
|
+
if (flags.blocked) return "blocked";
|
|
197
|
+
if (flags.lowDisk) return "low-disk";
|
|
198
|
+
return "taking-work";
|
|
199
|
+
}
|
|
154
200
|
var OUTCOMES = ["updated", "rolled_back", "verification_failed", "not_published", "retrying"];
|
|
155
201
|
function lastUpdatePath(configPath) {
|
|
156
202
|
return join(runnerDir(configPath), "last-update.json");
|
|
@@ -1042,6 +1088,7 @@ async function sendTickHeartbeat(state, workRequest) {
|
|
|
1042
1088
|
let next = workRequest;
|
|
1043
1089
|
for (; ; ) {
|
|
1044
1090
|
reportRepeating(state, "the heartbeat's previous call", void 0, "line");
|
|
1091
|
+
const waitingItems = state.draining === true ? runningItems(state) : [];
|
|
1045
1092
|
const result = await sendHeartbeat(
|
|
1046
1093
|
{
|
|
1047
1094
|
configPath: state.config.configPath,
|
|
@@ -1056,12 +1103,25 @@ async function sendTickHeartbeat(state, workRequest) {
|
|
|
1056
1103
|
workRequest: next,
|
|
1057
1104
|
lastUpdate: readLastUpdate(state.config.configPath),
|
|
1058
1105
|
lowDisk: state.lowDisk,
|
|
1059
|
-
blocked: state.blocked
|
|
1106
|
+
blocked: state.blocked,
|
|
1107
|
+
state: hostState({
|
|
1108
|
+
draining: state.draining === true,
|
|
1109
|
+
restarting: state.restarting === true,
|
|
1110
|
+
holdingForUpdate: state.holdingForUpdate === true,
|
|
1111
|
+
blocked: state.blocked !== void 0,
|
|
1112
|
+
lowDisk: state.lowDisk !== void 0
|
|
1113
|
+
}),
|
|
1114
|
+
// Left out unless a draining runner has builds to wait on, so the gateway stores null.
|
|
1115
|
+
waitingItems: waitingItems.length > 0 ? waitingItems : void 0,
|
|
1116
|
+
takes: { queues: state.config.queues, repos: { include: state.config.repos?.include, exclude: state.config.repos?.exclude } }
|
|
1060
1117
|
},
|
|
1061
1118
|
state.deps.fetchImpl
|
|
1062
1119
|
);
|
|
1063
1120
|
reportRepeating(state, "the heartbeat", result.ok ? void 0 : `heartbeat failed: ${result.reason}`);
|
|
1064
|
-
if (result.ok)
|
|
1121
|
+
if (result.ok) {
|
|
1122
|
+
considerNamedVersion(state, result.runnerVersion);
|
|
1123
|
+
applyStops(state, result.stops);
|
|
1124
|
+
}
|
|
1065
1125
|
next = state.queuedWorkRequest;
|
|
1066
1126
|
state.queuedWorkRequest = void 0;
|
|
1067
1127
|
if (next === void 0) break;
|
|
@@ -1070,6 +1130,27 @@ async function sendTickHeartbeat(state, workRequest) {
|
|
|
1070
1130
|
state.heartbeating = false;
|
|
1071
1131
|
}
|
|
1072
1132
|
}
|
|
1133
|
+
function applyStops(state, stops) {
|
|
1134
|
+
for (const stop of stops) {
|
|
1135
|
+
const held = [...state.jobs.values()].find((entry) => entry.job.claimId === stop.claimId);
|
|
1136
|
+
const active = held !== void 0 && !held.ending ? held : void 0;
|
|
1137
|
+
if (active === void 0) {
|
|
1138
|
+
reportRepeating(
|
|
1139
|
+
state,
|
|
1140
|
+
`stop of claim ${stop.claimId}`,
|
|
1141
|
+
held === void 0 ? `ignoring a stop for claim ${stop.claimId}: this runner holds no build under that claim` : `#${held.job.item} a stop was asked for; the build is already ending`,
|
|
1142
|
+
"line"
|
|
1143
|
+
);
|
|
1144
|
+
continue;
|
|
1145
|
+
}
|
|
1146
|
+
const who = `stopped by ${stop.requestedByName === "" ? "someone" : stop.requestedByName} through OuterLayer`;
|
|
1147
|
+
const reason = stop.note === null ? who : `${who}: ${stop.note}`;
|
|
1148
|
+
logOf(state).line(`#${active.job.item} ${reason} \xB7 ending the build`);
|
|
1149
|
+
void endJob(state, active, "stopped", { reason }).catch((err) => {
|
|
1150
|
+
logOf(state).error(`#${active.job.item} could not be stopped: ${describeCallFailure(err)}`);
|
|
1151
|
+
});
|
|
1152
|
+
}
|
|
1153
|
+
}
|
|
1073
1154
|
function ownVersionOf(deps) {
|
|
1074
1155
|
return (deps.cliVersion ?? resolveVersion()).split(" ")[0] ?? "";
|
|
1075
1156
|
}
|
|
@@ -1405,9 +1486,17 @@ async function housekeepingPass(state) {
|
|
|
1405
1486
|
}
|
|
1406
1487
|
}
|
|
1407
1488
|
async function runTick(state) {
|
|
1489
|
+
state.restarting = false;
|
|
1490
|
+
state.holdingForUpdate = false;
|
|
1408
1491
|
reloadConfig(state);
|
|
1409
|
-
if (restartOntoInstalled(state))
|
|
1410
|
-
|
|
1492
|
+
if (restartOntoInstalled(state)) {
|
|
1493
|
+
state.restarting = true;
|
|
1494
|
+
return;
|
|
1495
|
+
}
|
|
1496
|
+
if (await updateWhenIdle(state)) {
|
|
1497
|
+
state.holdingForUpdate = true;
|
|
1498
|
+
return;
|
|
1499
|
+
}
|
|
1411
1500
|
if (holdWhenBlocked(state)) return;
|
|
1412
1501
|
if (holdOffForDisk(state)) return;
|
|
1413
1502
|
const log = logOf(state);
|
|
@@ -1463,7 +1552,7 @@ var CLAIM_REFUSAL_CODES = new Set(
|
|
|
1463
1552
|
"pull_request_from_fork pull_request_on_default_branch pull_request_ambiguous pull_request_repository_not_connected branch_claimed_elsewhere".split(" ")
|
|
1464
1553
|
);
|
|
1465
1554
|
async function tryClaimAndStart(state, item, queue) {
|
|
1466
|
-
const { postJson: postJson2 } = await import('./work-cmd-
|
|
1555
|
+
const { postJson: postJson2 } = await import('./work-cmd-5I3J2XQQ.js');
|
|
1467
1556
|
const log = logOf(state);
|
|
1468
1557
|
const hostKey = await loadHostKey(state.config.configPath);
|
|
1469
1558
|
const claim = await retrySend(
|
|
@@ -2226,7 +2315,7 @@ async function start(configPath, deps = { fetchImpl: fetch }) {
|
|
|
2226
2315
|
const outcome = await onStartUnderMarker({
|
|
2227
2316
|
configPath,
|
|
2228
2317
|
own: ownVersionOf(deps),
|
|
2229
|
-
check: update.check ? () => update.check(configPath) : async () => (await import('./check-
|
|
2318
|
+
check: update.check ? () => update.check(configPath) : async () => (await import('./check-BR5D27CX.js')).runRunnerCheck(configPath, { fetchImpl: deps.fetchImpl }),
|
|
2230
2319
|
now: () => (deps.now ?? (() => /* @__PURE__ */ new Date()))().getTime(),
|
|
2231
2320
|
log
|
|
2232
2321
|
});
|
|
@@ -2312,12 +2401,11 @@ async function start(configPath, deps = { fetchImpl: fetch }) {
|
|
|
2312
2401
|
}
|
|
2313
2402
|
let intakeClosed = false;
|
|
2314
2403
|
let closed = false;
|
|
2315
|
-
let draining = false;
|
|
2316
2404
|
let stopping = false;
|
|
2317
2405
|
let exited = false;
|
|
2318
2406
|
let interrupts = 0;
|
|
2319
2407
|
state.pollTimerSeconds = state.config.pollSeconds;
|
|
2320
|
-
|
|
2408
|
+
let pollTimer = setInterval(() => void tick(state), state.pollTimerSeconds * 1e3);
|
|
2321
2409
|
const hooksKind = builtinKind(config.hooks.provision);
|
|
2322
2410
|
const housekeepingTimer = hooksKind === "container" || hooksKind === "vm" ? (() => {
|
|
2323
2411
|
const everyMs = deps.housekeeping?.intervalMs ?? HOUSEKEEPING_INTERVAL_MS;
|
|
@@ -2357,6 +2445,7 @@ async function start(configPath, deps = { fetchImpl: fetch }) {
|
|
|
2357
2445
|
if (intakeClosed) return;
|
|
2358
2446
|
intakeClosed = true;
|
|
2359
2447
|
clearInterval(pollTimer);
|
|
2448
|
+
pollTimer = setInterval(() => void sendTickHeartbeat(state, void 0), (state.pollTimerSeconds ?? state.config.pollSeconds) * 1e3);
|
|
2360
2449
|
clearInterval(housekeepingTimer);
|
|
2361
2450
|
};
|
|
2362
2451
|
const close = () => {
|
|
@@ -2364,6 +2453,7 @@ async function start(configPath, deps = { fetchImpl: fetch }) {
|
|
|
2364
2453
|
detachSignals();
|
|
2365
2454
|
if (closed) return;
|
|
2366
2455
|
closed = true;
|
|
2456
|
+
clearInterval(pollTimer);
|
|
2367
2457
|
clearInterval(watchTimer);
|
|
2368
2458
|
};
|
|
2369
2459
|
const finish2 = () => {
|
|
@@ -2374,8 +2464,8 @@ async function start(configPath, deps = { fetchImpl: fetch }) {
|
|
|
2374
2464
|
log.line("runner exited");
|
|
2375
2465
|
};
|
|
2376
2466
|
const drain = async (onWaiting) => {
|
|
2377
|
-
if (draining) return;
|
|
2378
|
-
draining = true;
|
|
2467
|
+
if (state.draining === true) return;
|
|
2468
|
+
state.draining = true;
|
|
2379
2469
|
stopIntake();
|
|
2380
2470
|
let passes = 0;
|
|
2381
2471
|
while (state.jobs.size > 0 && !exited) {
|
|
@@ -2397,6 +2487,7 @@ async function start(configPath, deps = { fetchImpl: fetch }) {
|
|
|
2397
2487
|
if (stopping) return;
|
|
2398
2488
|
stopping = true;
|
|
2399
2489
|
stopIntake();
|
|
2490
|
+
clearInterval(pollTimer);
|
|
2400
2491
|
clearInterval(watchTimer);
|
|
2401
2492
|
log.line(`stopping: ending ${state.jobs.size} running job(s) now`);
|
|
2402
2493
|
await Promise.all([...state.jobs.values()].map((active) => endJob(state, active, "stopped")));
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
3
|
import { writeJobFile, readJobFile } from './chunk-SADUQSO4.js';
|
|
4
|
-
import { senderPidfile } from './chunk-
|
|
4
|
+
import { senderPidfile } from './chunk-JHGEBPLE.js';
|
|
5
5
|
import { DOCKERD_LOG, HELPER_PATH, HELPER_RECORD } from './chunk-XNGMQ27R.js';
|
|
6
|
-
import { installScrubContext } from './chunk-
|
|
7
|
-
import { AssetError, obtainImage, ensureRootfs, gitRemoteFor, startServicesFor, createBuildDisk, machineConfig, resolveAgentUser, AgentUserError, runBuildSteps, shellQuote, createContainerRuntime, stopContainer, cleanupContainer, outOfMemoryReason, containerSenderCommand, syncInContainer, copyTranscriptsFromContainer, GH_CONFIG_YML, ghHostsYml, ADDED_USER, isLiteralAddress, signalInContainer, deleteBuildDisk, startCheckContainer, lifecycleSteps, lifecycleFailureReason, writeEvalInput, EVAL_INPUT_NAME, copyTranscripts, senderSignalScript, containerJudgeEnvironment, copyJudgeTree } from './chunk-
|
|
6
|
+
import { installScrubContext } from './chunk-R22NZSGA.js';
|
|
7
|
+
import { AssetError, obtainImage, ensureRootfs, gitRemoteFor, startServicesFor, createBuildDisk, machineConfig, resolveAgentUser, AgentUserError, runBuildSteps, shellQuote, createContainerRuntime, stopContainer, cleanupContainer, outOfMemoryReason, containerSenderCommand, syncInContainer, copyTranscriptsFromContainer, GH_CONFIG_YML, ghHostsYml, ADDED_USER, isLiteralAddress, signalInContainer, deleteBuildDisk, startCheckContainer, lifecycleSteps, lifecycleFailureReason, writeEvalInput, EVAL_INPUT_NAME, copyTranscripts, senderSignalScript, containerJudgeEnvironment, copyJudgeTree } from './chunk-3ZR7Y23Y.js';
|
|
8
8
|
import { childEnvironment } from './chunk-VMJPFQNE.js';
|
|
9
9
|
import { HASH_ARGV, parseProgramHash, JUDGE_PROGRAM, judgeCommand, MAX_REPORT_BYTES, JUDGE_MAX_TURNS, JUDGE_DIR } from './chunk-3UZTIRLF.js';
|
|
10
10
|
import { waitForAgent, vmExecArgs } from './chunk-GGOMT6KF.js';
|
|
11
11
|
import { socketPathProblem, vsockLinks, linkVsockSockets } from './chunk-X5H2WYMB.js';
|
|
12
|
-
import { describeCallFailure, resolveGoverningSource, refusalCode, removeStagedContext, stageGovernedContext, pinnedSourceOf, commandWithShim, logStamp, createRunnerLog, formatDuration, retrySend, formatClock } from './chunk-
|
|
13
|
-
import { WorkCommandError, postJson, isSignatureRefusal, getJson } from './chunk-
|
|
12
|
+
import { describeCallFailure, resolveGoverningSource, refusalCode, removeStagedContext, stageGovernedContext, pinnedSourceOf, commandWithShim, logStamp, createRunnerLog, formatDuration, retrySend, formatClock } from './chunk-XZ4H4X5F.js';
|
|
13
|
+
import { WorkCommandError, postJson, isSignatureRefusal, getJson } from './chunk-FBTGMSQF.js';
|
|
14
14
|
import { planArtifactUpload } from './chunk-G3IJ3N6F.js';
|
|
15
15
|
import { isBuiltinContainer, isBuiltinProcess, isBuiltinVm, DEFAULT_CHECK_TIME_LIMIT_MINUTES } from './chunk-P53VEAOF.js';
|
|
16
16
|
import { parseSize } from './chunk-7RQ73DLO.js';
|
|
@@ -19,8 +19,8 @@ import { CLAUDE_CODE_VERSION } from './chunk-CX22S5BA.js';
|
|
|
19
19
|
import { isSameProcess, startTimeOf } from './chunk-JBJTC3UU.js';
|
|
20
20
|
import { scrubText } from './chunk-QNLX477Q.js';
|
|
21
21
|
import { resolvePackRoot } from './chunk-NNLA7LLQ.js';
|
|
22
|
-
import { parsePolicy } from './chunk-WFSUUUAN.js';
|
|
23
22
|
import { readCloudConfig } from './chunk-EABW6AJQ.js';
|
|
23
|
+
import { parsePolicy } from './chunk-WFSUUUAN.js';
|
|
24
24
|
import { homeFromEnv } from './chunk-VNVZDWO3.js';
|
|
25
25
|
import { resolveVersion } from './chunk-RA3O54FC.js';
|
|
26
26
|
import { signerFor } from './chunk-M2ZWWTWZ.js';
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { runEmit } from './chunk-
|
|
3
|
+
import { runEmit } from './chunk-5VML45HH.js';
|
|
4
4
|
import { addStdioMcpEntryIfAbsent, addDocsMcpEntryIfAbsent, DOCS_MCP_SERVER_NAME } from './chunk-YVZJ6GKF.js';
|
|
5
5
|
import { installStarterPack } from './chunk-6X4SQ5MY.js';
|
|
6
6
|
import { C } from './chunk-ANPNT6PM.js';
|
|
7
|
-
import { resolveGitCommonDir, defaultGitRunner } from './chunk-
|
|
7
|
+
import { resolveGitCommonDir, defaultGitRunner } from './chunk-EAEELQVQ.js';
|
|
8
8
|
import { loadTemplateFiles, loadMaintainedFiles, skillDir } from './chunk-NNLA7LLQ.js';
|
|
9
|
-
import { generatedHeaderSource } from './chunk-WFSUUUAN.js';
|
|
10
9
|
import { cliInvocation } from './chunk-CRB3POP4.js';
|
|
11
10
|
import { cloneIsGoverned } from './chunk-YQR6E6OV.js';
|
|
11
|
+
import { generatedHeaderSource } from './chunk-WFSUUUAN.js';
|
|
12
12
|
import { execFileSync } from 'child_process';
|
|
13
13
|
import { existsSync, mkdirSync, writeFileSync } from 'fs';
|
|
14
14
|
import { join, dirname } from 'path';
|
|
@@ -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-7UWVLZXD.js';
|
|
4
4
|
import { defaultFetch } from './chunk-FVMYKL6L.js';
|
|
5
5
|
import { resolveGatewayCredentials } from './chunk-NTRCK4NH.js';
|
|
6
6
|
import { appendContextProvenance } from './chunk-ZJSNLVCE.js';
|
|
7
7
|
import { loadMaintainedFiles, writeMaintainedFiles } from './chunk-NNLA7LLQ.js';
|
|
8
|
-
import { normalizeRepoName, parseOuterlayerConfig, classifyTree, emitTree } from './chunk-WFSUUUAN.js';
|
|
9
8
|
import { cliInvocation } from './chunk-CRB3POP4.js';
|
|
10
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-WFSUUUAN.js';
|
|
11
11
|
import { homeFromEnv } from './chunk-VNVZDWO3.js';
|
|
12
12
|
import { withTokenHeader } from './chunk-BQXFBI7T.js';
|
|
13
13
|
import { execFileSync } from 'child_process';
|
|
@@ -421,7 +421,7 @@ async function runWorkLinkSession(opts) {
|
|
|
421
421
|
return await linkSession(opts);
|
|
422
422
|
} catch (err) {
|
|
423
423
|
if (opts.logFailures) {
|
|
424
|
-
const { logHookError } = await import('./hook-fast-
|
|
424
|
+
const { logHookError } = await import('./hook-fast-RL5E5OXE.js');
|
|
425
425
|
const reason = err instanceof Error ? err.message : String(err);
|
|
426
426
|
logHookError(opts.home ?? homeFromEnv(opts.env ?? process.env), new Error(`work link-session #${opts.number} failed: ${reason}`));
|
|
427
427
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { isPlaceholderCommand } from './chunk-
|
|
4
|
-
import { describeCallFailure } from './chunk-
|
|
5
|
-
import { WorkCommandError, getJson } from './chunk-
|
|
3
|
+
import { isPlaceholderCommand } from './chunk-PIZRPNKR.js';
|
|
4
|
+
import { describeCallFailure } from './chunk-XZ4H4X5F.js';
|
|
5
|
+
import { WorkCommandError, getJson } from './chunk-FBTGMSQF.js';
|
|
6
6
|
import { sanitizeTerminal } from './chunk-G3IJ3N6F.js';
|
|
7
7
|
import { builtinKind } from './chunk-P53VEAOF.js';
|
|
8
8
|
import { signerFor } from './chunk-M2ZWWTWZ.js';
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
3
|
import { checkStarterFiles, contextIsGoverned } from './chunk-TWF3RICI.js';
|
|
4
|
-
import { resolveCredentials, getJson, WorkCommandError } from './chunk-
|
|
4
|
+
import { resolveCredentials, getJson, WorkCommandError } from './chunk-FBTGMSQF.js';
|
|
5
5
|
import { isLinkedRepository } from './chunk-CG36IONK.js';
|
|
6
6
|
import { sanitizeTerminal } from './chunk-G3IJ3N6F.js';
|
|
7
|
-
import { sanitizeForContext, spoolDir, assessSyncHealth, readSyncStatus, SYNC_STALE_AFTER_MS, formatAgo, checkInstalledCliStaleness, workspaceRootOf, hookFiredMarkerPath, refreshCommand } from './chunk-
|
|
7
|
+
import { sanitizeForContext, spoolDir, assessSyncHealth, readSyncStatus, SYNC_STALE_AFTER_MS, formatAgo, checkInstalledCliStaleness, workspaceRootOf, hookFiredMarkerPath, refreshCommand } from './chunk-PSN33ERW.js';
|
|
8
8
|
import { readStatuslineState, STATE_FRESH_MS } from './chunk-DSF2FWAZ.js';
|
|
9
9
|
import { resolveRepoIdentity, compareVersions, SUPPORTED_VERSIONS } from './chunk-QNLX477Q.js';
|
|
10
10
|
import { C } from './chunk-ANPNT6PM.js';
|
|
11
11
|
import { readSettings, settingsPath, isOurStatuslineSlot, statuslineWrappedOriginal, REGISTERED_EVENTS, isOurHookCommand, ourCommandBins, cliBinResolvable, ourDirectScriptBins, wrappedOriginalCommand } from './chunk-5QRP3MVS.js';
|
|
12
|
-
import { checkFormerSkillNames } from './chunk-
|
|
12
|
+
import { checkFormerSkillNames } from './chunk-7UWVLZXD.js';
|
|
13
13
|
import { defaultFetch } from './chunk-FVMYKL6L.js';
|
|
14
14
|
import { resolveGatewayCredentials } from './chunk-NTRCK4NH.js';
|
|
15
15
|
import { findGitDirs } from './chunk-BJ3KTMDH.js';
|
|
@@ -1181,7 +1181,7 @@ async function gatherDoctorChecks() {
|
|
|
1181
1181
|
const { runnerVmCheck } = await import('./doctor-53F2PYY7.js');
|
|
1182
1182
|
checks.push(runnerVmCheck(configPath, { lima: realLima(), home: homeFromEnv(), instance: runnerVm.instance }));
|
|
1183
1183
|
} else if (hasRunnerBlock(configPath)) {
|
|
1184
|
-
const { runnerHostChecks } = await import('./doctor-
|
|
1184
|
+
const { runnerHostChecks } = await import('./doctor-DHUM5DBB.js');
|
|
1185
1185
|
const hooks = (() => {
|
|
1186
1186
|
try {
|
|
1187
1187
|
return loadRunnerConfig(configPath).hooks;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { LiveUploader } from './chunk-
|
|
4
|
-
import { spoolDir } from './chunk-
|
|
3
|
+
import { LiveUploader } from './chunk-R22NZSGA.js';
|
|
4
|
+
import { spoolDir } from './chunk-PSN33ERW.js';
|
|
5
5
|
import { CaptureDaemon } from './chunk-QNLX477Q.js';
|
|
6
6
|
import { parseWorkItemEnv } from './chunk-T2Q7ISPE.js';
|
|
7
7
|
import { homeFromEnv } from './chunk-VNVZDWO3.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
|
-
import { MIN_ENGINE_MAJOR } from './chunk-
|
|
3
|
+
import { MIN_ENGINE_MAJOR } from './chunk-3ZR7Y23Y.js';
|
|
4
4
|
import { firecrackerArch, MICROVM_ARCHES, guestAssetsPinned } from './chunk-CX22S5BA.js';
|
|
5
5
|
import { spawnSync } from 'child_process';
|
|
6
6
|
import { existsSync, accessSync, constants, statSync, readFileSync } from 'fs';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'node:module';
|
|
3
3
|
import { hasStoredCredential, AGENT_COMMANDS, storeClaudeCredential, credentialFromStdin, isAgentName } from './chunk-7YP7T6GV.js';
|
|
4
|
-
import { detectMachine, supportsContainerBuilds, reachDockerStep, describeMachineDocker, supportsMicroVmBuilds } from './chunk-
|
|
5
|
-
import { MIN_ENGINE_MAJOR } from './chunk-
|
|
4
|
+
import { detectMachine, supportsContainerBuilds, reachDockerStep, describeMachineDocker, supportsMicroVmBuilds } from './chunk-LW7G5TJB.js';
|
|
5
|
+
import { MIN_ENGINE_MAJOR } from './chunk-3ZR7Y23Y.js';
|
|
6
6
|
import { runnerCredentialProblem } from './chunk-P53VEAOF.js';
|
|
7
7
|
import { runnerDir, RUNNER_DIR_MODE, RUNNER_FILE_MODE } from './chunk-N2PXGQRL.js';
|
|
8
8
|
import { existsSync, readFileSync, mkdirSync, writeFileSync } from 'fs';
|