@rynfar/meridian 1.21.1 → 1.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  __require,
4
4
  startProxyServer
5
- } from "./cli-zyn4cqp2.js";
5
+ } from "./cli-n9mgaja3.js";
6
6
 
7
7
  // bin/cli.ts
8
8
  import { exec as execCallback } from "child_process";
@@ -74,5 +74,22 @@ export interface AgentAdapter {
74
74
  * When defined, takes precedence over the env var for this agent.
75
75
  */
76
76
  usesPassthrough?(): boolean;
77
+ /**
78
+ * Map a client-side tool_use block to file changes (passthrough mode).
79
+ *
80
+ * In passthrough mode the SDK doesn't execute tools, so PostToolUse
81
+ * hooks never fire. Instead, the proxy scans the conversation history
82
+ * in body.messages for assistant tool_use blocks and uses this method
83
+ * to identify file-writing operations.
84
+ *
85
+ * Returns an array of FileChange entries. Most tools produce 0 or 1 entry,
86
+ * but bash commands can produce multiple (e.g., `echo a > x && echo b > y`).
87
+ *
88
+ * Each adapter knows its agent's tool naming convention:
89
+ * - OpenCode: "write" / "edit" / "bash" (with redirect parsing)
90
+ * - Crush: "write" / "edit" / "bash"
91
+ * - Cline: "write_to_file" / "apply_diff"
92
+ */
93
+ extractFileChangesFromToolUse?(toolName: string, toolInput: unknown): import("./fileChanges").FileChange[];
77
94
  }
