@zhixuan92/multi-model-agent-mcp 2.8.0 → 2.8.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 +11 -207
- package/dist/cli.js +6 -599
- package/package.json +8 -49
- package/dist/cli.d.ts +0 -79
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/headline.d.ts +0 -25
- package/dist/headline.d.ts.map +0 -1
- package/dist/headline.js +0 -58
- package/dist/headline.js.map +0 -1
- package/dist/http/auth.d.ts +0 -8
- package/dist/http/auth.d.ts.map +0 -1
- package/dist/http/auth.js +0 -43
- package/dist/http/auth.js.map +0 -1
- package/dist/http/cwd-validator.d.ts +0 -11
- package/dist/http/cwd-validator.d.ts.map +0 -1
- package/dist/http/cwd-validator.js +0 -31
- package/dist/http/cwd-validator.js.map +0 -1
- package/dist/http/lifecycle-handlers.d.ts +0 -12
- package/dist/http/lifecycle-handlers.d.ts.map +0 -1
- package/dist/http/lifecycle-handlers.js +0 -87
- package/dist/http/lifecycle-handlers.js.map +0 -1
- package/dist/http/loopback.d.ts +0 -10
- package/dist/http/loopback.d.ts.map +0 -1
- package/dist/http/loopback.js +0 -34
- package/dist/http/loopback.js.map +0 -1
- package/dist/http/project-registry.d.ts +0 -48
- package/dist/http/project-registry.d.ts.map +0 -1
- package/dist/http/project-registry.js +0 -119
- package/dist/http/project-registry.js.map +0 -1
- package/dist/http/session-router.d.ts +0 -33
- package/dist/http/session-router.d.ts.map +0 -1
- package/dist/http/session-router.js +0 -62
- package/dist/http/session-router.js.map +0 -1
- package/dist/http/status-endpoint.d.ts +0 -20
- package/dist/http/status-endpoint.d.ts.map +0 -1
- package/dist/http/status-endpoint.js +0 -85
- package/dist/http/status-endpoint.js.map +0 -1
- package/dist/http/transport.d.ts +0 -14
- package/dist/http/transport.d.ts.map +0 -1
- package/dist/http/transport.js +0 -209
- package/dist/http/transport.js.map +0 -1
- package/dist/index.d.ts +0 -4
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -3
- package/dist/index.js.map +0 -1
- package/dist/routing/render-provider-routing-matrix.d.ts +0 -7
- package/dist/routing/render-provider-routing-matrix.d.ts.map +0 -1
- package/dist/routing/render-provider-routing-matrix.js +0 -153
- package/dist/routing/render-provider-routing-matrix.js.map +0 -1
- package/dist/status-cli.d.ts +0 -2
- package/dist/status-cli.d.ts.map +0 -1
- package/dist/status-cli.js +0 -68
- package/dist/status-cli.js.map +0 -1
- package/dist/tools/audit-document.d.ts +0 -23
- package/dist/tools/audit-document.d.ts.map +0 -1
- package/dist/tools/audit-document.js +0 -123
- package/dist/tools/audit-document.js.map +0 -1
- package/dist/tools/batch-response.d.ts +0 -14
- package/dist/tools/batch-response.d.ts.map +0 -1
- package/dist/tools/batch-response.js +0 -42
- package/dist/tools/batch-response.js.map +0 -1
- package/dist/tools/confirm-clarifications.d.ts +0 -15
- package/dist/tools/confirm-clarifications.d.ts.map +0 -1
- package/dist/tools/confirm-clarifications.js +0 -95
- package/dist/tools/confirm-clarifications.js.map +0 -1
- package/dist/tools/debug-task.d.ts +0 -13
- package/dist/tools/debug-task.d.ts.map +0 -1
- package/dist/tools/debug-task.js +0 -63
- package/dist/tools/debug-task.js.map +0 -1
- package/dist/tools/execute-plan.d.ts +0 -12
- package/dist/tools/execute-plan.d.ts.map +0 -1
- package/dist/tools/execute-plan.js +0 -123
- package/dist/tools/execute-plan.js.map +0 -1
- package/dist/tools/review-code.d.ts +0 -17
- package/dist/tools/review-code.d.ts.map +0 -1
- package/dist/tools/review-code.js +0 -108
- package/dist/tools/review-code.js.map +0 -1
- package/dist/tools/shared.d.ts +0 -72
- package/dist/tools/shared.d.ts.map +0 -1
- package/dist/tools/shared.js +0 -160
- package/dist/tools/shared.js.map +0 -1
- package/dist/tools/truncation.d.ts +0 -18
- package/dist/tools/truncation.d.ts.map +0 -1
- package/dist/tools/truncation.js +0 -62
- package/dist/tools/truncation.js.map +0 -1
- package/dist/tools/verify-work.d.ts +0 -12
- package/dist/tools/verify-work.d.ts.map +0 -1
- package/dist/tools/verify-work.js +0 -85
- package/dist/tools/verify-work.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,20 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zhixuan92/multi-model-agent-mcp",
|
|
3
|
-
"version": "2.8.
|
|
3
|
+
"version": "2.8.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
|
-
"description": "
|
|
6
|
+
"description": "DEPRECATED. Renamed to @zhixuan92/multi-model-agent in 3.0.0. This package is a stub that prints a migration notice and exits.",
|
|
7
7
|
"author": "Zhang Zhixuan <zhangzhixuan312@gmail.com>",
|
|
8
8
|
"keywords": [
|
|
9
|
-
"
|
|
10
|
-
"model-context-protocol",
|
|
11
|
-
"llm",
|
|
12
|
-
"claude",
|
|
13
|
-
"codex",
|
|
14
|
-
"openai",
|
|
15
|
-
"agent",
|
|
16
|
-
"multi-model",
|
|
17
|
-
"delegation"
|
|
9
|
+
"deprecated"
|
|
18
10
|
],
|
|
19
11
|
"repository": {
|
|
20
12
|
"type": "git",
|
|
@@ -26,48 +18,15 @@
|
|
|
26
18
|
"files": [
|
|
27
19
|
"dist"
|
|
28
20
|
],
|
|
29
|
-
"main": "./dist/index.js",
|
|
30
|
-
"types": "./dist/index.d.ts",
|
|
31
21
|
"bin": {
|
|
32
|
-
"multi-model-agent": "
|
|
33
|
-
"mmagent": "
|
|
34
|
-
},
|
|
35
|
-
"exports": {
|
|
36
|
-
".": {
|
|
37
|
-
"types": "./dist/index.d.ts",
|
|
38
|
-
"import": "./dist/index.js"
|
|
39
|
-
},
|
|
40
|
-
"./routing/render-provider-routing-matrix": {
|
|
41
|
-
"types": "./dist/routing/render-provider-routing-matrix.d.ts",
|
|
42
|
-
"import": "./dist/routing/render-provider-routing-matrix.js"
|
|
43
|
-
},
|
|
44
|
-
"./tools/audit-document": {
|
|
45
|
-
"types": "./dist/tools/audit-document.d.ts",
|
|
46
|
-
"import": "./dist/tools/audit-document.js"
|
|
47
|
-
},
|
|
48
|
-
"./tools/debug-task": {
|
|
49
|
-
"types": "./dist/tools/debug-task.d.ts",
|
|
50
|
-
"import": "./dist/tools/debug-task.js"
|
|
51
|
-
},
|
|
52
|
-
"./tools/review-code": {
|
|
53
|
-
"types": "./dist/tools/review-code.d.ts",
|
|
54
|
-
"import": "./dist/tools/review-code.js"
|
|
55
|
-
},
|
|
56
|
-
"./tools/verify-work": {
|
|
57
|
-
"types": "./dist/tools/verify-work.d.ts",
|
|
58
|
-
"import": "./dist/tools/verify-work.js"
|
|
59
|
-
}
|
|
22
|
+
"multi-model-agent": "dist/cli.js",
|
|
23
|
+
"mmagent": "dist/cli.js"
|
|
60
24
|
},
|
|
61
25
|
"scripts": {
|
|
62
|
-
"build": "
|
|
26
|
+
"build": "mkdir -p dist && cp src/cli.js dist/cli.js && chmod +x dist/cli.js",
|
|
63
27
|
"prepublishOnly": "npm run build"
|
|
64
28
|
},
|
|
65
29
|
"engines": {
|
|
66
|
-
"node": ">=
|
|
67
|
-
},
|
|
68
|
-
"dependencies": {
|
|
69
|
-
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
70
|
-
"@zhixuan92/multi-model-agent-core": "^2.8.0",
|
|
71
|
-
"zod": "^4.0.0"
|
|
30
|
+
"node": ">=18.0.0"
|
|
72
31
|
}
|
|
73
|
-
}
|
|
32
|
+
}
|
package/dist/cli.d.ts
DELETED
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
3
|
-
import { z } from 'zod';
|
|
4
|
-
import { runTasks } from '@zhixuan92/multi-model-agent-core/run-tasks';
|
|
5
|
-
import type { MultiModelConfig, DiagnosticLogger, ProjectContext } from '@zhixuan92/multi-model-agent-core';
|
|
6
|
-
export { computeTimings, computeBatchProgress, computeAggregateCost } from './tools/batch-response.js';
|
|
7
|
-
export declare const SERVER_NAME = "multi-model-agent";
|
|
8
|
-
export declare const ASSISTANT_MODEL_NAME = "GPT-5";
|
|
9
|
-
export declare function buildCliGreeting(): string;
|
|
10
|
-
export declare const SERVER_VERSION: string;
|
|
11
|
-
export declare function buildTaskSchema(availableAgents: [string, ...string[]]): z.ZodObject<{
|
|
12
|
-
prompt: z.ZodString;
|
|
13
|
-
agentType: z.ZodOptional<z.ZodEnum<{
|
|
14
|
-
[x: string]: string;
|
|
15
|
-
}>>;
|
|
16
|
-
filePaths: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
17
|
-
done: z.ZodOptional<z.ZodString>;
|
|
18
|
-
contextBlockIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
19
|
-
}, z.core.$strict>;
|
|
20
|
-
/**
|
|
21
|
-
* Batch cache for `retry_tasks`. Every `delegate_tasks` call stashes the
|
|
22
|
-
* original `TaskSpec[]` under a UUID so the caller can later ask us to
|
|
23
|
-
* re-dispatch specific indices without re-transmitting the briefs. Two
|
|
24
|
-
* bounds (enforced by `BatchCache` in core):
|
|
25
|
-
*
|
|
26
|
-
* - TTL (30 min from creation): keeps stale batches from lingering
|
|
27
|
-
* through a long session. TTL is from-creation (not from-last-access).
|
|
28
|
-
* - LRU cap (100 entries): prevents unbounded growth from a chatty
|
|
29
|
-
* caller that never retries.
|
|
30
|
-
*
|
|
31
|
-
* The `BatchCache` instance lives on `projectContext.batchCache` so it is
|
|
32
|
-
* shared across all sessions attached to the same project root.
|
|
33
|
-
*/
|
|
34
|
-
export declare function buildMcpServer(config: Parameters<typeof runTasks>[1], logger: DiagnosticLogger, options: {
|
|
35
|
-
projectContext: ProjectContext;
|
|
36
|
-
sessionId?: string;
|
|
37
|
-
/** Character threshold that triggers auto-switch from 'full' to
|
|
38
|
-
* 'summary' response mode when the caller uses `responseMode: 'auto'`
|
|
39
|
-
* (the default). Defaults to 65_536, tuned for Claude Code's inline
|
|
40
|
-
* rendering limit. Precedence (highest first): env var
|
|
41
|
-
* MULTI_MODEL_LARGE_RESPONSE_THRESHOLD_CHARS > config file
|
|
42
|
-
* defaults.largeResponseThresholdChars > this option > default. */
|
|
43
|
-
largeResponseThresholdChars?: number;
|
|
44
|
-
/** Internal test-only hook for injecting a stubbed runTasks implementation. */
|
|
45
|
-
_testRunTasksOverride?: typeof runTasks;
|
|
46
|
-
}): McpServer;
|
|
47
|
-
/**
|
|
48
|
-
* MCP CLI config discovery (owned by MCP, not core):
|
|
49
|
-
* 1. --config <path> argument (explicit)
|
|
50
|
-
* 2. MULTI_MODEL_CONFIG environment variable
|
|
51
|
-
* 3. ~/.multi-model/config.json (default home-directory location)
|
|
52
|
-
*/
|
|
53
|
-
export declare function discoverConfig(): Promise<MultiModelConfig>;
|
|
54
|
-
/**
|
|
55
|
-
* Install safety nets for the stdio transport lifecycle. The MCP SDK's
|
|
56
|
-
* StdioServerTransport writes every JSON-RPC frame to `process.stdout`
|
|
57
|
-
* but never attaches an error handler to it, so when the Claude Code
|
|
58
|
-
* client closes the read end of our stdout (reconnect, /mcp restart,
|
|
59
|
-
* extension reload, client crash, long-running-call abort) the next
|
|
60
|
-
* write emits an `EPIPE` error with no listener, which Node turns into
|
|
61
|
-
* `uncaughtException` and — absent a handler — terminates the process.
|
|
62
|
-
* That is the observed "MCP dies every ~2 calls" failure mode.
|
|
63
|
-
*
|
|
64
|
-
* Single-install contract: calling this more than once in one process is a
|
|
65
|
-
* programmer error. The healthy-server contract ("one stderr line at startup")
|
|
66
|
-
* covers only the first install. A second call writes a warning to stderr
|
|
67
|
-
* and returns — it does not register duplicate handlers. This warning path is
|
|
68
|
-
* outside the healthy-server contract; in normal operation `main()` is the only
|
|
69
|
-
* caller and is invoked exactly once per process.
|
|
70
|
-
*/
|
|
71
|
-
export declare function installStdioLifecycleHandlers(logger: DiagnosticLogger): void;
|
|
72
|
-
/** Test-only. Not exported from the package public surface. */
|
|
73
|
-
export declare function __resetStdioLifecycleHandlersForTests(): void;
|
|
74
|
-
export declare function parseHttpFlags(args: string[]): {
|
|
75
|
-
mode: 'http';
|
|
76
|
-
port?: number;
|
|
77
|
-
bind?: string;
|
|
78
|
-
} | undefined;
|
|
79
|
-
//# sourceMappingURL=cli.d.ts.map
|
package/dist/cli.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAQA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,QAAQ,EAAE,MAAM,6CAA6C,CAAC;AAEvE,OAAO,KAAK,EACV,gBAAgB,EAOhB,gBAAgB,EAChB,cAAc,EACf,MAAM,mCAAmC,CAAC;AAmB3C,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEvG,eAAO,MAAM,WAAW,sBAAsB,CAAC;AAC/C,eAAO,MAAM,oBAAoB,UAAU,CAAC;AAG5C,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAmBD,eAAO,MAAM,cAAc,QAAc,CAAC;AAE1C,wBAAgB,eAAe,CAAC,eAAe,EAAE,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;;;;;;;;mBAkBrE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,EACtC,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE;IACP,cAAc,EAAE,cAAc,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;wEAKoE;IACpE,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,+EAA+E;IAC/E,qBAAqB,CAAC,EAAE,OAAO,QAAQ,CAAC;CACzC,aAiWF;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,gBAAgB,CAAC,CA4BhE;AAWD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAoE5E;AAED,+DAA+D;AAC/D,wBAAgB,qCAAqC,IAAI,IAAI,CAa5D;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAYzG"}
|
package/dist/cli.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/headline.d.ts
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import type { BatchTimings, BatchProgress, BatchAggregateCost } from '@zhixuan92/multi-model-agent-core';
|
|
2
|
-
export interface ComposeHeadlineInput {
|
|
3
|
-
timings: BatchTimings;
|
|
4
|
-
batchProgress: BatchProgress;
|
|
5
|
-
aggregateCost: BatchAggregateCost;
|
|
6
|
-
parentModel?: string;
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* Format a USD amount as `$X.YZ` — two decimals, no trailing-zero trimming
|
|
10
|
-
* beyond two. Matches the currency-rendering rule in spec §1.
|
|
11
|
-
*/
|
|
12
|
-
export declare function formatCurrency(usd: number): string;
|
|
13
|
-
/**
|
|
14
|
-
* Format a duration in ms using unit-aware human-readable rules:
|
|
15
|
-
* d < 1m → "Ns" (sub-minute: seconds only)
|
|
16
|
-
* 1m ≤ d < 1h → "Nm Ns" (minute-scale: minutes and seconds, no zero-pad)
|
|
17
|
-
* d ≥ 1h → "Nh Nm" (hour-scale: hours and minutes, seconds dropped)
|
|
18
|
-
* Seconds are truncated (Math.floor) to avoid overstating wall-clock.
|
|
19
|
-
*/
|
|
20
|
-
export declare function formatDuration(ms: number): string;
|
|
21
|
-
/**
|
|
22
|
-
* Compose the one-line ROI headline. See spec §1 for the decision table.
|
|
23
|
-
*/
|
|
24
|
-
export declare function composeHeadline(input: ComposeHeadlineInput): string;
|
|
25
|
-
//# sourceMappingURL=headline.d.ts.map
|
package/dist/headline.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"headline.d.ts","sourceRoot":"","sources":["../src/headline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,kBAAkB,EACnB,MAAM,mCAAmC,CAAC;AAE3C,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,YAAY,CAAC;IACtB,aAAa,EAAE,aAAa,CAAC;IAC7B,aAAa,EAAE,kBAAkB,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAajD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,MAAM,CAoCnE"}
|
package/dist/headline.js
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Format a USD amount as `$X.YZ` — two decimals, no trailing-zero trimming
|
|
3
|
-
* beyond two. Matches the currency-rendering rule in spec §1.
|
|
4
|
-
*/
|
|
5
|
-
export function formatCurrency(usd) {
|
|
6
|
-
return `$${usd.toFixed(2)}`;
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* Format a duration in ms using unit-aware human-readable rules:
|
|
10
|
-
* d < 1m → "Ns" (sub-minute: seconds only)
|
|
11
|
-
* 1m ≤ d < 1h → "Nm Ns" (minute-scale: minutes and seconds, no zero-pad)
|
|
12
|
-
* d ≥ 1h → "Nh Nm" (hour-scale: hours and minutes, seconds dropped)
|
|
13
|
-
* Seconds are truncated (Math.floor) to avoid overstating wall-clock.
|
|
14
|
-
*/
|
|
15
|
-
export function formatDuration(ms) {
|
|
16
|
-
const totalSeconds = Math.floor(ms / 1000);
|
|
17
|
-
if (totalSeconds < 60)
|
|
18
|
-
return `${totalSeconds}s`;
|
|
19
|
-
const totalMinutes = Math.floor(totalSeconds / 60);
|
|
20
|
-
if (totalMinutes < 60) {
|
|
21
|
-
const s = totalSeconds - totalMinutes * 60;
|
|
22
|
-
return `${totalMinutes}m ${s}s`;
|
|
23
|
-
}
|
|
24
|
-
const hours = Math.floor(totalMinutes / 60);
|
|
25
|
-
const m = totalMinutes - hours * 60;
|
|
26
|
-
return `${hours}h ${m}m`;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Compose the one-line ROI headline. See spec §1 for the decision table.
|
|
30
|
-
*/
|
|
31
|
-
export function composeHeadline(input) {
|
|
32
|
-
const { timings, batchProgress, aggregateCost, parentModel } = input;
|
|
33
|
-
const parts = [];
|
|
34
|
-
// Task count + success rate
|
|
35
|
-
parts.push(`${batchProgress.totalTasks} tasks, ${batchProgress.completedTasks}/${batchProgress.totalTasks} ok (${batchProgress.successPercent.toFixed(1)}%)`);
|
|
36
|
-
// Wall clock
|
|
37
|
-
parts.push(`wall ${formatDuration(timings.wallClockMs)}`);
|
|
38
|
-
// Divide-by-zero guard — collapse to "$0.00 actual" for zero-cost batches.
|
|
39
|
-
if (aggregateCost.totalActualCostUSD === 0) {
|
|
40
|
-
parts.push(`${formatCurrency(aggregateCost.totalActualCostUSD)} actual`);
|
|
41
|
-
return parts.join(', ');
|
|
42
|
-
}
|
|
43
|
-
// Parallel savings clause — omitted when single task or savings <= 0
|
|
44
|
-
if (batchProgress.totalTasks > 1 && timings.estimatedParallelSavingsMs > 0) {
|
|
45
|
-
parts.push(`saved ~${formatDuration(timings.estimatedParallelSavingsMs)} vs serial`);
|
|
46
|
-
}
|
|
47
|
-
// Cost clause: with parentModel show saved + ROI, without show actual only.
|
|
48
|
-
if (!parentModel) {
|
|
49
|
-
parts.push(`${formatCurrency(aggregateCost.totalActualCostUSD)} actual`);
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
const ratio = (aggregateCost.totalActualCostUSD + aggregateCost.totalSavedCostUSD) /
|
|
53
|
-
aggregateCost.totalActualCostUSD;
|
|
54
|
-
parts.push(`${formatCurrency(aggregateCost.totalSavedCostUSD)} saved vs ${parentModel} (${ratio.toFixed(1)}x ROI)`);
|
|
55
|
-
}
|
|
56
|
-
return parts.join(', ');
|
|
57
|
-
}
|
|
58
|
-
//# sourceMappingURL=headline.js.map
|
package/dist/headline.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"headline.js","sourceRoot":"","sources":["../src/headline.ts"],"names":[],"mappings":"AAaA;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;AAC9B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,EAAU;IACvC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAC3C,IAAI,YAAY,GAAG,EAAE;QAAE,OAAO,GAAG,YAAY,GAAG,CAAC;IAEjD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;IACnD,IAAI,YAAY,GAAG,EAAE,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,YAAY,GAAG,YAAY,GAAG,EAAE,CAAC;QAC3C,OAAO,GAAG,YAAY,KAAK,CAAC,GAAG,CAAC;IAClC,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;IAC5C,MAAM,CAAC,GAAG,YAAY,GAAG,KAAK,GAAG,EAAE,CAAC;IACpC,OAAO,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,KAA2B;IACzD,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IACrE,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,4BAA4B;IAC5B,KAAK,CAAC,IAAI,CACR,GAAG,aAAa,CAAC,UAAU,WAAW,aAAa,CAAC,cAAc,IAAI,aAAa,CAAC,UAAU,QAAQ,aAAa,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAClJ,CAAC;IAEF,aAAa;IACb,KAAK,CAAC,IAAI,CAAC,QAAQ,cAAc,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAE1D,2EAA2E;IAC3E,IAAI,aAAa,CAAC,kBAAkB,KAAK,CAAC,EAAE,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,aAAa,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QACzE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,qEAAqE;IACrE,IAAI,aAAa,CAAC,UAAU,GAAG,CAAC,IAAI,OAAO,CAAC,0BAA0B,GAAG,CAAC,EAAE,CAAC;QAC3E,KAAK,CAAC,IAAI,CAAC,UAAU,cAAc,CAAC,OAAO,CAAC,0BAA0B,CAAC,YAAY,CAAC,CAAC;IACvF,CAAC;IAED,4EAA4E;IAC5E,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,aAAa,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC3E,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,GACT,CAAC,aAAa,CAAC,kBAAkB,GAAG,aAAa,CAAC,iBAAiB,CAAC;YACpE,aAAa,CAAC,kBAAkB,CAAC;QACnC,KAAK,CAAC,IAAI,CACR,GAAG,cAAc,CAAC,aAAa,CAAC,iBAAiB,CAAC,aAAa,WAAW,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CACxG,CAAC;IACJ,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
package/dist/http/auth.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export declare function loadToken(tokenPath: string): string;
|
|
2
|
-
export declare function validateAuthHeader(header: string | undefined, expected: string): {
|
|
3
|
-
ok: true;
|
|
4
|
-
} | {
|
|
5
|
-
ok: false;
|
|
6
|
-
reason: 'missing' | 'malformed' | 'mismatch';
|
|
7
|
-
};
|
|
8
|
-
//# sourceMappingURL=auth.d.ts.map
|
package/dist/http/auth.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/http/auth.ts"],"names":[],"mappings":"AAUA,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAkBnD;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,QAAQ,EAAE,MAAM,GACf;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,UAAU,CAAA;CAAE,CAU5E"}
|
package/dist/http/auth.js
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import * as fs from 'node:fs';
|
|
2
|
-
import * as path from 'node:path';
|
|
3
|
-
import * as os from 'node:os';
|
|
4
|
-
import { randomBytes, timingSafeEqual } from 'node:crypto';
|
|
5
|
-
function expandHome(p) {
|
|
6
|
-
if (p.startsWith('~/'))
|
|
7
|
-
return path.join(os.homedir(), p.slice(2));
|
|
8
|
-
return p;
|
|
9
|
-
}
|
|
10
|
-
export function loadToken(tokenPath) {
|
|
11
|
-
const resolved = expandHome(tokenPath);
|
|
12
|
-
if (fs.existsSync(resolved)) {
|
|
13
|
-
const stat = fs.statSync(resolved);
|
|
14
|
-
// Warn (do not fail) if the existing file has group/other read/write bits set.
|
|
15
|
-
// Failing hard would break users who already have a token file with default umask.
|
|
16
|
-
if ((stat.mode & 0o077) !== 0) {
|
|
17
|
-
process.stderr.write(`[multi-model-agent] warning: token file ${resolved} has insecure permissions (mode ${(stat.mode & 0o777).toString(8)}); recommend 'chmod 0600 ${resolved}'\n`);
|
|
18
|
-
}
|
|
19
|
-
return fs.readFileSync(resolved, 'utf8').trim();
|
|
20
|
-
}
|
|
21
|
-
const dir = path.dirname(resolved);
|
|
22
|
-
fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
23
|
-
const token = randomBytes(32).toString('base64url');
|
|
24
|
-
fs.writeFileSync(resolved, token + '\n', { mode: 0o600 });
|
|
25
|
-
return token;
|
|
26
|
-
}
|
|
27
|
-
export function validateAuthHeader(header, expected) {
|
|
28
|
-
if (!header)
|
|
29
|
-
return { ok: false, reason: 'missing' };
|
|
30
|
-
const parts = header.split(/\s+/);
|
|
31
|
-
if (parts.length !== 2)
|
|
32
|
-
return { ok: false, reason: 'malformed' };
|
|
33
|
-
if (parts[0].toLowerCase() !== 'bearer')
|
|
34
|
-
return { ok: false, reason: 'malformed' };
|
|
35
|
-
const presented = Buffer.from(parts[1]);
|
|
36
|
-
const expectedBuf = Buffer.from(expected);
|
|
37
|
-
if (presented.length !== expectedBuf.length)
|
|
38
|
-
return { ok: false, reason: 'mismatch' };
|
|
39
|
-
if (!timingSafeEqual(presented, expectedBuf))
|
|
40
|
-
return { ok: false, reason: 'mismatch' };
|
|
41
|
-
return { ok: true };
|
|
42
|
-
}
|
|
43
|
-
//# sourceMappingURL=auth.js.map
|
package/dist/http/auth.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/http/auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE3D,SAAS,UAAU,CAAC,CAAS;IAC3B,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,SAAiB;IACzC,MAAM,QAAQ,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IACvC,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACnC,+EAA+E;QAC/E,mFAAmF;QACnF,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,2CAA2C,QAAQ,mCAAmC,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,4BAA4B,QAAQ,KAAK,CAC/J,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IAClD,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACpD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC1D,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,MAA0B,EAC1B,QAAgB;IAEhB,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IACrD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAClE,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,QAAQ;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IACnF,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1C,IAAI,SAAS,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IACtF,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,WAAW,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IACvF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AACtB,CAAC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export type CwdValidationError = 'missing_cwd' | 'invalid_cwd' | 'cwd_not_dir';
|
|
2
|
-
export type CwdValidationResult = {
|
|
3
|
-
ok: true;
|
|
4
|
-
canonicalCwd: string;
|
|
5
|
-
} | {
|
|
6
|
-
ok: false;
|
|
7
|
-
error: CwdValidationError;
|
|
8
|
-
message: string;
|
|
9
|
-
};
|
|
10
|
-
export declare function validateCwd(cwd: string | undefined): CwdValidationResult;
|
|
11
|
-
//# sourceMappingURL=cwd-validator.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cwd-validator.d.ts","sourceRoot":"","sources":["../../src/http/cwd-validator.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,kBAAkB,GAAG,aAAa,GAAG,aAAa,GAAG,aAAa,CAAC;AAE/E,MAAM,MAAM,mBAAmB,GAC3B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,kBAAkB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9D,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,mBAAmB,CAoBxE"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import * as fs from 'node:fs';
|
|
2
|
-
import * as path from 'node:path';
|
|
3
|
-
export function validateCwd(cwd) {
|
|
4
|
-
if (!cwd)
|
|
5
|
-
return { ok: false, error: 'missing_cwd', message: "required query param 'cwd' not provided" };
|
|
6
|
-
if (!path.isAbsolute(cwd))
|
|
7
|
-
return { ok: false, error: 'invalid_cwd', message: `cwd must be absolute: ${cwd}` };
|
|
8
|
-
let canonical;
|
|
9
|
-
try {
|
|
10
|
-
canonical = fs.realpathSync(cwd);
|
|
11
|
-
}
|
|
12
|
-
catch (err) {
|
|
13
|
-
const code = err.code;
|
|
14
|
-
if (code === 'ENOENT')
|
|
15
|
-
return { ok: false, error: 'cwd_not_dir', message: `cwd does not exist: ${cwd}` };
|
|
16
|
-
if (code === 'EACCES' || code === 'EPERM')
|
|
17
|
-
return { ok: false, error: 'cwd_not_dir', message: `cwd is not accessible (permission denied): ${cwd}` };
|
|
18
|
-
return { ok: false, error: 'cwd_not_dir', message: `cwd cannot be resolved (${code ?? 'unknown error'}): ${cwd}` };
|
|
19
|
-
}
|
|
20
|
-
let stat;
|
|
21
|
-
try {
|
|
22
|
-
stat = fs.statSync(canonical);
|
|
23
|
-
}
|
|
24
|
-
catch {
|
|
25
|
-
return { ok: false, error: 'cwd_not_dir', message: `cwd realpath is not accessible: ${cwd} → ${canonical}` };
|
|
26
|
-
}
|
|
27
|
-
if (!stat.isDirectory())
|
|
28
|
-
return { ok: false, error: 'cwd_not_dir', message: `cwd is not a directory: ${cwd}` };
|
|
29
|
-
return { ok: true, canonicalCwd: canonical };
|
|
30
|
-
}
|
|
31
|
-
//# sourceMappingURL=cwd-validator.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cwd-validator.js","sourceRoot":"","sources":["../../src/http/cwd-validator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAQlC,MAAM,UAAU,WAAW,CAAC,GAAuB;IACjD,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,yCAAyC,EAAE,CAAC;IACzG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,yBAAyB,GAAG,EAAE,EAAE,CAAC;IAC/G,IAAI,SAAiB,CAAC;IACtB,IAAI,CAAC;QACH,SAAS,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,GAAI,GAA6B,CAAC,IAAI,CAAC;QACjD,IAAI,IAAI,KAAK,QAAQ;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,uBAAuB,GAAG,EAAE,EAAE,CAAC;QACzG,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,OAAO;YAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,8CAA8C,GAAG,EAAE,EAAE,CAAC;QACpJ,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,2BAA2B,IAAI,IAAI,eAAe,MAAM,GAAG,EAAE,EAAE,CAAC;IACrH,CAAC;IACD,IAAI,IAAc,CAAC;IACnB,IAAI,CAAC;QACH,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,mCAAmC,GAAG,MAAM,SAAS,EAAE,EAAE,CAAC;IAC/G,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,2BAA2B,GAAG,EAAE,EAAE,CAAC;IAC/G,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;AAC/C,CAAC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { Server as HttpServer } from 'node:http';
|
|
2
|
-
import type { DiagnosticLogger } from '@zhixuan92/multi-model-agent-core';
|
|
3
|
-
import type { ProjectRegistry } from './project-registry.js';
|
|
4
|
-
import type { SessionRouter } from './session-router.js';
|
|
5
|
-
export interface HttpLifecycleOptions {
|
|
6
|
-
shutdownDrainMs: number;
|
|
7
|
-
noExit?: boolean;
|
|
8
|
-
}
|
|
9
|
-
export declare function installHttpLifecycleHandlers(logger: DiagnosticLogger, httpServer: HttpServer, registry: ProjectRegistry, router: SessionRouter, options: HttpLifecycleOptions): void;
|
|
10
|
-
/** Test-only. */
|
|
11
|
-
export declare function __resetHttpLifecycleHandlersForTests(): void;
|
|
12
|
-
//# sourceMappingURL=lifecycle-handlers.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle-handlers.d.ts","sourceRoot":"","sources":["../../src/http/lifecycle-handlers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,WAAW,oBAAoB;IACnC,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAKD,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,gBAAgB,EACxB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,oBAAoB,GAC5B,IAAI,CA4EN;AAED,iBAAiB;AACjB,wBAAgB,oCAAoC,IAAI,IAAI,CAI3D"}
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
let installed = false;
|
|
2
|
-
let cleanup = null;
|
|
3
|
-
export function installHttpLifecycleHandlers(logger, httpServer, registry, router, options) {
|
|
4
|
-
if (installed)
|
|
5
|
-
return;
|
|
6
|
-
installed = true;
|
|
7
|
-
let shuttingDown = false;
|
|
8
|
-
const hasInFlight = () => {
|
|
9
|
-
for (const [, pc] of registry.entries()) {
|
|
10
|
-
if (pc.activeRequests > 0)
|
|
11
|
-
return true;
|
|
12
|
-
}
|
|
13
|
-
return false;
|
|
14
|
-
};
|
|
15
|
-
const drainAndExit = async (cause) => {
|
|
16
|
-
if (shuttingDown)
|
|
17
|
-
return;
|
|
18
|
-
shuttingDown = true;
|
|
19
|
-
registry.stopEvictionTimer();
|
|
20
|
-
await new Promise((resolve) => httpServer.close(() => resolve()));
|
|
21
|
-
const deadline = Date.now() + options.shutdownDrainMs;
|
|
22
|
-
while (Date.now() < deadline && hasInFlight()) {
|
|
23
|
-
await new Promise((r) => setTimeout(r, 50));
|
|
24
|
-
}
|
|
25
|
-
const timedOut = hasInFlight();
|
|
26
|
-
await router.closeAll();
|
|
27
|
-
registry.clear();
|
|
28
|
-
logger.shutdown(timedOut ? 'SIGTERM_drain_timeout' : cause);
|
|
29
|
-
if (!options.noExit)
|
|
30
|
-
process.exit(0);
|
|
31
|
-
};
|
|
32
|
-
const onSigterm = () => { void drainAndExit('SIGTERM'); };
|
|
33
|
-
const onSigint = () => { void drainAndExit('SIGINT'); };
|
|
34
|
-
const onSighup = () => { };
|
|
35
|
-
const onSigpipe = () => { };
|
|
36
|
-
const onStdinEnd = () => { };
|
|
37
|
-
const onStdoutError = () => { };
|
|
38
|
-
const onUncaught = (err) => {
|
|
39
|
-
logger.error('uncaughtException', err);
|
|
40
|
-
process.stderr.write(`[multi-model-agent] uncaughtException: ${err.stack ?? String(err)}\n`);
|
|
41
|
-
registry.stopEvictionTimer();
|
|
42
|
-
void router.closeAll().finally(() => {
|
|
43
|
-
registry.clear();
|
|
44
|
-
logger.shutdown('uncaughtException');
|
|
45
|
-
if (!options.noExit)
|
|
46
|
-
process.exit(1);
|
|
47
|
-
});
|
|
48
|
-
};
|
|
49
|
-
const onUnhandled = (reason) => {
|
|
50
|
-
logger.error('unhandledRejection', reason);
|
|
51
|
-
const stack = reason instanceof Error ? (reason.stack ?? reason.message) : String(reason);
|
|
52
|
-
process.stderr.write(`[multi-model-agent] unhandledRejection: ${stack}\n`);
|
|
53
|
-
registry.stopEvictionTimer();
|
|
54
|
-
void router.closeAll().finally(() => {
|
|
55
|
-
registry.clear();
|
|
56
|
-
logger.shutdown('unhandledRejection');
|
|
57
|
-
if (!options.noExit)
|
|
58
|
-
process.exit(1);
|
|
59
|
-
});
|
|
60
|
-
};
|
|
61
|
-
process.on('SIGTERM', onSigterm);
|
|
62
|
-
process.on('SIGINT', onSigint);
|
|
63
|
-
process.on('SIGHUP', onSighup);
|
|
64
|
-
process.on('SIGPIPE', onSigpipe);
|
|
65
|
-
process.stdin.on('end', onStdinEnd);
|
|
66
|
-
process.stdout.on('error', onStdoutError);
|
|
67
|
-
process.on('uncaughtException', onUncaught);
|
|
68
|
-
process.on('unhandledRejection', onUnhandled);
|
|
69
|
-
cleanup = () => {
|
|
70
|
-
process.off('SIGTERM', onSigterm);
|
|
71
|
-
process.off('SIGINT', onSigint);
|
|
72
|
-
process.off('SIGHUP', onSighup);
|
|
73
|
-
process.off('SIGPIPE', onSigpipe);
|
|
74
|
-
process.stdin.off('end', onStdinEnd);
|
|
75
|
-
process.stdout.off('error', onStdoutError);
|
|
76
|
-
process.off('uncaughtException', onUncaught);
|
|
77
|
-
process.off('unhandledRejection', onUnhandled);
|
|
78
|
-
installed = false;
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
/** Test-only. */
|
|
82
|
-
export function __resetHttpLifecycleHandlersForTests() {
|
|
83
|
-
cleanup?.();
|
|
84
|
-
cleanup = null;
|
|
85
|
-
installed = false;
|
|
86
|
-
}
|
|
87
|
-
//# sourceMappingURL=lifecycle-handlers.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle-handlers.js","sourceRoot":"","sources":["../../src/http/lifecycle-handlers.ts"],"names":[],"mappings":"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"}
|
package/dist/http/loopback.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Returns true iff the given address string refers to the loopback interface.
|
|
3
|
-
* Accepts all forms Node's socket layer surfaces:
|
|
4
|
-
* - IPv4 loopback (any 127.0.0.0/8 address): 127.0.0.1, 127.0.1.1, etc.
|
|
5
|
-
* - IPv6 loopback: ::1
|
|
6
|
-
* - IPv4-mapped IPv6 loopback: ::ffff:127.0.0.1 (and other 127/8 mapped forms)
|
|
7
|
-
* - Hostname: localhost
|
|
8
|
-
*/
|
|
9
|
-
export declare function isLoopbackAddress(addr: string | undefined): boolean;
|
|
10
|
-
//# sourceMappingURL=loopback.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"loopback.d.ts","sourceRoot":"","sources":["../../src/http/loopback.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAoBnE"}
|
package/dist/http/loopback.js
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import * as net from 'node:net';
|
|
2
|
-
/**
|
|
3
|
-
* Returns true iff the given address string refers to the loopback interface.
|
|
4
|
-
* Accepts all forms Node's socket layer surfaces:
|
|
5
|
-
* - IPv4 loopback (any 127.0.0.0/8 address): 127.0.0.1, 127.0.1.1, etc.
|
|
6
|
-
* - IPv6 loopback: ::1
|
|
7
|
-
* - IPv4-mapped IPv6 loopback: ::ffff:127.0.0.1 (and other 127/8 mapped forms)
|
|
8
|
-
* - Hostname: localhost
|
|
9
|
-
*/
|
|
10
|
-
export function isLoopbackAddress(addr) {
|
|
11
|
-
if (!addr)
|
|
12
|
-
return false;
|
|
13
|
-
if (addr === 'localhost')
|
|
14
|
-
return true;
|
|
15
|
-
// Strip any scope ID (fe80::1%lo0 style) — rare for loopback but cheap to handle.
|
|
16
|
-
const clean = addr.split('%')[0];
|
|
17
|
-
const kind = net.isIP(clean);
|
|
18
|
-
if (kind === 4) {
|
|
19
|
-
return clean.startsWith('127.');
|
|
20
|
-
}
|
|
21
|
-
if (kind === 6) {
|
|
22
|
-
if (clean === '::1')
|
|
23
|
-
return true;
|
|
24
|
-
// IPv4-mapped IPv6: ::ffff:A.B.C.D
|
|
25
|
-
const mappedPrefix = '::ffff:';
|
|
26
|
-
if (clean.toLowerCase().startsWith(mappedPrefix)) {
|
|
27
|
-
const v4 = clean.slice(mappedPrefix.length);
|
|
28
|
-
return net.isIPv4(v4) && v4.startsWith('127.');
|
|
29
|
-
}
|
|
30
|
-
return false;
|
|
31
|
-
}
|
|
32
|
-
return false;
|
|
33
|
-
}
|
|
34
|
-
//# sourceMappingURL=loopback.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"loopback.js","sourceRoot":"","sources":["../../src/http/loopback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAEhC;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAwB;IACxD,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IACtC,kFAAkF;IAClF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7B,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;QACf,OAAO,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IACD,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;QACf,IAAI,KAAK,KAAK,KAAK;YAAE,OAAO,IAAI,CAAC;QACjC,mCAAmC;QACnC,MAAM,YAAY,GAAG,SAAS,CAAC;QAC/B,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACjD,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YAC5C,OAAO,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|