hyperweave 0.2.22__tar.gz → 0.2.24__tar.gz

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 (389) hide show
  1. {hyperweave-0.2.22 → hyperweave-0.2.24}/CHANGELOG.md +44 -0
  2. {hyperweave-0.2.22 → hyperweave-0.2.24}/PKG-INFO +12 -7
  3. {hyperweave-0.2.22 → hyperweave-0.2.24}/README.md +11 -6
  4. hyperweave-0.2.24/assets/examples/telemetry/receipt_codex_large.svg +363 -0
  5. {hyperweave-0.2.22 → hyperweave-0.2.24}/scripts/generate_proofset.py +99 -25
  6. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/_version.py +2 -2
  7. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/cli.py +147 -35
  8. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/compose/resolver.py +176 -72
  9. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/compose/treemap.py +177 -18
  10. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/core/schema.py +55 -1
  11. hyperweave-0.2.24/src/hyperweave/data/genomes/telemetry-codex.json +110 -0
  12. hyperweave-0.2.24/src/hyperweave/data/telemetry/runtimes/claude-code.yaml +82 -0
  13. hyperweave-0.2.24/src/hyperweave/data/telemetry/runtimes/codex.yaml +59 -0
  14. hyperweave-0.2.24/src/hyperweave/telemetry/codex_parser.py +427 -0
  15. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/telemetry/contract.py +70 -13
  16. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/telemetry/models.py +16 -9
  17. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/telemetry/parser.py +7 -3
  18. hyperweave-0.2.24/src/hyperweave/telemetry/runtimes.py +205 -0
  19. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/receipt.svg.j2 +66 -22
  20. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/rhythm-strip.svg.j2 +28 -2
  21. hyperweave-0.2.24/tests/fixtures/codex_session.jsonl +170 -0
  22. hyperweave-0.2.24/tests/fixtures/codex_session_patches.jsonl +745 -0
  23. hyperweave-0.2.24/tests/test_codex_parser.py +161 -0
  24. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/test_compose_treemap.py +230 -4
  25. hyperweave-0.2.24/tests/test_parse_transcript_auto.py +59 -0
  26. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/test_proofset.py +28 -7
  27. hyperweave-0.2.24/tests/test_runtime_registries.py +198 -0
  28. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/test_telemetry.py +10 -13
  29. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/test_telemetry_integration.py +121 -11
  30. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/test_telemetry_skin_dispatch.py +16 -3
  31. hyperweave-0.2.24/tests/test_tool_class_completeness.py +30 -0
  32. hyperweave-0.2.22/src/hyperweave/data/telemetry/tool-classes.yaml +0 -26
  33. hyperweave-0.2.22/src/hyperweave/templates/components/treemap.svg.j2 +0 -46
  34. {hyperweave-0.2.22 → hyperweave-0.2.24}/.dockerignore +0 -0
  35. {hyperweave-0.2.22 → hyperweave-0.2.24}/.github/workflows/ci.yml +0 -0
  36. {hyperweave-0.2.22 → hyperweave-0.2.24}/.github/workflows/deploy.yml +0 -0
  37. {hyperweave-0.2.22 → hyperweave-0.2.24}/.github/workflows/publish.yml +0 -0
  38. {hyperweave-0.2.22 → hyperweave-0.2.24}/.gitignore +0 -0
  39. {hyperweave-0.2.22 → hyperweave-0.2.24}/.pre-commit-config.yaml +0 -0
  40. {hyperweave-0.2.22 → hyperweave-0.2.24}/Dockerfile +0 -0
  41. {hyperweave-0.2.22 → hyperweave-0.2.24}/LICENSE +0 -0
  42. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/buttons/button-liquid.svg +0 -0
  43. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/cards/card-butterfly.svg +0 -0
  44. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/cards/card-python.svg +0 -0
  45. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/cards/card-sunflower.svg +0 -0
  46. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/cards/card-waves.svg +0 -0
  47. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/examples/brutalist-emerald/badge_critical.svg +0 -0
  48. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/examples/brutalist-emerald/badge_passing.svg +0 -0
  49. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/examples/brutalist-emerald/badge_warning.svg +0 -0
  50. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/examples/brutalist-emerald/banner.svg +0 -0
  51. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/examples/brutalist-emerald/icons/discord.svg +0 -0
  52. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/examples/brutalist-emerald/icons/notion.svg +0 -0
  53. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/examples/brutalist-emerald/icons/reddit.svg +0 -0
  54. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/examples/brutalist-emerald/icons/spotify.svg +0 -0
  55. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/examples/brutalist-emerald/icons/youtube.svg +0 -0
  56. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/examples/brutalist-emerald/marquee_counter.svg +0 -0
  57. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/examples/brutalist-emerald/marquee_horizontal.svg +0 -0
  58. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/examples/brutalist-emerald/marquee_vertical.svg +0 -0
  59. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/examples/brutalist-emerald/profile-cards/chart_stars_full.svg +0 -0
  60. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/examples/brutalist-emerald/profile-cards/stats.svg +0 -0
  61. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/examples/brutalist-emerald/strip.svg +0 -0
  62. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/examples/chrome-horizon/badge_critical.svg +0 -0
  63. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/examples/chrome-horizon/badge_passing.svg +0 -0
  64. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/examples/chrome-horizon/badge_warning.svg +0 -0
  65. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/examples/chrome-horizon/banner.svg +0 -0
  66. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/examples/chrome-horizon/icons/bluesky.svg +0 -0
  67. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/examples/chrome-horizon/icons/github.svg +0 -0
  68. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/examples/chrome-horizon/icons/instagram.svg +0 -0
  69. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/examples/chrome-horizon/icons/mastodon.svg +0 -0
  70. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/examples/chrome-horizon/icons/x.svg +0 -0
  71. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/examples/chrome-horizon/marquee_counter.svg +0 -0
  72. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/examples/chrome-horizon/marquee_horizontal.svg +0 -0
  73. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/examples/chrome-horizon/marquee_vertical.svg +0 -0
  74. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/examples/chrome-horizon/profile-cards/chart_stars_full.svg +0 -0
  75. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/examples/chrome-horizon/profile-cards/stats.svg +0 -0
  76. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/examples/chrome-horizon/strip.svg +0 -0
  77. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/examples/telemetry/master_card.svg +0 -0
  78. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/examples/telemetry/receipt.svg +0 -0
  79. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/examples/telemetry/receipt_claude-code_medium.svg +0 -0
  80. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/examples/telemetry/receipt_voltage_xlarge.svg +0 -0
  81. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/examples/telemetry/rhythm_strip.svg +0 -0
  82. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/examples/telemetry/rhythm_strip_voltage_xlarge.svg +0 -0
  83. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/footers/inneraura-footer-liquid.svg +0 -0
  84. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/footers/inneraura-footer-purple.svg +0 -0
  85. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/footers/inneraura-footer.svg +0 -0
  86. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/hyperweave-banner.svg +0 -0
  87. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/icons/cobalt-sapphire-discord.svg +0 -0
  88. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/icons/cobalt-sapphire-docs.svg +0 -0
  89. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/icons/cobalt-sapphire-github.svg +0 -0
  90. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/icons/cobalt-sapphire-instagram.svg +0 -0
  91. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/icons/cobalt-sapphire-linkedin.svg +0 -0
  92. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/icons/cobalt-sapphire-tiktok.svg +0 -0
  93. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/icons/cobalt-sapphire-x.svg +0 -0
  94. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/icons/cobalt-sapphire-youtube.svg +0 -0
  95. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/marquees/badge-showcase-triple.svg +0 -0
  96. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/marquees/genome-marquee-triple.svg +0 -0
  97. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/marquees/sample-badges.svg +0 -0
  98. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/mintlify-assets/404.svg +0 -0
  99. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/mintlify-assets/callout-icons.svg +0 -0
  100. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/mintlify-assets/divider.svg +0 -0
  101. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/mintlify-assets/favicon.svg +0 -0
  102. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/mintlify-assets/hero-banner.svg +0 -0
  103. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/mintlify-assets/hyperweave-banner-v2.svg +0 -0
  104. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/mintlify-assets/hyperweave-navbar-logo.svg +0 -0
  105. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/mintlify-assets/loader.svg +0 -0
  106. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/mintlify-assets/og-image.svg +0 -0
  107. {hyperweave-0.2.22 → hyperweave-0.2.24}/assets/timelines/hyperweave-roadmap.svg +0 -0
  108. {hyperweave-0.2.22 → hyperweave-0.2.24}/docs/assets/favicon.svg +0 -0
  109. {hyperweave-0.2.22 → hyperweave-0.2.24}/docs/assets/hyperweave-banner.svg +0 -0
  110. {hyperweave-0.2.22 → hyperweave-0.2.24}/docs/assets/hyperweave-navbar-logo.svg +0 -0
  111. {hyperweave-0.2.22 → hyperweave-0.2.24}/docs/assets/og-image.svg +0 -0
  112. {hyperweave-0.2.22 → hyperweave-0.2.24}/docs/explanation/architecture.mdx +0 -0
  113. {hyperweave-0.2.22 → hyperweave-0.2.24}/docs/explanation/camo-compatibility.mdx +0 -0
  114. {hyperweave-0.2.22 → hyperweave-0.2.24}/docs/explanation/cim-compliance.mdx +0 -0
  115. {hyperweave-0.2.22 → hyperweave-0.2.24}/docs/explanation/genome-profile-system.mdx +0 -0
  116. {hyperweave-0.2.22 → hyperweave-0.2.24}/docs/explanation/metadata-tiers.mdx +0 -0
  117. {hyperweave-0.2.22 → hyperweave-0.2.24}/docs/how-to/add-motion-to-badges.mdx +0 -0
  118. {hyperweave-0.2.22 → hyperweave-0.2.24}/docs/how-to/create-session-receipts.mdx +0 -0
  119. {hyperweave-0.2.22 → hyperweave-0.2.24}/docs/how-to/set-up-claude-code-hooks.mdx +0 -0
  120. {hyperweave-0.2.22 → hyperweave-0.2.24}/docs/how-to/use-live-data-badges.mdx +0 -0
  121. {hyperweave-0.2.22 → hyperweave-0.2.24}/docs/introduction.mdx +0 -0
  122. {hyperweave-0.2.22 → hyperweave-0.2.24}/docs/mint.json +0 -0
  123. {hyperweave-0.2.22 → hyperweave-0.2.24}/docs/quickstart.mdx +0 -0
  124. {hyperweave-0.2.22 → hyperweave-0.2.24}/docs/reference/cli.mdx +0 -0
  125. {hyperweave-0.2.22 → hyperweave-0.2.24}/docs/reference/compose-spec.mdx +0 -0
  126. {hyperweave-0.2.22 → hyperweave-0.2.24}/docs/reference/genomes.mdx +0 -0
  127. {hyperweave-0.2.22 → hyperweave-0.2.24}/docs/reference/http-api.mdx +0 -0
  128. {hyperweave-0.2.22 → hyperweave-0.2.24}/docs/reference/mcp-tools.mdx +0 -0
  129. {hyperweave-0.2.22 → hyperweave-0.2.24}/docs/reference/motions.mdx +0 -0
  130. {hyperweave-0.2.22 → hyperweave-0.2.24}/docs/reference/telemetry-contract.mdx +0 -0
  131. {hyperweave-0.2.22 → hyperweave-0.2.24}/docs/spec/hyperweave-protocol.mdx +0 -0
  132. {hyperweave-0.2.22 → hyperweave-0.2.24}/docs/tutorials/build-an-artifact-kit.mdx +0 -0
  133. {hyperweave-0.2.22 → hyperweave-0.2.24}/docs/tutorials/compose-your-first-badge.mdx +0 -0
  134. {hyperweave-0.2.22 → hyperweave-0.2.24}/docs/tutorials/install-session-telemetry.mdx +0 -0
  135. {hyperweave-0.2.22 → hyperweave-0.2.24}/fly.toml +0 -0
  136. {hyperweave-0.2.22 → hyperweave-0.2.24}/hooks/install.py +0 -0
  137. {hyperweave-0.2.22 → hyperweave-0.2.24}/hooks/session_end.sh +0 -0
  138. {hyperweave-0.2.22 → hyperweave-0.2.24}/justfile +0 -0
  139. {hyperweave-0.2.22 → hyperweave-0.2.24}/pyproject.toml +0 -0
  140. {hyperweave-0.2.22 → hyperweave-0.2.24}/scripts/extract_font_metrics.py +0 -0
  141. {hyperweave-0.2.22 → hyperweave-0.2.24}/scripts/extract_glyphs.py +0 -0
  142. {hyperweave-0.2.22 → hyperweave-0.2.24}/scripts/probe_live_stats.py +0 -0
  143. {hyperweave-0.2.22 → hyperweave-0.2.24}/scripts/probe_star_history.py +0 -0
  144. {hyperweave-0.2.22 → hyperweave-0.2.24}/scripts/stress_test.py +0 -0
  145. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/__init__.py +0 -0
  146. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/__main__.py +0 -0
  147. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/compose/__init__.py +0 -0
  148. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/compose/assembler.py +0 -0
  149. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/compose/bar_chart.py +0 -0
  150. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/compose/context.py +0 -0
  151. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/compose/engine.py +0 -0
  152. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/compose/lanes.py +0 -0
  153. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/compose/resolvers/__init__.py +0 -0
  154. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/compose/resolvers/chart.py +0 -0
  155. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/compose/resolvers/stats.py +0 -0
  156. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/compose/rhythm.py +0 -0
  157. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/compose/rhythm_strip.py +0 -0
  158. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/compose/validate_paradigms.py +0 -0
  159. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/config/__init__.py +0 -0
  160. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/config/genome_validator.py +0 -0
  161. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/config/loader.py +0 -0
  162. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/config/registry.py +0 -0
  163. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/config/settings.py +0 -0
  164. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/connectors/__init__.py +0 -0
  165. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/connectors/arxiv.py +0 -0
  166. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/connectors/base.py +0 -0
  167. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/connectors/cache.py +0 -0
  168. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/connectors/github.py +0 -0
  169. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/connectors/rest.py +0 -0
  170. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/core/__init__.py +0 -0
  171. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/core/cell_layout.py +0 -0
  172. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/core/color.py +0 -0
  173. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/core/contracts.py +0 -0
  174. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/core/enums.py +0 -0
  175. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/core/font_metrics.py +0 -0
  176. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/core/models.py +0 -0
  177. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/core/paradigm.py +0 -0
  178. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/core/state.py +0 -0
  179. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/core/text.py +0 -0
  180. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/core/thresholds.py +0 -0
  181. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/css/accessibility.css +0 -0
  182. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/css/bridge.css +0 -0
  183. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/css/expression.css +0 -0
  184. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/css/status.css +0 -0
  185. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/font-metrics/chakra-petch.json +0 -0
  186. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/font-metrics/inter.json +0 -0
  187. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/font-metrics/jetbrains-mono.json +0 -0
  188. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/font-metrics/orbitron.json +0 -0
  189. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/fonts/chakra-petch.b64 +0 -0
  190. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/fonts/chakra-petch.meta.json +0 -0
  191. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/fonts/jetbrains-mono.b64 +0 -0
  192. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/fonts/jetbrains-mono.meta.json +0 -0
  193. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/fonts/orbitron.b64 +0 -0
  194. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/fonts/orbitron.meta.json +0 -0
  195. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/genomes/automata.json +0 -0
  196. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/genomes/brutalist.json +0 -0
  197. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/genomes/chrome.json +0 -0
  198. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/genomes/telemetry-claude-code.json +0 -0
  199. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/genomes/telemetry-cream.json +0 -0
  200. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/genomes/telemetry-voltage.json +0 -0
  201. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/glyphs.json +0 -0
  202. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/motions/border/chromatic-pulse.yaml +0 -0
  203. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/motions/border/corner-trace.yaml +0 -0
  204. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/motions/border/dual-orbit.yaml +0 -0
  205. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/motions/border/entanglement.yaml +0 -0
  206. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/motions/border/rimrun.yaml +0 -0
  207. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/motions/static.yaml +0 -0
  208. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/paradigms/brutalist.yaml +0 -0
  209. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/paradigms/cellular.yaml +0 -0
  210. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/paradigms/chrome.yaml +0 -0
  211. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/paradigms/default.yaml +0 -0
  212. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/policies/normal.json +0 -0
  213. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/policies/permissive.json +0 -0
  214. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/policies/ungoverned.json +0 -0
  215. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/profiles/brutalist.contract.json +0 -0
  216. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/profiles/brutalist.yaml +0 -0
  217. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/profiles/chrome.contract.json +0 -0
  218. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/profiles/chrome.yaml +0 -0
  219. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/specimens.yaml +0 -0
  220. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/telemetry/model-pricing.yaml +0 -0
  221. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/telemetry/stage-config.yaml +0 -0
  222. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/telemetry/stage-labels.yaml +0 -0
  223. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/telemetry/tool-colors.yaml +0 -0
  224. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/terminals/arrow.json +0 -0
  225. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/terminals/aurora.json +0 -0
  226. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/terminals/beacon.json +0 -0
  227. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/terminals/bracket3d.json +0 -0
  228. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/terminals/chevron.json +0 -0
  229. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/terminals/crosshair.json +0 -0
  230. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/terminals/diamond.json +0 -0
  231. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/terminals/rocket.json +0 -0
  232. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/terminals/rules/bar.json +0 -0
  233. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/terminals/rules/dashed.json +0 -0
  234. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/terminals/rules/five-wave.json +0 -0
  235. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/terminals/rules/spectral.json +0 -0
  236. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/terminals/rules/straight.json +0 -0
  237. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/terminals/rules/wave.json +0 -0
  238. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/data/terminals/stijl.json +0 -0
  239. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/kit.py +0 -0
  240. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/mcp/__init__.py +0 -0
  241. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/mcp/__main__.py +0 -0
  242. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/mcp/server.py +0 -0
  243. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/py.typed +0 -0
  244. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/render/__init__.py +0 -0
  245. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/render/chart_engine.py +0 -0
  246. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/render/fonts.py +0 -0
  247. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/render/glyphs.py +0 -0
  248. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/render/motion.py +0 -0
  249. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/render/templates.py +0 -0
  250. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/serve/__init__.py +0 -0
  251. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/serve/app.py +0 -0
  252. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/serve/data_tokens.py +0 -0
  253. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/telemetry/__init__.py +0 -0
  254. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/telemetry/capture.py +0 -0
  255. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/telemetry/corrections.py +0 -0
  256. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/telemetry/cost.py +0 -0
  257. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/telemetry/stages.py +0 -0
  258. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/components/chart-area.svg.j2 +0 -0
  259. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/components/chart-axes.svg.j2 +0 -0
  260. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/components/chart-empty-state.svg.j2 +0 -0
  261. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/components/chart-gridlines.svg.j2 +0 -0
  262. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/components/chart-markers/circle.svg.j2 +0 -0
  263. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/components/chart-markers/diamond.svg.j2 +0 -0
  264. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/components/chart-markers/endpoint-diamond.svg.j2 +0 -0
  265. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/components/chart-markers/endpoint-rect.svg.j2 +0 -0
  266. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/components/chart-markers/rect.svg.j2 +0 -0
  267. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/components/chart-milestone.svg.j2 +0 -0
  268. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/components/chart-polyline.svg.j2 +0 -0
  269. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/components/filter.svg.j2 +0 -0
  270. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/components/glyph-inline.svg.j2 +0 -0
  271. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/components/glyph.svg.j2 +0 -0
  272. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/components/gradient.svg.j2 +0 -0
  273. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/components/metadata.svg.j2 +0 -0
  274. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/components/metric.svg.j2 +0 -0
  275. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/components/phase-segment.svg.j2 +0 -0
  276. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/components/rule.svg.j2 +0 -0
  277. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/components/status.svg.j2 +0 -0
  278. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/components/terminal.svg.j2 +0 -0
  279. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/document.svg.j2 +0 -0
  280. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/error-badge.svg.j2 +0 -0
  281. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/badge/brutalist-content.j2 +0 -0
  282. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/badge/brutalist-defs.j2 +0 -0
  283. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/badge/cellular-content.j2 +0 -0
  284. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/badge/cellular-defs.j2 +0 -0
  285. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/badge/chrome-content.j2 +0 -0
  286. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/badge/chrome-defs.j2 +0 -0
  287. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/badge/default-content.j2 +0 -0
  288. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/badge/default-defs.j2 +0 -0
  289. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/badge.svg.j2 +0 -0
  290. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/catalog.svg.j2 +0 -0
  291. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/chart/brutalist-content.j2 +0 -0
  292. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/chart/brutalist-defs.j2 +0 -0
  293. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/chart/cellular-content.j2 +0 -0
  294. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/chart/cellular-defs.j2 +0 -0
  295. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/chart/chrome-content.j2 +0 -0
  296. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/chart/chrome-defs.j2 +0 -0
  297. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/chart.svg.j2 +0 -0
  298. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/divider/brutalist-seam.svg.j2 +0 -0
  299. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/divider/chrome-band.svg.j2 +0 -0
  300. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/divider.svg.j2 +0 -0
  301. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/icon/brutalist-content.j2 +0 -0
  302. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/icon/brutalist-defs.j2 +0 -0
  303. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/icon/cellular-content.j2 +0 -0
  304. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/icon/cellular-defs.j2 +0 -0
  305. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/icon/chrome-content.j2 +0 -0
  306. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/icon/chrome-defs.j2 +0 -0
  307. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/icon/default-content.j2 +0 -0
  308. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/icon/default-defs.j2 +0 -0
  309. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/icon.svg.j2 +0 -0
  310. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/marquee-horizontal/brutalist-content.j2 +0 -0
  311. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/marquee-horizontal/brutalist-defs.j2 +0 -0
  312. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/marquee-horizontal/brutalist-overlay.j2 +0 -0
  313. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/marquee-horizontal/cellular-content.j2 +0 -0
  314. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/marquee-horizontal/cellular-defs.j2 +0 -0
  315. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/marquee-horizontal/cellular-overlay.j2 +0 -0
  316. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/marquee-horizontal/chrome-content.j2 +0 -0
  317. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/marquee-horizontal/chrome-defs.j2 +0 -0
  318. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/marquee-horizontal/chrome-overlay.j2 +0 -0
  319. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/marquee-horizontal/default-content.j2 +0 -0
  320. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/marquee-horizontal/default-defs.j2 +0 -0
  321. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/marquee-horizontal.svg.j2 +0 -0
  322. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/master-card.svg.j2 +0 -0
  323. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/stats/brutalist-content.j2 +0 -0
  324. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/stats/brutalist-defs.j2 +0 -0
  325. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/stats/cellular-content.j2 +0 -0
  326. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/stats/cellular-defs.j2 +0 -0
  327. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/stats/chrome-content.j2 +0 -0
  328. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/stats/chrome-defs.j2 +0 -0
  329. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/stats.svg.j2 +0 -0
  330. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/strip/brutalist-content.j2 +0 -0
  331. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/strip/brutalist-defs.j2 +0 -0
  332. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/strip/brutalist-status.j2 +0 -0
  333. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/strip/cellular-content.j2 +0 -0
  334. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/strip/cellular-defs.j2 +0 -0
  335. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/strip/cellular-status.j2 +0 -0
  336. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/strip/chrome-content.j2 +0 -0
  337. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/strip/chrome-defs.j2 +0 -0
  338. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/strip/chrome-status.j2 +0 -0
  339. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/strip/default-content.j2 +0 -0
  340. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/strip/default-defs.j2 +0 -0
  341. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/strip/default-status.j2 +0 -0
  342. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/frames/strip.svg.j2 +0 -0
  343. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/motions/border/chromatic-pulse.svg.j2 +0 -0
  344. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/motions/border/corner-trace.svg.j2 +0 -0
  345. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/motions/border/dual-orbit.svg.j2 +0 -0
  346. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/motions/border/entanglement.svg.j2 +0 -0
  347. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/motions/border/rimrun.svg.j2 +0 -0
  348. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/partials/provider-glyphs.svg.j2 +0 -0
  349. {hyperweave-0.2.22 → hyperweave-0.2.24}/src/hyperweave/templates/partials/state-signal-cascade.j2 +0 -0
  350. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/__init__.py +0 -0
  351. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/conftest.py +0 -0
  352. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/fixtures/github_contributions/synthetic.html +0 -0
  353. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/fixtures/session.json +0 -0
  354. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/fixtures/session.jsonl +0 -0
  355. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/helpers.py +0 -0
  356. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/test_assembler.py +0 -0
  357. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/test_badge_cellular.py +0 -0
  358. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/test_chart_engine.py +0 -0
  359. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/test_chart_frame.py +0 -0
  360. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/test_compose_bar_chart.py +0 -0
  361. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/test_compose_rhythm_strip.py +0 -0
  362. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/test_compose_variant_field.py +0 -0
  363. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/test_connectors.py +0 -0
  364. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/test_core.py +0 -0
  365. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/test_data_tokens.py +0 -0
  366. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/test_divider_cellular.py +0 -0
  367. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/test_divider_genome_specific.py +0 -0
  368. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/test_font_metrics_chakra.py +0 -0
  369. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/test_genome_automata.py +0 -0
  370. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/test_github_scrape.py +0 -0
  371. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/test_kit.py +0 -0
  372. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/test_marquee_v0_2_16.py +0 -0
  373. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/test_mcp.py +0 -0
  374. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/test_paradigm_cellular.py +0 -0
  375. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/test_paradigm_dispatch.py +0 -0
  376. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/test_paradigm_extensibility.py +0 -0
  377. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/test_receipt_token_compliance.py +0 -0
  378. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/test_render.py +0 -0
  379. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/test_resolver_rhythm.py +0 -0
  380. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/test_serve.py +0 -0
  381. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/test_serve_live_state.py +0 -0
  382. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/test_slot_metric_state.py +0 -0
  383. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/test_state_inference.py +0 -0
  384. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/test_stats_card.py +0 -0
  385. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/test_strip_cellular.py +0 -0
  386. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/test_strip_status_toggle.py +0 -0
  387. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/test_telemetry_contract_per_stage.py +0 -0
  388. {hyperweave-0.2.22 → hyperweave-0.2.24}/tests/test_variant_default_resolution.py +0 -0
  389. {hyperweave-0.2.22 → hyperweave-0.2.24}/uv.lock +0 -0
