@rynfar/meridian 1.34.0 → 1.35.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 (34) hide show
  1. package/README.md +15 -9
  2. package/dist/{cli-1qv75efv.js → cli-0kfa6j99.js} +1319 -136
  3. package/dist/cli-p9swy5t3.js +67 -0
  4. package/dist/cli.js +8 -8
  5. package/dist/{profileCli-5e3p99k0.js → profileCli-5f15dx7k.js} +1 -1
  6. package/dist/{profilePage-9nkbct3w.js → profilePage-e90fq8ye.js} +1 -1
  7. package/dist/{profiles-ntgacztq.js → profiles-edzz1ffd.js} +1 -1
  8. package/dist/proxy/adapters/pi.d.ts.map +1 -1
  9. package/dist/proxy/sanitize.d.ts +26 -0
  10. package/dist/proxy/sanitize.d.ts.map +1 -0
  11. package/dist/proxy/server.d.ts.map +1 -1
  12. package/dist/proxy/types.d.ts +2 -0
  13. package/dist/proxy/types.d.ts.map +1 -1
  14. package/dist/server.js +2 -2
  15. package/dist/{setup-5x116vbs.js → setup-v5pnqe04.js} +1 -1
  16. package/dist/telemetry/index.d.ts +9 -4
  17. package/dist/telemetry/index.d.ts.map +1 -1
  18. package/dist/telemetry/logStore.d.ts +4 -25
  19. package/dist/telemetry/logStore.d.ts.map +1 -1
  20. package/dist/telemetry/percentiles.d.ts +12 -0
  21. package/dist/telemetry/percentiles.d.ts.map +1 -0
  22. package/dist/telemetry/prometheus.d.ts +10 -0
  23. package/dist/telemetry/prometheus.d.ts.map +1 -0
  24. package/dist/telemetry/routes.d.ts.map +1 -1
  25. package/dist/telemetry/sqlite.d.ts +7 -0
  26. package/dist/telemetry/sqlite.d.ts.map +1 -0
  27. package/dist/telemetry/store.d.ts +3 -3
  28. package/dist/telemetry/store.d.ts.map +1 -1
  29. package/dist/telemetry/types.d.ts +51 -0
  30. package/dist/telemetry/types.d.ts.map +1 -1
  31. package/dist/{tokenRefresh-ywwpe8k2.js → tokenRefresh-y7d1qvb3.js} +1 -1
  32. package/package.json +3 -2
  33. package/plugin/meridian.ts +4 -1
  34. package/dist/cli-a05ws7rb.js +0 -18
