@covro/covro 0.3.1-dev.1 → 0.3.1-dev.3
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 +16 -10
- package/README.zh-CN.md +16 -10
- 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/config-store.js +10 -2
- package/dist/server/config-store.js.map +2 -2
- package/dist/server/config.js +4 -0
- package/dist/server/config.js.map +2 -2
- package/dist/server/db/schema.js +1 -0
- package/dist/server/db/schema.js.map +2 -2
- package/dist/server/http.js +43 -5
- package/dist/server/http.js.map +2 -2
- package/dist/server/local-files.js.map +1 -1
- package/dist/server/project-clones.js +2 -2
- package/dist/server/project-clones.js.map +2 -2
- package/dist/server/project-paths.js +39 -0
- package/dist/server/project-paths.js.map +7 -0
- package/dist/server/projects.js +48 -5
- package/dist/server/projects.js.map +2 -2
- package/dist/server/service.js +15 -3
- package/dist/server/service.js.map +2 -2
- package/dist/server/text-files.js +32 -0
- package/dist/server/text-files.js.map +7 -0
- package/dist/shared/file-preview.js +22 -0
- package/dist/shared/file-preview.js.map +7 -0
- package/dist/shared/project-path.js +8 -0
- package/dist/shared/project-path.js.map +7 -0
- package/dist/shared/release-notes.js +9 -0
- package/dist/shared/release-notes.js.map +7 -0
- 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 +8 -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/release-notes.js +73 -0
- package/dist/updates/release-notes.js.map +7 -0
- 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-CgSmgOr1.js} +1 -1
- package/dist/web/assets/{arc-DgauwgFe.js → arc-DHf4CdSk.js} +1 -1
- package/dist/web/assets/{architecture-WOLXFQ4H-DvjLv0QN.js → architecture-WOLXFQ4H-DMTD1pHe.js} +1 -1
- package/dist/web/assets/{architectureDiagram-ZHVYKT53-BAyZGlzu.js → architectureDiagram-ZHVYKT53-DTR8wiWo.js} +1 -1
- package/dist/web/assets/{blockDiagram-RJAE7QA3-BVfkmjlt.js → blockDiagram-RJAE7QA3-DcNiTPKZ.js} +1 -1
- package/dist/web/assets/{c4Diagram-XDPPPE54-rTsfyMoB.js → c4Diagram-XDPPPE54-BDxJVXjQ.js} +1 -1
- package/dist/web/assets/channel-B6d61z43.js +1 -0
- package/dist/web/assets/{chunk-2E7WHVMD-CQ_N_vLS.js → chunk-2E7WHVMD-D5oKHRGT.js} +1 -1
- package/dist/web/assets/{chunk-4EMNKR2T-wBy_gyo6.js → chunk-4EMNKR2T-CtrbVCM-.js} +1 -1
- package/dist/web/assets/{chunk-55XCU76K-DYiwIhmI.js → chunk-55XCU76K-Dhl7DEL7.js} +1 -1
- package/dist/web/assets/{chunk-7S6XSTFO-CRGtfVHg.js → chunk-7S6XSTFO-C8EwegP-.js} +1 -1
- package/dist/web/assets/{chunk-AQDTSKZB-1G2Za6bm.js → chunk-AQDTSKZB-lFiNKr7B.js} +1 -1
- package/dist/web/assets/{chunk-DSNLSHJZ-B1LLoYuG.js → chunk-DSNLSHJZ-B8GftONA.js} +1 -1
- package/dist/web/assets/{chunk-HAGFOTED-78h1RpHh.js → chunk-HAGFOTED-Cnc2mh7_.js} +1 -1
- package/dist/web/assets/{chunk-HNE4Q36P-DmR5B27Q.js → chunk-HNE4Q36P-BKl6ZgI0.js} +1 -1
- package/dist/web/assets/{chunk-NQOKRVIF-D7WSEPzg.js → chunk-NQOKRVIF-qKlxSw3D.js} +1 -1
- package/dist/web/assets/{chunk-UHW7PFBP-gl7a5V-l.js → chunk-UHW7PFBP-C_zh3mNe.js} +1 -1
- package/dist/web/assets/{chunk-VQ5W62QI-KaBXxBre.js → chunk-VQ5W62QI-BXoyXK0q.js} +1 -1
- package/dist/web/assets/{chunk-WQQL4CDK-DDczFoOr.js → chunk-WQQL4CDK-BBeqcU1J.js} +1 -1
- package/dist/web/assets/{chunk-XXDRQBXY-3ug4Qhxg.js → chunk-XXDRQBXY-DzssZtz_.js} +1 -1
- package/dist/web/assets/{chunk-YZO67HFG-BpWOuCXP.js → chunk-YZO67HFG-BbNSwLjS.js} +1 -1
- package/dist/web/assets/{chunk-ZAUX2LTX-1ojPb1if.js → chunk-ZAUX2LTX-CjURwZfv.js} +1 -1
- package/dist/web/assets/{chunk-ZCHMQSOR-D2kK2cPj.js → chunk-ZCHMQSOR-u39dymjE.js} +1 -1
- package/dist/web/assets/{classDiagram-v2-4MYWR3UA-B7eMvxAO.js → classDiagram-v2-4MYWR3UA-BEXx5gKT.js} +1 -1
- package/dist/web/assets/{cose-bilkent-JH36ORCC-BtB8mbt8.js → cose-bilkent-JH36ORCC-BxDEucP_.js} +1 -1
- package/dist/web/assets/{cynefin-EF2NZ3EQ-CIctqxlE.js → cynefin-EF2NZ3EQ-BhkCsT6-.js} +1 -1
- package/dist/web/assets/{cynefinDiagram-WF24UDRP-qat2GD9P.js → cynefinDiagram-WF24UDRP-Wpu-yNke.js} +1 -1
- package/dist/web/assets/{dagre-NK4GIZVX-OJamzzID.js → dagre-NK4GIZVX-LNSSIN4l.js} +1 -1
- package/dist/web/assets/{diagram-CBK3MWTC-C7cX2tqO.js → diagram-CBK3MWTC-BVDr5Vx9.js} +1 -1
- package/dist/web/assets/{diagram-I5XIIV2D-DsMfKVN7.js → diagram-I5XIIV2D-MnLzR1Rv.js} +1 -1
- package/dist/web/assets/{diagram-ODIL2UCW-Cz66FxdJ.js → diagram-ODIL2UCW-CZ4igbo_.js} +1 -1
- package/dist/web/assets/{diagram-PFBEJUXE-CwhPuwKj.js → diagram-PFBEJUXE-4hCnyMdK.js} +1 -1
- package/dist/web/assets/{diagram-RJA3I4VV-C52IGiFJ.js → diagram-RJA3I4VV-DTo42rGA.js} +1 -1
- package/dist/web/assets/{diagram-TYUNFSNR-C2LZVLKY.js → diagram-TYUNFSNR-BC12iCUZ.js} +1 -1
- package/dist/web/assets/{dist-Bxu8YbZb.js → dist-Dg_ysSxT.js} +1 -1
- package/dist/web/assets/{ebnfDiagram-V4P3TTPT-eQKKlMli.js → ebnfDiagram-V4P3TTPT-Du8LCQ31.js} +1 -1
- package/dist/web/assets/{elk-QONTBCTQ-C5kIOZTA.js → elk-QONTBCTQ-BzTAR-T1.js} +1 -1
- package/dist/web/assets/{erDiagram-KYQIGQAA-CMTowz5P.js → erDiagram-KYQIGQAA-SXYIjNOP.js} +1 -1
- package/dist/web/assets/{eventmodeling-K75KTNOO-C5v-UF8X.js → eventmodeling-K75KTNOO-Sbno3ZxQ.js} +1 -1
- package/dist/web/assets/flowDiagram-IUGLLWBU-Ae1H3vSR.js +1 -0
- package/dist/web/assets/{ganttDiagram-R7GPNTJY-B0viiC-b.js → ganttDiagram-R7GPNTJY-DBeX1qmu.js} +1 -1
- package/dist/web/assets/{gitGraph-VSP46ZUC-tEjFmPhN.js → gitGraph-VSP46ZUC-CKWihueS.js} +1 -1
- package/dist/web/assets/{gitGraphDiagram-PDYL7XHY-CsOwt7jz.js → gitGraphDiagram-PDYL7XHY-Cj1E3jqN.js} +1 -1
- package/dist/web/assets/index-CtTuHkNv.js +147 -0
- package/dist/web/assets/index-DwnjYADO.css +1 -0
- package/dist/web/assets/{info-OHQRW6UA-DnFGu4Ew.js → info-OHQRW6UA-D0w3nR0p.js} +1 -1
- package/dist/web/assets/{infoDiagram-MVDRKAX5-B6WiNaDF.js → infoDiagram-MVDRKAX5-F0jTCG-G.js} +1 -1
- package/dist/web/assets/{ishikawaDiagram-HPEHV2GE-Dn70fI1r.js → ishikawaDiagram-HPEHV2GE-CwQGP9AT.js} +1 -1
- package/dist/web/assets/{journeyDiagram-BOSHW7O7-BUjYzV2f.js → journeyDiagram-BOSHW7O7-CPY5GqD2.js} +1 -1
- package/dist/web/assets/{kanban-definition-FNSA4HC5-BDMfWbtB.js → kanban-definition-FNSA4HC5-BCL38eXh.js} +1 -1
- package/dist/web/assets/{line-DNSRZHBK.js → line-DoUzbVJS.js} +1 -1
- package/dist/web/assets/{linear-CrS49q6J.js → linear-LoqU-SEO.js} +1 -1
- package/dist/web/assets/{mermaid-parser.core-DXuyO8Px.js → mermaid-parser.core-CvO-MTG1.js} +3 -3
- package/dist/web/assets/{mermaid.core-DUTnbQkq.js → mermaid.core-DcCEGt0V.js} +4 -4
- package/dist/web/assets/{mindmap-definition-6OY57UG3-CqZTtItJ.js → mindmap-definition-6OY57UG3-yZvSibNz.js} +1 -1
- package/dist/web/assets/{packet-JDAUHWVQ-DXEZgY0a.js → packet-JDAUHWVQ-9ZiCegsV.js} +1 -1
- package/dist/web/assets/{pegDiagram-ECIUJNBX-D6CCPNem.js → pegDiagram-ECIUJNBX-BkGwBoEk.js} +1 -1
- package/dist/web/assets/{pie-XZMESJXO-AXRFjZ4G.js → pie-XZMESJXO-kAXIwFnU.js} +1 -1
- package/dist/web/assets/{pieDiagram-GNMPY74T-B9Ss8_5s.js → pieDiagram-GNMPY74T-jiwTgtdb.js} +1 -1
- package/dist/web/assets/{quadrantDiagram-D57K4MC3-JrlylCtz.js → quadrantDiagram-D57K4MC3-u9HdbUwr.js} +1 -1
- package/dist/web/assets/{radar-ABXABTNO-ChFm4hZg.js → radar-ABXABTNO-BQ911CvQ.js} +1 -1
- package/dist/web/assets/{railroad-I3PHUGI6-DaXXzqhZ.js → railroad-I3PHUGI6-Bvm7MWf9.js} +1 -1
- package/dist/web/assets/{railroad-abnf-LNEFI6M7-DGE67q11.js → railroad-abnf-LNEFI6M7-BfFmWnzu.js} +1 -1
- package/dist/web/assets/{railroad-ebnf-DWYD2UWJ-Cq9S3q72.js → railroad-ebnf-DWYD2UWJ-B8Ekz4aD.js} +1 -1
- package/dist/web/assets/{railroad-peg-JR7BVNR7-D2Gth3eY.js → railroad-peg-JR7BVNR7-B5ANjRbC.js} +1 -1
- package/dist/web/assets/{railroadDiagram-Y72NRBL7-BpkXX59H.js → railroadDiagram-Y72NRBL7-iu8Hmuma.js} +1 -1
- package/dist/web/assets/{requirementDiagram-EQYSW5RA-oNp3DMM4.js → requirementDiagram-EQYSW5RA-DgiEaaYZ.js} +1 -1
- package/dist/web/assets/{sankeyDiagram-SY24JHO5-bHfheSKO.js → sankeyDiagram-SY24JHO5-KzDvhd8J.js} +1 -1
- package/dist/web/assets/{sequenceDiagram-BLEHNHQU-CEM2XfNF.js → sequenceDiagram-BLEHNHQU-DJMSHuO_.js} +1 -1
- package/dist/web/assets/{src-KjMctvzy.js → src-C5WkvxTS.js} +1 -1
- package/dist/web/assets/{stateDiagram-v2-A6IESKWZ-D_TaR_ix.js → stateDiagram-v2-A6IESKWZ-CyfHfUyU.js} +1 -1
- package/dist/web/assets/{swimlanes-B3ENRKFQ-BUYl2fsg.js → swimlanes-B3ENRKFQ-YPSzHf2U.js} +1 -1
- package/dist/web/assets/swimlanesDiagram-AYQRV4AK-D2_NQS-o.js +8 -0
- package/dist/web/assets/{timeline-definition-JXYKGLGB-CpKsGN6d.js → timeline-definition-JXYKGLGB-BwvPIiSj.js} +1 -1
- package/dist/web/assets/{treeView-D4JQ5SDB-Dioaagqt.js → treeView-D4JQ5SDB-DsUhEw24.js} +1 -1
- package/dist/web/assets/{treemap-SAJKECNS-B8NLQ14o.js → treemap-SAJKECNS-D5NThB4V.js} +1 -1
- package/dist/web/assets/{usecaseDiagram-WPOLBNNX-CfwdxcsG.js → usecaseDiagram-WPOLBNNX-fLWGvuS0.js} +1 -1
- package/dist/web/assets/{vennDiagram-Q3Y3IDCW-DQoKGtXo.js → vennDiagram-Q3Y3IDCW-DFzlk_u2.js} +1 -1
- package/dist/web/assets/{wardley-7MLQ67FV-DQHLHmeZ.js → wardley-7MLQ67FV-0uG-noJX.js} +1 -1
- package/dist/web/assets/{wardleyDiagram-IVAIDKWA-DV-lq7zb.js → wardleyDiagram-IVAIDKWA-DfEQPTLg.js} +1 -1
- package/dist/web/assets/{xychartDiagram-4URNHDU4-wV4ueoGC.js → xychartDiagram-4URNHDU4-BXVsWbL0.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,17 +32,19 @@
|
|
|
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
|
-
- 📖 **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;
|
|
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. TXT, CSV, TSV, TOML, YAML/YML, JSONL, LOG, and INI files open as plain text, preserving whitespace with optional line wrapping. File previews are read-only; all supported text formats have a 2 MiB limit and require UTF-8.
|
|
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
|
|
|
44
44
|
Mermaid diagrams render locally after their code fence closes, with automatic light/dark colors. Failed diagrams keep their source; rendering is limited to 50,000 source characters and 500 edges.
|
|
45
45
|
|
|
46
|
+
Local image previews reuse loaded images for 30 seconds. Reopening an expired image shows the existing preview while the server checks for updates.
|
|
47
|
+
|
|
46
48
|
<details>
|
|
47
49
|
<summary><strong>📱 A workspace that fits your phone</strong></summary>
|
|
48
50
|
<p>Check a result, answer a question, or send the next instruction without returning to your desk.</p>
|
|
@@ -109,7 +111,7 @@ pnpm start -- --config ./config.local.json
|
|
|
109
111
|
|
|
110
112
|
Open **<http://127.0.0.1:8787>** and click **+** beside **Unassigned** in the sidebar to send a task without choosing a project.
|
|
111
113
|
|
|
112
|
-
To work in a project directory, click **Add project**, then choose an existing host directory or **Clone Git repository**. For
|
|
114
|
+
To work in a project directory, click **Add project**, then choose an existing host directory or **Clone Git repository**. Set **Service configuration → Data and projects → Project base directory (workDir, optional)** to start from a shared host directory. For example, with `workDir=/workspace/projects`, enter `demo` to add `/workspace/projects/demo`; cloning a `demo` repository defaults to that path too. Absolute paths override the prefix. The final server path is shown before submission and the destination remains editable. Saving `workDir` applies immediately to subsequent imports and survives refreshes and restarts, without moving existing projects. Leave it blank to keep entering absolute paths. Git cloning uses the host’s existing credentials, with progress and cancellation in the dialog. [Directory configuration, clone requirements and recovery](docs/project-clone.md).
|
|
113
115
|
|
|
114
116
|
Unassigned conversations use separate directories under `<dataDir>/workspaces/`, allocated on the first send. Their files are retained until you explicitly remove them; archiving does not delete files. See [conversation workspaces](docs/workspaces.md) for directory, recovery, and backup details.
|
|
115
117
|
|
|
@@ -139,19 +141,23 @@ covro update
|
|
|
139
141
|
covro update --channel dev
|
|
140
142
|
```
|
|
141
143
|
|
|
142
|
-
| Channel | npm tag
|
|
143
|
-
| ------- |
|
|
144
|
-
| Stable | `latest`
|
|
145
|
-
| Beta | `beta`
|
|
146
|
-
| Dev | `dev`
|
|
144
|
+
| Channel | npm tag | Choose it for |
|
|
145
|
+
| ------- | ---------------- | ------------------------------------------------ |
|
|
146
|
+
| Stable | `latest` | Regular use |
|
|
147
|
+
| Beta | `beta`, `latest` | Maintainer-selected Beta tags or GitHub Releases |
|
|
148
|
+
| Dev | `dev`, `latest` | New main-branch changes after CI passes |
|
|
149
|
+
|
|
150
|
+
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
151
|
|
|
148
152
|
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
153
|
|
|
154
|
+
Before installing, the update panel displays the selected version’s GitHub Release notes with Markdown and a link to the original. Notes follow the exact target version; some Beta / Dev versions have no matching Release. Missing notes or GitHub connection failures do not block updates.
|
|
155
|
+
|
|
150
156
|
Each release declares its recommended and verified Codex CLI versions. The update panel shows the current and candidate combinations. Automatic upgrades require a verified combination; an unverified combination needs explicit confirmation for that exact upgrade. Unknown versions, invalid/missing declarations, and explicitly unsupported combinations block managed upgrades. The CLI offers `covro update --allow-unverified-codex` for the same explicit attempt. Covro does not upgrade your Codex CLI.
|
|
151
157
|
|
|
152
158
|
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
159
|
|
|
154
|
-
DB Schema **
|
|
160
|
+
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
161
|
|
|
156
162
|
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
163
|
|
package/README.zh-CN.md
CHANGED
|
@@ -32,17 +32,19 @@
|
|
|
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
|
-
- 📖 **一边看产出,一边继续讨论。** 电脑上将 Markdown 文档、JSON 文件与会话并排打开,继续向 Codex 提问;Markdown 支持代码、表格、图片和 Mermaid 图表,回复也可直接显示图表,可查看或复制图表源码,并以实际大小查看宽图。JSON
|
|
38
|
+
- 📖 **一边看产出,一边继续讨论。** 电脑上将 Markdown 文档、JSON 文件与会话并排打开,继续向 Codex 提问;Markdown 支持代码、表格、图片和 Mermaid 图表,回复也可直接显示图表,可查看或复制图表源码,并以实际大小查看宽图。JSON 支持格式化缩进、语法高亮,格式无效时保留原文,可复制完整原文,手机上也有全屏阅读器。TXT、CSV、TSV、TOML、YAML/YML、JSONL、LOG 和 INI 文件按纯文本展示,保留空白并支持切换自动换行。文件预览保持只读,所有支持的文本格式均限制为 2 MiB,仅支持 UTF-8。
|
|
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
|
|
|
44
44
|
Mermaid 图表在代码块闭合后于本地渲染,自动适配浅色/深色。渲染失败时保留源码;渲染上限为 50,000 个源码字符、500 条边。
|
|
45
45
|
|
|
46
|
+
本地图片预览在加载后 30 秒内直接复用已有图片;过期后再次打开时,先显示已有预览,再由服务端核对更新。
|
|
47
|
+
|
|
46
48
|
<details>
|
|
47
49
|
<summary><strong>📱 手机上也能舒服地使用</strong></summary>
|
|
48
50
|
<p>查看结果、回答问题、补充下一步要求,不必每次都回到电脑前。</p>
|
|
@@ -109,7 +111,7 @@ pnpm start -- --config ./config.local.json
|
|
|
109
111
|
|
|
110
112
|
打开 **<http://127.0.0.1:8787>**,点击侧栏 **未关联项目** 标题右侧的 **+** 即可直接发送任务,无需选择项目。
|
|
111
113
|
|
|
112
|
-
如需操作项目目录,点击
|
|
114
|
+
如需操作项目目录,点击 **添加项目**,选择已有目录或 **克隆 Git 仓库**。可在 **服务配置 → 数据与项目 → 项目基础目录(workDir,可选)** 设置共用的主机目录。例如 `workDir=/workspace/projects` 时,填写 `demo` 即添加 `/workspace/projects/demo`,克隆 `demo` 仓库时也默认使用该路径。绝对路径直接使用,不再拼接前缀;提交前会显示最终服务器路径,目录可自行编辑。`workDir` 保存后立即用于后续添加和克隆,刷新或重启后仍保留,不会移动已有项目;留空时继续填写绝对路径。克隆沿用主机已有的 Git 认证,弹窗可查看进度或取消。[目录配置、克隆要求与失败恢复](docs/project-clone.md)。
|
|
113
115
|
|
|
114
116
|
未关联项目的会话在首次发送时分配 `<dataDir>/workspaces/` 下的独立目录。文件持续保留,归档不会删除文件;目录、恢复与备份规则见[会话工作目录](docs/workspaces.md)。
|
|
115
117
|
|
|
@@ -139,19 +141,23 @@ covro update
|
|
|
139
141
|
covro update --channel dev
|
|
140
142
|
```
|
|
141
143
|
|
|
142
|
-
| 渠道 | npm 标签
|
|
143
|
-
| ------ |
|
|
144
|
-
| 稳定版 | `latest`
|
|
145
|
-
| 预览版 | `beta`
|
|
146
|
-
| 开发版 | `dev`
|
|
144
|
+
| 渠道 | npm 标签 | 适合 |
|
|
145
|
+
| ------ | ---------------- | -------------------------------------------------- |
|
|
146
|
+
| 稳定版 | `latest` | 日常使用 |
|
|
147
|
+
| 预览版 | `beta`、`latest` | 维护者通过 Beta 标签或 GitHub Release 选定的预览版 |
|
|
148
|
+
| 开发版 | `dev`、`latest` | CI 通过后的 main 分支新功能 |
|
|
149
|
+
|
|
150
|
+
稳定版只检查 `latest`;预览版和开发版分别比较自身标签与 `latest`,按 SemVer 选择最新版本,开发版不接收预览版。安装稳定版后仍保留所选订阅,继续接收后续预览版或开发版;安装较旧候选版本需要明确允许降级。
|
|
147
151
|
|
|
148
152
|
开发版和预览版 npm 发布成功后,还会创建带 GitHub 自动生成说明的 [GitHub Pre-release](https://github.com/yuzheng14/covro/releases)。比较起点取同一渠道的先前版本与稳定版本中源码提交较新的那个。推送 Beta 标签即可发布 npm 包并创建对应的 Pre-release;重跑时保留已有发布说明。Beta 说明还会附上所选源码的兼容性声明。稳定版仍保留原来的分组 Changelog。
|
|
149
153
|
|
|
154
|
+
安装前,更新面板会展示所选目标版本的 GitHub Release 说明,支持 Markdown 和原文链接。说明始终对应确切目标版本;部分 Beta / Dev 版本没有对应 Release。说明缺失或 GitHub 连接失败不会阻止更新。
|
|
155
|
+
|
|
150
156
|
每个发行版声明推荐和已验证的 Codex CLI 版本,更新面板会同时显示当前与目标组合。自动升级只接受已验证组合;未验证组合需要对确切目标明确确认。版本未知、声明缺失/无效或明确不支持的组合会阻止受管升级。CLI 可通过 `covro update --allow-unverified-codex` 明确尝试同一组合。Covro 不会自动升级你的 Codex CLI。
|
|
151
157
|
|
|
152
158
|
自动安装默认关闭。受管升级支持 **macOS 和 Linux 的 npm 全局安装**;源码、链接、容器和 Windows 安装沿用原更新方式。候选版本失败时,会在重新开放业务写入前回滚;降级需通过数据库兼容检查。旧备份会保留,暂不自动轮转。
|
|
153
159
|
|
|
154
|
-
DB Schema **
|
|
160
|
+
DB Schema **7** 独立于应用版本管理。发行版声明 Schema 及经过验证的备份迁移范围;旧应用不能打开更新的数据库。详见[数据库兼容规则](docs/database.md)。
|
|
155
161
|
|
|
156
162
|
受管升级会在替换安装前创建并验证私有备份,覆盖 Covro 数据库与服务配置;备份失败会阻止激活。快照不包含 Codex 历史、凭据或项目文件。详见[备份范围](docs/backups.md)。
|
|
157
163
|
|
|
@@ -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
|
+
}
|