@covro/covro 0.5.1-dev.3 → 0.5.1-dev.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -1
- package/README.zh-CN.md +9 -1
- package/dist/codex/adapter.js +62 -4
- package/dist/codex/adapter.js.map +2 -2
- package/dist/codex/collaboration.js +28 -0
- package/dist/codex/collaboration.js.map +7 -0
- package/dist/codex/guardian-denials.js +67 -0
- package/dist/codex/guardian-denials.js.map +7 -0
- package/dist/codex/thread-goals.js +15 -0
- package/dist/codex/thread-goals.js.map +7 -0
- package/dist/codex/thread-titles.js +135 -60
- package/dist/codex/thread-titles.js.map +2 -2
- package/dist/server/http.js +37 -0
- package/dist/server/http.js.map +2 -2
- package/dist/server/project-init.js +28 -0
- package/dist/server/project-init.js.map +7 -0
- package/dist/server/projection.js +1 -0
- package/dist/server/projection.js.map +2 -2
- package/dist/server/service.js +181 -3
- package/dist/server/service.js.map +2 -2
- package/dist/server/thread-recap.js +34 -0
- package/dist/server/thread-recap.js.map +7 -0
- package/dist/server/workspace-diff.js +149 -0
- package/dist/server/workspace-diff.js.map +7 -0
- package/dist/shared/guardian-denials.js +1 -0
- package/dist/shared/guardian-denials.js.map +7 -0
- package/dist/shared/thread-goal.js +1 -0
- package/dist/shared/thread-goal.js.map +7 -0
- package/dist/shared/validation.js +51 -3
- package/dist/shared/validation.js.map +2 -2
- package/dist/shared/workspace-diff.js +1 -0
- package/dist/shared/workspace-diff.js.map +7 -0
- package/dist/web/assets/{abnfDiagram-WEYOIA3C-ATf52olP.js → abnfDiagram-WEYOIA3C-2_00Zp4O.js} +1 -1
- package/dist/web/assets/{arc-ChLnTnZI.js → arc-DAyuVDVU.js} +1 -1
- package/dist/web/assets/{architecture-WOLXFQ4H-B2oEg329.js → architecture-WOLXFQ4H-CgR1C4gR.js} +1 -1
- package/dist/web/assets/{architectureDiagram-ZHVYKT53-BzSXU9d0.js → architectureDiagram-ZHVYKT53-Dkb6AWjz.js} +1 -1
- package/dist/web/assets/{blockDiagram-RJAE7QA3-xhCZ7iUm.js → blockDiagram-RJAE7QA3-NtOGZdkX.js} +1 -1
- package/dist/web/assets/{c4Diagram-XDPPPE54-DZ8j79Mx.js → c4Diagram-XDPPPE54-C1dqWKb1.js} +1 -1
- package/dist/web/assets/channel-Co9_v2dk.js +1 -0
- package/dist/web/assets/{chunk-2E7WHVMD-y5rSOViW.js → chunk-2E7WHVMD-ClzuEiGk.js} +1 -1
- package/dist/web/assets/{chunk-4EMNKR2T-B7WVoonr.js → chunk-4EMNKR2T-DyTpkWag.js} +1 -1
- package/dist/web/assets/{chunk-55XCU76K-D-tlN44X.js → chunk-55XCU76K-DXBA4ib1.js} +1 -1
- package/dist/web/assets/{chunk-7S6XSTFO-31xOZx-Y.js → chunk-7S6XSTFO-DA_aq0zc.js} +1 -1
- package/dist/web/assets/{chunk-AQDTSKZB-CeCjUBmu.js → chunk-AQDTSKZB-BWTN3SC_.js} +1 -1
- package/dist/web/assets/{chunk-DSNLSHJZ-DgzXTo3_.js → chunk-DSNLSHJZ-DJnLTeE9.js} +1 -1
- package/dist/web/assets/{chunk-HAGFOTED-Dm22rez0.js → chunk-HAGFOTED-cDP-g1Eh.js} +1 -1
- package/dist/web/assets/{chunk-HNE4Q36P-CnFLQjbZ.js → chunk-HNE4Q36P-B3TTIYd_.js} +1 -1
- package/dist/web/assets/{chunk-NQOKRVIF-7DXXp2d_.js → chunk-NQOKRVIF-D8mmhZHq.js} +1 -1
- package/dist/web/assets/{chunk-UHW7PFBP-Bw9-oVzV.js → chunk-UHW7PFBP-DWIIg_jq.js} +1 -1
- package/dist/web/assets/{chunk-VQ5W62QI-C9PHAHIJ.js → chunk-VQ5W62QI-Bu3R2cpS.js} +1 -1
- package/dist/web/assets/{chunk-WQQL4CDK-C9nKxc0i.js → chunk-WQQL4CDK-BxsR1mXs.js} +1 -1
- package/dist/web/assets/{chunk-XXDRQBXY-DjdTeNXE.js → chunk-XXDRQBXY-Ds0JNdm-.js} +1 -1
- package/dist/web/assets/{chunk-YZO67HFG-C1z77_dC.js → chunk-YZO67HFG-COpqyQaD.js} +1 -1
- package/dist/web/assets/{chunk-ZAUX2LTX-C7e41NBP.js → chunk-ZAUX2LTX-BUrGjDuS.js} +1 -1
- package/dist/web/assets/{chunk-ZCHMQSOR-Gv41Qgvd.js → chunk-ZCHMQSOR-DYMM9mEK.js} +1 -1
- package/dist/web/assets/{classDiagram-v2-4MYWR3UA-PjZDyaSs.js → classDiagram-v2-4MYWR3UA-DfJvks0C.js} +1 -1
- package/dist/web/assets/{cose-bilkent-JH36ORCC-CvwZK3HN.js → cose-bilkent-JH36ORCC-CN5mpYIb.js} +1 -1
- package/dist/web/assets/{cynefin-EF2NZ3EQ-Yn6p93cE.js → cynefin-EF2NZ3EQ-DmlCHkY-.js} +1 -1
- package/dist/web/assets/{cynefinDiagram-WF24UDRP-BXa5Guxe.js → cynefinDiagram-WF24UDRP-C0aUblC2.js} +1 -1
- package/dist/web/assets/{dagre-NK4GIZVX-Cnskqb30.js → dagre-NK4GIZVX-Ba7RcAgP.js} +1 -1
- package/dist/web/assets/{diagram-CBK3MWTC-K8WEazkZ.js → diagram-CBK3MWTC-BYQDjB9i.js} +1 -1
- package/dist/web/assets/{diagram-I5XIIV2D-CLzouqUh.js → diagram-I5XIIV2D-EV79hoob.js} +1 -1
- package/dist/web/assets/{diagram-ODIL2UCW-B_9ysyHU.js → diagram-ODIL2UCW-BvQdwmgA.js} +1 -1
- package/dist/web/assets/{diagram-PFBEJUXE-D1ge5Ebx.js → diagram-PFBEJUXE-hxwI3F00.js} +1 -1
- package/dist/web/assets/{diagram-RJA3I4VV-DWF6V26r.js → diagram-RJA3I4VV-DwaHE2iB.js} +1 -1
- package/dist/web/assets/{diagram-TYUNFSNR-BNM1pCS4.js → diagram-TYUNFSNR-BxiOemA0.js} +1 -1
- package/dist/web/assets/{dist-_uWZFvFF.js → dist-nfRX7L9k.js} +1 -1
- package/dist/web/assets/{ebnfDiagram-V4P3TTPT-Cge9YHFL.js → ebnfDiagram-V4P3TTPT-CzQv5iDM.js} +1 -1
- package/dist/web/assets/{elk-QONTBCTQ-CY_393oL.js → elk-QONTBCTQ-DNR9HWcl.js} +1 -1
- package/dist/web/assets/{erDiagram-KYQIGQAA-CCOr67SS.js → erDiagram-KYQIGQAA-aJlTdb9w.js} +1 -1
- package/dist/web/assets/{eventmodeling-K75KTNOO-BzNNWwRQ.js → eventmodeling-K75KTNOO-D4J-ujy-.js} +1 -1
- package/dist/web/assets/flowDiagram-IUGLLWBU-Bq7dmPlS.js +1 -0
- package/dist/web/assets/{ganttDiagram-R7GPNTJY-8BewtZrJ.js → ganttDiagram-R7GPNTJY-DgytSfqO.js} +1 -1
- package/dist/web/assets/{gitGraph-VSP46ZUC-CrqJbic_.js → gitGraph-VSP46ZUC-BtjueFHB.js} +1 -1
- package/dist/web/assets/{gitGraphDiagram-PDYL7XHY-Ddr5Q6Is.js → gitGraphDiagram-PDYL7XHY-WP0Hjdh9.js} +1 -1
- package/dist/web/assets/index-BesPYgjq.js +156 -0
- package/dist/web/assets/{index-C_i_PNi6.css → index-qYBdGqKM.css} +1 -1
- package/dist/web/assets/{info-OHQRW6UA-DgPvuC2J.js → info-OHQRW6UA-iuP0WTfn.js} +1 -1
- package/dist/web/assets/{infoDiagram-MVDRKAX5-zlubFwKS.js → infoDiagram-MVDRKAX5-CpAtMyKS.js} +1 -1
- package/dist/web/assets/{ishikawaDiagram-HPEHV2GE-DdQfvqVi.js → ishikawaDiagram-HPEHV2GE-JTnItv7N.js} +1 -1
- package/dist/web/assets/{journeyDiagram-BOSHW7O7-DZ4XswBd.js → journeyDiagram-BOSHW7O7-B333k1QJ.js} +1 -1
- package/dist/web/assets/{kanban-definition-FNSA4HC5-B1BQdpKc.js → kanban-definition-FNSA4HC5-DpCk5ZH0.js} +1 -1
- package/dist/web/assets/{line-jQDqs207.js → line-CLs-qFxt.js} +1 -1
- package/dist/web/assets/{linear-DbYz4fU8.js → linear-E9AWqBNs.js} +1 -1
- package/dist/web/assets/{mermaid-parser.core-CY5CVNe8.js → mermaid-parser.core-D1rEzlb-.js} +3 -3
- package/dist/web/assets/{mermaid.core-mETL7nBW.js → mermaid.core-D6TNGGsX.js} +4 -4
- package/dist/web/assets/{mindmap-definition-6OY57UG3-CxgWFLxa.js → mindmap-definition-6OY57UG3-DrpuGWuc.js} +1 -1
- package/dist/web/assets/{packet-JDAUHWVQ-Czsr9kk7.js → packet-JDAUHWVQ-BpBr3aKk.js} +1 -1
- package/dist/web/assets/{pegDiagram-ECIUJNBX-BqYq-SA-.js → pegDiagram-ECIUJNBX-BrZX1cdv.js} +1 -1
- package/dist/web/assets/{pie-XZMESJXO-CRpxJzCy.js → pie-XZMESJXO-CcTpis-K.js} +1 -1
- package/dist/web/assets/{pieDiagram-GNMPY74T-Bt2wKk8z.js → pieDiagram-GNMPY74T-CR2em875.js} +1 -1
- package/dist/web/assets/{quadrantDiagram-D57K4MC3-VOKqYTgn.js → quadrantDiagram-D57K4MC3-D-ET5xbH.js} +1 -1
- package/dist/web/assets/{radar-ABXABTNO-wXmArQH-.js → radar-ABXABTNO-CTFFPCi_.js} +1 -1
- package/dist/web/assets/{railroad-I3PHUGI6-CKPK4tQV.js → railroad-I3PHUGI6-S6MHolw_.js} +1 -1
- package/dist/web/assets/{railroad-abnf-LNEFI6M7-BLEs3xqV.js → railroad-abnf-LNEFI6M7-NWxYLYMN.js} +1 -1
- package/dist/web/assets/{railroad-ebnf-DWYD2UWJ-DS5QZgky.js → railroad-ebnf-DWYD2UWJ-CRnaPl26.js} +1 -1
- package/dist/web/assets/{railroad-peg-JR7BVNR7-DHWXNOSl.js → railroad-peg-JR7BVNR7-CB85ffhO.js} +1 -1
- package/dist/web/assets/{railroadDiagram-Y72NRBL7-Cy4eWKH1.js → railroadDiagram-Y72NRBL7-Ba2xIF7q.js} +1 -1
- package/dist/web/assets/{requirementDiagram-EQYSW5RA-Bvbk8wwe.js → requirementDiagram-EQYSW5RA-B7faqgDT.js} +1 -1
- package/dist/web/assets/{sankeyDiagram-SY24JHO5-B4jGjMzu.js → sankeyDiagram-SY24JHO5-IjJVI58S.js} +1 -1
- package/dist/web/assets/{sequenceDiagram-BLEHNHQU-BpgUogv_.js → sequenceDiagram-BLEHNHQU-D-h5jxwQ.js} +1 -1
- package/dist/web/assets/{src-DigPeGm7.js → src-hBdSvoFJ.js} +1 -1
- package/dist/web/assets/{stateDiagram-v2-A6IESKWZ-tHq7e40Q.js → stateDiagram-v2-A6IESKWZ-rlZaPFqZ.js} +1 -1
- package/dist/web/assets/{swimlanes-B3ENRKFQ-DVUPAaDR.js → swimlanes-B3ENRKFQ-CqgKwSbP.js} +1 -1
- package/dist/web/assets/swimlanesDiagram-AYQRV4AK-BGvWQ2Hp.js +8 -0
- package/dist/web/assets/{timeline-definition-JXYKGLGB-BHMM9AHV.js → timeline-definition-JXYKGLGB-DD76ZtY0.js} +1 -1
- package/dist/web/assets/{treeView-D4JQ5SDB-DZ7k_TTS.js → treeView-D4JQ5SDB-CcwWh4Bw.js} +1 -1
- package/dist/web/assets/{treemap-SAJKECNS-C1wGfVb4.js → treemap-SAJKECNS-8lde6V5O.js} +1 -1
- package/dist/web/assets/{usecaseDiagram-WPOLBNNX-BTg0K_GO.js → usecaseDiagram-WPOLBNNX-CWowobZv.js} +1 -1
- package/dist/web/assets/{vennDiagram-Q3Y3IDCW-BTKShPx1.js → vennDiagram-Q3Y3IDCW-U11W8pHe.js} +1 -1
- package/dist/web/assets/{wardley-7MLQ67FV-DnYPM5OB.js → wardley-7MLQ67FV-Dp2EaBmo.js} +1 -1
- package/dist/web/assets/{wardleyDiagram-IVAIDKWA-Dzb67Boa.js → wardleyDiagram-IVAIDKWA-7Qnos8ak.js} +1 -1
- package/dist/web/assets/{xychartDiagram-4URNHDU4-qijltKIO.js → xychartDiagram-4URNHDU4-BwfHNtsG.js} +1 -1
- package/dist/web/index.html +2 -2
- package/package.json +3 -3
- package/dist/web/assets/channel-COC5jFhc.js +0 -1
- package/dist/web/assets/flowDiagram-IUGLLWBU-C8dLq0uV.js +0 -1
- package/dist/web/assets/index-DHENTsqN.js +0 -148
- package/dist/web/assets/swimlanesDiagram-AYQRV4AK-jJ6zDGAv.js +0 -8
package/README.md
CHANGED
|
@@ -34,10 +34,18 @@
|
|
|
34
34
|
- 📖 **Read results while you chat.** Preview documents, diagrams, and code changes beside the conversation on desktop, or full-screen on mobile.
|
|
35
35
|
- 🔔 **Know when your attention is needed.** Enable browser notifications for completed work, questions, and approvals; keep the page open in a supported desktop browser.
|
|
36
36
|
|
|
37
|
-
Use **+** in the message box to attach images from your phone or computer. Open the combined model control to choose the model, reasoning effort, and
|
|
37
|
+
Use **+** in the message box to attach images from your phone or computer. Open the combined model control to choose the model, reasoning effort, Fast mode, and Plan/Execute mode. Use `/plan [task]` to select Plan mode or submit a planning task.
|
|
38
38
|
|
|
39
39
|
When the selected model is at capacity, Covro shows native retry progress and can make up to three additional attempts after 5, 10, and 20 seconds when Codex does not retry and no output or tool work has started. You can cancel, or choose another model and retry manually. See [retry behavior](docs/capacity-retry.md) for recovery boundaries.
|
|
40
40
|
|
|
41
|
+
Use `/review` to choose uncommitted changes, a base branch, a commit, or custom review instructions. Use `/init` to request a project contributor guide; an existing `AGENTS.md` is preserved.
|
|
42
|
+
|
|
43
|
+
Use `/diff` to inspect staged, unstaged, and untracked Git changes in the current workspace without starting a model task. Use `/approve` to explicitly authorize a recorded automatic-review denial once, then ask Codex to continue.
|
|
44
|
+
|
|
45
|
+
Use `/recap` to summarize recent visible messages in a separate model request without changing conversation context.
|
|
46
|
+
|
|
47
|
+
Use `/goal` to view and manage a native session goal, its token budget and actual progress. Activating a goal can start automatic continuation; pausing and clearing remain available during a task.
|
|
48
|
+
|
|
41
49
|
See the [usage guide · 中文](docs/usage.zh-CN.md) for workflow details and controls.
|
|
42
50
|
|
|
43
51
|
Start a new conversation in the current workspace with **⌘ + Option + N** on macOS or **Ctrl + Alt + N** on Windows/Linux. The message box receives focus and existing drafts stay available. When the workspace has a recognized GitHub remote, the GitHub icon in the header opens its repository in a new tab. See [workspace details](docs/workspaces.md#open-the-github-repository) for remote selection rules.
|
package/README.zh-CN.md
CHANGED
|
@@ -34,10 +34,18 @@
|
|
|
34
34
|
- 📖 **一边看产出,一边讨论。** 电脑上将文档、图表和代码变更与会话并排阅读,手机上使用全屏阅读器。
|
|
35
35
|
- 🔔 **及时收到待办提醒。** 开启浏览器通知,在工作结束、需要回答或审批时收到提醒;需在支持通知的桌面浏览器中保持页面运行。
|
|
36
36
|
|
|
37
|
-
点击输入框中的
|
|
37
|
+
点击输入框中的 **+**,可从手机或电脑选择图片附件。模型、推理强度、Fast 和 Plan/执行模式统一收进模型设置入口。使用 `/plan [任务]` 可选择 Plan 模式或直接提交规划任务。
|
|
38
38
|
|
|
39
39
|
当前模型容量不足时,Covro 会展示原生重试进度;如果 Codex 没有自行重试,且本轮尚无输出或工具操作,会在 5、10、20 秒后最多补偿重试 3 次。可以取消,也可以选择其他模型后手动重试。恢复边界见[容量重试说明](docs/capacity-retry.md)。
|
|
40
40
|
|
|
41
|
+
使用 `/review` 可选择未提交改动、基础分支、指定 commit 或自定义要求进行代码审查。使用 `/init` 可请求生成项目说明,已有 `AGENTS.md` 会保留。
|
|
42
|
+
|
|
43
|
+
使用 `/diff` 可查看当前工作区已暂存、未暂存和未跟踪的 Git 改动,不创建模型任务。使用 `/approve` 可显式单次授权一条自动审核拒绝记录,再发送任务让 Codex 继续。
|
|
44
|
+
|
|
45
|
+
使用 `/recap` 可通过独立模型请求总结近期可见消息,不改变会话上下文。
|
|
46
|
+
|
|
47
|
+
使用 `/goal` 可查看和管理原生会话目标、Token 预算与实际进度。激活后 Codex 可自动继续工作,任务运行期间仍可暂停或清除目标。
|
|
48
|
+
|
|
41
49
|
操作方式与使用细节见[使用指南](docs/usage.zh-CN.md)。
|
|
42
50
|
|
|
43
51
|
在当前工作区新建会话:macOS 按 **⌘ + Option + N**,Windows/Linux 按 **Ctrl + Alt + N**。输入框会自动获得焦点,已有草稿继续保留。工作区有可识别的 GitHub remote 时,点击顶部 GitHub 图标即可在新标签页打开仓库;remote 选择规则见[工作区说明](docs/workspaces.md#快捷打开-github-仓库)。
|
package/dist/codex/adapter.js
CHANGED
|
@@ -3,7 +3,13 @@ import { SHELL_TIMEOUT_MS, SHELL_OUTPUT_BYTES } from "../shared/shell.js";
|
|
|
3
3
|
import { spawn, execFile } from "node:child_process";
|
|
4
4
|
import { randomUUID } from "node:crypto";
|
|
5
5
|
import { promisify } from "node:util";
|
|
6
|
+
import { readGoal } from "./thread-goals.js";
|
|
7
|
+
import { GuardianDenials } from "./guardian-denials.js";
|
|
6
8
|
import { ThreadTitles } from "./thread-titles.js";
|
|
9
|
+
import {
|
|
10
|
+
collaborationSelection,
|
|
11
|
+
reportedCollaborationMode
|
|
12
|
+
} from "./collaboration.js";
|
|
7
13
|
import { TurnTokenUsage } from "./turn-token-usage.js";
|
|
8
14
|
import { AppError } from "../shared/errors.js";
|
|
9
15
|
import { threadNameError } from "../shared/thread-name.js";
|
|
@@ -54,6 +60,10 @@ const CAPABILITIES = [
|
|
|
54
60
|
"thread/items/list",
|
|
55
61
|
"turn/start",
|
|
56
62
|
"review/start",
|
|
63
|
+
"thread/goal/get",
|
|
64
|
+
"thread/goal/set",
|
|
65
|
+
"thread/goal/clear",
|
|
66
|
+
"thread/approveGuardianDeniedAction",
|
|
57
67
|
"turn/steer",
|
|
58
68
|
"turn/interrupt",
|
|
59
69
|
"model/list",
|
|
@@ -98,6 +108,7 @@ class CodexAdapter {
|
|
|
98
108
|
restartTimer;
|
|
99
109
|
restartAttempt = 0;
|
|
100
110
|
titles;
|
|
111
|
+
denials = new GuardianDenials();
|
|
101
112
|
tokenUsage = new TurnTokenUsage();
|
|
102
113
|
// Ordering only. Persisted archive state belongs exclusively to Codex.
|
|
103
114
|
archiveSequence = 0;
|
|
@@ -175,6 +186,7 @@ class CodexAdapter {
|
|
|
175
186
|
const version = stdout.trim().replace(/^codex-cli\s+/, "");
|
|
176
187
|
this.state.codexVersion = version;
|
|
177
188
|
this.permissionState.clear();
|
|
189
|
+
this.denials.clear();
|
|
178
190
|
this.state.compatibility = CODEX_COMPATIBILITY.verified.includes(version) ? "verified" : "unverified";
|
|
179
191
|
const child = spawn(
|
|
180
192
|
this.options.binary,
|
|
@@ -221,6 +233,7 @@ class CodexAdapter {
|
|
|
221
233
|
const wasReady = this.ready;
|
|
222
234
|
this.state.ready = false;
|
|
223
235
|
this.tokenUsage.clear();
|
|
236
|
+
this.denials.clear();
|
|
224
237
|
this.state.connection = "unavailable";
|
|
225
238
|
this.state.error = error.message;
|
|
226
239
|
this.expireActions();
|
|
@@ -765,6 +778,9 @@ class CodexAdapter {
|
|
|
765
778
|
const previous = this.permissionState.get(result.thread.id);
|
|
766
779
|
const settings = {
|
|
767
780
|
model: result.model ?? result.thread.model ?? null,
|
|
781
|
+
...reportedCollaborationMode(
|
|
782
|
+
result.collaborationMode
|
|
783
|
+
),
|
|
768
784
|
reasoningEffort: result.reasoningEffort ?? null,
|
|
769
785
|
...serviceTierSettings(result.serviceTier),
|
|
770
786
|
...permissionSettings(
|
|
@@ -848,15 +864,16 @@ class CodexAdapter {
|
|
|
848
864
|
threadId: id,
|
|
849
865
|
cwd,
|
|
850
866
|
input: taskInput(text, images),
|
|
851
|
-
...turnSettings(cwd, settings)
|
|
867
|
+
...turnSettings(cwd, settings),
|
|
868
|
+
...collaborationSelection(settings, this.permissionState.get(id))
|
|
852
869
|
})).turn
|
|
853
870
|
);
|
|
854
871
|
return turn;
|
|
855
872
|
}
|
|
856
|
-
async startReview(id) {
|
|
873
|
+
async startReview(id, target = { type: "uncommittedChanges" }) {
|
|
857
874
|
const result = await this.call("review/start", {
|
|
858
875
|
threadId: id,
|
|
859
|
-
target:
|
|
876
|
+
target: target.type === "commit" ? { ...target, title: null } : target,
|
|
860
877
|
delivery: "inline"
|
|
861
878
|
});
|
|
862
879
|
if (!isRecord(result) || result.reviewThreadId !== id)
|
|
@@ -877,6 +894,37 @@ class CodexAdapter {
|
|
|
877
894
|
async interruptTurn(id, turnId) {
|
|
878
895
|
await this.call("turn/interrupt", { threadId: id, turnId });
|
|
879
896
|
}
|
|
897
|
+
async getGoal(id) {
|
|
898
|
+
try {
|
|
899
|
+
return readGoal((await this.call("thread/goal/get", { threadId: id })).goal, id);
|
|
900
|
+
} catch (error) {
|
|
901
|
+
if (error instanceof Error && /goals feature is disabled/i.test(error.message))
|
|
902
|
+
throw new AppError("GOAL_UNAVAILABLE", "\u5F53\u524D Codex \u672A\u542F\u7528 goals \u529F\u80FD", 409);
|
|
903
|
+
throw error;
|
|
904
|
+
}
|
|
905
|
+
}
|
|
906
|
+
async mutateGoal(id, mutation) {
|
|
907
|
+
if (mutation.action === "clear") {
|
|
908
|
+
await this.call("thread/goal/clear", { threadId: id, origin: "user" });
|
|
909
|
+
return null;
|
|
910
|
+
}
|
|
911
|
+
const { action: _, ...fields } = mutation;
|
|
912
|
+
return readGoal(
|
|
913
|
+
(await this.call("thread/goal/set", { threadId: id, origin: "user", ...fields })).goal,
|
|
914
|
+
id
|
|
915
|
+
);
|
|
916
|
+
}
|
|
917
|
+
async recapThread(id, prompt) {
|
|
918
|
+
if (!this.titles) throw new CodexError("CODEX_UNAVAILABLE", "Codex unavailable");
|
|
919
|
+
return this.titles.recap(id, prompt);
|
|
920
|
+
}
|
|
921
|
+
listGuardianDenials(id) {
|
|
922
|
+
return this.denials.list(id);
|
|
923
|
+
}
|
|
924
|
+
async approveGuardianDenial(id, denialId) {
|
|
925
|
+
const event = this.denials.take(id, denialId);
|
|
926
|
+
await this.call("thread/approveGuardianDeniedAction", { threadId: id, event });
|
|
927
|
+
}
|
|
880
928
|
async compactThread(id) {
|
|
881
929
|
await this.call("thread/compact/start", { threadId: id });
|
|
882
930
|
}
|
|
@@ -920,9 +968,18 @@ class CodexAdapter {
|
|
|
920
968
|
);
|
|
921
969
|
break;
|
|
922
970
|
}
|
|
971
|
+
case "thread/goal/updated":
|
|
972
|
+
this.emit({ type: "goal", threadId: event.params.threadId, goal: event.params.goal });
|
|
973
|
+
break;
|
|
974
|
+
case "thread/goal/cleared":
|
|
975
|
+
this.emit({ type: "goal", threadId: event.params.threadId, goal: null });
|
|
976
|
+
break;
|
|
923
977
|
case "thread/settings/updated":
|
|
924
978
|
{
|
|
925
979
|
const observed = {
|
|
980
|
+
...reportedCollaborationMode(
|
|
981
|
+
event.params.threadSettings.collaborationMode
|
|
982
|
+
),
|
|
926
983
|
model: event.params.threadSettings.model ?? null,
|
|
927
984
|
reasoningEffort: event.params.threadSettings.effort ?? null,
|
|
928
985
|
...serviceTierSettings(event.params.threadSettings.serviceTier),
|
|
@@ -945,6 +1002,7 @@ class CodexAdapter {
|
|
|
945
1002
|
break;
|
|
946
1003
|
case "item/autoApprovalReview/started":
|
|
947
1004
|
case "item/autoApprovalReview/completed":
|
|
1005
|
+
if (event.method === "item/autoApprovalReview/completed") this.denials.record(event.params);
|
|
948
1006
|
this.emit({
|
|
949
1007
|
type: "autoReview",
|
|
950
1008
|
threadId: event.params.threadId,
|
|
@@ -1102,7 +1160,7 @@ class CodexAdapter {
|
|
|
1102
1160
|
await this.rpc?.reject(
|
|
1103
1161
|
message.id,
|
|
1104
1162
|
-32601,
|
|
1105
|
-
"Interactive tools are disabled for
|
|
1163
|
+
"Interactive tools are disabled for isolated helper requests"
|
|
1106
1164
|
);
|
|
1107
1165
|
return;
|
|
1108
1166
|
}
|