@rynfar/meridian 1.37.5 → 1.37.6

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.
package/README.md CHANGED
@@ -149,14 +149,14 @@ The Claude Code SDK provides programmatic access to Claude. But your favorite co
149
149
  ## Features
150
150
 
151
151
  - **Standard Anthropic API** — drop-in compatible with any tool that supports a custom `base_url`
152
- - **OpenAI-compatible API** — `/v1/chat/completions` and `/v1/models` for tools that only speak the OpenAI protocol (Open WebUI, Continue, etc.) — no LiteLLM needed
152
+ - **OpenAI-compatible API** — `/v1/chat/completions` and `/v1/models` for tools that only speak the OpenAI protocol (Open WebUI, Continue, etc.) — no LiteLLM needed, including `image_url` support for data URLs
153
153
  - **Session management** — conversations persist across requests, survive compaction and undo, resume after proxy restarts
154
154
  - **Streaming** — full SSE streaming with MCP tool filtering
155
155
  - **Concurrent sessions** — run parent and subagent requests in parallel
156
156
  - **Subagent model selection** — primary agents get 1M context; subagents get 200k, preserving rate-limit budget
157
157
  - **Auto token refresh** — expired OAuth tokens are refreshed automatically; requests continue without interruption
158
158
  - **Passthrough mode** — forward tool calls to the client instead of executing internally
159
- - **Multimodal** — images, documents, and file attachments pass through to Claude
159
+ - **Multimodal** — images, documents, file attachments, and multimodal tool results pass through to Claude
160
160
  - **Multi-profile** — switch between Claude accounts instantly, no restart needed
161
161
  - **Telemetry dashboard** — real-time performance metrics at `/telemetry`, including token usage and prompt cache efficiency ([`MONITORING.md`](MONITORING.md))
162
162
  - **Telemetry persistence** — opt-in SQLite storage for telemetry data that survives proxy restarts, with configurable retention
@@ -409,6 +409,9 @@ Meridian speaks the OpenAI protocol natively — no LiteLLM or translation proxy
409
409
 
410
410
  **`POST /v1/chat/completions`** — accepts OpenAI chat format, returns OpenAI completion format (streaming and non-streaming)
411
411
 
412
+ - `image_url` parts are supported when provided as **data URLs** (`data:image/...;base64,...`)
413
+ - multimodal tool flows where a tool returns `tool_result.content = [text, image]` are preserved through the structured multimodal path instead of being flattened to text
414
+
412
415
  **`GET /v1/models`** — returns available Claude models in OpenAI format
413
416
 
414
417
  Point any OpenAI-compatible tool at `http://127.0.0.1:3456` with any API key value:
