@12ui/design 0.2.72 → 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 +242 -54
- 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 +26 -1
- package/dist/cli-capabilities.d.ts.map +1 -1
- package/dist/cli-capabilities.js +26 -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 +113 -7
- package/dist/cli-help/index.d.ts.map +1 -1
- package/dist/cli-help/index.js +2 -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/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 +35 -3
- package/dist/cli-run.js.map +1 -1
- package/dist/cli-usage.d.ts.map +1 -1
- package/dist/cli-usage.js +39 -5
- 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 +41 -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-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-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 +18 -5
- package/dist/run-journal-commands.js.map +1 -1
- 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 +2 -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/skills/12ui-design/SKILL.md +17 -63
- 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/session.md +161 -0
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The host shim of the browser workspace: the half of the MCP Apps bridge the screen expects to find on the other side
|
|
3
|
+
* of `postMessage`, implemented by the page that frames it.
|
|
4
|
+
*
|
|
5
|
+
* It answers `ui/initialize` with a host context (the theme from `prefers-color-scheme`, the display mode), delivers the
|
|
6
|
+
* workspace as the `ui/notifications/tool-result` the screen waits for (so a reload restores the workspace from disk,
|
|
7
|
+
* as the MCP host's re-render does), turns `tools/call` into `POST /api/call` and `ui/message` into `POST /api/message`,
|
|
8
|
+
* and lays the frame out: the whole window in `fullscreen`, its reported height in `inline` (`?mode=inline`). The
|
|
9
|
+
* session token is the one in this page's own URL; the frame never sees it.
|
|
10
|
+
*
|
|
11
|
+
* String.raw so escapes reach the browser unchanged: no backtick and no dollar-brace inside.
|
|
12
|
+
*/
|
|
13
|
+
export const SLATE_BROWSER_HOST_SCRIPT = String.raw `
|
|
14
|
+
"use strict";
|
|
15
|
+
(function () {
|
|
16
|
+
var PROTOCOL = "2026-01-26";
|
|
17
|
+
var query = new URLSearchParams(location.search);
|
|
18
|
+
var token = query.get("t") || "";
|
|
19
|
+
var frame = document.getElementById("screen");
|
|
20
|
+
var over = document.getElementById("over");
|
|
21
|
+
var overTitle = document.getElementById("over-title");
|
|
22
|
+
var overNote = document.getElementById("over-note");
|
|
23
|
+
var startInline = query.get("mode") === "inline";
|
|
24
|
+
var mode = startInline ? "inline" : "fullscreen";
|
|
25
|
+
var modes = startInline ? ["inline", "fullscreen"] : ["fullscreen"];
|
|
26
|
+
var scheme = window.matchMedia("(prefers-color-scheme: dark)");
|
|
27
|
+
// Set once the person's decision has been sent and the command is to end: nothing that fails after that is news.
|
|
28
|
+
var finished = false;
|
|
29
|
+
|
|
30
|
+
function theme() { return scheme.matches ? "dark" : "light"; }
|
|
31
|
+
function context() {
|
|
32
|
+
return { theme: theme(), displayMode: mode, availableDisplayModes: modes, platform: "web", locale: navigator.language || "en-US" };
|
|
33
|
+
}
|
|
34
|
+
function layout() {
|
|
35
|
+
document.documentElement.style.colorScheme = theme();
|
|
36
|
+
frame.className = mode;
|
|
37
|
+
if (mode === "fullscreen") frame.style.removeProperty("height");
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// ---- JSON-RPC to the frame ----
|
|
41
|
+
function send(message) { if (frame.contentWindow) frame.contentWindow.postMessage(message, "*"); }
|
|
42
|
+
function reply(id, result) { send({ jsonrpc: "2.0", id: id, result: result }); }
|
|
43
|
+
function refuse(id, code, text) { send({ jsonrpc: "2.0", id: id, error: { code: code, message: text } }); }
|
|
44
|
+
function notify(method, params) { send({ jsonrpc: "2.0", method: method, params: params }); }
|
|
45
|
+
|
|
46
|
+
// ---- the session ----
|
|
47
|
+
function say(title, note) {
|
|
48
|
+
overTitle.textContent = title;
|
|
49
|
+
overNote.textContent = note;
|
|
50
|
+
over.classList.remove("hidden");
|
|
51
|
+
}
|
|
52
|
+
function api(path, body) {
|
|
53
|
+
return fetch(path, {
|
|
54
|
+
method: "POST",
|
|
55
|
+
headers: { "content-type": "application/json", "x-12ui-token": token },
|
|
56
|
+
body: JSON.stringify(body)
|
|
57
|
+
}).then(function (res) {
|
|
58
|
+
return res.json().then(function (data) {
|
|
59
|
+
if (!res.ok) throw new Error((data && data.error && data.error.message) || ("The session answered " + res.status + "."));
|
|
60
|
+
return data;
|
|
61
|
+
});
|
|
62
|
+
}, function () {
|
|
63
|
+
if (!finished) say("The session ended", "Run the command again to reopen the workspace.");
|
|
64
|
+
throw new Error("The 12ui session is not running.");
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
function decided(out) {
|
|
68
|
+
if (!out.ending || !out.decided) return;
|
|
69
|
+
finished = true;
|
|
70
|
+
say(out.decided === "select" ? "Choice sent" : "Request sent", "Your agent has it. You can close this tab.");
|
|
71
|
+
}
|
|
72
|
+
function showWorkspace() {
|
|
73
|
+
api("/api/call", { name: "design.slate.show", arguments: {} }).then(function (out) {
|
|
74
|
+
notify("ui/notifications/tool-result", out.result);
|
|
75
|
+
}, function (err) {
|
|
76
|
+
notify("ui/notifications/tool-result", { isError: true, content: [{ type: "text", text: err.message }] });
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
window.addEventListener("message", function (event) {
|
|
81
|
+
if (event.source !== frame.contentWindow) return;
|
|
82
|
+
var m = event.data;
|
|
83
|
+
if (!m || m.jsonrpc !== "2.0" || typeof m.method !== "string") return;
|
|
84
|
+
var id = m.id;
|
|
85
|
+
var params = m.params || {};
|
|
86
|
+
if (m.method === "ui/initialize") {
|
|
87
|
+
reply(id, { protocolVersion: PROTOCOL, hostInfo: { name: "12ui-browser", version: "1" }, hostCapabilities: {}, hostContext: context() });
|
|
88
|
+
} else if (m.method === "ui/notifications/initialized") {
|
|
89
|
+
showWorkspace();
|
|
90
|
+
} else if (m.method === "tools/call") {
|
|
91
|
+
api("/api/call", { name: params.name, arguments: params.arguments }).then(function (out) {
|
|
92
|
+
reply(id, out.result);
|
|
93
|
+
decided(out);
|
|
94
|
+
}, function (err) { refuse(id, -32000, err.message); });
|
|
95
|
+
} else if (m.method === "ui/message") {
|
|
96
|
+
var block = params.content && params.content[0];
|
|
97
|
+
api("/api/message", { text: block && typeof block.text === "string" ? block.text : "" }).then(function () { reply(id, {}); }, function (err) { refuse(id, -32000, err.message); });
|
|
98
|
+
} else if (m.method === "ui/update-model-context") {
|
|
99
|
+
// Nothing reads it here: the decision reaches the agent as the command's result.
|
|
100
|
+
reply(id, {});
|
|
101
|
+
} else if (m.method === "ui/request-display-mode") {
|
|
102
|
+
if (modes.indexOf(params.mode) >= 0 && params.mode !== mode) {
|
|
103
|
+
mode = params.mode;
|
|
104
|
+
layout();
|
|
105
|
+
notify("ui/notifications/host-context-changed", { displayMode: mode });
|
|
106
|
+
}
|
|
107
|
+
reply(id, { mode: mode });
|
|
108
|
+
} else if (m.method === "ui/notifications/size-changed") {
|
|
109
|
+
if (mode === "inline" && params.height > 0) frame.style.height = Math.ceil(params.height) + "px";
|
|
110
|
+
} else if (id !== undefined) {
|
|
111
|
+
refuse(id, -32601, "Method not found: " + m.method);
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
scheme.addEventListener("change", function () {
|
|
116
|
+
layout();
|
|
117
|
+
notify("ui/notifications/host-context-changed", { theme: theme() });
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
layout();
|
|
121
|
+
// The listener is on; only now can the screen's first message arrive.
|
|
122
|
+
frame.src = "/screen?t=" + encodeURIComponent(token);
|
|
123
|
+
})();
|
|
124
|
+
`;
|
|
125
|
+
//# sourceMappingURL=slate-browser-host-script.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slate-browser-host-script.js","sourceRoot":"","sources":["../src/slate-browser-host-script.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+GlD,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The page the browser workspace opens: a frame for the screen (built from the same modules the MCP plugin serves, with
|
|
3
|
+
* target `browser`) and the shim that stands in for an MCP Apps host. The frame is sandboxed to scripts only, so the
|
|
4
|
+
* screen has no origin of its own to reach this server with, and its policy allows no network at all.
|
|
5
|
+
*
|
|
6
|
+
* Self-contained, like the screen: no external script, stylesheet, font or URL.
|
|
7
|
+
*/
|
|
8
|
+
export declare const buildSlateBrowserHostHtml: () => string;
|
|
9
|
+
//# sourceMappingURL=slate-browser-host.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slate-browser-host.d.ts","sourceRoot":"","sources":["../src/slate-browser-host.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,QAAO,MA2B5C,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { SLATE_BROWSER_HOST_SCRIPT } from './slate-browser-host-script.js';
|
|
2
|
+
/**
|
|
3
|
+
* The page the browser workspace opens: a frame for the screen (built from the same modules the MCP plugin serves, with
|
|
4
|
+
* target `browser`) and the shim that stands in for an MCP Apps host. The frame is sandboxed to scripts only, so the
|
|
5
|
+
* screen has no origin of its own to reach this server with, and its policy allows no network at all.
|
|
6
|
+
*
|
|
7
|
+
* Self-contained, like the screen: no external script, stylesheet, font or URL.
|
|
8
|
+
*/
|
|
9
|
+
export const buildSlateBrowserHostHtml = () => `<!doctype html>
|
|
10
|
+
<html lang="en">
|
|
11
|
+
<head>
|
|
12
|
+
<meta charset="utf-8">
|
|
13
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
14
|
+
<meta name="color-scheme" content="light dark">
|
|
15
|
+
<title>Design workspace</title>
|
|
16
|
+
<style>
|
|
17
|
+
:root { --bg: #ffffff; --fg: #17181c; --muted: #5b5f6a; --card: #ffffff; --line: #d9dce3; }
|
|
18
|
+
@media (prefers-color-scheme: dark) { :root { --bg: #16171b; --fg: #f1f2f5; --muted: #a3a7b3; --card: #1f2126; --line: #34363d; } }
|
|
19
|
+
html, body { margin: 0; height: 100%; background: var(--bg); color: var(--fg); font: 16px/1.5 system-ui, -apple-system, "Segoe UI", sans-serif; }
|
|
20
|
+
#screen { display: block; border: 0; width: 100%; background: transparent; }
|
|
21
|
+
#screen.fullscreen { height: 100vh; height: 100dvh; }
|
|
22
|
+
#screen.inline { max-width: 720px; margin: 0 auto; }
|
|
23
|
+
.hidden { display: none !important; }
|
|
24
|
+
#over { position: fixed; inset: 0; display: flex; align-items: center; justify-content: center; padding: 16px; background: color-mix(in srgb, var(--bg) 82%, transparent); }
|
|
25
|
+
#over .box { max-width: 420px; padding: 24px; border: 1px solid var(--line); border-radius: 12px; background: var(--card); text-align: center; }
|
|
26
|
+
#over h1 { margin: 0 0 8px; font-size: 20px; }
|
|
27
|
+
#over p { margin: 0; color: var(--muted); }
|
|
28
|
+
</style>
|
|
29
|
+
</head>
|
|
30
|
+
<body>
|
|
31
|
+
<iframe id="screen" title="Design workspace" sandbox="allow-scripts"></iframe>
|
|
32
|
+
<div id="over" class="hidden" role="status"><div class="box"><h1 id="over-title"></h1><p id="over-note"></p></div></div>
|
|
33
|
+
<script>${SLATE_BROWSER_HOST_SCRIPT}</script>
|
|
34
|
+
</body>
|
|
35
|
+
</html>
|
|
36
|
+
`;
|
|
37
|
+
//# sourceMappingURL=slate-browser-host.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slate-browser-host.js","sourceRoot":"","sources":["../src/slate-browser-host.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAE3E;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAW,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;UAwB7C,yBAAyB;;;CAGlC,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { type SlateBrowserDecision } from './slate-browser-decision.js';
|
|
2
|
+
import { type SlateToolContext } from './mcp-slate-tools.js';
|
|
3
|
+
/**
|
|
4
|
+
* The design workspace as a web page, for the agents that do not have the workspace's MCP tools.
|
|
5
|
+
*
|
|
6
|
+
* One session serves one run directory on 127.0.0.1 and nothing else, and every route needs the session's random token
|
|
7
|
+
* (in the URL the command prints), so another page in the user's browser cannot drive it: a request with no token, a
|
|
8
|
+
* `Host` other than the loopback name, or a cross-origin `Origin` is refused before anything is read. The page is a
|
|
9
|
+
* host for the screen the MCP plugin serves (the same modules, built with target `browser`) inside a sandboxed frame; the
|
|
10
|
+
* frame never talks to this server, only to the page's shim, which turns the screen's `tools/call` into
|
|
11
|
+
* `POST /api/call`, and that dispatches to the same slate tool handlers `12ui mcp` uses, app-only tools included,
|
|
12
|
+
* confined to the session's run directory.
|
|
13
|
+
*/
|
|
14
|
+
export type SlateBrowserServerOptions = {
|
|
15
|
+
/** The finished draft run to serve (already resolved). */
|
|
16
|
+
runDir: string;
|
|
17
|
+
/** 0 picks a free port. */
|
|
18
|
+
port?: number;
|
|
19
|
+
/** Set by tests; a session normally makes its own. */
|
|
20
|
+
token?: string;
|
|
21
|
+
/** What the tool handlers need from their host (corpus, state root, runner launcher); tests inject fixtures. */
|
|
22
|
+
context?: SlateToolContext;
|
|
23
|
+
/** After a decision, how long to wait for the screen's own message before reporting it. */
|
|
24
|
+
messageGraceMs?: number;
|
|
25
|
+
/** Whether the page should say the session is over after a decision (`--wait`). */
|
|
26
|
+
ending?: boolean;
|
|
27
|
+
onDecision: (decision: SlateBrowserDecision) => void;
|
|
28
|
+
};
|
|
29
|
+
export type SlateBrowserServer = {
|
|
30
|
+
url: string;
|
|
31
|
+
port: number;
|
|
32
|
+
token: string;
|
|
33
|
+
runDir: string;
|
|
34
|
+
close: () => Promise<void>;
|
|
35
|
+
};
|
|
36
|
+
export declare const startSlateBrowserServer: (options: SlateBrowserServerOptions) => Promise<SlateBrowserServer>;
|
|
37
|
+
//# sourceMappingURL=slate-browser-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slate-browser-server.d.ts","sourceRoot":"","sources":["../src/slate-browser-server.ts"],"names":[],"mappings":"AAQA,OAAO,EAAuD,KAAK,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAG7H,OAAO,EAA0B,KAAK,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAGrF;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,yBAAyB,GAAG;IACtC,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAC;IACf,2BAA2B;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gHAAgH;IAChH,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,2FAA2F;IAC3F,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mFAAmF;IACnF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,CAAC,QAAQ,EAAE,oBAAoB,KAAK,IAAI,CAAC;CACtD,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B,CAAC;AA2CF,eAAO,MAAM,uBAAuB,GAAU,SAAS,yBAAyB,KAAG,OAAO,CAAC,kBAAkB,CAgI5G,CAAC"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { randomBytes, timingSafeEqual } from 'node:crypto';
|
|
2
|
+
import { createServer } from 'node:http';
|
|
3
|
+
import { realpath } from 'node:fs/promises';
|
|
4
|
+
import { buildSlateBrowserHostHtml } from './slate-browser-host.js';
|
|
5
|
+
import { decidedBy, finishDecision } from './slate-browser-decision.js';
|
|
6
|
+
import { buildSlateUiHtml } from './mcp-slate-ui.js';
|
|
7
|
+
import { SLATE_DATA_TOOL, SLATE_OPEN_TOOL, SLATE_SHOW_TOOL, SLATE_TOOL_NAMES } from './mcp-slate-names.js';
|
|
8
|
+
import { createSlateToolHandler } from './mcp-slate-tools.js';
|
|
9
|
+
import { errorResult } from './slate-runtime.js';
|
|
10
|
+
const HOST_CSP = "default-src 'none'; script-src 'unsafe-inline'; style-src 'unsafe-inline'; connect-src 'self'; frame-src 'self'; base-uri 'none'; form-action 'none'; frame-ancestors 'none'";
|
|
11
|
+
const SCREEN_CSP = "default-src 'none'; script-src 'unsafe-inline'; style-src 'unsafe-inline'; img-src data:; base-uri 'none'; form-action 'none'; frame-ancestors 'self'";
|
|
12
|
+
const MAX_BODY_BYTES = 1_000_000;
|
|
13
|
+
const MAX_MESSAGES = 50;
|
|
14
|
+
const MAX_MESSAGE_CHARS = 4_000;
|
|
15
|
+
class HttpError extends Error {
|
|
16
|
+
status;
|
|
17
|
+
code;
|
|
18
|
+
constructor(status, code, message) {
|
|
19
|
+
super(message);
|
|
20
|
+
this.status = status;
|
|
21
|
+
this.code = code;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
const sameToken = (given, token) => {
|
|
25
|
+
if (given === undefined)
|
|
26
|
+
return false;
|
|
27
|
+
const a = Buffer.from(given);
|
|
28
|
+
const b = Buffer.from(token);
|
|
29
|
+
return a.length === b.length && timingSafeEqual(a, b);
|
|
30
|
+
};
|
|
31
|
+
const readBody = async (request) => {
|
|
32
|
+
if (!/^application\/json(\s*;.*)?$/iu.test(request.headers['content-type'] ?? '')) {
|
|
33
|
+
throw new HttpError(415, 'json_required', 'The request must be JSON.');
|
|
34
|
+
}
|
|
35
|
+
const chunks = [];
|
|
36
|
+
let size = 0;
|
|
37
|
+
for await (const chunk of request) {
|
|
38
|
+
size += chunk.length;
|
|
39
|
+
if (size > MAX_BODY_BYTES)
|
|
40
|
+
throw new HttpError(413, 'too_large', 'The request is too large.');
|
|
41
|
+
chunks.push(chunk);
|
|
42
|
+
}
|
|
43
|
+
try {
|
|
44
|
+
return JSON.parse(Buffer.concat(chunks).toString('utf8'));
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
throw new HttpError(400, 'json_invalid', 'The request is not valid JSON.');
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
const record = (value) => (value && typeof value === 'object' && !Array.isArray(value) ? value : {});
|
|
51
|
+
export const startSlateBrowserServer = async (options) => {
|
|
52
|
+
const token = options.token ?? randomBytes(24).toString('base64url');
|
|
53
|
+
const runDir = await realpath(options.runDir);
|
|
54
|
+
const handler = createSlateToolHandler(options.context ?? {});
|
|
55
|
+
const screenHtml = buildSlateUiHtml({ target: 'browser' });
|
|
56
|
+
const hostHtml = buildSlateBrowserHostHtml();
|
|
57
|
+
const graceMs = options.messageGraceMs ?? 1_500;
|
|
58
|
+
let port = 0;
|
|
59
|
+
// A decision is reported once the screen's own message for it has arrived, or after a short grace when it does not.
|
|
60
|
+
let pending;
|
|
61
|
+
const report = () => {
|
|
62
|
+
const current = pending;
|
|
63
|
+
if (!current)
|
|
64
|
+
return;
|
|
65
|
+
pending = undefined;
|
|
66
|
+
clearTimeout(current.timer);
|
|
67
|
+
void finishDecision(current.decided, current.messages).then(options.onDecision);
|
|
68
|
+
};
|
|
69
|
+
const decide = (decided) => {
|
|
70
|
+
if (pending)
|
|
71
|
+
report();
|
|
72
|
+
pending = { decided, messages: [], timer: setTimeout(report, graceMs) };
|
|
73
|
+
};
|
|
74
|
+
const confine = async (name, input) => {
|
|
75
|
+
// show and data are the agent's tools and take no run here; the session's run is the only one there is.
|
|
76
|
+
if (name === SLATE_SHOW_TOOL || name === SLATE_DATA_TOOL || name === SLATE_OPEN_TOOL)
|
|
77
|
+
return { runDir };
|
|
78
|
+
const given = input.runDir;
|
|
79
|
+
const resolved = typeof given === 'string' && given.trim() ? await realpath(given.trim()).catch(() => undefined) : undefined;
|
|
80
|
+
if (resolved !== runDir)
|
|
81
|
+
throw new HttpError(403, 'wrong_run', 'This session serves one run directory and this call named another.');
|
|
82
|
+
return input;
|
|
83
|
+
};
|
|
84
|
+
const call = async (body) => {
|
|
85
|
+
const { name, arguments: args } = record(body);
|
|
86
|
+
if (typeof name !== 'string' || !SLATE_TOOL_NAMES.includes(name)) {
|
|
87
|
+
throw new HttpError(404, 'unknown_tool', 'That is not a design workspace tool.');
|
|
88
|
+
}
|
|
89
|
+
const input = await confine(name, record(args));
|
|
90
|
+
const result = await handler(name === SLATE_OPEN_TOOL ? SLATE_SHOW_TOOL : name, input);
|
|
91
|
+
const decided = decidedBy(name, result);
|
|
92
|
+
if (decided)
|
|
93
|
+
decide(decided);
|
|
94
|
+
return { result, decided: decided?.decision ?? null, ending: options.ending === true };
|
|
95
|
+
};
|
|
96
|
+
const message = async (body) => {
|
|
97
|
+
const { text } = record(body);
|
|
98
|
+
if (typeof text !== 'string')
|
|
99
|
+
throw new HttpError(400, 'invalid_input', 'text must be a string.');
|
|
100
|
+
if (pending && pending.messages.length < MAX_MESSAGES)
|
|
101
|
+
pending.messages.push(text.slice(0, MAX_MESSAGE_CHARS));
|
|
102
|
+
return {};
|
|
103
|
+
};
|
|
104
|
+
const authorized = (request, url) => {
|
|
105
|
+
const host = request.headers.host;
|
|
106
|
+
if (host !== `127.0.0.1:${port}` && host !== `localhost:${port}`) {
|
|
107
|
+
throw new HttpError(403, 'host_refused', 'This page is only served to the address it was opened at.');
|
|
108
|
+
}
|
|
109
|
+
const origin = request.headers.origin;
|
|
110
|
+
if (origin !== undefined && origin !== `http://${host}`)
|
|
111
|
+
throw new HttpError(403, 'origin_refused', 'Cross-origin requests are refused.');
|
|
112
|
+
const given = request.method === 'POST' ? request.headers['x-12ui-token'] : url.searchParams.get('t') ?? undefined;
|
|
113
|
+
if (!sameToken(typeof given === 'string' ? given : undefined, token)) {
|
|
114
|
+
throw new HttpError(401, 'token_required', 'Open the address that `12ui workspace open` printed: it carries this session\'s token.');
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
const send = (response, status, type, csp, body) => {
|
|
118
|
+
response.writeHead(status, {
|
|
119
|
+
'content-type': type,
|
|
120
|
+
'cache-control': 'no-store',
|
|
121
|
+
'referrer-policy': 'no-referrer',
|
|
122
|
+
'x-content-type-options': 'nosniff',
|
|
123
|
+
'cross-origin-resource-policy': 'same-origin',
|
|
124
|
+
...(csp ? { 'content-security-policy': csp } : {}),
|
|
125
|
+
});
|
|
126
|
+
response.end(body);
|
|
127
|
+
};
|
|
128
|
+
const route = async (request, response) => {
|
|
129
|
+
const url = new URL(request.url ?? '/', 'http://127.0.0.1');
|
|
130
|
+
if (request.method === 'GET' && url.pathname === '/favicon.ico') {
|
|
131
|
+
response.writeHead(204);
|
|
132
|
+
response.end();
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
authorized(request, url);
|
|
136
|
+
if (request.method === 'GET' && url.pathname === '/')
|
|
137
|
+
return send(response, 200, 'text/html; charset=utf-8', HOST_CSP, hostHtml);
|
|
138
|
+
if (request.method === 'GET' && url.pathname === '/screen')
|
|
139
|
+
return send(response, 200, 'text/html; charset=utf-8', SCREEN_CSP, screenHtml);
|
|
140
|
+
if (request.method === 'POST' && url.pathname === '/api/call')
|
|
141
|
+
return send(response, 200, 'application/json', undefined, JSON.stringify(await call(await readBody(request))));
|
|
142
|
+
if (request.method === 'POST' && url.pathname === '/api/message') {
|
|
143
|
+
const result = await message(await readBody(request));
|
|
144
|
+
send(response, 200, 'application/json', undefined, JSON.stringify(result));
|
|
145
|
+
// The screen sends its message right after the call that recorded the decision.
|
|
146
|
+
if (pending)
|
|
147
|
+
setImmediate(report);
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
throw new HttpError(404, 'not_found', 'Not found.');
|
|
151
|
+
};
|
|
152
|
+
const server = createServer((request, response) => {
|
|
153
|
+
route(request, response).catch((error) => {
|
|
154
|
+
if (response.headersSent) {
|
|
155
|
+
response.end();
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
if (error instanceof HttpError) {
|
|
159
|
+
send(response, error.status, 'application/json', undefined, JSON.stringify({ error: { code: error.code, message: error.message } }));
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
// A tool that throws is an error result the screen shows, as over MCP.
|
|
163
|
+
const result = errorResult(error);
|
|
164
|
+
send(response, 200, 'application/json', undefined, JSON.stringify({ result, decided: null, ending: false }));
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
await new Promise((resolve, reject) => {
|
|
168
|
+
server.once('error', reject);
|
|
169
|
+
server.listen(options.port ?? 0, '127.0.0.1', () => { server.off('error', reject); resolve(); });
|
|
170
|
+
});
|
|
171
|
+
port = server.address().port;
|
|
172
|
+
return {
|
|
173
|
+
url: `http://127.0.0.1:${port}/?t=${token}`,
|
|
174
|
+
port,
|
|
175
|
+
token,
|
|
176
|
+
runDir,
|
|
177
|
+
close: () => new Promise((resolve) => {
|
|
178
|
+
if (pending)
|
|
179
|
+
clearTimeout(pending.timer);
|
|
180
|
+
pending = undefined;
|
|
181
|
+
server.close(() => { resolve(); });
|
|
182
|
+
server.closeAllConnections();
|
|
183
|
+
}),
|
|
184
|
+
};
|
|
185
|
+
};
|
|
186
|
+
//# sourceMappingURL=slate-browser-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slate-browser-server.js","sourceRoot":"","sources":["../src/slate-browser-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type SlateWorkAction } from './slate-actions.js';
|
|
2
|
+
import type { SlateOp, SlateWorkspace } from './slate-workspace-types.js';
|
|
3
|
+
/**
|
|
4
|
+
* The commit critical section. Inside ONE workspace lock this does the op-id
|
|
5
|
+
* lookup, the intent lookup, the busy check, index and label allocation, the
|
|
6
|
+
* frozen selection and reference skip list, the edit's parent copy and
|
|
7
|
+
* annotated image, the approval write, and the op, round and option appends.
|
|
8
|
+
* Everything decided here is stored in `op.params` and is never recomputed by
|
|
9
|
+
* the runner or by `resume`.
|
|
10
|
+
*/
|
|
11
|
+
/** The dedupe key for one intent: the workspace and the normalized action, no op id. */
|
|
12
|
+
export declare const intentDigestOf: (workspaceId: string, action: SlateWorkAction) => string;
|
|
13
|
+
/** References earlier rounds used, sorted, so a searching round meets ones it has not shown before. */
|
|
14
|
+
export declare const referenceSkipList: (workspace: SlateWorkspace) => string[];
|
|
15
|
+
/** Option `i` of a round draws from the selected reference `i mod n`. */
|
|
16
|
+
export declare const optionReferences: (selected: readonly string[], count: number) => string[];
|
|
17
|
+
export type CommitResult = {
|
|
18
|
+
op: SlateOp;
|
|
19
|
+
created: boolean;
|
|
20
|
+
};
|
|
21
|
+
export declare const commitAction: (args: {
|
|
22
|
+
root: string;
|
|
23
|
+
stateRoot: string;
|
|
24
|
+
opId: string;
|
|
25
|
+
action: SlateWorkAction;
|
|
26
|
+
now?: () => Date;
|
|
27
|
+
}) => Promise<CommitResult>;
|
|
28
|
+
//# sourceMappingURL=slate-commit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slate-commit.d.ts","sourceRoot":"","sources":["../src/slate-commit.ts"],"names":[],"mappings":"AAGA,OAAO,EAAqC,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAW7F,OAAO,KAAK,EAEV,OAAO,EAGP,cAAc,EACf,MAAM,4BAA4B,CAAC;AAEpC;;;;;;;GAOG;AAEH,wFAAwF;AACxF,eAAO,MAAM,cAAc,GAAI,aAAa,MAAM,EAAE,QAAQ,eAAe,KAAG,MAA2C,CAAC;AAE1H,uGAAuG;AACvG,eAAO,MAAM,iBAAiB,GAAI,WAAW,cAAc,KAAG,MAAM,EAEnE,CAAC;AAEF,yEAAyE;AACzE,eAAO,MAAM,gBAAgB,GAAI,UAAU,SAAS,MAAM,EAAE,EAAE,OAAO,MAAM,KAAG,MAAM,EAEnF,CAAC;AAsHF,MAAM,MAAM,YAAY,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC;AAE7D,eAAO,MAAM,YAAY,GAAU,MAAM;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,eAAe,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB,KAAG,OAAO,CAAC,YAAY,CAiFa,CAAC"}
|