codeep 2.13.2 → 2.15.0

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.
Files changed (62) hide show
  1. package/README.md +35 -24
  2. package/dist/acp/commands.js +22 -1
  3. package/dist/acp/server.js +278 -251
  4. package/dist/config/index.d.ts +10 -0
  5. package/dist/config/index.js +2 -2
  6. package/dist/config/providers.js +35 -22
  7. package/dist/renderer/App.d.ts +0 -30
  8. package/dist/renderer/App.js +149 -659
  9. package/dist/renderer/agentExecution.d.ts +2 -1
  10. package/dist/renderer/agentExecution.js +10 -6
  11. package/dist/renderer/commands/helpers.d.ts +63 -0
  12. package/dist/renderer/commands/helpers.js +108 -0
  13. package/dist/renderer/commands/registry.js +5 -0
  14. package/dist/renderer/commands.d.ts +4 -0
  15. package/dist/renderer/commands.js +183 -64
  16. package/dist/renderer/components/ActionFormatting.d.ts +17 -0
  17. package/dist/renderer/components/ActionFormatting.js +67 -0
  18. package/dist/renderer/components/Autocomplete.d.ts +33 -0
  19. package/dist/renderer/components/Autocomplete.js +40 -0
  20. package/dist/renderer/components/Intro.d.ts +9 -0
  21. package/dist/renderer/components/Intro.js +5 -15
  22. package/dist/renderer/components/MessageFormatter.d.ts +96 -0
  23. package/dist/renderer/components/MessageFormatter.js +375 -0
  24. package/dist/renderer/components/Permission.d.ts +4 -0
  25. package/dist/renderer/components/Permission.js +1 -1
  26. package/dist/renderer/components/Status.d.ts +4 -0
  27. package/dist/renderer/components/Status.js +2 -3
  28. package/dist/renderer/components/WelcomeFormatter.d.ts +19 -0
  29. package/dist/renderer/components/WelcomeFormatter.js +79 -0
  30. package/dist/renderer/components/uiConstants.d.ts +8 -0
  31. package/dist/renderer/components/uiConstants.js +24 -0
  32. package/dist/renderer/inputParsing.d.ts +22 -0
  33. package/dist/renderer/inputParsing.js +28 -0
  34. package/dist/renderer/layout.d.ts +215 -0
  35. package/dist/renderer/layout.js +326 -0
  36. package/dist/renderer/main.d.ts +2 -1
  37. package/dist/renderer/main.js +45 -10
  38. package/dist/renderer/ollamaHint.d.ts +12 -0
  39. package/dist/renderer/ollamaHint.js +29 -0
  40. package/dist/utils/agentChat.js +28 -2
  41. package/dist/utils/codeepCloud.d.ts +54 -0
  42. package/dist/utils/codeepCloud.js +95 -0
  43. package/dist/utils/export.d.ts +12 -0
  44. package/dist/utils/export.js +3 -3
  45. package/dist/utils/hooks.d.ts +26 -0
  46. package/dist/utils/hooks.js +69 -1
  47. package/dist/utils/keychain.js +45 -29
  48. package/dist/utils/logger.d.ts +12 -0
  49. package/dist/utils/logger.js +1 -1
  50. package/dist/utils/mcpConfig.d.ts +26 -0
  51. package/dist/utils/mcpConfig.js +109 -4
  52. package/dist/utils/skillBundles.d.ts +14 -0
  53. package/dist/utils/skillBundles.js +3 -3
  54. package/dist/utils/skillBundlesCloud.d.ts +7 -0
  55. package/dist/utils/skillBundlesCloud.js +1 -1
  56. package/dist/utils/tokenTracker.d.ts +30 -3
  57. package/dist/utils/tokenTracker.js +71 -13
  58. package/dist/utils/toolParsing.d.ts +11 -0
  59. package/dist/utils/toolParsing.js +6 -0
  60. package/dist/version.d.ts +1 -1
  61. package/dist/version.js +1 -1
  62. package/package.json +2 -2
package/README.md CHANGED
@@ -23,27 +23,14 @@
23
23
  <a href="https://github.com/VladoIvankovic/Codeep"><img src="https://img.shields.io/github/stars/VladoIvankovic/Codeep?style=social" alt="GitHub stars"></a>
24
24
  </p>
25
25
 
26
- ## Upgrading from 1.x to 2.0
26
+ ## Upgrading
27
27
 
