docs(repo): studio is the 2.x line, ready to be the default branch

The repository now describes the two lines the version roadmap announced
(discussions/10748): 2.x on studio, 1.x on main-v2 in maintenance.

- README (en, zh-CN): a Versions section and a Studio 2.x release badge.
  Install leads with Reasonix Studio 2.x from the studio-v* pre-releases,
  with the 1.x CLI and desktop app beside it as the stable line. The
  zh-CN build-from-source section gains the Studio build it lacked.
- Issue forms offer 2.x / 1.x / 0.x, and the labeler maps them to v3 /
  v2 / v1, with the pasted version still overriding the dropdown. The
  forms link the roadmap. The PR template and CONTRIBUTING say which
  branch takes which changes.

Issue forms, schedules and Dependabot are read from the default branch
only, so these take effect when studio becomes it:
- CodeQL scans pushes and PRs on both lines, and the weekly scan checks
  out each line and files results under its own ref, so 1.x keeps its
  security scanning.
- v1-maintenance-schedule starts main-v2's nightly app-memory and
  diagnostic-overhead monitors, which measure the 1.x desktop app, on
  main-v2.
- Dependabot drops /desktop/frontend and /site, which do not exist on
  studio, and covers /desktop/frontend-next and /desktop/electron. It
  also names main-v2 as a target for patch updates only.
This commit is contained in:
yhh committed 2026-09-24 20:21:38 -07:00
1 parent 8aa9cb02ae
commit 4fe5caf8ce
11 files changed
+298 -111

No files matched your search

