@b00dea/cockpit 0.0.0-stage → 0.1.1

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 (426) hide show
  1. package/CHANGELOG.md +474 -0
  2. package/LICENSE +21 -0
  3. package/README.md +25 -2
  4. package/bin/cockpit.mjs +33 -0
  5. package/cockpit.schema.json +2644 -0
  6. package/dist/autonomy.d.ts +45 -0
  7. package/dist/autonomy.js +173 -0
  8. package/dist/bounded-read.d.ts +14 -0
  9. package/dist/bounded-read.js +42 -0
  10. package/dist/browser/commands.d.ts +117 -0
  11. package/dist/browser/commands.js +453 -0
  12. package/dist/browser/package-paths.d.ts +1 -0
  13. package/dist/browser/package-paths.js +6 -0
  14. package/dist/browser/proxy.d.ts +22 -0
  15. package/dist/browser/proxy.js +37 -0
  16. package/dist/browser/runtime.d.ts +118 -0
  17. package/dist/browser/runtime.js +186 -0
  18. package/dist/browser/surfaces.d.ts +141 -0
  19. package/dist/browser/surfaces.js +561 -0
  20. package/dist/browser/ui-gate.d.ts +15 -0
  21. package/dist/browser/ui-gate.js +18 -0
  22. package/dist/canonical-json.d.ts +2 -0
  23. package/dist/canonical-json.js +5 -0
  24. package/dist/cli-guard.d.ts +5 -0
  25. package/dist/cli-guard.js +71 -0
  26. package/dist/cli-main.d.ts +176 -0
  27. package/dist/cli-main.js +1584 -0
  28. package/dist/cli.d.ts +3 -0
  29. package/dist/cli.js +16 -0
  30. package/dist/command-table.d.ts +121 -0
  31. package/dist/command-table.js +664 -0
  32. package/dist/config/load.d.ts +183 -0
  33. package/dist/config/load.js +367 -0
  34. package/dist/config/sibling-toml.d.ts +48 -0
  35. package/dist/config/sibling-toml.js +160 -0
  36. package/dist/config/surface-tools-toml.d.ts +9 -0
  37. package/dist/config/surface-tools-toml.js +37 -0
  38. package/dist/config/unconfirmed-toml.d.ts +9 -0
  39. package/dist/config/unconfirmed-toml.js +29 -0
  40. package/dist/config/verified-write.d.ts +43 -0
  41. package/dist/config/verified-write.js +89 -0
  42. package/dist/diagnostics.d.ts +26 -0
  43. package/dist/diagnostics.js +344 -0
  44. package/dist/docs/check.d.ts +16 -0
  45. package/dist/docs/check.js +197 -0
  46. package/dist/docs/decision-record.d.ts +34 -0
  47. package/dist/docs/decision-record.js +135 -0
  48. package/dist/docs/decisions.d.ts +16 -0
  49. package/dist/docs/decisions.js +103 -0
  50. package/dist/docs/markdown.d.ts +36 -0
  51. package/dist/docs/markdown.js +88 -0
  52. package/dist/docs/references.d.ts +32 -0
  53. package/dist/docs/references.js +148 -0
  54. package/dist/emit.d.ts +22 -0
  55. package/dist/emit.js +43 -0
  56. package/dist/entrypoint-kinds.d.ts +3 -0
  57. package/dist/entrypoint-kinds.js +11 -0
  58. package/dist/environment/application/confirm.d.ts +35 -0
  59. package/dist/environment/application/confirm.js +122 -0
  60. package/dist/environment/application/destructive.d.ts +6 -0
  61. package/dist/environment/application/destructive.js +429 -0
  62. package/dist/environment/application/doctor.d.ts +94 -0
  63. package/dist/environment/application/doctor.js +247 -0
  64. package/dist/environment/application/guard.d.ts +49 -0
  65. package/dist/environment/application/guard.js +677 -0
  66. package/dist/environment/application/health.d.ts +143 -0
  67. package/dist/environment/application/health.js +385 -0
  68. package/dist/environment/application/lifecycle-context.d.ts +235 -0
  69. package/dist/environment/application/lifecycle-context.js +154 -0
  70. package/dist/environment/application/lifecycle-state.d.ts +25 -0
  71. package/dist/environment/application/lifecycle-state.js +202 -0
  72. package/dist/environment/application/lifecycle.d.ts +18 -0
  73. package/dist/environment/application/lifecycle.js +737 -0
  74. package/dist/environment/application/logs.d.ts +45 -0
  75. package/dist/environment/application/logs.js +127 -0
  76. package/dist/environment/application/services.d.ts +60 -0
  77. package/dist/environment/application/services.js +89 -0
  78. package/dist/environment/application/setup.d.ts +129 -0
  79. package/dist/environment/application/setup.js +741 -0
  80. package/dist/environment/application/shared.d.ts +11 -0
  81. package/dist/environment/application/shared.js +61 -0
  82. package/dist/environment/application/siblings.d.ts +43 -0
  83. package/dist/environment/application/siblings.js +269 -0
  84. package/dist/environment/claims.d.ts +389 -0
  85. package/dist/environment/claims.js +1701 -0
  86. package/dist/environment/codex-hook-trust.d.ts +11 -0
  87. package/dist/environment/codex-hook-trust.js +185 -0
  88. package/dist/environment/compose-environment.d.ts +1 -0
  89. package/dist/environment/compose-environment.js +6 -0
  90. package/dist/environment/compose-ownership.d.ts +21 -0
  91. package/dist/environment/compose-ownership.js +117 -0
  92. package/dist/environment/compose-topology.d.ts +125 -0
  93. package/dist/environment/compose-topology.js +490 -0
  94. package/dist/environment/contract.d.ts +522 -0
  95. package/dist/environment/contract.js +794 -0
  96. package/dist/environment/declaration.d.ts +14 -0
  97. package/dist/environment/declaration.js +39 -0
  98. package/dist/environment/destructive-composition.d.ts +29 -0
  99. package/dist/environment/destructive-composition.js +333 -0
  100. package/dist/environment/docker-daemon.d.ts +30 -0
  101. package/dist/environment/docker-daemon.js +78 -0
  102. package/dist/environment/docker-endpoint.d.ts +10 -0
  103. package/dist/environment/docker-endpoint.js +19 -0
  104. package/dist/environment/env-schema-observation.d.ts +46 -0
  105. package/dist/environment/env-schema-observation.js +241 -0
  106. package/dist/environment/evidence.d.ts +136 -0
  107. package/dist/environment/evidence.js +437 -0
  108. package/dist/environment/executable.d.ts +38 -0
  109. package/dist/environment/executable.js +190 -0
  110. package/dist/environment/generated-application/authorities.d.ts +5 -0
  111. package/dist/environment/generated-application/authorities.js +61 -0
  112. package/dist/environment/generated-application/bootstrap-skill.d.ts +16 -0
  113. package/dist/environment/generated-application/bootstrap-skill.js +328 -0
  114. package/dist/environment/generated-application/check.d.ts +13 -0
  115. package/dist/environment/generated-application/check.js +191 -0
  116. package/dist/environment/generated-application/custom-surface.d.ts +26 -0
  117. package/dist/environment/generated-application/custom-surface.js +289 -0
  118. package/dist/environment/generated-application/prepare.d.ts +29 -0
  119. package/dist/environment/generated-application/prepare.js +278 -0
  120. package/dist/environment/generated-application/publication.d.ts +33 -0
  121. package/dist/environment/generated-application/publication.js +547 -0
  122. package/dist/environment/generated-application/shared.d.ts +492 -0
  123. package/dist/environment/generated-application/shared.js +354 -0
  124. package/dist/environment/generated-application/surface-observation.d.ts +4 -0
  125. package/dist/environment/generated-application/surface-observation.js +69 -0
  126. package/dist/environment/generated-application/surface-outputs.d.ts +71 -0
  127. package/dist/environment/generated-application/surface-outputs.js +400 -0
  128. package/dist/environment/generated-application/surfaces.d.ts +3 -0
  129. package/dist/environment/generated-application/surfaces.js +704 -0
  130. package/dist/environment/generated-application/sync.d.ts +6 -0
  131. package/dist/environment/generated-application/sync.js +124 -0
  132. package/dist/environment/git-observation.d.ts +202 -0
  133. package/dist/environment/git-observation.js +553 -0
  134. package/dist/environment/health-composition.d.ts +12 -0
  135. package/dist/environment/health-composition.js +645 -0
  136. package/dist/environment/host-observation.d.ts +56 -0
  137. package/dist/environment/host-observation.js +52 -0
  138. package/dist/environment/identity.d.ts +48 -0
  139. package/dist/environment/identity.js +85 -0
  140. package/dist/environment/init-application.d.ts +333 -0
  141. package/dist/environment/init-application.js +726 -0
  142. package/dist/environment/install-policy-observation.d.ts +71 -0
  143. package/dist/environment/install-policy-observation.js +284 -0
  144. package/dist/environment/install-policy.d.ts +48 -0
  145. package/dist/environment/install-policy.js +96 -0
  146. package/dist/environment/instance.d.ts +33 -0
  147. package/dist/environment/instance.js +122 -0
  148. package/dist/environment/instruction-pointer.d.ts +19 -0
  149. package/dist/environment/instruction-pointer.js +144 -0
  150. package/dist/environment/lifecycle-composition.d.ts +31 -0
  151. package/dist/environment/lifecycle-composition.js +742 -0
  152. package/dist/environment/lifecycle-stage.d.ts +120 -0
  153. package/dist/environment/lifecycle-stage.js +408 -0
  154. package/dist/environment/lifecycle.d.ts +75 -0
  155. package/dist/environment/lifecycle.js +354 -0
  156. package/dist/environment/logs.d.ts +132 -0
  157. package/dist/environment/logs.js +519 -0
  158. package/dist/environment/map-limit.d.ts +2 -0
  159. package/dist/environment/map-limit.js +13 -0
  160. package/dist/environment/mcp-observation.d.ts +9 -0
  161. package/dist/environment/mcp-observation.js +46 -0
  162. package/dist/environment/observations.d.ts +46 -0
  163. package/dist/environment/observations.js +346 -0
  164. package/dist/environment/operator-application.d.ts +79 -0
  165. package/dist/environment/operator-application.js +197 -0
  166. package/dist/environment/ports.d.ts +182 -0
  167. package/dist/environment/ports.js +1205 -0
  168. package/dist/environment/posture-observation.d.ts +68 -0
  169. package/dist/environment/posture-observation.js +253 -0
  170. package/dist/environment/presence.d.ts +4 -0
  171. package/dist/environment/presence.js +26 -0
  172. package/dist/environment/read-composition.d.ts +32 -0
  173. package/dist/environment/read-composition.js +397 -0
  174. package/dist/environment/readiness-composition.d.ts +57 -0
  175. package/dist/environment/readiness-composition.js +151 -0
  176. package/dist/environment/reclaim.d.ts +370 -0
  177. package/dist/environment/reclaim.js +1940 -0
  178. package/dist/environment/repository-identity.d.ts +13 -0
  179. package/dist/environment/repository-identity.js +108 -0
  180. package/dist/environment/runtime-measurement-record.d.ts +38 -0
  181. package/dist/environment/runtime-measurement-record.js +111 -0
  182. package/dist/environment/runtime-measurement.d.ts +27 -0
  183. package/dist/environment/runtime-measurement.js +224 -0
  184. package/dist/environment/runtime-probe-residue.d.ts +43 -0
  185. package/dist/environment/runtime-probe-residue.js +148 -0
  186. package/dist/environment/runtime-probe.d.ts +72 -0
  187. package/dist/environment/runtime-probe.js +725 -0
  188. package/dist/environment/runtime.d.ts +551 -0
  189. package/dist/environment/runtime.js +2405 -0
  190. package/dist/environment/seed.d.ts +16 -0
  191. package/dist/environment/seed.js +43 -0
  192. package/dist/environment/selftest-application.d.ts +86 -0
  193. package/dist/environment/selftest-application.js +713 -0
  194. package/dist/environment/sensitive.d.ts +3 -0
  195. package/dist/environment/sensitive.js +48 -0
  196. package/dist/environment/served-checkout-grants.d.ts +53 -0
  197. package/dist/environment/served-checkout-grants.js +182 -0
  198. package/dist/environment/setup-observation.d.ts +62 -0
  199. package/dist/environment/setup-observation.js +1473 -0
  200. package/dist/environment/setup.d.ts +43 -0
  201. package/dist/environment/setup.js +176 -0
  202. package/dist/environment/sibling-checkouts.d.ts +119 -0
  203. package/dist/environment/sibling-checkouts.js +254 -0
  204. package/dist/environment/sibling-instructions.d.ts +33 -0
  205. package/dist/environment/sibling-instructions.js +224 -0
  206. package/dist/environment/sibling-observation.d.ts +27 -0
  207. package/dist/environment/sibling-observation.js +45 -0
  208. package/dist/environment/sibling-pull.d.ts +23 -0
  209. package/dist/environment/sibling-pull.js +95 -0
  210. package/dist/environment/sibling-registration.d.ts +45 -0
  211. package/dist/environment/sibling-registration.js +538 -0
  212. package/dist/environment/stack-inputs.d.ts +18 -0
  213. package/dist/environment/stack-inputs.js +210 -0
  214. package/dist/environment/stack-inventory-prune.d.ts +31 -0
  215. package/dist/environment/stack-inventory-prune.js +129 -0
  216. package/dist/environment/stack-inventory-report.d.ts +44 -0
  217. package/dist/environment/stack-inventory-report.js +78 -0
  218. package/dist/environment/stack-inventory.d.ts +94 -0
  219. package/dist/environment/stack-inventory.js +418 -0
  220. package/dist/environment/state.d.ts +410 -0
  221. package/dist/environment/state.js +2153 -0
  222. package/dist/environment/templates.d.ts +140 -0
  223. package/dist/environment/templates.js +685 -0
  224. package/dist/environment/tool-registration.d.ts +9 -0
  225. package/dist/environment/tool-registration.js +92 -0
  226. package/dist/environment/upgrade-application.d.ts +19 -0
  227. package/dist/environment/upgrade-application.js +175 -0
  228. package/dist/environment-exec/execute.d.ts +105 -0
  229. package/dist/environment-exec/execute.js +1179 -0
  230. package/dist/environment-exec/libexec-program.d.ts +6 -0
  231. package/dist/environment-exec/libexec-program.js +22 -0
  232. package/dist/environment-exec/verified-digest.d.ts +4 -0
  233. package/dist/environment-exec/verified-digest.js +16 -0
  234. package/dist/exact-keys.d.ts +7 -0
  235. package/dist/exact-keys.js +15 -0
  236. package/dist/fix-catalogue.d.ts +32 -0
  237. package/dist/fix-catalogue.js +60 -0
  238. package/dist/freshness.d.ts +29 -0
  239. package/dist/freshness.js +75 -0
  240. package/dist/generated-environment/adopt.d.ts +16 -0
  241. package/dist/generated-environment/adopt.js +271 -0
  242. package/dist/generated-environment/command.d.ts +47 -0
  243. package/dist/generated-environment/command.js +75 -0
  244. package/dist/generated-environment/transaction.d.ts +186 -0
  245. package/dist/generated-environment/transaction.js +1770 -0
  246. package/dist/grading/evaluate.d.ts +71 -0
  247. package/dist/grading/evaluate.js +403 -0
  248. package/dist/grading/grade.d.ts +33 -0
  249. package/dist/grading/grade.js +57 -0
  250. package/dist/guards/answer-confirmation.d.ts +41 -0
  251. package/dist/guards/answer-confirmation.js +109 -0
  252. package/dist/guards/evaluator.d.ts +130 -0
  253. package/dist/guards/evaluator.js +1258 -0
  254. package/dist/guards/harness-adapter.d.ts +17 -0
  255. package/dist/guards/harness-adapter.js +57 -0
  256. package/dist/guards/host.d.ts +8 -0
  257. package/dist/guards/host.js +10 -0
  258. package/dist/guards/invocation-parser.d.ts +66 -0
  259. package/dist/guards/invocation-parser.js +595 -0
  260. package/dist/guards/local-identity.d.ts +44 -0
  261. package/dist/guards/local-identity.js +129 -0
  262. package/dist/guards/policy-change.d.ts +43 -0
  263. package/dist/guards/policy-change.js +159 -0
  264. package/dist/guards/policy-pin.d.ts +13 -0
  265. package/dist/guards/policy-pin.js +177 -0
  266. package/dist/guards/protected-locations.d.ts +62 -0
  267. package/dist/guards/protected-locations.js +461 -0
  268. package/dist/guards/read-only.d.ts +37 -0
  269. package/dist/guards/read-only.js +315 -0
  270. package/dist/init/command.d.ts +41 -0
  271. package/dist/init/command.js +330 -0
  272. package/dist/init/derive.d.ts +53 -0
  273. package/dist/init/derive.js +819 -0
  274. package/dist/init/draft.d.ts +140 -0
  275. package/dist/init/draft.js +1228 -0
  276. package/dist/init/render.d.ts +47 -0
  277. package/dist/init/render.js +104 -0
  278. package/dist/init/scaffold.d.ts +53 -0
  279. package/dist/init/scaffold.js +121 -0
  280. package/dist/invocation.d.ts +13 -0
  281. package/dist/invocation.js +20 -0
  282. package/dist/package-metadata.d.ts +9 -0
  283. package/dist/package-metadata.js +19 -0
  284. package/dist/readiness.d.ts +53 -0
  285. package/dist/readiness.js +88 -0
  286. package/dist/references/named.d.ts +24 -0
  287. package/dist/references/named.js +27 -0
  288. package/dist/refusal.d.ts +15 -0
  289. package/dist/refusal.js +7 -0
  290. package/dist/registry-derivation.d.ts +31 -0
  291. package/dist/registry-derivation.js +32 -0
  292. package/dist/registry-resolve/command.d.ts +47 -0
  293. package/dist/registry-resolve/command.js +226 -0
  294. package/dist/registry-resolve/registry.d.ts +68 -0
  295. package/dist/registry-resolve/registry.js +292 -0
  296. package/dist/registry-resolve/render-shell.d.ts +18 -0
  297. package/dist/registry-resolve/render-shell.js +36 -0
  298. package/dist/repair.d.ts +29 -0
  299. package/dist/repair.js +8 -0
  300. package/dist/repository-path.d.ts +9 -0
  301. package/dist/repository-path.js +16 -0
  302. package/dist/schema-json.d.ts +1 -0
  303. package/dist/schema-json.js +177 -0
  304. package/dist/schema.d.ts +1289 -0
  305. package/dist/schema.js +985 -0
  306. package/dist/setup/command.d.ts +4 -0
  307. package/dist/setup/command.js +4 -0
  308. package/dist/sha256.d.ts +1 -0
  309. package/dist/sha256.js +4 -0
  310. package/dist/surfaces/adoption.d.ts +41 -0
  311. package/dist/surfaces/adoption.js +217 -0
  312. package/dist/surfaces/consumer-instructions.d.ts +20 -0
  313. package/dist/surfaces/consumer-instructions.js +43 -0
  314. package/dist/surfaces/contract.d.ts +42 -0
  315. package/dist/surfaces/contract.js +169 -0
  316. package/dist/surfaces/core-declarations.d.ts +24 -0
  317. package/dist/surfaces/core-declarations.js +79 -0
  318. package/dist/surfaces/development-markers.d.ts +1 -0
  319. package/dist/surfaces/development-markers.js +18 -0
  320. package/dist/surfaces/generator-adapter.d.ts +71 -0
  321. package/dist/surfaces/generator-adapter.js +809 -0
  322. package/dist/surfaces/harness-registry.d.ts +260 -0
  323. package/dist/surfaces/harness-registry.js +146 -0
  324. package/dist/surfaces/mcp.d.ts +145 -0
  325. package/dist/surfaces/mcp.js +349 -0
  326. package/dist/surfaces/merge.d.ts +30 -0
  327. package/dist/surfaces/merge.js +105 -0
  328. package/dist/surfaces/ownership.d.ts +190 -0
  329. package/dist/surfaces/ownership.js +795 -0
  330. package/dist/surfaces/projection.d.ts +136 -0
  331. package/dist/surfaces/projection.js +716 -0
  332. package/dist/surfaces/render.d.ts +79 -0
  333. package/dist/surfaces/render.js +636 -0
  334. package/dist/surfaces/restrictions.d.ts +130 -0
  335. package/dist/surfaces/restrictions.js +447 -0
  336. package/dist/surfaces/selftest.d.ts +162 -0
  337. package/dist/surfaces/selftest.js +393 -0
  338. package/dist/surfaces/skill-contract.d.ts +85 -0
  339. package/dist/surfaces/skill-contract.js +449 -0
  340. package/dist/surfaces/sync.d.ts +57 -0
  341. package/dist/surfaces/sync.js +164 -0
  342. package/dist/team-metadata.d.ts +41 -0
  343. package/dist/team-metadata.js +513 -0
  344. package/dist/testing/gates.d.ts +91 -0
  345. package/dist/testing/gates.js +182 -0
  346. package/dist/testing/hooks.d.ts +59 -0
  347. package/dist/testing/hooks.js +139 -0
  348. package/dist/testing/test-protection.d.ts +34 -0
  349. package/dist/testing/test-protection.js +137 -0
  350. package/dist/testing/verdict.d.ts +29 -0
  351. package/dist/testing/verdict.js +62 -0
  352. package/dist/testing/weakening.d.ts +15 -0
  353. package/dist/testing/weakening.js +30 -0
  354. package/dist/work-orders/application-closure.d.ts +7 -0
  355. package/dist/work-orders/application-closure.js +76 -0
  356. package/dist/work-orders/application-context.d.ts +162 -0
  357. package/dist/work-orders/application-context.js +137 -0
  358. package/dist/work-orders/application-decisions.d.ts +27 -0
  359. package/dist/work-orders/application-decisions.js +121 -0
  360. package/dist/work-orders/application-grading.d.ts +11 -0
  361. package/dist/work-orders/application-grading.js +212 -0
  362. package/dist/work-orders/application.d.ts +6 -0
  363. package/dist/work-orders/application.js +223 -0
  364. package/dist/work-orders/composition.d.ts +101 -0
  365. package/dist/work-orders/composition.js +1202 -0
  366. package/dist/work-orders/contract.d.ts +77 -0
  367. package/dist/work-orders/contract.js +140 -0
  368. package/dist/work-orders/decisions.d.ts +23 -0
  369. package/dist/work-orders/decisions.js +55 -0
  370. package/dist/work-orders/store.d.ts +207 -0
  371. package/dist/work-orders/store.js +291 -0
  372. package/docs/README.md +68 -0
  373. package/docs/architecture.md +136 -0
  374. package/docs/capability-matrix.md +58 -0
  375. package/docs/cli-reference.md +807 -0
  376. package/docs/command-list.md +62 -0
  377. package/docs/compose-patterns.md +99 -0
  378. package/docs/concepts.md +173 -0
  379. package/docs/configuration-essentials.md +177 -0
  380. package/docs/configuration-reference.md +636 -0
  381. package/docs/docs-check.md +76 -0
  382. package/docs/environment.md +948 -0
  383. package/docs/extending.md +43 -0
  384. package/docs/faq.md +113 -0
  385. package/docs/getting-started.md +692 -0
  386. package/docs/harness-surfaces.md +500 -0
  387. package/docs/joining-a-team.md +76 -0
  388. package/docs/release-policy.md +49 -0
  389. package/docs/safety-and-autonomy.md +463 -0
  390. package/docs/troubleshooting.md +382 -0
  391. package/docs/tutorial.md +171 -0
  392. package/docs/work-and-browser.md +420 -0
  393. package/libexec/browser-operation.cjs +270 -0
  394. package/libexec/fence-marker.cjs +101 -0
  395. package/libexec/fence-marker.d.cts +24 -0
  396. package/libexec/fenced-group-runner.cjs +77 -0
  397. package/libexec/fenced-supervisor.cjs +137 -0
  398. package/libexec/generated-filesystem.cjs +731 -0
  399. package/libexec/install-filesystem.cjs +225 -0
  400. package/libexec/rulesync-generator.NOTICE.md +1112 -0
  401. package/libexec/rulesync-generator.cjs +743 -0
  402. package/libexec/surface-generator-worker.cjs +266 -0
  403. package/libexec/surface-output-reader.cjs +99 -0
  404. package/libexec/surface-scratch-cleanup.cjs +14 -0
  405. package/libexec/validate-harness-evidence.d.mts +183 -0
  406. package/libexec/validate-harness-evidence.mjs +1312 -0
  407. package/package.json +74 -4
  408. package/surfaces/README.md +33 -0
  409. package/surfaces/agents/evaluator.agent.md +76 -0
  410. package/surfaces/guards/bash-guard.sh +48 -0
  411. package/surfaces/guards/claude.adapter.json +25 -0
  412. package/surfaces/guards/codex.adapter.json +24 -0
  413. package/surfaces/guards/opencode.adapter.json +25 -0
  414. package/surfaces/references/browser.md +63 -0
  415. package/surfaces/references/test-data-and-personas.md +84 -0
  416. package/surfaces/references/testing-tiers.md +11 -0
  417. package/surfaces/skills/cockpit-browser.skill.md +59 -0
  418. package/surfaces/skills/cockpit-explain.skill.md +32 -0
  419. package/surfaces/skills/cockpit-fix.skill.md +37 -0
  420. package/surfaces/skills/cockpit-setup.skill.md +39 -0
  421. package/surfaces/skills/cockpit-work.skill.md +34 -0
  422. package/surfaces/skills/collection.json +5 -0
  423. package/surfaces/skills/procedures/explain.md +66 -0
  424. package/surfaces/skills/procedures/fix.md +95 -0
  425. package/surfaces/skills/procedures/setup.md +452 -0
  426. package/surfaces/skills/procedures/work.md +134 -0
