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,53 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require_relative '../../lib/stream_weaver'
5
+
6
+ glossary = {
7
+ "bullish" => {
8
+ simple: "Expecting prices to go UP",
9
+ detailed: "A bullish outlook means expecting prices to increase. Investors who are bullish believe the market or a specific asset will rise in value. The term comes from how a bull attacks - thrusting its horns upward."
10
+ },
11
+ "bearish" => {
12
+ simple: "Expecting prices to go DOWN",
13
+ detailed: "A bearish outlook means expecting prices to decrease. Investors who are bearish believe the market or a specific asset will fall in value. The term comes from how a bear attacks - swiping its paws downward."
14
+ },
15
+ "Quad 4" => {
16
+ simple: "Economic regime: deflation",
17
+ detailed: "Quad 4 is one of four economic regimes in the Growth-Inflation-Policy (GIP) framework. It occurs when both growth AND inflation are falling - a deflationary environment where bonds typically outperform stocks and cash is king."
18
+ },
19
+ "rally" => {
20
+ simple: "Prices rising quickly",
21
+ detailed: "A rally is a period of sustained increases in asset prices. During a rally, buying pressure exceeds selling pressure, pushing prices higher. Rallies can last days, weeks, or months."
22
+ },
23
+ "duration" => {
24
+ simple: "How much bonds react to rate changes",
25
+ detailed: "Duration measures how sensitive a bond's price is to changes in interest rates. A bond with 5-year duration will lose ~5% if rates rise 1%. Longer duration = more sensitivity = more risk/reward."
26
+ }
27
+ }
28
+
29
+ App = app "Lesson Demo: Understanding Market Dynamics" do
30
+ header "Understanding Market Terms"
31
+ text "Hover over the highlighted terms to see their definitions. Click the tooltip for more detail."
32
+
33
+ # Block-based DSL approach
34
+ lesson_text glossary: glossary do
35
+ phrase "When analysts are "
36
+ term "bullish"
37
+ phrase " on stocks but "
38
+ term "bearish"
39
+ phrase " on bonds, it often indicates we're NOT in "
40
+ term "Quad 4"
41
+ phrase "."
42
+ end
43
+
44
+ header "Bond Market Dynamics"
45
+
46
+ # String-based approach with {term} markers
47
+ lesson_text "In {Quad 4}, bonds typically {rally} because interest rates fall. This benefits investors holding bonds with high {duration}.", glossary: glossary
48
+
49
+ header "Grade Level Selection (Coming Soon)"
50
+ text "Future versions will support switching between 5th, 8th, and 11th grade explanations."
51
+ end
52
+
53
+ App.run! if __FILE__ == $0
@@ -0,0 +1,110 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ # Demo of GitHub Flavored Markdown support
5
+ # Shows the full power of the md component using Kramdown
6
+
7
+ require_relative '../../lib/stream_weaver'
8
+
9
+ app "GitHub Flavored Markdown Demo" do
10
+ header1 "GitHub Flavored Markdown in StreamWeaver"
11
+
12
+ text "The md component supports full GFM via Kramdown. The text component renders literally."
13
+
14
+ header "1. Text Formatting"
15
+ md <<~MD
16
+ **Bold text** and *italic text* and ***bold italic***
17
+
18
+ ~~Strikethrough~~ text
19
+
20
+ `Inline code` for short snippets
21
+ MD
22
+
23
+ header "2. Links and Images"
24
+ md <<~MD
25
+ [Visit GitHub](https://github.com) - regular link
26
+
27
+ [Link with title](https://example.com "Example Site") - hover for title
28
+
29
+ ![Ruby Logo](https://www.ruby-lang.org/images/header-ruby-logo.png)
30
+ MD
31
+
32
+ header "3. Lists"
33
+ md <<~MD
34
+ **Unordered list:**
35
+ - First item
36
+ - Second item
37
+ - Nested item
38
+ - Another nested
39
+ - Third item
40
+
41
+ **Ordered list:**
42
+ 1. Step one
43
+ 2. Step two
44
+ 3. Step three
45
+
46
+ **Task list:**
47
+ - [x] Completed task
48
+ - [ ] Incomplete task
49
+ - [ ] Another todo
50
+ MD
51
+
52
+ header "4. Blockquotes"
53
+ md <<~MD
54
+ > This is a blockquote.
55
+ > It can span multiple lines.
56
+ >
57
+ > > Nested blockquotes work too!
58
+ MD
59
+
60
+ header "5. Code Blocks"
61
+ md <<~MD
62
+ ```ruby
63
+ def hello(name)
64
+ puts "Hello, \#{name}!"
65
+ end
66
+
67
+ hello("World")
68
+ ```
69
+
70
+ ```javascript
71
+ const greet = (name) => {
72
+ console.log(`Hello, ${name}!`);
73
+ };
74
+ ```
75
+ MD
76
+
77
+ header "6. Tables"
78
+ md <<~MD
79
+ | Feature | Supported | Notes |
80
+ |---------|:---------:|-------|
81
+ | Bold | ✅ | `**text**` |
82
+ | Italic | ✅ | `*text*` |
83
+ | Links | ✅ | `[text](url)` |
84
+ | Tables | ✅ | GFM style |
85
+ | Lists | ✅ | Ordered & unordered |
86
+ MD
87
+
88
+ header "7. Horizontal Rules"
89
+ md <<~MD
90
+ Content above the rule.
91
+
92
+ ---
93
+
94
+ Content below the rule.
95
+ MD
96
+
97
+ header "8. Headers in Markdown"
98
+ md <<~MD
99
+ ## H2 Header
100
+ ### H3 Header
101
+ #### H4 Header
102
+ MD
103
+
104
+ header "9. Dynamic Content"
105
+ text_field :name, placeholder: "Enter your name"
106
+
107
+ if state[:name] && !state[:name].empty?
108
+ md "Welcome, **#{state[:name]}**! You can use *markdown* in dynamic content too."
109
+ end
110
+ end.run!
@@ -0,0 +1,166 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ # Demo of Mermaid diagram support
5
+ # Covers all options: basic, zoom/pan, compact in cards, ELK layout, theme_vars
6
+
7
+ require_relative '../../lib/stream_weaver'
8
+
9
+ app "Mermaid Diagram Demo" do
10
+ header1 "Mermaid Diagrams in StreamWeaver"
11
+ md "Mermaid.js is loaded lazily from CDN — only when a `mermaid` component is on the page."
12
+
13
+ # -----------------------------------------------------------------------
14
+ # 1. Basic usage
15
+ # -----------------------------------------------------------------------
16
+ header2 "1. Basic Usage"
17
+ md "Pass a string (or heredoc) — any valid Mermaid diagram type."
18
+
19
+ mermaid <<~MERMAID
20
+ graph LR
21
+ A[Start] --> B{Is it working?}
22
+ B -- Yes --> C[Ship it]
23
+ B -- No --> D[Debug]
24
+ D --> A
25
+ MERMAID
26
+
27
+ # -----------------------------------------------------------------------
28
+ # 2. zoom: true — interactive zoom/pan with controls
29
+ # -----------------------------------------------------------------------
30
+ header2 "2. Zoom / Pan (zoom: true)"
31
+ md "Adds +/−/reset buttons and Ctrl+scroll zoom. Useful for large diagrams."
32
+
33
+ mermaid <<~MERMAID, zoom: true
34
+ graph TD
35
+ Client["Browser / Mobile"]
36
+ GW["API Gateway"]
37
+ Auth["Auth Service"]
38
+ UserDB[("Users DB")]
39
+ Redis["Token Blacklist (Redis)"]
40
+ App["Application"]
41
+
42
+ Client -->|"POST /auth/login"| GW
43
+ GW --> Auth
44
+ Auth -->|"verify"| UserDB
45
+ Auth -->|"issue JWT"| GW
46
+ GW -->|"HttpOnly cookie"| Client
47
+
48
+ Client -->|"GET /api/data (Bearer)"| GW
49
+ GW -->|"check blacklist"| Redis
50
+ GW -->|"forward valid"| App
51
+ App --> Client
52
+
53
+ style Client fill:#dbeafe,stroke:#3b82f6,color:#1e3a5f
54
+ style Auth fill:#dcfce7,stroke:#22c55e,color:#166534
55
+ style Redis fill:#fef3c7,stroke:#f59e0b,color:#92400e
56
+ style UserDB fill:#f3e8ff,stroke:#a855f7,color:#6b21a8
57
+ MERMAID
58
+
59
+ # -----------------------------------------------------------------------
60
+ # 3. compact: true — reduced padding for embedding inside cards
61
+ # -----------------------------------------------------------------------
62
+ header2 "3. Compact Mode (compact: true)"
63
+ md "Reduces diagram padding so it fits naturally inside a `card`. Shown side-by-side here."
64
+
65
+ columns widths: ['50%', '50%'] do
66
+ column do
67
+ card do
68
+ header3 "Request Flow"
69
+ mermaid <<~MERMAID, compact: true
70
+ sequenceDiagram
71
+ Client->>+Server: GET /data
72
+ Server->>+DB: SELECT ...
73
+ DB-->>-Server: rows
74
+ Server-->>-Client: 200 JSON
75
+ MERMAID
76
+ end
77
+ end
78
+ column do
79
+ card do
80
+ header3 "Deploy Pipeline"
81
+ mermaid <<~MERMAID, compact: true
82
+ graph LR
83
+ PR[Pull Request] --> CI[CI Tests]
84
+ CI --> Review[Code Review]
85
+ Review --> Merge[Merge]
86
+ Merge --> Deploy[Deploy]
87
+ Deploy --> Monitor[Monitor]
88
+ MERMAID
89
+ end
90
+ end
91
+ end
92
+
93
+ # -----------------------------------------------------------------------
94
+ # 4. layout: :elk — ELK layout engine (better for complex graphs)
95
+ # -----------------------------------------------------------------------
96
+ header2 "4. ELK Layout Engine (layout: :elk)"
97
+ md "The ELK layout engine handles dense, complex graphs better than the default Dagre engine. Loaded from CDN only when needed."
98
+
99
+ mermaid <<~MERMAID, layout: :elk
100
+ graph TD
101
+ Ingress --> ServiceA
102
+ Ingress --> ServiceB
103
+ Ingress --> ServiceC
104
+ ServiceA --> Cache
105
+ ServiceA --> DB
106
+ ServiceB --> Queue
107
+ ServiceB --> DB
108
+ ServiceC --> Cache
109
+ ServiceC --> Storage
110
+ Queue --> Worker1
111
+ Queue --> Worker2
112
+ Worker1 --> DB
113
+ Worker2 --> Storage
114
+ MERMAID
115
+
116
+ # -----------------------------------------------------------------------
117
+ # 5. theme_vars — per-diagram color overrides
118
+ # -----------------------------------------------------------------------
119
+ header2 "5. Theme Variables (theme_vars:)"
120
+ md "Override Mermaid's `themeVariables` per diagram — useful for brand colors or callout diagrams."
121
+
122
+ indigo_theme = {
123
+ primaryColor: "#6366f1",
124
+ primaryTextColor: "#ffffff",
125
+ primaryBorderColor: "#4f46e5",
126
+ lineColor: "#6366f1",
127
+ secondaryColor: "#e0e7ff",
128
+ tertiaryColor: "#f0fdf4"
129
+ }
130
+ mermaid <<~MERMAID, theme_vars: indigo_theme
131
+ graph LR
132
+ User --> App
133
+ App --> API
134
+ API --> DB
135
+ API --> Cache
136
+ MERMAID
137
+
138
+ # -----------------------------------------------------------------------
139
+ # 6. Other diagram types
140
+ # -----------------------------------------------------------------------
141
+ header2 "6. Other Diagram Types"
142
+ md "Any Mermaid diagram type works: sequence, pie, gantt, gitgraph, etc."
143
+
144
+ columns widths: ['50%', '50%'] do
145
+ column do
146
+ header3 "Pie Chart"
147
+ mermaid <<~MERMAID
148
+ pie title Test Coverage
149
+ "Unit" : 65
150
+ "Integration" : 25
151
+ "E2E" : 10
152
+ MERMAID
153
+ end
154
+ column do
155
+ header3 "Sequence Diagram"
156
+ mermaid <<~MERMAID
157
+ sequenceDiagram
158
+ autonumber
159
+ Alice->>Bob: Hello!
160
+ Bob-->>Alice: Hi there
161
+ Alice->>Bob: How are you?
162
+ Bob-->>Alice: All good, thanks
163
+ MERMAID
164
+ end
165
+ end
166
+ end.run!
@@ -0,0 +1,64 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ # Demonstrates the six FAC-P2.2 pareto components together: date_field,
5
+ # accordion/section, chip_group, board/lane/board_card, text tones +
6
+ # callout banners, and columns equal-split/auto-distribution.
7
+ # Run: ruby examples/components/pareto_set.rb
8
+
9
+ require_relative '../../lib/stream_weaver'
10
+
11
+ TASKS = {
12
+ todo: ["Write proposal", "Review PR #42"],
13
+ doing: ["Ship pareto components"],
14
+ done: ["Set up CI", "Draft gap catalog"]
15
+ }.freeze
16
+
17
+ ROLES = %w[Engineer Designer PM Writer Analyst].freeze
18
+
19
+ App = app "Pareto Components" do
20
+ header1 "Pareto Component Set (FAC-P2.2)"
21
+
22
+ header "1. date_field"
23
+ date_field :deadline, label: "Deadline", min: "2026-01-01", max: "2027-12-31"
24
+ if (parsed = StreamWeaver::Components::DateField.to_date(state[:deadline]))
25
+ text "Parsed as a Date: #{parsed.iso8601}", tone: :muted
26
+ end
27
+
28
+ header "2. accordion / section"
29
+ accordion do
30
+ section("What is this?", open: true) do
31
+ text "Native <details>/<summary> disclosure -- zero JS."
32
+ end
33
+ section("Why not expandable_card?") do
34
+ text "expandable_card needs a state key; this doesn't."
35
+ end
36
+ end
37
+
38
+ header "3. chip_group"
39
+ chip_group :tags, %w[Ruby Rails Sinatra Hanami], multi: true
40
+ text "Selected: #{Array(state[:tags]).join(', ')}", tone: :caption
41
+
42
+ header "4. board / lane / board_card"
43
+ board do
44
+ TASKS.each do |lane_key, items|
45
+ lane(lane_key.to_s.capitalize) do
46
+ items.each { |item| board_card { text item } }
47
+ end
48
+ end
49
+ end
50
+
51
+ header "5. text tones + callout"
52
+ text "Muted helper text.", tone: :muted
53
+ text "Something went wrong.", tone: :error
54
+ text "Operation succeeded.", tone: :success
55
+ callout("Saved successfully.", tone: :success)
56
+ callout(variant: :warning, title: "Heads up") do
57
+ text "The block form still works exactly as before."
58
+ end
59
+
60
+ header "6. columns equal-split"
61
+ columns(3, items: ROLES) { |role| card { text role } }
62
+ end
63
+
64
+ App.run! if __FILE__ == $0
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ # PRD document pattern demo — replicates the "Calendar-Driven Travel State" PRD artifact.
5
+ # Loads prd_dsl.rb as its body so standalone and canvas-push stay in content sync.
6
+ # Demonstrates: doc_header, doc_section_header, sidebar_toc, callout, mermaid,
7
+ # comparison (scope grid), table, code_block, card.
8
+ #
9
+ # Run: ruby examples/components/prd_demo.rb
10
+ # Or for canvas push: streamweaver canvas-push <session> < examples/components/prd_dsl.rb
11
+
12
+ require_relative "../../lib/stream_weaver"
13
+
14
+ PRD_DSL_PATH = File.join(__dir__, "prd_dsl.rb")
15
+
16
+ PrdDemo = app "PRD: Calendar-Driven Travel State", theme: :doc do
17
+ theme_toggle mode: :light
18
+ instance_eval(File.read(PRD_DSL_PATH), PRD_DSL_PATH)
19
+ end
20
+
21
+ PrdDemo.run! if __FILE__ == $0