@rynfar/meridian 1.72.0 → 1.74.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 (177) hide show
  1. package/README.md +119 -107
  2. package/assets/banner.svg +18 -43
  3. package/assets/how-it-works.svg +40 -86
  4. package/assets/providers/README.md +10 -0
  5. package/assets/providers/antigravity.png +0 -0
  6. package/assets/providers/claude.png +0 -0
  7. package/dist/antigravity-clients/opencode.js +173 -0
  8. package/dist/antigravity-clients/pi.js +21 -0
  9. package/dist/antigravitySetup-35pd5xqn.js +191 -0
  10. package/dist/cli-1jstkdj9.js +30 -0
  11. package/dist/{cli-9e5cxp89.js → cli-2h3w5n6g.js} +163 -65
  12. package/dist/cli-3zwfvexc.js +56 -0
  13. package/dist/{cli-hxxy0m1z.js → cli-82e2m44k.js} +2 -1
  14. package/dist/cli-8sw5wr9j.js +136 -0
  15. package/dist/{cli-khhjyk04.js → cli-chsp880k.js} +214 -21
  16. package/dist/cli-dh0a1bw4.js +619 -0
  17. package/dist/cli-eehk3052.js +57 -0
  18. package/dist/{cli-ab7zkp1a.js → cli-fveyj34s.js} +32261 -18952
  19. package/dist/cli-grfp0s1j.js +330 -0
  20. package/dist/cli-qpfky8wy.js +133 -0
  21. package/dist/{cli-hj61zpt7.js → cli-wbsmhxcx.js} +26 -2
  22. package/dist/cli.js +111 -38
  23. package/dist/cliDashboard-c0dvkj4y.js +325 -0
  24. package/dist/configDir.d.ts +30 -0
  25. package/dist/configDir.d.ts.map +1 -0
  26. package/dist/organizationName-90f0atkn.js +29 -0
  27. package/dist/{pluginPage-f5gdmbxc.js → pluginPage-pp72d2j8.js} +1 -1
  28. package/dist/{profileCli-1eecbmgk.js → profileCli-1bfgc05h.js} +13 -3
  29. package/dist/{profilePage-mamej7kp.js → profilePage-vs319rvf.js} +252 -60
  30. package/dist/profileRename-4a4km6g8.js +22 -0
  31. package/dist/{profiles-wch9h234.js → profiles-0mp32ek9.js} +16 -3
  32. package/dist/proxy/adapterInstances.d.ts +1 -1
  33. package/dist/proxy/adapterInstances.d.ts.map +1 -1
  34. package/dist/proxy/adapters/claudecode.d.ts.map +1 -1
  35. package/dist/proxy/adapters/droid.d.ts.map +1 -1
  36. package/dist/proxy/auth.d.ts +2 -0
  37. package/dist/proxy/auth.d.ts.map +1 -1
  38. package/dist/proxy/authDiscovery.d.ts +52 -0
  39. package/dist/proxy/authDiscovery.d.ts.map +1 -0
  40. package/dist/proxy/backends/antigravity.d.ts +8 -0
  41. package/dist/proxy/backends/antigravity.d.ts.map +1 -0
  42. package/dist/proxy/backends/antigravityAttachments.d.ts +16 -0
  43. package/dist/proxy/backends/antigravityAttachments.d.ts.map +1 -0
  44. package/dist/proxy/backends/antigravityGrammar.d.ts +12 -0
  45. package/dist/proxy/backends/antigravityGrammar.d.ts.map +1 -0
  46. package/dist/proxy/backends/antigravityJobs.d.ts +19 -0
  47. package/dist/proxy/backends/antigravityJobs.d.ts.map +1 -0
  48. package/dist/proxy/backends/antigravityMedia.d.ts +9 -0
  49. package/dist/proxy/backends/antigravityMedia.d.ts.map +1 -0
  50. package/dist/proxy/backends/antigravityNative.d.ts +8 -0
  51. package/dist/proxy/backends/antigravityNative.d.ts.map +1 -0
  52. package/dist/proxy/backends/antigravityOpenai.d.ts +9 -0
  53. package/dist/proxy/backends/antigravityOpenai.d.ts.map +1 -0
  54. package/dist/proxy/backends/antigravityOpenaiMedia.d.ts +9 -0
  55. package/dist/proxy/backends/antigravityOpenaiMedia.d.ts.map +1 -0
  56. package/dist/proxy/backends/antigravityPlugins.d.ts +41 -0
  57. package/dist/proxy/backends/antigravityPlugins.d.ts.map +1 -0
  58. package/dist/proxy/backends/antigravityProbe.d.ts +16 -0
  59. package/dist/proxy/backends/antigravityProbe.d.ts.map +1 -0
  60. package/dist/proxy/backends/antigravityProcess.d.ts +4 -0
  61. package/dist/proxy/backends/antigravityProcess.d.ts.map +1 -0
  62. package/dist/proxy/backends/antigravityProtocol.d.ts +582 -0
  63. package/dist/proxy/backends/antigravityProtocol.d.ts.map +1 -0
  64. package/dist/proxy/backends/antigravityReplay.d.ts +41 -0
  65. package/dist/proxy/backends/antigravityReplay.d.ts.map +1 -0
  66. package/dist/proxy/backends/antigravityResponses.d.ts +35 -0
  67. package/dist/proxy/backends/antigravityResponses.d.ts.map +1 -0
  68. package/dist/proxy/backends/antigravityRuntime.d.ts +189 -0
  69. package/dist/proxy/backends/antigravityRuntime.d.ts.map +1 -0
  70. package/dist/proxy/backends/antigravitySchema.d.ts +10 -0
  71. package/dist/proxy/backends/antigravitySchema.d.ts.map +1 -0
  72. package/dist/proxy/backends/antigravitySessions.d.ts +28 -0
  73. package/dist/proxy/backends/antigravitySessions.d.ts.map +1 -0
  74. package/dist/proxy/backends/antigravityState.d.ts +22 -0
  75. package/dist/proxy/backends/antigravityState.d.ts.map +1 -0
  76. package/dist/proxy/backends/antigravityStops.d.ts +10 -0
  77. package/dist/proxy/backends/antigravityStops.d.ts.map +1 -0
  78. package/dist/proxy/backends/antigravityTokens.d.ts +14 -0
  79. package/dist/proxy/backends/antigravityTokens.d.ts.map +1 -0
  80. package/dist/proxy/backends/antigravityUrl.d.ts +7 -0
  81. package/dist/proxy/backends/antigravityUrl.d.ts.map +1 -0
  82. package/dist/proxy/backends/providerStatus.d.ts +15 -0
  83. package/dist/proxy/backends/providerStatus.d.ts.map +1 -0
  84. package/dist/proxy/credentialsMode.d.ts +77 -0
  85. package/dist/proxy/credentialsMode.d.ts.map +1 -0
  86. package/dist/proxy/design.d.ts.map +1 -1
  87. package/dist/proxy/followActive.d.ts +262 -0
  88. package/dist/proxy/followActive.d.ts.map +1 -0
  89. package/dist/proxy/limitDetection.d.ts +110 -0
  90. package/dist/proxy/limitDetection.d.ts.map +1 -0
  91. package/dist/proxy/models.d.ts.map +1 -1
  92. package/dist/proxy/oauthPlan.d.ts +63 -0
  93. package/dist/proxy/oauthPlan.d.ts.map +1 -0
  94. package/dist/proxy/oauthUsage.d.ts +65 -2
  95. package/dist/proxy/oauthUsage.d.ts.map +1 -1
  96. package/dist/proxy/openai.d.ts +6 -2
  97. package/dist/proxy/openai.d.ts.map +1 -1
  98. package/dist/proxy/organizationName.d.ts +71 -0
  99. package/dist/proxy/organizationName.d.ts.map +1 -0
  100. package/dist/proxy/passthroughEarlyStop.d.ts +10 -0
  101. package/dist/proxy/passthroughEarlyStop.d.ts.map +1 -1
  102. package/dist/proxy/planAllowance.d.ts +75 -0
  103. package/dist/proxy/planAllowance.d.ts.map +1 -0
  104. package/dist/proxy/probes.d.ts +85 -0
  105. package/dist/proxy/probes.d.ts.map +1 -0
  106. package/dist/proxy/profileCli.d.ts +53 -1
  107. package/dist/proxy/profileCli.d.ts.map +1 -1
  108. package/dist/proxy/profileHealth.d.ts +127 -0
  109. package/dist/proxy/profileHealth.d.ts.map +1 -0
  110. package/dist/proxy/profileRename.d.ts +83 -0
  111. package/dist/proxy/profileRename.d.ts.map +1 -0
  112. package/dist/proxy/profiles.d.ts +72 -6
  113. package/dist/proxy/profiles.d.ts.map +1 -1
  114. package/dist/proxy/query.d.ts +7 -0
  115. package/dist/proxy/query.d.ts.map +1 -1
  116. package/dist/proxy/routing.d.ts +59 -1
  117. package/dist/proxy/routing.d.ts.map +1 -1
  118. package/dist/proxy/sdkFeatures.d.ts +1 -1
  119. package/dist/proxy/sdkFeatures.d.ts.map +1 -1
  120. package/dist/proxy/server.d.ts.map +1 -1
  121. package/dist/proxy/session/fingerprint.d.ts +5 -0
  122. package/dist/proxy/session/fingerprint.d.ts.map +1 -1
  123. package/dist/proxy/session/lineage.d.ts.map +1 -1
  124. package/dist/proxy/setup.d.ts.map +1 -1
  125. package/dist/proxy/supervision.d.ts +41 -0
  126. package/dist/proxy/supervision.d.ts.map +1 -0
  127. package/dist/proxy/tokenRefresh.d.ts +38 -4
  128. package/dist/proxy/tokenRefresh.d.ts.map +1 -1
  129. package/dist/proxy/types.d.ts +32 -0
  130. package/dist/proxy/types.d.ts.map +1 -1
  131. package/dist/server.js +11 -7
  132. package/dist/settings.d.ts +83 -0
  133. package/dist/settings.d.ts.map +1 -0
  134. package/dist/{setup-ndmjpy23.js → setup-7fr49z92.js} +1 -1
  135. package/dist/statusProbe-9x9q261e.js +151 -0
  136. package/dist/telemetry/dashboard.d.ts.map +1 -1
  137. package/dist/telemetry/index.d.ts +20 -2
  138. package/dist/telemetry/index.d.ts.map +1 -1
  139. package/dist/telemetry/landing.d.ts +1 -1
  140. package/dist/telemetry/landing.d.ts.map +1 -1
  141. package/dist/telemetry/logStore.d.ts +11 -0
  142. package/dist/telemetry/logStore.d.ts.map +1 -1
  143. package/dist/telemetry/pricingStore.d.ts +2 -2
  144. package/dist/telemetry/pricingStore.d.ts.map +1 -1
  145. package/dist/telemetry/profileBar.d.ts +3 -3
  146. package/dist/telemetry/profileBar.d.ts.map +1 -1
  147. package/dist/telemetry/profileFacts.d.ts +17 -0
  148. package/dist/telemetry/profileFacts.d.ts.map +1 -0
  149. package/dist/telemetry/profileOrder.d.ts +68 -0
  150. package/dist/telemetry/profileOrder.d.ts.map +1 -0
  151. package/dist/telemetry/profilePage.d.ts.map +1 -1
  152. package/dist/telemetry/profileSort.d.ts +35 -0
  153. package/dist/telemetry/profileSort.d.ts.map +1 -0
  154. package/dist/telemetry/profileSpent.d.ts +68 -0
  155. package/dist/telemetry/profileSpent.d.ts.map +1 -0
  156. package/dist/telemetry/providerPage.d.ts +2 -0
  157. package/dist/telemetry/providerPage.d.ts.map +1 -0
  158. package/dist/telemetry/providerSetup.d.ts +5 -0
  159. package/dist/telemetry/providerSetup.d.ts.map +1 -0
  160. package/dist/telemetry/providerView.d.ts +45 -0
  161. package/dist/telemetry/providerView.d.ts.map +1 -0
  162. package/dist/telemetry/routeChain.d.ts +32 -0
  163. package/dist/telemetry/routeChain.d.ts.map +1 -0
  164. package/dist/telemetry/routes.d.ts.map +1 -1
  165. package/dist/telemetry/settingsPage.d.ts +1 -1
  166. package/dist/telemetry/settingsPage.d.ts.map +1 -1
  167. package/dist/telemetry/sqlite.d.ts.map +1 -1
  168. package/dist/telemetry/store.d.ts +6 -1
  169. package/dist/telemetry/store.d.ts.map +1 -1
  170. package/dist/telemetry/types.d.ts +132 -2
  171. package/dist/telemetry/types.d.ts.map +1 -1
  172. package/dist/{tokenRefresh-kzz08kea.js → tokenRefresh-eg9h83wd.js} +6 -1
  173. package/package.json +11 -4
  174. package/dist/cli-5jxyma6z.js +0 -277
  175. package/dist/cli-vj9cv18n.js +0 -38
  176. package/dist/proxy/settings.d.ts +0 -30
  177. package/dist/proxy/settings.d.ts.map +0 -1
