@covro/covro 0.3.1-dev.1 → 0.3.1-dev.2
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 +10 -8
- package/README.zh-CN.md +10 -8
- package/dist/drizzle/0006_project_order.sql +8 -0
- package/dist/drizzle/meta/0006_snapshot.json +488 -0
- package/dist/drizzle/meta/_journal.json +7 -0
- package/dist/server/db/schema.js +1 -0
- package/dist/server/db/schema.js.map +2 -2
- package/dist/server/http.js +10 -0
- package/dist/server/http.js.map +2 -2
- package/dist/server/projects.js +48 -5
- package/dist/server/projects.js.map +2 -2
- package/dist/server/service.js +5 -0
- package/dist/server/service.js.map +2 -2
- package/dist/shared/updates.js.map +2 -2
- package/dist/shared/validation.js +2 -0
- package/dist/shared/validation.js.map +2 -2
- package/dist/update-worker.cjs +4 -3
- package/dist/updates/manager.js +7 -4
- package/dist/updates/manager.js.map +2 -2
- package/dist/updates/registry.js +21 -9
- package/dist/updates/registry.js.map +3 -3
- package/dist/updates/worker.js +3 -3
- package/dist/updates/worker.js.map +2 -2
- package/dist/web/assets/{abnfDiagram-WEYOIA3C-DLvlob5t.js → abnfDiagram-WEYOIA3C-BFmMm05x.js} +1 -1
- package/dist/web/assets/{arc-DgauwgFe.js → arc-lnrGH4K4.js} +1 -1
- package/dist/web/assets/{architecture-WOLXFQ4H-DvjLv0QN.js → architecture-WOLXFQ4H-CDbpw3av.js} +1 -1
- package/dist/web/assets/{architectureDiagram-ZHVYKT53-BAyZGlzu.js → architectureDiagram-ZHVYKT53-Br4uXjzV.js} +1 -1
- package/dist/web/assets/{blockDiagram-RJAE7QA3-BVfkmjlt.js → blockDiagram-RJAE7QA3-2cto1XrH.js} +1 -1
- package/dist/web/assets/{c4Diagram-XDPPPE54-rTsfyMoB.js → c4Diagram-XDPPPE54-pPOONSo8.js} +1 -1
- package/dist/web/assets/channel-D_YOL9S0.js +1 -0
- package/dist/web/assets/{chunk-2E7WHVMD-CQ_N_vLS.js → chunk-2E7WHVMD-CqOBPcBj.js} +1 -1
- package/dist/web/assets/{chunk-4EMNKR2T-wBy_gyo6.js → chunk-4EMNKR2T-BvMm1kcN.js} +1 -1
- package/dist/web/assets/{chunk-55XCU76K-DYiwIhmI.js → chunk-55XCU76K-CojzCeCA.js} +1 -1
- package/dist/web/assets/{chunk-7S6XSTFO-CRGtfVHg.js → chunk-7S6XSTFO-wa76hIsr.js} +1 -1
- package/dist/web/assets/{chunk-AQDTSKZB-1G2Za6bm.js → chunk-AQDTSKZB-tD5bFGjM.js} +1 -1
- package/dist/web/assets/{chunk-DSNLSHJZ-B1LLoYuG.js → chunk-DSNLSHJZ-ByVh88M0.js} +1 -1
- package/dist/web/assets/{chunk-HAGFOTED-78h1RpHh.js → chunk-HAGFOTED-BhOQL-iG.js} +1 -1
- package/dist/web/assets/{chunk-HNE4Q36P-DmR5B27Q.js → chunk-HNE4Q36P-BZiD7Dq0.js} +1 -1
- package/dist/web/assets/{chunk-NQOKRVIF-D7WSEPzg.js → chunk-NQOKRVIF-DhSSkcDm.js} +1 -1
- package/dist/web/assets/{chunk-UHW7PFBP-gl7a5V-l.js → chunk-UHW7PFBP-BONg0JLM.js} +1 -1
- package/dist/web/assets/{chunk-VQ5W62QI-KaBXxBre.js → chunk-VQ5W62QI-CehpDQpX.js} +1 -1
- package/dist/web/assets/{chunk-WQQL4CDK-DDczFoOr.js → chunk-WQQL4CDK-C4Cm0U7u.js} +1 -1
- package/dist/web/assets/{chunk-XXDRQBXY-3ug4Qhxg.js → chunk-XXDRQBXY-Ddcg44F2.js} +1 -1
- package/dist/web/assets/{chunk-YZO67HFG-BpWOuCXP.js → chunk-YZO67HFG-CJYc1t5Y.js} +1 -1
- package/dist/web/assets/{chunk-ZAUX2LTX-1ojPb1if.js → chunk-ZAUX2LTX-BeF7PiBe.js} +1 -1
- package/dist/web/assets/{chunk-ZCHMQSOR-D2kK2cPj.js → chunk-ZCHMQSOR-BzxdttZQ.js} +1 -1
- package/dist/web/assets/{classDiagram-v2-4MYWR3UA-B7eMvxAO.js → classDiagram-v2-4MYWR3UA-XeRozDII.js} +1 -1
- package/dist/web/assets/{cose-bilkent-JH36ORCC-BtB8mbt8.js → cose-bilkent-JH36ORCC-zvgm5h82.js} +1 -1
- package/dist/web/assets/{cynefin-EF2NZ3EQ-CIctqxlE.js → cynefin-EF2NZ3EQ-DffawypB.js} +1 -1
- package/dist/web/assets/{cynefinDiagram-WF24UDRP-qat2GD9P.js → cynefinDiagram-WF24UDRP-e2kk_Xg4.js} +1 -1
- package/dist/web/assets/{dagre-NK4GIZVX-OJamzzID.js → dagre-NK4GIZVX-DPTt7HIR.js} +1 -1
- package/dist/web/assets/{diagram-CBK3MWTC-C7cX2tqO.js → diagram-CBK3MWTC-CKQPukdf.js} +1 -1
- package/dist/web/assets/{diagram-I5XIIV2D-DsMfKVN7.js → diagram-I5XIIV2D-CBI_lUfl.js} +1 -1
- package/dist/web/assets/{diagram-ODIL2UCW-Cz66FxdJ.js → diagram-ODIL2UCW-DXuDuOob.js} +1 -1
- package/dist/web/assets/{diagram-PFBEJUXE-CwhPuwKj.js → diagram-PFBEJUXE-C9Y1lchY.js} +1 -1
- package/dist/web/assets/{diagram-RJA3I4VV-C52IGiFJ.js → diagram-RJA3I4VV-CbcN7pHo.js} +1 -1
- package/dist/web/assets/{diagram-TYUNFSNR-C2LZVLKY.js → diagram-TYUNFSNR-D_MmDJKc.js} +1 -1
- package/dist/web/assets/{dist-Bxu8YbZb.js → dist-C-d_G2FS.js} +1 -1
- package/dist/web/assets/{ebnfDiagram-V4P3TTPT-eQKKlMli.js → ebnfDiagram-V4P3TTPT-CIlDI7Ps.js} +1 -1
- package/dist/web/assets/{elk-QONTBCTQ-C5kIOZTA.js → elk-QONTBCTQ-BrywoKK7.js} +1 -1
- package/dist/web/assets/{erDiagram-KYQIGQAA-CMTowz5P.js → erDiagram-KYQIGQAA-CKg6BT7V.js} +1 -1
- package/dist/web/assets/{eventmodeling-K75KTNOO-C5v-UF8X.js → eventmodeling-K75KTNOO-BkwvMA16.js} +1 -1
- package/dist/web/assets/flowDiagram-IUGLLWBU-DTkRetsK.js +1 -0
- package/dist/web/assets/{ganttDiagram-R7GPNTJY-B0viiC-b.js → ganttDiagram-R7GPNTJY-DR_AlXXn.js} +1 -1
- package/dist/web/assets/{gitGraph-VSP46ZUC-tEjFmPhN.js → gitGraph-VSP46ZUC-Cv1cefI5.js} +1 -1
- package/dist/web/assets/{gitGraphDiagram-PDYL7XHY-CsOwt7jz.js → gitGraphDiagram-PDYL7XHY-D_prlvP9.js} +1 -1
- package/dist/web/assets/index-Br54jmas.js +147 -0
- package/dist/web/assets/index-Crq1cgK9.css +1 -0
- package/dist/web/assets/{info-OHQRW6UA-DnFGu4Ew.js → info-OHQRW6UA--i-b1e1W.js} +1 -1
- package/dist/web/assets/{infoDiagram-MVDRKAX5-B6WiNaDF.js → infoDiagram-MVDRKAX5-D5xGvRSb.js} +1 -1
- package/dist/web/assets/{ishikawaDiagram-HPEHV2GE-Dn70fI1r.js → ishikawaDiagram-HPEHV2GE-CdDzjaNo.js} +1 -1
- package/dist/web/assets/{journeyDiagram-BOSHW7O7-BUjYzV2f.js → journeyDiagram-BOSHW7O7-DYXkvOgG.js} +1 -1
- package/dist/web/assets/{kanban-definition-FNSA4HC5-BDMfWbtB.js → kanban-definition-FNSA4HC5-DMRrVeRI.js} +1 -1
- package/dist/web/assets/{line-DNSRZHBK.js → line-IKuSdaT6.js} +1 -1
- package/dist/web/assets/{linear-CrS49q6J.js → linear-DG-Bn7df.js} +1 -1
- package/dist/web/assets/{mermaid-parser.core-DXuyO8Px.js → mermaid-parser.core-Cr4hqI31.js} +3 -3
- package/dist/web/assets/{mermaid.core-DUTnbQkq.js → mermaid.core-Ch6ggfwZ.js} +4 -4
- package/dist/web/assets/{mindmap-definition-6OY57UG3-CqZTtItJ.js → mindmap-definition-6OY57UG3-BLIFHye9.js} +1 -1
- package/dist/web/assets/{packet-JDAUHWVQ-DXEZgY0a.js → packet-JDAUHWVQ-BaBw3Vck.js} +1 -1
- package/dist/web/assets/{pegDiagram-ECIUJNBX-D6CCPNem.js → pegDiagram-ECIUJNBX-BgFAs43s.js} +1 -1
- package/dist/web/assets/{pie-XZMESJXO-AXRFjZ4G.js → pie-XZMESJXO-Dr-clP68.js} +1 -1
- package/dist/web/assets/{pieDiagram-GNMPY74T-B9Ss8_5s.js → pieDiagram-GNMPY74T-bQ1SwzEf.js} +1 -1
- package/dist/web/assets/{quadrantDiagram-D57K4MC3-JrlylCtz.js → quadrantDiagram-D57K4MC3-suHq6vLw.js} +1 -1
- package/dist/web/assets/{radar-ABXABTNO-ChFm4hZg.js → radar-ABXABTNO-Cd4Nn-aB.js} +1 -1
- package/dist/web/assets/{railroad-I3PHUGI6-DaXXzqhZ.js → railroad-I3PHUGI6-BEUNjieA.js} +1 -1
- package/dist/web/assets/{railroad-abnf-LNEFI6M7-DGE67q11.js → railroad-abnf-LNEFI6M7-DosoD9le.js} +1 -1
- package/dist/web/assets/{railroad-ebnf-DWYD2UWJ-Cq9S3q72.js → railroad-ebnf-DWYD2UWJ-CNykm4Du.js} +1 -1
- package/dist/web/assets/{railroad-peg-JR7BVNR7-D2Gth3eY.js → railroad-peg-JR7BVNR7-C97ZuCXG.js} +1 -1
- package/dist/web/assets/{railroadDiagram-Y72NRBL7-BpkXX59H.js → railroadDiagram-Y72NRBL7-B1BnvTWP.js} +1 -1
- package/dist/web/assets/{requirementDiagram-EQYSW5RA-oNp3DMM4.js → requirementDiagram-EQYSW5RA-CrlURwLY.js} +1 -1
- package/dist/web/assets/{sankeyDiagram-SY24JHO5-bHfheSKO.js → sankeyDiagram-SY24JHO5-CEYWGGec.js} +1 -1
- package/dist/web/assets/{sequenceDiagram-BLEHNHQU-CEM2XfNF.js → sequenceDiagram-BLEHNHQU-CbUEnXPs.js} +1 -1
- package/dist/web/assets/{src-KjMctvzy.js → src-Dy1r7Mij.js} +1 -1
- package/dist/web/assets/{stateDiagram-v2-A6IESKWZ-D_TaR_ix.js → stateDiagram-v2-A6IESKWZ-DkxgX1jY.js} +1 -1
- package/dist/web/assets/{swimlanes-B3ENRKFQ-BUYl2fsg.js → swimlanes-B3ENRKFQ-B7RmFqNN.js} +1 -1
- package/dist/web/assets/swimlanesDiagram-AYQRV4AK-C0XU1o_x.js +8 -0
- package/dist/web/assets/{timeline-definition-JXYKGLGB-CpKsGN6d.js → timeline-definition-JXYKGLGB-DdaRshUD.js} +1 -1
- package/dist/web/assets/{treeView-D4JQ5SDB-Dioaagqt.js → treeView-D4JQ5SDB-UjtdDBri.js} +1 -1
- package/dist/web/assets/{treemap-SAJKECNS-B8NLQ14o.js → treemap-SAJKECNS-CfFPhlAU.js} +1 -1
- package/dist/web/assets/{usecaseDiagram-WPOLBNNX-CfwdxcsG.js → usecaseDiagram-WPOLBNNX-DpibMf1h.js} +1 -1
- package/dist/web/assets/{vennDiagram-Q3Y3IDCW-DQoKGtXo.js → vennDiagram-Q3Y3IDCW-DB_R8qT1.js} +1 -1
- package/dist/web/assets/{wardley-7MLQ67FV-DQHLHmeZ.js → wardley-7MLQ67FV-Bhatoa5s.js} +1 -1
- package/dist/web/assets/{wardleyDiagram-IVAIDKWA-DV-lq7zb.js → wardleyDiagram-IVAIDKWA-DBhy_JBR.js} +1 -1
- package/dist/web/assets/{xychartDiagram-4URNHDU4-wV4ueoGC.js → xychartDiagram-4URNHDU4-C2oV2jkE.js} +1 -1
- package/dist/web/index.html +2 -2
- package/package.json +4 -4
- package/dist/web/assets/channel-GGfPocHk.js +0 -1
- package/dist/web/assets/flowDiagram-IUGLLWBU-C-jE8afx.js +0 -1
- package/dist/web/assets/index-COSho7m2.css +0 -1
- package/dist/web/assets/index-D7GZPtTj.js +0 -147
- package/dist/web/assets/swimlanesDiagram-AYQRV4AK-DDLmyR4x.js +0 -8
package/README.md
CHANGED
|
@@ -32,12 +32,12 @@
|
|
|
32
32
|
- 📱 **Step away from your desk. Stay with the task.** Follow tool activity, inspect file changes, handle permission requests, and answer Codex's questions from your computer or phone. Closing the page doesn't cancel the task.
|
|
33
33
|
- 💬 **Start without a project.** Use **New session** to start in an automatically assigned directory. Conversations and files stay available after refresh, restart, or archive.
|
|
34
34
|
- 🌐 **Choose your interface language.** Switch between 简体中文, English, 日本語 and 한국어 without leaving your session. Prompts, replies, tool output and paths remain unchanged. [Localization details](docs/i18n.md).
|
|
35
|
-
- 🗂️ **See every project in one place.** Run independent tasks in parallel and spot which conversations are working, waiting for approval, or ready to read.
|
|
35
|
+
- 🗂️ **See every project in one place.** Run independent tasks in parallel and spot which conversations are working, waiting for approval, or ready to read. Use **Reorder projects** to drag projects or move them with the arrow buttons on desktop and mobile. Your order survives refreshes and restarts; new or restored projects appear at the end.
|
|
36
36
|
- 💬 **Pick up your Codex CLI conversations.** Browse saved history, resume existing work, or fork a new direction. Rename conversations to find them later and archive them when you're done. View and copy the full Thread ID in conversation details or diagnostics.
|
|
37
37
|
- ⚡ **Open long conversations sooner.** Recent messages appear first; scrolling preloads older history. On this device, cached conversation lists and history pages appear while the server checks for updates. [Loading and cache behavior](docs/session-history.md).
|
|
38
38
|
- 📖 **Review the work beside the conversation.** Read Markdown documents with code, tables, images, and Mermaid diagrams, or open JSON files in a desktop side panel while you keep talking to Codex. Mermaid diagrams also render in replies; view or copy their source and inspect wide diagrams at actual size. JSON previews include indentation, syntax highlighting, and original text for invalid JSON. Copy the unchanged source, with a full-screen reader on mobile. File previews are read-only; Markdown and JSON files have a 2 MiB limit.
|
|
39
39
|
- 🔎 **Inspect code changes.** Open Codex’s saved patches for a turn or tool in the same read-only panel. Scroll through all files, inspect line numbers, see the exact words changed within each line, and jump between change blocks. Long diffs start collapsed and render when expanded. File headers stay visible while scrolling so you can collapse the current file.
|
|
40
|
-
- ✍️ **Switch tasks without losing your draft.** Each conversation keeps its own draft, pasted images, and model settings in the current page. Copy or export results when you're done.
|
|
40
|
+
- ✍️ **Switch tasks without losing your draft.** Each conversation keeps its own draft, pasted images, and model settings in the current page. On phones and tablets, Enter inserts a new line and the send button submits; desktop keeps Enter to send and Shift + Enter for a new line. Copy or export results when you're done. Use the copy button at the top right of a command’s output to copy all loaded results; truncated output is clearly marked.
|
|
41
41
|
- 🖥️ **Run a command beside your task.** Open **Shell** to execute commands in the selected project's directory, follow stdout/stderr, interrupt a run, and reuse recent commands. The panel uses Codex's configured sandbox, with a ten-minute limit and no interactive input. Closing it keeps the command running. [Capabilities and limits](docs/shell.md).
|
|
42
42
|
- 🛟 **Keep a recovery point.** Open **Backups and recovery** in the sidebar to create a server-side backup, follow its progress and review verified snapshots. Upgrades use the same backup engine. Recovery runs offline through the CLI. [Scope and recovery instructions](docs/backups.md).
|
|
43
43
|
|
|
@@ -139,11 +139,13 @@ covro update
|
|
|
139
139
|
covro update --channel dev
|
|
140
140
|
```
|
|
141
141
|
|
|
142
|
-
| Channel | npm tag
|
|
143
|
-
| ------- |
|
|
144
|
-
| Stable | `latest`
|
|
145
|
-
| Beta | `beta`
|
|
146
|
-
| Dev | `dev`
|
|
142
|
+
| Channel | npm tag | Choose it for |
|
|
143
|
+
| ------- | ---------------- | ------------------------------------------------ |
|
|
144
|
+
| Stable | `latest` | Regular use |
|
|
145
|
+
| Beta | `beta`, `latest` | Maintainer-selected Beta tags or GitHub Releases |
|
|
146
|
+
| Dev | `dev`, `latest` | New main-branch changes after CI passes |
|
|
147
|
+
|
|
148
|
+
Stable checks only `latest`. Beta and Dev each compare their own tag with `latest` and select the newest version by SemVer; Dev does not receive Beta. Installing a stable version keeps your selected subscription, so future Beta or Dev updates remain available. Older candidates require explicit downgrade permission.
|
|
147
149
|
|
|
148
150
|
Successful Dev and Beta npm publications also create a [GitHub Pre-release](https://github.com/yuzheng14/covro/releases) with automatically generated notes. The comparison starts from whichever has the newer source commit: the preceding version in the same channel or a stable version. Push a Beta tag to publish both the npm package and its Pre-release; existing release notes are preserved on retries. Beta notes also include compatibility declarations from the selected source. Stable releases retain their grouped changelog.
|
|
149
151
|
|
|
@@ -151,7 +153,7 @@ Each release declares its recommended and verified Codex CLI versions. The updat
|
|
|
151
153
|
|
|
152
154
|
Automatic installation is off by default. Managed upgrades support **macOS and Linux npm global installations**; source, linked, container, and Windows installations use their original update method. A failed candidate is rolled back before business writes resume; downgrades must pass database compatibility checks. Old backups are retained without automatic rotation.
|
|
153
155
|
|
|
154
|
-
DB Schema **
|
|
156
|
+
DB Schema **7** is tracked independently of the application version. Releases declare the schema and the verified backup migration range; an older application cannot open a newer database. See [database compatibility](docs/database.md).
|
|
155
157
|
|
|
156
158
|
Managed upgrades create and validate a private backup of the Covro database and service configuration before replacing the installation. A failed backup blocks activation. These snapshots do not include Codex history, credentials or project files. See [backup scope](docs/backups.md).
|
|
157
159
|
|
package/README.zh-CN.md
CHANGED
|
@@ -32,12 +32,12 @@
|
|
|
32
32
|
- 📱 **离开电脑,也能跟进任务。** 在电脑或手机上查看工具活动与文件变更、处理权限审批、回答 Codex 的问题。关闭页面,任务仍会继续。
|
|
33
33
|
- 💬 **无需项目,也能直接开始。** 点击 **新建会话**,应用自动分配独立目录;刷新、重启或归档后,会话和文件仍保留。
|
|
34
34
|
- 🌐 **选择界面语言。** 支持简体中文、English、日本語和 한국어,会话内即可切换;输入、回复、工具原文和路径保持不变。[多语言说明](docs/i18n.md)。
|
|
35
|
-
- 🗂️ **多个项目,一眼掌握进展。**
|
|
35
|
+
- 🗂️ **多个项目,一眼掌握进展。** 让独立任务并行执行,随时看到哪些会话正在工作、等待审批,哪些已有结果可读。点击「调整项目顺序」,在电脑上拖拽项目,或在电脑和手机上用上下按钮排序;刷新和重启后顺序仍然保留,新增或重新添加的项目排在末尾。
|
|
36
36
|
- 💬 **接着你的 Codex CLI 会话。** 浏览已有历史、恢复工作,或 Fork 一个新方向;为会话命名以便查找,完成后归档。在会话详情或状态诊断中查看、复制完整 Thread ID。
|
|
37
37
|
- ⚡ **更快打开长会话。** 优先显示最近消息,向上滚动时提前加载历史;本机会话列表和历史分片可先显示缓存,再由服务端核对更新。[加载与缓存说明](docs/session-history.md)。
|
|
38
38
|
- 📖 **一边看产出,一边继续讨论。** 电脑上将 Markdown 文档、JSON 文件与会话并排打开,继续向 Codex 提问;Markdown 支持代码、表格、图片和 Mermaid 图表,回复也可直接显示图表,可查看或复制图表源码,并以实际大小查看宽图。JSON 支持格式化缩进、语法高亮,格式无效时保留原文,可复制完整原文,手机上也有全屏阅读器。文件预览保持只读,Markdown 和 JSON 文件限制为 2 MiB。
|
|
39
39
|
- 🔎 **逐行查看代码变更。** 在同一只读预览窗口查看某轮或某工具的 Codex 补丁快照,按顺序连续浏览全部文件,支持行号、行内文字高亮和区块跳转;长 diff 默认折叠,展开后按需渲染,阅读时文件标题栏吸顶,随时收起当前文件。
|
|
40
|
-
- ✍️ **切换任务,草稿还在。**
|
|
40
|
+
- ✍️ **切换任务,草稿还在。** 每个会话分别保留当前页面中的草稿、粘贴图片和模型设置。手机和平板按 Enter 换行、点击发送按钮提交;桌面保留 Enter 发送、Shift + Enter 换行。完成后可以复制或导出结果。在命令输出区域右上角一键复制全部已加载结果,截断内容会明确提示。
|
|
41
41
|
- 🖥️ **在任务旁运行命令。** 打开 **Shell**,在所选项目目录执行命令、查看实时标准输出和错误输出、中断执行,并复用近期命令。面板沿用 Codex 配置的沙箱,最长运行十分钟,不支持交互输入;关闭面板后命令仍继续运行。[能力与限制](docs/shell.md)。
|
|
42
42
|
- 🛟 **保留可恢复的数据快照。** 从侧栏打开**备份与恢复**,手动创建服务端备份,查看进度和已验证的记录;升级前使用同一套备份能力。恢复通过停服后的 CLI 执行。[范围与恢复步骤](docs/backups.md)。
|
|
43
43
|
|
|
@@ -139,11 +139,13 @@ covro update
|
|
|
139
139
|
covro update --channel dev
|
|
140
140
|
```
|
|
141
141
|
|
|
142
|
-
| 渠道 | npm 标签
|
|
143
|
-
| ------ |
|
|
144
|
-
| 稳定版 | `latest`
|
|
145
|
-
| 预览版 | `beta`
|
|
146
|
-
| 开发版 | `dev`
|
|
142
|
+
| 渠道 | npm 标签 | 适合 |
|
|
143
|
+
| ------ | ---------------- | -------------------------------------------------- |
|
|
144
|
+
| 稳定版 | `latest` | 日常使用 |
|
|
145
|
+
| 预览版 | `beta`、`latest` | 维护者通过 Beta 标签或 GitHub Release 选定的预览版 |
|
|
146
|
+
| 开发版 | `dev`、`latest` | CI 通过后的 main 分支新功能 |
|
|
147
|
+
|
|
148
|
+
稳定版只检查 `latest`;预览版和开发版分别比较自身标签与 `latest`,按 SemVer 选择最新版本,开发版不接收预览版。安装稳定版后仍保留所选订阅,继续接收后续预览版或开发版;安装较旧候选版本需要明确允许降级。
|
|
147
149
|
|
|
148
150
|
开发版和预览版 npm 发布成功后,还会创建带 GitHub 自动生成说明的 [GitHub Pre-release](https://github.com/yuzheng14/covro/releases)。比较起点取同一渠道的先前版本与稳定版本中源码提交较新的那个。推送 Beta 标签即可发布 npm 包并创建对应的 Pre-release;重跑时保留已有发布说明。Beta 说明还会附上所选源码的兼容性声明。稳定版仍保留原来的分组 Changelog。
|
|
149
151
|
|
|
@@ -151,7 +153,7 @@ covro update --channel dev
|
|
|
151
153
|
|
|
152
154
|
自动安装默认关闭。受管升级支持 **macOS 和 Linux 的 npm 全局安装**;源码、链接、容器和 Windows 安装沿用原更新方式。候选版本失败时,会在重新开放业务写入前回滚;降级需通过数据库兼容检查。旧备份会保留,暂不自动轮转。
|
|
153
155
|
|
|
154
|
-
DB Schema **
|
|
156
|
+
DB Schema **7** 独立于应用版本管理。发行版声明 Schema 及经过验证的备份迁移范围;旧应用不能打开更新的数据库。详见[数据库兼容规则](docs/database.md)。
|
|
155
157
|
|
|
156
158
|
受管升级会在替换安装前创建并验证私有备份,覆盖 Covro 数据库与服务配置;备份失败会阻止激活。快照不包含 Codex 历史、凭据或项目文件。详见[备份范围](docs/backups.md)。
|
|
157
159
|
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
ALTER TABLE `project_registrations` ADD `sort_order` integer DEFAULT 0 NOT NULL;
|
|
2
|
+
--> statement-breakpoint
|
|
3
|
+
WITH ranked AS (
|
|
4
|
+
SELECT id, ROW_NUMBER() OVER (ORDER BY created_at, id) - 1 AS position
|
|
5
|
+
FROM project_registrations
|
|
6
|
+
)
|
|
7
|
+
UPDATE project_registrations
|
|
8
|
+
SET sort_order = (SELECT position FROM ranked WHERE ranked.id = project_registrations.id);
|
|
@@ -0,0 +1,488 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "6",
|
|
3
|
+
"dialect": "sqlite",
|
|
4
|
+
"id": "1c34781e-79d0-490b-86ff-c317ff17602c",
|
|
5
|
+
"prevId": "ef2ed4be-1aca-4f12-81c5-389062f9da5c",
|
|
6
|
+
"tables": {
|
|
7
|
+
"execution_markers": {
|
|
8
|
+
"name": "execution_markers",
|
|
9
|
+
"columns": {
|
|
10
|
+
"operation_id": {
|
|
11
|
+
"name": "operation_id",
|
|
12
|
+
"type": "text",
|
|
13
|
+
"primaryKey": true,
|
|
14
|
+
"notNull": true,
|
|
15
|
+
"autoincrement": false
|
|
16
|
+
},
|
|
17
|
+
"thread_id": {
|
|
18
|
+
"name": "thread_id",
|
|
19
|
+
"type": "text",
|
|
20
|
+
"primaryKey": false,
|
|
21
|
+
"notNull": true,
|
|
22
|
+
"autoincrement": false
|
|
23
|
+
},
|
|
24
|
+
"turn_id": {
|
|
25
|
+
"name": "turn_id",
|
|
26
|
+
"type": "text",
|
|
27
|
+
"primaryKey": false,
|
|
28
|
+
"notNull": false,
|
|
29
|
+
"autoincrement": false
|
|
30
|
+
},
|
|
31
|
+
"workspace_key": {
|
|
32
|
+
"name": "workspace_key",
|
|
33
|
+
"type": "text",
|
|
34
|
+
"primaryKey": false,
|
|
35
|
+
"notNull": true,
|
|
36
|
+
"autoincrement": false
|
|
37
|
+
},
|
|
38
|
+
"codex_epoch": {
|
|
39
|
+
"name": "codex_epoch",
|
|
40
|
+
"type": "text",
|
|
41
|
+
"primaryKey": false,
|
|
42
|
+
"notNull": true,
|
|
43
|
+
"autoincrement": false
|
|
44
|
+
},
|
|
45
|
+
"state": {
|
|
46
|
+
"name": "state",
|
|
47
|
+
"type": "text",
|
|
48
|
+
"primaryKey": false,
|
|
49
|
+
"notNull": true,
|
|
50
|
+
"autoincrement": false
|
|
51
|
+
},
|
|
52
|
+
"created_at": {
|
|
53
|
+
"name": "created_at",
|
|
54
|
+
"type": "integer",
|
|
55
|
+
"primaryKey": false,
|
|
56
|
+
"notNull": true,
|
|
57
|
+
"autoincrement": false
|
|
58
|
+
},
|
|
59
|
+
"ended_at": {
|
|
60
|
+
"name": "ended_at",
|
|
61
|
+
"type": "integer",
|
|
62
|
+
"primaryKey": false,
|
|
63
|
+
"notNull": false,
|
|
64
|
+
"autoincrement": false
|
|
65
|
+
},
|
|
66
|
+
"reconciled_at": {
|
|
67
|
+
"name": "reconciled_at",
|
|
68
|
+
"type": "integer",
|
|
69
|
+
"primaryKey": false,
|
|
70
|
+
"notNull": false,
|
|
71
|
+
"autoincrement": false
|
|
72
|
+
},
|
|
73
|
+
"reconciliation_operation_id": {
|
|
74
|
+
"name": "reconciliation_operation_id",
|
|
75
|
+
"type": "text",
|
|
76
|
+
"primaryKey": false,
|
|
77
|
+
"notNull": false,
|
|
78
|
+
"autoincrement": false
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
"indexes": {
|
|
82
|
+
"execution_markers_active_thread": {
|
|
83
|
+
"name": "execution_markers_active_thread",
|
|
84
|
+
"columns": [
|
|
85
|
+
"thread_id"
|
|
86
|
+
],
|
|
87
|
+
"isUnique": true,
|
|
88
|
+
"where": "\"execution_markers\".\"ended_at\" is null"
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
"foreignKeys": {
|
|
92
|
+
"execution_markers_operation_id_operations_client_operation_id_fk": {
|
|
93
|
+
"name": "execution_markers_operation_id_operations_client_operation_id_fk",
|
|
94
|
+
"tableFrom": "execution_markers",
|
|
95
|
+
"tableTo": "operations",
|
|
96
|
+
"columnsFrom": [
|
|
97
|
+
"operation_id"
|
|
98
|
+
],
|
|
99
|
+
"columnsTo": [
|
|
100
|
+
"client_operation_id"
|
|
101
|
+
],
|
|
102
|
+
"onDelete": "no action",
|
|
103
|
+
"onUpdate": "no action"
|
|
104
|
+
},
|
|
105
|
+
"execution_markers_reconciliation_operation_id_operations_client_operation_id_fk": {
|
|
106
|
+
"name": "execution_markers_reconciliation_operation_id_operations_client_operation_id_fk",
|
|
107
|
+
"tableFrom": "execution_markers",
|
|
108
|
+
"tableTo": "operations",
|
|
109
|
+
"columnsFrom": [
|
|
110
|
+
"reconciliation_operation_id"
|
|
111
|
+
],
|
|
112
|
+
"columnsTo": [
|
|
113
|
+
"client_operation_id"
|
|
114
|
+
],
|
|
115
|
+
"onDelete": "no action",
|
|
116
|
+
"onUpdate": "no action"
|
|
117
|
+
}
|
|
118
|
+
},
|
|
119
|
+
"compositePrimaryKeys": {},
|
|
120
|
+
"uniqueConstraints": {},
|
|
121
|
+
"checkConstraints": {
|
|
122
|
+
"execution_markers_state_check": {
|
|
123
|
+
"name": "execution_markers_state_check",
|
|
124
|
+
"value": "\"execution_markers\".\"state\" in ('active', 'unknown', 'terminal', 'reconciled')"
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
"operations": {
|
|
129
|
+
"name": "operations",
|
|
130
|
+
"columns": {
|
|
131
|
+
"client_operation_id": {
|
|
132
|
+
"name": "client_operation_id",
|
|
133
|
+
"type": "text",
|
|
134
|
+
"primaryKey": true,
|
|
135
|
+
"notNull": true,
|
|
136
|
+
"autoincrement": false
|
|
137
|
+
},
|
|
138
|
+
"kind": {
|
|
139
|
+
"name": "kind",
|
|
140
|
+
"type": "text",
|
|
141
|
+
"primaryKey": false,
|
|
142
|
+
"notNull": true,
|
|
143
|
+
"autoincrement": false
|
|
144
|
+
},
|
|
145
|
+
"target": {
|
|
146
|
+
"name": "target",
|
|
147
|
+
"type": "text",
|
|
148
|
+
"primaryKey": false,
|
|
149
|
+
"notNull": true,
|
|
150
|
+
"autoincrement": false
|
|
151
|
+
},
|
|
152
|
+
"project_id": {
|
|
153
|
+
"name": "project_id",
|
|
154
|
+
"type": "text",
|
|
155
|
+
"primaryKey": false,
|
|
156
|
+
"notNull": false,
|
|
157
|
+
"autoincrement": false
|
|
158
|
+
},
|
|
159
|
+
"request_digest": {
|
|
160
|
+
"name": "request_digest",
|
|
161
|
+
"type": "text",
|
|
162
|
+
"primaryKey": false,
|
|
163
|
+
"notNull": true,
|
|
164
|
+
"autoincrement": false
|
|
165
|
+
},
|
|
166
|
+
"state": {
|
|
167
|
+
"name": "state",
|
|
168
|
+
"type": "text",
|
|
169
|
+
"primaryKey": false,
|
|
170
|
+
"notNull": true,
|
|
171
|
+
"autoincrement": false
|
|
172
|
+
},
|
|
173
|
+
"result": {
|
|
174
|
+
"name": "result",
|
|
175
|
+
"type": "text",
|
|
176
|
+
"primaryKey": false,
|
|
177
|
+
"notNull": false,
|
|
178
|
+
"autoincrement": false
|
|
179
|
+
},
|
|
180
|
+
"error": {
|
|
181
|
+
"name": "error",
|
|
182
|
+
"type": "text",
|
|
183
|
+
"primaryKey": false,
|
|
184
|
+
"notNull": false,
|
|
185
|
+
"autoincrement": false
|
|
186
|
+
},
|
|
187
|
+
"created_at": {
|
|
188
|
+
"name": "created_at",
|
|
189
|
+
"type": "integer",
|
|
190
|
+
"primaryKey": false,
|
|
191
|
+
"notNull": true,
|
|
192
|
+
"autoincrement": false
|
|
193
|
+
},
|
|
194
|
+
"updated_at": {
|
|
195
|
+
"name": "updated_at",
|
|
196
|
+
"type": "integer",
|
|
197
|
+
"primaryKey": false,
|
|
198
|
+
"notNull": true,
|
|
199
|
+
"autoincrement": false
|
|
200
|
+
},
|
|
201
|
+
"reconciled_at": {
|
|
202
|
+
"name": "reconciled_at",
|
|
203
|
+
"type": "integer",
|
|
204
|
+
"primaryKey": false,
|
|
205
|
+
"notNull": false,
|
|
206
|
+
"autoincrement": false
|
|
207
|
+
},
|
|
208
|
+
"reconciliation_decision": {
|
|
209
|
+
"name": "reconciliation_decision",
|
|
210
|
+
"type": "text",
|
|
211
|
+
"primaryKey": false,
|
|
212
|
+
"notNull": false,
|
|
213
|
+
"autoincrement": false
|
|
214
|
+
}
|
|
215
|
+
},
|
|
216
|
+
"indexes": {
|
|
217
|
+
"operations_state_idx": {
|
|
218
|
+
"name": "operations_state_idx",
|
|
219
|
+
"columns": [
|
|
220
|
+
"state"
|
|
221
|
+
],
|
|
222
|
+
"isUnique": false
|
|
223
|
+
}
|
|
224
|
+
},
|
|
225
|
+
"foreignKeys": {},
|
|
226
|
+
"compositePrimaryKeys": {},
|
|
227
|
+
"uniqueConstraints": {},
|
|
228
|
+
"checkConstraints": {
|
|
229
|
+
"operations_state_check": {
|
|
230
|
+
"name": "operations_state_check",
|
|
231
|
+
"value": "\"operations\".\"state\" in ('accepted', 'dispatching', 'acknowledged', 'failed', 'unknown')"
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
},
|
|
235
|
+
"preferences": {
|
|
236
|
+
"name": "preferences",
|
|
237
|
+
"columns": {
|
|
238
|
+
"key": {
|
|
239
|
+
"name": "key",
|
|
240
|
+
"type": "text",
|
|
241
|
+
"primaryKey": true,
|
|
242
|
+
"notNull": true,
|
|
243
|
+
"autoincrement": false
|
|
244
|
+
},
|
|
245
|
+
"value": {
|
|
246
|
+
"name": "value",
|
|
247
|
+
"type": "text",
|
|
248
|
+
"primaryKey": false,
|
|
249
|
+
"notNull": true,
|
|
250
|
+
"autoincrement": false
|
|
251
|
+
}
|
|
252
|
+
},
|
|
253
|
+
"indexes": {},
|
|
254
|
+
"foreignKeys": {},
|
|
255
|
+
"compositePrimaryKeys": {},
|
|
256
|
+
"uniqueConstraints": {},
|
|
257
|
+
"checkConstraints": {}
|
|
258
|
+
},
|
|
259
|
+
"project_registrations": {
|
|
260
|
+
"name": "project_registrations",
|
|
261
|
+
"columns": {
|
|
262
|
+
"id": {
|
|
263
|
+
"name": "id",
|
|
264
|
+
"type": "text",
|
|
265
|
+
"primaryKey": true,
|
|
266
|
+
"notNull": true,
|
|
267
|
+
"autoincrement": false
|
|
268
|
+
},
|
|
269
|
+
"name": {
|
|
270
|
+
"name": "name",
|
|
271
|
+
"type": "text",
|
|
272
|
+
"primaryKey": false,
|
|
273
|
+
"notNull": true,
|
|
274
|
+
"autoincrement": false
|
|
275
|
+
},
|
|
276
|
+
"path": {
|
|
277
|
+
"name": "path",
|
|
278
|
+
"type": "text",
|
|
279
|
+
"primaryKey": false,
|
|
280
|
+
"notNull": true,
|
|
281
|
+
"autoincrement": false
|
|
282
|
+
},
|
|
283
|
+
"canonical_root": {
|
|
284
|
+
"name": "canonical_root",
|
|
285
|
+
"type": "text",
|
|
286
|
+
"primaryKey": false,
|
|
287
|
+
"notNull": false,
|
|
288
|
+
"autoincrement": false
|
|
289
|
+
},
|
|
290
|
+
"removed_at": {
|
|
291
|
+
"name": "removed_at",
|
|
292
|
+
"type": "integer",
|
|
293
|
+
"primaryKey": false,
|
|
294
|
+
"notNull": false,
|
|
295
|
+
"autoincrement": false
|
|
296
|
+
},
|
|
297
|
+
"sort_order": {
|
|
298
|
+
"name": "sort_order",
|
|
299
|
+
"type": "integer",
|
|
300
|
+
"primaryKey": false,
|
|
301
|
+
"notNull": true,
|
|
302
|
+
"autoincrement": false,
|
|
303
|
+
"default": 0
|
|
304
|
+
},
|
|
305
|
+
"created_at": {
|
|
306
|
+
"name": "created_at",
|
|
307
|
+
"type": "integer",
|
|
308
|
+
"primaryKey": false,
|
|
309
|
+
"notNull": true,
|
|
310
|
+
"autoincrement": false
|
|
311
|
+
},
|
|
312
|
+
"updated_at": {
|
|
313
|
+
"name": "updated_at",
|
|
314
|
+
"type": "integer",
|
|
315
|
+
"primaryKey": false,
|
|
316
|
+
"notNull": true,
|
|
317
|
+
"autoincrement": false
|
|
318
|
+
}
|
|
319
|
+
},
|
|
320
|
+
"indexes": {},
|
|
321
|
+
"foreignKeys": {},
|
|
322
|
+
"compositePrimaryKeys": {},
|
|
323
|
+
"uniqueConstraints": {},
|
|
324
|
+
"checkConstraints": {}
|
|
325
|
+
},
|
|
326
|
+
"session_workspaces": {
|
|
327
|
+
"name": "session_workspaces",
|
|
328
|
+
"columns": {
|
|
329
|
+
"operation_id": {
|
|
330
|
+
"name": "operation_id",
|
|
331
|
+
"type": "text",
|
|
332
|
+
"primaryKey": true,
|
|
333
|
+
"notNull": true,
|
|
334
|
+
"autoincrement": false
|
|
335
|
+
},
|
|
336
|
+
"thread_id": {
|
|
337
|
+
"name": "thread_id",
|
|
338
|
+
"type": "text",
|
|
339
|
+
"primaryKey": false,
|
|
340
|
+
"notNull": false,
|
|
341
|
+
"autoincrement": false
|
|
342
|
+
},
|
|
343
|
+
"root_path": {
|
|
344
|
+
"name": "root_path",
|
|
345
|
+
"type": "text",
|
|
346
|
+
"primaryKey": false,
|
|
347
|
+
"notNull": true,
|
|
348
|
+
"autoincrement": false
|
|
349
|
+
},
|
|
350
|
+
"canonical_root": {
|
|
351
|
+
"name": "canonical_root",
|
|
352
|
+
"type": "text",
|
|
353
|
+
"primaryKey": false,
|
|
354
|
+
"notNull": true,
|
|
355
|
+
"autoincrement": false
|
|
356
|
+
},
|
|
357
|
+
"created_at": {
|
|
358
|
+
"name": "created_at",
|
|
359
|
+
"type": "integer",
|
|
360
|
+
"primaryKey": false,
|
|
361
|
+
"notNull": true,
|
|
362
|
+
"autoincrement": false
|
|
363
|
+
}
|
|
364
|
+
},
|
|
365
|
+
"indexes": {
|
|
366
|
+
"session_workspaces_thread_id_unique": {
|
|
367
|
+
"name": "session_workspaces_thread_id_unique",
|
|
368
|
+
"columns": [
|
|
369
|
+
"thread_id"
|
|
370
|
+
],
|
|
371
|
+
"isUnique": true
|
|
372
|
+
},
|
|
373
|
+
"session_workspaces_canonical_root_unique": {
|
|
374
|
+
"name": "session_workspaces_canonical_root_unique",
|
|
375
|
+
"columns": [
|
|
376
|
+
"canonical_root"
|
|
377
|
+
],
|
|
378
|
+
"isUnique": true
|
|
379
|
+
}
|
|
380
|
+
},
|
|
381
|
+
"foreignKeys": {},
|
|
382
|
+
"compositePrimaryKeys": {},
|
|
383
|
+
"uniqueConstraints": {},
|
|
384
|
+
"checkConstraints": {}
|
|
385
|
+
},
|
|
386
|
+
"thread_links": {
|
|
387
|
+
"name": "thread_links",
|
|
388
|
+
"columns": {
|
|
389
|
+
"thread_id": {
|
|
390
|
+
"name": "thread_id",
|
|
391
|
+
"type": "text",
|
|
392
|
+
"primaryKey": true,
|
|
393
|
+
"notNull": true,
|
|
394
|
+
"autoincrement": false
|
|
395
|
+
},
|
|
396
|
+
"project_id": {
|
|
397
|
+
"name": "project_id",
|
|
398
|
+
"type": "text",
|
|
399
|
+
"primaryKey": false,
|
|
400
|
+
"notNull": false,
|
|
401
|
+
"autoincrement": false
|
|
402
|
+
},
|
|
403
|
+
"cwd": {
|
|
404
|
+
"name": "cwd",
|
|
405
|
+
"type": "text",
|
|
406
|
+
"primaryKey": false,
|
|
407
|
+
"notNull": true,
|
|
408
|
+
"autoincrement": false
|
|
409
|
+
},
|
|
410
|
+
"source": {
|
|
411
|
+
"name": "source",
|
|
412
|
+
"type": "text",
|
|
413
|
+
"primaryKey": false,
|
|
414
|
+
"notNull": true,
|
|
415
|
+
"autoincrement": false
|
|
416
|
+
},
|
|
417
|
+
"managed_epoch": {
|
|
418
|
+
"name": "managed_epoch",
|
|
419
|
+
"type": "text",
|
|
420
|
+
"primaryKey": false,
|
|
421
|
+
"notNull": false,
|
|
422
|
+
"autoincrement": false
|
|
423
|
+
},
|
|
424
|
+
"updated_at": {
|
|
425
|
+
"name": "updated_at",
|
|
426
|
+
"type": "integer",
|
|
427
|
+
"primaryKey": false,
|
|
428
|
+
"notNull": true,
|
|
429
|
+
"autoincrement": false
|
|
430
|
+
}
|
|
431
|
+
},
|
|
432
|
+
"indexes": {},
|
|
433
|
+
"foreignKeys": {},
|
|
434
|
+
"compositePrimaryKeys": {},
|
|
435
|
+
"uniqueConstraints": {},
|
|
436
|
+
"checkConstraints": {}
|
|
437
|
+
},
|
|
438
|
+
"turn_usage": {
|
|
439
|
+
"name": "turn_usage",
|
|
440
|
+
"columns": {
|
|
441
|
+
"thread_id": {
|
|
442
|
+
"name": "thread_id",
|
|
443
|
+
"type": "text",
|
|
444
|
+
"primaryKey": false,
|
|
445
|
+
"notNull": true,
|
|
446
|
+
"autoincrement": false
|
|
447
|
+
},
|
|
448
|
+
"turn_id": {
|
|
449
|
+
"name": "turn_id",
|
|
450
|
+
"type": "text",
|
|
451
|
+
"primaryKey": false,
|
|
452
|
+
"notNull": true,
|
|
453
|
+
"autoincrement": false
|
|
454
|
+
},
|
|
455
|
+
"output_tokens": {
|
|
456
|
+
"name": "output_tokens",
|
|
457
|
+
"type": "integer",
|
|
458
|
+
"primaryKey": false,
|
|
459
|
+
"notNull": true,
|
|
460
|
+
"autoincrement": false
|
|
461
|
+
}
|
|
462
|
+
},
|
|
463
|
+
"indexes": {},
|
|
464
|
+
"foreignKeys": {},
|
|
465
|
+
"compositePrimaryKeys": {
|
|
466
|
+
"turn_usage_thread_id_turn_id_pk": {
|
|
467
|
+
"columns": [
|
|
468
|
+
"thread_id",
|
|
469
|
+
"turn_id"
|
|
470
|
+
],
|
|
471
|
+
"name": "turn_usage_thread_id_turn_id_pk"
|
|
472
|
+
}
|
|
473
|
+
},
|
|
474
|
+
"uniqueConstraints": {},
|
|
475
|
+
"checkConstraints": {}
|
|
476
|
+
}
|
|
477
|
+
},
|
|
478
|
+
"views": {},
|
|
479
|
+
"enums": {},
|
|
480
|
+
"_meta": {
|
|
481
|
+
"schemas": {},
|
|
482
|
+
"tables": {},
|
|
483
|
+
"columns": {}
|
|
484
|
+
},
|
|
485
|
+
"internal": {
|
|
486
|
+
"indexes": {}
|
|
487
|
+
}
|
|
488
|
+
}
|
package/dist/server/db/schema.js
CHANGED
|
@@ -92,6 +92,7 @@ const projectRegistrations = sqliteTable("project_registrations", {
|
|
|
92
92
|
path: text("path").notNull(),
|
|
93
93
|
canonicalRoot: text("canonical_root"),
|
|
94
94
|
removedAt: integer("removed_at"),
|
|
95
|
+
sortOrder: integer("sort_order").notNull().default(0),
|
|
95
96
|
createdAt: integer("created_at").notNull(),
|
|
96
97
|
updatedAt: integer("updated_at").notNull()
|
|
97
98
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/server/db/schema.ts"],
|
|
4
|
-
"sourcesContent": ["import { sql } from 'drizzle-orm';\nimport {\n check,\n index,\n integer,\n primaryKey,\n sqliteTable,\n text,\n uniqueIndex,\n} from 'drizzle-orm/sqlite-core';\nimport type { ApiError } from '../../shared/types.js';\n\nexport const operations = sqliteTable(\n 'operations',\n {\n clientOperationId: text('client_operation_id').primaryKey(),\n kind: text('kind').notNull(),\n target: text('target').notNull(),\n projectId: text('project_id'),\n requestDigest: text('request_digest').notNull(),\n state: text('state', {\n enum: ['accepted', 'dispatching', 'acknowledged', 'failed', 'unknown'],\n }).notNull(),\n result: text('result', { mode: 'json' }).$type<unknown>(),\n error: text('error', { mode: 'json' }).$type<ApiError>(),\n createdAt: integer('created_at').notNull(),\n updatedAt: integer('updated_at').notNull(),\n reconciledAt: integer('reconciled_at'),\n reconciliationDecision: text('reconciliation_decision'),\n },\n (table) => [\n check(\n 'operations_state_check',\n sql`${table.state} in ('accepted', 'dispatching', 'acknowledged', 'failed', 'unknown')`,\n ),\n index('operations_state_idx').on(table.state),\n ],\n);\n\nexport const executionMarkers = sqliteTable(\n 'execution_markers',\n {\n operationId: text('operation_id')\n .primaryKey()\n .references(() => operations.clientOperationId),\n threadId: text('thread_id').notNull(),\n turnId: text('turn_id'),\n workspaceKey: text('workspace_key').notNull(),\n codexEpoch: text('codex_epoch').notNull(),\n state: text('state', { enum: ['active', 'unknown', 'terminal', 'reconciled'] }).notNull(),\n createdAt: integer('created_at').notNull(),\n endedAt: integer('ended_at'),\n reconciledAt: integer('reconciled_at'),\n reconciliationOperationId: text('reconciliation_operation_id').references(\n () => operations.clientOperationId,\n ),\n },\n (table) => [\n check(\n 'execution_markers_state_check',\n sql`${table.state} in ('active', 'unknown', 'terminal', 'reconciled')`,\n ),\n uniqueIndex('execution_markers_active_thread')\n .on(table.threadId)\n .where(sql`${table.endedAt} is null`),\n ],\n);\n\nexport const threadLinks = sqliteTable('thread_links', {\n threadId: text('thread_id').primaryKey(),\n projectId: text('project_id'),\n cwd: text('cwd').notNull(),\n source: text('source').notNull(),\n managedEpoch: text('managed_epoch'),\n updatedAt: integer('updated_at').notNull(),\n});\n\n/** Allocations survive failed/unknown RPCs; names and archive state remain in Codex. */\nexport const sessionWorkspaces = sqliteTable('session_workspaces', {\n operationId: text('operation_id').primaryKey(),\n threadId: text('thread_id').unique(),\n rootPath: text('root_path').notNull(),\n canonicalRoot: text('canonical_root').notNull().unique(),\n createdAt: integer('created_at').notNull(),\n});\n\nexport const preferences = sqliteTable('preferences', {\n key: text('key').primaryKey(),\n value: text('value', { mode: 'json' }).$type<unknown>().notNull(),\n});\n\n/** Locally observed turn totals; upstream turn history does not include token usage. */\nexport const turnUsage = sqliteTable(\n 'turn_usage',\n {\n threadId: text('thread_id').notNull(),\n turnId: text('turn_id').notNull(),\n outputTokens: integer('output_tokens').notNull(),\n },\n (table) => [primaryKey({ columns: [table.threadId, table.turnId] })],\n);\n\n/** Removing a registration retains its identity and all existing thread links. */\nexport const projectRegistrations = sqliteTable('project_registrations', {\n id: text('id').primaryKey(),\n name: text('name').notNull(),\n path: text('path').notNull(),\n canonicalRoot: text('canonical_root'),\n removedAt: integer('removed_at'),\n createdAt: integer('created_at').notNull(),\n updatedAt: integer('updated_at').notNull(),\n});\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { sql } from 'drizzle-orm';\nimport {\n check,\n index,\n integer,\n primaryKey,\n sqliteTable,\n text,\n uniqueIndex,\n} from 'drizzle-orm/sqlite-core';\nimport type { ApiError } from '../../shared/types.js';\n\nexport const operations = sqliteTable(\n 'operations',\n {\n clientOperationId: text('client_operation_id').primaryKey(),\n kind: text('kind').notNull(),\n target: text('target').notNull(),\n projectId: text('project_id'),\n requestDigest: text('request_digest').notNull(),\n state: text('state', {\n enum: ['accepted', 'dispatching', 'acknowledged', 'failed', 'unknown'],\n }).notNull(),\n result: text('result', { mode: 'json' }).$type<unknown>(),\n error: text('error', { mode: 'json' }).$type<ApiError>(),\n createdAt: integer('created_at').notNull(),\n updatedAt: integer('updated_at').notNull(),\n reconciledAt: integer('reconciled_at'),\n reconciliationDecision: text('reconciliation_decision'),\n },\n (table) => [\n check(\n 'operations_state_check',\n sql`${table.state} in ('accepted', 'dispatching', 'acknowledged', 'failed', 'unknown')`,\n ),\n index('operations_state_idx').on(table.state),\n ],\n);\n\nexport const executionMarkers = sqliteTable(\n 'execution_markers',\n {\n operationId: text('operation_id')\n .primaryKey()\n .references(() => operations.clientOperationId),\n threadId: text('thread_id').notNull(),\n turnId: text('turn_id'),\n workspaceKey: text('workspace_key').notNull(),\n codexEpoch: text('codex_epoch').notNull(),\n state: text('state', { enum: ['active', 'unknown', 'terminal', 'reconciled'] }).notNull(),\n createdAt: integer('created_at').notNull(),\n endedAt: integer('ended_at'),\n reconciledAt: integer('reconciled_at'),\n reconciliationOperationId: text('reconciliation_operation_id').references(\n () => operations.clientOperationId,\n ),\n },\n (table) => [\n check(\n 'execution_markers_state_check',\n sql`${table.state} in ('active', 'unknown', 'terminal', 'reconciled')`,\n ),\n uniqueIndex('execution_markers_active_thread')\n .on(table.threadId)\n .where(sql`${table.endedAt} is null`),\n ],\n);\n\nexport const threadLinks = sqliteTable('thread_links', {\n threadId: text('thread_id').primaryKey(),\n projectId: text('project_id'),\n cwd: text('cwd').notNull(),\n source: text('source').notNull(),\n managedEpoch: text('managed_epoch'),\n updatedAt: integer('updated_at').notNull(),\n});\n\n/** Allocations survive failed/unknown RPCs; names and archive state remain in Codex. */\nexport const sessionWorkspaces = sqliteTable('session_workspaces', {\n operationId: text('operation_id').primaryKey(),\n threadId: text('thread_id').unique(),\n rootPath: text('root_path').notNull(),\n canonicalRoot: text('canonical_root').notNull().unique(),\n createdAt: integer('created_at').notNull(),\n});\n\nexport const preferences = sqliteTable('preferences', {\n key: text('key').primaryKey(),\n value: text('value', { mode: 'json' }).$type<unknown>().notNull(),\n});\n\n/** Locally observed turn totals; upstream turn history does not include token usage. */\nexport const turnUsage = sqliteTable(\n 'turn_usage',\n {\n threadId: text('thread_id').notNull(),\n turnId: text('turn_id').notNull(),\n outputTokens: integer('output_tokens').notNull(),\n },\n (table) => [primaryKey({ columns: [table.threadId, table.turnId] })],\n);\n\n/** Removing a registration retains its identity and all existing thread links. */\nexport const projectRegistrations = sqliteTable('project_registrations', {\n id: text('id').primaryKey(),\n name: text('name').notNull(),\n path: text('path').notNull(),\n canonicalRoot: text('canonical_root'),\n removedAt: integer('removed_at'),\n sortOrder: integer('sort_order').notNull().default(0),\n createdAt: integer('created_at').notNull(),\n updatedAt: integer('updated_at').notNull(),\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|