stream_weaver 0.3.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.
Files changed (381) hide show
  1. checksums.yaml +7 -0
  2. data/.beads/.gitignore +77 -0
  3. data/.beads/README.md +81 -0
  4. data/.beads/config.yaml +54 -0
  5. data/.beads/metadata.json +7 -0
  6. data/.rspec +3 -0
  7. data/AGENTS.md +91 -0
  8. data/CHANGELOG.md +294 -0
  9. data/CLAUDE.md +67 -0
  10. data/LICENSE.txt +21 -0
  11. data/README.md +565 -0
  12. data/Rakefile +13 -0
  13. data/assets/streamweaver-hero.jpg +0 -0
  14. data/bench/baselines/ledger.rb +58 -0
  15. data/bench/baselines/warroom.rb +51 -0
  16. data/bench/fixtures/ledger.rb +76 -0
  17. data/bench/fixtures/warroom.rb +60 -0
  18. data/bench/results/6daf8b8.md +102 -0
  19. data/bench/results/c8d749b.md +102 -0
  20. data/bench/results/eb06ab9.md +102 -0
  21. data/bench/run.rb +151 -0
  22. data/bench/support.rb +84 -0
  23. data/copy_this/dto_run_sample_run_7631.html +220 -0
  24. data/docs/SERVICE_MODE.md +302 -0
  25. data/docs/architecture/how_streamweaver_works.md +772 -0
  26. data/docs/blog/2026-01-16-streamweaver-introduction.md +515 -0
  27. data/docs/bug-2026-08-31-canvas-bridge-socket-collision.md +83 -0
  28. data/docs/canvas-ipc-session-summary.md +127 -0
  29. data/docs/canvas-panel-workflow.md +172 -0
  30. data/docs/canvas-read.md +147 -0
  31. data/docs/canvas-roadmap.md +275 -0
  32. data/docs/case-studies/2026-09-03-didx-canvas-read-shelf.md +147 -0
  33. data/docs/claude-code-companion-skill-spec.md +567 -0
  34. data/docs/components_reference.md +1223 -0
  35. data/docs/crud-patterns.md +265 -0
  36. data/docs/endpoints.md +122 -0
  37. data/docs/for_llms.md +1 -0
  38. data/docs/form-patterns.md +165 -0
  39. data/docs/frontend-only.md +169 -0
  40. data/docs/html-artifact-audit.md +238 -0
  41. data/docs/ideas/2025-01-01-as-a-service.md +203 -0
  42. data/docs/ideas/2026-01-16-charm-tui-exploration.md +542 -0
  43. data/docs/ideas/2026-08-27-static-doc-shelf-export.md +153 -0
  44. data/docs/ideas/dhh-review-future-refactors.md +142 -0
  45. data/docs/opal-jamstack.md +47 -0
  46. data/docs/opal-npm-direction.md +184 -0
  47. data/docs/opal-spike-findings.md +194 -0
  48. data/docs/plans/2025-12-16-form-blocks-design.md +124 -0
  49. data/docs/plans/2025-12-30-examples-browser-design.md +152 -0
  50. data/docs/plans/2026-01-02-charts-design.md +288 -0
  51. data/docs/plans/2026-01-10-canvas-ipc-design.md +247 -0
  52. data/docs/plans/2026-01-19-cabinet-control-components.md +176 -0
  53. data/docs/plans/2026-01-26-gem-release-and-panel.md +140 -0
  54. data/docs/plans/canvas-claude-project-design.md +238 -0
  55. data/docs/plans/canvas-doc-location-and-discovery.md +32 -0
  56. data/docs/plans/org-doc-preview-surfaces.md +293 -0
  57. data/docs/plans/shadcn-polish-plan.md +417 -0
  58. data/docs/porting-artifacts.md +252 -0
  59. data/docs/reference/agent-skills-comparison.md +369 -0
  60. data/docs/reference/travel-state-prd.artifact.html +780 -0
  61. data/docs/research/2026-08-17-hotwire-alike-landscape.md +268 -0
  62. data/docs/research/2026-08-17-hotwire-concept-map.md +404 -0
  63. data/docs/research/2026-08-22-lazy-fragments-trigger-decision.md +246 -0
  64. data/docs/research/2026-08-22-learnhotwire-syllabus-coverage.md +239 -0
  65. data/docs/research/frontend-only-matrix.md +278 -0
  66. data/docs/research/streamweaver-way-spike-findings.md +529 -0
  67. data/docs/resource-dsl.md +342 -0
  68. data/docs/routing.md +302 -0
  69. data/docs/ruby-ui-comparison.md +319 -0
  70. data/docs/shared-dsl-fragments.md +356 -0
  71. data/docs/streamweaver-for-ai-agents.md +401 -0
  72. data/docs/streamweaver-frontend-vision.md +123 -0
  73. data/docs/streamweaver_canvas/glimmer_initial_final_layer.rb +77 -0
  74. data/docs/streamweaver_canvas/save_example.rb +9 -0
  75. data/docs/templates.md +213 -0
  76. data/docs/testing.md +155 -0
  77. data/docs/theming-hooks.md +281 -0
  78. data/docs/tutorials/the-streamweaver-way.md +882 -0
  79. data/docs/university/capability-inventory.md +137 -0
  80. data/docs/university/dependency-survey.md +114 -0
  81. data/docs/university/design-spec.md +217 -0
  82. data/docs/university/mockups/code-block-doc-theme-dark.png +0 -0
  83. data/docs/university/mockups/code-block-doc-theme-light.png +0 -0
  84. data/docs/university/mockups/course-list-dark.png +0 -0
  85. data/docs/university/mockups/course-list-light.png +0 -0
  86. data/docs/university/mockups/course_canvas_mockup.rb +741 -0
  87. data/docs/university/mockups/step-screen-dark.png +0 -0
  88. data/docs/university/mockups/step-screen-light.png +0 -0
  89. data/docs/university/roadmap.md +72 -0
  90. data/docs/university/send-to-coworker.md +77 -0
  91. data/docs/university/worker-session-mining.md +109 -0
  92. data/docs/visual/browser-rendering-spike.md +173 -0
  93. data/docs/visual/builder-visual-plan-analysis.md +378 -0
  94. data/docs/visual/sw-plan-format-exploration.md +511 -0
  95. data/docs/visual/sw-plan-rendering-deep-dive.md +453 -0
  96. data/docs/visual-skills/PROGRESS.md +60 -0
  97. data/docs/visual-skills/SESSION-CONTEXT.md +207 -0
  98. data/docs/visual-skills/analysis/components.md +317 -0
  99. data/docs/visual-skills/analysis/overlap.md +360 -0
  100. data/docs/visual-skills/analysis/pi-design-deck.md +1102 -0
  101. data/docs/visual-skills/analysis/streamweaver-inventory.md +93 -0
  102. data/docs/visual-skills/analysis/unified-specs.feature +1003 -0
  103. data/docs/visual-skills/analysis/visual-explainer.md +964 -0
  104. data/docs/visual-skills/blog/blog-series-outline.md +39 -0
  105. data/docs/visual-skills/blog/token-efficiency.md +73 -0
  106. data/docs/visual-skills/design/architecture.md +1725 -0
  107. data/docs/visual-skills/design/codex-review.md +340 -0
  108. data/docs/visual-skills/design/dhh-review.md +209 -0
  109. data/docs/visual-skills/design/evolution.md +100 -0
  110. data/docs/visual-skills/design/gemini-review.md +55 -0
  111. data/docs/visual-skills/design/review-synthesis.md +149 -0
  112. data/docs/visual-skills/implementation/STATE.md +22 -0
  113. data/docs/visual-skills/implementation/plan.md +347 -0
  114. data/docs/visual-skills/implementation/spike-findings.md +237 -0
  115. data/docs/visual-skills/implementation/tasks.md +702 -0
  116. data/docs/visual-skills/lessons-learned/process.md +145 -0
  117. data/examples/README.md +96 -0
  118. data/examples/advanced/all_components.rb +177 -0
  119. data/examples/advanced/examples_browser.rb +394 -0
  120. data/examples/advanced/teachables_browser.rb +261 -0
  121. data/examples/advanced/theme_tweaker.rb +366 -0
  122. data/examples/advanced/tutorial.rb +1528 -0
  123. data/examples/agentic/agentic_form.rb +30 -0
  124. data/examples/agentic/agentic_form_autoclose.rb +30 -0
  125. data/examples/agentic/cultivation_tracker.rb +69 -0
  126. data/examples/basic/hello_world.rb +22 -0
  127. data/examples/basic/opal_tabs_table.rb +44 -0
  128. data/examples/basic/todo_list.rb +39 -0
  129. data/examples/button_loading_test.rb +36 -0
  130. data/examples/canvas/mermaid_canvas_demo.sh +151 -0
  131. data/examples/charts/bar_chart_demo.rb +57 -0
  132. data/examples/charts/line_chart_demo.rb +73 -0
  133. data/examples/charts/pie_area_demo.rb +87 -0
  134. data/examples/charts/stacked_bar_chart_demo.rb +69 -0
  135. data/examples/claude_code/README.md +85 -0
  136. data/examples/claude_code/codebreaker/.claude/commands/infiltrate.md +632 -0
  137. data/examples/claude_code/codebreaker/.claude/settings.json +11 -0
  138. data/examples/claude_code/codebreaker/.claude/settings.local.json +17 -0
  139. data/examples/claude_code/codebreaker/.claude/skills/infiltrate.md +0 -0
  140. data/examples/claude_code/codebreaker/README.md +213 -0
  141. data/examples/claude_code/tutorial/.claude/commands/learn.md +453 -0
  142. data/examples/claude_code/tutorial/README.md +102 -0
  143. data/examples/claude_code/verification_flow/.claude/commands/verify.md +171 -0
  144. data/examples/claude_code/verification_flow/README.md +126 -0
  145. data/examples/components/annotated_code_demo.rb +54 -0
  146. data/examples/components/callout_demo.rb +33 -0
  147. data/examples/components/checkbox_group_demo.rb +46 -0
  148. data/examples/components/design_review.css +468 -0
  149. data/examples/components/design_review_demo.rb +44 -0
  150. data/examples/components/design_review_dsl.rb +300 -0
  151. data/examples/components/diff_block_demo.rb +112 -0
  152. data/examples/components/events_demo.rb +184 -0
  153. data/examples/components/form_demo.rb +62 -0
  154. data/examples/components/lesson_demo.rb +53 -0
  155. data/examples/components/markdown_demo.rb +110 -0
  156. data/examples/components/mermaid_demo.rb +166 -0
  157. data/examples/components/pareto_set.rb +64 -0
  158. data/examples/components/prd_demo.rb +21 -0
  159. data/examples/components/prd_dsl.rb +385 -0
  160. data/examples/components/quiz_demo.rb +47 -0
  161. data/examples/components/run_viewer_demo.rb +100 -0
  162. data/examples/components/score_and_collapsible_demo.rb +82 -0
  163. data/examples/components/select_stale_value_smoke_test.rb +39 -0
  164. data/examples/components/table_demo.rb +247 -0
  165. data/examples/components/timer_with_state_demo.rb +58 -0
  166. data/examples/components/todo_due_dates.rb +63 -0
  167. data/examples/components/uat_gaps_demo.rb +112 -0
  168. data/examples/dashboard/feed_simulator.rb +60 -0
  169. data/examples/dashboard/live_dashboard.rb +80 -0
  170. data/examples/dashboard_components.rb +108 -0
  171. data/examples/deferred_fragments_demo.rb +62 -0
  172. data/examples/generate_more_spike/README.md +63 -0
  173. data/examples/generate_more_spike/app.rb +441 -0
  174. data/examples/git_health.sh +401 -0
  175. data/examples/layout/layout_components_demo.rb +174 -0
  176. data/examples/layout/modal_demo.rb +215 -0
  177. data/examples/layout/navigation_demo.rb +227 -0
  178. data/examples/layout/route_tabs_demo.rb +52 -0
  179. data/examples/layout/routing_demo.rb +52 -0
  180. data/examples/layout/scroll_box_demo.rb +154 -0
  181. data/examples/lazy_fragments_demo.rb +151 -0
  182. data/examples/my_todos/README.md +29 -0
  183. data/examples/my_todos/my_todos.rb +312 -0
  184. data/examples/my_todos/store.rb +86 -0
  185. data/examples/opal/reactive_demo.rb +62 -0
  186. data/examples/opal/scenarios/s1_counter.rb +15 -0
  187. data/examples/opal/scenarios/s2_search_filter.rb +17 -0
  188. data/examples/opal/scenarios/s3_sibling_tabs.rb +25 -0
  189. data/examples/opal/scenarios/s4_shopping_cart.rb +34 -0
  190. data/examples/opal/scenarios/s5_watch.rb +39 -0
  191. data/examples/opal/scenarios/s6_on_start.rb +20 -0
  192. data/examples/opal/scenarios/s7_wizard.rb +33 -0
  193. data/examples/opal/scenarios/s8_loan_calculator.rb +21 -0
  194. data/examples/opal/scenarios/s9_dashboard.rb +27 -0
  195. data/examples/operations_dashboard_demo.rb +167 -0
  196. data/examples/panel_demo.sh +447 -0
  197. data/examples/parity/assets/tyrion_slice.css +86 -0
  198. data/examples/parity/rivet_people_slice.rb +182 -0
  199. data/examples/parity/tyrion_components.css +777 -0
  200. data/examples/parity/tyrion_warroom_components.rb +414 -0
  201. data/examples/parity/tyrion_warroom_slice.rb +549 -0
  202. data/examples/puma_dev/README.md +124 -0
  203. data/examples/puma_dev/config.ru +34 -0
  204. data/examples/puma_dev/standalone_app.rb +34 -0
  205. data/examples/scaffolding/blog.rb +49 -0
  206. data/examples/scaffolding/utf_lite.rb +105 -0
  207. data/examples/styling/feedback_demo.rb +229 -0
  208. data/examples/styling/style_showcase.rb +172 -0
  209. data/examples/styling/theme_demo.rb +508 -0
  210. data/examples/timer_health_checker.rb +111 -0
  211. data/examples/timer_showcase.rb +131 -0
  212. data/examples/tutorials/render_markdown.rb +112 -0
  213. data/examples/tutorials/streamweaver_way_tutorial.rb +44 -0
  214. data/examples/tutorials/tutorial_content.rb +1082 -0
  215. data/examples/visual_skills/design_deck_demo.rb +314 -0
  216. data/examples/visual_skills/explainer_demo.rb +499 -0
  217. data/exe/streamweaver +9 -0
  218. data/gsd/ROADMAP-1.0.md +167 -0
  219. data/gsd/STATE.md +13 -0
  220. data/gsd/research/market-positioning-research.md +139 -0
  221. data/gsd/research/production-patterns-research.md +270 -0
  222. data/gsd/research/repo-audit-1.0.md +274 -0
  223. data/lib/stream_weaver/action_token.rb +58 -0
  224. data/lib/stream_weaver/adapter/alpinejs.rb +8249 -0
  225. data/lib/stream_weaver/adapter/base.rb +591 -0
  226. data/lib/stream_weaver/adapter/opal.rb +334 -0
  227. data/lib/stream_weaver/adapter/static.rb +1118 -0
  228. data/lib/stream_weaver/admin.rb +176 -0
  229. data/lib/stream_weaver/app.rb +1821 -0
  230. data/lib/stream_weaver/assets/js/sw-copy.js +50 -0
  231. data/lib/stream_weaver/assets/js/sw-heredoc-rewrite.js +68 -0
  232. data/lib/stream_weaver/assets/js/sw-keyboard.js +165 -0
  233. data/lib/stream_weaver/assets/js/sw-mermaid-zoom.js +621 -0
  234. data/lib/stream_weaver/assets/js/sw-route-tabs.js +53 -0
  235. data/lib/stream_weaver/assets/js/sw-sidebar-toc.js +116 -0
  236. data/lib/stream_weaver/assets/js/sw-slide-nav.js +103 -0
  237. data/lib/stream_weaver/canvas/bridge.rb +239 -0
  238. data/lib/stream_weaver/canvas/bridge_server.rb +646 -0
  239. data/lib/stream_weaver/canvas/client.rb +298 -0
  240. data/lib/stream_weaver/canvas/doc_roots.rb +233 -0
  241. data/lib/stream_weaver/canvas/doc_store.rb +252 -0
  242. data/lib/stream_weaver/canvas/gist_publisher.rb +264 -0
  243. data/lib/stream_weaver/canvas/gist_save_handler.rb +89 -0
  244. data/lib/stream_weaver/canvas/gist_store.rb +135 -0
  245. data/lib/stream_weaver/canvas/helpers.rb +109 -0
  246. data/lib/stream_weaver/canvas/history.rb +90 -0
  247. data/lib/stream_weaver/canvas/protocol.rb +86 -0
  248. data/lib/stream_weaver/canvas/reader.rb +853 -0
  249. data/lib/stream_weaver/canvas/save_doc_widget.rb +457 -0
  250. data/lib/stream_weaver/canvas/scroll_top_hint.rb +21 -0
  251. data/lib/stream_weaver/canvas/session.rb +132 -0
  252. data/lib/stream_weaver/cli.rb +3235 -0
  253. data/lib/stream_weaver/component_assets.rb +70 -0
  254. data/lib/stream_weaver/component_registry.rb +67 -0
  255. data/lib/stream_weaver/component_renderer.rb +48 -0
  256. data/lib/stream_weaver/components/annotated_code.rb +53 -0
  257. data/lib/stream_weaver/components/api_endpoint.rb +42 -0
  258. data/lib/stream_weaver/components/callout.rb +59 -0
  259. data/lib/stream_weaver/components/chart.rb +84 -0
  260. data/lib/stream_weaver/components/code_block.rb +77 -0
  261. data/lib/stream_weaver/components/comparison.rb +39 -0
  262. data/lib/stream_weaver/components/decision.rb +38 -0
  263. data/lib/stream_weaver/components/deck/close_overlay.rb +84 -0
  264. data/lib/stream_weaver/components/deck/confirmation_bar.rb +60 -0
  265. data/lib/stream_weaver/components/deck/deck_option.rb +61 -0
  266. data/lib/stream_weaver/components/deck/deck_slide.rb +77 -0
  267. data/lib/stream_weaver/components/deck/deck_state.rb +469 -0
  268. data/lib/stream_weaver/components/deck/deck_summary.rb +73 -0
  269. data/lib/stream_weaver/components/deck/design_deck.rb +60 -0
  270. data/lib/stream_weaver/components/deck/generate_more_controls.rb +84 -0
  271. data/lib/stream_weaver/components/deck/model_selector.rb +84 -0
  272. data/lib/stream_weaver/components/deck/skeleton_placeholder.rb +36 -0
  273. data/lib/stream_weaver/components/diff_block.rb +125 -0
  274. data/lib/stream_weaver/components/doc_header.rb +57 -0
  275. data/lib/stream_weaver/components/image_block.rb +70 -0
  276. data/lib/stream_weaver/components/implementation_map.rb +33 -0
  277. data/lib/stream_weaver/components/keyboard_shortcuts.rb +94 -0
  278. data/lib/stream_weaver/components/kpi_dashboard.rb +78 -0
  279. data/lib/stream_weaver/components/mermaid.rb +79 -0
  280. data/lib/stream_weaver/components/pipeline.rb +63 -0
  281. data/lib/stream_weaver/components/sidebar_toc.rb +46 -0
  282. data/lib/stream_weaver/components/slide_container.rb +141 -0
  283. data/lib/stream_weaver/components/timeline_event.rb +58 -0
  284. data/lib/stream_weaver/components/wireframe.rb +29 -0
  285. data/lib/stream_weaver/components/wireframe_block.rb +34 -0
  286. data/lib/stream_weaver/components.rb +2711 -0
  287. data/lib/stream_weaver/css.rb +230 -0
  288. data/lib/stream_weaver/dev_fallback_overlay.rb +61 -0
  289. data/lib/stream_weaver/display_dsl.rb +1004 -0
  290. data/lib/stream_weaver/export/html_exporter.rb +478 -0
  291. data/lib/stream_weaver/feed.rb +34 -0
  292. data/lib/stream_weaver/feed_builder.rb +31 -0
  293. data/lib/stream_weaver/fonts.rb +33 -0
  294. data/lib/stream_weaver/interaction_runner.rb +487 -0
  295. data/lib/stream_weaver/iterm.rb +460 -0
  296. data/lib/stream_weaver/layout_registry.rb +92 -0
  297. data/lib/stream_weaver/opal/bridge.rb +52 -0
  298. data/lib/stream_weaver/opal/builder.rb +193 -0
  299. data/lib/stream_weaver/opal/env.rb +29 -0
  300. data/lib/stream_weaver/opal/reactive_state.rb +75 -0
  301. data/lib/stream_weaver/opal/regexp_anchor_patch.rb +62 -0
  302. data/lib/stream_weaver/opal/renderer.rb +77 -0
  303. data/lib/stream_weaver/opal/runtime.rb +250 -0
  304. data/lib/stream_weaver/opal/shell.rb +145 -0
  305. data/lib/stream_weaver/opal/string_bridge.rb +50 -0
  306. data/lib/stream_weaver/opal/stubs/diff.min.js +1 -0
  307. data/lib/stream_weaver/opal/stubs/digest.rb +15 -0
  308. data/lib/stream_weaver/opal/stubs/marked.umd.js +79 -0
  309. data/lib/stream_weaver/opal/stubs/md5.rb +3 -0
  310. data/lib/stream_weaver/opal/stubs/morphdom.min.js +775 -0
  311. data/lib/stream_weaver/opal/stubs/prism-tomorrow.min.css +1 -0
  312. data/lib/stream_weaver/opal/stubs/prism.min.js +1967 -0
  313. data/lib/stream_weaver/opal_entry.rb +136 -0
  314. data/lib/stream_weaver/org/inline.rb +95 -0
  315. data/lib/stream_weaver/org/reader.rb +561 -0
  316. data/lib/stream_weaver/org/recording_context.rb +86 -0
  317. data/lib/stream_weaver/org/source_splitter.rb +63 -0
  318. data/lib/stream_weaver/org/writer.rb +300 -0
  319. data/lib/stream_weaver/page_shell.rb +530 -0
  320. data/lib/stream_weaver/portfile.rb +79 -0
  321. data/lib/stream_weaver/pushable.rb +42 -0
  322. data/lib/stream_weaver/resource/default_views.rb +111 -0
  323. data/lib/stream_weaver/resource/field_input.rb +25 -0
  324. data/lib/stream_weaver/resource/state_keys.rb +16 -0
  325. data/lib/stream_weaver/resource/store.rb +18 -0
  326. data/lib/stream_weaver/resource.rb +104 -0
  327. data/lib/stream_weaver/server.rb +1471 -0
  328. data/lib/stream_weaver/service.rb +1240 -0
  329. data/lib/stream_weaver/service_client.rb +104 -0
  330. data/lib/stream_weaver/session_store.rb +186 -0
  331. data/lib/stream_weaver/skills/streamweaver-canvas-safe/SKILL.md +66 -0
  332. data/lib/stream_weaver/skills/streamweaver-canvas-safe/examples/canvas-safe-showcase.rb +98 -0
  333. data/lib/stream_weaver/skills/streamweaver-canvas-safe/references/actions-and-buttons.md +47 -0
  334. data/lib/stream_weaver/skills/streamweaver-canvas-safe/references/charts-and-diagrams.md +38 -0
  335. data/lib/stream_weaver/skills/streamweaver-canvas-safe/references/deck.md +32 -0
  336. data/lib/stream_weaver/skills/streamweaver-canvas-safe/references/inputs-and-forms.md +65 -0
  337. data/lib/stream_weaver/skills/streamweaver-canvas-safe/references/tabs-and-navigation.md +53 -0
  338. data/lib/stream_weaver/skills/streamweaver-doc-builder/SKILL.md +298 -0
  339. data/lib/stream_weaver/skills/streamweaver-visual-companion/SKILL.md +130 -0
  340. data/lib/stream_weaver/skills/streamweaver-visual-companion/examples/design-review-example.css +468 -0
  341. data/lib/stream_weaver/skills/streamweaver-visual-companion/examples/design-review-example.rb +39 -0
  342. data/lib/stream_weaver/skills/streamweaver-visual-companion/examples/design-review-example_dsl.rb +300 -0
  343. data/lib/stream_weaver/skills/streamweaver-visual-companion/examples/doc-parity-example.rb +24 -0
  344. data/lib/stream_weaver/skills/streamweaver-visual-companion/examples/doc-parity-example_dsl.rb +385 -0
  345. data/lib/stream_weaver/skills/streamweaver-visual-companion/references/checkpoints-and-forms.md +28 -0
  346. data/lib/stream_weaver/skills/streamweaver-visual-companion/references/cleanup-and-panel.md +44 -0
  347. data/lib/stream_weaver/skills/streamweaver-visual-companion/references/example-gallery.md +8 -0
  348. data/lib/stream_weaver/skills/streamweaver-visual-companion/references/persistence.md +58 -0
  349. data/lib/stream_weaver/skills/streamweaver-way/SKILL.md +396 -0
  350. data/lib/stream_weaver/skills/visual-plan/SKILL.md +201 -0
  351. data/lib/stream_weaver/skills/visual-recap/SKILL.md +244 -0
  352. data/lib/stream_weaver/streamer.rb +63 -0
  353. data/lib/stream_weaver/templates/choices.rb +149 -0
  354. data/lib/stream_weaver/templates/code.rb +157 -0
  355. data/lib/stream_weaver/templates/confirm.rb +110 -0
  356. data/lib/stream_weaver/templates/diff.rb +195 -0
  357. data/lib/stream_weaver/templates/info.rb +142 -0
  358. data/lib/stream_weaver/templates/table.rb +169 -0
  359. data/lib/stream_weaver/templates/wizard.rb +271 -0
  360. data/lib/stream_weaver/theme/auto_mode.rb +116 -0
  361. data/lib/stream_weaver/theme/presets.rb +555 -0
  362. data/lib/stream_weaver/theme.rb +639 -0
  363. data/lib/stream_weaver/university/canvas.rb +924 -0
  364. data/lib/stream_weaver/university/course.rb +699 -0
  365. data/lib/stream_weaver/university/demos/counter.rb +33 -0
  366. data/lib/stream_weaver/university/demos/dashboard.rb +147 -0
  367. data/lib/stream_weaver/university/demos/decision_form.rb +143 -0
  368. data/lib/stream_weaver/university/demos.rb +50 -0
  369. data/lib/stream_weaver/university/listener.rb +467 -0
  370. data/lib/stream_weaver/university/progress.rb +201 -0
  371. data/lib/stream_weaver/university/runner.rb +138 -0
  372. data/lib/stream_weaver/university/scripts/growing_doc.rb +609 -0
  373. data/lib/stream_weaver/university/scripts/growing_doc_state.rb +91 -0
  374. data/lib/stream_weaver/utils.rb +31 -0
  375. data/lib/stream_weaver/version.rb +5 -0
  376. data/lib/stream_weaver/views/canvas/reader_layout.erb +800 -0
  377. data/lib/stream_weaver/views.rb +3940 -0
  378. data/lib/stream_weaver.rb +122 -0
  379. data/llms.txt +1269 -0
  380. data/sig/stream_weaver.rbs +4 -0
  381. metadata +598 -0
