@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,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The fullscreen workspace: the selection on the left (220 px), one large
|
|
3
|
+
* image with its band and action row in the middle. The Generate more tile
|
|
4
|
+
* ends the selection and its panel opens under it. Fluid at any width
|
|
5
|
+
* (`min-width: 0` on every grid and flex parent). From 640px the selection
|
|
6
|
+
* stays on the left, 176 px wide until 900px so the image keeps its room in
|
|
7
|
+
* the desktop app's default 708 px tab. Below 640px the selection becomes one
|
|
8
|
+
* horizontal row above the image, scrolling inside itself, with each option's
|
|
9
|
+
* version chips under its thumbnail.
|
|
10
|
+
*/
|
|
11
|
+
export declare const SLATE_UI_STAGE_STYLES: string;
|
|
12
|
+
//# sourceMappingURL=mcp-slate-ui-styles-stage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-ui-styles-stage.d.ts","sourceRoot":"","sources":["../src/mcp-slate-ui-styles-stage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,eAAO,MAAM,qBAAqB,QAyCjC,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The fullscreen workspace: the selection on the left (220 px), one large
|
|
3
|
+
* image with its band and action row in the middle. The Generate more tile
|
|
4
|
+
* ends the selection and its panel opens under it. Fluid at any width
|
|
5
|
+
* (`min-width: 0` on every grid and flex parent). From 640px the selection
|
|
6
|
+
* stays on the left, 176 px wide until 900px so the image keeps its room in
|
|
7
|
+
* the desktop app's default 708 px tab. Below 640px the selection becomes one
|
|
8
|
+
* horizontal row above the image, scrolling inside itself, with each option's
|
|
9
|
+
* version chips under its thumbnail.
|
|
10
|
+
*/
|
|
11
|
+
export const SLATE_UI_STAGE_STYLES = String.raw `
|
|
12
|
+
#stage { min-width: 0; max-width: 1800px; margin: 0 auto; display: flex; flex-direction: column; gap: 12px; }
|
|
13
|
+
#stage.hidden { display: none !important; }
|
|
14
|
+
.stagehead { display: flex; align-items: center; gap: 12px; min-width: 0; }
|
|
15
|
+
.stagebody { display: grid; grid-template-columns: 220px minmax(0, 1fr); gap: 16px; min-width: 0; align-items: start; }
|
|
16
|
+
.selection { min-width: 0; display: flex; flex-direction: column; gap: 10px; max-height: calc(100vh - 96px); }
|
|
17
|
+
.rail { flex: 1 1 auto; min-height: 0; min-width: 0; display: flex; flex-direction: column; gap: 14px; overflow: auto; padding: 4px; }
|
|
18
|
+
.morehost:empty { display: none; }
|
|
19
|
+
.moreslot { position: sticky; bottom: 0; padding: 4px 0; background: var(--bg); }
|
|
20
|
+
.round { min-width: 0; }
|
|
21
|
+
.roundhead { font-size: 13px; font-weight: 600; margin: 0 0 6px; }
|
|
22
|
+
.options { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fill, 72px); gap: 10px 8px; }
|
|
23
|
+
.option { min-width: 0; width: 72px; }
|
|
24
|
+
.opt { display: block; width: 72px; height: 72px; }
|
|
25
|
+
.chips { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 4px; }
|
|
26
|
+
.chip { padding: 1px 7px; font-size: 11px; font-weight: 500; }
|
|
27
|
+
.chip.selected { background: var(--inverse); color: var(--inverse-text); border-color: var(--inverse); }
|
|
28
|
+
.main { min-width: 0; display: flex; flex-direction: column; gap: 10px; }
|
|
29
|
+
#stage .hero { --cap: max(240px, calc(100vh - 230px)); }
|
|
30
|
+
.band { display: flex; align-items: center; gap: 12px; min-height: 28px; min-width: 0; font-size: 13px; color: var(--text2); }
|
|
31
|
+
.bandtext { min-width: 0; overflow-wrap: anywhere; }
|
|
32
|
+
.textbtn { flex: none; padding: 2px 6px; border: 0; background: none; font-weight: 600; text-decoration: underline; }
|
|
33
|
+
.actionrow { display: flex; flex-wrap: wrap; gap: 8px; min-width: 0; }
|
|
34
|
+
.actionrow button { flex: none; }
|
|
35
|
+
.inspiration { min-width: 0; max-width: 960px; width: 100%; margin: 0 auto; }
|
|
36
|
+
@media (max-width: 480px) {
|
|
37
|
+
.actionrow { gap: 6px; }
|
|
38
|
+
.actionrow button { flex: 1 1 auto; padding: 8px 9px; }
|
|
39
|
+
}
|
|
40
|
+
@media (max-width: 899px) {
|
|
41
|
+
.stagebody { grid-template-columns: 176px minmax(0, 1fr); gap: 12px; }
|
|
42
|
+
}
|
|
43
|
+
@media (max-width: 639px) {
|
|
44
|
+
.stagebody { grid-template-columns: minmax(0, 1fr); }
|
|
45
|
+
.selection { max-height: none; }
|
|
46
|
+
.rail { flex: none; flex-direction: row; gap: 14px; overflow-x: auto; overflow-y: hidden; padding: 4px 4px 8px; }
|
|
47
|
+
.moreslot { position: static; flex: none; align-self: flex-start; padding: 0; background: none; }
|
|
48
|
+
.round { flex: none; }
|
|
49
|
+
.options { display: flex; }
|
|
50
|
+
#stage .hero { --cap: 60vh; }
|
|
51
|
+
}
|
|
52
|
+
`;
|
|
53
|
+
//# sourceMappingURL=mcp-slate-ui-styles-stage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-ui-styles-stage.js","sourceRoot":"","sources":["../src/mcp-slate-ui-styles-stage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyC9C,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The two controls on a design thumbnail (a plus and a pencil), and the cell
|
|
3
|
+
* that holds them beside the thumbnail button. They sit in the top right corner
|
|
4
|
+
* on a semi-opaque dark backdrop, so they stay legible over any picture, and
|
|
5
|
+
* are shown only on hover or while keyboard focus is inside the cell. A device
|
|
6
|
+
* with no hover shows them on the selected thumbnail only. A hidden control is
|
|
7
|
+
* not clickable but stays focusable, and focus reveals it.
|
|
8
|
+
*/
|
|
9
|
+
export declare const SLATE_UI_THUMBTOOLS_STYLES: string;
|
|
10
|
+
//# sourceMappingURL=mcp-slate-ui-styles-thumbtools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-ui-styles-thumbtools.d.ts","sourceRoot":"","sources":["../src/mcp-slate-ui-styles-thumbtools.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,eAAO,MAAM,0BAA0B,QAetC,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The two controls on a design thumbnail (a plus and a pencil), and the cell
|
|
3
|
+
* that holds them beside the thumbnail button. They sit in the top right corner
|
|
4
|
+
* on a semi-opaque dark backdrop, so they stay legible over any picture, and
|
|
5
|
+
* are shown only on hover or while keyboard focus is inside the cell. A device
|
|
6
|
+
* with no hover shows them on the selected thumbnail only. A hidden control is
|
|
7
|
+
* not clickable but stays focusable, and focus reveals it.
|
|
8
|
+
*/
|
|
9
|
+
export const SLATE_UI_THUMBTOOLS_STYLES = String.raw `
|
|
10
|
+
.thumbcell { position: relative; flex: none; display: block; }
|
|
11
|
+
.strip .thumbcell { width: 56px; height: 56px; }
|
|
12
|
+
.option .thumbcell { width: 72px; height: 72px; }
|
|
13
|
+
.thumbtools { position: absolute; top: 3px; right: 3px; display: flex; gap: 2px; opacity: 0; pointer-events: none; transition: opacity .12s; }
|
|
14
|
+
.thumbcell:hover .thumbtools, .thumbcell:focus-within .thumbtools { opacity: 1; pointer-events: auto; }
|
|
15
|
+
button.thumbtool { display: grid; place-items: center; flex: none; width: 22px; height: 22px; padding: 0; border: 0; border-radius: 5px; background: rgba(20, 20, 20, .62); color: #fff; }
|
|
16
|
+
button.thumbtool:hover:not(:disabled) { background: rgba(20, 20, 20, .85); }
|
|
17
|
+
button.thumbtool:focus-visible { outline: 2px solid var(--ring); outline-offset: 0; }
|
|
18
|
+
button.thumbtool:disabled { opacity: .5; }
|
|
19
|
+
@media (hover: none) {
|
|
20
|
+
.thumbtools { display: none; }
|
|
21
|
+
.thumbcell.selected .thumbtools { display: flex; opacity: 1; pointer-events: auto; }
|
|
22
|
+
}
|
|
23
|
+
@media (prefers-reduced-motion: reduce) { .thumbtools { transition: none; } }
|
|
24
|
+
`;
|
|
25
|
+
//# sourceMappingURL=mcp-slate-ui-styles-thumbtools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-ui-styles-thumbtools.js","sourceRoot":"","sources":["../src/mcp-slate-ui-styles-thumbtools.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;CAenD,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The workspace view's stylesheet: base and inline card (the fullscreen stage
|
|
3
|
+
* is in mcp-slate-ui-styles-stage.ts, the dialogs in
|
|
4
|
+
* mcp-slate-ui-styles-dialog.ts). Host variables win; the fallbacks keep the
|
|
5
|
+
* view usable when a host passes none. System fonts only, no external
|
|
6
|
+
* requests.
|
|
7
|
+
*
|
|
8
|
+
* The layout is fluid by construction: the view never asks the host for a
|
|
9
|
+
* width. Every flex/grid parent sets `min-width: 0` so no child can push the
|
|
10
|
+
* frame wider than its pane, and the strip of thumbnails scrolls inside itself.
|
|
11
|
+
*/
|
|
12
|
+
export declare const SLATE_UI_STYLES: string;
|
|
13
|
+
//# sourceMappingURL=mcp-slate-ui-styles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-ui-styles.d.ts","sourceRoot":"","sources":["../src/mcp-slate-ui-styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,eAAe,QAwG3B,CAAC"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The workspace view's stylesheet: base and inline card (the fullscreen stage
|
|
3
|
+
* is in mcp-slate-ui-styles-stage.ts, the dialogs in
|
|
4
|
+
* mcp-slate-ui-styles-dialog.ts). Host variables win; the fallbacks keep the
|
|
5
|
+
* view usable when a host passes none. System fonts only, no external
|
|
6
|
+
* requests.
|
|
7
|
+
*
|
|
8
|
+
* The layout is fluid by construction: the view never asks the host for a
|
|
9
|
+
* width. Every flex/grid parent sets `min-width: 0` so no child can push the
|
|
10
|
+
* frame wider than its pane, and the strip of thumbnails scrolls inside itself.
|
|
11
|
+
*/
|
|
12
|
+
export const SLATE_UI_STYLES = String.raw `
|
|
13
|
+
/* Host variables win; these fallbacks keep the view usable when a host passes none. System fonts only. */
|
|
14
|
+
:root {
|
|
15
|
+
color-scheme: light dark;
|
|
16
|
+
--f-bg: light-dark(#ffffff, #1c1c1c);
|
|
17
|
+
--f-bg2: light-dark(#f4f4f2, #2a2a2a);
|
|
18
|
+
--f-bg3: light-dark(#e8e8e4, #3a3a3a);
|
|
19
|
+
--f-text: light-dark(#1a1a1a, #f2f2f2);
|
|
20
|
+
--f-text2: light-dark(#5f5f5b, #a8a8a3);
|
|
21
|
+
--f-border: light-dark(#d9d9d3, #444440);
|
|
22
|
+
--f-inverse: light-dark(#1a1a1a, #f2f2f2);
|
|
23
|
+
--f-inverse-text: light-dark(#ffffff, #1a1a1a);
|
|
24
|
+
--f-ring: light-dark(#2f6fed, #7aa2ff);
|
|
25
|
+
--f-danger: light-dark(#b3261e, #ff8a80);
|
|
26
|
+
--f-ok: light-dark(#1d6b3a, #6fd08c);
|
|
27
|
+
--bg: var(--color-background-primary, var(--f-bg));
|
|
28
|
+
--bg2: var(--color-background-secondary, var(--f-bg2));
|
|
29
|
+
--bg3: var(--color-background-tertiary, var(--f-bg3));
|
|
30
|
+
--text: var(--color-text-primary, var(--f-text));
|
|
31
|
+
--text2: var(--color-text-secondary, var(--f-text2));
|
|
32
|
+
--border: var(--color-border-primary, var(--f-border));
|
|
33
|
+
--inverse: var(--color-background-inverse, var(--f-inverse));
|
|
34
|
+
--inverse-text: var(--color-text-inverse, var(--f-inverse-text));
|
|
35
|
+
--ring: var(--color-ring-primary, var(--f-ring));
|
|
36
|
+
--danger: var(--color-text-danger, var(--f-danger));
|
|
37
|
+
--ok: var(--color-text-success, var(--f-ok));
|
|
38
|
+
--radius: var(--border-radius-md, 8px);
|
|
39
|
+
--font: var(--font-sans, system-ui, -apple-system, "Segoe UI", Roboto, sans-serif);
|
|
40
|
+
}
|
|
41
|
+
:root[data-theme="light"] { color-scheme: light; }
|
|
42
|
+
:root[data-theme="dark"] { color-scheme: dark; }
|
|
43
|
+
* { box-sizing: border-box; }
|
|
44
|
+
html, body { margin: 0; }
|
|
45
|
+
/* Fluid by construction: the app never asks the host for a width. The layout width is whatever the host gives
|
|
46
|
+
the view (fixed width or flexible maxWidth alike), so a host can never grow the frame past its pane. */
|
|
47
|
+
body {
|
|
48
|
+
background: var(--bg);
|
|
49
|
+
color: var(--text);
|
|
50
|
+
font: 14px/1.45 var(--font);
|
|
51
|
+
padding: 16px;
|
|
52
|
+
min-width: 0;
|
|
53
|
+
}
|
|
54
|
+
main { max-width: 960px; margin: 0 auto; min-width: 0; container-type: inline-size; }
|
|
55
|
+
.sr { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
|
|
56
|
+
h1 { font-size: 15px; font-weight: 600; margin: 0; }
|
|
57
|
+
.meta { color: var(--text2); font-size: 12px; }
|
|
58
|
+
.topbar { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 10px; min-width: 0; }
|
|
59
|
+
.tabs { display: flex; gap: 4px; min-width: 0; }
|
|
60
|
+
.tab { padding: 6px 12px; border-radius: 999px; border-color: transparent; background: transparent; color: var(--text2); font-weight: 500; }
|
|
61
|
+
.tab[aria-selected="true"] { background: var(--bg2); color: var(--text); border-color: var(--border); }
|
|
62
|
+
.iconbtn { display: inline-grid; place-items: center; flex: none; width: 34px; height: 34px; padding: 0; }
|
|
63
|
+
/* The large image. Its box has the image's own aspect ratio and a capped height, so the card never jumps when the
|
|
64
|
+
picture lands and the badge and hairline sit on the picture itself. The card caps the height at 60 percent of
|
|
65
|
+
its own width (a container unit, so the frame's height never feeds back into it); the workspace uses the window. */
|
|
66
|
+
.hero { position: relative; width: min(100%, calc(var(--cap, 60cqw) * var(--ar, 1.5))); aspect-ratio: var(--ar, 1.5); margin: 0 auto; min-width: 0; border-radius: var(--radius); background: var(--bg3); overflow: hidden; }
|
|
67
|
+
#card .hero { --cap: 60cqw; }
|
|
68
|
+
.hero.note { width: 100%; aspect-ratio: auto; background: var(--bg2); }
|
|
69
|
+
.heroimg { display: block; width: 100%; height: 100%; object-fit: fill; user-select: none; -webkit-user-drag: none; }
|
|
70
|
+
.heroimg.empty { background: var(--bg3); }
|
|
71
|
+
.heronote { padding: 32px 16px; color: var(--text2); text-align: center; overflow-wrap: anywhere; }
|
|
72
|
+
.hero .badge, .thumbbtn .code, .opt .code { position: absolute; left: 8px; bottom: 8px; padding: 0 8px; border-radius: 999px; background: var(--inverse); color: var(--inverse-text); font-size: 12px; font-weight: 600; line-height: 20px; }
|
|
73
|
+
.hero .hair { position: absolute; left: 0; right: 0; bottom: 0; }
|
|
74
|
+
.pickrow { display: flex; align-items: center; gap: 12px; margin-top: 10px; min-width: 0; }
|
|
75
|
+
.pickrow > button { flex: none; }
|
|
76
|
+
/* One row of small thumbnails; more than fit scroll sideways inside the strip, never the page, with a fade at the edge. */
|
|
77
|
+
.strip { flex: 1 1 0; display: flex; gap: 8px; min-width: 0; margin: 0; padding: 4px; overflow-x: auto; }
|
|
78
|
+
.strip.fade { -webkit-mask-image: linear-gradient(to right, #000 calc(100% - 28px), transparent); mask-image: linear-gradient(to right, #000 calc(100% - 28px), transparent); }
|
|
79
|
+
.thumbbtn, .opt, .refbtn { position: relative; padding: 0; border: 0; border-radius: 6px; background: var(--bg2); overflow: hidden; }
|
|
80
|
+
.thumbbtn { flex: none; width: 56px; height: 56px; }
|
|
81
|
+
.thumb { display: block; width: 100%; height: 100%; background: var(--bg3); object-fit: cover; object-position: top; }
|
|
82
|
+
.thumbbtn .code, .opt .code { left: 3px; bottom: 3px; padding: 0 5px; font-size: 10px; line-height: 14px; }
|
|
83
|
+
.thumbbtn.selected, .opt.selected { box-shadow: 0 0 0 2px var(--text); }
|
|
84
|
+
.thumbbtn.failed, .opt.failed { opacity: .5; }
|
|
85
|
+
.shimmer { background: linear-gradient(100deg, var(--bg2) 30%, var(--bg3) 50%, var(--bg2) 70%); background-size: 200% 100%; animation: shimmer 1.4s linear infinite; }
|
|
86
|
+
@keyframes shimmer { from { background-position: 100% 0; } to { background-position: -100% 0; } }
|
|
87
|
+
.field { margin-top: 0; }
|
|
88
|
+
label.lbl, span.lbl { display: block; font-size: 12px; color: var(--text2); margin-bottom: 4px; }
|
|
89
|
+
input[type="text"], input[type="number"], select {
|
|
90
|
+
width: 100%; padding: 8px 10px; font: inherit; color: var(--text); background: var(--bg);
|
|
91
|
+
border: 1px solid var(--border); border-radius: var(--radius);
|
|
92
|
+
}
|
|
93
|
+
input[type="text"]:focus-visible, input[type="number"]:focus-visible, select:focus-visible { outline: 2px solid var(--ring); outline-offset: 1px; }
|
|
94
|
+
.spacer { flex: 1 1 0; min-width: 0; }
|
|
95
|
+
button {
|
|
96
|
+
font: inherit; font-weight: 600; padding: 8px 16px; border-radius: var(--radius);
|
|
97
|
+
border: 1px solid var(--border); background: var(--bg2); color: var(--text); cursor: pointer;
|
|
98
|
+
}
|
|
99
|
+
button.thumbbtn, button.opt, button.refbtn { padding: 0; border: 0; }
|
|
100
|
+
button.primary { background: var(--inverse); color: var(--inverse-text); border-color: var(--inverse); }
|
|
101
|
+
button:focus-visible { outline: 2px solid var(--ring); outline-offset: 2px; }
|
|
102
|
+
button:disabled { opacity: .45; cursor: default; }
|
|
103
|
+
.note { margin: 10px 0 0; font-size: 12px; color: var(--text2); }
|
|
104
|
+
.hair { display: block; height: 2px; background: var(--bg3); overflow: hidden; position: relative; min-width: 0; }
|
|
105
|
+
.hair.indeterminate::after { content: ""; position: absolute; inset: 0 auto 0 -30%; width: 30%; background: var(--text); animation: slide 1.4s ease-in-out infinite; }
|
|
106
|
+
@keyframes slide { from { left: -30%; } to { left: 100%; } }
|
|
107
|
+
@media (prefers-reduced-motion: reduce) {
|
|
108
|
+
.hair.indeterminate::after { animation: none; width: 100%; left: 0; opacity: .3; }
|
|
109
|
+
.shimmer { animation: none; }
|
|
110
|
+
}
|
|
111
|
+
.status { min-height: 18px; margin: 8px 0 0; font-size: 12px; overflow-wrap: anywhere; }
|
|
112
|
+
.status.ok { color: var(--ok); }
|
|
113
|
+
.status.err, .err { color: var(--danger); }
|
|
114
|
+
#fatal { padding: 16px; color: var(--danger); }
|
|
115
|
+
.hidden { display: none !important; }
|
|
116
|
+
`;
|
|
117
|
+
//# sourceMappingURL=mcp-slate-ui-styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-ui-styles.js","sourceRoot":"","sources":["../src/mcp-slate-ui-styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwGxC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type SlateUiTarget } from './mcp-slate-ui-script.js';
|
|
2
|
+
/**
|
|
3
|
+
* The workspace view for one target, as one self-contained HTML document: no external script,
|
|
4
|
+
* stylesheet, font, or URL, so it renders under the strictest host sandbox.
|
|
5
|
+
*
|
|
6
|
+
* The static markup is the inline card and nothing else: the tabs, one large
|
|
7
|
+
* image, one row with the strip of options and Select, one status line, and an
|
|
8
|
+
* icon-only control that opens the workspace. The fullscreen stage and its dialogs are built by the
|
|
9
|
+
* script into `#stage` only when the host puts the view in fullscreen.
|
|
10
|
+
*/
|
|
11
|
+
export declare const buildSlateUiHtml: ({ target }: {
|
|
12
|
+
target: SlateUiTarget;
|
|
13
|
+
}) => string;
|
|
14
|
+
/** The local plugin's screen: what `12ui mcp` serves. */
|
|
15
|
+
export declare const SLATE_UI_HTML: string;
|
|
16
|
+
//# sourceMappingURL=mcp-slate-ui.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-ui.d.ts","sourceRoot":"","sources":["../src/mcp-slate-ui.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAMlF;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,GAAI,YAAY;IAAE,MAAM,EAAE,aAAa,CAAA;CAAE,KAAG,MAuCxE,CAAC;AAEF,yDAAyD;AACzD,eAAO,MAAM,aAAa,QAAwC,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { SLATE_UI_COPY as COPY } from './mcp-slate-ui-copy.js';
|
|
2
|
+
import { buildSlateUiScript } from './mcp-slate-ui-script.js';
|
|
3
|
+
import { SLATE_UI_STYLES } from './mcp-slate-ui-styles.js';
|
|
4
|
+
import { SLATE_UI_DIALOG_STYLES, SLATE_UI_MORE_STYLES } from './mcp-slate-ui-styles-dialog.js';
|
|
5
|
+
import { SLATE_UI_STAGE_STYLES } from './mcp-slate-ui-styles-stage.js';
|
|
6
|
+
import { SLATE_UI_THUMBTOOLS_STYLES } from './mcp-slate-ui-styles-thumbtools.js';
|
|
7
|
+
/**
|
|
8
|
+
* The workspace view for one target, as one self-contained HTML document: no external script,
|
|
9
|
+
* stylesheet, font, or URL, so it renders under the strictest host sandbox.
|
|
10
|
+
*
|
|
11
|
+
* The static markup is the inline card and nothing else: the tabs, one large
|
|
12
|
+
* image, one row with the strip of options and Select, one status line, and an
|
|
13
|
+
* icon-only control that opens the workspace. The fullscreen stage and its dialogs are built by the
|
|
14
|
+
* script into `#stage` only when the host puts the view in fullscreen.
|
|
15
|
+
*/
|
|
16
|
+
export const buildSlateUiHtml = ({ target }) => `<!doctype html>
|
|
17
|
+
<html lang="en">
|
|
18
|
+
<head>
|
|
19
|
+
<meta charset="utf-8">
|
|
20
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">${target === 'local' ? '' : `\n<meta name="slate-target" content="${target}">`}
|
|
21
|
+
<title>${COPY.title}</title>
|
|
22
|
+
<style>${SLATE_UI_STYLES}${SLATE_UI_STAGE_STYLES}${SLATE_UI_DIALOG_STYLES}${SLATE_UI_MORE_STYLES}${SLATE_UI_THUMBTOOLS_STYLES}</style>
|
|
23
|
+
</head>
|
|
24
|
+
<body>
|
|
25
|
+
<div id="fatal" class="hidden" role="alert"></div>
|
|
26
|
+
<main id="app" class="hidden">
|
|
27
|
+
<h1 class="sr">${COPY.title}</h1>
|
|
28
|
+
<p class="note hidden" id="empty">${COPY.empty}</p>
|
|
29
|
+
<div id="card">
|
|
30
|
+
<div class="topbar">
|
|
31
|
+
<div class="tabs" role="tablist" aria-label="${COPY.title}">
|
|
32
|
+
<button type="button" role="tab" class="tab" data-tab="designs" aria-selected="true">${COPY.tabDesigns}</button>
|
|
33
|
+
<button type="button" role="tab" class="tab" data-tab="inspiration" aria-selected="false">${COPY.tabInspiration}</button>
|
|
34
|
+
</div>
|
|
35
|
+
<button id="expand" type="button" class="iconbtn" aria-label="${COPY.openWorkspace}" title="${COPY.openWorkspace}" disabled>
|
|
36
|
+
<svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 9V4h5M20 9V4h-5M4 15v5h5M20 15v5h-5"/></svg>
|
|
37
|
+
</button>
|
|
38
|
+
</div>
|
|
39
|
+
<div id="pane-designs">
|
|
40
|
+
<div id="hero" class="hero"></div>
|
|
41
|
+
<div class="pickrow">
|
|
42
|
+
<div class="strip" id="strip" role="group" aria-label="${COPY.optionsGroup}"></div>
|
|
43
|
+
<button id="select" type="button" class="primary" disabled>${COPY.select}</button>
|
|
44
|
+
</div>
|
|
45
|
+
<div id="more"></div>
|
|
46
|
+
<p class="status" id="status" data-status role="status" aria-live="polite"></p>
|
|
47
|
+
</div>
|
|
48
|
+
<div id="pane-inspiration" class="hidden"></div>
|
|
49
|
+
</div>
|
|
50
|
+
</main>
|
|
51
|
+
<div id="stage" class="hidden"></div>
|
|
52
|
+
<script>${buildSlateUiScript(target)}</script>
|
|
53
|
+
</body>
|
|
54
|
+
</html>
|
|
55
|
+
`;
|
|
56
|
+
/** The local plugin's screen: what `12ui mcp` serves. */
|
|
57
|
+
export const SLATE_UI_HTML = buildSlateUiHtml({ target: 'local' });
|
|
58
|
+
//# sourceMappingURL=mcp-slate-ui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-ui.js","sourceRoot":"","sources":["../src/mcp-slate-ui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,IAAI,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAsB,MAAM,0BAA0B,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAC/F,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AAEjF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,EAAE,MAAM,EAA6B,EAAU,EAAE,CAAC;;;;sEAIb,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,wCAAwC,MAAM,IAAI;SACzI,IAAI,CAAC,KAAK;SACV,eAAe,GAAG,qBAAqB,GAAG,sBAAsB,GAAG,oBAAoB,GAAG,0BAA0B;;;;;mBAK1G,IAAI,CAAC,KAAK;sCACS,IAAI,CAAC,KAAK;;;qDAGK,IAAI,CAAC,KAAK;+FACgC,IAAI,CAAC,UAAU;oGACV,IAAI,CAAC,cAAc;;sEAEjD,IAAI,CAAC,aAAa,YAAY,IAAI,CAAC,aAAa;;;;;;;iEAOrD,IAAI,CAAC,YAAY;qEACb,IAAI,CAAC,MAAM;;;;;;;;;UAStE,kBAAkB,CAAC,MAAM,CAAC;;;CAGnC,CAAC;AAEF,yDAAyD;AACzD,MAAM,CAAC,MAAM,aAAa,GAAG,gBAAgB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
import type { SlateRuntime } from './slate-runtime.js';
|
|
3
|
+
export declare const showWorkspace: (input: Record<string, unknown>, runtime: SlateRuntime) => Promise<CallToolResult>;
|
|
4
|
+
export declare const openWorkspace: (runtime: SlateRuntime) => Promise<CallToolResult>;
|
|
5
|
+
export declare const imageResult: (input: Record<string, unknown>, runtime: SlateRuntime) => Promise<CallToolResult>;
|
|
6
|
+
export declare const referenceResult: (input: Record<string, unknown>, runtime: SlateRuntime) => Promise<CallToolResult>;
|
|
7
|
+
export declare const pickResult: (input: Record<string, unknown>, runtime: SlateRuntime) => Promise<CallToolResult>;
|
|
8
|
+
export declare const inspireResult: (input: Record<string, unknown>, runtime: SlateRuntime) => Promise<CallToolResult>;
|
|
9
|
+
export declare const inspirationResult: (input: Record<string, unknown>, runtime: SlateRuntime) => Promise<CallToolResult>;
|
|
10
|
+
export declare const handoffResult: (input: Record<string, unknown>, runtime: SlateRuntime) => Promise<CallToolResult>;
|
|
11
|
+
/** Local files only, plus the cached readiness check: no network, no writes, no lock files. */
|
|
12
|
+
export declare const statusResult: (input: Record<string, unknown>, runtime: SlateRuntime) => Promise<CallToolResult>;
|
|
13
|
+
export declare const runResult: (input: Record<string, unknown>, runtime: SlateRuntime) => Promise<CallToolResult>;
|
|
14
|
+
export declare const resumeResult: (input: Record<string, unknown>, runtime: SlateRuntime) => Promise<CallToolResult>;
|
|
15
|
+
//# sourceMappingURL=mcp-slate-workspace-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-workspace-tools.d.ts","sourceRoot":"","sources":["../src/mcp-slate-workspace-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAezE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAqCvD,eAAO,MAAM,aAAa,GAAU,OAAO,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,YAAY,KAAG,OAAO,CAAC,cAAc,CAIjH,CAAC;AAEF,eAAO,MAAM,aAAa,GAAU,SAAS,YAAY,KAAG,OAAO,CAAC,cAAc,CAIjF,CAAC;AAEF,eAAO,MAAM,WAAW,GAAU,OAAO,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,YAAY,KAAG,OAAO,CAAC,cAAc,CAmB/G,CAAC;AAEF,eAAO,MAAM,eAAe,GAAU,OAAO,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,YAAY,KAAG,OAAO,CAAC,cAAc,CAkBnH,CAAC;AAYF,eAAO,MAAM,UAAU,GAAU,OAAO,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,YAAY,KAAG,OAAO,CAAC,cAAc,CAI9G,CAAC;AAEF,eAAO,MAAM,aAAa,GAAU,OAAO,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,YAAY,KAAG,OAAO,CAAC,cAAc,CAIjH,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAU,OAAO,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,YAAY,KAAG,OAAO,CAAC,cAAc,CAIrH,CAAC;AAEF,eAAO,MAAM,aAAa,GAAU,OAAO,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,YAAY,KAAG,OAAO,CAAC,cAAc,CASjH,CAAC;AAEF,+FAA+F;AAC/F,eAAO,MAAM,YAAY,GAAU,OAAO,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,YAAY,KAAG,OAAO,CAAC,cAAc,CAUhH,CAAC;AAUF,eAAO,MAAM,SAAS,GAAU,OAAO,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,YAAY,KAAG,OAAO,CAAC,cAAc,CAI7G,CAAC;AAEF,eAAO,MAAM,YAAY,GAAU,OAAO,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,YAAY,KAAG,OAAO,CAAC,cAAc,CAIhH,CAAC"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { isSlateImageSize, slateImage } from './mcp-slate-image.js';
|
|
2
|
+
import { findLatestSlateRunDir } from './mcp-slate-latest.js';
|
|
3
|
+
import { slateFallbackText } from './mcp-slate-command.js';
|
|
4
|
+
import { resolveSlateRunDir } from './mcp-slate-run.js';
|
|
5
|
+
import { SlateError } from './slate-errors.js';
|
|
6
|
+
import { recordHandoff } from './slate-handoff.js';
|
|
7
|
+
import { REFERENCE_ID_PATTERN } from './slate-ids.js';
|
|
8
|
+
import { runSearch, setSelection } from './slate-inspiration.js';
|
|
9
|
+
import { readLiveness } from './slate-liveness.js';
|
|
10
|
+
import { copyAdoptedPick, recordPick } from './slate-pick.js';
|
|
11
|
+
import { namedReferenceIds } from './slate-reference-ids.js';
|
|
12
|
+
import { ensureReferenceImage } from './slate-reference-store.js';
|
|
13
|
+
import { resumeAction, runAction } from './slate-run-action.js';
|
|
14
|
+
import { buildView, emptyView } from './slate-view.js';
|
|
15
|
+
import { readVersionBytes } from './slate-versions.js';
|
|
16
|
+
import { findVersion, loadWorkspaceAt } from './slate-workspace-store.js';
|
|
17
|
+
/**
|
|
18
|
+
* Handlers for the twelve design-workspace tools. The readers (`show`, `data`,
|
|
19
|
+
* `open`, `status`, `image`, `reference`) and the free writers (`pick`,
|
|
20
|
+
* `inspire`, `inspiration`, `handoff`) never import the runner launcher; only
|
|
21
|
+
* `run` and `resume` (in `slate-run-action.ts`) can start work, and that work
|
|
22
|
+
* is local.
|
|
23
|
+
*/
|
|
24
|
+
const NO_RUN_TEXT = 'No finished 12ui draft run was found. Start one with `12ui draft --concept "<product, audience, surface, goal, personality>"`, then open this again.';
|
|
25
|
+
const structured = (value) => value;
|
|
26
|
+
const viewResult = async (view, extraText) => ({
|
|
27
|
+
content: [{ type: 'text', text: extraText ?? await slateFallbackText(view) }],
|
|
28
|
+
structuredContent: structured(view),
|
|
29
|
+
});
|
|
30
|
+
const loadView = async (runtime, runDirArgument) => {
|
|
31
|
+
const root = await resolveSlateRunDir(runDirArgument);
|
|
32
|
+
const { workspace, persisted } = await loadWorkspaceAt(root, runtime.now);
|
|
33
|
+
await copyAdoptedPick({ runtime, root, workspace, persisted });
|
|
34
|
+
const view = await buildView({ root, workspace, stateRoot: runtime.stateRoot, now: runtime.now(), local: await runtime.localImage() });
|
|
35
|
+
return { root, view };
|
|
36
|
+
};
|
|
37
|
+
const optionalRunDir = (input) => {
|
|
38
|
+
if (input.runDir === undefined)
|
|
39
|
+
return undefined;
|
|
40
|
+
if (typeof input.runDir !== 'string' || !input.runDir.trim())
|
|
41
|
+
throw new Error('runDir must be a non-empty string');
|
|
42
|
+
return input.runDir;
|
|
43
|
+
};
|
|
44
|
+
export const showWorkspace = async (input, runtime) => {
|
|
45
|
+
const runDir = optionalRunDir(input) ?? await findLatestSlateRunDir(runtime);
|
|
46
|
+
if (runDir === undefined)
|
|
47
|
+
throw new Error(NO_RUN_TEXT);
|
|
48
|
+
return viewResult((await loadView(runtime, runDir)).view);
|
|
49
|
+
};
|
|
50
|
+
export const openWorkspace = async (runtime) => {
|
|
51
|
+
const runDir = await findLatestSlateRunDir(runtime);
|
|
52
|
+
if (runDir === undefined)
|
|
53
|
+
return viewResult(emptyView(await runtime.localImage()), NO_RUN_TEXT);
|
|
54
|
+
return viewResult((await loadView(runtime, runDir)).view);
|
|
55
|
+
};
|
|
56
|
+
export const imageResult = async (input, runtime) => {
|
|
57
|
+
const size = input.size;
|
|
58
|
+
if (!isSlateImageSize(size))
|
|
59
|
+
throw new SlateError('invalid_input', 'size must be "thumb" or "full"');
|
|
60
|
+
const root = await resolveSlateRunDir(input.runDir);
|
|
61
|
+
const { workspace } = await loadWorkspaceAt(root, runtime.now);
|
|
62
|
+
const version = findVersion(workspace, input.versionId);
|
|
63
|
+
const bytes = await readVersionBytes(root, workspace, version);
|
|
64
|
+
const image = await slateImage(bytes, size, { width: version.width, height: version.height });
|
|
65
|
+
return {
|
|
66
|
+
content: [{ type: 'image', data: image.bytes.toString('base64'), mimeType: image.mimeType }],
|
|
67
|
+
structuredContent: {
|
|
68
|
+
versionId: version.versionId,
|
|
69
|
+
size,
|
|
70
|
+
width: image.width,
|
|
71
|
+
height: image.height,
|
|
72
|
+
mimeType: image.mimeType,
|
|
73
|
+
sourceSha256: version.sha256,
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
export const referenceResult = async (input, runtime) => {
|
|
78
|
+
const size = input.size;
|
|
79
|
+
if (size !== 'thumb' && size !== 'ref')
|
|
80
|
+
throw new SlateError('invalid_input', 'size must be "thumb" or "ref"');
|
|
81
|
+
const referenceId = input.referenceId;
|
|
82
|
+
if (typeof referenceId !== 'string' || !REFERENCE_ID_PATTERN.test(referenceId)) {
|
|
83
|
+
throw new SlateError('invalid_input', 'referenceId is not a reference id');
|
|
84
|
+
}
|
|
85
|
+
const root = await resolveSlateRunDir(input.runDir);
|
|
86
|
+
const { workspace } = await loadWorkspaceAt(root, runtime.now);
|
|
87
|
+
if (!namedReferenceIds(workspace).includes(referenceId)) {
|
|
88
|
+
throw new SlateError('unknown_reference', `${referenceId} is not in a round, a search or the selection of this workspace.`);
|
|
89
|
+
}
|
|
90
|
+
const reference = await ensureReferenceImage({ root, corpus: runtime.corpus, referenceId, size });
|
|
91
|
+
const image = await slateImage(reference.bytes, size === 'thumb' ? 'thumb' : 'full', { width: reference.width, height: reference.height });
|
|
92
|
+
return {
|
|
93
|
+
content: [{ type: 'image', data: image.bytes.toString('base64'), mimeType: image.mimeType }],
|
|
94
|
+
structuredContent: { referenceId, size, width: image.width, height: image.height, mimeType: image.mimeType },
|
|
95
|
+
};
|
|
96
|
+
};
|
|
97
|
+
const changeResult = async (runtime, runDirArgument, text, fields) => {
|
|
98
|
+
const { view } = await loadView(runtime, runDirArgument);
|
|
99
|
+
return { content: [{ type: 'text', text }], structuredContent: { ...fields(view), view } };
|
|
100
|
+
};
|
|
101
|
+
export const pickResult = async (input, runtime) => {
|
|
102
|
+
const root = await resolveSlateRunDir(input.runDir);
|
|
103
|
+
await recordPick({ runtime, root, versionId: input.versionId, reason: input.reason });
|
|
104
|
+
return changeResult(runtime, root, `Recorded the selection ${String(input.versionId)} in the workspace.`, (view) => ({ pick: view.pick, rev: view.rev }));
|
|
105
|
+
};
|
|
106
|
+
export const inspireResult = async (input, runtime) => {
|
|
107
|
+
const root = await resolveSlateRunDir(input.runDir);
|
|
108
|
+
const search = await runSearch({ runtime, root, query: input.query, count: input.count });
|
|
109
|
+
return changeResult(runtime, root, `Found ${search.referenceIds.length} references.`, () => ({ search }));
|
|
110
|
+
};
|
|
111
|
+
export const inspirationResult = async (input, runtime) => {
|
|
112
|
+
const root = await resolveSlateRunDir(input.runDir);
|
|
113
|
+
const selected = await setSelection({ runtime, root, referenceIds: input.referenceIds });
|
|
114
|
+
return changeResult(runtime, root, `Selected ${selected.length} references.`, (view) => ({ selected, rev: view.rev }));
|
|
115
|
+
};
|
|
116
|
+
export const handoffResult = async (input, runtime) => {
|
|
117
|
+
const root = await resolveSlateRunDir(input.runDir);
|
|
118
|
+
const record = await recordHandoff({
|
|
119
|
+
runtime, root, handoffId: input.handoffId, kind: input.kind, versionId: input.versionId, options: input.options,
|
|
120
|
+
});
|
|
121
|
+
return changeResult(runtime, root, `Recorded the ${record.kind} hand-off request. Nothing was started.`, (view) => ({
|
|
122
|
+
handoff: view.handoffs.find((entry) => entry.handoffId === record.handoffId) ?? null,
|
|
123
|
+
rev: view.rev,
|
|
124
|
+
}));
|
|
125
|
+
};
|
|
126
|
+
/** Local files only, plus the cached readiness check: no network, no writes, no lock files. */
|
|
127
|
+
export const statusResult = async (input, runtime) => {
|
|
128
|
+
const root = await resolveSlateRunDir(input.runDir);
|
|
129
|
+
const { workspace } = await loadWorkspaceAt(root, runtime.now);
|
|
130
|
+
const liveness = await readLiveness(root, workspace, runtime.now().getTime());
|
|
131
|
+
const stamp = `${workspace.rev}:${liveness.digest}`;
|
|
132
|
+
if (typeof input.since === 'string' && input.since === stamp) {
|
|
133
|
+
return { content: [{ type: 'text', text: 'unchanged' }], structuredContent: { unchanged: true, stamp } };
|
|
134
|
+
}
|
|
135
|
+
const view = await buildView({ root, workspace, stateRoot: runtime.stateRoot, now: runtime.now(), local: await runtime.localImage() });
|
|
136
|
+
return { content: [{ type: 'text', text: `rev ${view.rev}` }], structuredContent: structured(view) };
|
|
137
|
+
};
|
|
138
|
+
const opResult = async (runtime, root, opId, text) => {
|
|
139
|
+
const { view } = await loadView(runtime, root);
|
|
140
|
+
return {
|
|
141
|
+
content: [{ type: 'text', text }],
|
|
142
|
+
structuredContent: { op: view.ops.find((op) => op.opId === opId) ?? null, view },
|
|
143
|
+
};
|
|
144
|
+
};
|
|
145
|
+
export const runResult = async (input, runtime) => {
|
|
146
|
+
const root = await resolveSlateRunDir(input.runDir);
|
|
147
|
+
const op = await runAction({ runtime, root, opId: input.opId, actionInput: input.action });
|
|
148
|
+
return opResult(runtime, root, op.opId, `Started ${op.kind}; it runs in the background on this Mac.`);
|
|
149
|
+
};
|
|
150
|
+
export const resumeResult = async (input, runtime) => {
|
|
151
|
+
const root = await resolveSlateRunDir(input.runDir);
|
|
152
|
+
const op = await resumeAction({ runtime, root, opId: input.opId });
|
|
153
|
+
return opResult(runtime, root, op.opId, `Resumed ${op.kind}; it continues in the background.`);
|
|
154
|
+
};
|
|
155
|
+
//# sourceMappingURL=mcp-slate-workspace-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-workspace-tools.js","sourceRoot":"","sources":["../src/mcp-slate-workspace-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-tool-definitions.d.ts","sourceRoot":"","sources":["../src/mcp-tool-definitions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mcp-tool-definitions.d.ts","sourceRoot":"","sources":["../src/mcp-tool-definitions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAmB/D,eAAO,MAAM,oBAAoB,EAAE,IAAI,EAyHtC,CAAC"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
+
import { DEFAULT_CORPUS_MODE } from './corpus-access.js';
|
|
2
|
+
import { MCP_WORKFLOW_TOOL_DEFINITIONS } from './mcp-workflow-tools.js';
|
|
1
3
|
import { CONVERSION_MODELS } from './conversion-models.js';
|
|
2
4
|
import { CONVERSION_OUTPUTS, LAYERDOC_INPUT_OUTPUTS } from './conversion-outputs.js';
|
|
3
|
-
import {
|
|
4
|
-
import { REFERENCE_IMAGE_SEARCH_MODE } from './reference-search-mode.js';
|
|
5
|
+
import { INSPIRATION_MODES } from './corpus-client.js';
|
|
5
6
|
import { APP_PROJECT_FRAMEWORKS, APP_PROJECT_LANGUAGES, APP_PROJECT_PACKAGINGS, APP_PROJECT_STYLINGS, WEB_PROJECT_FRAMEWORKS, WEB_PROJECT_LANGUAGES, WEB_PROJECT_PACKAGINGS, WEB_PROJECT_STYLINGS, } from './project-profiles.js';
|
|
6
7
|
const pathProperty = (description) => ({ type: 'string', minLength: 1, description });
|
|
7
8
|
export const MCP_TOOL_DEFINITIONS = [
|
|
9
|
+
...MCP_WORKFLOW_TOOL_DEFINITIONS,
|
|
8
10
|
{
|
|
9
11
|
name: 'design.convert',
|
|
10
12
|
description: 'Convert one local image into LayerDoc, responsive HTML, fixed design files, or a versioned web/native source-project bundle; LayerDoc v2 JSON is accepted for every output, including canonical republishing. This may consume conversion quota.',
|
|
@@ -71,12 +73,12 @@ export const MCP_TOOL_DEFINITIONS = [
|
|
|
71
73
|
},
|
|
72
74
|
{
|
|
73
75
|
name: 'design.corpus.status',
|
|
74
|
-
description: 'Read the current 12UI corpus release and idempotency capability without running a corpus query.',
|
|
76
|
+
description: 'Read the current 12UI corpus release and idempotency capability without authentication or running a corpus query.',
|
|
75
77
|
inputSchema: { type: 'object', additionalProperties: false, properties: {} },
|
|
76
78
|
},
|
|
77
79
|
{
|
|
78
80
|
name: 'design.corpus.inspire',
|
|
79
|
-
description: 'Retrieve and locally materialize a durable, diverse set of visual references from the 12UI corpus.
|
|
81
|
+
description: 'Retrieve and locally materialize a durable, diverse set of visual references from the 12UI corpus. Free without an account, subject to abuse limits; at most 24 references without credentials. Balanced is the default; explicit hedge requires an account for hosted planning. An attempt record is written before the request so ambiguous outcomes can be resumed safely.',
|
|
80
82
|
inputSchema: {
|
|
81
83
|
type: 'object',
|
|
82
84
|
additionalProperties: false,
|
|
@@ -84,16 +86,16 @@ export const MCP_TOOL_DEFINITIONS = [
|
|
|
84
86
|
properties: {
|
|
85
87
|
query: { type: 'string', minLength: 1 },
|
|
86
88
|
outDir: pathProperty('New directory in which to write attempt evidence, the manifest, and downloaded references.'),
|
|
87
|
-
mode: { type: 'string', enum: [...INSPIRATION_MODES], default:
|
|
89
|
+
mode: { type: 'string', enum: [...INSPIRATION_MODES], default: DEFAULT_CORPUS_MODE },
|
|
88
90
|
count: { type: 'integer', minimum: 1, maximum: 48, default: 4 },
|
|
89
|
-
referenceImagePath: pathProperty(
|
|
91
|
+
referenceImagePath: pathProperty('Optional local PNG, JPEG, or WebP used to condition retrieval. Balanced is the default; explicit hedge cannot carry a reference image.'),
|
|
90
92
|
idempotencyKey: { type: 'string', minLength: 1, maxLength: 128 },
|
|
91
93
|
},
|
|
92
94
|
},
|
|
93
95
|
},
|
|
94
96
|
{
|
|
95
97
|
name: 'design.corpus.resume',
|
|
96
|
-
description: 'Resume one incomplete corpus retrieval from its durable attempt directory, reusing the recorded idempotency key
|
|
98
|
+
description: 'Resume one incomplete corpus retrieval from its durable attempt directory, reusing the recorded idempotency key to preserve the recorded retrieval identity.',
|
|
97
99
|
inputSchema: {
|
|
98
100
|
type: 'object',
|
|
99
101
|
additionalProperties: false,
|