@@ -0,0 +1,67 @@
1
+ import { createRequire } from "node:module";
2
+ var __create = Object.create;
3
+ var __getProtoOf = Object.getPrototypeOf;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ function __accessProp(key) {
9
+ return this[key];
10
+ }
11
+ var __toESMCache_node;
12
+ var __toESMCache_esm;
13
+ var __toESM = (mod, isNodeMode, target) => {
14
+ var canCache = mod != null && typeof mod === "object";
15
+ if (canCache) {
16
+ var cache = isNodeMode ? __toESMCache_node ??= new WeakMap : __toESMCache_esm ??= new WeakMap;
17
+ var cached = cache.get(mod);
18
+ if (cached)
19
+ return cached;
20
+ }
21
+ target = mod != null ? __create(__getProtoOf(mod)) : {};
22
+ const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
23
+ for (let key of __getOwnPropNames(mod))
24
+ if (!__hasOwnProp.call(to, key))
25
+ __defProp(to, key, {
26
+ get: __accessProp.bind(mod, key),
27
+ enumerable: true
28
+ });
29
+ if (canCache)
30
+ cache.set(mod, to);
31
+ return to;
32
+ };
33
+ var __toCommonJS = (from) => {
34
+ var entry = (__moduleCache ??= new WeakMap).get(from), desc;
35
+ if (entry)
36
+ return entry;
37
+ entry = __defProp({}, "__esModule", { value: true });
38
+ if (from && typeof from === "object" || typeof from === "function") {
39
+ for (var key of __getOwnPropNames(from))
40
+ if (!__hasOwnProp.call(entry, key))
41
+ __defProp(entry, key, {
42
+ get: __accessProp.bind(from, key),
43
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
44
+ });
45
+ }
46
+ __moduleCache.set(from, entry);
47
+ return entry;
48
+ };
49
+ var __moduleCache;
50
+ var __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
51
+ var __returnValue = (v) => v;
52
+ function __exportSetter(name, newValue) {
53
+ this[name] = __returnValue.bind(null, newValue);
54
+ }
55
+ var __export = (target, all) => {
56
+ for (var name in all)
57
+ __defProp(target, name, {
58
+ get: all[name],
59
+ enumerable: true,
60
+ configurable: true,
61
+ set: __exportSetter.bind(all, name)
62
+ });
63
+ };
64
+ var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
65
+ var __require = /* @__PURE__ */ createRequire(import.meta.url);
66
+
67
+ export { __toESM, __toCommonJS, __commonJS, __export, __esm, __require };
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  startProxyServer
4
- } from "./cli-1qv75efv.js";
4
+ } from "./cli-0kfa6j99.js";
5
5
  import"./cli-g9ypdz51.js";
6
6
  import"./cli-rtab0qa6.js";
7
7
  import"./cli-m9pfb7h9.js";
@@ -9,7 +9,7 @@ import"./cli-vdp9s10c.js";
9
9
  import"./cli-340h1chz.js";
10
10
  import {
11
11
  __require
12
- } from "./cli-a05ws7rb.js";
12
+ } from "./cli-p9swy5t3.js";
13
13
 
14
14
  // bin/cli.ts
15
15
  import { createRequire } from "module";
@@ -49,7 +49,7 @@ See https://github.com/rynfar/meridian for full documentation.`);
49
49
  process.exit(0);
50
50
  }