@@ -0,0 +1,241 @@
1
+ // Owns: observing the env-schema status of siblings that have adopted Varlock (they contain a
2
+ // `.env.schema`). Must not: read, keep or print a resolved value, decide the health verdict
3
+ // (observations.ts), or spawn a process itself (environment-exec/execute.ts runs the step).
4
+ // Varlock is optional, so a sibling without `.env.schema` is not observed at all and an absent
5
+ // binary is advisory. Handed off to: health-composition.ts (producer) and application/health.ts (rows,
6
+ // diagnostics).
7
+ //
8
+ // `varlock load --agent` still prints partial values, and its error messages can quote a value, so
9
+ // the report is reduced to key names, the sensitive flag and a validity category the moment it is
10
+ // parsed. Nothing else leaves this module.
11
+ import { stat } from 'node:fs/promises';
12
+ import { join } from 'node:path';
13
+ import { authenticatedExecutionOutcome } from '../environment-exec/execute.js';
14
+ import { isMissing, RefusalError, ENVIRONMENT_CODES, errorCause, isCanonicalTimestamp, snapshotEnvironmentObservation, snapshotExecutionStep, } from './contract.js';
15
+ import { resolveExecutable } from './executable.js';
16
+ const OWNER = 'env-schema-observation';
17
+ const ENV_SCHEMA_FILE = '.env.schema';
18
+ export const VARLOCK_INSTALL_URL = 'https://varlock.dev';
19
+ export const observationDeclarations = Object.freeze([
20
+ { id: 'env-schema', owner: OWNER, postures: ['environment'], stages: [{ stage: 'bootstrap', disposition: 'required' }, { stage: 'steady', disposition: 'required' }], code: ENVIRONMENT_CODES.ENV_SCHEMA_UNHEALTHY, isIssued: isEnvSchemaObservation, issuedAt: observationIssuedAt },
21
+ ]);
22
+ const issuedObservations = new WeakMap();
23
+ function issueObservation(value) {
24
+ const snapshot = snapshotEnvironmentObservation(value);
25
+ if (!snapshot || snapshot.owner !== OWNER)
26
+ throw new RefusalError('env-schema observation is malformed');
27
+ issuedObservations.set(snapshot, Date.now());
28
+ return snapshot;
29
+ }
30
+ function isEnvSchemaObservation(value) {
31
+ return value !== null && typeof value === 'object' && issuedObservations.has(value);
32
+ }
33
+ function observationIssuedAt(value) {
34
+ return value !== null && typeof value === 'object' ? issuedObservations.get(value) : undefined;
35
+ }
36
+ const STDOUT_LIMIT_BYTES = 262_144;
37
+ const STDERR_LIMIT_BYTES = 16_384;
38
+ const KEY_LIMIT = 4_096;
39
+ const KEY_NAME = /^[A-Za-z_][A-Za-z0-9_]{0,127}$/;
40
+ const REASON_BUDGET_BYTES = 900;
41
+ function isRecord(value) {
42
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
43
+ }
44
+ // Reads the key names and error categories out of a `--format json-full` report and drops
45
+ // everything else, including every `value` and every error message (a message may quote a value).
46
+ function reduceReport(stdout) {
47
+ let parsed;
48
+ try {
49
+ parsed = JSON.parse(stdout.toString('utf8'));
50
+ }
51
+ catch { // Parser text would quote varlock output, which can hold environment values.
52
+ return { kind: 'malformed' };
53
+ }
54
+ if (!isRecord(parsed) || !isRecord(parsed.config))
55
+ return { kind: 'malformed' };
56
+ const names = Object.keys(parsed.config);
57
+ if (names.length > KEY_LIMIT)
58
+ return { kind: 'malformed' };
59
+ const failures = [];
60
+ let schemaError = false;
61
+ const errors = parsed.errors;
62
+ if (errors !== undefined) {
63
+ const items = isRecord(errors) ? errors.configItems : undefined;
64
+ if (isRecord(items)) {
65
+ for (const [key, message] of Object.entries(items)) {
66
+ if (!KEY_NAME.test(key) || typeof message !== 'string')
67
+ return { kind: 'malformed' };
68
+ failures.push({ key, problem: /required/i.test(message) ? 'missing-required' : 'invalid' });
69
+ }
70
+ }
71
+ if (failures.length === 0)
72
+ schemaError = true;
73
+ }
74
+ return { kind: 'report', keys: names.length, failures: failures.sort((a, b) => a.key < b.key ? -1 : 1), schemaError };
75
+ }
76
+ async function hasEnvSchema(root) {
77
+ try {
78
+ return { adopted: (await stat(join(root, ENV_SCHEMA_FILE))).isFile() };
79
+ }
80
+ catch (error) {
81
+ if (isMissing(error))
82
+ return { adopted: false };
83
+ return { adopted: true, unreadable: `${ENV_SCHEMA_FILE} could not be inspected (${errorCause(error)})` };
84
+ }
85
+ }
86
+ function createStep(input) {
87
+ const { executable, sibling } = input;
88
+ return snapshotExecutionStep({
89
+ id: `env-schema:${sibling.slug}`,
90
+ argv: [executable.canonicalPath, 'load', '--agent', '--format', 'json-full', '--path', sibling.root],
91
+ argv0: executable.invocationPath,
92
+ cwd: sibling.root,
93
+ env: input.env,
94
+ timeoutMs: input.timeoutMs,
95
+ stdoutLimitBytes: STDOUT_LIMIT_BYTES,
96
+ stderrLimitBytes: STDERR_LIMIT_BYTES,
97
+ paths: [],
98
+ ports: [],
99
+ labels: { producer: 'env-schema', stackId: input.stackId, sibling: sibling.slug },
100
+ expected: [{ kind: 'path', target: sibling.root, state: 'directory' }],
101
+ consumedFiles: [{ path: executable.canonicalPath, sha256: executable.sha256, maxBytes: 536_870_912, argvIndexes: [0], executable: true, executionMode: executable.executionMode }],
102
+ filesystemChecks: [],
103
+ compensation: [],
104
+ });
105
+ }
106
+ function describeFailure(outcome, timeoutMs) {
107
+ switch (outcome.code) {
108
+ case ENVIRONMENT_CODES.EXECUTION_TIMEOUT:
109
+ return `varlock timed out after ${timeoutMs} ms (a secret provider may be prompting or unreachable)`;
110
+ case ENVIRONMENT_CODES.EXECUTION_STDOUT_LIMIT:
111
+ return `varlock output exceeded ${STDOUT_LIMIT_BYTES} bytes`;
112
+ case ENVIRONMENT_CODES.EXECUTION_SPAWN_FAILED:
113
+ return 'varlock could not be started';
114
+ default:
115
+ return `varlock failed (${outcome.code}, exit status ${outcome.execution.exitCode}) without a readable report`;
116
+ }
117
+ }
118
+ async function checkSibling(sibling, executable, input, execute) {
119
+ if (!executable)
120
+ return { state: 'tool-missing' };
121
+ const step = createStep({ executable, sibling, ...input });
122
+ if (!step)
123
+ return { state: 'unavailable', cause: 'varlock invocation could not be planned' };
124
+ let raw;
125
+ try {
126
+ raw = await execute(step);
127
+ }
128
+ catch (error) {
129
+ return { state: 'unavailable', cause: `varlock execution is unavailable: ${errorCause(error)}` };
130
+ }
131
+ const outcome = authenticatedExecutionOutcome(raw, step);
132
+ if (!outcome)
133
+ return { state: 'unavailable', cause: 'varlock execution evidence is unauthenticated' };
134
+ // Varlock exits nonzero when validation fails but still prints the report, so a refusal
135
+ // for a plain nonzero exit is still decoded.
136
+ const exitedNonzero = outcome.kind === 'refusal' && outcome.code === ENVIRONMENT_CODES.EXECUTION_STEP_FAILED
137
+ && outcome.execution.signal === null;
138
+ if (outcome.kind === 'refusal' && !exitedNonzero)
139
+ return { state: 'unavailable', cause: describeFailure(outcome, input.timeoutMs) };
140
+ const report = reduceReport(outcome.stdout);
141
+ if (report.kind === 'malformed') {
142
+ return {
143
+ state: 'unavailable',
144
+ cause: outcome.kind === 'refusal'
145
+ ? describeFailure(outcome, input.timeoutMs)
146
+ : 'varlock produced a report in an unrecognised shape',
147
+ };
148
+ }
149
+ if (report.failures.length > 0 || report.schemaError) {
150
+ return { state: 'invalid', failures: report.failures, schemaError: report.schemaError };
151
+ }
152
+ return outcome.kind === 'refusal'
153
+ ? { state: 'unavailable', cause: describeFailure(outcome, input.timeoutMs) }
154
+ : { state: 'valid', keys: report.keys };
155
+ }
156
+ function bounded(text) {
157
+ if (Buffer.byteLength(text) <= REASON_BUDGET_BYTES)
158
+ return text;
159
+ return `${Buffer.from(text).subarray(0, REASON_BUDGET_BYTES).toString('utf8').replace(/�$/, '')}...`;
160
+ }
161
+ function invalidSummary(sibling, status) {
162
+ const group = (problem) => status.failures.filter((failure) => failure.problem === problem).map(({ key }) => key);
163
+ const parts = [
164
+ ...(group('missing-required').length > 0 ? [`missing required ${group('missing-required').join(', ')}`] : []),
165
+ ...(group('invalid').length > 0 ? [`invalid ${group('invalid').join(', ')}`] : []),
166
+ ...(status.schemaError && status.failures.length === 0 ? ['schema could not be loaded'] : []),
167
+ ];
168
+ return `${sibling.slug} (${sibling.dir}): ${parts.join('; ')}`;
169
+ }
170
+ /**
171
+ * Observes every sibling that contains `.env.schema`. Returns one aggregate observation per
172
+ * stack, with the per-sibling status in its measured value. `env` is the caller's environment:
173
+ * a secret provider may need its own variables to resolve.
174
+ */
175
+ export async function observeEnvSchemas(input, options) {
176
+ const detected = await Promise.all(input.siblings.map(async (sibling) => ({ sibling, ...(await hasEnvSchema(sibling.root)) })));
177
+ const adopted = detected.filter(({ adopted }) => adopted);
178
+ const needsBinary = adopted.some(({ unreadable }) => unreadable === undefined);
179
+ const resolved = needsBinary ? await resolveExecutable('varlock', input.env) : undefined;
180
+ const executable = resolved?.state === 'available' ? resolved.value : undefined;
181
+ const shared = {
182
+ env: Object.fromEntries(Object.entries(input.env)
183
+ .filter((entry) => typeof entry[1] === 'string')),
184
+ timeoutMs: input.timeoutMs,
185
+ stackId: input.stackId,
186
+ };
187
+ const statuses = await Promise.all(adopted.map(async ({ sibling, unreadable }) => [sibling, unreadable !== undefined
188
+ ? { state: 'unavailable', cause: unreadable }
189
+ : await checkSibling(sibling, executable, shared, options.execute)]));
190
+ const observedAt = new Date().toISOString();
191
+ if (!isCanonicalTimestamp(observedAt))
192
+ throw new RefusalError('env-schema observation timestamp is not canonical');
193
+ const common = {
194
+ code: ENVIRONMENT_CODES.ENV_SCHEMA_UNHEALTHY,
195
+ owner: OWNER,
196
+ stackId: input.stackId,
197
+ source: 'env-schema',
198
+ applicability: { state: 'required', posture: 'environment' },
199
+ freshness: { state: 'current' },
200
+ };
201
+ const invalid = statuses.flatMap(([sibling, status]) => status.state === 'invalid' ? [[sibling, status]] : []);
202
+ const unavailable = statuses.flatMap(([sibling, status]) => status.state === 'unavailable' ? [[sibling, status]] : []);
203
+ const remedy = 'run `varlock load` in each named sibling directory and fix the reported keys';
204
+ if (invalid.length > 0) {
205
+ return [issueObservation({
206
+ ...common,
207
+ observed: { state: 'failed', reason: bounded(`env schema is invalid in ${invalid.map(([sibling, status]) => invalidSummary(sibling, status)).join('; ')}`), observedAt },
208
+ expectation: { kind: 'equal', value: true },
209
+ remedy,
210
+ })];
211
+ }
212
+ if (unavailable.length > 0) {
213
+ return [issueObservation({
214
+ ...common,
215
+ observed: { state: 'unavailable', reason: bounded(`env schema could not be checked: ${unavailable.map(([sibling, status]) => `${sibling.slug} (${sibling.dir}): ${status.cause}`).join('; ')}`), observedAt },
216
+ expectation: { kind: 'equal', value: true },
217
+ remedy,
218
+ })];
219
+ }
220
+ // An absent varlock binary is advisory because varlock is optional; applicationDiagnostics
221
+ // turns it into a warning instead of a failing row.
222
+ const entries = statuses
223
+ .map(([sibling, status]) => status.state === 'valid'
224
+ ? { sibling: sibling.slug, state: 'valid', keys: status.keys }
225
+ : { sibling: sibling.slug, state: 'tool-missing' })
226
+ .sort((a, b) => a.sibling < b.sibling ? -1 : 1);
227
+ const measured = entries;
228
+ return [issueObservation({
229
+ ...common,
230
+ observed: { state: 'available', value: measured, observedAt },
231
+ expectation: { kind: 'equal', value: measured },
232
+ remedy: `install Varlock (${VARLOCK_INSTALL_URL}) to validate the env schema`,
233
+ })];
234
+ }
235
+ /** Siblings whose schema was skipped because varlock is not installed, from a passing row. */
236
+ export function envSchemaToolMissing(check) {
237
+ if (check.owner !== OWNER || check.verdict !== 'pass' || !Array.isArray(check.measured))
238
+ return [];
239
+ return check.measured.flatMap((entry) => isRecord(entry) && entry.state === 'tool-missing' && typeof entry.sibling === 'string'
240
+ ? [entry.sibling] : []);
241
+ }
@@ -0,0 +1,136 @@
1
+ import { type ExecuteProbeOutcome } from '../environment-exec/execute.js';
2
+ import { ENVIRONMENT_CODES, type EnvironmentCommandOutcome, type EnvironmentDiagnostic, type ExecutionFailureCode, type StackId } from './contract.js';
3
+ import { type ResolvedExecutable } from './executable.js';
4
+ export declare const STABILITY_CAPTURE_OUTPUT_LIMIT_BYTES = 65536;
5
+ type JsonPrimitive = null | boolean | number | string;
6
+ export type JsonValue = JsonPrimitive | readonly JsonValue[] | {
7
+ readonly [key: string]: JsonValue;
8
+ };
9
+ export interface EnvironmentSnapshotInput {
10
+ readonly stackId: StackId;
11
+ readonly configSha256: string;
12
+ readonly createdAt: string;
13
+ readonly creationSource: 'resolved-config';
14
+ readonly intendedState: JsonValue;
15
+ }
16
+ export interface EnvironmentSnapshot {
17
+ readonly artifact: 'generated-environment-snapshot';
18
+ readonly schemaVersion: 1;
19
+ readonly stackId: StackId;
20
+ readonly configSha256: string;
21
+ readonly createdAt: string;
22
+ readonly creationSource: string;
23
+ readonly intendedState: JsonValue;
24
+ readonly snapshotSha256: string;
25
+ }
26
+ export declare function createEnvironmentSnapshot(input: EnvironmentSnapshotInput): EnvironmentSnapshot;
27
+ export interface StabilityCapturePlanInput {
28
+ readonly stackId: StackId;
29
+ readonly configSha256: string;
30
+ readonly runtimeExecutable: ResolvedExecutable;
31
+ readonly cwd: string;
32
+ readonly env: Readonly<Record<string, string>>;
33
+ readonly containerId: string;
34
+ readonly batchId: string;
35
+ readonly runtime: {
36
+ readonly name: string;
37
+ readonly version: string;
38
+ };
39
+ readonly contentPaths: readonly string[];
40
+ readonly timeoutMs: number;
41
+ readonly outputLimitBytes: number;
42
+ }
43
+ export declare function createStabilityCapturePlan(rawInput: StabilityCapturePlanInput): EnvironmentCommandOutcome<null>;
44
+ declare const authenticatedCaptureBrand: unique symbol;
45
+ export interface AuthenticatedStabilityCapture {
46
+ readonly [authenticatedCaptureBrand]: true;
47
+ readonly stackId: StackId;
48
+ readonly configSha256: string;
49
+ readonly batchId: string;
50
+ readonly containerId: string;
51
+ readonly runtime: Readonly<{
52
+ name: string;
53
+ version: string;
54
+ executableSha256: string;
55
+ }>;
56
+ readonly startedAt: string;
57
+ readonly finishedAt: string;
58
+ readonly command: Readonly<{
59
+ stepIds: readonly [string, string];
60
+ timeoutMs: number;
61
+ stdoutLimitBytes: number;
62
+ stderrLimitBytes: number;
63
+ }>;
64
+ readonly observedBytes: Readonly<{
65
+ stdout: number;
66
+ stderr: number;
67
+ }>;
68
+ readonly processIdentity: string;
69
+ readonly contentHash: string;
70
+ }
71
+ export type StabilityStepResult = ExecuteProbeOutcome;
72
+ export declare function authenticateStabilityCapture(input: {
73
+ readonly plan: Extract<EnvironmentCommandOutcome<null>, {
74
+ kind: 'preview';
75
+ }>;
76
+ readonly results: readonly StabilityStepResult[];
77
+ }): AuthenticatedStabilityCapture | UnavailableRuntimeEvidence;
78
+ export interface RuntimeEvidenceInput {
79
+ readonly capture: AuthenticatedStabilityCapture;
80
+ }
81
+ export interface CapturedEvidenceCommand {
82
+ readonly batchId: string;
83
+ readonly containerId: string;
84
+ readonly stepIds: readonly [string, string];
85
+ readonly timeoutMs: number;
86
+ readonly stdoutLimitBytes: number;
87
+ readonly stderrLimitBytes: number;
88
+ }
89
+ export interface CapturedRuntimeEvidence {
90
+ readonly state: 'available';
91
+ readonly artifact: 'captured-runtime-evidence';
92
+ readonly schemaVersion: 1;
93
+ readonly stackId: StackId;
94
+ readonly configSha256: string;
95
+ readonly runtime: Readonly<{
96
+ name: string;
97
+ version: string;
98
+ executableSha256: string;
99
+ }>;
100
+ readonly observedAt: string;
101
+ readonly captureStartedAt: string;
102
+ readonly command: Readonly<CapturedEvidenceCommand>;
103
+ readonly observedBytes: Readonly<{
104
+ stdout: number;
105
+ stderr: number;
106
+ }>;
107
+ readonly stability: Readonly<{
108
+ processIdentitySha256: string;
109
+ contentHash: string;
110
+ }>;
111
+ readonly evidenceSha256: string;
112
+ }
113
+ export interface UnavailableRuntimeEvidence {
114
+ readonly state: 'unavailable';
115
+ readonly code: typeof ENVIRONMENT_CODES.EVIDENCE_UNAVAILABLE | ExecutionFailureCode;
116
+ readonly reason: string;
117
+ }
118
+ export type RuntimeEvidence = CapturedRuntimeEvidence | UnavailableRuntimeEvidence;
119
+ export declare function captureRuntimeEvidence(input: RuntimeEvidenceInput): RuntimeEvidence;
120
+ export type EnvironmentComparison = {
121
+ readonly verdict: 'stable';
122
+ readonly processIdentity: 'unchanged';
123
+ readonly contentHash: 'unchanged';
124
+ readonly diagnostics: readonly [];
125
+ } | {
126
+ readonly verdict: 'void';
127
+ readonly processIdentity: 'unchanged' | 'moved';
128
+ readonly contentHash: 'unchanged' | 'moved';
129
+ readonly diagnostics: readonly EnvironmentDiagnostic[];
130
+ } | {
131
+ readonly verdict: 'stale' | 'unavailable';
132
+ readonly diagnostics: readonly EnvironmentDiagnostic[];
133
+ };
134
+ export declare function compareEnvironmentSnapshot(rawSnapshot: EnvironmentSnapshot, rawBefore: RuntimeEvidence, rawAfter: RuntimeEvidence): EnvironmentComparison;
135
+ export declare function isRuntimeEvidenceAuthentic(rawEvidence: CapturedRuntimeEvidence): boolean;
136
+ export {};