@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,109 @@
1
+ // Owns who may confirm each init answer listed under `unconfirmed`, and the record of the
2
+ // observations that confirmed one. A person keeps every answer that is a trust decision and every
3
+ // answer no observation settles exactly; an agent may confirm the rest with `cockpit confirm`, which
4
+ // runs the observation and records it here. The guard then lets the agent's own sync apply the
5
+ // removed entry, but only while the record matches the configuration on disk.
6
+ //
7
+ // The record is machine-local, under `.cockpit/local`: the observation is evidence about this machine
8
+ // and its running stack, which another clone has not seen, so there a removed entry still waits for a
9
+ // person. The directory is a guard control directory, so no agent tool call may write it; only the
10
+ // cockpit process that ran the observation does.
11
+ import { canonicalJson } from '../canonical-json.js';
12
+ import { exactKeys } from '../exact-keys.js';
13
+ import { cockpitCommand } from '../fix-catalogue.js';
14
+ import { UNCONFIRMABLE_ANSWERS } from '../schema.js';
15
+ import { sha256Hex } from '../sha256.js';
16
+ import { GUARD_LOCAL_PATHS } from './local-identity.js';
17
+ export const ANSWER_CONFIRMATIONS = Object.freeze({
18
+ 'ports.bases': { by: 'observation', observation: 'preflight',
19
+ verifies: 'preflight passes with the stack up, its port family leased on the declared bases and every listener and health observation passing' },
20
+ 'environment.compose_files': { by: 'observation', observation: 'check',
21
+ verifies: 'check passes, which parses the declared Compose files with docker compose config and resolves the stack\'s topology from them' },
22
+ 'environment.machine': { by: 'observation', observation: 'runtime-floor',
23
+ verifies: 'the container runtime measured on this machine meets the declared memory, CPU and free-disk floor' },
24
+ guards: { by: 'person', trustDecision: true, why: 'it sets which commands and hosts the guard denies' },
25
+ testing: { by: 'person', trustDecision: true, why: 'it decides which tests grade the agent\'s own work' },
26
+ 'environment.install_policies': { by: 'person', trustDecision: true, why: 'it sets the build and test commands the guard admits' },
27
+ sibling: { by: 'person', trustDecision: true, why: 'it sets each repository\'s purpose and the roots agents may write' },
28
+ 'environment.posture': { by: 'person', trustDecision: true, why: 'it decides browser preapproval and what data agents are exposed to' },
29
+ 'cockpit.name': { by: 'person', trustDecision: false,
30
+ why: 'a name is a choice, and no observation shows it is the one the owner wants; it scopes Compose projects, state and generated files' },
31
+ 'estate.runnable': { by: 'person', trustDecision: false,
32
+ why: 'a stack that starts shows the declared services run, not that a repository declared not runnable should stay out' },
33
+ 'environment.test_data': { by: 'person', trustDecision: false,
34
+ why: 'it states what local work needs (seeded data, signed-in users), and no observation shows a need is absent' },
35
+ });
36
+ export const ANSWER_CONFIRMATION_PATH = `${GUARD_LOCAL_PATHS.directory}/answer-confirmations`;
37
+ const FORMAT = 'cockpit-answer-confirmations/v1';
38
+ const RECORD_KEYS = ['observation', 'ranAt', 'result', 'evidenceSha256', 'configurationSha256'];
39
+ const SHA256 = /^[a-f0-9]{64}$/;
40
+ const TIMESTAMP = /^\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d\.\d{3}Z$/;
41
+ /**
42
+ * The digest a record binds to: the whole configuration except the `unconfirmed` list, so confirming
43
+ * one answer leaves the records of the others current, and any other edit leaves every record stale.
44
+ */
45
+ export function confirmationConfigurationSha256(config) {
46
+ const { unconfirmed: _unconfirmed, ...observed } = config;
47
+ return sha256Hex(canonicalJson(observed));
48
+ }
49
+ function validRecord(answer, value) {
50
+ const confirmation = ANSWER_CONFIRMATIONS[answer];
51
+ if (!confirmation || confirmation.by !== 'observation' || value === null || typeof value !== 'object' || Array.isArray(value))
52
+ return false;
53
+ const row = value;
54
+ return exactKeys(row, RECORD_KEYS) && row.observation === confirmation.observation && row.result === 'passed'
55
+ && typeof row.ranAt === 'string' && TIMESTAMP.test(row.ranAt) && Number.isFinite(Date.parse(row.ranAt))
56
+ && typeof row.evidenceSha256 === 'string' && SHA256.test(row.evidenceSha256)
57
+ && typeof row.configurationSha256 === 'string' && SHA256.test(row.configurationSha256);
58
+ }
59
+ /** Every well-formed record the bytes hold, or none when they are absent or not a current-format file. */
60
+ export function parseAnswerConfirmations(bytes) {
61
+ if (!bytes)
62
+ return {};
63
+ let value;
64
+ try {
65
+ value = JSON.parse(Buffer.from(bytes).toString('utf8'));
66
+ }
67
+ catch (error) {
68
+ if (error instanceof SyntaxError)
69
+ return {};
70
+ throw error;
71
+ }
72
+ if (value === null || typeof value !== 'object' || Array.isArray(value))
73
+ return {};
74
+ const file = value;
75
+ const confirmations = file.confirmations;
76
+ if (!exactKeys(file, ['format', 'confirmations']) || file.format !== FORMAT
77
+ || confirmations === null || typeof confirmations !== 'object' || Array.isArray(confirmations))
78
+ return {};
79
+ return Object.fromEntries(Object.entries(confirmations).filter(([answer, row]) => validRecord(answer, row)));
80
+ }
81
+ export function encodeAnswerConfirmations(records) {
82
+ return `${JSON.stringify({ format: FORMAT, confirmations: records }, null, 2)}\n`;
83
+ }
84
+ /**
85
+ * The answers whose recorded observation passed against exactly `config`. A missing, malformed or
86
+ * stale record confirms nothing, and no record confirms an answer only a person may.
87
+ */
88
+ export function confirmedAnswers(bytes, config) {
89
+ const digest = confirmationConfigurationSha256(config);
90
+ return new Set(Object.entries(parseAnswerConfirmations(bytes))
91
+ .filter(([, row]) => row.configurationSha256 === digest).map(([answer]) => answer));
92
+ }
93
+ export function isUnconfirmedAnswerName(value) {
94
+ return UNCONFIRMABLE_ANSWERS.includes(value);
95
+ }
96
+ /** The confirmation a person makes, for the answers only a person may confirm. */
97
+ export function personConfirmationFix(answers, configPath) {
98
+ return `a person confirms ${answers.join(', ')} with whoever owns the product, corrects cockpit.toml if a value is wrong, deletes ${answers.length === 1 ? 'its entry' : 'each entry'} from unconfirmed, then runs ${cockpitCommand('sync', configPath === undefined ? {} : { config: configPath })} in a terminal outside the agent`;
99
+ }
100
+ /** How each listed answer is confirmed: the observation an agent runs, or the person who must. */
101
+ export function unconfirmedFix(answers) {
102
+ const observed = answers.flatMap(answer => {
103
+ const confirmation = ANSWER_CONFIRMATIONS[answer];
104
+ return confirmation.by === 'observation'
105
+ ? [`run ${cockpitCommand('confirm', { operand: answer })}, which confirms ${answer} only if ${confirmation.verifies}`] : [];
106
+ });
107
+ const person = answers.filter(answer => ANSWER_CONFIRMATIONS[answer].by === 'person');
108
+ return [...observed, ...person.length ? [personConfirmationFix(person)] : []].join('; ');
109
+ }
@@ -0,0 +1,130 @@
1
+ /**
2
+ * The cockpit commands that run the words after their `--` as a command of their own, and where it
3
+ * runs: a session's on the host, exec's inside a product container that mounts the checkouts and
4
+ * may hold their credentials. The guard judges that command as an invocation of its own, so
5
+ * wrapping a command never admits more than running it directly.
6
+ */
7
+ export declare const WRAPPING_COMMANDS: ReadonlyMap<string, 'host' | 'container'>;
8
+ /**
9
+ * The command a wrapping cockpit command runs, from its arguments after the launcher: the words
10
+ * after its first `--`, and where they run. Undefined when the command wraps none or names no
11
+ * command after `--`.
12
+ */
13
+ export declare function innerCommand(argv: readonly string[]): Readonly<{
14
+ words: readonly string[];
15
+ runs: 'host' | 'container';
16
+ }> | undefined;
17
+ export interface GuardInvocationProfile {
18
+ readonly executable: string;
19
+ readonly cwd: string;
20
+ readonly argv: readonly string[];
21
+ /** Files the admitted command reads and may echo back, checked like a read-only command's reads. */
22
+ readonly reads?: readonly string[];
23
+ }
24
+ export interface GuardProjectCommand {
25
+ readonly executable: string;
26
+ readonly checkoutRoot: string;
27
+ readonly kind: 'build' | 'test';
28
+ readonly argv: readonly string[];
29
+ }
30
+ /** Filesystem identity of a protected path: its own when it exists, and every existing directory above it. */
31
+ export interface GuardProtectedIdentity {
32
+ readonly path: string;
33
+ readonly identity: string | null;
34
+ readonly ancestors: readonly string[];
35
+ }
36
+ interface GuardDeclaredAllow {
37
+ readonly argv: readonly string[];
38
+ readonly reason: string;
39
+ readonly cwd?: string;
40
+ }
41
+ interface GuardDeclaredDeny {
42
+ readonly match: 'prefix' | 'contains';
43
+ readonly argv: readonly string[];
44
+ readonly reason: string;
45
+ readonly fix?: string;
46
+ }
47
+ export interface GuardEvaluationPolicy {
48
+ readonly canonicalRoot: string;
49
+ /** The configuration every guarded call reads; deleting it strands the agent. */
50
+ readonly configPath: string;
51
+ readonly allowedRoots: readonly string[];
52
+ readonly instances: readonly {
53
+ readonly name: string;
54
+ readonly path: string;
55
+ }[];
56
+ /** Declared environment templates: `.env*` files that are documentation, not data. */
57
+ readonly templates: readonly string[];
58
+ readonly protectedIdentities: readonly GuardProtectedIdentity[];
59
+ readonly protectedBranches: readonly string[];
60
+ readonly hostedDatabaseHosts: readonly string[];
61
+ readonly vendorHosts: readonly string[];
62
+ readonly declaredAllows: readonly GuardDeclaredAllow[];
63
+ readonly declaredDenies: readonly GuardDeclaredDeny[];
64
+ readonly ripgrepConfigActive: boolean;
65
+ /**
66
+ * Directories whose code runs as the guard: the installed cockpit package and every package it
67
+ * loads. Every allowed root's `node_modules/.bin` is protected beside them without being listed.
68
+ */
69
+ readonly executionDirectories: readonly string[];
70
+ /** Absolute command search path directories inside the allowed roots, where a planted file shadows a permitted command. */
71
+ readonly searchDirectories: readonly string[];
72
+ /** The first command search path entry that is not absolute, where an empty one is the working directory; null when every entry is absolute. */
73
+ readonly searchPathRelativeEntry: string | null;
74
+ /** Identities of every file in the root secrets directory, or null when it held more than the enumeration bound. */
75
+ readonly secretFileIdentities: readonly string[] | null;
76
+ /** Some instance or secrets file has another hard link, which a recursive search can read under an unprotected name. */
77
+ readonly protectedFilesLinked: boolean;
78
+ readonly cockpitInvocations: readonly GuardInvocationProfile[];
79
+ /**
80
+ * Launcher spellings the application proved start the guard's own installed cockpit when run in
81
+ * `cwd`: the executable and the launcher words after it, such as `npx` with `--no cockpit`. A
82
+ * matching invocation is evaluated as cockpit with the remaining words; no other one is.
83
+ */
84
+ readonly cockpitLaunchers: readonly GuardInvocationProfile[];
85
+ readonly projectCommands: readonly GuardProjectCommand[];
86
+ }
87
+ interface PathInspectionRequest {
88
+ readonly path: string;
89
+ readonly cwd: string;
90
+ /**
91
+ * A `search` is a recursive read; its evidence also carries `sensitive`, every existing path at or
92
+ * below it named `.env*` or `.secrets`, or null past the walk's bound. An `unignored-search` reads
93
+ * only what Git does not ignore, as ripgrep does by default; its `sensitive` holds only what such
94
+ * a search reads, and also every declared instance it reads. A `repository` is the Git repository
95
+ * at the path; its evidence carries `tracked`, every `.env*`, secrets or instance path its index
96
+ * holds, or null when Git could not say.
97
+ */
98
+ readonly operation: 'cwd' | 'write' | 'stage' | 'read' | 'remove' | 'search' | 'unignored-search' | 'repository';
99
+ }
100
+ /** The application supplies current, symlink-aware facts; the evaluator performs no I/O. */
101
+ export type PathInspection = (request: PathInspectionRequest) => unknown;
102
+ export interface GuardDecision {
103
+ readonly decision: 'allow' | 'ask' | 'deny' | 'unavailable';
104
+ readonly reason: string;
105
+ }
106
+ /**
107
+ * Bounds on the locations the policy and the path inspector carry, one per quantity, each set above
108
+ * what an honest checkout holds so that only an unwalkable tree or a broken install reaches it.
109
+ */
110
+ export declare const GUARD_LOCATION_LIMITS: Readonly<{
111
+ packageDirectories: 256;
112
+ searchPathDirectories: 256;
113
+ templates: 256;
114
+ sensitivePaths: 1024;
115
+ }>;
116
+ export declare const GUARD_SECRET_FILE_LIMIT = 512;
117
+ /** Root-relative paths whose identity every policy carries beside each instance's. */
118
+ export declare const GUARD_ROOT_PROTECTIONS: readonly {
119
+ readonly path: string;
120
+ readonly type: 'file' | 'directory';
121
+ }[];
122
+ /** One spelling of a file's identity, shared by the policy build and the path inspector. */
123
+ export declare function guardIdentity(status: {
124
+ readonly dev: number;
125
+ readonly ino: number;
126
+ }): string;
127
+ export declare function foldGuardSpelling(path: string): string;
128
+ /** Hard boundaries are independent of grants and are evaluated across the complete capture. */
129
+ export declare function evaluateGuard(input: unknown, policy: unknown, inspect: PathInspection): GuardDecision;
130
+ export {};