@outerlayer/cli 0.8.3 → 0.8.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/{agent-setup-FMTXHWWM.js → agent-setup-LEQF4V5F.js} +9 -7
  3. package/dist/build-info.json +1 -1
  4. package/dist/{builder-QZA2Z3M3.js → builder-5UFAF5LW.js} +3 -3
  5. package/dist/{check-AFYUJ5SQ.js → check-HWYLSMEL.js} +21 -21
  6. package/dist/{chunk-42OX3Q3A.js → chunk-2MFYKH3C.js} +1 -1
  7. package/dist/{chunk-NT5M6LF3.js → chunk-4KPMIGBQ.js} +8 -8
  8. package/dist/{chunk-4NOIKXUL.js → chunk-6AFQOYO3.js} +3 -3
  9. package/dist/{chunk-KZ2FOICE.js → chunk-AGMIJ725.js} +34 -5
  10. package/dist/{chunk-ZYHKJKSU.js → chunk-BL63NBJZ.js} +1 -1
  11. package/dist/{chunk-HN2JBGSI.js → chunk-CDISNKM4.js} +1 -1
  12. package/dist/{chunk-CLURXEWV.js → chunk-DE4GLH3P.js} +1 -1
  13. package/dist/{chunk-OULFBETM.js → chunk-DSPYQUH4.js} +2 -2
  14. package/dist/{chunk-SMPKFYKY.js → chunk-FCDET2U5.js} +3 -3
  15. package/dist/{chunk-4GS22GWM.js → chunk-FTW6C2E7.js} +7 -7
  16. package/dist/{chunk-BPTAOD6W.js → chunk-GJ3OWUFO.js} +8 -8
  17. package/dist/{chunk-YCHJIAP2.js → chunk-H6IGIE3I.js} +4 -4
  18. package/dist/{chunk-OCHRV5A6.js → chunk-IOG6LPEI.js} +2 -2
  19. package/dist/{chunk-7HWIKEU5.js → chunk-K4MGMSMN.js} +1 -1
  20. package/dist/{chunk-VITHLJOZ.js → chunk-LKUUQ3XV.js} +1 -1
  21. package/dist/{chunk-WMPO3SKK.js → chunk-MSV44EB5.js} +4 -4
  22. package/dist/{chunk-36H5BONJ.js → chunk-NKU5OPYP.js} +31 -37
  23. package/dist/{chunk-YNJEOGDL.js → chunk-PK5NANMT.js} +1 -1
  24. package/dist/{chunk-33GOCSRO.js → chunk-PVC36MFI.js} +3 -3
  25. package/dist/{chunk-BORFBENT.js → chunk-SWGQAURM.js} +4 -4
  26. package/dist/{chunk-EWBM2USM.js → chunk-TFJGK4UB.js} +6 -3
  27. package/dist/{chunk-2OZH6ZY2.js → chunk-TY7EZC7U.js} +5 -5
  28. package/dist/{chunk-NPBLDMSD.js → chunk-WGLWDX5J.js} +1 -1
  29. package/dist/{chunk-OPSPDEVU.js → chunk-WLV4KCAW.js} +1 -1
  30. package/dist/{chunk-SPUWEK2Q.js → chunk-ZMKXBWIK.js} +20 -16
  31. package/dist/{cli-L2TU7WDF.js → cli-5QAP7N4A.js} +59 -59
  32. package/dist/{command-J5KLUIOI.js → command-WKRTL3JQ.js} +14 -14
  33. package/dist/{connect-cmd-NV7WVBY7.js → connect-cmd-YEO7WRSL.js} +4 -4
  34. package/dist/{context-adopt-3GFYGDRT.js → context-adopt-3REPEEQR.js} +5 -5
  35. package/dist/{context-materialize-YBOW5YCC.js → context-materialize-DU6B6RXF.js} +5 -5
  36. package/dist/{dist-2LNAXGPZ.js → dist-PKBWZAAL.js} +2 -2
  37. package/dist/{docker-RSALMGPL.js → docker-5DUNHNOH.js} +4 -4
  38. package/dist/{doctor-M65EXDE6.js → doctor-FEIBPZL7.js} +16 -16
  39. package/dist/{emit-artifact-cmd-SGDZQNHP.js → emit-artifact-cmd-S3CASUQK.js} +7 -7
  40. package/dist/{emit-cmd-KBVRX42C.js → emit-cmd-ETI47BA6.js} +4 -4
  41. package/dist/{emit-criteria-cmd-PSZYZ32B.js → emit-criteria-cmd-ZTUP7OGA.js} +5 -5
  42. package/dist/{emit-finding-cmd-VTSYDJYZ.js → emit-finding-cmd-TTXBZ4B7.js} +5 -5
  43. package/dist/{emit-result-cmd-ANAY4ZXF.js → emit-result-cmd-34OC6TI5.js} +7 -7
  44. package/dist/{hook-fast-B7TFCJR2.js → hook-fast-CFLLVMSV.js} +1 -1
  45. package/dist/{import-capture-cmd-SD6FI2BM.js → import-capture-cmd-Z3232HR4.js} +3 -3
  46. package/dist/{import-ruler-cmd-NUSPILXT.js → import-ruler-cmd-2PLXZXM7.js} +2 -2
  47. package/dist/index.js +3 -3
  48. package/dist/{init-EE4JI2E4.js → init-AHQHM56A.js} +15 -15
  49. package/dist/{init-S2Z3YDK2.js → init-UZ5TXACM.js} +15 -15
  50. package/dist/{init-cmd-X6BETOWP.js → init-cmd-F4FS5AVC.js} +10 -10
  51. package/dist/{loop-CR46DEHT.js → loop-FN67ZHLO.js} +21 -21
  52. package/dist/{machine-XZ34ENE2.js → machine-Y3TBDMXD.js} +14 -14
  53. package/dist/{session-sender-B67S2DHF.js → session-sender-LKVVLAUP.js} +6 -6
  54. package/dist/{starter-pack-TC6HZ7JK.js → starter-pack-L5WPXL4Q.js} +4 -4
  55. package/dist/{status-HIOSSWBN.js → status-7RNWHYG6.js} +17 -17
  56. package/dist/{sync-cmd-JN5RXCJQ.js → sync-cmd-VH6HSMG5.js} +5 -5
  57. package/dist/{watch-2H4RVURC.js → watch-HUKDEFUX.js} +5 -5
  58. package/dist/{work-claim-cmd-JUC6E3R2.js → work-claim-cmd-JLCU5SPP.js} +7 -7
  59. package/dist/{work-cmd-66GA4ETV.js → work-cmd-SBKQJBJ2.js} +6 -6
  60. package/dist/{work-comment-cmd-J5K47MBZ.js → work-comment-cmd-TNUDUUAT.js} +6 -6
  61. package/dist/{work-open-pr-cmd-X46UWSPE.js → work-open-pr-cmd-IB57SMAD.js} +7 -7
  62. package/dist/{work-pr-cmd-T6SU4TYN.js → work-pr-cmd-HDDNFSKA.js} +6 -6
  63. package/package.json +1 -1
  64. package/skill-pack/maintained/emitting-evidence/SKILL.md +12 -5
  65. package/skill-pack/template/build/SKILL.md +6 -2
  66. package/skill-pack/template/build/references/release.md +13 -0
  67. package/skill-pack/template/build/references/review-loop.md +3 -1
  68. package/skill-pack/validators/code-review.yaml +27 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # @outerlayer/cli
