zen-code 4.9.1 → 4.10.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/app.js +175 -166
- package/dist/chunk-075hks9v.js +1 -0
- package/dist/chunk-0fj768k4.js +112 -0
- package/dist/chunk-19mf2aa7.js +1 -0
- package/dist/chunk-1mq2jmfy.js +2 -0
- package/dist/chunk-1v863afn.js +278 -0
- package/dist/chunk-1vn8d8b8.js +1 -0
- package/dist/{chunk-mmq834zt.js → chunk-1w19w1bm.js} +1 -1
- package/dist/chunk-3dnayvgx.js +224 -0
- package/dist/chunk-4hg13vwj.js +1 -0
- package/dist/chunk-4scrkcqv.js +1 -0
- package/dist/chunk-54cdhhqm.js +1 -0
- package/dist/chunk-5m4yb9av.js +91 -0
- package/dist/chunk-5yd4ntp6.js +8 -0
- package/dist/{chunk-b52b0t16.js → chunk-6scjjkn3.js} +1 -1
- package/dist/chunk-7jatn15w.js +2 -0
- package/dist/{chunk-4nsg4vcd.js → chunk-7w9y11hj.js} +1 -1
- package/dist/chunk-7yzv6385.js +1 -0
- package/dist/{chunk-g377vrpj.js → chunk-875hayaj.js} +3 -3
- package/dist/chunk-8bs8r50r.js +1 -0
- package/dist/chunk-8waww0j9.js +6 -0
- package/dist/chunk-8ysg0rga.js +1 -0
- package/dist/chunk-9czhw5k6.js +4 -0
- package/dist/chunk-9tgp14v7.js +16 -0
- package/dist/chunk-a239dn0b.js +1 -0
- package/dist/chunk-arv4h3h1.js +2 -0
- package/dist/chunk-b2551zfb.js +2 -0
- package/dist/chunk-b9emn03n.js +1 -0
- package/dist/chunk-bm7578sn.js +1 -0
- package/dist/{chunk-1y82m5kn.js → chunk-bytq4kd1.js} +3 -125
- package/dist/chunk-c2wfgbj6.js +1 -0
- package/dist/{chunk-gcm4jp0d.js → chunk-cef4vbtb.js} +1 -1
- package/dist/chunk-cnzhxgn5.js +4 -0
- package/dist/chunk-d2770b2z.js +1 -0
- package/dist/chunk-d72063sm.js +2 -0
- package/dist/{chunk-9k5d9vf1.js → chunk-d988tv30.js} +1 -1
- package/dist/{chunk-va71tsw3.js → chunk-dx9k6sdd.js} +3 -3
- package/dist/chunk-e6ggkg36.js +2 -0
- package/dist/chunk-fjqtrakn.js +1 -0
- package/dist/chunk-gbfpab0j.js +1 -0
- package/dist/chunk-gkvx829z.js +1 -0
- package/dist/{chunk-9dahn9h7.js → chunk-gwf8b14k.js} +1 -1
- package/dist/chunk-gz7fz9fg.js +1 -0
- package/dist/chunk-h0q3dvnv.js +5 -0
- package/dist/chunk-h0qb9jk1.js +1 -0
- package/dist/chunk-h9y136h8.js +1 -0
- package/dist/chunk-hrcxdj3c.js +54 -0
- package/dist/chunk-hz9yw7cs.js +166 -0
- package/dist/chunk-j4y5rjne.js +79 -0
- package/dist/chunk-k12y05c3.js +3 -0
- package/dist/chunk-k6fxqssr.js +18 -0
- package/dist/{chunk-rncpxz1b.js → chunk-kmxdq21k.js} +2 -2
- package/dist/chunk-mcb8rewr.js +213 -0
- package/dist/{chunk-wn43r152.js → chunk-mm9w91rj.js} +1 -1
- package/dist/chunk-mv0xzmq8.js +2 -0
- package/dist/chunk-n849zsd3.js +1 -0
- package/dist/chunk-nm253hhf.js +81 -0
- package/dist/chunk-prg6489q.js +1 -0
- package/dist/{chunk-cggjws6a.js → chunk-pxdgy0vr.js} +1 -1
- package/dist/chunk-qhzm2qw9.js +2 -0
- package/dist/{chunk-98f6hg43.js → chunk-qmxtys9q.js} +1 -1
- package/dist/chunk-r0cfe5c1.js +294 -0
- package/dist/chunk-rtjytfhh.js +1 -0
- package/dist/chunk-s7ttf0pm.js +2 -0
- package/dist/chunk-t01t72t2.js +140 -0
- package/dist/{chunk-ns6tjjkq.js → chunk-t0f66x64.js} +1 -1
- package/dist/chunk-tn356gwf.js +93 -0
- package/dist/chunk-vd8kwzra.js +41 -0
- package/dist/chunk-vhn13anh.js +233 -0
- package/dist/chunk-vnewbtjy.js +1 -0
- package/dist/chunk-wbm7rn9w.js +2 -0
- package/dist/chunk-wd3gkd45.js +3 -0
- package/dist/chunk-whdf0vbb.js +1 -0
- package/dist/{chunk-j7a40ww9.js → chunk-ws232ksq.js} +2 -2
- package/dist/{chunk-8g2zdcy0.js → chunk-yerf10k7.js} +1 -1
- package/dist/{chunk-heasksrr.js → chunk-yzv3n8mw.js} +2 -2
- package/dist/chunk-z3e4c424.js +2 -0
- package/dist/chunk-znw7fpep.js +6 -0
- package/dist/chunk-zq2g4rfd.js +1 -0
- package/dist/cli.js +1 -1
- package/dist/nonInteractive.js +314 -4
- package/dist/zen-keyboard.js +1 -1
- package/package.json +37 -37
- package/dist/chunk-02vv5584.js +0 -1
- package/dist/chunk-13nyfrmm.js +0 -310
- package/dist/chunk-1edvf7b5.js +0 -1
- package/dist/chunk-1rmnbdef.js +0 -1
- package/dist/chunk-1ttywx0y.js +0 -6
- package/dist/chunk-30sq2w0d.js +0 -8
- package/dist/chunk-32ase1cw.js +0 -2
- package/dist/chunk-3490ntd8.js +0 -1
- package/dist/chunk-3pcybja5.js +0 -7
- package/dist/chunk-5rr85f28.js +0 -1
- package/dist/chunk-5x8nxw0t.js +0 -137
- package/dist/chunk-6rfc36jg.js +0 -1
- package/dist/chunk-76h8pe7x.js +0 -2
- package/dist/chunk-7kdvr78m.js +0 -31
- package/dist/chunk-8z38ybz7.js +0 -1
- package/dist/chunk-b8dxq9rq.js +0 -1
- package/dist/chunk-cjqarwdn.js +0 -1
- package/dist/chunk-cs73xbzz.js +0 -1
- package/dist/chunk-cyexd09c.js +0 -2
- package/dist/chunk-ep2es95e.js +0 -81
- package/dist/chunk-f8ewggk1.js +0 -1
- package/dist/chunk-g7pm00z7.js +0 -253
- package/dist/chunk-hfve7nf5.js +0 -2
- package/dist/chunk-j9aysaeb.js +0 -1
- package/dist/chunk-jbf8ve63.js +0 -3
- package/dist/chunk-jfhc5c0d.js +0 -1
- package/dist/chunk-jxsfzfac.js +0 -2
- package/dist/chunk-kba8akjs.js +0 -2
- package/dist/chunk-m76ya904.js +0 -1
- package/dist/chunk-mjzeawnq.js +0 -6
- package/dist/chunk-nwy6n6b6.js +0 -274
- package/dist/chunk-qd305hg1.js +0 -1
- package/dist/chunk-qez6ejd4.js +0 -1
- package/dist/chunk-r2h3x9zv.js +0 -2
- package/dist/chunk-rz3b356n.js +0 -1
- package/dist/chunk-trjpzw1n.js +0 -91
- package/dist/chunk-xhnvpygg.js +0 -2
- package/dist/chunk-xkz5z0zn.js +0 -1
- package/dist/chunk-zwxjkwqd.js +0 -26
- package/dist/chunk-zz32kgt2.js +0 -1
package/dist/zen-keyboard.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{Ce as s,De as i,Ke as p,Le as u,ye as h}from"./chunk-1v863afn.js";import{Fl as n}from"./chunk-z3e4c424.js";var f=n(h(),1);var r=n(u(),1);i(r.jsxDEV(O,{},void 0,!1,void 0,this));function O(){let[m,l]=f.useState(`Press any key...
|
|
2
2
|
`);return p((y,c,g)=>{let t=["\x1B[2J\x1B[H","input:",JSON.stringify(y),"","key:"],o=Object.entries(c).filter(([,e])=>e===!0);for(let[e]of o)t.push(` ${e}: true`);if(o.length===0)t.push(" (no true values)");t.push(JSON.stringify(g,null,2)),l(t.join(`
|
|
3
3
|
`))}),r.jsxDEV(s,{children:m},void 0,!1,void 0,this)}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zen-code",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.10.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "./dist/cli.js",
|
|
6
6
|
"bin": "./dist/cli.js",
|
|
@@ -18,27 +18,50 @@
|
|
|
18
18
|
"keywords": [],
|
|
19
19
|
"author": "KonghaYao",
|
|
20
20
|
"license": "Apache-2.0",
|
|
21
|
-
"dependencies": {
|
|
21
|
+
"dependencies": {},
|
|
22
|
+
"devDependencies": {
|
|
22
23
|
"@anthropic-ai/sdk": "^0.71.2",
|
|
24
|
+
"@codegraph/agent": "^1.0.0",
|
|
25
|
+
"@codegraph/config": "^1.0.0",
|
|
26
|
+
"@codegraph/union-client": "^1.0.0",
|
|
23
27
|
"@google/generative-ai": "^0.24.1",
|
|
24
|
-
"@
|
|
25
|
-
"@langchain/
|
|
28
|
+
"@inkjs/ui": "^2.0.0",
|
|
29
|
+
"@langchain/anthropic": "^1.3.22",
|
|
30
|
+
"@langchain/core": "^1.1.31",
|
|
26
31
|
"@langchain/google-genai": "^2.1.18",
|
|
27
|
-
"@langchain/langgraph": "^1.1
|
|
32
|
+
"@langchain/langgraph": "^1.2.1",
|
|
28
33
|
"@langchain/mcp-adapters": "^1.1.1",
|
|
29
|
-
"@langchain/openai": "1.
|
|
34
|
+
"@langchain/openai": "^1.2.12",
|
|
35
|
+
"@langgraph-js/agent-middlewares": "^0.1.0",
|
|
30
36
|
"@langgraph-js/pure-graph": "^3.3.0",
|
|
31
|
-
"@langgraph-js/
|
|
37
|
+
"@langgraph-js/sdk": "^4.6.4",
|
|
38
|
+
"@langgraph-js/standard-agent": "^1.3.1",
|
|
39
|
+
"@nanostores/react": "^1.0.0",
|
|
40
|
+
"@tanstack/react-query": "^5.90.21",
|
|
41
|
+
"@testing-library/react": "^16.3.2",
|
|
42
|
+
"@testing-library/user-event": "^14.6.1",
|
|
43
|
+
"@types/diff-match-patch": "^1.0.36",
|
|
44
|
+
"@types/fs-extra": "^11.0.4",
|
|
45
|
+
"@types/node-notifier": "^8.0.5",
|
|
46
|
+
"@types/react": "^19.2.14",
|
|
47
|
+
"@vitejs/plugin-react": "^5.1.2",
|
|
48
|
+
"ansi-escapes": "^7.3.0",
|
|
32
49
|
"chalk": "^5.6.2",
|
|
33
50
|
"diff-match-patch": "^1.0.5",
|
|
34
51
|
"execa": "^9.6.1",
|
|
35
52
|
"extract-zip": "^2.0.1",
|
|
36
53
|
"fs-extra": "^11.3.3",
|
|
37
54
|
"fuzzysort": "^3.1.0",
|
|
55
|
+
"happy-dom": "^20.3.9",
|
|
56
|
+
"ink": "^6.8.0",
|
|
57
|
+
"ink-markdown-es": "^1.4.0",
|
|
58
|
+
"ink-pro": "^1.1.0",
|
|
59
|
+
"ink-spinner": "^5.0.0",
|
|
60
|
+
"ink-syntax-highlight": "^2.0.2",
|
|
38
61
|
"kysely": "^0.28.11",
|
|
39
62
|
"kysely-bun-worker": "^1.2.1",
|
|
40
63
|
"kysely-wasm": "^1.2.1",
|
|
41
|
-
"langchain": "1.
|
|
64
|
+
"langchain": "^1.2.30",
|
|
42
65
|
"lowdb": "^7.0.1",
|
|
43
66
|
"marked": "^17.0.3",
|
|
44
67
|
"micromatch": "^4.0.8",
|
|
@@ -48,41 +71,18 @@
|
|
|
48
71
|
"path-exists": "^5.0.0",
|
|
49
72
|
"pidusage": "^4",
|
|
50
73
|
"proper-lockfile": "^4.1.2",
|
|
51
|
-
"string-width": "^8.1.0",
|
|
52
|
-
"tempy": "^3.1.0",
|
|
53
|
-
"xdg-basedir": "^5.1.0",
|
|
54
|
-
"yaml": "^2.8.2",
|
|
55
|
-
"zod": "^4.3.5"
|
|
56
|
-
},
|
|
57
|
-
"devDependencies": {
|
|
58
|
-
"@langgraph-js/agent-middlewares": "^0.1.0",
|
|
59
|
-
"@codegraph/agent": "^1.0.0",
|
|
60
|
-
"@codegraph/config": "^1.0.0",
|
|
61
|
-
"@codegraph/union-client": "^1.0.0",
|
|
62
|
-
"@inkjs/ui": "^2.0.0",
|
|
63
|
-
"@langgraph-js/sdk": "^4.6.4",
|
|
64
|
-
"@nanostores/react": "^1.0.0",
|
|
65
|
-
"@tanstack/react-query": "^5.90.21",
|
|
66
|
-
"@testing-library/react": "^16.3.2",
|
|
67
|
-
"@testing-library/user-event": "^14.6.1",
|
|
68
|
-
"@types/diff-match-patch": "^1.0.36",
|
|
69
|
-
"@types/fs-extra": "^11.0.4",
|
|
70
|
-
"@types/node-notifier": "^8.0.5",
|
|
71
|
-
"@types/react": "^19.2.8",
|
|
72
|
-
"@vitejs/plugin-react": "^5.1.2",
|
|
73
|
-
"happy-dom": "^20.3.9",
|
|
74
|
-
"ink": "^6.8.0",
|
|
75
|
-
"ink-markdown-es": "^1.4.0",
|
|
76
|
-
"ink-pro": "^1.1.0",
|
|
77
|
-
"ink-spinner": "^5.0.0",
|
|
78
|
-
"ink-syntax-highlight": "^2.0.2",
|
|
79
74
|
"react": "^19.2.3",
|
|
80
75
|
"react-devtools-core": "^7.0.1",
|
|
76
|
+
"string-width": "^8.1.0",
|
|
77
|
+
"tempy": "^3.1.0",
|
|
81
78
|
"usehooks-ts": "^3.1.1",
|
|
82
79
|
"vite": "^7.3.1",
|
|
83
80
|
"vite-bundle-analyzer": "^1.3.2",
|
|
84
81
|
"vite-plugin-static-copy": "^3.1.4",
|
|
85
|
-
"vitest": "^4.0.18"
|
|
82
|
+
"vitest": "^4.0.18",
|
|
83
|
+
"xdg-basedir": "^5.1.0",
|
|
84
|
+
"yaml": "^2.8.2",
|
|
85
|
+
"zod": "^4.3.5"
|
|
86
86
|
},
|
|
87
87
|
"babel": {
|
|
88
88
|
"presets": [
|
package/dist/chunk-02vv5584.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import q from"node:path";import H from"node:os";import c from"node:fs";function J(r){let w=r.replace(/^~/,H.homedir()),O=q.resolve(w),C=q.dirname(O);if(!c.existsSync(C))c.mkdirSync(C,{recursive:!0});return O}function K(r,w){if(!c.existsSync(r)){process.env.DATABASE_INIT="true";return}let O=process.env.SQLITE_MAX_SIZE_MB?parseInt(process.env.SQLITE_MAX_SIZE_MB,10)*1024*1024:void 0,C=w??O??104857600,j=c.statSync(r).size,A=j/1048576;if(j>C){let G=C/1048576;console.warn(`⚠️ Database file is large: ${A.toFixed(2)}MB (limit: ${G.toFixed(2)}MB)`),console.warn(` Path: ${r}`),console.warn(" Set SQLITE_MAX_SIZE_MB to adjust limit")}}function T(r){let w=J(r);return process.env.SQLITE_DATABASE_URI=w,K(w),w}import x from"node-notifier";function W(r){if(typeof r==="string")x.notify({title:"Notification",message:r});else x.notify({title:r.title||"Notification",message:r.message,icon:r.icon,sound:r.sound??!0})}var Y={path:process.cwd()};export{T as ba,W as ca,Y as da};
|
package/dist/chunk-13nyfrmm.js
DELETED
|
@@ -1,310 +0,0 @@
|
|
|
1
|
-
var c=`# Zen Code
|
|
2
|
-
|
|
3
|
-
你是 Zen Code,一个高度自主的编程智能体。你具备独立思考、规划和执行复杂任务的能力。
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## 一、核心认知模型
|
|
8
|
-
|
|
9
|
-
### 1.1 思维框架
|
|
10
|
-
|
|
11
|
-
你采用 **观察-推理-行动-反思** 循环(ORAR):
|
|
12
|
-
|
|
13
|
-
\`\`\`
|
|
14
|
-
OBSERVE → REASON → ACT → REFLECT
|
|
15
|
-
↑ ↓
|
|
16
|
-
←←←←←←←←←←←←←←←←←←←←←←←←←
|
|
17
|
-
\`\`\`
|
|
18
|
-
|
|
19
|
-
- **观察 (Observe)**: 收集信息、理解上下文、识别约束
|
|
20
|
-
- **推理 (Reason)**: 分析问题、评估方案、规划路径
|
|
21
|
-
- **行动 (Act)**: 执行操作、生成代码、调用工具
|
|
22
|
-
- **反思 (Reflect)**: 验证结果、学习教训、优化策略
|
|
23
|
-
|
|
24
|
-
### 1.2 自主决策等级
|
|
25
|
-
|
|
26
|
-
根据任务风险自动选择决策模式:
|
|
27
|
-
|
|
28
|
-
| 等级 | 触发条件 | 行为模式 |
|
|
29
|
-
|------|----------|----------|
|
|
30
|
-
| **L1 自动** | 只读操作、低风险修改 | 直接执行,事后汇报 |
|
|
31
|
-
| **L2 通知** | 中等修改、可逆操作 | 执行并详细说明 |
|
|
32
|
-
| **L3 确认** | 高风险操作、架构变更 | 先询问再执行 |
|
|
33
|
-
|
|
34
|
-
**L1 自动执行**:文件读取、代码搜索、类型检查、格式化
|
|
35
|
-
**L2 通知执行**:单文件修改、添加测试、重构局部代码
|
|
36
|
-
**L3 需确认**:多文件架构变更、添加依赖、删除代码、执行脚本
|
|
37
|
-
|
|
38
|
-
### 1.3 任务复杂度评估
|
|
39
|
-
|
|
40
|
-
接收任务后立即评估:
|
|
41
|
-
|
|
42
|
-
\`\`\`
|
|
43
|
-
简单 (S): 单点修改,<5分钟,直接执行
|
|
44
|
-
中等 (M): 多文件协调,5-30分钟,制定计划
|
|
45
|
-
复杂 (C): 架构变更,>30分钟,使用 todo_write 分解
|
|
46
|
-
\`\`\`
|
|
47
|
-
|
|
48
|
-
---
|
|
49
|
-
|
|
50
|
-
## 二、信息收集策略
|
|
51
|
-
|
|
52
|
-
### 2.1 递进式探索
|
|
53
|
-
|
|
54
|
-
从宏观到微观,按需深入:
|
|
55
|
-
|
|
56
|
-
\`\`\`
|
|
57
|
-
Level 1: 项目结构 (AGENTS.md、README.md、package.json)
|
|
58
|
-
↓
|
|
59
|
-
Level 2: 模块边界 (入口文件、类型定义、配置文件)
|
|
60
|
-
↓
|
|
61
|
-
Level 3: 实现细节 (具体函数、测试用例、依赖关系)
|
|
62
|
-
\`\`\`
|
|
63
|
-
|
|
64
|
-
### 2.2 搜索策略矩阵
|
|
65
|
-
|
|
66
|
-
| 目标 | 首选工具 | 备选策略 |
|
|
67
|
-
|------|----------|----------|
|
|
68
|
-
| 找函数/类定义 | \`search_files_rg\` 正则 | glob + 读取 |
|
|
69
|
-
| 找文件位置 | \`glob_files\` 模式 | 目录遍历 |
|
|
70
|
-
| 理解调用关系 | grep 引用 + 读取上下文 | 类型定义追踪 |
|
|
71
|
-
| 找配置项 | grep 配置文件 | 环境变量搜索 |
|
|
72
|
-
|
|
73
|
-
### 2.3 上下文构建原则
|
|
74
|
-
|
|
75
|
-
- **最小必要**:只读取完成任务所需的信息
|
|
76
|
-
- **关联发现**:通过 import/export 追踪依赖
|
|
77
|
-
- **类型优先**:先看接口定义,再看实现
|
|
78
|
-
- **测试参考**:测试用例揭示使用方式和边界
|
|
79
|
-
|
|
80
|
-
---
|
|
81
|
-
|
|
82
|
-
## 三、执行策略
|
|
83
|
-
|
|
84
|
-
### 3.1 代码修改原则
|
|
85
|
-
|
|
86
|
-
**保守修改**:
|
|
87
|
-
- 只改必须改的部分
|
|
88
|
-
- 保持与现有代码风格一致
|
|
89
|
-
- 优先使用项目已有的模式和工具
|
|
90
|
-
|
|
91
|
-
**安全边界**:
|
|
92
|
-
- 修改前理解影响范围
|
|
93
|
-
- 一次只改一个关注点
|
|
94
|
-
- 保持向后兼容,除非明确要求破坏性变更
|
|
95
|
-
|
|
96
|
-
### 3.2 错误处理策略
|
|
97
|
-
|
|
98
|
-
遇到错误时按优先级尝试:
|
|
99
|
-
|
|
100
|
-
1. **理解错误**:分析错误信息,定位根因
|
|
101
|
-
2. **局部修复**:尝试最小范围修复
|
|
102
|
-
3. **扩大搜索**:收集更多上下文
|
|
103
|
-
4. **替代方案**:尝试不同实现路径
|
|
104
|
-
5. **请求协助**:使用 \`ask_user_questions\` 询问方向
|
|
105
|
-
|
|
106
|
-
### 3.3 验证循环
|
|
107
|
-
|
|
108
|
-
每个修改后执行验证:
|
|
109
|
-
|
|
110
|
-
\`\`\`
|
|
111
|
-
修改代码 → 检查语法 → 运行相关测试 → 确认无副作用
|
|
112
|
-
\`\`\`
|
|
113
|
-
|
|
114
|
-
---
|
|
115
|
-
|
|
116
|
-
## 四、输出规范
|
|
117
|
-
|
|
118
|
-
### 4.1 简洁原则
|
|
119
|
-
|
|
120
|
-
- **无寒暄**:直接进入主题
|
|
121
|
-
- **无冗余**:不重复用户已知信息
|
|
122
|
-
- **结构化**:使用列表和代码块
|
|
123
|
-
|
|
124
|
-
### 4.2 信息层级
|
|
125
|
-
|
|
126
|
-
**必要信息** - 总是包含:
|
|
127
|
-
- 执行了什么操作
|
|
128
|
-
- 修改了哪些文件
|
|
129
|
-
- 关键结果或发现
|
|
130
|
-
|
|
131
|
-
**补充信息** - 按需包含:
|
|
132
|
-
- 替代方案说明
|
|
133
|
-
- 潜在风险提示
|
|
134
|
-
- 后续建议
|
|
135
|
-
|
|
136
|
-
**详细信息** - 需要时写入文件:
|
|
137
|
-
- 完整分析报告
|
|
138
|
-
- 大量代码展示
|
|
139
|
-
- 详细调试日志
|
|
140
|
-
|
|
141
|
-
### 4.3 代码展示
|
|
142
|
-
|
|
143
|
-
\`\`\`diff
|
|
144
|
-
# 只展示变更的关键部分
|
|
145
|
-
+ // 新增代码
|
|
146
|
-
- // 删除代码
|
|
147
|
-
// 上下文(少量)
|
|
148
|
-
\`\`\`
|
|
149
|
-
|
|
150
|
-
### 4.4 长度控制
|
|
151
|
-
|
|
152
|
-
- 单次回复 < 50 行
|
|
153
|
-
- 超过时使用 \`write_file\` 保存详情
|
|
154
|
-
- 或使用 \`ask_user_questions\` 分步展开
|
|
155
|
-
|
|
156
|
-
---
|
|
157
|
-
|
|
158
|
-
## 五、编码标准
|
|
159
|
-
|
|
160
|
-
### 5.1 技术选型优先级
|
|
161
|
-
|
|
162
|
-
1. 项目已有方案 > 引入新方案
|
|
163
|
-
2. 标准库 > 轻量第三方库 > 重型框架
|
|
164
|
-
3. 成熟稳定 > 新潮技术
|
|
165
|
-
4. 类型安全 > 便捷
|
|
166
|
-
|
|
167
|
-
### 5.2 代码质量
|
|
168
|
-
|
|
169
|
-
**必须**:
|
|
170
|
-
- 类型完整(禁用 any)
|
|
171
|
-
- 错误处理(无静默失败)
|
|
172
|
-
- 可读性(描述性命名)
|
|
173
|
-
|
|
174
|
-
**推荐**:
|
|
175
|
-
- 函数式风格(纯函数、不可变)
|
|
176
|
-
- 单一职责(一个函数做一件事)
|
|
177
|
-
- 组合优于继承
|
|
178
|
-
|
|
179
|
-
### 5.3 命名规范
|
|
180
|
-
|
|
181
|
-
| 类型 | 规范 | 示例 |
|
|
182
|
-
|------|------|------|
|
|
183
|
-
| 布尔值 | is/has/should 前缀 | isLoading, hasError |
|
|
184
|
-
| 事件处理 | handle/on 前缀 | handleClick, onSubmit |
|
|
185
|
-
| 异步函数 | 动词开头 | fetchUser, createTask |
|
|
186
|
-
| 常量 | UPPER_SNAKE_CASE | MAX_RETRY_COUNT |
|
|
187
|
-
|
|
188
|
-
### 5.4 Git 规范
|
|
189
|
-
|
|
190
|
-
Angular 格式:\`type(scope): subject\`
|
|
191
|
-
|
|
192
|
-
类型:feat, fix, refactor, docs, test, chore
|
|
193
|
-
|
|
194
|
-
示例:\`feat(auth): add JWT refresh token\`
|
|
195
|
-
|
|
196
|
-
---
|
|
197
|
-
|
|
198
|
-
## 六、工具使用指南
|
|
199
|
-
|
|
200
|
-
### 6.1 性能意识
|
|
201
|
-
|
|
202
|
-
| 操作类型 | 耗时 | 策略 |
|
|
203
|
-
|----------|------|------|
|
|
204
|
-
| 读取/搜索 | <0.5s | 优先使用 |
|
|
205
|
-
| 执行命令 | 0.5-5s | 按需使用 |
|
|
206
|
-
| 全项目扫描 | >5s | 避免使用 |
|
|
207
|
-
|
|
208
|
-
### 6.2 路径规范
|
|
209
|
-
|
|
210
|
-
所有文件路径必须使用绝对路径。
|
|
211
|
-
|
|
212
|
-
### 6.3 文件操作
|
|
213
|
-
|
|
214
|
-
**移动/重命名**:使用 terminal 执行 \`mv\` 命令
|
|
215
|
-
**批量修改**:使用 \`edit_file\` 的 \`replace_all\` 参数
|
|
216
|
-
**新建目录**:使用 \`folder_operations\` 的 create 操作
|
|
217
|
-
|
|
218
|
-
### 6.4 并行执行
|
|
219
|
-
|
|
220
|
-
无依赖的操作可以并行调用多个工具,提高效率。
|
|
221
|
-
|
|
222
|
-
---
|
|
223
|
-
|
|
224
|
-
## 七、协作模式
|
|
225
|
-
|
|
226
|
-
### 7.1 与用户协作
|
|
227
|
-
|
|
228
|
-
**主动沟通**:
|
|
229
|
-
- 发现潜在问题时提前告知
|
|
230
|
-
- 有多个可行方案时请求选择
|
|
231
|
-
- 任务完成时提供后续建议
|
|
232
|
-
|
|
233
|
-
**避免**:
|
|
234
|
-
- 假设用户意图(不确定就问)
|
|
235
|
-
- 隐藏风险或问题
|
|
236
|
-
- 过度询问显而易见的事情
|
|
237
|
-
|
|
238
|
-
### 7.2 任务管理
|
|
239
|
-
|
|
240
|
-
**简单任务**:直接执行
|
|
241
|
-
**复杂任务**:使用 todo_write 分解追踪
|
|
242
|
-
|
|
243
|
-
### 7.3 知识积累
|
|
244
|
-
|
|
245
|
-
执行任务中发现的重要信息:
|
|
246
|
-
- 项目特有约定
|
|
247
|
-
- 踩坑经验
|
|
248
|
-
- 最佳实践
|
|
249
|
-
|
|
250
|
-
可建议用户记录到 .claude/memories/ 或 AGENTS.md
|
|
251
|
-
|
|
252
|
-
---
|
|
253
|
-
|
|
254
|
-
## 八、安全边界
|
|
255
|
-
|
|
256
|
-
### 8.1 绝对禁止
|
|
257
|
-
|
|
258
|
-
- 编写/解释恶意代码
|
|
259
|
-
- 删除无法恢复的数据(未备份)
|
|
260
|
-
- 暴露敏感信息(密钥、密码)
|
|
261
|
-
- 绕过安全检查
|
|
262
|
-
|
|
263
|
-
### 8.2 谨慎操作
|
|
264
|
-
|
|
265
|
-
以下操作需要 L3 确认:
|
|
266
|
-
- 执行未知脚本
|
|
267
|
-
- 修改安全相关配置
|
|
268
|
-
- 访问网络/外部服务
|
|
269
|
-
- 修改系统级文件
|
|
270
|
-
|
|
271
|
-
---
|
|
272
|
-
|
|
273
|
-
## 九、自我提升
|
|
274
|
-
|
|
275
|
-
### 9.1 持续学习
|
|
276
|
-
|
|
277
|
-
- 从每次交互中学习项目约定
|
|
278
|
-
- 识别并适应用户偏好
|
|
279
|
-
- 发现可复用的模式
|
|
280
|
-
|
|
281
|
-
### 9.2 元认知
|
|
282
|
-
|
|
283
|
-
定期反思:
|
|
284
|
-
- 这次任务我做得如何?
|
|
285
|
-
- 有没有更好的方法?
|
|
286
|
-
- 用户的真实需求是什么?
|
|
287
|
-
|
|
288
|
-
---
|
|
289
|
-
|
|
290
|
-
## 附录:决策速查
|
|
291
|
-
|
|
292
|
-
\`\`\`
|
|
293
|
-
任务来了
|
|
294
|
-
↓
|
|
295
|
-
评估复杂度 → S: 直接做 → 完成汇报
|
|
296
|
-
↓ M/C
|
|
297
|
-
需要更多信息? → 是 → 收集信息(递进式)
|
|
298
|
-
↓ 否
|
|
299
|
-
有风险? → L3 → 询问确认
|
|
300
|
-
↓ L1/L2
|
|
301
|
-
执行 → 验证 → 反思 → 输出结果
|
|
302
|
-
\`\`\`
|
|
303
|
-
|
|
304
|
-
`;async function f(b){return`
|
|
305
|
-
## 环境信息
|
|
306
|
-
工作目录: ${process.cwd()}
|
|
307
|
-
平台: ${process.platform}
|
|
308
|
-
日期: ${new Date().toLocaleDateString()}
|
|
309
|
-
`}
|
|
310
|
-
export{c as Sa,f as Ta};
|
package/dist/chunk-1edvf7b5.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{sb as a}from"./chunk-r2h3x9zv.js";import"./chunk-kba8akjs.js";export{a as FileSystemConfigStore};
|
package/dist/chunk-1rmnbdef.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{xa as a,ya as b,za as c}from"./chunk-76h8pe7x.js";import"./chunk-zwxjkwqd.js";import"./chunk-13nyfrmm.js";import"./chunk-5rr85f28.js";import"./chunk-cggjws6a.js";import"./chunk-cyexd09c.js";import"./chunk-r2h3x9zv.js";import"./chunk-1ttywx0y.js";import"./chunk-kba8akjs.js";export{c as getAgentListFromPackage,a as createSubAgentsMiddleware,b as SubAgentsMiddleware};
|
package/dist/chunk-1ttywx0y.js
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import A from"fs/promises";import z from"path";import N from"os";import O from"yaml";class R{skillsDir;projectSkillsDir;constructor(){let b=N.homedir();this.skillsDir=z.join(b,".claude","skills"),this.projectSkillsDir=z.join(process.cwd(),".claude","skills")}async listSkills(){let b=new Map,g=await this.listSkillsInDir(this.skillsDir);for(let q of g)b.set(q.name,q);let x=await this.listSkillsInDir(this.projectSkillsDir);for(let q of x)b.set(q.name,q);return Array.from(b.values())}async listSkillsInDir(b){try{let g=await A.readdir(b,{withFileTypes:!0}),x=[];for(let q of g){let F=z.join(b,q.name),I=await A.lstat(F).catch(()=>null);if(!I)continue;let J=await A.stat(F).catch(()=>null);if(!J||!J.isDirectory())continue;if(I.isSymbolicLink()){let C=z.resolve(F),G=z.resolve(b),L=C.substring(G.length);if(!(C===G||L.startsWith("/")||L==="")){let Q=N.homedir();if(!C.startsWith(Q))continue}}let K=z.join(F,"SKILL.md");try{let C=await A.readFile(K,"utf-8"),G=this.parseFrontmatter(C);x.push({name:q.name,description:G.description||"",path:K})}catch{}}return x}catch{return[]}}async getSkill(b){let g=z.join(this.projectSkillsDir,b,"SKILL.md");try{let q=await A.readFile(g,"utf-8");return this.parseSkillContent(q)}catch{}let x=z.join(this.skillsDir,b,"SKILL.md");try{let q=await A.readFile(x,"utf-8");return this.parseSkillContent(q)}catch{return null}}async saveSkill(b,g){let x=z.join(this.skillsDir,b);await A.mkdir(x,{recursive:!0});let q=this.formatSkillContent(g);await A.writeFile(z.join(x,"SKILL.md"),q,"utf-8")}async deleteSkill(b){let g=z.join(this.skillsDir,b);await A.rm(g,{recursive:!0,force:!0})}async syncFromRemote(b){let g=await b.listRemoteSkills();for(let x of g){let q=await b.fetchSkill(x.name);if(q)await this.saveSkill(x.name,q)}}parseFrontmatter(b){let g=b.match(/^---\n(.+?)\n---/s);if(!g)return{};try{return O.parse(g[1])}catch{return{}}}parseSkillContent(b){let g=this.parseFrontmatter(b),x=b.replace(/^---\n.+?\n---\n*/s,"");return{frontmatter:g,markdown:x}}formatSkillContent(b){return`---
|
|
2
|
-
${O.stringify(b.frontmatter).trim()}
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
${b.markdown}`}}
|
|
6
|
-
export{R as tb};
|
package/dist/chunk-30sq2w0d.js
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import{ea as c0,fa as j,ga as E,pa as t}from"./chunk-nwy6n6b6.js";import{Ka as g}from"./chunk-5x8nxw0t.js";import{ub as h,vb as P,yb as M}from"./chunk-kba8akjs.js";var b=P((IA,X0)=>{var n0=M("child_process").spawn;function p0(A,G,X,L){if(typeof X==="function")L=X,X=void 0;let J=!1,H=n0(A,G,X),K="",Y="";H.stdout.on("data",function($){K+=$.toString()}),H.stderr.on("data",function($){Y+=$.toString()}),H.on("error",function($){if(J)return;J=!0,L(Error($))}),H.on("close",function($,Q){if(J)return;if(J=!0,Y)return L(Error(Y));L(null,K,$)})}X0.exports=p0});var y=P((OA,L0)=>{var B={},w={},x={},n=0,R=null;function a0(A,G){if(G<=0)return;if(w[A]!==void 0)B[A]=Date.now()+(G||60000);return w[A]}function i0(A,G,X,L){if(G===void 0||X<=0)return;if(B[A]=Date.now()+(X||60000),w[A]===void 0)n++,G0(X);if(w[A]=G,L)x[A]=L}function G0(A){if(n>0){if(R===null){if(R=setInterval(d0,(A||60000)/2),typeof R.unref==="function")R.unref()}return}if(R!==null)clearInterval(R),R=null}function d0(){let A=Date.now(),G=Object.keys(B);for(let X=0;X<G.length;X++){let L=G[X];if(B[L]<A){if(n--,x[L])x[L](w[L]);delete w[L],delete B[L],delete x[L]}}G0()}function c(A){for(let G in A)delete A[G]}function o0(){if(R!==null)clearInterval(R),R=null;c(w),c(B),c(x)}L0.exports={get:a0,set:i0,clear:o0}});var W0=P((EA,Q0)=>{var K0=M("os"),r0=b(),H0=y(),f=K0.platform();function J0(A,G){let X=0,L=A.split(/-|:|\./),J=L.length-1;if(J>=0&&G&&f==="darwin")X+=parseInt(L[J--],10)*10;if(J>=0)X+=parseInt(L[J--],10)*1000;if(J>=0)X+=parseInt(L[J--],10)*60000;if(J>=0)X+=parseInt(L[J--],10)*3600000;if(J>=0)X+=parseInt(L[J--],10)*86400000;return X}function s0(A,G,X){let L=A.join(","),J=["-o","etime,pid,ppid,pcpu,rss,time","-p",L];if(f==="aix"||f==="os400")J=["-o","etime,pid,ppid,pcpu,rssize,time","-p",L];r0("ps",J,function(H,K,Y){if(H){if(f==="os390"&&/no matching processes found/.test(H))H=Error("No matching pid found"),H.code="ENOENT";return X(H)}if(Y===1){let N=Error("No matching pid found");return N.code="ENOENT",X(N)}if(Y!==0)return X(Error("pidusage ps command exited with code "+Y));let $=Date.now();K=K.split(K0.EOL);let Q={};for(let N=1;N<K.length;N++){let U=K[N].trim().split(/\s+/);if(!U||U.length!==6)continue;let W=parseInt(U[1],10),q=H0.get(W,G.maxage);if(q===void 0)q={};let Z=parseInt(U[2],10),F=parseInt(U[4],10)*1024,v=J0(U[0]),C=J0(U[5],!0),T=C-(q.ctime||0),I=Math.abs(q.elapsed!==void 0?v-q.elapsed:v),D=I>0?T/I*100:0;Q[W]={cpu:D,memory:F,ppid:Z,pid:W,ctime:C,elapsed:v,timestamp:$},H0.set(W,Q[W],G.maxage)}X(null,Q)})}Q0.exports=s0});var p=P((SA,Y0)=>{function t0(A,G,X){if(typeof G==="function")X=G,G={};let L;if(!Array.isArray(A))L=Object.keys(A);let J=L?L.length:A.length,H=J,K=L?{}:[];function Y($,Q,N){if(K[$]=N,--H===0||Q&&!G.graceful){if(G.graceful&&Q&&J>1)Q=null;X&&X(Q,K),X=null}}if(L)L.forEach(function($){A[$](function(Q,N){Y($,Q,N)})});else A.forEach(function($,Q){$(function(N,U){Y(Q,N,U)})})}Y0.exports=t0});var Z0=P((jA,q0)=>{var e0=M("os"),AA=M("fs"),XA=M("child_process").exec,U0=p();function GA(A,G){if(A!==null){$0(function(X,L){if(X)return G(X);A.uptime=L,G(null,A)});return}U0([LA,$0],function(X,L){if(X)return G(X);A={clockTick:L[0].clockTick,pageSize:L[0].pageSize,uptime:L[1]},G(null,A)})}q0.exports=GA;function $0(A){AA.readFile("/proc/uptime","utf8",function(G,X){if(G||X===void 0){if(!process.env.PIDUSAGE_SILENT)console.warn("[pidusage] We couldn't find uptime from /proc/uptime, using os.uptime() value");return A(null,e0.uptime()||new Date/1000)}return A(null,parseFloat(X.split(" ")[0]))})}function LA(A){U0([function(X){N0("CLK_TCK",{default:100},X)},function(X){N0("PAGESIZE",{default:4096},X)}],function(G,X){if(G)return A(G);A(null,{clockTick:X[0],pageSize:X[1]})})}function N0(A,G,X){if(typeof G==="function")X=G,G={default:""};XA("getconf "+A,function(L,J,H){if(L!==null){if(!process.env.PIDUSAGE_SILENT)console.error('Error while calling "getconf '+A+'"',L);return X(null,G.default)}if(J=parseInt(J),!isNaN(J))return X(null,J);return X(null,G.default)})}});var M0=P((a,F0)=>{/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */var l=M("buffer"),V=l.Buffer;function _0(A,G){for(var X in A)G[X]=A[X]}if(V.from&&V.alloc&&V.allocUnsafe&&V.allocUnsafeSlow)F0.exports=l;else _0(l,a),a.Buffer=z;function z(A,G,X){return V(A,G,X)}z.prototype=Object.create(V.prototype);_0(V,z);z.from=function(A,G,X){if(typeof A==="number")throw TypeError("Argument must not be a number");return V(A,G,X)};z.alloc=function(A,G,X){if(typeof A!=="number")throw TypeError("Argument must be a number");var L=V(A);if(G!==void 0)if(typeof X==="string")L.fill(G,X);else L.fill(G);else L.fill(0);return L};z.allocUnsafe=function(A){if(typeof A!=="number")throw TypeError("Argument must be a number");return V(A)};z.allocUnsafeSlow=function(A){if(typeof A!=="number")throw TypeError("Argument must be a number");return l.SlowBuffer(A)}});var R0=P((wA,P0)=>{var d=M("fs"),HA=M("path"),JA=Z0(),KA=p(),v0=y(),O=null,C0=M0().Buffer,i=1024;function QA(){}function WA(A,G,X){if(G.fd)return X(null,G.fd);d.open(A,"r",X)}function YA(A){if(A.fd)d.close(A.fd,QA)}function T0(A,G,X){let L=!1;if(typeof G==="function")X=G,G=C0.alloc(i),L=!0;d.read(A,G,0,i,0,function(J,H,K){if(J){X(J);return}let Y=C0.concat([G,K],L?H:G.length+H);if(H===i){T0(A,Y,X);return}X(null,G)})}function D0(A,G,X){let L=v0.get(A,G.maxage),J=!1;if(L===void 0)J=!0,L={};WA(HA.join("/proc",""+A,"stat"),L,function(H,K){if(H){if(H.code==="ENOENT")H.message="No matching pid found";return X(H,null)}if(H)return X(H);T0(K,function(Y,$){if(Y)return X(Y);let Q=$.toString("utf8"),N=Date.now(),U=Q.lastIndexOf(")");Q=Q.substr(U+2).split(" ");let W={ppid:parseInt(Q[1]),utime:parseFloat(Q[11])*1000/O.clockTick,stime:parseFloat(Q[12])*1000/O.clockTick,cutime:parseFloat(Q[13])*1000/O.clockTick,cstime:parseFloat(Q[14])*1000/O.clockTick,start:parseFloat(Q[19])*1000/O.clockTick,rss:parseFloat(Q[21]),uptime:O.uptime*1000,fd:K},q=W.rss*O.pageSize,Z=G.childrens?W.cutime+W.cstime:0,F=W.stime-(L.stime||0)+W.utime-(L.utime||0)+Z,v=Math.abs(L.uptime!==void 0?W.uptime-L.uptime:W.start-W.uptime),C=v>0?F/v*100:0;if(v0.set(A,W,G.maxage,YA),J)return D0(A,G,X);return X(null,{cpu:C,memory:q,ctime:W.utime+W.stime,elapsed:W.uptime-W.start,timestamp:N,pid:A,ppid:W.ppid})})})}function $A(A,G,X){JA(O,function(L,J){if(L)return X(L);O=J;let H={};A.forEach(function(K,Y){H[K]=function($){D0(K,G,$)}}),KA(H,{graceful:!0},X)})}P0.exports=$A});var S0=P((zA,E0)=>{var V0=M("os"),NA=b(),I0=y();function UA(A){let G=A.substring(0,4),X=A.substring(4,6),L=A.substring(6,8),J=A.substring(8,10),H=A.substring(10,12),K=A.substring(12,14),Y=A.substring(15,21),$=A.substring(21,22),Q=parseInt(A.substring(22,25),10),N=Math.floor(Q/60),U=Q%60;return new Date(G+"-"+X+"-"+L+"T"+J+":"+H+":"+K+"."+Y+$+(N>9?N:"0"+N)+(U>9?U:"0"+U))}function O0(A,G,X){let L="ProcessId="+A[0];for(let H=1;H<A.length;H++)L+=" or ProcessId="+A[H];let J=["PROCESS","where",'"'+L+'"',"get","CreationDate,KernelModeTime,ParentProcessId,ProcessId,UserModeTime,WorkingSetSize"];NA("wmic",J,{windowsHide:!0,windowsVerbatimArguments:!0},function(H,K,Y){if(H){if(H.message.indexOf("No Instance(s) Available.")!==-1){let W=Error("No matching pid found");return W.code="ENOENT",X(W)}return X(H)}if(Y!==0)return X(Error("pidusage wmic command exited with code "+Y));let $=Date.now(),Q=Math.floor(V0.uptime()||$/1000);K=K.split(V0.EOL);let N=!1,U={};for(let W=1;W<K.length;W++){let q=K[W].trim().split(/\s+/);if(!q||q.length!==6)continue;let Z=UA(q[0]),F=parseInt(q[2],10),v=parseInt(q[3],10),C=Math.round(parseInt(q[1],10)/1e4),T=Math.round(parseInt(q[4],10)/1e4),I=parseInt(q[5],10),D=I0.get(v,G.maxage);if(D===void 0)N=!0,D={ctime:C+T,uptime:Q};let u=(C+T-D.ctime)/1000,S=Q-D.uptime,m=S>0?u/S*100:0;I0.set(v,{ctime:T+C,uptime:Q},G.maxage),U[v]={cpu:m,memory:I,ppid:F,pid:v,ctime:T+C,elapsed:$-Z.getTime(),timestamp:$}}if(N)return O0(A,G,function(W,q){if(W)return X(W);X(null,Object.assign(U,q))});X(null,U)})}E0.exports=O0});var y0=P((BA,B0)=>{var j0=M("os"),qA=b(),w0=y();function ZA(A){let G=A.substring(0,4),X=A.substring(4,6),L=A.substring(6,8),J=A.substring(8,10),H=A.substring(10,12),K=A.substring(12,14),Y=A.substring(15,21),$=A.substring(21,22),Q=parseInt(A.substring(22,25),10),N=Math.floor(Q/60),U=Q%60;return new Date(G+"-"+X+"-"+L+"T"+J+":"+H+":"+K+"."+Y+$+(N>9?N:"0"+N)+(U>9?U:"0"+U))}function z0(A,G,X){let L="ProcessId="+A[0];for(let K=1;K<A.length;K++)L+=" or ProcessId="+A[K];let J="CreationDate,KernelModeTime,ParentProcessId,ProcessId,UserModeTime,WorkingSetSize",H=["win32_process","-Filter","'"+L+"'","| select "+J,"| format-table"];qA("gwmi",H,{windowsHide:!0,windowsVerbatimArguments:!0,shell:"powershell.exe"},function(K,Y,$){if(K){if(K.message.indexOf("No Instance(s) Available.")!==-1){let Z=Error("No matching pid found");return Z.code="ENOENT",X(Z)}return X(K)}if($!==0)return X(Error("pidusage gwmi command exited with code "+$));let Q=Date.now(),N=Math.floor(j0.uptime()||Q/1000);Y=Y.split(j0.EOL).slice(1);let U=Y.findIndex((Z)=>!!Z);if(Y=Y.slice(U+2),!Y.length){let Z=Error("No matching pid found");return Z.code="ENOENT",X(Z)}let W=!1,q={};for(let Z=0;Z<Y.length;Z++){let F=Y[Z].trim().split(/\s+/);if(!F||F.length===1)continue;let v=ZA(F[0]),C=parseInt(F[2],10),T=parseInt(F[3],10),I=Math.round(parseInt(F[1],10)/1e4),D=Math.round(parseInt(F[4],10)/1e4),u=parseInt(F[5],10),S=w0.get(T,G.maxage);if(S===void 0)W=!0,S={ctime:I+D,uptime:N};let m=(I+D-S.ctime)/1000,s=N-S.uptime,m0=s>0?m/s*100:0;w0.set(T,{ctime:D+I,uptime:N},G.maxage),q[T]={cpu:m0,memory:u,ppid:C,pid:T,ctime:D+I,elapsed:Q-v.getTime(),timestamp:Q}}if(W)return z0(A,G,function(Z,F){if(Z)return X(Z);X(null,Object.assign(q,F))});X(null,q)})}B0.exports=z0});var h0=P((yA,g0)=>{var _A=M("fs"),k0=M("os"),FA=M("child_process").spawn,o={ps:()=>W0(),procfile:()=>R0(),wmic:()=>S0(),gwmi:()=>y0()},MA={aix:"ps",os400:"ps",android:"procfile",alpine:"procfile",darwin:"ps",freebsd:"ps",os390:"ps",linux:"procfile",netbsd:"procfile",openbsd:"ps",sunos:"ps",win:"wmic"},k=k0.platform();if(_A.existsSync("/etc/alpine-release"))k="alpine";if(k.match(/^win/))k="win";var x0;try{x0=o[MA[k]]()}catch(A){}function vA(A,G,X){let L=x0;if(k!=="win"&&G.usePs===!0)L=o.ps();if(k==="win"){let H;try{H=FA("wmic",function(K){if(K)throw Error(K)})}catch(K){L=o.gwmi()}finally{if(H)H.kill()}}if(L===void 0)return X(Error(k0.platform()+" is not supported yet, please open an issue (https://github.com/soyuka/pidusage)"));let J=!1;if(!Array.isArray(A))J=!0,A=[A];if(A.length===0)return X(TypeError("You must provide at least one pid"));for(let H=0;H<A.length;H++)if(A[H]=parseInt(A[H],10),isNaN(A[H])||A[H]<0)return X(TypeError("One of the pids provided is invalid"));L(A,G,function(H,K){if(H)return X(H);if(J)X(null,K[A[0]]);else X(null,K)})}g0.exports=vA});var f0=P((kA,r)=>{var b0=h0();function CA(A,G,X){if(typeof G==="function")X=G,G={};if(G===void 0)G={};if(G=Object.assign({usePs:/^true$/i.test(process.env.PIDUSAGE_USE_PS),maxage:process.env.PIDUSAGE_MAXAGE},G),typeof X==="function"){b0(A,G,X);return}return new Promise(function(L,J){b0(A,G,function(H,K){if(H)return J(H);L(K)})})}r.exports=CA;r.exports.clear=y().clear});var e=h(c0(),1);var _=h(t(),1);class A0 extends e.Component{state={hasError:!1,error:null,errorInfo:null};static getDerivedStateFromError(A){return{hasError:!0,error:A}}componentDidCatch(A,G){let{name:X="ErrorBoundary"}=this.props;console.error(`
|
|
2
|
-
========================================`),console.error(`[${X}] React Error Caught`),console.error("========================================"),console.error("Error:",A.message),console.error("Stack:",A.stack),console.error("Component Stack:",G.componentStack),console.error(`========================================
|
|
3
|
-
`),import("./chunk-ns6tjjkq.js").then(({logAgentError:L})=>{L(X,A)}).catch((L)=>{console.warn("Failed to log React error:",L)}),this.setState({errorInfo:G})}render(){let{hasError:A,error:G,errorInfo:X}=this.state,{name:L="ErrorBoundary",fallback:J,children:H}=this.props;if(A){if(J)return _.jsxDEV(_.Fragment,{children:J},void 0,!1,void 0,this);return _.jsxDEV(j,{flexDirection:"column",padding:1,borderStyle:"double",borderColor:"red",children:[_.jsxDEV(j,{marginBottom:1,children:_.jsxDEV(E,{color:"red",bold:!0,children:["✗ [",L,"] Render Error"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),_.jsxDEV(j,{marginBottom:1,children:_.jsxDEV(E,{color:"red",children:["Message: ",G?.message||"Unknown error"]},void 0,!0,void 0,this)},void 0,!1,void 0,this),G?.stack&&_.jsxDEV(j,{flexDirection:"column",marginBottom:1,children:[_.jsxDEV(E,{color:"yellow",bold:!0,children:"Stack Trace:"},void 0,!1,void 0,this),_.jsxDEV(E,{color:"gray",children:G.stack.split(`
|
|
4
|
-
`).slice(0,5).join(`
|
|
5
|
-
`)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),X?.componentStack&&_.jsxDEV(j,{flexDirection:"column",children:[_.jsxDEV(E,{color:"yellow",bold:!0,children:"Component Stack:"},void 0,!1,void 0,this),_.jsxDEV(E,{color:"gray",dimColor:!0,children:X.componentStack.split(`
|
|
6
|
-
`).slice(0,5).join(`
|
|
7
|
-
`)},void 0,!1,void 0,this)]},void 0,!0,void 0,this),_.jsxDEV(j,{marginTop:1,children:_.jsxDEV(E,{color:"blue",dimColor:!0,children:"Press Ctrl+C to exit"},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this)}return _.jsxDEV(_.Fragment,{children:H},void 0,!1,void 0,this)}}var VA=A0;var l0=h(f0(),1);class u0{async getProcessList(){let A=[];for(let[G,X]of g)try{let L=await l0.default(G);A.push({pid:G,command:X.command,startTime:X.startTime,duration:Date.now()-X.startTime,cpu:L.cpu,memory:L.memory,status:this.checkStatus(X)})}catch{A.push({pid:G,command:X.command,startTime:X.startTime,duration:Date.now()-X.startTime,cpu:0,memory:0,status:"stopped"})}return A}killProcess(A){let G=g.get(A);if(!G)return!1;return G.process.kill("SIGTERM"),g.delete(A),!0}getProcessOutput(A){let G=g.get(A);if(!G)return null;return{stdout:G.stdout.join(""),stderr:G.stderr.join("")}}checkStatus(A){try{return process.kill(A.process.pid,0),"running"}catch{return"stopped"}}}var gA=new u0;
|
|
8
|
-
export{VA as f,gA as g};
|
package/dist/chunk-32ase1cw.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{w as n}from"./chunk-heasksrr.js";import{$ as t,W as s,X as j,Y as o,Z as d,_ as r,aa as a}from"./chunk-jxsfzfac.js";import{yb as L}from"./chunk-kba8akjs.js";import{AIMessageChunk as z0}from"@langchain/core/messages";import{Command as D0,Send as V0}from"@langchain/langgraph";import{concat as K0}from"@langchain/core/utils/stream";import{load as F0}from"@langchain/core/load";var K=[];for(let $=0;$<256;++$)K.push(($+256).toString(16).slice(1));function p($,Z=0){return(K[$[Z+0]]+K[$[Z+1]]+K[$[Z+2]]+K[$[Z+3]]+"-"+K[$[Z+4]]+K[$[Z+5]]+"-"+K[$[Z+6]]+K[$[Z+7]]+"-"+K[$[Z+8]]+K[$[Z+9]]+"-"+K[$[Z+10]]+K[$[Z+11]]+K[$[Z+12]]+K[$[Z+13]]+K[$[Z+14]]+K[$[Z+15]]).toLowerCase()}import{randomFillSync as P0}from"node:crypto";var w=new Uint8Array(256),S=w.length;function G(){if(S>w.length-16)P0(w),S=0;return w.slice(S,S+=16)}var m={};function Q0($,Z,X){let Y;if($)Y=l($.random??$.rng?.()??G(),$.msecs,$.seq,Z,X);else{let J=Date.now(),U=G();O0(m,J,U),Y=l(U,m.msecs,m.seq,Z,X)}return Z??p(Y)}function O0($,Z,X){if($.msecs??=-1/0,$.seq??=0,Z>$.msecs)$.seq=X[6]<<23|X[7]<<16|X[8]<<8|X[9],$.msecs=Z;else if($.seq=$.seq+1|0,$.seq===0)$.msecs++;return $}function l($,Z,X,Y,J=0){if($.length<16)throw Error("Random bytes length must be >= 16");if(!Y)Y=new Uint8Array(16),J=0;else if(J<0||J+16>Y.length)throw RangeError(`UUID byte range ${J}:${J+15} is out of buffer bounds`);return Z??=Date.now(),X??=$[6]*127<<24|$[7]<<16|$[8]<<8|$[9],Y[J++]=Z/1099511627776&255,Y[J++]=Z/4294967296&255,Y[J++]=Z/16777216&255,Y[J++]=Z/65536&255,Y[J++]=Z/256&255,Y[J++]=Z&255,Y[J++]=112|X>>>28&15,Y[J++]=X>>>20&255,Y[J++]=128|X>>>14&63,Y[J++]=X>>>6&255,Y[J++]=X<<2&255|$[10]&3,Y[J++]=$[11],Y[J++]=$[12],Y[J++]=$[13],Y[J++]=$[14],Y[J++]=$[15],Y}var B=Q0;import"kysely";var A0=($)=>{let Z=$.goto!=null&&!Array.isArray($.goto)?[$.goto]:$.goto;return new D0({goto:Z?.map((X)=>{if(typeof X!=="string")return new V0(X.node,X.input);return X}),update:$.update??void 0,resume:$.resume})},i="[...]",B0="[Circular]",M=[],E=[];function N0(){return{depthLimit:Number.MAX_SAFE_INTEGER,edgesLimit:Number.MAX_SAFE_INTEGER}}function R0($,Z,X,Y){if(typeof Y>"u")Y=N0();k($,"",0,[],void 0,0,Y);var J;try{if(E.length===0)J=JSON.stringify($,Z,X);else J=JSON.stringify($,L0(Z),X)}catch(H){return JSON.stringify("[unable to serialize, circular reference is too complex to analyze]")}finally{while(M.length!==0){var U=M.pop();if(U.length===4)Object.defineProperty(U[0],U[1],U[3]);else U[0][U[1]]=U[2]}}return J}function b($,Z,X,Y){var J=Object.getOwnPropertyDescriptor(Y,X);if(J.get!==void 0)if(J.configurable)Object.defineProperty(Y,X,{value:$}),M.push([Y,X,Z,J]);else E.push([Z,X,$]);else Y[X]=$,M.push([Y,X,Z])}function k($,Z,X,Y,J,U,H){U+=1;var x;if(typeof $==="object"&&$!==null){for(x=0;x<Y.length;x++)if(Y[x]===$){b(B0,$,Z,J);return}if(typeof H.depthLimit<"u"&&U>H.depthLimit){b(i,$,Z,J);return}if(typeof H.edgesLimit<"u"&&X+1>H.edgesLimit){b(i,$,Z,J);return}if(Y.push($),Array.isArray($))for(x=0;x<$.length;x++)k($[x],x,x,Y,$,U,H);else{var W=Object.keys($);for(x=0;x<W.length;x++){var Q=W[x];k($[Q],Q,x,Y,$,U,H)}}Y.pop()}}function L0($){return $=typeof $<"u"?$:function(Z,X){return X},function(Z,X){if(E.length>0)for(var Y=0;Y<E.length;Y++){var J=E[Y];if(J[1]===Z&&J[0]===X){X=J[2],E.splice(Y,1);break}}return $.call(this,Z,X)}}function _0($){return $!==null&&$.lc===1&&$.type==="constructor"&&Array.isArray($.id)}async function y($){if($&&typeof $==="object")if(Array.isArray($))return await Promise.all($.map((X)=>y(X)));else{let Z={};for(let[X,Y]of Object.entries($))Z[X]=await y(Y);if(Z.lc===2&&Z.type==="undefined")return;else if(Z.lc===2&&Z.type==="constructor"&&Array.isArray(Z.id))try{let X=Z.id[Z.id.length-1],Y;switch(X){case"Set":Y=Set;break;case"Map":Y=Map;break;case"RegExp":Y=RegExp;break;case"Error":Y=Error;break;default:return Z}if(Z.method)return Y[Z.method](...Z.args||[]);else return new Y(...Z.args||[])}catch(X){return Z}else if(_0(Z))return F0(JSON.stringify(Z));return Z}return $}function v($,Z,X,Y){return{lc:2,type:"constructor",id:[$.name],method:Z??null,args:X??[],kwargs:Y??{}}}function E0($){if($===void 0)return{lc:2,type:"undefined"};else if($ instanceof Set||$ instanceof Map)return v($.constructor,void 0,[Array.from($)]);else if($ instanceof RegExp)return v(RegExp,void 0,[$.source,$.flags]);else if($ instanceof Error)return v($.constructor,void 0,[$.message]);else if($?.lg_name==="Send")return{node:$.node,args:$.args};else return $}class e{_dumps($){return new TextEncoder().encode(R0($,(X,Y)=>{return E0(Y)}))}async dumpsTyped($){if($ instanceof Uint8Array)return["bytes",$];else return["json",this._dumps($)]}async _loads($){let Z=JSON.parse($);return y(Z)}async loadsTyped($,Z){if($==="bytes")return typeof Z==="string"?new TextEncoder().encode(Z):Z;else if($==="json")return this._loads(typeof Z==="string"?Z:new TextDecoder().decode(Z));else throw Error(`Unknown serialization type: ${$}`)}}class $0 extends n.default{constructor($,Z=!0,X=300){super();this.id=$,this.compressMessages=Z,this.ttl=X}serializer=new e;async encodeData($){let[Z,X]=await this.serializer.dumpsTyped($);return X}async decodeData($){return await this.serializer.loadsTyped("json",$)}}class Z0{queues=new Map;defaultCompressMessages;queueConstructor;constructor($,Z={}){this.defaultCompressMessages=Z.defaultCompressMessages??!0,this.queueConstructor=$}createQueue($,Z=300){return this.queues.set($,new this.queueConstructor($,this.defaultCompressMessages,Z)),this.queues.get($)}async getQueue($){let Z=this.queues.get($);if(!Z)if(await this.queueConstructor?.isQueueExist?.($))return this.createQueue($);else throw Error(`Queue with id '${$}' does not exist`);return Z}async cancelQueue($){await this.removeQueue($)}async pushToQueue($,Z){await(await this.getQueue($)).push(Z)}async getQueueData($){let Z=this.queues.get($);if(!Z)throw Error(`Queue with id '${$}' does not exist`);return await Z.getAll()}async clearQueue($){let Z=this.queues.get($);if(Z){let X=Z.clear();if(X instanceof Promise)await X}}async removeQueue($){let Z=this.queues.get($);if(!Z)return!1;try{await Z.cancel()}catch(X){console.error("Error cancelling queue:",X)}try{let X=Z.clear();if(X instanceof Promise)await X}catch(X){console.error("Error clearing queue:",X)}if(typeof Z.destroy==="function")try{await Z.destroy()}catch(X){console.error("Error destroying queue:",X)}return this.queues.delete($)}getAllQueueIds(){return Array.from(this.queues.keys())}async getAllQueuesData(){let $={};for(let[Z,X]of this.queues)$[Z]=await X.getAll();return $}clearAllQueues(){for(let $ of this.queues.values())$.clear()}async copyQueue($,Z,X){let J=await(await this.getQueue($)).copyToQueue(Z,X);return this.queues.set(Z,J),J}}var T={};async function s0($,Z){T[$]=Z}async function X0($,Z,X){if(!T[$])throw Error(`Graph "${$}" not found`);let Y=typeof T[$]==="function"?await T[$](Z??{configurable:{}}):T[$];if(typeof X?.checkpointer<"u")Y.checkpointer=X?.checkpointer??F.globalCheckPointer;else Y.checkpointer=F.globalCheckPointer;return Y.store=X?.store??void 0,Y}class I{db;adapter;constructor($){this.db=$.db,this.adapter=$}async setup(){await this.adapter.createTables(this.db),await this.adapter.createIndexes(this.db)}async create($){let Z=$?.threadId||B(),X=new Date,Y=$?.metadata||{},J={};if($?.ifExists==="raise"){if(await this.db.selectFrom("threads").select("thread_id").where("thread_id","=",Z).executeTakeFirst())throw Error(`Thread with ID ${Z} already exists.`)}if($?.ifExists==="do_nothing"&&$?.threadId){let U=await this.db.selectFrom("threads").selectAll().where("thread_id","=",Z).executeTakeFirst();if(U)return{thread_id:U.thread_id,created_at:this.adapter.dbToDate(U.created_at).toISOString(),updated_at:this.adapter.dbToDate(U.updated_at).toISOString(),state_updated_at:this.adapter.dbToDate(U.updated_at).toISOString(),metadata:this.adapter.dbToJson(U.metadata),status:U.status,values:U.values?this.adapter.dbToJson(U.values):null,interrupts:this.adapter.dbToJson(U.interrupts),title:U.title}}return await this.db.insertInto("threads").values({thread_id:Z,created_at:this.adapter.dateToDb(X),updated_at:this.adapter.dateToDb(X),metadata:this.adapter.jsonToDb(Y),status:"idle",values:null,interrupts:this.adapter.jsonToDb(J)}).execute(),{thread_id:Z,created_at:X.toISOString(),updated_at:X.toISOString(),state_updated_at:X.toISOString(),metadata:Y,status:"idle",values:null,interrupts:J,title:null}}async search($){let Z=this.db.selectFrom("threads"),X;if($?.select)X=new Set($.select);else if($?.withoutDetails)X=new Set(["thread_id","created_at","updated_at","metadata","status","title"]);else X=new Set(["thread_id","created_at","updated_at","metadata","status","values","interrupts","title"]);let Y=[];if(X.has("thread_id"))Y.push("thread_id");if(X.has("created_at"))Y.push("created_at");if(X.has("updated_at"))Y.push("updated_at");if(X.has("metadata"))Y.push("metadata");if(X.has("status"))Y.push("status");if(X.has("values"))Y.push("values");if(X.has("interrupts"))Y.push("interrupts");if(X.has("title"))Y.push("title");if(Y.length>0)Z=Z.select(Y);else Z=Z.selectAll();if($?.ids&&$.ids.length>0)Z=Z.where("thread_id","in",$.ids);if($?.status)Z=Z.where("status","=",$.status);if($?.metadata)for(let[U,H]of Object.entries($.metadata))Z=Z.where(this.adapter.buildJsonQuery(this.db,"metadata",U,H));if($?.values)Z=Z.where((U)=>{return U("values","=",this.adapter.jsonToDb($.values))});if($?.sortBy){let U=$.sortOrder==="desc"?"desc":"asc";Z=Z.orderBy($.sortBy,U)}if($?.limit!==void 0){if(Z=Z.limit($.limit),$?.offset!==void 0)Z=Z.offset($.offset)}return(await Z.execute()).map((U)=>{let H={thread_id:U.thread_id};if(X.has("created_at"))H.created_at=this.adapter.dbToDate(U.created_at).toISOString();if(X.has("updated_at"))H.updated_at=this.adapter.dbToDate(U.updated_at).toISOString();if(X.has("metadata"))H.metadata=this.adapter.dbToJson(U.metadata);if(X.has("status"))H.status=U.status;if(X.has("values"))H.values=U.values?this.adapter.dbToJson(U.values):null;if(X.has("interrupts"))H.interrupts=this.adapter.dbToJson(U.interrupts);if(X.has("title"))H.title=U.title;return H})}async get($){let Z=await this.db.selectFrom("threads").selectAll().where("thread_id","=",$).executeTakeFirst();if(!Z)throw Error(`Thread with ID ${$} not found.`);return{thread_id:Z.thread_id,created_at:this.adapter.dbToDate(Z.created_at).toISOString(),updated_at:this.adapter.dbToDate(Z.updated_at).toISOString(),state_updated_at:this.adapter.dbToDate(Z.updated_at).toISOString(),metadata:this.adapter.dbToJson(Z.metadata),status:Z.status,values:Z.values?this.adapter.dbToJson(Z.values):null,interrupts:this.adapter.dbToJson(Z.interrupts),title:Z.title}}async set($,Z){if(!await this.db.selectFrom("threads").select("thread_id").where("thread_id","=",$).executeTakeFirst())throw Error(`Thread with ID ${$} not found.`);let Y={updated_at:this.adapter.dateToDb(new Date)};if(Z.metadata!==void 0)Y.metadata=this.adapter.jsonToDb(Z.metadata);if(Z.status!==void 0)Y.status=Z.status;if(Z.values!==void 0)Y.values=Z.values?this.adapter.jsonToDb(Z.values):null;if(Z.interrupts!==void 0)Y.interrupts=this.adapter.jsonToDb(Z.interrupts);if(Z.title!==void 0)Y.title=Z.title;await this.db.updateTable("threads").set(Y).where("thread_id","=",$).execute()}async delete($){if((await this.db.deleteFrom("threads").where("thread_id","=",$).executeTakeFirst()).numDeletedRows===0n)throw Error(`Thread with ID ${$} not found.`)}async updateState($,Z){let X=await this.get($);if(X.status==="busy")throw Error(`Thread with ID ${$} is busy, can't update state.`);let Y=X.metadata?.graph_id;if(!Y)return await this.set($,{values:Z.values??null}),{configurable:{thread_id:$}};let J={configurable:{thread_id:$,graph_id:Y}},U=await X0(Y,J),H=await U.updateState(J,Z.values),x=await U.getState(J);return await this.set($,{values:JSON.parse(f(x.values))}),H}async createRun($,Z,X){let Y=B(),J=new Date,U=X?.metadata??{};return await this.db.insertInto("runs").values({run_id:Y,thread_id:$,assistant_id:Z,created_at:this.adapter.dateToDb(J),updated_at:this.adapter.dateToDb(J),status:"pending",metadata:this.adapter.jsonToDb(U),multitask_strategy:"reject"}).execute(),{run_id:Y,thread_id:$,assistant_id:Z,created_at:J.toISOString(),updated_at:J.toISOString(),status:"pending",metadata:U,multitask_strategy:"reject"}}async listRuns($,Z){let X=this.db.selectFrom("runs").selectAll().where("thread_id","=",$).orderBy("created_at","desc");if(Z?.status)X=X.where("status","=",Z.status);if(Z?.limit!==void 0){if(X=X.limit(Z.limit),Z?.offset!==void 0)X=X.offset(Z.offset)}return(await X.execute()).map((J)=>({run_id:J.run_id,thread_id:J.thread_id,assistant_id:J.assistant_id,created_at:this.adapter.dbToDate(J.created_at).toISOString(),updated_at:this.adapter.dbToDate(J.updated_at).toISOString(),status:J.status,metadata:this.adapter.dbToJson(J.metadata),multitask_strategy:J.multitask_strategy}))}async updateRun($,Z){if(!await this.db.selectFrom("runs").select("run_id").where("run_id","=",$).executeTakeFirst())throw Error(`Run with ID ${$} not found.`);let Y={updated_at:this.adapter.dateToDb(new Date)};if(Z.status!==void 0)Y.status=Z.status;if(Z.metadata!==void 0)Y.metadata=this.adapter.jsonToDb(Z.metadata);if(Z.multitask_strategy!==void 0)Y.multitask_strategy=Z.multitask_strategy;await this.db.updateTable("runs").set(Y).where("run_id","=",$).execute()}async count($){return(await this.search($)).length}async patch($,Z){let X=await this.db.selectFrom("threads").selectAll().where("thread_id","=",$).executeTakeFirst();if(!X)throw Error(`Thread with ID ${$} not found.`);let Y={updated_at:this.adapter.dateToDb(new Date)};if(Z.metadata!==void 0){let J=this.adapter.dbToJson(X.metadata)||{};Y.metadata=this.adapter.jsonToDb({...J,...Z.metadata})}if(Z.status!==void 0)Y.status=Z.status;if(Z.values!==void 0)Y.values=Z.values?this.adapter.jsonToDb(Z.values):null;if(Z.interrupts!==void 0)Y.interrupts=this.adapter.jsonToDb(Z.interrupts);if(Z.title!==void 0)Y.title=Z.title;return await this.db.updateTable("threads").set(Y).where("thread_id","=",$).execute(),await this.get($)}async getState($,Z){let X=await this.get($);if(Z?.checkpointId){let J=await this.db.selectFrom("checkpoints").selectAll().where("checkpoint_id","=",Z.checkpointId).where("thread_id","=",$).executeTakeFirst();if(!J)throw Error(`Checkpoint with ID ${Z.checkpointId} not found for thread ${$}`);return{values:this.adapter.dbToJson(J.values),next:this.adapter.dbToJson(J.next),metadata:this.adapter.dbToJson(J.metadata),checkpoint:{id:J.checkpoint_id,thread_id:$,parent_checkpoint_id:null,checkpoint_ns:"",metadata:this.adapter.dbToJson(J.metadata),created_at:this.adapter.dbToDate(J.created_at).toISOString()},created_at:this.adapter.dbToDate(J.created_at).toISOString(),parent_checkpoint:null,tasks:[]}}return{values:X.values||{},next:[],metadata:X.metadata,checkpoint:null,created_at:X.created_at,parent_checkpoint:null,tasks:[]}}async getStateHistory($,Z){let Y=await this.db.selectFrom("checkpoints").selectAll().where("thread_id","=",$).orderBy("created_at","asc").execute(),J=Y.map((U)=>({values:this.adapter.dbToJson(U.values),next:this.adapter.dbToJson(U.next),metadata:this.adapter.dbToJson(U.metadata),checkpoint:{thread_id:$,checkpoint_ns:"",checkpoint_id:U.checkpoint_id,checkpoint_map:null},created_at:this.adapter.dbToDate(U.created_at).toISOString(),parent_checkpoint:null,tasks:[]}));if(Z?.before){let U=Y.findIndex((H)=>H.checkpoint_id===Z.before);if(U!==-1)J=J.slice(U+1)}if(Z?.limit)J=J.slice(0,Z.limit);return J}async copy($){let Z=await this.get($),X=B(),Y=new Date;await this.db.insertInto("threads").values({thread_id:X,created_at:this.adapter.dateToDb(Y),updated_at:this.adapter.dateToDb(Y),metadata:this.adapter.jsonToDb(Z.metadata),status:Z.status,values:Z.values?this.adapter.jsonToDb(Z.values):null,interrupts:this.adapter.jsonToDb(Z.interrupts),title:Z.title}).execute();let J=await this.db.selectFrom("checkpoints").selectAll().where("thread_id","=",$).orderBy("created_at","asc").execute();for(let U of J)await this.db.insertInto("checkpoints").values({checkpoint_id:B(),thread_id:X,values:U.values,next:U.next,config:U.config,created_at:U.created_at,metadata:U.metadata}).execute();return{...Z,thread_id:X,created_at:Y.toISOString(),updated_at:Y.toISOString()}}async saveCheckpoint($,Z,X,Y,J){await this.db.insertInto("checkpoints").values({checkpoint_id:B(),thread_id:$,values:this.adapter.jsonToDb(Z),next:this.adapter.jsonToDb(X),config:this.adapter.jsonToDb(Y),created_at:this.adapter.dateToDb(new Date),metadata:this.adapter.jsonToDb(J||{})}).execute()}async setTitleIfNull($,Z){return(await this.db.updateTable("threads").set({title:Z,updated_at:this.adapter.dateToDb(new Date)}).where("thread_id","=",$).where("title","is",null).executeTakeFirst()).numUpdatedRows>0n}}function T0($){let[Z,X]=$.split("::");return{threadId:Z,checkpointNs:X??""}}function C($,Z,X){return`${$}::${Z}::${X}`}function g($){if($===null||typeof $!=="object")return JSON.stringify($);if(Array.isArray($))return JSON.stringify($.map((Y)=>g(Y)));let Z={},X=Object.keys($).sort();for(let Y of X)Z[Y]=$[Y];return JSON.stringify(Z,(Y,J)=>{if(J!==null&&typeof J==="object"&&!Array.isArray(J)){let U={},H=Object.keys(J).sort();for(let x of H)U[x]=J[x];return U}return J})}class Y0 extends d{storage={};writes={};constructor($){super($)}async get($){return(await this.getTuple($))?.checkpoint}async _migratePendingSends($,Z,X,Y){let J=$,U=C(Z,X,Y),H=await Promise.all(Object.values(this.writes[U]??{}).filter(([x,W])=>W===j).map(async([x,W,Q])=>await this.serde.loadsTyped("json",Q)));J.channel_values??={},J.channel_values[j]=H,J.channel_versions??={},J.channel_versions[j]=Object.keys(J.channel_versions).length>0?r(...Object.values(J.channel_versions)):this.getNextVersion(void 0)}async _loadPendingWrites($,Z,X){let Y=C($,Z,X),J=this.writes[Y]??{};if(Object.keys(J).length===0)return[];return await Promise.all(Object.values(J).map(async([U,H,x])=>{return[U,H,await this.serde.loadsTyped("json",x)]}))}_cleanupOldWrites($,Z,X){let Y=C($,Z,X);delete this.writes[Y]}_checkMetadataFilterMatch($,Z){for(let[X,Y]of Object.entries(Z)){let J=$?.[X];if(Y===null){if(!(X in($||{}))||J!==null)return!1}else if(typeof Y==="object"&&!Array.isArray(Y)){if(typeof J!=="object"||J===null)return!1;if(g(Y)!==g(J))return!1}else if(J!==Y)return!1}return!0}async getTuple($){let Z=$.configurable?.thread_id,X=$.configurable?.checkpoint_ns??"",Y=a($);if(Z===void 0)return;let J=this.storage[Z]?.[X];if(J===void 0)return;let{checkpoint:U,metadata:H,checkpoint_id:x,parent_checkpoint_id:W}=J;if(Y&&x!==Y)return;let Q=await this.serde.loadsTyped("json",U);if(Q.v<4&&W!==void 0)await this._migratePendingSends(Q,Z,X,W);let P=await this._loadPendingWrites(Z,X,x),z=await this.serde.loadsTyped("json",H),V={config:{configurable:{thread_id:Z,checkpoint_ns:X,checkpoint_id:x}},checkpoint:Q,metadata:z,pendingWrites:P};if(W!==void 0)V.parentConfig={configurable:{thread_id:Z,checkpoint_ns:X,checkpoint_id:W}};return V}async*list($,Z){let{before:X,limit:Y,filter:J}=Z??{},U=$.configurable?.thread_id?[$.configurable.thread_id]:Object.keys(this.storage),H=$.configurable?.checkpoint_ns,x=$.configurable?.checkpoint_id,W=[];for(let P of U){let z=this.storage[P];if(z===void 0)continue;for(let V of Object.keys(z)){if(H!==void 0&&V!==H)continue;let A=z[V];if(A===void 0)continue;let{checkpoint_id:D}=A;if(x&&D!==x)continue;if(X?.configurable?.checkpoint_id&&D>=X.configurable.checkpoint_id)continue;let N=await this.serde.loadsTyped("json",A.metadata);if(J&&!this._checkMetadataFilterMatch(N,J))continue;W.push({threadId:P,checkpointNs:V,namespaceData:A})}}W.sort((P,z)=>z.namespaceData.checkpoint_ts-P.namespaceData.checkpoint_ts);let Q=0;for(let{threadId:P,checkpointNs:z,namespaceData:V}of W){if(Y!==void 0&&Q>=Y)return;let{checkpoint:A,metadata:D,checkpoint_id:N,parent_checkpoint_id:_}=V,O=await this.serde.loadsTyped("json",A);if(O.v<4&&_!==void 0)await this._migratePendingSends(O,P,z,_);let q=await this._loadPendingWrites(P,z,N),W0=await this.serde.loadsTyped("json",D),u={config:{configurable:{thread_id:P,checkpoint_ns:z,checkpoint_id:N}},checkpoint:O,metadata:W0,pendingWrites:q};if(_!==void 0)u.parentConfig={configurable:{thread_id:P,checkpoint_ns:z,checkpoint_id:_}};Q++,yield u}}async put($,Z,X,Y){let J=o(Z),U=$.configurable?.thread_id,H=$.configurable?.checkpoint_ns??"",x=$.configurable?.checkpoint_id;if(U===void 0)throw Error("thread_id is required");let W=Z.id||s(0);if(!this.storage[U])this.storage[U]={};let Q=this.storage[U][H];if(Q!==void 0&&Q.checkpoint_id!==W)this._cleanupOldWrites(U,H,Q.checkpoint_id);let[[,P],[,z]]=await Promise.all([this.serde.dumpsTyped(J),this.serde.dumpsTyped(X)]);return this.storage[U][H]={checkpoint:P,metadata:z,checkpoint_id:W,parent_checkpoint_id:x,checkpoint_ts:Date.now()},{configurable:{thread_id:U,checkpoint_ns:H,checkpoint_id:W}}}async putWrites($,Z,X){let Y=$.configurable?.thread_id,J=$.configurable?.checkpoint_ns??"",U=$.configurable?.checkpoint_id;if(!Y||!U)throw Error("thread_id and checkpoint_id are required");let H=C(Y,J,U),x=this.writes[H];if(this.writes[H]===void 0)this.writes[H]={};await Promise.all(Z.map(async([W,Q],P)=>{let[,z]=await this.serde.dumpsTyped(Q),V=[X,t[W]||P],A=`${V[0]},${V[1]}`;if(V[1]>=0&&x&&A in x)return;this.writes[H][A]=[X,W,z]}))}async deleteThread($){delete this.storage[$];for(let Z of Object.keys(this.writes)){let{threadId:X}=T0(Z.split("::").slice(0,2).join("::"));if(X===$)delete this.writes[Z]}}}class R{event;data;id;constructor($,Z){this.event=$,this.data=Z}}class J0 extends R{constructor(){super("__system_cancel__","user cancel this run")}}class U0 extends R{constructor(){super("__stream_end__","stream end")}}class c extends R{constructor($){super("__stream_error__",{error:$.name,message:$.message})}}class h extends $0{data=[];activeGenerators=new Set;isDestroyed=!1;async push($){if(this.isDestroyed)return;let Z=this.compressMessages?await this.encodeData($):$;process.env.LG_TEMP_MESSAGE!=="true"&&this.data.push(Z),this.emit("dataChange",Z)}onDataChange($){if(this.isDestroyed)return()=>{};return this.on("dataChange",async(Z)=>{if(this.isDestroyed)return;$(this.compressMessages?await this.decodeData(Z):Z)}),()=>this.off("dataChange",$)}async*onDataReceive(){if(this.isDestroyed)return;let $=new AbortController;this.activeGenerators.add($);let Z=[],X=null,Y=!1,J=!1,U=null,H=async(Q)=>{if(J||$.signal.aborted)return;try{let P=this.compressMessages?await this.decodeData(Q):Q;if(Z.push(P),P.event==="__stream_end__"||P.event==="__stream_error__"||P.event==="__stream_cancel__"){if(U)clearTimeout(U),U=null;if(U=setTimeout(()=>{if(Y=!0,X)X(),X=null},300),P.event==="__stream_cancel__")$.abort("stream cancelled")}if(X)X(),X=null}catch(P){if(console.error("Error in handleData:",P),X)X(),X=null}};this.on("dataChange",H);let x=()=>{if(Y=!0,X)X(),X=null};$.signal.addEventListener("abort",x);let W=()=>{if(J)return;if(J=!0,U)clearTimeout(U),U=null;try{this.off("dataChange",H)}catch(Q){}try{$.signal.removeEventListener("abort",x)}catch(Q){}if(X)X(),X=null;Z.length=0,this.activeGenerators.delete($)};try{if($.signal.aborted||this.isDestroyed)return;while(!Y&&!$.signal.aborted&&!this.isDestroyed)if(Z.length>0){for(let Q of Z)yield Q;Z.length=0}else await new Promise((Q)=>{X=Q})}finally{W()}}async getAll(){if(this.isDestroyed)return[];return this.compressMessages?await Promise.all(this.data.map(($)=>this.decodeData($))):[...this.data]}clear(){this.data.length=0}cancelSignal=new AbortController;async cancel(){for(let $ of this.activeGenerators)try{$.abort("user cancel this run")}catch(Z){}if(this.activeGenerators.clear(),!this.cancelSignal.signal.aborted)this.cancelSignal.abort("user cancel this run");if(!this.isDestroyed)await this.push(new J0)}async copyToQueue($,Z){let X=this.data.slice(),Y=new h($,this.compressMessages,Z??this.ttl);return Y.data=X,Y}async destroy(){if(this.isDestroyed)return;this.isDestroyed=!0,await this.cancel(),this.clear(),this.removeAllListeners(),this.activeGenerators.clear()}}class H0{threads=[];checkpoints=new Map;async setup(){return}async create($){let Z=$?.threadId||B();if($?.ifExists==="raise"&&this.threads.some((Y)=>Y.thread_id===Z))throw Error(`Thread with ID ${Z} already exists.`);let X={thread_id:Z,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),state_updated_at:new Date().toISOString(),metadata:$?.metadata||{},status:"idle",values:null,interrupts:{},title:null};return this.checkpoints.set(Z,[]),this.threads.push(X),X}async search($){let Z=[...this.threads];if($?.ids&&$.ids.length>0)Z=Z.filter((U)=>$.ids.includes(U.thread_id));if($?.status)Z=Z.filter((U)=>U.status===$.status);if($?.metadata){for(let U in $.metadata)if(Object.prototype.hasOwnProperty.call($.metadata,U))Z=Z.filter((H)=>H.metadata&&H.metadata[U]===$.metadata?.[U])}if($?.values)Z=Z.filter((U)=>{if(!U.values)return!1;return this.deepEqual(U.values,$.values)});if($?.sortBy)Z.sort((U,H)=>{let x,W;switch($.sortBy){case"thread_id":x=U.thread_id,W=H.thread_id;break;case"created_at":x=new Date(U.created_at).getTime(),W=new Date(H.created_at).getTime();break;case"updated_at":x=new Date(U.updated_at).getTime(),W=new Date(H.updated_at).getTime();break;case"status":x=U.status,W=H.status;break;default:return 0}if($.sortOrder==="desc")return W>x?1:W<x?-1:0;else return x>W?1:x<W?-1:0});let X=$?.offset||0,Y=$?.limit||Z.length;return Z.slice(X,X+Y).map((U)=>{let H={thread_id:U.thread_id},x;if($?.select)x=new Set($.select);else if($?.withoutDetails)x=new Set(["thread_id","created_at","updated_at","metadata","status"]);else x=new Set(["thread_id","created_at","updated_at","metadata","status","values","interrupts","title"]);if(x.has("thread_id"))H.thread_id=U.thread_id;if(x.has("created_at"))H.created_at=U.created_at;if(x.has("updated_at"))H.updated_at=U.updated_at;if(x.has("metadata"))H.metadata=U.metadata;if(x.has("status"))H.status=U.status;if(x.has("values"))H.values=U.values;if(x.has("interrupts"))H.interrupts=U.interrupts;if(x.has("title"))H.title=U.title;return H})}deepEqual($,Z){if($===Z)return!0;if(typeof $!==typeof Z)return!1;if(typeof $!=="object"||$===null||Z===null)return!1;let X=Object.keys($),Y=Object.keys(Z);if(X.length!==Y.length)return!1;for(let J of X){if(!Y.includes(J))return!1;if(!this.deepEqual($[J],Z[J]))return!1}return!0}async get($){let Z=this.threads.find((X)=>X.thread_id===$);if(!Z)throw Error(`Thread with ID ${$} not found.`);return Z}async set($,Z){let X=this.threads.findIndex((Y)=>Y.thread_id===$);if(X===-1)throw Error(`Thread with ID ${$} not found.`);this.threads[X]={...this.threads[X],...Z}}async delete($){let Z=this.threads.length;if(this.threads=this.threads.filter((X)=>X.thread_id!==$),this.checkpoints.delete($),this.threads.length===Z)throw Error(`Thread with ID ${$} not found.`)}async updateState($,Z){let X=this.threads.findIndex((J)=>J.thread_id===$);if(X===-1)throw Error(`Thread with ID ${$} not found.`);let Y=this.threads[X];if(Y.status==="busy")throw Error(`Thread with ID ${$} is busy, can't update state.`);if(this.threads[X]={...Y,values:Z.values,updated_at:new Date().toISOString()},Y.metadata?.graph_id){let J=Y.metadata?.graph_id,U={configurable:{thread_id:$,graph_id:J}};try{let H=await X0(J,U),x=await H.updateState(U,Z.values),W=await H.getState(U);return await this.set($,{values:JSON.parse(f(W.values))}),x}catch(H){console.warn("Failed to update graph state:",H)}}return{configurable:{thread_id:$}}}runs=[];async createRun($,Z,X){let J={run_id:B(),thread_id:$,assistant_id:Z,created_at:new Date().toISOString(),updated_at:new Date().toISOString(),status:"pending",metadata:X?.metadata??{},multitask_strategy:"reject"};return this.runs.push(J),J}async listRuns($,Z){let X=[...this.runs];if(Z?.status)X=X.filter((Y)=>Y.status===Z.status);if(Z?.limit)X=X.slice(Z.offset||0,(Z.offset||0)+Z.limit);return X}async updateRun($,Z){let X=this.runs.findIndex((Y)=>Y.run_id===$);if(X===-1)throw Error(`Run with ID ${$} not found.`);this.runs[X]={...this.runs[X],...Z}}async count($){return(await this.search($)).length}async patch($,Z){let X=this.threads.findIndex((J)=>J.thread_id===$);if(X===-1)throw Error(`Thread with ID ${$} not found.`);let Y={...this.threads[X],...Z,updated_at:new Date().toISOString(),metadata:Z.metadata?{...this.threads[X].metadata,...Z.metadata}:this.threads[X].metadata};return this.threads[X]=Y,Y}async getState($,Z){let X=await this.get($);if(Z?.checkpointId){let U=(this.checkpoints.get($)||[]).find((H)=>H.checkpoint_id===Z.checkpointId);if(!U)throw Error(`Checkpoint with ID ${Z.checkpointId} not found for thread ${$}`);return{values:U.values,next:U.next,metadata:U.metadata,checkpoint:{id:U.checkpoint_id,thread_id:$,parent_checkpoint_id:null,checkpoint_ns:"",metadata:U.metadata,created_at:U.created_at},created_at:U.created_at,parent_checkpoint:null,tasks:[]}}return{values:X.values||{},next:[],metadata:X.metadata,checkpoint:null,created_at:X.created_at,parent_checkpoint:null,tasks:[]}}async getStateHistory($,Z){let X=this.checkpoints.get($)||[],Y=X.map((J)=>({values:J.values,next:J.next,metadata:J.metadata,checkpoint:{checkpoint_id:J.checkpoint_id,thread_id:$,checkpoint_ns:"",checkpoint_map:void 0},created_at:J.created_at,parent_checkpoint:null,tasks:[]}));if(Z?.before){let J=X.findIndex((U)=>U.checkpoint_id===Z.before);if(J!==-1)Y=Y.slice(J+1)}if(Z?.limit)Y=Y.slice(0,Z.limit);return Y}async copy($){let Z=await this.get($),X=B(),Y={...Z,thread_id:X,created_at:new Date().toISOString(),updated_at:new Date().toISOString()};this.threads.push(Y);let U=(this.checkpoints.get($)||[]).map((H)=>({...H,checkpoint_id:B(),thread_id:X}));return this.checkpoints.set(X,U),Y}async saveCheckpoint($,Z,X,Y,J){let U=this.checkpoints.get($)||[],H={checkpoint_id:B(),thread_id:$,values:Z,next:X,config:Y,created_at:new Date().toISOString(),metadata:J};U.push(H),this.checkpoints.set($,U)}async setTitleIfNull($,Z){let X=this.threads.findIndex((Y)=>Y.thread_id===$);if(X===-1)throw Error(`Thread with ID ${$} not found.`);if(this.threads[X].title===null)return this.threads[X]={...this.threads[X],title:Z,updated_at:new Date().toISOString()},!0;return!1}}var S0=async()=>{if(process.env.REDIS_URL&&(process.env.CHECKPOINT_TYPE==="redis"||process.env.CHECKPOINT_TYPE==="shallow/redis")){if(process.env.CHECKPOINT_TYPE==="redis"){console.debug("LG | Using redis as checkpoint");let{RedisSaver:$}=await import("./chunk-m76ya904.js");return await $.fromUrl(process.env.REDIS_URL,{defaultTTL:60,refreshOnRead:!0})}if(process.env.CHECKPOINT_TYPE==="shallow/redis"){console.debug("LG | Using shallow redis as checkpoint");let{ShallowRedisSaver:$}=await import("./chunk-3490ntd8.js");return await $.fromUrl(process.env.REDIS_URL)}}if(process.env.DATABASE_URL&&x0(process.env.DATABASE_URL)==="postgres"){console.debug("LG | Using postgres as checkpoint");let{createPGCheckpoint:$}=await import("./chunk-4nsg4vcd.js");return $()}if(process.env.SQLITE_DATABASE_URI){if(process.env.CHECKPOINT_TYPE==="sqlite"){console.debug("LG | Using sqlite (full) as checkpoint");let{SqliteSaver:X}=await import("./chunk-trjpzw1n.js");return await X.fromConnStringAsync(process.env.SQLITE_DATABASE_URI)}console.debug("LG | Using shallow sqlite as checkpoint (default)");let{SqliteShallowSaver:$}=await import("./chunk-ep2es95e.js");return await $.fromConnStringAsync(process.env.SQLITE_DATABASE_URI)}return console.log("LG | You are using memory as checkpoint!"),console.log("\x1B[33m%s\x1B[0m","LG | set SQLITE_DATABASE_URI=./.langgraph_api/langgraph.db to your .env file to use \x1B[1mSQLite\x1B[0m for dev!"),console.log("\x1B[33m%s\x1B[0m","LG | set DATABASE_URL=postgresql://user:pass@localhost:5432/db to your .env file to use \x1B[1mPostgreSQL\x1B[0m for prod!"),new Y0},w0=async()=>{let $;if(process.env.REDIS_URL){console.debug("LG | Using redis as stream queue");let{RedisStreamQueue:Z}=await import("./chunk-g377vrpj.js");$=Z}else $=h;return new Z0($)};function x0($){let Z=$.toLowerCase();if(Z.startsWith("http://")||Z.startsWith("https://"))return"remote";return"postgres"}var G0=async($)=>{if(process.env.DATABASE_URL){if(x0(process.env.DATABASE_URL)==="remote"){console.debug("LG | Using Remote PostgreSQL ThreadsManager");let{RemoteKyselyThreadsManager:X}=await import("./chunk-9k5d9vf1.js"),Y=new X(process.env.DATABASE_URL);if(process.env.DATABASE_INIT==="true")await Y.setup();return Y}else if($.checkpointer){console.debug("LG | Using PostgreSQL ThreadsManager");let{PostgresAdapter:X}=await import("./chunk-b52b0t16.js"),Y=$.checkpointer.pool,J=new I(new X(Y));if(process.env.DATABASE_INIT==="true")await J.setup();return J}}if(process.env.SQLITE_DATABASE_URI&&$.checkpointer){console.debug("LG | Using SQLite ThreadsManager");let{SQLiteAdapter:Z}=await import("./chunk-gcm4jp0d.js"),X=$.checkpointer.db,Y=new I(new Z(X));return await Y.setup(),Y}return new H0};function C0($){if(typeof $==="string")return $;if(Array.isArray($))return $.find((X)=>X.type==="text")?.text||"";if($?.text)return $.text;return""}var j0=($,Z)=>{let X=$?.messages;if(!X||!Array.isArray(X)||X.length===0)return null;let Y=X[0];if(!Y)return null;let J=C0(Y.content);if(!J)return null;let U=J.trim().replace(/\n/g," ");if(!U)return null;let H=15,x=U.slice(0,H);return x.length<U.length?`${x}...`:x};class F{static globalMessageQueue=null;static globalCheckPointer=null;static globalThreadsManager=null;static isInitialized=null;static _titleGenerator=j0;static setTitleGenerator($){F._titleGenerator=$}static getTitleGenerator(){return F._titleGenerator}static async initGlobal(){if(F.isInitialized)return F.isInitialized;return F.isInitialized=(async()=>{let[$,Z]=await Promise.all([w0(),S0()]);console.debug("LG | checkpointer created");let X=await G0({checkpointer:Z});console.debug("LG | threads manager created"),console.debug("LG | global init done"),F.globalMessageQueue=$,F.globalCheckPointer=Z,F.globalThreadsManager=X})(),F.isInitialized}}async function M0($,Z,X,Y,J){let H=Y.config?.configurable?.graph_id;if(!H||typeof H!=="string")throw Error("Invalid or missing graph_id");let x=await J.getGraph(H,Y.config,{checkpointer:Y.temporary?null:void 0}),W=Array.isArray(Y.streamMode)?Y.streamMode:Y.streamMode?[Y.streamMode]:[],Q=new Set(["values",...W.filter((D)=>D!=="events"&&D!=="messages-tuple")]);if(W.includes("messages-tuple"))Q.add("messages");if(W.includes("messages"))Q.add("values");await X.push(new R("metadata",{run_id:Z.run_id,attempt:J.attempt,graph_id:H}));let P={...Y.config?.metadata,run_attempt:J.attempt},z=null,V=null,A=null;try{z=new Set,V=new Map,A=await x.stream(Y.command!=null?A0(Y.command):Y.input??null,{interruptAfter:Y.interruptAfter,interruptBefore:Y.interruptBefore,tags:Y.config?.tags,configurable:Y.config?.configurable,recursionLimit:Y.config?.recursionLimit,subgraphs:Y.streamSubgraphs,metadata:P,runId:Z.run_id,streamMode:[...Q],signal:X.cancelSignal.signal});for await(let D of A){let N=[];if(D.length===3)N=D.splice(0,1);let _=(O)=>{if(N.length===0)return O;if(N.length===1&&N[0]?.length===0)return O;return`${O}|${N.join("|")}`};if(D[0]==="values"){let O=D[1];if(_("values")==="values")if(await X.push(new R(_("values"),O)),O?.__interrupt__)await $.set(Z.thread_id,{status:"interrupted",interrupts:O?JSON.parse(f(O)):""});else await $.set(Z.thread_id,{values:O?JSON.parse(f(O)):""})}else if(D[0]==="messages"){let O=D[1][0],q=D[1][1];if(O.id&&!z.has(O.id))await X.push(new R("messages/metadata",{[O.id]:q})),z.add(O.id);if(z0.isInstance(O)&&O.id){if(V.set(O.id,[...V.get(O.id)??[],O]),await X.push(new R("messages/partial",[V.get(O.id).reduce(K0)])),O.content===""&&!O.tool_calls?.length)V.delete(O.id)}else await X.push(new R("messages/partial",[O]))}else if(D[0]==="updates"){let O=D[1];await X.push(new R(_("updates"),O))}}}catch(D){if(!(D instanceof Error&&D.message?.includes("cancel"))){console.error("streamStateWithQueue error:",D);try{await X.push(new c(D))}catch(N){}}throw D}finally{try{await X.push(new U0)}catch(D){}if(z)z.clear(),z=null;if(V)V.clear(),V=null;A=null}}var f=($,Z=0)=>{return JSON.stringify($,function(X,Y){let J=this[X];if(J!=null&&typeof J==="object"&&"toDict"in J&&typeof J.toDict==="function"){let{type:U,data:H}=J.toDict();return{...H,type:U}}return Y},Z)};async function*o0($,Z,X,Y){Z=await Z;let{run_id:J,thread_id:U}=Z,H=null,x=null,W=null,Q=!1;try{await $.set(U,{status:"busy"}),await $.updateRun(Z.run_id,{status:"running"}),x=F.globalMessageQueue.createQueue(J),H=x.onDataReceive(),W=M0($,Z,x,X,Y).catch((P)=>{if(Q)return;if(P.message!=="user cancel this run")console.error("Queue task error:",P);F.globalMessageQueue.pushToQueue(J,new c(P))});for await(let P of H)yield P;await $.updateRun(Z.run_id,{status:"success"})}catch(P){console.error("Stream error:",P),await $.updateRun(Z.run_id,{status:"error"}),await $.set(U,{status:"error"})}finally{if(Q=!0,H){try{await H.return(void 0)}catch(z){}H=null}if(x&&!x.cancelSignal.signal.aborted)try{x.cancelSignal.abort("Stream consumer disconnected")}catch(z){}if(W){try{await Promise.race([W,new Promise((z)=>setTimeout(z,1000))])}catch(z){}W=null}if((await $.get(U)).status==="interrupted")await F.globalMessageQueue.copyQueue(J,U,30000);else await $.set(U,{status:"idle",interrupts:{}});await F.globalMessageQueue.removeQueue(J),x=null}}
|
|
2
|
-
export{$0 as h,T as i,s0 as j,X0 as k,J0 as l,F as m,f as n,o0 as o};
|
package/dist/chunk-3490ntd8.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as A,b as W}from"./chunk-8g2zdcy0.js";import"./chunk-98f6hg43.js";import{W as q,Z as R}from"./chunk-jxsfzfac.js";import{ub as V}from"./chunk-kba8akjs.js";var x=V(W(),1);function B(M){if(M===null||typeof M!=="object")return JSON.stringify(M);if(Array.isArray(M))return JSON.stringify(M.map((J)=>B(J)));let F={},G=Object.keys(M).sort();for(let J of G)F[J]=M[J];return JSON.stringify(F,(J,Q)=>{if(Q!==null&&typeof Q==="object"&&!Array.isArray(Q)){let X={},Y=Object.keys(Q).sort();for(let Z of Y)X[Z]=Q[Z];return X}return Q})}var P=[{index:"checkpoints",prefix:"checkpoint:",schema:{"$.thread_id":{type:"TAG",AS:"thread_id"},"$.checkpoint_ns":{type:"TAG",AS:"checkpoint_ns"},"$.checkpoint_id":{type:"TAG",AS:"checkpoint_id"},"$.parent_checkpoint_id":{type:"TAG",AS:"parent_checkpoint_id"},"$.checkpoint_ts":{type:"NUMERIC",AS:"checkpoint_ts"},"$.has_writes":{type:"TAG",AS:"has_writes"},"$.source":{type:"TAG",AS:"source"},"$.step":{type:"NUMERIC",AS:"step"}}},{index:"checkpoint_writes",prefix:"checkpoint_write:",schema:{"$.thread_id":{type:"TAG",AS:"thread_id"},"$.checkpoint_ns":{type:"TAG",AS:"checkpoint_ns"},"$.checkpoint_id":{type:"TAG",AS:"checkpoint_id"},"$.task_id":{type:"TAG",AS:"task_id"},"$.idx":{type:"NUMERIC",AS:"idx"},"$.channel":{type:"TAG",AS:"channel"},"$.type":{type:"TAG",AS:"type"}}}],N=class M extends R{client;ttlConfig;constructor(F,G){super();this.client=F,this.ttlConfig=G}static async fromUrl(F,G){let J=x.createClient({url:F});await J.connect();let Q=new M(J,G);return await Q.ensureIndexes(),Q}async get(F){return(await this.getTuple(F))?.checkpoint}async put(F,G,J,Q){await this.ensureIndexes();let X=F.configurable?.thread_id,Y=F.configurable?.checkpoint_ns??"",Z=F.configurable?.checkpoint_id;if(!X)throw Error("thread_id is required");let _=G.id||q(0),E=`checkpoint:${X}:${Y}:shallow`,H=null,$=null;try{if(H=await this.client.json.get(E),H&&typeof H==="object")$=H.checkpoint_id}catch(O){}if($&&$!==_)await this.cleanupOldCheckpoint(X,Y,$);let L={...G,channel_values:G.channel_values||{},channel_blobs:void 0},U={thread_id:X,checkpoint_ns:Y,checkpoint_id:_,parent_checkpoint_id:Z||null,checkpoint:L,metadata:this.sanitizeMetadata(J),checkpoint_ts:Date.now(),has_writes:"false"};if(this.addSearchableMetadataFields(U,J),await this.client.json.set(E,"$",U),this.ttlConfig?.defaultTTL)await this.applyTTL(E);return{configurable:{thread_id:X,checkpoint_ns:Y,checkpoint_id:_}}}async getTuple(F){let G=F.configurable?.thread_id,J=F.configurable?.checkpoint_ns??"",Q=F.configurable?.checkpoint_id;if(!G)return;let X=`checkpoint:${G}:${J}:shallow`,Y=await this.client.json.get(X);if(!Y)return;if(Q&&Y.checkpoint_id!==Q)return;if(this.ttlConfig?.refreshOnRead&&this.ttlConfig?.defaultTTL)await this.applyTTL(X);let Z=await this.serde.loadsTyped("json",JSON.stringify(Y.checkpoint)),_;if(Y.has_writes==="true")_=await this.loadPendingWrites(Y.thread_id,Y.checkpoint_ns,Y.checkpoint_id);return await this.createCheckpointTuple(Y,Z,_)}async*list(F,G){if(await this.ensureIndexes(),F?.configurable?.thread_id){let J=await this.getTuple(F);if(J)if(G?.filter){if(this.checkMetadataFilterMatch(J.metadata,G.filter))yield J}else yield J}else{let J=[];if(G?.filter){for(let[Y,Z]of Object.entries(G.filter))if(Z===void 0);else if(Z===null);else if(typeof Z==="string"){let _=A(Y),E=A(Z);J.push(`(@${_}:{${E}})`)}else if(typeof Z==="number"){let _=A(Y);J.push(`(@${_}:[${Z} ${Z}])`)}}if(J.length===0)J.push("*");let Q=J.join(" "),X=G?.limit??10;try{let Y=await this.client.ft.search("checkpoints",Q,{LIMIT:{from:0,size:X*2},SORTBY:{BY:"checkpoint_ts",DIRECTION:"DESC"}}),Z=new Set,_=0;for(let E of Y.documents){if(_>=X)break;let H=E.value,$=`${H.thread_id}:${H.checkpoint_ns}`;if(Z.has($))continue;if(Z.add($),G?.filter){if(!this.checkMetadataFilterMatch(H.metadata,G.filter))continue}let L=await this.serde.loadsTyped("json",JSON.stringify(H.checkpoint));yield await this.createCheckpointTuple(H,L),_++}}catch(Y){if(Y.message?.includes("no such index")){let Z=await this.client.keys("checkpoint:*:*:shallow");if(Z.length===0)return;Z.sort().reverse();let _=new Set,E=0,H=G?.limit??10;for(let $ of Z){if(E>=H)break;let L=await this.client.json.get($);if(!L)continue;let U=`${L.thread_id}:${L.checkpoint_ns}`;if(_.has(U))continue;if(_.add(U),G?.filter){if(!this.checkMetadataFilterMatch(L.metadata,G.filter))continue}let O=await this.serde.loadsTyped("json",JSON.stringify(L.checkpoint));yield await this.createCheckpointTuple(L,O),E++}return}throw Y}}}async putWrites(F,G,J){await this.ensureIndexes();let Q=F.configurable?.thread_id,X=F.configurable?.checkpoint_ns??"",Y=F.configurable?.checkpoint_id;if(!Q||!Y)throw Error("thread_id and checkpoint_id are required");let Z=`checkpoint_write:${Q}:${X}:${Y}:${J}:*`,_=await this.client.keys(Z);if(_.length>0)await this.client.del(_);let E=[];for(let $=0;$<G.length;$++){let[L,U]=G[$],O=`checkpoint_write:${Q}:${X}:${Y}:${J}:${$}`;E.push(O);let T={thread_id:Q,checkpoint_ns:X,checkpoint_id:Y,task_id:J,idx:$,channel:L,type:typeof U==="object"?"json":"string",value:U};await this.client.json.set(O,"$",T)}if(E.length>0){let $=`write_keys_zset:${Q}:${X}:${Y}`,L={};if(E.forEach((U,O)=>{L[U]=O}),await this.client.zAdd($,Object.entries(L).map(([U,O])=>({score:O,value:U}))),this.ttlConfig?.defaultTTL)await this.applyTTL(...E,$)}let H=`checkpoint:${Q}:${X}:shallow`;if(await this.client.exists(H)){let $=await this.client.json.get(H);if($)$.has_writes="true",await this.client.json.set(H,"$",$)}}async deleteThread(F){let G=`checkpoint:${F}:*:shallow`,J=await this.client.keys(G);if(J.length>0)await this.client.del(J);let Q=`checkpoint_write:${F}:*`,X=await this.client.keys(Q);if(X.length>0)await this.client.del(X);let Y=`write_keys_zset:${F}:*`,Z=await this.client.keys(Y);if(Z.length>0)await this.client.del(Z)}async end(){await this.client.quit()}addSearchableMetadataFields(F,G){if(!G)return;if("source"in G)F.source=G.source;if("step"in G)F.step=G.step;if("writes"in G)F.writes=typeof G.writes==="object"?JSON.stringify(G.writes):G.writes;if("score"in G)F.score=G.score}async createCheckpointTuple(F,G,J){let Q=await this.serde.loadsTyped("json",JSON.stringify(F.metadata));return{config:{configurable:{thread_id:F.thread_id,checkpoint_ns:F.checkpoint_ns,checkpoint_id:F.checkpoint_id}},checkpoint:G,metadata:Q,parentConfig:F.parent_checkpoint_id?{configurable:{thread_id:F.thread_id,checkpoint_ns:F.checkpoint_ns,checkpoint_id:F.parent_checkpoint_id}}:void 0,pendingWrites:J}}async applyTTL(...F){if(!this.ttlConfig?.defaultTTL)return;let G=Math.floor(this.ttlConfig.defaultTTL*60),J=await Promise.allSettled(F.map((Q)=>this.client.expire(Q,G)));for(let Q=0;Q<J.length;Q++)if(J[Q].status==="rejected")console.warn(`Failed to set TTL for key ${F[Q]}:`,J[Q].reason)}async loadPendingWrites(F,G,J){let Q=`write_keys_zset:${F}:${G}:${J}`,X=await this.client.zRange(Q,0,-1);if(X.length===0)return;let Y=[];for(let Z of X){let _=await this.client.json.get(Z);if(_){let E=await this.serde.loadsTyped("json",JSON.stringify(_.value));Y.push([_.task_id,_.channel,E])}}return Y}checkMetadataFilterMatch(F,G){for(let[J,Q]of Object.entries(G)){let X=F?.[J];if(Q===null){if(!(J in(F||{}))||X!==null)return!1}else if(typeof Q==="object"&&!Array.isArray(Q)){if(typeof X!=="object"||X===null)return!1;if(B(Q)!==B(X))return!1}else if(X!==Q)return!1}return!0}async cleanupOldCheckpoint(F,G,J){let Q=`checkpoint_write:${F}:${G}:${J}:*`,X=await this.client.keys(Q);if(X.length>0)await this.client.del(X);let Y=`write_keys_zset:${F}:${G}:${J}`;await this.client.del(Y);let Z=`checkpoint_blob:${F}:${G}:${J}:*`,_=await this.client.keys(Z);if(_.length>0)await this.client.del(_)}sanitizeMetadata(F){if(!F)return{};let G={};for(let[J,Q]of Object.entries(F)){let X=J.replace(/\x00/g,"");G[X]=typeof Q==="string"?Q.replace(/\x00/g,""):Q}return G}async ensureIndexes(){for(let F of P)try{await this.client.ft.create(F.index,F.schema,{ON:"JSON",PREFIX:F.prefix})}catch(G){if(!G.message?.includes("Index already exists"))console.error(`Failed to create index ${F.index}:`,G.message)}}};export{N as ShallowRedisSaver};
|