@langgraph-js/pure-graph 1.0.2 → 1.2.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.
Files changed (87) hide show
  1. package/.prettierrc +11 -0
  2. package/README.md +104 -10
  3. package/bun.lock +209 -0
  4. package/dist/adapter/hono/assistants.js +3 -9
  5. package/dist/adapter/hono/endpoint.js +1 -2
  6. package/dist/adapter/hono/runs.js +6 -39
  7. package/dist/adapter/hono/threads.js +5 -46
  8. package/dist/adapter/nextjs/endpoint.d.ts +1 -0
  9. package/dist/adapter/nextjs/endpoint.js +2 -0
  10. package/dist/adapter/nextjs/index.d.ts +1 -0
  11. package/dist/adapter/nextjs/index.js +2 -0
  12. package/dist/adapter/nextjs/router.d.ts +5 -0
  13. package/dist/adapter/nextjs/router.js +168 -0
  14. package/dist/adapter/{hono → nextjs}/zod.d.ts +5 -5
  15. package/dist/adapter/{hono → nextjs}/zod.js +22 -5
  16. package/dist/adapter/zod.d.ts +577 -0
  17. package/dist/adapter/zod.js +119 -0
  18. package/dist/createEndpoint.d.ts +1 -2
  19. package/dist/createEndpoint.js +4 -3
  20. package/dist/global.d.ts +6 -4
  21. package/dist/global.js +10 -5
  22. package/dist/graph/stream.d.ts +1 -1
  23. package/dist/graph/stream.js +18 -10
  24. package/dist/index.d.ts +1 -0
  25. package/dist/index.js +1 -0
  26. package/dist/queue/stream_queue.d.ts +5 -3
  27. package/dist/queue/stream_queue.js +4 -2
  28. package/dist/storage/index.d.ts +9 -4
  29. package/dist/storage/index.js +38 -3
  30. package/dist/storage/redis/queue.d.ts +39 -0
  31. package/dist/storage/redis/queue.js +130 -0
  32. package/dist/storage/sqlite/DB.d.ts +3 -0
  33. package/dist/storage/sqlite/DB.js +14 -0
  34. package/dist/storage/sqlite/checkpoint.d.ts +18 -0
  35. package/dist/storage/sqlite/checkpoint.js +374 -0
  36. package/dist/storage/sqlite/threads.d.ts +43 -0
  37. package/dist/storage/sqlite/threads.js +266 -0
  38. package/dist/storage/sqlite/type.d.ts +15 -0
  39. package/dist/storage/sqlite/type.js +1 -0
  40. package/dist/utils/createEntrypointGraph.d.ts +14 -0
  41. package/dist/utils/createEntrypointGraph.js +11 -0
  42. package/dist/utils/getGraph.js +3 -3
  43. package/examples/nextjs/README.md +36 -0
  44. package/examples/nextjs/app/api/langgraph/[...path]/route.ts +10 -0
  45. package/examples/nextjs/app/favicon.ico +0 -0
  46. package/examples/nextjs/app/globals.css +26 -0
  47. package/examples/nextjs/app/layout.tsx +34 -0
  48. package/examples/nextjs/app/page.tsx +211 -0
  49. package/examples/nextjs/next.config.ts +26 -0
  50. package/examples/nextjs/package.json +24 -0
  51. package/examples/nextjs/postcss.config.mjs +5 -0
  52. package/examples/nextjs/tsconfig.json +27 -0
  53. package/package.json +9 -4
  54. package/packages/agent-graph/demo.json +35 -0
  55. package/packages/agent-graph/package.json +18 -0
  56. package/packages/agent-graph/src/index.ts +47 -0
  57. package/packages/agent-graph/src/tools/tavily.ts +9 -0
  58. package/packages/agent-graph/src/tools.ts +38 -0
  59. package/packages/agent-graph/src/types.ts +42 -0
  60. package/pnpm-workspace.yaml +4 -0
  61. package/src/adapter/hono/assistants.ts +16 -33
  62. package/src/adapter/hono/endpoint.ts +1 -2
  63. package/src/adapter/hono/runs.ts +15 -51
  64. package/src/adapter/hono/threads.ts +15 -70
  65. package/src/adapter/nextjs/endpoint.ts +2 -0
  66. package/src/adapter/nextjs/index.ts +2 -0
  67. package/src/adapter/nextjs/router.ts +193 -0
  68. package/src/adapter/{hono → nextjs}/zod.ts +22 -5
  69. package/src/adapter/zod.ts +135 -0
  70. package/src/createEndpoint.ts +12 -5
  71. package/src/e.d.ts +3 -0
  72. package/src/global.ts +11 -6
  73. package/src/graph/stream.ts +20 -10
  74. package/src/index.ts +1 -0
  75. package/src/queue/stream_queue.ts +6 -5
  76. package/src/storage/index.ts +42 -4
  77. package/src/storage/redis/queue.ts +148 -0
  78. package/src/storage/sqlite/DB.ts +16 -0
  79. package/src/storage/sqlite/checkpoint.ts +503 -0
  80. package/src/storage/sqlite/threads.ts +366 -0
  81. package/src/storage/sqlite/type.ts +12 -0
  82. package/src/utils/createEntrypointGraph.ts +20 -0
  83. package/src/utils/getGraph.ts +3 -3
  84. package/test/graph/entrypoint.ts +21 -0
  85. package/test/graph/index.ts +45 -6
  86. package/test/hono.ts +5 -0
  87. package/test/test.ts +0 -10
package/.prettierrc ADDED
@@ -0,0 +1,11 @@
1
+ {
2
+ "printWidth": 120,
3
+ "tabWidth": 4,
4
+ "useTabs": false,
5
+ "singleQuote": true,
6
+ "trailingComma": "all",
7
+ "semi": true,
8
+ "bracketSpacing": true,
9
+ "bracketSameLine": false,
10
+ "arrowParens": "always"
11
+ }
package/README.md CHANGED
@@ -1,16 +1,110 @@
1
1
  # Pure Graph
2
2
 
