@gleapai/kai-bridge 0.10.0 → 0.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/npm-shrinkwrap.json +105 -101
- package/package.json +6 -6
- package/runner/acp-runner.mjs +8 -2
- package/runner/lib/acp/harnesses.mjs +15 -1
- package/runner/lib/acp/mapper.mjs +12 -0
- package/runner/lib/acp/transcripts.mjs +41 -0
- package/runner/tools/patch-claude-acp.mjs +1 -1
- package/src/harnesses.mjs +1 -1
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gleapai/kai-bridge",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.1",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@gleapai/kai-bridge",
|
|
9
|
-
"version": "0.10.
|
|
9
|
+
"version": "0.10.1",
|
|
10
10
|
"hasInstallScript": true,
|
|
11
11
|
"license": "MIT",
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"@agentclientprotocol/claude-agent-acp": "0.
|
|
14
|
-
"@agentclientprotocol/codex-acp": "1.
|
|
15
|
-
"@agentclientprotocol/sdk": "1.
|
|
16
|
-
"@anthropic-ai/claude-agent-sdk": "0.3.
|
|
17
|
-
"@openai/codex": "0.
|
|
13
|
+
"@agentclientprotocol/claude-agent-acp": "0.81.1",
|
|
14
|
+
"@agentclientprotocol/codex-acp": "1.13.1",
|
|
15
|
+
"@agentclientprotocol/sdk": "1.5.0",
|
|
16
|
+
"@anthropic-ai/claude-agent-sdk": "0.3.280",
|
|
17
|
+
"@openai/codex": "0.156.1",
|
|
18
18
|
"@playwright/mcp": "^0.0.79",
|
|
19
19
|
"@sockudo/client": "^2.0.0",
|
|
20
20
|
"chokidar": "^4.0.1",
|
|
@@ -35,14 +35,14 @@
|
|
|
35
35
|
"license": "Apache-2.0"
|
|
36
36
|
},
|
|
37
37
|
"node_modules/@agentclientprotocol/claude-agent-acp": {
|
|
38
|
-
"version": "0.
|
|
39
|
-
"resolved": "https://registry.npmjs.org/@agentclientprotocol/claude-agent-acp/-/claude-agent-acp-0.
|
|
40
|
-
"integrity": "sha512-
|
|
38
|
+
"version": "0.81.1",
|
|
39
|
+
"resolved": "https://registry.npmjs.org/@agentclientprotocol/claude-agent-acp/-/claude-agent-acp-0.81.1.tgz",
|
|
40
|
+
"integrity": "sha512-I+7tUPsrYnI0nBmdUonoRmdCi7ohyzZ0SeCpeIUFuVZ7a8ZxDyUNO6zBJpaeAIwuPXCk8aw+7t+QiwXS6FwskQ==",
|
|
41
41
|
"license": "Apache-2.0",
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@agentclientprotocol/sdk": "1.
|
|
44
|
-
"@anthropic-ai/claude-agent-sdk": "0.3.
|
|
45
|
-
"zod": "
|
|
43
|
+
"@agentclientprotocol/sdk": "1.5.0",
|
|
44
|
+
"@anthropic-ai/claude-agent-sdk": "0.3.280",
|
|
45
|
+
"zod": "4.6.5"
|
|
46
46
|
},
|
|
47
47
|
"bin": {
|
|
48
48
|
"claude-agent-acp": "dist/index.js"
|
|
@@ -52,13 +52,13 @@
|
|
|
52
52
|
}
|
|
53
53
|
},
|
|
54
54
|
"node_modules/@agentclientprotocol/codex-acp": {
|
|
55
|
-
"version": "1.
|
|
56
|
-
"resolved": "https://registry.npmjs.org/@agentclientprotocol/codex-acp/-/codex-acp-1.
|
|
57
|
-
"integrity": "sha512-
|
|
55
|
+
"version": "1.13.1",
|
|
56
|
+
"resolved": "https://registry.npmjs.org/@agentclientprotocol/codex-acp/-/codex-acp-1.13.1.tgz",
|
|
57
|
+
"integrity": "sha512-NAbXTb6GRReox7B+8RN9VRB+sKUqFJh5Vg7Ex7RskYCO8EsYPJKN1WJvN7mOqjCKKK9lVDrNxtP7Bp/OUKPyAg==",
|
|
58
58
|
"license": "Apache-2.0",
|
|
59
59
|
"dependencies": {
|
|
60
|
-
"@agentclientprotocol/sdk": "^1.
|
|
61
|
-
"@openai/codex": "^0.
|
|
60
|
+
"@agentclientprotocol/sdk": "^1.5.0",
|
|
61
|
+
"@openai/codex": "^0.156.1",
|
|
62
62
|
"diff": "^9.0.0",
|
|
63
63
|
"open": "^11.0.1",
|
|
64
64
|
"vscode-jsonrpc": "^9.0.1",
|
|
@@ -69,31 +69,31 @@
|
|
|
69
69
|
}
|
|
70
70
|
},
|
|
71
71
|
"node_modules/@agentclientprotocol/sdk": {
|
|
72
|
-
"version": "1.
|
|
73
|
-
"resolved": "https://registry.npmjs.org/@agentclientprotocol/sdk/-/sdk-1.
|
|
74
|
-
"integrity": "sha512
|
|
72
|
+
"version": "1.5.0",
|
|
73
|
+
"resolved": "https://registry.npmjs.org/@agentclientprotocol/sdk/-/sdk-1.5.0.tgz",
|
|
74
|
+
"integrity": "sha512-524jwbB2iYWA+kWWyv9fhKbhU89dH/lu9u5EXwVNmfYzopV8BujCDxByBDZhxRUkB7RWIJzISCnwivdDk+bdVg==",
|
|
75
75
|
"license": "Apache-2.0",
|
|
76
76
|
"peerDependencies": {
|
|
77
77
|
"zod": "^3.25.0 || ^4.0.0"
|
|
78
78
|
}
|
|
79
79
|
},
|
|
80
80
|
"node_modules/@anthropic-ai/claude-agent-sdk": {
|
|
81
|
-
"version": "0.3.
|
|
82
|
-
"resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk/-/claude-agent-sdk-0.3.
|
|
83
|
-
"integrity": "sha512-
|
|
81
|
+
"version": "0.3.280",
|
|
82
|
+
"resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk/-/claude-agent-sdk-0.3.280.tgz",
|
|
83
|
+
"integrity": "sha512-aIQSTKcCJcOgi125GAGQaNZUYgxbEBQwV2Ac+Utp0+gGUjIEWjTqz4B8kXr9XjkcCTYiRUMTDsXPAUfIcBDjnw==",
|
|
84
84
|
"license": "SEE LICENSE IN README.md",
|
|
85
85
|
"engines": {
|
|
86
86
|
"node": ">=18.0.0"
|
|
87
87
|
},
|
|
88
88
|
"optionalDependencies": {
|
|
89
|
-
"@anthropic-ai/claude-agent-sdk-darwin-arm64": "0.3.
|
|
90
|
-
"@anthropic-ai/claude-agent-sdk-darwin-x64": "0.3.
|
|
91
|
-
"@anthropic-ai/claude-agent-sdk-linux-arm64": "0.3.
|
|
92
|
-
"@anthropic-ai/claude-agent-sdk-linux-arm64-musl": "0.3.
|
|
93
|
-
"@anthropic-ai/claude-agent-sdk-linux-x64": "0.3.
|
|
94
|
-
"@anthropic-ai/claude-agent-sdk-linux-x64-musl": "0.3.
|
|
95
|
-
"@anthropic-ai/claude-agent-sdk-win32-arm64": "0.3.
|
|
96
|
-
"@anthropic-ai/claude-agent-sdk-win32-x64": "0.3.
|
|
89
|
+
"@anthropic-ai/claude-agent-sdk-darwin-arm64": "0.3.280",
|
|
90
|
+
"@anthropic-ai/claude-agent-sdk-darwin-x64": "0.3.280",
|
|
91
|
+
"@anthropic-ai/claude-agent-sdk-linux-arm64": "0.3.280",
|
|
92
|
+
"@anthropic-ai/claude-agent-sdk-linux-arm64-musl": "0.3.280",
|
|
93
|
+
"@anthropic-ai/claude-agent-sdk-linux-x64": "0.3.280",
|
|
94
|
+
"@anthropic-ai/claude-agent-sdk-linux-x64-musl": "0.3.280",
|
|
95
|
+
"@anthropic-ai/claude-agent-sdk-win32-arm64": "0.3.280",
|
|
96
|
+
"@anthropic-ai/claude-agent-sdk-win32-x64": "0.3.280"
|
|
97
97
|
},
|
|
98
98
|
"peerDependencies": {
|
|
99
99
|
"@anthropic-ai/sdk": ">=0.93.0",
|
|
@@ -102,9 +102,9 @@
|
|
|
102
102
|
}
|
|
103
103
|
},
|
|
104
104
|
"node_modules/@anthropic-ai/claude-agent-sdk-darwin-arm64": {
|
|
105
|
-
"version": "0.3.
|
|
106
|
-
"resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk-darwin-arm64/-/claude-agent-sdk-darwin-arm64-0.3.
|
|
107
|
-
"integrity": "sha512-
|
|
105
|
+
"version": "0.3.280",
|
|
106
|
+
"resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk-darwin-arm64/-/claude-agent-sdk-darwin-arm64-0.3.280.tgz",
|
|
107
|
+
"integrity": "sha512-Yws14X5g5hgDtF565Tld/+dILAhH9QZpundjKMyO3dFasq9miXZlhU0NwXqwTO2xP0jDjJ54zduIiJwkcfcvGw==",
|
|
108
108
|
"cpu": [
|
|
109
109
|
"arm64"
|
|
110
110
|
],
|
|
@@ -115,9 +115,9 @@
|
|
|
115
115
|
]
|
|
116
116
|
},
|
|
117
117
|
"node_modules/@anthropic-ai/claude-agent-sdk-darwin-x64": {
|
|
118
|
-
"version": "0.3.
|
|
119
|
-
"resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk-darwin-x64/-/claude-agent-sdk-darwin-x64-0.3.
|
|
120
|
-
"integrity": "sha512
|
|
118
|
+
"version": "0.3.280",
|
|
119
|
+
"resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk-darwin-x64/-/claude-agent-sdk-darwin-x64-0.3.280.tgz",
|
|
120
|
+
"integrity": "sha512-B1eLx/oZ5RL1c3a13nQ4cRUksWyhGcVNS5vbCHnOVu4Pz+dH0moZ+iY8VaE6FvikVAQwFEW6VDU00b6m3tYdsQ==",
|
|
121
121
|
"cpu": [
|
|
122
122
|
"x64"
|
|
123
123
|
],
|
|
@@ -128,9 +128,9 @@
|
|
|
128
128
|
]
|
|
129
129
|
},
|
|
130
130
|
"node_modules/@anthropic-ai/claude-agent-sdk-linux-arm64": {
|
|
131
|
-
"version": "0.3.
|
|
132
|
-
"resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk-linux-arm64/-/claude-agent-sdk-linux-arm64-0.3.
|
|
133
|
-
"integrity": "sha512-
|
|
131
|
+
"version": "0.3.280",
|
|
132
|
+
"resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk-linux-arm64/-/claude-agent-sdk-linux-arm64-0.3.280.tgz",
|
|
133
|
+
"integrity": "sha512-6s96OIvBHT2817hCFLIZ421JBpQnvrmZucpjlWsyCODKmwGsSxiEhlWqK2h5Q7lwS6F7bzeAhqjGvC7FzDl9Rw==",
|
|
134
134
|
"cpu": [
|
|
135
135
|
"arm64"
|
|
136
136
|
],
|
|
@@ -144,9 +144,9 @@
|
|
|
144
144
|
]
|
|
145
145
|
},
|
|
146
146
|
"node_modules/@anthropic-ai/claude-agent-sdk-linux-arm64-musl": {
|
|
147
|
-
"version": "0.3.
|
|
148
|
-
"resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk-linux-arm64-musl/-/claude-agent-sdk-linux-arm64-musl-0.3.
|
|
149
|
-
"integrity": "sha512-
|
|
147
|
+
"version": "0.3.280",
|
|
148
|
+
"resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk-linux-arm64-musl/-/claude-agent-sdk-linux-arm64-musl-0.3.280.tgz",
|
|
149
|
+
"integrity": "sha512-uDh+Ggjb36l+jcVgaYxSziGHmBSSR3clqvGlQ0Bgc1v5dLF4igwqZ6ZPW/hS9dArG27fislIOetH1waEgIr+GA==",
|
|
150
150
|
"cpu": [
|
|
151
151
|
"arm64"
|
|
152
152
|
],
|
|
@@ -160,9 +160,9 @@
|
|
|
160
160
|
]
|
|
161
161
|
},
|
|
162
162
|
"node_modules/@anthropic-ai/claude-agent-sdk-linux-x64": {
|
|
163
|
-
"version": "0.3.
|
|
164
|
-
"resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk-linux-x64/-/claude-agent-sdk-linux-x64-0.3.
|
|
165
|
-
"integrity": "sha512-
|
|
163
|
+
"version": "0.3.280",
|
|
164
|
+
"resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk-linux-x64/-/claude-agent-sdk-linux-x64-0.3.280.tgz",
|
|
165
|
+
"integrity": "sha512-vpPyxYLy+zNc7LwQDWsZf0GZtTYa0PJLxzuv2vK9iV2dG+hrbRNTl35NSKKRR9rMj6RpKz0i2NLyVQ+D4mREgw==",
|
|
166
166
|
"cpu": [
|
|
167
167
|
"x64"
|
|
168
168
|
],
|
|
@@ -176,9 +176,9 @@
|
|
|
176
176
|
]
|
|
177
177
|
},
|
|
178
178
|
"node_modules/@anthropic-ai/claude-agent-sdk-linux-x64-musl": {
|
|
179
|
-
"version": "0.3.
|
|
180
|
-
"resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk-linux-x64-musl/-/claude-agent-sdk-linux-x64-musl-0.3.
|
|
181
|
-
"integrity": "sha512-
|
|
179
|
+
"version": "0.3.280",
|
|
180
|
+
"resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk-linux-x64-musl/-/claude-agent-sdk-linux-x64-musl-0.3.280.tgz",
|
|
181
|
+
"integrity": "sha512-IVbIgvi5C0sdLg/p9hpiVvAQ/ikvTKwOOEy5C1aT7w8XLqBgfpJbzzVuk06df1Q0HlILUmf63EKPmq48lbxtqA==",
|
|
182
182
|
"cpu": [
|
|
183
183
|
"x64"
|
|
184
184
|
],
|
|
@@ -192,9 +192,9 @@
|
|
|
192
192
|
]
|
|
193
193
|
},
|
|
194
194
|
"node_modules/@anthropic-ai/claude-agent-sdk-win32-arm64": {
|
|
195
|
-
"version": "0.3.
|
|
196
|
-
"resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk-win32-arm64/-/claude-agent-sdk-win32-arm64-0.3.
|
|
197
|
-
"integrity": "sha512-
|
|
195
|
+
"version": "0.3.280",
|
|
196
|
+
"resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk-win32-arm64/-/claude-agent-sdk-win32-arm64-0.3.280.tgz",
|
|
197
|
+
"integrity": "sha512-heTflHwciJF+Hrf7v0J53QBzD+9mxN9gt2VVmEJAN0+ejbPcOcqnGGZHvyc9aZUuGh5INN0ECaiL4Fn1X2vXQQ==",
|
|
198
198
|
"cpu": [
|
|
199
199
|
"arm64"
|
|
200
200
|
],
|
|
@@ -205,9 +205,9 @@
|
|
|
205
205
|
]
|
|
206
206
|
},
|
|
207
207
|
"node_modules/@anthropic-ai/claude-agent-sdk-win32-x64": {
|
|
208
|
-
"version": "0.3.
|
|
209
|
-
"resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk-win32-x64/-/claude-agent-sdk-win32-x64-0.3.
|
|
210
|
-
"integrity": "sha512
|
|
208
|
+
"version": "0.3.280",
|
|
209
|
+
"resolved": "https://registry.npmjs.org/@anthropic-ai/claude-agent-sdk-win32-x64/-/claude-agent-sdk-win32-x64-0.3.280.tgz",
|
|
210
|
+
"integrity": "sha512-N+Y1zJb19nx0oPTvzkl/E3ng9AtWGW+K4hySmSHCgYSsgIwfs1YzDj/F5eHDMrxgklTuzFp76TvL3S75z5ge+g==",
|
|
211
211
|
"cpu": [
|
|
212
212
|
"x64"
|
|
213
213
|
],
|
|
@@ -218,9 +218,9 @@
|
|
|
218
218
|
]
|
|
219
219
|
},
|
|
220
220
|
"node_modules/@anthropic-ai/sdk": {
|
|
221
|
-
"version": "0.
|
|
222
|
-
"resolved": "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.
|
|
223
|
-
"integrity": "sha512-
|
|
221
|
+
"version": "0.128.0",
|
|
222
|
+
"resolved": "https://registry.npmjs.org/@anthropic-ai/sdk/-/sdk-0.128.0.tgz",
|
|
223
|
+
"integrity": "sha512-tl5cBFZC1jVFrTuQyvQObA4WmuNgcYVeXfriqOumgtLAHUm4gPUj18YnszBW60v0PrjDB8nBDOC6wd9CmHQFlA==",
|
|
224
224
|
"license": "MIT",
|
|
225
225
|
"peer": true,
|
|
226
226
|
"dependencies": {
|
|
@@ -313,9 +313,9 @@
|
|
|
313
313
|
}
|
|
314
314
|
},
|
|
315
315
|
"node_modules/@openai/codex": {
|
|
316
|
-
"version": "0.
|
|
317
|
-
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.
|
|
318
|
-
"integrity": "sha512-
|
|
316
|
+
"version": "0.156.1",
|
|
317
|
+
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.156.1.tgz",
|
|
318
|
+
"integrity": "sha512-nI1iVl/n2SO2lSvlwEsJx63zdSI4C4Me2gR7AG0OWMJiGSakz2tY2hx43E39Zq5aEoeB5bZjJXzp5Sqhog6vyA==",
|
|
319
319
|
"license": "Apache-2.0",
|
|
320
320
|
"bin": {
|
|
321
321
|
"codex": "bin/codex.js"
|
|
@@ -324,19 +324,19 @@
|
|
|
324
324
|
"node": ">=16"
|
|
325
325
|
},
|
|
326
326
|
"optionalDependencies": {
|
|
327
|
-
"@openai/codex-darwin-arm64": "npm:@openai/codex@0.
|
|
328
|
-
"@openai/codex-darwin-x64": "npm:@openai/codex@0.
|
|
329
|
-
"@openai/codex-linux-arm64": "npm:@openai/codex@0.
|
|
330
|
-
"@openai/codex-linux-x64": "npm:@openai/codex@0.
|
|
331
|
-
"@openai/codex-win32-arm64": "npm:@openai/codex@0.
|
|
332
|
-
"@openai/codex-win32-x64": "npm:@openai/codex@0.
|
|
327
|
+
"@openai/codex-darwin-arm64": "npm:@openai/codex@0.156.1-darwin-arm64",
|
|
328
|
+
"@openai/codex-darwin-x64": "npm:@openai/codex@0.156.1-darwin-x64",
|
|
329
|
+
"@openai/codex-linux-arm64": "npm:@openai/codex@0.156.1-linux-arm64",
|
|
330
|
+
"@openai/codex-linux-x64": "npm:@openai/codex@0.156.1-linux-x64",
|
|
331
|
+
"@openai/codex-win32-arm64": "npm:@openai/codex@0.156.1-win32-arm64",
|
|
332
|
+
"@openai/codex-win32-x64": "npm:@openai/codex@0.156.1-win32-x64"
|
|
333
333
|
}
|
|
334
334
|
},
|
|
335
335
|
"node_modules/@openai/codex-darwin-arm64": {
|
|
336
336
|
"name": "@openai/codex",
|
|
337
|
-
"version": "0.
|
|
338
|
-
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.
|
|
339
|
-
"integrity": "sha512-
|
|
337
|
+
"version": "0.156.1-darwin-arm64",
|
|
338
|
+
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.156.1-darwin-arm64.tgz",
|
|
339
|
+
"integrity": "sha512-Jg6wbdV+wmMZczhwE74GSxOYEZlViKXn6KyCw/yfrz3PAKFD14xljuPopmdhWC1+8IKU2WdN5fdmXNPt2q4HPA==",
|
|
340
340
|
"cpu": [
|
|
341
341
|
"arm64"
|
|
342
342
|
],
|
|
@@ -351,9 +351,9 @@
|
|
|
351
351
|
},
|
|
352
352
|
"node_modules/@openai/codex-darwin-x64": {
|
|
353
353
|
"name": "@openai/codex",
|
|
354
|
-
"version": "0.
|
|
355
|
-
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.
|
|
356
|
-
"integrity": "sha512-
|
|
354
|
+
"version": "0.156.1-darwin-x64",
|
|
355
|
+
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.156.1-darwin-x64.tgz",
|
|
356
|
+
"integrity": "sha512-BVjqNOoltWrnNUrgMRepvDIIBmd4XY+ikAE4pYVHlrwiizNlEWQuCQOTrFMJKp54LFRG8jDTjLZyYQ1QrliuOg==",
|
|
357
357
|
"cpu": [
|
|
358
358
|
"x64"
|
|
359
359
|
],
|
|
@@ -368,9 +368,9 @@
|
|
|
368
368
|
},
|
|
369
369
|
"node_modules/@openai/codex-linux-arm64": {
|
|
370
370
|
"name": "@openai/codex",
|
|
371
|
-
"version": "0.
|
|
372
|
-
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.
|
|
373
|
-
"integrity": "sha512-
|
|
371
|
+
"version": "0.156.1-linux-arm64",
|
|
372
|
+
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.156.1-linux-arm64.tgz",
|
|
373
|
+
"integrity": "sha512-sTEHk31C12dqzJdjZ2u9KLFCXKL04KyCM+QheSjdQI8uzmVJS7aEF2/qAqFxXwk/jwMzC9u7IihfoIlAGR6YsA==",
|
|
374
374
|
"cpu": [
|
|
375
375
|
"arm64"
|
|
376
376
|
],
|
|
@@ -385,9 +385,9 @@
|
|
|
385
385
|
},
|
|
386
386
|
"node_modules/@openai/codex-linux-x64": {
|
|
387
387
|
"name": "@openai/codex",
|
|
388
|
-
"version": "0.
|
|
389
|
-
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.
|
|
390
|
-
"integrity": "sha512-
|
|
388
|
+
"version": "0.156.1-linux-x64",
|
|
389
|
+
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.156.1-linux-x64.tgz",
|
|
390
|
+
"integrity": "sha512-2ePo0wgOcnONKsuzp8vBjOmNY+IdsKaouaDDIdiKq9HOWNuV/GI22OeXft2A/1GaoL71ictO0/pLAsCEnQ6wew==",
|
|
391
391
|
"cpu": [
|
|
392
392
|
"x64"
|
|
393
393
|
],
|
|
@@ -402,9 +402,9 @@
|
|
|
402
402
|
},
|
|
403
403
|
"node_modules/@openai/codex-win32-arm64": {
|
|
404
404
|
"name": "@openai/codex",
|
|
405
|
-
"version": "0.
|
|
406
|
-
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.
|
|
407
|
-
"integrity": "sha512
|
|
405
|
+
"version": "0.156.1-win32-arm64",
|
|
406
|
+
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.156.1-win32-arm64.tgz",
|
|
407
|
+
"integrity": "sha512-e5DsyOHlKWulTBz/neIczpcYLQDqtaLtBj2lgncOgeQw5mlAQVZHlGvKsoKVcEPUKLb8opIMJBxXi6cz3JJ4hg==",
|
|
408
408
|
"cpu": [
|
|
409
409
|
"arm64"
|
|
410
410
|
],
|
|
@@ -419,9 +419,9 @@
|
|
|
419
419
|
},
|
|
420
420
|
"node_modules/@openai/codex-win32-x64": {
|
|
421
421
|
"name": "@openai/codex",
|
|
422
|
-
"version": "0.
|
|
423
|
-
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.
|
|
424
|
-
"integrity": "sha512-
|
|
422
|
+
"version": "0.156.1-win32-x64",
|
|
423
|
+
"resolved": "https://registry.npmjs.org/@openai/codex/-/codex-0.156.1-win32-x64.tgz",
|
|
424
|
+
"integrity": "sha512-MJyLxbBs2zzp5kbaR/99Zwe7SmbrwUkveTcT+ayYlO48V0nYh0eU+h2lalBwvC7VJ/ya/bXnUtISJfJKhGCD/g==",
|
|
425
425
|
"cpu": [
|
|
426
426
|
"x64"
|
|
427
427
|
],
|
|
@@ -1068,9 +1068,9 @@
|
|
|
1068
1068
|
"peer": true
|
|
1069
1069
|
},
|
|
1070
1070
|
"node_modules/fast-uri": {
|
|
1071
|
-
"version": "3.1.
|
|
1072
|
-
"resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.
|
|
1073
|
-
"integrity": "sha512-
|
|
1071
|
+
"version": "3.1.8",
|
|
1072
|
+
"resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.8.tgz",
|
|
1073
|
+
"integrity": "sha512-GZMtZUTNRpOVIECoXwLNZS5xUGE+mVNbTB8h/7Rwh2TFWcBQiPzTgyZi05BF9UMZKkLJv8XBRJTlU7zg8+ZfMg==",
|
|
1074
1074
|
"funding": [
|
|
1075
1075
|
{
|
|
1076
1076
|
"type": "github",
|
|
@@ -1235,9 +1235,9 @@
|
|
|
1235
1235
|
}
|
|
1236
1236
|
},
|
|
1237
1237
|
"node_modules/hono": {
|
|
1238
|
-
"version": "4.13.
|
|
1239
|
-
"resolved": "https://registry.npmjs.org/hono/-/hono-4.13.
|
|
1240
|
-
"integrity": "sha512
|
|
1238
|
+
"version": "4.13.8",
|
|
1239
|
+
"resolved": "https://registry.npmjs.org/hono/-/hono-4.13.8.tgz",
|
|
1240
|
+
"integrity": "sha512-/Gng7NfoykZl2pjukW5Z6+8Yxm3BPRf86GTbQnt0SbySkvax4fyL4H3HhY1cCpBGmiW9XDRFzRV+CXK2W8QudQ==",
|
|
1241
1241
|
"license": "MIT",
|
|
1242
1242
|
"peer": true,
|
|
1243
1243
|
"engines": {
|
|
@@ -1290,9 +1290,9 @@
|
|
|
1290
1290
|
"peer": true
|
|
1291
1291
|
},
|
|
1292
1292
|
"node_modules/ip-address": {
|
|
1293
|
-
"version": "10.7.
|
|
1294
|
-
"resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.7.
|
|
1295
|
-
"integrity": "sha512-
|
|
1293
|
+
"version": "10.7.2",
|
|
1294
|
+
"resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.7.2.tgz",
|
|
1295
|
+
"integrity": "sha512-7H/2gFSIitxc0hG3nOI1glS8QLo/EHBFFLk8vEUjXY/xu0AdL8jZ9U1IzO2PUm0d2D/ofQcAifb0g6OBkt8U7w==",
|
|
1296
1296
|
"license": "MIT",
|
|
1297
1297
|
"peer": true,
|
|
1298
1298
|
"engines": {
|
|
@@ -1702,9 +1702,9 @@
|
|
|
1702
1702
|
}
|
|
1703
1703
|
},
|
|
1704
1704
|
"node_modules/proxy-addr": {
|
|
1705
|
-
"version": "2.0.
|
|
1706
|
-
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.
|
|
1707
|
-
"integrity": "sha512-
|
|
1705
|
+
"version": "2.0.8",
|
|
1706
|
+
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.8.tgz",
|
|
1707
|
+
"integrity": "sha512-5nnx0yGyVUcY6t9RnWcARWtwT9F1D8O9rt08htPvnd49W1IgZtmLkhu9WfMzQj1cFxjHIO6connUNVW5k7AVyQ==",
|
|
1708
1708
|
"license": "MIT",
|
|
1709
1709
|
"peer": true,
|
|
1710
1710
|
"dependencies": {
|
|
@@ -1713,6 +1713,10 @@
|
|
|
1713
1713
|
},
|
|
1714
1714
|
"engines": {
|
|
1715
1715
|
"node": ">= 0.10"
|
|
1716
|
+
},
|
|
1717
|
+
"funding": {
|
|
1718
|
+
"type": "opencollective",
|
|
1719
|
+
"url": "https://opencollective.com/express"
|
|
1716
1720
|
}
|
|
1717
1721
|
},
|
|
1718
1722
|
"node_modules/qs": {
|
|
@@ -2174,9 +2178,9 @@
|
|
|
2174
2178
|
}
|
|
2175
2179
|
},
|
|
2176
2180
|
"node_modules/zod": {
|
|
2177
|
-
"version": "4.
|
|
2178
|
-
"resolved": "https://registry.npmjs.org/zod/-/zod-4.
|
|
2179
|
-
"integrity": "sha512-
|
|
2181
|
+
"version": "4.6.5",
|
|
2182
|
+
"resolved": "https://registry.npmjs.org/zod/-/zod-4.6.5.tgz",
|
|
2183
|
+
"integrity": "sha512-v5l/aFXZQeai4awLbOpSoHecE9UiMrnfx75tEXLjNonXVARxQ5mOeipTjROUchszUNCqnE+hqAMujRsRHsut2Q==",
|
|
2180
2184
|
"license": "MIT",
|
|
2181
2185
|
"funding": {
|
|
2182
2186
|
"url": "https://github.com/sponsors/colinhacks"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gleapai/kai-bridge",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.1",
|
|
4
4
|
"description": "Kai Code Bridge runs Kai Code on your computer or server with your own coding subscriptions and local previews.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -28,16 +28,16 @@
|
|
|
28
28
|
"postpack": "node scripts/prepare-release.mjs --clean"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@agentclientprotocol/claude-agent-acp": "0.
|
|
32
|
-
"@agentclientprotocol/codex-acp": "1.
|
|
33
|
-
"@agentclientprotocol/sdk": "1.
|
|
31
|
+
"@agentclientprotocol/claude-agent-acp": "0.81.1",
|
|
32
|
+
"@agentclientprotocol/codex-acp": "1.13.1",
|
|
33
|
+
"@agentclientprotocol/sdk": "1.5.0",
|
|
34
34
|
"@playwright/mcp": "^0.0.79",
|
|
35
35
|
"@sockudo/client": "^2.0.0",
|
|
36
36
|
"chokidar": "^4.0.1",
|
|
37
37
|
"ws": "^8.21.3",
|
|
38
38
|
"yaml": "^2.9.0",
|
|
39
|
-
"@openai/codex": "0.
|
|
40
|
-
"@anthropic-ai/claude-agent-sdk": "0.3.
|
|
39
|
+
"@openai/codex": "0.156.1",
|
|
40
|
+
"@anthropic-ai/claude-agent-sdk": "0.3.280"
|
|
41
41
|
},
|
|
42
42
|
"overrides": {
|
|
43
43
|
"@anthropic-ai/claude-agent-sdk": "$@anthropic-ai/claude-agent-sdk"
|
package/runner/acp-runner.mjs
CHANGED
|
@@ -642,6 +642,10 @@ async function main() {
|
|
|
642
642
|
!!SESSION_ID &&
|
|
643
643
|
!!init.agentCapabilities?.sessionCapabilities?.resume &&
|
|
644
644
|
(HARNESS.hasResumableSession ? HARNESS.hasResumableSession(ctx) : true);
|
|
645
|
+
// What the session's earlier turns already cost (Claude: the total the
|
|
646
|
+
// transcript saved — a resumed query's cost figure continues from it).
|
|
647
|
+
// Read before the resume appends this turn's record.
|
|
648
|
+
const priorTurnsCostUsd = canResume ? Number(HARNESS.priorTurnsCostUsd?.(ctx)) || 0 : 0;
|
|
645
649
|
let sessionResponse;
|
|
646
650
|
let resumed = false;
|
|
647
651
|
if (canResume) {
|
|
@@ -777,9 +781,11 @@ async function main() {
|
|
|
777
781
|
);
|
|
778
782
|
}
|
|
779
783
|
// The adapter's USD is the CLI's own figure — authoritative on the
|
|
780
|
-
// native Anthropic wire only; gateway turns are priced from tokens.
|
|
784
|
+
// native Anthropic wire only; gateway turns are priced from tokens. On a
|
|
785
|
+
// resumed session it is the conversation's running total (Agent SDK
|
|
786
|
+
// 0.3.280), so only the part above the saved prior total is this turn's.
|
|
781
787
|
if (typeof finished.usage?.costUsd === "number" && HARNESS_ID === "claude" && isNativeAnthropic(MODEL)) {
|
|
782
|
-
tracker.setProviderCostUsd(finished.usage.costUsd);
|
|
788
|
+
tracker.setProviderCostUsd(Math.max(0, finished.usage.costUsd - (resumed ? priorTurnsCostUsd : 0)));
|
|
783
789
|
}
|
|
784
790
|
|
|
785
791
|
const suggestionWaitStarted = Date.now();
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
import { existsSync, mkdirSync, realpathSync, writeFileSync } from "node:fs";
|
|
12
12
|
import { dirname, join } from "node:path";
|
|
13
13
|
|
|
14
|
-
import { findClaudeTranscript, findCodexRollout, readClaudeTurnUsage, readCodexTurnUsage } from "./transcripts.mjs";
|
|
14
|
+
import { findClaudeTranscript, findCodexRollout, readClaudePriorCostUsd, readClaudeTurnUsage, readCodexTurnUsage } from "./transcripts.mjs";
|
|
15
15
|
import { isClaudeAcpPatched } from "../../tools/patch-claude-acp.mjs";
|
|
16
16
|
|
|
17
17
|
export const HARNESS_IDS = ["claude", "codex", "cursor"];
|
|
@@ -242,6 +242,14 @@ export const HARNESSES = {
|
|
|
242
242
|
// Drops the CLI's per-run dynamic sections (cwd listing, date …)
|
|
243
243
|
// so the cached prefix stays byte-stable across turns.
|
|
244
244
|
excludeDynamicSections: true,
|
|
245
|
+
// Render the append fresh on every launch. Agent SDKs after 0.3.258
|
|
246
|
+
// (0.3.266 and 0.3.280 checked) record the first launch's system
|
|
247
|
+
// prompt in the transcript by default and replay it on resume,
|
|
248
|
+
// IGNORING a different `append` until compaction — a plan → build
|
|
249
|
+
// resume would keep the plan turn's guards and lose the git
|
|
250
|
+
// hand-off rule (verified live on 0.3.280: a resumed turn answered
|
|
251
|
+
// from the previous turn's project instructions).
|
|
252
|
+
snapshot: false,
|
|
245
253
|
},
|
|
246
254
|
claudeCode: {
|
|
247
255
|
options: {
|
|
@@ -297,6 +305,12 @@ export const HARNESSES = {
|
|
|
297
305
|
sessionModePreference: (ctx) => (ctx.isPlanMode ? ["plan"] : ctx.isArtifactWriter ? ["dontAsk", "plan"] : ["bypassPermissions", "acceptEdits", "default"]),
|
|
298
306
|
/** A prior turn's transcript on disk is what makes `resume` viable. */
|
|
299
307
|
hasResumableSession: (ctx) => !!findClaudeTranscript(ctx.configDir, ctx.workDir, ctx.resumeSessionId),
|
|
308
|
+
/**
|
|
309
|
+
* USD the session's earlier turns already cost, as the CLI saved it —
|
|
310
|
+
* a resumed query's cost figure continues from it (see
|
|
311
|
+
* readClaudePriorCostUsd). Read BEFORE session/resume.
|
|
312
|
+
*/
|
|
313
|
+
priorTurnsCostUsd: (ctx) => readClaudePriorCostUsd({ configDir: ctx.configDir, cwd: ctx.workDir, sessionId: ctx.resumeSessionId }),
|
|
300
314
|
/** Billing-grade usage for the turn from the CLI's own transcript. */
|
|
301
315
|
collectTurnUsage: (ctx) =>
|
|
302
316
|
readClaudeTurnUsage({
|
|
@@ -47,6 +47,14 @@ export function toolNameFromUpdate(update) {
|
|
|
47
47
|
meta.codex?.tool ??
|
|
48
48
|
meta.toolName;
|
|
49
49
|
if (typeof fromMeta === "string" && fromMeta) return fromMeta;
|
|
50
|
+
// ACP's own tool `name` is all that names an ExitPlanMode /
|
|
51
|
+
// AskUserQuestion PERMISSION REQUEST — claude-agent-acp sends that
|
|
52
|
+
// toolCall without `_meta.claudeCode`. Read as a generic "SwitchMode",
|
|
53
|
+
// the policy approved the plan whenever the request beat the hand-off's
|
|
54
|
+
// cancel (`exit-plan-clear-auto`, seen live on 0.81.1).
|
|
55
|
+
// Trusted for these turn-ending names only: codex-acp's generic ones
|
|
56
|
+
// (`exec_command`, `request_permissions`, …) keep the mapping below.
|
|
57
|
+
if (update?.name === EXIT_PLAN_TOOL || update?.name === "AskUserQuestion") return update.name;
|
|
50
58
|
// codex-acp encodes MCP tool calls as `rawInput: {server, tool,
|
|
51
59
|
// arguments}` under kind "execute" — without this they'd render as a
|
|
52
60
|
// Bash row, and the ask_user question bridge would never be detected.
|
|
@@ -564,6 +572,10 @@ export function createAcpMapper({ emit, isPlanMode = false, onTurnShouldEnd, onC
|
|
|
564
572
|
return pick("reject_once") ?? pick("reject_always") ?? "__reject__";
|
|
565
573
|
}
|
|
566
574
|
if (handleTurnEndingTool(name, input)) return null;
|
|
575
|
+
// A question / plan hand-off without a usable payload is still never
|
|
576
|
+
// approved: allowing ExitPlanMode would start the build inside the
|
|
577
|
+
// plan turn. Cancelling denies just this call.
|
|
578
|
+
if (isTurnEndingTool(name)) return null;
|
|
567
579
|
if (!allowTool(name, input)) {
|
|
568
580
|
emit({
|
|
569
581
|
type: "tool_status",
|
|
@@ -148,6 +148,47 @@ export function readClaudeTurnUsage({ configDir, cwd, sessionId, sinceTs }) {
|
|
|
148
148
|
return { path, rows: parseClaudeTranscript(readFileSync(path, "utf8"), { sinceTs }) };
|
|
149
149
|
}
|
|
150
150
|
|
|
151
|
+
/**
|
|
152
|
+
* The session's cumulative USD as Claude Code saved it: the LAST
|
|
153
|
+
* `{"type":"cost-state","totalCostUSD":…}` line (written after each turn
|
|
154
|
+
* by CLI 2.1.280; absent from older transcripts). 0 when there is none.
|
|
155
|
+
*/
|
|
156
|
+
export function lastClaudeCostState(text) {
|
|
157
|
+
let total = 0;
|
|
158
|
+
for (const line of String(text || "").split(/\r?\n/)) {
|
|
159
|
+
if (!line.includes('"cost-state"')) continue;
|
|
160
|
+
let obj;
|
|
161
|
+
try {
|
|
162
|
+
obj = JSON.parse(line);
|
|
163
|
+
} catch {
|
|
164
|
+
continue;
|
|
165
|
+
}
|
|
166
|
+
if (obj?.type === "cost-state" && typeof obj.totalCostUSD === "number" && Number.isFinite(obj.totalCostUSD)) {
|
|
167
|
+
total = Math.max(0, obj.totalCostUSD);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return total;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
/**
|
|
174
|
+
* What the session's earlier turns already cost. A resumed query's
|
|
175
|
+
* `total_cost_usd` — the adapter's `usage_update.cost` — "continues from
|
|
176
|
+
* the total its transcript saved" (Agent SDK 0.3.280; 0.3.258 started
|
|
177
|
+
* resumed sessions at 0), so without subtracting this every resumed turn
|
|
178
|
+
* reports the whole conversation's cost. Must be read BEFORE the resume:
|
|
179
|
+
* the turn appends its own record.
|
|
180
|
+
*/
|
|
181
|
+
export function readClaudePriorCostUsd({ configDir, cwd, sessionId }) {
|
|
182
|
+
if (!sessionId) return 0;
|
|
183
|
+
const path = findClaudeTranscript(configDir, cwd, sessionId);
|
|
184
|
+
if (!path) return 0;
|
|
185
|
+
try {
|
|
186
|
+
return lastClaudeCostState(readFileSync(path, "utf8"));
|
|
187
|
+
} catch {
|
|
188
|
+
return 0;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
151
192
|
// ── Codex ──────────────────────────────────────────────────────────────
|
|
152
193
|
|
|
153
194
|
/**
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// `prompt_suggestion` message (the predicted next user prompt Claude
|
|
4
4
|
// Code shows as ghost text in its own composer) reaches the runner.
|
|
5
5
|
//
|
|
6
|
-
// Upstream (≤ 0.
|
|
6
|
+
// Upstream (≤ 0.81.1) drops the message on the floor — `case
|
|
7
7
|
// "prompt_suggestion": break;` — because ACP has no update kind for it.
|
|
8
8
|
// We forward it as a `session_info_update` carrying `_meta.kai
|
|
9
9
|
// .promptSuggestion` (ACP's sanctioned extension point; the SDK's
|
package/src/harnesses.mjs
CHANGED
|
@@ -49,7 +49,7 @@ export const HARNESS_INFO = {
|
|
|
49
49
|
const CURSOR_ROOT = (kaiHome) => join(kaiHome, "harnesses", "cursor");
|
|
50
50
|
const CURSOR_CURRENT = (kaiHome) => join(CURSOR_ROOT(kaiHome), "current");
|
|
51
51
|
/** Version + channel published by Cursor's install script (https://cursor.com/install). */
|
|
52
|
-
export const CURSOR_AGENT_VERSION = process.env.KAI_CURSOR_AGENT_VERSION || "2026.
|
|
52
|
+
export const CURSOR_AGENT_VERSION = process.env.KAI_CURSOR_AGENT_VERSION || "2026.09.18-9a7762b";
|
|
53
53
|
|
|
54
54
|
function cursorPlatform() {
|
|
55
55
|
const os = platform() === "darwin" ? "darwin" : platform() === "win32" ? "windows" : "linux";
|