@ebowwa/large-output 1.2.0 → 1.3.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/README.md CHANGED
@@ -1,12 +1,12 @@
1
- # @ebowwa/large-output
1
+ # large-output
2
2
 
3
- Shared utility for handling large MCP outputs with automatic file fallback and **actionable LLM prompts**.
3
+ Utility for handling large outputs with automatic file fallback and **actionable LLM prompts**.
4
4
 
5
- **Available in TypeScript and Rust with full API parity.**
5
+ **Primary distribution: Rust crate** (TypeScript source preserved in `typescript/` for reference).
6
6
 
7
7
  ## Problem Solved
8
8
 
9
- When MCP tools return large outputs, they typically hit Claude's ~20,000 character tool output limit. Common solutions like pagination fragment the context and require multiple round-trips.
9
+ When tools return large outputs, they typically hit context limits. Common solutions like pagination fragment the context and require multiple round-trips.
10
10
 
11
11
  **This library solves it by:**
12
12
  - Returning content inline if under the threshold
@@ -15,65 +15,19 @@ When MCP tools return large outputs, they typically hit Claude's ~20,000 charact
15
15
 
16
16
  ---
17
17
 
18
- ## TypeScript
18
+ ## Rust (Primary)
19
19
 
20
20
  ### Installation
21
21
 
22
22
  ```bash
23
- bun add @ebowwa/large-output
23
+ cargo add large-output
24
24
  ```
25
25
 
26
- ### Quick Start
27
-
28
- ```typescript
29
- import { handleMCPOutput } from "@ebowwa/large-output";
30
-
31
- // In your MCP tool handler:
32
- server.setRequestHandler(CallToolRequestSchema, async (request) => {
33
- const results = await fetchData();
34
- const content = JSON.stringify(results, null, 2);
35
-
36
- // Return with automatic file fallback (actionable format by default)
37
- return {
38
- content: [{ type: "text", text: handleMCPOutput(content) }],
39
- };
40
- });
41
- ```
42
-
43
- ### API
44
-
45
- | Function | Description |
46
- |----------|-------------|
47
- | `handleOutput(content, options?)` | Handle output, returns `OutputResponse` |
48
- | `handleMCPOutput(content, options?)` | Convenience: handle + return MCP string |
49
- | `toMCPResponse(response, format)` | Convert `OutputResponse` to string |
50
- | `handleBatch(contents, options?)` | Batch handler for multiple outputs |
51
-
52
- ### Options
53
-
54
- | Option | Type | Default | Description |
55
- |--------|------|---------|-------------|
56
- | `threshold` | `number` | `15000` | Character threshold for file fallback |
57
- | `previewLength` | `number` | `500` | Preview chars when written to file |
58
- | `tempDir` | `string` | `os.tmpdir()` | Custom temp directory |
59
- | `filenamePrefix` | `string` | `"mcp_output"` | Filename prefix |
60
- | `includeSize` | `boolean` | `true` | Include size in file response |
61
- | `includePreview` | `boolean` | `true` | Include preview in file response |
62
- | `responseFormat` | `"actionable"` \| `"json"` | `"actionable"` | Response format |
63
-
64
- ---
65
-
66
- ## Rust
67
-
68
- Located in `./rust/` directory.
69
-
70
- ### Installation
71
-
72
- Add to your `Cargo.toml`:
26
+ Or add to `Cargo.toml`:
73
27
 
74
28
  ```toml
75
29
  [dependencies]
76
- large-output = "1.2.0"
30
+ large-output = "1.3"
77
31
  ```
78
32
 
79
33
  ### Quick Start
@@ -162,6 +116,16 @@ File contains the complete data. Read it to proceed.
162
116
 
163
117
  ---
164
118
 
119
+ ## TypeScript (Legacy/Reference)
120
+
121
+ TypeScript implementation preserved in `typescript/` directory for reference. Not distributed via npm.
122
+
123
+ If you need TypeScript support, consider:
124
+ 1. Using the Rust crate via FFI (like napi-rs)
125
+ 2. Copying the TypeScript source from `typescript/` into your project
126
+
127
+ ---
128
+
165
129
  ## License
166
130
 
167
131
  MIT