2
2
 
3
+ ## 0.8.5
4
+
5
+ ### Patch Changes
6
+
7
+ - 32bd8fd: A runner its service started through `current` no longer says it cannot update itself while it is already draining to restart onto a version `runner install` put in place. That line told the operator to restart the runner, but the restart was already scheduled. The runner now logs only that it is taking no new work and will restart once its builds finish. A runner started by hand, or one whose service starts a version directory, still gets the line, because nothing restarts it for them.
8
+
9
+ ## 0.8.4
10
+
11
+ ### Patch Changes
12
+
13
+ - 3c595df: `work build`, `work pr` and the other `work` commands now choose a factory automatically by the repository `--repo` names, not by the checkout they run from. Run from a factory repository with `--repo acme/app`, they used to pick the factory linked to the factory repository and send the work there. The line they print now reads `Using factory "<name>" in <org> for <repository> (<reason>); saved for this checkout.` It no longer starts with "Connected", because the automatic step never links a repository.
14
+ - b26e4b2: `outerlayer init` and `outerlayer init --template default` now write the code review check as a file you own, `.outerlayer/validators/code-review.yaml`, beside a policy file with no `extends` line. The check passes when a review result is recorded with `outerlayer emit code-review --item <n> --result pass --link <the review report's link>`. The maintained `emitting-evidence` skill and the `build` template skill tell agents to emit the review report with no `--for` and then record that result. The `outerlayer:recommended@v1` preset is gone: a policy file that still sets `extends` gets one policy error that says to run `outerlayer init --template default` and delete the line. An empty policy file now loads with every key at its default. A validator file can also require an attached artifact with `require: { artifact: { kind: report, for: <id> } }`.
15
+
3
16
  ## 0.8.3
4
17
 
5
18
  ### Patch Changes
@@ -1,17 +1,17 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { addStdioMcpEntryIfAbsent } from './chunk-47RS42OZ.js';
4
- import { installStarterPack } from './chunk-KZ2FOICE.js';
5
- import { runEmit } from './chunk-OULFBETM.js';
4
+ import { installStarterPack } from './chunk-AGMIJ725.js';
5
+ import { runEmit } from './chunk-DSPYQUH4.js';
6
6
  import { C } from './chunk-YRYMNBGQ.js';
7
- import { resolveGitCommonDir, defaultGitRunner } from './chunk-4NOIKXUL.js';
7
+ import { resolveGitCommonDir, defaultGitRunner } from './chunk-6AFQOYO3.js';
8
8
  import './chunk-ZJSNLVCE.js';
9
- import { pinExists, readContextManifest } from './chunk-42OX3Q3A.js';
10
- import { loadTemplateFiles, loadMaintainedFiles, skillDir } from './chunk-OPSPDEVU.js';
11
- import { generatedHeaderSource } from './chunk-36H5BONJ.js';
9
+ import { pinExists, readContextManifest } from './chunk-2MFYKH3C.js';
10
+ import { loadTemplateFiles, loadMaintainedFiles, skillDir } from './chunk-WLV4KCAW.js';
11
+ import { generatedHeaderSource } from './chunk-NKU5OPYP.js';
12
12
  import './chunk-YO4PSLVB.js';
13
13
  import './chunk-PLMTLGYH.js';
14
- import './chunk-YNJEOGDL.js';
14
+ import './chunk-PK5NANMT.js';
15
15
  import './chunk-EABW6AJQ.js';
16
16
  import './chunk-RA3O54FC.js';
17
17
  import './chunk-V7NIVOFD.js';