@@ -5,6 +5,50 @@ All notable changes to HyperWeave are documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.2.24] - 2026-05-07
9
+
10
+ Receipts no longer clip past the right edge of the card when one tool dominates the session. Cleanup pass removes an unused template, an unused styling table, and two silent default-position fallbacks in the receipt template.
11
+
12
+ ### Fixed
13
+
14
+ - **Token map row could overflow the receipt's right edge** — sessions where a single tool used most of the tokens (for example 95% by one tool, the rest split between two others) made the smallest tool's cell extend past the card's right edge, hiding part of its label. The token map now shrinks cells proportionally when the row would otherwise overflow, with a minimum width that keeps every cell visible as a readable colored block.
15
+
16
+ ### Removed
17
+
18
+ - **Unused template `templates/components/treemap.svg.j2`** — orphan from before v0.2.21 with no remaining callers in the rendering pipeline.
19
+ - **Unused styling table in `compose/resolver.py`** — values had drifted from the live source in `treemap.py` and no template read it.
20
+ - **Silent default-position fallbacks for the provider and model labels** — these positions are always computed from the actual rendered text width; missing values now raise a clear template error instead of silently rendering at the legacy hardcoded position.
21
+
22
+ ### Notes
23
+
24
+ - 914 tests (was 910); 4 new tests cover token-map cell widths under heavy and balanced tool distributions plus the row of small tool cells fitting within the card.
25
+ - The row of small tool cells was already safe by construction (8 cells * 90px + 7 gaps * 4px = 748 <= 752); a defensive test now locks that contract.
26
+ - ruff + format + mypy --strict green.
27
+
28
+ ## [0.2.23] - 2026-05-06
29
+
30
+ Multi-runtime tool registry replaces v0.2.22's single empirical `tool-classes.yaml`. Codex receipts ship as the second runtime via spec-driven YAML registries dispatched by JSONL-shape auto-detection.
31
+
32
+ ### Added
33
+
34
+ - **Codex receipts** &mdash; new `telemetry-codex` skin renders OpenAI Codex sessions on an atmospheric gradient substrate. `codex_parser.py` handles three tool-call shapes: `function_call`, `custom_tool_call`, `web_search_call`.
35
+ - **Receipt geometry moves to the compose layer** &mdash; width-aware positioning via `measure_text` LUTs handles hero label x-offset, treemap detail truncation in narrow cells, and footer path truncation when the receipt id would collide with the right-aligned session date. `atmosphere_stops` + `card_inset` on `GenomeSpec` declare optional gradient backdrops.
36
+ - **Codex translucent borders** &mdash; card border `rgba(53,70,255,0.20)` and divider stroke `rgba(67,87,246,0.14)` let the atmospheric gradient carry the edge definition.
37
+ - **Per-runtime registries at `data/telemetry/runtimes/{claude-code,codex}.yaml`** &mdash; adding a runtime is a YAML drop-in plus parser module; no dispatcher / resolver / classifier edits needed.
38
+ - **`parse_transcript_auto` dispatcher in `telemetry/contract.py`** &mdash; sniffs JSONL envelope shape and routes to the matching parser; mutual-exclusion guard prevents a Claude line from sniffing as Codex.
39
+ - **`hyperweave install-hook --runtime codex`** &mdash; writes a Stop hook to the Codex hooks config and enables the `codex_hooks` feature flag; per-turn caveat surfaces in CLI help.
40
+ - **Claude Code tool registry completed** &mdash; 9 tools previously unmapped (MultiEdit, Agent, ToolSearch, ScheduleWakeup, Cron×3, EnterWorktree, ExitWorktree); MCP tools resolve via `mcp__` prefix pattern.
41
+
42
+ ### Changed
43
+
44
+ - **Three hardcoded runtime registries deleted** from `compose/resolver.py`: `_PROVIDER_BY_RUNTIME`, `_TOOL_CLASS`, and the runtime-string branch in `_resolve_telemetry_genome`. All routes go through `telemetry.runtimes`.
45
+ - **Unknown-tool policy: warn, never silent** &mdash; `parser.py` no longer falls through to `ToolClass.EXPLORE` without an audit trail; the warning surfaces tool name + runtime so the YAML can be patched.
46
+ - **`SessionTelemetry.runtime`** is a required field stamped by each parser; `contract._RUNTIME` constant deleted.
47
+
48
+ ### Notes
49
+
50
+ - 910 tests (was 866); ruff + format + mypy --strict green.
51
+
8
52
  ## [0.2.22] - 2026-05-05
