@keyou007/agent-bot 0.1.10 → 0.1.11
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/CHANGELOG.md +15 -0
- package/README.md +16 -10
- package/README.zh.md +16 -10
- package/assets/agent-bot-logo.png +0 -0
- package/dist/acp/AcpSessionManager.js +78 -46
- package/dist/acp/AcpSessionManager.js.map +1 -1
- package/dist/codex/AppServerConnection.js +15 -1
- package/dist/codex/AppServerConnection.js.map +1 -1
- package/dist/codex/CodexLocalActivityDetector.js +4 -1
- package/dist/codex/CodexLocalActivityDetector.js.map +1 -1
- package/dist/codex/CodexProcessManager.js +1 -0
- package/dist/codex/CodexProcessManager.js.map +1 -1
- package/dist/codex/CodexRuntime.js +77 -2
- package/dist/codex/CodexRuntime.js.map +1 -1
- package/dist/commands/CommandRouter.js +64 -49
- package/dist/commands/CommandRouter.js.map +1 -1
- package/dist/console/ConsoleTurnPresenter.js +1 -1
- package/dist/console/ConsoleTurnPresenter.js.map +1 -1
- package/dist/feishu/CardRenderer.js +345 -11
- package/dist/feishu/CardRenderer.js.map +1 -1
- package/dist/feishu/FeishuMessageClient.js +51 -5
- package/dist/feishu/FeishuMessageClient.js.map +1 -1
- package/dist/feishu/FeishuTurnPresenter.js +8 -3
- package/dist/feishu/FeishuTurnPresenter.js.map +1 -1
- package/dist/index.js +18 -17
- package/dist/index.js.map +1 -1
- package/dist/proxy/ProxySessionController.js +589 -205
- package/dist/proxy/ProxySessionController.js.map +1 -1
- package/dist/runtime/AcpRuntimeAdapter.js +1 -0
- package/dist/runtime/AcpRuntimeAdapter.js.map +1 -1
- package/dist/runtime/AgentRuntimeRegistry.js +7 -4
- package/dist/runtime/AgentRuntimeRegistry.js.map +1 -1
- package/dist/runtime/createAgentRuntimeRegistry.js +22 -0
- package/dist/runtime/createAgentRuntimeRegistry.js.map +1 -0
- package/dist/startup/SessionMetadataHydrator.js +2 -2
- package/dist/startup/SessionMetadataHydrator.js.map +1 -1
- package/dist/startup/StartupNotifier.js +1 -0
- package/dist/startup/StartupNotifier.js.map +1 -1
- package/dist/state/StateStore.js +21 -15
- package/dist/state/StateStore.js.map +1 -1
- package/dist/supervision/SafeRestartScheduler.js +5 -0
- package/dist/supervision/SafeRestartScheduler.js.map +1 -1
- package/docs/technical-reference.md +15 -5
- package/docs/technical-reference.zh.md +15 -5
- package/npm-shrinkwrap.json +2 -2
- package/package.json +2 -1
- package/skills/agent-bot/SKILL.md +13 -3
- package/src/acp/AcpSessionManager.ts +73 -54
- package/src/codex/AppServerConnection.ts +21 -1
- package/src/codex/CodexLocalActivityDetector.ts +8 -1
- package/src/codex/CodexProcessManager.ts +1 -0
- package/src/codex/CodexRuntime.ts +91 -2
- package/src/commands/CommandRouter.ts +71 -49
- package/src/commands/commandTypes.ts +6 -11
- package/src/console/ConsoleTurnPresenter.ts +1 -1
- package/src/feishu/CardRenderer.ts +418 -11
- package/src/feishu/FeishuMessageClient.ts +66 -3
- package/src/feishu/FeishuTurnPresenter.ts +7 -2
- package/src/index.ts +21 -22
- package/src/proxy/ProxySessionController.ts +706 -208
- package/src/runtime/AcpRuntimeAdapter.ts +1 -0
- package/src/runtime/AgentRuntimeRegistry.ts +7 -6
- package/src/runtime/createAgentRuntimeRegistry.ts +25 -0
- package/src/runtime/types.ts +18 -0
- package/src/startup/SessionMetadataHydrator.ts +2 -2
- package/src/startup/StartupNotifier.ts +1 -0
- package/src/state/StateStore.ts +29 -15
- package/src/supervision/SafeRestartScheduler.ts +5 -0
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,21 @@ The project follows [Semantic Versioning](https://semver.org/).
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.1.11] - 2026-08-02
|
|
10
|
+
|
|
11
|
+
- Retry Feishu messages, replies, and card updates rejected by email-address content auditing with audit-safe text; keep message reactions pending until terminal presentation succeeds while allowing session and queue state to settle after presentation failures.
|
|
12
|
+
- Use a shorter image-only prompt that asks the active Agent to inspect the attached image.
|
|
13
|
+
- Reduce the packaged project logo size without changing the documented asset path.
|
|
14
|
+
- Keep `/new` and `/newgroup` project options aligned: both support `--dir <cwd>` with `~`-based home-directory paths and `--nodir` for a forced Projectless Codex task, while `/newgroup` continues to inherit execution settings from the source task.
|
|
15
|
+
- Send `excludeTurns: true` by default for every Codex fork, reducing response size without removing branch history, and retry once without the experimental field when an older App Server explicitly rejects it.
|
|
16
|
+
- Remove obsolete `/mode`, `/modes`, `/ask`, `/agents`, and `/use` commands, consolidating Agent selection under `/agent`.
|
|
17
|
+
- Omit the `[Projectless]` segment from `/newgroup` and `/forkgroup` group names while preserving Projectless task behavior.
|
|
18
|
+
- Add a unified execution-settings card with Provider, Model, Thinking, and Permission tabs plus an Agent tab when multiple agents are configured; route multi-option Agent and Provider selection through the same card, report their current value directly when no alternative exists, persist and inherit Provider across task lifecycle operations, and leave new tasks on the Codex-configured default Provider.
|
|
19
|
+
- Make Feishu `/restart` schedule a safe restart by default, with `/restart --force` as the only immediate-restart form.
|
|
20
|
+
- Preserve Windows separators before dot-prefixed directories in Feishu file-change summaries instead of letting Markdown consume the separator as an escape.
|
|
21
|
+
- Isolate every configured Agent by standard name with its own process and runtime connection, aggregate Codex tasks across those isolated runtimes, and scope persisted remote task identities by Agent.
|
|
22
|
+
- Add the Agent Bot logo to both READMEs and include the high-resolution PNG in the npm package.
|
|
23
|
+
|
|
9
24
|
## [0.1.10] - 2026-08-01
|
|
10
25
|
|
|
11
26
|
- Open a filtered Feishu Developer Console permission page for manual `im:message.group_msg` setup instead of incorrectly including the unsupported scope in one-click configuration; allow `Y` to skip its wait and report the resulting mention-only group behavior.
|
package/README.md
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="assets/agent-bot-logo.png" alt="Agent Bot logo" width="180">
|
|
3
|
+
</p>
|
|
4
|
+
|
|
1
5
|
# Agent Bot
|
|
2
6
|
|
|
3
7
|
Use local Codex and ACP agents directly from Feishu.
|
|
@@ -160,30 +164,32 @@ Plain text continues the current task. Messages beginning with `/` are commands.
|
|
|
160
164
|
| `/queue <prompt>` | Queue a separate follow-up Prompt |
|
|
161
165
|
| `/nosteer <prompt>` | Same as `/queue` |
|
|
162
166
|
| `/goal [objective]` | View or manage a persistent Goal |
|
|
163
|
-
| `/
|
|
164
|
-
| `/
|
|
165
|
-
| `/
|
|
166
|
-
| `/
|
|
167
|
+
| `/provider` | Open execution settings on the Provider tab |
|
|
168
|
+
| `/model` | Open execution settings on the Model tab |
|
|
169
|
+
| `/thinking` | Open execution settings on the Thinking tab |
|
|
170
|
+
| `/permissions` | Open execution settings on the Permission tab |
|
|
171
|
+
| `/newgroup [title] [--dir <cwd> \| --nodir]` | Create a private group for a new task |
|
|
167
172
|
| `/forkgroup [title]` | Fork the current position into a private group |
|
|
168
|
-
| `/agent [name]` |
|
|
169
|
-
| `/use <agent> [cwd]` | Select an agent and create a task |
|
|
173
|
+
| `/agent [name]` | Open Agent settings or select the default Agent |
|
|
170
174
|
| `! <command>` | Run a local command in the task directory |
|
|
171
|
-
| `/restart`
|
|
175
|
+
| `/restart [--force]` | Restart safely, or immediately with `--force` |
|
|
172
176
|
| `/help` | Show in-chat help |
|
|
173
177
|
|
|
174
178
|
Slash commands accept any unique prefix, and compound commands accept registered initialisms: `/sess` runs `/sessions`, `/fg` runs `/forkgroup`, `/ng` runs `/newgroup`, and `/ns` runs `/nosteer`. Exact command names take priority. An ambiguous prefix such as `/s` or `/f` is rejected and reports every matching command.
|
|
175
179
|
|
|
180
|
+
`/agent`, `/provider`, `/model`, `/thinking`, and `/permissions` use the same execution-settings card when there is something to select. When more than one Agent is configured, the card adds an Agent tab for selecting the default Agent used by future tasks; `/agent` opens that tab, including when the chat has no current task. With only one configured Agent, `/agent` reports the current Agent directly instead. Existing tasks keep their original Agent, and tasks using different Agents run independently. `/agent <name>` remains available for direct selection. `/provider` likewise reports the current Provider directly when no alternative Provider is configured. The other four commands activate their matching tabs and do not accept arguments. A task created without inherited settings uses the default Provider from your Codex configuration.
|
|
181
|
+
|
|
176
182
|
Private chats, group timelines, and threads keep separate current tasks. You can send an image by itself or together with text. While a task is running, plain text adds instructions to the current work; use `/queue` (or `/nosteer`) to always create a later turn.
|
|
177
183
|
|
|
178
184
|
The `/sessions` card provides `NewGroup` and `ForkGroup` actions for each task, so you can create a project-matched group or fork a selected task directly into a new group.
|
|
179
185
|
|
|
180
186
|
Inside a thread, `/forkgroup` forks from the thread's original turn until the thread task completes its own turn. After that, it forks from the thread task's latest completed turn. A currently running turn is never used as a fork point.
|
|
181
187
|
|
|
182
|
-
After `/forkgroup` creates the new group, its welcome message shows the forked task's current model, reasoning effort, and permission type.
|
|
188
|
+
After `/forkgroup` creates the new group, its welcome message shows the forked task's current Provider, model, reasoning effort, and permission type.
|
|
183
189
|
|
|
184
|
-
`/newgroup` immediately creates
|
|
190
|
+
`/new` and `/newgroup` accept the same project options. Pass `--dir <cwd>` to override the inherited project directory, or `--nodir` to force a Projectless Codex task; the two options are mutually exclusive. `~`, `~/...`, and `~\...` resolve from the current user's home directory for both commands. `/newgroup` immediately creates and binds the task in the new group while continuing to inherit the current task's Provider, model, reasoning effort, and permission mode without affecting the source task. If there is no current task, Agent Bot uses the selected agent and its runtime defaults. An explicit title becomes both the group suffix and the task title.
|
|
185
191
|
|
|
186
|
-
When `/newgroup` omits the title, the task title is `新任务` and the default group name is `[agent] [project dir] 新任务 (mm-dd)`. When `/forkgroup` omits the title, its task and group name use the same persistent `source title(分支 N)` sequence as `/fork`, without a date suffix. Feishu group names created by `/newgroup` and `/forkgroup` are capped at 60 displayed characters. When a generated name is too long, Agent Bot truncates only the title portion in the group name; the task title itself stays unchanged.
|
|
192
|
+
When `/newgroup` omits the title, the task title is `新任务` and the default group name is `[agent] [project dir] 新任务 (mm-dd)`. Projectless groups omit the project segment entirely, using `[agent] title`. When `/forkgroup` omits the title, its task and group name use the same persistent `source title(分支 N)` sequence as `/fork`, without a date suffix. Feishu group names created by `/newgroup` and `/forkgroup` are capped at 60 displayed characters. When a generated name is too long, Agent Bot truncates only the title portion in the group name; the task title itself stays unchanged.
|
|
187
193
|
|
|
188
194
|
Renaming a bound group to `[agent] [project dir] title` synchronizes only `title` to the current task. The Agent and project-directory prefixes remain group metadata and are never included in the Codex task title. The older `[agent] title` format remains supported.
|
|
189
195
|
|
package/README.zh.md
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="assets/agent-bot-logo.png" alt="Agent Bot Logo" width="180">
|
|
3
|
+
</p>
|
|
4
|
+
|
|
1
5
|
# Agent Bot
|
|
2
6
|
|
|
3
7
|
通过飞书使用本机上的 Codex 和 ACP Agent。
|
|
@@ -160,30 +164,32 @@ agent-bot task stop <任务>
|
|
|
160
164
|
| `/queue <prompt>` | 排队一个独立的后续 Prompt |
|
|
161
165
|
| `/nosteer <prompt>` | 与 `/queue` 相同 |
|
|
162
166
|
| `/goal [目标]` | 查看或管理持久 Goal |
|
|
163
|
-
| `/
|
|
164
|
-
| `/
|
|
165
|
-
| `/
|
|
166
|
-
| `/
|
|
167
|
+
| `/provider` | 打开运行设置的 Provider tab |
|
|
168
|
+
| `/model` | 打开运行设置的 Model tab |
|
|
169
|
+
| `/thinking` | 打开运行设置的 Thinking tab |
|
|
170
|
+
| `/permissions` | 打开运行设置的 Permission tab |
|
|
171
|
+
| `/newgroup [标题] [--dir <cwd> \| --nodir]` | 为新任务创建私有群 |
|
|
167
172
|
| `/forkgroup [标题]` | 将当前位置分支到私有群 |
|
|
168
|
-
| `/agent [名称]` |
|
|
169
|
-
| `/use <agent> [cwd]` | 选择 Agent 并创建任务 |
|
|
173
|
+
| `/agent [名称]` | 打开 Agent 设置或切换默认 Agent |
|
|
170
174
|
| `! <命令>` | 在任务目录执行本地命令 |
|
|
171
|
-
| `/restart`
|
|
175
|
+
| `/restart [--force]` | 默认安全重启;`--force` 立即重启 |
|
|
172
176
|
| `/help` | 显示聊天内帮助 |
|
|
173
177
|
|
|
174
178
|
斜杠命令支持任意唯一前缀,复合命令还支持首字母缩写:`/sess` 等同于 `/sessions`,`/fg` 等同于 `/forkgroup`,`/ng` 等同于 `/newgroup`,`/ns` 等同于 `/nosteer`。完整命令名优先;`/s`、`/f` 等匹配多个命令的前缀会被拒绝,并列出全部候选命令。
|
|
175
179
|
|
|
180
|
+
`/agent`、`/provider`、`/model`、`/thinking` 和 `/permissions` 在存在可选项时使用同一张运行设置卡片。配置了多个 Agent 时,卡片会增加 Agent tab,用于选择后续新任务使用的默认 Agent;即使当前聊天还没有任务,`/agent` 也能打开该 tab。只配置一个 Agent 时,`/agent` 直接显示当前 Agent,不打开卡片。现有任务仍保持原来的 Agent,使用不同 Agent 的任务可以相互独立地运行。`/agent <名称>` 继续支持直接选择。没有可切换的 Provider 时,`/provider` 同样只显示当前 Provider。其余四个命令激活各自对应的 tab,且不接受参数。没有可继承设置的新任务使用 Codex 配置中的默认 Provider。
|
|
181
|
+
|
|
176
182
|
私聊、群正文和话题分别维护当前任务。可以单独发送图片,也可以同时发送文字和图片。任务运行中发送普通文字会追加指令;需要确保形成后续 turn 时使用 `/queue`(或 `/nosteer`)。
|
|
177
183
|
|
|
178
184
|
`/sessions` 卡片为每个任务提供 `NewGroup` 和 `ForkGroup` 操作,可直接按所选任务创建同项目的新群,或把所选任务 Fork 到新群。
|
|
179
185
|
|
|
180
186
|
在话题中使用 `/forkgroup` 时,如果话题任务还没有完成过自己的 turn,则从话题原始 turn fork;完成过后则从话题任务最近完成的 turn fork。正在执行的 turn 不会作为 fork 点。
|
|
181
187
|
|
|
182
|
-
`/forkgroup`
|
|
188
|
+
`/forkgroup` 创建新群后,群内欢迎消息会显示分支任务当前使用的 Provider、模型、思考强度和权限类型。
|
|
183
189
|
|
|
184
|
-
`/newgroup`
|
|
190
|
+
`/new` 和 `/newgroup` 支持相同的项目参数:使用 `--dir <cwd>` 覆盖继承的项目目录,或使用 `--nodir` 强制创建 Projectless Codex 任务,二者不能同时使用。两条命令中的 `~`、`~/...` 和 `~\...` 均表示当前用户目录。`/newgroup` 会立即在新群中创建并绑定任务,同时继续继承当前任务的 Provider、模型、思考强度和权限模式,不影响来源任务。来源聊天没有当前任务时,则使用选定 Agent 及其运行时默认设置。显式标题会同时作为群名后缀和任务标题。
|
|
185
191
|
|
|
186
|
-
`/newgroup` 省略标题时,任务标题为 `新任务`,默认群名为 `[agent] [project dir] 新任务 (mm-dd)`。`/forkgroup` 省略标题时,任务标题和群名都与 `/fork` 一样使用持久递增的 `源标题(分支 N)`,不追加日期。`/newgroup` 和 `/forkgroup` 创建的飞书群名最多显示 60 个字符。生成后的群名过长时,Agent Bot 只截断群名中的标题部分,任务标题本身保持不变。
|
|
192
|
+
`/newgroup` 省略标题时,任务标题为 `新任务`,默认群名为 `[agent] [project dir] 新任务 (mm-dd)`。Projectless 群会完全省略项目段,群名格式为 `[agent] title`。`/forkgroup` 省略标题时,任务标题和群名都与 `/fork` 一样使用持久递增的 `源标题(分支 N)`,不追加日期。`/newgroup` 和 `/forkgroup` 创建的飞书群名最多显示 60 个字符。生成后的群名过长时,Agent Bot 只截断群名中的标题部分,任务标题本身保持不变。
|
|
187
193
|
|
|
188
194
|
把已绑定任务的群改名为 `[agent] [project dir] title` 时,只会把 `title` 同步到当前任务;Agent 和工程目录前缀仅作为群元数据,不会写入 Codex 任务标题。旧的 `[agent] title` 格式仍然兼容。
|
|
189
195
|
|
|
Binary file
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
export class AcpSessionManager {
|
|
3
|
-
|
|
3
|
+
agentName;
|
|
4
|
+
agent;
|
|
4
5
|
processManager;
|
|
5
6
|
logger;
|
|
6
7
|
sessions = new Map();
|
|
7
8
|
sessionsByAcpId = new Map();
|
|
8
|
-
|
|
9
|
-
|
|
9
|
+
processStart;
|
|
10
|
+
constructor(agentName, agent, processManager, logger) {
|
|
11
|
+
this.agentName = agentName;
|
|
12
|
+
this.agent = agent;
|
|
10
13
|
this.processManager = processManager;
|
|
11
14
|
this.logger = logger;
|
|
12
15
|
}
|
|
@@ -14,55 +17,17 @@ export class AcpSessionManager {
|
|
|
14
17
|
return this.sessions.get(localSessionId);
|
|
15
18
|
}
|
|
16
19
|
async create(input) {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
throw new Error(`Unknown agent: ${input.agentName}`);
|
|
20
|
-
}
|
|
20
|
+
if (input.agentName !== this.agentName)
|
|
21
|
+
throw new Error(`Unexpected agent: ${input.agentName}`);
|
|
21
22
|
const cwd = path.resolve(input.cwd);
|
|
22
|
-
const
|
|
23
|
-
const managed = this.processManager.start(processKey, input.agentName, agent);
|
|
23
|
+
const managed = await this.process();
|
|
24
24
|
const connection = managed.connection;
|
|
25
|
-
let runtime;
|
|
26
|
-
connection.registerHandler("session/request_permission", async (params) => {
|
|
27
|
-
if (!runtime) {
|
|
28
|
-
throw new Error("Received permission request before session was ready.");
|
|
29
|
-
}
|
|
30
|
-
return input.onPermissionRequest(runtime, params);
|
|
31
|
-
});
|
|
32
|
-
connection.on("notification", (_method, params) => {
|
|
33
|
-
if (_method !== "session/update") {
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
const updateParams = params;
|
|
37
|
-
const target = this.sessionsByAcpId.get(updateParams.sessionId);
|
|
38
|
-
if (!target) {
|
|
39
|
-
this.logger.debug({ updateParams }, "Ignoring update for unknown ACP session.");
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
this.applySessionUpdate(target, updateParams.update);
|
|
43
|
-
input.onUpdate(target, updateParams.update);
|
|
44
|
-
});
|
|
45
|
-
const initializeResult = await connection.request("initialize", {
|
|
46
|
-
protocolVersion: 1,
|
|
47
|
-
clientCapabilities: {},
|
|
48
|
-
clientInfo: {
|
|
49
|
-
name: "agent-bot",
|
|
50
|
-
title: "Agent Bot",
|
|
51
|
-
version: "0.1.0",
|
|
52
|
-
},
|
|
53
|
-
});
|
|
54
|
-
if (initializeResult.authMethods?.length) {
|
|
55
|
-
const method = initializeResult.authMethods[0];
|
|
56
|
-
this.logger.info({ methodId: method.id }, "Authenticating ACP agent with first advertised method.");
|
|
57
|
-
await connection.request("authenticate", { methodId: method.id });
|
|
58
|
-
}
|
|
59
25
|
const newSessionResult = await connection.request("session/new", {
|
|
60
26
|
cwd,
|
|
61
27
|
mcpServers: [],
|
|
62
28
|
});
|
|
63
|
-
runtime = {
|
|
29
|
+
const runtime = {
|
|
64
30
|
localSessionId: input.localSessionId,
|
|
65
|
-
processKey,
|
|
66
31
|
agentName: input.agentName,
|
|
67
32
|
cwd,
|
|
68
33
|
acpSessionId: newSessionResult.sessionId,
|
|
@@ -70,6 +35,8 @@ export class AcpSessionManager {
|
|
|
70
35
|
running: false,
|
|
71
36
|
modes: newSessionResult.modes,
|
|
72
37
|
configOptions: newSessionResult.configOptions,
|
|
38
|
+
onUpdate: input.onUpdate,
|
|
39
|
+
onPermissionRequest: input.onPermissionRequest,
|
|
73
40
|
};
|
|
74
41
|
this.sessions.set(input.localSessionId, runtime);
|
|
75
42
|
this.sessionsByAcpId.set(runtime.acpSessionId, runtime);
|
|
@@ -114,7 +81,12 @@ export class AcpSessionManager {
|
|
|
114
81
|
}
|
|
115
82
|
this.sessions.delete(localSessionId);
|
|
116
83
|
this.sessionsByAcpId.delete(session.acpSessionId);
|
|
117
|
-
|
|
84
|
+
}
|
|
85
|
+
shutdown() {
|
|
86
|
+
this.sessions.clear();
|
|
87
|
+
this.sessionsByAcpId.clear();
|
|
88
|
+
this.processStart = undefined;
|
|
89
|
+
this.processManager.stopAll();
|
|
118
90
|
}
|
|
119
91
|
async setMode(localSessionId, modeId) {
|
|
120
92
|
const session = this.requireSession(localSessionId);
|
|
@@ -142,6 +114,66 @@ export class AcpSessionManager {
|
|
|
142
114
|
}
|
|
143
115
|
return session;
|
|
144
116
|
}
|
|
117
|
+
async process() {
|
|
118
|
+
const existing = this.processManager.get(this.agentName);
|
|
119
|
+
if (existing)
|
|
120
|
+
return existing;
|
|
121
|
+
if (this.processStart)
|
|
122
|
+
return this.processStart;
|
|
123
|
+
const start = this.startProcess();
|
|
124
|
+
this.processStart = start;
|
|
125
|
+
try {
|
|
126
|
+
return await start;
|
|
127
|
+
}
|
|
128
|
+
finally {
|
|
129
|
+
if (this.processStart === start)
|
|
130
|
+
this.processStart = undefined;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
async startProcess() {
|
|
134
|
+
const managed = this.processManager.start(this.agentName, this.agentName, this.agent);
|
|
135
|
+
try {
|
|
136
|
+
const connection = managed.connection;
|
|
137
|
+
connection.registerHandler("session/request_permission", async (params) => {
|
|
138
|
+
const permission = params;
|
|
139
|
+
const target = this.sessionsByAcpId.get(permission.sessionId);
|
|
140
|
+
if (!target)
|
|
141
|
+
throw new Error(`Unknown ACP session requesting permission: ${permission.sessionId}`);
|
|
142
|
+
return target.onPermissionRequest(target, permission);
|
|
143
|
+
});
|
|
144
|
+
connection.on("notification", (method, params) => {
|
|
145
|
+
if (method !== "session/update")
|
|
146
|
+
return;
|
|
147
|
+
const updateParams = params;
|
|
148
|
+
const target = this.sessionsByAcpId.get(updateParams.sessionId);
|
|
149
|
+
if (!target) {
|
|
150
|
+
this.logger.debug({ updateParams }, "Ignoring update for unknown ACP session.");
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
this.applySessionUpdate(target, updateParams.update);
|
|
154
|
+
target.onUpdate(target, updateParams.update);
|
|
155
|
+
});
|
|
156
|
+
const initializeResult = await connection.request("initialize", {
|
|
157
|
+
protocolVersion: 1,
|
|
158
|
+
clientCapabilities: {},
|
|
159
|
+
clientInfo: {
|
|
160
|
+
name: "agent-bot",
|
|
161
|
+
title: "Agent Bot",
|
|
162
|
+
version: "0.1.0",
|
|
163
|
+
},
|
|
164
|
+
});
|
|
165
|
+
if (initializeResult.authMethods?.length) {
|
|
166
|
+
const method = initializeResult.authMethods[0];
|
|
167
|
+
this.logger.info({ methodId: method.id }, "Authenticating ACP agent with first advertised method.");
|
|
168
|
+
await connection.request("authenticate", { methodId: method.id });
|
|
169
|
+
}
|
|
170
|
+
return managed;
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
this.processManager.stop(this.agentName);
|
|
174
|
+
throw error;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
145
177
|
applySessionUpdate(session, update) {
|
|
146
178
|
const updateType = update.sessionUpdate;
|
|
147
179
|
if (updateType === "config_option_update" && "configOptions" in update) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AcpSessionManager.js","sourceRoot":"","sources":["../../src/acp/AcpSessionManager.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"AcpSessionManager.js","sourceRoot":"","sources":["../../src/acp/AcpSessionManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,20 @@
|
|
|
1
1
|
import readline from "node:readline";
|
|
2
2
|
import { isNotification, isRequest, isResponse, } from "./protocol.js";
|
|
3
3
|
const DEFAULT_REQUEST_TIMEOUT_MS = 30_000;
|
|
4
|
+
export class AppServerRequestError extends Error {
|
|
5
|
+
method;
|
|
6
|
+
code;
|
|
7
|
+
serverMessage;
|
|
8
|
+
data;
|
|
9
|
+
constructor(method, code, serverMessage, data) {
|
|
10
|
+
super(`${method} failed: ${serverMessage}`);
|
|
11
|
+
this.method = method;
|
|
12
|
+
this.code = code;
|
|
13
|
+
this.serverMessage = serverMessage;
|
|
14
|
+
this.name = "AppServerRequestError";
|
|
15
|
+
this.data = data;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
4
18
|
export class AppServerConnection {
|
|
5
19
|
process;
|
|
6
20
|
logger;
|
|
@@ -102,7 +116,7 @@ export class AppServerConnection {
|
|
|
102
116
|
if (pending.timeout)
|
|
103
117
|
clearTimeout(pending.timeout);
|
|
104
118
|
if ("error" in message) {
|
|
105
|
-
pending.reject(new
|
|
119
|
+
pending.reject(new AppServerRequestError(pending.method, message.error.code, message.error.message, message.error.data));
|
|
106
120
|
}
|
|
107
121
|
else {
|
|
108
122
|
pending.resolve(message.result);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppServerConnection.js","sourceRoot":"","sources":["../../src/codex/AppServerConnection.ts"],"names":[],"mappings":"AACA,OAAO,QAAQ,MAAM,eAAe,CAAC;AAErC,OAAO,EACL,cAAc,EACd,SAAS,EACT,UAAU,GAIX,MAAM,eAAe,CAAC;AAgBvB,MAAM,0BAA0B,GAAG,MAAM,CAAC;AAE1C,MAAM,OAAO,mBAAmB;IAQX,OAAO;IACP,MAAM;IARjB,MAAM,GAAG,CAAC,CAAC;IACX,MAAM,GAAG,KAAK,CAAC;IACN,OAAO,GAAG,IAAI,GAAG,EAAsC,CAAC;IACxD,eAAe,GAAG,IAAI,GAAG,EAAgC,CAAC;IAC1D,qBAAqB,GAAG,IAAI,GAAG,EAAwB,CAAC;IAEzE,YACmB,OAAuC,EACvC,MAAc;uBADd,OAAO;sBACP,MAAM;QAEvB,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,CAAc,MAAc,EAAE,MAAgB,EAAE,SAAS,GAAG,0BAA0B;QAC3F,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,2DAA2D,MAAM,EAAE,CAAC,CAAC,CAAC;QACxG,CAAC;QACD,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACvD,MAAM,OAAO,GAAmB,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;YAC5D,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;gBAClB,OAAO,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;oBAChC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBACxB,MAAM,CAAC,IAAI,KAAK,CAAC,iCAAiC,MAAM,EAAE,CAAC,CAAC,CAAC;gBAC/D,CAAC,EAAE,SAAS,CAAC,CAAC;YAChB,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;QACxE,OAAO,OAAqB,CAAC;IAC/B,CAAC;IAED,MAAM,CAAC,MAAc,EAAE,MAAgB;QACrC,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QACxB,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,sBAAsB,CAAC,MAAc,EAAE,OAA6B;QAClE,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAED,cAAc,CAAC,QAA8B;QAC3C,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACzC,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QACxB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAC5C,IAAI,OAAO,CAAC,OAAO;gBAAE,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACnD,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;IACrC,CAAC;IAEO,UAAU;QAChB,MAAM,MAAM,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC7F,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBAAE,OAAO;YACzB,IAAI,OAAyB,CAAC;YAC9B,IAAI,CAAC;gBACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAqB,CAAC;YACjD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,iDAAiD,CAAC,CAAC;gBACrF,OAAO;YACT,CAAC;YACD,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,aAAa,CAAC,OAAyB;QAC7C,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YAC7B,OAAO;QACT,CAAC;QACD,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YACvB,KAAK,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YAC1E,OAAO;QACT,CAAC;QACD,IAAI,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,qBAAqB;gBAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;YAC5F,OAAO;QACT,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,kDAAkD,CAAC,CAAC;IACpF,CAAC;IAEO,cAAc,CAAC,OAA0B;QAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,MAAM,CAAC,IAAI,CACd;gBACE,UAAU,EAAE,OAAO,CAAC,EAAE;gBACtB,YAAY,EAAE,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ;aACtD,EACD,yDAAyD,CAC1D,CAAC;YACF,OAAO;QACT,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,OAAO,CAAC,OAAO;YAAE,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACnD,IAAI,OAAO,IAAI,OAAO,EAAE,CAAC;YACvB,OAAO,CAAC,MAAM,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"AppServerConnection.js","sourceRoot":"","sources":["../../src/codex/AppServerConnection.ts"],"names":[],"mappings":"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"}
|
|
@@ -58,8 +58,11 @@ export class CodexLocalActivityDetector {
|
|
|
58
58
|
fileMustExist: true,
|
|
59
59
|
});
|
|
60
60
|
const placeholders = ids.map(() => "?").join(", ");
|
|
61
|
-
const
|
|
61
|
+
const columns = new Set(database.pragma("table_info(threads)").map((column) => column.name));
|
|
62
|
+
const providerColumn = columns.has("model_provider") ? ", model_provider" : "";
|
|
63
|
+
const rows = database.prepare(`SELECT id${providerColumn}, model, reasoning_effort, approval_mode FROM threads WHERE id IN (${placeholders})`).all(...ids);
|
|
62
64
|
return new Map(rows.map((row) => [row.id, {
|
|
65
|
+
...(row.model_provider?.trim() ? { modelProvider: row.model_provider.trim() } : {}),
|
|
63
66
|
...(row.model?.trim() ? { model: row.model.trim() } : {}),
|
|
64
67
|
...(row.reasoning_effort?.trim() ? { reasoningEffort: row.reasoning_effort.trim() } : {}),
|
|
65
68
|
...(row.approval_mode?.trim()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CodexLocalActivityDetector.js","sourceRoot":"","sources":["../../src/codex/CodexLocalActivityDetector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAGtC,MAAM,eAAe,GAAG,EAAE,GAAG,IAAI,CAAC;AAClC,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;AAC1D,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;AAC5D,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;AAC1D,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"CodexLocalActivityDetector.js","sourceRoot":"","sources":["../../src/codex/CodexLocalActivityDetector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAGtC,MAAM,eAAe,GAAG,EAAE,GAAG,IAAI,CAAC;AAClC,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;AAC1D,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;AAC5D,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;AAC1D,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAsBrG;;;;GAIG;AACH,MAAM,OAAO,0BAA0B;IACR,SAAS;IAAtC,YAA6B,SAAiB;yBAAjB,SAAS;IAAW,CAAC;IAElD,KAAK,CAAC,eAAe,CAAC,SAAmB;QACvC,OAAO,IAAI,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,SAAmB;QACrC,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACpD,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,GAAG,EAAE,CAAC;QAEvC,IAAI,QAAuC,CAAC;QAC5C,IAAI,IAAqB,CAAC;QAC1B,IAAI,CAAC;YACH,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,EAAE;gBACnE,QAAQ,EAAE,IAAI;gBACd,aAAa,EAAE,IAAI;aACpB,CAAC,CAAC;YACH,MAAM,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnD,IAAI,GAAG,QAAQ,CAAC,OAAO,CACrB,qDAAqD,YAAY,GAAG,CACrE,CAAC,GAAG,CAAC,GAAG,GAAG,CAAoB,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,GAAG,EAAE,CAAC;QACnB,CAAC;gBAAS,CAAC;YACT,QAAQ,EAAE,KAAK,EAAE,CAAC;QACpB,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,GAAG,EAA8B,CAAC;QACrD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAChD,IAAI,IAAI,CAAC,MAAM;gBAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,SAAmB;QACtC,MAAM,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACpD,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,GAAG,EAAE,CAAC;QAEvC,IAAI,QAAuC,CAAC;QAC5C,IAAI,CAAC;YACH,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,EAAE;gBACnE,QAAQ,EAAE,IAAI;gBACd,aAAa,EAAE,IAAI;aACpB,CAAC,CAAC;YACH,MAAM,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnD,MAAM,OAAO,GAAG,IAAI,GAAG,CACpB,QAAQ,CAAC,MAAM,CAAC,qBAAqB,CAA6B,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CACjG,CAAC;YACF,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/E,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAC3B,YAAY,cAAc,sEAAsE,YAAY,GAAG,CAChH,CAAC,GAAG,CAAC,GAAG,GAAG,CAAwB,CAAC;YACrC,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE;oBACxC,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACnF,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACzD,GAAG,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACzF,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,EAAE;wBAC3B,CAAC,CAAC,EAAE,cAAc,EAAE,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE;wBAC/E,CAAC,CAAC,EAAE,CAAC;iBACR,CAAC,CAAC,CAAC,CAAC;QACP,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,GAAG,EAAE,CAAC;QACnB,CAAC;gBAAS,CAAC;YACT,QAAQ,EAAE,KAAK,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;CACF;AAED,KAAK,UAAU,UAAU,CAAC,WAAmB;IAC3C,IAAI,IAAI,CAAC;IACT,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;QACtC,IAAI,QAAQ,GAAG,IAAI,CAAC;QACpB,IAAI,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAElC,OAAO,QAAQ,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;YACnD,QAAQ,IAAI,MAAM,CAAC;YACnB,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACzC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC5C,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACxF,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;YACvD,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;YAC1D,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;YACvD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YACpD,IAAI,SAAS,IAAI,CAAC,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;gBACtC,IAAI,SAAS,IAAI,UAAU;oBAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;gBACtD,MAAM,cAAc,GAAG,QAAQ,GAAG,SAAS,CAAC;gBAC5C,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,EAAE,CAAC;YAChF,CAAC;YACD,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IAC3B,CAAC;YAAS,CAAC;QACT,MAAM,IAAI,EAAE,KAAK,EAAE,CAAC;IACtB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,IAAsC,EACtC,WAAmB,EACnB,QAAgB;IAEhB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,KAAK,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAC1C,MAAM,cAAc,GAAG,WAAW,GAAG,KAAK,CAAC;IAC3C,MAAM,eAAe,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IACjE,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IACzD,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,GAAG,CAAC,EAAE,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/G,MAAM,KAAK,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/C,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC"}
|
|
@@ -42,6 +42,7 @@ export class CodexProcessManager {
|
|
|
42
42
|
});
|
|
43
43
|
await client.request("initialize", {
|
|
44
44
|
clientInfo: { name: "agent-bot", title: "Agent Bot", version: "0.1.0" },
|
|
45
|
+
capabilities: { experimentalApi: true },
|
|
45
46
|
});
|
|
46
47
|
client.notify("initialized", {});
|
|
47
48
|
return client;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CodexProcessManager.js","sourceRoot":"","sources":["../../src/codex/CodexProcessManager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,QAAQ,MAAM,eAAe,CAAC;AAErC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,MAAM,OAAO,mBAAmB;IAMX,OAAO;IACP,IAAI;IACJ,GAAG;IACH,MAAM;IARjB,MAAM,CAAuB;IAC7B,KAAK,CAAkC;IAC9B,mBAAmB,GAAG,IAAI,GAAG,EAA0B,CAAC;IAEzE,YACmB,OAAe,EACf,IAAc,EACd,GAA2B,EAC3B,MAAc;uBAHd,OAAO;oBACP,IAAI;mBACJ,GAAG;sBACH,MAAM;IACtB,CAAC;IAEJ,KAAK,CAAC,SAAS;QACb,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC,MAAM,CAAC;QACpC,MAAM,KAAK,GAAG,iBAAiB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,mBAAmB,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACrG,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,MAAM,MAAM,GAAG,IAAI,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC;QACpG,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACzF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,EAAE,0BAA0B,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,iCAAiC,CAAC,CAAC,CAAC;QAChG,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YAClC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,kCAAkC,CAAC,CAAC;YACvE,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;gBAAE,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;YACpD,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK;gBAAE,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;YACjD,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,iCAAiC,IAAI,IAAI,MAAM,YAAY,MAAM,IAAI,MAAM,IAAI,CAAC,CAAC;YACzG,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,mBAAmB;gBAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE;YACjC,UAAU,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE;
|
|
1
|
+
{"version":3,"file":"CodexProcessManager.js","sourceRoot":"","sources":["../../src/codex/CodexProcessManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { appendGeneratedImageMarkdown } from "../utils/generatedImageMarkdown.js";
|
|
2
2
|
import { normalizeTaskTitle } from "../utils/taskTitle.js";
|
|
3
|
+
import { AppServerRequestError } from "./AppServerConnection.js";
|
|
3
4
|
import { mapCodexNotification } from "./CodexEventMapper.js";
|
|
4
5
|
import { CodexLocalActivityDetector } from "./CodexLocalActivityDetector.js";
|
|
5
6
|
import { detectProjectlessWorkspace } from "./ProjectlessWorkspace.js";
|
|
@@ -45,6 +46,7 @@ export class CodexRuntime {
|
|
|
45
46
|
const response = await client.request("thread/start", {
|
|
46
47
|
cwd: input.cwd,
|
|
47
48
|
model: input.model,
|
|
49
|
+
...(input.modelProvider ? { modelProvider: input.modelProvider } : {}),
|
|
48
50
|
threadSource: "user",
|
|
49
51
|
...threadLifecycleParams(input.cwd),
|
|
50
52
|
...permissionParams(input.permissionMode),
|
|
@@ -67,8 +69,10 @@ export class CodexRuntime {
|
|
|
67
69
|
const client = await this.client();
|
|
68
70
|
const response = await client.request("thread/resume", {
|
|
69
71
|
threadId: input.remoteSessionId,
|
|
72
|
+
excludeTurns: true,
|
|
70
73
|
cwd: input.cwd,
|
|
71
74
|
model: input.model,
|
|
75
|
+
...(input.modelProvider ? { modelProvider: input.modelProvider } : {}),
|
|
72
76
|
...threadLifecycleParams(input.cwd),
|
|
73
77
|
...permissionParams(input.permissionMode),
|
|
74
78
|
}, SESSION_REQUEST_TIMEOUT_MS);
|
|
@@ -79,15 +83,29 @@ export class CodexRuntime {
|
|
|
79
83
|
}
|
|
80
84
|
async forkSession(input) {
|
|
81
85
|
const client = await this.client();
|
|
82
|
-
const
|
|
86
|
+
const forkParams = {
|
|
83
87
|
threadId: input.remoteSessionId,
|
|
84
88
|
lastTurnId: input.lastTurnId,
|
|
85
89
|
cwd: input.cwd,
|
|
86
90
|
model: input.model,
|
|
91
|
+
...(input.modelProvider ? { modelProvider: input.modelProvider } : {}),
|
|
87
92
|
threadSource: "user",
|
|
88
93
|
...threadLifecycleParams(input.cwd),
|
|
89
94
|
...permissionParams(input.permissionMode),
|
|
90
|
-
}
|
|
95
|
+
};
|
|
96
|
+
let response;
|
|
97
|
+
try {
|
|
98
|
+
response = await client.request("thread/fork", {
|
|
99
|
+
...forkParams,
|
|
100
|
+
excludeTurns: true,
|
|
101
|
+
}, FORK_REQUEST_TIMEOUT_MS);
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
if (!isUnsupportedExcludeTurnsError(error))
|
|
105
|
+
throw error;
|
|
106
|
+
this.logger.warn({ error }, "Codex App Server does not support thread/fork excludeTurns; retrying without it.");
|
|
107
|
+
response = await client.request("thread/fork", forkParams, FORK_REQUEST_TIMEOUT_MS);
|
|
108
|
+
}
|
|
91
109
|
const requestedTitle = normalizeTaskTitle(input.title);
|
|
92
110
|
if (requestedTitle) {
|
|
93
111
|
await client.request("thread/name/set", {
|
|
@@ -257,6 +275,24 @@ export class CodexRuntime {
|
|
|
257
275
|
async setPermissionMode(sessionId, mode) {
|
|
258
276
|
this.requireSession(sessionId).permissionMode = mode;
|
|
259
277
|
}
|
|
278
|
+
async setExecutionSettings(sessionId, settings) {
|
|
279
|
+
const session = this.requireSession(sessionId);
|
|
280
|
+
const response = await (await this.client()).request("thread/resume", {
|
|
281
|
+
threadId: session.remoteSessionId,
|
|
282
|
+
excludeTurns: true,
|
|
283
|
+
cwd: session.cwd,
|
|
284
|
+
modelProvider: settings.modelProvider,
|
|
285
|
+
model: settings.model,
|
|
286
|
+
...threadLifecycleParams(session.cwd),
|
|
287
|
+
...permissionParams(settings.permissionMode),
|
|
288
|
+
}, SESSION_REQUEST_TIMEOUT_MS);
|
|
289
|
+
session.modelProvider = response.modelProvider ?? settings.modelProvider;
|
|
290
|
+
session.model = response.model ?? settings.model;
|
|
291
|
+
session.reasoningEffort = settings.reasoningEffort;
|
|
292
|
+
session.permissionMode = settings.permissionMode;
|
|
293
|
+
session.needsResume = false;
|
|
294
|
+
return session;
|
|
295
|
+
}
|
|
260
296
|
async respondToApproval(sessionId, requestId, decision) {
|
|
261
297
|
const pending = this.approvals.get(requestId);
|
|
262
298
|
if (!pending || pending.sessionId !== sessionId)
|
|
@@ -278,6 +314,27 @@ export class CodexRuntime {
|
|
|
278
314
|
defaultReasoningEffort: model.defaultReasoningEffort,
|
|
279
315
|
}));
|
|
280
316
|
}
|
|
317
|
+
async listModelProviders() {
|
|
318
|
+
const response = await (await this.client()).request("config/read", {}, CONTROL_REQUEST_TIMEOUT_MS);
|
|
319
|
+
const config = response.config ?? {};
|
|
320
|
+
const defaultProvider = stringValue(config.model_provider)?.trim();
|
|
321
|
+
const configuredProviders = isRecord(config.model_providers) ? config.model_providers : {};
|
|
322
|
+
const providers = new Map();
|
|
323
|
+
for (const [id, value] of Object.entries(configuredProviders)) {
|
|
324
|
+
if (!id.trim())
|
|
325
|
+
continue;
|
|
326
|
+
const displayName = isRecord(value) ? stringValue(value.name)?.trim() : undefined;
|
|
327
|
+
providers.set(id, {
|
|
328
|
+
id,
|
|
329
|
+
...(displayName ? { displayName } : {}),
|
|
330
|
+
...(id === defaultProvider ? { isDefault: true } : {}),
|
|
331
|
+
});
|
|
332
|
+
}
|
|
333
|
+
if (defaultProvider && !providers.has(defaultProvider)) {
|
|
334
|
+
providers.set(defaultProvider, { id: defaultProvider, isDefault: true });
|
|
335
|
+
}
|
|
336
|
+
return [...providers.values()].sort((left, right) => Number(Boolean(right.isDefault)) - Number(Boolean(left.isDefault)) || left.id.localeCompare(right.id));
|
|
337
|
+
}
|
|
281
338
|
onEvent(listener) {
|
|
282
339
|
this.listeners.add(listener);
|
|
283
340
|
return () => this.listeners.delete(listener);
|
|
@@ -509,8 +566,10 @@ export class CodexRuntime {
|
|
|
509
566
|
return;
|
|
510
567
|
await client.request("thread/resume", {
|
|
511
568
|
threadId: session.remoteSessionId,
|
|
569
|
+
excludeTurns: true,
|
|
512
570
|
cwd: session.cwd,
|
|
513
571
|
model: session.model,
|
|
572
|
+
...(session.modelProvider ? { modelProvider: session.modelProvider } : {}),
|
|
514
573
|
...threadLifecycleParams(session.cwd),
|
|
515
574
|
...permissionParams(session.permissionMode),
|
|
516
575
|
}, SESSION_REQUEST_TIMEOUT_MS);
|
|
@@ -621,6 +680,7 @@ export class CodexRuntime {
|
|
|
621
680
|
title: normalizeTaskTitle(response.thread.name)
|
|
622
681
|
?? normalizeTaskTitle(response.thread.preview)
|
|
623
682
|
?? input.title,
|
|
683
|
+
modelProvider: input.modelProvider ?? response.modelProvider,
|
|
624
684
|
model: input.model ?? response.model,
|
|
625
685
|
reasoningEffort,
|
|
626
686
|
permissionMode: input.permissionMode,
|
|
@@ -725,6 +785,20 @@ function extractGeneratedImagePaths(turn) {
|
|
|
725
785
|
function uniqueStrings(values) {
|
|
726
786
|
return [...new Set(values.map((value) => value.trim()).filter(Boolean))];
|
|
727
787
|
}
|
|
788
|
+
function isUnsupportedExcludeTurnsError(error) {
|
|
789
|
+
if (!(error instanceof AppServerRequestError) || error.method !== "thread/fork")
|
|
790
|
+
return false;
|
|
791
|
+
const data = typeof error.data === "string"
|
|
792
|
+
? error.data
|
|
793
|
+
: error.data === undefined
|
|
794
|
+
? ""
|
|
795
|
+
: JSON.stringify(error.data);
|
|
796
|
+
const details = `${error.serverMessage} ${data}`;
|
|
797
|
+
if (!details.toLowerCase().replaceAll(/[^a-z]/g, "").includes("excludeturns"))
|
|
798
|
+
return false;
|
|
799
|
+
return error.code === -32602
|
|
800
|
+
|| /unknown|unrecognized|unexpected|unsupported|not supported|experimental/i.test(details);
|
|
801
|
+
}
|
|
728
802
|
function remoteSessionSummary(thread) {
|
|
729
803
|
const lastTurn = thread.turns?.at(-1);
|
|
730
804
|
const lastCompletedTurn = [...(thread.turns ?? [])]
|
|
@@ -748,6 +822,7 @@ function remoteSessionSummary(thread) {
|
|
|
748
822
|
cwd: thread.cwd ?? "",
|
|
749
823
|
source: codexSourceLabel(thread.source),
|
|
750
824
|
status,
|
|
825
|
+
modelProvider: thread.modelProvider,
|
|
751
826
|
createdAt: thread.createdAt,
|
|
752
827
|
updatedAt: thread.updatedAt,
|
|
753
828
|
recencyAt: thread.recencyAt ?? undefined,
|