3
- Pure Graph is a project that implements a Standard LangGraph Endpoint to many frameworks like NextJS and NuxtJS.
3
+ Pure Graph is a library that provides a standard LangGraph endpoint for integrating into various frameworks like NextJS and Hono.js. This document will guide you on how to use Pure Graph in your projects.
4
4
 
5
- ```js
6
- import { registerGraph } from '../src/createEndpoint';
7
- import { graph } from './graph/index';
8
- import { Hono } from 'hono';
9
- import LangGraphApp from '../src/adapter/hono/index';
10
- registerGraph('test', graph);
5
+ ## Installation
11
6
 
12
- const app = new Hono();
13
- app.route('/', LangGraphApp);
7
+ First, you need to install the Pure Graph package. You can do this using npm or yarn.
14
8
 
15
- export default app;
9
+ ```sh
10
+ npm install @langgraph-js/pure-graph
16
11
  ```
12
+
13
+ or
14
+
15
+ ```sh
16
+ yarn add @langgraph-js/pure-graph
17
+ ```
18
+
19
+ ## Usage
20
+
21
+ ### Next.js Example
22
+
23
+ To integrate Pure Graph into a Next.js project, follow these steps:
24
+
25
+ 1. **Create a Route Handler**
26
+
27
+ Create a new file `route.ts` inside the `app/api/langgraph/[...path]` directory.
28
+
29
+ ```js
30
+ // app/api/langgraph/[...path]/route.ts
31
+ import { GET, POST, DELETE } from '@langgraph-js/pure-graph/dist/adapter/nextjs/router.js';
32
+ import { registerGraph } from '@langgraph-js/pure-graph';
33
+ import { graph } from './path/to/your/graph'; // Replace with your graph implementation
34
+
35
+ registerGraph('test', graph);
36
+
37
+ export { GET, POST, DELETE };
38
+ ```
39
+
40
+ 2. **Configure Environment Variables**
41
+
42
+ Add the necessary environment variables to your `.env` file.
43
+
44
+ ```sh
45
+ SQLITE_DATABASE_URI=./.langgraph_api/chat.db
46
+ CHECKPOINT_TYPE=postgres # or redis, shallow/redis
47
+ REDIS_URL="" # Required if using Redis
48
+ ```
49
+
50
+ ### Hono.js Example
51
+
52
+ To integrate Pure Graph into a Hono.js project, follow these steps:
53
+
54
+ 1. **Create a Hono Application**
55
+
56
+ Create a new file `app.js` in your project root.
57
+
58
+ ```js
59
+ // app.js
60
+ import { registerGraph } from '@langgraph-js/pure-graph';
61
+ import { graph } from './path/to/your/graph'; // Replace with your graph implementation
62
+ import { Hono } from 'hono';
63
+ import LangGraphApp from '@langgraph-js/pure-graph/dist/adapter/hono/index';
64
+
65
+ registerGraph('test', graph);
66
+
67
+ const app = new Hono();
68
+ app.route('/', LangGraphApp);
69
+
70
+ export default app;
71
+ ```
72
+
73
+ 2. **Configure Environment Variables**
74
+
75
+ Add the necessary environment variables to your `.env` file.
76
+
77
+ ```sh
78
+ SQLITE_DATABASE_URI=./.langgraph_api/chat.db
79
+ CHECKPOINT_TYPE=postgres # or redis, shallow/redis
80
+ REDIS_URL="" # Required if using Redis
81
+ ```
82
+
83
+ ## Environment Configuration
84
+
85
+ Here are the environment variables you need to configure:
86
+
87
+ - `SQLITE_DATABASE_URI`: Path to your SQLite database.
88
+ - `CHECKPOINT_TYPE`: Type of checkpoint storage (e.g., `postgres`, `redis`, `shallow/redis`).
89
+ - `REDIS_URL`: URL for Redis (required if using Redis).
90
+
91
+ ## API Endpoints
92
+
93
+ ### Assistants
94
+
95
+ - **GET /assistants**: Search for assistants.
96
+ - **GET /assistants/{assistantId}**: Retrieve a specific assistant graph.
97
+
98
+ ### Threads
99
+
100
+ - **POST /threads**: Create a new thread.
101
+ - **GET /threads**: Search for threads.
102
+ - **GET /threads/{threadId}**: Retrieve a specific thread.
103
+ - **DELETE /threads/{threadId}**: Delete a specific thread.
104
+
105
+ ### Runs
106
+
107
+ - **GET /threads/{threadId}/runs**: List runs in a thread.
108
+ - **POST /threads/{threadId}/runs**: Create a new run.
109
+ - **DELETE /threads/{threadId}/runs/{runId}**: Cancel a specific run.
110
+ - **GET /threads/{threadId}/runs/{runId}/stream**: Stream run data.
package/bun.lock ADDED
@@ -0,0 +1,209 @@
1
+ {
2
+ "lockfileVersion": 1,
3
+ "workspaces": {
4
+ "": {
5
+ "name": "@langgraph-js/pure-graph",
6
+ "dependencies": {
7
+ "@langchain/core": "^0.3.77",
8
+ "@langchain/langgraph": "^0.4.9",
9
+ "@langchain/langgraph-checkpoint": "^0.1.1",
10
+ "@langchain/langgraph-checkpoint-sqlite": "^0.2.1",
11
+ "@langgraph-js/pro": "^1.8.1",
12
+ "better-sqlite3": "^12.4.1",
13
+ "eventemitter3": "^5.0.1",
14
+ "zod": "^3",
15
+ },
16
+ "devDependencies": {
17
+ "@langchain/langgraph-sdk": "^0.1.7",
18
+ "@langgraph-js/sdk": "^2.0.1",
19
+ "@types/node": "^22.13.5",
20
+ "typescript": "^5.9.2",
21
+ },
22
+ "optionalDependencies": {
23
+ "@hono/zod-validator": "^0.7.3",
24
+ "hono": "^4.9.9",
25
+ },
26
+ },
27
+ },
28
+ "packages": {
29
+ "@cfworker/json-schema": ["@cfworker/json-schema@4.1.1", "https://registry.npmmirror.com/@cfworker/json-schema/-/json-schema-4.1.1.tgz", {}, "sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og=="],
30
+
31
+ "@hono/zod-validator": ["@hono/zod-validator@0.7.3", "https://registry.npmmirror.com/@hono/zod-validator/-/zod-validator-0.7.3.tgz", { "peerDependencies": { "hono": "4.9.9", "zod": "3.25.76" } }, "sha512-uYGdgVib3RlGD698WR5dVM0zB3UuPY5vHKXffGUbUh7r4xY+mFIhF3/v4AcQVLrU5CQdBso8BJr4wuVoCrjTuQ=="],
32
+
33
+ "@langchain/core": ["@langchain/core@0.3.77", "https://registry.npmmirror.com/@langchain/core/-/core-0.3.77.tgz", { "dependencies": { "@cfworker/json-schema": "4.1.1", "ansi-styles": "5.2.0", "camelcase": "6.3.0", "decamelize": "1.2.0", "js-tiktoken": "1.0.21", "langsmith": "0.3.69", "mustache": "4.2.0", "p-queue": "6.6.2", "p-retry": "4.6.2", "uuid": "10.0.0", "zod": "3.25.76", "zod-to-json-schema": "3.24.6" } }, "sha512-aqXHea9xfpVn6VoCq9pjujwFqrh3vw3Fgm9KFUZJ1cF7Bx5HI62DvQPw8LlRB3NB4dhwBBA1ldAVkkkd1du8nA=="],
34
+
35
+ "@langchain/langgraph": ["@langchain/langgraph@0.4.9", "https://registry.npmmirror.com/@langchain/langgraph/-/langgraph-0.4.9.tgz", { "dependencies": { "@langchain/langgraph-checkpoint": "0.1.1", "@langchain/langgraph-sdk": "0.1.7", "uuid": "10.0.0", "zod": "3.25.76" }, "optionalDependencies": { "zod-to-json-schema": "3.24.6" }, "peerDependencies": { "@langchain/core": "0.3.77" } }, "sha512-+rcdTGi4Ium4X/VtIX3Zw4RhxEkYWpwUyz806V6rffjHOAMamg6/WZDxpJbrP33RV/wJG1GH12Z29oX3Pqq3Aw=="],
36
+
37
+ "@langchain/langgraph-checkpoint": ["@langchain/langgraph-checkpoint@0.1.1", "https://registry.npmmirror.com/@langchain/langgraph-checkpoint/-/langgraph-checkpoint-0.1.1.tgz", { "dependencies": { "uuid": "10.0.0" }, "peerDependencies": { "@langchain/core": "0.3.77" } }, "sha512-h2bP0RUikQZu0Um1ZUPErQLXyhzroJqKRbRcxYRTAh49oNlsfeq4A3K4YEDRbGGuyPZI/Jiqwhks1wZwY73AZw=="],
38
+
39
+ "@langchain/langgraph-checkpoint-sqlite": ["@langchain/langgraph-checkpoint-sqlite@0.2.1", "https://registry.npmmirror.com/@langchain/langgraph-checkpoint-sqlite/-/langgraph-checkpoint-sqlite-0.2.1.tgz", { "dependencies": { "better-sqlite3": "^11.7.0" }, "peerDependencies": { "@langchain/core": ">=0.2.31 <0.4.0 || ^1.0.0-alpha", "@langchain/langgraph-checkpoint": "^0.1.0" } }, "sha512-zDY1Jv5QA5rQVm0jPBan6XnhkB4oFdhPQH1Huu81B3YPOJaJqjJZVR4/YewzX93gWaSSji5L8YPZ7198tXjNeQ=="],
40
+
41
+ "@langchain/langgraph-sdk": ["@langchain/langgraph-sdk@0.1.7", "https://registry.npmmirror.com/@langchain/langgraph-sdk/-/langgraph-sdk-0.1.7.tgz", { "dependencies": { "@types/json-schema": "7.0.15", "p-queue": "6.6.2", "p-retry": "4.6.2", "uuid": "9.0.1" }, "optionalDependencies": { "@langchain/core": "0.3.77" } }, "sha512-VVQpJQPrzlCLjDqz38dD9qBvG+5bbojoGgP5YMCJKY0RPolw+JE7I/o8cIjAxgvf0NH6U1cfbNJIF2L/0Cfq5Q=="],
42
+
43
+ "@langchain/langgraph-swarm": ["@langchain/langgraph-swarm@0.0.5", "https://registry.npmmirror.com/@langchain/langgraph-swarm/-/langgraph-swarm-0.0.5.tgz", { "dependencies": { "zod": "3.25.76" }, "peerDependencies": { "@langchain/core": "0.3.77", "@langchain/langgraph": "0.4.9" } }, "sha512-/4fSH1l21WHtdIqEYlwkV4gfRn+8+8BtBU0Y7hiMR0yAdXqLVapK0jeMOM2cAVMO57BRkZhDWft+IObOJ/H6JQ=="],
44
+
45
+ "@langchain/openai": ["@langchain/openai@0.5.18", "https://registry.npmmirror.com/@langchain/openai/-/openai-0.5.18.tgz", { "dependencies": { "js-tiktoken": "1.0.21", "openai": "5.23.1", "zod": "3.25.76" }, "peerDependencies": { "@langchain/core": "0.3.77" } }, "sha512-CX1kOTbT5xVFNdtLjnM0GIYNf+P7oMSu+dGCFxxWRa3dZwWiuyuBXCm+dToUGxDLnsHuV1bKBtIzrY1mLq/A1Q=="],
46
+
47
+ "@langgraph-js/pro": ["@langgraph-js/pro@1.8.1", "https://registry.npmmirror.com/@langgraph-js/pro/-/pro-1.8.1.tgz", { "dependencies": { "@langchain/core": "0.3.77", "@langchain/langgraph": "0.4.9", "@langchain/langgraph-swarm": "0.0.5", "@langchain/openai": "0.5.18", "zod": "3.25.76" } }, "sha512-+Cgu2J/0IrkLwAn2fIRhbRbs+KaoM+4zsJCkk9OZIEIFW4Qsz7+sYFKNCBPrviXUOrNuj61z5G66uptNS37PkQ=="],
48
+
49
+ "@langgraph-js/sdk": ["@langgraph-js/sdk@2.0.1", "https://registry.npmmirror.com/@langgraph-js/sdk/-/sdk-2.0.1.tgz", { "dependencies": { "@langchain/langgraph-sdk": "0.0.77", "eventemitter3": "5.0.1", "jsonrepair": "3.13.1", "nanostores": "1.0.1", "ts-debounce": "4.0.0", "zod": "3.25.76", "zod-to-json-schema": "3.24.6" } }, "sha512-MgX1KkgC1/chMpeXtrd2vzreEOMUWyaE4wr2NbLu4BsQJpW1flTRQ5pGha3i43nbP2WJytx00JtT97G5eYWthw=="],
50
+
51
+ "@types/json-schema": ["@types/json-schema@7.0.15", "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.15.tgz", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="],
52
+
53
+ "@types/node": ["@types/node@22.18.6", "https://registry.npmmirror.com/@types/node/-/node-22.18.6.tgz", { "dependencies": { "undici-types": "6.21.0" } }, "sha512-r8uszLPpeIWbNKtvWRt/DbVi5zbqZyj1PTmhRMqBMvDnaz1QpmSKujUtJLrqGZeoM8v72MfYggDceY4K1itzWQ=="],
54
+
55
+ "@types/retry": ["@types/retry@0.12.0", "https://registry.npmmirror.com/@types/retry/-/retry-0.12.0.tgz", {}, "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA=="],
56
+
57
+ "@types/uuid": ["@types/uuid@10.0.0", "https://registry.npmmirror.com/@types/uuid/-/uuid-10.0.0.tgz", {}, "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ=="],
58
+
59
+ "ansi-styles": ["ansi-styles@5.2.0", "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-5.2.0.tgz", {}, "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA=="],
60
+
61
+ "base64-js": ["base64-js@1.5.1", "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="],
62
+
63
+ "better-sqlite3": ["better-sqlite3@12.4.1", "https://registry.npmmirror.com/better-sqlite3/-/better-sqlite3-12.4.1.tgz", { "dependencies": { "bindings": "^1.5.0", "prebuild-install": "^7.1.1" } }, "sha512-3yVdyZhklTiNrtg+4WqHpJpFDd+WHTg2oM7UcR80GqL05AOV0xEJzc6qNvFYoEtE+hRp1n9MpN6/+4yhlGkDXQ=="],
64
+
65
+ "bindings": ["bindings@1.5.0", "https://registry.npmmirror.com/bindings/-/bindings-1.5.0.tgz", { "dependencies": { "file-uri-to-path": "1.0.0" } }, "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ=="],
66
+
67
+ "bl": ["bl@4.1.0", "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz", { "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" } }, "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w=="],
68
+
69
+ "buffer": ["buffer@5.7.1", "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" } }, "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ=="],
70
+
71
+ "camelcase": ["camelcase@6.3.0", "https://registry.npmmirror.com/camelcase/-/camelcase-6.3.0.tgz", {}, "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA=="],
72
+
73
+ "chalk": ["chalk@4.1.2", "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", { "dependencies": { "ansi-styles": "4.3.0", "supports-color": "7.2.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="],
74
+
75
+ "chownr": ["chownr@1.1.4", "https://registry.npmmirror.com/chownr/-/chownr-1.1.4.tgz", {}, "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="],
76
+
77
+ "color-convert": ["color-convert@2.0.1", "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", { "dependencies": { "color-name": "1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="],
78
+
79
+ "color-name": ["color-name@1.1.4", "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="],
80
+
81
+ "console-table-printer": ["console-table-printer@2.14.6", "https://registry.npmmirror.com/console-table-printer/-/console-table-printer-2.14.6.tgz", { "dependencies": { "simple-wcswidth": "1.1.2" } }, "sha512-MCBl5HNVaFuuHW6FGbL/4fB7N/ormCy+tQ+sxTrF6QtSbSNETvPuOVbkJBhzDgYhvjWGrTma4eYJa37ZuoQsPw=="],
82
+
83
+ "decamelize": ["decamelize@1.2.0", "https://registry.npmmirror.com/decamelize/-/decamelize-1.2.0.tgz", {}, "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA=="],
84
+
85
+ "decompress-response": ["decompress-response@6.0.0", "https://registry.npmmirror.com/decompress-response/-/decompress-response-6.0.0.tgz", { "dependencies": { "mimic-response": "^3.1.0" } }, "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ=="],
86
+
87
+ "deep-extend": ["deep-extend@0.6.0", "https://registry.npmmirror.com/deep-extend/-/deep-extend-0.6.0.tgz", {}, "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="],
88
+
89
+ "detect-libc": ["detect-libc@2.1.1", "https://registry.npmmirror.com/detect-libc/-/detect-libc-2.1.1.tgz", {}, "sha512-ecqj/sy1jcK1uWrwpR67UhYrIFQ+5WlGxth34WquCbamhFA6hkkwiu37o6J5xCHdo1oixJRfVRw+ywV+Hq/0Aw=="],
90
+
91
+ "end-of-stream": ["end-of-stream@1.4.5", "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.5.tgz", { "dependencies": { "once": "^1.4.0" } }, "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg=="],
92
+
93
+ "eventemitter3": ["eventemitter3@5.0.1", "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-5.0.1.tgz", {}, "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA=="],
94
+
95
+ "expand-template": ["expand-template@2.0.3", "https://registry.npmmirror.com/expand-template/-/expand-template-2.0.3.tgz", {}, "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg=="],
96
+
97
+ "file-uri-to-path": ["file-uri-to-path@1.0.0", "https://registry.npmmirror.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", {}, "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw=="],
98
+
99
+ "fs-constants": ["fs-constants@1.0.0", "https://registry.npmmirror.com/fs-constants/-/fs-constants-1.0.0.tgz", {}, "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="],
100
+
101
+ "github-from-package": ["github-from-package@0.0.0", "https://registry.npmmirror.com/github-from-package/-/github-from-package-0.0.0.tgz", {}, "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw=="],
102
+
103
+ "has-flag": ["has-flag@4.0.0", "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="],
104
+
105
+ "hono": ["hono@4.9.9", "https://registry.npmmirror.com/hono/-/hono-4.9.9.tgz", {}, "sha512-Hxw4wT6zjJGZJdkJzAx9PyBdf7ZpxaTSA0NfxqjLghwMrLBX8p33hJBzoETRakF3UJu6OdNQBZAlNSkGqKFukw=="],
106
+
107
+ "ieee754": ["ieee754@1.2.1", "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="],
108
+
109
+ "inherits": ["inherits@2.0.4", "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="],
110
+
111
+ "ini": ["ini@1.3.8", "https://registry.npmmirror.com/ini/-/ini-1.3.8.tgz", {}, "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="],
112
+
113
+ "js-tiktoken": ["js-tiktoken@1.0.21", "https://registry.npmmirror.com/js-tiktoken/-/js-tiktoken-1.0.21.tgz", { "dependencies": { "base64-js": "1.5.1" } }, "sha512-biOj/6M5qdgx5TKjDnFT1ymSpM5tbd3ylwDtrQvFQSu0Z7bBYko2dF+W/aUkXUPuk6IVpRxk/3Q2sHOzGlS36g=="],
114
+
115
+ "jsonrepair": ["jsonrepair@3.13.1", "https://registry.npmmirror.com/jsonrepair/-/jsonrepair-3.13.1.tgz", { "bin": { "jsonrepair": "bin/cli.js" } }, "sha512-WJeiE0jGfxYmtLwBTEk8+y/mYcaleyLXWaqp5bJu0/ZTSeG0KQq/wWQ8pmnkKenEdN6pdnn6QtcoSUkbqDHWNw=="],
116
+
117
+ "langsmith": ["langsmith@0.3.69", "https://registry.npmmirror.com/langsmith/-/langsmith-0.3.69.tgz", { "dependencies": { "@types/uuid": "10.0.0", "chalk": "4.1.2", "console-table-printer": "2.14.6", "p-queue": "6.6.2", "p-retry": "4.6.2", "semver": "7.7.2", "uuid": "10.0.0" }, "optionalDependencies": { "openai": "5.23.1" } }, "sha512-YKzu92YAP2o+d+1VmR38xqFX0RIRLKYj1IqdflVEY83X0FoiVlrWO3xDLXgnu7vhZ2N2M6jx8VO9fVF8yy9gHA=="],
118
+
119
+ "mimic-response": ["mimic-response@3.1.0", "https://registry.npmmirror.com/mimic-response/-/mimic-response-3.1.0.tgz", {}, "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="],
120
+
121
+ "minimist": ["minimist@1.2.8", "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="],
122
+
123
+ "mkdirp-classic": ["mkdirp-classic@0.5.3", "https://registry.npmmirror.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", {}, "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A=="],
124
+
125
+ "mustache": ["mustache@4.2.0", "https://registry.npmmirror.com/mustache/-/mustache-4.2.0.tgz", { "bin": { "mustache": "bin/mustache" } }, "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ=="],
126
+
127
+ "nanostores": ["nanostores@1.0.1", "https://registry.npmmirror.com/nanostores/-/nanostores-1.0.1.tgz", {}, "sha512-kNZ9xnoJYKg/AfxjrVL4SS0fKX++4awQReGqWnwTRHxeHGZ1FJFVgTqr/eMrNQdp0Tz7M7tG/TDaX8QfHDwVCw=="],
128
+
129
+ "napi-build-utils": ["napi-build-utils@2.0.0", "https://registry.npmmirror.com/napi-build-utils/-/napi-build-utils-2.0.0.tgz", {}, "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA=="],
130
+
131
+ "node-abi": ["node-abi@3.77.0", "https://registry.npmmirror.com/node-abi/-/node-abi-3.77.0.tgz", { "dependencies": { "semver": "^7.3.5" } }, "sha512-DSmt0OEcLoK4i3NuscSbGjOf3bqiDEutejqENSplMSFA/gmB8mkED9G4pKWnPl7MDU4rSHebKPHeitpDfyH0cQ=="],
132
+
133
+ "once": ["once@1.4.0", "https://registry.npmmirror.com/once/-/once-1.4.0.tgz", { "dependencies": { "wrappy": "1.0.2" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="],
134
+
135
+ "openai": ["openai@5.23.1", "https://registry.npmmirror.com/openai/-/openai-5.23.1.tgz", { "optionalDependencies": { "zod": "3.25.76" }, "bin": { "openai": "bin/cli" } }, "sha512-APxMtm5mln4jhKhAr0d5zP9lNsClx4QwJtg8RUvYSSyxYCTHLNJnLEcSHbJ6t0ori8Pbr9HZGfcPJ7LEy73rvQ=="],
136
+
137
+ "p-finally": ["p-finally@1.0.0", "https://registry.npmmirror.com/p-finally/-/p-finally-1.0.0.tgz", {}, "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow=="],
138
+
139
+ "p-queue": ["p-queue@6.6.2", "https://registry.npmmirror.com/p-queue/-/p-queue-6.6.2.tgz", { "dependencies": { "eventemitter3": "4.0.7", "p-timeout": "3.2.0" } }, "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ=="],
140
+
141
+ "p-retry": ["p-retry@4.6.2", "https://registry.npmmirror.com/p-retry/-/p-retry-4.6.2.tgz", { "dependencies": { "@types/retry": "0.12.0", "retry": "0.13.1" } }, "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ=="],
142
+
143
+ "p-timeout": ["p-timeout@3.2.0", "https://registry.npmmirror.com/p-timeout/-/p-timeout-3.2.0.tgz", { "dependencies": { "p-finally": "1.0.0" } }, "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg=="],
144
+
145
+ "prebuild-install": ["prebuild-install@7.1.3", "https://registry.npmmirror.com/prebuild-install/-/prebuild-install-7.1.3.tgz", { "dependencies": { "detect-libc": "^2.0.0", "expand-template": "^2.0.3", "github-from-package": "0.0.0", "minimist": "^1.2.3", "mkdirp-classic": "^0.5.3", "napi-build-utils": "^2.0.0", "node-abi": "^3.3.0", "pump": "^3.0.0", "rc": "^1.2.7", "simple-get": "^4.0.0", "tar-fs": "^2.0.0", "tunnel-agent": "^0.6.0" }, "bin": { "prebuild-install": "bin.js" } }, "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug=="],
146
+
147
+ "pump": ["pump@3.0.3", "https://registry.npmmirror.com/pump/-/pump-3.0.3.tgz", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA=="],
148
+
149
+ "rc": ["rc@1.2.8", "https://registry.npmmirror.com/rc/-/rc-1.2.8.tgz", { "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" }, "bin": { "rc": "./cli.js" } }, "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw=="],
150
+
151
+ "readable-stream": ["readable-stream@3.6.2", "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="],
152
+
153
+ "retry": ["retry@0.13.1", "https://registry.npmmirror.com/retry/-/retry-0.13.1.tgz", {}, "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg=="],
154
+
155
+ "safe-buffer": ["safe-buffer@5.2.1", "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="],
156
+
157
+ "semver": ["semver@7.7.2", "https://registry.npmmirror.com/semver/-/semver-7.7.2.tgz", { "bin": { "semver": "bin/semver.js" } }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="],
158
+
159
+ "simple-concat": ["simple-concat@1.0.1", "https://registry.npmmirror.com/simple-concat/-/simple-concat-1.0.1.tgz", {}, "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q=="],
160
+
161
+ "simple-get": ["simple-get@4.0.1", "https://registry.npmmirror.com/simple-get/-/simple-get-4.0.1.tgz", { "dependencies": { "decompress-response": "^6.0.0", "once": "^1.3.1", "simple-concat": "^1.0.0" } }, "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA=="],
162
+
163
+ "simple-wcswidth": ["simple-wcswidth@1.1.2", "https://registry.npmmirror.com/simple-wcswidth/-/simple-wcswidth-1.1.2.tgz", {}, "sha512-j7piyCjAeTDSjzTSQ7DokZtMNwNlEAyxqSZeCS+CXH7fJ4jx3FuJ/mTW3mE+6JLs4VJBbcll0Kjn+KXI5t21Iw=="],
164
+
165
+ "string_decoder": ["string_decoder@1.3.0", "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="],
166
+
167
+ "strip-json-comments": ["strip-json-comments@2.0.1", "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz", {}, "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="],
168
+
169
+ "supports-color": ["supports-color@7.2.0", "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", { "dependencies": { "has-flag": "4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="],
170
+
171
+ "tar-fs": ["tar-fs@2.1.4", "https://registry.npmmirror.com/tar-fs/-/tar-fs-2.1.4.tgz", { "dependencies": { "chownr": "^1.1.1", "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", "tar-stream": "^2.1.4" } }, "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ=="],
172
+
173
+ "tar-stream": ["tar-stream@2.2.0", "https://registry.npmmirror.com/tar-stream/-/tar-stream-2.2.0.tgz", { "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", "fs-constants": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^3.1.1" } }, "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ=="],
174
+
175
+ "ts-debounce": ["ts-debounce@4.0.0", "https://registry.npmmirror.com/ts-debounce/-/ts-debounce-4.0.0.tgz", {}, "sha512-+1iDGY6NmOGidq7i7xZGA4cm8DAa6fqdYcvO5Z6yBevH++Bdo9Qt/mN0TzHUgcCcKv1gmh9+W5dHqz8pMWbCbg=="],
176
+
177
+ "tunnel-agent": ["tunnel-agent@0.6.0", "https://registry.npmmirror.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz", { "dependencies": { "safe-buffer": "^5.0.1" } }, "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w=="],
178
+
179
+ "typescript": ["typescript@5.9.2", "https://registry.npmmirror.com/typescript/-/typescript-5.9.2.tgz", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A=="],
180
+
181
+ "undici-types": ["undici-types@6.21.0", "https://registry.npmmirror.com/undici-types/-/undici-types-6.21.0.tgz", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="],
182
+
183
+ "util-deprecate": ["util-deprecate@1.0.2", "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="],
184
+
185
+ "uuid": ["uuid@9.0.1", "https://registry.npmmirror.com/uuid/-/uuid-9.0.1.tgz", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="],
186
+
187
+ "wrappy": ["wrappy@1.0.2", "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="],
188
+
189
+ "zod": ["zod@3.25.76", "https://registry.npmmirror.com/zod/-/zod-3.25.76.tgz", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="],
190
+
191
+ "zod-to-json-schema": ["zod-to-json-schema@3.24.6", "https://registry.npmmirror.com/zod-to-json-schema/-/zod-to-json-schema-3.24.6.tgz", { "peerDependencies": { "zod": "3.25.76" } }, "sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg=="],
192
+
193
+ "@langchain/core/uuid": ["uuid@10.0.0", "https://registry.npmmirror.com/uuid/-/uuid-10.0.0.tgz", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ=="],
194
+
195
+ "@langchain/langgraph/uuid": ["uuid@10.0.0", "https://registry.npmmirror.com/uuid/-/uuid-10.0.0.tgz", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ=="],
196
+
197
+ "@langchain/langgraph-checkpoint/uuid": ["uuid@10.0.0", "https://registry.npmmirror.com/uuid/-/uuid-10.0.0.tgz", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ=="],
198
+
199
+ "@langchain/langgraph-checkpoint-sqlite/better-sqlite3": ["better-sqlite3@11.10.0", "https://registry.npmmirror.com/better-sqlite3/-/better-sqlite3-11.10.0.tgz", { "dependencies": { "bindings": "^1.5.0", "prebuild-install": "^7.1.1" } }, "sha512-EwhOpyXiOEL/lKzHz9AW1msWFNzGc/z+LzeB3/jnFJpxu+th2yqvzsSWas1v9jgs9+xiXJcD5A8CJxAG2TaghQ=="],
200
+
201
+ "@langgraph-js/sdk/@langchain/langgraph-sdk": ["@langchain/langgraph-sdk@0.0.77", "https://registry.npmmirror.com/@langchain/langgraph-sdk/-/langgraph-sdk-0.0.77.tgz", { "dependencies": { "@types/json-schema": "7.0.15", "p-queue": "6.6.2", "p-retry": "4.6.2", "uuid": "9.0.1" }, "optionalDependencies": { "@langchain/core": "0.3.77" } }, "sha512-DMCONENhhaMS+Buw8s2UkKjAa9I6cT1aVJEDOmTO2lpon4Dqz/jiYUVJK7pTlNVSNvSx0E8aOmtT7NgGBcWflg=="],
202
+
203
+ "chalk/ansi-styles": ["ansi-styles@4.3.0", "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", { "dependencies": { "color-convert": "2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="],
204
+
205
+ "langsmith/uuid": ["uuid@10.0.0", "https://registry.npmmirror.com/uuid/-/uuid-10.0.0.tgz", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ=="],
206
+
207
+ "p-queue/eventemitter3": ["eventemitter3@4.0.7", "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz", {}, "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw=="],
208
+ }
209
+ }
@@ -1,15 +1,9 @@
1
1
  import { zValidator } from '@hono/zod-validator';
2
2
  import { Hono } from 'hono';
3
- import { z } from 'zod';
4
3
  import { client } from './endpoint';
5
- import { MetadataSchema } from './zod';
4
+ import { AssistantsSearchSchema, AssistantGraphQuerySchema } from '../zod';
6
5
  const api = new Hono();
7
- api.post('/assistants/search', zValidator('json', z.object({
8
- graph_id: z.string().optional(),
9
- metadata: MetadataSchema.optional(),
10
- limit: z.number().int().optional(),
11
- offset: z.number().int().optional(),
12
- })), async (c) => {
6
+ api.post('/assistants/search', zValidator('json', AssistantsSearchSchema), async (c) => {
13
7
  // Search Assistants
14
8
  const payload = c.req.valid('json');
15
9
  let total = 0;
@@ -17,7 +11,7 @@ api.post('/assistants/search', zValidator('json', z.object({
17
11
  c.res.headers.set('X-Pagination-Total', total.toString());
18
12
  return c.json(data);
19
13
  });
20
- api.get('/assistants/:assistant_id/graph', zValidator('query', z.object({ xray: z.string().optional() })), async (c) => {
14
+ api.get('/assistants/:assistant_id/graph', zValidator('query', AssistantGraphQuerySchema), async (c) => {
21
15
  const xray = c.req.valid('query').xray;
22
16
  const data = await client.assistants.getGraph(c.req.param('assistant_id'), {
23
17
  xray: xray !== undefined ? xray === 'true' : undefined,
@@ -1,3 +1,2 @@
1
1
  import { createEndpoint } from '../../createEndpoint.js';
2
- import { MemoryThreadsManager } from '../../storage/memory/threads.js';
3
- export const client = createEndpoint(new MemoryThreadsManager());
2
+ export const client = createEndpoint();
@@ -1,38 +1,12 @@
1
1
  import { zValidator } from '@hono/zod-validator';
2
2
  import { Hono } from 'hono';
3
3
  import { streamSSE } from 'hono/streaming';
4
- import { z } from 'zod';
5
4
  import { client } from './endpoint';
6
- import { AssistantConfig, CommandSchema, MetadataSchema } from './zod';
5
+ import { ThreadIdParamSchema, RunIdParamSchema, RunStreamPayloadSchema, RunListQuerySchema, RunCancelQuerySchema, } from '../zod';
7
6
  import { serialiseAsDict } from '../../graph/stream';
8
7
  const api = new Hono();
9
8
  // 最常用的对话接口
10
- api.post('/threads/:thread_id/runs/stream', zValidator('param', z.object({ thread_id: z.string().uuid() })), zValidator('json', z
11
- .object({
12
- assistant_id: z.union([z.string().uuid(), z.string()]),
13
- checkpoint_id: z.string().optional(),
14
- // checkpoint: CheckpointSchema.optional(),
15
- input: z.any().optional(),
16
- command: CommandSchema.optional(),
17
- metadata: MetadataSchema.optional(),
18
- config: AssistantConfig.optional(),
19
- webhook: z.string().optional(),
20
- interrupt_before: z.union([z.literal('*'), z.array(z.string())]).optional(),
21
- interrupt_after: z.union([z.literal('*'), z.array(z.string())]).optional(),
22
- on_disconnect: z.enum(['cancel', 'continue']).optional().default('continue'),
23
- multitask_strategy: z.enum(['reject', 'rollback', 'interrupt', 'enqueue']).optional(),
24
- stream_mode: z
25
- .array(z.enum(['values', 'messages', 'messages-tuple', 'updates', 'events', 'debug', 'custom']))
26
- .optional(),
27
- stream_subgraphs: z.boolean().optional(),
28
- stream_resumable: z.boolean().optional(),
29
- after_seconds: z.number().optional(),
30
- if_not_exists: z.enum(['create', 'reject']).optional(),
31
- on_completion: z.enum(['complete', 'continue']).optional(),
32
- feedback_keys: z.array(z.string()).optional(),
33
- langsmith_tracer: z.unknown().optional(),
34
- })
35
- .describe('Payload for creating a stateful run.')), async (c) => {
9
+ api.post('/threads/:thread_id/runs/stream', zValidator('param', ThreadIdParamSchema), zValidator('json', RunStreamPayloadSchema), async (c) => {
36
10
  // Stream Run
37
11
  const { thread_id } = c.req.valid('param');
38
12
  const payload = c.req.valid('json');
@@ -40,24 +14,17 @@ api.post('/threads/:thread_id/runs/stream', zValidator('param', z.object({ threa
40
14
  return streamSSE(c, async (stream) => {
41
15
  /** @ts-ignore zod v3 的问题,与 ts 类型不一致 */
42
16
  for await (const { event, data } of client.runs.stream(thread_id, payload.assistant_id, payload)) {
43
- await stream.writeSSE({ data: serialiseAsDict(data), event });
17
+ await stream.writeSSE({ data: serialiseAsDict(data) ?? '', event });
44
18
  }
45
19
  });
46
20
  });
47
- api.get('/threads/:thread_id/runs', zValidator('param', z.object({ thread_id: z.string().uuid() })), zValidator('query', z.object({
48
- limit: z.string().optional(),
49
- offset: z.string().optional(),
50
- status: z.enum(['pending', 'running', 'error', 'success', 'timeout', 'interrupted']).optional(),
51
- })), async (c) => {
21
+ api.get('/threads/:thread_id/runs', zValidator('param', ThreadIdParamSchema), zValidator('query', RunListQuerySchema), async (c) => {
52
22
  const { thread_id } = c.req.valid('param');
53
23
  const { limit, offset, status } = c.req.valid('query');
54
- const runs = await client.runs.list(thread_id, { limit: Number(limit), offset: Number(offset), status });
24
+ const runs = await client.runs.list(thread_id, { limit, offset, status });
55
25
  return c.json(runs);
56
26
  });
57
- api.post('/threads/:thread_id/runs/:run_id/cancel', zValidator('param', z.object({ thread_id: z.string().uuid(), run_id: z.string().uuid() })), zValidator('query', z.object({
58
- wait: z.coerce.boolean().optional().default(false),
59
- action: z.enum(['interrupt', 'rollback']).optional().default('interrupt'),
60
- })), async (c) => {
27
+ api.post('/threads/:thread_id/runs/:run_id/cancel', zValidator('param', RunIdParamSchema), zValidator('query', RunCancelQuerySchema), async (c) => {
61
28
  // Cancel Run Http
62
29
  const { thread_id, run_id } = c.req.valid('param');
63
30
  const { wait, action } = c.req.valid('query');
@@ -1,68 +1,27 @@
1
1
  import { zValidator } from '@hono/zod-validator';
2
2
  import { Hono } from 'hono';
3
- import { z } from 'zod';
4
3
  import { client } from './endpoint';
5
- import { MetadataSchema } from './zod';
4
+ import { ThreadIdParamSchema, ThreadCreatePayloadSchema, ThreadSearchPayloadSchema } from '../zod';
6
5
  const api = new Hono();
7
6
  // Threads Routes
8
- api.post('/threads', zValidator('json', z
9
- .object({
10
- // supersteps: z
11
- // .array(
12
- // z.object({
13
- // updates: z.array(
14
- // z.object({
15
- // values: z.unknown(),
16
- // command: CommandSchema.optional(),
17
- // as_node: z.string(),
18
- // }),
19
- // ),
20
- // }),
21
- // )
22
- // .describe('The supersteps to apply to the thread.')
23
- // .optional(),
24
- thread_id: z
25
- .string()
26
- .uuid()
27
- .describe('The ID of the thread. If not provided, an ID is generated.')
28
- .optional(),
29
- metadata: MetadataSchema.optional(),
30
- if_exists: z.union([z.literal('raise'), z.literal('do_nothing')]).optional(),
31
- })
32
- .describe('Payload for creating a thread.')), async (c) => {
7
+ api.post('/threads', zValidator('json', ThreadCreatePayloadSchema), async (c) => {
33
8
  const payload = c.req.valid('json');
34
9
  const thread = await client.threads.create(payload);
35
10
  return c.json(thread);
36
11
  });
37
- api.post('/threads/search', zValidator('json', z
38
- .object({
39
- metadata: z.record(z.unknown()).describe('Metadata to search for.').optional(),
40
- status: z
41
- .enum(['idle', 'busy', 'interrupted', 'error'])
42
- .describe('Filter by thread status.')
43
- .optional(),
44
- values: z.record(z.unknown()).describe('Filter by thread values.').optional(),
45
- limit: z.number().int().gte(1).lte(1000).describe('Maximum number to return.').optional(),
46
- offset: z.number().int().gte(0).describe('Offset to start from.').optional(),
47
- sort_by: z
48
- .enum(['thread_id', 'status', 'created_at', 'updated_at'])
49
- .describe('Sort by field.')
50
- .optional(),
51
- sort_order: z.enum(['asc', 'desc']).describe('Sort order.').optional(),
52
- })
53
- .describe('Payload for listing threads.')), async (c) => {
12
+ api.post('/threads/search', zValidator('json', ThreadSearchPayloadSchema), async (c) => {
54
13
  // Search Threads
55
14
  const payload = c.req.valid('json');
56
15
  const result = await client.threads.search(payload);
57
16
  c.res.headers.set('X-Pagination-Total', result.length.toString());
58
17
  return c.json(result);
59
18
  });
60
- api.get('/threads/:thread_id', zValidator('param', z.object({ thread_id: z.string().uuid() })), async (c) => {
19
+ api.get('/threads/:thread_id', zValidator('param', ThreadIdParamSchema), async (c) => {
61
20
  // Get Thread
62
21
  const { thread_id } = c.req.valid('param');
63
22
  return c.json(await client.threads.get(thread_id));
64
23
  });
65
- api.delete('/threads/:thread_id', zValidator('param', z.object({ thread_id: z.string().uuid() })), async (c) => {
24
+ api.delete('/threads/:thread_id', zValidator('param', ThreadIdParamSchema), async (c) => {
66
25
  // Delete Thread
67
26
  const { thread_id } = c.req.valid('param');
68
27
  await client.threads.delete(thread_id);
@@ -0,0 +1 @@
1
+ export declare const client: import("../../types.js").ILangGraphClient<unknown>;
@@ -0,0 +1,2 @@
1
+ import { createEndpoint } from '../../createEndpoint.js';
2
+ export const client = createEndpoint();
@@ -0,0 +1 @@
1
+ export { GET, POST, DELETE } from "./router";
@@ -0,0 +1,2 @@
1
+ // 统一路由处理器
2
+ export { GET, POST, DELETE } from "./router";
@@ -0,0 +1,5 @@
1
+ /** @ts-ignore */
2
+ import { NextRequest } from 'next/server';
3
+ export declare function GET(req: NextRequest): Promise<any>;
4
+ export declare function POST(req: NextRequest): Promise<any>;
5
+ export declare function DELETE(req: NextRequest): Promise<any>;