@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,56 @@
1
+ import { type EnvironmentObservation } from './contract.js';
2
+ import { type MachineFloorEvidence } from './runtime.js';
3
+ export declare const observationDeclarations: readonly [{
4
+ readonly id: 'machine-memory';
5
+ readonly owner: "host-observation";
6
+ readonly postures: readonly ["machine-floor"];
7
+ readonly stages: readonly [{
8
+ readonly stage: 'bootstrap';
9
+ readonly disposition: 'required';
10
+ }, {
11
+ readonly stage: 'steady';
12
+ readonly disposition: 'required';
13
+ }];
14
+ readonly code: "MACHINE_MEMORY_BELOW_FLOOR";
15
+ readonly isIssued: typeof isHostObservation;
16
+ readonly issuedAt: typeof observationIssuedAt;
17
+ }, {
18
+ readonly id: 'machine-cpu';
19
+ readonly owner: "host-observation";
20
+ readonly postures: readonly ["machine-floor"];
21
+ readonly stages: readonly [{
22
+ readonly stage: 'bootstrap';
23
+ readonly disposition: 'required';
24
+ }, {
25
+ readonly stage: 'steady';
26
+ readonly disposition: 'required';
27
+ }];
28
+ readonly code: "MACHINE_CPU_BELOW_FLOOR";
29
+ readonly isIssued: typeof isHostObservation;
30
+ readonly issuedAt: typeof observationIssuedAt;
31
+ }, {
32
+ readonly id: 'machine-disk';
33
+ readonly owner: "host-observation";
34
+ readonly postures: readonly ["machine-floor"];
35
+ readonly stages: readonly [{
36
+ readonly stage: 'bootstrap';
37
+ readonly disposition: 'required';
38
+ }, {
39
+ readonly stage: 'steady';
40
+ readonly disposition: 'required';
41
+ }];
42
+ readonly code: "MACHINE_DISK_BELOW_FLOOR";
43
+ readonly isIssued: typeof isHostObservation;
44
+ readonly issuedAt: typeof observationIssuedAt;
45
+ }];
46
+ declare function isHostObservation(value: unknown): value is EnvironmentObservation;
47
+ declare function observationIssuedAt(value: unknown): number | undefined;
48
+ export interface HostCapacityFloor {
49
+ readonly memoryBytes: number;
50
+ readonly cpuMillis: number;
51
+ readonly freeDiskBytes: number;
52
+ }
53
+ export declare function observeHostCapacity(input: {
54
+ readonly evidence: MachineFloorEvidence;
55
+ }): readonly EnvironmentObservation[];
56
+ export {};
@@ -0,0 +1,52 @@
1
+ import { exactKeys } from '../exact-keys.js';
2
+ import { RefusalError, ENVIRONMENT_CODES, snapshotEnvironmentObservation, snapshotJson, } from './contract.js';
3
+ import { isMachineFloorEvidence } from './runtime.js';
4
+ const OWNER = 'host-observation';
5
+ export const observationDeclarations = Object.freeze([
6
+ { id: 'machine-memory', owner: OWNER, postures: ['machine-floor'], stages: [{ stage: 'bootstrap', disposition: 'required' }, { stage: 'steady', disposition: 'required' }], code: ENVIRONMENT_CODES.MACHINE_MEMORY_BELOW_FLOOR, isIssued: isHostObservation, issuedAt: observationIssuedAt },
7
+ { id: 'machine-cpu', owner: OWNER, postures: ['machine-floor'], stages: [{ stage: 'bootstrap', disposition: 'required' }, { stage: 'steady', disposition: 'required' }], code: ENVIRONMENT_CODES.MACHINE_CPU_BELOW_FLOOR, isIssued: isHostObservation, issuedAt: observationIssuedAt },
8
+ { id: 'machine-disk', owner: OWNER, postures: ['machine-floor'], stages: [{ stage: 'bootstrap', disposition: 'required' }, { stage: 'steady', disposition: 'required' }], code: ENVIRONMENT_CODES.MACHINE_DISK_BELOW_FLOOR, isIssued: isHostObservation, issuedAt: observationIssuedAt },
9
+ ]);
10
+ const issuedObservations = new WeakMap();
11
+ function issueObservation(value) {
12
+ const snapshot = snapshotEnvironmentObservation(value);
13
+ if (!snapshot || snapshot.owner !== OWNER)
14
+ throw new RefusalError('host observation is malformed');
15
+ issuedObservations.set(snapshot, Date.now());
16
+ return snapshot;
17
+ }
18
+ function isHostObservation(value) {
19
+ return value !== null && typeof value === 'object' && issuedObservations.has(value);
20
+ }
21
+ function observationIssuedAt(value) {
22
+ return value !== null && typeof value === 'object' ? issuedObservations.get(value) : undefined;
23
+ }
24
+ function metric(stackId, evidence, code, source, measured, expectation, remedy) {
25
+ return issueObservation({
26
+ code, owner: OWNER, stackId, source,
27
+ observed: { state: 'available', value: measured, observedAt: evidence.observedAt },
28
+ expectation,
29
+ applicability: { state: 'required', posture: 'machine-floor' },
30
+ freshness: { state: 'current' }, remedy,
31
+ });
32
+ }
33
+ export function observeHostCapacity(input) {
34
+ if (input === null || typeof input !== 'object' || Object.keys(input).length !== 1 || !isMachineFloorEvidence(input.evidence)) {
35
+ throw new RefusalError('machine-floor evidence is not authentic');
36
+ }
37
+ const evidence = input.evidence;
38
+ const stackId = evidence.stackId;
39
+ const floor = snapshotJson(evidence.floor);
40
+ if (typeof stackId !== 'string' || !/^stack:[a-f0-9]{64}$/.test(stackId)
41
+ || floor === null || typeof floor !== 'object' || Array.isArray(floor)
42
+ || !exactKeys(floor, ['cpuMillis', 'freeDiskBytes', 'memoryBytes'])
43
+ || Object.values(floor).some((value) => !Number.isSafeInteger(value) || value < 1)) {
44
+ throw new RefusalError('host capacity floor must use exact positive integer units');
45
+ }
46
+ const threshold = floor;
47
+ return [
48
+ metric(stackId, evidence, ENVIRONMENT_CODES.MACHINE_MEMORY_BELOW_FLOOR, 'runtime-memory-bytes', evidence.memoryBytes, { kind: 'minimum', value: threshold.memoryBytes }, 'make the declared runtime memory available'),
49
+ metric(stackId, evidence, ENVIRONMENT_CODES.MACHINE_CPU_BELOW_FLOOR, 'runtime-cpu-millis', evidence.cpuMillis, { kind: 'minimum', value: threshold.cpuMillis }, 'make the declared runtime CPU capacity available'),
50
+ metric(stackId, evidence, ENVIRONMENT_CODES.MACHINE_DISK_BELOW_FLOOR, 'free-disk-bytes', evidence.freeDiskBytes, { kind: 'minimum', value: threshold.freeDiskBytes }, 'free disk space or lower the declared floor deliberately'),
51
+ ];
52
+ }
@@ -0,0 +1,48 @@
1
+ import type { CheckoutId, CockpitId, HolderId, StackId } from './contract.js';
2
+ declare const bootstrapLockOwnerBrand: unique symbol;
3
+ export type BootstrapLockOwnerId = string & {
4
+ readonly [bootstrapLockOwnerBrand]: 'BootstrapLockOwnerId';
5
+ };
6
+ export type StackVariant = {
7
+ readonly kind: 'shared';
8
+ } | {
9
+ readonly kind: 'named';
10
+ readonly name: string;
11
+ };
12
+ export interface CanonicalMainCheckoutEvidence {
13
+ readonly mainCheckoutPath: string;
14
+ }
15
+ export interface CanonicalCheckoutEvidence {
16
+ readonly checkoutPath: string;
17
+ }
18
+ export declare function cockpitId(input: {
19
+ readonly name: string;
20
+ } & CanonicalMainCheckoutEvidence): CockpitId;
21
+ export declare function publicationCockpitId(input: {
22
+ readonly name: string;
23
+ }): CockpitId;
24
+ export declare function checkoutId(input: CanonicalCheckoutEvidence): CheckoutId;
25
+ export declare function stackId(input: {
26
+ readonly cockpitId: CockpitId;
27
+ readonly checkoutId: CheckoutId;
28
+ readonly variant: StackVariant;
29
+ }): StackId;
30
+ /**
31
+ * The Compose project a stack runs as. Named after the cockpit alone, two checkouts or two cockpits
32
+ * sharing a name became one project on one daemon and replaced each other's containers. The stack
33
+ * id is per checkout and never follows the configuration's bytes, so the name survives every edit.
34
+ */
35
+ export declare function composeProjectName(input: {
36
+ readonly cockpitName: string;
37
+ readonly stackId: StackId;
38
+ }): string;
39
+ export declare function holderId(input: {
40
+ readonly stackId: StackId;
41
+ readonly checkoutId: CheckoutId;
42
+ readonly sessionId: string;
43
+ }): HolderId;
44
+ export declare function bootstrapHolderId(input: {
45
+ readonly checkoutId: CheckoutId;
46
+ readonly sessionId: string;
47
+ }): BootstrapLockOwnerId;
48
+ export {};
@@ -0,0 +1,85 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { isAbsolute, normalize } from 'node:path';
3
+ import { RefusalError } from './contract.js';
4
+ const COCKPIT_NAME = /^[a-z0-9][a-z0-9-]*$/;
5
+ const STACK_NAME = /^[a-z0-9][a-z0-9-]*$/;
6
+ const COCKPIT_ID = /^cockpit:[a-z0-9][a-z0-9-]*:[a-f0-9]{64}$/;
7
+ const CHECKOUT_ID = /^checkout:[a-f0-9]{64}$/;
8
+ const STACK_ID = /^stack:[a-f0-9]{64}$/;
9
+ function digest(parts) {
10
+ const hash = createHash('sha256');
11
+ for (const part of parts) {
12
+ hash.update(String(Buffer.byteLength(part, 'utf8')));
13
+ hash.update(':');
14
+ hash.update(part);
15
+ }
16
+ return hash.digest('hex');
17
+ }
18
+ function canonicalPath(value, field) {
19
+ if (typeof value !== 'string' || value.includes('\0') || !isAbsolute(value) || normalize(value) !== value) {
20
+ throw new RefusalError(`identity: ${field} must be a canonical absolute path`);
21
+ }
22
+ return value;
23
+ }
24
+ function closedIdentity(value, pattern, field) {
25
+ if (typeof value !== 'string' || !pattern.test(value)) {
26
+ throw new RefusalError(`identity: ${field} is malformed`);
27
+ }
28
+ return value;
29
+ }
30
+ export function cockpitId(input) {
31
+ if (typeof input?.name !== 'string' || !COCKPIT_NAME.test(input.name)) {
32
+ throw new RefusalError('identity: cockpit name must use lowercase letters, digits, and hyphens');
33
+ }
34
+ const mainCheckoutPath = canonicalPath(input.mainCheckoutPath, 'mainCheckoutPath');
35
+ return `cockpit:${input.name}:${digest([mainCheckoutPath])}`;
36
+ }
37
+ export function publicationCockpitId(input) {
38
+ if (typeof input?.name !== 'string' || !COCKPIT_NAME.test(input.name)) {
39
+ throw new RefusalError('identity: cockpit name must use lowercase letters, digits, and hyphens');
40
+ }
41
+ return `cockpit:${input.name}:${digest(['publication', input.name])}`;
42
+ }
43
+ export function checkoutId(input) {
44
+ const checkoutPath = canonicalPath(input?.checkoutPath, 'checkoutPath');
45
+ return `checkout:${digest([checkoutPath])}`;
46
+ }
47
+ export function stackId(input) {
48
+ const cockpit = closedIdentity(input?.cockpitId, COCKPIT_ID, 'cockpitId');
49
+ const checkout = closedIdentity(input?.checkoutId, CHECKOUT_ID, 'checkoutId');
50
+ const variant = input?.variant;
51
+ if (variant?.kind === 'shared') {
52
+ return `stack:${digest([cockpit, checkout, 'shared'])}`;
53
+ }
54
+ if (variant?.kind === 'named' && STACK_NAME.test(variant.name)) {
55
+ return `stack:${digest([cockpit, checkout, 'named', variant.name])}`;
56
+ }
57
+ throw new RefusalError('identity: stack variant is malformed');
58
+ }
59
+ /**
60
+ * The Compose project a stack runs as. Named after the cockpit alone, two checkouts or two cockpits
61
+ * sharing a name became one project on one daemon and replaced each other's containers. The stack
62
+ * id is per checkout and never follows the configuration's bytes, so the name survives every edit.
63
+ */
64
+ export function composeProjectName(input) {
65
+ if (typeof input?.cockpitName !== 'string' || !COCKPIT_NAME.test(input.cockpitName)) {
66
+ throw new RefusalError('identity: cockpit name must use lowercase letters, digits, and hyphens');
67
+ }
68
+ const stack = closedIdentity(input.stackId, STACK_ID, 'stackId');
69
+ return `${input.cockpitName}-${stack.slice('stack:'.length, 'stack:'.length + 12)}`;
70
+ }
71
+ export function holderId(input) {
72
+ const stack = closedIdentity(input?.stackId, STACK_ID, 'stackId');
73
+ const checkout = closedIdentity(input?.checkoutId, CHECKOUT_ID, 'checkoutId');
74
+ if (typeof input.sessionId !== 'string' || input.sessionId.length === 0 || input.sessionId.includes('\0')) {
75
+ throw new RefusalError('identity: sessionId must be a non-empty string without NUL bytes');
76
+ }
77
+ return `holder:${digest([stack, checkout, 'session', input.sessionId])}:session`;
78
+ }
79
+ export function bootstrapHolderId(input) {
80
+ const checkout = closedIdentity(input?.checkoutId, CHECKOUT_ID, 'checkoutId');
81
+ if (typeof input.sessionId !== 'string' || input.sessionId.length === 0 || input.sessionId.includes('\0')) {
82
+ throw new RefusalError('identity: sessionId must be a non-empty string without NUL bytes');
83
+ }
84
+ return `bootstrap-holder:${digest([checkout, 'session', input.sessionId])}:session`;
85
+ }
@@ -0,0 +1,333 @@
1
+ import type { Diagnostic } from '../diagnostics.js';
2
+ import { type ReadinessReport } from '../readiness.js';
3
+ import { type AnswerProvenance, type DocumentCommandInput, type DocumentOutcome, type EstateClassificationOutcome, type EstateClassificationResult, type DerivedAnswer, type UnconfirmedAnswer, type EstateObservationInput } from '../init/draft.js';
4
+ import { type SurfaceTarget } from '../surfaces/contract.js';
5
+ import { type BootstrapStateAddress, type BootstrapStateRecord, type SelectBootstrapStateRootInput, type StateResult } from './state.js';
6
+ export interface InitApplicationInput {
7
+ readonly root: string;
8
+ /** The tool whose setup skill init publishes before the interview; the first of tools. */
9
+ readonly target: SurfaceTarget;
10
+ /** Every tool the person chose, written as surfaces.tools; the final sync renders each one. */
11
+ readonly tools: readonly SurfaceTarget[];
12
+ readonly registry?: string;
13
+ readonly accepted: boolean;
14
+ readonly acceptedPreviewSha256?: string;
15
+ readonly sessionId: string;
16
+ readonly platform: SelectBootstrapStateRootInput['platform'];
17
+ readonly home: string | undefined;
18
+ readonly xdgStateHome?: string;
19
+ readonly uid?: number;
20
+ readonly greenfieldAnswer?: Readonly<{
21
+ questionId: string;
22
+ bytes: string;
23
+ provenance: AnswerProvenance;
24
+ }>;
25
+ readonly resetAnswer?: Readonly<{
26
+ field: string;
27
+ acceptedPreviewSha256?: string;
28
+ }>;
29
+ /**
30
+ * The operator's answer to where the cockpit lives, required when root is a product repository.
31
+ * For "dedicated", root is the new cockpit folder and firstSibling the product repository beside it.
32
+ */
33
+ readonly cockpitRoot?: Readonly<{
34
+ kind: 'in-repo';
35
+ }> | Readonly<{
36
+ kind: 'dedicated';
37
+ firstSibling: string;
38
+ }>;
39
+ }
40
+ type CockpitRootAnswer = 'dedicated' | 'in-repo';
41
+ interface CockpitRootOption {
42
+ readonly answer: CockpitRootAnswer;
43
+ readonly root: string;
44
+ /** Directories init creates before it writes anything else; each is outside the directory init ran in. */
45
+ readonly creates: readonly string[];
46
+ readonly siblingsRoot: string;
47
+ readonly firstSibling: string;
48
+ readonly tradeOff: string;
49
+ /** Set when this option cannot be taken here; init refuses it before creating anything. */
50
+ readonly unavailable?: string;
51
+ }
52
+ /** Asked before anything is written, because the answer decides which directory init writes into. */
53
+ export interface CockpitRootQuestion {
54
+ readonly field: 'cockpit.root';
55
+ readonly why: string;
56
+ readonly recommended: CockpitRootAnswer;
57
+ readonly options: readonly CockpitRootOption[];
58
+ }
59
+ interface DigestRow {
60
+ readonly path: string;
61
+ readonly sha256: string;
62
+ }
63
+ interface BootstrapProjection {
64
+ readonly root: string;
65
+ readonly target: SurfaceTarget;
66
+ readonly sources: readonly DigestRow[];
67
+ readonly files: readonly DigestRow[];
68
+ readonly previewSha256: string;
69
+ }
70
+ interface OwnerOutcome {
71
+ readonly kind: string;
72
+ readonly status: number;
73
+ readonly diagnostics: readonly Diagnostic[];
74
+ readonly result: unknown;
75
+ }
76
+ export interface SelectedBootstrapPublicationAuthority {
77
+ readonly kind: 'selected-bootstrap-publication-authority';
78
+ }
79
+ type PreparedBootstrapOutcome = Readonly<{
80
+ kind: 'complete';
81
+ status: 0;
82
+ diagnostics: readonly Diagnostic[];
83
+ result: BootstrapProjection;
84
+ authority: SelectedBootstrapPublicationAuthority;
85
+ }> | Readonly<{
86
+ kind: 'refusal';
87
+ status: 2;
88
+ diagnostics: readonly Diagnostic[];
89
+ result: null;
90
+ }>;
91
+ type AppliedBootstrapOutcome = Readonly<{
92
+ kind: 'complete';
93
+ status: 0;
94
+ diagnostics: readonly Diagnostic[];
95
+ result: BootstrapProjection;
96
+ authority: SelectedBootstrapPublicationAuthority;
97
+ }> | Readonly<{
98
+ kind: 'refusal';
99
+ status: 2;
100
+ diagnostics: readonly Diagnostic[];
101
+ result: null;
102
+ }>;
103
+ type ResumedBootstrapOutcome = Readonly<{
104
+ kind: 'complete';
105
+ status: 0;
106
+ diagnostics: readonly Diagnostic[];
107
+ result: BootstrapProjection;
108
+ canonicalOwnership: true;
109
+ }> | Readonly<{
110
+ kind: 'refresh';
111
+ status: 0;
112
+ diagnostics: readonly Diagnostic[];
113
+ result: BootstrapProjection;
114
+ authority: SelectedBootstrapPublicationAuthority;
115
+ canonicalOwnership: false;
116
+ }> | Readonly<{
117
+ kind: 'pending';
118
+ status: 0;
119
+ diagnostics: readonly Diagnostic[];
120
+ result: null;
121
+ canonicalOwnership: false;
122
+ }> | Readonly<{
123
+ kind: 'refusal';
124
+ status: 2;
125
+ diagnostics: readonly Diagnostic[];
126
+ result: null;
127
+ }>;
128
+ type DestinationObservation = Readonly<{
129
+ kind: 'absent';
130
+ }> | Readonly<{
131
+ kind: 'available';
132
+ sha256: string;
133
+ }> | Readonly<{
134
+ kind: 'refusal';
135
+ diagnostics: readonly Diagnostic[];
136
+ }>;
137
+ export interface InitApplicationAdapters {
138
+ readonly now: () => string;
139
+ readonly prepareBootstrap: (input: Readonly<{
140
+ root: string;
141
+ target: SurfaceTarget;
142
+ tools: readonly SurfaceTarget[];
143
+ }>) => Promise<PreparedBootstrapOutcome>;
144
+ readonly resumeBootstrap: (input: Readonly<{
145
+ root: string;
146
+ target: SurfaceTarget;
147
+ tools: readonly SurfaceTarget[];
148
+ address: BootstrapStateAddress;
149
+ expectedRevision?: number;
150
+ expectedCommandSha256?: string;
151
+ }>) => Promise<ResumedBootstrapOutcome>;
152
+ readonly applyBootstrap: (authority: SelectedBootstrapPublicationAuthority) => Promise<AppliedBootstrapOutcome>;
153
+ readonly document: (input: DocumentCommandInput) => Promise<DocumentOutcome>;
154
+ readonly observeDestination: (input: Readonly<{
155
+ path: string;
156
+ byteLimit: number;
157
+ }>) => Promise<DestinationObservation>;
158
+ readonly validateConfig: (path: string) => Promise<OwnerOutcome>;
159
+ readonly synchronize: (input: Readonly<{
160
+ configPath: string;
161
+ bootstrapState?: Readonly<{
162
+ publication: StateResult<BootstrapStateRecord>;
163
+ address: BootstrapStateAddress;
164
+ }>;
165
+ }>) => Promise<OwnerOutcome>;
166
+ readonly check: (input: Readonly<{
167
+ configPath: string;
168
+ }>) => Promise<OwnerOutcome>;
169
+ readonly preflight: (input: Readonly<{
170
+ configPath: string;
171
+ }>) => Promise<OwnerOutcome>;
172
+ readonly classifyEstate?: (input: EstateObservationInput) => Promise<EstateClassificationOutcome>;
173
+ /** Says whether root is a product repository, which makes init ask where the cockpit lives. */
174
+ readonly observeRoot?: (input: Readonly<{
175
+ root: string;
176
+ }>) => Promise<'product-repository' | 'cockpit-root'>;
177
+ /** Proposes answers from files the repositories already carry, each derived (exact and complete) or inferred. */
178
+ readonly infer?: (input: Readonly<{
179
+ root: string;
180
+ configurationRoot?: string;
181
+ repositories: readonly Readonly<{
182
+ slug: string;
183
+ path: string;
184
+ }>[];
185
+ }>) => Promise<Readonly<{
186
+ facts: readonly Readonly<{
187
+ fields: readonly string[];
188
+ target: string;
189
+ value: unknown;
190
+ provenance: Readonly<{
191
+ kind: 'derived' | 'inferred';
192
+ source: string;
193
+ reason: string;
194
+ }>;
195
+ }>[];
196
+ skipped: readonly Readonly<{
197
+ source: string;
198
+ reason: string;
199
+ }>[];
200
+ }>>;
201
+ /** What the container runtime on this machine offers, read when the interview will ask for the machine floor. */
202
+ readonly measureMachine?: (input: Readonly<{
203
+ root: string;
204
+ }>) => Promise<MachineMeasurement>;
205
+ /** What check would report about the Compose files a drafted cockpit.toml declares; init never edits them, so it shows the edit. */
206
+ readonly composeFindings?: (input: Readonly<{
207
+ root: string;
208
+ draft: string;
209
+ }>) => Promise<readonly Diagnostic[]>;
210
+ /**
211
+ * Findings about prerequisites no init stage checks (the root's Git working tree, the cockpit's
212
+ * own install, sibling remotes, committed secret files), and whether a runtime is declared.
213
+ */
214
+ readonly inspectReadiness?: (input: Readonly<{
215
+ root: string;
216
+ configPath?: string;
217
+ repositories: readonly Readonly<{
218
+ slug: string;
219
+ root: string;
220
+ }>[];
221
+ checkRoot: boolean;
222
+ tools: readonly string[];
223
+ classification?: string;
224
+ }>) => Promise<Readonly<{
225
+ state: ReadinessReport['state'];
226
+ findings: readonly Diagnostic[];
227
+ }>>;
228
+ }
229
+ interface GreenfieldQuestion {
230
+ readonly id: string;
231
+ readonly field: string;
232
+ readonly source: string;
233
+ readonly why: string;
234
+ readonly expectedSha256?: string;
235
+ /** Lines preserve the owner draft exactly when joined with a newline, within bounded human rendering. */
236
+ readonly document?: readonly string[];
237
+ }
238
+ interface GreenfieldResult extends EstateClassificationResult {
239
+ readonly sourceObservationSha256: string;
240
+ readonly answers: readonly Readonly<{
241
+ questionId: string;
242
+ bytes: string;
243
+ sha256: string;
244
+ provenance: AnswerProvenance;
245
+ }>[];
246
+ }
247
+ type MachineMeasurement = Readonly<{
248
+ kind: 'complete';
249
+ memoryMb: number;
250
+ cpus: number;
251
+ observedAt: string;
252
+ }> | Readonly<{
253
+ kind: 'unavailable';
254
+ reason: string;
255
+ }>;
256
+ /**
257
+ * One proposed value for an unanswered field, and how it was established: "derived" is the complete
258
+ * answer read exactly from the named file and line, "measured" was observed on this machine, and
259
+ * "inferred" is a hint or partial value that needs judgement.
260
+ */
261
+ interface Proposal {
262
+ readonly target: string;
263
+ readonly value: unknown;
264
+ readonly provenance: Readonly<{
265
+ kind: 'derived' | 'measured' | 'inferred';
266
+ source: string;
267
+ reason: string;
268
+ }>;
269
+ }
270
+ interface OutstandingField {
271
+ readonly field: string;
272
+ readonly why: string;
273
+ /**
274
+ * "agent" when a derived proposal answers the whole field: the setup agent may accept it with
275
+ * provenance "derived", and bring-up proves it. Everything else needs a person: security
276
+ * boundaries, and values that are inferred, measured or chosen.
277
+ */
278
+ readonly confirmedBy: 'agent' | 'person';
279
+ readonly proposals: readonly Proposal[];
280
+ }
281
+ /** Every field the interview will still ask, in order, so an unattended caller can answer them in one pass. */
282
+ interface InterviewPlan {
283
+ /** Fields an earlier run already answered; their answers are kept. */
284
+ readonly answered: readonly string[];
285
+ readonly outstanding: readonly OutstandingField[];
286
+ readonly inferenceSkipped: readonly Readonly<{
287
+ source: string;
288
+ reason: string;
289
+ }>[];
290
+ /** Where the accepted cockpit lives, when init runs for a product repository; it is kept like any other answer. */
291
+ readonly cockpitRoot?: CockpitRootAnswer;
292
+ }
293
+ export interface InitResult {
294
+ readonly stage: BootstrapStateRecord['value']['stage'];
295
+ readonly root: string;
296
+ readonly target: SurfaceTarget;
297
+ readonly previewSha256: string;
298
+ readonly files: readonly DigestRow[];
299
+ readonly ownerOutcome?: OwnerOutcome;
300
+ readonly question?: GreenfieldQuestion;
301
+ readonly estate?: GreenfieldResult;
302
+ readonly interview?: InterviewPlan;
303
+ readonly cockpitRoot?: CockpitRootQuestion;
304
+ readonly resetAnswer?: Readonly<{
305
+ field: string;
306
+ revision: number;
307
+ invalidatedFields: readonly string[];
308
+ previewSha256: string;
309
+ }>;
310
+ /** Answers in cockpit.toml no person stated; each stays listed there, and doctor warns, until someone confirms it. */
311
+ readonly unconfirmed?: readonly UnconfirmedAnswer[];
312
+ /** Answers the setup agent accepted as read from exact sources, each with the file and line it came from. */
313
+ readonly derived?: readonly DerivedAnswer[];
314
+ /** This run's findings grouped under the prerequisites cockpit depends on: what to do next. */
315
+ readonly readiness?: ReadinessReport;
316
+ }
317
+ interface InitOutcomeBase {
318
+ readonly status: number;
319
+ readonly artifact: string | null;
320
+ readonly destination: string | null;
321
+ readonly diagnostics: readonly Diagnostic[];
322
+ readonly result: InitResult | null;
323
+ }
324
+ export type InitApplicationOutcome = (InitOutcomeBase & Readonly<{
325
+ kind: 'pending' | 'artifact' | 'complete';
326
+ status: 0;
327
+ }>) | (InitOutcomeBase & Readonly<{
328
+ kind: 'pending-dependency' | 'refusal';
329
+ status: 2;
330
+ }>);
331
+ export declare function unsupportedInitPlatformOutcome(platform: string): InitApplicationOutcome;
332
+ export declare function runInitApplication(input: InitApplicationInput, adapters: InitApplicationAdapters): Promise<InitApplicationOutcome>;
333
+ export {};