package/README.md CHANGED
@@ -1,74 +1,39 @@
1
1
  <p align="center">
2
- <img src="assets/banner.svg" alt="Meridian — Harness Claude, your way." width="800" />
2
+ <img src="assets/banner.svg" alt="Meridian — Claude and Antigravity, in your tools." width="920" />
3
3
  </p>
4
4
 
5
5
  <p align="center">
6
- <strong>Your tools. Your sessions. One place to see what’s happening.</strong>
7
- </p>
8
-
9
- <p align="center">
10
- <a href="https://github.com/rynfar/meridian/releases">Releases</a> ·
11
- <a href="#get-started">Get started</a> ·
12
- <a href="docs/agents.md">Connect your agent</a> ·
6
+ <a href="#quick-start">Quick start</a> ·
7
+ <a href="#try-antigravity">Try Antigravity</a> ·
8
+ <a href="#desktop">Desktop</a> ·
9
+ <a href="#documentation">Documentation</a> ·
13
10
  <a href="https://discord.gg/jP2a2Z92NZ">Discord</a>
14
11
  </p>
15
12
 
16
13
  <p align="center">
17
14
  <a href="https://www.npmjs.com/package/@rynfar/meridian"><img src="https://img.shields.io/npm/v/@rynfar/meridian?style=flat-square&color=58a6ff" alt="npm version" /></a>
