zorya-classifier 0.0.0-stage → 0.2.0

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 (369) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE.md +13 -0
  3. package/README.md +139 -2
  4. package/dist/app/cli-arguments.d.ts +40 -0
  5. package/dist/app/cli-arguments.js +67 -0
  6. package/dist/app/cli-route.d.ts +3 -0
  7. package/dist/app/cli-route.js +40 -0
  8. package/dist/app/create-classifier.d.ts +33 -0
  9. package/dist/app/create-classifier.js +312 -0
  10. package/dist/app/extraction-files.d.ts +9 -0
  11. package/dist/app/extraction-files.js +28 -0
  12. package/dist/cli.d.ts +2 -0
  13. package/dist/cli.js +77 -0
  14. package/dist/entities/boundary-view.d.ts +29 -0
  15. package/dist/entities/boundary-view.js +1 -0
  16. package/dist/entities/contracts.d.ts +471 -0
  17. package/dist/entities/contracts.js +97 -0
  18. package/dist/entities/cutout-raster.d.ts +7 -0
  19. package/dist/entities/cutout-raster.js +1 -0
  20. package/dist/entities/errors.d.ts +7 -0
  21. package/dist/entities/errors.js +16 -0
  22. package/dist/entities/object-proposals.d.ts +53 -0
  23. package/dist/entities/object-proposals.js +8 -0
  24. package/dist/entities/representation.d.ts +225 -0
  25. package/dist/entities/representation.js +33 -0
  26. package/dist/entities/segmentation-metadata.d.ts +11 -0
  27. package/dist/entities/segmentation-metadata.js +1 -0
  28. package/dist/entities/segmentation-verification.d.ts +30 -0
  29. package/dist/entities/segmentation-verification.js +1 -0
  30. package/dist/entities/segmentation.d.ts +159 -0
  31. package/dist/entities/segmentation.js +5 -0
  32. package/dist/entities/whole-object.d.ts +128 -0
  33. package/dist/entities/whole-object.js +7 -0
  34. package/dist/features/choice-beam-layout.d.ts +18 -0
  35. package/dist/features/choice-beam-layout.js +136 -0
  36. package/dist/features/choice.d.ts +4 -0
  37. package/dist/features/choice.js +83 -0
  38. package/dist/features/prompts.d.ts +8 -0
  39. package/dist/features/prompts.js +56 -0
  40. package/dist/features/segmentation/box-check.d.ts +10 -0
  41. package/dist/features/segmentation/box-check.js +299 -0
  42. package/dist/features/segmentation/mask.d.ts +6 -0
  43. package/dist/features/segmentation/mask.js +89 -0
  44. package/dist/features/segmentation/packed-mask.d.ts +5 -0
  45. package/dist/features/segmentation/packed-mask.js +53 -0
  46. package/dist/features/uniform-grid.d.ts +3 -0
  47. package/dist/features/uniform-grid.js +35 -0
  48. package/dist/index.d.ts +10 -0
  49. package/dist/index.js +2 -0
  50. package/dist/infrastructure/boundary-view.d.ts +2 -0
  51. package/dist/infrastructure/boundary-view.js +263 -0
  52. package/dist/infrastructure/openrouter-common.d.ts +130 -0
  53. package/dist/infrastructure/openrouter-common.js +317 -0
  54. package/dist/infrastructure/openrouter-vision.d.ts +11 -0
  55. package/dist/infrastructure/openrouter-vision.js +17 -0
  56. package/dist/infrastructure/openrouter.d.ts +19 -0
  57. package/dist/infrastructure/openrouter.js +207 -0
  58. package/dist/infrastructure/raster.d.ts +11 -0
  59. package/dist/infrastructure/raster.js +216 -0
  60. package/dist/infrastructure/segmentation/box-presentation.d.ts +2 -0
  61. package/dist/infrastructure/segmentation/box-presentation.js +136 -0
  62. package/dist/infrastructure/segmentation/cutout-raster.d.ts +3 -0
  63. package/dist/infrastructure/segmentation/cutout-raster.js +79 -0
  64. package/dist/infrastructure/segmentation/grabcut/index.d.ts +13 -0
  65. package/dist/infrastructure/segmentation/grabcut/index.js +118 -0
  66. package/dist/infrastructure/segmentation/grabcut/worker-inference.d.ts +47 -0
  67. package/dist/infrastructure/segmentation/grabcut/worker-inference.js +260 -0
  68. package/dist/infrastructure/segmentation/index.d.ts +2 -0
  69. package/dist/infrastructure/segmentation/index.js +2 -0
  70. package/dist/infrastructure/segmentation/mobile-sam/index.d.ts +58 -0
  71. package/dist/infrastructure/segmentation/mobile-sam/index.js +472 -0
  72. package/dist/infrastructure/segmentation/mobile-sam/worker-inference.d.ts +149 -0
  73. package/dist/infrastructure/segmentation/mobile-sam/worker-inference.js +845 -0
  74. package/dist/infrastructure/segmentation/native-child.d.ts +23 -0
  75. package/dist/infrastructure/segmentation/native-child.js +297 -0
  76. package/dist/infrastructure/segmentation/native-protocol.d.ts +923 -0
  77. package/dist/infrastructure/segmentation/native-protocol.js +242 -0
  78. package/dist/infrastructure/segmentation/native-worker.d.ts +1 -0
  79. package/dist/infrastructure/segmentation/native-worker.js +93 -0
  80. package/dist/infrastructure/segmentation/probe-backend.d.ts +1 -0
  81. package/dist/infrastructure/segmentation/probe-backend.js +31 -0
  82. package/dist/infrastructure/segmentation/proposal-presentation.d.ts +3 -0
  83. package/dist/infrastructure/segmentation/proposal-presentation.js +371 -0
  84. package/dist/infrastructure/segmentation/verify-asset.d.ts +4 -0
  85. package/dist/infrastructure/segmentation/verify-asset.js +32 -0
  86. package/dist/infrastructure/text-representation.d.ts +23 -0
  87. package/dist/infrastructure/text-representation.js +226 -0
  88. package/dist/infrastructure/vision-chat.d.ts +64 -0
  89. package/dist/infrastructure/vision-chat.js +318 -0
  90. package/dist/openai-compatible.d.ts +8 -0
  91. package/dist/openai-compatible.js +11 -0
  92. package/dist/openrouter.d.ts +4 -0
  93. package/dist/openrouter.js +2 -0
  94. package/dist/processes/boundary-state.d.ts +12 -0
  95. package/dist/processes/boundary-state.js +196 -0
  96. package/dist/processes/classify.d.ts +3 -0
  97. package/dist/processes/classify.js +39 -0
  98. package/dist/processes/extract-from-region.d.ts +19 -0
  99. package/dist/processes/extract-from-region.js +415 -0
  100. package/dist/processes/extract.d.ts +25 -0
  101. package/dist/processes/extract.js +223 -0
  102. package/dist/processes/locate.d.ts +3 -0
  103. package/dist/processes/locate.js +274 -0
  104. package/dist/processes/proposal-location.d.ts +19 -0
  105. package/dist/processes/proposal-location.js +396 -0
  106. package/dist/processes/whole-object.d.ts +7 -0
  107. package/dist/processes/whole-object.js +272 -0
  108. package/dist/segmentation.d.ts +10 -0
  109. package/dist/segmentation.js +4 -0
  110. package/dist/shared/choice-mass.d.ts +2 -0
  111. package/dist/shared/choice-mass.js +19 -0
  112. package/dist/shared/gate.d.ts +11 -0
  113. package/dist/shared/gate.js +52 -0
  114. package/dist/shared/input-budget.d.ts +7 -0
  115. package/dist/shared/input-budget.js +21 -0
  116. package/dist/shared/scope.d.ts +12 -0
  117. package/dist/shared/scope.js +29 -0
  118. package/docs/0.2.0-plan.md +190 -0
  119. package/docs/README.ru.md +258 -0
  120. package/docs/acceptance.md +144 -0
  121. package/docs/api.md +49 -0
  122. package/docs/architecture.md +45 -0
  123. package/docs/benchmarks.md +63 -0
  124. package/docs/categorical-presence-port.md +26 -0
  125. package/docs/evidence/current-linux-check.json +15 -0
  126. package/docs/evidence/decisions-completion-v1-manifest.json +96 -0
  127. package/docs/evidence/decisions-completion-v1-report.json +1205 -0
  128. package/docs/evidence/decisions-selection-v1-manifest.json +96 -0
  129. package/docs/evidence/decisions-selection-v1-report.json +1457 -0
  130. package/docs/evidence/jev-pricing-2026-10-18.json +69 -0
  131. package/docs/evidence/linux-check.json +20 -0
  132. package/docs/evidence/linux-check.txt +205 -0
  133. package/docs/evidence/live-release-smoke-manifest.json +82 -0
  134. package/docs/evidence/live-release-smoke-provenance.json +9 -0
  135. package/docs/evidence/live-release-smoke-report.json +2136 -0
  136. package/docs/evidence/live-v1-manifest.json +84 -0
  137. package/docs/evidence/live-v1-provenance.json +9 -0
  138. package/docs/evidence/live-v1-report.json +15555 -0
  139. package/docs/evidence/luna-decisions-fine-probe.json +19 -0
  140. package/docs/evidence/luna-decisions-locator-smoke-manifest.json +39 -0
  141. package/docs/evidence/luna-decisions-locator-smoke-report.json +149 -0
  142. package/docs/evidence/pack-check.json +26 -0
  143. package/docs/evidence/protocol-probes.json +61 -0
  144. package/docs/evidence/rejected-vision-selection-v1-qwen-photo-dev-01.json +42 -0
  145. package/docs/evidence/rejected-vision-selection-v1-qwen-photo-dev-17.json +42 -0
  146. package/docs/evidence/rejected-vision-selection-v1-qwen-photo-heldout-09.json +42 -0
  147. package/docs/evidence/rejected-vision-selection-v2-haiku-photo-dev-16.json +42 -0
  148. package/docs/evidence/rejected-vision-selection-v2-haiku-support-heldout-016.json +42 -0
  149. package/docs/evidence/v02/baseline.json +1043 -0
  150. package/docs/evidence/v02/boundary-variants.md +17 -0
  151. package/docs/evidence/v02/box-confirmation-dev40/README.md +15 -0
  152. package/docs/evidence/v02/box-confirmation-dev40/component-refinement.json +246 -0
  153. package/docs/evidence/v02/box-confirmation-dev40/evaluation.json +1663 -0
  154. package/docs/evidence/v02/box-confirmation-dev40/provenance.json +130 -0
  155. package/docs/evidence/v02/box-confirmation-dev40/report.json +127 -0
  156. package/docs/evidence/v02/box-confirmation-dev40-freeze-20261020-v1.json +230 -0
  157. package/docs/evidence/v02/box-confirmation-method-selection-20261020-v1.json +85 -0
  158. package/docs/evidence/v02/box-heldout-cancelled-before-dispatch-20261021-v1.json +32 -0
  159. package/docs/evidence/v02/box-heldout-combined-seal-20261021-v1.json +89 -0
  160. package/docs/evidence/v02/box-heldout-evaluator-truth-seal-20261021-v1.json +61 -0
  161. package/docs/evidence/v02/box-heldout-exclusion-audit-20261020-v1.json +81 -0
  162. package/docs/evidence/v02/box-heldout-map-seal-20261021-v1.json +48 -0
  163. package/docs/evidence/v02/box-heldout-photo-seal-20261020-v1.json +62 -0
  164. package/docs/evidence/v02/box-heldout-run-freeze-20261021-v1.json +61 -0
  165. package/docs/evidence/v02/box-heldout-source-review-20261020-v1.json +134 -0
  166. package/docs/evidence/v02/box-heldout-ui-seal-20261020-v1.json +44 -0
  167. package/docs/evidence/v02/calculator-proof-root-review-20261020-v1.json +63 -0
  168. package/docs/evidence/v02/categorical-dev40-freeze.json +94 -0
  169. package/docs/evidence/v02/categorical-dev40-preserve.json +460 -0
  170. package/docs/evidence/v02/categorical-dev40-target-only.json +460 -0
  171. package/docs/evidence/v02/categorical-heldout-admission-20261020-v3.json +215 -0
  172. package/docs/evidence/v02/categorical-heldout-admission-20261020-v4.json +270 -0
  173. package/docs/evidence/v02/categorical-heldout-dispatch-authorization-20261020-v4.json +79 -0
  174. package/docs/evidence/v02/categorical-heldout-predispatch-20261020-v3.json +57 -0
  175. package/docs/evidence/v02/categorical-heldout-producer-source-map-v4.json +262 -0
  176. package/docs/evidence/v02/categorical-heldout-producer-source-map.json +263 -0
  177. package/docs/evidence/v02/categorical-heldout-run-freeze-20261020-v3.json +35 -0
  178. package/docs/evidence/v02/categorical-heldout-run-freeze-20261020-v4.json +35 -0
  179. package/docs/evidence/v02/categorical-heldout-v4/README.md +35 -0
  180. package/docs/evidence/v02/categorical-heldout-v4/candidate-evaluation.json +2812 -0
  181. package/docs/evidence/v02/categorical-heldout-v4/candidate-physical-receipts.json +15261 -0
  182. package/docs/evidence/v02/categorical-heldout-v4/candidate-provenance.json +131 -0
  183. package/docs/evidence/v02/categorical-heldout-v4/control-evaluation.json +855 -0
  184. package/docs/evidence/v02/categorical-heldout-v4/control-physical-receipts.json +4402 -0
  185. package/docs/evidence/v02/categorical-heldout-v4/control-provenance.json +31 -0
  186. package/docs/evidence/v02/categorical-heldout-v4/mask-normalized-exploratory.json +682 -0
  187. package/docs/evidence/v02/categorical-heldout-v4/paired-qualification.json +21 -0
  188. package/docs/evidence/v02/categorical-heldout-v4/report.json +258 -0
  189. package/docs/evidence/v02/categorical-presence-dev6.json +144 -0
  190. package/docs/evidence/v02/categorical-presence-dev6.md +18 -0
  191. package/docs/evidence/v02/categorical-vision-method-selection.json +90 -0
  192. package/docs/evidence/v02/checked-region-component-v1/README.md +7 -0
  193. package/docs/evidence/v02/checked-region-component-v1/evidence.json +311 -0
  194. package/docs/evidence/v02/checked-region-resource-interrupted-2b0d09f.json +102 -0
  195. package/docs/evidence/v02/checked-region-segmentation-resource-4df544c-receipt.json +167 -0
  196. package/docs/evidence/v02/checked-region-segmentation-resource-4df544c-root-review.json +58 -0
  197. package/docs/evidence/v02/checked-region-segmentation-resource-987ac32-receipt.json +158 -0
  198. package/docs/evidence/v02/ci-012b935.json +17 -0
  199. package/docs/evidence/v02/ci-0c365cb.json +372 -0
  200. package/docs/evidence/v02/ci-185bde8.json +32 -0
  201. package/docs/evidence/v02/ci-24f849f.json +95 -0
  202. package/docs/evidence/v02/ci-25c19cd.json +375 -0
  203. package/docs/evidence/v02/ci-2922caf.json +375 -0
  204. package/docs/evidence/v02/ci-29357d7.json +29 -0
  205. package/docs/evidence/v02/ci-32aa90d.json +24 -0
  206. package/docs/evidence/v02/ci-35e3064.json +376 -0
  207. package/docs/evidence/v02/ci-4331b1b.json +384 -0
  208. package/docs/evidence/v02/ci-43b7426.json +376 -0
  209. package/docs/evidence/v02/ci-450439c.json +373 -0
  210. package/docs/evidence/v02/ci-46283fe.json +29 -0
  211. package/docs/evidence/v02/ci-4c9c09f.json +34 -0
  212. package/docs/evidence/v02/ci-5579646.json +27 -0
  213. package/docs/evidence/v02/ci-6f9cc15.json +127 -0
  214. package/docs/evidence/v02/ci-7c1051f.json +27 -0
  215. package/docs/evidence/v02/ci-9837888.json +34 -0
  216. package/docs/evidence/v02/ci-987ac32.json +29 -0
  217. package/docs/evidence/v02/ci-9d00fe5.json +25 -0
  218. package/docs/evidence/v02/ci-9f85acc.json +127 -0
  219. package/docs/evidence/v02/ci-be275a6.json +201 -0
  220. package/docs/evidence/v02/ci-c107ddf.json +372 -0
  221. package/docs/evidence/v02/ci-c35f67d.json +127 -0
  222. package/docs/evidence/v02/ci-c5eddd8.json +32 -0
  223. package/docs/evidence/v02/ci-d2042e0.json +372 -0
  224. package/docs/evidence/v02/ci-d684259.json +375 -0
  225. package/docs/evidence/v02/ci-e0c190b.json +127 -0
  226. package/docs/evidence/v02/ci-e551253.json +372 -0
  227. package/docs/evidence/v02/ci-f9d4633.json +29 -0
  228. package/docs/evidence/v02/dev1-proposal-evaluation.md +13 -0
  229. package/docs/evidence/v02/dev2-mobile-sam-proposal-oracle.md +21 -0
  230. package/docs/evidence/v02/dev2-proposal-evaluation.md +21 -0
  231. package/docs/evidence/v02/fresh-development.md +16 -0
  232. package/docs/evidence/v02/fresh-native-numeric/artifact-hashes.json +9 -0
  233. package/docs/evidence/v02/fresh-native-numeric/evaluation-root-v1.json +568 -0
  234. package/docs/evidence/v02/fresh-native-numeric/run-manifest.json +342 -0
  235. package/docs/evidence/v02/fresh-native-numeric/summary.json +5654 -0
  236. package/docs/evidence/v02/fresh-native-outline-axis/artifact-hashes.json +9 -0
  237. package/docs/evidence/v02/fresh-native-outline-axis/evaluation-root-v1.json +568 -0
  238. package/docs/evidence/v02/fresh-native-outline-axis/run-manifest.json +378 -0
  239. package/docs/evidence/v02/fresh-native-outline-axis/summary.json +5605 -0
  240. package/docs/evidence/v02/fresh-text/README.md +23 -0
  241. package/docs/evidence/v02/fresh-text/ascii-contours-v1/classify-followup-run-manifest.json +405 -0
  242. package/docs/evidence/v02/fresh-text/ascii-contours-v1/classify-followup-summary.json +1646 -0
  243. package/docs/evidence/v02/fresh-text/ascii-contours-v1/evaluation.json +568 -0
  244. package/docs/evidence/v02/fresh-text/ascii-contours-v1/original-run-manifest.json +404 -0
  245. package/docs/evidence/v02/fresh-text/ascii-contours-v1/original-summary.json +4416 -0
  246. package/docs/evidence/v02/fresh-text/ascii-luma-v1/classify-followup-run-manifest.json +405 -0
  247. package/docs/evidence/v02/fresh-text/ascii-luma-v1/classify-followup-summary.json +1646 -0
  248. package/docs/evidence/v02/fresh-text/ascii-luma-v1/evaluation.json +568 -0
  249. package/docs/evidence/v02/fresh-text/ascii-luma-v1/original-run-manifest.json +404 -0
  250. package/docs/evidence/v02/fresh-text/ascii-luma-v1/original-summary.json +4647 -0
  251. package/docs/evidence/v02/fresh-text/ascii-svg-layered-v1/classify-followup-run-manifest.json +405 -0
  252. package/docs/evidence/v02/fresh-text/ascii-svg-layered-v1/classify-followup-summary.json +846 -0
  253. package/docs/evidence/v02/fresh-text/ascii-svg-layered-v1/evaluation.json +568 -0
  254. package/docs/evidence/v02/fresh-text/ascii-svg-layered-v1/original-run-manifest.json +404 -0
  255. package/docs/evidence/v02/fresh-text/ascii-svg-layered-v1/original-summary.json +1789 -0
  256. package/docs/evidence/v02/fresh-text/no-image-control/evaluation.json +568 -0
  257. package/docs/evidence/v02/fresh-text/no-image-control/original-run-manifest.json +404 -0
  258. package/docs/evidence/v02/fresh-text/no-image-control/original-summary.json +3953 -0
  259. package/docs/evidence/v02/fresh-text/palette-grid-v1/classify-followup-run-manifest.json +405 -0
  260. package/docs/evidence/v02/fresh-text/palette-grid-v1/classify-followup-summary.json +1646 -0
  261. package/docs/evidence/v02/fresh-text/palette-grid-v1/evaluation.json +568 -0
  262. package/docs/evidence/v02/fresh-text/palette-grid-v1/original-run-manifest.json +404 -0
  263. package/docs/evidence/v02/fresh-text/palette-grid-v1/original-summary.json +3974 -0
  264. package/docs/evidence/v02/fresh-text/pixel-rle-v1/classify-followup-run-manifest.json +405 -0
  265. package/docs/evidence/v02/fresh-text/pixel-rle-v1/classify-followup-summary.json +1646 -0
  266. package/docs/evidence/v02/fresh-text/pixel-rle-v1/evaluation.json +568 -0
  267. package/docs/evidence/v02/fresh-text/pixel-rle-v1/original-run-manifest.json +404 -0
  268. package/docs/evidence/v02/fresh-text/pixel-rle-v1/original-summary.json +4945 -0
  269. package/docs/evidence/v02/fresh-text/report.json +284 -0
  270. package/docs/evidence/v02/fresh-text/svg-contours-v1/classify-followup-run-manifest.json +405 -0
  271. package/docs/evidence/v02/fresh-text/svg-contours-v1/classify-followup-summary.json +846 -0
  272. package/docs/evidence/v02/fresh-text/svg-contours-v1/evaluation.json +568 -0
  273. package/docs/evidence/v02/fresh-text/svg-contours-v1/original-run-manifest.json +404 -0
  274. package/docs/evidence/v02/fresh-text/svg-contours-v1/original-summary.json +2189 -0
  275. package/docs/evidence/v02/heldout-evaluation-20261020.md +37 -0
  276. package/docs/evidence/v02/heldout-input-derivation.md +18 -0
  277. package/docs/evidence/v02/integration-0c365cb.json +90 -0
  278. package/docs/evidence/v02/integration-25c19cd.json +52 -0
  279. package/docs/evidence/v02/integration-35e3064.json +41 -0
  280. package/docs/evidence/v02/integration-4331b1b.json +42 -0
  281. package/docs/evidence/v02/integration-4c9c09f.json +46 -0
  282. package/docs/evidence/v02/integration-8010aad.json +48 -0
  283. package/docs/evidence/v02/integration-c1aa640.json +41 -0
  284. package/docs/evidence/v02/integration-eea1790.json +46 -0
  285. package/docs/evidence/v02/integration-fa82e65.json +42 -0
  286. package/docs/evidence/v02/jpeg-transport-offline.json +268 -0
  287. package/docs/evidence/v02/jpeg-transport-offline.md +7 -0
  288. package/docs/evidence/v02/local-archive-cleanup.json +59 -0
  289. package/docs/evidence/v02/native-base64-after.json +30 -0
  290. package/docs/evidence/v02/native-base64-before.json +32 -0
  291. package/docs/evidence/v02/native-checked-region-windows-46283fe.json +248 -0
  292. package/docs/evidence/v02/native-checked-region-windows-987ac32.json +141 -0
  293. package/docs/evidence/v02/native-grabcut-windows-4c494a3-run2.json +148 -0
  294. package/docs/evidence/v02/native-grabcut-windows-4c494a3-run3.json +148 -0
  295. package/docs/evidence/v02/native-grabcut-windows-4c494a3.json +56 -0
  296. package/docs/evidence/v02/native-proposal-windows-0c365cb.json +148 -0
  297. package/docs/evidence/v02/native-proposal-windows-450439c.json +156 -0
  298. package/docs/evidence/v02/native-proposal-windows-4c9c09f-retry1.json +147 -0
  299. package/docs/evidence/v02/native-proposal-windows-4c9c09f.json +52 -0
  300. package/docs/evidence/v02/native-region-windows-efc9318.json +163 -0
  301. package/docs/evidence/v02/native-windows-eea1790-baseline.json +198 -0
  302. package/docs/evidence/v02/native-windows-eea1790.json +228 -0
  303. package/docs/evidence/v02/ordinary-luna-axis/run-manifest.json +99 -0
  304. package/docs/evidence/v02/ordinary-luna-axis/summary.json +811 -0
  305. package/docs/evidence/v02/owned-temp-cleanup-20261020-v1.json +28 -0
  306. package/docs/evidence/v02/presentation-paired-20261020.json +1438 -0
  307. package/docs/evidence/v02/proposal-resource-soak-261dc23.json +201 -0
  308. package/docs/evidence/v02/proposal-resource-soak-261dc23.md +15 -0
  309. package/docs/evidence/v02/proposal-resource-soak-450439c-receipt.md +13 -0
  310. package/docs/evidence/v02/reconstructed-c03-box.json +41 -0
  311. package/docs/evidence/v02/region-seeded-dev-v1/README.md +17 -0
  312. package/docs/evidence/v02/region-seeded-dev-v1/evaluation.json +260 -0
  313. package/docs/evidence/v02/region-seeded-dev-v2/README.md +15 -0
  314. package/docs/evidence/v02/region-seeded-dev-v2/evaluation.json +232 -0
  315. package/docs/evidence/v02/region-seeded-dev-v3-candidate-only/README.md +9 -0
  316. package/docs/evidence/v02/region-seeded-dev-v3-candidate-only/control-identity-failure.json +22 -0
  317. package/docs/evidence/v02/region-seeded-dev-v3-candidate-only/evaluation.json +160 -0
  318. package/docs/evidence/v02/region-seeded-dev-v3-control-r2/README.md +9 -0
  319. package/docs/evidence/v02/region-seeded-dev-v3-control-r2/attempt-accounting.json +55 -0
  320. package/docs/evidence/v02/region-seeded-dev-v3-control-r2/evaluation.json +136 -0
  321. package/docs/evidence/v02/region-seeded-development-control-r2-freeze-20261021.json +132 -0
  322. package/docs/evidence/v02/region-seeded-development-freeze-20261021-v1.json +167 -0
  323. package/docs/evidence/v02/region-seeded-development-freeze-20261021-v2.json +186 -0
  324. package/docs/evidence/v02/region-seeded-development-freeze-20261021-v3.json +205 -0
  325. package/docs/evidence/v02/region-seeded-heldout-cancelled-before-dispatch-20261021-v2.json +20 -0
  326. package/docs/evidence/v02/region-seeded-heldout-dispatch-authorization-20261021-v3.json +47 -0
  327. package/docs/evidence/v02/region-seeded-heldout-readiness-audit-20261021-v3.json +125 -0
  328. package/docs/evidence/v02/region-seeded-heldout-run-freeze-20261021-v2.json +234 -0
  329. package/docs/evidence/v02/region-seeded-heldout-run-freeze-20261021-v3.json +357 -0
  330. package/docs/evidence/v02/region-seeded-heldout-v3/README.md +19 -0
  331. package/docs/evidence/v02/region-seeded-heldout-v3/evaluation-summary.json +445 -0
  332. package/docs/evidence/v02/region-seeded-method-selection-20261021-v2.json +66 -0
  333. package/docs/evidence/v02/region-seeded-method-selection-20261021-v3.json +120 -0
  334. package/docs/evidence/v02/region-segmentation-resource-0ba4c87-receipt.json +156 -0
  335. package/docs/evidence/v02/resource-soak-linux-8010aad.json +125 -0
  336. package/docs/evidence/v02/screen-v2-terminal-evaluation.md +22 -0
  337. package/docs/evidence/v02/seed-outline/run-manifest.json +59 -0
  338. package/docs/evidence/v02/seed-outline/summary.json +487 -0
  339. package/docs/evidence/v02/seed-unbounded/run-manifest.json +80 -0
  340. package/docs/evidence/v02/seed-unbounded/summary.json +730 -0
  341. package/docs/evidence/v02/segmentation/README.md +21 -0
  342. package/docs/evidence/v02/segmentation/component-comparison-summary.json +240 -0
  343. package/docs/evidence/v02/segmentation/provenance/MOBILE-SAM-LICENSE.txt +201 -0
  344. package/docs/evidence/v02/segmentation/provenance/OPENCV-LICENSE.txt +202 -0
  345. package/docs/evidence/v02/segmentation/provenance/mobile-sam-download-receipt.json +29 -0
  346. package/docs/evidence/v02/segmentation/provenance/mobile-sam-graph-audit.json +214 -0
  347. package/docs/evidence/v02/segmentation/provenance/mobile-sam-model-metadata.json +166 -0
  348. package/docs/evidence/v02/split-choice-noul-dev6.json +72 -0
  349. package/docs/evidence/v02/split-choice-noul-dev6.md +11 -0
  350. package/docs/evidence/v02/supported-vision-screen-20261020.md +65 -0
  351. package/docs/evidence/v02/wesnoth-1.16.11-minimap-projection-source-audit.md +56 -0
  352. package/docs/evidence/v02/wesnoth-proof-root-review-20261020-v1.json +76 -0
  353. package/docs/evidence/vision-cost-reconciliation.json +37 -0
  354. package/docs/evidence/vision-model-summary.json +562 -0
  355. package/docs/evidence/vision-selection-v1-manifest.json +95 -0
  356. package/docs/evidence/vision-selection-v1-report.json +4598 -0
  357. package/docs/evidence/vision-selection-v2-manifest.json +95 -0
  358. package/docs/evidence/vision-selection-v2-report.json +1139 -0
  359. package/docs/evidence/windows-native.json +73 -0
  360. package/docs/evidence/windows-secrets.json +46 -0
  361. package/docs/operations.md +21 -0
  362. package/docs/plan.md +27 -0
  363. package/docs/provenance.json +32 -0
  364. package/docs/publishing.md +30 -0
  365. package/docs/research/text-transport-audit.md +66 -0
  366. package/docs/results.md +69 -0
  367. package/docs/v02-usage.md +162 -0
  368. package/docs/vision-results.md +78 -0
  369. package/package.json +114 -4