28
- Most users **do not need to do anything** — `npm install -g codeep@latest`
29
- picks up the new version and everything carries over (config, saved
30
- profiles, project memory, MCP servers, skill bundles).
31
-
32
- Two breaking changes only affect a small audience:
33
-
34
- 1. **MCP `clientInfo` version bumped from `1.4.0` → `2.0.0`.** If you
35
- maintain a custom MCP server that allowlists Codeep by version
36
- string, update your check.
37
- 2. **`McpServer` protocol shape** in ACP now has `command?`, `args?`,
38
- `url?`, `headers?` (transport-agnostic for stdio + Streamable HTTP).
39
- The old required-`command` shape is still accepted — parser handles
40
- both — but new clients should emit the optional shape.
41
-
42
- See [CHANGELOG.md](CHANGELOG.md#200--2026-05-18) for the full list of
43
- additions (full MCP support, OpenRouter provider with authoritative
44
- per-call cost, Claude-Code-compatible skill bundles + web marketplace,
45
- custom slash commands, lifecycle hooks, checkpoints, `/cost`,
46
- `/compact`, and more).
28
+ Running `npm install -g codeep@latest` picks up the new version — config,
29
+ saved profiles, project memory, MCP servers, and skill bundles all carry
30
+ over. Breaking changes (if any) are listed at the top of each release in
31
+ [CHANGELOG.md](CHANGELOG.md); the last breaking change was
32
+ [2.0.0](CHANGELOG.md#200--2026-05-18) (MCP `clientInfo` version bump,
33
+ transport-agnostic `McpServer` shape).
47
34
 
48
35
  ## Features
49
36
 
@@ -77,6 +64,7 @@ When started in a project directory, Codeep automatically:
77
64
  - **AI session titles** - Sessions auto-title themselves with an LLM one-liner ("OAuth2 migration for auth module") instead of a truncated first message. This makes one small background API call per session; turn it off with the `autoSessionTitle` setting (`/settings`) if you prefer zero unsolicited calls
78
65
  - **Search current session** - Find text in the open conversation with `/search`
79
66
  - **Cross-session recall** - `/recall <query>` searches across **all** saved sessions, ranked by relevance + recency. Add `--resume` to load the top match, or `--summarize` for an LLM recap of what you accomplished across matches
67
+ - **Cross-device resume (`/cloud`)** - Sessions you run on one device (CLI, Mac app, VS Code) sync to `codeep.dev`. `/cloud` lists them and pulls the selected one back locally, so you can start a session on your desktop and continue on your laptop. Run `codeep account` once to link your devices; scoped to the current project when one is open.
80
68
  - **Export** - Save to Markdown, JSON, or plain text
81
69
  - `/cost` - Per-session token usage and estimated cost (per provider/model)
82
70
  - `/compact [keepN]` - AI-summarize older messages to free up context (keeps last N, default 4)
@@ -358,10 +346,11 @@ You write safe, reversible DB migrations…
358
346
  **Guaranteed review:** enable **Agent Auto-Review** in `/settings` (`agentAutoReview`) and after any run that changes files, Codeep automatically delegates to the `reviewer` and appends its findings — a review stage that always happens. Off by default.
359
347
 
360
348
  ### Project Rules
361
- Define project-specific instructions that the AI always follows. Create a rules file in your project root:
349
+ Define project-specific instructions that the AI always follows. Create a rules file in your project root (first non-empty file wins):
362
350
 
363
351
  - **`.codeep/rules.md`** - Primary location (inside `.codeep/` folder)
364
352
  - **`CODEEP.md`** - Alternative location (project root, similar to `CLAUDE.md` or `.cursorrules`)
353
+ - **`AGENTS.md`** - Cross-tool standard (works with Claude Code, Cursor, Kilo Code — no duplication needed)
365
354
 
366
355
  The rules file content is automatically included in every system prompt — both chat and agent mode. Use it to define:
367
356
 
@@ -469,11 +458,12 @@ Full spec coverage in 2.0.0 — stdio and Streamable HTTP transports,
469
458
  tools / resources / prompts / sampling, capability negotiation with
470
459
  `roots`, auto-restart on crash, mid-run catalog refresh.
471
460
 
472
- **Three ways to wire MCP servers** (all merge; project > global > ACP wins last):
461
+ **Four ways to wire MCP servers** (all merge; project > `.mcp.json` > global > ACP wins last):
473
462
 
474
463
  1. **Project config** — `.codeep/mcp_servers.json` (committed with the repo)
475
- 2. **Global config** — `~/.codeep/mcp_servers.json` (per machine)
476
- 3. **ACP client config** — Zed / Claude Desktop pass `mcpServers` on `session/new`
464
+ 2. **`.mcp.json`** — cross-tool standard at the workspace root (works with Claude Code, Cursor, Kilo Code — point everyone at the same file)
465
+ 3. **Global config** — `~/.codeep/mcp_servers.json` (per machine)
466
+ 4. **ACP client config** — Zed / Claude Desktop pass `mcpServers` on `session/new`
477
467
 
478
468
  Two transports per entry, mutually exclusive:
479
469
 
@@ -573,6 +563,26 @@ cloned repo's hooks are **not** run until you approve the workspace. Run
573
563
  own projects just need a one-time `/hooks trust`. Global `~/.codeep/hooks/` are
574
564
  never run for the same reason.
575
565
 
566
+ #### Windows notes
567
+
568
+ Lifecycle hooks are POSIX shell (`.sh`) scripts:
569
+
570
+ - **macOS / Linux** — run directly (via the script's shebang). No setup.
571
+ - **Windows** — a `.sh` needs a POSIX `sh`. Install [Git for Windows](https://git-scm.com/download/win)
572
+ (it ships `sh.exe`) and Codeep runs `.sh` hooks through it automatically — no
573
+ PATH tweaking needed if Git is installed to its default location. **Without a
574
+ POSIX shell**, `/hooks` and the welcome banner report an explicit
575
+ *"cannot run on this system"* state and hooks are skipped — they never block a
576
+ tool call or commit, and the rest of Codeep is unaffected. (`.ps1`/`.cmd` hooks
577
+ are not executed; keep hook logic in `.sh`.)
578
+
579
+ Everything else is **Node-native and shell-independent on Windows**: project
580
+ rules (`AGENTS.md` / `CODEEP.md` / `.codeep/rules.md`), custom slash commands
581
+ (`.codeep/commands/*.md`), and skill bundles (`.codeep/skills/`) are Markdown;
582
+ MCP config (`.mcp.json` / `.codeep/mcp_servers.json`) is JSON. MCP servers spawn
583
+ via their configured `command` — `npx` resolves through `npx.cmd`, and a custom
584
+ `command` like `python` just needs to be on your PATH.
585
+
576
586
  ### Skill Bundles (new in 2.0)
577
587
  Beyond the built-in skills and custom slash commands, Codeep now supports
578
588
  **structured skill bundles** — directory-based capability packs the agent
@@ -1024,6 +1034,7 @@ After installation, `codeep` is available globally in your terminal. Simply run
1024
1034
  |---------|-------------|
1025
1035
  | `/sessions` | List and load saved sessions |
1026
1036
  | `/sessions delete <name>` | Delete a specific session |
1037
+ | `/cloud` | List and resume sessions synced from other devices |
1027
1038
  | `/rename <name>` | Rename current session |
1028
1039
  | `/search <term>` | Search through chat history |
1029
1040
  | `/export` | Export chat to MD/JSON/TXT format |
@@ -1023,8 +1023,29 @@ Anything else the agent should know — edge cases, gotchas, things to double-ch
1023
1023
  }
1024
1024
  case 'mcp': {
1025
1025
  const sub = args[0]?.toLowerCase();
1026
- const { addProjectMcpServer, removeProjectMcpServer, loadMcpServerConfig } = await import('../utils/mcpConfig.js');
1026
+ const { addProjectMcpServer, removeProjectMcpServer, loadMcpServerConfig, loadMcpServerConfigSplit, isWorkspaceMcpTrusted, trustWorkspaceMcp, untrustWorkspaceMcp } = await import('../utils/mcpConfig.js');
1027
1027
  const { registerSessionServers } = await import('../utils/mcpRegistry.js');
1028
+ if (sub === 'trust') {
1029
+ if (isWorkspaceMcpTrusted(session.workspaceRoot)) {
1030
+ return { handled: true, response: '_Workspace MCP servers are already trusted here._' };
1031
+ }
1032
+ trustWorkspaceMcp(session.workspaceRoot);
1033
+ const { workspace } = loadMcpServerConfigSplit(session.workspaceRoot);
1034
+ if (workspace.length === 0) {
1035
+ return { handled: true, response: '_Workspace trusted — no workspace MCP servers defined yet._' };
1036
+ }
1037
+ onChunk(`_Workspace trusted. Spawning ${workspace.length} MCP server(s)…_\n\n`);
1038
+ const merged = loadMcpServerConfig(session.workspaceRoot);
1039
+ const { registered, errors } = await registerSessionServers(session.sessionId, merged, { workspaceRoot: session.workspaceRoot });
1040
+ const lines = [`Trusted workspace MCP servers (${registered.length} tool(s) available).`];
1041
+ for (const e of errors)
1042
+ lines.push(`- \`${e.server}\` failed: ${e.error}`);
1043
+ return { handled: true, response: lines.join('\n') };
1044
+ }
1045
+ if (sub === 'untrust') {
1046
+ untrustWorkspaceMcp(session.workspaceRoot);
1047
+ return { handled: true, response: '_Workspace MCP trust revoked — workspace servers won\'t spawn for new sessions._' };
1048
+ }
1028
1049
  if (sub === 'add') {
1029
1050
  // /mcp add <name> <command> [args...]
1030
1051
  const name = args[1];