hyperweave 0.2.0__tar.gz → 0.2.2__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.
- {hyperweave-0.2.0 → hyperweave-0.2.2}/.gitignore +2 -2
- {hyperweave-0.2.0 → hyperweave-0.2.2}/CHANGELOG.md +18 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/PKG-INFO +5 -5
- {hyperweave-0.2.0 → hyperweave-0.2.2}/README.md +4 -4
- hyperweave-0.2.2/scripts/extract_glyphs.py +276 -0
- hyperweave-0.2.2/scripts/generate_hw_compliant.py +327 -0
- hyperweave-0.2.2/scripts/generate_proofset.py +613 -0
- hyperweave-0.2.2/scripts/stress_test.py +521 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/_version.py +2 -2
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/config/genome_validator.py +1 -3
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/connectors/github.py +11 -4
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/render/chart_engine.py +7 -15
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/badge/chrome-content.j2 +10 -10
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/badge/chrome-defs.j2 +21 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/stats/chrome-content.j2 +15 -2
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/stats/chrome-defs.j2 +7 -9
- hyperweave-0.2.2/src/hyperweave/templates/frames/strip/brutalist-defs.j2 +26 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/strip/chrome-defs.j2 +35 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/strip.svg.j2 +12 -13
- {hyperweave-0.2.0 → hyperweave-0.2.2}/tests/test_assembler.py +1 -2
- {hyperweave-0.2.0 → hyperweave-0.2.2}/tests/test_chart_engine.py +2 -2
- {hyperweave-0.2.0 → hyperweave-0.2.2}/tests/test_github_scrape.py +41 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/tests/test_telemetry_integration.py +3 -6
- hyperweave-0.2.0/src/hyperweave/templates/frames/strip/brutalist-defs.j2 +0 -6
- {hyperweave-0.2.0 → hyperweave-0.2.2}/.dockerignore +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/.github/workflows/ci.yml +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/.github/workflows/deploy.yml +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/.github/workflows/publish.yml +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/Dockerfile +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/LICENSE +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/buttons/button-liquid.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/cards/card-butterfly.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/cards/card-python.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/cards/card-sunflower.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/cards/card-waves.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/examples/brutalist-emerald/badge_critical.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/examples/brutalist-emerald/badge_passing.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/examples/brutalist-emerald/badge_warning.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/examples/brutalist-emerald/banner.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/examples/brutalist-emerald/icons/discord.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/examples/brutalist-emerald/icons/notion.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/examples/brutalist-emerald/icons/reddit.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/examples/brutalist-emerald/icons/spotify.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/examples/brutalist-emerald/icons/youtube.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/examples/brutalist-emerald/marquee_counter.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/examples/brutalist-emerald/marquee_horizontal.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/examples/brutalist-emerald/marquee_vertical.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/examples/brutalist-emerald/profile-cards/chart_stars_full.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/examples/brutalist-emerald/profile-cards/stats.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/examples/brutalist-emerald/strip.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/examples/chrome-horizon/badge_critical.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/examples/chrome-horizon/badge_passing.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/examples/chrome-horizon/badge_warning.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/examples/chrome-horizon/banner.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/examples/chrome-horizon/icons/bluesky.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/examples/chrome-horizon/icons/github.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/examples/chrome-horizon/icons/instagram.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/examples/chrome-horizon/icons/mastodon.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/examples/chrome-horizon/icons/x.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/examples/chrome-horizon/marquee_counter.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/examples/chrome-horizon/marquee_horizontal.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/examples/chrome-horizon/marquee_vertical.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/examples/chrome-horizon/profile-cards/chart_stars_full.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/examples/chrome-horizon/profile-cards/stats.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/examples/chrome-horizon/strip.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/examples/telemetry/master_card.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/examples/telemetry/receipt.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/examples/telemetry/rhythm_strip.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/footers/inneraura-footer-liquid.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/footers/inneraura-footer-purple.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/footers/inneraura-footer.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/hyperweave-banner.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/icons/cobalt-sapphire-discord.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/icons/cobalt-sapphire-docs.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/icons/cobalt-sapphire-github.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/icons/cobalt-sapphire-instagram.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/icons/cobalt-sapphire-linkedin.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/icons/cobalt-sapphire-tiktok.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/icons/cobalt-sapphire-x.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/icons/cobalt-sapphire-youtube.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/marquees/badge-showcase-triple.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/marquees/genome-marquee-triple.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/marquees/sample-badges.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/mintlify-assets/404.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/mintlify-assets/callout-icons.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/mintlify-assets/divider.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/mintlify-assets/favicon.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/mintlify-assets/hero-banner.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/mintlify-assets/hyperweave-banner-v2.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/mintlify-assets/hyperweave-navbar-logo.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/mintlify-assets/loader.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/mintlify-assets/og-image.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/assets/timelines/hyperweave-roadmap.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/docs/assets/favicon.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/docs/assets/hyperweave-banner.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/docs/assets/hyperweave-navbar-logo.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/docs/assets/og-image.svg +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/docs/explanation/architecture.mdx +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/docs/explanation/camo-compatibility.mdx +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/docs/explanation/cim-compliance.mdx +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/docs/explanation/genome-profile-system.mdx +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/docs/explanation/metadata-tiers.mdx +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/docs/how-to/add-motion-to-badges.mdx +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/docs/how-to/create-session-receipts.mdx +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/docs/how-to/set-up-claude-code-hooks.mdx +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/docs/how-to/use-live-data-badges.mdx +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/docs/introduction.mdx +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/docs/mint.json +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/docs/quickstart.mdx +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/docs/reference/cli.mdx +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/docs/reference/compose-spec.mdx +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/docs/reference/genomes.mdx +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/docs/reference/http-api.mdx +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/docs/reference/mcp-tools.mdx +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/docs/reference/motions.mdx +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/docs/reference/telemetry-contract.mdx +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/docs/spec/hyperweave-protocol.mdx +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/docs/tutorials/build-an-artifact-kit.mdx +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/docs/tutorials/compose-your-first-badge.mdx +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/docs/tutorials/install-session-telemetry.mdx +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/fly.toml +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/hooks/install.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/hooks/session_end.sh +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/justfile +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/pyproject.toml +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/__init__.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/__main__.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/cli.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/compose/__init__.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/compose/assembler.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/compose/context.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/compose/engine.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/compose/lanes.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/compose/resolver.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/compose/resolvers/__init__.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/compose/resolvers/chart.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/compose/resolvers/stats.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/compose/resolvers/timeline.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/config/__init__.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/config/loader.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/config/registry.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/config/settings.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/connectors/__init__.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/connectors/arxiv.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/connectors/base.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/connectors/cache.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/connectors/rest.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/core/__init__.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/core/color.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/core/contracts.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/core/enums.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/core/models.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/core/schema.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/core/text.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/core/thresholds.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/css/accessibility.css +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/css/bridge.css +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/css/expression.css +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/css/phase-colors.css +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/css/status.css +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/css/telemetry.css +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/font-metrics/inter.json +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/fonts/jetbrains-mono.b64 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/fonts/jetbrains-mono.meta.json +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/fonts/orbitron.b64 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/fonts/orbitron.meta.json +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/genomes/brutalist-emerald.json +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/genomes/chrome-horizon.json +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/genomes/telemetry-void.json +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/glyphs.json +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/motions/border/chromatic-pulse.yaml +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/motions/border/corner-trace.yaml +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/motions/border/dual-orbit.yaml +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/motions/border/entanglement.yaml +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/motions/border/rimrun.yaml +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/motions/kinetic/bars.yaml +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/motions/kinetic/breach.yaml +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/motions/kinetic/broadcast.yaml +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/motions/kinetic/cascade.yaml +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/motions/kinetic/collapse.yaml +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/motions/kinetic/converge.yaml +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/motions/kinetic/crash.yaml +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/motions/kinetic/drop.yaml +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/motions/kinetic/pulse.yaml +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/motions/static.yaml +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/policies/normal.json +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/policies/permissive.json +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/policies/ungoverned.json +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/profiles/brutalist.contract.json +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/profiles/brutalist.yaml +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/profiles/chrome.contract.json +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/profiles/chrome.yaml +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/specimens.yaml +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/telemetry/model-pricing.yaml +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/telemetry/stage-config.yaml +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/telemetry/stage-labels.yaml +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/telemetry/tool-classes.yaml +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/telemetry/tool-colors.yaml +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/terminals/arrow.json +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/terminals/aurora.json +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/terminals/beacon.json +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/terminals/bracket3d.json +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/terminals/chevron.json +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/terminals/crosshair.json +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/terminals/diamond.json +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/terminals/rocket.json +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/terminals/rules/bar.json +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/terminals/rules/dashed.json +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/terminals/rules/five-wave.json +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/terminals/rules/spectral.json +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/terminals/rules/straight.json +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/terminals/rules/wave.json +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/data/terminals/stijl.json +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/kit.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/mcp/__init__.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/mcp/__main__.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/mcp/server.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/py.typed +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/render/__init__.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/render/fonts.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/render/glyphs.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/render/motion.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/render/templates.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/serve/__init__.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/serve/app.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/telemetry/__init__.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/telemetry/capture.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/telemetry/contract.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/telemetry/corrections.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/telemetry/cost.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/telemetry/models.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/telemetry/parser.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/telemetry/stages.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/components/filter.svg.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/components/glyph-inline.svg.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/components/glyph.svg.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/components/gradient.svg.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/components/metadata.svg.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/components/metric.svg.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/components/phase-segment.svg.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/components/rule.svg.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/components/status.svg.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/components/terminal.svg.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/components/treemap.svg.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/document.svg.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/error-badge.svg.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/badge/brutalist-content.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/badge/brutalist-defs.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/badge/default-content.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/badge/default-defs.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/badge.svg.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/banner/brutalist-defs.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/banner/chrome-defs.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/banner/default-defs.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/banner.svg.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/catalog.svg.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/chart/brutalist-content.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/chart/brutalist-defs.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/chart/chrome-content.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/chart/chrome-defs.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/chart.svg.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/divider.svg.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/icon/brutalist-content.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/icon/brutalist-defs.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/icon/chrome-content.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/icon/chrome-defs.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/icon/default-content.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/icon/default-defs.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/icon.svg.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/marquee-counter/brutalist-content.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/marquee-counter/brutalist-defs.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/marquee-counter/chrome-content.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/marquee-counter/chrome-defs.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/marquee-counter.svg.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/marquee-horizontal/brutalist-content.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/marquee-horizontal/brutalist-defs.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/marquee-horizontal/chrome-content.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/marquee-horizontal/chrome-defs.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/marquee-horizontal.svg.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/marquee-vertical/brutalist-content.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/marquee-vertical/brutalist-defs.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/marquee-vertical/chrome-content.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/marquee-vertical/chrome-defs.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/marquee-vertical.svg.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/master-card.svg.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/receipt.svg.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/rhythm-strip.svg.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/stats/brutalist-content.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/stats/brutalist-defs.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/stats.svg.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/strip/brutalist-content.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/strip/brutalist-status.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/strip/chrome-content.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/strip/chrome-status.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/strip/default-content.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/strip/default-defs.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/strip/default-status.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/timeline/default-content.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/frames/timeline.svg.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/motions/border/chromatic-pulse.svg.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/motions/border/corner-trace.svg.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/motions/border/dual-orbit.svg.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/motions/border/entanglement.svg.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/motions/border/rimrun.svg.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/motions/kinetic/bars.svg.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/motions/kinetic/breach.svg.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/motions/kinetic/broadcast.svg.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/motions/kinetic/cascade.svg.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/motions/kinetic/collapse.svg.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/motions/kinetic/converge.svg.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/motions/kinetic/crash.svg.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/motions/kinetic/drop.svg.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/src/hyperweave/templates/motions/kinetic/pulse.svg.j2 +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/tests/__init__.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/tests/conftest.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/tests/fixtures/github_contributions/synthetic.html +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/tests/fixtures/session.json +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/tests/fixtures/session.jsonl +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/tests/test_chart_frame.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/tests/test_connectors.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/tests/test_core.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/tests/test_kit.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/tests/test_mcp.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/tests/test_paradigm_dispatch.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/tests/test_proofset.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/tests/test_render.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/tests/test_serve.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/tests/test_stats_card.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/tests/test_telemetry.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/tests/test_timeline.py +0 -0
- {hyperweave-0.2.0 → hyperweave-0.2.2}/uv.lock +0 -0
|
@@ -27,10 +27,10 @@ htmlcov/
|
|
|
27
27
|
archive/
|
|
28
28
|
.claude/
|
|
29
29
|
# CLAUDE.md
|
|
30
|
-
docs/_notes/
|
|
30
|
+
docs/_notes/
|
|
31
31
|
outputs/
|
|
32
|
-
scripts/
|
|
33
32
|
specs/
|
|
33
|
+
# scripts/ is version-controlled (tests/test_proofset.py imports generate_proofset.py)
|
|
34
34
|
|
|
35
35
|
assets/cards/butterfly-mcp.svg
|
|
36
36
|
assets/cards/card-moon.svg
|
|
@@ -5,6 +5,24 @@ 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.2] - 2026-04-13
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- **CI test job** was red on the v0.2.1 push because `tests/test_proofset.py` imports `scripts/generate_proofset.py`, but `scripts/` was excluded from version control by `.gitignore`. The three test runners saw `FileNotFoundError: No such file or directory: scripts/generate_proofset.py`. `scripts/` is now tracked (it is a dev-tools directory, not a runtime dependency, and remains excluded from the PyPI wheel by `[tool.hatch.build.targets.wheel].packages`).
|
|
13
|
+
|
|
14
|
+
## [0.2.1] - 2026-04-13
|
|
15
|
+
|
|
16
|
+
Post-v0.2.0 stabilization: typography alignment, mobile rendering fix, and a streak computation correction.
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
|
|
20
|
+
- **Stats card "streak" reports 0d for active contributors.** The contribution-calendar parser walked backwards from the latest cell and broke on the first zero, which is always today's empty cell before the user has committed. The streak calculator now treats the most-recent cell as a single grace day — if today hasn't happened yet, the streak continues from yesterday. Any zero day after the first one still breaks the streak as before.
|
|
21
|
+
- **Activity bars blur on mobile.** The `barglow` filter on the stats card's 52-week activity bars used `feGaussianBlur`, which rasterizes to a pixel buffer and gets downsampled when the SVG is scaled to smaller mobile viewports — producing soft, fuzzy bars. Replaced with a pure-vector 2-layer halo (sibling rects at decreasing opacity). Same cyan halo aesthetic from the chrome-horizon magazine specimen, but crisp at every scale. The `{uid}-barglow` filter definition was removed from `stats/chrome-defs.j2`.
|
|
22
|
+
- **chrome-horizon badge and strip typography** now match the stats and chart cards introduced in v0.2.0. Badge values render in Orbitron (the bundled display font) instead of the prior Impact+skew treatment; strip metric values keep the shields.io-style Impact+skew but gain the silver `ct-hero` gradient fill, tying them visually to the hero numbers on the stats and chart frames. Identity and metric labels render in JetBrains Mono at the sizes and letter-spacing used by the chrome-horizon magazine specimen.
|
|
23
|
+
- Badge and strip chrome templates migrated to the same class-based `<style>` pattern stats and chart already use (`.{uid}-label`, `.{uid}-value`, `.{uid}-identity`, `.{uid}-metric-label`, `.{uid}-metric-value`). Inline `font-family` / `font-size` / `font-weight` attributes removed from `strip.svg.j2`, `badge/chrome-content.j2`, and replaced with class references defined in each paradigm's `*-defs.j2` file. This is chrome-paradigm-only — brutalist-emerald output is unchanged.
|
|
24
|
+
- Applied `ruff format` to three files added in v0.2.0 (`config/genome_validator.py`, `connectors/github.py`, `render/chart_engine.py`). No behavior change — CI's `ruff format --check` job runs separately from `ruff check` and was the only thing red on the v0.2.0 push.
|
|
25
|
+
|
|
8
26
|
## [0.2.0] - 2026-04-12
|
|
9
27
|
|
|
10
28
|
Live-data profile artifacts. HyperWeave can now render GitHub profile cards, star-history charts, and milestone timelines directly from a single API call, the CLI, or an MCP tool. Genomes gain a per-frame paradigm layer so two genomes on the same profile can diverge structurally, not just chromatically. Custom genomes can be loaded from a local JSON file and validated against a profile contract. Fonts are bundled as base64 WOFF2 for fully self-contained SVGs. Test suite: 435 passing.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: hyperweave
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.2
|
|
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
|
|
@@ -120,12 +120,12 @@ Why genome and not theme? Because brand isn't a design problem, it's an infrastr
|
|
|
120
120
|
</tr>
|
|
121
121
|
<tr>
|
|
122
122
|
<td rowspan="2" align="center"><strong>Profile cards</strong></td>
|
|
123
|
-
<td><img src="
|
|
124
|
-
<td><img src="
|
|
123
|
+
<td><img src="https://hyperweave.app/v1/stats/eli64s/brutalist-emerald.static" alt="stats" width="100%"/></td>
|
|
124
|
+
<td><img src="https://hyperweave.app/v1/stats/eli64s/chrome-horizon.static" alt="stats" width="100%"/></td>
|
|
125
125
|
</tr>
|
|
126
126
|
<tr>
|
|
127
|
-
<td><img src="
|
|
128
|
-
<td><img src="
|
|
127
|
+
<td><img src="https://hyperweave.app/v1/chart/stars/eli64s/readme-ai/brutalist-emerald.static" alt="star chart" width="100%"/></td>
|
|
128
|
+
<td><img src="https://hyperweave.app/v1/chart/stars/eli64s/readme-ai/chrome-horizon.static" alt="star chart" width="100%"/></td>
|
|
129
129
|
</tr>
|
|
130
130
|
<tr>
|
|
131
131
|
<td rowspan="3" align="center"><strong>Marquee</strong></td>
|
|
@@ -88,12 +88,12 @@ Why genome and not theme? Because brand isn't a design problem, it's an infrastr
|
|
|
88
88
|
</tr>
|
|
89
89
|
<tr>
|
|
90
90
|
<td rowspan="2" align="center"><strong>Profile cards</strong></td>
|
|
91
|
-
<td><img src="
|
|
92
|
-
<td><img src="
|
|
91
|
+
<td><img src="https://hyperweave.app/v1/stats/eli64s/brutalist-emerald.static" alt="stats" width="100%"/></td>
|
|
92
|
+
<td><img src="https://hyperweave.app/v1/stats/eli64s/chrome-horizon.static" alt="stats" width="100%"/></td>
|
|
93
93
|
</tr>
|
|
94
94
|
<tr>
|
|
95
|
-
<td><img src="
|
|
96
|
-
<td><img src="
|
|
95
|
+
<td><img src="https://hyperweave.app/v1/chart/stars/eli64s/readme-ai/brutalist-emerald.static" alt="star chart" width="100%"/></td>
|
|
96
|
+
<td><img src="https://hyperweave.app/v1/chart/stars/eli64s/readme-ai/chrome-horizon.static" alt="star chart" width="100%"/></td>
|
|
97
97
|
</tr>
|
|
98
98
|
<tr>
|
|
99
99
|
<td rowspan="3" align="center"><strong>Marquee</strong></td>
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Extract curated glyphs from Simple Icons and output data/glyphs.json.
|
|
3
|
+
|
|
4
|
+
Build-time only. Requires: npm install simple-icons (temp dev dependency).
|
|
5
|
+
|
|
6
|
+
Usage:
|
|
7
|
+
npm install simple-icons # one-time
|
|
8
|
+
python scripts/extract_glyphs.py
|
|
9
|
+
|
|
10
|
+
Output:
|
|
11
|
+
src/hyperweave/data/glyphs.json
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from __future__ import annotations
|
|
15
|
+
|
|
16
|
+
import json
|
|
17
|
+
import subprocess
|
|
18
|
+
import sys
|
|
19
|
+
from pathlib import Path
|
|
20
|
+
|
|
21
|
+
# Curated icon set per PRD SS10
|
|
22
|
+
# Keys = Simple Icons export names (camelCase with 'si' prefix)
|
|
23
|
+
# Values = (our slug, category)
|
|
24
|
+
CURATED_ICONS: dict[str, tuple[str, str]] = {
|
|
25
|
+
# Social (LinkedIn/Slack removed from SI v16 — trademark)
|
|
26
|
+
"siGithub": ("github", "social"),
|
|
27
|
+
"siX": ("x", "social"),
|
|
28
|
+
"siDiscord": ("discord", "social"),
|
|
29
|
+
"siYoutube": ("youtube", "social"),
|
|
30
|
+
"siSpotify": ("spotify", "social"),
|
|
31
|
+
"siInstagram": ("instagram", "social"),
|
|
32
|
+
"siTiktok": ("tiktok", "social"),
|
|
33
|
+
"siReddit": ("reddit", "social"),
|
|
34
|
+
"siMastodon": ("mastodon", "social"),
|
|
35
|
+
"siBluesky": ("bluesky", "social"),
|
|
36
|
+
# Dev
|
|
37
|
+
"siPython": ("python", "dev"),
|
|
38
|
+
"siNpm": ("npm", "dev"),
|
|
39
|
+
"siDocker": ("docker", "dev"),
|
|
40
|
+
"siRust": ("rust", "dev"),
|
|
41
|
+
"siGo": ("go", "dev"),
|
|
42
|
+
"siTypescript": ("typescript", "dev"),
|
|
43
|
+
"siJavascript": ("javascript", "dev"),
|
|
44
|
+
"siReact": ("react", "dev"),
|
|
45
|
+
"siVuedotjs": ("vue", "dev"),
|
|
46
|
+
"siSvelte": ("svelte", "dev"),
|
|
47
|
+
"siNextdotjs": ("nextjs", "dev"),
|
|
48
|
+
"siNodedotjs": ("nodejs", "dev"),
|
|
49
|
+
"siDeno": ("deno", "dev"),
|
|
50
|
+
"siSwift": ("swift", "dev"),
|
|
51
|
+
"siKotlin": ("kotlin", "dev"),
|
|
52
|
+
"siCplusplus": ("cplusplus", "dev"),
|
|
53
|
+
"siRuby": ("ruby", "dev"),
|
|
54
|
+
"siPhp": ("php", "dev"),
|
|
55
|
+
"siElixir": ("elixir", "dev"),
|
|
56
|
+
"siZig": ("zig", "dev"),
|
|
57
|
+
# Platforms (AWS/Azure/Heroku removed from SI v16 — trademark)
|
|
58
|
+
"siPypi": ("pypi", "platforms"),
|
|
59
|
+
"siHuggingface": ("huggingface", "platforms"),
|
|
60
|
+
"siArxiv": ("arxiv", "platforms"),
|
|
61
|
+
"siKaggle": ("kaggle", "platforms"),
|
|
62
|
+
"siVercel": ("vercel", "platforms"),
|
|
63
|
+
"siNetlify": ("netlify", "platforms"),
|
|
64
|
+
"siCloudflare": ("cloudflare", "platforms"),
|
|
65
|
+
"siGooglecloud": ("googlecloud", "platforms"),
|
|
66
|
+
"siDigitalocean": ("digitalocean", "platforms"),
|
|
67
|
+
"siSupabase": ("supabase", "platforms"),
|
|
68
|
+
"siFirebase": ("firebase", "platforms"),
|
|
69
|
+
"siGithubactions": ("githubactions", "platforms"),
|
|
70
|
+
"siGitlab": ("gitlab", "platforms"),
|
|
71
|
+
"siBitbucket": ("bitbucket", "platforms"),
|
|
72
|
+
# Tools (VS Code removed from SI v16 — trademark)
|
|
73
|
+
"siNeovim": ("neovim", "tools"),
|
|
74
|
+
"siFigma": ("figma", "tools"),
|
|
75
|
+
"siNotion": ("notion", "tools"),
|
|
76
|
+
"siObsidian": ("obsidian", "tools"),
|
|
77
|
+
"siLinear": ("linear", "tools"),
|
|
78
|
+
"siPostman": ("postman", "tools"),
|
|
79
|
+
"siGrafana": ("grafana", "tools"),
|
|
80
|
+
"siPrometheus": ("prometheus", "tools"),
|
|
81
|
+
"siJetbrains": ("jetbrains", "tools"),
|
|
82
|
+
"siSublimetext": ("sublimetext", "tools"),
|
|
83
|
+
"siStorybook": ("storybook", "tools"),
|
|
84
|
+
"siEslint": ("eslint", "tools"),
|
|
85
|
+
"siPrettier": ("prettier", "tools"),
|
|
86
|
+
# AI / ML (OpenAI removed from SI v16 — trademark)
|
|
87
|
+
"siAnthropic": ("anthropic", "ai"),
|
|
88
|
+
"siTensorflow": ("tensorflow", "ai"),
|
|
89
|
+
"siPytorch": ("pytorch", "ai"),
|
|
90
|
+
"siJupyter": ("jupyter", "ai"),
|
|
91
|
+
"siApachespark": ("spark", "ai"),
|
|
92
|
+
"siGithubcopilot": ("githubcopilot", "ai"),
|
|
93
|
+
# Infrastructure (AWS/Azure/Heroku removed from SI v16 — trademark)
|
|
94
|
+
"siKubernetes": ("kubernetes", "infra"),
|
|
95
|
+
"siTerraform": ("terraform", "infra"),
|
|
96
|
+
"siNginx": ("nginx", "infra"),
|
|
97
|
+
"siRedis": ("redis", "infra"),
|
|
98
|
+
"siPostgresql": ("postgresql", "infra"),
|
|
99
|
+
"siMongodb": ("mongodb", "infra"),
|
|
100
|
+
"siElasticsearch": ("elasticsearch", "infra"),
|
|
101
|
+
"siApachekafka": ("kafka", "infra"),
|
|
102
|
+
"siRabbitmq": ("rabbitmq", "infra"),
|
|
103
|
+
"siGnubash": ("bash", "infra"),
|
|
104
|
+
"siGit": ("git", "infra"),
|
|
105
|
+
# Web / Frameworks
|
|
106
|
+
"siTailwindcss": ("tailwindcss", "dev"),
|
|
107
|
+
"siVite": ("vite", "dev"),
|
|
108
|
+
"siBun": ("bun", "dev"),
|
|
109
|
+
"siPnpm": ("pnpm", "dev"),
|
|
110
|
+
"siAstro": ("astro", "dev"),
|
|
111
|
+
"siRemix": ("remix", "dev"),
|
|
112
|
+
"siFlutter": ("flutter", "dev"),
|
|
113
|
+
"siDart": ("dart", "dev"),
|
|
114
|
+
"siHtml5": ("html5", "dev"),
|
|
115
|
+
"siSass": ("sass", "dev"),
|
|
116
|
+
"siMarkdown": ("markdown", "dev"),
|
|
117
|
+
# Mobile / OS
|
|
118
|
+
"siAndroid": ("android", "platforms"),
|
|
119
|
+
"siApple": ("apple", "platforms"),
|
|
120
|
+
"siLinux": ("linux", "platforms"),
|
|
121
|
+
# Commerce / Services
|
|
122
|
+
"siStripe": ("stripe", "platforms"),
|
|
123
|
+
"siShopify": ("shopify", "platforms"),
|
|
124
|
+
"siAuth0": ("auth0", "platforms"),
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
# Geometric shapes (hand-authored, not from Simple Icons)
|
|
128
|
+
# Defined in 640x640 viewBox per PRD SS10
|
|
129
|
+
GEOMETRIC_SHAPES: dict[str, dict[str, str | None]] = {
|
|
130
|
+
"triangle": {
|
|
131
|
+
"path": "M320 53.3 586.6 533.3H53.4Z",
|
|
132
|
+
"viewBox": "0 0 640 640",
|
|
133
|
+
"brand_color": None,
|
|
134
|
+
"category": "geometric",
|
|
135
|
+
},
|
|
136
|
+
"diamond": {
|
|
137
|
+
"path": "M320 53.3 506.7 320 320 586.7 133.3 320Z",
|
|
138
|
+
"viewBox": "0 0 640 640",
|
|
139
|
+
"brand_color": None,
|
|
140
|
+
"category": "geometric",
|
|
141
|
+
},
|
|
142
|
+
"hexagon": {
|
|
143
|
+
"path": "M320 53.3 566.4 186.7V453.3L320 586.7 73.6 453.3V186.7Z",
|
|
144
|
+
"viewBox": "0 0 640 640",
|
|
145
|
+
"brand_color": None,
|
|
146
|
+
"category": "geometric",
|
|
147
|
+
},
|
|
148
|
+
"shield": {
|
|
149
|
+
"path": "M320 53.3 533.3 186.7V373.3C533.3 480 320 586.7 320 586.7S106.7 480 106.7 373.3V186.7Z",
|
|
150
|
+
"viewBox": "0 0 640 640",
|
|
151
|
+
"brand_color": None,
|
|
152
|
+
"category": "geometric",
|
|
153
|
+
},
|
|
154
|
+
"circle": {
|
|
155
|
+
"path": "M320 106.7A213.3 213.3 0 11106.7 320 213.3 213.3 0 01320 106.7Z",
|
|
156
|
+
"viewBox": "0 0 640 640",
|
|
157
|
+
"brand_color": None,
|
|
158
|
+
"category": "geometric",
|
|
159
|
+
},
|
|
160
|
+
"star": {
|
|
161
|
+
"path": (
|
|
162
|
+
"M320 53.3 396.4 237.8 586.7 253.3 440 381.5 483.3 566.7"
|
|
163
|
+
" 320 471.1 156.7 566.7 200 381.5 53.3 253.3 243.6 237.8Z"
|
|
164
|
+
),
|
|
165
|
+
"viewBox": "0 0 640 640",
|
|
166
|
+
"brand_color": None,
|
|
167
|
+
"category": "geometric",
|
|
168
|
+
},
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
def extract_from_npm() -> dict[str, dict[str, object]]:
|
|
173
|
+
"""Extract icons from the simple-icons npm package via Node.js subprocess.
|
|
174
|
+
|
|
175
|
+
Uses `node -e` to require simple-icons, extract all curated paths,
|
|
176
|
+
and return JSON to stdout. This avoids parsing JS manually.
|
|
177
|
+
"""
|
|
178
|
+
# Build the Node.js extraction script
|
|
179
|
+
icon_keys = list(CURATED_ICONS.keys())
|
|
180
|
+
icon_keys_json = json.dumps(icon_keys)
|
|
181
|
+
slugs_json = json.dumps({k: v[0] for k, v in CURATED_ICONS.items()})
|
|
182
|
+
cats_json = json.dumps({k: v[1] for k, v in CURATED_ICONS.items()})
|
|
183
|
+
|
|
184
|
+
node_script = f"""
|
|
185
|
+
const si = require('simple-icons');
|
|
186
|
+
const keys = {icon_keys_json};
|
|
187
|
+
const slugs = {slugs_json};
|
|
188
|
+
const cats = {cats_json};
|
|
189
|
+
const result = {{}};
|
|
190
|
+
for (const key of keys) {{
|
|
191
|
+
const icon = si[key];
|
|
192
|
+
if (!icon) {{
|
|
193
|
+
process.stderr.write('WARN: ' + key + ' not found in simple-icons\\n');
|
|
194
|
+
continue;
|
|
195
|
+
}}
|
|
196
|
+
result[slugs[key]] = {{
|
|
197
|
+
path: icon.path,
|
|
198
|
+
viewBox: '0 0 24 24',
|
|
199
|
+
brand_color: '#' + icon.hex,
|
|
200
|
+
category: cats[key],
|
|
201
|
+
}};
|
|
202
|
+
}}
|
|
203
|
+
process.stdout.write(JSON.stringify(result));
|
|
204
|
+
"""
|
|
205
|
+
|
|
206
|
+
try:
|
|
207
|
+
proc = subprocess.run(
|
|
208
|
+
["node", "-e", node_script],
|
|
209
|
+
capture_output=True,
|
|
210
|
+
text=True,
|
|
211
|
+
timeout=30,
|
|
212
|
+
)
|
|
213
|
+
if proc.returncode != 0:
|
|
214
|
+
print(f"Node.js extraction failed: {proc.stderr}", file=sys.stderr)
|
|
215
|
+
return {}
|
|
216
|
+
if proc.stderr:
|
|
217
|
+
# Print warnings (missing icons)
|
|
218
|
+
for line in proc.stderr.strip().splitlines():
|
|
219
|
+
print(line, file=sys.stderr)
|
|
220
|
+
|
|
221
|
+
return json.loads(proc.stdout)
|
|
222
|
+
|
|
223
|
+
except FileNotFoundError:
|
|
224
|
+
print("Node.js not found. Install Node.js to extract Simple Icons.", file=sys.stderr)
|
|
225
|
+
return {}
|
|
226
|
+
except subprocess.TimeoutExpired:
|
|
227
|
+
print("Node.js extraction timed out.", file=sys.stderr)
|
|
228
|
+
return {}
|
|
229
|
+
except json.JSONDecodeError as e:
|
|
230
|
+
print(f"Invalid JSON from Node.js: {e}", file=sys.stderr)
|
|
231
|
+
return {}
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
def main() -> None:
|
|
235
|
+
"""Run glyph extraction and write data/glyphs.json."""
|
|
236
|
+
output_path = Path(__file__).resolve().parent.parent / "src" / "hyperweave" / "data" / "glyphs.json"
|
|
237
|
+
|
|
238
|
+
# Extract from npm (via Node subprocess)
|
|
239
|
+
glyphs = extract_from_npm()
|
|
240
|
+
|
|
241
|
+
if not glyphs:
|
|
242
|
+
print("No SI icons extracted. Check that simple-icons is installed.", file=sys.stderr)
|
|
243
|
+
print("Run: npm install simple-icons", file=sys.stderr)
|
|
244
|
+
sys.exit(1)
|
|
245
|
+
|
|
246
|
+
# Add geometric shapes (always)
|
|
247
|
+
for glyph_id, definition in GEOMETRIC_SHAPES.items():
|
|
248
|
+
glyphs[glyph_id] = definition # type: ignore[assignment]
|
|
249
|
+
|
|
250
|
+
# Sort by category then name for readability
|
|
251
|
+
sorted_glyphs = dict(
|
|
252
|
+
sorted(
|
|
253
|
+
glyphs.items(),
|
|
254
|
+
key=lambda x: (x[1].get("category", "zzz"), x[0]),
|
|
255
|
+
)
|
|
256
|
+
)
|
|
257
|
+
|
|
258
|
+
# Write output
|
|
259
|
+
output_path.parent.mkdir(parents=True, exist_ok=True)
|
|
260
|
+
with output_path.open("w", encoding="utf-8") as f:
|
|
261
|
+
json.dump(sorted_glyphs, f, indent=2)
|
|
262
|
+
f.write("\n")
|
|
263
|
+
|
|
264
|
+
# Summary
|
|
265
|
+
by_cat: dict[str, int] = {}
|
|
266
|
+
for v in sorted_glyphs.values():
|
|
267
|
+
cat = v.get("category", "unknown")
|
|
268
|
+
by_cat[cat] = by_cat.get(cat, 0) + 1
|
|
269
|
+
|
|
270
|
+
print(f"Wrote {len(sorted_glyphs)} glyphs to {output_path}")
|
|
271
|
+
for cat, count in sorted(by_cat.items()):
|
|
272
|
+
print(f" {cat}: {count}")
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
if __name__ == "__main__":
|
|
276
|
+
main()
|