@@ -0,0 +1,378 @@
1
+ # BuilderIO visual-plan vs StreamWeaver — Analysis & Steal Plan
2
+
3
+ **Date:** 2026-06-17
4
+ **Source:** https://github.com/BuilderIO/skills/tree/main/skills/visual-plan
5
+
6
+ ---
7
+
8
+ ## 1. What Builder's visual-plan Is
9
+
10
+ An MCP-connected Claude Code skill that turns text plans into rich, hosted MDX
11
+ documents with structured blocks — file maps, decisions, annotated code,
12
+ wireframes, diagrams, and open question forms. Published to a hosted Plan viewer
13
+ at plan.agent-native.com. Two slash commands:
14
+
15
+ - `/visual-plan` — prospective: generate a plan *before* coding starts
16
+ - `/visual-recap` — retrospective: generate a visual summary *after* code is
17
+ committed (diff → annotated document)
18
+
19
+ The key workflow: Claude Code calls `get-plan-blocks` (live block registry),
20
+ then calls `create-visual-plan` / `create-visual-recap` with a structured
21
+ `PlanContent` object (version 2), receives a deep-link URL back, and shares that
22
+ URL. The plan is a static artifact — one-shot publish.
23
+
24
+ ---
25
+
26
+ ## 2. The Fundamental Difference
27
+
28
+ | Dimension | Builder visual-plan | StreamWeaver Canvas |
29
+ |---|---|---|
30
+ | **Delivery model** | One-shot static publish | Live push over Unix socket |
31
+ | **When it runs** | Before or after coding | *During* coding, incrementally |
32
+ | **Interactivity** | Comment/review in browser | Button callbacks, form state, `canvas-wait` |
33
+ | **Agent loop** | Publish → URL → done | Push → wait → user acts → push again |
34
+ | **Document format** | MDX with JSX components | Ruby DSL (block-based) |
35
+ | **Rendering** | Hosted React app | Local Sinatra + Alpine.js |
36
+ | **Planning components** | Rich (ImplementationMap, Decision, AnnotatedCode) | Sparse |
37
+ | **Data/chart components** | Sparse | Rich (Chart.js suite, KPI dashboard, pipeline) |
38
+
39
+ **StreamWeaver's irreplaceable moat:** liveness. Claude Code pushes while it
40
+ *thinks*. The canvas evolves in real time. Users can interrupt. That's
41
+ fundamentally more powerful for an active coding session.
42
+
43
+ **Builder's edge:** the planning-phase component vocabulary. `ImplementationMap`,
44
+ `Decision`, `AnnotatedCode`, `Wireframe` with device frames, and `Diff` blocks
45
+ are things StreamWeaver simply doesn't have.
46
+
47
+ The smart play: steal Builder's planning components and bring them into the live
48
+ canvas model. Best of both worlds — rich planning artifacts that *also* update
49
+ in real time as Claude Code works.
50
+
51
+ ---
52
+
53
+ ## 3. Builder's Full Component Inventory
54
+
55
+ ### Document blocks (`plan.mdx`)
56
+
57
+ | Component | What it does |
58
+ |---|---|
59
+ | `<RichText>` | Markdown prose with headings |
60
+ | `<Callout>` | Callout box — tones: `info`, `decision`, `risk`, `warning`, `success` |
61
+ | `<Checklist>` | Checkbox list |
62
+ | `<Table>` | Data table |
63
+ | `<Code>` | Syntax-highlighted code |
64
+ | `<CodeTabs>` | Tabbed code snippets |
65
+ | `<ImplementationMap>` | File path → note map |
66
+ | `<Wireframe>` | UI wireframe (html + css + surface) |
67
+ | `<Diagram>` | Architecture/flow diagram |
68
+ | `<Image>` | Image block |
69
+ | `<Tabs>` | Tabbed panel grouping |
70
+ | `<Columns>` | Column layout |
71
+ | `<CustomHtml>` | Raw HTML passthrough |
72
+ | `<QuestionForm>` | Open-ended review questions |
73
+ | `<VisualQuestions>` | Visual decision questionnaire |
74
+ | `<Decision>` | Structured options + `recommended` flag |
75
+ | `<Mermaid>` | Mermaid diagram |
76
+ | `<ApiEndpoint>` | Single API endpoint spec |
77
+ | `<OpenApiSpec>` | Full OpenAPI spec |
78
+ | `<DataModel>` | Entity relationship visualization |
79
+ | `<Diff>` | Code diff (split view) |
80
+ | `<FileTree>` | File tree navigator |
81
+ | `<JsonExplorer>` | Interactive JSON drill-down |
82
+ | `<AnnotatedCode>` | Code with line-number-pinned annotation bubbles |
83
+
84
+ ### Canvas blocks (`canvas.mdx`)
85
+
86
+ | Component | What it does |
87
+ |---|---|
88
+ | `<DesignBoard>` | Root canvas wrapper |
89
+ | `<Section>` | Groups artboards by flow |
90
+ | `<Artboard>` | Individual screen/state |
91
+ | `<Screen>` | Wireframe HTML container with device chrome |
92
+ | `<Annotation>` | Callout bubble pinned to artboard edge |
93
+
94
+ Device surfaces: `browser`, `phone`, `tablet`, `desktop`, `popover`, `card`,
95
+ `widget`, `sheet`
96
+
97
+ Sketch aesthetic: rough.js overlay + Excalifont on all text = "this is a
98
+ planning sketch, not production UI"
99
+
100
+ Prototype navigation: `data-goto="artboard-id"` on buttons links screens
101
+
102
+ ---
103
+
104
+ ## 4. What `/visual-recap` Does (and Whether StreamWeaver Covers It)
105
+
106
+ **visual-recap** is the post-hoc counterpart. After Claude Code finishes a
107
+ coding task, `/visual-recap` takes the git diff and produces a visual document
108
+ summarizing:
109
+ - What files changed and why (`ImplementationMap`)
110
+ - Before/after code (`Diff` blocks, `AnnotatedCode`)
111
+ - Architecture changes (`Diagram`)
112
+ - Any decisions made during implementation
113
+
114
+ **Does StreamWeaver cover this?** Partially but not intentionally:
115
+ - `comparison` block handles before/after visually
116
+ - `code_block` shows code, `mermaid` handles architecture
117
+ - `dir_tree` with `[new]`/`[modified]`/`[deleted]` markers covers file changes
118
+
119
+ **What's missing:** there is no first-class "recap session" pattern. Nothing
120
+ that says "Claude Code just finished — here's what it did." Builder's
121
+ `create-visual-recap` is a *dedicated action* specifically designed to consume a
122
+ diff and output a structured recap document. StreamWeaver would need:
123
+
124
+ 1. A `diff` block (split-view code diff, not just comparison panels)
125
+ 2. A `recap_session` CLI command pattern: `streamweaver canvas-recap <session>`
126
+ 3. Automatic session capture so Claude Code can call it at end-of-task
127
+
128
+ ---
129
+
130
+ ## 5. StreamWeaver's Existing Component Inventory (for reference)
131
+
132
+ ### Layout
133
+ `div`, `card`/`card_header`/`card_body`/`card_footer`, `vstack`/`hstack`,
134
+ `grid`/`grid_area`, `columns`/`column`, `scroll_box`, `sticky`,
135
+ `overlay`/`fullbleed`, `collapsible`, `alert`, `hero`, `prose`, `app_header`
136
+
137
+ ### Text / Display
138
+ `text`, `md`/`markdown`, `phrase`, `header1`–`header6`, `badge`, `status_dot`,
139
+ `type_tag`, `pulse_indicator`, `stat_display`, `score_table`, `status_badge`,
140
+ `pullquote`, `link_to`, `external_link_button`, `activity_item`,
141
+ `timeline_event`, `priority_item`
142
+
143
+ ### Data Visualization
144
+ `bar_chart`, `hbar_chart`, `line_chart`, `sparkline`, `area_chart`, `pie_chart`,
145
+ `doughnut_chart`, `stacked_bar_chart`, `chart`, `kpi_dashboard`, `table`,
146
+ `mermaid`, `pipeline`, `image_block`, `code_block`
147
+
148
+ ### Form / Input
149
+ `text_field`, `text_area`, `code_editor`, `checkbox`, `checkbox_group`,
150
+ `select`, `radio_group`, `tag_buttons`, `form`
151
+
152
+ ### Navigation
153
+ `tabs`, `breadcrumbs`, `navbar`, `dropdown`, `sidebar_toc`
154
+
155
+ ### Interactive / Overlays
156
+ `button`, `expandable_card`, `modal`, `show_toast`
157
+
158
+ ### Visual / Presentation
159
+ `slide_container`, `comparison`, `callout`, `dir_tree`, `legend`, `flow_arrow`,
160
+ `layout_toggle`, `progress_bar`, `spinner`, `theme_preset`, `theme_toggle`,
161
+ `keyboard_shortcuts`
162
+
163
+ ---
164
+
165
+ ## 6. Gap Analysis — What Builder Has That StreamWeaver Doesn't
166
+
167
+ ### Missing planning-phase components
168
+
169
+ | Builder Component | StreamWeaver Equivalent | Gap |
170
+ |---|---|---|
171
+ | `<ImplementationMap>` | None | **Full gap** — no file-to-rationale mapping |
172
+ | `<Decision>` | `button` (interactive) | Partial — no static decision-capture block |
173
+ | `<AnnotatedCode>` | `code_block` | Partial — no line-pinned annotation bubbles |
174
+ | `<Wireframe>` + device frames | None | **Full gap** — no device-framed mockups |
175
+ | `<Diagram>` sketch mode | `mermaid` (code-based) | Partial — no sketch/rough aesthetic |
176
+ | `<ApiEndpoint>` | None | Full gap |
177
+ | `<DataModel>` | `mermaid` ER | Partial |
178
+ | `<Diff>` | `comparison` | Partial — comparison is panel-level, not code-diff |
179
+ | `<FileTree>` | `dir_tree` | Mostly covered |
180
+ | `<JsonExplorer>` | None | Full gap (niche) |
181
+ | `<Callout tone="decision">` | `callout(:info/:warning/etc)` | Missing `decision` and `risk` tones |
182
+ | `<QuestionForm>` | None | Full gap (async review workflow) |
183
+
184
+ ### Missing canvas/artboard model
185
+
186
+ StreamWeaver has no spatial artboard canvas — no `DesignBoard`, `Section`,
187
+ `Artboard`, device chrome, `Annotation` pins. The canvas is a single scrolling
188
+ panel, not a multi-screen design board.
189
+
190
+ ---
191
+
192
+ ## 7. Steal List — Prioritized
193
+
194
+ ### P0 — High value, relatively contained
195
+
196
+ **`implementation_map`**
197
+ ```ruby
198
+ implementation_map files: [
199
+ { path: "lib/auth/session.rb", note: "Add guest token issuer" },
200
+ { path: "app/routes/checkout.rb", note: "Branch on guest vs auth user" },
201
+ { path: "db/schema.rb", note: "Add guest_sessions table" }
202
+ ]
203
+ ```
204
+ Perfect for Claude Code pre-flight: show what's about to be touched and why.
205
+ Renders as a styled file-tree with inline rationale. Extremely low novelty risk
206
+ (it's just a structured list), high value for planning sessions.
207
+
208
+ **`decision` block**
209
+ ```ruby
210
+ decision question: "How should guest sessions be stored?" do
211
+ option id: "jwt", label: "JWT in cookie", detail: "Stateless, no DB lookup"
212
+ option id: "opaque", label: "Opaque token in DB",
213
+ detail: "Revocable, enables account merge later", recommended: true
214
+ end
215
+ ```
216
+ Planning is full of architecture forks. Capture them explicitly with a visual
217
+ treatment and a recommended path. Currently you'd approximate this with `callout`
218
+ + `button`, but that's interactive not declarative/static.
219
+
220
+ ### P1 — High value, moderate implementation
221
+
222
+ **`annotated_code`**
223
+ ```ruby
224
+ annotated_code language: :ruby, annotations: [
225
+ { line: 3, note: "Guest tokens use 'guest' role to restrict API scopes" },
226
+ { line: 7, note: "24h TTL matches cleanup job cadence" }
227
+ ] do
228
+ <<~RUBY
229
+ def issue_guest_token(email)
230
+ # ...
231
+ JWT.encode({ sub: email, role: 'guest' }, SECRET, exp: 24.hours.from_now)
232
+ end
233
+ RUBY
234
+ end
235
+ ```
236
+ Code walkthroughs are a primary Claude Code output. Line-anchored annotations
237
+ are strictly better than prose-above-code-block for explaining what's happening
238
+ and why.
239
+
240
+ **`wireframe` with device frames**
241
+ ```ruby
242
+ wireframe surface: :browser do
243
+ <<~HTML
244
+ <div class="page">
245
+ <header class="topbar">MyApp</header>
246
+ <main>
247
+ <h2>Continue as guest?</h2>
248
+ <button data-goto="b">Continue as Guest</button>
249
+ </main>
250
+ </div>
251
+ HTML
252
+ end
253
+ ```
254
+ Browser/phone/tablet chrome wrapping HTML mockups. The `data-goto` prototype
255
+ navigation is a bonus. Closes the gap for product/design work entirely.
256
+
257
+ **`diff` block**
258
+ ```ruby
259
+ diff language: :ruby do
260
+ before { "def old_method\n session.fetch(:user)\nend" }
261
+ after { "def current_user\n JWT.decode(token)\nend" }
262
+ end
263
+ ```
264
+ The `comparison` block is panel-level. A `diff` block is line-level code diff
265
+ with +/- syntax and line numbers — distinct need, especially for the recap
266
+ use case.
267
+
268
+ ### P2 — Lower effort additions
269
+
270
+ **Callout tones: `decision` and `risk`**
271
+ ```ruby
272
+ callout :decision do
273
+ "Choose between JWT and opaque tokens before implementing — hard to reverse."
274
+ end
275
+
276
+ callout :risk do
277
+ "Guest sessions must expire. Proposed TTL: 24h. Missing this causes unbounded DB growth."
278
+ end
279
+ ```
280
+ Two new tone values alongside existing `info/warning/success/error`. Semantic
281
+ precision matters in planning documents.
282
+
283
+ **`api_endpoint`**
284
+ ```ruby
285
+ api_endpoint method: :post, path: "/api/v1/guest-sessions",
286
+ description: "Issue a guest session token",
287
+ params: [{ name: "email", type: "string", required: true }],
288
+ response: { token: "string", expires_at: "iso8601" }
289
+ ```
290
+ Ruby shops need API planning surfaces. Mermaid sequence diagrams are clunky for
291
+ simple endpoint specs.
292
+
293
+ **Sketch/rough aesthetic mode**
294
+ A `:sketch` theme preset that adds a hand-drawn quality (grainy backgrounds,
295
+ rough borders, Excalifont or similar). Visually distinguishes "planning canvas"
296
+ from "production dashboard" — psychologically important for stakeholders.
297
+
298
+ ### P3 — Consider later
299
+
300
+ - **`json_explorer`** — niche but useful for API response exploration
301
+ - **`data_model`** — mermaid ER covers most cases
302
+ - **`QuestionForm`** — async review workflow; `canvas-wait` is better for live sessions
303
+ - **Artboard/DesignBoard model** — full spatial canvas is a major architectural
304
+ undertaking; scope separately
305
+
306
+ ---
307
+
308
+ ## 8. The visual-recap Gap
309
+
310
+ Builder's `/visual-recap` is a dedicated post-coding artifact:
311
+
312
+ > After Claude Code finishes a task, consume the git diff → produce a visual
313
+ > document with ImplementationMap, AnnotatedCode, Diff blocks, and Diagram
314
+ > showing what changed, how, and why.
315
+
316
+ StreamWeaver has no equivalent pattern. To close this gap:
317
+
318
+ 1. **Add `diff` block** (prerequisite) — line-level split diff rendering
319
+ 2. **Add `recap_panel` CLI command** — `streamweaver recap <session_name>` that:
320
+ - Runs `git diff HEAD~1` or takes a diff file
321
+ - Pushes a structured canvas: `implementation_map` + `annotated_code` + `diff`
322
+ + `mermaid` architecture summary
323
+ - Optionally auto-saves as a doc: `docs/streamweaver_canvas/recap-<date>.rb`
324
+ 3. **Companion Claude Code skill instruction**: at end of task, call
325
+ `streamweaver recap <session>` with the diff
326
+
327
+ This is a natural complement to the existing canvas-panel workflow and
328
+ would give StreamWeaver a distinct capability Builder doesn't have: the
329
+ recap is *live*, can show work-in-progress before the task is complete,
330
+ and can be updated incrementally.
331
+
332
+ ---
333
+
334
+ ## 9. Implementation Sequence
335
+
336
+ ```
337
+ Phase 1 — Planning blocks (2-3 sessions)
338
+ ├── implementation_map component + DSL method
339
+ ├── decision block component + DSL method
340
+ └── callout :decision and :risk tones
341
+
342
+ Phase 2 — Code display (1-2 sessions)
343
+ ├── annotated_code component (code + line-pinned annotation bubbles)
344
+ └── diff block (split-view line diff)
345
+
346
+ Phase 3 — Visual mockups (2-3 sessions)
347
+ ├── wireframe component with surface presets (browser/phone/tablet/card)
348
+ ├── data-goto prototype navigation
349
+ └── :sketch theme preset (rough aesthetic)
350
+
351
+ Phase 4 — API surface (1 session)
352
+ └── api_endpoint component
353
+
354
+ Phase 5 — Recap workflow (1-2 sessions)
355
+ ├── streamweaver recap CLI command
356
+ └── Claude Code companion skill for end-of-task recap
357
+ ```
358
+
359
+ ---
360
+
361
+ ## 10. What StreamWeaver Keeps as Moat
362
+
363
+ None of the above steals touch what makes StreamWeaver actually different:
364
+
365
+ - **Live socket push** — canvas updates as Claude Code thinks, not after
366
+ - **`canvas-wait`** — pause agent loop, wait for human interaction, resume
367
+ - **Full interactivity** — Alpine.js state, button callbacks, form submissions
368
+ - **Chart suite** — Chart.js charts, kpi_dashboard, pipeline, sparkline
369
+ - **Theme system** — editorial/technical/dark/warm presets
370
+ - **`slide_container`** — presentations inside the live canvas
371
+
372
+ Builder can't replicate liveness without rebuilding their whole architecture.
373
+ That's the real differentiator to protect and deepen.
374
+
375
+ ---
376
+
377
+ *Analysis by Selene — June 2026*
378
+ *Reference: https://github.com/BuilderIO/skills/tree/main/skills/visual-plan*