9
53
 
10
54
  Adaptive time-axis tick algorithm replaces v0.2.21's hardcoded two-tier threshold; one helper now drives both labels and grid lines so they can never drift. README "Agent Receipts" swaps body copy for a skin table and reorders the receipt examples.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: hyperweave
3
- Version: 0.2.22
3
+ Version: 0.2.24
4
4
  Summary: Headless visual output layer for AI agents. One API call → self-contained SVG.
5
5
  Project-URL: Repository, https://github.com/InnerAura/hyperweave
6
6
  Project-URL: Issues, https://github.com/InnerAura/hyperweave/issues
@@ -123,14 +123,19 @@ hyperweave install-hook
123
123
  </p>
124
124
  <p align="center"><sub>Same data, different livery &mdash; claude-code</sub></p>
125
125
 
126
+ <p align="center">
127
+ <img src="https://raw.githubusercontent.com/InnerAura/hyperweave/main/assets/examples/telemetry/receipt_codex_large.svg" alt="session receipt — codex agent transcript auto-detected from JSONL shape" width="800"/>
128
+ </p>
129
+ <p align="center"><sub>Codex transcripts auto-detect from the JSONL shape</sub></p>
130
+
126
131
  The livery matches the agent that produced the session:
127
132
 
128
- | Agent | Livery | Aesthetic |
129
- |-------|--------|-----------|
130
- | Claude Code | `claude-code` | warm paper, terra-coral signal |
131
- | Codex | `codex` | *(coming soon)* |
132
- | &mdash; | `voltage` | titanium dark, champagne signal |
133
- | &mdash; | `cream` | risograph, fluoro-orange |
133
+ | Agent | Livery |
134
+ |-------|--------|
135
+ | Claude Code | `claude-code` |
136
+ | Codex | `codex` |
137
+ | &mdash; | `voltage` |
138
+ | &mdash; | `cream` |
134
139
 