@@ -8904,7 +8904,67 @@ function isClosedControllerError(error) {
8904
8904
  function extractOpenAiContent(content) {
8905
8905
  if (typeof content === "string")
8906
8906
  return content;
8907
- return content.filter((p) => p.type === "text" && typeof p.text === "string").map((p) => p.text).join("");
8907
+ return content.map((p) => {
8908
+ if (p.type === "text" && typeof p.text === "string")
8909
+ return p.text;
8910
+ if (p.type === "image_url")
8911
+ return "[Image attached]";
8912
+ return "";
8913
+ }).filter(Boolean).join("");
8914
+ }
8915
+ function parseDataUrlImage(url) {
8916
+ const match2 = /^data:(image\/[a-zA-Z0-9.+-]+);base64,(.+)$/s.exec(url);
8917
+ if (!match2)
8918
+ return null;
8919
+ const mediaType = match2[1];
8920
+ const data = match2[2];
8921
+ if (!mediaType || !data)
8922
+ return null;
8923
+ return {
8924
+ type: "image",
8925
+ source: {
8926
+ type: "base64",
8927
+ media_type: mediaType,
8928
+ data
8929
+ }
8930
+ };
8931
+ }
8932
+ function translateOpenAiContentToAnthropic(content) {
8933
+ if (typeof content === "string")
8934
+ return content;
8935
+ const parts = [];
8936
+ for (const part of content) {
8937
+ if (part.type === "text" && typeof part.text === "string") {
8938
+ parts.push({ type: "text", text: part.text });
8939
+ continue;
8940
+ }
8941
+ if (part.type === "image_url") {
8942
+ const url = part.image_url?.url;
8943
+ if (typeof url === "string") {
8944
+ const parsed = parseDataUrlImage(url);
8945
+ if (parsed) {
8946
+ parts.push(parsed);
8947
+ continue;
8948
+ }
8949
+ }
8950
+ parts.push({ type: "text", text: "[Unsupported image_url omitted: only data URLs are currently supported]" });
8951
+ }
8952
+ }
8953
+ if (parts.length === 1 && parts[0]?.type === "text") {
8954
+ return parts[0].text;
8955
+ }
8956
+ return parts;
8957
+ }
8958
+ function summarizeAnthropicContent(content) {
8959
+ if (typeof content === "string")
8960
+ return content;
8961
+ return content.map((part) => {
8962
+ if (part.type === "text")
8963
+ return part.text;
8964
+ if (part.type === "image")
8965
+ return "[Image attached]";
8966
+ return "";
8967
+ }).filter(Boolean).join("");
8908
8968
  }
8909
8969
  function translateOpenAiToAnthropic(body) {
8910
8970
  const messages = body.messages ?? [];
@@ -8920,7 +8980,7 @@ function translateOpenAiToAnthropic(body) {
8920
8980
  } else {
8921
8981
  turns.push({
8922
8982
  role: msg.role === "assistant" ? "assistant" : "user",
8923
- content: text
8983
+ content: translateOpenAiContentToAnthropic(msg.content ?? "")
8924
8984
  });
8925
8985
  }
8926
8986
  }
@@ -8928,7 +8988,7 @@ function translateOpenAiToAnthropic(body) {
8928
8988
  `);
8929
8989
  let messagesToSend = turns;
8930
8990
  if (turns.length > 1) {
8931
- const history = turns.slice(0, -1).map((m) => `${m.role}: ${m.content}`).join(`
8991
+ const history = turns.slice(0, -1).map((m) => `${m.role}: ${summarizeAnthropicContent(m.content)}`).join(`
8932
8992
  `);
8933
8993
  const historyBlock = `<conversation_history>
8934
8994
  ${history}
@@ -16395,6 +16455,58 @@ function storeSession(sessionId, messages, claudeSessionId, workingDirectory, sd
16395
16455
  // src/proxy/server.ts
16396
16456
  var exec3 = promisify3(execCallback2);
16397
16457
  var claudeExecutable = "";
16458
+ var MULTIMODAL_TYPES = new Set(["image", "document", "file"]);
16459
+ function hasMultimodalContent(content) {
16460
+ if (!Array.isArray(content))
16461
+ return false;
16462
+ return content.some((block) => {
16463
+ if (!block || typeof block !== "object")
16464
+ return false;
16465
+ if (MULTIMODAL_TYPES.has(block.type))
16466
+ return true;
16467
+ if (block.type === "tool_result")
16468
+ return hasMultimodalContent(block.content);
16469
+ return false;
16470
+ });
16471
+ }
16472
+ function stripCacheControlDeep(content) {
16473
+ if (!Array.isArray(content))
16474
+ return content;
16475
+ return content.map((block) => {
16476
+ if (!block || typeof block !== "object")
16477
+ return block;
16478
+ const { cache_control, ...rest } = block;
16479
+ if (block.type === "tool_result" && Array.isArray(block.content)) {
16480
+ return {
16481
+ ...rest,
16482
+ content: stripCacheControlDeep(block.content)
16483
+ };
16484
+ }
16485
+ return rest;
16486
+ });
16487
+ }
16488
+ function normalizeStructuredUserContent(content) {
16489
+ if (!Array.isArray(content))
16490
+ return content;
16491
+ const normalized = [];
16492
+ for (const block of content) {
16493
+ if (!block || typeof block !== "object")
16494
+ continue;
16495
+ if (block.type === "tool_result" && Array.isArray(block.content) && hasMultimodalContent(block.content)) {
16496
+ normalized.push(...normalizeStructuredUserContent(block.content));
16497
+ continue;
16498
+ }
16499
+ if (block.type === "tool_result" && Array.isArray(block.content)) {
16500
+ normalized.push({
16501
+ ...block,
16502
+ content: normalizeStructuredUserContent(block.content)
16503
+ });
16504
+ continue;
16505
+ }
16506
+ normalized.push(block);
16507
+ }
16508
+ return normalized;
16509
+ }
16398
16510
  function flattenAssistantContent(content) {
16399
16511
  if (typeof content === "string")
16400
16512
  return content;
@@ -16431,16 +16543,15 @@ function flattenUserContent(content, sanitizeOpts = {}) {
16431
16543
  }).filter(Boolean).join(`
16432
16544
  `);
16433
16545
  }
16434
- function buildFreshPrompt(messages, stripCacheControl, sanitizeOpts = {}) {
16435
- const MULTIMODAL_TYPES = new Set(["image", "document", "file"]);
16436
- const hasMultimodal = messages.some((m) => Array.isArray(m.content) && m.content.some((b) => MULTIMODAL_TYPES.has(b.type)));
16546
+ function buildFreshPrompt(messages, sanitizeOpts = {}) {
16547
+ const hasMultimodal = messages.some((m) => hasMultimodalContent(m.content));
16437
16548
  if (hasMultimodal) {
16438
16549
  const structured = [];
16439
16550
  for (const m of messages) {
16440
16551
  if (m.role === "user") {
16441
16552
  structured.push({
16442
16553
  type: "user",
16443
- message: { role: "user", content: stripCacheControl(m.content) },
16554
+ message: { role: "user", content: normalizeStructuredUserContent(stripCacheControlDeep(m.content)) },
16444
16555
  parent_tool_use_id: null
16445
16556
  });
16446
16557
  } else {
@@ -16567,17 +16678,7 @@ function createProxyServer(config = {}) {
16567
16678
  return withClaudeLogContext({ requestId: requestMeta.requestId, endpoint: requestMeta.endpoint }, async () => {
16568
16679
  const adapter = detectAdapter(c);
16569
16680
  try {
16570
- let stripCacheControl = function(content) {
16571
- if (!Array.isArray(content))
16572
- return content;
16573
- return content.map((block) => {
16574
- if (block.cache_control) {
16575
- const { cache_control, ...rest } = block;
16576
- return rest;
16577
- }
16578
- return block;
16579
- });
16580
- }, makePrompt = function() {
16681
+ let makePrompt = function() {
16581
16682
  if (structuredMessages) {
16582
16683
  const msgs = structuredMessages;
16583
16684
  return async function* () {
@@ -16717,8 +16818,7 @@ function createProxyServer(config = {}) {
16717
16818
  } else {
16718
16819
  messagesToConvert = allMessages;
16719
16820
  }
16720
- const MULTIMODAL_TYPES = new Set(["image", "document", "file"]);
16721
- const hasMultimodal = messagesToConvert?.some((m) => Array.isArray(m.content) && m.content.some((b) => MULTIMODAL_TYPES.has(b.type)));
16821
+ const hasMultimodal = messagesToConvert?.some((m) => hasMultimodalContent(m.content));
16722
16822
  let structuredMessages;
16723
16823
  let textPrompt;
16724
16824
  if (hasMultimodal) {
@@ -16728,7 +16828,7 @@ function createProxyServer(config = {}) {
16728
16828
  if (m.role === "user") {
16729
16829
  structuredMessages.push({
16730
16830
  type: "user",
16731
- message: { role: "user", content: stripCacheControl(m.content) },
16831
+ message: { role: "user", content: normalizeStructuredUserContent(stripCacheControlDeep(m.content)) },
16732
16832
  parent_tool_use_id: null
16733
16833
  });
16734
16834
  }
@@ -16738,7 +16838,7 @@ function createProxyServer(config = {}) {
16738
16838
  if (m.role === "user") {
16739
16839
  structuredMessages.push({
16740
16840
  type: "user",
16741
- message: { role: "user", content: stripCacheControl(m.content) },
16841
+ message: { role: "user", content: normalizeStructuredUserContent(stripCacheControlDeep(m.content)) },
16742
16842
  parent_tool_use_id: null
16743
16843
  });
16744
16844
  } else {
@@ -16912,7 +17012,7 @@ function createProxyServer(config = {}) {
16912
17012
  for (let i = 0;i < allMessages.length; i++)
16913
17013
  sdkUuidMap.push(null);
16914
17014
  yield* query(buildQueryOptions({
16915
- prompt: buildFreshPrompt(allMessages, stripCacheControl, sanitizeOpts),
17015
+ prompt: buildFreshPrompt(allMessages, sanitizeOpts),
16916
17016
  model,
16917
17017
  workingDirectory,
16918
17018
  systemContext,
@@ -17281,7 +17381,7 @@ Subprocess stderr: ${stderrOutput}`;
17281
17381
  for (let i = 0;i < allMessages.length; i++)
17282
17382
  sdkUuidMap.push(null);
17283
17383
  yield* query(buildQueryOptions({
17284
- prompt: buildFreshPrompt(allMessages, stripCacheControl, sanitizeOpts),
17384
+ prompt: buildFreshPrompt(allMessages, sanitizeOpts),
17285
17385
  model,
17286
17386
  workingDirectory,
17287
17387
  systemContext,
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  startProxyServer
4
- } from "./cli-yahkdc3h.js";
4
+ } from "./cli-z5r7ptsm.js";
5
5
  import"./cli-pr79d7nw.js";
6
6
  import"./cli-rtab0qa6.js";
7
7
  import"./cli-m9pfb7h9.js";
@@ -16,9 +16,22 @@
16
16
  * and don't benefit from Meridian's session resumption.
17
17
  */
18
18
  export type OpenAiRole = "system" | "user" | "assistant";
19
+ export interface OpenAiTextPart {
20
+ type: "text";
21
+ text?: string;
22
+ }
23
+ export interface OpenAiImageUrlPart {
24
+ type: "image_url";
25
+ image_url?: {
26
+ url?: string;
27
+ };
28
+ }
19
29
  export interface OpenAiContentPart {
20
30
  type: string;
21
31
  text?: string;
32
+ image_url?: {
33
+ url?: string;
34
+ };
22
35
  }
23
36
  export interface OpenAiMessage {
24
37
  role: OpenAiRole;
@@ -33,9 +46,22 @@ export interface OpenAiChatRequest {
33
46
  temperature?: number;
34
47
  top_p?: number;
35
48
  }
49
+ export interface AnthropicTextBlock {
50
+ type: "text";
51
+ text: string;
52
+ }
53
+ export interface AnthropicImageBlock {
54
+ type: "image";
55
+ source: {
56
+ type: "base64";
57
+ media_type: string;
58
+ data: string;
59
+ };
60
+ }
61
+ export type AnthropicInputContentBlock = AnthropicTextBlock | AnthropicImageBlock;
36
62
  export interface AnthropicMessage {
37
63
  role: "user" | "assistant";
38
- content: string;
64
+ content: string | AnthropicInputContentBlock[];
39
65
  }
40
66
  export interface AnthropicRequestBody {
41
67
  model: string;
@@ -103,6 +129,8 @@ export interface OpenAiModel {
103
129
  /**
104
130
  * Normalise an OpenAI message content field to a plain string.
105
131
  * Handles both string content and structured content arrays.
132
+ * Non-text blocks are summarized so history packing does not silently erase
133
+ * multimodal context.
106
134
  */
107
135
  export declare function extractOpenAiContent(content: string | OpenAiContentPart[]): string;
108
136
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/proxy/openai.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAMH,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAA;AAExD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,UAAU,CAAA;IAChB,OAAO,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAAA;CACtC;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAA;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAA;IAC1B,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,gBAAgB,EAAE,CAAA;IAC5B,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,qBAAqB,EAAE,CAAA;IACjC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,cAAc,CAAA;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,uBAAuB,CAAA;IAC/B,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,KAAK,CAAC;QACb,KAAK,EAAE,CAAC,CAAA;QACR,KAAK,EAAE;YAAE,IAAI,CAAC,EAAE,WAAW,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;QAC/C,aAAa,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAAA;KACxC,CAAC,CAAA;CACH;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,iBAAiB,CAAA;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,KAAK,CAAC;QACb,KAAK,EAAE,CAAC,CAAA;QACR,OAAO,EAAE;YAAE,IAAI,EAAE,WAAW,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAA;QAC/C,aAAa,EAAE,MAAM,GAAG,QAAQ,CAAA;KACjC,CAAC,CAAA;IACF,KAAK,EAAE;QACL,aAAa,EAAE,MAAM,CAAA;QACrB,iBAAiB,EAAE,MAAM,CAAA;QACzB,YAAY,EAAE,MAAM,CAAA;KACrB,CAAA;CACF;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,EAAE,MAAM,CAAA;CACvB;AAMD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,EAAE,GAAG,MAAM,CAMlF;AAMD;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,iBAAiB,GAAG,oBAAoB,GAAG,IAAI,CAmD/F;AAcD;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,iBAAiB,EAC3B,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,GACd,gBAAgB,CAyBlB;AAMD,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC9D,OAAO,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAC1B;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,iBAAiB,EACxB,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,GACd,iBAAiB,GAAG,IAAI,CAyC1B;AAMD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,iBAAiB,EAAE,OAAO,EAAE,GAAG,SAAgC,GAAG,WAAW,EAAE,CA2B7G"}
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/proxy/openai.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/proxy/server.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AACtE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,CAAA;AA0BvD,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,oBAAoB,EACpB,KAAK,aAAa,EAEnB,MAAM,mBAAmB,CAAA;AAG1B,OAAO,EAA+B,iBAAiB,EAAE,mBAAmB,EAAsC,MAAM,iBAAiB,CAAA;AAGzI,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,oBAAoB,EAAE,CAAA;AAChE,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,CAAA;AACjD,YAAY,EAAE,aAAa,EAAE,CAAA;AAgL7B,wBAAgB,iBAAiB,CAAC,MAAM,GAAE,OAAO,CAAC,WAAW,CAAM,GAAG,WAAW,CAy6DhF;AAED,wBAAsB,gBAAgB,CAAC,MAAM,GAAE,OAAO,CAAC,WAAW,CAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAiEhG"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/proxy/server.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AACtE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,CAAA;AA0BvD,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,oBAAoB,EACpB,KAAK,aAAa,EAEnB,MAAM,mBAAmB,CAAA;AAG1B,OAAO,EAA+B,iBAAiB,EAAE,mBAAmB,EAAsC,MAAM,iBAAiB,CAAA;AAGzI,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,oBAAoB,EAAE,CAAA;AAChE,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,CAAA;AACjD,YAAY,EAAE,aAAa,EAAE,CAAA;AA8N7B,wBAAgB,iBAAiB,CAAC,MAAM,GAAE,OAAO,CAAC,WAAW,CAAM,GAAG,WAAW,CAy5DhF;AAED,wBAAsB,gBAAgB,CAAC,MAAM,GAAE,OAAO,CAAC,WAAW,CAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAiEhG"}
package/dist/server.js CHANGED
@@ -6,7 +6,7 @@ import {
6
6
  getMaxSessionsLimit,
7
7
  hashMessage,
8
8
  startProxyServer
9
- } from "./cli-yahkdc3h.js";
9
+ } from "./cli-z5r7ptsm.js";
10
10
  import"./cli-pr79d7nw.js";
11
11
  import"./cli-rtab0qa6.js";
12
12
  import"./cli-m9pfb7h9.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rynfar/meridian",
3
- "version": "1.37.5",
3
+ "version": "1.37.6",
4
4
  "description": "Local Anthropic API powered by your Claude Max subscription. One subscription, every agent.",
5
5
  "type": "module",
6
6
  "main": "./dist/server.js",