@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,148 @@
1
+ import { hasErrorCode } from './contract.js';
2
+ /**
3
+ * Owns the leftovers of a `runtime measure` that was killed before the probe could clean up: the
4
+ * probe's containers, network and volume on the daemon, and the private `cockpit-runtime-measure-*`
5
+ * directory in the temp directory. The next measure removes what it can prove belongs to a dead
6
+ * measure of this cockpit and says what it removed; whatever it cannot prove dead it leaves and
7
+ * names. It never spawns a process itself: every Docker call crosses the supplied `run`, and liveness crosses `observe`.
8
+ */
9
+ import { lstat, readdir, readFile, rm, writeFile } from 'node:fs/promises';
10
+ import { join } from 'node:path';
11
+ import { isProcessGone, isProcessStart } from './claims.js';
12
+ export const MEASURE_DIRECTORY_PREFIX = 'cockpit-runtime-measure-';
13
+ const OWNER_FILE = 'owner';
14
+ // A directory with no owner file was killed between creation and its first write, or is being
15
+ // created right now; only age tells them apart, and a probe never outlives its five-minute window.
16
+ const UNOWNED_STALE_MS = 10 * 60_000;
17
+ const PROBE_LABEL = 'dev.b0dea.cockpit.probe';
18
+ /** Names the measure process that created a probe resource, as `<pid>` or `<pid>@<start identity>`. */
19
+ export const PROBE_OWNER_LABEL = 'dev.b0dea.cockpit.probe-owner';
20
+ const OWNER = /^([1-9][0-9]{0,9})(?:@(\S+))?$/;
21
+ const DOCKER_ID = /^[a-f0-9]{12,64}$/;
22
+ const DOCKER_NAME = /^[a-z0-9][a-z0-9_.-]{0,200}$/;
23
+ const MEASURE_DIRECTORY_NAME = new RegExp(`^${MEASURE_DIRECTORY_PREFIX}[A-Za-z0-9]{6}$`);
24
+ /** Mark a freshly created measure directory as owned by `owner` (see `PROBE_OWNER_LABEL`), so a later measure can tell it is alive. */
25
+ export async function claimMeasureDirectory(directory, owner) {
26
+ await writeFile(join(directory, OWNER_FILE), `${owner}\n`, { mode: 0o600 });
27
+ }
28
+ export function isProbeOwner(owner) {
29
+ const match = OWNER.exec(owner);
30
+ return match !== null && Number(match[1]) <= 2_147_483_647 && (match[2] === undefined || isProcessStart(match[2]));
31
+ }
32
+ // Only proof that the owner is gone marks it dead: a missing or malformed owner, a reused pid or a
33
+ // failed check keeps what it owns.
34
+ async function ownerGone(owner, observe) {
35
+ if (!isProbeOwner(owner))
36
+ return false;
37
+ const [, pid, start] = OWNER.exec(owner);
38
+ return isProcessGone(start, await observe(Number(pid)));
39
+ }
40
+ // One measure's directory, containers, network and volume share an owner; observe it once per sweep.
41
+ function cachedOwnerGone(observe) {
42
+ const gone = new Map();
43
+ return (owner) => {
44
+ let known = gone.get(owner);
45
+ if (known === undefined) {
46
+ known = ownerGone(owner, observe);
47
+ gone.set(owner, known);
48
+ }
49
+ return known;
50
+ };
51
+ }
52
+ async function measureDirectories(temporaryDirectory, uid, gone) {
53
+ const names = (await readdir(temporaryDirectory)).filter((name) => MEASURE_DIRECTORY_NAME.test(name));
54
+ const judged = await Promise.all(names.map(async (name) => {
55
+ const path = join(temporaryDirectory, name);
56
+ const status = await lstat(path);
57
+ // Only a real directory of this user: a symlink or someone else's directory is not ours to judge or delete.
58
+ if (!status.isDirectory() || status.isSymbolicLink() || (uid !== undefined && status.uid !== uid))
59
+ return undefined;
60
+ let owner;
61
+ try {
62
+ owner = (await readFile(join(path, OWNER_FILE), 'utf8')).trim();
63
+ }
64
+ catch (error) {
65
+ if (!hasErrorCode(error, 'ENOENT'))
66
+ throw error;
67
+ }
68
+ const alive = owner === undefined ? Date.now() - status.mtimeMs < UNOWNED_STALE_MS : !await gone(owner);
69
+ return { path, alive };
70
+ }));
71
+ return judged.filter((directory) => directory !== undefined);
72
+ }
73
+ const LISTING_FORMAT = (handle) => `{{.${handle}}}\t{{.Label "com.docker.compose.project"}}\t{{.Label "${PROBE_LABEL}"}}\t{{.Label "${PROBE_OWNER_LABEL}"}}`;
74
+ const LISTINGS = [
75
+ ['container', ['ps', '-a', '--no-trunc'], 'ID', DOCKER_ID],
76
+ ['network', ['network', 'ls', '--no-trunc'], 'ID', DOCKER_ID],
77
+ ['volume', ['volume', 'ls'], 'Name', DOCKER_NAME],
78
+ ];
79
+ async function discover(run) {
80
+ // The listings are independent reads; the results are walked in listing order so the first refusal named is stable.
81
+ const listings = await Promise.all(LISTINGS.map(([kind, command, handle]) => run(`runtime:measure:residue:${kind}`, [...command, '--filter', `label=${PROBE_LABEL}`, '--format', LISTING_FORMAT(handle)])));
82
+ const found = [];
83
+ for (const [index, listed] of listings.entries()) {
84
+ const [kind, , , valid] = LISTINGS[index];
85
+ if (listed.kind !== 'complete')
86
+ return `listing leftover probe ${kind}s failed (${listed.detail})`;
87
+ for (const line of listed.text.split('\n').filter(Boolean)) {
88
+ const [handle = '', project = '', batchLabel = '', owner = ''] = line.split('\t');
89
+ if (!valid.test(handle))
90
+ return `docker listed a probe ${kind} with an unexpected identity`;
91
+ found.push({ kind, handle, project, batchLabel, owner });
92
+ }
93
+ }
94
+ return found;
95
+ }
96
+ /**
97
+ * Remove this cockpit's probe resources left by a dead measure. A resource is the probe's only if
98
+ * it carries the probe label and a Compose project named `<projectPrefix>-probe-<batch>` (Compose
99
+ * appends the stack hash) whose batch matches the label, so a different cockpit's probe, or any other stack, is never touched.
100
+ * It is dead only when the measure its owner label names is provably gone. Liveness is read from
101
+ * the label on the shared daemon, not from the temp directory: agent tools give each session its
102
+ * own TMPDIR, so a concurrent measure's directory is invisible, and judging by it removed that
103
+ * measure's running probe. Anything not provably dead may be running now and is only reported.
104
+ */
105
+ export async function sweepProbeResidue(input) {
106
+ const gone = cachedOwnerGone(input.observe);
107
+ const directories = (await measureDirectories(input.temporaryDirectory, input.uid, gone)).filter(({ path }) => path !== input.ownDirectory);
108
+ const projectPattern = new RegExp(`^${input.projectPrefix.replaceAll(/[.*+?^${}()|[\]\\]/g, '\\$&')}-probe-([0-9a-f]{32})(?:-[0-9a-f]{12})?$`);
109
+ const discovered = await discover(input.run);
110
+ if (typeof discovered === 'string')
111
+ return { kind: 'refusal', reason: discovered, removed: [] };
112
+ const removed = [];
113
+ const left = [];
114
+ const failed = [];
115
+ const owned = discovered.flatMap((item) => {
116
+ const batch = projectPattern.exec(item.project)?.[1];
117
+ // The probe's own label must agree with its project, so a resource merely named like one is not removed.
118
+ return batch === undefined || batch !== item.batchLabel ? [] : [{ ...item, batch }];
119
+ });
120
+ const label = (item) => `${item.kind} ${item.kind === 'volume' ? item.handle : item.handle.slice(0, 12)} (project ${item.project})`;
121
+ const dead = await Promise.all(owned.map((item) => gone(item.owner)));
122
+ const doomed = owned.filter((_, index) => dead[index]);
123
+ for (const item of owned)
124
+ if (!doomed.includes(item))
125
+ left.push(label(item));
126
+ // Containers first: a network or volume a container still uses cannot be removed.
127
+ for (const kind of ['container', 'network', 'volume']) {
128
+ for (const item of doomed.filter((candidate) => candidate.kind === kind)) {
129
+ const args = kind === 'container' ? ['container', 'rm', '--force', '--volumes', item.handle]
130
+ : kind === 'network' ? ['network', 'rm', item.handle] : ['volume', 'rm', item.handle];
131
+ const outcome = await input.run(`runtime:measure:residue:rm-${kind}`, args);
132
+ if (outcome.kind === 'complete')
133
+ removed.push(label(item));
134
+ else
135
+ failed.push(`${label(item)}: ${outcome.detail}`);
136
+ }
137
+ }
138
+ if (failed.length > 0) {
139
+ return { kind: 'refusal', removed, reason: `a leftover from an interrupted measure could not be removed: ${failed.join('; ')}; remove it, then measure again` };
140
+ }
141
+ for (const directory of directories) {
142
+ if (directory.alive)
143
+ continue;
144
+ await rm(directory.path, { recursive: true, force: true });
145
+ removed.push(`temporary directory ${directory.path}`);
146
+ }
147
+ return { kind: 'complete', removed, left };
148
+ }
@@ -0,0 +1,72 @@
1
+ import { ENVIRONMENT_CODES, type StackId } from './contract.js';
2
+ import { type ResolvedExecutable } from './executable.js';
3
+ import { type ActiveStackInventoryResult } from './claims.js';
4
+ import { type StateRecord, type StateResult } from './state.js';
5
+ export interface RuntimeProbeRequest {
6
+ readonly executable: ResolvedExecutable;
7
+ readonly gitExecutable: ResolvedExecutable;
8
+ readonly cwd: string;
9
+ /** The measuring cockpit's name; the probe's Compose project carries it so its resources are attributable. */
10
+ readonly projectPrefix: string;
11
+ /** The measuring process, labelled on every probe resource so a later measure can tell whether it still runs. */
12
+ readonly owner: string;
13
+ readonly env: Readonly<Record<string, string>>;
14
+ readonly composeFloor: string;
15
+ readonly measuredOn: string;
16
+ readonly timeoutMs: number;
17
+ readonly image: {
18
+ readonly reference: string;
19
+ readonly id: string;
20
+ };
21
+ readonly installedModule: {
22
+ readonly canonicalPath: string;
23
+ readonly sha256: string;
24
+ };
25
+ }
26
+ export interface RuntimeProbeEvidence {
27
+ readonly batchId: string;
28
+ readonly installedModuleSha256: string;
29
+ readonly runtimeExecutableSha256: string;
30
+ readonly candidateSha256: string;
31
+ readonly brokenControlSha256: string;
32
+ readonly projectName: string;
33
+ readonly runtimePath: string;
34
+ readonly runtimeVersion: string | null;
35
+ readonly composeVersion: string | null;
36
+ readonly operatingSystem: string;
37
+ readonly architecture: string;
38
+ readonly startedAt: string;
39
+ readonly finishedAt: string;
40
+ readonly expiresAt: string;
41
+ readonly candidateChecks: Readonly<Record<string, boolean>>;
42
+ readonly brokenControlRejected: boolean;
43
+ readonly cleanup: {
44
+ readonly ownedSurvivors: readonly string[];
45
+ readonly resourcesEqual: boolean;
46
+ readonly claimsEqual: boolean;
47
+ readonly leasesEqual: boolean;
48
+ };
49
+ }
50
+ export interface RuntimeProbeVerdict {
51
+ readonly status: 'supported' | 'unavailable';
52
+ readonly runtime: {
53
+ readonly name: string;
54
+ readonly version: string;
55
+ } | null;
56
+ readonly composeVersion: string | null;
57
+ readonly composeFloor: string;
58
+ readonly measuredOn: string;
59
+ readonly candidate: 'passed' | 'failed';
60
+ readonly brokenControl: 'rejected' | 'accepted' | 'inconclusive';
61
+ readonly evidence: RuntimeProbeEvidence | null;
62
+ readonly operatorAction: null | {
63
+ readonly required: true;
64
+ readonly code: typeof ENVIRONMENT_CODES.RUNTIME_UNAVAILABLE | typeof ENVIRONMENT_CODES.RUNTIME_PROBE_TIMEOUT;
65
+ readonly reason: string;
66
+ };
67
+ }
68
+ export declare function currentCoordinationCleanupVerdict(beforeClaims: ActiveStackInventoryResult, afterClaims: ActiveStackInventoryResult, beforeLease: StateResult<StateRecord>, afterLease: StateResult<StateRecord>, stackId: StackId): Readonly<{
69
+ claimsEqual: boolean;
70
+ leasesEqual: boolean;
71
+ }>;
72
+ export declare function probeRuntimeSupport(rawInput: RuntimeProbeRequest): Promise<RuntimeProbeVerdict>;