78
95
  //# sourceMappingURL=adapter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/proxy/adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAEnC;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,sCAAsC;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IAErB;;;OAGG;IACH,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAA;IAE5C;;;OAGG;IACH,uBAAuB,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM,GAAG,SAAS,CAAA;IAEtD;;;OAGG;IACH,gBAAgB,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,CAAA;IAEtC;;;OAGG;IACH,sBAAsB,IAAI,SAAS,MAAM,EAAE,CAAA;IAE3C;;;;OAIG;IACH,yBAAyB,IAAI,SAAS,MAAM,EAAE,CAAA;IAE9C;;;OAGG;IACH,gBAAgB,IAAI,MAAM,CAAA;IAE1B;;OAEG;IACH,kBAAkB,IAAI,SAAS,MAAM,EAAE,CAAA;IAEvC;;;;OAIG;IACH,cAAc,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAEhF;;;OAGG;IACH,aAAa,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,CAAA;IAE9D;;;OAGG;IACH,0BAA0B,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAA;IAE9E;;;;;;;;OAQG;IACH,eAAe,CAAC,IAAI,OAAO,CAAA;CAC5B"}
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/proxy/adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAEnC;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,sCAAsC;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IAErB;;;OAGG;IACH,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAA;IAE5C;;;OAGG;IACH,uBAAuB,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM,GAAG,SAAS,CAAA;IAEtD;;;OAGG;IACH,gBAAgB,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,CAAA;IAEtC;;;OAGG;IACH,sBAAsB,IAAI,SAAS,MAAM,EAAE,CAAA;IAE3C;;;;OAIG;IACH,yBAAyB,IAAI,SAAS,MAAM,EAAE,CAAA;IAE9C;;;OAGG;IACH,gBAAgB,IAAI,MAAM,CAAA;IAE1B;;OAEG;IACH,kBAAkB,IAAI,SAAS,MAAM,EAAE,CAAA;IAEvC;;;;OAIG;IACH,cAAc,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,YAAY,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAEhF;;;OAGG;IACH,aAAa,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,CAAA;IAE9D;;;OAGG;IACH,0BAA0B,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAA;IAE9E;;;;;;;;OAQG;IACH,eAAe,CAAC,IAAI,OAAO,CAAA;IAE3B;;;;;;;;;;;;;;;OAeG;IACH,6BAA6B,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO,eAAe,EAAE,UAAU,EAAE,CAAA;CAC3G"}
@@ -1 +1 @@
1
- {"version":3,"file":"crush.d.ts","sourceRoot":"","sources":["../../../src/proxy/adapters/crush.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAe9C,eAAO,MAAM,YAAY,EAAE,YAkE1B,CAAA"}
1
+ {"version":3,"file":"crush.d.ts","sourceRoot":"","sources":["../../../src/proxy/adapters/crush.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAgB9C,eAAO,MAAM,YAAY,EAAE,YAsF1B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../../src/proxy/adapters/opencode.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAO9C,eAAO,MAAM,eAAe,EAAE,YA6E7B,CAAA"}
1
+ {"version":3,"file":"opencode.d.ts","sourceRoot":"","sources":["../../../src/proxy/adapters/opencode.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAQ9C,eAAO,MAAM,eAAe,EAAE,YAqG7B,CAAA"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * File change tracking for both internal and passthrough modes.
3
+ *
4
+ * Internal mode: PostToolUse hooks capture MCP tool executions (write/edit).
5
+ * Passthrough mode: Scans body.messages for client-side tool_use blocks.
6
+ *
7
+ * This is a leaf module — no imports from server.ts or session/.
8
+ */
9
+ /** A recorded file operation from an MCP tool execution. */
10
+ export interface FileChange {
11
+ /** The operation type: "wrote" or "edited" */
12
+ operation: "wrote" | "edited";
13
+ /** The file path from the tool input */
14
+ path: string;
15
+ }
16
+ /**
17
+ * Extract a FileChange from a PostToolUse hook input, if applicable.
18
+ *
19
+ * Only tracks write and edit operations — read/glob/grep are read-only.
20
+ * Returns undefined for non-file-changing tools.
21
+ *
22
+ * @param toolName - The full MCP tool name (e.g. "mcp__opencode__write")
23
+ * @param toolInput - The tool's input parameters
24
+ * @param mcpPrefix - The MCP prefix to match (e.g. "mcp__opencode__")
25
+ */
26
+ export declare function extractFileChange(toolName: string, toolInput: unknown, mcpPrefix: string): FileChange | undefined;
27
+ /**
28
+ * Create a PostToolUse hook matcher that captures file changes.
29
+ *
30
+ * The hook pushes FileChange entries into the provided array.
31
+ * The caller (server.ts) reads this array after the SDK completes
32
+ * to inject a summary into the response.
33
+ *
34
+ * @param changes - Mutable array to push changes into (shared with caller)
35
+ * @param mcpPrefix - The MCP prefix for this adapter (e.g. "mcp__opencode__")
36
+ */
37
+ export declare function createFileChangeHook(changes: FileChange[], mcpPrefix: string): {
38
+ matcher: string;
39
+ hooks: ((input: {
40
+ tool_name: string;
41
+ tool_input: unknown;
42
+ tool_response: unknown;
43
+ tool_use_id: string;
44
+ }) => Promise<{}>)[];
45
+ };
46
+ /**
47
+ * Extract file paths from a bash command string by detecting output redirects
48
+ * and common file-mutating commands (sed -i, tee, cp, mv).
49
+ *
50
+ * This is a best-effort heuristic — it won't catch every possible way bash
51
+ * can write files, but it handles the patterns coding agents use most often.
52
+ *
53
+ * @param command - The bash command string
54
+ */
55
+ export declare function extractFileChangesFromBash(command: string): FileChange[];
56
+ /**
57
+ * Extract file changes from conversation history (passthrough mode).
58
+ *
59
+ * In passthrough mode the SDK doesn't execute tools — the client does.
60
+ * The conversation history in body.messages contains assistant tool_use
61
+ * blocks from completed tool loops. We scan these to build the file
62
+ * change list.
63
+ *
64
+ * Only scans tool_use blocks that have a corresponding tool_result
65
+ * (i.e., the tool was actually executed, not just proposed).
66
+ *
67
+ * @param messages - The body.messages array from the request
68
+ * @param extractFn - Adapter's extractFileChangesFromToolUse method
69
+ */
70
+ export declare function extractFileChangesFromMessages(messages: Array<{
71
+ role: string;
72
+ content: unknown;
73
+ }>, extractFn: (toolName: string, toolInput: unknown) => FileChange[]): FileChange[];
74
+ /**
75
+ * Format file changes into a human-readable summary string.
76
+ *
77
+ * Deduplicates by path+operation and returns a newline-separated list.
78
+ * Returns undefined if no changes to report.
79
+ *
80
+ * @param changes - Array of recorded file changes
81
+ */
82
+ export declare function formatFileChangeSummary(changes: FileChange[]): string | undefined;
83
+ //# sourceMappingURL=fileChanges.d.ts.map
@@ -0,0 +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;AAED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE,CAsCxE;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"}
@@ -53,6 +53,7 @@ export declare function buildQueryOptions(ctx: QueryContext): {
53
53
  agents?: Record<string, any> | undefined;
54
54
  plugins: never[];
55
55
  env: {
56
+ ENABLE_CLAUDEAI_MCP_SERVERS?: string | undefined;
56
57
  ENABLE_TOOL_SEARCH: string;
57
58
  };
58
59
  allowedTools?: string[] | undefined;
@@ -60,7 +61,7 @@ export declare function buildQueryOptions(ctx: QueryContext): {
60
61
  oc: import("@anthropic-ai/claude-agent-sdk").McpSdkServerConfigWithInstance;
61
62
  } | undefined;
62
63
  disallowedTools: string[];
63
- systemPrompt?: {
64
+ systemPrompt?: string | {
64
65
  type: "preset";
65
66
  preset: "claude_code";
66
67
  append: string;
@@ -80,6 +81,7 @@ export declare function buildQueryOptions(ctx: QueryContext): {
80
81
  agents?: Record<string, any> | undefined;
81
82
  plugins: never[];
82
83
  env: {
84
+ ENABLE_CLAUDEAI_MCP_SERVERS?: string | undefined;
83
85
  ENABLE_TOOL_SEARCH: string;
84
86
  };
85
87
  disallowedTools: string[];
@@ -88,7 +90,7 @@ export declare function buildQueryOptions(ctx: QueryContext): {
88
90
  [x: string]: import("@anthropic-ai/claude-agent-sdk").McpSdkServerConfigWithInstance;
89
91
  oc?: undefined;
90
92
  };
91
- systemPrompt?: {
93
+ systemPrompt?: string | {
92
94
  type: "preset";
93
95
  preset: "claude_code";
94
96
  append: string;
@@ -1 +1 @@
1
- {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/proxy/query.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAE7C,OAAO,EAAE,0BAA0B,EAAwB,MAAM,oBAAoB,CAAA;AAErF,MAAM,WAAW,YAAY;IAC3B,iEAAiE;IACjE,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;IACnC,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,+BAA+B;IAC/B,gBAAgB,EAAE,MAAM,CAAA;IACxB,yCAAyC;IACzC,aAAa,EAAE,MAAM,CAAA;IACrB,gCAAgC;IAChC,gBAAgB,EAAE,MAAM,CAAA;IACxB,0CAA0C;IAC1C,WAAW,EAAE,OAAO,CAAA;IACpB,0CAA0C;IAC1C,MAAM,EAAE,OAAO,CAAA;IACf,6DAA6D;IAC7D,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC9B,mEAAmE;IACnE,cAAc,CAAC,EAAE,UAAU,CAAC,OAAO,0BAA0B,CAAC,CAAA;IAC9D,wDAAwD;IACxD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;IAC5C,0DAA0D;IAC1D,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,wCAAwC;IACxC,MAAM,EAAE,OAAO,CAAA;IACf,8CAA8C;IAC9C,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,GAAG,CAAA;IACd,qDAAqD;IACrD,OAAO,EAAE,YAAY,CAAA;CACtB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6ClD"}
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/proxy/query.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAE7C,OAAO,EAAE,0BAA0B,EAAwB,MAAM,oBAAoB,CAAA;AAErF,MAAM,WAAW,YAAY;IAC3B,iEAAiE;IACjE,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;IACnC,iCAAiC;IACjC,KAAK,EAAE,MAAM,CAAA;IACb,+BAA+B;IAC/B,gBAAgB,EAAE,MAAM,CAAA;IACxB,yCAAyC;IACzC,aAAa,EAAE,MAAM,CAAA;IACrB,gCAAgC;IAChC,gBAAgB,EAAE,MAAM,CAAA;IACxB,0CAA0C;IAC1C,WAAW,EAAE,OAAO,CAAA;IACpB,0CAA0C;IAC1C,MAAM,EAAE,OAAO,CAAA;IACf,6DAA6D;IAC7D,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC9B,mEAAmE;IACnE,cAAc,CAAC,EAAE,UAAU,CAAC,OAAO,0BAA0B,CAAC,CAAA;IAC9D,wDAAwD;IACxD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;IAC5C,0DAA0D;IAC1D,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,wCAAwC;IACxC,MAAM,EAAE,OAAO,CAAA;IACf,8CAA8C;IAC9C,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,GAAG,CAAA;IACd,qDAAqD;IACrD,OAAO,EAAE,YAAY,CAAA;CACtB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmDlD"}
@@ -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;AAgBvD,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,CAulChF;AAED,wBAAsB,gBAAgB,CAAC,MAAM,GAAE,OAAO,CAAC,WAAW,CAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CA0ChG"}
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;AAiBvD,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,CAupChF;AAED,wBAAsB,gBAAgB,CAAC,MAAM,GAAE,OAAO,CAAC,WAAW,CAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CA0ChG"}
package/dist/server.js CHANGED
@@ -6,7 +6,7 @@ import {
6
6
  getMaxSessionsLimit,
7
7
  hashMessage,
8
8
  startProxyServer
9
- } from "./cli-zyn4cqp2.js";
9
+ } from "./cli-n9mgaja3.js";
10
10
  export {
11
11
  startProxyServer,
12
12
  hashMessage,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rynfar/meridian",
3
- "version": "1.21.1",
3
+ "version": "1.22.0",
4
4
  "description": "Local Anthropic API powered by your Claude Max subscription. One subscription, every agent.",
5
5
  "type": "module",
6
6
  "main": "./dist/server.js",