18
- <img src="https://img.shields.io/badge/desktop-macOS_preview-bc8cff?style=flat-square" alt="Desktop: macOS preview" />
19
- <img src="https://img.shields.io/badge/headless-macOS_·_Linux_·_Windows-58a6ff?style=flat-square" alt="Headless: macOS, Linux and Windows" />
20
- <a href="https://opensource.org/license/mit"><img src="https://img.shields.io/badge/license-MIT-bc8cff?style=flat-square" alt="MIT license" /></a>
21
- </p>
22
-
23
- Meridian connects Anthropic- and OpenAI-compatible clients to Claude through the
24
- Claude Agent SDK. Keep the editor or terminal you like, with streaming, persistent
25
- sessions, account routing and visibility into usage and prompt caching.
26
-
27
- **Now with an optional Mac app.** Manage Meridian versions, install plugins, find
28
- failed requests and see your usage limits without keeping a terminal open.
29
- Headless Meridian remains fully supported—npm, Docker, Nix and your existing
30
- service manager all remain valid ways to run it.
31
-
32
- ## Meet Meridian Desktop
33
-
34
- <p align="center">
35
- <img src="assets/desktop-dashboard.jpg" alt="Meridian Desktop overview showing usage limits, cache activity and recent requests. Sample data." width="1000" />
15
+ <a href="docs/antigravity.md"><img src="https://img.shields.io/badge/Antigravity-preview-bc8cff?style=flat-square" alt="Antigravity: preview" /></a>
16
+ <a href="https://opensource.org/license/mit"><img src="https://img.shields.io/badge/license-MIT-58a6ff?style=flat-square" alt="MIT license" /></a>
36
17
  </p>
37
18
 
