@dfosco/storyboard 0.5.0-alpha.0
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/commandpalette.config.json +152 -0
- package/dist/storyboard-ui.css +1 -0
- package/dist/storyboard-ui.js +21328 -0
- package/dist/storyboard-ui.js.map +1 -0
- package/dist/tailwind.css +2 -0
- package/dist/tiny-canvas.css +1 -0
- package/dist/tiny-canvas.js +389 -0
- package/package.json +121 -0
- package/paste.config.json +67 -0
- package/scaffold/AGENTS.md +432 -0
- package/scaffold/agents/prompt-agent.agent.md +181 -0
- package/scaffold/agents/terminal-agent.agent.md +351 -0
- package/scaffold/codex/config.toml +246 -0
- package/scaffold/deploy.yml +103 -0
- package/scaffold/githooks/pre-push +114 -0
- package/scaffold/gitignore +64 -0
- package/scaffold/manifest.json +56 -0
- package/scaffold/preview.yml +181 -0
- package/scaffold/scripts/link.sh +26 -0
- package/scaffold/scripts/unlink.sh +10 -0
- package/scaffold/skills/agent-browser/SKILL.md +260 -0
- package/scaffold/skills/canvas/SKILL.md +364 -0
- package/scaffold/skills/create/SKILL.md +501 -0
- package/scaffold/skills/ship/SKILL.md +237 -0
- package/scaffold/skills/storyboard/SKILL.md +360 -0
- package/scaffold/skills/update-storyboard/SKILL.md +16 -0
- package/scaffold/skills/update-storyboard/update-storyboard-packages.sh +26 -0
- package/scaffold/skills/vitest/GENERATION.md +5 -0
- package/scaffold/skills/vitest/SKILL.md +52 -0
- package/scaffold/skills/vitest/references/advanced-environments.md +264 -0
- package/scaffold/skills/vitest/references/advanced-projects.md +300 -0
- package/scaffold/skills/vitest/references/advanced-type-testing.md +237 -0
- package/scaffold/skills/vitest/references/advanced-vi.md +249 -0
- package/scaffold/skills/vitest/references/core-cli.md +166 -0
- package/scaffold/skills/vitest/references/core-config.md +174 -0
- package/scaffold/skills/vitest/references/core-describe.md +193 -0
- package/scaffold/skills/vitest/references/core-expect.md +219 -0
- package/scaffold/skills/vitest/references/core-hooks.md +244 -0
- package/scaffold/skills/vitest/references/core-test-api.md +233 -0
- package/scaffold/skills/vitest/references/features-concurrency.md +250 -0
- package/scaffold/skills/vitest/references/features-context.md +238 -0
- package/scaffold/skills/vitest/references/features-coverage.md +207 -0
- package/scaffold/skills/vitest/references/features-filtering.md +211 -0
- package/scaffold/skills/vitest/references/features-mocking.md +265 -0
- package/scaffold/skills/vitest/references/features-snapshots.md +207 -0
- package/scaffold/skills/worktree/SKILL.md +93 -0
- package/scaffold/storyboard.config.json +44 -0
- package/src/canvas/Canvas.jsx +78 -0
- package/src/canvas/Draggable.jsx +235 -0
- package/src/canvas/index.d.ts +41 -0
- package/src/canvas/index.js +6 -0
- package/src/canvas/style.css +118 -0
- package/src/canvas/useResetCanvas.js +17 -0
- package/src/canvas/utils.js +136 -0
- package/src/core/assets/fonts/IoskeleyMono-Bold.woff2 +0 -0
- package/src/core/assets/fonts/IoskeleyMono-Italic.woff2 +0 -0
- package/src/core/assets/fonts/IoskeleyMono-Medium.woff2 +0 -0
- package/src/core/assets/fonts/IoskeleyMono-Regular.woff2 +0 -0
- package/src/core/assets/fonts/IoskeleyMono-SemiBold.woff2 +0 -0
- package/src/core/autosync/server.js +714 -0
- package/src/core/autosync/server.test.js +158 -0
- package/src/core/canvas/__tests__/agent-integration.test.js +596 -0
- package/src/core/canvas/__tests__/helpers/browser.js +95 -0
- package/src/core/canvas/__tests__/helpers/canvas-api.js +129 -0
- package/src/core/canvas/__tests__/helpers/perf.js +118 -0
- package/src/core/canvas/__tests__/helpers/setup.js +176 -0
- package/src/core/canvas/__tests__/helpers/tmux.js +130 -0
- package/src/core/canvas/__tests__/helpers/transcript.js +132 -0
- package/src/core/canvas/__tests__/terminal-integration.test.js +177 -0
- package/src/core/canvas/collision.js +292 -0
- package/src/core/canvas/collision.test.js +371 -0
- package/src/core/canvas/compact.js +83 -0
- package/src/core/canvas/deriveCanvasId.test.js +40 -0
- package/src/core/canvas/githubEmbeds.js +527 -0
- package/src/core/canvas/githubEmbeds.test.js +302 -0
- package/src/core/canvas/hot-pool.js +766 -0
- package/src/core/canvas/identity.js +107 -0
- package/src/core/canvas/identity.test.js +100 -0
- package/src/core/canvas/materializer.js +259 -0
- package/src/core/canvas/materializer.test.js +356 -0
- package/src/core/canvas/selectedWidgets.js +270 -0
- package/src/core/canvas/selectedWidgets.test.js +321 -0
- package/src/core/canvas/server.js +3134 -0
- package/src/core/canvas/server.test.js +379 -0
- package/src/core/canvas/terminal-config.js +330 -0
- package/src/core/canvas/terminal-registry.js +465 -0
- package/src/core/canvas/terminal-server.js +1436 -0
- package/src/core/canvas/writeGuard.js +53 -0
- package/src/core/cli/agent.js +85 -0
- package/src/core/cli/branch.js +386 -0
- package/src/core/cli/canvasAdd.js +241 -0
- package/src/core/cli/canvasBatch.js +98 -0
- package/src/core/cli/canvasBounds.js +160 -0
- package/src/core/cli/canvasRead.js +236 -0
- package/src/core/cli/canvasUpdate.js +179 -0
- package/src/core/cli/code.js +67 -0
- package/src/core/cli/compact.js +62 -0
- package/src/core/cli/create.js +674 -0
- package/src/core/cli/dev-helpers.js +53 -0
- package/src/core/cli/dev-helpers.test.js +53 -0
- package/src/core/cli/dev.js +430 -0
- package/src/core/cli/exit.js +38 -0
- package/src/core/cli/flags.js +174 -0
- package/src/core/cli/flags.test.js +155 -0
- package/src/core/cli/index.js +233 -0
- package/src/core/cli/intro.js +37 -0
- package/src/core/cli/proxy.js +319 -0
- package/src/core/cli/proxy.test.js +63 -0
- package/src/core/cli/schemas.js +223 -0
- package/src/core/cli/server.js +192 -0
- package/src/core/cli/serverUrl.js +61 -0
- package/src/core/cli/sessions.js +459 -0
- package/src/core/cli/setup.js +404 -0
- package/src/core/cli/terminal-commands.js +287 -0
- package/src/core/cli/terminal-messaging.js +231 -0
- package/src/core/cli/terminal-welcome.js +515 -0
- package/src/core/cli/updateVersion.js +124 -0
- package/src/core/comments/api.js +284 -0
- package/src/core/comments/api.test.js +282 -0
- package/src/core/comments/auth.js +151 -0
- package/src/core/comments/auth.test.js +167 -0
- package/src/core/comments/commentCache.js +109 -0
- package/src/core/comments/commentCache.test.js +48 -0
- package/src/core/comments/commentDrafts.js +68 -0
- package/src/core/comments/commentMode.js +63 -0
- package/src/core/comments/commentMode.test.js +90 -0
- package/src/core/comments/config.js +47 -0
- package/src/core/comments/config.test.js +77 -0
- package/src/core/comments/graphql.js +65 -0
- package/src/core/comments/graphql.test.js +95 -0
- package/src/core/comments/index.js +42 -0
- package/src/core/comments/metadata.js +52 -0
- package/src/core/comments/metadata.test.js +110 -0
- package/src/core/comments/queries.js +245 -0
- package/src/core/comments/ui/AuthModal.jsx +114 -0
- package/src/core/comments/ui/CommentOverlay.js +52 -0
- package/src/core/comments/ui/CommentWindow.jsx +329 -0
- package/src/core/comments/ui/CommentsDrawer.jsx +102 -0
- package/src/core/comments/ui/Composer.jsx +64 -0
- package/src/core/comments/ui/authModal.js +66 -0
- package/src/core/comments/ui/authModal.test.js +76 -0
- package/src/core/comments/ui/comment-cursor-dark.svg +1 -0
- package/src/core/comments/ui/comment-cursor.svg +1 -0
- package/src/core/comments/ui/comment-layout.css +142 -0
- package/src/core/comments/ui/commentWindow.js +121 -0
- package/src/core/comments/ui/comments.css +242 -0
- package/src/core/comments/ui/commentsDrawer.js +84 -0
- package/src/core/comments/ui/composer.js +136 -0
- package/src/core/comments/ui/index.js +14 -0
- package/src/core/comments/ui/mount.js +687 -0
- package/src/core/comments/ui/mount.test.js +336 -0
- package/src/core/data/dotPath.js +53 -0
- package/src/core/data/dotPath.test.js +114 -0
- package/src/core/data/loader.js +409 -0
- package/src/core/data/loader.test.js +599 -0
- package/src/core/data/viewfinder.js +363 -0
- package/src/core/data/viewfinder.test.js +456 -0
- package/src/core/devtools/devtools-consumer.js +28 -0
- package/src/core/devtools/devtools.js +144 -0
- package/src/core/devtools/devtools.test.js +75 -0
- package/src/core/devtools/sceneDebug.js +112 -0
- package/src/core/devtools/sceneDebug.test.js +141 -0
- package/src/core/index.js +124 -0
- package/src/core/inspector/fiberWalker.js +239 -0
- package/src/core/inspector/highlighter.js +275 -0
- package/src/core/inspector/mouseMode.js +259 -0
- package/src/core/lib/components/ui/alert/alert-action.jsx +11 -0
- package/src/core/lib/components/ui/alert/alert-description.jsx +11 -0
- package/src/core/lib/components/ui/alert/alert-title.jsx +11 -0
- package/src/core/lib/components/ui/alert/alert.jsx +25 -0
- package/src/core/lib/components/ui/alert/index.js +17 -0
- package/src/core/lib/components/ui/avatar/avatar-badge.jsx +22 -0
- package/src/core/lib/components/ui/avatar/avatar-fallback.jsx +18 -0
- package/src/core/lib/components/ui/avatar/avatar-group-count.jsx +19 -0
- package/src/core/lib/components/ui/avatar/avatar-group.jsx +19 -0
- package/src/core/lib/components/ui/avatar/avatar-image.jsx +15 -0
- package/src/core/lib/components/ui/avatar/avatar.jsx +19 -0
- package/src/core/lib/components/ui/avatar/index.js +22 -0
- package/src/core/lib/components/ui/badge/badge.jsx +31 -0
- package/src/core/lib/components/ui/badge/index.js +2 -0
- package/src/core/lib/components/ui/button/button.jsx +100 -0
- package/src/core/lib/components/ui/button/index.js +12 -0
- package/src/core/lib/components/ui/card/card-action.jsx +11 -0
- package/src/core/lib/components/ui/card/card-content.jsx +11 -0
- package/src/core/lib/components/ui/card/card-description.jsx +11 -0
- package/src/core/lib/components/ui/card/card-footer.jsx +11 -0
- package/src/core/lib/components/ui/card/card-header.jsx +19 -0
- package/src/core/lib/components/ui/card/card-title.jsx +11 -0
- package/src/core/lib/components/ui/card/card.jsx +17 -0
- package/src/core/lib/components/ui/card/index.js +25 -0
- package/src/core/lib/components/ui/checkbox/checkbox.jsx +29 -0
- package/src/core/lib/components/ui/checkbox/index.js +6 -0
- package/src/core/lib/components/ui/collapsible/collapsible-content.jsx +7 -0
- package/src/core/lib/components/ui/collapsible/collapsible-trigger.jsx +7 -0
- package/src/core/lib/components/ui/collapsible/collapsible.jsx +7 -0
- package/src/core/lib/components/ui/collapsible/index.js +13 -0
- package/src/core/lib/components/ui/dialog/dialog-close.jsx +7 -0
- package/src/core/lib/components/ui/dialog/dialog-content.jsx +34 -0
- package/src/core/lib/components/ui/dialog/dialog-description.jsx +15 -0
- package/src/core/lib/components/ui/dialog/dialog-footer.jsx +23 -0
- package/src/core/lib/components/ui/dialog/dialog-header.jsx +11 -0
- package/src/core/lib/components/ui/dialog/dialog-overlay.jsx +15 -0
- package/src/core/lib/components/ui/dialog/dialog-portal.jsx +4 -0
- package/src/core/lib/components/ui/dialog/dialog-title.jsx +15 -0
- package/src/core/lib/components/ui/dialog/dialog-trigger.jsx +7 -0
- package/src/core/lib/components/ui/dialog/dialog.jsx +4 -0
- package/src/core/lib/components/ui/dialog/index.js +34 -0
- package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-group.jsx +8 -0
- package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-checkbox-item.jsx +30 -0
- package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-content.jsx +22 -0
- package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-group-heading.jsx +16 -0
- package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-group.jsx +7 -0
- package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-item.jsx +20 -0
- package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-label.jsx +17 -0
- package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-portal.jsx +4 -0
- package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-radio-group.jsx +7 -0
- package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-radio-item.jsx +29 -0
- package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-separator.jsx +15 -0
- package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-shortcut.jsx +16 -0
- package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-sub-content.jsx +15 -0
- package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-sub-trigger.jsx +23 -0
- package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-sub.jsx +4 -0
- package/src/core/lib/components/ui/dropdown-menu/dropdown-menu-trigger.jsx +7 -0
- package/src/core/lib/components/ui/dropdown-menu/dropdown-menu.jsx +4 -0
- package/src/core/lib/components/ui/dropdown-menu/index.js +54 -0
- package/src/core/lib/components/ui/input/index.js +7 -0
- package/src/core/lib/components/ui/input/input.jsx +19 -0
- package/src/core/lib/components/ui/label/index.js +7 -0
- package/src/core/lib/components/ui/label/label.jsx +19 -0
- package/src/core/lib/components/ui/panel/index.js +24 -0
- package/src/core/lib/components/ui/panel/panel-body.jsx +11 -0
- package/src/core/lib/components/ui/panel/panel-close.jsx +16 -0
- package/src/core/lib/components/ui/panel/panel-content.jsx +29 -0
- package/src/core/lib/components/ui/panel/panel-footer.jsx +11 -0
- package/src/core/lib/components/ui/panel/panel-header.jsx +11 -0
- package/src/core/lib/components/ui/panel/panel-title.jsx +12 -0
- package/src/core/lib/components/ui/panel/panel.jsx +4 -0
- package/src/core/lib/components/ui/popover/index.js +28 -0
- package/src/core/lib/components/ui/popover/popover-close.jsx +7 -0
- package/src/core/lib/components/ui/popover/popover-content.jsx +22 -0
- package/src/core/lib/components/ui/popover/popover-description.jsx +11 -0
- package/src/core/lib/components/ui/popover/popover-header.jsx +11 -0
- package/src/core/lib/components/ui/popover/popover-portal.jsx +4 -0
- package/src/core/lib/components/ui/popover/popover-title.jsx +11 -0
- package/src/core/lib/components/ui/popover/popover-trigger.jsx +8 -0
- package/src/core/lib/components/ui/popover/popover.jsx +4 -0
- package/src/core/lib/components/ui/searchable-list.jsx +160 -0
- package/src/core/lib/components/ui/select/index.js +37 -0
- package/src/core/lib/components/ui/select/select-content.jsx +30 -0
- package/src/core/lib/components/ui/select/select-group-heading.jsx +17 -0
- package/src/core/lib/components/ui/select/select-group.jsx +15 -0
- package/src/core/lib/components/ui/select/select-item.jsx +26 -0
- package/src/core/lib/components/ui/select/select-label.jsx +11 -0
- package/src/core/lib/components/ui/select/select-portal.jsx +4 -0
- package/src/core/lib/components/ui/select/select-scroll-down-button.jsx +18 -0
- package/src/core/lib/components/ui/select/select-scroll-up-button.jsx +18 -0
- package/src/core/lib/components/ui/select/select-separator.jsx +15 -0
- package/src/core/lib/components/ui/select/select-trigger.jsx +25 -0
- package/src/core/lib/components/ui/select/select.jsx +4 -0
- package/src/core/lib/components/ui/separator/index.js +7 -0
- package/src/core/lib/components/ui/separator/separator.jsx +22 -0
- package/src/core/lib/components/ui/sheet/index.js +34 -0
- package/src/core/lib/components/ui/sheet/sheet-close.jsx +7 -0
- package/src/core/lib/components/ui/sheet/sheet-content.jsx +35 -0
- package/src/core/lib/components/ui/sheet/sheet-description.jsx +15 -0
- package/src/core/lib/components/ui/sheet/sheet-footer.jsx +11 -0
- package/src/core/lib/components/ui/sheet/sheet-header.jsx +11 -0
- package/src/core/lib/components/ui/sheet/sheet-overlay.jsx +15 -0
- package/src/core/lib/components/ui/sheet/sheet-portal.jsx +4 -0
- package/src/core/lib/components/ui/sheet/sheet-title.jsx +15 -0
- package/src/core/lib/components/ui/sheet/sheet-trigger.jsx +7 -0
- package/src/core/lib/components/ui/sheet/sheet.jsx +4 -0
- package/src/core/lib/components/ui/textarea/index.js +7 -0
- package/src/core/lib/components/ui/textarea/textarea.jsx +18 -0
- package/src/core/lib/components/ui/toggle/index.js +8 -0
- package/src/core/lib/components/ui/toggle/toggle.jsx +36 -0
- package/src/core/lib/components/ui/toggle-group/index.js +10 -0
- package/src/core/lib/components/ui/toggle-group/toggle-group-item.jsx +29 -0
- package/src/core/lib/components/ui/toggle-group/toggle-group.jsx +43 -0
- package/src/core/lib/components/ui/tooltip/index.js +3 -0
- package/src/core/lib/components/ui/tooltip/tooltip-content.jsx +21 -0
- package/src/core/lib/components/ui/tooltip/tooltip-trigger.jsx +23 -0
- package/src/core/lib/components/ui/tooltip/tooltip.jsx +11 -0
- package/src/core/lib/components/ui/trigger-button/index.js +6 -0
- package/src/core/lib/components/ui/trigger-button/trigger-button.css +38 -0
- package/src/core/lib/components/ui/trigger-button/trigger-button.jsx +63 -0
- package/src/core/lib/utils/index.js +6 -0
- package/src/core/logger/devLogger.js +238 -0
- package/src/core/logger/devLogger.test.js +193 -0
- package/src/core/modes/modes.css +98 -0
- package/src/core/modes/modes.js +492 -0
- package/src/core/modes/modes.test.js +562 -0
- package/src/core/mountStoryboardCore.js +478 -0
- package/src/core/rename-watcher/config.json +23 -0
- package/src/core/rename-watcher/watcher.js +531 -0
- package/src/core/scaffold.js +100 -0
- package/src/core/server/index.js +391 -0
- package/src/core/session/bodyClasses.js +128 -0
- package/src/core/session/bodyClasses.test.js +192 -0
- package/src/core/session/hashSubscribe.js +19 -0
- package/src/core/session/hashSubscribe.test.js +62 -0
- package/src/core/session/hideMode.js +424 -0
- package/src/core/session/hideMode.test.js +268 -0
- package/src/core/session/interceptHideParams.js +35 -0
- package/src/core/session/interceptHideParams.test.js +90 -0
- package/src/core/session/localStorage.js +134 -0
- package/src/core/session/localStorage.test.js +148 -0
- package/src/core/session/session.js +76 -0
- package/src/core/session/session.test.js +91 -0
- package/src/core/stores/canvasConfig.js +134 -0
- package/src/core/stores/canvasConfig.test.js +120 -0
- package/src/core/stores/commandActions.js +284 -0
- package/src/core/stores/commandPaletteConfig.js +31 -0
- package/src/core/stores/configSchema.js +232 -0
- package/src/core/stores/configSchema.test.js +72 -0
- package/src/core/stores/configStore.js +161 -0
- package/src/core/stores/customerModeConfig.js +30 -0
- package/src/core/stores/featureFlags.js +127 -0
- package/src/core/stores/paletteProviders.js +360 -0
- package/src/core/stores/paletteProviders.test.js +186 -0
- package/src/core/stores/plugins.js +40 -0
- package/src/core/stores/plugins.test.js +68 -0
- package/src/core/stores/recentArtifacts.js +68 -0
- package/src/core/stores/recentArtifacts.test.js +71 -0
- package/src/core/stores/sidePanelStore.ts +143 -0
- package/src/core/stores/themeStore.ts +291 -0
- package/src/core/stores/toolRegistry.js +227 -0
- package/src/core/stores/toolStateStore.js +183 -0
- package/src/core/stores/toolStateStore.test.js +220 -0
- package/src/core/stores/toolbarConfigStore.js +165 -0
- package/src/core/stores/uiConfig.js +64 -0
- package/src/core/stores/uiConfig.test.js +63 -0
- package/src/core/styles/tailwind.css +204 -0
- package/src/core/tools/handlers/autosync.js +12 -0
- package/src/core/tools/handlers/canvasAddWidget.js +11 -0
- package/src/core/tools/handlers/canvasAgents.js +20 -0
- package/src/core/tools/handlers/canvasToolbar.js +56 -0
- package/src/core/tools/handlers/commandPalette.js +9 -0
- package/src/core/tools/handlers/comments.js +16 -0
- package/src/core/tools/handlers/create.js +39 -0
- package/src/core/tools/handlers/devtools.js +122 -0
- package/src/core/tools/handlers/devtools.test.js +87 -0
- package/src/core/tools/handlers/featureFlags.js +21 -0
- package/src/core/tools/handlers/flows.js +68 -0
- package/src/core/tools/handlers/hideChrome.js +9 -0
- package/src/core/tools/handlers/hideToolbars.js +25 -0
- package/src/core/tools/handlers/inspector.js +19 -0
- package/src/core/tools/handlers/paletteTheme.js +35 -0
- package/src/core/tools/handlers/theme.js +9 -0
- package/src/core/tools/registry.js +26 -0
- package/src/core/tools/surfaces/canvasToolbar.js +10 -0
- package/src/core/tools/surfaces/commandList.js +10 -0
- package/src/core/tools/surfaces/mainToolbar.js +11 -0
- package/src/core/tools/surfaces/registry.js +19 -0
- package/src/core/ui/ActionMenuButton.jsx +114 -0
- package/src/core/ui/AutosyncMenuButton.css +67 -0
- package/src/core/ui/AutosyncMenuButton.jsx +242 -0
- package/src/core/ui/BranchSelect.jsx +29 -0
- package/src/core/ui/BranchSelect.module.css +30 -0
- package/src/core/ui/CanvasAgentsMenu.jsx +89 -0
- package/src/core/ui/CanvasCreateMenu.jsx +611 -0
- package/src/core/ui/CanvasSnap.css +27 -0
- package/src/core/ui/CanvasSnap.jsx +51 -0
- package/src/core/ui/CanvasUndoRedo.css +36 -0
- package/src/core/ui/CanvasUndoRedo.jsx +62 -0
- package/src/core/ui/CanvasZoomControl.css +53 -0
- package/src/core/ui/CanvasZoomControl.jsx +49 -0
- package/src/core/ui/CanvasZoomToFit.css +18 -0
- package/src/core/ui/CanvasZoomToFit.jsx +26 -0
- package/src/core/ui/CommandMenu.css +8 -0
- package/src/core/ui/CommandMenu.jsx +287 -0
- package/src/core/ui/CommandPalette.jsx +35 -0
- package/src/core/ui/CommandPaletteTrigger.jsx +25 -0
- package/src/core/ui/CommentsMenuButton.jsx +40 -0
- package/src/core/ui/CoreUIBar.css +47 -0
- package/src/core/ui/CoreUIBar.jsx +905 -0
- package/src/core/ui/CreateMenuButton.jsx +117 -0
- package/src/core/ui/HideChromeTrigger.jsx +48 -0
- package/src/core/ui/Icon.jsx +279 -0
- package/src/core/ui/InspectorPanel.css +109 -0
- package/src/core/ui/InspectorPanel.jsx +632 -0
- package/src/core/ui/PwaInstallBanner.css +42 -0
- package/src/core/ui/PwaInstallBanner.jsx +124 -0
- package/src/core/ui/SidePanel.jsx +261 -0
- package/src/core/ui/ThemeMenuButton.jsx +139 -0
- package/src/core/ui/core-ui-colors.css +129 -0
- package/src/core/ui/design-modes.ts +7 -0
- package/src/core/ui/sidepanel.css +301 -0
- package/src/core/ui/viewfinder.ts +7 -0
- package/src/core/ui-entry.js +30 -0
- package/src/core/utils/fuzzySearch.js +117 -0
- package/src/core/utils/fuzzySearch.test.js +119 -0
- package/src/core/utils/mobileViewport.js +57 -0
- package/src/core/utils/mobileViewport.test.js +68 -0
- package/src/core/utils/prodMode.js +38 -0
- package/src/core/utils/smoothCorners.js +20 -0
- package/src/core/vite/docs-handler.js +155 -0
- package/src/core/vite/server-plugin.js +797 -0
- package/src/core/workshop/features/createCanvas/CreateCanvasForm.jsx +260 -0
- package/src/core/workshop/features/createCanvas/index.js +14 -0
- package/src/core/workshop/features/createFlow/CreateFlowForm.jsx +334 -0
- package/src/core/workshop/features/createFlow/index.js +19 -0
- package/src/core/workshop/features/createFlow/server.js +663 -0
- package/src/core/workshop/features/createPage/CreatePageForm.jsx +304 -0
- package/src/core/workshop/features/createPage/index.js +11 -0
- package/src/core/workshop/features/createPrototype/CreatePrototypeForm.jsx +289 -0
- package/src/core/workshop/features/createPrototype/index.js +19 -0
- package/src/core/workshop/features/createPrototype/server.js +433 -0
- package/src/core/workshop/features/createStory/CreateStoryForm.jsx +208 -0
- package/src/core/workshop/features/createStory/index.js +14 -0
- package/src/core/workshop/features/registry-server.js +22 -0
- package/src/core/workshop/features/registry.js +28 -0
- package/src/core/workshop/features/templateIndex.js +155 -0
- package/src/core/workshop/ui/WorkshopPanel.jsx +98 -0
- package/src/core/workshop/ui/mount.ts +6 -0
- package/src/core/worktree/port.js +268 -0
- package/src/core/worktree/port.test.js +222 -0
- package/src/core/worktree/serverRegistry.js +120 -0
- package/src/internals/AuthModal/AuthModal.jsx +132 -0
- package/src/internals/AuthModal/AuthModal.module.css +221 -0
- package/src/internals/BranchBar/BranchBar.jsx +87 -0
- package/src/internals/BranchBar/BranchBar.module.css +247 -0
- package/src/internals/BranchBar/useBranches.js +93 -0
- package/src/internals/BranchBar/useBranches.test.js +68 -0
- package/src/internals/CommandPalette/CommandPalette.jsx +1361 -0
- package/src/internals/CommandPalette/CreateDialog.jsx +219 -0
- package/src/internals/CommandPalette/command-palette.css +180 -0
- package/src/internals/FlowError.module.css +30 -0
- package/src/internals/Icon.jsx +279 -0
- package/src/internals/StoryboardContext.js +3 -0
- package/src/internals/Viewfinder.jsx +1479 -0
- package/src/internals/Viewfinder.module.css +1540 -0
- package/src/internals/Workspace.jsx +7 -0
- package/src/internals/__mocks__/virtual-storyboard-data-index.js +4 -0
- package/src/internals/canvas/CanvasControls.jsx +112 -0
- package/src/internals/canvas/CanvasControls.module.css +135 -0
- package/src/internals/canvas/CanvasPage.bridge.test.jsx +387 -0
- package/src/internals/canvas/CanvasPage.dragdrop.test.jsx +350 -0
- package/src/internals/canvas/CanvasPage.jsx +3092 -0
- package/src/internals/canvas/CanvasPage.module.css +187 -0
- package/src/internals/canvas/CanvasPage.multiselect.test.jsx +358 -0
- package/src/internals/canvas/CanvasToolbar.jsx +73 -0
- package/src/internals/canvas/CanvasToolbar.module.css +92 -0
- package/src/internals/canvas/ComponentErrorBoundary.jsx +50 -0
- package/src/internals/canvas/ConnectorLayer.jsx +208 -0
- package/src/internals/canvas/ConnectorLayer.module.css +129 -0
- package/src/internals/canvas/MarqueeOverlay.jsx +20 -0
- package/src/internals/canvas/PageSelector.jsx +587 -0
- package/src/internals/canvas/PageSelector.module.css +261 -0
- package/src/internals/canvas/PageSelector.test.jsx +113 -0
- package/src/internals/canvas/WebGLContextPool.jsx +292 -0
- package/src/internals/canvas/WebGLContextPool.test.jsx +165 -0
- package/src/internals/canvas/canvasApi.js +164 -0
- package/src/internals/canvas/canvasReloadGuard.js +37 -0
- package/src/internals/canvas/canvasReloadGuard.test.js +27 -0
- package/src/internals/canvas/canvasTheme.js +118 -0
- package/src/internals/canvas/componentIsolate.jsx +165 -0
- package/src/internals/canvas/componentSetIsolate.jsx +257 -0
- package/src/internals/canvas/computeCanvasBounds.test.js +121 -0
- package/src/internals/canvas/connectorGeometry.js +132 -0
- package/src/internals/canvas/hotPoolDevLogs.js +25 -0
- package/src/internals/canvas/textSelection.js +10 -0
- package/src/internals/canvas/textSelection.test.js +26 -0
- package/src/internals/canvas/useCanvas.js +126 -0
- package/src/internals/canvas/useCanvas.test.js +26 -0
- package/src/internals/canvas/useMarqueeSelect.js +213 -0
- package/src/internals/canvas/useMarqueeSelect.test.js +78 -0
- package/src/internals/canvas/useUndoRedo.js +86 -0
- package/src/internals/canvas/useUndoRedo.test.js +231 -0
- package/src/internals/canvas/widgets/CodePenEmbed.jsx +293 -0
- package/src/internals/canvas/widgets/CodePenEmbed.module.css +161 -0
- package/src/internals/canvas/widgets/ComponentSetWidget.jsx +2 -0
- package/src/internals/canvas/widgets/ComponentSetWidget.module.css +89 -0
- package/src/internals/canvas/widgets/ComponentWidget.jsx +14 -0
- package/src/internals/canvas/widgets/ComponentWidget.module.css +0 -0
- package/src/internals/canvas/widgets/CropOverlay.jsx +179 -0
- package/src/internals/canvas/widgets/CropOverlay.module.css +154 -0
- package/src/internals/canvas/widgets/ExpandedPane.jsx +474 -0
- package/src/internals/canvas/widgets/ExpandedPane.module.css +179 -0
- package/src/internals/canvas/widgets/ExpandedPane.test.jsx +240 -0
- package/src/internals/canvas/widgets/ExpandedPaneTopBar.jsx +111 -0
- package/src/internals/canvas/widgets/ExpandedPaneTopBar.module.css +59 -0
- package/src/internals/canvas/widgets/ExpandedPaneTopBar.test.jsx +45 -0
- package/src/internals/canvas/widgets/FigmaEmbed.jsx +296 -0
- package/src/internals/canvas/widgets/FigmaEmbed.module.css +222 -0
- package/src/internals/canvas/widgets/FrozenTerminalOverlay.jsx +151 -0
- package/src/internals/canvas/widgets/FrozenTerminalOverlay.module.css +83 -0
- package/src/internals/canvas/widgets/ImageWidget.jsx +287 -0
- package/src/internals/canvas/widgets/ImageWidget.module.css +81 -0
- package/src/internals/canvas/widgets/LinkPreview.jsx +439 -0
- package/src/internals/canvas/widgets/LinkPreview.module.css +585 -0
- package/src/internals/canvas/widgets/LinkPreview.test.jsx +193 -0
- package/src/internals/canvas/widgets/MarkdownBlock.jsx +354 -0
- package/src/internals/canvas/widgets/MarkdownBlock.module.css +377 -0
- package/src/internals/canvas/widgets/MarkdownBlock.test.jsx +92 -0
- package/src/internals/canvas/widgets/PromptWidget.jsx +428 -0
- package/src/internals/canvas/widgets/PromptWidget.module.css +273 -0
- package/src/internals/canvas/widgets/PrototypeEmbed.jsx +463 -0
- package/src/internals/canvas/widgets/PrototypeEmbed.module.css +579 -0
- package/src/internals/canvas/widgets/PrototypeEmbed.test.jsx +10 -0
- package/src/internals/canvas/widgets/ResizeHandle.jsx +67 -0
- package/src/internals/canvas/widgets/ResizeHandle.module.css +29 -0
- package/src/internals/canvas/widgets/StickyNote.jsx +92 -0
- package/src/internals/canvas/widgets/StickyNote.module.css +70 -0
- package/src/internals/canvas/widgets/StickyNote.test.jsx +116 -0
- package/src/internals/canvas/widgets/StorySetWidget.jsx +208 -0
- package/src/internals/canvas/widgets/StorySetWidget.module.css +89 -0
- package/src/internals/canvas/widgets/StoryWidget.jsx +334 -0
- package/src/internals/canvas/widgets/StoryWidget.module.css +211 -0
- package/src/internals/canvas/widgets/TerminalReadWidget.jsx +146 -0
- package/src/internals/canvas/widgets/TerminalReadWidget.module.css +94 -0
- package/src/internals/canvas/widgets/TerminalWidget.jsx +704 -0
- package/src/internals/canvas/widgets/TerminalWidget.module.css +444 -0
- package/src/internals/canvas/widgets/TilesWidget.jsx +300 -0
- package/src/internals/canvas/widgets/TilesWidget.module.css +133 -0
- package/src/internals/canvas/widgets/WidgetChrome.jsx +580 -0
- package/src/internals/canvas/widgets/WidgetChrome.module.css +421 -0
- package/src/internals/canvas/widgets/WidgetWrapper.jsx +15 -0
- package/src/internals/canvas/widgets/WidgetWrapper.module.css +25 -0
- package/src/internals/canvas/widgets/codepenUrl.js +75 -0
- package/src/internals/canvas/widgets/codepenUrl.test.js +76 -0
- package/src/internals/canvas/widgets/embedInteraction.test.jsx +173 -0
- package/src/internals/canvas/widgets/embedOverlay.module.css +35 -0
- package/src/internals/canvas/widgets/embedTheme.js +148 -0
- package/src/internals/canvas/widgets/expandUtils.js +559 -0
- package/src/internals/canvas/widgets/expandUtils.test.js +155 -0
- package/src/internals/canvas/widgets/figmaUrl.js +118 -0
- package/src/internals/canvas/widgets/figmaUrl.test.js +139 -0
- package/src/internals/canvas/widgets/githubUrl.js +82 -0
- package/src/internals/canvas/widgets/githubUrl.test.js +74 -0
- package/src/internals/canvas/widgets/iframeDevLogs.js +49 -0
- package/src/internals/canvas/widgets/iframeDevLogs.test.jsx +81 -0
- package/src/internals/canvas/widgets/index.js +42 -0
- package/src/internals/canvas/widgets/pasteRules.js +295 -0
- package/src/internals/canvas/widgets/pasteRules.test.js +474 -0
- package/src/internals/canvas/widgets/snapshotDisplay.test.jsx +211 -0
- package/src/internals/canvas/widgets/tilePool.js +23 -0
- package/src/internals/canvas/widgets/tiles/diagonal-bl.png +0 -0
- package/src/internals/canvas/widgets/tiles/diagonal-br.png +0 -0
- package/src/internals/canvas/widgets/tiles/diagonal-tl.png +0 -0
- package/src/internals/canvas/widgets/tiles/leaf.png +0 -0
- package/src/internals/canvas/widgets/tiles/quarter-tl.png +0 -0
- package/src/internals/canvas/widgets/tiles/quarter-tr.png +0 -0
- package/src/internals/canvas/widgets/tiles/solid-a.png +0 -0
- package/src/internals/canvas/widgets/tiles/solid-b.png +0 -0
- package/src/internals/canvas/widgets/widgetConfig.js +291 -0
- package/src/internals/canvas/widgets/widgetConfig.test.js +68 -0
- package/src/internals/canvas/widgets/widgetIcons.jsx +190 -0
- package/src/internals/canvas/widgets/widgetProps.js +133 -0
- package/src/internals/context/FormContext.js +13 -0
- package/src/internals/context/FormContext.test.js +48 -0
- package/src/internals/context.jsx +481 -0
- package/src/internals/context.test.jsx +296 -0
- package/src/internals/hashPreserver.js +73 -0
- package/src/internals/hashPreserver.test.js +107 -0
- package/src/internals/hooks/useConfig.js +14 -0
- package/src/internals/hooks/useFeatureFlag.js +14 -0
- package/src/internals/hooks/useFlows.js +50 -0
- package/src/internals/hooks/useFlows.test.js +134 -0
- package/src/internals/hooks/useHideMode.js +31 -0
- package/src/internals/hooks/useHideMode.test.js +43 -0
- package/src/internals/hooks/useLocalStorage.js +57 -0
- package/src/internals/hooks/useLocalStorage.test.js +75 -0
- package/src/internals/hooks/useMode.js +43 -0
- package/src/internals/hooks/useObject.js +101 -0
- package/src/internals/hooks/useObject.test.js +74 -0
- package/src/internals/hooks/useOverride.js +84 -0
- package/src/internals/hooks/useOverride.test.js +71 -0
- package/src/internals/hooks/usePrototypeReloadGuard.js +64 -0
- package/src/internals/hooks/useRecord.js +158 -0
- package/src/internals/hooks/useRecord.test.js +221 -0
- package/src/internals/hooks/useScene.js +38 -0
- package/src/internals/hooks/useScene.test.js +66 -0
- package/src/internals/hooks/useSceneData.js +108 -0
- package/src/internals/hooks/useSceneData.test.js +136 -0
- package/src/internals/hooks/useSession.js +4 -0
- package/src/internals/hooks/useSession.test.js +8 -0
- package/src/internals/hooks/useThemeState.js +61 -0
- package/src/internals/hooks/useThemeState.test.js +66 -0
- package/src/internals/hooks/useUndoRedo.js +28 -0
- package/src/internals/hooks/useUndoRedo.test.js +64 -0
- package/src/internals/index.js +58 -0
- package/src/internals/story/ComponentSetPage.jsx +198 -0
- package/src/internals/story/ComponentSetPage.module.css +129 -0
- package/src/internals/story/StoryPage.jsx +147 -0
- package/src/internals/story/StoryPage.module.css +18 -0
- package/src/internals/test-utils.js +45 -0
- package/src/internals/vite/data-plugin.js +1508 -0
- package/src/internals/vite/data-plugin.test.js +1223 -0
- package/src/test-utils.js +44 -0
- package/toolbar.config.json +271 -0
- package/widgets.config.json +1537 -0
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
model = "o4-mini"
|
|
2
|
+
|
|
3
|
+
developer_instructions = """
|
|
4
|
+
|
|
5
|
+
# Terminal Agent Context
|
|
6
|
+
|
|
7
|
+
Before processing ANY user prompt, read the terminal config file for this session.
|
|
8
|
+
|
|
9
|
+
## Step 1: Read terminal config
|
|
10
|
+
|
|
11
|
+
Your widget ID is available via `$STORYBOARD_WIDGET_ID`. Use it to read your config directly:
|
|
12
|
+
```bash
|
|
13
|
+
cat .storyboard/terminals/${STORYBOARD_WIDGET_ID}.json
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
If the env var is empty, source it from the terminal env file first:
|
|
17
|
+
```bash
|
|
18
|
+
# Find the env file for this tmux session
|
|
19
|
+
ENV_FILE=$(ls -t .storyboard/terminals/*.env 2>/dev/null | head -1)
|
|
20
|
+
if [ -n "$ENV_FILE" ]; then source "$ENV_FILE"; fi
|
|
21
|
+
cat .storyboard/terminals/${STORYBOARD_WIDGET_ID}.json
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
If not found, tell the user that's the case -- do not pick a random one.
|
|
25
|
+
|
|
26
|
+
The config file contains everything you need — no additional API calls required:
|
|
27
|
+
|
|
28
|
+
```json
|
|
29
|
+
{
|
|
30
|
+
"widgetId": "terminal-abc123",
|
|
31
|
+
"canvasId": "storyboarding/my-canvas",
|
|
32
|
+
"branch": "4.2.0--terminal-agents",
|
|
33
|
+
"worktree": "4.2.0--terminal-agents",
|
|
34
|
+
"devDomain": "storyboard-core",
|
|
35
|
+
"serverUrl": "http://localhost:1269",
|
|
36
|
+
"workingDirectory": "/path/to/worktree",
|
|
37
|
+
"connectedWidgets": [
|
|
38
|
+
{
|
|
39
|
+
"id": "sticky-def456",
|
|
40
|
+
"type": "sticky-note",
|
|
41
|
+
"props": { "text": "Build a login form", "color": "yellow" }
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"id": "markdown-ghi789",
|
|
45
|
+
"type": "markdown",
|
|
46
|
+
"props": { "content": "# Requirements\n- Email + password\n- OAuth support" }
|
|
47
|
+
}
|
|
48
|
+
]
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Step 2: Use connected widget context
|
|
53
|
+
|
|
54
|
+
The `connectedWidgets` array contains the FULL props of every widget connected to this terminal. These are your **partners** (also known as **buddies**). This is your highest priority context.
|
|
55
|
+
|
|
56
|
+
When the user says "your partner", "your buddy", or "connected widget" — they mean widgets in your `connectedWidgets` array. If there's only one connected widget, "partner" and "buddy" refer to it directly. If there are multiple, ask which one.
|
|
57
|
+
|
|
58
|
+
- **sticky-note**: `props.text` — instructions, notes, or requirements
|
|
59
|
+
- **markdown**: `props.content` — documentation, specs, or prose
|
|
60
|
+
- **image**: `props.src` — image filename at `assets/canvas/images/{props.src}`
|
|
61
|
+
- **story**: `props.storyId` + `props.exportName` — component to work with
|
|
62
|
+
- **link-preview**: `props.url` — external reference
|
|
63
|
+
- **prototype**: `props.src` — prototype path
|
|
64
|
+
- **terminal** / **agent**: another terminal or agent you can message (see Step 6)
|
|
65
|
+
|
|
66
|
+
Interpret the user's prompt in light of these connected widgets.
|
|
67
|
+
|
|
68
|
+
## Step 3: Prefer CLI commands for canvas operations
|
|
69
|
+
|
|
70
|
+
**Always prefer `npx storyboard` CLI commands over HTTP API calls.** CLI commands run directly in the worktree and resolve the dev server automatically — no port numbers or URLs needed.
|
|
71
|
+
|
|
72
|
+
### Reading canvas state
|
|
73
|
+
```bash
|
|
74
|
+
npx storyboard canvas read <canvas-name> --json
|
|
75
|
+
npx storyboard canvas read <canvas-name> --id <widget-id> --json
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Updating a widget
|
|
79
|
+
```bash
|
|
80
|
+
# Update text on a sticky note
|
|
81
|
+
npx storyboard canvas update <widget-id> --canvas <canvas-name> --text "New text"
|
|
82
|
+
|
|
83
|
+
# Update markdown content
|
|
84
|
+
npx storyboard canvas update <widget-id> --canvas <canvas-name> --content "# New heading"
|
|
85
|
+
|
|
86
|
+
# Update arbitrary props
|
|
87
|
+
npx storyboard canvas update <widget-id> --canvas <canvas-name> --props '{"key":"value"}'
|
|
88
|
+
|
|
89
|
+
# Move a widget
|
|
90
|
+
npx storyboard canvas update <widget-id> --canvas <canvas-name> --x 100 --y 200
|
|
91
|
+
|
|
92
|
+
# Shorthand flags: --text, --content, --src, --url, --color
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Adding a widget
|
|
96
|
+
```bash
|
|
97
|
+
npx storyboard canvas add sticky-note --canvas <canvas-name> --props '{"text":"Hello"}'
|
|
98
|
+
npx storyboard canvas add markdown --canvas <canvas-name> --x 100 --y 200
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
**Why CLI over API:** The CLI resolves the correct dev server port automatically via the Caddy proxy or ports.json. You never need to know the port number. All commands work from any worktree directory.
|
|
102
|
+
|
|
103
|
+
## Step 4: Connect every widget you create
|
|
104
|
+
|
|
105
|
+
**After creating ANY widget on the canvas, always create a connector from the terminal widget to the new widget.** This keeps the canvas graph intact — every object the terminal creates must be visually linked back to it.
|
|
106
|
+
|
|
107
|
+
The connector API is HTTP-only (CLI doesn't support connectors yet). Use `$STORYBOARD_SERVER_URL`, `$STORYBOARD_CANVAS_ID`, and `$STORYBOARD_WIDGET_ID` from your environment.
|
|
108
|
+
|
|
109
|
+
### Example: Create a sticky note and connect it
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
# 1. Create the widget — capture its ID from the response
|
|
113
|
+
RESPONSE=$(curl -s -X POST "${STORYBOARD_SERVER_URL}/_storyboard/canvas/${STORYBOARD_CANVAS_ID}/widgets" \
|
|
114
|
+
-H "Content-Type: application/json" \
|
|
115
|
+
-d '{"type":"sticky-note","props":{"text":"Hello from terminal"}}')
|
|
116
|
+
|
|
117
|
+
NEW_ID=$(echo "$RESPONSE" | grep -o '"id":"[^"]*"' | head -1 | cut -d'"' -f4)
|
|
118
|
+
|
|
119
|
+
# 2. Connect terminal → new widget
|
|
120
|
+
curl -s -X POST "${STORYBOARD_SERVER_URL}/_storyboard/canvas/connector" \
|
|
121
|
+
-H "Content-Type: application/json" \
|
|
122
|
+
-d "{\"name\":\"${STORYBOARD_CANVAS_ID}\",\"startWidgetId\":\"${STORYBOARD_WIDGET_ID}\",\"endWidgetId\":\"${NEW_ID}\",\"startAnchor\":\"right\",\"endAnchor\":\"left\"}"
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Example: Create a markdown block and connect it
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
RESPONSE=$(curl -s -X POST "${STORYBOARD_SERVER_URL}/_storyboard/canvas/${STORYBOARD_CANVAS_ID}/widgets" \
|
|
129
|
+
-H "Content-Type: application/json" \
|
|
130
|
+
-d '{"type":"markdown","props":{"content":"# Plan\n- Step 1\n- Step 2"}}')
|
|
131
|
+
|
|
132
|
+
NEW_ID=$(echo "$RESPONSE" | grep -o '"id":"[^"]*"' | head -1 | cut -d'"' -f4)
|
|
133
|
+
|
|
134
|
+
curl -s -X POST "${STORYBOARD_SERVER_URL}/_storyboard/canvas/connector" \
|
|
135
|
+
-H "Content-Type: application/json" \
|
|
136
|
+
-d "{\"name\":\"${STORYBOARD_CANVAS_ID}\",\"startWidgetId\":\"${STORYBOARD_WIDGET_ID}\",\"endWidgetId\":\"${NEW_ID}\",\"startAnchor\":\"right\",\"endAnchor\":\"left\"}"
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Pattern: 1→n — terminal creates multiple widgets
|
|
140
|
+
|
|
141
|
+
When creating several widgets, connect each one back to the terminal individually:
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
for i in 1 2 3; do
|
|
145
|
+
RESPONSE=$(curl -s -X POST "${STORYBOARD_SERVER_URL}/_storyboard/canvas/${STORYBOARD_CANVAS_ID}/widgets" \
|
|
146
|
+
-H "Content-Type: application/json" \
|
|
147
|
+
-d "{\"type\":\"sticky-note\",\"props\":{\"text\":\"Task $i\"}}")
|
|
148
|
+
|
|
149
|
+
NEW_ID=$(echo "$RESPONSE" | grep -o '"id":"[^"]*"' | head -1 | cut -d'"' -f4)
|
|
150
|
+
|
|
151
|
+
curl -s -X POST "${STORYBOARD_SERVER_URL}/_storyboard/canvas/connector" \
|
|
152
|
+
-H "Content-Type: application/json" \
|
|
153
|
+
-d "{\"name\":\"${STORYBOARD_CANVAS_ID}\",\"startWidgetId\":\"${STORYBOARD_WIDGET_ID}\",\"endWidgetId\":\"${NEW_ID}\",\"startAnchor\":\"right\",\"endAnchor\":\"left\"}"
|
|
154
|
+
done
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
**Anchor guidance:** Use `"right"` → `"left"` by default (terminal on left, new widgets to the right). Adjust if the spatial layout calls for a different direction.
|
|
158
|
+
|
|
159
|
+
> For the full connector API (delete, direction, validation rules), see the **Connectors** section in the canvas skill docs.
|
|
160
|
+
|
|
161
|
+
## Step 5: Signal completion
|
|
162
|
+
|
|
163
|
+
When your task is complete:
|
|
164
|
+
```bash
|
|
165
|
+
npx storyboard agent signal --status done --message "Brief summary"
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
On failure:
|
|
169
|
+
```bash
|
|
170
|
+
npx storyboard agent signal --status error --message "What went wrong"
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
## Step 6: Messaging with connected terminals
|
|
174
|
+
|
|
175
|
+
If your terminal config has a `messaging` section, you can exchange messages with connected terminal/agent peers. Check your config:
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
cat .storyboard/terminals/${STORYBOARD_WIDGET_ID}.json | jq '.messaging'
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### Send a message to a peer
|
|
182
|
+
```bash
|
|
183
|
+
npx storyboard terminal send <peerWidgetId> "Your message here"
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
Or auto-resolve the connected peer (only works with a single connected terminal):
|
|
187
|
+
```bash
|
|
188
|
+
npx storyboard terminal send --connected "Your message here"
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### Save your output for peers to read
|
|
192
|
+
|
|
193
|
+
**IMPORTANT: You MUST save your output after every response when messaging is enabled.** This is how your peer reads what you said — without it, they see `null`.
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
npx storyboard terminal output --summary "One-line summary" --content "Your full response text here"
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
Peers read your output from your config file:
|
|
200
|
+
```bash
|
|
201
|
+
cat .storyboard/terminals/${STORYBOARD_WIDGET_ID}.json | jq '.latestOutput.content'
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### Check a peer's status
|
|
205
|
+
```bash
|
|
206
|
+
npx storyboard terminal status <peerWidgetId>
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### Read a peer's latest output
|
|
210
|
+
```bash
|
|
211
|
+
cat .storyboard/terminals/<peerWidgetId>.json | jq '.latestOutput'
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### Messaging modes
|
|
215
|
+
Messaging is controlled by the user via the 💬 menu on terminal widgets:
|
|
216
|
+
- **No messaging** — you cannot send or receive (default)
|
|
217
|
+
- **One-way →** — only one direction is allowed
|
|
218
|
+
- **Two-way ↔** — both terminals can send freely
|
|
219
|
+
|
|
220
|
+
Check your `messaging.peers` array to see which peers you can message and in which direction (`canSend` / `canReceive`).
|
|
221
|
+
|
|
222
|
+
**IMPORTANT:**
|
|
223
|
+
- NEVER write directly to `.canvas.jsonl` files — use the canvas CLI or server API
|
|
224
|
+
- **Prefer CLI commands** (`npx storyboard canvas ...`) over direct HTTP calls — they resolve ports automatically
|
|
225
|
+
- Only fall back to HTTP API (`{serverUrl}/_storyboard/canvas/`) if the CLI doesn't support the operation
|
|
226
|
+
- Environment variables `$STORYBOARD_WIDGET_ID`, `$STORYBOARD_CANVAS_ID`, `$STORYBOARD_BRANCH`, `$STORYBOARD_SERVER_URL` are available in the shell
|
|
227
|
+
|
|
228
|
+
## HTTP API Reference (fallback only)
|
|
229
|
+
|
|
230
|
+
If the CLI fails, use these endpoints. The `serverUrl` is in your terminal config or `$STORYBOARD_SERVER_URL`.
|
|
231
|
+
|
|
232
|
+
### Safe: Update a single widget (PATCH)
|
|
233
|
+
```bash
|
|
234
|
+
curl -s -X PATCH "${STORYBOARD_SERVER_URL}/_storyboard/canvas/widget" \
|
|
235
|
+
-H "Content-Type: application/json" \
|
|
236
|
+
-d '{"name":"<canvasId>","widgetId":"<widgetId>","props":{"text":"new value"}}'
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
### Safe: Read canvas state (GET)
|
|
240
|
+
```bash
|
|
241
|
+
curl -s "${STORYBOARD_SERVER_URL}/_storyboard/canvas/<canvasId>"
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
### ⚠️ NEVER use `PUT /_storyboard/canvas/update` with a `widgets` array
|
|
245
|
+
That endpoint **replaces ALL widgets** in the canvas. Sending one widget = deleting everything else.
|
|
246
|
+
"""
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
name: Deploy (main)
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
|
|
8
|
+
concurrency:
|
|
9
|
+
group: gh-pages-deploy
|
|
10
|
+
cancel-in-progress: false
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
deploy:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
permissions:
|
|
16
|
+
contents: write
|
|
17
|
+
|
|
18
|
+
steps:
|
|
19
|
+
- name: Checkout source
|
|
20
|
+
uses: actions/checkout@v6
|
|
21
|
+
|
|
22
|
+
- name: Setup Node
|
|
23
|
+
uses: actions/setup-node@v6
|
|
24
|
+
with:
|
|
25
|
+
node-version: 22
|
|
26
|
+
|
|
27
|
+
- name: Install dependencies
|
|
28
|
+
run: npm ci
|
|
29
|
+
|
|
30
|
+
- name: Build project
|
|
31
|
+
run: npm run build
|
|
32
|
+
|
|
33
|
+
- name: Deploy to gh-pages (root)
|
|
34
|
+
run: |
|
|
35
|
+
set -e
|
|
36
|
+
|
|
37
|
+
# Configure git
|
|
38
|
+
git config user.name "github-actions[bot]"
|
|
39
|
+
git config user.email "github-actions[bot]@users.noreply.github.com"
|
|
40
|
+
|
|
41
|
+
# Clone gh-pages branch (or create it)
|
|
42
|
+
git fetch origin gh-pages:gh-pages 2>/dev/null || true
|
|
43
|
+
DEPLOY_DIR=$(mktemp -d)
|
|
44
|
+
if git show-ref --verify --quiet refs/heads/gh-pages; then
|
|
45
|
+
git worktree add "$DEPLOY_DIR" gh-pages
|
|
46
|
+
else
|
|
47
|
+
git worktree add --orphan "$DEPLOY_DIR" gh-pages
|
|
48
|
+
rm -rf "$DEPLOY_DIR"/*
|
|
49
|
+
fi
|
|
50
|
+
|
|
51
|
+
# Remove root-level files only (preserve branch--* folders)
|
|
52
|
+
cd "$DEPLOY_DIR"
|
|
53
|
+
find . -maxdepth 1 ! -name '.' ! -name '.git' ! -name 'branch--*' -exec rm -rf {} +
|
|
54
|
+
|
|
55
|
+
# Copy new build output (includes CNAME if customDomain is set)
|
|
56
|
+
cp -r "$GITHUB_WORKSPACE/dist/." .
|
|
57
|
+
|
|
58
|
+
# Ensure .nojekyll exists at root (GitHub Pages ignores _-prefixed dirs without it)
|
|
59
|
+
touch .nojekyll
|
|
60
|
+
|
|
61
|
+
# Commit and push
|
|
62
|
+
git add -A
|
|
63
|
+
git diff --cached --quiet && echo "No changes to deploy" && exit 0
|
|
64
|
+
git commit -m "Deploy main @ $(echo $GITHUB_SHA | head -c 7)"
|
|
65
|
+
git push origin gh-pages
|
|
66
|
+
|
|
67
|
+
- name: Generate branch manifest
|
|
68
|
+
run: |
|
|
69
|
+
set -e
|
|
70
|
+
# Remove stale worktrees from previous steps
|
|
71
|
+
git worktree list --porcelain | awk '/^worktree \/tmp/{print $2}' | while read wt; do
|
|
72
|
+
git worktree remove --force "$wt" 2>/dev/null || true
|
|
73
|
+
done
|
|
74
|
+
git fetch origin gh-pages:gh-pages 2>/dev/null || true
|
|
75
|
+
DEPLOY_DIR=$(mktemp -d)
|
|
76
|
+
git worktree add "$DEPLOY_DIR" gh-pages
|
|
77
|
+
|
|
78
|
+
cd "$DEPLOY_DIR"
|
|
79
|
+
|
|
80
|
+
# Build branches.json from branch--* folders
|
|
81
|
+
echo '[' > branches.json
|
|
82
|
+
FIRST=true
|
|
83
|
+
for dir in branch--*/; do
|
|
84
|
+
[ -d "$dir" ] || continue
|
|
85
|
+
FOLDER="${dir%/}"
|
|
86
|
+
# Extract branch name: strip "branch--" prefix
|
|
87
|
+
BRANCH="${FOLDER#branch--}"
|
|
88
|
+
if [ "$FIRST" = true ]; then
|
|
89
|
+
FIRST=false
|
|
90
|
+
else
|
|
91
|
+
echo ',' >> branches.json
|
|
92
|
+
fi
|
|
93
|
+
printf ' {"folder":"%s","branch":"%s"}' "$FOLDER" "$BRANCH" >> branches.json
|
|
94
|
+
done
|
|
95
|
+
echo '' >> branches.json
|
|
96
|
+
echo ']' >> branches.json
|
|
97
|
+
|
|
98
|
+
git add branches.json
|
|
99
|
+
git diff --cached --quiet && echo "Manifest unchanged" && exit 0
|
|
100
|
+
git config user.name "github-actions[bot]"
|
|
101
|
+
git config user.email "github-actions[bot]@users.noreply.github.com"
|
|
102
|
+
git commit -m "Update branch manifest"
|
|
103
|
+
git push origin gh-pages
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
#
|
|
3
|
+
# pre-push pipeline — runs checks and generators before pushing.
|
|
4
|
+
#
|
|
5
|
+
# Pipeline stages run in order. Each stage can:
|
|
6
|
+
# - Pass silently (exit 0)
|
|
7
|
+
# - Fail and block the push (exit 1) — all changes are reverted
|
|
8
|
+
# - Generate files that get auto-committed
|
|
9
|
+
#
|
|
10
|
+
# Add new stages by defining a function and adding it to STAGES.
|
|
11
|
+
#
|
|
12
|
+
# Installed by: storyboard setup / storyboard-scaffold
|
|
13
|
+
#
|
|
14
|
+
|
|
15
|
+
set -euo pipefail
|
|
16
|
+
|
|
17
|
+
# ── Configuration ─────────────────────────────────────────────────
|
|
18
|
+
# Ordered list of stages. Add new stages here.
|
|
19
|
+
# Note: snapshot generation moved to CI (snapshots.yml workflow).
|
|
20
|
+
STAGES=(
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
# ── Helpers ───────────────────────────────────────────────────────
|
|
24
|
+
|
|
25
|
+
SNAPSHOT_SHA=""
|
|
26
|
+
RED='\033[0;31m'
|
|
27
|
+
GREEN='\033[0;32m'
|
|
28
|
+
DIM='\033[2m'
|
|
29
|
+
BOLD='\033[1m'
|
|
30
|
+
RESET='\033[0m'
|
|
31
|
+
|
|
32
|
+
log() { echo -e "${DIM}[pre-push]${RESET} $*"; }
|
|
33
|
+
ok() { echo -e "${DIM}[pre-push]${RESET} ${GREEN}✓${RESET} $*"; }
|
|
34
|
+
fail() { echo -e "${DIM}[pre-push]${RESET} ${RED}✗${RESET} $*"; }
|
|
35
|
+
|
|
36
|
+
save_snapshot() {
|
|
37
|
+
SNAPSHOT_SHA=$(git rev-parse HEAD)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
revert_snapshot() {
|
|
41
|
+
if [ -n "$SNAPSHOT_SHA" ] && [ "$(git rev-parse HEAD)" != "$SNAPSHOT_SHA" ]; then
|
|
42
|
+
log "Reverting auto-committed changes..."
|
|
43
|
+
git reset --soft "$SNAPSHOT_SHA" 2>/dev/null || true
|
|
44
|
+
fi
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
auto_commit() {
|
|
48
|
+
local label="$1"
|
|
49
|
+
shift
|
|
50
|
+
local paths=("$@")
|
|
51
|
+
|
|
52
|
+
local changes=""
|
|
53
|
+
for p in "${paths[@]}"; do
|
|
54
|
+
changes+=$(git status --porcelain "$p" 2>/dev/null || true)
|
|
55
|
+
done
|
|
56
|
+
|
|
57
|
+
if [ -n "$changes" ]; then
|
|
58
|
+
git add "${paths[@]}" 2>/dev/null
|
|
59
|
+
git commit -m "chore: ${label}" --no-verify --allow-empty 2>/dev/null
|
|
60
|
+
ok "${label} (committed)"
|
|
61
|
+
return 0
|
|
62
|
+
fi
|
|
63
|
+
return 1
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
# ── Stages ────────────────────────────────────────────────────────
|
|
67
|
+
|
|
68
|
+
stage_test() {
|
|
69
|
+
if [ ! -f "vitest.config.js" ] && [ ! -f "vitest.config.ts" ]; then return 0; fi
|
|
70
|
+
if ! command -v npx &>/dev/null; then return 0; fi
|
|
71
|
+
|
|
72
|
+
log "Running tests..."
|
|
73
|
+
if npx --no-install vitest run --reporter=dot 2>&1; then
|
|
74
|
+
ok "Tests passed"
|
|
75
|
+
else
|
|
76
|
+
fail "Tests failed — push blocked"
|
|
77
|
+
return 1
|
|
78
|
+
fi
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
stage_snapshots() {
|
|
82
|
+
local canvas_files
|
|
83
|
+
canvas_files=$(find src/canvas -name "*.canvas.jsonl" 2>/dev/null | head -1)
|
|
84
|
+
[ -z "$canvas_files" ] && return 0
|
|
85
|
+
|
|
86
|
+
if ! npx --no-install storyboard snapshots 2>&1; then
|
|
87
|
+
log "Snapshot generation skipped"
|
|
88
|
+
return 0
|
|
89
|
+
fi
|
|
90
|
+
|
|
91
|
+
auto_commit "update canvas snapshots" \
|
|
92
|
+
"assets/canvas/snapshots/" \
|
|
93
|
+
"assets/canvas/images/" \
|
|
94
|
+
"src/canvas/" \
|
|
95
|
+
|| true
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
# ── Pipeline runner ───────────────────────────────────────────────
|
|
99
|
+
|
|
100
|
+
main() {
|
|
101
|
+
save_snapshot
|
|
102
|
+
|
|
103
|
+
for stage in "${STAGES[@]}"; do
|
|
104
|
+
if ! "$stage"; then
|
|
105
|
+
revert_snapshot
|
|
106
|
+
fail "${BOLD}Push aborted${RESET} by ${stage}"
|
|
107
|
+
exit 1
|
|
108
|
+
fi
|
|
109
|
+
done
|
|
110
|
+
|
|
111
|
+
log "${GREEN}All stages passed${RESET}"
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
main
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
|
2
|
+
|
|
3
|
+
# dependencies
|
|
4
|
+
/node_modules
|
|
5
|
+
/packages/**/node_modules
|
|
6
|
+
/.pnp
|
|
7
|
+
.pnp.js
|
|
8
|
+
|
|
9
|
+
# testing
|
|
10
|
+
/coverage
|
|
11
|
+
|
|
12
|
+
# production
|
|
13
|
+
/build
|
|
14
|
+
/dist
|
|
15
|
+
|
|
16
|
+
# misc
|
|
17
|
+
.DS_Store
|
|
18
|
+
.env.local
|
|
19
|
+
.env.development.local
|
|
20
|
+
.env.test.local
|
|
21
|
+
.env.production.local
|
|
22
|
+
|
|
23
|
+
npm-debug.log*
|
|
24
|
+
yarn-debug.log*
|
|
25
|
+
yarn-error.log*
|
|
26
|
+
.playwright-profile
|
|
27
|
+
|
|
28
|
+
.github/skills/_archive
|
|
29
|
+
.github/skills/primer-primitives
|
|
30
|
+
.github/skills/primer-components-catalog
|
|
31
|
+
.github/skills/primer-screenshot-builder
|
|
32
|
+
.github/skills/primer-screenshot-patterns
|
|
33
|
+
.github/skills/primer-url-builder
|
|
34
|
+
.github/skills/playwright-cli
|
|
35
|
+
.worktrees
|
|
36
|
+
# Agent symlinks are build targets — source of truth is .agents/agents/
|
|
37
|
+
# storyboard setup creates symlinks for Copilot CLI and Claude Code
|
|
38
|
+
.github/agents/_buddy-rails.md
|
|
39
|
+
.github/agents/_buddy.md
|
|
40
|
+
.github/agents/terminal-agent.md
|
|
41
|
+
.github/agents/prompt-agent.md
|
|
42
|
+
.claude/agents/
|
|
43
|
+
_*.md
|
|
44
|
+
|
|
45
|
+
# Compiled UI bundle (built before publish, not tracked in git)
|
|
46
|
+
packages/core/dist/storyboard-ui.*
|
|
47
|
+
|
|
48
|
+
.clips
|
|
49
|
+
|
|
50
|
+
# Agent Browser
|
|
51
|
+
agent-browser.json
|
|
52
|
+
|
|
53
|
+
# Selected widgets bridge (real-time canvas selection for Copilot)
|
|
54
|
+
.storyboard
|
|
55
|
+
|
|
56
|
+
# Private canvas images (tilde prefix = not committed)
|
|
57
|
+
src/canvas/images/~*
|
|
58
|
+
assets/canvas/images/~*
|
|
59
|
+
assets/canvas/snapshots/~*
|
|
60
|
+
assets/.storyboard-public/terminal-snapshots/~*
|
|
61
|
+
.sync-target
|
|
62
|
+
|
|
63
|
+
# Integration test results (ephemeral local artifacts)
|
|
64
|
+
test-results/
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"files": [
|
|
3
|
+
{
|
|
4
|
+
"source": "scaffold/AGENTS.md",
|
|
5
|
+
"target": "AGENTS.md",
|
|
6
|
+
"mode": "updateable"
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
"source": "scaffold/gitignore",
|
|
10
|
+
"target": ".gitignore",
|
|
11
|
+
"mode": "updateable"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"source": "scaffold/storyboard.config.json",
|
|
15
|
+
"target": "storyboard.config.json",
|
|
16
|
+
"mode": "scaffold"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"source": "scaffold/scripts/link.sh",
|
|
20
|
+
"target": "scripts/link.sh",
|
|
21
|
+
"mode": "updateable"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"source": "scaffold/scripts/unlink.sh",
|
|
25
|
+
"target": "scripts/unlink.sh",
|
|
26
|
+
"mode": "updateable"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"source": "scaffold/skills/",
|
|
30
|
+
"target": ".github/skills/",
|
|
31
|
+
"mode": "updateable",
|
|
32
|
+
"directory": true
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"source": "scaffold/deploy.yml",
|
|
36
|
+
"target": ".github/workflows/deploy.yml",
|
|
37
|
+
"mode": "updateable"
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"source": "scaffold/preview.yml",
|
|
41
|
+
"target": ".github/workflows/preview.yml",
|
|
42
|
+
"mode": "updateable"
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
"source": "scaffold/githooks/",
|
|
46
|
+
"target": ".githooks/",
|
|
47
|
+
"mode": "updateable",
|
|
48
|
+
"directory": true
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"source": "scaffold/codex/config.toml",
|
|
52
|
+
"target": ".codex/config.toml",
|
|
53
|
+
"mode": "updateable"
|
|
54
|
+
}
|
|
55
|
+
]
|
|
56
|
+
}
|