+7 -5
View File
@@ -7,23 +7,25 @@ body:
attributes: attributes:
value: | value: |
Thanks for filing a bug. Pick which version line you're on below — it gets Thanks for filing a bug. Pick which version line you're on below — it gets
labeled (`v1`/`v2`) automatically, no maintainer action needed. labeled automatically, no maintainer action needed. Not sure which line
you run? See the [version roadmap](https://github.com/esengine/DeepSeek-Reasonix/discussions/10748).
- type: dropdown - type: dropdown
id: version-line id: version-line
attributes: attributes:
label: Version line label: Version line
description: Which line are you running? description: Which line are you running?
options: options:
- "v2 — Go rewrite (1.x), main-v2 (active development)" - "2.x — Reasonix Studio, studio branch (active development)"
- "v1 — Legacy TypeScript (0.x), maintenance only" - "1.x — main-v2 branch (maintenance / stable)"
- "0.x — legacy TypeScript (maintenance only)"
validations: validations:
required: true required: true
- type: input - type: input
id: version id: version
attributes: attributes:
label: Exact version label: Exact version
description: Output of `reasonix --version`. description: Output of `reasonix --version`, or the version shown in Studio's settings.
placeholder: e.g. 1.0.0 placeholder: e.g. 2.20.0 or 1.39.0
validations: validations:
required: true required: true
- type: textarea - type: textarea
+3
View File
@@ -1,5 +1,8 @@
blank_issues_enabled: false blank_issues_enabled: false
contact_links: contact_links:
- name: Version roadmap (1.x / 2.x)
url: https://github.com/esengine/DeepSeek-Reasonix/discussions/10748
about: Which line to use, which branch takes which changes, and where Reasonix is heading.
- name: Questions & discussions - name: Questions & discussions
url: https://github.com/esengine/DeepSeek-Reasonix/discussions url: https://github.com/esengine/DeepSeek-Reasonix/discussions
about: For usage questions, ideas, and general discussion — please use Discussions instead of opening an issue. about: For usage questions, ideas, and general discussion — please use Discussions instead of opening an issue.
+3 -2
View File
@@ -9,8 +9,9 @@ body:
label: Version line label: Version line
description: Which line is this for? description: Which line is this for?
options: options:
- "v2 — Go rewrite (1.x), main-v2 (active development)" - "2.x — Reasonix Studio, studio branch (active development)"
- "v1 — Legacy TypeScript (0.x), maintenance only" - "1.x — main-v2 branch (maintenance / stable)"
- "0.x — legacy TypeScript (maintenance only)"
validations: validations:
required: true required: true
- type: textarea - type: textarea
+61 -2
View File
@@ -1,5 +1,6 @@
version: 2 version: 2
updates: updates:
# 2.x (studio): the development line.
- package-ecosystem: "gomod" - package-ecosystem: "gomod"
directory: "/" directory: "/"
schedule: schedule:
@@ -21,7 +22,7 @@ updates:
update-types: ["minor", "patch"] update-types: ["minor", "patch"]
- package-ecosystem: "npm" - package-ecosystem: "npm"
directory: "/desktop/frontend" directory: "/desktop/frontend-next"
schedule: schedule:
interval: "weekly" interval: "weekly"
open-pull-requests-limit: 5 open-pull-requests-limit: 5
@@ -31,7 +32,7 @@ updates:
update-types: ["minor", "patch"] update-types: ["minor", "patch"]
- package-ecosystem: "npm" - package-ecosystem: "npm"
directory: "/site" directory: "/desktop/electron"
schedule: schedule:
interval: "weekly" interval: "weekly"
open-pull-requests-limit: 5 open-pull-requests-limit: 5
@@ -47,3 +48,61 @@ updates:
groups: groups:
actions: actions:
patterns: ["*"] patterns: ["*"]
# 1.x (main-v2): maintenance. Dependabot reads this file from the default
# branch only, so the 1.x line is named here; it takes patch updates alone.
- package-ecosystem: "gomod"
directory: "/"
target-branch: "main-v2"
schedule:
interval: "weekly"
open-pull-requests-limit: 3
ignore:
- dependency-name: "*"
update-types: ["version-update:semver-major", "version-update:semver-minor"]
groups:
go-1x:
patterns: ["*"]
update-types: ["patch"]
- package-ecosystem: "gomod"
directory: "/desktop"
target-branch: "main-v2"
schedule:
interval: "weekly"
open-pull-requests-limit: 3
ignore:
- dependency-name: "*"
update-types: ["version-update:semver-major", "version-update:semver-minor"]
groups:
go-1x:
patterns: ["*"]
update-types: ["patch"]
- package-ecosystem: "npm"
directory: "/desktop/frontend"
target-branch: "main-v2"
schedule:
interval: "weekly"
open-pull-requests-limit: 3
ignore:
- dependency-name: "*"
update-types: ["version-update:semver-major", "version-update:semver-minor"]
groups:
npm-1x:
patterns: ["*"]
update-types: ["patch"]
- package-ecosystem: "npm"
directory: "/site"
target-branch: "main-v2"
schedule:
interval: "weekly"
open-pull-requests-limit: 3
ignore:
- dependency-name: "*"
update-types: ["version-update:semver-major", "version-update:semver-minor"]
groups:
npm-1x:
patterns: ["*"]
update-types: ["patch"]
+6
View File
@@ -1,3 +1,9 @@
<!--
Target branch: 2.x features and fixes go to `studio`. 1.x takes bug fixes,
provider/API compatibility, release/updater, security and platform stability
only, on `main-v2`.
-->
## Summary ## Summary
- -
+24 -11
View File
@@ -4,23 +4,25 @@ on:
# Docs/release-notes/root-Markdown changes carry no analyzable code; the # Docs/release-notes/root-Markdown changes carry no analyzable code; the
# weekly cron keeps the full scan cadence regardless. # weekly cron keeps the full scan cadence regardless.
push: push:
branches: ["main-v2"] branches: ["main-v2", "studio"]
paths-ignore: paths-ignore:
- 'docs/**' - 'docs/**'
- 'release-notes/**' - 'release-notes/**'
- '*.md' - '*.md'
pull_request: pull_request:
branches: ["main-v2"] branches: ["main-v2", "studio"]
paths-ignore: paths-ignore:
- 'docs/**' - 'docs/**'
- 'release-notes/**' - 'release-notes/**'
- '*.md' - '*.md'
# A schedule runs only from the default branch, so the weekly scan checks out
# both lines itself: 1.x is in maintenance, and security is part of it.
schedule: schedule:
- cron: "27 3 * * 1" - cron: "27 3 * * 1"
jobs: jobs:
analyze: analyze:
name: Analyze (${{ matrix.language }}) name: Analyze (${{ matrix.language }}${{ matrix.branch && format(', {0}', matrix.branch) || '' }})
runs-on: ubuntu-latest runs-on: ubuntu-latest
permissions: permissions:
security-events: write security-events: write
@@ -30,21 +32,32 @@ jobs:
strategy: strategy:
fail-fast: false fail-fast: false
matrix: matrix:
include: language: [go, javascript-typescript, actions]
- language: go # Empty means "the ref this event is about"; a scheduled run names each line.
build-mode: autobuild branch: ${{ fromJSON(github.event_name == 'schedule' && '["main-v2", "studio"]' || '[""]') }}
- language: javascript-typescript
build-mode: none
- language: actions
build-mode: none
steps: steps:
- uses: actions/checkout@v7 - uses: actions/checkout@v7
with:
ref: ${{ matrix.branch }}
- id: head
if: matrix.branch != ''
run: echo "sha=$(git rev-parse HEAD)" >> "$GITHUB_OUTPUT"
- name: Initialize CodeQL - name: Initialize CodeQL
uses: github/codeql-action/[email protected] uses: github/codeql-action/[email protected]
with: with:
languages: ${{ matrix.language }} languages: ${{ matrix.language }}
build-mode: ${{ matrix.build-mode }} build-mode: ${{ matrix.language == 'go' && 'autobuild' || 'none' }}
- name: Perform CodeQL Analysis - name: Perform CodeQL Analysis
if: matrix.branch == ''
uses: github/codeql-action/[email protected] uses: github/codeql-action/[email protected]
with: with:
category: "/language:${{ matrix.language }}" category: "/language:${{ matrix.language }}"
# Results from a checked-out line are filed under that line's ref, not the
# default branch the schedule happened to run from.
- name: Perform CodeQL Analysis (${{ matrix.branch }})
if: matrix.branch != ''
uses: github/codeql-action/[email protected]
with:
category: "/language:${{ matrix.language }}"
ref: refs/heads/${{ matrix.branch }}
sha: ${{ steps.head.outputs.sha }}
+25 -24
View File
@@ -2,7 +2,8 @@ name: Label issue version
# Issue forms can't let a reporter set a label directly (that needs triage rights), # Issue forms can't let a reporter set a label directly (that needs triage rights),
# so the bug/feature forms carry a "Version line" dropdown and this workflow reads # so the bug/feature forms carry a "Version line" dropdown and this workflow reads
# the submitted value and applies the matching v1/v2 label on their behalf. # the submitted value and applies the matching label on their behalf:
# 0.x -> v1 (TypeScript), 1.x -> v2 (main-v2), 2.x -> v3 (studio).
on: on:
issues: issues:
types: [opened, edited] types: [opened, edited]
@@ -24,40 +25,40 @@ jobs:
const body = context.payload.issue.body || ''; const body = context.payload.issue.body || '';
const sectionOf = (name) => const sectionOf = (name) =>
body.split(/^###\s+/m).find((s) => new RegExp(`^${name}`, 'i').test(s)) || ''; body.split(/^###\s+/m).find((s) => new RegExp(`^${name}`, 'i').test(s)) || '';
const labelOf = (major) => ({ 0: 'v1', 1: 'v2', 2: 'v3' })[major];
const m = sectionOf('Version line').match(/\bv([12])\b/i); const m = sectionOf('Version line').match(/\b([012])\.x\b/);
if (!m) { if (!m) {
core.info('No version line found; nothing to label.'); core.info('No version line found; nothing to label.');
return; return;
} }
let choice = 'v' + m[1]; let choice = labelOf(Number(m[1]));
// The dropdown is a choice, and v2 sits first, so it gets picked by // The dropdown is a choice, and its first entry gets picked by
// reporters who are actually on 0.x. `Exact version` is pasted from // reporters who never looked. `Exact version` is pasted from
// `reasonix --version`, so when it parses it is the better evidence: // `reasonix --version` or Studio, so when it parses it is the better
// 0.x is the TypeScript line, 1.x the Go rewrite. Anything that does // evidence. Anything that does not parse (a commit sha, a branch
// not parse (a commit sha, "main-v2") leaves the dropdown to decide. // name) or names no known line leaves the dropdown to decide.
const exact = sectionOf('Exact version').match(/\b(\d+)\.(\d+)\.(\d+)/); const exact = sectionOf('Exact version').match(/\b(\d+)\.(\d+)\.(\d+)/);
if (exact) { const fromVersion = exact && labelOf(Number(exact[1]));
const fromVersion = Number(exact[1]) === 0 ? 'v1' : 'v2'; if (fromVersion && fromVersion !== choice) {
if (fromVersion !== choice) { core.info(`Version line says ${choice} but ${exact[0]} says ${fromVersion}; trusting the version.`);
core.info(`Version line says ${choice} but ${exact[0]} says ${fromVersion}; trusting the version.`); choice = fromVersion;
choice = fromVersion;
}
} }
const other = choice === 'v2' ? 'v1' : 'v2';
await github.rest.issues.addLabels({ await github.rest.issues.addLabels({
...context.repo, ...context.repo,
issue_number: context.issue.number, issue_number: context.issue.number,
labels: [choice], labels: [choice],
}); });
// Keep v1/v2 mutually exclusive in case an edit flipped the choice. // Keep the line labels mutually exclusive in case an edit flipped the choice.
try { for (const other of ['v1', 'v2', 'v3'].filter((l) => l !== choice)) {
await github.rest.issues.removeLabel({ try {
...context.repo, await github.rest.issues.removeLabel({
issue_number: context.issue.number, ...context.repo,
name: other, issue_number: context.issue.number,
}); name: other,
} catch (e) { });
core.info(`No ${other} label to remove.`); } catch (e) {
core.info(`No ${other} label to remove.`);
}
} }
@@ -0,0 +1,29 @@
name: 1.x nightly monitoring
# A schedule runs only from the default branch. These monitors measure the 1.x
# desktop app, which lives on main-v2 alone, so their nightly runs are started
# from here on that branch. Their push and pull_request gates run on main-v2 as
# before.
on:
schedule:
- cron: "17 3 * * *"
- cron: "43 4 * * *"
workflow_dispatch:
permissions:
actions: write
jobs:
dispatch:
runs-on: ubuntu-latest
steps:
- name: App memory screening
if: github.event_name == 'workflow_dispatch' || github.event.schedule == '17 3 * * *'
env:
GH_TOKEN: ${{ github.token }}
run: gh workflow run app-memory.yml --repo "$GITHUB_REPOSITORY" --ref main-v2
- name: Diagnostic overhead monitoring
if: github.event_name == 'workflow_dispatch' || github.event.schedule == '43 4 * * *'
env:
GH_TOKEN: ${{ github.token }}
run: gh workflow run diagnostic-overhead.yml --repo "$GITHUB_REPOSITORY" --ref main-v2
+15 -2
View File
@@ -162,16 +162,29 @@ ci: add golangci-lint and govulncheck
## Submitting changes ## Submitting changes
Reasonix ships on two lines (see the
[version roadmap](https://github.com/esengine/DeepSeek-Reasonix/discussions/10748)),
and each takes different changes:
| Line | Branch | Takes |
| --- | --- | --- |
| 2.x | `studio` | Features and fixes: active development |
| 1.x | `main-v2` | Bug fixes, provider/API compatibility, release/updater, security, platform stability |
A fix that matters on both lines lands on `main-v2` and is reviewed for
porting to `studio`; do not open the same PR against both.
1. Fork the repository 1. Fork the repository
2. Create a feature branch from `main-v2` 2. Create a feature branch from the branch your change targets
3. Make your changes with tests 3. Make your changes with tests
4. Ensure `go test ./...` passes 4. Ensure `go test ./...` passes
5. Ensure `gofmt -l .` shows no changes 5. Ensure `gofmt -l .` shows no changes
6. Submit a pull request to `main-v2` 6. Submit a pull request to that same branch
## Reporting issues ## Reporting issues
Open an issue on GitHub with: Open an issue on GitHub with:
- Which line (1.x or 2.x) and the exact version
- Steps to reproduce - Steps to reproduce
- Expected vs actual behavior - Expected vs actual behavior
- Go version and OS - Go version and OS
+59 -36
View File
@@ -21,6 +21,7 @@
</p> </p>
<p align="center"> <p align="center">
<a href="https://github.com/esengine/DeepSeek-Reasonix/releases?q=studio-v&expanded=true"><img src="https://img.shields.io/github/v/release/esengine/DeepSeek-Reasonix.svg?filter=studio-v*&include_prereleases&style=flat-square&color=8250df&labelColor=161b22&label=studio%202.x" alt="Reasonix Studio 2.x"/></a>
<a href="https://www.npmjs.com/package/reasonix"><img src="https://img.shields.io/npm/v/reasonix.svg?style=flat-square&color=cb3837&labelColor=161b22&logo=npm&logoColor=white" alt="npm version"/></a> <a href="https://www.npmjs.com/package/reasonix"><img src="https://img.shields.io/npm/v/reasonix.svg?style=flat-square&color=cb3837&labelColor=161b22&logo=npm&logoColor=white" alt="npm version"/></a>
<a href="https://github.com/esengine/DeepSeek-Reasonix/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/esengine/DeepSeek-Reasonix/ci.yml?style=flat-square&label=ci&labelColor=161b22&logo=githubactions&logoColor=white" alt="CI"/></a> <a href="https://github.com/esengine/DeepSeek-Reasonix/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/esengine/DeepSeek-Reasonix/ci.yml?style=flat-square&label=ci&labelColor=161b22&logo=githubactions&logoColor=white" alt="CI"/></a>
<a href="./LICENSE"><img src="https://img.shields.io/npm/l/reasonix.svg?style=flat-square&color=8b949e&labelColor=161b22" alt="license"/></a> <a href="./LICENSE"><img src="https://img.shields.io/npm/l/reasonix.svg?style=flat-square&color=8b949e&labelColor=161b22" alt="license"/></a>
@@ -54,6 +55,24 @@
<br/> <br/>
## Versions
Reasonix ships on two lines. See the [version roadmap announcement](https://github.com/esengine/DeepSeek-Reasonix/discussions/10748) for the reasoning behind the split.
| Line | Branch | Status | Get it |
| --- | --- | --- | --- |
| **Reasonix 2.x** | `studio` (this branch) | Active development, pre-release | [Studio releases](https://github.com/esengine/DeepSeek-Reasonix/releases?q=studio-v&expanded=true) |
| **Reasonix 1.x** | [`main-v2`](https://github.com/esengine/DeepSeek-Reasonix/tree/main-v2) | Maintenance / stable | `npm i -g reasonix` · [desktop download](https://reasonix.io/?download=desktop#start) |
- **Want something stable?** Stay on 1.x. It keeps receiving bug fixes,
provider/API compatibility, updater and security fixes; its core architecture
is no longer being extended.
- **Want the new architecture?** Use 2.x Reasonix Studio. It is still moving
quickly; reports are welcome.
Valuable fixes, tests and behaviour from 1.x are reviewed one by one and ported
or reimplemented on 2.x where they fit the new architecture.
## Features ## Features
- **Config-driven.** Providers, the agent, enabled tools, and plugins are all - **Config-driven.** Providers, the agent, enabled tools, and plugins are all
@@ -73,53 +92,61 @@
## Install ## Install
Choose the path that matches how you want to use Reasonix. The CLI/TUI, This branch is **Reasonix 2.x**. Its desktop app is Reasonix Studio; the CLI,
desktop app, and VS Code extension all use the same local Reasonix engine. Studio, and editor integrations all run the same local Reasonix engine.
### Path A: CLI / TUI ### Reasonix Studio (2.x)
Install the native binary through npm on any supported platform, or use Download the package for your platform from the latest
Homebrew on macOS: [Studio release](https://github.com/esengine/DeepSeek-Reasonix/releases?q=studio-v&expanded=true)
(tagged `studio-v2.*`, published as pre-releases while 2.x is in active
development):
| Platform | Package | Architecture |
| --- | --- | --- |
| macOS | `.dmg` or `.zip` | Apple Silicon (`arm64`) / Intel (`amd64`) |
| Windows | Installer `-installer.exe` or portable `.zip` | x64 |
| Linux | `.deb` | x64 |
Every package ships with a `.minisig` signature, and the release carries
`SHA256SUMS`. Once installed, Studio updates itself in place.
The same release also carries the 2.x `reasonix` CLI as archives for
`darwin|linux|windows × amd64|arm64`.
### Reasonix 1.x (stable)
The 1.x CLI installs through npm on any supported platform, or Homebrew on
macOS:
```sh ```sh
npm i -g reasonix # any OS; pulls the prebuilt native binary npm i -g reasonix # any OS; pulls the prebuilt native binary
brew install esengine/reasonix/reasonix # macOS brew install esengine/reasonix/reasonix # macOS
``` ```
Prebuilt archives (`darwin|linux|windows × amd64|arm64`) and `SHA256SUMS` are on The 1.x desktop app is on the
every [GitHub release](https://github.com/esengine/DeepSeek-Reasonix/releases). [official download page](https://reasonix.io/?download=desktop#start). Windows
installers are code-signed through [SignPath.io](https://signpath.io/) with a
free certificate provided by the [SignPath Foundation](https://signpath.org/).
### Path B: Desktop app ### VS Code extension
Use the [official download page](https://reasonix.io/?download=desktop#start) The extension does not bundle the CLI; it starts your local `reasonix acp`
for the latest desktop build. backend and adds native chat, editor context, tool-call approvals, model
selection, and workspace sessions. Install the 1.x CLI first.
| Platform | Package | Architecture |
| --- | --- | --- |
| macOS | Universal `.dmg` or `.zip` | Apple Silicon / Intel |
| Windows | Installer `.exe` or portable `.zip` | x64 / ARM64 |
| Linux | `.deb` or `.tar.gz` | x64 |
Windows installers are code-signed through [SignPath.io](https://signpath.io/)
with a free certificate provided by the [SignPath Foundation](https://signpath.org/).
### Path C: VS Code extension
Complete Path A first. The extension does not bundle the CLI; it starts your
local `reasonix acp` backend and adds native chat, editor context, tool-call
approvals, model selection, and workspace sessions.
- **VS Code:** [install from Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=SivanLiu.reasonix-agent) - **VS Code:** [install from Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=SivanLiu.reasonix-agent)
- **VSCodium / Eclipse Theia:** [install from Open VSX Registry](https://open-vsx.org/extension/SivanLiu/reasonix-agent) - **VSCodium / Eclipse Theia:** [install from Open VSX Registry](https://open-vsx.org/extension/SivanLiu/reasonix-agent)
- **Extension ID:** `SivanLiu.reasonix-agent` · [source and usage guide](https://github.com/SivanCola/reasonix-vscode) - **Extension ID:** `SivanLiu.reasonix-agent` · [source and usage guide](https://github.com/SivanCola/reasonix-vscode)
### Path D: Build from source ### Build from source
Clone the repository first: Clone the repository; `studio` builds 2.x and `main-v2` builds 1.x:
```sh ```sh
git clone https://github.com/esengine/DeepSeek-Reasonix.git git clone https://github.com/esengine/DeepSeek-Reasonix.git
cd DeepSeek-Reasonix cd DeepSeek-Reasonix
git switch studio
``` ```
#### CLI #### CLI
@@ -146,9 +173,12 @@ webview dependencies and Linux build tags.
## Quick start ## Quick start
### CLI / TUI ### Reasonix Studio
These commands are for the CLI/TUI installed through Path A: Install and launch Studio, then connect a provider and model in the app. No CLI
setup is needed.
### CLI / TUI
```sh ```sh
reasonix setup # configure a provider and model reasonix setup # configure a provider and model
@@ -159,13 +189,6 @@ reasonix run "implement the TODOs in main.go"
In an interactive session, run `/init` when you want Reasonix to create project In an interactive session, run `/init` when you want Reasonix to create project
instructions. instructions.
### Desktop app
Download the installer for your platform from the
[official download page](https://reasonix.io/?download=desktop#start), install
and launch Reasonix, then configure a provider and model in the app. The CLI
commands above are not required for the desktop app.
For advanced CLI usage and configuration, see the **[CLI reference](./docs/CLI.md)**, For advanced CLI usage and configuration, see the **[CLI reference](./docs/CLI.md)**,
**[Guide](./docs/GUIDE.md)**, and **[Guide](./docs/GUIDE.md)**, and
**[configuration paths](./docs/CONFIG_PATHS.md)**. **[configuration paths](./docs/CONFIG_PATHS.md)**.
+66 -29
View File
@@ -21,6 +21,7 @@
</p> </p>
<p align="center"> <p align="center">
<a href="https://github.com/esengine/DeepSeek-Reasonix/releases?q=studio-v&expanded=true"><img src="https://img.shields.io/github/v/release/esengine/DeepSeek-Reasonix.svg?filter=studio-v*&include_prereleases&style=flat-square&color=8250df&labelColor=161b22&label=studio%202.x" alt="Reasonix Studio 2.x"/></a>
<a href="https://www.npmjs.com/package/reasonix"><img src="https://img.shields.io/npm/v/reasonix.svg?style=flat-square&color=cb3837&labelColor=161b22&logo=npm&logoColor=white" alt="npm version"/></a> <a href="https://www.npmjs.com/package/reasonix"><img src="https://img.shields.io/npm/v/reasonix.svg?style=flat-square&color=cb3837&labelColor=161b22&logo=npm&logoColor=white" alt="npm version"/></a>
<a href="https://github.com/esengine/DeepSeek-Reasonix/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/esengine/DeepSeek-Reasonix/ci.yml?style=flat-square&label=ci&labelColor=161b22&logo=githubactions&logoColor=white" alt="CI"/></a> <a href="https://github.com/esengine/DeepSeek-Reasonix/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/esengine/DeepSeek-Reasonix/ci.yml?style=flat-square&label=ci&labelColor=161b22&logo=githubactions&logoColor=white" alt="CI"/></a>
<a href="./LICENSE"><img src="https://img.shields.io/npm/l/reasonix.svg?style=flat-square&color=8b949e&labelColor=161b22" alt="license"/></a> <a href="./LICENSE"><img src="https://img.shields.io/npm/l/reasonix.svg?style=flat-square&color=8b949e&labelColor=161b22" alt="license"/></a>
@@ -52,6 +53,21 @@
> [!IMPORTANT] > [!IMPORTANT]
> **加入社区 · Community** — 双语 Discord,提供安装答疑(`#help` / `#求助`)、工作流展示与功能想法。→ **<https://discord.gg/XF78rEME2D>** > **加入社区 · Community** — 双语 Discord,提供安装答疑(`#help` / `#求助`)、工作流展示与功能想法。→ **<https://discord.gg/XF78rEME2D>**
## 版本
Reasonix 分为两条版本线,调整的原因见[版本路线公告](https://github.com/esengine/DeepSeek-Reasonix/discussions/10748)。
| 版本线 | 分支 | 状态 | 获取方式 |
| --- | --- | --- | --- |
| **Reasonix 2.x** | `studio`(当前分支) | 活跃开发,预发布 | [Studio 发布页](https://github.com/esengine/DeepSeek-Reasonix/releases?q=studio-v&expanded=true) |
| **Reasonix 1.x** | [`main-v2`](https://github.com/esengine/DeepSeek-Reasonix/tree/main-v2) | 维护 / 稳定 | `npm i -g reasonix` · [桌面端下载](https://reasonix.io/?download=desktop#start) |
- **想要稳定**:继续使用 1.x。它会持续收到 Bug 修复、Provider / API 兼容、
更新器和安全修复,但不再扩展核心架构。
- **想体验新架构**:使用 2.x Reasonix Studio。它仍在快速迭代,欢迎反馈问题。
1.x 中有价值的修复、测试和行为会逐项 review,适合新架构的会迁移或重新实现到 2.x。
## 特性 ## 特性
- **配置驱动**:provider、agent、启用的工具、插件全部在 `reasonix.toml` 中声明, - **配置驱动**:provider、agent、启用的工具、插件全部在 `reasonix.toml` 中声明,
@@ -67,57 +83,84 @@
## 安装 ## 安装
选择适合你的使用路径。CLI/TUI、桌面端和 VS Code 扩展都使用同一套本地 当前分支是 **Reasonix 2.x**,桌面端是 Reasonix Studio;CLI、Studio 和编辑器集成
Reasonix 引擎。 都运行同一套本地 Reasonix 引擎。
### 路径 A:CLI / TUI ### Reasonix Studio(2.x)
任意支持的平台都可以通过 npm 安装原生二进制;macOS 也可以使用 Homebrew: 从最新的 [Studio 发布](https://github.com/esengine/DeepSeek-Reasonix/releases?q=studio-v&expanded=true)
下载对应平台的安装包(标签为 `studio-v2.*`,2.x 活跃开发期间以预发布形式发布):
| 平台 | 安装包 | 架构 |
| --- | --- | --- |
| macOS | `.dmg` 或 `.zip` | Apple Silicon(`arm64`)/ Intel(`amd64`) |
| Windows | 安装器 `-installer.exe` 或便携 `.zip` | x64 |
| Linux | `.deb` | x64 |
每个安装包都附带 `.minisig` 签名,发布页另有 `SHA256SUMS`。安装后 Studio 会在
应用内自行更新。
同一个发布页也提供 2.x 的 `reasonix` CLI 归档(`darwin|linux|windows × amd64|arm64`)。
### Reasonix 1.x(稳定版)
1.x CLI 在任意支持的平台上都可以通过 npm 安装,macOS 也可以使用 Homebrew:
```sh ```sh
npm i -g reasonix # 任意系统;自动拉取对应平台的原生二进制 npm i -g reasonix # 任意系统;自动拉取对应平台的原生二进制
brew install esengine/reasonix/reasonix # macOS brew install esengine/reasonix/reasonix # macOS
``` ```
预编译归档(`darwin|linux|windows × amd64|arm64`)和 `SHA256SUMS` 见每个 1.x 桌面端请前往[官方下载页](https://reasonix.io/?download=desktop#start)。
[GitHub release](https://github.com/esengine/DeepSeek-Reasonix/releases)。
### 路径 B:桌面端
前往[官方下载页](https://reasonix.io/?download=desktop#start)获取最新桌面版本。
| 平台 | 安装包 | 架构 |
| --- | --- | --- |
| macOS | 通用 `.dmg` 或 `.zip` | Apple Silicon / Intel |
| Windows | 安装器 `.exe` 或便携 `.zip` | x64 / ARM64 |
| Linux | `.deb` 或 `.tar.gz` | x64 |
Windows 安装器通过 [SignPath.io](https://signpath.io/) 完成代码签名,证书由 Windows 安装器通过 [SignPath.io](https://signpath.io/) 完成代码签名,证书由
[SignPath 基金会](https://signpath.org/) 免费提供。 [SignPath 基金会](https://signpath.org/) 免费提供。
### 路径 C:VS Code 扩展 ### VS Code 扩展
请先完成路径 A。扩展不内置 CLI,而是启动本机的 `reasonix acp` 后端, 扩展不内置 CLI,而是启动本机的 `reasonix acp` 后端,并提供原生聊天、编辑器
并提供原生聊天、编辑器上下文、工具调用审批、模型选择和工作区会话。 上下文、工具调用审批、模型选择和工作区会话。请先安装 1.x CLI。
- **VS Code:** [从 Visual Studio Marketplace 安装](https://marketplace.visualstudio.com/items?itemName=SivanLiu.reasonix-agent) - **VS Code:** [从 Visual Studio Marketplace 安装](https://marketplace.visualstudio.com/items?itemName=SivanLiu.reasonix-agent)
- **VSCodium / Eclipse Theia:** [从 Open VSX Registry 安装](https://open-vsx.org/extension/SivanLiu/reasonix-agent) - **VSCodium / Eclipse Theia:** [从 Open VSX Registry 安装](https://open-vsx.org/extension/SivanLiu/reasonix-agent)
- **扩展 ID:** `SivanLiu.reasonix-agent` · [源码与使用说明](https://github.com/SivanCola/reasonix-vscode) - **扩展 ID:** `SivanLiu.reasonix-agent` · [源码与使用说明](https://github.com/SivanCola/reasonix-vscode)
### 路径 D:从源码构建 ### 从源码构建
克隆仓库;`studio` 构建 2.x,`main-v2` 构建 1.x:
```sh ```sh
git clone https://github.com/esengine/DeepSeek-Reasonix.git git clone https://github.com/esengine/DeepSeek-Reasonix.git
cd DeepSeek-Reasonix cd DeepSeek-Reasonix
git switch studio
```
#### CLI
CLI 构建需要 **Go 1.25+**。模块固定了 `toolchain`,保持 `GOTOOLCHAIN=auto`
即可让 Go 自动下载对应工具链,也可以手动安装。
```sh
make build # -> bin/reasonix(.exe) make build # -> bin/reasonix(.exe)
make cross # -> dist/(darwin|linux|windows × amd64|arm64) make cross # -> dist/(darwin|linux|windows × amd64|arm64)
``` ```
#### Studio
Studio 的前端还需要 **Node 24+ 与 pnpm 10**(`npm install -g pnpm@10`)。
```sh
make studio
```
各平台的 webview 依赖和 Linux 构建标签见 [Studio 构建指南](desktop/README.md#prerequisites)。
## 快速开始 ## 快速开始
### CLI / TUI ### Reasonix Studio
以下命令仅适用于通过路径 A 安装的 CLI/TUI: 安装并启动 Studio,然后在应用内连接 provider 和模型即可使用,无需配置 CLI。
### CLI / TUI
```sh ```sh
reasonix setup # 配置 provider 和模型 reasonix setup # 配置 provider 和模型
@@ -127,12 +170,6 @@ reasonix run "把 main.go 里的 TODO 实现掉"
需要项目指令时,可在交互式会话中运行 `/init`。 需要项目指令时,可在交互式会话中运行 `/init`。
### 桌面端
从[官方下载页](https://reasonix.io/?download=desktop#start)下载对应系统的安装包,
安装并启动 Reasonix,然后在应用内配置 provider 和模型即可使用。桌面端无需执行
上面的 CLI 命令。
CLI 进阶用法和详细配置见 **[CLI 命令参考](./docs/CLI.zh-CN.md)**、 CLI 进阶用法和详细配置见 **[CLI 命令参考](./docs/CLI.zh-CN.md)**、
**[指南](./docs/GUIDE.zh-CN.md)** 和 **[指南](./docs/GUIDE.zh-CN.md)** 和
**[配置路径](./docs/CONFIG_PATHS.md)**。 **[配置路径](./docs/CONFIG_PATHS.md)**。