reasonix 0.41.0 → 0.44.0-rc.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 +73 -12
- package/README.zh-CN.md +35 -7
- package/dashboard/app.css +225 -4
- package/dashboard/dist/app.js +6538 -6082
- package/dashboard/dist/app.js.map +1 -1
- package/data/deepseek-tokenizer.json.gz +0 -0
- package/dist/cli/{acp-64VQZLDJ.js → acp-TYZ2CTDL.js} +40 -37
- package/dist/cli/acp-TYZ2CTDL.js.map +1 -0
- package/dist/cli/chat-TH7VNNCJ.js +51 -0
- package/dist/cli/{chunk-E46ECXJD.js → chunk-2425HK6U.js} +2 -1
- package/dist/cli/{chunk-E46ECXJD.js.map → chunk-2425HK6U.js.map} +1 -1
- package/dist/cli/chunk-25T6CVUP.js +172 -0
- package/dist/cli/chunk-25T6CVUP.js.map +1 -0
- package/dist/cli/{chunk-3Q3C4W66.js → chunk-2UQP6H6T.js} +2 -1
- package/dist/cli/{chunk-3Q3C4W66.js.map → chunk-2UQP6H6T.js.map} +1 -1
- package/dist/cli/{chunk-SXLJBFIV.js → chunk-2V6EAEUW.js} +99 -31
- package/dist/cli/chunk-2V6EAEUW.js.map +1 -0
- package/dist/cli/{chunk-4H3ZRJ2U.js → chunk-4CTDEJUF.js} +4 -3
- package/dist/cli/{chunk-4H3ZRJ2U.js.map → chunk-4CTDEJUF.js.map} +1 -1
- package/dist/cli/{chunk-7VFNPMKG.js → chunk-4QUNBQQ2.js} +3 -2
- package/dist/cli/{chunk-7VFNPMKG.js.map → chunk-4QUNBQQ2.js.map} +1 -1
- package/dist/cli/chunk-5QCB62C4.js +25319 -0
- package/dist/cli/chunk-5QCB62C4.js.map +1 -0
- package/dist/cli/chunk-6OWJV3YW.js +390 -0
- package/dist/cli/chunk-6OWJV3YW.js.map +1 -0
- package/dist/cli/{chunk-YJFKFTAL.js → chunk-6PBZN4VI.js} +15 -3
- package/dist/cli/chunk-6PBZN4VI.js.map +1 -0
- package/dist/cli/{chunk-WE3YZULK.js → chunk-7CIGMZT3.js} +3 -2
- package/dist/cli/{chunk-WE3YZULK.js.map → chunk-7CIGMZT3.js.map} +1 -1
- package/dist/cli/{chunk-LTXADNCO.js → chunk-7UCMM425.js} +8 -3
- package/dist/cli/chunk-7UCMM425.js.map +1 -0
- package/dist/cli/{chunk-UV7XJUJH.js → chunk-AB2RED3C.js} +16 -9
- package/dist/cli/{chunk-UV7XJUJH.js.map → chunk-AB2RED3C.js.map} +1 -1
- package/dist/cli/chunk-AVFXO2EZ.js +2996 -0
- package/dist/cli/chunk-AVFXO2EZ.js.map +1 -0
- package/dist/cli/{chunk-7SPOFTMT.js → chunk-C53JQES5.js} +4 -3
- package/dist/cli/{chunk-7SPOFTMT.js.map → chunk-C53JQES5.js.map} +1 -1
- package/dist/cli/{chunk-MHGPBJ2T.js → chunk-CGDR2ELH.js} +131 -34
- package/dist/cli/chunk-CGDR2ELH.js.map +1 -0
- package/dist/cli/{chunk-4DCHFFEY.js → chunk-CWZKQ5FE.js} +8 -4
- package/dist/cli/chunk-CWZKQ5FE.js.map +1 -0
- package/dist/cli/chunk-FEZK652I.js +3644 -0
- package/dist/cli/chunk-FEZK652I.js.map +1 -0
- package/dist/cli/{chunk-A7VHMMDE.js → chunk-HNXDZGC6.js} +114 -5
- package/dist/cli/chunk-HNXDZGC6.js.map +1 -0
- package/dist/cli/{chunk-FWGEHRB7.js → chunk-J5XJHLWM.js} +2 -1
- package/dist/cli/{chunk-FWGEHRB7.js.map → chunk-J5XJHLWM.js.map} +1 -1
- package/dist/cli/{chunk-Y5XNV3NX.js → chunk-JMBMLOBP.js} +2 -1
- package/dist/cli/{chunk-Y5XNV3NX.js.map → chunk-JMBMLOBP.js.map} +1 -1
- package/dist/cli/{chunk-ARF3N2SY.js → chunk-JNAQYELD.js} +17 -8
- package/dist/cli/{chunk-ARF3N2SY.js.map → chunk-JNAQYELD.js.map} +1 -1
- package/dist/cli/{chunk-AT6GGIBV.js → chunk-KGBG6M2X.js} +25 -18
- package/dist/cli/chunk-KGBG6M2X.js.map +1 -0
- package/dist/cli/{chunk-A3LL4XDV.js → chunk-KLQTAZIY.js} +69 -5
- package/dist/cli/chunk-KLQTAZIY.js.map +1 -0
- package/dist/cli/{chunk-KZYLMMU5.js → chunk-KM465GST.js} +13 -12
- package/dist/cli/{chunk-KZYLMMU5.js.map → chunk-KM465GST.js.map} +1 -1
- package/dist/cli/{chunk-2CXPDAWX.js → chunk-LIR2HBQH.js} +3 -2
- package/dist/cli/{chunk-2CXPDAWX.js.map → chunk-LIR2HBQH.js.map} +1 -1
- package/dist/cli/{chunk-RAUPWSYA.js → chunk-MJ6W5UN3.js} +3 -2
- package/dist/cli/{chunk-RAUPWSYA.js.map → chunk-MJ6W5UN3.js.map} +1 -1
- package/dist/cli/{chunk-4W2CICFQ.js → chunk-MRHHQJAQ.js} +72 -60
- package/dist/cli/chunk-MRHHQJAQ.js.map +1 -0
- package/dist/cli/{chunk-BOFL3T45.js → chunk-NVURFF27.js} +23 -11
- package/dist/cli/chunk-NVURFF27.js.map +1 -0
- package/dist/cli/chunk-OPFUUYHL.js +11645 -0
- package/dist/cli/chunk-OPFUUYHL.js.map +1 -0
- package/dist/cli/{chunk-FM57FNPJ.js → chunk-PLHAZOLZ.js} +2 -1
- package/dist/cli/{chunk-FM57FNPJ.js.map → chunk-PLHAZOLZ.js.map} +1 -1
- package/dist/cli/{chunk-ZTLZO42A.js → chunk-R3CTO2HM.js} +3 -2
- package/dist/cli/{chunk-ZTLZO42A.js.map → chunk-R3CTO2HM.js.map} +1 -1
- package/dist/cli/{chunk-BYZGO3BX.js → chunk-RDRC3XDT.js} +145 -39
- package/dist/cli/chunk-RDRC3XDT.js.map +1 -0
- package/dist/cli/chunk-S4XVGLRW.js +499 -0
- package/dist/cli/chunk-S4XVGLRW.js.map +1 -0
- package/dist/cli/{chunk-WJ3YX4PZ.js → chunk-SZ5XES2N.js} +3 -2
- package/dist/cli/{chunk-WJ3YX4PZ.js.map → chunk-SZ5XES2N.js.map} +1 -1
- package/dist/cli/{chunk-CD4SCQL4.js → chunk-TEUDEGX2.js} +64 -10
- package/dist/cli/chunk-TEUDEGX2.js.map +1 -0
- package/dist/cli/chunk-TKVXTQ3T.js +96 -0
- package/dist/cli/chunk-TKVXTQ3T.js.map +1 -0
- package/dist/cli/chunk-TUK7OWJA.js +51 -0
- package/dist/cli/chunk-TXJMRPIL.js +54 -0
- package/dist/cli/{chunk-L7W3HJZQ.js.map → chunk-TXJMRPIL.js.map} +1 -1
- package/dist/cli/{chunk-H4OLWRSX.js → chunk-V26WPN3J.js} +11 -7
- package/dist/cli/chunk-V26WPN3J.js.map +1 -0
- package/dist/cli/{chunk-VFG4GIT3.js → chunk-WK3UFQY3.js} +3 -2
- package/dist/cli/{chunk-VFG4GIT3.js.map → chunk-WK3UFQY3.js.map} +1 -1
- package/dist/cli/chunk-X53B3JIX.js +34320 -0
- package/dist/cli/chunk-X53B3JIX.js.map +1 -0
- package/dist/cli/{chunk-SOZE7V7V.js → chunk-XJXDHAES.js} +3 -2
- package/dist/cli/{chunk-SOZE7V7V.js.map → chunk-XJXDHAES.js.map} +1 -1
- package/dist/cli/{chunk-CFY2XLY6.js → chunk-XSU4QVFW.js} +7 -85
- package/dist/cli/chunk-XSU4QVFW.js.map +1 -0
- package/dist/cli/{chunk-CRPQUBP6.js → chunk-XXC2BYTV.js} +2 -1
- package/dist/cli/{chunk-CRPQUBP6.js.map → chunk-XXC2BYTV.js.map} +1 -1
- package/dist/cli/chunk-Z4S7EYXG.js +63813 -0
- package/dist/cli/chunk-Z4S7EYXG.js.map +1 -0
- package/dist/cli/chunk-ZZM6QJ4W.js +109 -0
- package/dist/cli/chunk-ZZM6QJ4W.js.map +1 -0
- package/dist/cli/{chunk-ORM6PK57.js → chunk-ZZYBBX5N.js} +14 -5
- package/dist/cli/chunk-ZZYBBX5N.js.map +1 -0
- package/dist/cli/code-PSVJ3KEN.js +166 -0
- package/dist/cli/code-PSVJ3KEN.js.map +1 -0
- package/dist/cli/{commands-QY7MSQG7.js → commands-OCU42XG4.js} +7 -5
- package/dist/cli/{commands-QY7MSQG7.js.map → commands-OCU42XG4.js.map} +1 -1
- package/dist/cli/{commit-BRCQ3OQO.js → commit-XCQIQCYG.js} +7 -4
- package/dist/cli/{commit-BRCQ3OQO.js.map → commit-XCQIQCYG.js.map} +1 -1
- package/dist/cli/{desktop-ZTMHQR2Y.js → desktop-KWGR4BNE.js} +327 -98
- package/dist/cli/desktop-KWGR4BNE.js.map +1 -0
- package/dist/cli/devtools-HW3WDT3Q.js +91 -0
- package/dist/cli/devtools-HW3WDT3Q.js.map +1 -0
- package/dist/cli/diff-NHANTNC3.js +165 -0
- package/dist/cli/{diff-YASCB7PU.js.map → diff-NHANTNC3.js.map} +1 -1
- package/dist/cli/doctor-CC5CLOGG.js +27 -0
- package/dist/cli/{events-2AJTXR7I.js → events-XEFAD5VX.js} +6 -4
- package/dist/cli/{events-2AJTXR7I.js.map → events-XEFAD5VX.js.map} +1 -1
- package/dist/cli/index.js +3266 -152
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/{mcp-YMWBLRR7.js → mcp-MPVGBBJF.js} +6 -4
- package/dist/cli/{mcp-YMWBLRR7.js.map → mcp-MPVGBBJF.js.map} +1 -1
- package/dist/cli/{mcp-browse-XLDUE6SB.js → mcp-browse-4XOTC3FJ.js} +32 -21
- package/dist/cli/{mcp-browse-XLDUE6SB.js.map → mcp-browse-4XOTC3FJ.js.map} +1 -1
- package/dist/cli/{mcp-inspect-H4D2HSJP.js → mcp-inspect-CEMGKKAH.js} +18 -10
- package/dist/cli/mcp-inspect-CEMGKKAH.js.map +1 -0
- package/dist/cli/package.json +3 -0
- package/dist/cli/prompt-2D7ID24X.js +16 -0
- package/dist/cli/{prune-sessions-4N3BVST2.js → prune-sessions-3RWUBYRS.js} +4 -2
- package/dist/cli/{prune-sessions-4N3BVST2.js.map → prune-sessions-3RWUBYRS.js.map} +1 -1
- package/dist/cli/{replay-3GTWM75X.js → replay-SR44E6RS.js} +42 -30
- package/dist/cli/{replay-3GTWM75X.js.map → replay-SR44E6RS.js.map} +1 -1
- package/dist/cli/{run-BLZPTRDX.js → run-MDGL27WL.js} +42 -40
- package/dist/cli/run-MDGL27WL.js.map +1 -0
- package/dist/cli/{server-DRFPXXSH.js → server-27ARQXIZ.js} +95 -55
- package/dist/cli/server-27ARQXIZ.js.map +1 -0
- package/dist/cli/{sessions-BOWFPTXT.js → sessions-CKQXCYGP.js} +25 -22
- package/dist/cli/sessions-CKQXCYGP.js.map +1 -0
- package/dist/cli/setup-TPAGSVXO.js +618 -0
- package/dist/cli/setup-TPAGSVXO.js.map +1 -0
- package/dist/cli/stats-DPUBZNVX.js +16 -0
- package/dist/cli/update-6ITLPRDV.js +15 -0
- package/dist/cli/version-2X3BHVVK.js +33 -0
- package/dist/cli/{version-XQXYSJ5L.js.map → version-2X3BHVVK.js.map} +1 -1
- package/dist/index.d.ts +182 -45
- package/dist/index.js +1420 -546
- package/dist/index.js.map +1 -1
- package/package.json +21 -8
- package/dist/cli/.-3G6VX5S7.js +0 -327
- package/dist/cli/.-6YRPB2C7.js +0 -329
- package/dist/cli/.-EYSVINK3.js +0 -317
- package/dist/cli/acp-64VQZLDJ.js.map +0 -1
- package/dist/cli/chat-ZAGX52RV.js +0 -46
- package/dist/cli/chunk-4DCHFFEY.js.map +0 -1
- package/dist/cli/chunk-4W2CICFQ.js.map +0 -1
- package/dist/cli/chunk-5X7LZJDE.js +0 -36
- package/dist/cli/chunk-5X7LZJDE.js.map +0 -1
- package/dist/cli/chunk-65Q5HQ26.js +0 -892
- package/dist/cli/chunk-65Q5HQ26.js.map +0 -1
- package/dist/cli/chunk-A3LL4XDV.js.map +0 -1
- package/dist/cli/chunk-A7VHMMDE.js.map +0 -1
- package/dist/cli/chunk-AFFZF3MW.js +0 -36
- package/dist/cli/chunk-AFFZF3MW.js.map +0 -1
- package/dist/cli/chunk-AT6GGIBV.js.map +0 -1
- package/dist/cli/chunk-BOFL3T45.js.map +0 -1
- package/dist/cli/chunk-BYZGO3BX.js.map +0 -1
- package/dist/cli/chunk-CD4SCQL4.js.map +0 -1
- package/dist/cli/chunk-CFY2XLY6.js.map +0 -1
- package/dist/cli/chunk-CPOV2O73.js +0 -39
- package/dist/cli/chunk-CPOV2O73.js.map +0 -1
- package/dist/cli/chunk-DAEAAVDF.js +0 -199
- package/dist/cli/chunk-DAEAAVDF.js.map +0 -1
- package/dist/cli/chunk-F2AV2QDK.js +0 -16514
- package/dist/cli/chunk-F2AV2QDK.js.map +0 -1
- package/dist/cli/chunk-H4OLWRSX.js.map +0 -1
- package/dist/cli/chunk-IEA6JOIP.js +0 -5430
- package/dist/cli/chunk-IEA6JOIP.js.map +0 -1
- package/dist/cli/chunk-L7W3HJZQ.js +0 -46
- package/dist/cli/chunk-LN27AKV3.js +0 -26
- package/dist/cli/chunk-LN27AKV3.js.map +0 -1
- package/dist/cli/chunk-LTXADNCO.js.map +0 -1
- package/dist/cli/chunk-MHGPBJ2T.js.map +0 -1
- package/dist/cli/chunk-ORM6PK57.js.map +0 -1
- package/dist/cli/chunk-SXLJBFIV.js.map +0 -1
- package/dist/cli/chunk-YJFKFTAL.js.map +0 -1
- package/dist/cli/code-X3M6ENTQ.js +0 -150
- package/dist/cli/code-X3M6ENTQ.js.map +0 -1
- package/dist/cli/desktop-ZTMHQR2Y.js.map +0 -1
- package/dist/cli/diff-YASCB7PU.js +0 -153
- package/dist/cli/doctor-XCN5ETVP.js +0 -24
- package/dist/cli/mcp-inspect-H4D2HSJP.js.map +0 -1
- package/dist/cli/prompt-RSIHN62V.js +0 -14
- package/dist/cli/run-BLZPTRDX.js.map +0 -1
- package/dist/cli/server-DRFPXXSH.js.map +0 -1
- package/dist/cli/sessions-BOWFPTXT.js.map +0 -1
- package/dist/cli/setup-FQL2JJC2.js +0 -516
- package/dist/cli/setup-FQL2JJC2.js.map +0 -1
- package/dist/cli/stats-5RJCATCE.js +0 -12
- package/dist/cli/stats-5RJCATCE.js.map +0 -1
- package/dist/cli/update-GUCWB4UN.js +0 -13
- package/dist/cli/update-GUCWB4UN.js.map +0 -1
- package/dist/cli/version-XQXYSJ5L.js +0 -30
- /package/dist/cli/{.-3G6VX5S7.js.map → chat-TH7VNNCJ.js.map} +0 -0
- /package/dist/cli/{.-6YRPB2C7.js.map → chunk-TUK7OWJA.js.map} +0 -0
- /package/dist/cli/{.-EYSVINK3.js.map → doctor-CC5CLOGG.js.map} +0 -0
- /package/dist/cli/{chat-ZAGX52RV.js.map → prompt-2D7ID24X.js.map} +0 -0
- /package/dist/cli/{doctor-XCN5ETVP.js.map → stats-DPUBZNVX.js.map} +0 -0
- /package/dist/cli/{prompt-RSIHN62V.js.map → update-6ITLPRDV.js.map} +0 -0
package/README.md
CHANGED
|
@@ -56,33 +56,93 @@
|
|
|
56
56
|
|
|
57
57
|
## Install
|
|
58
58
|
|
|
59
|
-
|
|
59
|
+
Requires Node ≥ 22. Works on macOS · Linux · Windows (PowerShell · Git Bash · Windows Terminal).
|
|
60
|
+
|
|
61
|
+
Install Reasonix globally if you want the `reasonix` command available on your `PATH`:
|
|
62
|
+
|
|
63
|
+
~~~bash
|
|
64
|
+
npm install -g reasonix
|
|
65
|
+
reasonix code my-project # paste a DeepSeek API key on first run; persists after
|
|
66
|
+
~~~
|
|
67
|
+
|
|
68
|
+
Or run it once without installing globally:
|
|
69
|
+
|
|
70
|
+
~~~bash
|
|
60
71
|
cd my-project
|
|
61
|
-
npx reasonix code
|
|
62
|
-
|
|
72
|
+
npx reasonix code # always uses the latest package by default
|
|
73
|
+
~~~
|
|
74
|
+
|
|
75
|
+
Grab a [DeepSeek API key →](https://platform.deepseek.com/api_keys) · `reasonix code --help` for flags.
|
|
63
76
|
|
|
64
|
-
|
|
77
|
+
If you use Reasonix daily, global install is the simplest path. If you just want to try it, use `npx`.
|
|
65
78
|
|
|
66
|
-
`
|
|
79
|
+
Bare `reasonix` (no subcommand) launches `code` in the current directory — typing `reasonix` and `reasonix code` are equivalent.
|
|
67
80
|
|
|
68
81
|
| Command | When |
|
|
69
82
|
|---|---|
|
|
70
|
-
| `reasonix code [dir]` | The coding agent. **Start here.** |
|
|
83
|
+
| `reasonix` / `reasonix code [dir]` | The coding agent. **Start here.** |
|
|
71
84
|
| `reasonix chat` | Plain chat — no filesystem or shell tools. |
|
|
72
85
|
| `reasonix run "task"` | One-shot, streams to stdout. Good for pipes. |
|
|
73
86
|
| `reasonix doctor` | Health check: Node, API key, MCP wiring. |
|
|
74
87
|
| `reasonix update` | Upgrade Reasonix itself. |
|
|
75
88
|
|
|
89
|
+
### Terminal renderer (Rust by default)
|
|
90
|
+
|
|
91
|
+
Since 0.44.0, Reasonix ships a native ratatui renderer (`reasonix-render`) as the default TUI. `npm install` resolves one of five pre-built `@reasonix/render-{platform}-{arch}` sub-packages via `optionalDependencies` so install is zero-config on **win32-x64 · linux-x64 · linux-arm64 · darwin-x64 · darwin-arm64**. No cargo, no toolchain, nothing extra to fetch.
|
|
92
|
+
|
|
93
|
+
- Want the old Ink/Node TUI back? Pass `--node` to any subcommand (`reasonix --node`, `reasonix code --node`, `reasonix chat --node`) or set `REASONIX_RENDERER=node` in your shell.
|
|
94
|
+
- Running on a platform without a published sub-package (Linux musl, FreeBSD, ARM v7, etc.)? Reasonix prints a one-line warning and auto-falls-back to the Ink renderer — nothing breaks.
|
|
95
|
+
- Building rust from source? `cargo build --release --bin reasonix-render` inside the repo; the dev flow (`npm run dev`) does this automatically. The resolver also accepts `REASONIX_RENDER_BIN=/path/to/binary` to pin a specific build for testing.
|
|
96
|
+
|
|
76
97
|
Other subcommands (`replay` · `diff` · `events` · `stats` · `index` · `mcp` · `prune-sessions`) are in `reasonix --help` and the [CLI reference](https://esengine.github.io/DeepSeek-Reasonix/#cli).
|
|
77
98
|
|
|
99
|
+
### QQ channel
|
|
100
|
+
|
|
101
|
+
Reasonix can attach QQ as a remote communication channel for existing `chat` and `code` sessions. It is not a separate runtime mode.
|
|
102
|
+
|
|
103
|
+
Start a session first:
|
|
104
|
+
|
|
105
|
+
~~~bash
|
|
106
|
+
reasonix code
|
|
107
|
+
# or
|
|
108
|
+
reasonix chat
|
|
109
|
+
~~~
|
|
110
|
+
|
|
111
|
+
Then connect QQ from inside the session:
|
|
112
|
+
|
|
113
|
+
~~~text
|
|
114
|
+
/qq connect
|
|
115
|
+
~~~
|
|
116
|
+
|
|
117
|
+
Available commands:
|
|
118
|
+
|
|
119
|
+
- `/qq connect`
|
|
120
|
+
- `/qq status`
|
|
121
|
+
- `/qq disconnect`
|
|
122
|
+
|
|
123
|
+
Once enabled, later `chat` / `code` sessions auto-start the QQ channel. Slash commands, confirmation prompts, and follow-up assistant replies can continue through QQ without terminal-side input.
|
|
124
|
+
|
|
125
|
+
See [QQ channel setup](./docs/qq-connect.md) for setup details and QQ Open Platform bot registration.
|
|
126
|
+
### Desktop client (prerelease)
|
|
127
|
+
|
|
128
|
+
A native Tauri client for users who want a GUI over the same loop. Multi-tab, the right-panel shows files the agent has read or edited this session, the same cost / cache / token meters live at the bottom. Same DeepSeek API key, same `~/.reasonix` config — the desktop bundles its own Node runtime, no separate `npm install` step.
|
|
129
|
+
|
|
130
|
+
Download platform installers from [GitHub Releases](https://github.com/esengine/DeepSeek-Reasonix/releases). The desktop ships as a **prerelease**: the loop and protocol are the same as the CLI, but the UI is still being polished and the installers aren't code-signed yet.
|
|
131
|
+
|
|
132
|
+
- **macOS** — first launch hits Gatekeeper. One-time fix: `xattr -dr com.apple.quarantine /Applications/Reasonix.app` (or right-click → Open → confirm).
|
|
133
|
+
- **Windows** — SmartScreen warns "Unknown publisher". Click **More info → Run anyway**.
|
|
134
|
+
- **Linux** — `.deb` and `.AppImage` ship plain, no extra step.
|
|
135
|
+
|
|
136
|
+
The CLI remains the canonical surface. Anything that lands in the CLI is also available from the desktop's composer.
|
|
137
|
+
|
|
78
138
|
<details>
|
|
79
139
|
<summary><strong>Working in another folder · chat vs. code · author a skill</strong></summary>
|
|
80
140
|
|
|
81
141
|
**Working in a different folder.** Reasonix scopes filesystem tools to the launch directory; pass `--dir` to retarget. Mid-session switching isn't supported by design (memory paths would tangle with stale roots) — quit and relaunch.
|
|
82
142
|
|
|
83
|
-
|
|
143
|
+
~~~bash
|
|
84
144
|
npx reasonix code --dir /path/to/project
|
|
85
|
-
|
|
145
|
+
~~~
|
|
86
146
|
|
|
87
147
|
**Picking `chat` vs `code`.** `code` is the default and the only mode with filesystem / shell tools and SEARCH/REPLACE review. `chat` is the lighter, tools-off shell — reach for it when you want a thinking partner with MCP attached but no disk access.
|
|
88
148
|
|
|
@@ -99,10 +159,10 @@ npx reasonix code --dir /path/to/project
|
|
|
99
159
|
|
|
100
160
|
**Author your first skill.** No remote registry — write them directly. Edit the file (`description:` frontmatter + body), then `/skill list`. Add `runAs: subagent` to spawn an isolated subagent loop instead of inlining the body.
|
|
101
161
|
|
|
102
|
-
|
|
162
|
+
~~~bash
|
|
103
163
|
/skill new my-skill # <project>/.reasonix/skills/my-skill.md
|
|
104
164
|
/skill new my-skill --global # ~/.reasonix/skills for cross-project use
|
|
105
|
-
|
|
165
|
+
~~~
|
|
106
166
|
|
|
107
167
|
</details>
|
|
108
168
|
|
|
@@ -121,7 +181,7 @@ One JSON file at `~/.reasonix/config.json` plus per-project overrides under `<pr
|
|
|
121
181
|
| [Memory](https://esengine.github.io/DeepSeek-Reasonix/configuration.html#memory) | User-private knowledge pinned into the prefix. `user` / `feedback` / `project` / `reference` types. |
|
|
122
182
|
| [Hooks](https://esengine.github.io/DeepSeek-Reasonix/configuration.html#hooks) | Shell commands on lifecycle events. `PreToolUse` (gating) · `PostToolUse` · `UserPromptSubmit` · `Stop`. |
|
|
123
183
|
| [Permissions](https://esengine.github.io/DeepSeek-Reasonix/configuration.html#permissions) | Per-workspace shell allowlist. Exact-prefix match. |
|
|
124
|
-
| [Web search](https://esengine.github.io/DeepSeek-Reasonix/configuration.html#search) | Mojeek by default; switch to self-hosted SearXNG with `/search-engine`. |
|
|
184
|
+
| [Web search](https://esengine.github.io/DeepSeek-Reasonix/configuration.html#search) | Mojeek by default; switch to self-hosted SearXNG or Metaso with `/search-engine`. |
|
|
125
185
|
| [Semantic index](https://esengine.github.io/DeepSeek-Reasonix/configuration.html#index) | `reasonix index` — local Ollama or any OpenAI-compatible embedding endpoint. |
|
|
126
186
|
|
|
127
187
|
<br/>
|
|
@@ -158,7 +218,7 @@ Click through to the full architecture writeup → [Pillar 1 — Cache-first loo
|
|
|
158
218
|
| Configurable web search engine | `/search-engine` | — | — | — |
|
|
159
219
|
| Persistent per-workspace sessions | yes | partial | n/a | — |
|
|
160
220
|
| Plan mode · MCP · hooks · skills | yes | yes | yes | partial |
|
|
161
|
-
| Web search (Mojeek + SearXNG)
|
|
221
|
+
| Web search (Mojeek + SearXNG + Metaso) | yes | yes | yes | yes |
|
|
162
222
|
| Open community development | yes | — | — | yes |
|
|
163
223
|
|
|
164
224
|
For live cache-hit rates, costs, and methodology, see [`benchmarks/`](./benchmarks/) — the numbers move with model pricing, so they live with the harness, not in the README.
|
|
@@ -169,6 +229,7 @@ For live cache-hit rates, costs, and methodology, see [`benchmarks/`](./benchmar
|
|
|
169
229
|
|
|
170
230
|
- [**Architecture**](./docs/ARCHITECTURE.md) — three pillars: cache-first loop, tool-call repair, cost control
|
|
171
231
|
- [**CLI Reference**](./docs/CLI-REFERENCE.md) — every shell subcommand, every slash command, every keybinding
|
|
232
|
+
- [**QQ channel setup**](./docs/qq-connect.md) — what it is, commands, setup flow, and QQ Open Platform credentials
|
|
172
233
|
- [**Benchmarks**](./benchmarks/) — τ-bench-lite harness, transcripts, cost methodology
|
|
173
234
|
- [**Website**](https://esengine.github.io/DeepSeek-Reasonix/) — getting started, dashboard mockup, TUI mockup
|
|
174
235
|
- [**Contributing**](./CONTRIBUTING.md) — comment policy, error-handling rules, library-over-hand-rolled
|
package/README.zh-CN.md
CHANGED
|
@@ -53,10 +53,10 @@
|
|
|
53
53
|
|
|
54
54
|
## 安装
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
~~~bash
|
|
57
57
|
cd my-project
|
|
58
58
|
npx reasonix code # 首次运行粘贴 DeepSeek API Key,之后会记住
|
|
59
|
-
|
|
59
|
+
~~~
|
|
60
60
|
|
|
61
61
|
要求 Node ≥ 22。在 macOS · Linux · Windows(PowerShell · Git Bash · Windows Terminal)都跑得顺。[去拿 DeepSeek API Key →](https://platform.deepseek.com/api_keys) · 完整 flag 看 `reasonix code --help`。
|
|
62
62
|
|
|
@@ -72,14 +72,41 @@ npx reasonix code # 首次运行粘贴 DeepSeek API Key,之后会记住
|
|
|
72
72
|
|
|
73
73
|
其他子命令(`replay` · `diff` · `events` · `stats` · `index` · `mcp` · `prune-sessions`)在 `reasonix --help` 和 [CLI 参考](https://esengine.github.io/DeepSeek-Reasonix/#cli)。
|
|
74
74
|
|
|
75
|
+
### QQ 通道
|
|
76
|
+
|
|
77
|
+
Reasonix 可以把 QQ 挂到现有的 `chat` / `code` 会话上,作为远程通信通道使用。它不是一个独立的新模式。
|
|
78
|
+
|
|
79
|
+
先启动一个会话:
|
|
80
|
+
|
|
81
|
+
~~~bash
|
|
82
|
+
reasonix code
|
|
83
|
+
# 或
|
|
84
|
+
reasonix chat
|
|
85
|
+
~~~
|
|
86
|
+
|
|
87
|
+
然后在会话里连接 QQ:
|
|
88
|
+
|
|
89
|
+
~~~text
|
|
90
|
+
/qq connect
|
|
91
|
+
~~~
|
|
92
|
+
|
|
93
|
+
可用命令:
|
|
94
|
+
|
|
95
|
+
- `/qq connect`
|
|
96
|
+
- `/qq status`
|
|
97
|
+
- `/qq disconnect`
|
|
98
|
+
|
|
99
|
+
启用后,后续的 `chat` / `code` 会话会自动启动 QQ 通道。斜杠命令、确认提示,以及后续助手回复都可以通过 QQ 继续完成,不需要回到终端交互。
|
|
100
|
+
|
|
101
|
+
详细说明见 [QQ 连接指南](./docs/qq-connect.zh-CN.md)。
|
|
75
102
|
<details>
|
|
76
103
|
<summary><strong>切换工作区 · chat vs. code · 写第一个 Skill</strong></summary>
|
|
77
104
|
|
|
78
105
|
**切换工作区。** Reasonix 把文件系统工具作用域绑定在启动目录,传 `--dir` 可以指别处。中途切换是有意不支持的(消息日志和 memory 路径会和旧根目录混在一起)—— 退出再启动。
|
|
79
106
|
|
|
80
|
-
|
|
107
|
+
~~~bash
|
|
81
108
|
npx reasonix code --dir /path/to/project
|
|
82
|
-
|
|
109
|
+
~~~
|
|
83
110
|
|
|
84
111
|
**`chat` 还是 `code`?** `code` 是默认入口、唯一带文件系统 / shell 工具和 SEARCH/REPLACE 审阅的模式。`chat` 是更轻量的纯对话壳——想要一个挂着 MCP 但没有磁盘权限的“思路助手”时用它。
|
|
85
112
|
|
|
@@ -96,10 +123,10 @@ npx reasonix code --dir /path/to/project
|
|
|
96
123
|
|
|
97
124
|
**写第一个 Skill。** 暂无在线市场——自己写。编辑文件(`description:` frontmatter + 正文),然后 `/skill list` 就能看到。frontmatter 加 `runAs: subagent` 会以隔离 subagent 跑,而不是把正文内联进父 prompt。
|
|
98
125
|
|
|
99
|
-
|
|
126
|
+
~~~bash
|
|
100
127
|
/skill new my-skill # <project>/.reasonix/skills/my-skill.md
|
|
101
128
|
/skill new my-skill --global # ~/.reasonix/skills,跨项目共用
|
|
102
|
-
|
|
129
|
+
~~~
|
|
103
130
|
|
|
104
131
|
</details>
|
|
105
132
|
|
|
@@ -118,7 +145,7 @@ npx reasonix code --dir /path/to/project
|
|
|
118
145
|
| [Memory](https://esengine.github.io/DeepSeek-Reasonix/configuration.html?lang=zh#memory) | 用户私有的知识,钉进前缀。`user` / `feedback` / `project` / `reference` 四类。 |
|
|
119
146
|
| [Hooks](https://esengine.github.io/DeepSeek-Reasonix/configuration.html?lang=zh#hooks) | 生命周期事件触发的 shell 命令。`PreToolUse`(拦截)· `PostToolUse` · `UserPromptSubmit` · `Stop`。 |
|
|
120
147
|
| [权限](https://esengine.github.io/DeepSeek-Reasonix/configuration.html?lang=zh#permissions) | 按工作区的 shell 白名单,精确前缀匹配。 |
|
|
121
|
-
| [Web 搜索](https://esengine.github.io/DeepSeek-Reasonix/configuration.html?lang=zh#search) | 默认 Mojeek;用 `/search-engine` 可切到自托管的 SearXNG。 |
|
|
148
|
+
| [Web 搜索](https://esengine.github.io/DeepSeek-Reasonix/configuration.html?lang=zh#search) | 默认 Mojeek;用 `/search-engine` 可切到自托管的 SearXNG 或 Metaso。 |
|
|
122
149
|
| [语义索引](https://esengine.github.io/DeepSeek-Reasonix/configuration.html?lang=zh#index) | `reasonix index` —— 本地 Ollama,或任何 OpenAI 兼容的 embedding 接口。 |
|
|
123
150
|
|
|
124
151
|
<br/>
|
|
@@ -164,6 +191,7 @@ npx reasonix code --dir /path/to/project
|
|
|
164
191
|
|
|
165
192
|
- [**架构**](./docs/ARCHITECTURE.md) —— 四大支柱、缓存优先循环、思维提取、脚手架
|
|
166
193
|
- [**CLI 参考**](./docs/CLI-REFERENCE.md) —— 每个 shell 子命令、每个 slash 命令、每个快捷键
|
|
194
|
+
- [**QQ 连接指南**](./docs/qq-connect.zh-CN.md) —— 通道定位、命令、配置流程和 QQ 开放平台凭据
|
|
167
195
|
- [**基准测试**](./benchmarks/) —— τ-bench-lite harness、transcript、成本方法论
|
|
168
196
|
- [**官方网站**](https://esengine.github.io/DeepSeek-Reasonix/) —— 入门、Dashboard 设计稿、TUI 设计稿
|
|
169
197
|
- [**贡献指南**](./CONTRIBUTING.md) —— 注释规则、错误处理、用现成库不手写
|
package/dashboard/app.css
CHANGED
|
@@ -59,7 +59,14 @@
|
|
|
59
59
|
|
|
60
60
|
/* Spacing / radius — tiny radius (2px) keeps web feel without going SaaS */
|
|
61
61
|
--r: 2px;
|
|
62
|
+
--r-sm: 4px;
|
|
62
63
|
--r-md: 4px;
|
|
64
|
+
|
|
65
|
+
/* Inline elevation step above --bg-elev-2 for nested cards/dropdowns. */
|
|
66
|
+
--bg-elev-3: #1d2230;
|
|
67
|
+
|
|
68
|
+
/* Brand sweep — used by .md hr and the mini status bar fill. */
|
|
69
|
+
--gradient-rule: linear-gradient(90deg, var(--c-brand), var(--c-accent));
|
|
63
70
|
}
|
|
64
71
|
|
|
65
72
|
* { box-sizing: border-box; }
|
|
@@ -1157,7 +1164,7 @@ input:focus, textarea:focus, select:focus { border-color: var(--c-brand); }
|
|
|
1157
1164
|
font-size: 16px;
|
|
1158
1165
|
}
|
|
1159
1166
|
.md h3 {
|
|
1160
|
-
background: var(--
|
|
1167
|
+
background: var(--s2);
|
|
1161
1168
|
font-size: 14px;
|
|
1162
1169
|
}
|
|
1163
1170
|
|
|
@@ -2064,7 +2071,7 @@ input:focus, textarea:focus, select:focus { border-color: var(--c-brand); }
|
|
|
2064
2071
|
}
|
|
2065
2072
|
|
|
2066
2073
|
.modal-picker-row.selected {
|
|
2067
|
-
border-color: var(--accent
|
|
2074
|
+
border-color: var(--c-accent);
|
|
2068
2075
|
background: var(--bg-elev-3, var(--bg-elev-2));
|
|
2069
2076
|
}
|
|
2070
2077
|
|
|
@@ -2079,7 +2086,7 @@ input:focus, textarea:focus, select:focus { border-color: var(--c-brand); }
|
|
|
2079
2086
|
color: var(--fg-2);
|
|
2080
2087
|
padding: 1px 6px;
|
|
2081
2088
|
border-radius: 999px;
|
|
2082
|
-
background: var(--bg-elev
|
|
2089
|
+
background: var(--bg-elev);
|
|
2083
2090
|
}
|
|
2084
2091
|
|
|
2085
2092
|
.modal-picker-subtitle {
|
|
@@ -2669,7 +2676,7 @@ input:focus, textarea:focus, select:focus { border-color: var(--c-brand); }
|
|
|
2669
2676
|
display: inline-flex;
|
|
2670
2677
|
align-items: center;
|
|
2671
2678
|
gap: 8px;
|
|
2672
|
-
background: var(--bg-elev
|
|
2679
|
+
background: var(--bg-elev);
|
|
2673
2680
|
border: 1px solid var(--bd);
|
|
2674
2681
|
border-radius: 6px;
|
|
2675
2682
|
padding: 6px 10px;
|
|
@@ -3010,4 +3017,218 @@ input:focus, textarea:focus, select:focus { border-color: var(--c-brand); }
|
|
|
3010
3017
|
font-size: 12px;
|
|
3011
3018
|
}
|
|
3012
3019
|
|
|
3020
|
+
/* ═══════════════════════════════════════════════════════════════════════════
|
|
3021
|
+
Light theme — toggled via data-theme="light" on <html>
|
|
3022
|
+
|
|
3023
|
+
Palette inspired by Element Plus: clean white surfaces, dark body text,
|
|
3024
|
+
and slightly deepened accent colours so they stay legible on light
|
|
3025
|
+
backgrounds. Every variable from the :root dark set is overridden here;
|
|
3026
|
+
hardcoded-hex fixups follow in a second block.
|
|
3027
|
+
═══════════════════════════════════════════════════════════════════════════ */
|
|
3028
|
+
[data-theme="light"] {
|
|
3029
|
+
/* Surfaces */
|
|
3030
|
+
--bg: #f5f7fa;
|
|
3031
|
+
--bg-elev: #ffffff;
|
|
3032
|
+
--bg-elev-2: #f0f2f5;
|
|
3033
|
+
--bg-input: #ffffff;
|
|
3034
|
+
--bg-code: #f5f7fa;
|
|
3035
|
+
--bg-hover: #ecf5ff;
|
|
3036
|
+
|
|
3037
|
+
/* Text */
|
|
3038
|
+
--fg-0: #303133; /* primary — headings, emphasis */
|
|
3039
|
+
--fg-1: #606266; /* body — paragraphs, default */
|
|
3040
|
+
--fg-2: #909399; /* secondary — labels, meta */
|
|
3041
|
+
--fg-3: #a8abb2; /* dim — placeholders, hints */
|
|
3042
|
+
--fg-4: #c0c4cc; /* very dim — separators, disabled */
|
|
3043
|
+
|
|
3044
|
+
/* Accents — deepened ~15% so they hit ≥4.5:1 on white */
|
|
3045
|
+
--c-brand: #409eff; /* primary blue (Element Plus) */
|
|
3046
|
+
--c-accent: #9b6bff; /* purple */
|
|
3047
|
+
--c-violet: #8b5cf6; /* violet */
|
|
3048
|
+
--c-ok: #67c23a; /* success green */
|
|
3049
|
+
--c-warn: #e6a23c; /* warning amber */
|
|
3050
|
+
--c-err: #f56c6c; /* error red */
|
|
3051
|
+
--c-info: #409eff;
|
|
3052
|
+
|
|
3053
|
+
/* Chart spectrum */
|
|
3054
|
+
--s1: #409eff;
|
|
3055
|
+
--s2: #36cfc9;
|
|
3056
|
+
--s3: #67c23a;
|
|
3057
|
+
--s4: #e6a23c;
|
|
3058
|
+
--s5: #f56c6c;
|
|
3059
|
+
--s6: #9b6bff;
|
|
3060
|
+
|
|
3061
|
+
/* Borders */
|
|
3062
|
+
--bd: #e4e7ed;
|
|
3063
|
+
--bd-strong: #dcdfe6;
|
|
3064
|
+
|
|
3065
|
+
/* Elevation step above --bg-elev-2 in light mode — matches the surface scale. */
|
|
3066
|
+
--bg-elev-3: #e4e7ed;
|
|
3067
|
+
}
|
|
3068
|
+
|
|
3069
|
+
/* ── Light-theme fixups for hardcoded hex / rgba values ────────────────
|
|
3070
|
+
These selectors use literal colours (not CSS variables) in the dark
|
|
3071
|
+
theme and therefore need explicit overrides to look correct on a
|
|
3072
|
+
white background. Keep them scoped under [data-theme="light"] so
|
|
3073
|
+
dark mode is never touched. ────────────────────────────────────────── */
|
|
3074
|
+
|
|
3075
|
+
/* Hardcoded #14171e borders (dark-theme inner dividers) → var(--bd) */
|
|
3076
|
+
[data-theme="light"] .section,
|
|
3077
|
+
[data-theme="light"] .ssl-row,
|
|
3078
|
+
[data-theme="light"] .sr-card {
|
|
3079
|
+
border-bottom-color: var(--bd);
|
|
3080
|
+
}
|
|
3081
|
+
[data-theme="light"] .overlay::before {
|
|
3082
|
+
border-color: var(--bd);
|
|
3083
|
+
}
|
|
3084
|
+
[data-theme="light"] .composer-foot {
|
|
3085
|
+
border-top-color: var(--bd);
|
|
3086
|
+
}
|
|
3087
|
+
[data-theme="light"] .scale-row {
|
|
3088
|
+
border-bottom-color: var(--bd);
|
|
3089
|
+
}
|
|
3090
|
+
|
|
3091
|
+
/* Primary button hover — lighten the brand colour instead of the
|
|
3092
|
+
dark-theme hardcoded #94cdff. */
|
|
3093
|
+
[data-theme="light"] .btn.primary:hover,
|
|
3094
|
+
[data-theme="light"] button.primary:hover {
|
|
3095
|
+
background: #66b1ff;
|
|
3096
|
+
border-color: #66b1ff;
|
|
3097
|
+
color: #fff;
|
|
3098
|
+
}
|
|
3099
|
+
|
|
3100
|
+
/* Markdown headings — dark theme puts black text on coloured bg;
|
|
3101
|
+
light theme uses white text for cleaner contrast. */
|
|
3102
|
+
[data-theme="light"] .md h1,
|
|
3103
|
+
[data-theme="light"] .md h2,
|
|
3104
|
+
[data-theme="light"] .md h3 {
|
|
3105
|
+
color: #fff;
|
|
3106
|
+
}
|
|
3107
|
+
|
|
3108
|
+
/* Chat banner — rgba tint references the brand colour so it must
|
|
3109
|
+
switch to the light-mode brand hex. */
|
|
3110
|
+
[data-theme="light"] .chat-banner {
|
|
3111
|
+
background: rgba(64,158,255,.06);
|
|
3112
|
+
border-color: rgba(64,158,255,.18);
|
|
3113
|
+
}
|
|
3114
|
+
|
|
3115
|
+
/* Pills — semi-transparent accent backgrounds must shift hue. */
|
|
3116
|
+
[data-theme="light"] .pill.ok { background: rgba(103,194,58,.10); }
|
|
3117
|
+
[data-theme="light"] .pill.warn { background: rgba(230,162,60,.12); }
|
|
3118
|
+
[data-theme="light"] .pill.err { background: rgba(245,108,108,.10); }
|
|
3119
|
+
[data-theme="light"] .pill.info { background: rgba(64,158,255,.10); }
|
|
3120
|
+
[data-theme="light"] .pill.acc { background: rgba(155,107,255,.10); }
|
|
3121
|
+
[data-theme="light"] .pill-err { background: rgba(245,108,108,.10); }
|
|
3122
|
+
[data-theme="light"] .pill-active { background: rgba(64,158,255,.10); }
|
|
3123
|
+
|
|
3124
|
+
/* Step-dot glow — brand-colour box-shadow. */
|
|
3125
|
+
[data-theme="light"] .plan-step.active::before {
|
|
3126
|
+
box-shadow: 0 0 0 3px rgba(64,158,255,.18);
|
|
3127
|
+
}
|
|
3128
|
+
|
|
3129
|
+
/* Filter chips active state. */
|
|
3130
|
+
[data-theme="light"] .chip-f.active {
|
|
3131
|
+
background: rgba(64,158,255,.08);
|
|
3132
|
+
}
|
|
3133
|
+
[data-theme="light"] .chip-f.static.active:hover {
|
|
3134
|
+
background: rgba(64,158,255,.08);
|
|
3135
|
+
}
|
|
3136
|
+
|
|
3137
|
+
/* Matrix cell on-state. */
|
|
3138
|
+
[data-theme="light"] .matrix .cell.on {
|
|
3139
|
+
background: rgba(64,158,255,.05);
|
|
3140
|
+
}
|
|
3141
|
+
|
|
3142
|
+
/* Editor line hover. */
|
|
3143
|
+
[data-theme="light"] .editor-line:hover {
|
|
3144
|
+
background: rgba(64,158,255,.04);
|
|
3145
|
+
}
|
|
3146
|
+
[data-theme="light"] .editor-line.cur {
|
|
3147
|
+
background: rgba(64,158,255,.06);
|
|
3148
|
+
}
|
|
3149
|
+
|
|
3150
|
+
/* Markdown search-result highlight. */
|
|
3151
|
+
[data-theme="light"] .sr-card .sr-snip mark {
|
|
3152
|
+
background: rgba(230,162,60,.18);
|
|
3153
|
+
}
|
|
3154
|
+
|
|
3155
|
+
/* Why / notes callout. */
|
|
3156
|
+
[data-theme="light"] .why {
|
|
3157
|
+
background: rgba(155,107,255,.04);
|
|
3158
|
+
}
|
|
3159
|
+
|
|
3160
|
+
/* Diff-line insert / delete. */
|
|
3161
|
+
[data-theme="light"] .diff-line.ins {
|
|
3162
|
+
background: rgba(103,194,58,0.10);
|
|
3163
|
+
color: var(--c-ok);
|
|
3164
|
+
}
|
|
3165
|
+
[data-theme="light"] .diff-line.del {
|
|
3166
|
+
background: rgba(245,108,108,0.10);
|
|
3167
|
+
color: var(--c-err);
|
|
3168
|
+
}
|
|
3169
|
+
|
|
3170
|
+
/* Diff-row add / remove backgrounds. */
|
|
3171
|
+
[data-theme="light"] .diff-row.add { background: rgba(103,194,58,.06); }
|
|
3172
|
+
[data-theme="light"] .diff-row.rem { background: rgba(245,108,108,.05); }
|
|
3173
|
+
[data-theme="light"] .diff-row .word-add { background: rgba(103,194,58,.22); }
|
|
3174
|
+
[data-theme="light"] .diff-row .word-rem { background: rgba(245,108,108,.20); }
|
|
3175
|
+
|
|
3176
|
+
/* Edit-diff side-by-side markers and borders. */
|
|
3177
|
+
[data-theme="light"] .edit-diff-side-old .edit-diff-marker { color: var(--c-err); }
|
|
3178
|
+
[data-theme="light"] .edit-diff-side-new .edit-diff-marker { color: var(--c-ok); }
|
|
3179
|
+
[data-theme="light"] .edit-diff-row-del .edit-diff-cell-old,
|
|
3180
|
+
[data-theme="light"] .edit-diff-row-change .edit-diff-cell-old {
|
|
3181
|
+
background: rgba(245,108,108,0.10);
|
|
3182
|
+
border-left-color: var(--c-err);
|
|
3183
|
+
}
|
|
3184
|
+
[data-theme="light"] .edit-diff-row-ins .edit-diff-cell-new,
|
|
3185
|
+
[data-theme="light"] .edit-diff-row-change .edit-diff-cell-new {
|
|
3186
|
+
background: rgba(103,194,58,0.10);
|
|
3187
|
+
border-left-color: var(--c-ok);
|
|
3188
|
+
}
|
|
3189
|
+
|
|
3190
|
+
/* Plan-revision modal border. */
|
|
3191
|
+
[data-theme="light"] .modal-revise-reason {
|
|
3192
|
+
border-left-color: var(--c-accent);
|
|
3193
|
+
}
|
|
3194
|
+
|
|
3195
|
+
/* Picker selected row. */
|
|
3196
|
+
[data-theme="light"] .modal-picker-row.selected {
|
|
3197
|
+
border-color: var(--c-warn);
|
|
3198
|
+
}
|
|
3199
|
+
|
|
3200
|
+
/* Modal viewer step-done mark. */
|
|
3201
|
+
[data-theme="light"] .modal-viewer-step-done .modal-viewer-step-mark {
|
|
3202
|
+
color: var(--c-ok);
|
|
3203
|
+
}
|
|
3204
|
+
|
|
3205
|
+
/* Top-bar status dot glow. */
|
|
3206
|
+
[data-theme="light"] .tui-status.online .dot {
|
|
3207
|
+
box-shadow: 0 0 6px rgba(103,194,58,.5);
|
|
3208
|
+
}
|
|
3209
|
+
|
|
3210
|
+
/* Dialog box-shadow — dark mode uses a deep black shadow; light mode
|
|
3211
|
+
needs a softer grey one. */
|
|
3212
|
+
[data-theme="light"] .dialog {
|
|
3213
|
+
box-shadow: 0 18px 48px rgba(0,0,0,.08), 0 0 0 1px rgba(0,0,0,.04);
|
|
3214
|
+
}
|
|
3215
|
+
[data-theme="light"] .cmd-palette {
|
|
3216
|
+
box-shadow: 0 24px 64px rgba(0,0,0,.10);
|
|
3217
|
+
}
|
|
3218
|
+
[data-theme="light"] .popover {
|
|
3219
|
+
box-shadow: 0 12px 32px rgba(0,0,0,.08);
|
|
3220
|
+
}
|
|
3221
|
+
|
|
3222
|
+
/* Scrollbar — lighter thumb for light backgrounds. */
|
|
3223
|
+
[data-theme="light"] * {
|
|
3224
|
+
scrollbar-color: var(--bd-strong) transparent;
|
|
3225
|
+
}
|
|
3226
|
+
[data-theme="light"] *::-webkit-scrollbar-thumb {
|
|
3227
|
+
background: var(--bd);
|
|
3228
|
+
border-color: var(--bg);
|
|
3229
|
+
}
|
|
3230
|
+
[data-theme="light"] *::-webkit-scrollbar-thumb:hover {
|
|
3231
|
+
background: var(--fg-4);
|
|
3232
|
+
}
|
|
3233
|
+
|
|
3013
3234
|
|