@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,31 @@
|
|
|
1
|
+
import { type ImproveRecord } from './improve-workspace.js';
|
|
2
|
+
import type { SlateWorkspaceView } from './slate-view-types.js';
|
|
3
|
+
/**
|
|
4
|
+
* The words the model reads after a workspace call.
|
|
5
|
+
*
|
|
6
|
+
* The workspace is an interactive card in hosts that render one; everywhere
|
|
7
|
+
* else (the Codex CLI, a host without MCP Apps) the model sees only this text,
|
|
8
|
+
* so it has to stand alone: the options and versions, where they are, what the
|
|
9
|
+
* user chose, what is running, and the exact command that continues from there.
|
|
10
|
+
*/
|
|
11
|
+
export type SlateImproveKit = {
|
|
12
|
+
kitDir: string;
|
|
13
|
+
record: ImproveRecord;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* The improve kit a draft run belongs to. `12ui improve` writes its draft into
|
|
17
|
+
* `<kit>/.state/draft/<run>` and its record into `<kit>/improve.json`; a draft
|
|
18
|
+
* run directory can also be handed in as the kit itself.
|
|
19
|
+
*/
|
|
20
|
+
export declare const findSlateImproveKit: (runDir: string) => Promise<SlateImproveKit | undefined>;
|
|
21
|
+
export declare const slatePickCommand: (kit: SlateImproveKit, slot: string) => string;
|
|
22
|
+
/** The one sentence about cost the workspace says anywhere, for a service conversion. */
|
|
23
|
+
export declare const SERVICE_COST_SENTENCE = "This uses the user's 12ui credits. Ask before running.";
|
|
24
|
+
/**
|
|
25
|
+
* `browser` is the text for a decision made in the browser workspace (`12ui workspace open`): the agent has no
|
|
26
|
+
* workspace tools there, so it is not told to confirm through one.
|
|
27
|
+
*/
|
|
28
|
+
export declare const slateFallbackText: (view: SlateWorkspaceView, options?: {
|
|
29
|
+
browser?: boolean;
|
|
30
|
+
}) => Promise<string>;
|
|
31
|
+
//# sourceMappingURL=mcp-slate-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-command.d.ts","sourceRoot":"","sources":["../src/mcp-slate-command.ts"],"names":[],"mappings":"AAIA,OAAO,EAAmC,KAAK,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAG7F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE;;;;;;;GAOG;AAEH,MAAM,MAAM,eAAe,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,CAAC;AAExE;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAAU,QAAQ,MAAM,KAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAa7F,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,KAAK,eAAe,EAAE,MAAM,MAAM,KAAG,MAGrE,CAAC;AAEF,yFAAyF;AACzF,eAAO,MAAM,qBAAqB,2DAA2D,CAAC;AA0C9F;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAU,MAAM,kBAAkB,EAAE,UAAS;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,KAAG,OAAO,CAAC,MAAM,CA2DrH,CAAC"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { stat } from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { shellArg } from './improve-kit-status.js';
|
|
4
|
+
import { improvePaths, readImproveRecord } from './improve-workspace.js';
|
|
5
|
+
import { SLATE_DATA_TOOL } from './mcp-slate-names.js';
|
|
6
|
+
import { convertChoiceWords, convertCommands } from './slate-handoff-options.js';
|
|
7
|
+
/**
|
|
8
|
+
* The improve kit a draft run belongs to. `12ui improve` writes its draft into
|
|
9
|
+
* `<kit>/.state/draft/<run>` and its record into `<kit>/improve.json`; a draft
|
|
10
|
+
* run directory can also be handed in as the kit itself.
|
|
11
|
+
*/
|
|
12
|
+
export const findSlateImproveKit = async (runDir) => {
|
|
13
|
+
const candidates = [runDir];
|
|
14
|
+
const parent = path.dirname(runDir);
|
|
15
|
+
if (path.basename(parent) === 'draft' && path.basename(path.dirname(parent)) === '.state') {
|
|
16
|
+
candidates.push(path.dirname(path.dirname(parent)));
|
|
17
|
+
}
|
|
18
|
+
for (const kitDir of candidates) {
|
|
19
|
+
const file = improvePaths(kitDir).record;
|
|
20
|
+
if (!(await stat(file).then((entry) => entry.isFile(), () => false)))
|
|
21
|
+
continue;
|
|
22
|
+
const record = await readImproveRecord(file);
|
|
23
|
+
if (record?.input?.value)
|
|
24
|
+
return { kitDir, record };
|
|
25
|
+
}
|
|
26
|
+
return undefined;
|
|
27
|
+
};
|
|
28
|
+
export const slatePickCommand = (kit, slot) => (`12ui improve ${shellArg(kit.record.input.value)} --out-dir ${shellArg(kit.kitDir)}`
|
|
29
|
+
+ ` --from pick --pick ${slot}`);
|
|
30
|
+
/** The one sentence about cost the workspace says anywhere, for a service conversion. */
|
|
31
|
+
export const SERVICE_COST_SENTENCE = "This uses the user's 12ui credits. Ask before running.";
|
|
32
|
+
const opLine = (op) => {
|
|
33
|
+
const detail = op.error ? `${op.error.code}: ${op.error.message}` : op.phase;
|
|
34
|
+
return `- ${op.kind} ${op.target ?? ''} ${op.state} (op ${op.opId}; ${detail}; attempt ${op.attempt}${op.resumable ? '; resumable' : ''})`;
|
|
35
|
+
};
|
|
36
|
+
const roundLine = (round) => {
|
|
37
|
+
const source = round.kind === 'root' ? 'the original draft'
|
|
38
|
+
: round.kind === 'like' ? `more like ${round.fromVersionId}${round.note ? `, steer: ${round.note}` : ''}`
|
|
39
|
+
: `new options${round.note ? `, steer: ${round.note}` : ''}`;
|
|
40
|
+
const references = round.referenceIds.length > 0 ? `; references (${round.referenceSource}): ${round.referenceIds.join(', ')}` : '';
|
|
41
|
+
return `- Round ${round.index} (${round.state}, ${round.readyCount} of ${round.count} ready): ${source}${references}`;
|
|
42
|
+
};
|
|
43
|
+
const HANDOFF_LINES = 5;
|
|
44
|
+
/** One block per hand-off, newest first: what was asked, verbatim, and how to carry it out. */
|
|
45
|
+
const handoffBlock = (handoff) => {
|
|
46
|
+
const image = handoff.imagePath ?? 'missing';
|
|
47
|
+
const lines = [`Hand-off ${handoff.handoffId} (${handoff.kind}) for ${handoff.label} ${handoff.versionId} sha256 ${handoff.sha256} at ${handoff.requestedAt}. Image: ${image}.`];
|
|
48
|
+
if (handoff.kind === 'branch') {
|
|
49
|
+
lines.push(`Explanation, verbatim: ${handoff.options.explanation}`, 'Use it as the recipe concept and carry it out through this session (session capabilities text and image, so it is free): design.workflow.prepare with recipe branch and {concept, source: <the image path>, scope, maxScreens}, choosing scope (page or site) from the words, execute each step through your own tools, then continue to the slot operations.', 'The paid alternative is the hosted legacy command; ask the user before running it:', ` 12ui branch execute --start ${shellArg(image)} --concept <the explanation> --scope page|site --convert html`);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
const commands = handoff.imagePath === null ? [] : convertCommands(handoff.options, handoff.imagePath);
|
|
53
|
+
lines.push(`Convert ${handoff.label} to ${convertChoiceWords(handoff.options)}. This is a 12ui CLI job: run the command${commands.length === 1 ? '' : 's'} below in a shell, in order.${handoff.options.engine === 'local' ? ' design.workflow convert cannot do it (it offers only HTML or LayerDoc and takes no engine or asset options).' : ''}`, ...(commands.length > 0 ? commands.map((command) => ` ${command}`) : [' (the image copy is missing, so there is no command; ask the user to send it again)']));
|
|
54
|
+
if (handoff.options.engine === 'local' && handoff.options.output !== 'html') {
|
|
55
|
+
lines.push(`The first command builds the local HTML run and prints JSON that names its run directory; the second derives ${handoff.options.output === 'react' ? 'React' : 'the assets'} from that run into a new, empty directory you choose.`);
|
|
56
|
+
}
|
|
57
|
+
if (handoff.options.engine === 'service')
|
|
58
|
+
lines.push(SERVICE_COST_SENTENCE);
|
|
59
|
+
}
|
|
60
|
+
return lines;
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* `browser` is the text for a decision made in the browser workspace (`12ui workspace open`): the agent has no
|
|
64
|
+
* workspace tools there, so it is not told to confirm through one.
|
|
65
|
+
*/
|
|
66
|
+
export const slateFallbackText = async (view, options = {}) => {
|
|
67
|
+
if (view.runDir === null || view.candidates.length === 0)
|
|
68
|
+
return '';
|
|
69
|
+
const lines = [
|
|
70
|
+
`12ui Design workspace ${view.workspaceId}, rev ${view.rev}: ${view.candidates.length} options in ${view.rounds.length} round(s).`,
|
|
71
|
+
view.local.image.ready
|
|
72
|
+
? 'Design and Edit are ready on this Mac (local Codex, free).'
|
|
73
|
+
: `Design and Edit are not available on this Mac: ${view.local.image.reason ?? 'Codex is not ready.'}`,
|
|
74
|
+
view.pick
|
|
75
|
+
? `Selected ${view.pick.label} (${view.pick.versionId}) on ${view.pick.pickedAt}${view.pick.reason ? `: ${view.pick.reason}` : '.'}`
|
|
76
|
+
: 'Nothing has been selected yet.',
|
|
77
|
+
'Rounds:',
|
|
78
|
+
...view.rounds.map(roundLine),
|
|
79
|
+
'Options and versions:',
|
|
80
|
+
...view.candidates.flatMap((candidate) => [
|
|
81
|
+
`- ${candidate.label} (${candidate.state}${candidate.error ? `: ${candidate.error}` : ''})${candidate.referenceId ? ` from ${candidate.referenceId}` : ''}`,
|
|
82
|
+
...candidate.versionIds.map((id) => {
|
|
83
|
+
const version = view.versions.find((entry) => entry.versionId === id);
|
|
84
|
+
const edit = version.prompt ? ` edit: ${JSON.stringify(version.prompt)}${version.marks ? ` with ${version.marks.strokes} drawn stroke(s)` : ''}` : '';
|
|
85
|
+
return ` ${version.label} ${version.versionId} ${version.width}x${version.height} ${version.fileState} sha256 ${version.sha256} ${version.path}${edit}`;
|
|
86
|
+
}),
|
|
87
|
+
]),
|
|
88
|
+
];
|
|
89
|
+
if (view.ops.length > 0)
|
|
90
|
+
lines.push('Work:', ...view.ops.map(opLine));
|
|
91
|
+
if (view.inspiration.selected.length > 0 || view.inspiration.searches.length > 0) {
|
|
92
|
+
lines.push(`Inspiration: ${view.inspiration.selected.length} selected (${view.inspiration.selected.join(', ') || 'none'}); ${view.inspiration.searches.length} search(es).`);
|
|
93
|
+
}
|
|
94
|
+
for (const handoff of view.handoffs.slice(-HANDOFF_LINES).reverse())
|
|
95
|
+
lines.push('', ...handoffBlock(handoff));
|
|
96
|
+
lines.push('');
|
|
97
|
+
const kit = await findSlateImproveKit(view.runDir);
|
|
98
|
+
const pick = view.pick;
|
|
99
|
+
const candidate = pick && view.candidates.find((entry) => entry.versionIds.includes(pick.versionId));
|
|
100
|
+
const version = pick && view.versions.find((entry) => entry.versionId === pick.versionId);
|
|
101
|
+
if (pick && kit && candidate && version && version.kind === 'generation' && candidate.roundId === 'r1') {
|
|
102
|
+
lines.push('The recorded selection is an original option of an improve kit, so it continues with:', ` ${slatePickCommand(kit, candidate.label)}`);
|
|
103
|
+
}
|
|
104
|
+
else if (pick && pick.imagePath === null) {
|
|
105
|
+
lines.push(`The recorded selection's durable copy is ${pick.fileState === 'changed' ? 'no longer the image that was selected' : 'missing'}, so there is no selected file to build from. Do not name one. Ask the user to select again in the workspace${version && version.fileState === 'ok' ? `, or build from the workspace file (${version.path}) if they confirm that is the image they meant` : ''}.`);
|
|
106
|
+
}
|
|
107
|
+
else if (pick?.imagePath) {
|
|
108
|
+
lines.push('The recorded selection is not an original option of an improve kit, so `12ui improve --from pick` does not apply. Build from the selected image instead (it is a durable copy that survives a temp sweep):', ` 12ui branch execute --start ${shellArg(pick.imagePath)} --scope page|site --convert html`);
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
lines.push('If no interactive workspace is shown, look at the images above, choose a version, and build from its file:', ' 12ui branch execute --start <version.png> --scope page|site --convert html');
|
|
112
|
+
}
|
|
113
|
+
lines.push(options.browser
|
|
114
|
+
? `The selection and any hand-off made in the browser workspace are recorded in ${path.join(view.runDir, 'workspace.json')}.`
|
|
115
|
+
: `A selection or hand-off made in the workspace is recorded in ${path.join(view.runDir, 'workspace.json')}; confirm it with ${SLATE_DATA_TOOL} (compare pick.versionId, pick.sha256 and the file at pick.imagePath, or the hand-off id and its image) before acting on any message that says one was made.`);
|
|
116
|
+
return lines.join('\n');
|
|
117
|
+
};
|
|
118
|
+
//# sourceMappingURL=mcp-slate-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-command.js","sourceRoot":"","sources":["../src/mcp-slate-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Image bytes for the workspace, delivered through the app-only image tool: the
|
|
3
|
+
* sandboxed app frame cannot read local files, and a thumbnail keeps a grid of
|
|
4
|
+
* 1.4 MB PNGs from crossing the bridge as base64. No tool result may exceed
|
|
5
|
+
* 5.5 MB raw: the host closes the transport on a line over 8 MiB, which would
|
|
6
|
+
* kill every in-flight call.
|
|
7
|
+
*/
|
|
8
|
+
export declare const SLATE_THUMB_WIDTH = 480;
|
|
9
|
+
export declare const SLATE_IMAGE_MAX_BYTES = 5500000;
|
|
10
|
+
export type SlateImageSize = 'thumb' | 'full';
|
|
11
|
+
export type SlateImage = {
|
|
12
|
+
bytes: Buffer;
|
|
13
|
+
width: number;
|
|
14
|
+
height: number;
|
|
15
|
+
mimeType: 'image/jpeg' | 'image/png';
|
|
16
|
+
};
|
|
17
|
+
export declare const isSlateImageSize: (value: unknown) => value is SlateImageSize;
|
|
18
|
+
export declare const slateImage: (source: Buffer, size: SlateImageSize, dimensions: {
|
|
19
|
+
width: number;
|
|
20
|
+
height: number;
|
|
21
|
+
}) => Promise<SlateImage>;
|
|
22
|
+
//# sourceMappingURL=mcp-slate-image.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-image.d.ts","sourceRoot":"","sources":["../src/mcp-slate-image.ts"],"names":[],"mappings":"AAIA;;;;;;GAMG;AAEH,eAAO,MAAM,iBAAiB,MAAM,CAAC;AACrC,eAAO,MAAM,qBAAqB,UAAY,CAAC;AAG/C,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,MAAM,CAAC;AAE9C,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,YAAY,GAAG,WAAW,CAAC;CACtC,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,cAE1D,CAAC;AAEF,eAAO,MAAM,UAAU,GACrB,QAAQ,MAAM,EACd,MAAM,cAAc,EACpB,YAAY;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,KAC5C,OAAO,CAAC,UAAU,CAapB,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import sharp from 'sharp';
|
|
2
|
+
import { SlateError } from './slate-errors.js';
|
|
3
|
+
/**
|
|
4
|
+
* Image bytes for the workspace, delivered through the app-only image tool: the
|
|
5
|
+
* sandboxed app frame cannot read local files, and a thumbnail keeps a grid of
|
|
6
|
+
* 1.4 MB PNGs from crossing the bridge as base64. No tool result may exceed
|
|
7
|
+
* 5.5 MB raw: the host closes the transport on a line over 8 MiB, which would
|
|
8
|
+
* kill every in-flight call.
|
|
9
|
+
*/
|
|
10
|
+
export const SLATE_THUMB_WIDTH = 480;
|
|
11
|
+
export const SLATE_IMAGE_MAX_BYTES = 5_500_000;
|
|
12
|
+
const THUMB_QUALITY = 82;
|
|
13
|
+
export const isSlateImageSize = (value) => (value === 'thumb' || value === 'full');
|
|
14
|
+
export const slateImage = async (source, size, dimensions) => {
|
|
15
|
+
if (size === 'full') {
|
|
16
|
+
if (source.byteLength > SLATE_IMAGE_MAX_BYTES) {
|
|
17
|
+
throw new SlateError('too_large', `This image is ${source.byteLength} bytes; the workspace shows at most ${SLATE_IMAGE_MAX_BYTES} bytes at full size. Open the file instead.`);
|
|
18
|
+
}
|
|
19
|
+
return { bytes: source, width: dimensions.width, height: dimensions.height, mimeType: 'image/png' };
|
|
20
|
+
}
|
|
21
|
+
const { data, info } = await sharp(source, { animated: false, failOn: 'warning' })
|
|
22
|
+
.resize({ width: SLATE_THUMB_WIDTH, withoutEnlargement: true })
|
|
23
|
+
.flatten({ background: '#ffffff' })
|
|
24
|
+
.jpeg({ quality: THUMB_QUALITY })
|
|
25
|
+
.toBuffer({ resolveWithObject: true });
|
|
26
|
+
return { bytes: data, width: info.width, height: info.height, mimeType: 'image/jpeg' };
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=mcp-slate-image.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-image.js","sourceRoot":"","sources":["../src/mcp-slate-image.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C;;;;;;GAMG;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AACrC,MAAM,CAAC,MAAM,qBAAqB,GAAG,SAAS,CAAC;AAC/C,MAAM,aAAa,GAAG,EAAE,CAAC;AAWzB,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAc,EAA2B,EAAE,CAAC,CAC3E,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,MAAM,CACtC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAC7B,MAAc,EACd,IAAoB,EACpB,UAA6C,EACxB,EAAE;IACvB,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,IAAI,MAAM,CAAC,UAAU,GAAG,qBAAqB,EAAE,CAAC;YAC9C,MAAM,IAAI,UAAU,CAAC,WAAW,EAAE,iBAAiB,MAAM,CAAC,UAAU,uCAAuC,qBAAqB,6CAA6C,CAAC,CAAC;QACjL,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;IACtG,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;SAC/E,MAAM,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC;SAC9D,OAAO,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;SAClC,IAAI,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;SAChC,QAAQ,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;AACzF,CAAC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The most recent ACTIVE workspace: a finished draft run the review command
|
|
3
|
+
* would find (system temp `12ui-*` runs and `./.12ui/*` runs), ordered by the
|
|
4
|
+
* later of when its candidates were written and when its workspace record last
|
|
5
|
+
* changed, so a workspace that added rounds stays "latest". This is what the
|
|
6
|
+
* sidebar entry opens, since it is invoked with no arguments and cannot be
|
|
7
|
+
* told which run the user means.
|
|
8
|
+
*/
|
|
9
|
+
export declare const findLatestSlateRunDir: (args?: {
|
|
10
|
+
cwd?: string;
|
|
11
|
+
tempRoot?: string;
|
|
12
|
+
}) => Promise<string | undefined>;
|
|
13
|
+
//# sourceMappingURL=mcp-slate-latest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-latest.d.ts","sourceRoot":"","sources":["../src/mcp-slate-latest.ts"],"names":[],"mappings":"AAOA;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,GAChC,OAAM;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,KAC7C,OAAO,CAAC,MAAM,GAAG,SAAS,CAgB5B,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { stat } from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { DRAFT_COMPLETION_FILENAME } from './draft-workspace.js';
|
|
4
|
+
import { discoverReviewModel } from './review-discovery.js';
|
|
5
|
+
import { workspaceFile } from './slate-paths.js';
|
|
6
|
+
/**
|
|
7
|
+
* The most recent ACTIVE workspace: a finished draft run the review command
|
|
8
|
+
* would find (system temp `12ui-*` runs and `./.12ui/*` runs), ordered by the
|
|
9
|
+
* later of when its candidates were written and when its workspace record last
|
|
10
|
+
* changed, so a workspace that added rounds stays "latest". This is what the
|
|
11
|
+
* sidebar entry opens, since it is invoked with no arguments and cannot be
|
|
12
|
+
* told which run the user means.
|
|
13
|
+
*/
|
|
14
|
+
export const findLatestSlateRunDir = async (args = {}) => {
|
|
15
|
+
const model = await discoverReviewModel({
|
|
16
|
+
all: true,
|
|
17
|
+
...(args.cwd ? { cwd: args.cwd } : {}),
|
|
18
|
+
...(args.tempRoot ? { tempRoot: args.tempRoot } : {}),
|
|
19
|
+
});
|
|
20
|
+
let latest;
|
|
21
|
+
for (const run of model.runs) {
|
|
22
|
+
if (!run.items.some((item) => item.group === 'drafts'))
|
|
23
|
+
continue;
|
|
24
|
+
const completion = await stat(path.join(run.root, DRAFT_COMPLETION_FILENAME)).catch(() => undefined);
|
|
25
|
+
if (!completion?.isFile())
|
|
26
|
+
continue;
|
|
27
|
+
const record = await stat(workspaceFile(run.root)).catch(() => undefined);
|
|
28
|
+
const activeAt = Math.max(completion.mtimeMs, record?.isFile() ? record.mtimeMs : 0);
|
|
29
|
+
if (!latest || activeAt > latest.activeAt)
|
|
30
|
+
latest = { root: run.root, activeAt };
|
|
31
|
+
}
|
|
32
|
+
return latest?.root;
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=mcp-slate-latest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-latest.js","sourceRoot":"","sources":["../src/mcp-slate-latest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,EACxC,OAA4C,EAAE,EACjB,EAAE;IAC/B,MAAM,KAAK,GAAG,MAAM,mBAAmB,CAAC;QACtC,GAAG,EAAE,IAAI;QACT,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACtD,CAAC,CAAC;IACH,IAAI,MAAsD,CAAC;IAC3D,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC;YAAE,SAAS;QACjE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,yBAAyB,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACrG,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE;YAAE,SAAS;QACpC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC1E,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrF,IAAI,CAAC,MAAM,IAAI,QAAQ,GAAG,MAAM,CAAC,QAAQ;YAAE,MAAM,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC;IACnF,CAAC;IACD,OAAO,MAAM,EAAE,IAAI,CAAC;AACtB,CAAC,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Names on the wire for the design workspace, in one place so the tool
|
|
3
|
+
* catalog, the handler, the model-facing text, and the app script cannot drift.
|
|
4
|
+
* The values are the contract's `SLATE_UI_TOOLS`; `mcp-slate-names.test.ts`
|
|
5
|
+
* pins the two lists together.
|
|
6
|
+
*/
|
|
7
|
+
export declare const SLATE_SHOW_TOOL: "design.slate.show";
|
|
8
|
+
export declare const SLATE_DATA_TOOL: "design.slate.data";
|
|
9
|
+
export declare const SLATE_OPEN_TOOL: "design.slate.open";
|
|
10
|
+
export declare const SLATE_IMAGE_TOOL: "design.slate.image";
|
|
11
|
+
export declare const SLATE_REFERENCE_TOOL: "design.slate.reference";
|
|
12
|
+
export declare const SLATE_INSPIRE_TOOL: "design.slate.inspire";
|
|
13
|
+
export declare const SLATE_INSPIRATION_TOOL: "design.slate.inspiration";
|
|
14
|
+
export declare const SLATE_PICK_TOOL: "design.slate.pick";
|
|
15
|
+
export declare const SLATE_RUN_TOOL: "design.slate.run";
|
|
16
|
+
export declare const SLATE_RESUME_TOOL: "design.slate.resume";
|
|
17
|
+
export declare const SLATE_STATUS_TOOL: "design.slate.status";
|
|
18
|
+
export declare const SLATE_HANDOFF_TOOL: "design.slate.handoff";
|
|
19
|
+
export declare const SLATE_TOOL_NAMES: readonly ["design.slate.show", "design.slate.data", "design.slate.open", "design.slate.image", "design.slate.reference", "design.slate.inspire", "design.slate.inspiration", "design.slate.pick", "design.slate.run", "design.slate.resume", "design.slate.status", "design.slate.handoff"];
|
|
20
|
+
/** The tools only the app may call: the host hides them from the model. */
|
|
21
|
+
export declare const SLATE_APP_ONLY_TOOL_NAMES: readonly ["design.slate.image", "design.slate.reference", "design.slate.inspire", "design.slate.inspiration", "design.slate.pick", "design.slate.run", "design.slate.resume", "design.slate.status", "design.slate.handoff"];
|
|
22
|
+
export declare const SLATE_RESOURCE_URI = "ui://12ui/slate.html";
|
|
23
|
+
/** MCP Apps: an HTML document rendered by the host in a sandboxed frame. */
|
|
24
|
+
export declare const SLATE_RESOURCE_MIME_TYPE = "text/html;profile=mcp-app";
|
|
25
|
+
//# sourceMappingURL=mcp-slate-names.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-names.d.ts","sourceRoot":"","sources":["../src/mcp-slate-names.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,eAAO,MAAM,eAAe,qBAAsB,CAAC;AACnD,eAAO,MAAM,eAAe,qBAAsB,CAAC;AACnD,eAAO,MAAM,eAAe,qBAAsB,CAAC;AACnD,eAAO,MAAM,gBAAgB,sBAAuB,CAAC;AACrD,eAAO,MAAM,oBAAoB,0BAA2B,CAAC;AAC7D,eAAO,MAAM,kBAAkB,wBAAyB,CAAC;AACzD,eAAO,MAAM,sBAAsB,4BAA6B,CAAC;AACjE,eAAO,MAAM,eAAe,qBAAsB,CAAC;AACnD,eAAO,MAAM,cAAc,oBAAqB,CAAC;AACjD,eAAO,MAAM,iBAAiB,uBAAwB,CAAC;AACvD,eAAO,MAAM,iBAAiB,uBAAwB,CAAC;AACvD,eAAO,MAAM,kBAAkB,wBAAyB,CAAC;AAEzD,eAAO,MAAM,gBAAgB,6RAanB,CAAC;AAEX,2EAA2E;AAC3E,eAAO,MAAM,yBAAyB,8NAU5B,CAAC;AAEX,eAAO,MAAM,kBAAkB,yBAAyB,CAAC;AACzD,4EAA4E;AAC5E,eAAO,MAAM,wBAAwB,8BAA8B,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { SLATE_UI_TOOLS } from './slate-view-contract.js';
|
|
2
|
+
/**
|
|
3
|
+
* Names on the wire for the design workspace, in one place so the tool
|
|
4
|
+
* catalog, the handler, the model-facing text, and the app script cannot drift.
|
|
5
|
+
* The values are the contract's `SLATE_UI_TOOLS`; `mcp-slate-names.test.ts`
|
|
6
|
+
* pins the two lists together.
|
|
7
|
+
*/
|
|
8
|
+
export const SLATE_SHOW_TOOL = SLATE_UI_TOOLS.show;
|
|
9
|
+
export const SLATE_DATA_TOOL = SLATE_UI_TOOLS.data;
|
|
10
|
+
export const SLATE_OPEN_TOOL = SLATE_UI_TOOLS.open;
|
|
11
|
+
export const SLATE_IMAGE_TOOL = SLATE_UI_TOOLS.image;
|
|
12
|
+
export const SLATE_REFERENCE_TOOL = SLATE_UI_TOOLS.reference;
|
|
13
|
+
export const SLATE_INSPIRE_TOOL = SLATE_UI_TOOLS.inspire;
|
|
14
|
+
export const SLATE_INSPIRATION_TOOL = SLATE_UI_TOOLS.inspiration;
|
|
15
|
+
export const SLATE_PICK_TOOL = SLATE_UI_TOOLS.pick;
|
|
16
|
+
export const SLATE_RUN_TOOL = SLATE_UI_TOOLS.run;
|
|
17
|
+
export const SLATE_RESUME_TOOL = SLATE_UI_TOOLS.resume;
|
|
18
|
+
export const SLATE_STATUS_TOOL = SLATE_UI_TOOLS.status;
|
|
19
|
+
export const SLATE_HANDOFF_TOOL = SLATE_UI_TOOLS.handoff;
|
|
20
|
+
export const SLATE_TOOL_NAMES = [
|
|
21
|
+
SLATE_SHOW_TOOL,
|
|
22
|
+
SLATE_DATA_TOOL,
|
|
23
|
+
SLATE_OPEN_TOOL,
|
|
24
|
+
SLATE_IMAGE_TOOL,
|
|
25
|
+
SLATE_REFERENCE_TOOL,
|
|
26
|
+
SLATE_INSPIRE_TOOL,
|
|
27
|
+
SLATE_INSPIRATION_TOOL,
|
|
28
|
+
SLATE_PICK_TOOL,
|
|
29
|
+
SLATE_RUN_TOOL,
|
|
30
|
+
SLATE_RESUME_TOOL,
|
|
31
|
+
SLATE_STATUS_TOOL,
|
|
32
|
+
SLATE_HANDOFF_TOOL,
|
|
33
|
+
];
|
|
34
|
+
/** The tools only the app may call: the host hides them from the model. */
|
|
35
|
+
export const SLATE_APP_ONLY_TOOL_NAMES = [
|
|
36
|
+
SLATE_IMAGE_TOOL,
|
|
37
|
+
SLATE_REFERENCE_TOOL,
|
|
38
|
+
SLATE_INSPIRE_TOOL,
|
|
39
|
+
SLATE_INSPIRATION_TOOL,
|
|
40
|
+
SLATE_PICK_TOOL,
|
|
41
|
+
SLATE_RUN_TOOL,
|
|
42
|
+
SLATE_RESUME_TOOL,
|
|
43
|
+
SLATE_STATUS_TOOL,
|
|
44
|
+
SLATE_HANDOFF_TOOL,
|
|
45
|
+
];
|
|
46
|
+
export const SLATE_RESOURCE_URI = 'ui://12ui/slate.html';
|
|
47
|
+
/** MCP Apps: an HTML document rendered by the host in a sandboxed frame. */
|
|
48
|
+
export const SLATE_RESOURCE_MIME_TYPE = 'text/html;profile=mcp-app';
|
|
49
|
+
//# sourceMappingURL=mcp-slate-names.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-names.js","sourceRoot":"","sources":["../src/mcp-slate-names.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,cAAc,CAAC,IAAI,CAAC;AACnD,MAAM,CAAC,MAAM,eAAe,GAAG,cAAc,CAAC,IAAI,CAAC;AACnD,MAAM,CAAC,MAAM,eAAe,GAAG,cAAc,CAAC,IAAI,CAAC;AACnD,MAAM,CAAC,MAAM,gBAAgB,GAAG,cAAc,CAAC,KAAK,CAAC;AACrD,MAAM,CAAC,MAAM,oBAAoB,GAAG,cAAc,CAAC,SAAS,CAAC;AAC7D,MAAM,CAAC,MAAM,kBAAkB,GAAG,cAAc,CAAC,OAAO,CAAC;AACzD,MAAM,CAAC,MAAM,sBAAsB,GAAG,cAAc,CAAC,WAAW,CAAC;AACjE,MAAM,CAAC,MAAM,eAAe,GAAG,cAAc,CAAC,IAAI,CAAC;AACnD,MAAM,CAAC,MAAM,cAAc,GAAG,cAAc,CAAC,GAAG,CAAC;AACjD,MAAM,CAAC,MAAM,iBAAiB,GAAG,cAAc,CAAC,MAAM,CAAC;AACvD,MAAM,CAAC,MAAM,iBAAiB,GAAG,cAAc,CAAC,MAAM,CAAC;AACvD,MAAM,CAAC,MAAM,kBAAkB,GAAG,cAAc,CAAC,OAAO,CAAC;AAEzD,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,eAAe;IACf,eAAe;IACf,eAAe;IACf,gBAAgB;IAChB,oBAAoB;IACpB,kBAAkB;IAClB,sBAAsB;IACtB,eAAe;IACf,cAAc;IACd,iBAAiB;IACjB,iBAAiB;IACjB,kBAAkB;CACV,CAAC;AAEX,2EAA2E;AAC3E,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,gBAAgB;IAChB,oBAAoB;IACpB,kBAAkB;IAClB,sBAAsB;IACtB,eAAe;IACf,cAAc;IACd,iBAAiB;IACjB,iBAAiB;IACjB,kBAAkB;CACV,CAAC;AAEX,MAAM,CAAC,MAAM,kBAAkB,GAAG,sBAAsB,CAAC;AACzD,4EAA4E;AAC5E,MAAM,CAAC,MAAM,wBAAwB,GAAG,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ReadResourceResult, Resource } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
export declare const SLATE_RESOURCE: Resource;
|
|
3
|
+
export declare const listSlateResources: () => Resource[];
|
|
4
|
+
export declare const readSlateResource: (uri: string) => ReadResourceResult;
|
|
5
|
+
//# sourceMappingURL=mcp-slate-resource.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-resource.d.ts","sourceRoot":"","sources":["../src/mcp-slate-resource.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAkBvF,eAAO,MAAM,cAAc,EAAE,QAO5B,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAO,QAAQ,EAAsB,CAAC;AAErE,eAAO,MAAM,iBAAiB,GAAI,KAAK,MAAM,KAAG,kBAY/C,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { ErrorCode, McpError } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
import { SLATE_RESOURCE_MIME_TYPE, SLATE_RESOURCE_URI } from './mcp-slate-names.js';
|
|
3
|
+
import { SLATE_UI_HTML } from './mcp-slate-ui.js';
|
|
4
|
+
/**
|
|
5
|
+
* The workspace view as an MCP Apps `ui://` resource. `_meta.ui` is the open MCP
|
|
6
|
+
* Apps declaration (a border around the card); `_meta["openai/ui"]` is the
|
|
7
|
+
* Codex/ChatGPT extension that says which display modes the view supports. No
|
|
8
|
+
* `csp` is declared: the view makes no request of its own, so the host's
|
|
9
|
+
* default (nothing external) is exactly right.
|
|
10
|
+
*/
|
|
11
|
+
const SLATE_RESOURCE_META = {
|
|
12
|
+
ui: { prefersBorder: true },
|
|
13
|
+
'openai/ui': { availableDisplayModes: ['inline', 'fullscreen'], preferredDisplayMode: 'inline' },
|
|
14
|
+
};
|
|
15
|
+
export const SLATE_RESOURCE = {
|
|
16
|
+
uri: SLATE_RESOURCE_URI,
|
|
17
|
+
name: '12ui design workspace',
|
|
18
|
+
title: 'Design workspace',
|
|
19
|
+
description: 'Design workspace: the options of a 12ui draft as one large image with the others as thumbnails and Select; opened, rounds of new options, edits with lineage, and Design, Edit, Branch and Convert.',
|
|
20
|
+
mimeType: SLATE_RESOURCE_MIME_TYPE,
|
|
21
|
+
_meta: SLATE_RESOURCE_META,
|
|
22
|
+
};
|
|
23
|
+
export const listSlateResources = () => [SLATE_RESOURCE];
|
|
24
|
+
export const readSlateResource = (uri) => {
|
|
25
|
+
if (uri !== SLATE_RESOURCE_URI) {
|
|
26
|
+
throw new McpError(ErrorCode.InvalidParams, `Unknown resource: ${uri}`);
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
contents: [{
|
|
30
|
+
uri: SLATE_RESOURCE_URI,
|
|
31
|
+
mimeType: SLATE_RESOURCE_MIME_TYPE,
|
|
32
|
+
text: SLATE_UI_HTML,
|
|
33
|
+
_meta: SLATE_RESOURCE_META,
|
|
34
|
+
}],
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=mcp-slate-resource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-resource.js","sourceRoot":"","sources":["../src/mcp-slate-resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAGzE,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD;;;;;;GAMG;AAEH,MAAM,mBAAmB,GAAG;IAC1B,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE;IAC3B,WAAW,EAAE,EAAE,qBAAqB,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE,oBAAoB,EAAE,QAAQ,EAAE;CACjG,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAa;IACtC,GAAG,EAAE,kBAAkB;IACvB,IAAI,EAAE,uBAAuB;IAC7B,KAAK,EAAE,kBAAkB;IACzB,WAAW,EAAE,qMAAqM;IAClN,QAAQ,EAAE,wBAAwB;IAClC,KAAK,EAAE,mBAAmB;CAC3B,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAe,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC;AAErE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAW,EAAsB,EAAE;IACnE,IAAI,GAAG,KAAK,kBAAkB,EAAE,CAAC;QAC/B,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,aAAa,EAAE,qBAAqB,GAAG,EAAE,CAAC,CAAC;IAC1E,CAAC;IACD,OAAO;QACL,QAAQ,EAAE,CAAC;gBACT,GAAG,EAAE,kBAAkB;gBACvB,QAAQ,EAAE,wBAAwB;gBAClC,IAAI,EAAE,aAAa;gBACnB,KAAK,EAAE,mBAAmB;aAC3B,CAAC;KACH,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The finished `12ui draft` run at the root of a design workspace.
|
|
3
|
+
*
|
|
4
|
+
* Every path the workspace touches is derived from a run directory that has
|
|
5
|
+
* been proven to be a run, never from a caller-supplied slot or file name: the
|
|
6
|
+
* slate tools are callable by an app running inside another product's window,
|
|
7
|
+
* so a `runDir` is untrusted input until `resolveSlateRunDir` accepts it.
|
|
8
|
+
*/
|
|
9
|
+
export type SlateRootCandidate = {
|
|
10
|
+
/** Lower-case slot letter, as the completion record names it. */
|
|
11
|
+
slot: string;
|
|
12
|
+
/** The A-P file name of `candidates/<localSlot>.png`. */
|
|
13
|
+
localSlot: string;
|
|
14
|
+
/** The completion record's digest of the file, when it recorded one. */
|
|
15
|
+
sha256: string | undefined;
|
|
16
|
+
/** Absolute path inside the run directory (already confined). */
|
|
17
|
+
file: string;
|
|
18
|
+
};
|
|
19
|
+
export type SlateRootRun = {
|
|
20
|
+
runId: string;
|
|
21
|
+
runDir: string;
|
|
22
|
+
candidates: SlateRootCandidate[];
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* The one door from a caller-supplied path to a run directory.
|
|
26
|
+
*
|
|
27
|
+
* Accepts only a real directory that holds `draft.complete.json` as a regular
|
|
28
|
+
* file inside itself; `/etc`, an arbitrary project folder, and a completion
|
|
29
|
+
* marker that is a symlink out of the directory are all refused before any
|
|
30
|
+
* other file is opened.
|
|
31
|
+
*/
|
|
32
|
+
export declare const resolveSlateRunDir: (runDir: unknown) => Promise<string>;
|
|
33
|
+
/**
|
|
34
|
+
* Candidate files are read from `<run>/candidates/<basename>`: the completion
|
|
35
|
+
* record stores the absolute path of the directory the draft was written to,
|
|
36
|
+
* which is a temp path that no longer exists once the run has moved. The file
|
|
37
|
+
* itself is confined here (a link out of the run is refused); whether its
|
|
38
|
+
* bytes still match is a per-version state, not a reason to refuse the run.
|
|
39
|
+
*/
|
|
40
|
+
export declare const readSlateRootRun: (runDir: string) => Promise<SlateRootRun>;
|
|
41
|
+
//# sourceMappingURL=mcp-slate-run.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-run.d.ts","sourceRoot":"","sources":["../src/mcp-slate-run.ts"],"names":[],"mappings":"AAWA;;;;;;;GAOG;AAEH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAC;IAClB,wEAAwE;IACxE,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,kBAAkB,EAAE,CAAA;CAAE,CAAC;AAM/F;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,GAAU,QAAQ,OAAO,KAAG,OAAO,CAAC,MAAM,CAqBxE,CAAC;AAYF;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAAU,QAAQ,MAAM,KAAG,OAAO,CAAC,YAAY,CA8B3E,CAAC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { readFile, realpath, stat } from 'node:fs/promises';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { DRAFT_CANDIDATES_DIRECTORY, DRAFT_COMPLETION_FILENAME, } from './draft-workspace.js';
|
|
4
|
+
import { LOCAL_SLOT_PATTERN } from './slate-ids.js';
|
|
5
|
+
import { inside } from './slate-paths.js';
|
|
6
|
+
const isRecord = (value) => (!!value && typeof value === 'object' && !Array.isArray(value));
|
|
7
|
+
/**
|
|
8
|
+
* The one door from a caller-supplied path to a run directory.
|
|
9
|
+
*
|
|
10
|
+
* Accepts only a real directory that holds `draft.complete.json` as a regular
|
|
11
|
+
* file inside itself; `/etc`, an arbitrary project folder, and a completion
|
|
12
|
+
* marker that is a symlink out of the directory are all refused before any
|
|
13
|
+
* other file is opened.
|
|
14
|
+
*/
|
|
15
|
+
export const resolveSlateRunDir = async (runDir) => {
|
|
16
|
+
if (typeof runDir !== 'string' || !runDir.trim())
|
|
17
|
+
throw new Error('runDir is required');
|
|
18
|
+
const requested = path.resolve(runDir.trim());
|
|
19
|
+
let resolved;
|
|
20
|
+
try {
|
|
21
|
+
resolved = await realpath(requested);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
throw new Error(`runDir does not exist: ${requested}`);
|
|
25
|
+
}
|
|
26
|
+
if (!(await stat(resolved)).isDirectory())
|
|
27
|
+
throw new Error(`runDir is not a directory: ${requested}`);
|
|
28
|
+
const marker = path.join(resolved, DRAFT_COMPLETION_FILENAME);
|
|
29
|
+
let markerReal;
|
|
30
|
+
try {
|
|
31
|
+
markerReal = await realpath(marker);
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
throw new Error(`${requested} is not a finished 12ui draft run: it has no ${DRAFT_COMPLETION_FILENAME}`);
|
|
35
|
+
}
|
|
36
|
+
if (!inside(resolved, markerReal) || !(await stat(markerReal)).isFile()) {
|
|
37
|
+
throw new Error(`${requested} is not a finished 12ui draft run: ${DRAFT_COMPLETION_FILENAME} is not a file inside it`);
|
|
38
|
+
}
|
|
39
|
+
return resolved;
|
|
40
|
+
};
|
|
41
|
+
const readCompletion = async (runDir) => {
|
|
42
|
+
const parsed = JSON.parse(await readFile(path.join(runDir, DRAFT_COMPLETION_FILENAME), 'utf8'));
|
|
43
|
+
if (!isRecord(parsed) || typeof parsed.runId !== 'string' || !Array.isArray(parsed.candidates)) {
|
|
44
|
+
throw new Error(`${DRAFT_COMPLETION_FILENAME} in ${runDir} is not a draft completion record`);
|
|
45
|
+
}
|
|
46
|
+
return parsed;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Candidate files are read from `<run>/candidates/<basename>`: the completion
|
|
50
|
+
* record stores the absolute path of the directory the draft was written to,
|
|
51
|
+
* which is a temp path that no longer exists once the run has moved. The file
|
|
52
|
+
* itself is confined here (a link out of the run is refused); whether its
|
|
53
|
+
* bytes still match is a per-version state, not a reason to refuse the run.
|
|
54
|
+
*/
|
|
55
|
+
export const readSlateRootRun = async (runDir) => {
|
|
56
|
+
const completion = await readCompletion(runDir);
|
|
57
|
+
const candidatesDir = path.join(runDir, DRAFT_CANDIDATES_DIRECTORY);
|
|
58
|
+
const candidates = [];
|
|
59
|
+
for (const record of completion.candidates) {
|
|
60
|
+
const localSlot = path.basename(String(record.path), '.png').toUpperCase();
|
|
61
|
+
if (!LOCAL_SLOT_PATTERN.test(localSlot)) {
|
|
62
|
+
throw new Error(`candidate file ${JSON.stringify(String(record.path))} is not named A-P.png`);
|
|
63
|
+
}
|
|
64
|
+
const slot = String(record.slot).toLowerCase();
|
|
65
|
+
if (slot !== localSlot.toLowerCase()) {
|
|
66
|
+
throw new Error(`candidate ${localSlot} is recorded under slot ${JSON.stringify(record.slot)}`);
|
|
67
|
+
}
|
|
68
|
+
const file = path.join(candidatesDir, `${localSlot}.png`);
|
|
69
|
+
let resolved;
|
|
70
|
+
try {
|
|
71
|
+
resolved = await realpath(file);
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
resolved = undefined;
|
|
75
|
+
}
|
|
76
|
+
if (resolved !== undefined && !inside(runDir, resolved)) {
|
|
77
|
+
throw new Error(`candidate ${localSlot} resolves outside the run directory`);
|
|
78
|
+
}
|
|
79
|
+
candidates.push({ slot, localSlot, sha256: record.sha256 || undefined, file });
|
|
80
|
+
}
|
|
81
|
+
if (candidates.length === 0)
|
|
82
|
+
throw new Error(`${runDir} has no candidates`);
|
|
83
|
+
if (new Set(candidates.map((candidate) => candidate.localSlot)).size !== candidates.length) {
|
|
84
|
+
throw new Error(`${DRAFT_COMPLETION_FILENAME} in ${runDir} repeats a slot`);
|
|
85
|
+
}
|
|
86
|
+
return { runId: completion.runId, runDir, candidates };
|
|
87
|
+
};
|
|
88
|
+
//# sourceMappingURL=mcp-slate-run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-slate-run.js","sourceRoot":"","sources":["../src/mcp-slate-run.ts"],"names":[],"mappings":"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"}
|