codeden 0.6.3 → 0.7.1
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 +19 -11
- package/dist/cli.js +1 -1
- package/dist/drizzle/20261113075317_transcript_search/migration.sql +29 -0
- package/dist/drizzle/20261113075317_transcript_search/snapshot.json +3635 -0
- package/dist/drizzle/20261113083655_runners/migration.sql +17 -0
- package/dist/drizzle/20261113083655_runners/snapshot.json +3792 -0
- package/dist/drizzle/20261113165404_search_newest_first/migration.sql +43 -0
- package/dist/drizzle/20261113165404_search_newest_first/snapshot.json +3785 -0
- package/dist/drizzle/20261113204236_rate_limit_percent_at/migration.sql +1 -0
- package/dist/drizzle/20261113204236_rate_limit_percent_at/snapshot.json +3795 -0
- package/dist/drizzle/20261113232208_project_agent_ci_env/migration.sql +1 -0
- package/dist/drizzle/20261113232208_project_agent_ci_env/snapshot.json +3805 -0
- package/dist/{main-Bx58CdV4.js → main-CQ8GZN1a.js} +11039 -12089
- package/dist/main-CQ8GZN1a.js.map +1 -0
- package/dist/{main-CMt4z1Z9.js → main-CmfpUktR.js} +2 -2
- package/dist/{main-CMt4z1Z9.js.map → main-CmfpUktR.js.map} +1 -1
- package/dist/{mediaType-BCz-hbZl.js → mediaType-BO241HQM.js} +2 -2
- package/dist/{mediaType-BCz-hbZl.js.map → mediaType-BO241HQM.js.map} +1 -1
- package/dist/runner-CuMDOUsF.js +12437 -0
- package/dist/runner-CuMDOUsF.js.map +1 -0
- package/dist/runner.js +1 -1
- package/dist/{server-test-b0hHPqXb.js → server-test-DMfJ06eC.js} +4 -4
- package/dist/{server-test-b0hHPqXb.js.map → server-test-DMfJ06eC.js.map} +1 -1
- package/dist/tree-BCLzc25P.js +39282 -0
- package/dist/tree-BCLzc25P.js.map +1 -0
- package/dist/web/assets/{core-FqX7NQzW.js → core-CuVRWotY.js} +1 -1
- package/dist/web/assets/engine-oniguruma-BFyTGssM.js +1 -0
- package/dist/web/assets/{highlighted-body-JLMTFACH-BMKFJRL-.js → highlighted-body-JLMTFACH-B8aDq2rz.js} +1 -1
- package/dist/web/assets/{highlights-9yuGk1pg.js → highlights-xc5aCl5X.js} +1 -1
- package/dist/web/assets/index-CJ9zzuOJ.js +943 -0
- package/dist/web/assets/index-DKQTOvuB.css +1 -0
- package/dist/web/assets/langs-D0QaNUlD.js +1 -0
- package/dist/web/assets/mermaid-WFAXDIZX-B5pkkoxg.js +1 -0
- package/dist/web/assets/{shiki-Qa-y3xHo.js → shiki-4WIZJuXB.js} +2 -2
- package/dist/web/assets/{stream-tokenizer-VL43-ily.js → stream-tokenizer-CWKaBp-T.js} +1 -1
- package/dist/web/assets/{themes-Di4DO5zr.js → themes-CCzWeLAX.js} +2 -2
- package/dist/web/index.html +2 -2
- package/package.json +1 -1
- package/dist/main-Bx58CdV4.js.map +0 -1
- package/dist/runner-CiaiUWOE.js +0 -25064
- package/dist/runner-CiaiUWOE.js.map +0 -1
- package/dist/tree-31WAOm5k.js +0 -13481
- package/dist/tree-31WAOm5k.js.map +0 -1
- package/dist/web/assets/engine-oniguruma-C5UP18m1.js +0 -1
- package/dist/web/assets/index-C3QkKvUn.js +0 -942
- package/dist/web/assets/index-CmllrYFx.css +0 -1
- package/dist/web/assets/langs-DfCgj44a.js +0 -1
- package/dist/web/assets/mermaid-WFAXDIZX-zTA5f8lD.js +0 -1
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
# CodeDen
|
|
4
4
|
|
|
5
|
-
**A local-first harness for coding agents.** Run Claude Code, Codex and
|
|
5
|
+
**A local-first harness for coding agents.** Run Claude Code, Codex, OpenCode, Cursor and Gemini CLI side by side in a calm, focused workspace, and when you're ready, let a small software factory work through your backlog while every step stays visible in GitHub.
|
|
6
6
|
|
|
7
7
|
[](https://www.codeden.app)
|
|
8
8
|
[](https://www.npmjs.com/package/codeden)
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
npx codeden
|
|
19
19
|
```
|
|
20
20
|
|
|
21
|
-
That's the whole install. CodeDen starts a local server, opens your browser on an already signed-in URL, and reuses the Claude Code, Codex, OpenCode, GitHub and git setup you already have. No accounts, no license keys, no hosted backend, no telemetry.
|
|
21
|
+
That's the whole install. CodeDen starts a local server, opens your browser on an already signed-in URL, and reuses the Claude Code, Codex, OpenCode, Cursor, Gemini CLI, GitHub and git setup you already have. No accounts, no license keys, no hosted backend, no telemetry.
|
|
22
22
|
|
|
23
23
|
Prefer an app? **[Download the desktop app](https://github.com/leonvanzyl/codeden/releases/latest)** for Windows, macOS or Linux: the same CodeDen in its own window, with a tray icon, notifications and automatic updates, and no Node.js needed. See [The desktop app](https://github.com/leonvanzyl/codeden/blob/main/docs/desktop.md).
|
|
24
24
|
|
|
@@ -45,7 +45,7 @@ Prefer an app? **[Download the desktop app](https://github.com/leonvanzyl/codede
|
|
|
45
45
|
|---|---|
|
|
46
46
|
| **Node.js 24+** | `node --version` |
|
|
47
47
|
| **git** | with `user.name` and `user.email` set |
|
|
48
|
-
| **An agent CLI, signed in** | [Claude Code](https://docs.claude.com/en/docs/claude-code) (`claude`), [Codex CLI](https://developers.openai.com/codex/cli) (`codex`)
|
|
48
|
+
| **An agent CLI, signed in** | [Claude Code](https://docs.claude.com/en/docs/claude-code) (`claude`), [Codex CLI](https://developers.openai.com/codex/cli) (`codex`), [OpenCode](https://opencode.ai) 2.2+ (`opencode`), the [Cursor CLI](https://cursor.com/docs/cli/overview) (`agent`) and/or [Gemini CLI](https://geminicli.com) 0.68+ (`gemini`). At least one is required |
|
|
49
49
|
| **GitHub CLI** *(optional)* | `gh auth login` unlocks issues, pull requests, evidence and the factory. Local-only folders work without it |
|
|
50
50
|
| **Edge or Chrome** *(optional)* | for the browser panel and the agents' browser tools |
|
|
51
51
|
|
|
@@ -57,7 +57,7 @@ npx codeden # or: npm i -g codeden && codeden
|
|
|
57
57
|
|
|
58
58
|
Or install the **desktop app** from the [latest release](https://github.com/leonvanzyl/codeden/releases/latest) (`CodeDen-Setup-<version>.exe` on Windows, a `.dmg` on macOS, an AppImage or `.deb` on Linux). It needs no Node.js, uses the same data as `npx codeden` (`~/.codeden`), lives in the tray and updates itself. Builds without a publisher signature show a warning the first time you open them: on Windows choose **More info › Run anyway**; on macOS open CodeDen once, then choose **Open Anyway** under **System Settings › Privacy & Security**. If macOS says the app is "damaged", see [Unsigned builds](https://github.com/leonvanzyl/codeden/blob/main/docs/desktop.md#unsigned-builds).
|
|
59
59
|
|
|
60
|
-
1. The **setup checklist** detects Claude Code, Codex, OpenCode, GitHub, your git identity and a browser, and only asks about what's missing. Each failed check has one fix: an install command, or a **Sign in** button that runs the tool's own login in an embedded terminal.
|
|
60
|
+
1. The **setup checklist** detects Claude Code, Codex, OpenCode, Cursor, Gemini CLI, GitHub, your git identity and a browser, and only asks about what's missing. Each failed check has one fix: an install command, or a **Sign in** button that runs the tool's own login in an embedded terminal.
|
|
61
61
|
2. **Add a project:** pick a local folder (a server-side folder picker) or paste a GitHub URL to clone.
|
|
62
62
|
3. **Start a session.** The agent works in its own git worktree and branch, so your checkout is never touched.
|
|
63
63
|
|
|
@@ -106,18 +106,26 @@ Each project climbs a ladder: **Manual** → **Assisted** (the default) → **So
|
|
|
106
106
|
Everything an agent touches, next to the chat:
|
|
107
107
|
|
|
108
108
|
- **Diffs and checkpoints.** Every turn is snapshotted into a hidden git ref, so you get exact per-turn and whole-session diffs and can restore files to any earlier turn. Commit and push from the git bar.
|
|
109
|
+
- **Diff comments.** Comment on the agent's changes line by line, then send them all back as one message. [Comment on lines](https://github.com/leonvanzyl/codeden/blob/main/docs/workbench.md#comment-on-lines).
|
|
110
|
+
- **Fork a session**, or fork from an earlier turn, to try another approach with the same conversation and code while the original carries on. [Fork a session](https://github.com/leonvanzyl/codeden/blob/main/docs/workbench.md#fork-a-session).
|
|
111
|
+
- **Hand a session off** to another provider (or a fresh conversation) when one hits its limit or you want a second opinion: the new session gets the same code and a brief of the work so far. [Hand a session off](https://github.com/leonvanzyl/codeden/blob/main/docs/workbench.md#hand-a-session-off).
|
|
112
|
+
- **Plan mode** (Claude Code). The agent explores and proposes a plan, and only starts changing code once you approve it. [Plan mode](https://github.com/leonvanzyl/codeden/blob/main/docs/security.md#plan-mode).
|
|
109
113
|
- **Files.** A file tree and a syntax-highlighted viewer for the session's worktree.
|
|
110
114
|
- **Terminal.** Real PTY terminals owned by the runner, so they survive server restarts.
|
|
111
|
-
- **Browser.** A Chromium the agents drive (navigate, snapshot, click, type, screenshot, console and network logs), streamed edge to edge into the panel at the panel's own size. Click, type and scroll in it at any time.
|
|
115
|
+
- **Browser.** A Chromium the agents drive (navigate, snapshot, click, type, screenshot, console and network logs, plus click, hover, drag and scroll at screenshot coordinates for canvases, maps and other things without an element to pick), streamed edge to edge into the panel at the panel's own size. Click, type and scroll in it at any time.
|
|
112
116
|
- **Subagents** open as child threads, and the composer queues or steers while a turn runs.
|
|
113
117
|
|
|
114
118
|

|
|
115
119
|
|
|
116
120
|
[Workbench guide](https://github.com/leonvanzyl/codeden/blob/main/docs/workbench.md).
|
|
117
121
|
|
|
118
|
-
### Agent memory, skills, subagents
|
|
122
|
+
### Agent memory, skills, subagents, MCP servers and hooks
|
|
119
123
|
|
|
120
|
-
First-class editors for each provider's **own files**: `CLAUDE.md`, `AGENTS.md`, `.claude/rules/`, Claude's auto-memory, skills, subagents, `.mcp.json`, `~/.claude.json
|
|
124
|
+
First-class editors for each provider's **own files**: `CLAUDE.md`, `AGENTS.md`, `.claude/rules/`, Claude's auto-memory, skills, subagents, `.mcp.json`, `~/.claude.json`, `~/.codex/config.toml` and Claude's settings files. Edits are written in place with a diff preview and a backup, so they show up in the terminal CLI too, and a **What's loaded** view shows which files a session actually has in context. [Agent configuration](https://github.com/leonvanzyl/codeden/blob/main/docs/agent-config.md).
|
|
125
|
+
|
|
126
|
+
- **Skill switches.** Turn a skill off or back on without deleting it, through Claude Code's and Codex's own settings. [Switch skills on and off](https://github.com/leonvanzyl/codeden/blob/main/docs/agent-config.md#switch-skills-on-and-off).
|
|
127
|
+
- **MCP connection tests.** Check that an MCP server starts, connects and lists its tools before an agent needs it. [Test a server](https://github.com/leonvanzyl/codeden/blob/main/docs/agent-config.md#test-a-server).
|
|
128
|
+
- **Hooks.** Add, edit, disable and delete Claude Code's hooks, the commands it runs before or after tool calls and on other events. [Hooks](https://github.com/leonvanzyl/codeden/blob/main/docs/agent-config.md#hooks).
|
|
121
129
|
|
|
122
130
|
### Image generation for every agent
|
|
123
131
|
|
|
@@ -158,7 +166,7 @@ When an agent finishes, CodeDen suggests two to four next prompts as one-click c
|
|
|
158
166
|
```
|
|
159
167
|
|
|
160
168
|
- **Two processes.** The **server** owns the database, orchestration, the inbox, automations and GitHub sync, and serves the UI. The **runner** hosts the agent processes, terminals, the browser and git. If the server restarts (an update, a crash), running agents keep going; the runner journals their events until the server is back.
|
|
161
|
-
- **Real SDKs and protocols.** Claude Code runs through the Claude Agent SDK using your installed `claude` binary; Codex runs through `codex app-server` over JSON-RPC; OpenCode runs as a private `opencode serve` per session, over its HTTP API and event stream. No scraped terminal output.
|
|
169
|
+
- **Real SDKs and protocols.** Claude Code runs through the Claude Agent SDK using your installed `claude` binary; Codex runs through `codex app-server` over JSON-RPC; OpenCode runs as a private `opencode serve` per session, over its HTTP API and event stream; Cursor and Gemini CLI run through their Agent Client Protocol servers (`agent acp`, `gemini --acp`). No scraped terminal output.
|
|
162
170
|
- **Everything is an event.** Agent activity is an append-only event log in SQLite, so every action can be seen, replayed and traced to an issue, branch or PR.
|
|
163
171
|
- **Agents reach CodeDen through MCP.** Each session gets a role-scoped token for CodeDen's internal MCP server (`report_progress`, `ask_user`, `create_pull_request`, `attach_evidence`, the browser tools, `generate_image`, ...). Tools outside a role are never listed.
|
|
164
172
|
|
|
@@ -261,7 +269,7 @@ CodeDen checks npm for a new version when it starts and every 6 hours (only the
|
|
|
261
269
|
## FAQ
|
|
262
270
|
|
|
263
271
|
**Do I need API keys?**
|
|
264
|
-
No. CodeDen runs your installed `claude`, `codex` and `
|
|
272
|
+
No. CodeDen runs your installed `claude`, `codex`, `opencode`, `agent` (Cursor) and `gemini` CLIs, which use their own logins, including claude.ai, ChatGPT, Cursor and Google subscriptions. CodeDen never implements a login of its own and never asks for a credential it can already use. API keys are an optional extra for Gemini or OpenAI image generation and cloud voice. Check your provider's terms for how your plan may be used.
|
|
265
273
|
|
|
266
274
|
**Where does my data go?**
|
|
267
275
|
It stays on your machine, in `~/.codeden/`. CodeDen has no account system and no hosted backend. The only network traffic is what you set up: your agents talking to their providers, GitHub (through your `gh` login), and the optional image and voice engines you enable.
|
|
@@ -297,8 +305,8 @@ It's experimental. Read [The software factory and the dark factory](https://gith
|
|
|
297
305
|
| [GitHub](https://github.com/leonvanzyl/codeden/blob/main/docs/github.md) | Issues, PRs, checks, reviews and the evidence branch |
|
|
298
306
|
| [Automations](https://github.com/leonvanzyl/codeden/blob/main/docs/automations.md) | Triggers, guards, templates and writing your own |
|
|
299
307
|
| [The software factory and the dark factory](https://github.com/leonvanzyl/codeden/blob/main/docs/software-factory.md) | Modes, pipelines, trusted authors, the scout, the vision file, merge checks, limits and the kill switch |
|
|
300
|
-
| [Workbench](https://github.com/leonvanzyl/codeden/blob/main/docs/workbench.md) | Diffs, checkpoints, files, terminal, browser, composer, shortcuts |
|
|
301
|
-
| [Agent configuration](https://github.com/leonvanzyl/codeden/blob/main/docs/agent-config.md) | Memory, skills, subagents
|
|
308
|
+
| [Workbench](https://github.com/leonvanzyl/codeden/blob/main/docs/workbench.md) | Diffs, diff comments, checkpoints, forks, files, terminal, browser, composer, shortcuts |
|
|
309
|
+
| [Agent configuration](https://github.com/leonvanzyl/codeden/blob/main/docs/agent-config.md) | Memory, skills and skill switches, subagents, MCP servers and hooks |
|
|
302
310
|
| [Voice and images](https://github.com/leonvanzyl/codeden/blob/main/docs/voice-and-images.md) | Dictation, read-aloud and image generation |
|
|
303
311
|
| [Usage and costs](https://github.com/leonvanzyl/codeden/blob/main/docs/usage-and-costs.md) | The ledger, reports, budgets and rate limits |
|
|
304
312
|
| [Phones, tablets and network access](https://github.com/leonvanzyl/codeden/blob/main/docs/remote-access.md) | Opening CodeDen from your phone, the QR code, Add to Home Screen and VPNs |
|
package/dist/cli.js
CHANGED
|
@@ -242,7 +242,7 @@ async function run() {
|
|
|
242
242
|
console.log(selfVersion);
|
|
243
243
|
process.exit(0);
|
|
244
244
|
}
|
|
245
|
-
await import("./main-
|
|
245
|
+
await import("./main-CQ8GZN1a.js");
|
|
246
246
|
}
|
|
247
247
|
/** Settles once this copy's CLI has loaded (an older launcher that switched here awaits it). */
|
|
248
248
|
const started = run();
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
CREATE TABLE `item_search` (
|
|
2
|
+
`id` integer PRIMARY KEY AUTOINCREMENT,
|
|
3
|
+
`session_id` text NOT NULL,
|
|
4
|
+
`item_id` text NOT NULL,
|
|
5
|
+
`thread_id` text NOT NULL,
|
|
6
|
+
`kind` text NOT NULL,
|
|
7
|
+
`tool_kind` text,
|
|
8
|
+
`text` text NOT NULL,
|
|
9
|
+
`created_at` text NOT NULL
|
|
10
|
+
);
|
|
11
|
+
--> statement-breakpoint
|
|
12
|
+
CREATE UNIQUE INDEX `item_search_item` ON `item_search` (`session_id`,`item_id`);
|
|
13
|
+
--> statement-breakpoint
|
|
14
|
+
-- The full-text index over `item_search.text` (external content: the text is stored once, in `item_search`). Trigram tokens match substrings inside identifiers and paths, case- and accent-insensitively.
|
|
15
|
+
CREATE VIRTUAL TABLE `item_search_fts` USING fts5(`text`, content='item_search', content_rowid='id', tokenize='trigram remove_diacritics 1');
|
|
16
|
+
--> statement-breakpoint
|
|
17
|
+
-- Triggers keep the index in step with every write to `item_search`, in the same transaction.
|
|
18
|
+
CREATE TRIGGER `item_search_ai` AFTER INSERT ON `item_search` BEGIN
|
|
19
|
+
INSERT INTO `item_search_fts` (rowid, `text`) VALUES (new.`id`, new.`text`);
|
|
20
|
+
END;
|
|
21
|
+
--> statement-breakpoint
|
|
22
|
+
CREATE TRIGGER `item_search_ad` AFTER DELETE ON `item_search` BEGIN
|
|
23
|
+
INSERT INTO `item_search_fts` (`item_search_fts`, rowid, `text`) VALUES ('delete', old.`id`, old.`text`);
|
|
24
|
+
END;
|
|
25
|
+
--> statement-breakpoint
|
|
26
|
+
CREATE TRIGGER `item_search_au` AFTER UPDATE OF `text` ON `item_search` WHEN old.`text` IS NOT new.`text` BEGIN
|
|
27
|
+
INSERT INTO `item_search_fts` (`item_search_fts`, rowid, `text`) VALUES ('delete', old.`id`, old.`text`);
|
|
28
|
+
INSERT INTO `item_search_fts` (rowid, `text`) VALUES (new.`id`, new.`text`);
|
|
29
|
+
END;
|