@@ -0,0 +1,225 @@
1
+ import type { DecisionState, GridCell, PixelRect, RasterImage } from './contracts.js';
2
+ import { z } from 'zod';
3
+ /** Canonical oriented RGBA8. Alpha remains meaningful; transparent is not black. */
4
+ export interface RgbaRaster {
5
+ data: Uint8Array;
6
+ width: number;
7
+ height: number;
8
+ format: 'rgba8';
9
+ }
10
+ export interface RepresentationView {
11
+ id: string;
12
+ role: 'source' | 'crop' | 'grid';
13
+ image: RasterImage;
14
+ sourceRegion: PixelRect;
15
+ grid?: {
16
+ cells: readonly GridCell[];
17
+ labels: ReadonlyMap<string, string>;
18
+ };
19
+ }
20
+ export interface RepresentationMetadata {
21
+ profile: string;
22
+ bytes: number;
23
+ views: {
24
+ id: string;
25
+ sourceRegion: PixelRect;
26
+ width: number;
27
+ height: number;
28
+ scaleX: number;
29
+ scaleY: number;
30
+ content?: PixelRect;
31
+ }[];
32
+ }
33
+ /** Prepare once for the entire decision request, including all candidate views. */
34
+ export interface ImageRepresentationPort {
35
+ prepare(input: {
36
+ source: RasterImage;
37
+ views: readonly RepresentationView[];
38
+ signal: AbortSignal;
39
+ }): Promise<{
40
+ state: DecisionState;
41
+ metadata: RepresentationMetadata;
42
+ }>;
43
+ }
44
+ export declare const representationLimits: Readonly<{
45
+ totalBytes: number;
46
+ partCharacters: 64000;
47
+ maxSide: 64;
48
+ maxViews: 9;
49
+ }>;
50
+ export declare const preparedTextSchema: z.ZodObject<{
51
+ state: z.ZodArray<z.ZodString, "many">;
52
+ metadata: z.ZodObject<{
53
+ profile: z.ZodString;
54
+ bytes: z.ZodNumber;
55
+ views: z.ZodArray<z.ZodObject<{
56
+ id: z.ZodString;
57
+ sourceRegion: z.ZodObject<{
58
+ left: z.ZodNumber;
59
+ top: z.ZodNumber;
60
+ width: z.ZodNumber;
61
+ height: z.ZodNumber;
62
+ }, "strict", z.ZodTypeAny, {
63
+ left: number;
64
+ top: number;
65
+ width: number;
66
+ height: number;
67
+ }, {
68
+ left: number;
69
+ top: number;
70
+ width: number;
71
+ height: number;
72
+ }>;
73
+ width: z.ZodNumber;
74
+ height: z.ZodNumber;
75
+ scaleX: z.ZodNumber;
76
+ scaleY: z.ZodNumber;
77
+ content: z.ZodOptional<z.ZodObject<{
78
+ left: z.ZodNumber;
79
+ top: z.ZodNumber;
80
+ width: z.ZodNumber;
81
+ height: z.ZodNumber;
82
+ }, "strict", z.ZodTypeAny, {
83
+ left: number;
84
+ top: number;
85
+ width: number;
86
+ height: number;
87
+ }, {
88
+ left: number;
89
+ top: number;
90
+ width: number;
91
+ height: number;
92
+ }>>;
93
+ }, "strict", z.ZodTypeAny, {
94
+ width: number;
95
+ height: number;
96
+ id: string;
97
+ sourceRegion: {
98
+ left: number;
99
+ top: number;
100
+ width: number;
101
+ height: number;
102
+ };
103
+ scaleX: number;
104
+ scaleY: number;
105
+ content?: {
106
+ left: number;
107
+ top: number;
108
+ width: number;
109
+ height: number;
110
+ } | undefined;
111
+ }, {
112
+ width: number;
113
+ height: number;
114
+ id: string;
115
+ sourceRegion: {
116
+ left: number;
117
+ top: number;
118
+ width: number;
119
+ height: number;
120
+ };
121
+ scaleX: number;
122
+ scaleY: number;
123
+ content?: {
124
+ left: number;
125
+ top: number;
126
+ width: number;
127
+ height: number;
128
+ } | undefined;
129
+ }>, "many">;
130
+ }, "strict", z.ZodTypeAny, {
131
+ profile: string;
132
+ bytes: number;
133
+ views: {
134
+ width: number;
135
+ height: number;
136
+ id: string;
137
+ sourceRegion: {
138
+ left: number;
139
+ top: number;
140
+ width: number;
141
+ height: number;
142
+ };
143
+ scaleX: number;
144
+ scaleY: number;
145
+ content?: {
146
+ left: number;
147
+ top: number;
148
+ width: number;
149
+ height: number;
150
+ } | undefined;
151
+ }[];
152
+ }, {
153
+ profile: string;
154
+ bytes: number;
155
+ views: {
156
+ width: number;
157
+ height: number;
158
+ id: string;
159
+ sourceRegion: {
160
+ left: number;
161
+ top: number;
162
+ width: number;
163
+ height: number;
164
+ };
165
+ scaleX: number;
166
+ scaleY: number;
167
+ content?: {
168
+ left: number;
169
+ top: number;
170
+ width: number;
171
+ height: number;
172
+ } | undefined;
173
+ }[];
174
+ }>;
175
+ }, "strict", z.ZodTypeAny, {
176
+ metadata: {
177
+ profile: string;
178
+ bytes: number;
179
+ views: {
180
+ width: number;
181
+ height: number;
182
+ id: string;
183
+ sourceRegion: {
184
+ left: number;
185
+ top: number;
186
+ width: number;
187
+ height: number;
188
+ };
189
+ scaleX: number;
190
+ scaleY: number;
191
+ content?: {
192
+ left: number;
193
+ top: number;
194
+ width: number;
195
+ height: number;
196
+ } | undefined;
197
+ }[];
198
+ };
199
+ state: string[];
200
+ }, {
201
+ metadata: {
202
+ profile: string;
203
+ bytes: number;
204
+ views: {
205
+ width: number;
206
+ height: number;
207
+ id: string;
208
+ sourceRegion: {
209
+ left: number;
210
+ top: number;
211
+ width: number;
212
+ height: number;
213
+ };
214
+ scaleX: number;
215
+ scaleY: number;
216
+ content?: {
217
+ left: number;
218
+ top: number;
219
+ width: number;
220
+ height: number;
221
+ } | undefined;
222
+ }[];
223
+ };
224
+ state: string[];
225
+ }>;
@@ -0,0 +1,33 @@
1
+ import { pixelRectSchema } from './contracts.js';
2
+ import { z } from 'zod';
3
+ export const representationLimits = Object.freeze({
4
+ totalBytes: 64 * 1024,
5
+ partCharacters: 64000,
6
+ maxSide: 64,
7
+ maxViews: 9,
8
+ });
9
+ export const preparedTextSchema = z
10
+ .object({
11
+ state: z.array(z.string().min(1).max(representationLimits.partCharacters)).min(1).max(64),
12
+ metadata: z
13
+ .object({
14
+ profile: z.string().min(1).max(128),
15
+ bytes: z.number().int().nonnegative().max(representationLimits.totalBytes),
16
+ views: z
17
+ .array(z
18
+ .object({
19
+ id: z.string().min(1).max(256),
20
+ sourceRegion: pixelRectSchema,
21
+ width: z.number().int().positive().max(16384),
22
+ height: z.number().int().positive().max(16384),
23
+ scaleX: z.number().finite().positive(),
24
+ scaleY: z.number().finite().positive(),
25
+ content: pixelRectSchema.optional(),
26
+ })
27
+ .strict())
28
+ .min(1)
29
+ .max(representationLimits.maxViews),
30
+ })
31
+ .strict(),
32
+ })
33
+ .strict();
@@ -0,0 +1,11 @@
1
+ /** Diagnostic native scores are uncalibrated finite values, not probabilities. */
2
+ export interface SegmentationMetadata {
3
+ method: string;
4
+ backend: string;
5
+ durationMs: number;
6
+ input: {
7
+ width: number;
8
+ height: number;
9
+ };
10
+ qualityScore?: number;
11
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,30 @@
1
+ import type { ChoiceSelection, DecisionMetadata, PixelRect, RasterImage } from './contracts.js';
2
+ import type { RgbaRaster } from './representation.js';
3
+ /** A containment check for the same visible instance identified by the original seed. */
4
+ export interface SegmentationBoxCheckInput {
5
+ image: RgbaRaster;
6
+ region: PixelRect;
7
+ seedRegion: PixelRect;
8
+ roi: PixelRect;
9
+ target: string;
10
+ exclusions: readonly string[];
11
+ signal: AbortSignal;
12
+ }
13
+ export type SegmentationBoxVerdict = 'complete' | 'needs-expansion' | 'unknown';
14
+ export interface SegmentationBoxCheckResult {
15
+ verdict: SegmentationBoxVerdict;
16
+ selection: ChoiceSelection;
17
+ metadata: DecisionMetadata;
18
+ }
19
+ export interface SegmentationBoxCheckPort {
20
+ check(input: SegmentationBoxCheckInput): Promise<SegmentationBoxCheckResult>;
21
+ }
22
+ /** Full oriented source with the actual mask box and a seed anchor; no generated geometry. */
23
+ export interface SegmentationBoxPresentationPort {
24
+ render(input: SegmentationBoxCheckInput): Promise<RasterImage>;
25
+ }
26
+ /** Containment evidence is separate from the correctness of individual mask pixels. */
27
+ export interface SegmentationVerification {
28
+ checks: SegmentationBoxCheckResult[];
29
+ expansion: 'not-needed' | 'unsupported' | 'no-enclosing-mask' | 'rejected-mask' | 'expanded';
30
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,159 @@
1
+ import type { LocalizationMetadata, LocalizationResult, PixelRect } from './contracts.js';
2
+ import type { RgbaRaster } from './representation.js';
3
+ import type { ObjectBounds, WholeObjectFailure, WholeObjectLocated } from './whole-object.js';
4
+ import { z } from 'zod';
5
+ import type { SegmentationMetadata } from './segmentation-metadata.js';
6
+ import type { SegmentationVerification } from './segmentation-verification.js';
7
+ export type { SegmentationMetadata } from './segmentation-metadata.js';
8
+ export declare const extractSchema: z.ZodObject<{
9
+ image: z.ZodEffects<z.ZodType<Uint8Array<ArrayBufferLike>, z.ZodTypeDef, Uint8Array<ArrayBufferLike>>, Uint8Array<ArrayBufferLike>, Uint8Array<ArrayBufferLike>>;
10
+ target: z.ZodString;
11
+ exclusions: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
12
+ roi: z.ZodOptional<z.ZodObject<{
13
+ left: z.ZodNumber;
14
+ top: z.ZodNumber;
15
+ width: z.ZodNumber;
16
+ height: z.ZodNumber;
17
+ }, "strict", z.ZodTypeAny, {
18
+ left: number;
19
+ top: number;
20
+ width: number;
21
+ height: number;
22
+ }, {
23
+ left: number;
24
+ top: number;
25
+ width: number;
26
+ height: number;
27
+ }>>;
28
+ representation: z.ZodOptional<z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
29
+ type: z.ZodLiteral<"vision">;
30
+ }, "strict", z.ZodTypeAny, {
31
+ type: "vision";
32
+ }, {
33
+ type: "vision";
34
+ }>, z.ZodObject<{
35
+ type: z.ZodLiteral<"experimental-text">;
36
+ profile: z.ZodLiteral<"text-image-v1">;
37
+ }, "strict", z.ZodTypeAny, {
38
+ type: "experimental-text";
39
+ profile: "text-image-v1";
40
+ }, {
41
+ type: "experimental-text";
42
+ profile: "text-image-v1";
43
+ }>]>>;
44
+ boxTolerancePx: z.ZodDefault<z.ZodNumber>;
45
+ maxExtentPasses: z.ZodDefault<z.ZodNumber>;
46
+ } & {
47
+ mode: z.ZodOptional<z.ZodLiteral<"whole-object">>;
48
+ }, "strict", z.ZodTypeAny, {
49
+ image: Uint8Array<ArrayBufferLike>;
50
+ target: string;
51
+ exclusions: string[];
52
+ boxTolerancePx: number;
53
+ maxExtentPasses: number;
54
+ representation?: {
55
+ type: "vision";
56
+ } | {
57
+ type: "experimental-text";
58
+ profile: "text-image-v1";
59
+ } | undefined;
60
+ roi?: {
61
+ left: number;
62
+ top: number;
63
+ width: number;
64
+ height: number;
65
+ } | undefined;
66
+ mode?: "whole-object" | undefined;
67
+ }, {
68
+ image: Uint8Array<ArrayBufferLike>;
69
+ target: string;
70
+ representation?: {
71
+ type: "vision";
72
+ } | {
73
+ type: "experimental-text";
74
+ profile: "text-image-v1";
75
+ } | undefined;
76
+ exclusions?: string[] | undefined;
77
+ roi?: {
78
+ left: number;
79
+ top: number;
80
+ width: number;
81
+ height: number;
82
+ } | undefined;
83
+ mode?: "whole-object" | undefined;
84
+ boxTolerancePx?: number | undefined;
85
+ maxExtentPasses?: number | undefined;
86
+ }>;
87
+ export type ExtractInput = z.input<typeof extractSchema> & {
88
+ signal?: AbortSignal;
89
+ };
90
+ export interface BinaryMask {
91
+ data: Uint8Array;
92
+ width: number;
93
+ height: number;
94
+ format: 'binary-u8';
95
+ }
96
+ export interface SegmentationInput {
97
+ image: RgbaRaster;
98
+ seedRegion: PixelRect;
99
+ /** A seed prompt identifies the instance on the full image; wholeRegion then limits search. */
100
+ prompt?: 'whole-region' | 'seed-region';
101
+ wholeRegion: PixelRect;
102
+ bounds: ObjectBounds;
103
+ roi: PixelRect;
104
+ target: string;
105
+ exclusions: readonly string[];
106
+ completeness: 'visible-object' | 'boundary-limited';
107
+ signal: AbortSignal;
108
+ }
109
+ export type SegmentationResult = {
110
+ status: 'segmented';
111
+ mask: BinaryMask;
112
+ metadata: SegmentationMetadata;
113
+ } | {
114
+ status: 'unknown';
115
+ reason: string;
116
+ metadata: SegmentationMetadata;
117
+ };
118
+ /** Caller-owned. settle joins physical work; dispose closes this adapter only. */
119
+ export interface SegmentationPort {
120
+ segment(input: SegmentationInput): Promise<SegmentationResult>;
121
+ /** Optional actual enclosing mask on the full source; previousMask is full-source binary-u8. */
122
+ expand?(input: SegmentationInput, previousMask: BinaryMask): Promise<SegmentationResult>;
123
+ settle(): Promise<void>;
124
+ dispose(): Promise<void>;
125
+ }
126
+ export type ExtractionResult = {
127
+ status: 'extracted';
128
+ location: WholeObjectLocated;
129
+ png: Uint8Array;
130
+ mask: BinaryMask;
131
+ region: PixelRect;
132
+ /** Centre of the mask-derived source-space bounding rectangle. */
133
+ center: {
134
+ x: number;
135
+ y: number;
136
+ };
137
+ offset: {
138
+ x: number;
139
+ y: number;
140
+ };
141
+ segmentation: SegmentationMetadata;
142
+ verification?: SegmentationVerification;
143
+ } | WholeObjectFailure | {
144
+ status: 'unknown';
145
+ reason: 'segmentation-uncertain';
146
+ location: WholeObjectLocated;
147
+ segmentation: SegmentationMetadata;
148
+ verification?: SegmentationVerification;
149
+ } | {
150
+ status: 'unknown';
151
+ reason: 'segmentation-uncertain';
152
+ /** The original grid result remains a seed, never an inferred object box. */
153
+ seedLocation: Extract<LocalizationResult, {
154
+ status: 'located';
155
+ }>;
156
+ metadata: LocalizationMetadata;
157
+ segmentation: SegmentationMetadata;
158
+ verification?: SegmentationVerification;
159
+ };
@@ -0,0 +1,5 @@
1
+ import { wholeObjectSchema } from './whole-object.js';
2
+ import { z } from 'zod';
3
+ export const extractSchema = wholeObjectSchema.extend({
4
+ mode: z.literal('whole-object').optional(),
5
+ });
@@ -0,0 +1,128 @@
1
+ import { z } from 'zod';
2
+ import type { SegmentationMetadata } from './segmentation-metadata.js';
3
+ import type { SegmentationVerification } from './segmentation-verification.js';
4
+ import type { LocalizationMetadata, LocalizationResult, LocateInput, PixelRect } from './contracts.js';
5
+ export declare const wholeObjectSchema: z.ZodObject<{
6
+ image: z.ZodEffects<z.ZodType<Uint8Array<ArrayBufferLike>, z.ZodTypeDef, Uint8Array<ArrayBufferLike>>, Uint8Array<ArrayBufferLike>, Uint8Array<ArrayBufferLike>>;
7
+ target: z.ZodString;
8
+ exclusions: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
9
+ roi: z.ZodOptional<z.ZodObject<{
10
+ left: z.ZodNumber;
11
+ top: z.ZodNumber;
12
+ width: z.ZodNumber;
13
+ height: z.ZodNumber;
14
+ }, "strict", z.ZodTypeAny, {
15
+ left: number;
16
+ top: number;
17
+ width: number;
18
+ height: number;
19
+ }, {
20
+ left: number;
21
+ top: number;
22
+ width: number;
23
+ height: number;
24
+ }>>;
25
+ representation: z.ZodOptional<z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
26
+ type: z.ZodLiteral<"vision">;
27
+ }, "strict", z.ZodTypeAny, {
28
+ type: "vision";
29
+ }, {
30
+ type: "vision";
31
+ }>, z.ZodObject<{
32
+ type: z.ZodLiteral<"experimental-text">;
33
+ profile: z.ZodLiteral<"text-image-v1">;
34
+ }, "strict", z.ZodTypeAny, {
35
+ type: "experimental-text";
36
+ profile: "text-image-v1";
37
+ }, {
38
+ type: "experimental-text";
39
+ profile: "text-image-v1";
40
+ }>]>>;
41
+ } & {
42
+ mode: z.ZodLiteral<"whole-object">;
43
+ boxTolerancePx: z.ZodDefault<z.ZodNumber>;
44
+ maxExtentPasses: z.ZodDefault<z.ZodNumber>;
45
+ }, "strict", z.ZodTypeAny, {
46
+ image: Uint8Array<ArrayBufferLike>;
47
+ target: string;
48
+ exclusions: string[];
49
+ mode: "whole-object";
50
+ boxTolerancePx: number;
51
+ maxExtentPasses: number;
52
+ representation?: {
53
+ type: "vision";
54
+ } | {
55
+ type: "experimental-text";
56
+ profile: "text-image-v1";
57
+ } | undefined;
58
+ roi?: {
59
+ left: number;
60
+ top: number;
61
+ width: number;
62
+ height: number;
63
+ } | undefined;
64
+ }, {
65
+ image: Uint8Array<ArrayBufferLike>;
66
+ target: string;
67
+ mode: "whole-object";
68
+ representation?: {
69
+ type: "vision";
70
+ } | {
71
+ type: "experimental-text";
72
+ profile: "text-image-v1";
73
+ } | undefined;
74
+ exclusions?: string[] | undefined;
75
+ roi?: {
76
+ left: number;
77
+ top: number;
78
+ width: number;
79
+ height: number;
80
+ } | undefined;
81
+ boxTolerancePx?: number | undefined;
82
+ maxExtentPasses?: number | undefined;
83
+ }>;
84
+ export type RegionLocateInput = LocateInput;
85
+ export type WholeObjectLocateInput = z.input<typeof wholeObjectSchema> & {
86
+ signal?: AbortSignal;
87
+ };
88
+ export type AnyLocateInput = RegionLocateInput | WholeObjectLocateInput;
89
+ export interface BoundaryInterval {
90
+ start: number;
91
+ endExclusive: number;
92
+ }
93
+ export interface ObjectBounds {
94
+ left: BoundaryInterval;
95
+ right: BoundaryInterval;
96
+ top: BoundaryInterval;
97
+ bottom: BoundaryInterval;
98
+ }
99
+ type LocalizationFailure = Exclude<LocalizationResult, {
100
+ status: 'located';
101
+ }>;
102
+ export interface WholeObjectLocated {
103
+ status: 'located';
104
+ kind: 'whole-object';
105
+ region: PixelRect;
106
+ normalizedRegion: PixelRect;
107
+ seedRegion: PixelRect;
108
+ bounds: ObjectBounds;
109
+ completeness: 'visible-object' | 'boundary-limited';
110
+ method: 'grid-object-extent-v1' | 'pixel-mask-proposals-v1' | 'region-segmentation-v1' | 'region-checked-segmentation-v1';
111
+ /** Available when the bounds have been derived from actual segmented foreground. */
112
+ center?: {
113
+ x: number;
114
+ y: number;
115
+ };
116
+ /** Present only for the explicitly configured, caller-owned mask proposal workflow. */
117
+ proposalMetadata?: SegmentationMetadata;
118
+ verification?: SegmentationVerification;
119
+ metadata: LocalizationMetadata;
120
+ }
121
+ export type WholeObjectFailure = LocalizationFailure | {
122
+ status: 'unknown';
123
+ reason: 'instance-ambiguous' | 'extent-uncertain' | 'extent-inconsistent' | 'representation-limit' | 'segmentation-uncertain';
124
+ metadata: LocalizationMetadata;
125
+ verification?: SegmentationVerification;
126
+ };
127
+ export type WholeObjectLocalizationResult = WholeObjectLocated | WholeObjectFailure;
128
+ export {};
@@ -0,0 +1,7 @@
1
+ import { z } from 'zod';
2
+ import { locateSchema } from './contracts.js';
3
+ export const wholeObjectSchema = locateSchema.extend({
4
+ mode: z.literal('whole-object'),
5
+ boxTolerancePx: z.number().int().min(1).max(64).default(8),
6
+ maxExtentPasses: z.number().int().min(1).max(3).default(3),
7
+ });
@@ -0,0 +1,18 @@
1
+ import type { PixelRect } from '../entities/contracts.js';
2
+ import type { ChoiceAnswer as CategoricalAnswer, GridCell, GridPanel as GridDecisionPanel } from '../entities/contracts.js';
3
+ type ChoiceMap = Pick<CategoricalAnswer, 'choice' | 'probabilities'> | {
4
+ choice: string;
5
+ ranking: readonly string[];
6
+ };
7
+ type PanelGeometry = Pick<GridDecisionPanel, 'id' | 'region' | 'cells'>;
8
+ type RankedCell = {
9
+ cell: GridCell;
10
+ probability: number | null;
11
+ };
12
+ /** Native Choice is validated by its consumer; this helper never normalizes raw probabilities. */
13
+ export declare function rankChoiceBeamCells(cells: readonly GridCell[], answer: ChoiceMap): RankedCell[];
14
+ /** S7 coarse first pass owns every requested source pixel once, including tiny or narrow ROIs. */
15
+ export declare function choiceBeamFirstCells(region: PixelRect): GridCell[];
16
+ /** Four independent padded source ROIs; an impossible bounded layout returns no panels. */
17
+ export declare function choiceBeamPanels(region: PixelRect, coarseCells: readonly GridCell[], answer: ChoiceMap, accuracyPx: number): PanelGeometry[];
18
+ export {};