135
140
  Auto-detected from the session transcript. Pin a different default with `hyperweave install-hook --genome voltage`.
136
141
 
@@ -91,14 +91,19 @@ hyperweave install-hook
91
91
  </p>
92
92
  <p align="center"><sub>Same data, different livery &mdash; claude-code</sub></p>
93
93
 
94
+ <p align="center">
95
+ <img src="https://raw.githubusercontent.com/InnerAura/hyperweave/main/assets/examples/telemetry/receipt_codex_large.svg" alt="session receipt — codex agent transcript auto-detected from JSONL shape" width="800"/>
96
+ </p>
97
+ <p align="center"><sub>Codex transcripts auto-detect from the JSONL shape</sub></p>
98
+
94
99
  The livery matches the agent that produced the session:
95
100
 
96
- | Agent | Livery | Aesthetic |
97
- |-------|--------|-----------|
98
- | Claude Code | `claude-code` | warm paper, terra-coral signal |
99
- | Codex | `codex` | *(coming soon)* |
100
- | &mdash; | `voltage` | titanium dark, champagne signal |
101
- | &mdash; | `cream` | risograph, fluoro-orange |
101
+ | Agent | Livery |
102
+ |-------|--------|
103
+ | Claude Code | `claude-code` |
104
+ | Codex | `codex` |
105
+ | &mdash; | `voltage` |
106
+ | &mdash; | `cream` |
102
107
 