51
51
  if (args[0] === "profile") {
52
- const { profileAdd, profileList, profileRemove, profileSwitch, profileLogin, profileHelp } = await import("./profileCli-5e3p99k0.js");
52
+ const { profileAdd, profileList, profileRemove, profileSwitch, profileLogin, profileHelp } = await import("./profileCli-5f15dx7k.js");
53
53
  const subcommand = args[1];
54
54
  const profileId = args[2];
55
55
  if (subcommand === "add" && profileId)
@@ -67,7 +67,7 @@ if (args[0] === "profile") {
67
67
  process.exit(0);
68
68
  }
69
69
  if (args[0] === "setup") {
70
- const { findPluginPath, runSetup } = await import("./setup-5x116vbs.js");
70
+ const { findPluginPath, runSetup } = await import("./setup-v5pnqe04.js");
71
71
  const pluginPath = findPluginPath(import.meta.url);
72
72
  const result = runSetup(pluginPath);
73
73
  if (result.alreadyConfigured) {
@@ -88,7 +88,7 @@ Restart OpenCode for the plugin to take effect.`);
88
88
  process.exit(0);
89
89
  }
90
90
  if (args[0] === "refresh-token") {
91
- const { refreshOAuthToken } = await import("./tokenRefresh-ywwpe8k2.js");
91
+ const { refreshOAuthToken } = await import("./tokenRefresh-y7d1qvb3.js");
92
92
  const success = await refreshOAuthToken();
93
93
  if (success) {
94
94
  console.log("Token refreshed successfully");
@@ -121,7 +121,7 @@ try {
121
121
  }
122
122
  async function runCli(start = startProxyServer, runExec = exec) {
123
123
  try {
124
- const { findOpencodeConfigPath, checkPluginConfigured, findPluginPath } = await import("./setup-5x116vbs.js");
124
+ const { findOpencodeConfigPath, checkPluginConfigured, findPluginPath } = await import("./setup-v5pnqe04.js");
125
125
  const configPath = findOpencodeConfigPath();
126
126
  const { existsSync } = await import("fs");
127
127
  if (existsSync(configPath) && !checkPluginConfigured(configPath)) {
@@ -146,10 +146,10 @@ async function runCli(start = startProxyServer, runExec = exec) {
146
146
  console.error("\x1B[33m⚠ Could not verify Claude auth status. If requests fail, run: claude login\x1B[0m");
147
147
  }
148
148
  if (!profiles) {
149
- const { enableDiskProfileDiscovery } = await import("./profiles-ntgacztq.js");
149
+ const { enableDiskProfileDiscovery } = await import("./profiles-edzz1ffd.js");
150
150
  enableDiskProfileDiscovery();
151
151
  }
152
- const proxy = await start({ port, host, idleTimeoutSeconds, profiles, defaultProfile });
152
+ const proxy = await start({ port, host, idleTimeoutSeconds, profiles, defaultProfile, version });
153
153
  proxy.server.on("error", (error) => {
154
154
  if (error.code === "EADDRINUSE") {
155
155
  process.exit(1);
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  setSetting
3
3
  } from "./cli-340h1chz.js";
4
- import"./cli-a05ws7rb.js";
4
+ import"./cli-p9swy5t3.js";
5
5
 
6
6
  // src/proxy/profileCli.ts
7
7
  import { mkdirSync, existsSync, rmSync, readFileSync, writeFileSync } from "node:fs";
@@ -3,7 +3,7 @@ import {
3
3
  profileBarHtml,
4
4
  profileBarJs
5
5
  } from "./cli-g9ypdz51.js";
6
- import"./cli-a05ws7rb.js";
6
+ import"./cli-p9swy5t3.js";
7
7
 
8
8
  // src/telemetry/profilePage.ts
9
9
  var profilePageHtml = `<!DOCTYPE html>
@@ -11,7 +11,7 @@ import {
11
11
  setActiveProfile
12
12
  } from "./cli-vdp9s10c.js";
13
13
  import"./cli-340h1chz.js";
14
- import"./cli-a05ws7rb.js";
14
+ import"./cli-p9swy5t3.js";
15
15
  export {
16
16
  setActiveProfile,
17
17
  restoreActiveProfile,
@@ -1 +1 @@
1
- {"version":3,"file":"pi.d.ts","sourceRoot":"","sources":["../../../src/proxy/adapters/pi.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAwC9C,eAAO,MAAM,SAAS,EAAE,YA+FvB,CAAA"}
1
+ {"version":3,"file":"pi.d.ts","sourceRoot":"","sources":["../../../src/proxy/adapters/pi.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAwC9C,eAAO,MAAM,SAAS,EAAE,YAsGvB,CAAA"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Per-block content sanitizer for orchestration wrapper leakage.
3
+ *
4
+ * Agent harnesses (OpenCode, Droid, ForgeCode, oh-my-opencode, etc.) inject
5
+ * internal markup into message content — `<system-reminder>`, `<env>`,
6
+ * `<task_metadata>`, and similar tags. When the proxy flattens messages into
7
+ * a text prompt for the Agent SDK, these tags become model-visible text that
8
+ * can confuse the model or cause it to echo them back ("talking to itself").
9
+ *
10
+ * This module strips known orchestration tags from **individual text blocks**
11
+ * before flattening — not from the final concatenated string. Operating
12
+ * per-block eliminates the cross-message regex risk that makes full-string
13
+ * sanitization fragile.
14
+ *
15
+ * Pure module — no I/O, no imports from server.ts or session/.
16
+ *
17
+ * Fixes: https://github.com/rynfar/meridian/issues/167
18
+ */
19
+ /**
20
+ * Strip orchestration wrappers from a single text string.
21
+ *
22
+ * Designed to be called on individual content blocks (not concatenated
23
+ * prompt strings) to eliminate cross-block regex matching risk.
24
+ */
25
+ export declare function sanitizeTextContent(text: string): string;
26
+ //# sourceMappingURL=sanitize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../src/proxy/sanitize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AA6DH;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAUxD"}
@@ -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;AAwBvD,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;AAkJ7B,wBAAgB,iBAAiB,CAAC,MAAM,GAAE,OAAO,CAAC,WAAW,CAAM,GAAG,WAAW,CAqwDhF;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;AAwBvD,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;AAkJ7B,wBAAgB,iBAAiB,CAAC,MAAM,GAAE,OAAO,CAAC,WAAW,CAAM,GAAG,WAAW,CAqxDhF;AAED,wBAAsB,gBAAgB,CAAC,MAAM,GAAE,OAAO,CAAC,WAAW,CAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAiEhG"}
@@ -10,6 +10,8 @@ export interface ProxyConfig {
10
10
  profiles?: ProfileConfig[];
11
11
  /** Default profile ID when no header is sent */
12
12
  defaultProfile?: string;
13
+ /** Package version, exposed via /health endpoint */
14
+ version?: string;
13
15
  }
14
16
  export interface ProxyInstance {
15
17
  /** The underlying http.Server */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/proxy/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,OAAO,CAAA;IACd,kBAAkB,EAAE,MAAM,CAAA;IAC1B,MAAM,EAAE,OAAO,CAAA;IACf,oDAAoD;IACpD,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAA;IAC1B,gDAAgD;IAChD,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAA;IACd,uCAAuC;IACvC,MAAM,EAAE,WAAW,CAAA;IACnB,mEAAmE;IACnE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACvB;AAED,oFAAoF;AACpF,MAAM,WAAW,WAAW;IAC1B,+DAA+D;IAC/D,GAAG,EAAE;QAAE,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;KAAE,CAAA;IAClF,uCAAuC;IACvC,MAAM,EAAE,WAAW,CAAA;CACpB;AAED,eAAO,MAAM,oBAAoB,EAAE,WAQlC,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/proxy/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,OAAO,CAAA;IACd,kBAAkB,EAAE,MAAM,CAAA;IAC1B,MAAM,EAAE,OAAO,CAAA;IACf,oDAAoD;IACpD,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAA;IAC1B,gDAAgD;IAChD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,oDAAoD;IACpD,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAA;IACd,uCAAuC;IACvC,MAAM,EAAE,WAAW,CAAA;IACnB,mEAAmE;IACnE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACvB;AAED,oFAAoF;AACpF,MAAM,WAAW,WAAW;IAC1B,+DAA+D;IAC/D,GAAG,EAAE;QAAE,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;KAAE,CAAA;IAClF,uCAAuC;IACvC,MAAM,EAAE,WAAW,CAAA;CACpB;AAED,eAAO,MAAM,oBAAoB,EAAE,WASlC,CAAA"}
package/dist/server.js CHANGED
@@ -6,13 +6,13 @@ import {
6
6
  getMaxSessionsLimit,
7
7
  hashMessage,
8
8
  startProxyServer
9
- } from "./cli-1qv75efv.js";
9
+ } from "./cli-0kfa6j99.js";
10
10
  import"./cli-g9ypdz51.js";
11
11
  import"./cli-rtab0qa6.js";
12
12
  import"./cli-m9pfb7h9.js";
13
13
  import"./cli-vdp9s10c.js";
14
14
  import"./cli-340h1chz.js";
15
- import"./cli-a05ws7rb.js";
15
+ import"./cli-p9swy5t3.js";
16
16
  export {
17
17
  startProxyServer,
18
18
  hashMessage,
@@ -4,7 +4,7 @@ import {
4
4
  findPluginPath,
5
5
  runSetup
6
6
  } from "./cli-rtab0qa6.js";
7
- import"./cli-a05ws7rb.js";
7
+ import"./cli-p9swy5t3.js";
8
8
  export {
9
9
  runSetup,
10
10
  findPluginPath,
@@ -1,7 +1,12 @@
1
- export { telemetryStore, TelemetryStore } from "./store";
2
- export { diagnosticLog, DiagnosticLogStore } from "./logStore";
1
+ import type { ITelemetryStore, IDiagnosticLogStore } from "./types";
2
+ export declare const telemetryStore: ITelemetryStore;
3
+ export declare const diagnosticLog: IDiagnosticLogStore;
4
+ export { MemoryTelemetryStore } from "./store";
5
+ export { MemoryDiagnosticLogStore } from "./logStore";
3
6
  export { createTelemetryRoutes } from "./routes";
4
7
  export { landingHtml } from "./landing";
5
- export type { RequestMetric, TelemetrySummary, PhaseTiming } from "./types";
6
- export type { DiagnosticLog } from "./logStore";
8
+ export { computePercentiles, computeSummary } from "./percentiles";
9
+ export { renderPrometheusMetrics } from "./prometheus";
10
+ export { createSqliteStores } from "./sqlite";
11
+ export type { RequestMetric, TelemetrySummary, PhaseTiming, ITelemetryStore, IDiagnosticLogStore, DiagnosticLog, } from "./types";
7
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/telemetry/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AACxD,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAC3E,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/telemetry/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAgCnE,eAAO,MAAM,cAAc,EAAE,eAAkC,CAAA;AAC/D,eAAO,MAAM,aAAa,EAAE,mBAAwC,CAAA;AAEpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAC9C,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAA;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAClE,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAC7C,YAAY,EACV,aAAa,EACb,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,mBAAmB,EACnB,aAAa,GACd,MAAM,SAAS,CAAA"}
@@ -5,46 +5,25 @@
5
5
  * and surfaces them via the telemetry API and dashboard. Replaces the need
6
6
  * for users to dig through stderr to report issues.
7
7
  */
8
- export interface DiagnosticLog {
9
- /** Unix timestamp */
10
- timestamp: number;
11
- /** Log level */
12
- level: "info" | "warn" | "error";
13
- /** Log category for filtering */
14
- category: "session" | "lineage" | "error" | "lifecycle" | "token";
15
- /** Request ID (if associated with a request) */
16
- requestId?: string;
17
- /** Human-readable message */
18
- message: string;
19
- }
20
- export declare class DiagnosticLogStore {
8
+ import type { DiagnosticLog, IDiagnosticLogStore } from "./types";
9
+ export type { DiagnosticLog } from "./types";
10
+ export declare class MemoryDiagnosticLogStore implements IDiagnosticLogStore {
21
11
  private buffer;
22
12
  private head;
23
13
  private count;
24
14
  private readonly capacity;
25
15
  constructor(capacity?: number);
26
- /** Append a log entry. */
27
16
  log(entry: Omit<DiagnosticLog, "timestamp">): void;
28
- /** Convenience: log a session event. */
29
17
  session(message: string, requestId?: string): void;
30
- /** Convenience: log a lineage event (compaction, undo, diverged). */
31
18
  lineage(message: string, requestId?: string): void;
32
- /** Convenience: log an error. */
33
19
  error(message: string, requestId?: string): void;
34
- /**
35
- * Retrieve recent logs, newest first.
36
- * @param options.limit - Max entries (default: 100)
37
- * @param options.since - Only entries after this timestamp
38
- * @param options.category - Filter by category
39
- */
40
20
  getRecent(options?: {
41
21
  limit?: number;
42
22
  since?: number;
43
23
  category?: string;
44
24
  }): DiagnosticLog[];
45
- /** Clear all stored logs. */
46
25
  clear(): void;
47
26
  }
48
27
  /** Singleton instance used by the proxy. */
49
- export declare const diagnosticLog: DiagnosticLogStore;
28
+ export declare const diagnosticLog: MemoryDiagnosticLogStore;
50
29
  //# sourceMappingURL=logStore.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"logStore.d.ts","sourceRoot":"","sources":["../../src/telemetry/logStore.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,aAAa;IAC5B,qBAAqB;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,gBAAgB;IAChB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;IAChC,iCAAiC;IACjC,QAAQ,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,WAAW,GAAG,OAAO,CAAA;IACjE,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAA;CAChB;AAID,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,IAAI,CAAI;IAChB,OAAO,CAAC,KAAK,CAAI;IACjB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;gBAErB,QAAQ,CAAC,EAAE,MAAM;IAK7B,0BAA0B;IAC1B,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,GAAG,IAAI;IAMlD,wCAAwC;IACxC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAIlD,qEAAqE;IACrE,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAIlD,iCAAiC;IACjC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAIhD;;;;;OAKG;IACH,SAAS,CAAC,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,aAAa,EAAE;IAgB/F,6BAA6B;IAC7B,KAAK,IAAI,IAAI;CAKd;AAED,4CAA4C;AAC5C,eAAO,MAAM,aAAa,oBAA2B,CAAA"}
1
+ {"version":3,"file":"logStore.d.ts","sourceRoot":"","sources":["../../src/telemetry/logStore.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AACjE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAI5C,qBAAa,wBAAyB,YAAW,mBAAmB;IAClE,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,IAAI,CAAI;IAChB,OAAO,CAAC,KAAK,CAAI;IACjB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;gBAErB,QAAQ,CAAC,EAAE,MAAM;IAK7B,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC,GAAG,IAAI;IAMlD,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAIlD,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAIlD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAIhD,SAAS,CAAC,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,aAAa,EAAE;IAgB/F,KAAK,IAAI,IAAI;CAKd;AAED,4CAA4C;AAC5C,eAAO,MAAM,aAAa,0BAAiC,CAAA"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Shared percentile computation used by all telemetry store implementations.
3
+ */
4
+ import type { RequestMetric, PhaseTiming, TelemetrySummary } from "./types";
5
+ export declare function computePercentiles(values: number[]): PhaseTiming;
6
+ /**
7
+ * Compute a TelemetrySummary from an array of RequestMetric.
8
+ * Both MemoryTelemetryStore and SqliteTelemetryStore use this
9
+ * to guarantee identical output.
10
+ */
11
+ export declare function computeSummary(metrics: RequestMetric[], windowMs: number): TelemetrySummary;
12
+ //# sourceMappingURL=percentiles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"percentiles.d.ts","sourceRoot":"","sources":["../../src/telemetry/percentiles.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE3E,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,WAAW,CAchE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CAuG3F"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Prometheus exposition format renderer.
3
+ *
4
+ * Generates text/plain output from ITelemetryStore data.
5
+ * No dependencies — hand-rolled per the exposition format spec:
6
+ * https://prometheus.io/docs/instrumenting/exposition_formats/
7
+ */
8
+ import type { ITelemetryStore } from "./types";
9
+ export declare function renderPrometheusMetrics(store: ITelemetryStore): string;
10
+ //# sourceMappingURL=prometheus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prometheus.d.ts","sourceRoot":"","sources":["../../src/telemetry/prometheus.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAiB,MAAM,SAAS,CAAA;AAsB7D,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CA+CtE"}
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/telemetry/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAS3B,wBAAgB,qBAAqB,+EAwDpC"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/telemetry/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAQ3B,wBAAgB,qBAAqB,+EAwDpC"}
@@ -0,0 +1,7 @@
1
+ import type { ITelemetryStore, IDiagnosticLogStore } from "./types";
2
+ export declare function createSqliteStores(dbPath: string, retentionDays: number): {
3
+ telemetry: ITelemetryStore;
4
+ diagnostics: IDiagnosticLogStore;
5
+ close: () => void;
6
+ };
7
+ //# sourceMappingURL=sqlite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/telemetry/sqlite.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAmC,eAAe,EAAE,mBAAmB,EAAiB,MAAM,SAAS,CAAA;AAoUnH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM;eAGV,eAAe;iBACxB,mBAAmB;;EAGvE"}
@@ -4,8 +4,8 @@
4
4
  * Append-only, fixed capacity, oldest entries overwritten.
5
5
  * No disk I/O in the hot path. Data resets on proxy restart.
6
6
  */
7
- import type { RequestMetric, TelemetrySummary } from "./types";
8
- export declare class TelemetryStore {
7
+ import type { RequestMetric, TelemetrySummary, ITelemetryStore } from "./types";
8
+ export declare class MemoryTelemetryStore implements ITelemetryStore {
9
9
  private buffer;
10
10
  private head;
11
11
  private count;
@@ -38,5 +38,5 @@ export declare class TelemetryStore {
38
38
  clear(): void;
39
39
  }
40
40
  /** Singleton store instance used by the proxy. */
41
- export declare const telemetryStore: TelemetryStore;
41
+ export declare const telemetryStore: MemoryTelemetryStore;
42
42
  //# sourceMappingURL=store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/telemetry/store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAe,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAY3E,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,IAAI,CAAI;IAChB,OAAO,CAAC,KAAK,CAAI;IACjB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;gBAErB,QAAQ,CAAC,EAAE,MAAM;IAK7B,yCAAyC;IACzC,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAMnC,8CAA8C;IAC9C,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;;;OAKG;IACH,SAAS,CAAC,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,aAAa,EAAE;IAiB5F;kEAC8D;IAC9D,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAWlE;;;OAGG;IACH,SAAS,CAAC,QAAQ,GAAE,MAAuB,GAAG,gBAAgB;IAiH9D,gCAAgC;IAChC,KAAK,IAAI,IAAI;CAKd;AAkBD,kDAAkD;AAClD,eAAO,MAAM,cAAc,gBAAuB,CAAA"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/telemetry/store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAa/E,qBAAa,oBAAqB,YAAW,eAAe;IAC1D,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,IAAI,CAAI;IAChB,OAAO,CAAC,KAAK,CAAI;IACjB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;gBAErB,QAAQ,CAAC,EAAE,MAAM;IAK7B,yCAAyC;IACzC,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAMnC,8CAA8C;IAC9C,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;;;OAKG;IACH,SAAS,CAAC,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,aAAa,EAAE;IAiB5F;kEAC8D;IAC9D,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAWlE;;;OAGG;IACH,SAAS,CAAC,QAAQ,GAAE,MAAuB,GAAG,gBAAgB;IAM9D,gCAAgC;IAChC,KAAK,IAAI,IAAI;CAKd;AAED,kDAAkD;AAClD,eAAO,MAAM,cAAc,sBAA6B,CAAA"}
@@ -123,4 +123,55 @@ export interface TelemetrySummary {
123
123
  cacheMissOnResumeCount: number;
124
124
  };
125
125
  }
126
+ /** Storage backend for request metrics. */
127
+ export interface ITelemetryStore {
128
+ /** Record a completed request metric. */
129
+ record(metric: RequestMetric): void;
130
+ /** Number of stored metrics. */
131
+ readonly size: number;
132
+ /** Retrieve recent metrics, newest first. */
133
+ getRecent(options?: {
134
+ limit?: number;
135
+ since?: number;
136
+ model?: string;
137
+ }): RequestMetric[];
138
+ /** Find the latest successful metric for a given SDK session. */
139
+ getLastForSession(sdkSessionId: string): RequestMetric | undefined;
140
+ /** Compute aggregate statistics over a time window. */
141
+ summarize(windowMs?: number): TelemetrySummary;
142
+ /** Clear all stored metrics. */
143
+ clear(): void;
144
+ }
145
+ /** Diagnostic log entry. */
146
+ export interface DiagnosticLog {
147
+ /** Unix timestamp */
148
+ timestamp: number;
149
+ /** Log level */
150
+ level: "info" | "warn" | "error";
151
+ /** Log category for filtering */
152
+ category: "session" | "lineage" | "error" | "lifecycle" | "token";
153
+ /** Request ID (if associated with a request) */
154
+ requestId?: string;
155
+ /** Human-readable message */
156
+ message: string;
157
+ }
158
+ /** Storage backend for diagnostic logs. */
159
+ export interface IDiagnosticLogStore {
160
+ /** Append a log entry (timestamp is added automatically). */
161
+ log(entry: Omit<DiagnosticLog, "timestamp">): void;
162
+ /** Log a session event. */
163
+ session(message: string, requestId?: string): void;
164
+ /** Log a lineage event (compaction, undo, diverged). */
165
+ lineage(message: string, requestId?: string): void;
166
+ /** Log an error. */
167
+ error(message: string, requestId?: string): void;
168
+ /** Retrieve recent logs, newest first. */
169
+ getRecent(options?: {
170
+ limit?: number;
171
+ since?: number;
172
+ category?: string;
173
+ }): DiagnosticLog[];
174
+ /** Clear all stored logs. */
175
+ clear(): void;
176
+ }
126
177
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/telemetry/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/telemetry/types.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ import {
3
3
  refreshOAuthToken,
4
4
  resetInflightRefresh
5
5
  } from "./cli-m9pfb7h9.js";
6
- import"./cli-a05ws7rb.js";
6
+ import"./cli-p9swy5t3.js";
7
7
  export {
8
8
  resetInflightRefresh,
9
9
  refreshOAuthToken,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rynfar/meridian",
3
- "version": "1.34.0",
3
+ "version": "1.35.0",
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",
@@ -29,7 +29,8 @@
29
29
  "proxy:direct": "bun run ./bin/cli.ts"
30
30
  },
31
31
  "dependencies": {
32
- "@anthropic-ai/claude-agent-sdk": "^0.2.89"
32
+ "@anthropic-ai/claude-agent-sdk": "^0.2.89",
33
+ "libsql": "^0.5.29"
33
34
  },
34
35
  "devDependencies": {
35
36
  "@hono/node-server": "^1.19.11",
@@ -44,9 +44,12 @@ const MeridianPlugin: Plugin = async () => {
44
44
  output.headers["x-opencode-agent-mode"] = typeof agent === "object"
45
45
  ? (agent.mode ?? "primary")
46
46
  : "primary"
47
- output.headers["x-opencode-agent-name"] = typeof agent === "object"
47
+ const rawName = typeof agent === "object"
48
48
  ? (agent.name ?? "unknown")
49
49
  : String(agent)
50
+ // Strip non-ASCII characters (e.g. zero-width spaces) that cause
51
+ // "Header has invalid value" errors in Node.js / undici.
52
+ output.headers["x-opencode-agent-name"] = rawName.replace(/[^\x20-\x7E]/g, "").trim() || "unknown"
50
53
  },
51
54
  }
52
55
  }
@@ -1,18 +0,0 @@
1
- import { createRequire } from "node:module";
2
- var __defProp = Object.defineProperty;
3
- var __returnValue = (v) => v;
4
- function __exportSetter(name, newValue) {
5
- this[name] = __returnValue.bind(null, newValue);
6
- }
7
- var __export = (target, all) => {
8
- for (var name in all)
9
- __defProp(target, name, {
10
- get: all[name],
11
- enumerable: true,
12
- configurable: true,
13
- set: __exportSetter.bind(all, name)
14
- });
15
- };
16
- var __require = /* @__PURE__ */ createRequire(import.meta.url);
17
-
18
- export { __export, __require };