@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,81 @@
|
|
|
1
|
+
import { normalizeAction } from './slate-actions.js';
|
|
2
|
+
import { commitAction } from './slate-commit.js';
|
|
3
|
+
import { SlateError } from './slate-errors.js';
|
|
4
|
+
import { OP_ID_PATTERN } from './slate-ids.js';
|
|
5
|
+
import { readRunnerState } from './slate-liveness.js';
|
|
6
|
+
import { resumeOp, RUNNER_SPAWN_FAILED } from './slate-resume.js';
|
|
7
|
+
import { NoWrite, loadWorkspaceAt, mutateWorkspace } from './slate-workspace-store.js';
|
|
8
|
+
/**
|
|
9
|
+
* `design.slate.run` and `design.slate.resume`: the only two tools that can
|
|
10
|
+
* start work, both only from a click. Each returns after a file commit and a
|
|
11
|
+
* process spawn; neither awaits a search, an image call or a download.
|
|
12
|
+
*/
|
|
13
|
+
const requireOpId = (value) => {
|
|
14
|
+
if (typeof value !== 'string' || !OP_ID_PATTERN.test(value)) {
|
|
15
|
+
throw new SlateError('invalid_input', 'opId must be a UUID v4 minted when the dialog opened.');
|
|
16
|
+
}
|
|
17
|
+
return value;
|
|
18
|
+
};
|
|
19
|
+
/** Nothing is written or spawned when this Mac cannot draw; the reason is the one the dialog already shows. */
|
|
20
|
+
const requireLocalImage = async (runtime) => {
|
|
21
|
+
const state = await runtime.localImage();
|
|
22
|
+
if (!state.ready)
|
|
23
|
+
throw new SlateError('local_unavailable', state.reason ?? 'Codex is not ready on this Mac.');
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Spawn the runner at most once per commit or resume: the claim is a
|
|
27
|
+
* compare-and-set on `spawnedAt` inside the workspace lock, so ten concurrent
|
|
28
|
+
* calls across two server processes produce one runner.
|
|
29
|
+
*/
|
|
30
|
+
const spawnRunnerOnce = async (runtime, root, opId) => {
|
|
31
|
+
const claimed = await mutateWorkspace(root, async (ws, context) => {
|
|
32
|
+
const op = ws.ops.find((entry) => entry.opId === opId);
|
|
33
|
+
if (!op || op.state !== 'running' || op.spawnedAt !== null)
|
|
34
|
+
return new NoWrite(false);
|
|
35
|
+
if ((await readRunnerState(root, opId, context.now.getTime())).alive)
|
|
36
|
+
return new NoWrite(false);
|
|
37
|
+
op.spawnedAt = context.now.toISOString();
|
|
38
|
+
return true;
|
|
39
|
+
}, { now: runtime.now });
|
|
40
|
+
if (!claimed)
|
|
41
|
+
return;
|
|
42
|
+
try {
|
|
43
|
+
await runtime.launchRunner({ root, opId, stateRoot: runtime.stateRoot });
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
// Recorded on the op: it derives `interrupted` and the screen offers Resume.
|
|
47
|
+
await mutateWorkspace(root, (ws) => {
|
|
48
|
+
const op = ws.ops.find((entry) => entry.opId === opId);
|
|
49
|
+
if (op) {
|
|
50
|
+
op.error = {
|
|
51
|
+
code: RUNNER_SPAWN_FAILED,
|
|
52
|
+
message: `The background worker did not start: ${error instanceof Error ? error.message : String(error)}`,
|
|
53
|
+
retryable: false,
|
|
54
|
+
resumable: true,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
}, { now: runtime.now });
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
export const runAction = async (args) => {
|
|
61
|
+
const { runtime, root } = args;
|
|
62
|
+
const opId = requireOpId(args.opId);
|
|
63
|
+
const action = normalizeAction(args.actionInput);
|
|
64
|
+
const { workspace } = await loadWorkspaceAt(root, runtime.now);
|
|
65
|
+
// A repeated click on an op that already exists must answer with that op, whatever the probe says now.
|
|
66
|
+
if (!workspace.ops.some((op) => op.opId === opId))
|
|
67
|
+
await requireLocalImage(runtime);
|
|
68
|
+
const committed = await commitAction({ root, stateRoot: runtime.stateRoot, opId, action, now: runtime.now });
|
|
69
|
+
await spawnRunnerOnce(runtime, root, committed.op.opId);
|
|
70
|
+
return (await loadWorkspaceAt(root, runtime.now)).workspace.ops.find((op) => op.opId === committed.op.opId) ?? committed.op;
|
|
71
|
+
};
|
|
72
|
+
export const resumeAction = async (args) => {
|
|
73
|
+
const { runtime, root } = args;
|
|
74
|
+
const opId = requireOpId(args.opId);
|
|
75
|
+
await requireLocalImage(runtime);
|
|
76
|
+
const outcome = await resumeOp({ root, stateRoot: runtime.stateRoot, opId, now: runtime.now });
|
|
77
|
+
if (outcome.spawn)
|
|
78
|
+
await spawnRunnerOnce(runtime, root, opId);
|
|
79
|
+
return (await loadWorkspaceAt(root, runtime.now)).workspace.ops.find((op) => op.opId === opId) ?? outcome.op;
|
|
80
|
+
};
|
|
81
|
+
//# sourceMappingURL=slate-run-action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slate-run-action.js","sourceRoot":"","sources":["../src/slate-run-action.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { SlateCorpus } from './slate-corpus.js';
|
|
2
|
+
import type { SlateImageExecutor } from './slate-image-executor.js';
|
|
3
|
+
import { type LedgerInput } from './slate-ledger.js';
|
|
4
|
+
import type { SlateOp, SlateOpError, SlateWorkspace } from './slate-workspace-types.js';
|
|
5
|
+
/**
|
|
6
|
+
* What every runner shares: the frozen op, the clock, and the helpers that
|
|
7
|
+
* write progress into `workspace.json` under the workspace lock. A runner
|
|
8
|
+
* never reads a workspace field as an instruction except `op.params`, and only
|
|
9
|
+
* after the approval digest matched.
|
|
10
|
+
*/
|
|
11
|
+
export type RunnerClock = {
|
|
12
|
+
now: () => Date;
|
|
13
|
+
/** Resolves after the delay, or at once when `signal` aborts (the timer is then released). */
|
|
14
|
+
sleep: (milliseconds: number, signal?: AbortSignal) => Promise<void>;
|
|
15
|
+
};
|
|
16
|
+
export type RunnerEnv = {
|
|
17
|
+
root: string;
|
|
18
|
+
stateRoot: string;
|
|
19
|
+
opId: string;
|
|
20
|
+
workspaceId: string;
|
|
21
|
+
corpus: () => SlateCorpus;
|
|
22
|
+
executor: SlateImageExecutor;
|
|
23
|
+
clock: RunnerClock;
|
|
24
|
+
log: (entry: Record<string, unknown>) => Promise<void>;
|
|
25
|
+
};
|
|
26
|
+
/** `ops/<opId>.log`: JSON lines, 1 MiB, rotating once, because the runner's stdio is ignored. */
|
|
27
|
+
export declare const createRunLog: (root: string, opId: string) => RunnerEnv["log"];
|
|
28
|
+
export declare const opIn: (workspace: SlateWorkspace, opId: string) => SlateOp;
|
|
29
|
+
/** A ledger line, written BEFORE the step it names. */
|
|
30
|
+
export declare const ledger: (env: RunnerEnv, entry: LedgerInput) => Promise<void>;
|
|
31
|
+
export declare const patchOp: (env: RunnerEnv, apply: (op: SlateOp, workspace: SlateWorkspace) => void) => Promise<void>;
|
|
32
|
+
export declare const setPhase: (env: RunnerEnv, phase: string) => Promise<void>;
|
|
33
|
+
export type Outcome = {
|
|
34
|
+
state: 'succeeded';
|
|
35
|
+
} | {
|
|
36
|
+
state: 'failed';
|
|
37
|
+
error: SlateOpError;
|
|
38
|
+
} | {
|
|
39
|
+
state: 'superseded';
|
|
40
|
+
};
|
|
41
|
+
export declare const failure: (code: string, message: string, flags?: {
|
|
42
|
+
retryable?: boolean;
|
|
43
|
+
resumable?: boolean;
|
|
44
|
+
}) => Outcome;
|
|
45
|
+
/** Write the terminal state, settle the approval, close the ledger. */
|
|
46
|
+
export declare const finishOp: (env: RunnerEnv, outcome: Outcome) => Promise<void>;
|
|
47
|
+
/**
|
|
48
|
+
* The error a thrown failure becomes. Nothing here costs money and every call
|
|
49
|
+
* id is stable, so an unclassified runner error is resumable: a Resume replays
|
|
50
|
+
* the same ids and the call store never repeats a finished call. A refusal the
|
|
51
|
+
* workspace itself made (a changed source file, a bad reference) is not; a
|
|
52
|
+
* corpus outage or rate limit (a retryable `SlateError`) is, because the search
|
|
53
|
+
* replays on its own key.
|
|
54
|
+
*/
|
|
55
|
+
export declare const errorFromRunner: (error: unknown) => SlateOpError;
|
|
56
|
+
export declare const sleepFor: (milliseconds: number, signal?: AbortSignal) => Promise<void>;
|
|
57
|
+
//# sourceMappingURL=slate-runner-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slate-runner-context.d.ts","sourceRoot":"","sources":["../src/slate-runner-context.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAgB,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGnE,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAExF;;;;;GAKG;AAEH,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,EAAE,MAAM,IAAI,CAAC;IAChB,8FAA8F;IAC9F,KAAK,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACtE,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,WAAW,CAAC;IAC1B,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,KAAK,EAAE,WAAW,CAAC;IACnB,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACxD,CAAC;AAIF,iGAAiG;AACjG,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,EAAE,MAAM,MAAM,KAAG,SAAS,CAAC,KAAK,CAYxE,CAAC;AAEF,eAAO,MAAM,IAAI,GAAI,WAAW,cAAc,EAAE,MAAM,MAAM,KAAG,OAI9D,CAAC;AAEF,uDAAuD;AACvD,eAAO,MAAM,MAAM,GAAI,KAAK,SAAS,EAAE,OAAO,WAAW,KAAG,OAAO,CAAC,IAAI,CAEvE,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,KAAK,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,KAAK,IAAI,KAAG,OAAO,CAAC,IAAI,CAE7G,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAU,KAAK,SAAS,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,IAAI,CAG1E,CAAC;AAEF,MAAM,MAAM,OAAO,GACf;IAAE,KAAK,EAAE,WAAW,CAAA;CAAE,GACtB;IAAE,KAAK,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,YAAY,CAAA;CAAE,GACxC;IAAE,KAAK,EAAE,YAAY,CAAA;CAAE,CAAC;AAE5B,eAAO,MAAM,OAAO,GAAI,MAAM,MAAM,EAAE,SAAS,MAAM,EAAE,QAAO;IAAE,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAO,KAAG,OAGhH,CAAC;AAEH,uEAAuE;AACvE,eAAO,MAAM,QAAQ,GAAU,KAAK,SAAS,EAAE,SAAS,OAAO,KAAG,OAAO,CAAC,IAAI,CAa7E,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO,OAAO,KAAG,YAMhD,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,cAAc,MAAM,EAAE,SAAS,WAAW,KAAG,OAAO,CAAC,IAAI,CAKhF,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { appendFile, rename, rm, stat } from 'node:fs/promises';
|
|
2
|
+
import { settleApproval } from './slate-approvals.js';
|
|
3
|
+
import { SlateError } from './slate-errors.js';
|
|
4
|
+
import { appendLedger } from './slate-ledger.js';
|
|
5
|
+
import { opLogFile } from './slate-paths.js';
|
|
6
|
+
import { mutateWorkspace } from './slate-workspace-store.js';
|
|
7
|
+
const LOG_LIMIT_BYTES = 1024 * 1024;
|
|
8
|
+
/** `ops/<opId>.log`: JSON lines, 1 MiB, rotating once, because the runner's stdio is ignored. */
|
|
9
|
+
export const createRunLog = (root, opId) => {
|
|
10
|
+
const file = opLogFile(root, opId);
|
|
11
|
+
return async (entry) => {
|
|
12
|
+
try {
|
|
13
|
+
const size = await stat(file).then((info) => info.size, () => 0);
|
|
14
|
+
if (size > LOG_LIMIT_BYTES) {
|
|
15
|
+
await rm(`${file}.1`, { force: true });
|
|
16
|
+
await rename(file, `${file}.1`);
|
|
17
|
+
}
|
|
18
|
+
await appendFile(file, `${JSON.stringify({ at: new Date().toISOString(), pid: process.pid, ...entry })}\n`, { mode: 0o600 });
|
|
19
|
+
}
|
|
20
|
+
catch { /* the log is diagnostics only; it never fails an op */ }
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
export const opIn = (workspace, opId) => {
|
|
24
|
+
const op = workspace.ops.find((entry) => entry.opId === opId);
|
|
25
|
+
if (!op)
|
|
26
|
+
throw new Error(`op ${opId} is not in the workspace record`);
|
|
27
|
+
return op;
|
|
28
|
+
};
|
|
29
|
+
/** A ledger line, written BEFORE the step it names. */
|
|
30
|
+
export const ledger = (env, entry) => (appendLedger(env.root, { ...entry, opId: env.opId, at: env.clock.now().toISOString() }));
|
|
31
|
+
export const patchOp = (env, apply) => (mutateWorkspace(env.root, (workspace) => { apply(opIn(workspace, env.opId), workspace); }, { now: env.clock.now }));
|
|
32
|
+
export const setPhase = async (env, phase) => {
|
|
33
|
+
await patchOp(env, (op) => { op.phase = phase; });
|
|
34
|
+
await env.log({ event: 'phase', phase });
|
|
35
|
+
};
|
|
36
|
+
export const failure = (code, message, flags = {}) => ({
|
|
37
|
+
state: 'failed',
|
|
38
|
+
error: { code, message, retryable: flags.retryable ?? false, resumable: flags.resumable ?? false },
|
|
39
|
+
});
|
|
40
|
+
/** Write the terminal state, settle the approval, close the ledger. */
|
|
41
|
+
export const finishOp = async (env, outcome) => {
|
|
42
|
+
const at = env.clock.now().toISOString();
|
|
43
|
+
await patchOp(env, (op) => {
|
|
44
|
+
op.state = outcome.state;
|
|
45
|
+
op.error = outcome.state === 'failed' ? outcome.error : null;
|
|
46
|
+
op.finishedAt = at;
|
|
47
|
+
op.phase = 'settled';
|
|
48
|
+
});
|
|
49
|
+
await settleApproval({ stateRoot: env.stateRoot, workspaceId: env.workspaceId, opId: env.opId, at });
|
|
50
|
+
await ledger(env, outcome.state === 'failed'
|
|
51
|
+
? { event: 'failed', code: outcome.error.code, message: outcome.error.message }
|
|
52
|
+
: { event: outcome.state === 'superseded' ? 'superseded' : 'settled' });
|
|
53
|
+
await env.log({ event: 'finished', outcome: outcome.state });
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* The error a thrown failure becomes. Nothing here costs money and every call
|
|
57
|
+
* id is stable, so an unclassified runner error is resumable: a Resume replays
|
|
58
|
+
* the same ids and the call store never repeats a finished call. A refusal the
|
|
59
|
+
* workspace itself made (a changed source file, a bad reference) is not; a
|
|
60
|
+
* corpus outage or rate limit (a retryable `SlateError`) is, because the search
|
|
61
|
+
* replays on its own key.
|
|
62
|
+
*/
|
|
63
|
+
export const errorFromRunner = (error) => {
|
|
64
|
+
if (error instanceof SlateError) {
|
|
65
|
+
const resumable = error.retryable;
|
|
66
|
+
return { code: error.code, message: error.message, retryable: error.retryable, resumable };
|
|
67
|
+
}
|
|
68
|
+
return { code: 'runner_error', message: error instanceof Error ? error.message : String(error), retryable: false, resumable: true };
|
|
69
|
+
};
|
|
70
|
+
export const sleepFor = (milliseconds, signal) => new Promise((resolve) => {
|
|
71
|
+
if (signal?.aborted) {
|
|
72
|
+
resolve();
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const finish = () => { clearTimeout(timer); signal?.removeEventListener('abort', finish); resolve(); };
|
|
76
|
+
const timer = setTimeout(finish, milliseconds);
|
|
77
|
+
signal?.addEventListener('abort', finish, { once: true });
|
|
78
|
+
});
|
|
79
|
+
//# sourceMappingURL=slate-runner-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slate-runner-context.js","sourceRoot":"","sources":["../src/slate-runner-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAEhE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,EAAE,YAAY,EAAoB,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AA2B7D,MAAM,eAAe,GAAG,IAAI,GAAG,IAAI,CAAC;AAEpC,iGAAiG;AACjG,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,IAAY,EAAoB,EAAE;IAC3E,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACnC,OAAO,KAAK,EAAE,KAAK,EAAE,EAAE;QACrB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YACjE,IAAI,IAAI,GAAG,eAAe,EAAE,CAAC;gBAC3B,MAAM,EAAE,CAAC,GAAG,IAAI,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBACvC,MAAM,MAAM,CAAC,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC;YAClC,CAAC;YACD,MAAM,UAAU,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/H,CAAC;QAAC,MAAM,CAAC,CAAC,uDAAuD,CAAC,CAAC;IACrE,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,SAAyB,EAAE,IAAY,EAAW,EAAE;IACvE,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAC9D,IAAI,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,iCAAiC,CAAC,CAAC;IACtE,OAAO,EAAE,CAAC;AACZ,CAAC,CAAC;AAEF,uDAAuD;AACvD,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAAc,EAAE,KAAkB,EAAiB,EAAE,CAAC,CAC3E,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CACxF,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,GAAc,EAAE,KAAuD,EAAiB,EAAE,CAAC,CACjH,eAAe,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CACnH,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAAE,GAAc,EAAE,KAAa,EAAiB,EAAE;IAC7E,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,MAAM,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;AAC3C,CAAC,CAAC;AAOF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,OAAe,EAAE,QAAsD,EAAE,EAAW,EAAE,CAAC,CAAC;IAC5H,KAAK,EAAE,QAAQ;IACf,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,KAAK,EAAE;CACnG,CAAC,CAAC;AAEH,uEAAuE;AACvE,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAAE,GAAc,EAAE,OAAgB,EAAiB,EAAE;IAChF,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;IACzC,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE;QACxB,EAAE,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QACzB,EAAE,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7D,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC;QACnB,EAAE,CAAC,KAAK,GAAG,SAAS,CAAC;IACvB,CAAC,CAAC,CAAC;IACH,MAAM,cAAc,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IACrG,MAAM,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,KAAK,KAAK,QAAQ;QAC1C,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE;QAC/E,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,KAAK,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;IAC1E,MAAM,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;AAC/D,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAAc,EAAgB,EAAE;IAC9D,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;QAChC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;QAClC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,SAAS,EAAE,CAAC;IAC7F,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACtI,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,YAAoB,EAAE,MAAoB,EAAiB,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;IAC7G,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;QAAC,OAAO,EAAE,CAAC;QAAC,OAAO;IAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,GAAS,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7G,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC/C,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5D,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The sentence a person sees when one image call failed. The store's own
|
|
3
|
+
* messages are fixed text (it never copies a provider body into them), but the
|
|
4
|
+
* detail still goes only to the operator's log, so this maps by code and never
|
|
5
|
+
* echoes what the process printed.
|
|
6
|
+
*/
|
|
7
|
+
export declare const imageFailureMessage: (error: unknown) => string;
|
|
8
|
+
//# sourceMappingURL=slate-runner-failure.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slate-runner-failure.d.ts","sourceRoot":"","sources":["../src/slate-runner-failure.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,mBAAmB,GAAI,OAAO,OAAO,KAAG,MAMpD,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The sentence a person sees when one image call failed. The store's own
|
|
3
|
+
* messages are fixed text (it never copies a provider body into them), but the
|
|
4
|
+
* detail still goes only to the operator's log, so this maps by code and never
|
|
5
|
+
* echoes what the process printed.
|
|
6
|
+
*/
|
|
7
|
+
export const imageFailureMessage = (error) => {
|
|
8
|
+
const code = error?.code;
|
|
9
|
+
if (code === 'NEEDS_RECONCILIATION')
|
|
10
|
+
return 'The image call did not return an image.';
|
|
11
|
+
if (code === 'CALL_LOCKED')
|
|
12
|
+
return 'This image call is already running.';
|
|
13
|
+
if (code === 'REQUEST_CHANGED')
|
|
14
|
+
return 'This image call was started with different inputs.';
|
|
15
|
+
return 'This option could not be drawn.';
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=slate-runner-failure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slate-runner-failure.js","sourceRoot":"","sources":["../src/slate-runner-failure.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAc,EAAU,EAAE;IAC5D,MAAM,IAAI,GAAI,KAAmC,EAAE,IAAI,CAAC;IACxD,IAAI,IAAI,KAAK,sBAAsB;QAAE,OAAO,yCAAyC,CAAC;IACtF,IAAI,IAAI,KAAK,aAAa;QAAE,OAAO,qCAAqC,CAAC;IACzE,IAAI,IAAI,KAAK,iBAAiB;QAAE,OAAO,oDAAoD,CAAC;IAC5F,OAAO,iCAAiC,CAAC;AAC3C,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slate-runner-flag.d.ts","sourceRoot":"","sources":["../src/slate-runner-flag.ts"],"names":[],"mappings":"AAAA,+GAA+G;AAC/G,eAAO,MAAM,eAAe,2BAA2B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slate-runner-flag.js","sourceRoot":"","sources":["../src/slate-runner-flag.ts"],"names":[],"mappings":"AAAA,+GAA+G;AAC/G,MAAM,CAAC,MAAM,eAAe,GAAG,wBAAwB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type SlateCorpus } from './slate-corpus.js';
|
|
2
|
+
import { type SlateImageExecutor } from './slate-image-executor.js';
|
|
3
|
+
import { type RunnerClock } from './slate-runner-context.js';
|
|
4
|
+
/**
|
|
5
|
+
* The detached process that owns one op to a terminal state (D1).
|
|
6
|
+
*
|
|
7
|
+
* Image work never runs inside the MCP server: a committed click spawns
|
|
8
|
+
* `12ui slate-runner <root> <opId>` and returns. The runner refuses (exit 2,
|
|
9
|
+
* nothing started) unless it was started by the server, the op is in the
|
|
10
|
+
* workspace, and the approval record written outside the run directory matches
|
|
11
|
+
* the frozen params: it runs `codex exec` with full access to its own scratch
|
|
12
|
+
* folder, so a planted `workspace.json` must never make it execute. It then
|
|
13
|
+
* takes the per-op lock, keeps a heartbeat in the lock's mtime, sets itself as
|
|
14
|
+
* the op's owner (compare-and-set), executes, and writes the terminal state.
|
|
15
|
+
* It reads no 12ui credentials: the workspace costs nothing.
|
|
16
|
+
*/
|
|
17
|
+
export type RunnerDependencies = {
|
|
18
|
+
/** The free corpus client; the default reads the optional-auth corpus configuration. */
|
|
19
|
+
corpus?: () => SlateCorpus;
|
|
20
|
+
/** The image executor; the default is the local Codex CLI's native image call. */
|
|
21
|
+
executor?: (root: string) => SlateImageExecutor;
|
|
22
|
+
clock?: Partial<RunnerClock>;
|
|
23
|
+
heartbeatIntervalMs?: number;
|
|
24
|
+
};
|
|
25
|
+
export declare const runSlateRunner: (args: {
|
|
26
|
+
root: string;
|
|
27
|
+
opId: string;
|
|
28
|
+
env?: NodeJS.ProcessEnv;
|
|
29
|
+
deps?: RunnerDependencies;
|
|
30
|
+
}) => Promise<number>;
|
|
31
|
+
//# sourceMappingURL=slate-runner-main.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slate-runner-main.d.ts","sourceRoot":"","sources":["../src/slate-runner-main.ts"],"names":[],"mappings":"AAKA,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGjE,OAAO,EAA6B,KAAK,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAU/F,OAAO,EAQL,KAAK,WAAW,EAEjB,MAAM,2BAA2B,CAAC;AAKnC;;;;;;;;;;;;GAYG;AAEH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,wFAAwF;IACxF,MAAM,CAAC,EAAE,MAAM,WAAW,CAAC;IAC3B,kFAAkF;IAClF,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,kBAAkB,CAAC;IAChD,KAAK,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC7B,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,eAAO,MAAM,cAAc,GAAU,MAAM;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,IAAI,CAAC,EAAE,kBAAkB,CAAC;CAC3B,KAAG,OAAO,CAAC,MAAM,CAoEjB,CAAC"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { realpath } from 'node:fs/promises';
|
|
2
|
+
import { readCorpusConfig } from './config.js';
|
|
3
|
+
import { resolveSlateRunDir } from './mcp-slate-run.js';
|
|
4
|
+
import { approvalMatches, getApproval, slateStateRoot } from './slate-approvals.js';
|
|
5
|
+
import { lazyCorpus } from './slate-corpus.js';
|
|
6
|
+
import { runEdit } from './slate-edit-runner.js';
|
|
7
|
+
import { SlateError } from './slate-errors.js';
|
|
8
|
+
import { createNativeImageExecutor } from './slate-image-executor.js';
|
|
9
|
+
import { OP_ID_PATTERN, digestOf } from './slate-ids.js';
|
|
10
|
+
import { RUNNER_HEARTBEAT_INTERVAL_MS, acquireLock, staleWhenHeartbeatLapsed, } from './slate-lock.js';
|
|
11
|
+
import { ensureRealDirectory, opLockFile } from './slate-paths.js';
|
|
12
|
+
import { runRound } from './slate-round-runner.js';
|
|
13
|
+
import { createRunLog, errorFromRunner, finishOp, ledger, opIn, sleepFor, } from './slate-runner-context.js';
|
|
14
|
+
import { RUNNER_ENV_FLAG } from './slate-runner-flag.js';
|
|
15
|
+
import { loadWorkspaceAt, mutateWorkspace } from './slate-workspace-store.js';
|
|
16
|
+
export const runSlateRunner = async (args) => {
|
|
17
|
+
const environment = args.env ?? process.env;
|
|
18
|
+
const deps = args.deps ?? {};
|
|
19
|
+
const clock = { now: deps.clock?.now ?? (() => new Date()), sleep: deps.clock?.sleep ?? sleepFor };
|
|
20
|
+
const refuse = (message) => {
|
|
21
|
+
process.stderr.write(`12ui slate-runner refused: ${message}\n`);
|
|
22
|
+
return 2;
|
|
23
|
+
};
|
|
24
|
+
try {
|
|
25
|
+
if (environment[RUNNER_ENV_FLAG] !== '1') {
|
|
26
|
+
return refuse('this internal command is started by the 12ui workspace, not by hand.');
|
|
27
|
+
}
|
|
28
|
+
if (!OP_ID_PATTERN.test(args.opId))
|
|
29
|
+
return refuse(`${JSON.stringify(args.opId)} is not an op id.`);
|
|
30
|
+
let root;
|
|
31
|
+
let workspace;
|
|
32
|
+
try {
|
|
33
|
+
root = await realpath(await resolveSlateRunDir(args.root));
|
|
34
|
+
workspace = (await loadWorkspaceAt(root, clock.now)).workspace;
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
// Not a run, or a record that fails strict validation: refuse, start nothing.
|
|
38
|
+
return refuse(error instanceof Error ? error.message : String(error));
|
|
39
|
+
}
|
|
40
|
+
const stateRoot = slateStateRoot(environment);
|
|
41
|
+
const observed = workspace.ops.find((op) => op.opId === args.opId);
|
|
42
|
+
if (!observed)
|
|
43
|
+
return refuse('the op is not in the workspace record.');
|
|
44
|
+
const verdict = approvalMatches({
|
|
45
|
+
entry: await getApproval(stateRoot, workspace.workspaceId, args.opId),
|
|
46
|
+
rootRealpath: root,
|
|
47
|
+
kind: observed.kind,
|
|
48
|
+
paramsDigest: digestOf(observed.params),
|
|
49
|
+
});
|
|
50
|
+
if (verdict !== 'ok')
|
|
51
|
+
return refuse(`${verdict}: nothing was approved for this op on this Mac.`);
|
|
52
|
+
await ensureRealDirectory(root, 'ops');
|
|
53
|
+
let lock;
|
|
54
|
+
try {
|
|
55
|
+
lock = await acquireLock({
|
|
56
|
+
file: opLockFile(root, args.opId),
|
|
57
|
+
policy: staleWhenHeartbeatLapsed,
|
|
58
|
+
waitMs: 0,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
// A live runner already owns this op: exit at once and change nothing.
|
|
63
|
+
if (error instanceof SlateError && error.code === 'workspace_busy')
|
|
64
|
+
return 0;
|
|
65
|
+
throw error;
|
|
66
|
+
}
|
|
67
|
+
process.title = `12ui-slate-runner ${args.opId.slice(0, 8)}`;
|
|
68
|
+
const heartbeat = setInterval(() => { void lock.touch().catch(() => undefined); }, deps.heartbeatIntervalMs ?? RUNNER_HEARTBEAT_INTERVAL_MS);
|
|
69
|
+
const env = {
|
|
70
|
+
root,
|
|
71
|
+
stateRoot,
|
|
72
|
+
opId: args.opId,
|
|
73
|
+
workspaceId: workspace.workspaceId,
|
|
74
|
+
corpus: deps.corpus ?? lazyCorpus(() => readCorpusConfig()),
|
|
75
|
+
executor: (deps.executor ?? ((where) => createNativeImageExecutor({ root: where, env: environment })))(root),
|
|
76
|
+
clock,
|
|
77
|
+
log: createRunLog(root, args.opId),
|
|
78
|
+
};
|
|
79
|
+
try {
|
|
80
|
+
return await execute(env, lock);
|
|
81
|
+
}
|
|
82
|
+
finally {
|
|
83
|
+
clearInterval(heartbeat);
|
|
84
|
+
await lock.release();
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
process.stderr.write(`12ui slate-runner failed: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
89
|
+
return 1;
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
const execute = async (env, lock) => {
|
|
93
|
+
// Owner compare-and-set: only the runner that won the per-op lock gets here.
|
|
94
|
+
const claimed = await mutateWorkspace(env.root, (workspace, context) => {
|
|
95
|
+
const op = opIn(workspace, env.opId);
|
|
96
|
+
if (op.state !== 'running')
|
|
97
|
+
return false;
|
|
98
|
+
if (op.kind === 'edit') {
|
|
99
|
+
const candidate = workspace.candidates.find((entry) => entry.candidateId === op.target.candidateId);
|
|
100
|
+
if (candidate && candidate.latestOpId !== op.opId) {
|
|
101
|
+
// A newer attempt replaced this one: it must never add a version.
|
|
102
|
+
op.state = 'superseded';
|
|
103
|
+
op.finishedAt = context.now.toISOString();
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
op.owner = { pid: process.pid, nonce: lock.holder.nonce, startedAt: context.now.toISOString() };
|
|
108
|
+
op.spawnedAt ??= context.now.toISOString();
|
|
109
|
+
return true;
|
|
110
|
+
}, { now: env.clock.now });
|
|
111
|
+
if (!claimed) {
|
|
112
|
+
await env.log({ event: 'not_claimed' });
|
|
113
|
+
return 0;
|
|
114
|
+
}
|
|
115
|
+
await ledger(env, { event: 'runner_started', pid: process.pid });
|
|
116
|
+
await env.log({ event: 'started' });
|
|
117
|
+
let outcome;
|
|
118
|
+
try {
|
|
119
|
+
const { workspace } = await loadWorkspaceAt(env.root, env.clock.now);
|
|
120
|
+
const op = opIn(workspace, env.opId);
|
|
121
|
+
outcome = op.kind === 'round' ? await runRound(env, op) : await runEdit(env, op);
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
await env.log({ event: 'error', message: error instanceof Error ? error.message : String(error) });
|
|
125
|
+
outcome = { state: 'failed', error: errorFromRunner(error) };
|
|
126
|
+
await finishOp(env, outcome);
|
|
127
|
+
return 1;
|
|
128
|
+
}
|
|
129
|
+
await finishOp(env, outcome);
|
|
130
|
+
return 0;
|
|
131
|
+
};
|
|
132
|
+
//# sourceMappingURL=slate-runner-main.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slate-runner-main.js","sourceRoot":"","sources":["../src/slate-runner-main.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Start the detached runner for one op. The child gets its own session
|
|
3
|
+
* (`detached`), no stdio, and is unref'd, so it outlives this MCP server: Codex
|
|
4
|
+
* may end the stdio process after an app call returns, and the op still runs
|
|
5
|
+
* to its terminal state. Its working directory is the workspace root, which
|
|
6
|
+
* exists, so a sweep of dead-cwd workers does not take it for an orphan.
|
|
7
|
+
*
|
|
8
|
+
* Its environment is an allowlist: the paths a local Codex call needs, the
|
|
9
|
+
* workspace's own state folder and, when the server was pointed at another
|
|
10
|
+
* corpus, that origin (an address, not a credential: the runner's free corpus
|
|
11
|
+
* search must reach the same place the server's does). No 12ui config, API key
|
|
12
|
+
* or provider key reaches it.
|
|
13
|
+
*/
|
|
14
|
+
export type RunnerLaunch = (args: {
|
|
15
|
+
root: string;
|
|
16
|
+
opId: string;
|
|
17
|
+
stateRoot: string;
|
|
18
|
+
}) => Promise<void>;
|
|
19
|
+
export declare const runnerEnvironment: (args: {
|
|
20
|
+
stateRoot: string;
|
|
21
|
+
}, parent?: NodeJS.ProcessEnv) => NodeJS.ProcessEnv;
|
|
22
|
+
export declare const spawnSlateRunner: RunnerLaunch;
|
|
23
|
+
//# sourceMappingURL=slate-runner-spawn.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slate-runner-spawn.d.ts","sourceRoot":"","sources":["../src/slate-runner-spawn.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;GAYG;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAKpB,eAAO,MAAM,iBAAiB,GAAI,MAAM;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,EAAE,SAAQ,MAAM,CAAC,UAAwB,KAAG,MAAM,CAAC,UAI/G,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,YAa9B,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { fileURLToPath } from 'node:url';
|
|
3
|
+
import { RUNNER_ENV_FLAG } from './slate-runner-flag.js';
|
|
4
|
+
/** What the runner inherits: enough for `codex exec` to find itself and its login, nothing else. */
|
|
5
|
+
const INHERITED = ['PATH', 'HOME', 'TMPDIR', 'TEMP', 'TMP', 'LANG', 'LC_ALL', 'SYSTEMROOT', 'CODEX_HOME', 'TWELVE_UI_CODEX_BIN', 'TWELVE_UI_ORIGIN'];
|
|
6
|
+
export const runnerEnvironment = (args, parent = process.env) => {
|
|
7
|
+
const environment = { [RUNNER_ENV_FLAG]: '1', TWELVE_UI_SLATE_STATE_DIR: args.stateRoot };
|
|
8
|
+
for (const key of INHERITED)
|
|
9
|
+
if (parent[key])
|
|
10
|
+
environment[key] = parent[key];
|
|
11
|
+
return environment;
|
|
12
|
+
};
|
|
13
|
+
export const spawnSlateRunner = async (args) => {
|
|
14
|
+
const cliPath = fileURLToPath(new URL('./cli.js', import.meta.url));
|
|
15
|
+
const child = spawn(process.execPath, [cliPath, 'slate-runner', args.root, args.opId], {
|
|
16
|
+
detached: true,
|
|
17
|
+
stdio: 'ignore',
|
|
18
|
+
cwd: args.root,
|
|
19
|
+
env: runnerEnvironment(args),
|
|
20
|
+
});
|
|
21
|
+
await new Promise((resolve, reject) => {
|
|
22
|
+
child.once('spawn', () => { resolve(); });
|
|
23
|
+
child.once('error', reject);
|
|
24
|
+
});
|
|
25
|
+
child.unref();
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=slate-runner-spawn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slate-runner-spawn.js","sourceRoot":"","sources":["../src/slate-runner-spawn.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAsBzD,oGAAoG;AACpG,MAAM,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,qBAAqB,EAAE,kBAAkB,CAAU,CAAC;AAE9J,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,IAA2B,EAAE,SAA4B,OAAO,CAAC,GAAG,EAAqB,EAAE;IAC3H,MAAM,WAAW,GAAsB,EAAE,CAAC,eAAe,CAAC,EAAE,GAAG,EAAE,yBAAyB,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;IAC7G,KAAK,MAAM,GAAG,IAAI,SAAS;QAAE,IAAI,MAAM,CAAC,GAAG,CAAC;YAAE,WAAW,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC7E,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAiB,KAAK,EAAE,IAAI,EAAE,EAAE;IAC3D,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACpE,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;QACrF,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,QAAQ;QACf,GAAG,EAAE,IAAI,CAAC,IAAI;QACd,GAAG,EAAE,iBAAiB,CAAC,IAAI,CAAC;KAC7B,CAAC,CAAC;IACH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,KAAK,EAAE,CAAC;AAChB,CAAC,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
import { type SlateCorpus } from './slate-corpus.js';
|
|
3
|
+
import { type SlateImageProbe } from './slate-local-image.js';
|
|
4
|
+
import type { RunnerLaunch } from './slate-runner-spawn.js';
|
|
5
|
+
import type { LocalImageState } from './slate-view.js';
|
|
6
|
+
/**
|
|
7
|
+
* What the workspace tools need from their host: where per-user state lives,
|
|
8
|
+
* the clock, the free corpus, whether this Mac can draw images, and the runner
|
|
9
|
+
* launcher. Only `run` and `resume` ever call `launchRunner`; the protocol
|
|
10
|
+
* suite passes one that throws to prove every other tool succeeds without it.
|
|
11
|
+
*/
|
|
12
|
+
export type SlateToolContext = {
|
|
13
|
+
/** Where the sidebar entry looks for the most recent draft run. Tests inject a fixture root. */
|
|
14
|
+
cwd?: string;
|
|
15
|
+
tempRoot?: string;
|
|
16
|
+
stateRoot?: string;
|
|
17
|
+
env?: NodeJS.ProcessEnv;
|
|
18
|
+
now?: () => Date;
|
|
19
|
+
launchRunner?: RunnerLaunch;
|
|
20
|
+
/** The free corpus; the default reads the optional-auth corpus configuration on first use. */
|
|
21
|
+
corpus?: () => SlateCorpus;
|
|
22
|
+
/** Whether Design and Edit can run here; the default asks the local Codex CLI (cached for a minute). */
|
|
23
|
+
probeLocalImage?: SlateImageProbe;
|
|
24
|
+
};
|
|
25
|
+
export type SlateRuntime = {
|
|
26
|
+
stateRoot: string;
|
|
27
|
+
now: () => Date;
|
|
28
|
+
launchRunner: RunnerLaunch;
|
|
29
|
+
corpus: () => SlateCorpus;
|
|
30
|
+
/** Never throws: a probe that fails is a not-ready answer with the reason. */
|
|
31
|
+
localImage: () => Promise<LocalImageState>;
|
|
32
|
+
cwd?: string;
|
|
33
|
+
tempRoot?: string;
|
|
34
|
+
};
|
|
35
|
+
export declare const slateRuntime: (context: SlateToolContext) => SlateRuntime;
|
|
36
|
+
export declare const errorResult: (error: unknown) => CallToolResult;
|
|
37
|
+
export declare const inputRecord: (value: unknown) => Record<string, unknown>;
|
|
38
|
+
//# sourceMappingURL=slate-runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slate-runtime.d.ts","sourceRoot":"","sources":["../src/slate-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAGzE,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEjE,OAAO,EAAyC,KAAK,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACrG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD;;;;;GAKG;AAEH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,gGAAgG;IAChG,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IACjB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,8FAA8F;IAC9F,MAAM,CAAC,EAAE,MAAM,WAAW,CAAC;IAC3B,wGAAwG;IACxG,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,IAAI,CAAC;IAChB,YAAY,EAAE,YAAY,CAAC;IAC3B,MAAM,EAAE,MAAM,WAAW,CAAC;IAC1B,8EAA8E;IAC9E,UAAU,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,CAAC;IAC3C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,SAAS,gBAAgB,KAAG,YAmBxD,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,OAAO,OAAO,KAAG,cAiB5C,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,OAAO,OAAO,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAIlE,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { slateStateRoot } from './slate-approvals.js';
|
|
2
|
+
import { lazyCorpus } from './slate-corpus.js';
|
|
3
|
+
import { SlateError } from './slate-errors.js';
|
|
4
|
+
import { cachedImageProbe, codexReadinessProbe } from './slate-local-image.js';
|
|
5
|
+
import { spawnSlateRunner } from './slate-runner-spawn.js';
|
|
6
|
+
export const slateRuntime = (context) => {
|
|
7
|
+
const env = context.env ?? process.env;
|
|
8
|
+
const now = context.now ?? (() => new Date());
|
|
9
|
+
const probe = cachedImageProbe(context.probeLocalImage ?? codexReadinessProbe(env), now);
|
|
10
|
+
return {
|
|
11
|
+
stateRoot: context.stateRoot ?? slateStateRoot(env),
|
|
12
|
+
now,
|
|
13
|
+
launchRunner: context.launchRunner ?? spawnSlateRunner,
|
|
14
|
+
corpus: context.corpus ?? lazyCorpus(),
|
|
15
|
+
localImage: async () => {
|
|
16
|
+
try {
|
|
17
|
+
return await probe();
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
return { ready: false, reason: error instanceof Error ? error.message : String(error) };
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
...(context.cwd ? { cwd: context.cwd } : {}),
|
|
24
|
+
...(context.tempRoot ? { tempRoot: context.tempRoot } : {}),
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
export const errorResult = (error) => {
|
|
28
|
+
if (error instanceof SlateError) {
|
|
29
|
+
return {
|
|
30
|
+
content: [{ type: 'text', text: error.message }],
|
|
31
|
+
structuredContent: {
|
|
32
|
+
code: error.code,
|
|
33
|
+
message: error.message,
|
|
34
|
+
retryable: error.retryable,
|
|
35
|
+
...(error.retryAfterSeconds === undefined ? {} : { retryAfterSeconds: error.retryAfterSeconds }),
|
|
36
|
+
},
|
|
37
|
+
isError: true,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
return {
|
|
41
|
+
content: [{ type: 'text', text: error instanceof Error ? error.message : String(error) }],
|
|
42
|
+
isError: true,
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
export const inputRecord = (value) => (value && typeof value === 'object' && !Array.isArray(value)
|
|
46
|
+
? value
|
|
47
|
+
: {});
|
|
48
|
+
//# sourceMappingURL=slate-runtime.js.map
|