@@ -102,6 +102,8 @@ function runAgentSetup(opts) {
102
102
  for (const skill of pack.kept) kept.push(`${skillDir(skill)}/`);
103
103
  if (pack.policy === "written") written.add(POLICY_PATH);
104
104
  else kept.push(POLICY_PATH);
105
+ for (const path of pack.validatorsWritten) written.add(path);
106
+ kept.push(...pack.validatorsKept);
105
107
  if (existsSync(join(repoRoot, CONFIG_PATH))) {
106
108
  kept.push(CONFIG_PATH);
107
109
  } else {
@@ -1 +1 @@
1
- {"id":"2026-10-05T20:03:21.908Z+3cbfa30","root":"/home/runner/_work/outerlayer/outerlayer","pkg":"outerlayer"}
1
+ {"id":"2026-10-05T22:28:11.797Z+f8373f9","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-CLURXEWV.js';
3
+ export { MIN_BUILDX_VERSION, builderName, builderSpec, buildxState, ensureBuilder, ensureFailureCount, isOutOfMemory, proxyEnvironment, trackImageBuild } from './chunk-DE4GLH3P.js';
4
4
  import './chunk-CX22S5BA.js';
5
- import './chunk-HN2JBGSI.js';
5
+ import './chunk-CDISNKM4.js';
6
6
  import './chunk-7RQ73DLO.js';
7
7
  import './chunk-2FWL7CE2.js';
8
8
  import './chunk-HKMPVPO7.js';
9
- import './chunk-YNJEOGDL.js';
9
+ import './chunk-PK5NANMT.js';
10
10
  import './chunk-ZM2IMMYN.js';
11
11
  import './chunk-Z5GEFMRW.js';
12
12
 
@@ -1,41 +1,41 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { probeCredentials } from './chunk-SPUWEK2Q.js';
3
+ import { probeCredentials } from './chunk-ZMKXBWIK.js';
4
4
  import './chunk-IS4DIGBQ.js';
5
5
  import './chunk-I2UOAV7X.js';
6
- import './chunk-NT5M6LF3.js';
6
+ import './chunk-4KPMIGBQ.js';
7
7
  import './chunk-T6OIJQRT.js';
8
8
  import './chunk-AIW6GLET.js';
9
9
  import './chunk-UGP76IZ5.js';
10
- import './chunk-SMPKFYKY.js';
10
+ import './chunk-FCDET2U5.js';
11
11
  import './chunk-J5DPVNL3.js';
12
- import './chunk-YCHJIAP2.js';
12
+ import './chunk-H6IGIE3I.js';
13
13
  import './chunk-HHJDN6AU.js';
14
- import { placeholderQueues, placeholderProblem, needsClaudeCredential, claudeCredentialCheck, claimPermissionProblem } from './chunk-BORFBENT.js';
14
+ import { placeholderQueues, placeholderProblem, needsClaudeCredential, claudeCredentialCheck, claimPermissionProblem } from './chunk-SWGQAURM.js';
15
15
  import './chunk-TI7B7UEO.js';
16
16
  import './chunk-YYYRBYWG.js';
17
17
  import './chunk-TBT347UY.js';
18
- import './chunk-OCHRV5A6.js';
19
- import './chunk-VITHLJOZ.js';
20
- import './chunk-BPTAOD6W.js';
18
+ import './chunk-IOG6LPEI.js';
19
+ import './chunk-LKUUQ3XV.js';
20
+ import './chunk-GJ3OWUFO.js';
21
21
  import './chunk-JKIWMRFH.js';
22
22
  import './chunk-Y7UQHKFY.js';
23
23
  import './chunk-N5FOE5PS.js';
24
24
  import './chunk-OGFGZQA3.js';
25
- import './chunk-NPBLDMSD.js';
25
+ import './chunk-WGLWDX5J.js';
26
26
  import './chunk-QOZKPLVJ.js';
27
- import './chunk-CLURXEWV.js';
27
+ import './chunk-DE4GLH3P.js';
28
28
  import './chunk-CX22S5BA.js';
29
29
  import './chunk-HWMYGAKF.js';
30
30
  import './chunk-2E2MG3KW.js';
31
31
  import './chunk-F7CU5ABH.js';
32
32
  import './chunk-BKO6JEZI.js';
33
- import './chunk-2OZH6ZY2.js';
34
- import './chunk-WMPO3SKK.js';
33
+ import './chunk-TY7EZC7U.js';
34
+ import './chunk-MSV44EB5.js';
35
35
  import './chunk-BFESLKPP.js';
36
- import './chunk-EWBM2USM.js';
37
- import './chunk-ZYHKJKSU.js';
38
- import './chunk-HN2JBGSI.js';
36
+ import './chunk-TFJGK4UB.js';
37
+ import './chunk-BL63NBJZ.js';
38
+ import './chunk-CDISNKM4.js';
39
39
  import './chunk-USO2DKBD.js';
40
40
  import './chunk-N6LURUEF.js';
41
41
  import './chunk-YRYMNBGQ.js';
@@ -47,19 +47,19 @@ import './chunk-HKMPVPO7.js';
47
47
  import './chunk-GQD22KKN.js';
48
48
  import './chunk-WZBHBH3J.js';
49
49
  import './chunk-5QRP3MVS.js';
50
- import './chunk-4NOIKXUL.js';
50
+ import './chunk-6AFQOYO3.js';
51
51
  import './chunk-ZJSNLVCE.js';
52
- import './chunk-42OX3Q3A.js';
53
- import './chunk-OPSPDEVU.js';
54
- import './chunk-36H5BONJ.js';
52
+ import './chunk-2MFYKH3C.js';
53
+ import './chunk-WLV4KCAW.js';
54
+ import './chunk-NKU5OPYP.js';
55
55
  import './chunk-YO4PSLVB.js';
56
56
  import './chunk-PLMTLGYH.js';
57
- import './chunk-YNJEOGDL.js';
57
+ import './chunk-PK5NANMT.js';
58
58
  import './chunk-EABW6AJQ.js';
59
59
  import './chunk-RA3O54FC.js';
60
60
  import './chunk-V7NIVOFD.js';
61
61
  import './chunk-ZM2IMMYN.js';
62
- import './chunk-7HWIKEU5.js';
62
+ import './chunk-K4MGMSMN.js';
63
63
  import './chunk-XCCLFVXM.js';
64
64
  import './chunk-BJ3KTMDH.js';
65
65
  import './chunk-VNVZDWO3.js';
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { CONTEXT_PIN_SCHEMA_VERSION, CONTEXT_PIN_FILENAME } from './chunk-36H5BONJ.js';
3
+ import { CONTEXT_PIN_SCHEMA_VERSION, CONTEXT_PIN_FILENAME } from './chunk-NKU5OPYP.js';
4
4
  import { readFileSync, existsSync, writeFileSync, mkdirSync, utimesSync, statSync, unlinkSync } from 'fs';
5
5
  import { join, dirname } from 'path';
6
6
 
@@ -1,24 +1,24 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { writeJobFile, readJobFile } from './chunk-T6OIJQRT.js';
4
- import { senderPidfile } from './chunk-SMPKFYKY.js';
4
+ import { senderPidfile } from './chunk-FCDET2U5.js';
5
5
  import { DOCKERD_LOG } from './chunk-J5DPVNL3.js';
6
- import { installScrubContext } from './chunk-YCHJIAP2.js';
7
- import { AssetError, describeCallFailure, obtainImage, ensureRootfs, gitRemoteFor, startServicesFor, createBuildDisk, machineConfig, refusalCode, resolveAgentUser, AgentUserError, runBuildSteps, removeStagedContext, stageGovernedContext, shellQuote, createRunnerLog, createContainerRuntime, stopContainer, cleanupContainer, outOfMemoryReason, formatDuration, retrySend, formatClock, containerSenderCommand, syncInContainer, copyTranscriptsFromContainer, GH_CONFIG_YML, ghHostsYml, ADDED_USER, isLiteralAddress, signalInContainer, deleteBuildDisk, startCheckContainer, lifecycleSteps, lifecycleFailureReason, writeEvalInput, EVAL_INPUT_NAME, copyTranscripts, senderSignalScript } from './chunk-BPTAOD6W.js';
6
+ import { installScrubContext } from './chunk-H6IGIE3I.js';
7
+ import { AssetError, describeCallFailure, obtainImage, ensureRootfs, gitRemoteFor, startServicesFor, createBuildDisk, machineConfig, refusalCode, resolveAgentUser, AgentUserError, runBuildSteps, removeStagedContext, stageGovernedContext, shellQuote, createRunnerLog, createContainerRuntime, stopContainer, cleanupContainer, outOfMemoryReason, formatDuration, retrySend, formatClock, containerSenderCommand, syncInContainer, copyTranscriptsFromContainer, GH_CONFIG_YML, ghHostsYml, ADDED_USER, isLiteralAddress, signalInContainer, deleteBuildDisk, startCheckContainer, lifecycleSteps, lifecycleFailureReason, writeEvalInput, EVAL_INPUT_NAME, copyTranscripts, senderSignalScript } from './chunk-GJ3OWUFO.js';
8
8
  import { readBranchHead, diffBetween, fetchCommit } from './chunk-Y7UQHKFY.js';
9
9
  import { isSameProcess, startTimeOf } from './chunk-N5FOE5PS.js';
10
- import { childEnvironment } from './chunk-NPBLDMSD.js';
10
+ import { childEnvironment } from './chunk-WGLWDX5J.js';
11
11
  import { CLAUDE_CODE_VERSION } from './chunk-CX22S5BA.js';
12
12
  import { waitForAgent, vmExecArgs } from './chunk-HWMYGAKF.js';
13
13
  import { socketPathProblem, vsockLinks, linkVsockSockets } from './chunk-2E2MG3KW.js';
14
- import { WorkCommandError, postJson, isSignatureRefusal, getJson } from './chunk-2OZH6ZY2.js';
15
- import { planArtifactUpload } from './chunk-ZYHKJKSU.js';
16
- import { scrubText } from './chunk-HN2JBGSI.js';
14
+ import { WorkCommandError, postJson, isSignatureRefusal, getJson } from './chunk-TY7EZC7U.js';
15
+ import { planArtifactUpload } from './chunk-BL63NBJZ.js';
16
+ import { scrubText } from './chunk-CDISNKM4.js';
17
17
  import { isBuiltinContainer, isBuiltinProcess, isBuiltinVm, DEFAULT_CHECK_TIME_LIMIT_MINUTES } from './chunk-7KI224YS.js';
18
18
  import { parseSize } from './chunk-7RQ73DLO.js';
19
19
  import { claudeCredential, buildEnvironment, JOB_MOUNT, CHECKOUT_DIR, parseIsolation, proxyEnvironment, containerLocalAddress, destinationEnvironment, CLAUDE_CREDENTIAL_VARIABLES, builtInEnvironment, startBuildServices, BUILT_IN_NAMES, AGENT_CREDENTIAL_MISSING, sharedUserEnvironment, headerVariables, withTunnelRecord, RELAY_PORT, checkEnvironment, EVAL_INPUT_DIR } from './chunk-2FWL7CE2.js';
20
20
  import { withHooksPath, authorEnvironment, commitIdentityRecord } from './chunk-HKMPVPO7.js';
21
- import { parsePolicy } from './chunk-36H5BONJ.js';
21
+ import { parsePolicy } from './chunk-NKU5OPYP.js';
22
22
  import { readCloudConfig } from './chunk-EABW6AJQ.js';
23
23
  import { resolveVersion } from './chunk-RA3O54FC.js';
24
24
  import { signerFor } from './chunk-V7NIVOFD.js';
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { appendContextProvenance } from './chunk-ZJSNLVCE.js';
4
- import { readPin, pinExists, readBuildHold, readContextManifest, manifestFilesPresent, writeDegraded, writeSourceCache, SOURCE_CACHE_TTL_RETRY_MS, SOURCE_CACHE_TTL_SUCCESS_MS, isLastCheckFresh, readDegraded, touchLastCheck, clearDegraded, writeContextManifest, writePinIfChanged, readSourceCache, isSourceCacheFresh } from './chunk-42OX3Q3A.js';
5
- import { loadMaintainedFiles, writeMaintainedFiles } from './chunk-OPSPDEVU.js';
6
- import { parseGoverns, normalizeRepoName, CONTEXT_SOURCE_CONFIG_PATH, parseOuterlayerConfig, classifyTree, emitTree } from './chunk-36H5BONJ.js';
4
+ import { readPin, pinExists, readBuildHold, readContextManifest, manifestFilesPresent, writeDegraded, writeSourceCache, SOURCE_CACHE_TTL_RETRY_MS, SOURCE_CACHE_TTL_SUCCESS_MS, isLastCheckFresh, readDegraded, touchLastCheck, clearDegraded, writeContextManifest, writePinIfChanged, readSourceCache, isSourceCacheFresh } from './chunk-2MFYKH3C.js';
5
+ import { loadMaintainedFiles, writeMaintainedFiles } from './chunk-WLV4KCAW.js';
6
+ import { parseGoverns, normalizeRepoName, CONTEXT_SOURCE_CONFIG_PATH, parseOuterlayerConfig, classifyTree, emitTree } from './chunk-NKU5OPYP.js';
7
7
  import { defaultFetch } from './chunk-YO4PSLVB.js';
8
8
  import { resolveGatewayCredentials } from './chunk-PLMTLGYH.js';
9
9
  import { ensureContextExcludes, ensurePreCommitGuardHook } from './chunk-XCCLFVXM.js';
@@ -1,15 +1,17 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { C } from './chunk-YRYMNBGQ.js';
4
- import { resolvePackRoot, loadTemplateFiles, loadMaintainedFiles, TEMPLATE_SKILLS, skillDir, writeMaintainedFiles, MAINTAINED_SKILLS } from './chunk-OPSPDEVU.js';
4
+ import { resolvePackRoot, loadTemplateFiles, loadMaintainedFiles, TEMPLATE_SKILLS, skillDir, writeMaintainedFiles, MAINTAINED_SKILLS } from './chunk-WLV4KCAW.js';
5
5
  import { resolvePackageVersion } from './chunk-RA3O54FC.js';
6
- import { existsSync, mkdirSync, writeFileSync } from 'fs';
6
+ import { readFileSync, existsSync, mkdirSync, writeFileSync } from 'fs';
7
7
  import { join, dirname } from 'path';
8
8
 
9
9
  createRequire(import.meta.url);
10
10
  var DEFAULT_TEMPLATE = "default";
11
11
  var POLICY_PATH = ".outerlayer/policy.yaml";
12
- var POLICY_CONTENT = "extends: outerlayer:recommended@v1\nreview: required\n";
12
+ var POLICY_CONTENT = "review: required\n";
13
+ var VALIDATOR_FILES = ["code-review.yaml"];
14
+ var VALIDATORS_DIR = ".outerlayer/validators";
13
15
  var StarterPackError = class extends Error {
14
16
  };
15
17
  function assertKnownTemplate(name) {
@@ -22,6 +24,10 @@ function installStarterPack(opts) {
22
24
  const version = opts.version ?? resolvePackageVersion();
23
25
  const templateFiles = loadTemplateFiles(packRoot, version);
24
26
  const maintainedFiles = loadMaintainedFiles(packRoot, version);
27
+ const validatorFiles = VALIDATOR_FILES.map((name) => ({
28
+ path: `${VALIDATORS_DIR}/${name}`,
29
+ content: readFileSync(join(packRoot, "validators", name), "utf8")
30
+ }));
25
31
  const copied = [];
26
32
  const kept = [];
27
33
  for (const skill of TEMPLATE_SKILLS) {
@@ -44,7 +50,26 @@ function installStarterPack(opts) {
44
50
  writeFileSync(policyAbs, POLICY_CONTENT);
45
51
  policy = "written";
46
52
  }
47
- return { copied, kept, maintained: [...written.created, ...written.rewritten], policy };
53
+ const validatorsWritten = [];
54
+ const validatorsKept = [];
55
+ for (const file of validatorFiles) {
56
+ const abs = join(opts.repoRoot, file.path);
57
+ if (existsSync(abs)) {
58
+ validatorsKept.push(file.path);
59
+ continue;
60
+ }
61
+ mkdirSync(dirname(abs), { recursive: true });
62
+ writeFileSync(abs, file.content);
63
+ validatorsWritten.push(file.path);
64
+ }
65
+ return {
66
+ copied,
67
+ kept,
68
+ maintained: [...written.created, ...written.rewritten],
69
+ policy,
70
+ validatorsWritten,
71
+ validatorsKept
72
+ };
48
73
  }
49
74
  var skillFile = (skill) => `${skillDir(skill)}/SKILL.md`;
50
75
  function formatStarterPackOutput(result) {
@@ -60,7 +85,11 @@ function formatStarterPackOutput(result) {
60
85
  for (const skill of MAINTAINED_SKILLS) lines.push(` ${skillFile(skill)}`);
61
86
  lines.push(
62
87
  "",
63
- result.policy === "written" ? `${C.green}\u2713${C.reset} Wrote ${POLICY_PATH} (extends the recommended checks, review required)` : `${C.dim}${POLICY_PATH} already exists \u2014 left as it is${C.reset}`,
88
+ result.policy === "written" ? `${C.green}\u2713${C.reset} Wrote ${POLICY_PATH} (review required)` : `${C.dim}${POLICY_PATH} already exists \u2014 left as it is${C.reset}`,
89
+ ...result.validatorsWritten.map(
90
+ (path) => `${C.green}\u2713${C.reset} Wrote ${path} (yours to edit \u2014 the code review check)`
91
+ ),
92
+ ...result.validatorsKept.map((path) => `${C.dim}${path} already exists \u2014 left as it is${C.reset}`),
64
93
  "",
65
94
  `Next: create .outerlayer/config.json naming your agent tools, for example {"targets": ["claude-code"]},`,
66
95
  `then run ${C.yellow}outerlayer context emit${C.reset} to compile the skills into their native files.`
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { ArtifactTombstoneRecordSchema, ArtifactSpoolRecordSchema } from './chunk-YNJEOGDL.js';
3
+ import { ArtifactTombstoneRecordSchema, ArtifactSpoolRecordSchema } from './chunk-PK5NANMT.js';
4
4
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
5
5
  import { mkdirSync, appendFileSync, writeFileSync, renameSync, existsSync, unlinkSync, readdirSync, readFileSync } from 'fs';
6
6
  import { join, dirname } from 'path';
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { EVENT_TYPES, isHumanUserTurn, parseAgentSession, SCHEMA_VERSION, SPEED_MAX_LENGTH, inputBandOf, BUCKET_MODEL_MAX_LENGTH } from './chunk-YNJEOGDL.js';
3
+ import { EVENT_TYPES, isHumanUserTurn, parseAgentSession, SCHEMA_VERSION, SPEED_MAX_LENGTH, inputBandOf, BUCKET_MODEL_MAX_LENGTH } from './chunk-PK5NANMT.js';
4
4
  import { createHash } from 'crypto';
5
5
  import { readFileSync, readdirSync, statSync, mkdirSync, copyFileSync, renameSync, unlinkSync, writeFileSync, stat as stat$1, unwatchFile, watchFile, watch as watch$1 } from 'fs';
6
6
  import { type, homedir } from 'os';
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { BUILDKIT_IMAGE } from './chunk-CX22S5BA.js';
4
- import { compareVersions } from './chunk-HN2JBGSI.js';
4
+ import { compareVersions } from './chunk-CDISNKM4.js';
5
5
  import { parseSize } from './chunk-7RQ73DLO.js';
6
6
  import { JOB_MOUNT, GATEWAY_PORT, GATEWAY_SOCKET, CLAUDE_PORT, CLAUDE_SOCKET, RELAY_PORT, DESTINATION_BASE_PORT } from './chunk-2FWL7CE2.js';
7
7
  import { runnerDir } from './chunk-ZM2IMMYN.js';
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { maintainedFilesForExistingSkills, loadMaintainedFiles, writeMaintainedFiles } from './chunk-OPSPDEVU.js';
4
- import { emitTree, parseOuterlayerConfig, classifyTree, generatedHeaderSource, CONTEXT_PIN_FILENAME, normalizePath } from './chunk-36H5BONJ.js';
3
+ import { maintainedFilesForExistingSkills, loadMaintainedFiles, writeMaintainedFiles } from './chunk-WLV4KCAW.js';
4
+ import { emitTree, parseOuterlayerConfig, classifyTree, generatedHeaderSource, CONTEXT_PIN_FILENAME, normalizePath } from './chunk-NKU5OPYP.js';
5
5
  import { existsSync, readFileSync, mkdirSync, writeFileSync, copyFileSync, readdirSync } from 'fs';
6
6
  import { join, dirname, relative, sep } from 'path';
7
7
 
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { LiveUploader } from './chunk-YCHJIAP2.js';
4
- import { CaptureDaemon } from './chunk-HN2JBGSI.js';
3
+ import { LiveUploader } from './chunk-H6IGIE3I.js';
4
+ import { CaptureDaemon } from './chunk-CDISNKM4.js';
5
5
  import { parseWorkItemEnv } from './chunk-GQD22KKN.js';
6
- import { spoolDir } from './chunk-7HWIKEU5.js';
6
+ import { spoolDir } from './chunk-K4MGMSMN.js';
7
7
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
8
8
  import { mkdirSync, writeFileSync, rmSync } from 'fs';
9
9
  import { join } from 'path';
@@ -1,17 +1,17 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
3
  import { readStatuslineState, STATE_FRESH_MS } from './chunk-F47JBIAW.js';
4
- import { resolveCredentials, getJson, WorkCommandError } from './chunk-2OZH6ZY2.js';
5
- import { isLinkedRepository } from './chunk-EWBM2USM.js';
6
- import { sanitizeTerminal } from './chunk-ZYHKJKSU.js';
7
- import { resolveRepoIdentity, compareVersions, SUPPORTED_VERSIONS } from './chunk-HN2JBGSI.js';
4
+ import { resolveCredentials, getJson, WorkCommandError } from './chunk-TY7EZC7U.js';
5
+ import { isLinkedRepository } from './chunk-TFJGK4UB.js';
6
+ import { sanitizeTerminal } from './chunk-BL63NBJZ.js';
7
+ import { resolveRepoIdentity, compareVersions, SUPPORTED_VERSIONS } from './chunk-CDISNKM4.js';
8
8
  import { C } from './chunk-YRYMNBGQ.js';
9
9
  import { readSettings, settingsPath, isOurStatuslineSlot, statuslineWrappedOriginal, REGISTERED_EVENTS, isOurHookCommand, ourCommandBins, cliBinResolvable, ourDirectScriptBins, wrappedOriginalCommand } from './chunk-5QRP3MVS.js';
10
- import { readPin, readContextManifest, readDegraded, readSourceCache } from './chunk-42OX3Q3A.js';
10
+ import { readPin, readContextManifest, readDegraded, readSourceCache } from './chunk-2MFYKH3C.js';
11
11
  import { defaultFetch } from './chunk-YO4PSLVB.js';
12
12
  import { resolveGatewayCredentials } from './chunk-PLMTLGYH.js';
13
13
  import { readCloudConfig } from './chunk-EABW6AJQ.js';
14
- import { sanitizeForContext, spoolDir, assessSyncHealth, readSyncStatus, SYNC_STALE_AFTER_MS, formatAgo, checkInstalledCliStaleness, workspaceRootOf, hookFiredMarkerPath, refreshCommand } from './chunk-7HWIKEU5.js';
14
+ import { sanitizeForContext, spoolDir, assessSyncHealth, readSyncStatus, SYNC_STALE_AFTER_MS, formatAgo, checkInstalledCliStaleness, workspaceRootOf, hookFiredMarkerPath, refreshCommand } from './chunk-K4MGMSMN.js';
15
15
  import { deadHooksState, preparePackageManagerCommand, contextExcludesPresent } from './chunk-XCCLFVXM.js';
16
16
  import { findGitDirs } from './chunk-BJ3KTMDH.js';
17
17
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
@@ -1016,7 +1016,7 @@ async function gatherDoctorChecks() {
1016
1016
  const { runnerVmCheck } = await import('./doctor-53F2PYY7.js');
1017
1017
  checks.push(runnerVmCheck(configPath, { lima: realLima(), home: homeFromEnv(), instance: runnerVm.instance }));
1018
1018
  } else if (hasRunnerBlock(configPath)) {
1019
- const { runnerHostChecks } = await import('./doctor-M65EXDE6.js');
1019
+ const { runnerHostChecks } = await import('./doctor-FEIBPZL7.js');
1020
1020
  const hooks = (() => {
1021
1021
  try {
1022
1022
  return loadRunnerConfig(configPath).hooks;
@@ -3,22 +3,22 @@ import { createRequire } from 'node:module';
3
3
  import { readDefaultBranchHead, cloneRepository, buildRepositoryImage } from './chunk-Y7UQHKFY.js';
4
4
  import { startTimeOf, isSameProcess } from './chunk-N5FOE5PS.js';
5
5
  import { currentCliBuild } from './chunk-OGFGZQA3.js';
6
- import { createDockerHost, childEnvironment, spawnRun } from './chunk-NPBLDMSD.js';
6
+ import { createDockerHost, childEnvironment, spawnRun } from './chunk-WGLWDX5J.js';
7
7
  import { RecipeError } from './chunk-QOZKPLVJ.js';
8
- import { builderSpec, runnerLabelValue, RUNNER_LABEL, BUILD_LABEL, prepareRunArgs, containerRunArgs, containerExecArgs } from './chunk-CLURXEWV.js';
8
+ import { builderSpec, runnerLabelValue, RUNNER_LABEL, BUILD_LABEL, prepareRunArgs, containerRunArgs, containerExecArgs } from './chunk-DE4GLH3P.js';
9
9
  import { CLAUDE_CODE_VERSION, firecrackerArch, MICROVM_ARCHES, DEFAULT_BASE_IMAGE, GUEST_HELPER_SHA256, GUEST_ASSETS_BASE_URL, GUEST_KERNEL_SHA256, FIRECRACKER_BINARY_SHA256, FIRECRACKER_SHA256, FIRECRACKER_VERSION, GUEST_ASSETS_VERSION } from './chunk-CX22S5BA.js';
10
10
  import { execCapture } from './chunk-HWMYGAKF.js';
11
11
  import { GUEST_CID } from './chunk-2E2MG3KW.js';
12
- import { WorkCommandError, postJson } from './chunk-2OZH6ZY2.js';
13
- import { setCustomScrubbers, setLocalIdentity, setRepoRoot, parseTranscript, scrubDeep, scrubText } from './chunk-HN2JBGSI.js';
12
+ import { WorkCommandError, postJson } from './chunk-TY7EZC7U.js';
13
+ import { setCustomScrubbers, setLocalIdentity, setRepoRoot, parseTranscript, scrubDeep, scrubText } from './chunk-CDISNKM4.js';
14
14
  import { hostAllowed } from './chunk-UXYLWVTQ.js';
15
15
  import { parseDuKilobytes } from './chunk-7RQ73DLO.js';
16
16
  import { RELAY_PORT, CHECKOUT_DIR, JOB_MOUNT, claudeCredential, buildEnvironment, startBuildServices, checkEnvironment, AGENT_CREDENTIAL_MISSING } from './chunk-2FWL7CE2.js';
17
- import { defaultGitRunner, materializeContext } from './chunk-4NOIKXUL.js';
18
- import { readContextManifest, readSourceCache } from './chunk-42OX3Q3A.js';
19
- import { orderSessions, extractFacts, sessionsToTimeline } from './chunk-36H5BONJ.js';
17
+ import { defaultGitRunner, materializeContext } from './chunk-6AFQOYO3.js';
18
+ import { readContextManifest, readSourceCache } from './chunk-2MFYKH3C.js';
19
+ import { orderSessions, extractFacts, sessionsToTimeline } from './chunk-NKU5OPYP.js';
20
20
  import { signingFetchFor } from './chunk-YO4PSLVB.js';
21
- import { downconvertSession } from './chunk-YNJEOGDL.js';
21
+ import { downconvertSession } from './chunk-PK5NANMT.js';
22
22
  import { signerFor } from './chunk-V7NIVOFD.js';
23
23
  import { rootfsPathFor, diskTemplatesDir, RUNNER_FILE_MODE, stagedContextDir, contextHomeDir, ghConfigDir, runnerDirOfBuild, spoolDir, mirrorDir, buildDir, RUNNER_DIR_MODE, vmAssetsDir } from './chunk-ZM2IMMYN.js';
24
24
  import { relative, join, dirname, basename } from 'path';
@@ -4,17 +4,17 @@ import { LaunchFilter } from './chunk-HHJDN6AU.js';
4
4
  import { RepoFilter } from './chunk-TBT347UY.js';
5
5
  import { hookExecSpoolPath } from './chunk-F7CU5ABH.js';
6
6
  import { applyReportedCost } from './chunk-BKO6JEZI.js';
7
- import { migrateLegacyArtifactSidecars, planArtifactUpload, artifactsStatePath, sanitizeTerminal, artifactBlobsDir, resolveArtifactTurnIndex, isArtifactTombstoned, ARTIFACT_RETRY_MAX_AGE_MS, writeArtifactSpoolState, reclaimUnneededArtifactBlobs, neededArtifactShas } from './chunk-ZYHKJKSU.js';
8
- import { setCustomScrubbers, setLocalIdentity, tailTranscript, enrichSessionRepo, scanAll, setRepoRoot, resolveRepoIdentity, sessionIdFromPath, scrubDeep, SOURCE_ADAPTERS } from './chunk-HN2JBGSI.js';
7
+ import { migrateLegacyArtifactSidecars, planArtifactUpload, artifactsStatePath, sanitizeTerminal, artifactBlobsDir, resolveArtifactTurnIndex, isArtifactTombstoned, ARTIFACT_RETRY_MAX_AGE_MS, writeArtifactSpoolState, reclaimUnneededArtifactBlobs, neededArtifactShas } from './chunk-BL63NBJZ.js';
8
+ import { setCustomScrubbers, setLocalIdentity, tailTranscript, enrichSessionRepo, scanAll, setRepoRoot, resolveRepoIdentity, sessionIdFromPath, scrubDeep, SOURCE_ADAPTERS } from './chunk-CDISNKM4.js';
9
9
  import { C } from './chunk-YRYMNBGQ.js';
10
10
  import { readLaunchSpoolState, launchStatusIsDecisive, launchedItemsBySession, launchesPath } from './chunk-GQD22KKN.js';
11
11
  import { readLatestProvenanceForSession, readContextProvenance } from './chunk-ZJSNLVCE.js';
12
12
  import { defaultFetch } from './chunk-YO4PSLVB.js';
13
13
  import { resolveGatewayCredentials, unauthorizedMessage } from './chunk-PLMTLGYH.js';
14
- import { CAPTURE_TIERS, inferArtifactKind, bannedPathsForTier, downconvertSession, isHumanUserTurn, turnCountBound, EVENT_TYPES } from './chunk-YNJEOGDL.js';
14
+ import { CAPTURE_TIERS, inferArtifactKind, bannedPathsForTier, downconvertSession, isHumanUserTurn, turnCountBound, EVENT_TYPES } from './chunk-PK5NANMT.js';
15
15
  import { readCloudConfig, cloudConfigPath, writeCloudConfig } from './chunk-EABW6AJQ.js';
16
16
  import { signerFor, signRunnerRequest } from './chunk-V7NIVOFD.js';
17
- import { writeSyncStatus, spoolDir } from './chunk-7HWIKEU5.js';
17
+ import { writeSyncStatus, spoolDir } from './chunk-K4MGMSMN.js';
18
18
  import { removeJournalHooks } from './chunk-XCCLFVXM.js';
19
19
  import { readRepoConnection, findGitDirs } from './chunk-BJ3KTMDH.js';
20
20
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { detectMachine, supportsContainerBuilds, reachDockerStep, describeMachineDocker, supportsMicroVmBuilds } from './chunk-VITHLJOZ.js';
4
- import { MIN_ENGINE_MAJOR } from './chunk-BPTAOD6W.js';
3
+ import { detectMachine, supportsContainerBuilds, reachDockerStep, describeMachineDocker, supportsMicroVmBuilds } from './chunk-LKUUQ3XV.js';
4
+ import { MIN_ENGINE_MAJOR } from './chunk-GJ3OWUFO.js';
5
5
  import { RUNNER_DIR_MODE, runnerDir, RUNNER_FILE_MODE } from './chunk-ZM2IMMYN.js';
6
6
  import { existsSync, readFileSync, mkdirSync, writeFileSync } from 'fs';
7
7
  import { dirname } from 'path';
@@ -628,7 +628,7 @@ async function runHookFast(event, home = homeFromEnv(), read = readStdin, env =
628
628
  recordHookErrorsSeen(home, hookErrorsBytes);
629
629
  if (contextPossiblyGoverned(sessionCwd, home)) {
630
630
  try {
631
- const { materializeContext: materialize } = await import('./context-materialize-YBOW5YCC.js');
631
+ const { materializeContext: materialize } = await import('./context-materialize-DU6B6RXF.js');
632
632
  const sessionId = typeof payload.session_id === "string" ? payload.session_id : "unknown";
633
633
  const result = await materialize({ cwd: sessionCwd, sessionId, home });
634
634
  materializeMessage = result.message;
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { MIN_ENGINE_MAJOR } from './chunk-BPTAOD6W.js';
3
+ import { MIN_ENGINE_MAJOR } from './chunk-GJ3OWUFO.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,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { createRequire } from 'node:module';
3
- import { fetchFactories, selectFactory, saveFactoryConnection, connectedLine } from './chunk-EWBM2USM.js';
4
- import { resolveRepoIdentity } from './chunk-HN2JBGSI.js';
3
+ import { fetchFactories, selectFactory, saveFactoryConnection, autoConnectedLine } from './chunk-TFJGK4UB.js';
4
+ import { resolveRepoIdentity } from './chunk-CDISNKM4.js';
5
5
  import { resolveGatewayCredentials } from './chunk-PLMTLGYH.js';
6
6
  import { findGitDirs, readRepoConnection } from './chunk-BJ3KTMDH.js';
7
7
  import { homeFromEnv } from './chunk-VNVZDWO3.js';
@@ -16,7 +16,7 @@ async function autoConnect(opts) {
16
16
  const resolved = resolveGatewayCredentials({ url: opts.url, apiKey: opts.apiKey, appId: opts.appId, home, env, cwd });
17
17
  if (resolved.ok || resolved.kind !== "login" || !resolved.credential || !resolved.url) return void 0;
18
18
  const dirs = findGitDirs(cwd);
19
- const repository = resolveRepoIdentity(cwd).gitRepo;
19
+ const repository = opts.repository ?? resolveRepoIdentity(cwd).gitRepo;
20
20
  if (dirs === void 0 || repository === void 0) return void 0;
21
21
  const listed = await fetchFactories(opts.fetchImpl ?? fetch, resolved.url, resolved.credential, repository);
22
22
  if (!listed.ok || listed.factories.length === 0) return void 0;
@@ -31,7 +31,7 @@ Or pass --app-id / set OUTERLAYER_APP_ID.`;
31
31
  } catch {
32
32
  return void 0;
33
33
  }
34
- process.stderr.write(`${connectedLine(repository, chosen.factory, chosen.reason)}
34
+ process.stderr.write(`${autoConnectedLine(repository, chosen.factory, chosen.reason)}
35
35
  `);
36
36
  return void 0;
37
37
  }