package/package.json CHANGED
@@ -1,25 +1,20 @@
1
1
  {
2
2
  "name": "@ebowwa/large-output",
3
- "version": "1.2.0",
4
- "description": "Shared utility for handling large MCP outputs with automatic file fallback and actionable LLM prompts. Includes TypeScript and Rust implementations.",
3
+ "version": "1.3.0",
4
+ "description": "Utility for handling large outputs with automatic file fallback and actionable LLM prompts. Rust implementation (crate: large-output). TypeScript source preserved in typescript/ for reference.",
5
5
  "type": "module",
6
- "main": "./dist/index.js",
7
- "types": "./dist/index.d.ts",
8
- "exports": {
9
- ".": {
10
- "types": "./dist/index.d.ts",
11
- "import": "./dist/index.js"
12
- }
13
- },
6
+ "main": "./rust/src/lib.rs",
14
7
  "files": [
15
- "dist",
16
- "rust"
8
+ "rust/src",
9
+ "rust/Cargo.toml",
10
+ "rust/README.md"
17
11
  ],
18
12
  "scripts": {
19
- "build": "tsc",
20
- "build:rust": "cd rust && cargo build --release",
21
- "test": "tsc --noEmit && cd rust && cargo test",
22
- "prepublishOnly": "bun run build"
13
+ "build": "cd rust && cargo build --release",
14
+ "test": "cd rust && cargo test",
15
+ "publish:crate": "cd rust && cargo publish",
16
+ "build:ts": "cd typescript && tsc",
17
+ "test:ts": "cd typescript && tsc --noEmit"
23
18
  },
24
19
  "keywords": [
25
20
  "mcp",
@@ -27,15 +22,10 @@
27
22
  "pagination",
28
23
  "file-fallback",
29
24
  "llm-actionable",
30
- "rust",
31
- "typescript"
25
+ "rust"
32
26
  ],
33
27
  "author": "ebowwa",
34
28
  "license": "MIT",
35
- "devDependencies": {
36
- "@types/node": "^22.10.2",
37
- "typescript": "^5.7.2"
38
- },
39
29
  "repository": {
40
30
  "type": "git",
41
31
  "url": "https://github.com/ebowwa/codespaces",
@@ -47,5 +37,9 @@
47
37
  "output-handling",
48
38
  "large-response-management"
49
39
  ]
40
+ },
41
+ "publishConfig": {
42
+ "access": "public",
43
+ "registry": "https://registry.npmjs.org"
50
44
  }
51
45
  }
package/rust/Cargo.toml CHANGED
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "large-output"
3
- version = "1.2.0"
3
+ version = "1.3.0"
4
4
  edition = "2021"
5
5
  authors = ["ebowwa"]
6
6
  description = "Utility for handling large outputs with automatic file fallback and actionable LLM prompts"
