@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.
Files changed (90) hide show
  1. package/README.md +11 -207
  2. package/dist/cli.js +6 -599
  3. package/package.json +8 -49
  4. package/dist/cli.d.ts +0 -79
  5. package/dist/cli.d.ts.map +0 -1
  6. package/dist/cli.js.map +0 -1
  7. package/dist/headline.d.ts +0 -25
  8. package/dist/headline.d.ts.map +0 -1
  9. package/dist/headline.js +0 -58
  10. package/dist/headline.js.map +0 -1
  11. package/dist/http/auth.d.ts +0 -8
  12. package/dist/http/auth.d.ts.map +0 -1
  13. package/dist/http/auth.js +0 -43
  14. package/dist/http/auth.js.map +0 -1
  15. package/dist/http/cwd-validator.d.ts +0 -11
  16. package/dist/http/cwd-validator.d.ts.map +0 -1
  17. package/dist/http/cwd-validator.js +0 -31
  18. package/dist/http/cwd-validator.js.map +0 -1
  19. package/dist/http/lifecycle-handlers.d.ts +0 -12
  20. package/dist/http/lifecycle-handlers.d.ts.map +0 -1
  21. package/dist/http/lifecycle-handlers.js +0 -87
  22. package/dist/http/lifecycle-handlers.js.map +0 -1
  23. package/dist/http/loopback.d.ts +0 -10
  24. package/dist/http/loopback.d.ts.map +0 -1
  25. package/dist/http/loopback.js +0 -34
  26. package/dist/http/loopback.js.map +0 -1
  27. package/dist/http/project-registry.d.ts +0 -48
  28. package/dist/http/project-registry.d.ts.map +0 -1
  29. package/dist/http/project-registry.js +0 -119
  30. package/dist/http/project-registry.js.map +0 -1
  31. package/dist/http/session-router.d.ts +0 -33
  32. package/dist/http/session-router.d.ts.map +0 -1
  33. package/dist/http/session-router.js +0 -62
  34. package/dist/http/session-router.js.map +0 -1
  35. package/dist/http/status-endpoint.d.ts +0 -20
  36. package/dist/http/status-endpoint.d.ts.map +0 -1
  37. package/dist/http/status-endpoint.js +0 -85
  38. package/dist/http/status-endpoint.js.map +0 -1
  39. package/dist/http/transport.d.ts +0 -14
  40. package/dist/http/transport.d.ts.map +0 -1
  41. package/dist/http/transport.js +0 -209
  42. package/dist/http/transport.js.map +0 -1
  43. package/dist/index.d.ts +0 -4
  44. package/dist/index.d.ts.map +0 -1
  45. package/dist/index.js +0 -3
  46. package/dist/index.js.map +0 -1
  47. package/dist/routing/render-provider-routing-matrix.d.ts +0 -7
  48. package/dist/routing/render-provider-routing-matrix.d.ts.map +0 -1
  49. package/dist/routing/render-provider-routing-matrix.js +0 -153
  50. package/dist/routing/render-provider-routing-matrix.js.map +0 -1
  51. package/dist/status-cli.d.ts +0 -2
  52. package/dist/status-cli.d.ts.map +0 -1
  53. package/dist/status-cli.js +0 -68
  54. package/dist/status-cli.js.map +0 -1
  55. package/dist/tools/audit-document.d.ts +0 -23
  56. package/dist/tools/audit-document.d.ts.map +0 -1
  57. package/dist/tools/audit-document.js +0 -123
  58. package/dist/tools/audit-document.js.map +0 -1
  59. package/dist/tools/batch-response.d.ts +0 -14
  60. package/dist/tools/batch-response.d.ts.map +0 -1
  61. package/dist/tools/batch-response.js +0 -42
  62. package/dist/tools/batch-response.js.map +0 -1
  63. package/dist/tools/confirm-clarifications.d.ts +0 -15
  64. package/dist/tools/confirm-clarifications.d.ts.map +0 -1
  65. package/dist/tools/confirm-clarifications.js +0 -95
  66. package/dist/tools/confirm-clarifications.js.map +0 -1
  67. package/dist/tools/debug-task.d.ts +0 -13
  68. package/dist/tools/debug-task.d.ts.map +0 -1
  69. package/dist/tools/debug-task.js +0 -63
  70. package/dist/tools/debug-task.js.map +0 -1
  71. package/dist/tools/execute-plan.d.ts +0 -12
  72. package/dist/tools/execute-plan.d.ts.map +0 -1
  73. package/dist/tools/execute-plan.js +0 -123
  74. package/dist/tools/execute-plan.js.map +0 -1
  75. package/dist/tools/review-code.d.ts +0 -17
  76. package/dist/tools/review-code.d.ts.map +0 -1
  77. package/dist/tools/review-code.js +0 -108
  78. package/dist/tools/review-code.js.map +0 -1
  79. package/dist/tools/shared.d.ts +0 -72
  80. package/dist/tools/shared.d.ts.map +0 -1
  81. package/dist/tools/shared.js +0 -160
  82. package/dist/tools/shared.js.map +0 -1
  83. package/dist/tools/truncation.d.ts +0 -18
  84. package/dist/tools/truncation.d.ts.map +0 -1
  85. package/dist/tools/truncation.js +0 -62
  86. package/dist/tools/truncation.js.map +0 -1
  87. package/dist/tools/verify-work.d.ts +0 -12
  88. package/dist/tools/verify-work.d.ts.map +0 -1
  89. package/dist/tools/verify-work.js +0 -85
  90. 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.0",
3
+ "version": "2.8.1",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
- "description": "MCP server for multi-model-agent. Exposes a delegate_tasks tool that routes work to Claude, Codex, or OpenAI-compatible sub-agents based on capability, quality tier, and cost.",
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
- "mcp",
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": "./dist/cli.js",
33
- "mmagent": "./dist/cli.js"
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": "tsc && chmod +x dist/cli.js",
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": ">=22.0.0"
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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"}
@@ -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
@@ -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
@@ -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"}
@@ -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
@@ -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
@@ -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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"}
@@ -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"}
@@ -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"}