Skip to content

Commit 9300c78

Browse files
Alexey Perovcursoragent
andcommitted
Refresh docs accuracy, terminology, and roadmap status.
Align public docs and settings recovery copy with current UI labels, HTTP streaming behavior, npm/platform claims, and completed roadmap milestones for D1.5. Co-authored-by: Cursor <cursoragent@cursor.com>
1 parent 50664d0 commit 9300c78

14 files changed

Lines changed: 223 additions & 106 deletions

File tree

CONTRIBUTING.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,13 @@ Prerequisites: Node.js (LTS), Rust (stable), and system `git` on `PATH`.
88

99
```sh
1010
cd app
11-
npm install
11+
npm ci
1212
npm run tauri dev
1313
```
1414

15+
Use `npm ci` for a reproducible checkout. Use `npm install` when intentionally
16+
changing dependencies or updating `package-lock.json`.
17+
1518
See the root [README.md](./README.md) for build, port **1430**, and CI release notes.
1619

1720
## Checks

README.md

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# <img src="app/static/favicon.png" alt="" width="32" height="32" align="top"> SpecOps
22

3-
Desktop workspace for notes, specs, and project files — with a built-in editor and **OpenCode**-powered workspace agents. Built with [Tauri](https://tauri.app/) and [SvelteKit](https://kit.svelte.dev/).
3+
Desktop workspace for notes, specs, and project files — with a built-in editor
4+
and **OpenCode**-powered workspace sessions. Built with
5+
[Tauri](https://tauri.app/) and [SvelteKit](https://kit.svelte.dev/).
46

57
> Under active development. APIs, settings, and on-disk formats may change without migration.
68
@@ -13,7 +15,7 @@ Desktop workspace for notes, specs, and project files — with a built-in editor
1315
- **Version Control** — per-workspace git tab (history, branches, tags, changes, fetch/pull/push) via system `git`
1416
- **Themes**, **multi-window**, **image** preview
1517
- **Console** — resizable bottom panel with logs
16-
- **Workspace agents**sessions powered by [OpenCode](https://opencode.ai/) (tools, permissions, streaming)
18+
- **Workspace sessions**OpenCode-powered conversations with tools, permissions, and streaming
1719
- **Chat (beta)** — experimental HTTP chat context, off by default; see [`docs/beta/`](./docs/beta/)
1820

1921
## Screenshots
@@ -27,14 +29,14 @@ Desktop workspace for notes, specs, and project files — with a built-in editor
2729
- **Releases** — download macOS / Windows installers from [GitHub Releases](https://github.com/AlexeyPerov/spec-ops/releases) (published when a semver tag is pushed; see [CI releases](#ci-releases)).
2830
- **From source** — see [Development](#development) below.
2931

30-
## Workspace agents (OpenCode)
32+
## Workspace sessions (OpenCode)
3133

3234
SpecOps is the UI; **OpenCode** runs models, tools, and session logic. Configure providers and API keys in OpenCode — not in SpecOps HTTP settings.
3335

3436
| Context | Runtime | Configure models / keys |
3537
| --- | --- | --- |
36-
| Workspace agents (`ws-*`) | OpenCode (sidecar or URL) | OpenCode (`/connect`, `opencode.json`, `auth.json`) |
37-
| Chat (beta) — `chat-http` | OpenAI-compatible HTTP (off by default) | **Settings → Dev → Chat (beta)**Providers |
38+
| Workspace sessions | OpenCode (sidecar or URL) | OpenCode (`/connect`, `opencode.json`, `auth.json`) |
39+
| Chat (beta) — `chat-http` (internal context id) | OpenAI-compatible HTTP (off by default) | Enable at **Settings → Dev → Enable Chat (beta)**, then configure **Settings → Dev → Providers** |
3840

3941
### Quick start
4042

@@ -57,7 +59,7 @@ Chat (beta): **[docs/beta/chat-http-providers.md](./docs/beta/chat-http-provider
5759

5860
- Further UI / UX polish
5961
- Extended AI support
60-
- Git post-MVP features (see [`specs/git/backlog.md`](./specs/git/backlog.md))
62+
- Git post-MVP features
6163

6264
## Prerequisites
6365

@@ -67,13 +69,16 @@ Chat (beta): **[docs/beta/chat-http-providers.md](./docs/beta/chat-http-provider
6769

6870
## Development
6971

70-
From the `app/` directory:
72+
From the `app/` directory, use `npm ci` for a reproducible clean-clone setup:
7173

7274
```sh
73-
npm install
75+
npm ci
7476
npm run tauri dev
7577
```
7678

79+
Use `npm install` instead when intentionally changing dependencies or refreshing
80+
`app/package-lock.json`.
81+
7782
This starts the Vite dev server and opens the desktop app. Type-check the frontend with:
7883

7984
```sh
@@ -109,25 +114,40 @@ npm run tauri dev
109114

110115
## Build
111116

112-
From the `app/` directory:
117+
From the `app/` directory after installing dependencies, ensure the matching
118+
OpenCode sidecar binary exists (see
119+
[`app/src-tauri/binaries/README.md`](./app/src-tauri/binaries/README.md)), then:
113120

114121
```sh
115-
npm install
116122
npm run tauri build
117123
```
118124

119125
Installers and bundles are written to `app/src-tauri/target/release/bundle/`.
120126

127+
### Platform support
128+
129+
| Platform | GitHub release downloads | Test CI | Local source builds |
130+
| --- | --- | --- | --- |
131+
| macOS (Apple silicon and Intel) | Yes — universal build | Yes | Supported |
132+
| Windows (x64) | Yes | Yes | Supported |
133+
| Linux | No published installers | Yes | Buildable with Tauri's Linux prerequisites, but not a supported release target |
134+
135+
The test workflow runs the Vitest suite on macOS, Windows, and Linux. The release
136+
workflow publishes artifacts only for macOS and Windows; Tauri's `targets: "all"`
137+
controls bundle formats for the current build host and does not add a Linux release job.
138+
121139
### CI releases
122140

123-
Pushing a semver tag (for example `v1.0.0`) triggers the [Release](.github/workflows/release.yml) workflow. It builds macOS (universal binary) and Windows installers and publishes them as assets on the GitHub release for that tag.
141+
Pushing any tag beginning with `v` (for example `v1.0.0`) triggers the
142+
[Release](.github/workflows/release.yml) workflow. It builds a universal macOS
143+
bundle and Windows x64 installers and publishes them as assets on that GitHub release.
124144

125145
## Docs
126146

127147
| Doc | Audience |
128148
| --- | --- |
129149
| [docs/README.md](./docs/README.md) | Index — users vs contributors |
130-
| [docs/opencode-integration.md](./docs/opencode-integration.md) | Workspace agents / OpenCode setup |
150+
| [docs/opencode-integration.md](./docs/opencode-integration.md) | Workspace sessions / OpenCode setup |
131151
| [docs/architecture.md](./docs/architecture.md) | Codebase map for contributors |
132152
| [docs/beta/](./docs/beta/) | Experimental Chat (HTTP) lane |
133153
| [CONTRIBUTING.md](./CONTRIBUTING.md) | How to contribute |

app/src-tauri/binaries/README.md

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,14 @@ After the script writes new binaries:
4646
4. Consider aligning `@opencode-ai/sdk` in `app/package.json` to the same
4747
release version (the script does not touch the SDK lockfile).
4848

49-
## Asset → Tauri triple mapping
50-
51-
The script hard-codes the mapping below; if `anomalyco/opencode` publishes
52-
new asset names, edit `PLATFORM_MAP` in `update-opencode-sidecar.sh` first.
49+
## Sidecar asset → Tauri triple mapping
50+
51+
The script hard-codes the downloadable sidecar mapping below; if the upstream
52+
project publishes new asset names, edit `PLATFORM_MAP` in
53+
`update-opencode-sidecar.sh` first. This table describes sidecars that the
54+
maintainer script can prepare, not SpecOps release targets: GitHub releases
55+
currently publish SpecOps only for macOS and Windows. Linux is test-CI and
56+
local-build coverage only.
5357

5458
| Release asset | Tauri target triple |
5559
| ----------------------------------- | ---------------------------- |

app/src/lib/ai/chatErrorCopy.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ export const DEBUG_AI_PROVIDER_DISABLED_MESSAGE =
3838
"Debug Provider is turned off in Settings.";
3939

4040
export const DEBUG_AI_PROVIDER_DISABLED_RECOVERY =
41-
"Open Settings → Dev, enable Chat (beta), then turn on the Debug Provider under Chats.";
41+
"Open Settings → Dev, enable Chat (beta), then turn on Debug Provider.";
4242

4343
export const DEBUG_AGENT_PROVIDER_DISABLED_MESSAGE =
4444
"Debug Provider is turned off in Settings.";
@@ -98,13 +98,13 @@ export const STREAM_TRUNCATED_FAILURE_RECOVERY =
9898
"The stream ended before completion. Retry now; if this repeats, check provider/proxy stability.";
9999

100100
export const HTTP_UNAUTHORIZED_FAILURE_MESSAGE =
101-
"Invalid API key for the configured HTTP provider. Check Settings → Providers.";
101+
"Invalid API key for the configured HTTP provider. Check Settings → Dev → Providers.";
102102

103103
export const HTTP_RATE_LIMIT_FAILURE_MESSAGE =
104104
"HTTP provider rate limit reached. Wait a moment and try again.";
105105

106106
export const HTTP_UNAUTHORIZED_FAILURE_RECOVERY =
107-
"Open Settings → Providers, update the API key, and retry.";
107+
"Open Settings → Dev → Providers, update the API key, and retry.";
108108

109109
export const HTTP_RATE_LIMIT_FAILURE_RECOVERY =
110110
"Wait a short time and retry. If this happens often, lower request volume or change provider limits.";

app/src/lib/components/ChatBlockedState.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@
4747
The HTTP chat context is an experimental beta feature and is disabled by default.
4848
</p>
4949
<p class="chat-blocked-hint">
50-
Enable Chat (beta) in Settings → Dev, then configure HTTP providers or Debug Provider under Chats.
50+
Enable Chat (beta), then configure Providers, Chat modes, or Debug Provider under Dev.
5151
</p>
5252
<button type="button" class="btn btn-primary chat-setup-button" onclick={() => openSettingsDialog("dev")}>
5353
Open Settings → Dev

app/src/lib/components/settings/DevSettingsPanel.svelte

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
<h3>Chat (beta)</h3>
1616
<p class="settings-section-note">
1717
Experimental HTTP chat context. When enabled, the activity rail shows a
18-
Chat button and the Chats subtree appears under Dev for HTTP provider
19-
configuration. Workspace agents (OpenCode) are unaffected.
18+
Chat button and Dev gains Providers, Chat modes, and Debug Provider tabs
19+
for HTTP configuration. Workspace sessions (OpenCode) are unaffected.
2020
</p>
2121
<div class="settings-subsection">
2222
<label class="settings-toggle" title="Enable Chat (beta) for the HTTP chat context">
@@ -31,8 +31,8 @@
3131
</label>
3232
{#if !chatHttpEnabled}
3333
<p class="settings-section-note">
34-
Chat (beta) is off. The activity rail Chat button and Chats settings
35-
tabs (Providers, Chat modes, Debug Provider) are hidden.
34+
Chat (beta) is off. The activity rail Chat button and the Dev tabs for
35+
Providers, Chat modes, and Debug Provider are hidden.
3636
</p>
3737
{:else}
3838
<p class="settings-section-note">

app/src/lib/domain/settings.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export interface ProviderSettingsBase {
1919
enabled: boolean;
2020
}
2121

22-
/** Settings-gated development provider; disabled by default (see M5-3). */
22+
/** Settings-gated development provider; scoped by chat context. */
2323
export interface DebugProviderSettings extends ProviderSettingsBase {
2424
simulationSeed: number | null;
2525
delayMsMin: number;
@@ -127,9 +127,8 @@ export interface OpencodeSettings {
127127
* Master toggle for the experimental `chat-http` context (phase-3.5 M13).
128128
*
129129
* Disabled by default. When false, the activity-rail Chat button is hidden
130-
* and the Settings → Dev → Chats subtree (Providers, Chat modes, Debug
131-
* Provider) is removed from the sidebar; persisted provider configuration
132-
* is untouched.
130+
* and the Settings → Dev gated tabs (Providers, Chat modes, Debug Provider)
131+
* are removed from the sidebar; persisted provider configuration is untouched.
133132
*/
134133
export interface ChatHttpSettings {
135134
enabled: boolean;

docs/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ Stable documentation for users and contributors. Product plans, execution checkl
77
| Doc | When to read it |
88
| --- | --- |
99
| [../README.md](../README.md) | Product overview, install, quick start |
10-
| [opencode-integration.md](./opencode-integration.md) | Workspace agents: first session, sidecar/URL, providers, troubleshooting |
10+
| [opencode-integration.md](./opencode-integration.md) | Workspace sessions (OpenCode): first session, sidecar/URL, providers, troubleshooting |
1111
| [beta/README.md](./beta/README.md) | Experimental features (opt-in) |
12-
| [beta/chat-http-providers.md](./beta/chat-http-providers.md) | Chat (beta) HTTP providers — only if you enable **Settings → Dev → Chat (beta)** |
12+
| [beta/chat-http-providers.md](./beta/chat-http-providers.md) | Chat (beta) HTTP providers — only if you turn on **Settings → Dev → Enable Chat (beta)** |
1313

1414
**Recommended AI path:** Open a workspace folder and use **Sessions** with OpenCode. Do not start with Chat (beta) unless you already need an OpenAI-compatible HTTP lane.
1515

docs/architecture.md

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,10 @@ Unit tests are colocated as `*.test.ts` next to source. Run them from `app/` wit
2525

2626
### Module size conventions (M6)
2727

28-
Production modules should stay **≤500 lines** where practical; **≤600** is acceptable for cohesive UI shells (`+page.svelte`, `SettingsDialog.svelte`). Test files should stay **≤600 lines** and mirror the production module they cover.
28+
Production modules should stay **≤500 lines** where practical; **≤600** is
29+
acceptable for cohesive UI shells such as `+page.svelte` and
30+
`SettingsView.svelte`. Test files should stay **≤600 lines** and mirror the
31+
production module they cover.
2932

3033
When a file grows past those limits, split along existing domain boundaries and colocate new files next to the parent module:
3134

@@ -101,7 +104,7 @@ File open/save flows go through `appState` and services (`fileSystem`, `openFile
101104
- Threads persist under the app data dir (see [Persistence](#persistence)).
102105
- Modes: **`ask`** and **`review`** (system prompts in `app/src/lib/ai/modes/builtins.ts`).
103106

104-
HTTP Chat (beta) provider integration is documented in [beta/chat-http-providers.md](./beta/chat-http-providers.md). Workspace agents use OpenCode — see [opencode-integration.md](./opencode-integration.md).
107+
HTTP Chat (beta) provider integration is documented in [beta/chat-http-providers.md](./beta/chat-http-providers.md). Workspace sessions use OpenCode — see [opencode-integration.md](./opencode-integration.md).
105108

106109
## State layer
107110

@@ -110,7 +113,7 @@ HTTP Chat (beta) provider integration is documented in [beta/chat-http-providers
110113
Single source of truth for:
111114

112115
- Active context, documents, tabs, editor chrome (zoom, wrap, find/replace)
113-
- **`AppSettingsState`** (including Connections/HTTP settings and in-memory API key)
116+
- **`AppSettingsState`** (including HTTP provider settings and in-memory API key)
114117
- Theme (builtin + custom), recent files
115118

116119
Mutations are methods on the exported store object (e.g. `openDocument`, `setProviderApiKey`, workspace close with dirty prompts).
@@ -199,20 +202,34 @@ Custom commands include `take_pending_opened_paths`, `sync_file_watcher_paths`,
199202
- Activity rail (notepad / workspaces)
200203
- Project panel, editor + tab bar, **sessions** sidebar, chat panel
201204
- Version Control view tab (per workspace; system `git`)
202-
- Settings dialog, theme pane, console (logs only)
205+
- Settings view tab, theme pane, console (logs only)
203206

204-
### Settings dialog
207+
### Settings view
205208

206209
Tab ids and sidebar labels live in **`SETTINGS_TABS`** / `buildSettingsSidebar` (`app/src/lib/services/settingsDialogUi.ts`). Treat that module as the source of truth for tab inventory — do not duplicate the full list here.
207210

208211
High-level layout:
209212

210213
- Top-level: **Editor**, **Shortcuts**, **Appearance**, **Version Control**
211-
- **Dev** — Chat (beta) master toggle, **Logs**; **Chats** subtree only when `chatHttp.enabled`
212-
- **Workspaces** — OpenCode (connection, config, providers, MCP, agents, permissions, …)
214+
- **Dev****Enable Chat (beta)** master toggle and **Logs**; **Providers**, **Chat modes**, and **Debug Provider** tabs appear in this section only when `chatHttp.enabled`
215+
- **Workspaces****OpenCode**, **Config**, **Providers**, **MCP servers**, **Agents**, **Permissions**, **Commands**, **Instructions**, and **Debug Provider**
213216

214217
`openSettingsDialog(tab)` resolves the requested tab against the chat-http beta gate — gated tabs redirect to `dev` when the beta is off.
215218

219+
The two **Providers** tabs are distinct: **Settings → Dev → Providers** manages
220+
HTTP connections for Chat beta, while **Settings → Workspaces → Providers**
221+
manages OpenCode providers for the active workspace.
222+
223+
#### Settings and context glossary
224+
225+
| Internal id | User-visible term | Location |
226+
| --- | --- | --- |
227+
| `chat-http` | Chat (beta) context | Enable at **Settings → Dev → Enable Chat (beta)** |
228+
| `ws-*` | Workspace context id pattern | Workspace sessions use **Settings → Workspaces → OpenCode** |
229+
| `connections` | Providers (HTTP) tab | **Settings → Dev → Providers** |
230+
| `providers` | Providers (OpenCode) tab | **Settings → Workspaces → Providers** |
231+
| `agents` | Agents (personas/config) tab | **Settings → Workspaces → Agents** |
232+
216233
Routing helpers: `editorRouting.ts` (file vs session vs view tabs), `workspaceAgentSession.ts` (session tab lifecycle).
217234

218235
Editor: CodeMirror via `EditorSurface.svelte` (Svelte 5 runes), language detection in `editorLanguage.ts`, optional minimap via `editor/editorMinimap.ts`.
@@ -231,7 +248,10 @@ Tab bar: `TabBarContextMenu.svelte`, `tabDragController.ts` (reorder / tear-off)
231248

232249
- **Vitest** for TypeScript; tests assert real behavior (persistence codecs, send pipeline, provider adapters).
233250
- Reset helpers exist for global singletons: `resetChatProvidersForTests`, `resetChatProviderRegistryForTests`, `resetSessionManagerForTests`, etc.
234-
- Validation suites under `app/src/lib/state/chatM*.validation.test.ts` encode milestone acceptance criteria.
251+
- Milestone-specific validation suites use the `*.validation.test.ts` suffix and
252+
are colocated with the relevant source under `app/src/lib/` (for example,
253+
`state/chatM5-2.validation.test.ts` and
254+
`services/optimizationsP7.validation.test.ts`).
235255

236256
After structural changes, run `npm test` and `npm run check` from `app/`.
237257

@@ -277,8 +297,9 @@ These extend [AGENTS.md](../AGENTS.md) with architecture-specific guidance.
277297
### Related docs
278298

279299
- [README.md](./README.md) — docs index (users vs contributors)
280-
- [opencode-integration.md](./opencode-integration.md) — workspace agents / OpenCode
300+
- [opencode-integration.md](./opencode-integration.md) — workspace sessions / OpenCode
281301
- [beta/chat-http-providers.md](./beta/chat-http-providers.md) — HTTP Chat (beta) providers
282302
- [../README.md](../README.md) — product scope and dev commands
283303
- [../CONTRIBUTING.md](../CONTRIBUTING.md) — contribution workflow
284-
- `specs/` — execution plans, [`specs/backlog/`](../specs/backlog/) (deferred items), changelog
304+
- [`../specs/text-editor-parity-v3/README.md`](../specs/text-editor-parity-v3/README.md) — current public editor roadmap
305+
- [`../specs/changelog.md`](../specs/changelog.md) — dated implementation history; other local planning material is not part of a clean clone

docs/beta/README.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@ required, and behavior / location may change between releases.
88

99
| Feature | Doc | How to enable |
1010
| --- | --- | --- |
11-
| **Chat (beta)** — HTTP chat context (`chat-http`) with OpenAI-compatible providers and Debug Provider | [chat-http-providers.md](./chat-http-providers.md) | **Settings → Dev → Enable Chat (beta)** |
11+
| **Chat (beta)** — HTTP chat context (internal id `chat-http`) with OpenAI-compatible providers and Debug Provider | [chat-http-providers.md](./chat-http-providers.md) | **Settings → Dev → Enable Chat (beta)** |
1212

1313
## Why these are beta
1414

15-
The product's stable AI story is **workspace agents** powered by
16-
[OpenCode](../opencode-integration.md). The HTTP chat context (`chat-http`)
17-
predates that move and is preserved as a beta lane for users who already
18-
configured an HTTP connection. It is not part of the recommended setup for
19-
new users; see the [main README](../../README.md) for the current AI story.
15+
The product's stable AI story is **workspace sessions** powered by
16+
[OpenCode](../opencode-integration.md). The HTTP chat context (internal id
17+
`chat-http`) predates that move and is preserved as a beta lane for users who
18+
already configured an HTTP connection. It is not part of the recommended setup
19+
for new users; see the [main README](../../README.md) for the current AI story.
2020

2121
## Reporting issues
2222

0 commit comments

Comments
 (0)