package/dist/index.d.ts DELETED
@@ -1,141 +0,0 @@
1
- /**
2
- * @ebowwa/large-output
3
- *
4
- * Shared utility for handling large MCP outputs with automatic file fallback.
5
- *
6
- * When output size exceeds the threshold, automatically writes to a temp file
7
- * and returns a structured response with file path and preview.
8
- */
9
- /**
10
- * Configuration options for the output handler
11
- */
12
- export interface LargeOutputOptions {
13
- /**
14
- * Character threshold for file fallback
15
- * @default 15000 (safety margin under Claude's ~20K limit)
16
- */
17
- threshold?: number;
18
- /**
19
- * Number of characters to include in preview when writing to file
20
- * @default 500
21
- */
22
- previewLength?: number;
23
- /**
24
- * Custom temp directory for output files
25
- * @default OS temp directory
26
- */
27
- tempDir?: string;
28
- /**
29
- * Custom filename prefix
30
- * @default "mcp_output"
31
- */
32
- filenamePrefix?: string;
33
- /**
34
- * Whether to include a size indicator in the response
35
- * @default true
36
- */
37
- includeSize?: boolean;
38
- /**
39
- * Whether to include a preview in the file response
40
- * @default true
41
- */
42
- includePreview?: boolean;
43
- /**
44
- * Response format for file outputs
45
- * - "actionable" (default): Returns actionable text prompting LLM to read the file
46
- * - "json": Returns structured JSON object
47
- * @default "actionable"
48
- */
49
- responseFormat?: "actionable" | "json";
50
- }
51
- /**
52
- * Response when output is returned inline (under threshold)
53
- */
54
- export interface InlineOutputResponse {
55
- type: "inline";
56
- content: string;
57
- }
58
- /**
59
- * Response when output is written to file (over threshold)
60
- */
61
- export interface FileOutputResponse {
62
- type: "file";
63
- path: string;
64
- size: number;
65
- preview?: string;
66
- sizeFormatted?: string;
67
- }
68
- /**
69
- * Union type for all possible responses
70
- */
71
- export type OutputResponse = InlineOutputResponse | FileOutputResponse;
72
- /**
73
- * Handle output with automatic file fallback
74
- *
75
- * @param content - The content to return
76
- * @param options - Configuration options
77
- * @returns Structured response with inline content or file reference
78
- *
79
- * @example
80
- * ```ts
81
- * import { handleOutput } from "@ebowwa/large-output";
82
- *
83
- * const results = await fetchLargeData();
84
- * const response = handleOutput(JSON.stringify(results));
85
- *
86
- * if (response.type === "file") {
87
- * console.log(`Written to: ${response.path}`);
88
- * } else {
89
- * console.log(response.content);
90
- * }
91
- * ```
92
- */
93
- export declare function handleOutput(content: string, options?: LargeOutputOptions): OutputResponse;
94
- /**
95
- * Convert an OutputResponse to a string for MCP tool return
96
- *
97
- * @param response - The response from handleOutput()
98
- * @param format - Response format: "actionable" (default) or "json"
99
- * @returns Text or JSON string suitable for MCP tool return value
100
- *
101
- * @example
102
- * ```ts
103
- * const response = handleOutput(largeContent);
104
- * return toMCPResponse(response);
105
- * ```
106
- */
107
- export declare function toMCPResponse(response: OutputResponse, format?: "actionable" | "json"): string;
108
- /**
109
- * Convenience function: handle output and return MCP-formatted string
110
- *
111
- * @param content - The content to return
112
- * @param options - Configuration options (including responseFormat)
113
- * @returns Text string with actionable instructions (default) or JSON
114
- *
115
- * @example
116
- * ```ts
117
- * import { handleMCPOutput } from "@ebowwa/large-output";
118
- *
119
- * // In your MCP tool handler (default: actionable format):
120
- * return handleMCPOutput(JSON.stringify(results));
121
- *
122
- * // For JSON format:
123
- * return handleMCPOutput(JSON.stringify(results), { responseFormat: "json" });
124
- * ```
125
- */
126
- export declare function handleMCPOutput(content: string, options?: LargeOutputOptions): string;
127
- /**
128
- * Batch handler for multiple outputs
129
- *
130
- * @param contents - Array of content strings
131
- * @param options - Configuration options (applied to all)
132
- * @returns Array of OutputResponse
133
- *
134
- * @example
135
- * ```ts
136
- * const outputs = handleBatch([data1, data2, data3]);
137
- * // Each output handled independently
138
- * ```
139
- */
140
- export declare function handleBatch(contents: string[], options?: LargeOutputOptions): OutputResponse[];
141
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,YAAY,GAAG,MAAM,CAAC;CACxC;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,oBAAoB,GAAG,kBAAkB,CAAC;AAwCvE;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,kBAAuB,GAC/B,cAAc,CAwChB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,cAAc,EACxB,MAAM,GAAE,YAAY,GAAG,MAAqB,GAC3C,MAAM,CAgDR;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,kBAAuB,GAC/B,MAAM,CAGR;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAAE,EAClB,OAAO,GAAE,kBAAuB,GAC/B,cAAc,EAAE,CAElB"}
package/dist/index.js DELETED
@@ -1,192 +0,0 @@
1
- /**
2
- * @ebowwa/large-output
3
- *
4
- * Shared utility for handling large MCP outputs with automatic file fallback.
5
- *
6
- * When output size exceeds the threshold, automatically writes to a temp file
7
- * and returns a structured response with file path and preview.
8
- */
9
- import * as fs from "fs";
10
- import * as path from "path";
11
- import * as os from "os";
12
- /**
13
- * Default options
14
- */
15
- const DEFAULT_OPTIONS = {
16
- threshold: 15000,
17
- previewLength: 500,
18
- includeSize: true,
19
- includePreview: true,
20
- responseFormat: "actionable",
21
- };
22
- /**
23
- * Format bytes to human-readable string
24
- */
25
- function formatSize(bytes) {
26
- if (bytes < 1024)
27
- return `${bytes} B`;
28
- if (bytes < 1024 * 1024)
29
- return `${(bytes / 1024).toFixed(1)} KB`;
30
- return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
31
- }
32
- /**
33
- * Generate a unique filename with timestamp
34
- */
35
- function generateFilename(prefix) {
36
- const timestamp = new Date().toISOString().replace(/[:.]/g, "-").slice(0, -5);
37
- const random = Math.random().toString(36).slice(2, 8);
38
- return `${prefix}_${timestamp}_${random}.txt`;
39
- }
40
- /**
41
- * Ensure directory exists, create if not
42
- */
43
- function ensureDir(dir) {
44
- if (!fs.existsSync(dir)) {
45
- fs.mkdirSync(dir, { recursive: true });
46
- }
47
- }
48
- /**
49
- * Handle output with automatic file fallback
50
- *
51
- * @param content - The content to return
52
- * @param options - Configuration options
53
- * @returns Structured response with inline content or file reference
54
- *
55
- * @example
56
- * ```ts
57
- * import { handleOutput } from "@ebowwa/large-output";
58
- *
59
- * const results = await fetchLargeData();
60
- * const response = handleOutput(JSON.stringify(results));
61
- *
62
- * if (response.type === "file") {
63
- * console.log(`Written to: ${response.path}`);
64
- * } else {
65
- * console.log(response.content);
66
- * }
67
- * ```
68
- */
69
- export function handleOutput(content, options = {}) {
70
- const opts = { ...DEFAULT_OPTIONS, ...options };
71
- const contentLength = content.length;
72
- // Return inline if under threshold
73
- if (contentLength <= opts.threshold) {
74
- return {
75
- type: "inline",
76
- content,
77
- };
78
- }
79
- // Write to file if over threshold
80
- const tempDir = options.tempDir || os.tmpdir();
81
- const filenamePrefix = options.filenamePrefix || "mcp_output";
82
- ensureDir(tempDir);
83
- const filename = generateFilename(filenamePrefix);
84
- const filepath = path.join(tempDir, filename);
85
- fs.writeFileSync(filepath, content, "utf-8");
86
- const response = {
87
- type: "file",
88
- path: filepath,
89
- size: contentLength,
90
- };
91
- if (opts.includeSize) {
92
- response.sizeFormatted = formatSize(contentLength);
93
- }
94
- if (opts.includePreview) {
95
- response.preview = content.slice(0, opts.previewLength);
96
- if (contentLength > opts.previewLength) {
97
- response.preview += "...";
98
- }
99
- }
100
- return response;
101
- }
102
- /**
103
- * Convert an OutputResponse to a string for MCP tool return
104
- *
105
- * @param response - The response from handleOutput()
106
- * @param format - Response format: "actionable" (default) or "json"
107
- * @returns Text or JSON string suitable for MCP tool return value
108
- *
109
- * @example
110
- * ```ts
111
- * const response = handleOutput(largeContent);
112
- * return toMCPResponse(response);
113
- * ```
114
- */
115
- export function toMCPResponse(response, format = "actionable") {
116
- if (response.type === "inline") {
117
- return response.content;
118
- }
119
- // JSON format for programmatic consumers
120
- if (format === "json") {
121
- const result = {
122
- type: "file",
123
- path: response.path,
124
- };
125
- if (response.size !== undefined) {
126
- result.size = response.size;
127
- }
128
- if (response.sizeFormatted !== undefined) {
129
- result.sizeFormatted = response.sizeFormatted;
130
- }
131
- if (response.preview !== undefined) {
132
- result.preview = response.preview;
133
- }
134
- return JSON.stringify(result, null, 2);
135
- }
136
- // Actionable format - prompts LLM to read the file (DEFAULT)
137
- // This is critical - JSON alone gets ignored by LLMs
138
- const lines = [
139
- `⚠️ Large output (${response.sizeFormatted || response.size} characters) saved to file.`,
140
- ``,
141
- `📖 **ACTION REQUIRED**: Use the Read tool to read this file:`,
142
- ``,
143
- ` ${response.path}`,
144
- ``,
145
- ];
146
- if (response.preview !== undefined) {
147
- lines.push(`--- PREVIEW (first 500 chars) ---`);
148
- lines.push(response.preview);
149
- lines.push(`--- END PREVIEW ---`);
150
- lines.push(``);
151
- }
152
- lines.push(`✅ File contains the complete data. Read it to proceed.`);
153
- return lines.join("\n");
154
- }
155
- /**
156
- * Convenience function: handle output and return MCP-formatted string
157
- *
158
- * @param content - The content to return
159
- * @param options - Configuration options (including responseFormat)
160
- * @returns Text string with actionable instructions (default) or JSON
161
- *
162
- * @example
163
- * ```ts
164
- * import { handleMCPOutput } from "@ebowwa/large-output";
165
- *
166
- * // In your MCP tool handler (default: actionable format):
167
- * return handleMCPOutput(JSON.stringify(results));
168
- *
169
- * // For JSON format:
170
- * return handleMCPOutput(JSON.stringify(results), { responseFormat: "json" });
171
- * ```
172
- */
173
- export function handleMCPOutput(content, options = {}) {
174
- const response = handleOutput(content, options);
175
- return toMCPResponse(response, options.responseFormat);
176
- }
177
- /**
178
- * Batch handler for multiple outputs
179
- *
180
- * @param contents - Array of content strings
181
- * @param options - Configuration options (applied to all)
182
- * @returns Array of OutputResponse
183
- *
184
- * @example
185
- * ```ts
186
- * const outputs = handleBatch([data1, data2, data3]);
187
- * // Each output handled independently
188
- * ```
189
- */
190
- export function handleBatch(contents, options = {}) {
191
- return contents.map((content) => handleOutput(content, options));
192
- }
package/rust/Cargo.lock DELETED
@@ -1,690 +0,0 @@
1
- # This file is automatically @generated by Cargo.
2
- # It is not intended for manual editing.
3
- version = 4
4
-
5
- [[package]]
6
- name = "android_system_properties"
7
- version = "0.1.5"
8
- source = "registry+https://github.com/rust-lang/crates.io-index"
9
- checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
10
- dependencies = [
11
- "libc",
12
- ]
13
-
14
- [[package]]
15
- name = "anyhow"
16
- version = "1.0.102"
17
- source = "registry+https://github.com/rust-lang/crates.io-index"
18
- checksum = "7f202df86484c868dbad7eaa557ef785d5c66295e41b460ef922eca0723b842c"
19
-
20
- [[package]]
21
- name = "autocfg"
22
- version = "1.5.0"
23
- source = "registry+https://github.com/rust-lang/crates.io-index"
24
- checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
25
-
26
- [[package]]
27
- name = "bitflags"
28
- version = "2.11.0"
29
- source = "registry+https://github.com/rust-lang/crates.io-index"
30
- checksum = "843867be96c8daad0d758b57df9392b6d8d271134fce549de6ce169ff98a92af"
31
-
32
- [[package]]
33
- name = "bumpalo"
34
- version = "3.20.2"
35
- source = "registry+https://github.com/rust-lang/crates.io-index"
36
- checksum = "5d20789868f4b01b2f2caec9f5c4e0213b41e3e5702a50157d699ae31ced2fcb"
37
-
38
- [[package]]
39
- name = "bytes"
40
- version = "1.11.1"
41
- source = "registry+https://github.com/rust-lang/crates.io-index"
42
- checksum = "1e748733b7cbc798e1434b6ac524f0c1ff2ab456fe201501e6497c8417a4fc33"
43
-
44
- [[package]]
45
- name = "cc"
46
- version = "1.2.56"
47
- source = "registry+https://github.com/rust-lang/crates.io-index"
48
- checksum = "aebf35691d1bfb0ac386a69bac2fde4dd276fb618cf8bf4f5318fe285e821bb2"
49
- dependencies = [
50
- "find-msvc-tools",
51
- "shlex",
52
- ]
53
-
54
- [[package]]
55
- name = "cfg-if"
56
- version = "1.0.4"
57
- source = "registry+https://github.com/rust-lang/crates.io-index"
58
- checksum = "9330f8b2ff13f34540b44e946ef35111825727b38d33286ef986142615121801"
59
-
60
- [[package]]
61
- name = "chrono"
62
- version = "0.4.44"
63
- source = "registry+https://github.com/rust-lang/crates.io-index"
64
- checksum = "c673075a2e0e5f4a1dde27ce9dee1ea4558c7ffe648f576438a20ca1d2acc4b0"
65
- dependencies = [
66
- "iana-time-zone",
67
- "js-sys",
68
- "num-traits",
69
- "wasm-bindgen",
70
- "windows-link",
71
- ]
72
-
73
- [[package]]
74
- name = "core-foundation-sys"
75
- version = "0.8.7"
76
- source = "registry+https://github.com/rust-lang/crates.io-index"
77
- checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
78
-
79
- [[package]]
80
- name = "equivalent"
81
- version = "1.0.2"
82
- source = "registry+https://github.com/rust-lang/crates.io-index"
83
- checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
84
-
85
- [[package]]
86
- name = "errno"
87
- version = "0.3.14"
88
- source = "registry+https://github.com/rust-lang/crates.io-index"
89
- checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
90
- dependencies = [
91
- "libc",
92
- "windows-sys",
93
- ]
94
-
95
- [[package]]
96
- name = "fastrand"
97
- version = "2.3.0"
98
- source = "registry+https://github.com/rust-lang/crates.io-index"
99
- checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
100
-
101
- [[package]]
102
- name = "find-msvc-tools"
103
- version = "0.1.9"
104
- source = "registry+https://github.com/rust-lang/crates.io-index"
105
- checksum = "5baebc0774151f905a1a2cc41989300b1e6fbb29aff0ceffa1064fdd3088d582"
106
-
107
- [[package]]
108
- name = "foldhash"
109
- version = "0.1.5"
110
- source = "registry+https://github.com/rust-lang/crates.io-index"
111
- checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
112
-
113
- [[package]]
114
- name = "getrandom"
115
- version = "0.4.1"
116
- source = "registry+https://github.com/rust-lang/crates.io-index"
117
- checksum = "139ef39800118c7683f2fd3c98c1b23c09ae076556b435f8e9064ae108aaeeec"
118
- dependencies = [
119
- "cfg-if",
120
- "libc",
121
- "r-efi",
122
- "wasip2",
123
- "wasip3",
124
- ]
125
-
126
- [[package]]
127
- name = "hashbrown"
128
- version = "0.15.5"
129
- source = "registry+https://github.com/rust-lang/crates.io-index"
130
- checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
131
- dependencies = [
132
- "foldhash",
133
- ]
134
-
135
- [[package]]
136
- name = "hashbrown"
137
- version = "0.16.1"
138
- source = "registry+https://github.com/rust-lang/crates.io-index"
139
- checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
140
-
141
- [[package]]
142
- name = "heck"
143
- version = "0.5.0"
144
- source = "registry+https://github.com/rust-lang/crates.io-index"
145
- checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
146
-
147
- [[package]]
148
- name = "iana-time-zone"
149
- version = "0.1.65"
150
- source = "registry+https://github.com/rust-lang/crates.io-index"
151
- checksum = "e31bc9ad994ba00e440a8aa5c9ef0ec67d5cb5e5cb0cc7f8b744a35b389cc470"
152
- dependencies = [
153
- "android_system_properties",
154
- "core-foundation-sys",
155
- "iana-time-zone-haiku",
156
- "js-sys",
157
- "log",
158
- "wasm-bindgen",
159
- "windows-core",
160
- ]
161
-
162
- [[package]]
163
- name = "iana-time-zone-haiku"
164
- version = "0.1.2"
165
- source = "registry+https://github.com/rust-lang/crates.io-index"
166
- checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
167
- dependencies = [
168
- "cc",
169
- ]
170
-
171
- [[package]]
172
- name = "id-arena"
173
- version = "2.3.0"
174
- source = "registry+https://github.com/rust-lang/crates.io-index"
175
- checksum = "3d3067d79b975e8844ca9eb072e16b31c3c1c36928edf9c6789548c524d0d954"
176
-
177
- [[package]]
178
- name = "indexmap"
179
- version = "2.13.0"
180
- source = "registry+https://github.com/rust-lang/crates.io-index"
181
- checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017"
182
- dependencies = [
183
- "equivalent",
184
- "hashbrown 0.16.1",
185
- "serde",
186
- "serde_core",
187
- ]
188
-
189
- [[package]]
190
- name = "itoa"
191
- version = "1.0.17"
192
- source = "registry+https://github.com/rust-lang/crates.io-index"
193
- checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2"
194
-
195
- [[package]]
196
- name = "js-sys"
197
- version = "0.3.90"
198
- source = "registry+https://github.com/rust-lang/crates.io-index"
199
- checksum = "14dc6f6450b3f6d4ed5b16327f38fed626d375a886159ca555bd7822c0c3a5a6"
200
- dependencies = [
201
- "once_cell",
202
- "wasm-bindgen",
203
- ]
204
-
205
- [[package]]
206
- name = "large-output"
207
- version = "1.2.0"
208
- dependencies = [
209
- "chrono",
210
- "serde",
211
- "serde_json",
212
- "tempfile",
213
- "tokio",
214
- "uuid",
215
- ]
216
-
217
- [[package]]
218
- name = "leb128fmt"
219
- version = "0.1.0"
220
- source = "registry+https://github.com/rust-lang/crates.io-index"
221
- checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2"
222
-
223
- [[package]]
224
- name = "libc"
225
- version = "0.2.182"
226
- source = "registry+https://github.com/rust-lang/crates.io-index"
227
- checksum = "6800badb6cb2082ffd7b6a67e6125bb39f18782f793520caee8cb8846be06112"
228
-
229
- [[package]]
230
- name = "linux-raw-sys"
231
- version = "0.12.1"
232
- source = "registry+https://github.com/rust-lang/crates.io-index"
233
- checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53"
234
-
235
- [[package]]
236
- name = "log"
237
- version = "0.4.29"
238
- source = "registry+https://github.com/rust-lang/crates.io-index"
239
- checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
240
-
241
- [[package]]
242
- name = "memchr"
243
- version = "2.8.0"
244
- source = "registry+https://github.com/rust-lang/crates.io-index"
245
- checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
246
-
247
- [[package]]
248
- name = "num-traits"
249
- version = "0.2.19"
250
- source = "registry+https://github.com/rust-lang/crates.io-index"
251
- checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
252
- dependencies = [
253
- "autocfg",
254
- ]
255
-
256
- [[package]]
257
- name = "once_cell"
258
- version = "1.21.3"
259
- source = "registry+https://github.com/rust-lang/crates.io-index"
260
- checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
261
-
262
- [[package]]
263
- name = "pin-project-lite"
264
- version = "0.2.16"
265
- source = "registry+https://github.com/rust-lang/crates.io-index"
266
- checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b"
267
-
268
- [[package]]
269
- name = "prettyplease"
270
- version = "0.2.37"
271
- source = "registry+https://github.com/rust-lang/crates.io-index"
272
- checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b"
273
- dependencies = [
274
- "proc-macro2",
275
- "syn",
276
- ]
277
-
278
- [[package]]
279
- name = "proc-macro2"
280
- version = "1.0.106"
281
- source = "registry+https://github.com/rust-lang/crates.io-index"
282
- checksum = "8fd00f0bb2e90d81d1044c2b32617f68fcb9fa3bb7640c23e9c748e53fb30934"
283
- dependencies = [
284
- "unicode-ident",
285
- ]
286
-
287
- [[package]]
288
- name = "quote"
289
- version = "1.0.44"
290
- source = "registry+https://github.com/rust-lang/crates.io-index"
291
- checksum = "21b2ebcf727b7760c461f091f9f0f539b77b8e87f2fd88131e7f1b433b3cece4"
292
- dependencies = [
293
- "proc-macro2",
294
- ]
295
-
296
- [[package]]
297
- name = "r-efi"
298
- version = "5.3.0"
299
- source = "registry+https://github.com/rust-lang/crates.io-index"
300
- checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
301
-
302
- [[package]]
303
- name = "rustix"
304
- version = "1.1.4"
305
- source = "registry+https://github.com/rust-lang/crates.io-index"
306
- checksum = "b6fe4565b9518b83ef4f91bb47ce29620ca828bd32cb7e408f0062e9930ba190"
307
- dependencies = [
308
- "bitflags",
309
- "errno",
310
- "libc",
311
- "linux-raw-sys",
312
- "windows-sys",
313
- ]
314
-
315
- [[package]]
316
- name = "rustversion"
317
- version = "1.0.22"
318
- source = "registry+https://github.com/rust-lang/crates.io-index"
319
- checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
320
-
321
- [[package]]
322
- name = "semver"
323
- version = "1.0.27"
324
- source = "registry+https://github.com/rust-lang/crates.io-index"
325
- checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2"
326
-
327
- [[package]]
328
- name = "serde"
329
- version = "1.0.228"
330
- source = "registry+https://github.com/rust-lang/crates.io-index"
331
- checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
332
- dependencies = [
333
- "serde_core",
334
- "serde_derive",
335
- ]
336
-
337
- [[package]]
338
- name = "serde_core"
339
- version = "1.0.228"
340
- source = "registry+https://github.com/rust-lang/crates.io-index"
341
- checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
342
- dependencies = [
343
- "serde_derive",
344
- ]
345
-
346
- [[package]]
347
- name = "serde_derive"
348
- version = "1.0.228"
349
- source = "registry+https://github.com/rust-lang/crates.io-index"
350
- checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
351
- dependencies = [
352
- "proc-macro2",
353
- "quote",
354
- "syn",
355
- ]
356
-
357
- [[package]]
358
- name = "serde_json"
359
- version = "1.0.149"
360
- source = "registry+https://github.com/rust-lang/crates.io-index"
361
- checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86"
362
- dependencies = [
363
- "itoa",
364
- "memchr",
365
- "serde",
366
- "serde_core",
367
- "zmij",
368
- ]
369
-
370
- [[package]]
371
- name = "shlex"
372
- version = "1.3.0"
373
- source = "registry+https://github.com/rust-lang/crates.io-index"
374
- checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
375
-
376
- [[package]]
377
- name = "syn"
378
- version = "2.0.117"
379
- source = "registry+https://github.com/rust-lang/crates.io-index"
380
- checksum = "e665b8803e7b1d2a727f4023456bbbbe74da67099c585258af0ad9c5013b9b99"
381
- dependencies = [
382
- "proc-macro2",
383
- "quote",
384
- "unicode-ident",
385
- ]
386
-
387
- [[package]]
388
- name = "tempfile"
389
- version = "3.26.0"
390
- source = "registry+https://github.com/rust-lang/crates.io-index"
391
- checksum = "82a72c767771b47409d2345987fda8628641887d5466101319899796367354a0"
392
- dependencies = [
393
- "fastrand",
394
- "getrandom",
395
- "once_cell",
396
- "rustix",
397
- "windows-sys",
398
- ]
399
-
400
- [[package]]
401
- name = "tokio"
402
- version = "1.49.0"
403
- source = "registry+https://github.com/rust-lang/crates.io-index"
404
- checksum = "72a2903cd7736441aac9df9d7688bd0ce48edccaadf181c3b90be801e81d3d86"
405
- dependencies = [
406
- "bytes",
407
- "pin-project-lite",
408
- ]
409
-
410
- [[package]]
411
- name = "unicode-ident"
412
- version = "1.0.24"
413
- source = "registry+https://github.com/rust-lang/crates.io-index"
414
- checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
415
-
416
- [[package]]
417
- name = "unicode-xid"
418
- version = "0.2.6"
419
- source = "registry+https://github.com/rust-lang/crates.io-index"
420
- checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
421
-
422
- [[package]]
423
- name = "uuid"
424
- version = "1.21.0"
425
- source = "registry+https://github.com/rust-lang/crates.io-index"
426
- checksum = "b672338555252d43fd2240c714dc444b8c6fb0a5c5335e65a07bba7742735ddb"
427
- dependencies = [
428
- "getrandom",
429
- "js-sys",
430
- "wasm-bindgen",
431
- ]
432
-
433
- [[package]]
434
- name = "wasip2"
435
- version = "1.0.2+wasi-0.2.9"
436
- source = "registry+https://github.com/rust-lang/crates.io-index"
437
- checksum = "9517f9239f02c069db75e65f174b3da828fe5f5b945c4dd26bd25d89c03ebcf5"
438
- dependencies = [
439
- "wit-bindgen",
440
- ]
441
-
442
- [[package]]
443
- name = "wasip3"
444
- version = "0.4.0+wasi-0.3.0-rc-2026-01-06"
445
- source = "registry+https://github.com/rust-lang/crates.io-index"
446
- checksum = "5428f8bf88ea5ddc08faddef2ac4a67e390b88186c703ce6dbd955e1c145aca5"
447
- dependencies = [
448
- "wit-bindgen",
449
- ]
450
-
451
- [[package]]
452
- name = "wasm-bindgen"
453
- version = "0.2.113"
454
- source = "registry+https://github.com/rust-lang/crates.io-index"
455
- checksum = "60722a937f594b7fde9adb894d7c092fc1bb6612897c46368d18e7a20208eff2"
456
- dependencies = [
457
- "cfg-if",
458
- "once_cell",
459
- "rustversion",
460
- "wasm-bindgen-macro",
461
- "wasm-bindgen-shared",
462
- ]
463
-
464
- [[package]]
465
- name = "wasm-bindgen-macro"
466
- version = "0.2.113"
467
- source = "registry+https://github.com/rust-lang/crates.io-index"
468
- checksum = "0fac8c6395094b6b91c4af293f4c79371c163f9a6f56184d2c9a85f5a95f3950"
469
- dependencies = [
470
- "quote",
471
- "wasm-bindgen-macro-support",
472
- ]
473
-
474
- [[package]]
475
- name = "wasm-bindgen-macro-support"
476
- version = "0.2.113"
477
- source = "registry+https://github.com/rust-lang/crates.io-index"
478
- checksum = "ab3fabce6159dc20728033842636887e4877688ae94382766e00b180abac9d60"
479
- dependencies = [
480
- "bumpalo",
481
- "proc-macro2",
482
- "quote",
483
- "syn",
484
- "wasm-bindgen-shared",
485
- ]
486
-
487
- [[package]]
488
- name = "wasm-bindgen-shared"
489
- version = "0.2.113"
490
- source = "registry+https://github.com/rust-lang/crates.io-index"
491
- checksum = "de0e091bdb824da87dc01d967388880d017a0a9bc4f3bdc0d86ee9f9336e3bb5"
492
- dependencies = [
493
- "unicode-ident",
494
- ]
495
-
496
- [[package]]
497
- name = "wasm-encoder"
498
- version = "0.244.0"
499
- source = "registry+https://github.com/rust-lang/crates.io-index"
500
- checksum = "990065f2fe63003fe337b932cfb5e3b80e0b4d0f5ff650e6985b1048f62c8319"
501
- dependencies = [
502
- "leb128fmt",
503
- "wasmparser",
504
- ]
505
-
506
- [[package]]
507
- name = "wasm-metadata"
508
- version = "0.244.0"
509
- source = "registry+https://github.com/rust-lang/crates.io-index"
510
- checksum = "bb0e353e6a2fbdc176932bbaab493762eb1255a7900fe0fea1a2f96c296cc909"
511
- dependencies = [
512
- "anyhow",
513
- "indexmap",
514
- "wasm-encoder",
515
- "wasmparser",
516
- ]
517
-
518
- [[package]]
519
- name = "wasmparser"
520
- version = "0.244.0"
521
- source = "registry+https://github.com/rust-lang/crates.io-index"
522
- checksum = "47b807c72e1bac69382b3a6fb3dbe8ea4c0ed87ff5629b8685ae6b9a611028fe"
523
- dependencies = [
524
- "bitflags",
525
- "hashbrown 0.15.5",
526
- "indexmap",
527
- "semver",
528
- ]
529
-
530
- [[package]]
531
- name = "windows-core"
532
- version = "0.62.2"
533
- source = "registry+https://github.com/rust-lang/crates.io-index"
534
- checksum = "b8e83a14d34d0623b51dce9581199302a221863196a1dde71a7663a4c2be9deb"
535
- dependencies = [
536
- "windows-implement",
537
- "windows-interface",
538
- "windows-link",
539
- "windows-result",
540
- "windows-strings",
541
- ]
542
-
543
- [[package]]
544
- name = "windows-implement"
545
- version = "0.60.2"
546
- source = "registry+https://github.com/rust-lang/crates.io-index"
547
- checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf"
548
- dependencies = [
549
- "proc-macro2",
550
- "quote",
551
- "syn",
552
- ]
553
-
554
- [[package]]
555
- name = "windows-interface"
556
- version = "0.59.3"
557
- source = "registry+https://github.com/rust-lang/crates.io-index"
558
- checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358"
559
- dependencies = [
560
- "proc-macro2",
561
- "quote",
562
- "syn",
563
- ]
564
-
565
- [[package]]
566
- name = "windows-link"
567
- version = "0.2.1"
568
- source = "registry+https://github.com/rust-lang/crates.io-index"
569
- checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
570
-
571
- [[package]]
572
- name = "windows-result"
573
- version = "0.4.1"
574
- source = "registry+https://github.com/rust-lang/crates.io-index"
575
- checksum = "7781fa89eaf60850ac3d2da7af8e5242a5ea78d1a11c49bf2910bb5a73853eb5"
576
- dependencies = [
577
- "windows-link",
578
- ]
579
-
580
- [[package]]
581
- name = "windows-strings"
582
- version = "0.5.1"
583
- source = "registry+https://github.com/rust-lang/crates.io-index"
584
- checksum = "7837d08f69c77cf6b07689544538e017c1bfcf57e34b4c0ff58e6c2cd3b37091"
585
- dependencies = [
586
- "windows-link",
587
- ]
588
-
589
- [[package]]
590
- name = "windows-sys"
591
- version = "0.61.2"
592
- source = "registry+https://github.com/rust-lang/crates.io-index"
593
- checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
594
- dependencies = [
595
- "windows-link",
596
- ]
597
-
598
- [[package]]
599
- name = "wit-bindgen"
600
- version = "0.51.0"
601
- source = "registry+https://github.com/rust-lang/crates.io-index"
602
- checksum = "d7249219f66ced02969388cf2bb044a09756a083d0fab1e566056b04d9fbcaa5"
603
- dependencies = [
604
- "wit-bindgen-rust-macro",
605
- ]
606
-
607
- [[package]]
608
- name = "wit-bindgen-core"
609
- version = "0.51.0"
610
- source = "registry+https://github.com/rust-lang/crates.io-index"
611
- checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc"
612
- dependencies = [
613
- "anyhow",
614
- "heck",
615
- "wit-parser",
616
- ]
617
-
618
- [[package]]
619
- name = "wit-bindgen-rust"
620
- version = "0.51.0"
621
- source = "registry+https://github.com/rust-lang/crates.io-index"
622
- checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21"
623
- dependencies = [
624
- "anyhow",
625
- "heck",
626
- "indexmap",
627
- "prettyplease",
628
- "syn",
629
- "wasm-metadata",
630
- "wit-bindgen-core",
631
- "wit-component",
632
- ]
633
-
634
- [[package]]
635
- name = "wit-bindgen-rust-macro"
636
- version = "0.51.0"
637
- source = "registry+https://github.com/rust-lang/crates.io-index"
638
- checksum = "0c0f9bfd77e6a48eccf51359e3ae77140a7f50b1e2ebfe62422d8afdaffab17a"
639
- dependencies = [
640
- "anyhow",
641
- "prettyplease",
642
- "proc-macro2",
643
- "quote",
644
- "syn",
645
- "wit-bindgen-core",
646
- "wit-bindgen-rust",
647
- ]
648
-
649
- [[package]]
650
- name = "wit-component"
651
- version = "0.244.0"
652
- source = "registry+https://github.com/rust-lang/crates.io-index"
653
- checksum = "9d66ea20e9553b30172b5e831994e35fbde2d165325bec84fc43dbf6f4eb9cb2"
654
- dependencies = [
655
- "anyhow",
656
- "bitflags",
657
- "indexmap",
658
- "log",
659
- "serde",
660
- "serde_derive",
661
- "serde_json",
662
- "wasm-encoder",
663
- "wasm-metadata",
664
- "wasmparser",
665
- "wit-parser",
666
- ]
667
-
668
- [[package]]
669
- name = "wit-parser"
670
- version = "0.244.0"
671
- source = "registry+https://github.com/rust-lang/crates.io-index"
672
- checksum = "ecc8ac4bc1dc3381b7f59c34f00b67e18f910c2c0f50015669dde7def656a736"
673
- dependencies = [
674
- "anyhow",
675
- "id-arena",
676
- "indexmap",
677
- "log",
678
- "semver",
679
- "serde",
680
- "serde_derive",
681
- "serde_json",
682
- "unicode-xid",
683
- "wasmparser",
684
- ]
685
-
686
- [[package]]
687
- name = "zmij"
688
- version = "1.0.21"
689
- source = "registry+https://github.com/rust-lang/crates.io-index"
690
- checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa"