@rynfar/meridian 1.24.5 → 1.25.1
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 +122 -196
- package/dist/cli-a05ws7rb.js +18 -0
- package/dist/{cli-jd4atcxs.js → cli-m9pfb7h9.js} +1 -18
- package/dist/cli-rtab0qa6.js +67 -0
- package/dist/{cli-9pc43rfa.js → cli-s6f9jefk.js} +106 -49
- package/dist/cli.js +39 -3
- package/dist/proxy/adapter.d.ts +1 -1
- package/dist/proxy/fileChanges.d.ts.map +1 -1
- package/dist/proxy/models.d.ts +17 -1
- package/dist/proxy/models.d.ts.map +1 -1
- package/dist/proxy/server.d.ts.map +1 -1
- package/dist/proxy/setup.d.ts +42 -0
- package/dist/proxy/setup.d.ts.map +1 -0
- package/dist/server.js +4 -2
- package/dist/setup-5x116vbs.js +13 -0
- package/dist/telemetry/dashboard.d.ts +1 -1
- package/dist/telemetry/dashboard.d.ts.map +1 -1
- package/dist/telemetry/routes.d.ts.map +1 -1
- package/dist/{tokenRefresh-wzn2bvrq.js → tokenRefresh-ywwpe8k2.js} +2 -1
- package/package.json +76 -75
- package/plugin/meridian.ts +54 -0
|
@@ -1,10 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
checkPluginConfigured
|
|
3
|
+
} from "./cli-rtab0qa6.js";
|
|
4
|
+
import {
|
|
4
5
|
claudeLog,
|
|
5
6
|
refreshOAuthToken,
|
|
6
7
|
withClaudeLogContext
|
|
7
|
-
} from "./cli-
|
|
8
|
+
} from "./cli-m9pfb7h9.js";
|
|
9
|
+
import {
|
|
10
|
+
__export,
|
|
11
|
+
__require
|
|
12
|
+
} from "./cli-a05ws7rb.js";
|
|
8
13
|
|
|
9
14
|
// node_modules/hono/dist/compose.js
|
|
10
15
|
var compose = (middleware, onError, onNotFound) => {
|
|
@@ -6384,6 +6389,11 @@ class DiagnosticLogStore {
|
|
|
6384
6389
|
}
|
|
6385
6390
|
}
|
|
6386
6391
|
var diagnosticLog = new DiagnosticLogStore;
|
|
6392
|
+
// src/telemetry/routes.ts
|
|
6393
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
6394
|
+
import { resolve, dirname } from "node:path";
|
|
6395
|
+
import { fileURLToPath } from "node:url";
|
|
6396
|
+
|
|
6387
6397
|
// src/telemetry/dashboard.ts
|
|
6388
6398
|
var dashboardHtml = `<!DOCTYPE html>
|
|
6389
6399
|
<html lang="en">
|
|
@@ -6391,6 +6401,7 @@ var dashboardHtml = `<!DOCTYPE html>
|
|
|
6391
6401
|
<meta charset="utf-8">
|
|
6392
6402
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6393
6403
|
<title>Meridian — Telemetry</title>
|
|
6404
|
+
<link rel="icon" type="image/svg+xml" href="/telemetry/icon.svg">
|
|
6394
6405
|
<style>
|
|
6395
6406
|
:root {
|
|
6396
6407
|
--bg: #0d1117; --surface: #161b22; --border: #30363d;
|
|
@@ -6712,11 +6723,21 @@ timer = setInterval(refresh, 5000);
|
|
|
6712
6723
|
</html>`;
|
|
6713
6724
|
|
|
6714
6725
|
// src/telemetry/routes.ts
|
|
6726
|
+
var _iconPath = resolve(dirname(fileURLToPath(import.meta.url)), "..", "..", "assets", "icon.svg");
|
|
6727
|
+
var _iconSvg = existsSync(_iconPath) ? readFileSync(_iconPath, "utf-8") : null;
|
|
6715
6728
|
function createTelemetryRoutes() {
|
|
6716
6729
|
const routes = new Hono2;
|
|
6717
6730
|
routes.get("/", (c) => {
|
|
6718
6731
|
return c.html(dashboardHtml);
|
|
6719
6732
|
});
|
|
6733
|
+
routes.get("/icon.svg", (c) => {
|
|
6734
|
+
if (!_iconSvg)
|
|
6735
|
+
return c.notFound();
|
|
6736
|
+
return c.body(_iconSvg, 200, {
|
|
6737
|
+
"Content-Type": "image/svg+xml",
|
|
6738
|
+
"Cache-Control": "public, max-age=3600"
|
|
6739
|
+
});
|
|
6740
|
+
});
|
|
6720
6741
|
routes.get("/requests", (c) => {
|
|
6721
6742
|
const limit = Number.parseInt(c.req.query("limit") || "50", 10);
|
|
6722
6743
|
const since = c.req.query("since") ? Number.parseInt(c.req.query("since"), 10) : undefined;
|
|
@@ -6971,9 +6992,9 @@ function isExtraUsageRequiredError(errMsg) {
|
|
|
6971
6992
|
|
|
6972
6993
|
// src/proxy/models.ts
|
|
6973
6994
|
import { exec as execCallback } from "child_process";
|
|
6974
|
-
import { existsSync } from "fs";
|
|
6975
|
-
import { fileURLToPath } from "url";
|
|
6976
|
-
import { join, dirname } from "path";
|
|
6995
|
+
import { existsSync as existsSync2 } from "fs";
|
|
6996
|
+
import { fileURLToPath as fileURLToPath2 } from "url";
|
|
6997
|
+
import { join, dirname as dirname2 } from "path";
|
|
6977
6998
|
import { promisify } from "util";
|
|
6978
6999
|
var exec = promisify(execCallback);
|
|
6979
7000
|
var AUTH_STATUS_CACHE_TTL_MS = 60000;
|
|
@@ -6988,19 +7009,35 @@ function supports1mContext(model) {
|
|
|
6988
7009
|
return false;
|
|
6989
7010
|
return true;
|
|
6990
7011
|
}
|
|
6991
|
-
function mapModelToClaudeModel(model, subscriptionType) {
|
|
7012
|
+
function mapModelToClaudeModel(model, subscriptionType, agentMode) {
|
|
6992
7013
|
if (model.includes("haiku"))
|
|
6993
7014
|
return "haiku";
|
|
6994
7015
|
const use1m = supports1mContext(model);
|
|
6995
|
-
|
|
6996
|
-
|
|
7016
|
+
const isSubagent = agentMode === "subagent";
|
|
7017
|
+
if (model.includes("opus")) {
|
|
7018
|
+
if (use1m && !isSubagent && !isExtendedContextKnownUnavailable())
|
|
7019
|
+
return "opus[1m]";
|
|
7020
|
+
return "opus";
|
|
7021
|
+
}
|
|
6997
7022
|
const sonnetOverride = process.env.MERIDIAN_SONNET_MODEL ?? process.env.CLAUDE_PROXY_SONNET_MODEL;
|
|
6998
7023
|
if (sonnetOverride === "sonnet" || sonnetOverride === "sonnet[1m]")
|
|
6999
7024
|
return sonnetOverride;
|
|
7000
7025
|
if (!use1m)
|
|
7001
7026
|
return "sonnet";
|
|
7027
|
+
if (isSubagent)
|
|
7028
|
+
return "sonnet";
|
|
7029
|
+
if (isExtendedContextKnownUnavailable())
|
|
7030
|
+
return "sonnet";
|
|
7002
7031
|
return subscriptionType === "max" ? "sonnet[1m]" : "sonnet";
|
|
7003
7032
|
}
|
|
7033
|
+
var EXTRA_USAGE_RETRY_MS = 60 * 60 * 1000;
|
|
7034
|
+
var extraUsageUnavailableAt = 0;
|
|
7035
|
+
function recordExtendedContextUnavailable() {
|
|
7036
|
+
extraUsageUnavailableAt = Date.now();
|
|
7037
|
+
}
|
|
7038
|
+
function isExtendedContextKnownUnavailable() {
|
|
7039
|
+
return extraUsageUnavailableAt > 0 && Date.now() - extraUsageUnavailableAt < EXTRA_USAGE_RETRY_MS;
|
|
7040
|
+
}
|
|
7004
7041
|
function stripExtendedContext(model) {
|
|
7005
7042
|
if (model === "opus[1m]")
|
|
7006
7043
|
return "opus";
|
|
@@ -7051,9 +7088,9 @@ async function resolveClaudeExecutableAsync() {
|
|
|
7051
7088
|
const runningUnderBun = typeof process.versions.bun !== "undefined";
|
|
7052
7089
|
if (runningUnderBun) {
|
|
7053
7090
|
try {
|
|
7054
|
-
const sdkPath =
|
|
7055
|
-
const sdkCliJs = join(
|
|
7056
|
-
if (
|
|
7091
|
+
const sdkPath = fileURLToPath2(import.meta.resolve("@anthropic-ai/claude-agent-sdk"));
|
|
7092
|
+
const sdkCliJs = join(dirname2(sdkPath), "cli.js");
|
|
7093
|
+
if (existsSync2(sdkCliJs)) {
|
|
7057
7094
|
cachedClaudePath = sdkCliJs;
|
|
7058
7095
|
return sdkCliJs;
|
|
7059
7096
|
}
|
|
@@ -7062,16 +7099,16 @@ async function resolveClaudeExecutableAsync() {
|
|
|
7062
7099
|
try {
|
|
7063
7100
|
const { stdout } = await exec("which claude");
|
|
7064
7101
|
const claudePath = stdout.trim();
|
|
7065
|
-
if (claudePath &&
|
|
7102
|
+
if (claudePath && existsSync2(claudePath)) {
|
|
7066
7103
|
cachedClaudePath = claudePath;
|
|
7067
7104
|
return claudePath;
|
|
7068
7105
|
}
|
|
7069
7106
|
} catch {}
|
|
7070
7107
|
if (!runningUnderBun) {
|
|
7071
7108
|
try {
|
|
7072
|
-
const sdkPath =
|
|
7073
|
-
const sdkCliJs = join(
|
|
7074
|
-
if (
|
|
7109
|
+
const sdkPath = fileURLToPath2(import.meta.resolve("@anthropic-ai/claude-agent-sdk"));
|
|
7110
|
+
const sdkCliJs = join(dirname2(sdkPath), "cli.js");
|
|
7111
|
+
if (existsSync2(sdkCliJs)) {
|
|
7075
7112
|
cachedClaudePath = sdkCliJs;
|
|
7076
7113
|
return sdkCliJs;
|
|
7077
7114
|
}
|
|
@@ -7163,6 +7200,17 @@ function createFileChangeHook(changes, mcpPrefix) {
|
|
|
7163
7200
|
}]
|
|
7164
7201
|
};
|
|
7165
7202
|
}
|
|
7203
|
+
function isLikelyFilePath(s) {
|
|
7204
|
+
if (/[()[\]]/.test(s))
|
|
7205
|
+
return false;
|
|
7206
|
+
if (/^-?\d+$/.test(s))
|
|
7207
|
+
return false;
|
|
7208
|
+
if (/^[{}]$/.test(s))
|
|
7209
|
+
return false;
|
|
7210
|
+
if (!/[\w/.]/.test(s))
|
|
7211
|
+
return false;
|
|
7212
|
+
return true;
|
|
7213
|
+
}
|
|
7166
7214
|
function extractFileChangesFromBash(command) {
|
|
7167
7215
|
const changes = [];
|
|
7168
7216
|
const seen = new Set;
|
|
@@ -7177,10 +7225,12 @@ function extractFileChangesFromBash(command) {
|
|
|
7177
7225
|
changes.push({ operation, path });
|
|
7178
7226
|
}
|
|
7179
7227
|
};
|
|
7180
|
-
const redirectRegex = /(?<![0-9])>{1,2}\s*['"]?([^\s'";&|)]+)['"]?/g;
|
|
7228
|
+
const redirectRegex = /(?<![0-9=])>{1,2}\s*['"]?([^\s'";&|)]+)['"]?/g;
|
|
7181
7229
|
let match2;
|
|
7182
7230
|
while ((match2 = redirectRegex.exec(command)) !== null) {
|
|
7183
|
-
|
|
7231
|
+
if (isLikelyFilePath(match2[1])) {
|
|
7232
|
+
addChange("wrote", match2[1]);
|
|
7233
|
+
}
|
|
7184
7234
|
}
|
|
7185
7235
|
const teeRegex = /\btee\s+(?:-[a-zA-Z]\s+)*['"]?([^\s'";&|)]+)['"]?/g;
|
|
7186
7236
|
while ((match2 = teeRegex.exec(command)) !== null) {
|
|
@@ -9148,7 +9198,7 @@ minimatch.escape = escape;
|
|
|
9148
9198
|
minimatch.unescape = unescape;
|
|
9149
9199
|
|
|
9150
9200
|
// node_modules/glob/dist/esm/glob.js
|
|
9151
|
-
import { fileURLToPath as
|
|
9201
|
+
import { fileURLToPath as fileURLToPath4 } from "node:url";
|
|
9152
9202
|
|
|
9153
9203
|
// node_modules/lru-cache/dist/esm/index.js
|
|
9154
9204
|
var defaultPerf = typeof performance === "object" && performance && typeof performance.now === "function" ? performance : Date;
|
|
@@ -10311,7 +10361,7 @@ class LRUCache {
|
|
|
10311
10361
|
|
|
10312
10362
|
// node_modules/path-scurry/dist/esm/index.js
|
|
10313
10363
|
import { posix, win32 } from "node:path";
|
|
10314
|
-
import { fileURLToPath as
|
|
10364
|
+
import { fileURLToPath as fileURLToPath3 } from "node:url";
|
|
10315
10365
|
import { lstatSync, readdir as readdirCB, readdirSync, readlinkSync, realpathSync as rps } from "fs";
|
|
10316
10366
|
import * as actualFS from "node:fs";
|
|
10317
10367
|
import { lstat, readdir, readlink, realpath } from "node:fs/promises";
|
|
@@ -10858,10 +10908,10 @@ class Minipass extends EventEmitter {
|
|
|
10858
10908
|
return this[ENCODING] ? buf.join("") : Buffer.concat(buf, buf.dataLength);
|
|
10859
10909
|
}
|
|
10860
10910
|
async promise() {
|
|
10861
|
-
return new Promise((
|
|
10911
|
+
return new Promise((resolve2, reject) => {
|
|
10862
10912
|
this.on(DESTROYED, () => reject(new Error("stream destroyed")));
|
|
10863
10913
|
this.on("error", (er) => reject(er));
|
|
10864
|
-
this.on("end", () =>
|
|
10914
|
+
this.on("end", () => resolve2());
|
|
10865
10915
|
});
|
|
10866
10916
|
}
|
|
10867
10917
|
[Symbol.asyncIterator]() {
|
|
@@ -10880,7 +10930,7 @@ class Minipass extends EventEmitter {
|
|
|
10880
10930
|
return Promise.resolve({ done: false, value: res });
|
|
10881
10931
|
if (this[EOF])
|
|
10882
10932
|
return stop();
|
|
10883
|
-
let
|
|
10933
|
+
let resolve2;
|
|
10884
10934
|
let reject;
|
|
10885
10935
|
const onerr = (er) => {
|
|
10886
10936
|
this.off("data", ondata);
|
|
@@ -10894,19 +10944,19 @@ class Minipass extends EventEmitter {
|
|
|
10894
10944
|
this.off("end", onend);
|
|
10895
10945
|
this.off(DESTROYED, ondestroy);
|
|
10896
10946
|
this.pause();
|
|
10897
|
-
|
|
10947
|
+
resolve2({ value, done: !!this[EOF] });
|
|
10898
10948
|
};
|
|
10899
10949
|
const onend = () => {
|
|
10900
10950
|
this.off("error", onerr);
|
|
10901
10951
|
this.off("data", ondata);
|
|
10902
10952
|
this.off(DESTROYED, ondestroy);
|
|
10903
10953
|
stop();
|
|
10904
|
-
|
|
10954
|
+
resolve2({ done: true, value: undefined });
|
|
10905
10955
|
};
|
|
10906
10956
|
const ondestroy = () => onerr(new Error("stream destroyed"));
|
|
10907
10957
|
return new Promise((res2, rej) => {
|
|
10908
10958
|
reject = rej;
|
|
10909
|
-
|
|
10959
|
+
resolve2 = res2;
|
|
10910
10960
|
this.once(DESTROYED, ondestroy);
|
|
10911
10961
|
this.once("error", onerr);
|
|
10912
10962
|
this.once("end", onend);
|
|
@@ -11606,8 +11656,8 @@ class PathBase {
|
|
|
11606
11656
|
if (this.#asyncReaddirInFlight) {
|
|
11607
11657
|
await this.#asyncReaddirInFlight;
|
|
11608
11658
|
} else {
|
|
11609
|
-
let
|
|
11610
|
-
this.#asyncReaddirInFlight = new Promise((res) =>
|
|
11659
|
+
let resolve2 = () => {};
|
|
11660
|
+
this.#asyncReaddirInFlight = new Promise((res) => resolve2 = res);
|
|
11611
11661
|
try {
|
|
11612
11662
|
for (const e of await this.#fs.promises.readdir(fullpath, {
|
|
11613
11663
|
withFileTypes: true
|
|
@@ -11620,7 +11670,7 @@ class PathBase {
|
|
|
11620
11670
|
children.provisional = 0;
|
|
11621
11671
|
}
|
|
11622
11672
|
this.#asyncReaddirInFlight = undefined;
|
|
11623
|
-
|
|
11673
|
+
resolve2();
|
|
11624
11674
|
}
|
|
11625
11675
|
return children.slice(0, children.provisional);
|
|
11626
11676
|
}
|
|
@@ -11766,7 +11816,7 @@ class PathScurryBase {
|
|
|
11766
11816
|
constructor(cwd = process.cwd(), pathImpl, sep2, { nocase, childrenCacheSize = 16 * 1024, fs = defaultFS } = {}) {
|
|
11767
11817
|
this.#fs = fsFromOption(fs);
|
|
11768
11818
|
if (cwd instanceof URL || cwd.startsWith("file://")) {
|
|
11769
|
-
cwd =
|
|
11819
|
+
cwd = fileURLToPath3(cwd);
|
|
11770
11820
|
}
|
|
11771
11821
|
const cwdPath = pathImpl.resolve(cwd);
|
|
11772
11822
|
this.roots = Object.create(null);
|
|
@@ -13070,7 +13120,7 @@ class Glob {
|
|
|
13070
13120
|
if (!opts.cwd) {
|
|
13071
13121
|
this.cwd = "";
|
|
13072
13122
|
} else if (opts.cwd instanceof URL || opts.cwd.startsWith("file://")) {
|
|
13073
|
-
opts.cwd =
|
|
13123
|
+
opts.cwd = fileURLToPath4(opts.cwd);
|
|
13074
13124
|
}
|
|
13075
13125
|
this.cwd = opts.cwd || "";
|
|
13076
13126
|
this.root = opts.root;
|
|
@@ -13624,10 +13674,10 @@ class LRUMap {
|
|
|
13624
13674
|
// src/proxy/sessionStore.ts
|
|
13625
13675
|
import {
|
|
13626
13676
|
closeSync,
|
|
13627
|
-
existsSync as
|
|
13677
|
+
existsSync as existsSync3,
|
|
13628
13678
|
mkdirSync,
|
|
13629
13679
|
openSync,
|
|
13630
|
-
readFileSync,
|
|
13680
|
+
readFileSync as readFileSync2,
|
|
13631
13681
|
renameSync,
|
|
13632
13682
|
statSync,
|
|
13633
13683
|
unlinkSync,
|
|
@@ -13682,7 +13732,7 @@ var sessionDirOverride = null;
|
|
|
13682
13732
|
var skipLocking = false;
|
|
13683
13733
|
function getStorePath() {
|
|
13684
13734
|
const dir = sessionDirOverride || process.env.MERIDIAN_SESSION_DIR || process.env.CLAUDE_PROXY_SESSION_DIR || getDefaultCacheDir();
|
|
13685
|
-
if (!
|
|
13735
|
+
if (!existsSync3(dir)) {
|
|
13686
13736
|
mkdirSync(dir, { recursive: true });
|
|
13687
13737
|
}
|
|
13688
13738
|
return join2(dir, "sessions.json");
|
|
@@ -13690,9 +13740,9 @@ function getStorePath() {
|
|
|
13690
13740
|
function getDefaultCacheDir() {
|
|
13691
13741
|
const newDir = join2(homedir(), ".cache", "meridian");
|
|
13692
13742
|
const oldDir = join2(homedir(), ".cache", "opencode-claude-max-proxy");
|
|
13693
|
-
if (
|
|
13743
|
+
if (existsSync3(newDir))
|
|
13694
13744
|
return newDir;
|
|
13695
|
-
if (
|
|
13745
|
+
if (existsSync3(oldDir)) {
|
|
13696
13746
|
try {
|
|
13697
13747
|
const { symlinkSync } = __require("fs");
|
|
13698
13748
|
symlinkSync(oldDir, newDir);
|
|
@@ -13705,10 +13755,10 @@ function getDefaultCacheDir() {
|
|
|
13705
13755
|
}
|
|
13706
13756
|
function readStore() {
|
|
13707
13757
|
const path3 = getStorePath();
|
|
13708
|
-
if (!
|
|
13758
|
+
if (!existsSync3(path3))
|
|
13709
13759
|
return {};
|
|
13710
13760
|
try {
|
|
13711
|
-
const data =
|
|
13761
|
+
const data = readFileSync2(path3, "utf-8");
|
|
13712
13762
|
return JSON.parse(data);
|
|
13713
13763
|
} catch (e) {
|
|
13714
13764
|
console.error("[sessionStore] read failed:", e.message);
|
|
@@ -14057,8 +14107,8 @@ function createProxyServer(config = {}) {
|
|
|
14057
14107
|
activeSessions++;
|
|
14058
14108
|
return;
|
|
14059
14109
|
}
|
|
14060
|
-
return new Promise((
|
|
14061
|
-
sessionQueue.push({ resolve:
|
|
14110
|
+
return new Promise((resolve3) => {
|
|
14111
|
+
sessionQueue.push({ resolve: resolve3 });
|
|
14062
14112
|
});
|
|
14063
14113
|
}
|
|
14064
14114
|
function releaseSession() {
|
|
@@ -14094,11 +14144,15 @@ function createProxyServer(config = {}) {
|
|
|
14094
14144
|
return textPrompt;
|
|
14095
14145
|
};
|
|
14096
14146
|
const body = await c.req.json();
|
|
14147
|
+
if (!Array.isArray(body.messages)) {
|
|
14148
|
+
return c.json({ type: "error", error: { type: "invalid_request_error", message: "messages: Field required" } }, 400);
|
|
14149
|
+
}
|
|
14097
14150
|
const authStatus = await getClaudeAuthStatusAsync();
|
|
14098
|
-
|
|
14151
|
+
const agentMode = c.req.header("x-opencode-agent-mode") ?? null;
|
|
14152
|
+
let model = mapModelToClaudeModel(body.model || "sonnet", authStatus?.subscriptionType, agentMode);
|
|
14099
14153
|
const adapter = detectAdapter(c);
|
|
14100
14154
|
const adapterStreamPref = adapter.prefersStreaming?.(body);
|
|
14101
|
-
const stream2 = adapterStreamPref !== undefined ? adapterStreamPref : body.stream ??
|
|
14155
|
+
const stream2 = adapterStreamPref !== undefined ? adapterStreamPref : body.stream ?? false;
|
|
14102
14156
|
const workingDirectory = (process.env.MERIDIAN_WORKDIR ?? process.env.CLAUDE_PROXY_WORKDIR) || adapter.extractWorkingDirectory(body) || process.cwd();
|
|
14103
14157
|
const {
|
|
14104
14158
|
CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS,
|
|
@@ -14129,7 +14183,7 @@ function createProxyServer(config = {}) {
|
|
|
14129
14183
|
}).join(" → ");
|
|
14130
14184
|
const lineageType = lineageResult.type === "diverged" && !cachedSession ? "new" : lineageResult.type;
|
|
14131
14185
|
const msgCount = Array.isArray(body.messages) ? body.messages.length : 0;
|
|
14132
|
-
const requestLogLine = `${requestMeta.requestId} model=${model} stream=${stream2} tools=${body.tools?.length ?? 0} lineage=${lineageType} session=${resumeSessionId?.slice(0, 8) || "new"}${isUndo && undoRollbackUuid ? ` rollback=${undoRollbackUuid.slice(0, 8)}` : ""} active=${activeSessions}/${MAX_CONCURRENT_SESSIONS} msgCount=${msgCount}`;
|
|
14186
|
+
const requestLogLine = `${requestMeta.requestId} model=${model} stream=${stream2} tools=${body.tools?.length ?? 0} lineage=${lineageType} session=${resumeSessionId?.slice(0, 8) || "new"}${isUndo && undoRollbackUuid ? ` rollback=${undoRollbackUuid.slice(0, 8)}` : ""}${agentMode ? ` agent=${agentMode}` : ""} active=${activeSessions}/${MAX_CONCURRENT_SESSIONS} msgCount=${msgCount}`;
|
|
14133
14187
|
console.error(`[PROXY] ${requestLogLine} msgs=${msgSummary}`);
|
|
14134
14188
|
diagnosticLog.session(`${requestLogLine}`, requestMeta.requestId);
|
|
14135
14189
|
claudeLog("request.received", {
|
|
@@ -14319,7 +14373,7 @@ function createProxyServer(config = {}) {
|
|
|
14319
14373
|
adapter,
|
|
14320
14374
|
onStderr
|
|
14321
14375
|
}))) {
|
|
14322
|
-
if (event.type === "assistant") {
|
|
14376
|
+
if (event.type === "assistant" && !event.error) {
|
|
14323
14377
|
didYieldContent = true;
|
|
14324
14378
|
}
|
|
14325
14379
|
yield event;
|
|
@@ -14363,13 +14417,14 @@ function createProxyServer(config = {}) {
|
|
|
14363
14417
|
if (isExtraUsageRequiredError(errMsg) && hasExtendedContext(model)) {
|
|
14364
14418
|
const from = model;
|
|
14365
14419
|
model = stripExtendedContext(model);
|
|
14420
|
+
recordExtendedContextUnavailable();
|
|
14366
14421
|
claudeLog("upstream.context_fallback", {
|
|
14367
14422
|
mode: "non_stream",
|
|
14368
14423
|
from,
|
|
14369
14424
|
to: model,
|
|
14370
14425
|
reason: "extra_usage_required"
|
|
14371
14426
|
});
|
|
14372
|
-
console.error(`[PROXY] ${requestMeta.requestId} extra usage required for [1m], falling back to ${model}`);
|
|
14427
|
+
console.error(`[PROXY] ${requestMeta.requestId} extra usage required for [1m], falling back to ${model} (skipping [1m] for 1h)`);
|
|
14373
14428
|
continue;
|
|
14374
14429
|
}
|
|
14375
14430
|
if (isExpiredTokenError(errMsg) && !tokenRefreshed) {
|
|
@@ -14655,13 +14710,14 @@ Subprocess stderr: ${stderrOutput}`;
|
|
|
14655
14710
|
if (isExtraUsageRequiredError(errMsg) && hasExtendedContext(model)) {
|
|
14656
14711
|
const from = model;
|
|
14657
14712
|
model = stripExtendedContext(model);
|
|
14713
|
+
recordExtendedContextUnavailable();
|
|
14658
14714
|
claudeLog("upstream.context_fallback", {
|
|
14659
14715
|
mode: "stream",
|
|
14660
14716
|
from,
|
|
14661
14717
|
to: model,
|
|
14662
14718
|
reason: "extra_usage_required"
|
|
14663
14719
|
});
|
|
14664
|
-
console.error(`[PROXY] ${requestMeta.requestId} extra usage required for [1m], falling back to ${model}`);
|
|
14720
|
+
console.error(`[PROXY] ${requestMeta.requestId} extra usage required for [1m], falling back to ${model} (skipping [1m] for 1h)`);
|
|
14665
14721
|
continue;
|
|
14666
14722
|
}
|
|
14667
14723
|
if (isExpiredTokenError(errMsg) && !tokenRefreshed) {
|
|
@@ -15106,7 +15162,8 @@ data: ${JSON.stringify({
|
|
|
15106
15162
|
email: auth.email,
|
|
15107
15163
|
subscriptionType: auth.subscriptionType
|
|
15108
15164
|
},
|
|
15109
|
-
mode: process.env.MERIDIAN_PASSTHROUGH ?? process.env.CLAUDE_PROXY_PASSTHROUGH ? "passthrough" : "internal"
|
|
15165
|
+
mode: process.env.MERIDIAN_PASSTHROUGH ?? process.env.CLAUDE_PROXY_PASSTHROUGH ? "passthrough" : "internal",
|
|
15166
|
+
plugin: { opencode: checkPluginConfigured() ? "configured" : "not-configured" }
|
|
15110
15167
|
});
|
|
15111
15168
|
} catch {
|
|
15112
15169
|
return c.json({
|
|
@@ -15166,8 +15223,8 @@ Or use a different port:`);
|
|
|
15166
15223
|
server,
|
|
15167
15224
|
config: finalConfig,
|
|
15168
15225
|
async close() {
|
|
15169
|
-
await new Promise((
|
|
15170
|
-
server.close((err) => err ? reject(err) :
|
|
15226
|
+
await new Promise((resolve3, reject) => {
|
|
15227
|
+
server.close((err) => err ? reject(err) : resolve3());
|
|
15171
15228
|
});
|
|
15172
15229
|
}
|
|
15173
15230
|
};
|
package/dist/cli.js
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
startProxyServer
|
|
4
|
-
} from "./cli-
|
|
4
|
+
} from "./cli-s6f9jefk.js";
|
|
5
|
+
import"./cli-rtab0qa6.js";
|
|
6
|
+
import"./cli-m9pfb7h9.js";
|
|
5
7
|
import {
|
|
6
8
|
__require
|
|
7
|
-
} from "./cli-
|
|
9
|
+
} from "./cli-a05ws7rb.js";
|
|
8
10
|
|
|
9
11
|
// bin/cli.ts
|
|
10
12
|
import { createRequire } from "module";
|
|
@@ -26,6 +28,7 @@ Usage: meridian [command] [options]
|
|
|
26
28
|
|
|
27
29
|
Commands:
|
|
28
30
|
(default) Start the proxy server
|
|
31
|
+
setup Configure the OpenCode plugin (run once after install)
|
|
29
32
|
refresh-token Refresh the Claude Code OAuth token
|
|
30
33
|
|
|
31
34
|
Options:
|
|
@@ -41,8 +44,29 @@ Environment variables:
|
|
|
41
44
|
See https://github.com/rynfar/meridian for full documentation.`);
|
|
42
45
|
process.exit(0);
|
|
43
46
|
}
|
|
47
|
+
if (args[0] === "setup") {
|
|
48
|
+
const { findPluginPath, runSetup } = await import("./setup-5x116vbs.js");
|
|
49
|
+
const pluginPath = findPluginPath(import.meta.url);
|
|
50
|
+
const result = runSetup(pluginPath);
|
|
51
|
+
if (result.alreadyConfigured) {
|
|
52
|
+
console.log(`\x1B[32m✓ Meridian plugin already configured\x1B[0m`);
|
|
53
|
+
console.log(` ${result.configPath}`);
|
|
54
|
+
} else {
|
|
55
|
+
if (result.removedStale.length > 0) {
|
|
56
|
+
console.log(` Removed ${result.removedStale.length} stale plugin entr${result.removedStale.length === 1 ? "y" : "ies"}`);
|
|
57
|
+
}
|
|
58
|
+
console.log(`\x1B[32m✓ Meridian plugin configured\x1B[0m`);
|
|
59
|
+
console.log(` Config: ${result.configPath}`);
|
|
60
|
+
console.log(` Plugin: ${result.pluginPath}`);
|
|
61
|
+
if (!result.created) {
|
|
62
|
+
console.log(`
|
|
63
|
+
Restart OpenCode for the plugin to take effect.`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
process.exit(0);
|
|
67
|
+
}
|
|
44
68
|
if (args[0] === "refresh-token") {
|
|
45
|
-
const { refreshOAuthToken } = await import("./tokenRefresh-
|
|
69
|
+
const { refreshOAuthToken } = await import("./tokenRefresh-ywwpe8k2.js");
|
|
46
70
|
const success = await refreshOAuthToken();
|
|
47
71
|
if (success) {
|
|
48
72
|
console.log("Token refreshed successfully");
|
|
@@ -63,6 +87,18 @@ var port = parseInt(process.env.MERIDIAN_PORT ?? process.env.CLAUDE_PROXY_PORT ?
|
|
|
63
87
|
var host = process.env.MERIDIAN_HOST ?? process.env.CLAUDE_PROXY_HOST ?? "127.0.0.1";
|
|
64
88
|
var idleTimeoutSeconds = parseInt(process.env.MERIDIAN_IDLE_TIMEOUT_SECONDS ?? process.env.CLAUDE_PROXY_IDLE_TIMEOUT_SECONDS ?? "120", 10);
|
|
65
89
|
async function runCli(start = startProxyServer, runExec = exec) {
|
|
90
|
+
try {
|
|
91
|
+
const { findOpencodeConfigPath, checkPluginConfigured, findPluginPath } = await import("./setup-5x116vbs.js");
|
|
92
|
+
const configPath = findOpencodeConfigPath();
|
|
93
|
+
const { existsSync } = await import("fs");
|
|
94
|
+
if (existsSync(configPath) && !checkPluginConfigured(configPath)) {
|
|
95
|
+
const pluginPath = findPluginPath(import.meta.url);
|
|
96
|
+
console.error("\x1B[33m⚠ Meridian plugin not found in OpenCode config.\x1B[0m");
|
|
97
|
+
console.error(" Session tracking and subagent model selection won't work.");
|
|
98
|
+
console.error(` Fix: meridian setup`);
|
|
99
|
+
console.error("");
|
|
100
|
+
}
|
|
101
|
+
} catch {}
|
|
66
102
|
try {
|
|
67
103
|
const { stdout } = await runExec("claude auth status", { timeout: 5000 });
|
|
68
104
|
const auth = JSON.parse(stdout);
|
package/dist/proxy/adapter.d.ts
CHANGED
|
@@ -69,7 +69,7 @@ export interface AgentAdapter {
|
|
|
69
69
|
*
|
|
70
70
|
* When this method is defined and returns false, the proxy forces
|
|
71
71
|
* stream=false regardless of the client's body.stream setting.
|
|
72
|
-
* When undefined or returns true, body.stream is used (defaulting to
|
|
72
|
+
* When undefined or returns true, body.stream is used (defaulting to false).
|
|
73
73
|
*/
|
|
74
74
|
prefersStreaming?(body: any): boolean;
|
|
75
75
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileChanges.d.ts","sourceRoot":"","sources":["../../src/proxy/fileChanges.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,4DAA4D;AAC5D,MAAM,WAAW,UAAU;IACzB,8CAA8C;IAC9C,SAAS,EAAE,OAAO,GAAG,QAAQ,CAAA;IAC7B,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAA;CACb;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,MAAM,GAChB,UAAU,GAAG,SAAS,CAexB;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,UAAU,EAAE,EACrB,SAAS,EAAE,MAAM;;oBAIO;QACpB,SAAS,EAAE,MAAM,CAAA;QACjB,UAAU,EAAE,OAAO,CAAA;QACnB,aAAa,EAAE,OAAO,CAAA;QACtB,WAAW,EAAE,MAAM,CAAA;KACpB;EAkBJ;
|
|
1
|
+
{"version":3,"file":"fileChanges.d.ts","sourceRoot":"","sources":["../../src/proxy/fileChanges.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,4DAA4D;AAC5D,MAAM,WAAW,UAAU;IACzB,8CAA8C;IAC9C,SAAS,EAAE,OAAO,GAAG,QAAQ,CAAA;IAC7B,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAA;CACb;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,OAAO,EAClB,SAAS,EAAE,MAAM,GAChB,UAAU,GAAG,SAAS,CAexB;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,UAAU,EAAE,EACrB,SAAS,EAAE,MAAM;;oBAIO;QACpB,SAAS,EAAE,MAAM,CAAA;QACjB,UAAU,EAAE,OAAO,CAAA;QACnB,aAAa,EAAE,OAAO,CAAA;QACtB,WAAW,EAAE,MAAM,CAAA;KACpB;EAkBJ;AAcD;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE,CAwCxE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,EACnD,SAAS,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,KAAK,UAAU,EAAE,GAChE,UAAU,EAAE,CA0Bd;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM,GAAG,SAAS,CAgBjF"}
|
package/dist/proxy/models.d.ts
CHANGED
|
@@ -7,7 +7,23 @@ export interface ClaudeAuthStatus {
|
|
|
7
7
|
subscriptionType?: string;
|
|
8
8
|
email?: string;
|
|
9
9
|
}
|
|
10
|
-
export declare function mapModelToClaudeModel(model: string, subscriptionType?: string | null): ClaudeModel;
|
|
10
|
+
export declare function mapModelToClaudeModel(model: string, subscriptionType?: string | null, agentMode?: string | null): ClaudeModel;
|
|
11
|
+
/**
|
|
12
|
+
* Record that Extra Usage is not enabled on this subscription.
|
|
13
|
+
* For the next hour, mapModelToClaudeModel will return the base model
|
|
14
|
+
* directly — no failed [1m] attempt per request. After the cooldown
|
|
15
|
+
* the next request probes [1m] once; if Extra Usage was enabled in the
|
|
16
|
+
* meantime it succeeds and the flag is never set again.
|
|
17
|
+
*/
|
|
18
|
+
export declare function recordExtendedContextUnavailable(): void;
|
|
19
|
+
/**
|
|
20
|
+
* Returns true while within the cooldown window after a confirmed
|
|
21
|
+
* Extra Usage failure. After the window expires this returns false,
|
|
22
|
+
* allowing one probe to check whether Extra Usage has been enabled.
|
|
23
|
+
*/
|
|
24
|
+
export declare function isExtendedContextKnownUnavailable(): boolean;
|
|
25
|
+
/** Reset the Extended Context unavailability timer — for testing only. */
|
|
26
|
+
export declare function resetExtendedContextUnavailable(): void;
|
|
11
27
|
/**
|
|
12
28
|
* Strip the [1m] suffix from a model, returning the base variant.
|
|
13
29
|
* Used for fallback when the 1M context window is rate-limited.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/proxy/models.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,YAAY,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,CAAA;AACjF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AA0BD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,WAAW,
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/proxy/models.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,YAAY,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,CAAA;AACjF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AA0BD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,WAAW,CAuB7H;AAWD;;;;;;GAMG;AACH,wBAAgB,gCAAgC,IAAI,IAAI,CAEvD;AAED;;;;GAIG;AACH,wBAAgB,iCAAiC,IAAI,OAAO,CAG3D;AAED,0EAA0E;AAC1E,wBAAgB,+BAA+B,IAAI,IAAI,CAEtD;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,CAIpE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAE9D;AAED,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAkCjF;AAOD;;;;;;;;;;GAUG;AACH,wBAAsB,4BAA4B,IAAI,OAAO,CAAC,MAAM,CAAC,CA4DpE;AAED,2CAA2C;AAC3C,wBAAgB,qBAAqB,IAAI,IAAI,CAG5C;AAED,kDAAkD;AAClD,wBAAgB,2BAA2B,IAAI,IAAI,CAMlD;AAED;;6DAE6D;AAC7D,wBAAgB,qBAAqB,IAAI,IAAI,CAG5C;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAG/D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/proxy/server.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AACtE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/proxy/server.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AACtE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,CAAA;AAmBvD,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,oBAAoB,EACpB,KAAK,aAAa,EACnB,MAAM,mBAAmB,CAAA;AAG1B,OAAO,EAA+B,iBAAiB,EAAE,mBAAmB,EAAgB,MAAM,iBAAiB,CAAA;AAEnH,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,oBAAoB,EAAE,CAAA;AAChE,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,CAAA;AACjD,YAAY,EAAE,aAAa,EAAE,CAAA;AAyF7B,wBAAgB,iBAAiB,CAAC,MAAM,GAAE,OAAO,CAAC,WAAW,CAAM,GAAG,WAAW,CAyxChF;AAED,wBAAsB,gBAAgB,CAAC,MAAM,GAAE,OAAO,CAAC,WAAW,CAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CA0ChG"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Meridian setup — OpenCode plugin configuration.
|
|
3
|
+
*
|
|
4
|
+
* Manages the meridian plugin entry in ~/.config/opencode/opencode.json
|
|
5
|
+
* (or the platform-equivalent path). Called by:
|
|
6
|
+
* - `meridian setup` — writes the plugin entry
|
|
7
|
+
* - `meridian` startup — warns if plugin is missing
|
|
8
|
+
* - `GET /health` — reports plugin status
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Resolve the OpenCode global config file path.
|
|
12
|
+
* Respects OPENCODE_CONFIG_DIR and XDG_CONFIG_HOME env vars.
|
|
13
|
+
*/
|
|
14
|
+
export declare function findOpencodeConfigPath(): string;
|
|
15
|
+
/**
|
|
16
|
+
* Resolve the absolute path to plugin/meridian.ts from any entry point.
|
|
17
|
+
* Works whether called from bin/cli.ts (dev) or dist/cli.js (installed).
|
|
18
|
+
*/
|
|
19
|
+
export declare function findPluginPath(fromUrl: string): string;
|
|
20
|
+
/**
|
|
21
|
+
* Returns true if the meridian plugin is already configured in the
|
|
22
|
+
* OpenCode global config. Returns false if config doesn't exist or
|
|
23
|
+
* plugin is missing.
|
|
24
|
+
*/
|
|
25
|
+
export declare function checkPluginConfigured(configPath?: string): boolean;
|
|
26
|
+
export interface SetupResult {
|
|
27
|
+
configPath: string;
|
|
28
|
+
pluginPath: string;
|
|
29
|
+
alreadyConfigured: boolean;
|
|
30
|
+
removedStale: string[];
|
|
31
|
+
created: boolean;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Configure the meridian plugin in ~/.config/opencode/opencode.json.
|
|
35
|
+
*
|
|
36
|
+
* - Creates the config file if it doesn't exist
|
|
37
|
+
* - Removes stale meridian plugin entries from previous installs
|
|
38
|
+
* - Adds the current plugin path
|
|
39
|
+
* - Leaves all other plugins untouched
|
|
40
|
+
*/
|
|
41
|
+
export declare function runSetup(pluginPath: string, configPath?: string): SetupResult;
|
|
42
|
+
//# sourceMappingURL=setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/proxy/setup.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAWH;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAW/C;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGtD;AAkBD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAWlE;AAMD,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,YAAY,EAAE,MAAM,EAAE,CAAA;IACtB,OAAO,EAAE,OAAO,CAAA;CACjB;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,WAAW,CAgC7E"}
|
package/dist/server.js
CHANGED
|
@@ -6,8 +6,10 @@ import {
|
|
|
6
6
|
getMaxSessionsLimit,
|
|
7
7
|
hashMessage,
|
|
8
8
|
startProxyServer
|
|
9
|
-
} from "./cli-
|
|
10
|
-
import"./cli-
|
|
9
|
+
} from "./cli-s6f9jefk.js";
|
|
10
|
+
import"./cli-rtab0qa6.js";
|
|
11
|
+
import"./cli-m9pfb7h9.js";
|
|
12
|
+
import"./cli-a05ws7rb.js";
|
|
11
13
|
export {
|
|
12
14
|
startProxyServer,
|
|
13
15
|
hashMessage,
|