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.
- package/LICENSE +21 -0
- package/NOTICE.md +13 -0
- package/README.md +139 -2
- package/dist/app/cli-arguments.d.ts +40 -0
- package/dist/app/cli-arguments.js +67 -0
- package/dist/app/cli-route.d.ts +3 -0
- package/dist/app/cli-route.js +40 -0
- package/dist/app/create-classifier.d.ts +33 -0
- package/dist/app/create-classifier.js +312 -0
- package/dist/app/extraction-files.d.ts +9 -0
- package/dist/app/extraction-files.js +28 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +77 -0
- package/dist/entities/boundary-view.d.ts +29 -0
- package/dist/entities/boundary-view.js +1 -0
- package/dist/entities/contracts.d.ts +471 -0
- package/dist/entities/contracts.js +97 -0
- package/dist/entities/cutout-raster.d.ts +7 -0
- package/dist/entities/cutout-raster.js +1 -0
- package/dist/entities/errors.d.ts +7 -0
- package/dist/entities/errors.js +16 -0
- package/dist/entities/object-proposals.d.ts +53 -0
- package/dist/entities/object-proposals.js +8 -0
- package/dist/entities/representation.d.ts +225 -0
- package/dist/entities/representation.js +33 -0
- package/dist/entities/segmentation-metadata.d.ts +11 -0
- package/dist/entities/segmentation-metadata.js +1 -0
- package/dist/entities/segmentation-verification.d.ts +30 -0
- package/dist/entities/segmentation-verification.js +1 -0
- package/dist/entities/segmentation.d.ts +159 -0
- package/dist/entities/segmentation.js +5 -0
- package/dist/entities/whole-object.d.ts +128 -0
- package/dist/entities/whole-object.js +7 -0
- package/dist/features/choice-beam-layout.d.ts +18 -0
- package/dist/features/choice-beam-layout.js +136 -0
- package/dist/features/choice.d.ts +4 -0
- package/dist/features/choice.js +83 -0
- package/dist/features/prompts.d.ts +8 -0
- package/dist/features/prompts.js +56 -0
- package/dist/features/segmentation/box-check.d.ts +10 -0
- package/dist/features/segmentation/box-check.js +299 -0
- package/dist/features/segmentation/mask.d.ts +6 -0
- package/dist/features/segmentation/mask.js +89 -0
- package/dist/features/segmentation/packed-mask.d.ts +5 -0
- package/dist/features/segmentation/packed-mask.js +53 -0
- package/dist/features/uniform-grid.d.ts +3 -0
- package/dist/features/uniform-grid.js +35 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +2 -0
- package/dist/infrastructure/boundary-view.d.ts +2 -0
- package/dist/infrastructure/boundary-view.js +263 -0
- package/dist/infrastructure/openrouter-common.d.ts +130 -0
- package/dist/infrastructure/openrouter-common.js +317 -0
- package/dist/infrastructure/openrouter-vision.d.ts +11 -0
- package/dist/infrastructure/openrouter-vision.js +17 -0
- package/dist/infrastructure/openrouter.d.ts +19 -0
- package/dist/infrastructure/openrouter.js +207 -0
- package/dist/infrastructure/raster.d.ts +11 -0
- package/dist/infrastructure/raster.js +216 -0
- package/dist/infrastructure/segmentation/box-presentation.d.ts +2 -0
- package/dist/infrastructure/segmentation/box-presentation.js +136 -0
- package/dist/infrastructure/segmentation/cutout-raster.d.ts +3 -0
- package/dist/infrastructure/segmentation/cutout-raster.js +79 -0
- package/dist/infrastructure/segmentation/grabcut/index.d.ts +13 -0
- package/dist/infrastructure/segmentation/grabcut/index.js +118 -0
- package/dist/infrastructure/segmentation/grabcut/worker-inference.d.ts +47 -0
- package/dist/infrastructure/segmentation/grabcut/worker-inference.js +260 -0
- package/dist/infrastructure/segmentation/index.d.ts +2 -0
- package/dist/infrastructure/segmentation/index.js +2 -0
- package/dist/infrastructure/segmentation/mobile-sam/index.d.ts +58 -0
- package/dist/infrastructure/segmentation/mobile-sam/index.js +472 -0
- package/dist/infrastructure/segmentation/mobile-sam/worker-inference.d.ts +149 -0
- package/dist/infrastructure/segmentation/mobile-sam/worker-inference.js +845 -0
- package/dist/infrastructure/segmentation/native-child.d.ts +23 -0
- package/dist/infrastructure/segmentation/native-child.js +297 -0
- package/dist/infrastructure/segmentation/native-protocol.d.ts +923 -0
- package/dist/infrastructure/segmentation/native-protocol.js +242 -0
- package/dist/infrastructure/segmentation/native-worker.d.ts +1 -0
- package/dist/infrastructure/segmentation/native-worker.js +93 -0
- package/dist/infrastructure/segmentation/probe-backend.d.ts +1 -0
- package/dist/infrastructure/segmentation/probe-backend.js +31 -0
- package/dist/infrastructure/segmentation/proposal-presentation.d.ts +3 -0
- package/dist/infrastructure/segmentation/proposal-presentation.js +371 -0
- package/dist/infrastructure/segmentation/verify-asset.d.ts +4 -0
- package/dist/infrastructure/segmentation/verify-asset.js +32 -0
- package/dist/infrastructure/text-representation.d.ts +23 -0
- package/dist/infrastructure/text-representation.js +226 -0
- package/dist/infrastructure/vision-chat.d.ts +64 -0
- package/dist/infrastructure/vision-chat.js +318 -0
- package/dist/openai-compatible.d.ts +8 -0
- package/dist/openai-compatible.js +11 -0
- package/dist/openrouter.d.ts +4 -0
- package/dist/openrouter.js +2 -0
- package/dist/processes/boundary-state.d.ts +12 -0
- package/dist/processes/boundary-state.js +196 -0
- package/dist/processes/classify.d.ts +3 -0
- package/dist/processes/classify.js +39 -0
- package/dist/processes/extract-from-region.d.ts +19 -0
- package/dist/processes/extract-from-region.js +415 -0
- package/dist/processes/extract.d.ts +25 -0
- package/dist/processes/extract.js +223 -0
- package/dist/processes/locate.d.ts +3 -0
- package/dist/processes/locate.js +274 -0
- package/dist/processes/proposal-location.d.ts +19 -0
- package/dist/processes/proposal-location.js +396 -0
- package/dist/processes/whole-object.d.ts +7 -0
- package/dist/processes/whole-object.js +272 -0
- package/dist/segmentation.d.ts +10 -0
- package/dist/segmentation.js +4 -0
- package/dist/shared/choice-mass.d.ts +2 -0
- package/dist/shared/choice-mass.js +19 -0
- package/dist/shared/gate.d.ts +11 -0
- package/dist/shared/gate.js +52 -0
- package/dist/shared/input-budget.d.ts +7 -0
- package/dist/shared/input-budget.js +21 -0
- package/dist/shared/scope.d.ts +12 -0
- package/dist/shared/scope.js +29 -0
- package/docs/0.2.0-plan.md +190 -0
- package/docs/README.ru.md +258 -0
- package/docs/acceptance.md +144 -0
- package/docs/api.md +49 -0
- package/docs/architecture.md +45 -0
- package/docs/benchmarks.md +63 -0
- package/docs/categorical-presence-port.md +26 -0
- package/docs/evidence/current-linux-check.json +15 -0
- package/docs/evidence/decisions-completion-v1-manifest.json +96 -0
- package/docs/evidence/decisions-completion-v1-report.json +1205 -0
- package/docs/evidence/decisions-selection-v1-manifest.json +96 -0
- package/docs/evidence/decisions-selection-v1-report.json +1457 -0
- package/docs/evidence/jev-pricing-2026-10-18.json +69 -0
- package/docs/evidence/linux-check.json +20 -0
- package/docs/evidence/linux-check.txt +205 -0
- package/docs/evidence/live-release-smoke-manifest.json +82 -0
- package/docs/evidence/live-release-smoke-provenance.json +9 -0
- package/docs/evidence/live-release-smoke-report.json +2136 -0
- package/docs/evidence/live-v1-manifest.json +84 -0
- package/docs/evidence/live-v1-provenance.json +9 -0
- package/docs/evidence/live-v1-report.json +15555 -0
- package/docs/evidence/luna-decisions-fine-probe.json +19 -0
- package/docs/evidence/luna-decisions-locator-smoke-manifest.json +39 -0
- package/docs/evidence/luna-decisions-locator-smoke-report.json +149 -0
- package/docs/evidence/pack-check.json +26 -0
- package/docs/evidence/protocol-probes.json +61 -0
- package/docs/evidence/rejected-vision-selection-v1-qwen-photo-dev-01.json +42 -0
- package/docs/evidence/rejected-vision-selection-v1-qwen-photo-dev-17.json +42 -0
- package/docs/evidence/rejected-vision-selection-v1-qwen-photo-heldout-09.json +42 -0
- package/docs/evidence/rejected-vision-selection-v2-haiku-photo-dev-16.json +42 -0
- package/docs/evidence/rejected-vision-selection-v2-haiku-support-heldout-016.json +42 -0
- package/docs/evidence/v02/baseline.json +1043 -0
- package/docs/evidence/v02/boundary-variants.md +17 -0
- package/docs/evidence/v02/box-confirmation-dev40/README.md +15 -0
- package/docs/evidence/v02/box-confirmation-dev40/component-refinement.json +246 -0
- package/docs/evidence/v02/box-confirmation-dev40/evaluation.json +1663 -0
- package/docs/evidence/v02/box-confirmation-dev40/provenance.json +130 -0
- package/docs/evidence/v02/box-confirmation-dev40/report.json +127 -0
- package/docs/evidence/v02/box-confirmation-dev40-freeze-20261020-v1.json +230 -0
- package/docs/evidence/v02/box-confirmation-method-selection-20261020-v1.json +85 -0
- package/docs/evidence/v02/box-heldout-cancelled-before-dispatch-20261021-v1.json +32 -0
- package/docs/evidence/v02/box-heldout-combined-seal-20261021-v1.json +89 -0
- package/docs/evidence/v02/box-heldout-evaluator-truth-seal-20261021-v1.json +61 -0
- package/docs/evidence/v02/box-heldout-exclusion-audit-20261020-v1.json +81 -0
- package/docs/evidence/v02/box-heldout-map-seal-20261021-v1.json +48 -0
- package/docs/evidence/v02/box-heldout-photo-seal-20261020-v1.json +62 -0
- package/docs/evidence/v02/box-heldout-run-freeze-20261021-v1.json +61 -0
- package/docs/evidence/v02/box-heldout-source-review-20261020-v1.json +134 -0
- package/docs/evidence/v02/box-heldout-ui-seal-20261020-v1.json +44 -0
- package/docs/evidence/v02/calculator-proof-root-review-20261020-v1.json +63 -0
- package/docs/evidence/v02/categorical-dev40-freeze.json +94 -0
- package/docs/evidence/v02/categorical-dev40-preserve.json +460 -0
- package/docs/evidence/v02/categorical-dev40-target-only.json +460 -0
- package/docs/evidence/v02/categorical-heldout-admission-20261020-v3.json +215 -0
- package/docs/evidence/v02/categorical-heldout-admission-20261020-v4.json +270 -0
- package/docs/evidence/v02/categorical-heldout-dispatch-authorization-20261020-v4.json +79 -0
- package/docs/evidence/v02/categorical-heldout-predispatch-20261020-v3.json +57 -0
- package/docs/evidence/v02/categorical-heldout-producer-source-map-v4.json +262 -0
- package/docs/evidence/v02/categorical-heldout-producer-source-map.json +263 -0
- package/docs/evidence/v02/categorical-heldout-run-freeze-20261020-v3.json +35 -0
- package/docs/evidence/v02/categorical-heldout-run-freeze-20261020-v4.json +35 -0
- package/docs/evidence/v02/categorical-heldout-v4/README.md +35 -0
- package/docs/evidence/v02/categorical-heldout-v4/candidate-evaluation.json +2812 -0
- package/docs/evidence/v02/categorical-heldout-v4/candidate-physical-receipts.json +15261 -0
- package/docs/evidence/v02/categorical-heldout-v4/candidate-provenance.json +131 -0
- package/docs/evidence/v02/categorical-heldout-v4/control-evaluation.json +855 -0
- package/docs/evidence/v02/categorical-heldout-v4/control-physical-receipts.json +4402 -0
- package/docs/evidence/v02/categorical-heldout-v4/control-provenance.json +31 -0
- package/docs/evidence/v02/categorical-heldout-v4/mask-normalized-exploratory.json +682 -0
- package/docs/evidence/v02/categorical-heldout-v4/paired-qualification.json +21 -0
- package/docs/evidence/v02/categorical-heldout-v4/report.json +258 -0
- package/docs/evidence/v02/categorical-presence-dev6.json +144 -0
- package/docs/evidence/v02/categorical-presence-dev6.md +18 -0
- package/docs/evidence/v02/categorical-vision-method-selection.json +90 -0
- package/docs/evidence/v02/checked-region-component-v1/README.md +7 -0
- package/docs/evidence/v02/checked-region-component-v1/evidence.json +311 -0
- package/docs/evidence/v02/checked-region-resource-interrupted-2b0d09f.json +102 -0
- package/docs/evidence/v02/checked-region-segmentation-resource-4df544c-receipt.json +167 -0
- package/docs/evidence/v02/checked-region-segmentation-resource-4df544c-root-review.json +58 -0
- package/docs/evidence/v02/checked-region-segmentation-resource-987ac32-receipt.json +158 -0
- package/docs/evidence/v02/ci-012b935.json +17 -0
- package/docs/evidence/v02/ci-0c365cb.json +372 -0
- package/docs/evidence/v02/ci-185bde8.json +32 -0
- package/docs/evidence/v02/ci-24f849f.json +95 -0
- package/docs/evidence/v02/ci-25c19cd.json +375 -0
- package/docs/evidence/v02/ci-2922caf.json +375 -0
- package/docs/evidence/v02/ci-29357d7.json +29 -0
- package/docs/evidence/v02/ci-32aa90d.json +24 -0
- package/docs/evidence/v02/ci-35e3064.json +376 -0
- package/docs/evidence/v02/ci-4331b1b.json +384 -0
- package/docs/evidence/v02/ci-43b7426.json +376 -0
- package/docs/evidence/v02/ci-450439c.json +373 -0
- package/docs/evidence/v02/ci-46283fe.json +29 -0
- package/docs/evidence/v02/ci-4c9c09f.json +34 -0
- package/docs/evidence/v02/ci-5579646.json +27 -0
- package/docs/evidence/v02/ci-6f9cc15.json +127 -0
- package/docs/evidence/v02/ci-7c1051f.json +27 -0
- package/docs/evidence/v02/ci-9837888.json +34 -0
- package/docs/evidence/v02/ci-987ac32.json +29 -0
- package/docs/evidence/v02/ci-9d00fe5.json +25 -0
- package/docs/evidence/v02/ci-9f85acc.json +127 -0
- package/docs/evidence/v02/ci-be275a6.json +201 -0
- package/docs/evidence/v02/ci-c107ddf.json +372 -0
- package/docs/evidence/v02/ci-c35f67d.json +127 -0
- package/docs/evidence/v02/ci-c5eddd8.json +32 -0
- package/docs/evidence/v02/ci-d2042e0.json +372 -0
- package/docs/evidence/v02/ci-d684259.json +375 -0
- package/docs/evidence/v02/ci-e0c190b.json +127 -0
- package/docs/evidence/v02/ci-e551253.json +372 -0
- package/docs/evidence/v02/ci-f9d4633.json +29 -0
- package/docs/evidence/v02/dev1-proposal-evaluation.md +13 -0
- package/docs/evidence/v02/dev2-mobile-sam-proposal-oracle.md +21 -0
- package/docs/evidence/v02/dev2-proposal-evaluation.md +21 -0
- package/docs/evidence/v02/fresh-development.md +16 -0
- package/docs/evidence/v02/fresh-native-numeric/artifact-hashes.json +9 -0
- package/docs/evidence/v02/fresh-native-numeric/evaluation-root-v1.json +568 -0
- package/docs/evidence/v02/fresh-native-numeric/run-manifest.json +342 -0
- package/docs/evidence/v02/fresh-native-numeric/summary.json +5654 -0
- package/docs/evidence/v02/fresh-native-outline-axis/artifact-hashes.json +9 -0
- package/docs/evidence/v02/fresh-native-outline-axis/evaluation-root-v1.json +568 -0
- package/docs/evidence/v02/fresh-native-outline-axis/run-manifest.json +378 -0
- package/docs/evidence/v02/fresh-native-outline-axis/summary.json +5605 -0
- package/docs/evidence/v02/fresh-text/README.md +23 -0
- package/docs/evidence/v02/fresh-text/ascii-contours-v1/classify-followup-run-manifest.json +405 -0
- package/docs/evidence/v02/fresh-text/ascii-contours-v1/classify-followup-summary.json +1646 -0
- package/docs/evidence/v02/fresh-text/ascii-contours-v1/evaluation.json +568 -0
- package/docs/evidence/v02/fresh-text/ascii-contours-v1/original-run-manifest.json +404 -0
- package/docs/evidence/v02/fresh-text/ascii-contours-v1/original-summary.json +4416 -0
- package/docs/evidence/v02/fresh-text/ascii-luma-v1/classify-followup-run-manifest.json +405 -0
- package/docs/evidence/v02/fresh-text/ascii-luma-v1/classify-followup-summary.json +1646 -0
- package/docs/evidence/v02/fresh-text/ascii-luma-v1/evaluation.json +568 -0
- package/docs/evidence/v02/fresh-text/ascii-luma-v1/original-run-manifest.json +404 -0
- package/docs/evidence/v02/fresh-text/ascii-luma-v1/original-summary.json +4647 -0
- package/docs/evidence/v02/fresh-text/ascii-svg-layered-v1/classify-followup-run-manifest.json +405 -0
- package/docs/evidence/v02/fresh-text/ascii-svg-layered-v1/classify-followup-summary.json +846 -0
- package/docs/evidence/v02/fresh-text/ascii-svg-layered-v1/evaluation.json +568 -0
- package/docs/evidence/v02/fresh-text/ascii-svg-layered-v1/original-run-manifest.json +404 -0
- package/docs/evidence/v02/fresh-text/ascii-svg-layered-v1/original-summary.json +1789 -0
- package/docs/evidence/v02/fresh-text/no-image-control/evaluation.json +568 -0
- package/docs/evidence/v02/fresh-text/no-image-control/original-run-manifest.json +404 -0
- package/docs/evidence/v02/fresh-text/no-image-control/original-summary.json +3953 -0
- package/docs/evidence/v02/fresh-text/palette-grid-v1/classify-followup-run-manifest.json +405 -0
- package/docs/evidence/v02/fresh-text/palette-grid-v1/classify-followup-summary.json +1646 -0
- package/docs/evidence/v02/fresh-text/palette-grid-v1/evaluation.json +568 -0
- package/docs/evidence/v02/fresh-text/palette-grid-v1/original-run-manifest.json +404 -0
- package/docs/evidence/v02/fresh-text/palette-grid-v1/original-summary.json +3974 -0
- package/docs/evidence/v02/fresh-text/pixel-rle-v1/classify-followup-run-manifest.json +405 -0
- package/docs/evidence/v02/fresh-text/pixel-rle-v1/classify-followup-summary.json +1646 -0
- package/docs/evidence/v02/fresh-text/pixel-rle-v1/evaluation.json +568 -0
- package/docs/evidence/v02/fresh-text/pixel-rle-v1/original-run-manifest.json +404 -0
- package/docs/evidence/v02/fresh-text/pixel-rle-v1/original-summary.json +4945 -0
- package/docs/evidence/v02/fresh-text/report.json +284 -0
- package/docs/evidence/v02/fresh-text/svg-contours-v1/classify-followup-run-manifest.json +405 -0
- package/docs/evidence/v02/fresh-text/svg-contours-v1/classify-followup-summary.json +846 -0
- package/docs/evidence/v02/fresh-text/svg-contours-v1/evaluation.json +568 -0
- package/docs/evidence/v02/fresh-text/svg-contours-v1/original-run-manifest.json +404 -0
- package/docs/evidence/v02/fresh-text/svg-contours-v1/original-summary.json +2189 -0
- package/docs/evidence/v02/heldout-evaluation-20261020.md +37 -0
- package/docs/evidence/v02/heldout-input-derivation.md +18 -0
- package/docs/evidence/v02/integration-0c365cb.json +90 -0
- package/docs/evidence/v02/integration-25c19cd.json +52 -0
- package/docs/evidence/v02/integration-35e3064.json +41 -0
- package/docs/evidence/v02/integration-4331b1b.json +42 -0
- package/docs/evidence/v02/integration-4c9c09f.json +46 -0
- package/docs/evidence/v02/integration-8010aad.json +48 -0
- package/docs/evidence/v02/integration-c1aa640.json +41 -0
- package/docs/evidence/v02/integration-eea1790.json +46 -0
- package/docs/evidence/v02/integration-fa82e65.json +42 -0
- package/docs/evidence/v02/jpeg-transport-offline.json +268 -0
- package/docs/evidence/v02/jpeg-transport-offline.md +7 -0
- package/docs/evidence/v02/local-archive-cleanup.json +59 -0
- package/docs/evidence/v02/native-base64-after.json +30 -0
- package/docs/evidence/v02/native-base64-before.json +32 -0
- package/docs/evidence/v02/native-checked-region-windows-46283fe.json +248 -0
- package/docs/evidence/v02/native-checked-region-windows-987ac32.json +141 -0
- package/docs/evidence/v02/native-grabcut-windows-4c494a3-run2.json +148 -0
- package/docs/evidence/v02/native-grabcut-windows-4c494a3-run3.json +148 -0
- package/docs/evidence/v02/native-grabcut-windows-4c494a3.json +56 -0
- package/docs/evidence/v02/native-proposal-windows-0c365cb.json +148 -0
- package/docs/evidence/v02/native-proposal-windows-450439c.json +156 -0
- package/docs/evidence/v02/native-proposal-windows-4c9c09f-retry1.json +147 -0
- package/docs/evidence/v02/native-proposal-windows-4c9c09f.json +52 -0
- package/docs/evidence/v02/native-region-windows-efc9318.json +163 -0
- package/docs/evidence/v02/native-windows-eea1790-baseline.json +198 -0
- package/docs/evidence/v02/native-windows-eea1790.json +228 -0
- package/docs/evidence/v02/ordinary-luna-axis/run-manifest.json +99 -0
- package/docs/evidence/v02/ordinary-luna-axis/summary.json +811 -0
- package/docs/evidence/v02/owned-temp-cleanup-20261020-v1.json +28 -0
- package/docs/evidence/v02/presentation-paired-20261020.json +1438 -0
- package/docs/evidence/v02/proposal-resource-soak-261dc23.json +201 -0
- package/docs/evidence/v02/proposal-resource-soak-261dc23.md +15 -0
- package/docs/evidence/v02/proposal-resource-soak-450439c-receipt.md +13 -0
- package/docs/evidence/v02/reconstructed-c03-box.json +41 -0
- package/docs/evidence/v02/region-seeded-dev-v1/README.md +17 -0
- package/docs/evidence/v02/region-seeded-dev-v1/evaluation.json +260 -0
- package/docs/evidence/v02/region-seeded-dev-v2/README.md +15 -0
- package/docs/evidence/v02/region-seeded-dev-v2/evaluation.json +232 -0
- package/docs/evidence/v02/region-seeded-dev-v3-candidate-only/README.md +9 -0
- package/docs/evidence/v02/region-seeded-dev-v3-candidate-only/control-identity-failure.json +22 -0
- package/docs/evidence/v02/region-seeded-dev-v3-candidate-only/evaluation.json +160 -0
- package/docs/evidence/v02/region-seeded-dev-v3-control-r2/README.md +9 -0
- package/docs/evidence/v02/region-seeded-dev-v3-control-r2/attempt-accounting.json +55 -0
- package/docs/evidence/v02/region-seeded-dev-v3-control-r2/evaluation.json +136 -0
- package/docs/evidence/v02/region-seeded-development-control-r2-freeze-20261021.json +132 -0
- package/docs/evidence/v02/region-seeded-development-freeze-20261021-v1.json +167 -0
- package/docs/evidence/v02/region-seeded-development-freeze-20261021-v2.json +186 -0
- package/docs/evidence/v02/region-seeded-development-freeze-20261021-v3.json +205 -0
- package/docs/evidence/v02/region-seeded-heldout-cancelled-before-dispatch-20261021-v2.json +20 -0
- package/docs/evidence/v02/region-seeded-heldout-dispatch-authorization-20261021-v3.json +47 -0
- package/docs/evidence/v02/region-seeded-heldout-readiness-audit-20261021-v3.json +125 -0
- package/docs/evidence/v02/region-seeded-heldout-run-freeze-20261021-v2.json +234 -0
- package/docs/evidence/v02/region-seeded-heldout-run-freeze-20261021-v3.json +357 -0
- package/docs/evidence/v02/region-seeded-heldout-v3/README.md +19 -0
- package/docs/evidence/v02/region-seeded-heldout-v3/evaluation-summary.json +445 -0
- package/docs/evidence/v02/region-seeded-method-selection-20261021-v2.json +66 -0
- package/docs/evidence/v02/region-seeded-method-selection-20261021-v3.json +120 -0
- package/docs/evidence/v02/region-segmentation-resource-0ba4c87-receipt.json +156 -0
- package/docs/evidence/v02/resource-soak-linux-8010aad.json +125 -0
- package/docs/evidence/v02/screen-v2-terminal-evaluation.md +22 -0
- package/docs/evidence/v02/seed-outline/run-manifest.json +59 -0
- package/docs/evidence/v02/seed-outline/summary.json +487 -0
- package/docs/evidence/v02/seed-unbounded/run-manifest.json +80 -0
- package/docs/evidence/v02/seed-unbounded/summary.json +730 -0
- package/docs/evidence/v02/segmentation/README.md +21 -0
- package/docs/evidence/v02/segmentation/component-comparison-summary.json +240 -0
- package/docs/evidence/v02/segmentation/provenance/MOBILE-SAM-LICENSE.txt +201 -0
- package/docs/evidence/v02/segmentation/provenance/OPENCV-LICENSE.txt +202 -0
- package/docs/evidence/v02/segmentation/provenance/mobile-sam-download-receipt.json +29 -0
- package/docs/evidence/v02/segmentation/provenance/mobile-sam-graph-audit.json +214 -0
- package/docs/evidence/v02/segmentation/provenance/mobile-sam-model-metadata.json +166 -0
- package/docs/evidence/v02/split-choice-noul-dev6.json +72 -0
- package/docs/evidence/v02/split-choice-noul-dev6.md +11 -0
- package/docs/evidence/v02/supported-vision-screen-20261020.md +65 -0
- package/docs/evidence/v02/wesnoth-1.16.11-minimap-projection-source-audit.md +56 -0
- package/docs/evidence/v02/wesnoth-proof-root-review-20261020-v1.json +76 -0
- package/docs/evidence/vision-cost-reconciliation.json +37 -0
- package/docs/evidence/vision-model-summary.json +562 -0
- package/docs/evidence/vision-selection-v1-manifest.json +95 -0
- package/docs/evidence/vision-selection-v1-report.json +4598 -0
- package/docs/evidence/vision-selection-v2-manifest.json +95 -0
- package/docs/evidence/vision-selection-v2-report.json +1139 -0
- package/docs/evidence/windows-native.json +73 -0
- package/docs/evidence/windows-secrets.json +46 -0
- package/docs/operations.md +21 -0
- package/docs/plan.md +27 -0
- package/docs/provenance.json +32 -0
- package/docs/publishing.md +30 -0
- package/docs/research/text-transport-audit.md +66 -0
- package/docs/results.md +69 -0
- package/docs/v02-usage.md +162 -0
- package/docs/vision-results.md +78 -0
- 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,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 {};
|