@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,164 @@
1
+ import { sha256Hex } from '../sha256.js';
2
+ import { snapshotGeneratedJson } from '../environment/contract.js';
3
+ import { ADOPTABLE_SURFACE_PATHS, safeSurfacePath as safePath } from './contract.js';
4
+ import { classifySurfaceOwnership, removeSharedOwnership, renderSharedPostimage, SURFACE_HAND_EDIT_FIX, SURFACE_UNRECORDED_FIX, } from './ownership.js';
5
+ import { exactKeys } from '../exact-keys.js';
6
+ const SHA256 = /^[a-f0-9]{64}$/;
7
+ function object(value) {
8
+ return value !== undefined && value !== null && typeof value === 'object' && !Array.isArray(value);
9
+ }
10
+ function refuse(message, target, fix) {
11
+ return { kind: 'refusal', diagnostic: { code: 'SURFACE_STATE_CONFLICT', message,
12
+ ...(target === undefined ? {} : { target }), ...(fix === undefined ? {} : { fix }) } };
13
+ }
14
+ function base(value, configured) {
15
+ const harnesses = value.harnesses;
16
+ return typeof value.path === 'string' && safePath(value.path) && Array.isArray(harnesses) && harnesses.length > 0
17
+ && harnesses.every((harness, index) => typeof harness === 'string' && configured.has(harness) && (index === 0 || harnesses[index - 1] < harness))
18
+ && (value.scope === 'always' || value.scope === 'scoped') && (value.capability === 'enforced' || value.capability === 'instructed')
19
+ && value.writer === 'cockpit' && value.schemaVersion === 1;
20
+ }
21
+ function priorEntry(value, configured) {
22
+ if (!object(value) || !base(value, configured) || typeof value.kind !== 'string' || typeof value.ownership !== 'string')
23
+ return undefined;
24
+ if (value.kind === 'file') {
25
+ return exactKeys(value, ['kind', 'path', 'harnesses', 'scope', 'capability', 'writer', 'schemaVersion', 'ownership', 'sha256'])
26
+ && value.ownership === 'whole-file' && typeof value.sha256 === 'string' && SHA256.test(value.sha256)
27
+ ? value : undefined;
28
+ }
29
+ if (value.kind !== 'shared-region' || value.ownership !== 'shared-region'
30
+ || !exactKeys(value, ['kind', 'path', 'harnesses', 'scope', 'capability', 'writer', 'schemaVersion', 'ownership', 'regionId', 'region'])
31
+ || typeof value.regionId !== 'string' || !object(value.region) || typeof value.region.sha256 !== 'string' || !SHA256.test(value.region.sha256))
32
+ return undefined;
33
+ if (value.region.format === 'markdown-delimited') {
34
+ return exactKeys(value.region, ['format', 'begin', 'end', 'sha256']) && typeof value.region.begin === 'string' && typeof value.region.end === 'string'
35
+ ? value : undefined;
36
+ }
37
+ const keys = value.region.keys;
38
+ return value.region.format === 'opencode-json-root-properties' && exactKeys(value.region, ['format', 'keys', 'sha256'])
39
+ && Array.isArray(keys) && keys.length > 0 && keys.every((key, index) => typeof key === 'string' && (index === 0 || keys[index - 1] < key))
40
+ ? value : undefined;
41
+ }
42
+ function observedEntry(value) {
43
+ if (!object(value) || typeof value.path !== 'string' || !safePath(value.path) || typeof value.kind !== 'string')
44
+ return undefined;
45
+ if (value.kind === 'missing')
46
+ return exactKeys(value, ['path', 'kind']) ? value : undefined;
47
+ if (value.kind === 'file')
48
+ return exactKeys(value, ['path', 'kind', 'bytes', 'sha256', 'identity']) && typeof value.bytes === 'string'
49
+ && typeof value.sha256 === 'string' && value.sha256 === sha256Hex(value.bytes) && typeof value.identity === 'string' && value.identity.length > 0
50
+ ? value : undefined;
51
+ if (value.kind === 'symlink')
52
+ return exactKeys(value, ['path', 'kind', 'target', 'identity']) && typeof value.target === 'string'
53
+ && typeof value.identity === 'string' && value.identity.length > 0 ? value : undefined;
54
+ return value.kind === 'other' && exactKeys(value, ['path', 'kind', 'identity']) && typeof value.identity === 'string' && value.identity.length > 0
55
+ ? value : undefined;
56
+ }
57
+ function priorMatchesObserved(prior, observed) {
58
+ if (prior.kind === 'file')
59
+ return observed.kind === 'file' && observed.sha256 === prior.sha256;
60
+ return observed.kind === 'file';
61
+ }
62
+ export function planSurfaceChanges(input) {
63
+ const captured = snapshotGeneratedJson(input);
64
+ if (!object(captured) || !exactKeys(captured, ['configuredHarnesses', 'desired', 'priorOwned', 'observed'])
65
+ || !Array.isArray(captured.configuredHarnesses) || !Array.isArray(captured.desired)
66
+ || !Array.isArray(captured.priorOwned) || captured.priorOwned.length > 256
67
+ || !Array.isArray(captured.observed) || captured.observed.length > 257)
68
+ return refuse('surface change input must be bounded exact data');
69
+ const ownership = classifySurfaceOwnership({ configuredHarnesses: captured.configuredHarnesses, entries: captured.desired });
70
+ if (ownership.kind === 'refusal')
71
+ return ownership;
72
+ const configured = new Set(captured.configuredHarnesses);
73
+ const prior = [];
74
+ const observed = [];
75
+ let priorPath = '';
76
+ for (const candidate of captured.priorOwned) {
77
+ const entry = priorEntry(candidate, configured);
78
+ if (!entry || entry.path <= priorPath)
79
+ return refuse('prior ownership rows must be valid, unique and sorted');
80
+ priorPath = entry.path;
81
+ prior.push(entry);
82
+ }
83
+ let observedPath = '';
84
+ for (const candidate of captured.observed) {
85
+ const entry = observedEntry(candidate);
86
+ if (!entry || entry.path <= observedPath)
87
+ return refuse('observed rows must be valid, unique and sorted');
88
+ observedPath = entry.path;
89
+ observed.push(entry);
90
+ }
91
+ const desiredByPath = new Map(ownership.entries.map(entry => [entry.path, entry]));
92
+ const priorByPath = new Map(prior.map(entry => [entry.path, entry]));
93
+ const observedByPath = new Map(observed.map(entry => [entry.path, entry]));
94
+ if (desiredByPath.has('opencode.jsonc')) {
95
+ const alternate = observedByPath.get('opencode.json');
96
+ if (alternate && alternate.kind !== 'missing' && !priorByPath.has('opencode.json'))
97
+ return refuse('unmanaged alternate OpenCode configuration exists', 'opencode.json');
98
+ }
99
+ const writes = [];
100
+ for (const desired of ownership.entries) {
101
+ const current = observedByPath.get(desired.path) ?? { path: desired.path, kind: 'missing' };
102
+ const previous = priorByPath.get(desired.path);
103
+ if (desired.kind === 'file' && current.kind === 'file' && current.sha256 === desired.sha256) {
104
+ if (!previous || !priorMatchesObserved(previous, current))
105
+ return refuse('this path already holds exactly what sync would write, but no ownership record names it, so sync cannot tell whether cockpit or a person put it there', desired.path, SURFACE_UNRECORDED_FIX);
106
+ continue;
107
+ }
108
+ if (desired.kind === 'shared-region') {
109
+ if (current.kind === 'missing') {
110
+ const baseBytes = desired.region.format === 'opencode-json-root-properties' ? '{}' : '';
111
+ const rendered = renderSharedPostimage(baseBytes, desired);
112
+ if (rendered.kind === 'refusal')
113
+ return rendered;
114
+ writes.push({ kind: 'write', path: desired.path, desired, postimage: rendered.bytes });
115
+ continue;
116
+ }
117
+ if (current.kind !== 'file')
118
+ return refuse('shared surface path is not a regular file', desired.path);
119
+ const rendered = renderSharedPostimage(current.bytes, desired, previous);
120
+ if (rendered.kind === 'refusal')
121
+ return rendered;
122
+ if (rendered.bytes !== current.bytes)
123
+ writes.push({ kind: 'write', path: desired.path, desired, postimage: rendered.bytes,
124
+ preimage: { identity: current.identity, sha256: current.sha256 } });
125
+ continue;
126
+ }
127
+ if (current.kind !== 'missing' && !previous && ADOPTABLE_SURFACE_PATHS.includes(desired.path)) {
128
+ return refuse('this harness settings file exists but cockpit has no record of writing it', desired.path, `to keep the settings it holds, have a human approve npx --no cockpit sync --config <your cockpit.toml> --adopt ${desired.path}`);
129
+ }
130
+ if (current.kind !== 'missing' && !previous)
131
+ return refuse('this path holds a file cockpit has no record of writing', desired.path, SURFACE_UNRECORDED_FIX);
132
+ if (current.kind !== 'missing' && previous && !priorMatchesObserved(previous, current)) {
133
+ return refuse('this generated file was edited by hand since cockpit last wrote it, and sync does not overwrite hand edits', desired.path, SURFACE_HAND_EDIT_FIX);
134
+ }
135
+ writes.push({ kind: 'write', path: desired.path, desired,
136
+ ...(current.kind === 'missing' ? {} : { preimage: { identity: current.identity, ...(current.kind === 'file' ? { sha256: current.sha256 } : {}) } }) });
137
+ }
138
+ const removals = [];
139
+ for (const stale of prior) {
140
+ if (desiredByPath.has(stale.path))
141
+ continue;
142
+ const current = observedByPath.get(stale.path) ?? { path: stale.path, kind: 'missing' };
143
+ if (current.kind === 'missing') {
144
+ removals.push({ kind: 'already-absent', path: stale.path, priorOwned: stale });
145
+ continue;
146
+ }
147
+ if (stale.kind === 'shared-region') {
148
+ if (current.kind !== 'file')
149
+ return refuse('stale shared surface changed kind', stale.path);
150
+ const rendered = removeSharedOwnership(current.bytes, stale);
151
+ if (rendered.kind === 'refusal')
152
+ return rendered;
153
+ removals.push({ kind: 'remove', path: stale.path, priorOwned: stale, postimage: rendered.bytes,
154
+ preimage: { identity: current.identity, sha256: current.sha256 } });
155
+ continue;
156
+ }
157
+ if (!priorMatchesObserved(stale, current))
158
+ return refuse('stale owned surface changed', stale.path, SURFACE_HAND_EDIT_FIX);
159
+ removals.push({ kind: 'remove', path: stale.path, priorOwned: stale,
160
+ preimage: { identity: current.identity, ...(current.kind === 'file' ? { sha256: current.sha256 } : {}) } });
161
+ }
162
+ const result = snapshotGeneratedJson({ kind: 'complete', actions: [...writes, ...removals] });
163
+ return result ? result : refuse('surface change plan exceeds the captured bounds');
164
+ }
@@ -0,0 +1,41 @@
1
+ import { type EnvironmentDiagnostic } from './environment/contract.js';
2
+ export interface TeamMetadataChange {
3
+ readonly operation: 'write';
4
+ readonly path: string;
5
+ }
6
+ export type TeamMetadataResult = Readonly<{
7
+ kind: 'complete';
8
+ changed: boolean;
9
+ changes: readonly TeamMetadataChange[];
10
+ }> | Readonly<{
11
+ kind: 'refusal';
12
+ code: EnvironmentDiagnostic['code'];
13
+ message: string;
14
+ target: string;
15
+ fix?: string;
16
+ }>;
17
+ /**
18
+ * The package manifest without the entries sync owns in it: the cockpit dependency, under any spec,
19
+ * and each cockpit script while it is the exact command sync writes. Sections those removals leave
20
+ * empty are dropped, so a manifest cockpit created and one it edited project the same way.
21
+ */
22
+ export declare function productPackageManifest(manifest: Readonly<Record<string, unknown>>): Record<string, unknown>;
23
+ export interface TeamMetadataAuthority {
24
+ readonly changes: readonly TeamMetadataChange[];
25
+ }
26
+ export declare function prepareTeamMetadata(configPath: string): Promise<Extract<TeamMetadataResult, {
27
+ kind: 'refusal';
28
+ }> | Readonly<{
29
+ kind: 'complete';
30
+ authority: TeamMetadataAuthority;
31
+ }>>;
32
+ export declare function applyTeamMetadata(prepared: TeamMetadataAuthority): Promise<TeamMetadataResult>;
33
+ export declare function validateTeamMetadata(configPath: string): Promise<TeamMetadataResult>;
34
+ /**
35
+ * What a teammate's clone of this cockpit, or the cockpit itself, will lack, read from the
36
+ * cockpit root and its declaration without changing anything. `init` runs from a temporary copy of
37
+ * cockpit and leaves none in the cockpit, so every printed `npx --no cockpit` then failed and the
38
+ * guard hook stayed bound to that copy; and a sibling repository recorded without a remote is one
39
+ * a teammate's `setup` silently leaves absent.
40
+ */
41
+ export declare function inspectTeamReadiness(configPath: string): Promise<readonly EnvironmentDiagnostic[]>;