103
108
  Auto-detected from the session transcript. Pin a different default with `hyperweave install-hook --genome voltage`.
104
109
 
@@ -0,0 +1,363 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg"
2
+ xmlns:hw="https://hyperweave.app/hw/v1.0"
3
+ role="img"
4
+ aria-labelledby="hw-bef2e733-title hw-bef2e733-desc"
5
+ viewBox="0 0 800 500"
6
+ width="800" height="500"
7
+ shape-rendering="geometricPrecision"
8
+ data-hw-id="bef2e733-3f40-4413-9b05-23fc7d931aa9"
9
+ data-hw-type="receipt"
10
+ data-hw-frame="receipt"
11
+ data-hw-genome="telemetry-codex"
12
+ data-hw-mode="light"
13
+ data-hw-status="active"
14
+ data-hw-profile="brutalist"
15
+ data-hw-motion="static"
16
+ data-hw-generation="1"
17
+ data-hw-contract="bef2e733-3f40-4413-9b05-23fc7d931aa9"
18
+ data-hw-size="default"
19
+ data-hw-fonts="self-contained"
20
+ data-hw-regime="normal"
21
+ data-hw-glyph="codex-glyph"
22
+ data-hw-chromatic="telemetry-codex">
23
+ <title id="hw-bef2e733-title">HyperWeave receipt artifact</title>
24
+ <desc id="hw-bef2e733-desc">A receipt artifact, using telemetry-codex genome.</desc>
25
+ <metadata>
26
+ <hw:artifact id="bef2e733-3f40-4413-9b05-23fc7d931aa9" type="receipt" series="core" version="0.2.20"
27
+ xmlns:hw="https://hyperweave.app/hw/v1.0">
28
+ <hw:provenance>
29
+ <hw:generator>HyperWeave Compositor v0.2.20 (InnerAura Labs)</hw:generator>
30
+ <hw:created>2026-05-07T01:50:15.729827+00:00</hw:created>
31
+ <hw:human-directed>true</hw:human-directed>
32
+ </hw:provenance>
33
+ <hw:spec size="800x500" performance="composite-only"
34
+ theme="dark" a11y="WCAG-AA" platform="web"/>
35
+ </hw:artifact>
36
+ <hw:composition xmlns:hw="https://hyperweave.app/hw/v1.0">
37
+ <hw:frame>receipt</hw:frame>
38
+ <hw:genome>telemetry-codex@0.2.20</hw:genome>
39
+ <hw:profile>brutalist</hw:profile>
40
+ <hw:slots>
41
+ </hw:slots>
42
+ <hw:environment platform="web" motion="static" status="active"/>
43
+ </hw:composition>
44
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
45
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
46
+ <rdf:Description>
47
+ <dc:title>HyperWeave receipt artifact</dc:title>
48
+ <dc:creator>HyperWeave Compositor v0.2.20 (InnerAura Labs)</dc:creator>
49
+ <dc:date>2026-05-07T01:50:15.729827+00:00</dc:date>
50
+ <dc:rights>CC BY 4.0</dc:rights>
51
+ </rdf:Description>
52
+ </rdf:RDF>
53
+ <hw:aesthetic xmlns:hw="https://hyperweave.app/hw/v1.0">
54
+ <hw:chromatic system="telemetry-codex" space="oklch"
55
+ palette="" contrast-ratio="4.5:1"/>
56
+ <hw:motion vocabulary="static" physics="none"
57
+ timing="phi" duration-base="2.618s"
58
+ stagger-regime="contemplative" cim-compliant="true"/>
59
+ <hw:geometry form-language="geometric" corner-radius="5px"
60
+ grid="auto" proportional-system="phi"
61
+ mathematical-basis="golden-ratio" symmetry="bilateral"/>
62
+ <hw:typography stack="" hierarchy="11/18/8"
63
+ weight-range="500-900" metrics-method="lut"/>
64
+ <hw:material surface="genome-native" depth="deep" texture="none"/>
65
+ </hw:aesthetic>
66
+ <hw:reasoning xmlns:hw="https://hyperweave.app/hw/v1.0">
67
+ <hw:intent></hw:intent>
68
+ <hw:approach></hw:approach>
69
+ <hw:tradeoffs></hw:tradeoffs>
70
+ <hw:constraints-applied>self-contained, cim-compliant, wcag-aa</hw:constraints-applied>
71
+ <hw:spatial-notes>800x500 (1.60), left-to-right</hw:spatial-notes>
72
+ </hw:reasoning>
73
+ </metadata>
74
+ <style>/* hw:css-modules: genome,accessibility */
75
+ svg, :root {
76
+ --dna-surface: rgba(255,255,255,0.74);
77
+ --dna-surface-alt: rgba(255,255,255,0.62);
78
+ --dna-surface-deep: rgba(255,255,255,0.85);
79
+ --dna-ink-primary: #080913;
80
+ --dna-ink-muted: #26305D;
81
+ --dna-ink-on-accent: #FFFFFF;
82
+ --dna-ink-bright: #080913;
83
+ --dna-ink-sub: #6B728A;
84
+ --dna-signal: #4357F6;
85
+ --dna-signal-dim: #7f8cff;
86
+ --dna-border: rgba(8,9,19,0.30);
87
+ --dna-border-tint: rgba(53,70,255,0.18);
88
+ --dna-shadow-color: #1a1d4a;
89
+ --dna-shadow-opacity: 0.06;
90
+ --dna-glow: 0px;
91
+ --dna-corner: 4;
92
+ --dna-rhythm-base: 2s;
93
+ --dna-bg: rgba(255,255,255,0.74);
94
+ --dna-bg-alt: rgba(255,255,255,0.62);
95
+ --dna-brand-text: #080913;
96
+ --dna-status-passing-core: #4357F6;
97
+ --dna-status-warning-core: #d99a00;
98
+ --dna-status-failing-core: #ff2b1f;
99
+ --dna-ink-tertiary: #6B728A;
100
+ --dna-ink-ghost: #6B728A;
101
+ --dna-border-div: rgba(53,70,255,0.18);
102
+ --dna-tool-explore: #0b8dcc;
103
+ --dna-tool-execute: #0ea66b;
104
+ --dna-tool-mutate: #df2b7f;
105
+ --dna-tool-coordinate: #d99a00;
106
+ --dna-tool-reflect: #df2b7f;
107
+ --dna-pill-outer-bg: transparent;
108
+ --dna-pill-outer-stroke: transparent;
109
+ --dna-pill-inner-bg: #4458F5;
110
+ --dna-pill-text: #FFFFFF;
111
+ --dna-pill-rule-top: transparent;
112
+ --dna-pill-rule-bottom: transparent;
113
+ --dna-glyph-fill: #FFFFFF;
114
+ --dna-card-border: rgba(53,70,255,0.20);
115
+ --dna-card-border-top: #3546ff;
116
+ --dna-card-inner-glyph: #5867ff;
117
+ --dna-font-display: 'Söhne','OpenAI Sans','Inter',system-ui,sans-serif;
118
+ --dna-font-mono: 'JetBrains Mono','IBM Plex Mono','SF Mono',ui-monospace,monospace;
119
+ --dna-sep: rgba(8,9,19,0.30);
120
+ --dna-status-delta-positive: #22C55E;
121
+ --dna-status-delta-negative: #DC2626;
122
+ }
123
+ .m { font-family: var(--dna-font-mono); }
124
+ .s { font-family: var(--dna-font-display); }
125
+ .ink1 { fill: var(--dna-ink-primary); }
126
+ .ink2 { fill: var(--dna-ink-muted); }
127
+ .ink3 { fill: var(--dna-ink-tertiary); }
128
+ @media (forced-colors: active) { text { fill: CanvasText; } }
129
+ /* === HyperWeave Accessibility Layer ===
130
+ * Non-negotiable media queries for motion, color scheme, and forced colors.
131
+ * Included in EVERY artifact.
132
+ *
133
+ * CAMO NOTE: @media (prefers-color-scheme) and @media (forced-colors: active)
134
+ * are INERT when served through GitHub Camo as img tags. The img element
135
+ * creates an isolated browsing context — the parent document's color scheme
136
+ * and forced-colors mode do not propagate into it. Artifacts will always
137
+ * render in their default (dark) theme on GitHub READMEs.
138
+ *
139
+ * These queries DO activate when the SVG is embedded directly (svg inline,
140
+ * object, or opened as a standalone document). This is a known accepted
141
+ * tradeoff: dark-default through Camo, adaptive in direct embed.
142
+ */
143
+
144
+ /* ── Reduced Motion ── */
145
+ @media (prefers-reduced-motion: reduce) {
146
+ .hw-logic-bit { animation: none !important; opacity: .8; }
147
+ .hw-scanner { animation: none; opacity: 0; }
148
+ *, *::before, *::after {
149
+ animation-duration: 0.01ms !important;
150
+ animation-iteration-count: 1 !important;
151
+ transition-duration: 0.01ms !important;
152
+ }
153
+ animate, animateTransform, animateMotion, set {
154
+ display: none !important;
155
+ }
156
+ }
157
+
158
+ /* ── Light Mode Override (see CAMO NOTE above — inert through img) ── */
159
+ /* Light mode: genome alleles injected by CSS assembler into per-artifact @media block. */
160
+
161
+ /* ── Forced Colors (Windows High Contrast) ── */
162
+ @media (forced-colors: active) {
163
+ text { fill: CanvasText !important; }
164
+ rect, path, circle, ellipse, polygon, polyline, line {
165
+ stroke: CanvasText;
166
+ }
167
+ .hw-frame-bg { fill: Canvas !important; }
168
+ .hw-accent-bar { fill: Highlight !important; }
169
+ .hw-signal { fill: Highlight !important; }
170
+ .hw-logic-bit { fill: Highlight !important; }
171
+ }
172
+ </style>
173
+ <defs>
174
+
175
+ <symbol id="claude-glyph" viewBox="0 0 24 24" overflow="visible">
176
+ <path d="M4.709 15.955l4.72-2.647.08-.23-.08-.128H9.2l-.79-.048-2.698-.073-2.339-.097-2.266-.122-.571-.121L0 11.784l.055-.352.48-.321.686.06 1.52.103 2.278.158 1.652.097 2.449.255h.389l.055-.157-.134-.098-.103-.097-2.358-1.596-2.552-1.688-1.336-.972-.724-.491-.364-.462-.158-1.008.656-.722.881.06.225.061.893.686 1.908 1.476 2.491 1.833.365.304.145-.103.019-.073-.164-.274-1.355-2.446-1.446-2.49-.644-1.032-.17-.619a2.97 2.97 0 01-.104-.729L6.283.134 6.696 0l.996.134.42.364.62 1.414 1.002 2.229 1.555 3.03.456.898.243.832.091.255h.158V9.01l.128-1.706.237-2.095.23-2.695.08-.76.376-.91.747-.492.584.28.48.685-.067.444-.286 1.851-.559 2.903-.364 1.942h.212l.243-.242.985-1.306 1.652-2.064.73-.82.85-.904.547-.431h1.033l.76 1.129-.34 1.166-1.064 1.347-.881 1.142-1.264 1.7-.79 1.36.073.11.188-.02 2.856-.606 1.543-.28 1.841-.315.833.388.091.395-.328.807-1.969.486-2.309.462-3.439.813-.042.03.049.061 1.549.146.662.036h1.622l3.02.225.79.522.474.638-.079.485-1.215.62-1.64-.389-3.829-.91-1.312-.329h-.182v.11l1.093 1.068 2.006 1.81 2.509 2.33.127.578-.322.455-.34-.049-2.205-1.657-.851-.747-1.926-1.62h-.128v.17l.444.649 2.345 3.521.122 1.08-.17.353-.608.213-.668-.122-1.374-1.925-1.415-2.167-1.143-1.943-.14.08-.674 7.254-.316.37-.729.28-.607-.461-.322-.747.322-1.476.389-1.924.315-1.53.286-1.9.17-.632-.012-.042-.14.018-1.434 1.967-2.18 2.945-1.726 1.845-.414.164-.717-.37.067-.662.401-.589 2.388-3.036 1.44-1.882.93-1.086-.006-.158h-.055L4.132 18.56l-1.13.146-.487-.456.061-.746.231-.243 1.908-1.312-.006.006z" fill="var(--dna-glyph-fill)" fill-rule="nonzero"/>
177
+ </symbol>
178
+
179
+ <symbol id="codex-glyph" viewBox="0 0 24 24" overflow="visible">
180
+ <path d="M19.503 0H4.496A4.496 4.496 0 000 4.496v15.007A4.496 4.496 0 004.496 24h15.007A4.496 4.496 0 0024 19.503V4.496A4.496 4.496 0 0019.503 0z" fill="var(--dna-glyph-fill)"/>
181
+ <path d="M9.064 3.344a4.578 4.578 0 012.285-.312c1 .115 1.891.54 2.673 1.275.01.01.024.017.037.021a.09.09 0 00.043 0 4.55 4.55 0 013.046.275l.047.022.116.057a4.581 4.581 0 012.188 2.399c.209.51.313 1.041.315 1.595a4.24 4.24 0 01-.134 1.223.123.123 0 00.03.115c.594.607.988 1.33 1.183 2.17.289 1.425-.007 2.71-.887 3.854l-.136.166a4.548 4.548 0 01-2.201 1.388.123.123 0 00-.081.076c-.191.551-.383 1.023-.74 1.494-.9 1.187-2.222 1.846-3.711 1.838-1.187-.006-2.239-.44-3.157-1.302a.107.107 0 00-.105-.024c-.388.125-.78.143-1.204.138a4.441 4.441 0 01-1.945-.466 4.544 4.544 0 01-1.61-1.335c-.152-.202-.303-.392-.414-.617a5.81 5.81 0 01-.37-.961 4.582 4.582 0 01-.014-2.298.124.124 0 00.006-.056.085.085 0 00-.027-.048 4.467 4.467 0 01-1.034-1.651 3.896 3.896 0 01-.251-1.192 5.189 5.189 0 01.141-1.6c.337-1.112.982-1.985 1.933-2.618.212-.141.413-.251.601-.33.215-.089.43-.164.646-.227a.098.098 0 00.065-.066 4.51 4.51 0 01.829-1.615 4.535 4.535 0 011.837-1.388zm3.482 10.565a.637.637 0 000 1.272h3.636a.637.637 0 100-1.272h-3.636zM8.462 9.23a.637.637 0 00-1.106.631l1.272 2.224-1.266 2.136a.636.636 0 101.095.649l1.454-2.455a.636.636 0 00.005-.64L8.462 9.23z" fill="var(--dna-card-inner-glyph)"/>
182
+ </symbol>
183
+ <clipPath id="receipt-card-shape">
184
+ <rect width="800" height="500" rx="5.5" ry="5.5"/>
185
+ </clipPath>
186
+ <linearGradient id="receipt-atmosphere" x1="0" y1="0" x2="1" y2="1">
187
+ <stop offset="0%" stop-color="#8FAEFF"/>
188
+ <stop offset="22%" stop-color="#C9D8FF"/>
189
+ <stop offset="48%" stop-color="#E9EDFF"/>
190
+ <stop offset="74%" stop-color="#B9B4FF"/>
191
+ <stop offset="100%" stop-color="#6674F5"/>
192
+ </linearGradient>
193
+ <radialGradient id="receipt-bloom-cool" cx="14%" cy="16%" r="78%">
194
+ <stop offset="0%" stop-color="#D8E4FF" stop-opacity="0.92"/>
195
+ <stop offset="48%" stop-color="#9DBDFF" stop-opacity="0.34"/>
196
+ <stop offset="100%" stop-color="#9DBDFF" stop-opacity="0"/>
197
+ </radialGradient>
198
+ <radialGradient id="receipt-bloom-violet" cx="86%" cy="20%" r="62%">
199
+ <stop offset="0%" stop-color="#DCD0FF" stop-opacity="0.72"/>
200
+ <stop offset="52%" stop-color="#9C91FF" stop-opacity="0.26"/>
201
+ <stop offset="100%" stop-color="#9C91FF" stop-opacity="0"/>
202
+ </radialGradient>
203
+ <linearGradient id="receipt-card-top-highlight" x1="0" y1="0" x2="0" y2="1">
204
+ <stop offset="0%" stop-color="#FFFFFF" stop-opacity="0.35"/>
205
+ <stop offset="100%" stop-color="#FFFFFF" stop-opacity="0"/>
206
+ </linearGradient>
207
+ </defs>
208
+ <rect width="800" height="500" rx="5.5" ry="5.5" fill="url(#receipt-atmosphere)"/>
209
+ <rect width="800" height="500" rx="5.5" ry="5.5" fill="url(#receipt-bloom-cool)"/>
210
+ <rect width="800" height="500" rx="5.5" ry="5.5" fill="url(#receipt-bloom-violet)"/>
211
+ <rect x="6" y="6" width="788" height="488" rx="3" ry="3" fill="var(--dna-surface)"/>
212
+ <rect x="6" y="6" width="788" height="32" rx="3" ry="3" fill="url(#receipt-card-top-highlight)" pointer-events="none"/>
213
+
214
+ <use href="#codex-glyph" x="24" y="13" width="18" height="18"/>
215
+ <text x="50" y="27" class="s ink1" font-size="14" font-weight="700">Codex</text>
216
+ <text x="101" y="27" class="m ink2" font-size="11" letter-spacing="0.04em">· gpt-5.4</text>
217
+ <g transform="translate(673, 11)" data-hw-zone="phase-pill">
218
+ <rect width="103" height="22" rx="0" fill="var(--dna-pill-outer-bg)"/>
219
+ <rect width="103" height="22" rx="0" fill="none" stroke="var(--dna-pill-outer-stroke)" stroke-width="0.75"/>
220
+ <rect class="anchor-live" x="2" y="2" width="99" height="18" rx="0" fill="var(--dna-pill-inner-bg)"/>
221
+ <rect x="2" y="2" width="99" height="1" fill="var(--dna-pill-rule-top)"/>
222
+ <rect x="2" y="19" width="99" height="1" fill="var(--dna-pill-rule-bottom)"/>
223
+ <text class="m" x="51" y="14" text-anchor="middle" font-size="9" font-weight="800" letter-spacing="0.28em" fill="var(--dna-pill-text)">VALIDATION</text>
224
+ </g>
225
+ <text x="24" y="66" class="s ink1" font-size="26" font-weight="800" letter-spacing="-0.02em"><tspan>11.5M tokens billed · </tspan><tspan fill="var(--dna-signal)">$16.18</tspan></text>
226
+ <text x="24" y="82" class="m ink3" font-size="10" letter-spacing="0.04em">127m · 192 calls · 11 stages</text>
227
+ <g data-hw-zone="hero-right">
228
+ <text x="776" y="56" class="m ink2" font-size="10" text-anchor="end" letter-spacing="0.02em"
229
+ >1.4M in / 162.0K out</text>
230
+ <text x="776" y="70" class="m ink2" font-size="10" text-anchor="end" letter-spacing="0.02em"
231
+ >9.9M cached / 0 written</text>
232
+ <text x="776" y="84" class="m ink2" font-size="10" text-anchor="end" letter-spacing="0.02em"
233
+ >1 user turn</text>
234
+ </g>
235
+ <line x1="24" y1="96" x2="776" y2="96" stroke="var(--dna-border)" stroke-width="1"/>
236
+
237
+ <g transform="translate(24, 104)" data-hw-zone="treemap">
238
+ <text class="m ink3" font-size="7" font-weight="700" letter-spacing="0.22em" y="12">TOKEN MAP</text>
239
+ <rect x="96" y="6" width="2" height="8" fill="var(--dna-tool-coordinate)"/>
240
+ <text class="m ink3" x="102" y="13" font-size="9">coordinate</text>
241
+ <rect x="170" y="6" width="2" height="8" fill="var(--dna-tool-execute)"/>
242
+ <text class="m ink3" x="176" y="13" font-size="9">execute</text>
243
+ <rect x="232" y="6" width="2" height="8" fill="var(--dna-tool-explore)"/>
244
+ <text class="m ink3" x="238" y="13" font-size="9">explore</text>
245
+ <rect x="292" y="6" width="2" height="8" fill="var(--dna-tool-mutate)"/>
246
+ <text class="m ink3" x="298" y="13" font-size="9">mutate</text>
247
+ <text class="m ink3" x="752" y="13" font-size="9" text-anchor="end"><tspan fill="var(--dna-status-failing-core)" opacity="0.85" font-weight="700">✗N</tspan><tspan dx="3">= failed tool calls</tspan></text>
248
+
249
+ <g transform="translate(0, 22)" data-hw-tier="1" data-hw-tool="exec_command">
250
+ <rect width="752" height="88" fill="var(--dna-surface-deep)"/>
251
+ <rect width="4" height="88.0" fill="var(--dna-tool-execute)" opacity="0.85"/>
252
+ <rect width="752" height="88" fill="none" stroke="var(--dna-border)" stroke-width="0.5"/>
253
+ <text class="m ink1" font-size="13.0" font-weight="600" x="14" y="22">exec_command</text>
254
+ <text class="s" font-size="38.0" font-weight="800" fill="var(--dna-tool-execute)" x="14" y="66" letter-spacing="-0.02em">66%</text>
255
+ <text class="m ink3" font-size="10.0" x="14" y="80">1.1M · 127 calls</text>
256
+ </g>
257
+ <g transform="translate(0, 118)" data-hw-tier="2" data-hw-tool="view_image">
258
+ <rect width="307" height="32" fill="var(--dna-surface-deep)"/>
259
+ <rect width="3" height="32.0" fill="var(--dna-tool-explore)" opacity="0.85"/>
260
+ <rect width="307" height="32" fill="none" stroke="var(--dna-border)" stroke-width="0.5"/>
261
+ <text class="m ink1" font-size="9.5" font-weight="600" x="10" y="13">view_image</text>
262
+ <text class="m ink3" font-size="8.0" x="10" y="26">215.8K · 26 calls</text>
263
+ </g>
264
+ <g transform="translate(311, 118)" data-hw-tier="2" data-hw-tool="write_stdin">
265
+ <rect width="271" height="32" fill="var(--dna-surface-deep)"/>
266
+ <rect width="3" height="32.0" fill="var(--dna-tool-execute)" opacity="0.85"/>
267
+ <rect width="271" height="32" fill="none" stroke="var(--dna-border)" stroke-width="0.5"/>
268
+ <text class="m ink1" font-size="9.5" font-weight="600" x="10" y="13">write_stdin</text>
269
+ <text class="m ink3" font-size="8.0" x="10" y="26">190.9K · 23 calls</text>
270
+ </g>
271
+ <g transform="translate(586, 118)" data-hw-tier="2" data-hw-tool="apply_patch">
272
+ <rect width="165" height="32" fill="var(--dna-surface-deep)"/>
273
+ <rect width="3" height="32.0" fill="var(--dna-tool-mutate)" opacity="0.85"/>
274
+ <rect width="165" height="32" fill="none" stroke="var(--dna-border)" stroke-width="0.5"/>
275
+ <text class="m ink1" font-size="9.5" font-weight="600" x="10" y="13">apply_patch</text>
276
+ <text class="m ink3" font-size="8.0" x="10" y="26">116.2K · 14 calls</text>
277
+ </g>
278
+ <g transform="translate(0, 154)" data-hw-tier="3" data-hw-tool="update_plan">
279
+ <rect width="90" height="24" fill="var(--dna-surface-deep)"/>
280
+ <rect width="3" height="24.0" fill="var(--dna-tool-coordinate)" opacity="0.85"/>
281
+ <rect width="90" height="24" fill="none" stroke="var(--dna-border)" stroke-width="0.5"/>
282
+ <text class="m ink1" font-size="9.0" font-weight="600" x="10" y="12">update_plan</text>
283
+ <text class="m ink3" font-size="8.0" x="10" y="22">2 calls</text>
284
+ </g>
285
+ </g>
286
+ <line x1="24" y1="290" x2="776" y2="290" stroke="var(--dna-border)" stroke-width="1"/>
287
+
288
+ <g transform="translate(24, 306)" data-hw-zone="rhythm">
289
+ <text class="m ink3" font-size="7" font-weight="700" letter-spacing="0.22em">SESSION RHYTHM · 11 STAGES · HEIGHT ≈ TOKENS</text>
290
+ <text class="m ink3" x="752" y="0" font-size="7.5" text-anchor="end" letter-spacing="0.18em">12M · PEAK 3.7M</text>
291
+
292
+ <text class="m ink3" x="0" y="20" font-size="8">0m</text>
293
+ <text class="m ink3" x="58" y="20" font-size="8" text-anchor="middle">10m</text>
294
+ <text class="m ink3" x="117" y="20" font-size="8" text-anchor="middle">20m</text>
295
+ <text class="m ink3" x="176" y="20" font-size="8" text-anchor="middle">30m</text>
296
+ <text class="m ink3" x="235" y="20" font-size="8" text-anchor="middle">40m</text>
297
+ <text class="m ink3" x="294" y="20" font-size="8" text-anchor="middle">50m</text>
298
+ <text class="m ink3" x="353" y="20" font-size="8" text-anchor="middle">60m</text>
299
+ <text class="m ink3" x="411" y="20" font-size="8" text-anchor="middle">70m</text>
300
+ <text class="m ink3" x="470" y="20" font-size="8" text-anchor="middle">80m</text>
301
+ <text class="m ink3" x="529" y="20" font-size="8" text-anchor="middle">90m</text>
302
+ <text class="m ink3" x="588" y="20" font-size="8" text-anchor="middle">100m</text>
303
+ <text class="m ink3" x="647" y="20" font-size="8" text-anchor="middle">110m</text>
304
+ <text class="m ink3" x="752" y="20" font-size="8" text-anchor="end">128m</text>
305
+
306
+ <line x1="58" y1="30" x2="58" y2="108" stroke="var(--dna-border-tint)" stroke-width="0.5" opacity="0.55"/>
307
+ <line x1="117" y1="30" x2="117" y2="108" stroke="var(--dna-border-tint)" stroke-width="0.5" opacity="0.55"/>
308
+ <line x1="176" y1="30" x2="176" y2="108" stroke="var(--dna-border-tint)" stroke-width="0.5" opacity="0.55"/>
309
+ <line x1="235" y1="30" x2="235" y2="108" stroke="var(--dna-border-tint)" stroke-width="0.5" opacity="0.55"/>
310
+ <line x1="294" y1="30" x2="294" y2="108" stroke="var(--dna-border-tint)" stroke-width="0.5" opacity="0.55"/>
311
+ <line x1="353" y1="30" x2="353" y2="108" stroke="var(--dna-border-tint)" stroke-width="0.5" opacity="0.55"/>
312
+ <line x1="411" y1="30" x2="411" y2="108" stroke="var(--dna-border-tint)" stroke-width="0.5" opacity="0.55"/>
313
+ <line x1="470" y1="30" x2="470" y2="108" stroke="var(--dna-border-tint)" stroke-width="0.5" opacity="0.55"/>
314
+ <line x1="529" y1="30" x2="529" y2="108" stroke="var(--dna-border-tint)" stroke-width="0.5" opacity="0.55"/>
315
+ <line x1="588" y1="30" x2="588" y2="108" stroke="var(--dna-border-tint)" stroke-width="0.5" opacity="0.55"/>
316
+ <line x1="647" y1="30" x2="647" y2="108" stroke="var(--dna-border-tint)" stroke-width="0.5" opacity="0.55"/>
317
+ <line x1="706" y1="30" x2="706" y2="108" stroke="var(--dna-border-tint)" stroke-width="0.5" opacity="0.55"/>
318
+
319
+ <line x1="0" y1="108" x2="752" y2="108" stroke="var(--dna-border)" stroke-width="1"/>
320
+
321
+ <g data-hw-field="bars">
322
+ <rect x="0" y="88" width="79" height="20" fill="var(--dna-tool-execute)" opacity="0.78" rx="0.3"/>
323
+ <rect x="81" y="94" width="39" height="14" fill="var(--dna-tool-execute)" opacity="0.85" rx="0.3"/>
324
+ <rect x="122" y="103" width="5" height="5" fill="var(--dna-tool-explore)" opacity="0.78" rx="0.3"/>
325
+ <rect x="129" y="103" width="5" height="5" fill="var(--dna-tool-mutate)" opacity="0.78" rx="0.3"/>
326
+ <rect x="136" y="73" width="146" height="35" fill="var(--dna-tool-execute)" opacity="0.85" rx="0.3"/>
327
+ <rect x="284" y="90" width="20" height="18" fill="var(--dna-tool-execute)" opacity="0.78" rx="0.3"/>
328
+ <rect x="306" y="103" width="5" height="5" fill="var(--dna-tool-explore)" opacity="0.78" rx="0.3"/>
329
+ <rect x="313" y="103" width="5" height="5" fill="var(--dna-tool-execute)" opacity="0.78" rx="0.3"/>
330
+ <rect x="320" y="103" width="5" height="5" fill="var(--dna-tool-execute)" opacity="0.85" rx="0.3"/>
331
+ <rect x="327" y="103" width="5" height="5" fill="var(--dna-tool-mutate)" opacity="0.78" rx="0.3"/>
332
+ <rect x="334" y="94" width="412" height="14" fill="var(--dna-tool-execute)" opacity="0.78" rx="0.3"/>
333
+ </g>
334
+
335
+ <rect x="136" y="72" width="146" height="1.5" fill="var(--dna-signal)"/>
336
+
337
+ <g data-hw-field="errors">
338
+ </g>
339
+
340
+ <g transform="translate(0, 124)" data-hw-zone="legend">
341
+ <rect x="0" y="0" width="6" height="6" fill="var(--dna-tool-coordinate)"/>
342
+ <text class="m ink3" x="10" y="6" font-size="8.5">coordinate</text>
343
+ <rect x="82" y="0" width="6" height="6" fill="var(--dna-tool-execute)"/>
344
+ <text class="m ink3" x="92" y="6" font-size="8.5">execute</text>
345
+ <rect x="152" y="0" width="6" height="6" fill="var(--dna-tool-explore)"/>
346
+ <text class="m ink3" x="162" y="6" font-size="8.5">explore</text>
347
+ <rect x="220" y="0" width="6" height="6" fill="var(--dna-tool-mutate)"/>
348
+ <text class="m ink3" x="230" y="6" font-size="8.5">mutate</text>
349
+ <rect x="290" y="0" width="2" height="6" fill="var(--dna-status-failing-core)"/>
350
+ <text class="m ink3" x="296" y="6" font-size="8.5">error tick</text>
351
+ <text class="m" x="752" y="6" font-size="9" font-weight="700" fill="var(--dna-signal)" text-anchor="end" letter-spacing="0.14em">VALIDATION · 32%</text>
352
+ </g>
353
+ </g>
354
+
355
+ <line x1="24" y1="452" x2="776" y2="452" stroke="var(--dna-border)" stroke-width="0.5"/>
356
+ <text x="24" y="470" class="m ink3" font-size="9" letter-spacing="0.04em">aura-research · .hyperweave/receipts/019ddedf-318a-7192-b29b-c0eab28e2308.svg</text>
357
+ <text x="776" y="470" class="m ink3" font-size="9" text-anchor="end" letter-spacing="0.04em">session 019ddedf · 2026-04-30 14:53</text>
358
+ <text x="24" y="487" class="m ink2" font-size="9" letter-spacing="0.04em">1 user turn</text>
359
+ <text x="776" y="487" class="m ink2" font-size="9" text-anchor="end" letter-spacing="0.04em">hyperweave.app</text>
360
+
361
+ <rect x="0" y="0" width="800" height="2" fill="var(--dna-card-border-top)" fill-opacity="0.85" clip-path="url(#receipt-card-shape)"/>
362
+ <rect x="0.5" y="0.5" width="799" height="499" rx="5.5" ry="5.5" fill="none" stroke="var(--dna-card-border)" stroke-width="1"/>
363
+ </svg>