38
- <p align="center"><sub>macOS dashboard preview · Sample data</sub></p>
39
-
40
- | See what matters | Keep it under control |
41
- | --- | --- |
42
- | **Usage & limits** — account quota windows, reset times and token activity. | **Versions** — install published Meridian releases, switch versions and roll back. |
43
- | **Requests & cache** — timing, failures, cache history and request details. | **Service** — start, stop, restart and recover an app-managed installation. |
44
- | **Logs & alerts** — searchable diagnostics and opt-in failure, cache and quota notifications. | **Plugins** — install and update the Pi, OpenCode, Hermes and OpenClaw scrub plugins. |
45
-
46
- Native macOS chrome, menu bar controls and Liquid Glass on supported Macs through
47
- [electron-liquid-glass](https://github.com/Meridius-Labs/electron-liquid-glass).
48
- The desktop preview targets **macOS on Apple Silicon**. Linux and Windows desktop
49
- apps are planned; their runtime support is not ready yet.
50
-
51
- ## Get started
19
+ Meridian connects coding clients to **Claude and Antigravity using your subscription**.
20
+ Run Pi, OpenCode or another supported client against a local API, and manage
21
+ providers, requests and usage from a browser or the optional Mac app.
52
22
 
53
- ### With the Mac app
23
+ Claude requests run through Anthropic’s Agent SDK. Antigravity requests run
24
+ through Google’s official, signed-in `agy` CLI. Account permissions, model
25
+ availability and subscription limits still apply.
54
26
 
55
- The first downloadable desktop release is being prepared. Until it is published,
56
- use the [desktop preview instructions](apps/desktop/README.md#run-locally).
57
- Signed, notarized `.dmg` and `.zip` downloads will appear under
58
- [GitHub Releases](https://github.com/rynfar/meridian/releases).
27
+ | <img src="assets/providers/claude.png" width="40" alt="Claude logo" /><br>Claude | <img src="assets/providers/antigravity.png" width="40" alt="Antigravity logo" /><br>Antigravity |
28
+ | :--- | :--- |
29
+ | **Released** · Claude Agent SDK | **Preview · v1.74.0+** · Official `agy` CLI |
30
+ | Persistent sessions, prompt caching and multiple account profiles | Streaming, client tools, conversation reuse and saved-answer recovery |
31
+ | [Client compatibility and setup](docs/agents.md) | [Pi and OpenCode setup](docs/antigravity.md) |
32
+ | Headless macOS, Linux and Windows | Authenticated acceptance on macOS arm64; Linux/Windows verification unfinished |
59
33
 
60
- 1. Connect to an existing local Meridian service, or install Meridian from **Versions**.
61
- 2. For a new installation, choose app management in **Service** and start it.
62
- 3. Sign in to a Claude account, then follow your [agent’s setup guide](docs/agents.md).
34
+ ## Quick start
63
35
 
64
- The app can monitor Docker or Nix installations through a published local HTTP
65
- port. Their package manager retains control of updates and lifecycle. Supported
66
- macOS LaunchAgents can be handed to the app and returned to headless operation.
67
- [How service ownership works →](apps/desktop/README.md#connect-to-an-existing-installation)
68
-
69
- ### Headless, as always
70
-
71
- Requires Node.js 22 or newer and a Claude account configured for the SDK.
36
+ For the released **Claude** backend, install [Node.js 22+](https://nodejs.org/), then:
72
37
 
73
38
  ```sh
74
39
  npm install -g @rynfar/meridian
@@ -76,75 +41,122 @@ claude login
76
41
  meridian
77
42
  ```
78
43
 
79
- Meridian listens at `http://127.0.0.1:3456`. For OpenCode V1, run
80
- `meridian setup` once and restart OpenCode. Other clients—including OpenCode V2—have
81
- [specific setup instructions](docs/agents.md).
44
+ Open `http://127.0.0.1:3456`. For OpenCode V1, run `meridian setup` and restart
45
+ OpenCode. For Pi and other clients, follow the [client setup guide](docs/agents.md).
46
+ See [configuration](docs/configuration.md) for API-key protection and Windows
47
+ setup, or [deployment](docs/deployment.md) for Docker and Nix.
48
+
49
+ ## Try Antigravity
50
+
51
+ **Antigravity is included in Meridian 1.74.0 and later as a preview.**
52
+ The verified setup uses **agy 1.2.7**, **Pi 0.72.1** or **OpenCode V1 1.18.31**,
53
+ and macOS on Apple Silicon. Other versions need their own verification.
54
+
55
+ Install Node.js 22+ and the
56
+ [official Antigravity CLI](https://antigravity.google/). Run `agy` to sign in with
57
+ your subscription account and disable paid overage credits in its settings.
58
+ Then install Meridian:
82
59
 
83
60
  ```sh
84
- # Example for a POSIX shell, with Meridian API-key protection disabled:
85
- ANTHROPIC_API_KEY=x ANTHROPIC_BASE_URL=http://127.0.0.1:3456 opencode
61
+ npm install -g @rynfar/meridian@1.74.0
62
+
63
+ MERIDIAN_BACKEND=antigravity \
64
+ MERIDIAN_AGY_ALLOW_TOOL_BRIDGE=1 \
65
+ MERIDIAN_AGY_STATE_PATH="$HOME/.local/state/meridian/antigravity.sqlite" \
66
+ MERIDIAN_PORT=3457 \
67
+ meridian
86
68
  ```
87
69
 
88
- `x` is a client-required placeholder. If you configure Meridian’s API-key
89
- protection, use that key instead. Claude authentication comes from the configured
90
- Claude account. See [configuration](docs/configuration.md) for authentication,
91
- ports and Windows setup, or [deployment](docs/deployment.md) for Docker and Nix.
92
-
93
- **No desktop dependency.** Installing the headless package does not install
94
- Electron. You can run Meridian entirely without the app, including its browser
95
- [telemetry dashboard](MONITORING.md).
96
-
97
- ## Built for ongoing work
98
-
99
- - **Keep conversations going.** Sessions resume across requests and proxy restarts,
100
- with handling for client compaction, undo and branching.
101
- - **Use the protocol your client speaks.** Anthropic Messages, OpenAI Chat
102
- Completions and Responses endpoints, including streaming and tool forwarding.
103
- - **Keep accounts organized.** Multiple Claude profiles, explicit account selection
104
- and opt-in sticky session routing.
105
- - **Understand cache behavior.** Request history, prompt-cache metrics, diagnostic
106
- events and optional persistent telemetry. API-equivalent cost estimates are
107
- estimates, not your subscription bill.
108
- - **Keep your deployment.** CLI, containers, declarative Nix services or the
109
- optional desktop manager share the same Meridian server.
70
+ Open `http://127.0.0.1:3457/providers` and use **Connect Pi / OpenCode**, or follow
71
+ the [CLI setup instructions](docs/antigravity.md#configure-installed-clients).
72
+ For a source build, follow the [development guide](docs/development.md).
73
+ The tool bridge lets the client execute tools with its own permissions. The
74
+ SQLite path enables saved state across service restarts; it does not guarantee
75
+ recovery of an unfinished action.
76
+
77
+ ### What works
78
+
79
+ - **The coding loop:** incremental text, client tools, parallel tool batches,
80
+ approvals, questions, cancellation and client-owned plugins/delegation.
81
+ - **Model and output selection:** available model/effort variants, forced tools
82
+ and validated structured output.
83
+ - **Client APIs:** Anthropic Messages, OpenAI Chat Completions and a documented
84
+ Responses subset.
85
+ - **Attachments:** images and public HTTPS image URLs; documents, speech and
86
+ video through local conversion. These are not native media APIs.
87
+ - **Continuity:** warm conversation reuse, eligible completed-session restoration,
88
+ history replay and bounded recovery of saved answers and tool IDs.
89
+ - **Provider management:** web and macOS setup, separate quota/status displays,
90
+ shared navigation and activity. Native browser/subagent access requires
91
+ separate explicit grants.
92
+
93
+ ### What is unfinished
94
+
95
+ Active-task reattachment and automatic reconciliation of uncertain tool outcomes
96
+ are unfinished. Some provider-specific plugins, hosted-tool/file contracts and
97
+ client versions need adapters and acceptance tests. Authenticated Linux/Windows
98
+ verification is also outstanding.
99
+
100
+ The CLI does not expose exact output-token caps, numeric thinking budgets,
101
+ sampling controls or every native media/reasoning feature. Meridian cannot add
102
+ those guarantees through a wrapper. Upstream CLI failures can still interrupt a
103
+ turn. The [support and recovery checklist](docs/antigravity-support.md) records
104
+ what is missing, available workarounds and what would close each gap.
105
+
106
+ ## Desktop
110
107
 
111
108
  <p align="center">
112
- <img src="assets/how-it-works.svg" alt="Your client connects to Meridian, which sends requests through the Claude Agent SDK." width="920" />
109
+ <img src="assets/desktop-dashboard.jpg" alt="Meridian Desktop showing usage limits, cache activity and recent requests. Sample data." width="1000" />
113
110
  </p>
111
+ <p align="center"><sub>macOS dashboard preview · Sample data</sub></p>
112
+
113
+ The optional Mac app manages the local service, versions, plugins and diagnostics.
114
+ Use **Providers** to navigate Claude and Antigravity; their accounts and quota
115
+ windows stay separate. Request history helps track failures and activity across
116
+ the service.
117
+
118
+ The desktop preview targets **macOS on Apple Silicon**. The first downloadable
119
+ release is being prepared; use the [source instructions](apps/desktop/README.md#run-locally)
120
+ in the meantime. To try Antigravity, connect the app to a Meridian 1.74.0+ service configured as shown above.
121
+ Older Meridian versions do not include Antigravity.
114
122
 
115
- Meridian uses the SDK’s authentication and request execution. Account access,
116
- model availability and usage limits still depend on your provider account.
123
+ Headless use remains supported. The npm package does not install Electron;
124
+ Docker, Nix and existing service managers can run the same server.
117
125
 
118
- ## Bring your agent
126
+ ## How it works
119
127
 
120
- Setup guides cover **OpenCode, Pi, Claude Code, Codex CLI, Cline, Aider, Crush,
121
- ForgeCode, Droid, Open WebUI, Cherry Studio, Polytoken, Jcode and Prime Agent**.
122
- Compatibility varies by client and version; see the
123
- [tested-agent matrix](docs/agents.md#compatibility-at-a-glance) for evidence and
124
- limitations. Prime Agent concurrent subagents remain unsuitable for unattended
125
- or usage-sensitive work. Continue is unverified.
128
+ <p align="center">
129
+ <img src="assets/how-it-works.svg" alt="Pi, OpenCode and other supported clients connect to Meridian. Claude uses the Agent SDK; Antigravity uses the official agy CLI. Each provider uses its own signed-in account." width="920" />
130
+ </p>
126
131
 
127
- The desktop **Plugins** page installs the four official scrub plugins. Client
128
- connection setup is still separate; installing a scrub plugin does not configure
129
- its corresponding client. [Plugin guide →](docs/plugins.md)
132
+ Meridian translates supported client requests at the provider boundary. It keeps
133
+ Claude-specific account routing and cache behavior separate from Antigravity’s
134
+ CLI sessions and permissions. Antigravity generation stays on the signed-in CLI;
135
+ there is no Google API-key or model-SDK fallback.
130
136
 
131
137
  ## Documentation
132
138
 
133
- | Start here | What you’ll find |
139
+ | Guide | Contents |
134
140
  | --- | --- |
135
- | [Desktop guide](apps/desktop/README.md) | Setup, service ownership, updates, plugins and platform status |
136
- | [Agent setup](docs/agents.md) | Client configuration and compatibility notes |
137
- | [Configuration](docs/configuration.md) | CLI, environment variables, endpoints and API-key protection |
138
- | [Accounts & profiles](docs/profiles.md) | Sign-in, multiple accounts and session routing |
141
+ | [Antigravity setup](docs/antigravity.md) | Models, client tools, attachments, permissions and setup |
142
+ | [Antigravity support & recovery](docs/antigravity-support.md) | Feature status, unfinished work and recovery limits |
143
+ | [Claude client setup](docs/agents.md) | Compatibility matrix and client configuration |
144
+ | [Desktop](apps/desktop/README.md) | Local preview, service ownership and platform status |
145
+ | [Configuration](docs/configuration.md) | CLI, environment variables and API-key protection |
146
+ | [Accounts & profiles](docs/profiles.md) | Claude sign-in, multiple accounts and routing |
139
147
  | [Deployment](docs/deployment.md) | Docker, Nix and headless services |
140
148
  | [Plugins](docs/plugins.md) | Official packages and plugin configuration |
141
149
  | [Monitoring](MONITORING.md) | Usage, request diagnostics and prompt caching |
142
150
  | [Development](docs/development.md) | Build, test and programmatic API |
143
- | [Desktop releases](docs/desktop-releases.md) | Signing, notarization and download publication |
151
+ | [Live verification](E2E.md) | Tested versions, flows and known failures |
152
+
153
+ ## Contributing
144
154
 
145
- ## Contribute
155
+ [Report an issue](https://github.com/rynfar/meridian/issues), open a PR or join
156
+ [Discord](https://discord.gg/jP2a2Z92NZ). Read [AGENTS.md](AGENTS.md),
157
+ [ARCHITECTURE.md](ARCHITECTURE.md) and [E2E.md](E2E.md) before changing behavior.
158
+ For Antigravity reports, include your OS, `agy` and client versions, the failing
159
+ flow and redacted diagnostics.
146
160
 
147
- [Report a bug or suggest a feature](https://github.com/rynfar/meridian/issues),
148
- open a PR, or join [Discord](https://discord.gg/jP2a2Z92NZ).
149
- Read [AGENTS.md](AGENTS.md), [ARCHITECTURE.md](ARCHITECTURE.md) and
150
- [E2E.md](E2E.md) before changing behavior. Meridian is [MIT licensed](https://opensource.org/license/mit).
161
+ Meridian is [MIT licensed](https://opensource.org/license/mit). Claude and Antigravity are trademarks of
162
+ their respective owners. [Provider asset credits](assets/providers/README.md).
package/assets/banner.svg CHANGED
@@ -1,53 +1,28 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 400" fill="none">
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="1200" height="340" viewBox="0 0 1200 340" role="img" aria-labelledby="title desc">
2
+ <title id="title">Meridian</title>
3
+ <desc id="desc">Claude and Antigravity, in your tools.</desc>
2
4
  <defs>
3
- <linearGradient id="bg" x1="0%" y1="0%" x2="100%" y2="100%">
4
- <stop offset="0%" stop-color="#0d1117"/>
5
- <stop offset="100%" stop-color="#161b22"/>
6
- </linearGradient>
7
- <linearGradient id="mGrad" x1="0" y1="0" x2="0" y2="190" gradientUnits="userSpaceOnUse">
5
+ <linearGradient id="brand" x1="0" y1="0" x2="0" y2="1">
8
6
  <stop stop-color="#58a6ff"/>
9
7
  <stop offset="1" stop-color="#bc8cff"/>
10
8
  </linearGradient>
11
- <radialGradient id="glowBlue" cx="0.25" cy="0.1" r="0.6">
12
- <stop stop-color="#58a6ff" stop-opacity="0.10"/>
9
+ <radialGradient id="wash">
10
+ <stop stop-color="#58a6ff" stop-opacity=".12"/>
13
11
  <stop offset="1" stop-color="#58a6ff" stop-opacity="0"/>
14
12
  </radialGradient>
15
- <radialGradient id="glowViolet" cx="0.85" cy="0.95" r="0.6">
16
- <stop stop-color="#bc8cff" stop-opacity="0.10"/>
17
- <stop offset="1" stop-color="#bc8cff" stop-opacity="0"/>
18
- </radialGradient>
19
13
  </defs>
20
-
21
- <rect width="1200" height="400" rx="16" fill="url(#bg)"/>
22
- <rect width="1200" height="400" rx="16" fill="url(#glowBlue)"/>
23
- <rect width="1200" height="400" rx="16" fill="url(#glowViolet)"/>
24
- <rect x="0.5" y="0.5" width="1199" height="399" rx="15.5" stroke="#30363d"/>
25
-
26
- <!-- Subtle dot grid -->
27
- <g opacity="0.06" fill="#58a6ff">
28
- <circle cx="100" cy="100" r="1.5"/><circle cx="200" cy="100" r="1.5"/><circle cx="300" cy="100" r="1.5"/>
29
- <circle cx="100" cy="200" r="1.5"/><circle cx="200" cy="200" r="1.5"/><circle cx="300" cy="200" r="1.5"/>
30
- <circle cx="100" cy="300" r="1.5"/><circle cx="200" cy="300" r="1.5"/><circle cx="300" cy="300" r="1.5"/>
31
- <circle cx="900" cy="100" r="1.5"/><circle cx="1000" cy="100" r="1.5"/><circle cx="1100" cy="100" r="1.5"/>
32
- <circle cx="900" cy="200" r="1.5"/><circle cx="1000" cy="200" r="1.5"/><circle cx="1100" cy="200" r="1.5"/>
33
- <circle cx="900" cy="300" r="1.5"/><circle cx="1000" cy="300" r="1.5"/><circle cx="1100" cy="300" r="1.5"/>
14
+ <rect width="1200" height="340" rx="20" fill="#0d1117"/>
15
+ <ellipse cx="280" cy="70" rx="600" ry="340" fill="url(#wash)"/>
16
+ <g transform="translate(128 86) scale(.32)" fill="none" stroke="url(#brand)">
17
+ <circle cx="256" cy="256" r="200" stroke-width="28"/>
18
+ <ellipse cx="256" cy="256" rx="84" ry="200" stroke-width="20"/>
19
+ <path d="M56 256h400" stroke-width="16" opacity=".4"/>
20
+ <circle cx="256" cy="56" r="36" fill="#58a6ff" stroke="none"/>
21
+ <circle cx="256" cy="456" r="36" fill="#bc8cff" stroke="none"/>
34
22
  </g>
35
-
36
- <!-- Logo mark gradient globe -->
37
- <g transform="translate(365, 105)">
38
- <circle cx="95" cy="95" r="75" stroke="url(#mGrad)" stroke-width="10"/>
39
- <ellipse cx="95" cy="95" rx="31" ry="75" stroke="url(#mGrad)" stroke-width="7" opacity="0.8"/>
40
- <path d="M20 95h150" stroke="url(#mGrad)" stroke-width="6" opacity="0.4"/>
41
- <circle cx="95" cy="20" r="13" fill="#58a6ff"/>
42
- <circle cx="95" cy="170" r="13" fill="#bc8cff"/>
23
+ <g font-family="-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif">
24
+ <text x="348" y="139" fill="#e6edf3" font-size="48" font-weight="700" letter-spacing="10">MERIDIAN</text>
25
+ <text x="348" y="195" fill="#e6edf3" font-size="30">Claude &amp; Antigravity, in your tools.</text>
26
+ <text x="348" y="238" fill="#8b949e" font-size="20">Subscription-backed. Local API. Your client.</text>
43
27
  </g>
44
-
45
- <!-- Wordmark -->
46
- <text x="600" y="195" font-family="Inter, -apple-system, 'SF Pro Display', 'Segoe UI', Helvetica, Arial, sans-serif" font-size="72" font-weight="700" fill="#e6edf3" letter-spacing="10">MERIDIAN</text>
47
-
48
- <!-- Tagline -->
49
- <text x="603" y="240" font-family="Inter, -apple-system, 'SF Pro Display', 'Segoe UI', Helvetica, Arial, sans-serif" font-size="17" font-weight="600" fill="#58a6ff" letter-spacing="3">HARNESS CLAUDE, YOUR WAY.</text>
50
-
51
- <!-- Subtitle -->
52
- <text x="603" y="278" font-family="Inter, -apple-system, 'SF Pro Display', 'Segoe UI', Helvetica, Arial, sans-serif" font-size="14" font-weight="300" fill="#8b949e">Local Anthropic API powered by the Claude Agent SDK</text>
53
28
  </svg>
@@ -1,87 +1,41 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 920 310" fill="none">
2
- <style>
3
- .title { font-family: 'Inter', -apple-system, sans-serif; font-size: 20px; font-weight: 700; fill: #58a6ff; }
4
- .box-label { font-family: 'Inter', -apple-system, sans-serif; font-size: 13px; font-weight: 600; fill: #e6edf3; }
5
- .box-sub { font-family: 'JetBrains Mono', 'SF Mono', monospace; font-size: 10px; fill: #58a6ff; }
6
- .box-detail { font-family: 'Inter', -apple-system, sans-serif; font-size: 10px; fill: #8b949e; }
7
- .tag { font-family: 'Inter', -apple-system, sans-serif; font-size: 9px; font-weight: 600; fill: #6e7681; letter-spacing: 1px; }
8
- .step-num { font-family: 'Inter', -apple-system, sans-serif; font-size: 10px; font-weight: 700; }
9
- .footer { font-family: 'Inter', -apple-system, sans-serif; font-size: 11px; fill: #6e7681; }
10
- .arrow-label { font-family: 'Inter', -apple-system, sans-serif; font-size: 9px; fill: #6e7681; text-anchor: middle; }
11
- </style>
12
-
13
- <rect width="920" height="310" rx="16" fill="#0d1117"/>
14
- <rect x="0.5" y="0.5" width="919" height="309" rx="15.5" stroke="#30363d" stroke-width="1" fill="none"/>
15
-
16
- <text class="title" x="460" y="38" text-anchor="middle">How it works</text>
17
-
18
- <!-- ═══ STEP 1: YOUR TOOLS ═══ -->
19
- <rect x="32" y="64" width="156" height="140" rx="12" fill="#161b22" stroke="#30363d" stroke-width="1"/>
20
- <rect x="44" y="54" width="18" height="18" rx="9" fill="#58a6ff"/>
21
- <text class="step-num" x="53" y="67" text-anchor="middle" fill="#0d1117">1</text>
22
- <text class="box-label" x="110" y="100" text-anchor="middle">Your tools</text>
23
- <text class="box-detail" x="110" y="122" text-anchor="middle">OpenCode, Cline</text>
24
- <text class="box-detail" x="110" y="136" text-anchor="middle">Continue, Crush, aider</text>
25
- <text class="box-detail" x="110" y="150" text-anchor="middle">or any Anthropic client</text>
26
- <text class="tag" x="110" y="192" text-anchor="middle">ANTHROPIC API FORMAT</text>
27
-
28
- <!-- ═══ ARROWS 1 ↔ 2 ═══ -->
29
- <line x1="200" y1="122" x2="250" y2="122" stroke="#58a6ff" stroke-width="1.5"/>
30
- <polygon points="248,118 256,122 248,126" fill="#58a6ff"/>
31
- <text class="arrow-label" x="226" y="114">request</text>
32
- <line x1="250" y1="142" x2="200" y2="142" stroke="#484f58" stroke-width="1"/>
33
- <polygon points="202,138 194,142 202,146" fill="#484f58"/>
34
- <text class="arrow-label" x="226" y="162">response</text>
35
-
36
- <!-- ═══ STEP 2: MERIDIAN ═══ -->
37
- <rect x="264" y="64" width="156" height="140" rx="12" fill="#161b22" stroke="#58a6ff" stroke-width="1.5"/>
38
- <rect x="276" y="54" width="18" height="18" rx="9" fill="#58a6ff"/>
39
- <text class="step-num" x="285" y="67" text-anchor="middle" fill="#0d1117">2</text>
40
- <text class="box-label" x="342" y="100" text-anchor="middle">Meridian</text>
41
- <text class="box-sub" x="342" y="118" text-anchor="middle">localhost:3456</text>
42
- <text class="box-detail" x="342" y="140" text-anchor="middle">Local proxy server</text>
43
- <text class="box-detail" x="342" y="154" text-anchor="middle">Translates API calls</text>
44
- <text class="box-detail" x="342" y="168" text-anchor="middle">to the Claude Agent SDK</text>
45
- <text class="tag" x="342" y="192" text-anchor="middle">BRIDGES THE GAP</text>
46
-
47
- <!-- ═══ ARROWS 2 ↔ 3 ═══ -->
48
- <line x1="432" y1="122" x2="482" y2="122" stroke="#58a6ff" stroke-width="1.5"/>
49
- <polygon points="480,118 488,122 480,126" fill="#58a6ff"/>
50
- <text class="arrow-label" x="458" y="114">SDK call</text>
51
- <line x1="482" y1="142" x2="432" y2="142" stroke="#484f58" stroke-width="1"/>
52
- <polygon points="434,138 426,142 434,146" fill="#484f58"/>
53
- <text class="arrow-label" x="458" y="162">result</text>
54
-
55
- <!-- ═══ STEP 3: CLAUDE AGENT SDK ═══ -->
56
- <rect x="496" y="64" width="172" height="140" rx="12" fill="#161b22" stroke="#30363d" stroke-width="1"/>
57
- <rect x="508" y="54" width="18" height="18" rx="9" fill="#58a6ff"/>
58
- <text class="step-num" x="517" y="67" text-anchor="middle" fill="#0d1117">3</text>
59
- <text class="box-label" x="582" y="100" text-anchor="middle">Claude Agent SDK</text>
60
- <text class="box-sub" x="582" y="118" text-anchor="middle">@anthropic-ai/claude-agent-sdk</text>
61
- <text class="box-detail" x="582" y="140" text-anchor="middle">Official Anthropic SDK</text>
62
- <text class="box-detail" x="582" y="154" text-anchor="middle">Handles auth + sessions</text>
63
- <text class="tag" x="582" y="192" text-anchor="middle">ANTHROPIC'S OWN SDK</text>
64
-
65
- <!-- ═══ ARROWS 3 ↔ 4 ═══ -->
66
- <line x1="680" y1="122" x2="726" y2="122" stroke="#58a6ff" stroke-width="1.5"/>
67
- <polygon points="724,118 732,122 724,126" fill="#58a6ff"/>
68
- <text class="arrow-label" x="704" y="114">API call</text>
69
- <line x1="726" y1="142" x2="680" y2="142" stroke="#484f58" stroke-width="1"/>
70
- <polygon points="682,138 674,142 682,146" fill="#484f58"/>
71
- <text class="arrow-label" x="704" y="162">stream</text>
72
-
73
- <!-- ═══ STEP 4: CLAUDE ═══ -->
74
- <rect x="740" y="64" width="140" height="140" rx="12" fill="#161b22" stroke="#30363d" stroke-width="1"/>
75
- <rect x="752" y="54" width="18" height="18" rx="9" fill="#58a6ff"/>
76
- <text class="step-num" x="761" y="67" text-anchor="middle" fill="#0d1117">4</text>
77
- <text class="box-label" x="810" y="100" text-anchor="middle">Claude</text>
78
- <text class="box-sub" x="810" y="118" text-anchor="middle">api.anthropic.com</text>
79
- <text class="box-detail" x="810" y="140" text-anchor="middle">Fable, Opus, Sonnet</text>
80
- <text class="box-detail" x="810" y="154" text-anchor="middle">Haiku, extended thinking</text>
81
- <text class="tag" x="810" y="192" text-anchor="middle">YOUR SUBSCRIPTION</text>
82
-
83
- <!-- ═══ BOTTOM ═══ -->
84
- <line x1="60" y1="246" x2="860" y2="246" stroke="#30363d" stroke-width="1"/>
85
- <text class="footer" x="460" y="274" text-anchor="middle">No API keys needed — authenticates through your existing Claude Code / Max subscription</text>
86
-
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="920" height="300" viewBox="0 0 920 300" role="img" aria-labelledby="title desc">
2
+ <title id="title">Two providers, one local bridge</title>
3
+ <desc id="desc">Clients connect to Meridian, which routes Claude through the Agent SDK and Antigravity through the official agy CLI.</desc>
4
+ <defs>
5
+ <marker id="arrow" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="6" markerHeight="6" orient="auto">
6
+ <path d="M0 0 10 5 0 10" fill="none" stroke="#8b949e"/>
7
+ </marker>
8
+ </defs>
9
+ <rect width="920" height="300" rx="16" fill="#0d1117"/>
10
+ <g fill="#161b22" stroke="#30363d">
11
+ <rect x="32" y="97" width="210" height="106" rx="12"/>
12
+ <rect x="304" y="97" width="214" height="106" rx="12"/>
13
+ <rect x="590" y="32" width="298" height="106" rx="12"/>
14
+ <rect x="590" y="162" width="298" height="106" rx="12"/>
15
+ </g>
16
+ <g fill="none" stroke="#8b949e" stroke-width="1.5" marker-end="url(#arrow)">
17
+ <path d="M242 150h57"/>
18
+ <path d="M518 150h31V85h36"/>
19
+ <path d="M549 150v65h36"/>
20
+ </g>
21
+ <g font-family="-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif" text-anchor="middle">
22
+ <g fill="#e6edf3" font-size="22" font-weight="600">
23
+ <text x="137" y="137">Your client</text>
24
+ <text x="411" y="137">Meridian</text>
25
+ <text x="739" y="68">Claude</text>
26
+ <text x="739" y="198">Antigravity</text>
27
+ </g>
28
+ <g fill="#8b949e" font-size="15">
29
+ <text x="137" y="164">Pi · OpenCode</text>
30
+ <text x="137" y="185">and supported clients</text>
31
+ <text x="411" y="164">Local API &amp; dashboard</text>
32
+ <text x="411" y="185">Provider-aware routing</text>
33
+ <text x="739" y="119">Claude account</text>
34
+ <text x="739" y="249">Signed-in Google account</text>
35
+ </g>
36
+ <g fill="#bc8cff" font-size="16">
37
+ <text x="739" y="94">Official Agent SDK</text>
38
+ <text x="739" y="224">Official agy CLI</text>
39
+ </g>
40
+ </g>
87
41
  </svg>
@@ -0,0 +1,10 @@
1
+ # Provider marks
2
+
3
+ Original provider assets, downloaded September 20, 2026:
4
+
5
+ - [Claude app icon](https://claude.ai/images/claude_app_icon.png), Anthropic.
6
+ - [Antigravity full-color icon](https://antigravity.google/assets/image/brand/antigravity-icon__full-color.png), Google; [press assets](https://antigravity.google/press).
7
+
8
+ These marks identify the supported providers. They remain the property of their
9
+ respective owners and are not covered by Meridian’s MIT license. Meridian is an
10
+ independent project.
Binary file
Binary file