@covro/covro 0.5.1-dev.3 → 0.5.1-dev.5
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 +14 -43
- package/README.zh-CN.md +14 -43
- 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-BMy2AwDH.js} +1 -1
- package/dist/web/assets/{arc-ChLnTnZI.js → arc-DeUcXVmK.js} +1 -1
- package/dist/web/assets/{architecture-WOLXFQ4H-B2oEg329.js → architecture-WOLXFQ4H-B5DscTAH.js} +1 -1
- package/dist/web/assets/{architectureDiagram-ZHVYKT53-BzSXU9d0.js → architectureDiagram-ZHVYKT53-CwmVMMBS.js} +1 -1
- package/dist/web/assets/{blockDiagram-RJAE7QA3-xhCZ7iUm.js → blockDiagram-RJAE7QA3-CebOV20Y.js} +1 -1
- package/dist/web/assets/{c4Diagram-XDPPPE54-DZ8j79Mx.js → c4Diagram-XDPPPE54-ssP1dgbB.js} +1 -1
- package/dist/web/assets/channel-BONlMBPL.js +1 -0
- package/dist/web/assets/{chunk-2E7WHVMD-y5rSOViW.js → chunk-2E7WHVMD-BvN6p7-r.js} +1 -1
- package/dist/web/assets/{chunk-4EMNKR2T-B7WVoonr.js → chunk-4EMNKR2T-B5lsOa5d.js} +1 -1
- package/dist/web/assets/{chunk-55XCU76K-D-tlN44X.js → chunk-55XCU76K-C7v-VLmv.js} +1 -1
- package/dist/web/assets/{chunk-7S6XSTFO-31xOZx-Y.js → chunk-7S6XSTFO-DlQvFeJv.js} +1 -1
- package/dist/web/assets/{chunk-AQDTSKZB-CeCjUBmu.js → chunk-AQDTSKZB-DY66z9o6.js} +1 -1
- package/dist/web/assets/{chunk-DSNLSHJZ-DgzXTo3_.js → chunk-DSNLSHJZ-CNTCEJar.js} +1 -1
- package/dist/web/assets/{chunk-HAGFOTED-Dm22rez0.js → chunk-HAGFOTED-Ds8gP_pC.js} +1 -1
- package/dist/web/assets/{chunk-HNE4Q36P-CnFLQjbZ.js → chunk-HNE4Q36P-DmElQsSf.js} +1 -1
- package/dist/web/assets/{chunk-NQOKRVIF-7DXXp2d_.js → chunk-NQOKRVIF-PvGRAuAw.js} +1 -1
- package/dist/web/assets/{chunk-UHW7PFBP-Bw9-oVzV.js → chunk-UHW7PFBP-CtgMZDoT.js} +1 -1
- package/dist/web/assets/{chunk-VQ5W62QI-C9PHAHIJ.js → chunk-VQ5W62QI-6NJrEIzR.js} +1 -1
- package/dist/web/assets/{chunk-WQQL4CDK-C9nKxc0i.js → chunk-WQQL4CDK-DI2mRFvc.js} +1 -1
- package/dist/web/assets/{chunk-XXDRQBXY-DjdTeNXE.js → chunk-XXDRQBXY-CiBCRo3T.js} +1 -1
- package/dist/web/assets/{chunk-YZO67HFG-C1z77_dC.js → chunk-YZO67HFG-DtCoGutI.js} +1 -1
- package/dist/web/assets/{chunk-ZAUX2LTX-C7e41NBP.js → chunk-ZAUX2LTX-B7ylZUnx.js} +1 -1
- package/dist/web/assets/{chunk-ZCHMQSOR-Gv41Qgvd.js → chunk-ZCHMQSOR-BwN6F2pb.js} +1 -1
- package/dist/web/assets/{classDiagram-v2-4MYWR3UA-PjZDyaSs.js → classDiagram-v2-4MYWR3UA-DI-dMW0L.js} +1 -1
- package/dist/web/assets/{cose-bilkent-JH36ORCC-CvwZK3HN.js → cose-bilkent-JH36ORCC-BqNb8Qsf.js} +1 -1
- package/dist/web/assets/{cynefin-EF2NZ3EQ-Yn6p93cE.js → cynefin-EF2NZ3EQ-B9F8Lxxt.js} +1 -1
- package/dist/web/assets/{cynefinDiagram-WF24UDRP-BXa5Guxe.js → cynefinDiagram-WF24UDRP-V8w1XJro.js} +1 -1
- package/dist/web/assets/{dagre-NK4GIZVX-Cnskqb30.js → dagre-NK4GIZVX-CrQEcCfE.js} +1 -1
- package/dist/web/assets/{diagram-CBK3MWTC-K8WEazkZ.js → diagram-CBK3MWTC-CPcuEQV3.js} +1 -1
- package/dist/web/assets/{diagram-I5XIIV2D-CLzouqUh.js → diagram-I5XIIV2D-_QhPHtw6.js} +1 -1
- package/dist/web/assets/{diagram-ODIL2UCW-B_9ysyHU.js → diagram-ODIL2UCW-RA65VX6F.js} +1 -1
- package/dist/web/assets/{diagram-PFBEJUXE-D1ge5Ebx.js → diagram-PFBEJUXE-9OI5etAn.js} +1 -1
- package/dist/web/assets/{diagram-RJA3I4VV-DWF6V26r.js → diagram-RJA3I4VV-B10DlhGR.js} +1 -1
- package/dist/web/assets/{diagram-TYUNFSNR-BNM1pCS4.js → diagram-TYUNFSNR-BLwN-9mB.js} +1 -1
- package/dist/web/assets/{dist-_uWZFvFF.js → dist-DwHukJTB.js} +1 -1
- package/dist/web/assets/{ebnfDiagram-V4P3TTPT-Cge9YHFL.js → ebnfDiagram-V4P3TTPT-J7MBvK86.js} +1 -1
- package/dist/web/assets/{elk-QONTBCTQ-CY_393oL.js → elk-QONTBCTQ-DgtewEoX.js} +1 -1
- package/dist/web/assets/{erDiagram-KYQIGQAA-CCOr67SS.js → erDiagram-KYQIGQAA-Cn5kVne3.js} +1 -1
- package/dist/web/assets/{eventmodeling-K75KTNOO-BzNNWwRQ.js → eventmodeling-K75KTNOO-Cx1OdjIB.js} +1 -1
- package/dist/web/assets/flowDiagram-IUGLLWBU-HLbjrYlZ.js +1 -0
- package/dist/web/assets/{ganttDiagram-R7GPNTJY-8BewtZrJ.js → ganttDiagram-R7GPNTJY-x2B7XlcJ.js} +1 -1
- package/dist/web/assets/{gitGraph-VSP46ZUC-CrqJbic_.js → gitGraph-VSP46ZUC-CP1CGXSo.js} +1 -1
- package/dist/web/assets/{gitGraphDiagram-PDYL7XHY-Ddr5Q6Is.js → gitGraphDiagram-PDYL7XHY-B32E1dRa.js} +1 -1
- package/dist/web/assets/index-DXEj9ZMB.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-BqgII2wT.js} +1 -1
- package/dist/web/assets/{infoDiagram-MVDRKAX5-zlubFwKS.js → infoDiagram-MVDRKAX5-BV-WLQ_Y.js} +1 -1
- package/dist/web/assets/{ishikawaDiagram-HPEHV2GE-DdQfvqVi.js → ishikawaDiagram-HPEHV2GE-D2d2TDHI.js} +1 -1
- package/dist/web/assets/{journeyDiagram-BOSHW7O7-DZ4XswBd.js → journeyDiagram-BOSHW7O7-DdgHsdHz.js} +1 -1
- package/dist/web/assets/{kanban-definition-FNSA4HC5-B1BQdpKc.js → kanban-definition-FNSA4HC5-bzF0Iyr6.js} +1 -1
- package/dist/web/assets/{line-jQDqs207.js → line-DA04Ug-X.js} +1 -1
- package/dist/web/assets/{linear-DbYz4fU8.js → linear-DIrAIB_A.js} +1 -1
- package/dist/web/assets/{mermaid-parser.core-CY5CVNe8.js → mermaid-parser.core-DhCddf6t.js} +3 -3
- package/dist/web/assets/{mermaid.core-mETL7nBW.js → mermaid.core-sAbEeclG.js} +4 -4
- package/dist/web/assets/{mindmap-definition-6OY57UG3-CxgWFLxa.js → mindmap-definition-6OY57UG3-B7pbG4qr.js} +1 -1
- package/dist/web/assets/{packet-JDAUHWVQ-Czsr9kk7.js → packet-JDAUHWVQ-BpXWi4v7.js} +1 -1
- package/dist/web/assets/{pegDiagram-ECIUJNBX-BqYq-SA-.js → pegDiagram-ECIUJNBX-CnIz50ZX.js} +1 -1
- package/dist/web/assets/{pie-XZMESJXO-CRpxJzCy.js → pie-XZMESJXO-Cif1Ynbj.js} +1 -1
- package/dist/web/assets/{pieDiagram-GNMPY74T-Bt2wKk8z.js → pieDiagram-GNMPY74T-Ck5nOYI8.js} +1 -1
- package/dist/web/assets/{quadrantDiagram-D57K4MC3-VOKqYTgn.js → quadrantDiagram-D57K4MC3-DGWT1xA2.js} +1 -1
- package/dist/web/assets/{radar-ABXABTNO-wXmArQH-.js → radar-ABXABTNO-Cs5Evg0F.js} +1 -1
- package/dist/web/assets/{railroad-I3PHUGI6-CKPK4tQV.js → railroad-I3PHUGI6-bPE2bl6t.js} +1 -1
- package/dist/web/assets/{railroad-abnf-LNEFI6M7-BLEs3xqV.js → railroad-abnf-LNEFI6M7-Bf9uUUsQ.js} +1 -1
- package/dist/web/assets/{railroad-ebnf-DWYD2UWJ-DS5QZgky.js → railroad-ebnf-DWYD2UWJ-M2tmC6nN.js} +1 -1
- package/dist/web/assets/{railroad-peg-JR7BVNR7-DHWXNOSl.js → railroad-peg-JR7BVNR7-BLrv00Iy.js} +1 -1
- package/dist/web/assets/{railroadDiagram-Y72NRBL7-Cy4eWKH1.js → railroadDiagram-Y72NRBL7-BKzTLgo8.js} +1 -1
- package/dist/web/assets/{requirementDiagram-EQYSW5RA-Bvbk8wwe.js → requirementDiagram-EQYSW5RA-B99o2Aj1.js} +1 -1
- package/dist/web/assets/{sankeyDiagram-SY24JHO5-B4jGjMzu.js → sankeyDiagram-SY24JHO5-Bf5ZtsJ_.js} +1 -1
- package/dist/web/assets/{sequenceDiagram-BLEHNHQU-BpgUogv_.js → sequenceDiagram-BLEHNHQU-BGuIX9o_.js} +1 -1
- package/dist/web/assets/{src-DigPeGm7.js → src-CohAWB0C.js} +1 -1
- package/dist/web/assets/{stateDiagram-v2-A6IESKWZ-tHq7e40Q.js → stateDiagram-v2-A6IESKWZ-26L-tE9O.js} +1 -1
- package/dist/web/assets/{swimlanes-B3ENRKFQ-DVUPAaDR.js → swimlanes-B3ENRKFQ-C15cbuwK.js} +1 -1
- package/dist/web/assets/swimlanesDiagram-AYQRV4AK-CJVz2uN5.js +8 -0
- package/dist/web/assets/{timeline-definition-JXYKGLGB-BHMM9AHV.js → timeline-definition-JXYKGLGB-BeL4WpaZ.js} +1 -1
- package/dist/web/assets/{treeView-D4JQ5SDB-DZ7k_TTS.js → treeView-D4JQ5SDB-DizQY9xz.js} +1 -1
- package/dist/web/assets/{treemap-SAJKECNS-C1wGfVb4.js → treemap-SAJKECNS-D91-mGk5.js} +1 -1
- package/dist/web/assets/{usecaseDiagram-WPOLBNNX-BTg0K_GO.js → usecaseDiagram-WPOLBNNX-Ba0T4eoq.js} +1 -1
- package/dist/web/assets/{vennDiagram-Q3Y3IDCW-BTKShPx1.js → vennDiagram-Q3Y3IDCW-B0Q_6_0E.js} +1 -1
- package/dist/web/assets/{wardley-7MLQ67FV-DnYPM5OB.js → wardley-7MLQ67FV-BMqvKWF0.js} +1 -1
- package/dist/web/assets/{wardleyDiagram-IVAIDKWA-Dzb67Boa.js → wardleyDiagram-IVAIDKWA-shZdkY_1.js} +1 -1
- package/dist/web/assets/{xychartDiagram-4URNHDU4-qijltKIO.js → xychartDiagram-4URNHDU4-DAt5ftPl.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,13 +34,7 @@
|
|
|
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
|
-
|
|
38
|
-
|
|
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
|
-
|
|
41
|
-
See the [usage guide · 中文](docs/usage.zh-CN.md) for workflow details and controls.
|
|
42
|
-
|
|
43
|
-
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.
|
|
37
|
+
Find controls, shortcuts, and supported commands in the [usage guide · 中文](docs/usage.zh-CN.md) and [command guide](docs/slash-commands.md).
|
|
44
38
|
|
|
45
39
|
<details>
|
|
46
40
|
<summary><strong>📱 A workspace that fits your phone</strong></summary>
|
|
@@ -70,9 +64,9 @@ npm install -g @covro/covro
|
|
|
70
64
|
covro
|
|
71
65
|
```
|
|
72
66
|
|
|
73
|
-
`covro`
|
|
67
|
+
`covro` runs in the background; stop it with `covro stop`. See the [installation guide](docs/distribution.md) for configuration, logs, and login auto-start.
|
|
74
68
|
|
|
75
|
-
Open **<http://127.0.0.1:8787>** and click **+** beside **Unassigned** to
|
|
69
|
+
Open **<http://127.0.0.1:8787>** and click **+** beside **Unassigned** to start a task, or use **Add project** to [import a directory or clone a repository](docs/project-clone.md).
|
|
76
70
|
|
|
77
71
|
<a id="run-from-source"></a>
|
|
78
72
|
|
|
@@ -101,11 +95,7 @@ The host computer must stay awake and online. When adding projects remotely, ent
|
|
|
101
95
|
|
|
102
96
|
## Updates and release channels
|
|
103
97
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
Automatic installation is off by default and requires a verified Codex combination. Unverified combinations need explicit confirmation; unknown versions, missing or invalid compatibility declarations, and explicitly unsupported combinations block managed upgrades. Covro does not upgrade Codex CLI. See [updates and recovery](docs/distribution.md) for commands, compatibility checks, and backups.
|
|
107
|
-
|
|
108
|
-
DB Schema **7** is tracked separately from the application version; older applications cannot open newer databases. Backups cover Covro’s database and service configuration, excluding project files, Codex history, and credentials. Restore requires stopping the service; see [backups](docs/backups.md) and [database compatibility](docs/database.md).
|
|
98
|
+
Choose stable, beta, or dev in the update panel or with `covro update`. Managed upgrades support **macOS and Linux npm global installations**; other installations use their original update method. Automatic installation is off by default and requires verified Codex compatibility; unverified combinations need explicit confirmation. Covro does not upgrade Codex CLI. See [updates and recovery](docs/distribution.md).
|
|
109
99
|
|
|
110
100
|
## Your computer, your workspace
|
|
111
101
|
|
|
@@ -113,42 +103,23 @@ Covro connects to your existing CLI through `codex app-server`. Tasks, projects,
|
|
|
113
103
|
|
|
114
104
|
Covro is for a single user. The [Shell panel](docs/shell.md) runs non-interactive commands using Codex’s configured sandbox. An interactive terminal, file editor, Git GUI, and multi-user team management are outside the current scope.
|
|
115
105
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
```sh
|
|
119
|
-
pnpm format:check
|
|
120
|
-
pnpm typecheck
|
|
121
|
-
pnpm lint
|
|
122
|
-
pnpm test
|
|
123
|
-
pnpm build
|
|
124
|
-
pnpm test:e2e
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
Browser tests require the Chromium version used by the existing Playwright dependency. Tests and CI use explicit fixtures; they do not send real model requests.
|
|
106
|
+
DB Schema **7** is independent of the application version; older applications cannot open newer databases. Backups cover only Covro’s database and service configuration, excluding project files, Codex history, and credentials. Restore requires stopping the service. See [backups](docs/backups.md) and [database compatibility](docs/database.md).
|
|
128
107
|
|
|
129
|
-
|
|
108
|
+
## Development and contribution
|
|
130
109
|
|
|
131
|
-
|
|
110
|
+
See the [contribution guide](docs/contributing.md) for development setup, checks, and PR conventions. [Open an issue](https://github.com/yuzheng14/covro/issues) or send a focused PR; update both READMEs when changing user-facing facts.
|
|
132
111
|
|
|
133
112
|
<a id="documentation"></a>
|
|
134
113
|
|
|
135
114
|
## 📚 Documentation
|
|
136
115
|
|
|
137
|
-
|
|
|
138
|
-
|
|
|
139
|
-
| [
|
|
140
|
-
| [
|
|
141
|
-
| [
|
|
142
|
-
| [
|
|
143
|
-
| [
|
|
144
|
-
| [Architecture](docs/architecture.md) | How the gateway, Codex adapter, and browser fit together |
|
|
145
|
-
| [Verification](docs/verification.md) | Test coverage and recorded live checks |
|
|
146
|
-
| [Projects](docs/project-clone.md) · [Workspaces](docs/workspaces.md) | Importing, cloning, and conversation directories |
|
|
147
|
-
| [Languages](docs/i18n.md) · [History loading](docs/session-history.md) | Interface language and conversation loading |
|
|
148
|
-
| [Shell](docs/shell.md) | Command execution and sandbox limits |
|
|
149
|
-
| [Backups](docs/backups.md) · [Database](docs/database.md) | Snapshot scope, compatibility, and offline recovery |
|
|
150
|
-
| [Contributing](docs/contributing.md) · [Releases](docs/releases.md) | Formatting, PRs, and publishing |
|
|
151
|
-
| [Brand assets](docs/brand.md) | Editable SVG logo and wordmarks |
|
|
116
|
+
| Topic | Guides |
|
|
117
|
+
| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
118
|
+
| Everyday use | [Usage · 中文](docs/usage.zh-CN.md) · [Commands](docs/slash-commands.md) · [Shell](docs/shell.md) · [Capacity retries](docs/capacity-retry.md) |
|
|
119
|
+
| Projects and conversations | [Import and clone](docs/project-clone.md) · [Workspaces](docs/workspaces.md) · [History loading](docs/session-history.md) |
|
|
120
|
+
| Setup and access | [Install and update](docs/distribution.md) · [Deployment](docs/deployment.md) · [Interface languages](docs/i18n.md) |
|
|
121
|
+
| Data and compatibility | [Backups](docs/backups.md) · [Database](docs/database.md) · [Codex compatibility](docs/compatibility.md) |
|
|
122
|
+
| Development and releases | [Contributing](docs/contributing.md) · [Architecture](docs/architecture.md) · [Verification](docs/verification.md) · [Releases](docs/releases.md) · [Brand assets](docs/brand.md) |
|
|
152
123
|
|
|
153
124
|
## License
|
|
154
125
|
|
package/README.zh-CN.md
CHANGED
|
@@ -34,13 +34,7 @@
|
|
|
34
34
|
- 📖 **一边看产出,一边讨论。** 电脑上将文档、图表和代码变更与会话并排阅读,手机上使用全屏阅读器。
|
|
35
35
|
- 🔔 **及时收到待办提醒。** 开启浏览器通知,在工作结束、需要回答或审批时收到提醒;需在支持通知的桌面浏览器中保持页面运行。
|
|
36
36
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
当前模型容量不足时,Covro 会展示原生重试进度;如果 Codex 没有自行重试,且本轮尚无输出或工具操作,会在 5、10、20 秒后最多补偿重试 3 次。可以取消,也可以选择其他模型后手动重试。恢复边界见[容量重试说明](docs/capacity-retry.md)。
|
|
40
|
-
|
|
41
|
-
操作方式与使用细节见[使用指南](docs/usage.zh-CN.md)。
|
|
42
|
-
|
|
43
|
-
在当前工作区新建会话:macOS 按 **⌘ + Option + N**,Windows/Linux 按 **Ctrl + Alt + N**。输入框会自动获得焦点,已有草稿继续保留。工作区有可识别的 GitHub remote 时,点击顶部 GitHub 图标即可在新标签页打开仓库;remote 选择规则见[工作区说明](docs/workspaces.md#快捷打开-github-仓库)。
|
|
37
|
+
操作、快捷键和命令用法见[使用指南](docs/usage.zh-CN.md)与[Slash 命令说明](docs/slash-commands.md)。
|
|
44
38
|
|
|
45
39
|
<details>
|
|
46
40
|
<summary><strong>📱 手机上也能舒服地使用</strong></summary>
|
|
@@ -70,9 +64,9 @@ npm install -g @covro/covro
|
|
|
70
64
|
covro
|
|
71
65
|
```
|
|
72
66
|
|
|
73
|
-
`covro`
|
|
67
|
+
`covro` 在后台启动,使用 `covro stop` 停止。配置、日志与登录自启见[安装指南](docs/distribution.md)。
|
|
74
68
|
|
|
75
|
-
打开 **<http://127.0.0.1:8787>**,点击 **未关联项目**
|
|
69
|
+
打开 **<http://127.0.0.1:8787>**,点击 **未关联项目** 旁的 **+** 开始任务,或通过 **添加项目** [导入目录或克隆仓库](docs/project-clone.md)。
|
|
76
70
|
|
|
77
71
|
<a id="从源码运行"></a>
|
|
78
72
|
|
|
@@ -101,11 +95,7 @@ pnpm start -- --config ./config.local.json
|
|
|
101
95
|
|
|
102
96
|
## 更新与版本渠道
|
|
103
97
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
自动安装默认关闭,且只接受已验证的 Codex 组合。未验证组合需要明确确认;版本未知、兼容声明缺失或无效、明确不支持的组合会阻止受管升级。Covro 不会升级 Codex CLI。完整命令、兼容检查和备份说明见[更新与恢复](docs/distribution.md)。
|
|
107
|
-
|
|
108
|
-
DB Schema **7** 独立于应用版本管理,旧应用不能打开更新的数据库。备份覆盖 Covro 数据库和服务配置,不包含项目文件、Codex 历史或凭据。恢复需要停服,详见[备份与恢复](docs/backups.md)和[数据库兼容规则](docs/database.md)。
|
|
98
|
+
在更新面板或通过 `covro update` 选择稳定、预览或开发渠道。受管升级支持 **macOS 和 Linux 的 npm 全局安装**,其他安装方式沿用原更新方法。自动安装默认关闭,且只接受已验证的 Codex 组合;未验证组合需明确确认。Covro 不会升级 Codex CLI。详见[更新与恢复](docs/distribution.md)。
|
|
109
99
|
|
|
110
100
|
## 你的电脑,你的工作台
|
|
111
101
|
|
|
@@ -113,42 +103,23 @@ Covro 通过 `codex app-server` 连接已有 CLI,沿用你的 Codex 登录与
|
|
|
113
103
|
|
|
114
104
|
Covro 面向单用户。[Shell 面板](docs/shell.md)沿用 Codex 配置的沙箱执行非交互命令。交互终端、文件编辑器、Git 图形界面与多人团队管理不在当前范围内。
|
|
115
105
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
```sh
|
|
119
|
-
pnpm format:check
|
|
120
|
-
pnpm typecheck
|
|
121
|
-
pnpm lint
|
|
122
|
-
pnpm test
|
|
123
|
-
pnpm build
|
|
124
|
-
pnpm test:e2e
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
浏览器测试需要现有 Playwright 依赖所对应的 Chromium。测试与 CI 使用明确的测试夹具,不发起真实模型请求。
|
|
106
|
+
DB Schema **7** 独立于应用版本,旧应用不能打开更新的数据库。备份只覆盖 Covro 数据库和服务配置,不包含项目文件、Codex 历史或凭据;恢复需停服。详见[备份](docs/backups.md)与[数据库兼容规则](docs/database.md)。
|
|
128
107
|
|
|
129
|
-
|
|
108
|
+
## 开发与参与
|
|
130
109
|
|
|
131
|
-
|
|
110
|
+
开发环境、检查命令与 PR 约定见[贡献指南](docs/contributing.md)。欢迎[提交 Issue](https://github.com/yuzheng14/covro/issues) 或范围明确的 PR;面向使用者的变更需同步更新两份 README。
|
|
132
111
|
|
|
133
112
|
<a id="文档导航"></a>
|
|
134
113
|
|
|
135
114
|
## 📚 文档导航
|
|
136
115
|
|
|
137
|
-
|
|
|
138
|
-
|
|
|
139
|
-
| [
|
|
140
|
-
| [
|
|
141
|
-
| [
|
|
142
|
-
| [
|
|
143
|
-
| [
|
|
144
|
-
| [架构](docs/architecture.md) | 网关、Codex 适配器与浏览器的协作方式 |
|
|
145
|
-
| [验证记录](docs/verification.md) | 测试范围与真实环境检查记录 |
|
|
146
|
-
| [项目](docs/project-clone.md) · [工作目录](docs/workspaces.md) | 导入、克隆与会话目录 |
|
|
147
|
-
| [语言](docs/i18n.md) · [历史加载](docs/session-history.md) | 界面语言与会话加载 |
|
|
148
|
-
| [Shell](docs/shell.md) | 命令执行与沙箱限制 |
|
|
149
|
-
| [备份](docs/backups.md) · [数据库](docs/database.md) | 快照范围、兼容性与停服恢复 |
|
|
150
|
-
| [开发约定](docs/contributing.md) · [发版](docs/releases.md) | 格式、PR 与发布流程 |
|
|
151
|
-
| [品牌素材](docs/brand.md) | 可编辑的 SVG 图标与完整标识 |
|
|
116
|
+
| 主题 | 指南 |
|
|
117
|
+
| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
118
|
+
| 日常使用 | [使用指南](docs/usage.zh-CN.md) · [命令](docs/slash-commands.md) · [Shell](docs/shell.md) · [容量重试](docs/capacity-retry.md) |
|
|
119
|
+
| 项目与会话 | [导入与克隆](docs/project-clone.md) · [工作目录](docs/workspaces.md) · [历史加载](docs/session-history.md) |
|
|
120
|
+
| 安装与访问 | [安装与更新](docs/distribution.md) · [部署](docs/deployment.md) · [界面语言](docs/i18n.md) |
|
|
121
|
+
| 数据与兼容 | [备份](docs/backups.md) · [数据库](docs/database.md) · [Codex 兼容性](docs/compatibility.md) |
|
|
122
|
+
| 开发与发布 | [贡献](docs/contributing.md) · [架构](docs/architecture.md) · [验证](docs/verification.md) · [发版](docs/releases.md) · [品牌素材](docs/brand.md) |
|
|
152
123
|
|
|
153
124
|
## 许可证
|
|
154
125
|
|
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
|
}
|