@12ui/design 0.2.71 → 0.2.73
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/README.md +248 -55
- package/SKILL.md +28 -33
- package/dist/cli-arguments.d.ts.map +1 -1
- package/dist/cli-arguments.js +3 -0
- package/dist/cli-arguments.js.map +1 -1
- package/dist/cli-branch-command.d.ts.map +1 -1
- package/dist/cli-branch-command.js +4 -0
- package/dist/cli-branch-command.js.map +1 -1
- package/dist/cli-capabilities.d.ts +35 -1
- package/dist/cli-capabilities.d.ts.map +1 -1
- package/dist/cli-capabilities.js +36 -1
- package/dist/cli-capabilities.js.map +1 -1
- package/dist/cli-corpus-command.d.ts +5 -4
- package/dist/cli-corpus-command.d.ts.map +1 -1
- package/dist/cli-corpus-command.js +17 -26
- package/dist/cli-corpus-command.js.map +1 -1
- package/dist/cli-corpus-run.js +1 -1
- package/dist/cli-corpus-run.js.map +1 -1
- package/dist/cli-draft-command.js +1 -1
- package/dist/cli-draft-command.js.map +1 -1
- package/dist/cli-help/design.d.ts +26 -6
- package/dist/cli-help/design.d.ts.map +1 -1
- package/dist/cli-help/design.js +39 -7
- package/dist/cli-help/design.js.map +1 -1
- package/dist/cli-help/index.d.ts +206 -7
- package/dist/cli-help/index.d.ts.map +1 -1
- package/dist/cli-help/index.js +4 -0
- package/dist/cli-help/index.js.map +1 -1
- package/dist/cli-help/meta.d.ts +1 -1
- package/dist/cli-help/meta.d.ts.map +1 -1
- package/dist/cli-help/meta.js +2 -1
- package/dist/cli-help/meta.js.map +1 -1
- package/dist/cli-help/scene.d.ts +96 -0
- package/dist/cli-help/scene.d.ts.map +1 -0
- package/dist/cli-help/scene.js +162 -0
- package/dist/cli-help/scene.js.map +1 -0
- package/dist/cli-help/workflow.d.ts +90 -0
- package/dist/cli-help/workflow.d.ts.map +1 -0
- package/dist/cli-help/workflow.js +89 -0
- package/dist/cli-help/workflow.js.map +1 -0
- package/dist/cli-open-browser.d.ts +7 -0
- package/dist/cli-open-browser.d.ts.map +1 -0
- package/dist/cli-open-browser.js +25 -0
- package/dist/cli-open-browser.js.map +1 -0
- package/dist/cli-prototype-command.d.ts +3 -1
- package/dist/cli-prototype-command.d.ts.map +1 -1
- package/dist/cli-prototype-command.js +33 -7
- package/dist/cli-prototype-command.js.map +1 -1
- package/dist/cli-review-command.d.ts.map +1 -1
- package/dist/cli-review-command.js +1 -16
- package/dist/cli-review-command.js.map +1 -1
- package/dist/cli-run.d.ts.map +1 -1
- package/dist/cli-run.js +41 -3
- package/dist/cli-run.js.map +1 -1
- package/dist/cli-scene-command.d.ts +3 -0
- package/dist/cli-scene-command.d.ts.map +1 -0
- package/dist/cli-scene-command.js +292 -0
- package/dist/cli-scene-command.js.map +1 -0
- package/dist/cli-usage.d.ts +8 -0
- package/dist/cli-usage.d.ts.map +1 -1
- package/dist/cli-usage.js +65 -6
- package/dist/cli-usage.js.map +1 -1
- package/dist/cli-workflow-command.d.ts +8 -0
- package/dist/cli-workflow-command.d.ts.map +1 -0
- package/dist/cli-workflow-command.js +97 -0
- package/dist/cli-workflow-command.js.map +1 -0
- package/dist/cli-workspace-command.d.ts +25 -0
- package/dist/cli-workspace-command.d.ts.map +1 -0
- package/dist/cli-workspace-command.js +95 -0
- package/dist/cli-workspace-command.js.map +1 -0
- package/dist/config.d.ts +6 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +12 -4
- package/dist/config.js.map +1 -1
- package/dist/corpus-access.d.ts +11 -0
- package/dist/corpus-access.d.ts.map +1 -0
- package/dist/corpus-access.js +18 -0
- package/dist/corpus-access.js.map +1 -0
- package/dist/corpus-client.d.ts +11 -11
- package/dist/corpus-client.d.ts.map +1 -1
- package/dist/corpus-client.js +17 -6
- package/dist/corpus-client.js.map +1 -1
- package/dist/corpus-inspiration-failure.d.ts +1 -1
- package/dist/corpus-inspiration-failure.js +2 -2
- package/dist/corpus-inspiration-failure.js.map +1 -1
- package/dist/corpus-reference-download-retry.d.ts.map +1 -1
- package/dist/corpus-reference-download-retry.js +11 -1
- package/dist/corpus-reference-download-retry.js.map +1 -1
- package/dist/corpus-request-error.d.ts +2 -0
- package/dist/corpus-request-error.d.ts.map +1 -1
- package/dist/corpus-request-error.js +2 -0
- package/dist/corpus-request-error.js.map +1 -1
- package/dist/corpus-retry-guidance.d.ts +5 -0
- package/dist/corpus-retry-guidance.d.ts.map +1 -0
- package/dist/corpus-retry-guidance.js +18 -0
- package/dist/corpus-retry-guidance.js.map +1 -0
- package/dist/improve-pricing-plan.d.ts.map +1 -1
- package/dist/improve-pricing-plan.js +2 -4
- package/dist/improve-pricing-plan.js.map +1 -1
- package/dist/index.d.ts +10 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -1
- package/dist/index.js.map +1 -1
- package/dist/legacy-skill-catalog.d.ts.map +1 -1
- package/dist/legacy-skill-catalog.js +52 -0
- package/dist/legacy-skill-catalog.js.map +1 -1
- package/dist/mcp-slate-command.d.ts +31 -0
- package/dist/mcp-slate-command.d.ts.map +1 -0
- package/dist/mcp-slate-command.js +118 -0
- package/dist/mcp-slate-command.js.map +1 -0
- package/dist/mcp-slate-image.d.ts +22 -0
- package/dist/mcp-slate-image.d.ts.map +1 -0
- package/dist/mcp-slate-image.js +28 -0
- package/dist/mcp-slate-image.js.map +1 -0
- package/dist/mcp-slate-latest.d.ts +13 -0
- package/dist/mcp-slate-latest.d.ts.map +1 -0
- package/dist/mcp-slate-latest.js +34 -0
- package/dist/mcp-slate-latest.js.map +1 -0
- package/dist/mcp-slate-names.d.ts +25 -0
- package/dist/mcp-slate-names.d.ts.map +1 -0
- package/dist/mcp-slate-names.js +49 -0
- package/dist/mcp-slate-names.js.map +1 -0
- package/dist/mcp-slate-resource.d.ts +5 -0
- package/dist/mcp-slate-resource.d.ts.map +1 -0
- package/dist/mcp-slate-resource.js +37 -0
- package/dist/mcp-slate-resource.js.map +1 -0
- package/dist/mcp-slate-run.d.ts +41 -0
- package/dist/mcp-slate-run.d.ts.map +1 -0
- package/dist/mcp-slate-run.js +88 -0
- package/dist/mcp-slate-run.js.map +1 -0
- package/dist/mcp-slate-tool-defs.d.ts +61 -0
- package/dist/mcp-slate-tool-defs.d.ts.map +1 -0
- package/dist/mcp-slate-tool-defs.js +247 -0
- package/dist/mcp-slate-tool-defs.js.map +1 -0
- package/dist/mcp-slate-tools.d.ts +8 -0
- package/dist/mcp-slate-tools.d.ts.map +1 -0
- package/dist/mcp-slate-tools.js +45 -0
- package/dist/mcp-slate-tools.js.map +1 -0
- package/dist/mcp-slate-ui-copy.d.ts +134 -0
- package/dist/mcp-slate-ui-copy.d.ts.map +1 -0
- package/dist/mcp-slate-ui-copy.js +136 -0
- package/dist/mcp-slate-ui-copy.js.map +1 -0
- package/dist/mcp-slate-ui-script-bridge.d.ts +18 -0
- package/dist/mcp-slate-ui-script-bridge.d.ts.map +1 -0
- package/dist/mcp-slate-ui-script-bridge.js +137 -0
- package/dist/mcp-slate-ui-script-bridge.js.map +1 -0
- package/dist/mcp-slate-ui-script-browser.d.ts +12 -0
- package/dist/mcp-slate-ui-script-browser.d.ts.map +1 -0
- package/dist/mcp-slate-ui-script-browser.js +19 -0
- package/dist/mcp-slate-ui-script-browser.js.map +1 -0
- package/dist/mcp-slate-ui-script-dialog.d.ts +20 -0
- package/dist/mcp-slate-ui-script-dialog.d.ts.map +1 -0
- package/dist/mcp-slate-ui-script-dialog.js +332 -0
- package/dist/mcp-slate-ui-script-dialog.js.map +1 -0
- package/dist/mcp-slate-ui-script-inline.d.ts +10 -0
- package/dist/mcp-slate-ui-script-inline.d.ts.map +1 -0
- package/dist/mcp-slate-ui-script-inline.js +221 -0
- package/dist/mcp-slate-ui-script-inline.js.map +1 -0
- package/dist/mcp-slate-ui-script-inspiration.d.ts +12 -0
- package/dist/mcp-slate-ui-script-inspiration.d.ts.map +1 -0
- package/dist/mcp-slate-ui-script-inspiration.js +216 -0
- package/dist/mcp-slate-ui-script-inspiration.js.map +1 -0
- package/dist/mcp-slate-ui-script-more.d.ts +30 -0
- package/dist/mcp-slate-ui-script-more.d.ts.map +1 -0
- package/dist/mcp-slate-ui-script-more.js +225 -0
- package/dist/mcp-slate-ui-script-more.js.map +1 -0
- package/dist/mcp-slate-ui-script-progress.d.ts +7 -0
- package/dist/mcp-slate-ui-script-progress.d.ts.map +1 -0
- package/dist/mcp-slate-ui-script-progress.js +9 -0
- package/dist/mcp-slate-ui-script-progress.js.map +1 -0
- package/dist/mcp-slate-ui-script-remote.d.ts +28 -0
- package/dist/mcp-slate-ui-script-remote.d.ts.map +1 -0
- package/dist/mcp-slate-ui-script-remote.js +147 -0
- package/dist/mcp-slate-ui-script-remote.js.map +1 -0
- package/dist/mcp-slate-ui-script-scribble.d.ts +19 -0
- package/dist/mcp-slate-ui-script-scribble.d.ts.map +1 -0
- package/dist/mcp-slate-ui-script-scribble.js +114 -0
- package/dist/mcp-slate-ui-script-scribble.js.map +1 -0
- package/dist/mcp-slate-ui-script-select.d.ts +16 -0
- package/dist/mcp-slate-ui-script-select.d.ts.map +1 -0
- package/dist/mcp-slate-ui-script-select.js +73 -0
- package/dist/mcp-slate-ui-script-select.js.map +1 -0
- package/dist/mcp-slate-ui-script-stage.d.ts +11 -0
- package/dist/mcp-slate-ui-script-stage.d.ts.map +1 -0
- package/dist/mcp-slate-ui-script-stage.js +181 -0
- package/dist/mcp-slate-ui-script-stage.js.map +1 -0
- package/dist/mcp-slate-ui-script-state.d.ts +13 -0
- package/dist/mcp-slate-ui-script-state.d.ts.map +1 -0
- package/dist/mcp-slate-ui-script-state.js +306 -0
- package/dist/mcp-slate-ui-script-state.js.map +1 -0
- package/dist/mcp-slate-ui-script-thumbtools.d.ts +23 -0
- package/dist/mcp-slate-ui-script-thumbtools.d.ts.map +1 -0
- package/dist/mcp-slate-ui-script-thumbtools.js +103 -0
- package/dist/mcp-slate-ui-script-thumbtools.js.map +1 -0
- package/dist/mcp-slate-ui-script.d.ts +28 -0
- package/dist/mcp-slate-ui-script.d.ts.map +1 -0
- package/dist/mcp-slate-ui-script.js +58 -0
- package/dist/mcp-slate-ui-script.js.map +1 -0
- package/dist/mcp-slate-ui-styles-dialog.d.ts +17 -0
- package/dist/mcp-slate-ui-styles-dialog.d.ts.map +1 -0
- package/dist/mcp-slate-ui-styles-dialog.js +73 -0
- package/dist/mcp-slate-ui-styles-dialog.js.map +1 -0
- package/dist/mcp-slate-ui-styles-stage.d.ts +12 -0
- package/dist/mcp-slate-ui-styles-stage.d.ts.map +1 -0
- package/dist/mcp-slate-ui-styles-stage.js +53 -0
- package/dist/mcp-slate-ui-styles-stage.js.map +1 -0
- package/dist/mcp-slate-ui-styles-thumbtools.d.ts +10 -0
- package/dist/mcp-slate-ui-styles-thumbtools.d.ts.map +1 -0
- package/dist/mcp-slate-ui-styles-thumbtools.js +25 -0
- package/dist/mcp-slate-ui-styles-thumbtools.js.map +1 -0
- package/dist/mcp-slate-ui-styles.d.ts +13 -0
- package/dist/mcp-slate-ui-styles.d.ts.map +1 -0
- package/dist/mcp-slate-ui-styles.js +117 -0
- package/dist/mcp-slate-ui-styles.js.map +1 -0
- package/dist/mcp-slate-ui.d.ts +16 -0
- package/dist/mcp-slate-ui.d.ts.map +1 -0
- package/dist/mcp-slate-ui.js +58 -0
- package/dist/mcp-slate-ui.js.map +1 -0
- package/dist/mcp-slate-workspace-tools.d.ts +15 -0
- package/dist/mcp-slate-workspace-tools.d.ts.map +1 -0
- package/dist/mcp-slate-workspace-tools.js +155 -0
- package/dist/mcp-slate-workspace-tools.js.map +1 -0
- package/dist/mcp-tool-definitions.d.ts.map +1 -1
- package/dist/mcp-tool-definitions.js +9 -7
- package/dist/mcp-tool-definitions.js.map +1 -1
- package/dist/mcp-tool-handler.d.ts +8 -2
- package/dist/mcp-tool-handler.d.ts.map +1 -1
- package/dist/mcp-tool-handler.js +34 -13
- package/dist/mcp-tool-handler.js.map +1 -1
- package/dist/mcp-workflow-tools.d.ts +6 -0
- package/dist/mcp-workflow-tools.d.ts.map +1 -0
- package/dist/mcp-workflow-tools.js +108 -0
- package/dist/mcp-workflow-tools.js.map +1 -0
- package/dist/prototype-browsers.d.ts +8 -2
- package/dist/prototype-browsers.d.ts.map +1 -1
- package/dist/prototype-browsers.js +8 -3
- package/dist/prototype-browsers.js.map +1 -1
- package/dist/prototype-label-client.d.ts +5 -0
- package/dist/prototype-label-client.d.ts.map +1 -1
- package/dist/prototype-label-client.js.map +1 -1
- package/dist/prototype-poststep.d.ts +2 -2
- package/dist/prototype-poststep.d.ts.map +1 -1
- package/dist/prototype-poststep.js +3 -0
- package/dist/prototype-poststep.js.map +1 -1
- package/dist/prototype-process.js +1 -1
- package/dist/prototype-process.js.map +1 -1
- package/dist/prototype-run-record.d.ts +6 -2
- package/dist/prototype-run-record.d.ts.map +1 -1
- package/dist/prototype-run-record.js +6 -0
- package/dist/prototype-run-record.js.map +1 -1
- package/dist/prototype-runner.d.ts +2 -2
- package/dist/prototype-runner.d.ts.map +1 -1
- package/dist/prototype-runner.js +5 -2
- package/dist/prototype-runner.js.map +1 -1
- package/dist/prototype-workflow-contract.d.ts +13 -0
- package/dist/prototype-workflow-contract.d.ts.map +1 -0
- package/dist/prototype-workflow-contract.js +82 -0
- package/dist/prototype-workflow-contract.js.map +1 -0
- package/dist/prototype-workflow-labels.d.ts +29 -0
- package/dist/prototype-workflow-labels.d.ts.map +1 -0
- package/dist/prototype-workflow-labels.js +93 -0
- package/dist/prototype-workflow-labels.js.map +1 -0
- package/dist/run-journal-commands.d.ts.map +1 -1
- package/dist/run-journal-commands.js +24 -5
- package/dist/run-journal-commands.js.map +1 -1
- package/dist/scene/camera-model.d.ts +48 -0
- package/dist/scene/camera-model.d.ts.map +1 -0
- package/dist/scene/camera-model.js +89 -0
- package/dist/scene/camera-model.js.map +1 -0
- package/dist/scene/camera-solve.d.ts +58 -0
- package/dist/scene/camera-solve.d.ts.map +1 -0
- package/dist/scene/camera-solve.js +288 -0
- package/dist/scene/camera-solve.js.map +1 -0
- package/dist/scene/capture-plan.d.ts +28 -0
- package/dist/scene/capture-plan.d.ts.map +1 -0
- package/dist/scene/capture-plan.js +79 -0
- package/dist/scene/capture-plan.js.map +1 -0
- package/dist/scene/capture.d.ts +21 -0
- package/dist/scene/capture.d.ts.map +1 -0
- package/dist/scene/capture.js +118 -0
- package/dist/scene/capture.js.map +1 -0
- package/dist/scene/image-colors.d.ts +25 -0
- package/dist/scene/image-colors.d.ts.map +1 -0
- package/dist/scene/image-colors.js +110 -0
- package/dist/scene/image-colors.js.map +1 -0
- package/dist/scene/image-rectify.d.ts +25 -0
- package/dist/scene/image-rectify.d.ts.map +1 -0
- package/dist/scene/image-rectify.js +82 -0
- package/dist/scene/image-rectify.js.map +1 -0
- package/dist/scene/image-sheet.d.ts +19 -0
- package/dist/scene/image-sheet.d.ts.map +1 -0
- package/dist/scene/image-sheet.js +118 -0
- package/dist/scene/image-sheet.js.map +1 -0
- package/dist/scene/least-squares.d.ts +31 -0
- package/dist/scene/least-squares.d.ts.map +1 -0
- package/dist/scene/least-squares.js +173 -0
- package/dist/scene/least-squares.js.map +1 -0
- package/dist/scene/numbers.d.ts +17 -0
- package/dist/scene/numbers.d.ts.map +1 -0
- package/dist/scene/numbers.js +39 -0
- package/dist/scene/numbers.js.map +1 -0
- package/dist/scene/placement.d.ts +43 -0
- package/dist/scene/placement.d.ts.map +1 -0
- package/dist/scene/placement.js +107 -0
- package/dist/scene/placement.js.map +1 -0
- package/dist/scene/raster.d.ts +18 -0
- package/dist/scene/raster.d.ts.map +1 -0
- package/dist/scene/raster.js +31 -0
- package/dist/scene/raster.js.map +1 -0
- package/dist/scene/scene-kit.d.ts +20 -0
- package/dist/scene/scene-kit.d.ts.map +1 -0
- package/dist/scene/scene-kit.js +74 -0
- package/dist/scene/scene-kit.js.map +1 -0
- package/dist/scene/scene-verbs.d.ts +4 -0
- package/dist/scene/scene-verbs.d.ts.map +1 -0
- package/dist/scene/scene-verbs.js +5 -0
- package/dist/scene/scene-verbs.js.map +1 -0
- package/dist/scene/seeded-random.d.ts +20 -0
- package/dist/scene/seeded-random.d.ts.map +1 -0
- package/dist/scene/seeded-random.js +42 -0
- package/dist/scene/seeded-random.js.map +1 -0
- package/dist/scene/spec-expression.d.ts +25 -0
- package/dist/scene/spec-expression.d.ts.map +1 -0
- package/dist/scene/spec-expression.js +234 -0
- package/dist/scene/spec-expression.js.map +1 -0
- package/dist/scene/static-server.d.ts +13 -0
- package/dist/scene/static-server.d.ts.map +1 -0
- package/dist/scene/static-server.js +99 -0
- package/dist/scene/static-server.js.map +1 -0
- package/dist/server.d.ts +22 -2
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +44 -8
- package/dist/server.js.map +1 -1
- package/dist/slate-actions.d.ts +38 -0
- package/dist/slate-actions.d.ts.map +1 -0
- package/dist/slate-actions.js +102 -0
- package/dist/slate-actions.js.map +1 -0
- package/dist/slate-annotate.d.ts +36 -0
- package/dist/slate-annotate.d.ts.map +1 -0
- package/dist/slate-annotate.js +71 -0
- package/dist/slate-annotate.js.map +1 -0
- package/dist/slate-approvals.d.ts +61 -0
- package/dist/slate-approvals.d.ts.map +1 -0
- package/dist/slate-approvals.js +153 -0
- package/dist/slate-approvals.js.map +1 -0
- package/dist/slate-browser-decision.d.ts +30 -0
- package/dist/slate-browser-decision.d.ts.map +1 -0
- package/dist/slate-browser-decision.js +24 -0
- package/dist/slate-browser-decision.js.map +1 -0
- package/dist/slate-browser-host-script.d.ts +14 -0
- package/dist/slate-browser-host-script.d.ts.map +1 -0
- package/dist/slate-browser-host-script.js +125 -0
- package/dist/slate-browser-host-script.js.map +1 -0
- package/dist/slate-browser-host.d.ts +9 -0
- package/dist/slate-browser-host.d.ts.map +1 -0
- package/dist/slate-browser-host.js +37 -0
- package/dist/slate-browser-host.js.map +1 -0
- package/dist/slate-browser-server.d.ts +37 -0
- package/dist/slate-browser-server.d.ts.map +1 -0
- package/dist/slate-browser-server.js +186 -0
- package/dist/slate-browser-server.js.map +1 -0
- package/dist/slate-commit.d.ts +28 -0
- package/dist/slate-commit.d.ts.map +1 -0
- package/dist/slate-commit.js +218 -0
- package/dist/slate-commit.js.map +1 -0
- package/dist/slate-corpus.d.ts +14 -0
- package/dist/slate-corpus.d.ts.map +1 -0
- package/dist/slate-corpus.js +32 -0
- package/dist/slate-corpus.js.map +1 -0
- package/dist/slate-edit-prompt.d.ts +18 -0
- package/dist/slate-edit-prompt.d.ts.map +1 -0
- package/dist/slate-edit-prompt.js +41 -0
- package/dist/slate-edit-prompt.js.map +1 -0
- package/dist/slate-edit-runner.d.ts +4 -0
- package/dist/slate-edit-runner.d.ts.map +1 -0
- package/dist/slate-edit-runner.js +90 -0
- package/dist/slate-edit-runner.js.map +1 -0
- package/dist/slate-editability.d.ts +20 -0
- package/dist/slate-editability.d.ts.map +1 -0
- package/dist/slate-editability.js +19 -0
- package/dist/slate-editability.js.map +1 -0
- package/dist/slate-errors.d.ts +15 -0
- package/dist/slate-errors.d.ts.map +1 -0
- package/dist/slate-errors.js +21 -0
- package/dist/slate-errors.js.map +1 -0
- package/dist/slate-handoff-options.d.ts +40 -0
- package/dist/slate-handoff-options.d.ts.map +1 -0
- package/dist/slate-handoff-options.js +127 -0
- package/dist/slate-handoff-options.js.map +1 -0
- package/dist/slate-handoff.d.ts +11 -0
- package/dist/slate-handoff.d.ts.map +1 -0
- package/dist/slate-handoff.js +56 -0
- package/dist/slate-handoff.js.map +1 -0
- package/dist/slate-ids.d.ts +33 -0
- package/dist/slate-ids.d.ts.map +1 -0
- package/dist/slate-ids.js +47 -0
- package/dist/slate-ids.js.map +1 -0
- package/dist/slate-image-executor.d.ts +39 -0
- package/dist/slate-image-executor.d.ts.map +1 -0
- package/dist/slate-image-executor.js +52 -0
- package/dist/slate-image-executor.js.map +1 -0
- package/dist/slate-inspiration.d.ts +22 -0
- package/dist/slate-inspiration.d.ts.map +1 -0
- package/dist/slate-inspiration.js +112 -0
- package/dist/slate-inspiration.js.map +1 -0
- package/dist/slate-labels.d.ts +11 -0
- package/dist/slate-labels.d.ts.map +1 -0
- package/dist/slate-labels.js +32 -0
- package/dist/slate-labels.js.map +1 -0
- package/dist/slate-ledger.d.ts +29 -0
- package/dist/slate-ledger.d.ts.map +1 -0
- package/dist/slate-ledger.js +65 -0
- package/dist/slate-ledger.js.map +1 -0
- package/dist/slate-liveness.d.ts +26 -0
- package/dist/slate-liveness.d.ts.map +1 -0
- package/dist/slate-liveness.js +49 -0
- package/dist/slate-liveness.js.map +1 -0
- package/dist/slate-local-image.d.ts +19 -0
- package/dist/slate-local-image.d.ts.map +1 -0
- package/dist/slate-local-image.js +36 -0
- package/dist/slate-local-image.js.map +1 -0
- package/dist/slate-lock.d.ts +64 -0
- package/dist/slate-lock.d.ts.map +1 -0
- package/dist/slate-lock.js +178 -0
- package/dist/slate-lock.js.map +1 -0
- package/dist/slate-paths.d.ts +45 -0
- package/dist/slate-paths.d.ts.map +1 -0
- package/dist/slate-paths.js +132 -0
- package/dist/slate-paths.js.map +1 -0
- package/dist/slate-pick.d.ts +29 -0
- package/dist/slate-pick.d.ts.map +1 -0
- package/dist/slate-pick.js +55 -0
- package/dist/slate-pick.js.map +1 -0
- package/dist/slate-reference-ids.d.ts +6 -0
- package/dist/slate-reference-ids.d.ts.map +1 -0
- package/dist/slate-reference-ids.js +17 -0
- package/dist/slate-reference-ids.js.map +1 -0
- package/dist/slate-reference-store.d.ts +23 -0
- package/dist/slate-reference-store.d.ts.map +1 -0
- package/dist/slate-reference-store.js +46 -0
- package/dist/slate-reference-store.js.map +1 -0
- package/dist/slate-resume.d.ts +19 -0
- package/dist/slate-resume.d.ts.map +1 -0
- package/dist/slate-resume.js +94 -0
- package/dist/slate-resume.js.map +1 -0
- package/dist/slate-round-params.d.ts +20 -0
- package/dist/slate-round-params.d.ts.map +1 -0
- package/dist/slate-round-params.js +32 -0
- package/dist/slate-round-params.js.map +1 -0
- package/dist/slate-round-prompt.d.ts +18 -0
- package/dist/slate-round-prompt.d.ts.map +1 -0
- package/dist/slate-round-prompt.js +20 -0
- package/dist/slate-round-prompt.js.map +1 -0
- package/dist/slate-round-runner.d.ts +4 -0
- package/dist/slate-round-runner.d.ts.map +1 -0
- package/dist/slate-round-runner.js +125 -0
- package/dist/slate-round-runner.js.map +1 -0
- package/dist/slate-round-search.d.ts +7 -0
- package/dist/slate-round-search.d.ts.map +1 -0
- package/dist/slate-round-search.js +77 -0
- package/dist/slate-round-search.js.map +1 -0
- package/dist/slate-run-action.d.ts +14 -0
- package/dist/slate-run-action.d.ts.map +1 -0
- package/dist/slate-run-action.js +81 -0
- package/dist/slate-run-action.js.map +1 -0
- package/dist/slate-runner-context.d.ts +57 -0
- package/dist/slate-runner-context.d.ts.map +1 -0
- package/dist/slate-runner-context.js +79 -0
- package/dist/slate-runner-context.js.map +1 -0
- package/dist/slate-runner-failure.d.ts +8 -0
- package/dist/slate-runner-failure.d.ts.map +1 -0
- package/dist/slate-runner-failure.js +17 -0
- package/dist/slate-runner-failure.js.map +1 -0
- package/dist/slate-runner-flag.d.ts +3 -0
- package/dist/slate-runner-flag.d.ts.map +1 -0
- package/dist/slate-runner-flag.js +3 -0
- package/dist/slate-runner-flag.js.map +1 -0
- package/dist/slate-runner-main.d.ts +31 -0
- package/dist/slate-runner-main.d.ts.map +1 -0
- package/dist/slate-runner-main.js +132 -0
- package/dist/slate-runner-main.js.map +1 -0
- package/dist/slate-runner-spawn.d.ts +23 -0
- package/dist/slate-runner-spawn.d.ts.map +1 -0
- package/dist/slate-runner-spawn.js +27 -0
- package/dist/slate-runner-spawn.js.map +1 -0
- package/dist/slate-runtime.d.ts +38 -0
- package/dist/slate-runtime.d.ts.map +1 -0
- package/dist/slate-runtime.js +48 -0
- package/dist/slate-runtime.js.map +1 -0
- package/dist/slate-versions.d.ts +26 -0
- package/dist/slate-versions.d.ts.map +1 -0
- package/dist/slate-versions.js +110 -0
- package/dist/slate-versions.js.map +1 -0
- package/dist/slate-view-contract.d.ts +233 -0
- package/dist/slate-view-contract.d.ts.map +1 -0
- package/dist/slate-view-contract.js +17 -0
- package/dist/slate-view-contract.js.map +1 -0
- package/dist/slate-view-types.d.ts +2 -0
- package/dist/slate-view-types.d.ts.map +1 -0
- package/dist/slate-view-types.js +2 -0
- package/dist/slate-view-types.js.map +1 -0
- package/dist/slate-view.d.ts +19 -0
- package/dist/slate-view.d.ts.map +1 -0
- package/dist/slate-view.js +184 -0
- package/dist/slate-view.js.map +1 -0
- package/dist/slate-workspace-parse.d.ts +20 -0
- package/dist/slate-workspace-parse.d.ts.map +1 -0
- package/dist/slate-workspace-parse.js +437 -0
- package/dist/slate-workspace-parse.js.map +1 -0
- package/dist/slate-workspace-store.d.ts +44 -0
- package/dist/slate-workspace-store.d.ts.map +1 -0
- package/dist/slate-workspace-store.js +270 -0
- package/dist/slate-workspace-store.js.map +1 -0
- package/dist/slate-workspace-types.d.ts +176 -0
- package/dist/slate-workspace-types.d.ts.map +1 -0
- package/dist/slate-workspace-types.js +13 -0
- package/dist/slate-workspace-types.js.map +1 -0
- package/dist/workflow/adapter-12ui.d.ts +4 -0
- package/dist/workflow/adapter-12ui.d.ts.map +1 -0
- package/dist/workflow/adapter-12ui.js +147 -0
- package/dist/workflow/adapter-12ui.js.map +1 -0
- package/dist/workflow/adapter-layerdoc.d.ts +16 -0
- package/dist/workflow/adapter-layerdoc.d.ts.map +1 -0
- package/dist/workflow/adapter-layerdoc.js +116 -0
- package/dist/workflow/adapter-layerdoc.js.map +1 -0
- package/dist/workflow/adapter-openai.d.ts +4 -0
- package/dist/workflow/adapter-openai.d.ts.map +1 -0
- package/dist/workflow/adapter-openai.js +166 -0
- package/dist/workflow/adapter-openai.js.map +1 -0
- package/dist/workflow/adapter-process.d.ts +7 -0
- package/dist/workflow/adapter-process.d.ts.map +1 -0
- package/dist/workflow/adapter-process.js +174 -0
- package/dist/workflow/adapter-process.js.map +1 -0
- package/dist/workflow/adapter-prototype-labels.d.ts +15 -0
- package/dist/workflow/adapter-prototype-labels.d.ts.map +1 -0
- package/dist/workflow/adapter-prototype-labels.js +71 -0
- package/dist/workflow/adapter-prototype-labels.js.map +1 -0
- package/dist/workflow/adapter-types.d.ts +40 -0
- package/dist/workflow/adapter-types.d.ts.map +1 -0
- package/dist/workflow/adapter-types.js +2 -0
- package/dist/workflow/adapter-types.js.map +1 -0
- package/dist/workflow/adapter-utils.d.ts +11 -0
- package/dist/workflow/adapter-utils.d.ts.map +1 -0
- package/dist/workflow/adapter-utils.js +72 -0
- package/dist/workflow/adapter-utils.js.map +1 -0
- package/dist/workflow/adapters.d.ts +6 -0
- package/dist/workflow/adapters.d.ts.map +1 -0
- package/dist/workflow/adapters.js +25 -0
- package/dist/workflow/adapters.js.map +1 -0
- package/dist/workflow/artifact.d.ts +11 -0
- package/dist/workflow/artifact.d.ts.map +1 -0
- package/dist/workflow/artifact.js +94 -0
- package/dist/workflow/artifact.js.map +1 -0
- package/dist/workflow/bundle-collect.d.ts +8 -0
- package/dist/workflow/bundle-collect.d.ts.map +1 -0
- package/dist/workflow/bundle-collect.js +56 -0
- package/dist/workflow/bundle-collect.js.map +1 -0
- package/dist/workflow/bundle-export.d.ts +16 -0
- package/dist/workflow/bundle-export.d.ts.map +1 -0
- package/dist/workflow/bundle-export.js +174 -0
- package/dist/workflow/bundle-export.js.map +1 -0
- package/dist/workflow/bundle-paths.d.ts +7 -0
- package/dist/workflow/bundle-paths.d.ts.map +1 -0
- package/dist/workflow/bundle-paths.js +35 -0
- package/dist/workflow/bundle-paths.js.map +1 -0
- package/dist/workflow/bundle.d.ts +4 -0
- package/dist/workflow/bundle.d.ts.map +1 -0
- package/dist/workflow/bundle.js +4 -0
- package/dist/workflow/bundle.js.map +1 -0
- package/dist/workflow/capture.d.ts +36 -0
- package/dist/workflow/capture.d.ts.map +1 -0
- package/dist/workflow/capture.js +81 -0
- package/dist/workflow/capture.js.map +1 -0
- package/dist/workflow/continuation-branch.d.ts +15 -0
- package/dist/workflow/continuation-branch.d.ts.map +1 -0
- package/dist/workflow/continuation-branch.js +103 -0
- package/dist/workflow/continuation-branch.js.map +1 -0
- package/dist/workflow/continuation-plans.d.ts +38 -0
- package/dist/workflow/continuation-plans.d.ts.map +1 -0
- package/dist/workflow/continuation-plans.js +78 -0
- package/dist/workflow/continuation-plans.js.map +1 -0
- package/dist/workflow/continuation.d.ts +25 -0
- package/dist/workflow/continuation.d.ts.map +1 -0
- package/dist/workflow/continuation.js +89 -0
- package/dist/workflow/continuation.js.map +1 -0
- package/dist/workflow/layerdoc-reader.d.ts +27 -0
- package/dist/workflow/layerdoc-reader.d.ts.map +1 -0
- package/dist/workflow/layerdoc-reader.js +81 -0
- package/dist/workflow/layerdoc-reader.js.map +1 -0
- package/dist/workflow/project-evidence.d.ts +48 -0
- package/dist/workflow/project-evidence.d.ts.map +1 -0
- package/dist/workflow/project-evidence.js +200 -0
- package/dist/workflow/project-evidence.js.map +1 -0
- package/dist/workflow/providers.d.ts +35 -0
- package/dist/workflow/providers.d.ts.map +1 -0
- package/dist/workflow/providers.js +110 -0
- package/dist/workflow/providers.js.map +1 -0
- package/dist/workflow/recipes-layerdoc-validation.d.ts +4 -0
- package/dist/workflow/recipes-layerdoc-validation.d.ts.map +1 -0
- package/dist/workflow/recipes-layerdoc-validation.js +98 -0
- package/dist/workflow/recipes-layerdoc-validation.js.map +1 -0
- package/dist/workflow/recipes-result-validation.d.ts +6 -0
- package/dist/workflow/recipes-result-validation.d.ts.map +1 -0
- package/dist/workflow/recipes-result-validation.js +38 -0
- package/dist/workflow/recipes-result-validation.js.map +1 -0
- package/dist/workflow/recipes-schemas.d.ts +7 -0
- package/dist/workflow/recipes-schemas.d.ts.map +1 -0
- package/dist/workflow/recipes-schemas.js +67 -0
- package/dist/workflow/recipes-schemas.js.map +1 -0
- package/dist/workflow/recipes-validation.d.ts +14 -0
- package/dist/workflow/recipes-validation.d.ts.map +1 -0
- package/dist/workflow/recipes-validation.js +68 -0
- package/dist/workflow/recipes-validation.js.map +1 -0
- package/dist/workflow/recipes.d.ts +20 -0
- package/dist/workflow/recipes.d.ts.map +1 -0
- package/dist/workflow/recipes.js +167 -0
- package/dist/workflow/recipes.js.map +1 -0
- package/dist/workflow/routing.d.ts +4 -0
- package/dist/workflow/routing.d.ts.map +1 -0
- package/dist/workflow/routing.js +28 -0
- package/dist/workflow/routing.js.map +1 -0
- package/dist/workflow/schema.d.ts +5 -0
- package/dist/workflow/schema.d.ts.map +1 -0
- package/dist/workflow/schema.js +29 -0
- package/dist/workflow/schema.js.map +1 -0
- package/dist/workflow/service.d.ts +59 -0
- package/dist/workflow/service.d.ts.map +1 -0
- package/dist/workflow/service.js +170 -0
- package/dist/workflow/service.js.map +1 -0
- package/dist/workflow/store-json.d.ts +5 -0
- package/dist/workflow/store-json.d.ts.map +1 -0
- package/dist/workflow/store-json.js +35 -0
- package/dist/workflow/store-json.js.map +1 -0
- package/dist/workflow/store-lock.d.ts +3 -0
- package/dist/workflow/store-lock.d.ts.map +1 -0
- package/dist/workflow/store-lock.js +85 -0
- package/dist/workflow/store-lock.js.map +1 -0
- package/dist/workflow/store-paths.d.ts +17 -0
- package/dist/workflow/store-paths.d.ts.map +1 -0
- package/dist/workflow/store-paths.js +67 -0
- package/dist/workflow/store-paths.js.map +1 -0
- package/dist/workflow/store-validation.d.ts +7 -0
- package/dist/workflow/store-validation.d.ts.map +1 -0
- package/dist/workflow/store-validation.js +119 -0
- package/dist/workflow/store-validation.js.map +1 -0
- package/dist/workflow/store.d.ts +10 -0
- package/dist/workflow/store.d.ts.map +1 -0
- package/dist/workflow/store.js +193 -0
- package/dist/workflow/store.js.map +1 -0
- package/dist/workflow/types.d.ts +120 -0
- package/dist/workflow/types.d.ts.map +1 -0
- package/dist/workflow/types.js +15 -0
- package/dist/workflow/types.js.map +1 -0
- package/dist/workflow-transport.d.ts +28 -0
- package/dist/workflow-transport.d.ts.map +1 -0
- package/dist/workflow-transport.js +184 -0
- package/dist/workflow-transport.js.map +1 -0
- package/open-design.json +2 -2
- package/package.json +4 -1
- package/prototype-kit/tests/rules-check.mjs +9 -0
- package/runtime/codex-conversion/src/images/native-invoke.mjs +1 -1
- package/runtime/codex-conversion/src/images/native.mjs +8 -4
- package/runtime/layerdoc-validator.mjs +1860 -0
- package/scene-kit/starter/camera.js +10 -0
- package/scene-kit/starter/gobo.js +60 -0
- package/scene-kit/starter/index.html +23 -0
- package/scene-kit/starter/lib.js +84 -0
- package/scene-kit/starter/main.js +78 -0
- package/scene-kit/starter/scene.js +33 -0
- package/scene-kit/vendor/LICENSE +21 -0
- package/scene-kit/vendor/addons/geometries/RoundedBoxGeometry.js +216 -0
- package/scene-kit/vendor/addons/renderers/CSS3DRenderer.js +454 -0
- package/scene-kit/vendor/three.core.js +60586 -0
- package/scene-kit/vendor/three.module.js +19719 -0
- package/skills/12ui-design/SKILL.md +21 -61
- package/skills/12ui-design/improve.md +5 -1
- package/skills/12ui-design/inspire.md +8 -5
- package/skills/12ui-design/outputs.md +23 -2
- package/skills/12ui-design/scene.md +172 -0
- package/skills/12ui-design/session.md +161 -0
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { TwelveUiBranchClient, BranchApiError } from '../branch-client.js';
|
|
2
|
+
import { TwelveUiConversionClient, ConversionClientError, ConversionTerminalError } from '../conversion-client.js';
|
|
3
|
+
import { normalizeConversionOrigin } from '../config.js';
|
|
4
|
+
import { WorkflowError } from './types.js';
|
|
5
|
+
import { inputBytes, retainResponse, saveOutput, stringParameter, timeoutMs, withDeadline } from './adapter-utils.js';
|
|
6
|
+
import { materializeLayerDoc } from './adapter-layerdoc.js';
|
|
7
|
+
import { executeHostedPrototypeLabels, hostedPrototypeRequest } from './adapter-prototype-labels.js';
|
|
8
|
+
/** Retain exact response bytes before the established client parses or validates them. */
|
|
9
|
+
function recordedFetch(context) {
|
|
10
|
+
return async (input, init) => {
|
|
11
|
+
const response = await (context.fetch ?? fetch)(input, init);
|
|
12
|
+
await retainResponse(context, new Uint8Array(await response.clone().arrayBuffer()));
|
|
13
|
+
return response;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
async function delay(signal) {
|
|
17
|
+
if (signal.aborted)
|
|
18
|
+
throw new WorkflowError('provider-outcome-unknown', 'Hosted operation is still unresolved after dispatch.', 'ambiguous');
|
|
19
|
+
await new Promise((resolve, reject) => {
|
|
20
|
+
const timer = setTimeout(() => { signal.removeEventListener('abort', stop); resolve(); }, 250);
|
|
21
|
+
const stop = () => { clearTimeout(timer); reject(new WorkflowError('provider-outcome-unknown', 'Hosted operation is still unresolved after dispatch.', 'ambiguous')); };
|
|
22
|
+
signal.addEventListener('abort', stop, { once: true });
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
export async function executeTwelveUi(request, context) {
|
|
26
|
+
if (request.capability === 'text')
|
|
27
|
+
hostedPrototypeRequest(request);
|
|
28
|
+
else if (!['image', 'image-edit', 'convert', 'code'].includes(request.capability))
|
|
29
|
+
throw new WorkflowError('unsupported-capability', '12ui exposes design generation and conversion, not a generic text provider.');
|
|
30
|
+
if (request.capability === 'code' && (request.output.kind !== 'html' || request.parameters?.recipe !== 'convert'))
|
|
31
|
+
throw new WorkflowError('unsupported-output', '12ui code output is available only for the convert recipe producing HTML from one image.');
|
|
32
|
+
const env = context.env ?? process.env;
|
|
33
|
+
const apiKey = env.TWELVE_UI_API_KEY?.trim();
|
|
34
|
+
if (!apiKey)
|
|
35
|
+
throw new WorkflowError('credential-required', 'TWELVE_UI_API_KEY is required for this explicitly paid route.');
|
|
36
|
+
if (!context.idempotencyKey?.trim())
|
|
37
|
+
throw new WorkflowError('idempotency-required', 'A durable operation idempotency key is required for 12ui.');
|
|
38
|
+
let origin;
|
|
39
|
+
try {
|
|
40
|
+
origin = normalizeConversionOrigin(context.apiOrigin ?? env.TWELVE_UI_ORIGIN ?? 'https://12ui.com');
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
throw new WorkflowError('invalid-origin', 'The configured 12ui origin is invalid.');
|
|
44
|
+
}
|
|
45
|
+
if (request.capability === 'text')
|
|
46
|
+
return executeHostedPrototypeLabels(request, context, { origin, apiKey, fetch: recordedFetch(context) });
|
|
47
|
+
const inputs = await Promise.all(request.inputs.map(async (input) => {
|
|
48
|
+
if (!/^image\/(png|jpeg|webp)$/.test(input.mediaType))
|
|
49
|
+
throw new WorkflowError('unsupported-input', 'This 12ui adapter accepts PNG, JPEG, or WebP source images.');
|
|
50
|
+
return { input, bytes: await inputBytes(input) };
|
|
51
|
+
}));
|
|
52
|
+
if (request.capability === 'convert' || request.capability === 'code') {
|
|
53
|
+
if (request.parameters?.conversionInstructions !== undefined)
|
|
54
|
+
throw new WorkflowError('unsupported-conversion-instructions', 'Hosted image conversion does not accept custom instructions; use a session or local HTML reconstruction.');
|
|
55
|
+
if (inputs.length !== 1)
|
|
56
|
+
throw new WorkflowError('input-required', '12ui conversion requires exactly one image.');
|
|
57
|
+
const output = stringParameter(request, 'output') ?? (request.output.kind === 'html' ? 'html' : request.output.kind === 'json' ? 'layerdoc' : undefined);
|
|
58
|
+
if (!['html', 'html_fixed', 'layerdoc'].includes(output ?? ''))
|
|
59
|
+
throw new WorkflowError('unsupported-output', 'This conversion adapter supports HTML, fixed HTML, and native LayerDoc only.');
|
|
60
|
+
if ((request.output.kind === 'html' && output === 'layerdoc') || (request.output.kind !== 'html' && output !== 'layerdoc') || !['html', 'json'].includes(request.output.kind))
|
|
61
|
+
throw new WorkflowError('conflicting-output', 'The requested output kind must agree with the hosted conversion format.');
|
|
62
|
+
const model = stringParameter(request, 'model') ?? 'standard';
|
|
63
|
+
if (!['fast', 'standard', 'pro'].includes(model))
|
|
64
|
+
throw new WorkflowError('invalid-model', '12ui conversion model must be fast, standard, or pro.');
|
|
65
|
+
const client = new TwelveUiConversionClient({ origin, apiKey, fetch: recordedFetch(context) });
|
|
66
|
+
return withDeadline(context, async (signal) => {
|
|
67
|
+
let accepted = false;
|
|
68
|
+
try {
|
|
69
|
+
const input = inputs[0];
|
|
70
|
+
let operation = await client.createConversion({ bytes: input.bytes, filename: `${input.input.id}.${input.input.mediaType.split('/')[1]}`, mediaType: input.input.mediaType, output: output, model: model, idempotencyKey: context.idempotencyKey, signal });
|
|
71
|
+
accepted = true;
|
|
72
|
+
if (operation.status !== 'succeeded')
|
|
73
|
+
operation = await client.waitForConversion(operation.id, { signal, timeoutMs: timeoutMs(context) });
|
|
74
|
+
const result = await client.downloadResult(operation, output, signal);
|
|
75
|
+
if (output === 'layerdoc') {
|
|
76
|
+
const files = await materializeLayerDoc({ bytes: result.bytes, operation, source: { artifact: input.input, bytes: input.bytes }, client, context, signal });
|
|
77
|
+
return { files, providerRequestId: operation.id, value: { conversionId: operation.id, output, nativeLayerDoc: true, implementation: 'hosted-conversion', representation: { contentType: result.mediaType, rasterReferences: 'local-digest-verified-sidecar', assetsManifest: 'layerdoc-assets.json', standaloneDocument: false } } };
|
|
78
|
+
}
|
|
79
|
+
const file = await saveOutput(context, result.bytes, output === 'layerdoc' ? 'json' : 'html');
|
|
80
|
+
return { files: [{ path: file, mediaType: result.mediaType.split(';', 1)[0].trim().toLowerCase(), role: output === 'layerdoc' ? 'layerdoc' : 'entrypoint', relativePath: output === 'layerdoc' ? 'document.layerdoc.json' : 'index.html' }], providerRequestId: operation.id, value: { conversionId: operation.id, output, nativeLayerDoc: output === 'layerdoc', implementation: 'hosted-conversion', representation: { contentType: result.mediaType } } };
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
if (error instanceof WorkflowError)
|
|
84
|
+
throw error;
|
|
85
|
+
if (error instanceof ConversionTerminalError)
|
|
86
|
+
throw new WorkflowError('provider-terminal-error', '12ui conversion reached a terminal failure; inspect its retained result.', 'terminal-stop');
|
|
87
|
+
if (accepted)
|
|
88
|
+
throw new WorkflowError('provider-retrieval-incomplete', '12ui accepted this conversion, but its result could not be collected. Reconcile the original conversion and retained responses; do not submit again.', 'ambiguous');
|
|
89
|
+
if (error instanceof ConversionClientError && [400, 401, 403, 404, 422, 429].includes(error.status))
|
|
90
|
+
throw new WorkflowError('provider-http-error', `12ui returned HTTP ${error.status}.`, 'terminal-stop');
|
|
91
|
+
throw new WorkflowError('provider-outcome-unknown', '12ui conversion outcome is unresolved; no duplicate request was attempted.', 'ambiguous');
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
if (request.output.kind !== 'image')
|
|
96
|
+
throw new WorkflowError('unsupported-output', '12ui generation requires image output.');
|
|
97
|
+
if (request.capability === 'image' && inputs.length)
|
|
98
|
+
throw new WorkflowError('unsupported-input', 'Use image-edit for a single reference redraw.');
|
|
99
|
+
if (request.capability === 'image-edit' && inputs.length !== 1)
|
|
100
|
+
throw new WorkflowError('unsupported-input', '12ui image-edit means one reference image redrawn from a prompt.');
|
|
101
|
+
if (['mask', 'maskPath', 'transparent_background', 'size', 'width', 'height', 'model'].some(name => request.parameters?.[name] !== undefined)
|
|
102
|
+
|| (request.parameters?.background !== undefined && request.parameters.background !== 'opaque')) {
|
|
103
|
+
throw new WorkflowError('unsupported-image-contract', '12ui redraw does not support masks, transparent output, exact dimensions, or a direct model selector.');
|
|
104
|
+
}
|
|
105
|
+
const aspect = stringParameter(request, 'aspect') ?? 'landscape';
|
|
106
|
+
if (!['landscape', 'portrait', 'square'].includes(aspect))
|
|
107
|
+
throw new WorkflowError('invalid-aspect', '12ui aspect must be landscape, portrait, or square.');
|
|
108
|
+
const imageProfile = stringParameter(request, 'imageProfile') ?? 'standard';
|
|
109
|
+
if (!['standard', 'pro'].includes(imageProfile))
|
|
110
|
+
throw new WorkflowError('invalid-image-profile', '12ui image profile must be standard or pro.');
|
|
111
|
+
const client = new TwelveUiBranchClient({ origin, apiKey, fetch: recordedFetch(context) });
|
|
112
|
+
return withDeadline(context, async (signal) => {
|
|
113
|
+
let accepted = false;
|
|
114
|
+
try {
|
|
115
|
+
const reference = inputs[0];
|
|
116
|
+
let run = await client.startCreateRun({ concept: request.prompt, aspect: aspect, mode: reference ? 'preserve-structure' : 'inspiration', imageProfile: imageProfile, candidates: [{ slot: 'a', direction: request.prompt, ...(reference ? { useReferenceImage: true } : {}) }], ...(reference ? { referenceImage: { data: reference.bytes.toString('base64'), mediaType: reference.input.mediaType, sha256: reference.input.sha256 } } : {}) }, context.idempotencyKey, signal);
|
|
117
|
+
accepted = true;
|
|
118
|
+
let candidate = run.candidates.find(item => item.slot === 'a');
|
|
119
|
+
if (!candidate)
|
|
120
|
+
throw new WorkflowError('provider-invalid-result', '12ui did not return the requested candidate. Reconcile the accepted run.', 'ambiguous');
|
|
121
|
+
if (candidate.status === 'pending')
|
|
122
|
+
run = await client.dispatchScreen(run.id, 'a', { signal });
|
|
123
|
+
while (true) {
|
|
124
|
+
candidate = run.candidates.find(item => item.slot === 'a');
|
|
125
|
+
if (candidate?.status === 'succeeded')
|
|
126
|
+
break;
|
|
127
|
+
if (!candidate)
|
|
128
|
+
throw new WorkflowError('provider-invalid-result', '12ui did not return the requested candidate. Reconcile the accepted run.', 'ambiguous');
|
|
129
|
+
if (candidate.status === 'failed')
|
|
130
|
+
throw new WorkflowError('provider-terminal-error', '12ui generation failed; its response was retained.', 'terminal-stop');
|
|
131
|
+
await delay(signal);
|
|
132
|
+
run = await client.getRun(run.id, signal);
|
|
133
|
+
}
|
|
134
|
+
const downloaded = await client.downloadScreen(run.id, 'a', signal);
|
|
135
|
+
const file = await saveOutput(context, downloaded.bytes, 'png');
|
|
136
|
+
return { files: [{ path: file, mediaType: 'image/png', role: 'image' }], providerRequestId: run.id, value: { createRunId: run.id, slot: 'a', ...(reference ? { editSemantics: 'single-reference-prompt-redraw' } : {}) } };
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
if (error instanceof WorkflowError)
|
|
140
|
+
throw error;
|
|
141
|
+
if (!accepted && error instanceof BranchApiError && [400, 401, 403, 404, 422, 429].includes(error.status))
|
|
142
|
+
throw new WorkflowError('provider-http-error', `12ui rejected the creation request (HTTP ${error.status}).`, 'terminal-stop');
|
|
143
|
+
throw new WorkflowError('provider-outcome-unknown', '12ui generation outcome is unresolved; no generation retry was attempted.', 'ambiguous');
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=adapter-12ui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-12ui.js","sourceRoot":"","sources":["../../src/workflow/adapter-12ui.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ConversionOperation, TwelveUiConversionClient } from '../conversion-client.js';
|
|
2
|
+
import type { ProviderExecutionContext } from './adapter-types.js';
|
|
3
|
+
import { type Artifact, type ExecutionResult } from './types.js';
|
|
4
|
+
/** Download only service-declared, digest-verified rasters; never follow document URLs. */
|
|
5
|
+
export declare function materializeLayerDoc(args: {
|
|
6
|
+
bytes: Uint8Array;
|
|
7
|
+
operation: ConversionOperation;
|
|
8
|
+
source: {
|
|
9
|
+
artifact: Artifact;
|
|
10
|
+
bytes: Uint8Array;
|
|
11
|
+
};
|
|
12
|
+
client: Pick<TwelveUiConversionClient, 'downloadArtifact'>;
|
|
13
|
+
context: ProviderExecutionContext;
|
|
14
|
+
signal: AbortSignal;
|
|
15
|
+
}): Promise<NonNullable<ExecutionResult['files']>>;
|
|
16
|
+
//# sourceMappingURL=adapter-layerdoc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-layerdoc.d.ts","sourceRoot":"","sources":["../../src/workflow/adapter-layerdoc.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAC7F,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAiB,KAAK,QAAQ,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAkChF,2FAA2F;AAC3F,wBAAsB,mBAAmB,CAAC,IAAI,EAAE;IAC9C,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,EAAE,mBAAmB,CAAC;IAC/B,MAAM,EAAE;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,KAAK,EAAE,UAAU,CAAA;KAAE,CAAC;IAClD,MAAM,EAAE,IAAI,CAAC,wBAAwB,EAAE,kBAAkB,CAAC,CAAC;IAC3D,OAAO,EAAE,wBAAwB,CAAC;IAClC,MAAM,EAAE,WAAW,CAAC;CACrB,GAAG,OAAO,CAAC,WAAW,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAkDjD"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { createHash, randomUUID } from 'node:crypto';
|
|
2
|
+
import { mkdir, writeFile } from 'node:fs/promises';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { WorkflowError } from './types.js';
|
|
5
|
+
const object = (value) => value && typeof value === 'object' && !Array.isArray(value) ? value : undefined;
|
|
6
|
+
const invalid = (message) => { throw new WorkflowError('layerdoc-nonportable', `${message} The paid response was retained; reconcile its artifacts without generating again.`, 'ambiguous'); };
|
|
7
|
+
const slots = ['plate', 'plate2x', 'region2x', 'cutout', 'crop'];
|
|
8
|
+
const extensions = { 'image/png': 'png', 'image/jpeg': 'jpg', 'image/webp': 'webp', 'image/svg+xml': 'svg', 'image/avif': 'avif' };
|
|
9
|
+
const essence = (value) => value.split(';', 1)[0].trim().toLowerCase();
|
|
10
|
+
/** PublicLayerDoc v2 artifactId contract, matching collectArtifactRefsV2 in layerdoc/core. */
|
|
11
|
+
function references(document) {
|
|
12
|
+
const source = object(document.source);
|
|
13
|
+
if (document.version !== '2' || !source || !Array.isArray(document.layers))
|
|
14
|
+
invalid('The retained result is not a supported LayerDoc v2 document.');
|
|
15
|
+
const refs = [source];
|
|
16
|
+
const walk = (nodes, depth) => {
|
|
17
|
+
if (depth > 512)
|
|
18
|
+
invalid('LayerDoc nesting exceeds the supported boundary.');
|
|
19
|
+
for (const value of nodes) {
|
|
20
|
+
const node = object(value);
|
|
21
|
+
if (!node)
|
|
22
|
+
invalid('LayerDoc contains a malformed layer.');
|
|
23
|
+
if (Array.isArray(node.children)) {
|
|
24
|
+
walk(node.children, depth + 1);
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
if (node.artifacts === undefined)
|
|
28
|
+
continue;
|
|
29
|
+
const artifacts = object(node.artifacts);
|
|
30
|
+
if (!artifacts)
|
|
31
|
+
invalid('LayerDoc contains malformed raster references.');
|
|
32
|
+
for (const [slot, reference] of Object.entries(artifacts)) {
|
|
33
|
+
if (!slots.includes(slot) || !object(reference))
|
|
34
|
+
invalid('LayerDoc contains an unsupported raster reference slot.');
|
|
35
|
+
refs.push(object(reference));
|
|
36
|
+
if (refs.length > 10_000)
|
|
37
|
+
invalid('LayerDoc contains too many raster references.');
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
walk(document.layers, 0);
|
|
42
|
+
return refs;
|
|
43
|
+
}
|
|
44
|
+
/** Download only service-declared, digest-verified rasters; never follow document URLs. */
|
|
45
|
+
export async function materializeLayerDoc(args) {
|
|
46
|
+
let document;
|
|
47
|
+
try {
|
|
48
|
+
document = object(JSON.parse(Buffer.from(args.bytes).toString('utf8')));
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
invalid('The retained LayerDoc response is not JSON.');
|
|
52
|
+
}
|
|
53
|
+
if (!document)
|
|
54
|
+
invalid('The retained LayerDoc response is not an object.');
|
|
55
|
+
const refs = references(document);
|
|
56
|
+
const artifacts = new Map((args.operation.result?.artifacts ?? []).map(artifact => [artifact.id, artifact]));
|
|
57
|
+
if (artifacts.size !== (args.operation.result?.artifacts ?? []).length)
|
|
58
|
+
invalid('The service declared duplicate artifact identities.');
|
|
59
|
+
const directory = path.join(args.context.evidenceDir ?? args.context.workDir, `layerdoc-${randomUUID()}`);
|
|
60
|
+
await mkdir(path.join(directory, 'assets'), { recursive: true });
|
|
61
|
+
const files = [];
|
|
62
|
+
const localized = new Map();
|
|
63
|
+
const written = new Set();
|
|
64
|
+
for (const ref of refs) {
|
|
65
|
+
if (typeof ref.artifactId !== 'string' || !ref.artifactId)
|
|
66
|
+
invalid('A mandatory LayerDoc raster lacks its stable artifact identity.');
|
|
67
|
+
const id = ref.artifactId;
|
|
68
|
+
let local = localized.get(id);
|
|
69
|
+
if (!local) {
|
|
70
|
+
let bytes, mediaType, sha256;
|
|
71
|
+
const artifact = artifacts.get(id);
|
|
72
|
+
if (artifact) {
|
|
73
|
+
const downloaded = await args.client.downloadArtifact(artifact, args.signal);
|
|
74
|
+
bytes = downloaded.bytes;
|
|
75
|
+
sha256 = createHash('sha256').update(bytes).digest('hex');
|
|
76
|
+
mediaType = essence(artifact.media_type);
|
|
77
|
+
if (sha256 !== artifact.sha256.toLowerCase())
|
|
78
|
+
invalid('A downloaded LayerDoc raster does not match the service-declared hash.');
|
|
79
|
+
if (essence(downloaded.mediaType) !== mediaType)
|
|
80
|
+
invalid('A downloaded LayerDoc raster has a different content type than its declaration.');
|
|
81
|
+
}
|
|
82
|
+
else if (id === 'source-original') {
|
|
83
|
+
// This exact immutable input was uploaded by this operation; no unsigned download is needed.
|
|
84
|
+
bytes = args.source.bytes;
|
|
85
|
+
sha256 = args.source.artifact.sha256;
|
|
86
|
+
mediaType = args.source.artifact.mediaType;
|
|
87
|
+
if (createHash('sha256').update(bytes).digest('hex') !== sha256)
|
|
88
|
+
invalid('The original source no longer matches its registered bytes.');
|
|
89
|
+
}
|
|
90
|
+
else
|
|
91
|
+
invalid(`LayerDoc raster ${id} has no service-declared downloadable artifact.`);
|
|
92
|
+
const extension = extensions[mediaType];
|
|
93
|
+
if (!extension)
|
|
94
|
+
invalid('LayerDoc raster media type is unsupported for a portable bundle.');
|
|
95
|
+
const relativePath = `assets/${sha256}.${extension}`;
|
|
96
|
+
if (!written.has(relativePath)) {
|
|
97
|
+
const file = path.join(directory, relativePath);
|
|
98
|
+
await writeFile(file, bytes, { flag: 'wx' });
|
|
99
|
+
files.push({ path: file, mediaType: mediaType, role: 'asset', relativePath });
|
|
100
|
+
written.add(relativePath);
|
|
101
|
+
}
|
|
102
|
+
local = { path: relativePath, sha256: sha256, mediaType: mediaType };
|
|
103
|
+
localized.set(id, local);
|
|
104
|
+
}
|
|
105
|
+
// Relative URLs are not valid PublicLayerDoc v2; a sidecar supplies portable locators.
|
|
106
|
+
ref.mediaType = local.mediaType;
|
|
107
|
+
delete ref.url;
|
|
108
|
+
delete ref.expiresAt;
|
|
109
|
+
}
|
|
110
|
+
const file = path.join(directory, 'document.layerdoc.json');
|
|
111
|
+
await writeFile(file, JSON.stringify(document), { flag: 'wx' });
|
|
112
|
+
const manifest = path.join(directory, 'layerdoc-assets.json');
|
|
113
|
+
await writeFile(manifest, JSON.stringify({ schema: '12ui.layerdoc-assets.v1', assets: Object.fromEntries(localized) }), { flag: 'wx' });
|
|
114
|
+
return [{ path: file, mediaType: 'application/vnd.12ui.layerdoc+json', role: 'layerdoc', relativePath: 'document.layerdoc.json' }, { path: manifest, mediaType: 'application/json', role: 'layerdoc-assets', relativePath: 'layerdoc-assets.json' }, ...files];
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=adapter-layerdoc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-layerdoc.js","sourceRoot":"","sources":["../../src/workflow/adapter-layerdoc.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type ExecutionResult, type WorkflowRequest } from './types.js';
|
|
2
|
+
import type { ProviderExecutionContext } from './adapter-types.js';
|
|
3
|
+
export declare function executeOpenAi(request: WorkflowRequest, context: ProviderExecutionContext): Promise<ExecutionResult>;
|
|
4
|
+
//# sourceMappingURL=adapter-openai.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-openai.d.ts","sourceRoot":"","sources":["../../src/workflow/adapter-openai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,eAAe,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AACvF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAsCnE,wBAAsB,aAAa,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,eAAe,CAAC,CAkFzH"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { WorkflowError } from './types.js';
|
|
2
|
+
import { inputBytes, retainResponse, saveOutput, stringParameter, withDeadline } from './adapter-utils.js';
|
|
3
|
+
const object = (value) => value && typeof value === 'object' && !Array.isArray(value) ? value : {};
|
|
4
|
+
function apiModel(request, context) {
|
|
5
|
+
const env = context.env ?? process.env;
|
|
6
|
+
const isText = request.capability === 'text' || request.capability === 'code';
|
|
7
|
+
const model = stringParameter(request, 'model') ?? (isText ? context.models?.openai ?? env.OPENAI_MODEL : context.imageModel ?? env.OPENAI_IMAGE_MODEL);
|
|
8
|
+
if (!model?.trim())
|
|
9
|
+
throw new WorkflowError('model-required', `Configure an OpenAI ${isText ? 'text' : 'image'} model explicitly; model availability is account-specific.`);
|
|
10
|
+
return model.trim();
|
|
11
|
+
}
|
|
12
|
+
/** No HTTP retries. A rejected request differs from a disconnected accepted request. */
|
|
13
|
+
async function submit(context, endpoint, body, headers) {
|
|
14
|
+
return withDeadline(context, async (signal) => {
|
|
15
|
+
let response;
|
|
16
|
+
try {
|
|
17
|
+
response = await (context.fetch ?? fetch)(`https://api.openai.com/v1/${endpoint}`, { method: 'POST', headers, body, signal });
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
throw new WorkflowError('provider-outcome-unknown', 'OpenAI request outcome is unknown after submission; no retry was attempted.', 'ambiguous');
|
|
21
|
+
}
|
|
22
|
+
let bytes;
|
|
23
|
+
try {
|
|
24
|
+
bytes = await response.text();
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
throw new WorkflowError('provider-response-incomplete', 'OpenAI returned an unreadable response; inspect the operation before retrying.', 'ambiguous');
|
|
28
|
+
}
|
|
29
|
+
const receipt = await retainResponse(context, bytes);
|
|
30
|
+
let data;
|
|
31
|
+
try {
|
|
32
|
+
data = object(JSON.parse(bytes));
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
throw new WorkflowError('provider-invalid-json', 'OpenAI response bytes were retained but are not valid JSON. Reconcile the retained response without submitting again.', 'ambiguous');
|
|
36
|
+
}
|
|
37
|
+
if (!response.ok) {
|
|
38
|
+
const code = String(object(data.error).code ?? '');
|
|
39
|
+
if (response.status === 403)
|
|
40
|
+
throw new WorkflowError('provider-permission-denied', 'OpenAI denied permission for this request; no fallback was attempted.', 'terminal-stop');
|
|
41
|
+
if (/content_policy|safety|moderation|refus/i.test(code))
|
|
42
|
+
throw new WorkflowError('provider-refusal', 'OpenAI refused the request; no fallback was attempted.', 'terminal-stop');
|
|
43
|
+
const rejected = [400, 401, 404, 422, 429].includes(response.status);
|
|
44
|
+
throw new WorkflowError('provider-http-error', `OpenAI returned HTTP ${response.status}; response retained.`, rejected ? 'not-dispatched' : 'ambiguous');
|
|
45
|
+
}
|
|
46
|
+
return { response, data, receipt };
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
export async function executeOpenAi(request, context) {
|
|
50
|
+
if (!['text', 'code', 'image', 'image-edit'].includes(request.capability))
|
|
51
|
+
throw new WorkflowError('unsupported-capability', 'OpenAI adapter supports text, generated HTML and images, not native LayerDoc conversion.');
|
|
52
|
+
if (request.capability === 'code' && request.output.kind !== 'html')
|
|
53
|
+
throw new WorkflowError('unsupported-output', 'OpenAI code output is a generated HTML document; project execution is unavailable.');
|
|
54
|
+
const key = (context.env ?? process.env).OPENAI_API_KEY?.trim();
|
|
55
|
+
if (!key)
|
|
56
|
+
throw new WorkflowError('credential-required', 'OPENAI_API_KEY is required for this explicitly paid route.');
|
|
57
|
+
const model = apiModel(request, context);
|
|
58
|
+
const headers = { Authorization: `Bearer ${key}` };
|
|
59
|
+
const inputs = await Promise.all(request.inputs.map(async (input) => {
|
|
60
|
+
if (!/^image\/(png|jpeg|webp)$/.test(input.mediaType))
|
|
61
|
+
throw new WorkflowError('unsupported-input', 'Image inputs must be PNG, JPEG, or WebP.');
|
|
62
|
+
return { input, bytes: await inputBytes(input) };
|
|
63
|
+
}));
|
|
64
|
+
if (request.capability === 'text' || request.capability === 'code') {
|
|
65
|
+
if (request.output.kind === 'project' || request.output.kind === 'image')
|
|
66
|
+
throw new WorkflowError('unsupported-output', 'Text API output must be text/HTML or structured JSON.');
|
|
67
|
+
const prompt = request.prompt + (request.output.kind === 'html' ? '\nReturn only a complete self-contained HTML document, beginning with <!doctype html>. Inline all CSS, JavaScript and visual assets; do not use external resources, Markdown fences or local file references. This response will be saved as index.html. You cannot run or verify the page.' : '');
|
|
68
|
+
const content = [{ type: 'input_text', text: prompt }, ...inputs.map(({ input, bytes }) => ({ type: 'input_image', image_url: `data:${input.mediaType};base64,${bytes.toString('base64')}` }))];
|
|
69
|
+
const body = { model, input: [{ role: 'user', content }], ...(request.output.schema ? { text: { format: { type: 'json_schema', name: 'workflow_result', schema: request.output.schema, strict: true } } } : {}), store: false };
|
|
70
|
+
const { data, response, receipt } = await submit(context, 'responses', JSON.stringify(body), { ...headers, 'Content-Type': 'application/json' });
|
|
71
|
+
const output = Array.isArray(data.output) ? data.output.map(object) : [];
|
|
72
|
+
const contentItems = output.flatMap(item => Array.isArray(item.content) ? item.content.map(object) : []);
|
|
73
|
+
if (contentItems.some(item => item.type === 'refusal'))
|
|
74
|
+
throw new WorkflowError('provider-refusal', 'OpenAI refused the request; its response was retained.', 'terminal-stop');
|
|
75
|
+
if (data.status !== 'completed')
|
|
76
|
+
throw new WorkflowError('provider-incomplete', 'OpenAI did not produce a completed response.', ['failed', 'incomplete', 'cancelled'].includes(String(data.status)) ? 'terminal-stop' : 'ambiguous');
|
|
77
|
+
const text = contentItems.filter(item => item.type === 'output_text').map(item => typeof item.text === 'string' ? item.text : '').join('\n');
|
|
78
|
+
if (!text)
|
|
79
|
+
throw new WorkflowError('provider-empty-output', 'OpenAI completed without usable output text. Reconcile the retained response.', 'ambiguous');
|
|
80
|
+
let value = text;
|
|
81
|
+
if (request.output.kind === 'json') {
|
|
82
|
+
try {
|
|
83
|
+
value = JSON.parse(text);
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
throw new WorkflowError('provider-invalid-json', 'Completed text did not contain JSON. Reconcile the retained response.', 'ambiguous');
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
const files = [{ path: receipt, mediaType: 'application/json', role: 'provider-response' }];
|
|
90
|
+
if (request.output.kind === 'html') {
|
|
91
|
+
if (!/^\s*(?:<!doctype\s+html[^>]*>\s*)?<html\b/i.test(text))
|
|
92
|
+
throw new WorkflowError('provider-invalid-html', 'The retained response is not a complete HTML document. Reconcile its existing bytes.', 'ambiguous');
|
|
93
|
+
files.unshift({ path: await saveOutput(context, Buffer.from(text), 'html'), mediaType: 'text/html', role: 'entrypoint', relativePath: 'index.html' });
|
|
94
|
+
value = { implementation: 'generated-html', verifiedInBrowser: false };
|
|
95
|
+
}
|
|
96
|
+
return { value, files, providerRequestId: typeof data.id === 'string' ? data.id : response.headers.get('x-request-id') ?? undefined, usage: object(data.usage) };
|
|
97
|
+
}
|
|
98
|
+
if (request.output.kind !== 'image')
|
|
99
|
+
throw new WorkflowError('unsupported-output', 'Image API requests must declare image output.');
|
|
100
|
+
if (request.capability === 'image' && inputs.length)
|
|
101
|
+
throw new WorkflowError('unsupported-input', 'Use image-edit for image-reference inputs.');
|
|
102
|
+
if (request.capability === 'image-edit' && !inputs.length)
|
|
103
|
+
throw new WorkflowError('input-required', 'Image editing requires a registered image.');
|
|
104
|
+
if (request.parameters?.mask !== undefined || request.parameters?.maskPath !== undefined)
|
|
105
|
+
throw new WorkflowError('unsupported-mask', 'Mask editing is not represented by this workflow contract.');
|
|
106
|
+
const options = { model, prompt: request.prompt, n: 1 };
|
|
107
|
+
for (const name of ['size', 'quality', 'background', 'output_format']) {
|
|
108
|
+
const value = stringParameter(request, name);
|
|
109
|
+
if (value)
|
|
110
|
+
options[name] = value;
|
|
111
|
+
}
|
|
112
|
+
const aspect = stringParameter(request, 'aspect');
|
|
113
|
+
const sizes = { landscape: '1536x1024', portrait: '1024x1536', square: '1024x1024' };
|
|
114
|
+
if (aspect && !(aspect in sizes))
|
|
115
|
+
throw new WorkflowError('invalid-aspect', 'Image aspect must be landscape, portrait, or square.');
|
|
116
|
+
const width = request.parameters?.width, height = request.parameters?.height;
|
|
117
|
+
if (width !== undefined || height !== undefined) {
|
|
118
|
+
if (!Number.isSafeInteger(width) || !Number.isSafeInteger(height) || !Object.values(sizes).includes(`${width}x${height}`))
|
|
119
|
+
throw new WorkflowError('unsupported-image-dimensions', 'Exact image dimensions must be 1024x1024, 1536x1024, or 1024x1536.');
|
|
120
|
+
const exact = `${width}x${height}`;
|
|
121
|
+
if ((options.size && options.size !== exact) || (aspect && sizes[aspect] !== exact))
|
|
122
|
+
throw new WorkflowError('conflicting-image-dimensions', 'Image size, dimensions and aspect must agree.');
|
|
123
|
+
options.size = exact;
|
|
124
|
+
}
|
|
125
|
+
if (aspect) {
|
|
126
|
+
if (options.size && options.size !== sizes[aspect])
|
|
127
|
+
throw new WorkflowError('conflicting-image-dimensions', 'Image size and aspect must agree.');
|
|
128
|
+
options.size = sizes[aspect];
|
|
129
|
+
}
|
|
130
|
+
if (options.size && !['auto', ...Object.values(sizes)].includes(String(options.size)))
|
|
131
|
+
throw new WorkflowError('unsupported-image-dimensions', 'Image size must be auto, 1024x1024, 1536x1024, or 1024x1536.');
|
|
132
|
+
if (request.parameters?.transparent_background !== undefined) {
|
|
133
|
+
if (typeof request.parameters.transparent_background !== 'boolean')
|
|
134
|
+
throw new WorkflowError('invalid-background', 'transparent_background must be boolean.');
|
|
135
|
+
const background = request.parameters.transparent_background ? 'transparent' : 'opaque';
|
|
136
|
+
if (options.background && options.background !== background)
|
|
137
|
+
throw new WorkflowError('conflicting-background', 'Image background options must agree.');
|
|
138
|
+
options.background = background;
|
|
139
|
+
}
|
|
140
|
+
if (request.parameters?.n !== undefined && request.parameters.n !== 1)
|
|
141
|
+
throw new WorkflowError('unsupported-count', 'Each durable image operation produces exactly one image.');
|
|
142
|
+
const format = options.output_format ?? 'png';
|
|
143
|
+
if (!['png', 'jpeg', 'webp'].includes(String(format)))
|
|
144
|
+
throw new WorkflowError('invalid-format', 'Image format must be png, jpeg, or webp.');
|
|
145
|
+
let body;
|
|
146
|
+
if (request.capability === 'image-edit') {
|
|
147
|
+
const form = new FormData();
|
|
148
|
+
for (const [name, value] of Object.entries(options))
|
|
149
|
+
form.append(name, String(value));
|
|
150
|
+
for (const { input, bytes } of inputs)
|
|
151
|
+
form.append('image[]', new Blob([new Uint8Array(bytes)], { type: input.mediaType }), `${input.id}.${input.mediaType.split('/')[1]}`);
|
|
152
|
+
body = form;
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
body = JSON.stringify(options);
|
|
156
|
+
headers['Content-Type'] = 'application/json';
|
|
157
|
+
}
|
|
158
|
+
const { data, response, receipt } = await submit(context, request.capability === 'image' ? 'images/generations' : 'images/edits', body, headers);
|
|
159
|
+
const images = Array.isArray(data.data) ? data.data.map(object) : [];
|
|
160
|
+
const encoded = images.length === 1 ? images[0].b64_json : undefined;
|
|
161
|
+
if (typeof encoded !== 'string' || !encoded || !/^[A-Za-z0-9+/]+={0,2}$/.test(encoded) || encoded.length % 4 !== 0)
|
|
162
|
+
throw new WorkflowError('provider-image-missing', 'OpenAI did not return exactly one base64 image. Reconcile the retained response without submitting again.', 'ambiguous');
|
|
163
|
+
const file = await saveOutput(context, Buffer.from(encoded, 'base64'), String(format));
|
|
164
|
+
return { files: [{ path: file, mediaType: `image/${format}`, role: 'image' }, { path: receipt, mediaType: 'application/json', role: 'provider-response' }], providerRequestId: response.headers.get('x-request-id') ?? undefined, usage: object(data.usage) };
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=adapter-openai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-openai.js","sourceRoot":"","sources":["../../src/workflow/adapter-openai.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type ExecutionResult, type WorkflowRequest } from './types.js';
|
|
2
|
+
import type { ProcessOutcome, ProcessRunner, ProviderExecutionContext } from './adapter-types.js';
|
|
3
|
+
export declare const runProviderProcess: ProcessRunner;
|
|
4
|
+
export declare function parseCodexResult(outcome: ProcessOutcome): ExecutionResult;
|
|
5
|
+
export declare function parseClaudeResult(outcome: ProcessOutcome): ExecutionResult;
|
|
6
|
+
export declare function executeNativeProvider(provider: 'codex' | 'claude', request: WorkflowRequest, context: ProviderExecutionContext): Promise<ExecutionResult>;
|
|
7
|
+
//# sourceMappingURL=adapter-process.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-process.d.ts","sourceRoot":"","sources":["../../src/workflow/adapter-process.ts"],"names":[],"mappings":"AAMA,OAAO,EAAiB,KAAK,eAAe,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AACvF,OAAO,KAAK,EAAqB,cAAc,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAKrH,eAAO,MAAM,kBAAkB,EAAE,aAsB/B,CAAC;AAKH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,cAAc,GAAG,eAAe,CAYzE;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG,eAAe,CAU1E;AAED,wBAAsB,qBAAqB,CAAC,QAAQ,EAAE,OAAO,GAAG,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,eAAe,CAAC,CA2D/J"}
|