@hraness/design-kit 0.31.1 → 0.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/AGENT_SETUP.md +89 -0
  2. package/ARTICLE_COPY.md +1 -1
  3. package/MARKETING_COPY.md +13 -1
  4. package/README.md +13 -4
  5. package/dist/{chunk-7b1586eb.js → chunk-4d79eskk.js} +62 -33
  6. package/dist/{chunk-44djxk16.js → chunk-95p0j72v.js} +643 -612
  7. package/dist/{chunk-eh71jz57.js → chunk-vst6p4wd.js} +96 -9
  8. package/dist/index.js +6 -2
  9. package/dist/mockups/client.js +19 -18
  10. package/dist/provider-marks.js +1 -1
  11. package/dist/react/index.js +1615 -649
  12. package/dist/react/server.js +4 -2
  13. package/dist/stylex-manifest.json +1 -1
  14. package/dist/stylex.css +180 -4
  15. package/package.json +7 -3
  16. package/portfolio-inventory.json +1 -1
  17. package/src/agent-setup.ts +47 -0
  18. package/src/index.ts +1 -0
  19. package/src/mockups/client.tsx +26 -22
  20. package/src/mockups.css +44 -13
  21. package/src/provider-marks.generated.ts +16 -0
  22. package/src/provider-marks.ts +14 -15
  23. package/src/react/agent-setup-prompt.stylex.ts +196 -0
  24. package/src/react/agent-setup-prompt.tsx +413 -0
  25. package/src/react/article.tsx +12 -20
  26. package/src/react/design-gallery.tsx +28 -1
  27. package/src/react/index.ts +1 -0
  28. package/src/react/launch-beats.tsx +7 -4
  29. package/src/react/product-marketing.stylex.ts +8 -0
  30. package/src/react/product-marketing.tsx +37 -10
  31. package/src/react/provider-mark.stylex.ts +17 -10
  32. package/src/react/provider-mark.tsx +6 -16
  33. package/vendor/provider-marks/MEM0-LICENSE +201 -0
  34. package/vendor/provider-marks/SUPERMEMORY-LICENSE +21 -0
  35. package/vendor/provider-marks/UPSTREAM.md +12 -1
  36. package/vendor/provider-marks/lobehub/githubcopilot.svg +1 -0
  37. package/vendor/provider-marks/lobehub/obsidian-color.svg +1 -0
  38. package/vendor/provider-marks/lobehub/obsidian.svg +1 -0
  39. package/vendor/provider-marks/mem0-art.svg +1 -0
  40. package/vendor/provider-marks/mem0-glyph.svg +1 -0
  41. package/vendor/provider-marks/mem0.svg +1 -0
  42. package/vendor/provider-marks/supermemory.svg +1 -0
package/AGENT_SETUP.md ADDED
@@ -0,0 +1,89 @@
1
+ # Agent setup
2
+
3
+ `AgentSetupPrompt` and `AgentCommandTabs` are client compositions from
4
+ `@hraness/design-kit/react`. Load `components.css` or `styles.css` for their
5
+ compiled presentation. Product repositories own the prompt, commands,
6
+ configuration paths, supported machines, and install versions.
7
+
8
+ ```tsx
9
+ import { agentSetupTargets } from "@hraness/design-kit";
10
+ import { AgentCommandTabs, AgentSetupPrompt } from "@hraness/design-kit/react";
11
+
12
+ <AgentSetupPrompt
13
+ label="Set up Relay with your agent"
14
+ prompt={setupPrompt}
15
+ targets={agentSetupTargets(setupPrompt)}
16
+ />
17
+ <AgentCommandTabs commands={[
18
+ { id: "terminal", label: "Codex", mark: "codex", command: "relay init" },
19
+ { id: "config", label: "Cursor", mark: "cursor", command: configJson, filename: ".cursor/mcp.json" },
20
+ ]} />
21
+ ```
22
+
23
+ The prompt preview clips long text with a bottom fade. Copy sits at the
24
+ bottom right and copies the complete source. A native disclosure reveals
25
+ the complete prompt without JavaScript. Provider actions move beside the
26
+ preview when the containing block is wide enough; narrower blocks stack.
27
+ The optional `onCopied` callback runs after a successful copy. Its errors
28
+ cannot change clipboard feedback.
29
+
30
+ Command tabs use provider marks, arrow-key navigation, and a copy action at
31
+ the top right of each panel. `filename` identifies file content rather than
32
+ a shell command. All panels remain available without JavaScript. Copy
33
+ failures reveal and select the full source for keyboard copying.
34
+
35
+ ## Destinations
36
+
37
+ `agentSetupTargets(prompt)` is framework-neutral. Its results contain `id`,
38
+ `label`, `mark`, `href`, `mode`, and `host`. Filter on `host === "local"`
39
+ when a product needs the user's local computer. A cloud computer's durable
40
+ storage still needs a product-specific workflow; a temporary coding session
41
+ does not guarantee permanent memory. Codex's desktop deep link is local;
42
+ its web entry fallback is marked cloud. Targets do not submit prompts.
43
+
44
+ Public documentation checked on September 30, 2026:
45
+
46
+ | Agent | Action | Source |
47
+ | --- | --- | --- |
48
+ | OpenAI Dot | Copy and open ChatGPT's entry page. A Dot-specific composer URL has not been verified. | [ChatGPT](https://chatgpt.com/) |
49
+ | Grok Bot | Copy and open its dashboard. Uses a persistent cloud computer and a Cursor account. | [Grok Bot](https://cursor.com/docs/grok-bot), [Getting started](https://cursor.com/docs/grok-bot/get-started) |
50
+ | Muse | Copy and open the official launch entry. Uses an isolated Linux computer. | [Muse](https://ai.meta.com/muse/) |
51
+ | Cursor | Fill the prompt composer through `https://cursor.com/link/prompt?text=…`. | [Deep links](https://cursor.com/docs/reference/deeplinks) |
52
+ | Codex | Fill a local desktop composer through `codex://new?prompt=…`. | [Desktop deep links](https://learn.chatgpt.com/docs/reference/commands#deep-links) |
53
+ | Devin | Copy and open the app. The product owns session and repository persistence requirements. | [Devin documentation](https://docs.devin.ai/), [App](https://app.devin.ai/) |
54
+
55
+ Composer links carry the complete encoded prompt. If a URL exceeds 10,000
56
+ characters, the helper returns a normal entry link with `copy-and-open`.
57
+ This avoids truncating a prompt at Cursor's documented URL limit.
58
+
59
+ For products that keep prompts out of URLs, call
60
+ `agentSetupTargets(prompt, { prefill: false })`. Every destination then uses
61
+ its documented entry page with `copy-and-open`, including Cursor and Codex.
62
+
63
+ Callers may supply other valid HTTP, HTTPS, or Codex destinations and
64
+ provider identities directly. Use `mode: "copy-and-open"` for products
65
+ without a documented prompt deep link. Enhanced handoffs open the provider
66
+ after the complete current prompt has copied successfully. A failed copy
67
+ keeps the full prompt visible and stays on the setup page. Destination links
68
+ retain their native browser and no-JavaScript behavior.
69
+
70
+ ## Product requirements
71
+
72
+ Choose the agent list by installation support and the user's machine.
73
+ Personal agents may have Linux computers but cannot configure a Mac-only
74
+ product on the user's Mac. Skills can use temporary files while doing work;
75
+ only products that retain memory or local state require durable storage.
76
+ Check each product's actual installer and skill requirements.
77
+
78
+ Stack Overflow's [April 2026 pulse survey](https://stackoverflow.blog/2026/05/27/agents-on-a-leash-agentic-ai-remains-mostly-monitored-at-work/)
79
+ surveyed 1,100 developers and working professionals. Its code-assistant
80
+ usage figures were GitHub Copilot 61%, Claude Code 51%, Codex 20%, and
81
+ Cursor 20%. These overlapping respondent shares support covering those
82
+ clients; they are not exclusive market shares or a product quality ranking.
83
+ Personal-agent destinations above follow the caller's audience and machine
84
+ requirements rather than that survey's order.
85
+
86
+ Use command tabs for concrete supported commands or configurations. Check
87
+ the current client documentation, including [Gemini CLI](https://geminicli.com/docs/tools/mcp-server/)
88
+ and [VS Code MCP](https://code.visualstudio.com/docs/agent-customization/mcp-servers).
89
+ Do not invent market-share rankings or handoff URLs from general chat URLs.
package/ARTICLE_COPY.md CHANGED
@@ -54,7 +54,7 @@ A beat is one short section that makes one claim and shows one visual. Write 7 t
54
54
  - The hero holds the title, the registry `meta` as the dek, the status line from release data, and the film when there is one.
55
55
  - Each beat has a headline of 70 characters or fewer, in sentence case with no period, and a post of 250 characters or fewer that works on its own as one social post.
56
56
  - Social posts carry claims only. The `limits` beat, and any caveat, known gap, negative finding, audit or review line, or legally required disclaimer, stay in the launch post, the docs, and the site, and never reach a social post, the Show HN facts, or the Product Hunt fields. Every social post must still be true on its own: when a caveat is what keeps a beat's claim accurate, give the beat a `socialPost` that states a narrower claim accurately without it, or mark the beat `social: false`.
57
- - Each beat has exactly one visual, and no two beats share one. Alt text is 125 characters or fewer. A mockup is labelled as an illustration in its alt text and caption.
57
+ - Each beat has exactly one visual, and no two beats share one. Alt text is 125 characters or fewer and describes the visual accurately. Visible captions are optional and add context; never repeat alt text or require a generic illustration disclaimer.
58
58
  - Render beats with `LaunchBeats` from `@hraness/design-kit/react`. Each beat gets a `#beat-<id>` anchor.
59
59
  - After the beats: "Go deeper" links named for the reader's next task, then the social kit, then sources and the drafting and review note.
60
60
  - Technical depth, comparisons with other products, and tables go in companion posts or `/compare` pages. Link them from the beat with `detailHref`.
package/MARKETING_COPY.md CHANGED
@@ -16,7 +16,7 @@ Limits are maximums. Count characters in the rendered text.
16
16
  | `boundary` | Price or license, requirements, and release state, once and plainly: "Free and open source · Needs Rust 1.85 or newer · Latest release: v0.2.1". | 110 characters | Governance terms such as "verified release", "admitted", "qualified", or "source pilot". |
17
17
  | `notice` | Status only when it changes what the reader can do today. | One sentence | A second copy of the boundary, or caveats a reader cannot act on. |
18
18
  | `MarketingProofFrame` | Output a reader can reproduce with the current release. Put the capture date in `credit` and label a historical record as historical. Set `chrome` to `window`, `browser` (with the page's `url`), or `terminal` to match what was captured. | | Commands or flags the current release rejects; "Live qualification" as a label; a browser address the product does not serve. |
19
- | Mockups from `@hraness/design-kit/mockups` | An illustration of one state of the product, with a `describe` sentence that starts "Illustration of" and a caption that says it is an illustration. Invented names, handles, and addresses on reserved example domains. | `describe`: one sentence | Real people's names or handles, headings inside the picture, and a mockup presented as a screenshot. |
19
+ | Mockups from `@hraness/design-kit/mockups` | One useful product state, with an accurate accessible `describe` sentence. Add a caption only when it contributes information the surrounding copy and picture do not already give. Use invented names, handles, and addresses on reserved example domains. | `describe`: one sentence | Generic "Illustration" or "Names are made up" captions, repeated descriptions, real people's names or handles, and claims that a mockup is a captured screenshot. |
20
20
  | `MarketingDataTable` `caption` | The measurement's name: what was run, on what. | 70 characters | A verdict disguised as a caption. |
21
21
  | `MarketingDataTable` `meta`, `note` | The date, source, or sample size in `meta`; the caveat that bounds the claim in `note`. | `note`: 160 characters | Data that outlives its caveat, or a table presented as a guarantee. |
22
22
  | `MarketingDataTable` columns | Short unit-bearing labels. Numbers go in `numeric` columns; the first column names each row. | | Wide dumps that belong in documentation. |
@@ -29,6 +29,18 @@ Limits are maximums. Count characters in the rendered text.
29
29
  | `MarketingQuestionList` | Questions readers actually ask. The first sentence of each answer answers it. Generate any FAQ JSON-LD from the same array. | Eight questions | Questions written to deliver a talking point. |
30
30
  | `MarketingCallToAction` | The next concrete step. | Section heading limit | Decorative closers ("Give every job the same room to run in."). |
31
31
 
32
+ ## Useful context
33
+
34
+ Every visible line should help someone understand the product, make a decision, or take the next step. Omit explanatory subtitles when the control label and result already explain the interaction. Captions and hints are optional; an empty slot needs no replacement sentence. Accessible descriptions stay accurate without becoming visible disclaimers.
35
+
36
+ Show the result of a feature before its implementation. A publishing section shows the published page beside a short command. A setup section offers one copyable prompt, compact provider actions, and one command selector rather than repeated terminal cards and explanations. Keep detailed configuration in the linked guide. Actions use short labels such as "Publish your notes"; comparisons use recognizable marks and concise destinations.
37
+
38
+ ## Benchmarks
39
+
40
+ Keep a benchmark only when its result makes sense without knowing the test harness. Name the task, metric and unit, baseline, product version, and meaningful sample. Explain what improves in the reader's words. A tiny fixture or synthetic correctness check is engineering evidence, not a product advantage; remove its numbers from marketing rather than dressing them up as a benchmark.
41
+
42
+ Put measurement dates, sources, sample details and necessary methodological limits in a compact note beside the result. Keep the result visually primary. A qualification that changes the meaning of the claim stays close to it and remains readable; fine print is a quieter typographic role, never low-contrast or hidden text. Detailed methodology and reproduction commands belong on the evidence page.
43
+
32
44
  ## Plain-string props
33
45
 
34
46
  Most text props (`summary`, `detail`, `caption`, `boundary`, `role`) are plain strings and render as text. Backticks show up literally on the page. Name a command in prose there, or put code in a slot that accepts elements (`example`, `children`, `answer`).
package/README.md CHANGED
@@ -11,7 +11,7 @@ Pin a GitHub release tag:
11
11
  ```json
12
12
  {
13
13
  "dependencies": {
14
- "@hraness/design-kit": "github:hraness/design-kit#v0.31.1",
14
+ "@hraness/design-kit": "github:hraness/design-kit#v0.32.0",
15
15
  "@hraness/ui": "github:hraness/ui#v0.5.17"
16
16
  }
17
17
  }
@@ -23,6 +23,12 @@ Pin a GitHub release tag:
23
23
  installation so the framework-neutral root and syntax highlighter can be used
24
24
  on their own. React 18 or 19 and React DOM 18 or 19 are also peer dependencies.
25
25
 
26
+ ### Clearer marketing controls and agent setup
27
+
28
+ Version 0.32.0 pairs filled mockup controls with their semantic foreground, so selected labels remain readable across palettes, light and dark modes, nested themes, and forced colors. Solid provider marks choose foregrounds using measured contrast, including midtone brand colors. Showcase hints and figure captions are optional; figures keep accessible labels without adding a visible “Illustration” prefix or repeating alt text.
29
+
30
+ New client compositions `AgentSetupPrompt` and `AgentCommandTabs` share prompt previews, complete-source copying, provider marks, responsive actions, and keyboard navigation. The framework-neutral `agentSetupTargets(prompt)` helper centralizes documented computer-agent destinations. `MarketingSection.headingContent` places commands and actions beside a result preview, and `MarketingActionLink` uses the existing shared action recipe. The provider registry adds Obsidian, Supermemory, Mem0, and GitHub Copilot. `ProviderMark` gains `tone="inherit"` for glyphs that follow a control’s foreground. See [AGENT_SETUP.md](AGENT_SETUP.md) for usage and verified handoffs.
31
+
26
32
  ### Provider artwork notices
27
33
 
28
34
  Version 0.31.1 includes Charm's complete license and copyright notices for the Crush HeartBit artwork in `vendor/provider-marks/CRUSH-LICENSE.md`. The package also retains the LobeHub MIT notice and identifies the exact Crush source commit.
@@ -94,7 +100,10 @@ import { ProviderMark, ProviderMarkChip } from "@hraness/design-kit/react";
94
100
  ```
95
101
 
96
102
  `ProviderMark` renders an accent-tinted tile by default, a saturated brand
97
- tile with `tone="solid"`, or the bare glyph with `tone="plain"`. Identity
103
+ tile with `tone="solid"`, or the bare glyph with `tone="plain"`. Use
104
+ `tone="inherit"` inside controls to follow their foreground. Solid marks
105
+ measure their ink at 4.5:1 or better; custom solid accents must use an opaque
106
+ hex color with six digits. Identity
98
107
  artwork comes from vendored sources (`vendor/provider-marks/`, LobeHub
99
108
  icons 1.95.1 plus the Crush and Aider marks documented in its UPSTREAM.md);
100
109
  marks without published color art keep a retinted glyph, and unknown names
@@ -724,9 +733,9 @@ bun run browser:install
724
733
  bun run check
725
734
  ```
726
735
 
727
- The stable dependency pair for this release is `@hraness/ui` `v0.5.17` with `@hraness/design-kit` `v0.31.1`. Version 0.31.0 keeps the `limits` beat and beats marked `social: false` out of the social kit and adds `socialPost` for social wording that stands without a caveat. Version 0.30.3 refreshes the portfolio snapshot so related-product cards use each product's own spelling, such as GhostGet and TextButler. Version 0.30.2 keeps the narrow and stacked install-tab layout when another package compiles the same atoms into a later cascade layer. Version 0.30.1 keeps every PlatformInstall tab name whole in columns down to 200px by stacking each mark above its name, using a container query on the component. Version 0.30.0 adds `site-shell.css`, which keeps short-page footers at the viewport bottom. Version 0.29.3 preserves readable selected install tabs in forced colors. Version 0.29.2 keeps all three PlatformInstall tabs visible at 320 to 360px and draws each platform mark once per component. Version 0.29.1 keeps marketing action labels readable in forced colors. Version 0.29.0 adds `PlatformInstall`, one install block for every CLI site: a tab per operating system with its mark, the install command with a Copy button that announces the result, optional alternative commands such as npm or Homebrew, and a note for platforms without a native build. After hydration it selects the visitor's operating system; without JavaScript every command shows. It also adds `PlatformIcon` (Apple, Tux, and Windows marks in `currentColor`) and a `PlatformBadges` "Runs on" row, plus `platformLabel`, `platformMark`, `detectPlatform`, and `matchDetectedPlatform` at the package root. See [Install commands for each platform](#install-commands-for-each-platform). No existing export changes. Version 0.28.0 adds the launch kit. `@hraness/design-kit/mockups` draws labelled illustrations of chat, feeds, inboxes, articles, terminals, browsers, desktop windows, menu bars, and phones in server-safe plain React with no StyleX or React Aria, styled by `@hraness/design-kit/mockups.css`; each renders as one image with a text description and no headings. `@hraness/design-kit/mockups/client` adds `ModeShowcase`, `FitToWidth`, and `StepThrough`. `@hraness/design-kit/launch`, with no React, holds the `LaunchBeat`, `LaunchFacts`, and `SocialKit` shapes with `resolveLaunchBeats`, `buildSocialKit`, and `assertLaunchKit`. `@hraness/design-kit/testing` gives product repositories `blogConformance`, `renderMatrix`, `assertNoHeadings`, `assertRoleImgWithLabel`, and `assertFakeHandles`. The React entries add `ArticleFigure`, `ArticleVideo` with `articleVideoJsonLd`, `ArticleTable`, `ArticleBarChart`, `ComparisonTable`, `LaunchBeats`, and `SocialKitPanel`, and `MarketingProofFrame` takes `chrome` (`window`, `browser` with `url`, or `terminal`). [ARTICLE_COPY.md](ARTICLE_COPY.md) now writes "Introducing a product" as beats; the admission rules are unchanged. No existing export changes. Version 0.27.0 adds explicit Rust, TOML, YAML, Lean, and TLA+ code highlighting, including nested comments and multiline strings. The existing highlighter API and stylesheet remain the shared entry points; unsupported languages still render as escaped text. Version 0.26.0 adds `MarketingNotice` and the raw `.hraness-marketing-notice` class: one status or alert line (`info`, `success`, or `error`) that sits on the content edge of the page column instead of spanning the window. Errors are announced as alerts and other tones as status. Signed-in account pages that render inside `MarketingSiteHeader` should compose `MarketingMain`, `MarketingNotice`, `MarketingStatStrip`, and `MarketingSection` so every block shares the header's measure and gutter, rather than hand-rolled full-bleed banners and nested cards. Version 0.25.0 moves bordered foil surfaces off the spectrum: `.hraness-foil` and `[data-emphasis="primary"]` actions keep their flat surface fill under one theme-aware monochrome edge — black on light, white on dark, overridable through the new `--hraness-foil-edge` token — while the metallic spectrum stays on wordmarks and marks. The foil material contract advances to version 3: `surfaceImage` and `surfaceBackgroundClip` are replaced by `surfaceFill`, `edge`, `edgeDark`, and `edgeColor`. Reinstall any vendored marketing snapshot from the 0.25.0 commit. Version 0.24.0 joins a marketing footer directly followed by the shared `@hraness/site-footer` network footer into one band: the product row's bottom space collapses to a compact gap and the network row's content follows the marketing measure and gutter through `--hraness-site-footer-measure`, so product links and the organization row share one column instead of reading as two stacked bars. Mount the network footer directly after `MarketingSiteFooter`; no prop or markup change is needed inside either landmark. Version 0.23.0 moves marketing pages to the Quiet direction described in [DESIGN.md](DESIGN.md). `ProductHero` no longer renders a backdrop, `HeroBackdrop` renders nothing, and `attachHeroLight` is an inert disposer; their names and props stay so existing code compiles and are marked deprecated. The `cells`, `weave`, `contour`, and `mesh` patterns render as `none`, and marketing fields and Lantern walls paint the flat palette background. Both marketing presets use Nebula Sans for display headings (editorial at weight 550); Instrument Serif stays vendored for explicit opt-in only. Hero eyebrows are plain labels, the accent band loses its grid, and cards and header chrome use hairline edges instead of lifted shadows. On phones `MarketingSiteHeader` keeps the brand, primary action, and appearance menu on one row and moves the links to a second row that scrolls sideways, with 44px targets. To migrate, delete `backdrop` artwork, `HeroBackdrop`, `attachHeroLight`, pattern values, and product CSS that recreated textures or serif headings, then reinstall any vendored marketing snapshot from the 0.23.0 commit. Version 0.22.2 restores the canonical roughday mark — the rain-cloud artwork pinned by the portfolio registry — after the mark slot briefly carried a stray illustration. Version 0.22.1 completes the icon library with the roughday inline chip family (65 admitted assets, no pending members). Version 0.22.0 adds the `./icons` surface: 62 vetted single-ink assets across ten sets — a shared illustration family, product illustration families, and the product marks, each admitted through a measured gate (single ink, bounded aspect, coverage, stroke, paths, bytes) and per-set family coherence, distributed as a typed registry module (`hranessIcons`, `hranessIcon`, `hranessIconMarkup`, `hranessIconsForSet`) and as canonical `./icons/<set>/<slug>.svg` files for image consumers. See [ICONS.md](ICONS.md). Version 0.21.1 accepts status-page `routes` straight from a sitemap: long titles are shortened for the "Did you mean" line and unusable entries are dropped instead of failing the render. Version 0.21.0 replaces the 404 and route-error pages with one shared status page: the product's main action, a "Did you mean" link to the closest known page, at most three next links with one-line descriptions, an optional line for AI agents, and a glyph drawn as dots that gather, move away from the pointer, and settle. `RouteNotFoundPage`, `RouteErrorPage`, and `GlobalErrorDocument` render it; `renderStatusPageHtml` and `attachStatusPage` bring the same page to static sites; `status-page.css` ships in `styles.css` and `compiler-foundation.css`. The default copy changes to "We can’t find that page". See [STATUS_PAGES.md](STATUS_PAGES.md). Version 0.20.0 gives `ThemeMenuButton` the Lantern material: under `data-hraness-material="lantern"` its trigger is raised at rest and inset while pressed, and its menu uses the material plane, lift and warm selection, with no new props. Sites can delete their local Lantern CSS for the appearance menu. It also adds `formatRelativeTime` at the package root and a hydration-safe `RelativeTime` component in `@hraness/design-kit/react`. Version 0.19.0 redraws related-product cards as the hraness.com project cards: each shows the product's mark, its name, and its one-line `role` at reading size, and no longer renders the `relationship` sentence (the prop stays accepted and is deprecated). `MarketingRelatedProduct` and the static `ArticleRelatedLink` take a `mark`, and every `@hraness/design-kit/portfolio` product and `relatedFor()` item now carries its portfolio mark as an inert `data:image/svg+xml` URL. Related-tier and proof headings move to the new `--hraness-marketing-h3-size` token, so the editorial display face never renders below 1.75rem. `typography.css` gains per-level heading tokens (`--hraness-type-h1-font` through `--hraness-type-h4-font`, the matching `-weight` tokens, `--hraness-type-subheading-font`, and `--hraness-type-display-min`). h3 and h4 in `.hraness-prose` and publication articles now use the text face, and the h2 floor rises to 1.75rem. Version 0.18.3 adds the Sponge and Wordcell runtime relations to Oh to the `@hraness/design-kit/portfolio` snapshot, so related-product cards on all three sites can link them. Version 0.18.2 refreshes the `@hraness/design-kit/portfolio` snapshot from the registry: the public ghostget.com entry, updated Gobstopper and xcb naming and descriptions, and the current sibling-product relations for related-product cards. Version 0.18.1 adds the Perplexity mark and a dependency-free `@hraness/design-kit/provider-marks` leaf entry (`providerMark`, `providerMarks`, `providerMarkFallback`, `providerMarkGlyphDataUri`, `providerMarkArtDataUri`, `providerMarkOnAccent`, `providerMarkMonogram`) so packages such as `@hraness/ui` can consume the registry without pulling the marketing surface. Version 0.18.0 adds the shared provider-mark registry: `providerMarks`, `providerMark()` alias resolution, `ProviderMark`/`ProviderMarkChip` accent-tinted tile components on both React entry points, vendored agent and vendor artwork from LobeHub icons 1.95.1 plus documented Crush and Aider marks, monogram fallbacks for uncovered names, and data-URI helpers for CSS-mask consumers. See `vendor/provider-marks/UPSTREAM.md` for asset provenance. Version 0.17.2 carries the canonical portfolio messaging record per product (`names`, `category`, `tagline`, `short`, `meta`, `medium`, `long`, and hero copy) in the `/portfolio` snapshot. Version 0.17.1 lets Next.js apps that compile dependencies with Babel build the article layer: its link check no longer uses a Unicode property escape that Babel cannot rewrite, and it rejects the same control characters and whitespace as before. Version 0.17.0 adds the article layer: server-safe `MarketingArticle`, byline, provenance, sources, callout, related-product, and index components, a matching static HTML renderer for sites without React, long-form article styles in `plain-publication.css`, and the `ArticleAdmission` rubric with `assertArticleAdmissions()`. It also adds `@hraness/design-kit/portfolio`, a snapshot of public product names, one-liners, links, and relations for related-product cards and "How X uses Y" posts. See [ARTICLE_COPY.md](ARTICLE_COPY.md). Version 0.16.4 keeps native appearance-menu labels usable inside keyboard-focusable page landmarks, including mouse and touch selection. Version 0.16.3 keeps decorative hero backgrounds hidden in forced colors and reduced transparency when other packages load their styles afterward. Version 0.16.2 preserves palette hues in translucent headers, material surfaces, and decorative highlights. Version 0.16.1 keeps plain reading pages and nested compiled surfaces in their selected palette, including system appearance without JavaScript. Version 0.16.0 adds a shared bounded hero light, product-owned backdrop slots, five Lantern patterns, palette-derived soft surfaces, and responsive typography across marketing and reading layouts. Static sites can use the palette bridge for system appearance before JavaScript. See [HERO_FIELDS.md](HERO_FIELDS.md), [LANTERN_MATERIAL.md](LANTERN_MATERIAL.md), and [MARKETING_PRESET.md](MARKETING_PRESET.md). Version 0.15.0 lets `MarketingRelated` present labeled tiers of sibling products: a `groups` collection renders each tier under its own heading with an accessible card-row label, while the flat `items` shape stays available for a single group. Version 0.14.0 adds `MarketingRelated`, a collection section that presents sibling products as linked cards, each framed by its relationship to the featured product. Version 0.13.0 publishes `--hraness-sticky-offset` from sticky marketing chrome, gives `MarketingMain` and the next sticky sibling a clearance contract, stretches marketing card rows to the tallest item with a reserved two-line meta block, and clips per-card art wells so a logo surface cannot paint through the gutter. Version 0.12.0 replaces pointer-driven gradient rotation with a steady material and a moving light: the spectrum and its 115deg direction stay fixed while `--hraness-foil-x`/`--hraness-foil-y` highlights travel across each lockup, and marketing footers can opt into the same icon-plus-wordmark foil as the site header with `brandMark`. Version 0.11.1 preserves visible metallic marks when another package repeats a generic hidden atom in a later CSS layer. React consumers load `components.css` or `styles.css`; the raw marketing entry supports authored HTML hooks. Version 0.11 adds server-rendered `FoilMark` artwork and metallic text with subtle rainbow reflections, including a shared header mark seam and original-artwork fallbacks. Version 0.10.1 adds conservative server syntax defaults, includes their styles in the narrow marketing entry, and pins the icon dependency to preserve fresh Linux installs. Version 0.10 adds the shared foil contract: `.hraness-foil` surfaces and `.hraness-foil-text` wordmarks render a pointer-following metallic spectrum from the `--hraness-foil-*` custom properties, applied by default to marketing header brands and primary actions. The `attachFoil` browser export drives the bounded `x`/`y`/`angle` inputs with damped easing, reduced-motion and forced-color fallbacks, and no style injection; the same spectrum feeds `@hraness/site-footer` signup controls. Dark appearances use a deeper palette so the sheen stays visible. Version 0.8 removes Jelly's optional API, stylesheet, vendor runtime and theme-provider side effect. Migrate direct Jelly surfaces to native shared primitives before upgrading. Lantern now uses softer directional depth and shaded faces; the marketing preset adds individually shaded static cells, theme-aware terminal colors and window chrome. Code blocks retain source lines and follow the active palette. Paper preferences, semantic palettes, and compiler identity stay stable. Compiler adopters must regenerate their finalized stylesheet with the new package manifest.
736
+ The stable dependency pair for this release is `@hraness/ui` `v0.5.17` with `@hraness/design-kit` `v0.32.0`. Version 0.31.0 keeps the `limits` beat and beats marked `social: false` out of the social kit and adds `socialPost` for social wording that stands without a caveat. Version 0.30.3 refreshes the portfolio snapshot so related-product cards use each product's own spelling, such as GhostGet and TextButler. Version 0.30.2 keeps the narrow and stacked install-tab layout when another package compiles the same atoms into a later cascade layer. Version 0.30.1 keeps every PlatformInstall tab name whole in columns down to 200px by stacking each mark above its name, using a container query on the component. Version 0.30.0 adds `site-shell.css`, which keeps short-page footers at the viewport bottom. Version 0.29.3 preserves readable selected install tabs in forced colors. Version 0.29.2 keeps all three PlatformInstall tabs visible at 320 to 360px and draws each platform mark once per component. Version 0.29.1 keeps marketing action labels readable in forced colors. Version 0.29.0 adds `PlatformInstall`, one install block for every CLI site: a tab per operating system with its mark, the install command with a Copy button that announces the result, optional alternative commands such as npm or Homebrew, and a note for platforms without a native build. After hydration it selects the visitor's operating system; without JavaScript every command shows. It also adds `PlatformIcon` (Apple, Tux, and Windows marks in `currentColor`) and a `PlatformBadges` "Runs on" row, plus `platformLabel`, `platformMark`, `detectPlatform`, and `matchDetectedPlatform` at the package root. See [Install commands for each platform](#install-commands-for-each-platform). No existing export changes. Version 0.28.0 adds the launch kit. `@hraness/design-kit/mockups` draws labelled illustrations of chat, feeds, inboxes, articles, terminals, browsers, desktop windows, menu bars, and phones in server-safe plain React with no StyleX or React Aria, styled by `@hraness/design-kit/mockups.css`; each renders as one image with a text description and no headings. `@hraness/design-kit/mockups/client` adds `ModeShowcase`, `FitToWidth`, and `StepThrough`. `@hraness/design-kit/launch`, with no React, holds the `LaunchBeat`, `LaunchFacts`, and `SocialKit` shapes with `resolveLaunchBeats`, `buildSocialKit`, and `assertLaunchKit`. `@hraness/design-kit/testing` gives product repositories `blogConformance`, `renderMatrix`, `assertNoHeadings`, `assertRoleImgWithLabel`, and `assertFakeHandles`. The React entries add `ArticleFigure`, `ArticleVideo` with `articleVideoJsonLd`, `ArticleTable`, `ArticleBarChart`, `ComparisonTable`, `LaunchBeats`, and `SocialKitPanel`, and `MarketingProofFrame` takes `chrome` (`window`, `browser` with `url`, or `terminal`). [ARTICLE_COPY.md](ARTICLE_COPY.md) now writes "Introducing a product" as beats; the admission rules are unchanged. No existing export changes. Version 0.27.0 adds explicit Rust, TOML, YAML, Lean, and TLA+ code highlighting, including nested comments and multiline strings. The existing highlighter API and stylesheet remain the shared entry points; unsupported languages still render as escaped text. Version 0.26.0 adds `MarketingNotice` and the raw `.hraness-marketing-notice` class: one status or alert line (`info`, `success`, or `error`) that sits on the content edge of the page column instead of spanning the window. Errors are announced as alerts and other tones as status. Signed-in account pages that render inside `MarketingSiteHeader` should compose `MarketingMain`, `MarketingNotice`, `MarketingStatStrip`, and `MarketingSection` so every block shares the header's measure and gutter, rather than hand-rolled full-bleed banners and nested cards. Version 0.25.0 moves bordered foil surfaces off the spectrum: `.hraness-foil` and `[data-emphasis="primary"]` actions keep their flat surface fill under one theme-aware monochrome edge — black on light, white on dark, overridable through the new `--hraness-foil-edge` token — while the metallic spectrum stays on wordmarks and marks. The foil material contract advances to version 3: `surfaceImage` and `surfaceBackgroundClip` are replaced by `surfaceFill`, `edge`, `edgeDark`, and `edgeColor`. Reinstall any vendored marketing snapshot from the 0.25.0 commit. Version 0.24.0 joins a marketing footer directly followed by the shared `@hraness/site-footer` network footer into one band: the product row's bottom space collapses to a compact gap and the network row's content follows the marketing measure and gutter through `--hraness-site-footer-measure`, so product links and the organization row share one column instead of reading as two stacked bars. Mount the network footer directly after `MarketingSiteFooter`; no prop or markup change is needed inside either landmark. Version 0.23.0 moves marketing pages to the Quiet direction described in [DESIGN.md](DESIGN.md). `ProductHero` no longer renders a backdrop, `HeroBackdrop` renders nothing, and `attachHeroLight` is an inert disposer; their names and props stay so existing code compiles and are marked deprecated. The `cells`, `weave`, `contour`, and `mesh` patterns render as `none`, and marketing fields and Lantern walls paint the flat palette background. Both marketing presets use Nebula Sans for display headings (editorial at weight 550); Instrument Serif stays vendored for explicit opt-in only. Hero eyebrows are plain labels, the accent band loses its grid, and cards and header chrome use hairline edges instead of lifted shadows. On phones `MarketingSiteHeader` keeps the brand, primary action, and appearance menu on one row and moves the links to a second row that scrolls sideways, with 44px targets. To migrate, delete `backdrop` artwork, `HeroBackdrop`, `attachHeroLight`, pattern values, and product CSS that recreated textures or serif headings, then reinstall any vendored marketing snapshot from the 0.23.0 commit. Version 0.22.2 restores the canonical roughday mark — the rain-cloud artwork pinned by the portfolio registry — after the mark slot briefly carried a stray illustration. Version 0.22.1 completes the icon library with the roughday inline chip family (65 admitted assets, no pending members). Version 0.22.0 adds the `./icons` surface: 62 vetted single-ink assets across ten sets — a shared illustration family, product illustration families, and the product marks, each admitted through a measured gate (single ink, bounded aspect, coverage, stroke, paths, bytes) and per-set family coherence, distributed as a typed registry module (`hranessIcons`, `hranessIcon`, `hranessIconMarkup`, `hranessIconsForSet`) and as canonical `./icons/<set>/<slug>.svg` files for image consumers. See [ICONS.md](ICONS.md). Version 0.21.1 accepts status-page `routes` straight from a sitemap: long titles are shortened for the "Did you mean" line and unusable entries are dropped instead of failing the render. Version 0.21.0 replaces the 404 and route-error pages with one shared status page: the product's main action, a "Did you mean" link to the closest known page, at most three next links with one-line descriptions, an optional line for AI agents, and a glyph drawn as dots that gather, move away from the pointer, and settle. `RouteNotFoundPage`, `RouteErrorPage`, and `GlobalErrorDocument` render it; `renderStatusPageHtml` and `attachStatusPage` bring the same page to static sites; `status-page.css` ships in `styles.css` and `compiler-foundation.css`. The default copy changes to "We can’t find that page". See [STATUS_PAGES.md](STATUS_PAGES.md). Version 0.20.0 gives `ThemeMenuButton` the Lantern material: under `data-hraness-material="lantern"` its trigger is raised at rest and inset while pressed, and its menu uses the material plane, lift and warm selection, with no new props. Sites can delete their local Lantern CSS for the appearance menu. It also adds `formatRelativeTime` at the package root and a hydration-safe `RelativeTime` component in `@hraness/design-kit/react`. Version 0.19.0 redraws related-product cards as the hraness.com project cards: each shows the product's mark, its name, and its one-line `role` at reading size, and no longer renders the `relationship` sentence (the prop stays accepted and is deprecated). `MarketingRelatedProduct` and the static `ArticleRelatedLink` take a `mark`, and every `@hraness/design-kit/portfolio` product and `relatedFor()` item now carries its portfolio mark as an inert `data:image/svg+xml` URL. Related-tier and proof headings move to the new `--hraness-marketing-h3-size` token, so the editorial display face never renders below 1.75rem. `typography.css` gains per-level heading tokens (`--hraness-type-h1-font` through `--hraness-type-h4-font`, the matching `-weight` tokens, `--hraness-type-subheading-font`, and `--hraness-type-display-min`). h3 and h4 in `.hraness-prose` and publication articles now use the text face, and the h2 floor rises to 1.75rem. Version 0.18.3 adds the Sponge and Wordcell runtime relations to Oh to the `@hraness/design-kit/portfolio` snapshot, so related-product cards on all three sites can link them. Version 0.18.2 refreshes the `@hraness/design-kit/portfolio` snapshot from the registry: the public ghostget.com entry, updated Gobstopper and xcb naming and descriptions, and the current sibling-product relations for related-product cards. Version 0.18.1 adds the Perplexity mark and a dependency-free `@hraness/design-kit/provider-marks` leaf entry (`providerMark`, `providerMarks`, `providerMarkFallback`, `providerMarkGlyphDataUri`, `providerMarkArtDataUri`, `providerMarkOnAccent`, `providerMarkMonogram`) so packages such as `@hraness/ui` can consume the registry without pulling the marketing surface. Version 0.18.0 adds the shared provider-mark registry: `providerMarks`, `providerMark()` alias resolution, `ProviderMark`/`ProviderMarkChip` accent-tinted tile components on both React entry points, vendored agent and vendor artwork from LobeHub icons 1.95.1 plus documented Crush and Aider marks, monogram fallbacks for uncovered names, and data-URI helpers for CSS-mask consumers. See `vendor/provider-marks/UPSTREAM.md` for asset provenance. Version 0.17.2 carries the canonical portfolio messaging record per product (`names`, `category`, `tagline`, `short`, `meta`, `medium`, `long`, and hero copy) in the `/portfolio` snapshot. Version 0.17.1 lets Next.js apps that compile dependencies with Babel build the article layer: its link check no longer uses a Unicode property escape that Babel cannot rewrite, and it rejects the same control characters and whitespace as before. Version 0.17.0 adds the article layer: server-safe `MarketingArticle`, byline, provenance, sources, callout, related-product, and index components, a matching static HTML renderer for sites without React, long-form article styles in `plain-publication.css`, and the `ArticleAdmission` rubric with `assertArticleAdmissions()`. It also adds `@hraness/design-kit/portfolio`, a snapshot of public product names, one-liners, links, and relations for related-product cards and "How X uses Y" posts. See [ARTICLE_COPY.md](ARTICLE_COPY.md). Version 0.16.4 keeps native appearance-menu labels usable inside keyboard-focusable page landmarks, including mouse and touch selection. Version 0.16.3 keeps decorative hero backgrounds hidden in forced colors and reduced transparency when other packages load their styles afterward. Version 0.16.2 preserves palette hues in translucent headers, material surfaces, and decorative highlights. Version 0.16.1 keeps plain reading pages and nested compiled surfaces in their selected palette, including system appearance without JavaScript. Version 0.16.0 adds a shared bounded hero light, product-owned backdrop slots, five Lantern patterns, palette-derived soft surfaces, and responsive typography across marketing and reading layouts. Static sites can use the palette bridge for system appearance before JavaScript. See [HERO_FIELDS.md](HERO_FIELDS.md), [LANTERN_MATERIAL.md](LANTERN_MATERIAL.md), and [MARKETING_PRESET.md](MARKETING_PRESET.md). Version 0.15.0 lets `MarketingRelated` present labeled tiers of sibling products: a `groups` collection renders each tier under its own heading with an accessible card-row label, while the flat `items` shape stays available for a single group. Version 0.14.0 adds `MarketingRelated`, a collection section that presents sibling products as linked cards, each framed by its relationship to the featured product. Version 0.13.0 publishes `--hraness-sticky-offset` from sticky marketing chrome, gives `MarketingMain` and the next sticky sibling a clearance contract, stretches marketing card rows to the tallest item with a reserved two-line meta block, and clips per-card art wells so a logo surface cannot paint through the gutter. Version 0.12.0 replaces pointer-driven gradient rotation with a steady material and a moving light: the spectrum and its 115deg direction stay fixed while `--hraness-foil-x`/`--hraness-foil-y` highlights travel across each lockup, and marketing footers can opt into the same icon-plus-wordmark foil as the site header with `brandMark`. Version 0.11.1 preserves visible metallic marks when another package repeats a generic hidden atom in a later CSS layer. React consumers load `components.css` or `styles.css`; the raw marketing entry supports authored HTML hooks. Version 0.11 adds server-rendered `FoilMark` artwork and metallic text with subtle rainbow reflections, including a shared header mark seam and original-artwork fallbacks. Version 0.10.1 adds conservative server syntax defaults, includes their styles in the narrow marketing entry, and pins the icon dependency to preserve fresh Linux installs. Version 0.10 adds the shared foil contract: `.hraness-foil` surfaces and `.hraness-foil-text` wordmarks render a pointer-following metallic spectrum from the `--hraness-foil-*` custom properties, applied by default to marketing header brands and primary actions. The `attachFoil` browser export drives the bounded `x`/`y`/`angle` inputs with damped easing, reduced-motion and forced-color fallbacks, and no style injection; the same spectrum feeds `@hraness/site-footer` signup controls. Dark appearances use a deeper palette so the sheen stays visible. Version 0.8 removes Jelly's optional API, stylesheet, vendor runtime and theme-provider side effect. Migrate direct Jelly surfaces to native shared primitives before upgrading. Lantern now uses softer directional depth and shaded faces; the marketing preset adds individually shaded static cells, theme-aware terminal colors and window chrome. Code blocks retain source lines and follow the active palette. Paper preferences, semantic palettes, and compiler identity stay stable. Compiler adopters must regenerate their finalized stylesheet with the new package manifest.
728
737
 
729
- The complete check runs linting, typechecking, production builds, an installed-package smoke test, deterministic examples, property tests, server rendering, vendor-integrity checks, and headless Chromium regressions. The browser gate verifies responsive shell ownership, extracted AnimatedRailStage, Fader, layout-surface, and playback-transport delivery, reduced-motion stage fallback, Fader keyboard and focus behavior, forced-color behavior, keyboard-operable appearance, browser-chrome synchronization across opposing device and saved preferences, global-error static metadata and runtime lifecycle, accessible title and copy, deterministic procedural layers, viewport containment, and the absence of the excluded canvas effect. Set `CHROMIUM_EXECUTABLE_PATH` when Chromium or Chrome is installed outside the standard macOS and Linux paths.
738
+ The complete check runs linting, typechecking, production builds, an installed-package smoke test, deterministic examples, property tests, server rendering, vendor-integrity checks, and headless Chromium regressions. The browser gate verifies responsive shell ownership, extracted AnimatedRailStage, Fader, layout-surface, and playback-transport delivery, reduced-motion stage fallback, Fader keyboard and focus behavior, forced-color behavior, keyboard-operable appearance, browser-chrome synchronization across opposing device and saved preferences, global-error static metadata and runtime lifecycle, accessible title and copy, deterministic procedural layers, viewport containment, and the absence of the excluded canvas effect. Provision the pinned Chromium with `bun run browser:install`. An explicit `CHROMIUM_EXECUTABLE_PATH` must resolve to a provisioned Chrome for Testing; the browser gate rejects installed auto-updating Chrome.
730
739
 
731
740
  Global CSS remains the boundary for tokens, resets, document grammar, cross-component layout, accessibility media rules, and audited vendor fallbacks. A new overlapping compiled style family from another package requires a layer-order compatibility gate against that package's released artifact before adoption.
732
741
 
@@ -9,38 +9,11 @@ import {
9
9
  assertArticleHref,
10
10
  formatArticleDate
11
11
  } from "./chunk-77391vmq.js";
12
-
13
- // src/palette-color.ts
14
- function channels(hex) {
15
- if (!/^#[0-9a-f]{6}$/iu.test(hex))
16
- throw new Error("Palette colors must be six-digit hex values.");
17
- return [Number.parseInt(hex.slice(1, 3), 16), Number.parseInt(hex.slice(3, 5), 16), Number.parseInt(hex.slice(5, 7), 16)];
18
- }
19
- function mixPaletteColor(color, toward, amount) {
20
- const target = channels(toward);
21
- return `#${channels(color).map((value, index) => Math.round(value * (1 - amount) + (target[index] ?? 0) * amount).toString(16).padStart(2, "0")).join("")}`;
22
- }
23
- function luminance(hex) {
24
- const linearize = (channel) => {
25
- const value = channel / 255;
26
- return value <= 0.04045 ? value / 12.92 : ((value + 0.055) / 1.055) ** 2.4;
27
- };
28
- const [red, green, blue] = channels(hex);
29
- return linearize(red) * 0.2126 + linearize(green) * 0.7152 + linearize(blue) * 0.0722;
30
- }
31
- function paletteContrast(a, b) {
32
- const first = luminance(a);
33
- const second = luminance(b);
34
- return (Math.max(first, second) + 0.05) / (Math.min(first, second) + 0.05);
35
- }
36
- function readablePaletteColor(color, toward, backgrounds, minimum) {
37
- for (let step = 0;step <= 100; step += 1) {
38
- const candidate = mixPaletteColor(color, toward, step / 100);
39
- if (backgrounds.every((background) => paletteContrast(candidate, background) >= minimum))
40
- return candidate;
41
- }
42
- throw new Error("The authored palette cannot meet its contrast contract.");
43
- }
12
+ import {
13
+ mixPaletteColor,
14
+ paletteContrast,
15
+ readablePaletteColor
16
+ } from "./chunk-vst6p4wd.js";
44
17
 
45
18
  // src/palettes.ts
46
19
  var designPalettes = ["catppuccin", "gruvbox", "rose-pine", "tokyo-night", "paper"];
@@ -992,6 +965,62 @@ function formatRelativeTime(target, options = {}) {
992
965
  } = resolveRelativeTime(instant.getTime() - reference.getTime());
993
966
  return formatterFor(locale, numeric).format(value, unit);
994
967
  }
968
+ // src/agent-setup.ts
969
+ var MAX_AGENT_SETUP_URL = 1e4;
970
+ function agentSetupTargets(prompt, options = {}) {
971
+ if (typeof prompt !== "string" || prompt.trim() === "")
972
+ throw new RangeError("Agent setup prompt must contain text.");
973
+ const encoded = options.prefill === false ? "" : encodeURIComponent(prompt);
974
+ const prefill = (href, entry) => options.prefill !== false && href.length <= MAX_AGENT_SETUP_URL ? {
975
+ href,
976
+ mode: "prefill"
977
+ } : {
978
+ href: entry,
979
+ mode: "copy-and-open"
980
+ };
981
+ const codex = prefill(`codex://new?prompt=${encoded}`, "https://chatgpt.com/codex");
982
+ return [{
983
+ id: "dot",
984
+ label: "OpenAI Dot",
985
+ mark: "openai",
986
+ href: "https://chatgpt.com/",
987
+ mode: "copy-and-open",
988
+ host: "cloud"
989
+ }, {
990
+ id: "grok-bot",
991
+ label: "Grok Bot",
992
+ mark: "xai",
993
+ href: "https://cursor.com/dashboard/bot",
994
+ mode: "copy-and-open",
995
+ host: "cloud"
996
+ }, {
997
+ id: "muse",
998
+ label: "Muse",
999
+ mark: "meta",
1000
+ href: "https://applink.muse.ai/",
1001
+ mode: "copy-and-open",
1002
+ host: "cloud"
1003
+ }, {
1004
+ id: "cursor",
1005
+ label: "Cursor",
1006
+ mark: "cursor",
1007
+ host: "local",
1008
+ ...prefill(`https://cursor.com/link/prompt?text=${encoded}`, "https://cursor.com/")
1009
+ }, {
1010
+ id: "codex-app",
1011
+ label: "Codex",
1012
+ mark: "codex",
1013
+ host: codex.mode === "prefill" ? "local" : "cloud",
1014
+ ...codex
1015
+ }, {
1016
+ id: "devin",
1017
+ label: "Devin",
1018
+ mark: "devin",
1019
+ href: "https://app.devin.ai/",
1020
+ mode: "copy-and-open",
1021
+ host: "cloud"
1022
+ }];
1023
+ }
995
1024
 
996
1025
  // src/index.ts
997
1026
  var colors = {
@@ -1206,4 +1235,4 @@ function themeFor(mode) {
1206
1235
  return colors[mode];
1207
1236
  }
1208
1237
 
1209
- export { designPalettes, designPaletteLabels, isDesignPalette, designPaletteSources, paletteColors, designThemes, defaultDesignTheme, designThemeStorageKey, isDesignTheme, normalizeDesignTheme, designThemeLabel, resolveDesignTheme, defaultDesignPalettePreference, designPaletteStorageKey, parseDesignPalettePreference, normalizeDesignPalettePreference, resolveDesignPalettePreference, getDesignPaletteTheme, escapeArticleHtml, renderArticleBylineHtml, renderArticleProvenanceHtml, renderArticleHtml, renderArticleSourcesHtml, renderArticleCalloutHtml, renderArticleRelatedHtml, renderArticleIndexHtml, STATUS_PAGE_MAX_NEXT, STATUS_PAGE_MAX_ROUTES, STATUS_PAGE_BACK_LABEL, STATUS_PAGE_HINT_PREFIX, STATUS_PAGE_NEXT_HEADING_ID, STATUS_PAGE_AGENT_PREFIX, resolveStatusPage, statusPageRoutesAttribute, parseStatusPageRoutes, normalizeStatusPath, suggestStatusRoute, renderStatusPageHtml, relativeTimeUnits, parseRelativeTimeInput, resolveRelativeTime, formatRelativeTime, colors, auroraColors, chromeColors, chromeGradientStops, spacing, radius, controlRadius, layout, siteThemes, interaction, motion, elevation, stacking, breakpoints, iconography, typeScale, fontWeights, fontFamilies, fontFallbacks, typography, themeFor };
1238
+ export { designPalettes, designPaletteLabels, isDesignPalette, designPaletteSources, paletteColors, designThemes, defaultDesignTheme, designThemeStorageKey, isDesignTheme, normalizeDesignTheme, designThemeLabel, resolveDesignTheme, defaultDesignPalettePreference, designPaletteStorageKey, parseDesignPalettePreference, normalizeDesignPalettePreference, resolveDesignPalettePreference, getDesignPaletteTheme, escapeArticleHtml, renderArticleBylineHtml, renderArticleProvenanceHtml, renderArticleHtml, renderArticleSourcesHtml, renderArticleCalloutHtml, renderArticleRelatedHtml, renderArticleIndexHtml, STATUS_PAGE_MAX_NEXT, STATUS_PAGE_MAX_ROUTES, STATUS_PAGE_BACK_LABEL, STATUS_PAGE_HINT_PREFIX, STATUS_PAGE_NEXT_HEADING_ID, STATUS_PAGE_AGENT_PREFIX, resolveStatusPage, statusPageRoutesAttribute, parseStatusPageRoutes, normalizeStatusPath, suggestStatusRoute, renderStatusPageHtml, relativeTimeUnits, parseRelativeTimeInput, resolveRelativeTime, formatRelativeTime, MAX_AGENT_SETUP_URL, agentSetupTargets, colors, auroraColors, chromeColors, chromeGradientStops, spacing, radius, controlRadius, layout, siteThemes, interaction, motion, elevation, stacking, breakpoints, iconography, typeScale, fontWeights, fontFamilies, fontFallbacks, typography, themeFor };