@este.systems/dsc 0.5.1 → 1.0.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.
package/CHANGELOG.md CHANGED
@@ -7,6 +7,43 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [1.0.0] - 2026-05-19
11
+
12
+ First stable release. The TUI, the agent loop, the tool surface, the
13
+ session model, the approval flow, the MCP integration, the install/
14
+ update story — all of it has been used in real work for weeks and the
15
+ rough edges are sanded. Future minor versions remain backwards-
16
+ compatible in the slash command surface, the config file shape, and
17
+ the on-disk session format.
18
+
19
+ ### Added
20
+ - MCP stdio transport. `mcp.servers.<name>` now supports `transport: "stdio"` with `command` / `args` / `env`, spawning a local subprocess MCP server (filesystem, git, custom in-house, anything `npx`-distributable). Child env merges on top of `process.env` so the subprocess still sees PATH etc; `${VAR}` references expand in command, args, and env values. Transport is inferred from which of `url`/`command` is set when not explicit.
21
+ - MCP approval gating. Every server has a `requireApproval` policy: `"always"` (every call asks), `"never"` (pass through), `"auto"` (heuristic — tool names / descriptions matching destructive verbs like write/delete/send/run/etc get prompted, clearly read-only ones pass). Defaults: `"always"` for stdio, `"auto"` for HTTP. The `a` (always) answer adds the namespaced tool name to a per-session allowlist so repeated identical calls skip the dialog. Args are pretty-printed in the approval body so the user sees what's about to happen before saying yes.
22
+ - Expanded test coverage. 5 new suites: `prompt.test.ts` (system-prompt assembly + cache-prefix hygiene), `markdown.test.ts` (block-parser invariants), `mcp.test.ts` (approval heuristic + env-var expansion), `store.test.ts` (pub/sub contract), `api.test.ts` (configPath, key sources, cost math). 42 new tests; total 69 across 13 suites. `parseBlocks` (Markdown), `autoRequiresApproval` and `expandEnv` (mcp) are now exported for direct testing.
23
+ - `/budget [usd|off]` sets a per-session USD ceiling. One-time `info()` warning at 80% of the limit; the next turn after the limit is reached refuses to send with a clear error pointing at `/budget off` and `/budget <amount>`. Catches runaway `/auto-continue` loops where you walk away from dsc and come back to a $4 conversation. Session-scoped (not persisted across restarts); resetting the limit clears the warned flag so the new threshold gets its own notice.
24
+ - `/edit` added to the in-app `/help` listing (already worked; was undocumented).
25
+
26
+ ### Fixed
27
+ - MCP "auto" approval heuristic now catches `write_file` / `delete_record` / etc. The previous `\bwrite\b`-style regex didn't fire on snake_case names because JS treats `_` as a word character. Replaced with tokenizing on non-letters and checking against a set of destructive verbs (including common `-s` / irregular `-ed` forms so verb-shaped descriptions like "sends a message" also trip). Test added.
28
+ - `/update` now retries once after an 8 s delay when npm fails with `ETARGET` — the publish-propagation race where the registry's metadata is updated but the tarball hasn't reached every CDN edge yet. Stops legitimate "yes there's a newer version but I can't install it" failures in the minute or two after `npm publish`.
29
+
30
+ ## [0.6.0] - 2026-05-19
31
+
32
+ ### Added
33
+ - Generic MCP (Model Context Protocol) client. Configure remote MCP servers under `mcp.servers` in `~/.config/deepseek/deepseek.json`; dsc connects at boot, discovers tools via `listTools`, and exposes them to the agent alongside the built-ins. Tool names get namespaced as `mcp_<server>_<tool>` so multiple servers don't collide. Headers/query support `${VAR}` env expansion so API keys don't have to live in the config file. `/mcp` lists connected servers and their tools. HTTP (Streamable HTTP) transport only in this release; stdio is a future addition. New runtime dependency on `@modelcontextprotocol/sdk`.
34
+ - Test scaffold using `node --test` invoked through `tsx` — no new dependency. `npm test` discovers and runs `tests/*.test.ts`. Seed coverage on `completeSlash`, `compareSemver`, `loadInstructions` (with temp-dir + isolated XDG_CONFIG_HOME), and `history` save/load/list/export/import (with isolated XDG_DATA_HOME). 27 tests, 5 suites at landing.
35
+ - GitHub Actions CI: typecheck + tests on Linux / macOS / Windows for every push and PR.
36
+
37
+ ## [0.5.3] - 2026-05-19
38
+
39
+ ### Fixed
40
+ - Streaming markdown actually streams now. 0.5.2 only rendered rich once a paragraph "committed" via a trailing blank line — too conservative for typical model output, which rarely emits a blank until the end. Now the entire streaming content goes through `Markdown` on every chunk; `React.memo` skips the parse when `source` is unchanged (spinner ticks etc). Partial markers (open `**`, half-typed ```) render literal and snap to formatted once they pair.
41
+
42
+ ## [0.5.2] - 2026-05-18
43
+
44
+ ### Changed
45
+ - Streaming markdown render. The currently-streaming assistant turn now splits at the last blank line outside a code fence: paragraphs before that point render through the full Markdown component (bold, italic, code, lists, tables, etc), the still-streaming tail stays plain so half-typed markers don't flip interpretation on every chunk. Once a paragraph "commits" by being followed by a blank line it shifts into the stable prefix. Markdown is memoized on its `source` prop so re-renders that only change the tail don't re-parse the stable portion. Finalized turns in `<Static>` render the same as before — fully rich.
46
+
10
47
  ## [0.5.1] - 2026-05-18
11
48
 
12
49
  ### Changed
@@ -167,7 +204,11 @@ Initial public release.
167
204
  - DECSTBM-pinned status bar.
168
205
  - Cross-platform packaging (`npm pack` + per-OS installer scripts).
169
206
 
170
- [Unreleased]: https://github.com/EsteSystems/dsc/compare/v0.5.1...HEAD
207
+ [Unreleased]: https://github.com/EsteSystems/dsc/compare/v1.0.0...HEAD
208
+ [1.0.0]: https://github.com/EsteSystems/dsc/compare/v0.6.0...v1.0.0
209
+ [0.6.0]: https://github.com/EsteSystems/dsc/compare/v0.5.3...v0.6.0
210
+ [0.5.3]: https://github.com/EsteSystems/dsc/compare/v0.5.2...v0.5.3
211
+ [0.5.2]: https://github.com/EsteSystems/dsc/compare/v0.5.1...v0.5.2
171
212
  [0.5.1]: https://github.com/EsteSystems/dsc/compare/v0.5.0...v0.5.1
172
213
  [0.5.0]: https://github.com/EsteSystems/dsc/compare/v0.4.1...v0.5.0
173
214
  [0.4.1]: https://github.com/EsteSystems/dsc/compare/v0.4.0...v0.4.1
package/README.md CHANGED
@@ -425,6 +425,64 @@ content. Empty files are treated as absent. Files larger than 64 KB are
425
425
  skipped silently — keep instruction files reasonably short, both for the
426
426
  cache prefix and because the model parses them every turn.
427
427
 
428
+ ## MCP servers
429
+
430
+ dsc can connect to remote [MCP](https://modelcontextprotocol.io) servers
431
+ at boot and expose their tools to the agent alongside the built-ins.
432
+ Configure under `mcp.servers` in `~/.config/deepseek/deepseek.json`:
433
+
434
+ ```jsonc
435
+ {
436
+ "api_key": "sk-...",
437
+ "mcp": {
438
+ "servers": {
439
+ "tavily": {
440
+ "url": "https://mcp.tavily.com/mcp/",
441
+ "headers": { "Authorization": "Bearer ${TAVILY_API_KEY}" }
442
+ }
443
+ }
444
+ }
445
+ }
446
+ ```
447
+
448
+ Per-server fields:
449
+
450
+ | Field | Notes |
451
+ |---|---|
452
+ | `transport` | `"http"` or `"stdio"`. Inferred from which of `url`/`command` is set; specify when ambiguous. |
453
+ | `url` | Required for HTTP transport. Remote MCP endpoint. |
454
+ | `headers` | HTTP only. Static map merged into every request. `${VAR}` references expand against `process.env` at connect time; missing vars throw. |
455
+ | `query` | HTTP only. Appended as URL query params (e.g. `?tavilyApiKey=…`). Same `${VAR}` expansion. |
456
+ | `command` | Required for stdio transport. Executable for the local subprocess (e.g. `"npx"`). |
457
+ | `args` | stdio only. Argv list. `${VAR}` expanded. |
458
+ | `env` | stdio only. Extra env vars for the child, merged on top of `process.env` so it still sees PATH etc. `${VAR}` expanded. |
459
+ | `requireApproval` | `"always"` / `"never"` / `"auto"`. Defaults: `"always"` for stdio (local subprocesses usually touch the filesystem), `"auto"` for HTTP (heuristic on tool names — write/delete/send/run/etc trigger the dialog; read/list/search/get pass through). The `a` (always) answer adds the namespaced tool name to a session-scoped allowlist so repeats skip the prompt. |
460
+ | `enabled` | Optional, default `true`. Set to `false` to skip without removing the entry. |
461
+ | `timeoutMs` | Optional connect timeout. Default 8 s. |
462
+
463
+ Each server's tools are advertised to the model as `mcp_<server>_<tool>`,
464
+ so two servers exposing the same tool name don't collide. `/mcp` shows
465
+ the connected servers + their tools.
466
+
467
+ Example with both transports:
468
+
469
+ ```jsonc
470
+ {
471
+ "mcp": {
472
+ "servers": {
473
+ "tavily": {
474
+ "url": "https://mcp.tavily.com/mcp/",
475
+ "headers": { "Authorization": "Bearer ${TAVILY_API_KEY}" }
476
+ },
477
+ "fs": {
478
+ "command": "npx",
479
+ "args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/workspace"]
480
+ }
481
+ }
482
+ }
483
+ }
484
+ ```
485
+
428
486
  ## Sessions and history
429
487
 
430
488
  Each session is a JSON file under `$XDG_DATA_HOME/dsc/sessions/`
@@ -568,8 +626,9 @@ access. To release:
568
626
  # bottom. Commit the changelog edit before npm version so the bump
569
627
  # commit and the changelog entry land in the same release.
570
628
 
571
- # 2. Bump the version (semver). For a pre-1.0 patch:
572
- npm version patch # → 0.1.1, also creates a git tag
629
+ # 2. Bump the version (semver):
630
+ npm version patch # → 1.0.1 (creates a commit + git tag)
631
+ # use `minor` or `major` for the others
573
632
 
574
633
  # 3. Make sure you're logged in to npm:
575
634
  npm whoami # should print your username
@@ -601,12 +660,18 @@ Notes:
601
660
  ## Development
602
661
 
603
662
  ```sh
604
- npm run dev # tsx src/index.ts
663
+ npm run dev # tsx src/tui.tsx
605
664
  npm run typecheck # tsc --noEmit
665
+ npm test # node --test, runs tests/*.test.ts via tsx
606
666
  npm run build # compiles to dist/
607
667
  npm run package # build + npm pack into pkg/
608
668
  ```
609
669
 
670
+ Tests live under `tests/`, separate from `src/` so they don't ship in
671
+ the npm tarball. The runner is Node's built-in `node --test` invoked
672
+ through `tsx` (no extra test-framework dependency). CI runs the same
673
+ command on Linux, macOS, and Windows for every push and PR.
674
+
610
675
  Source layout:
611
676
 
612
677
  ```
package/dist/agent.js CHANGED
@@ -135,7 +135,13 @@ export async function runAgent(opts) {
135
135
  resp = await chatStream({
136
136
  model,
137
137
  messages: buildApi(),
138
- tools: TOOL_SCHEMAS,
138
+ // Built-in tools first, MCP-provided tools appended. Order
139
+ // doesn't affect dispatch (we route on the mcp_ prefix), but
140
+ // keeping built-ins first is a stable, predictable shape in
141
+ // the prompt for the model.
142
+ tools: opts.extraTools?.length
143
+ ? TOOL_SCHEMAS.concat(opts.extraTools)
144
+ : TOOL_SCHEMAS,
139
145
  signal,
140
146
  onContent: handlers.onContent,
141
147
  onReasoning: handlers.onReasoning,
@@ -185,7 +191,23 @@ export async function runAgent(opts) {
185
191
  let result;
186
192
  let throwAfter = null;
187
193
  try {
188
- result = await executeTool(name, argsRaw, toolCtx, signal);
194
+ // MCP-provided tools have names like `mcp_<server>_<tool>`.
195
+ // Route them to the caller-supplied dispatcher; everything else
196
+ // goes through the built-in executor in tools.ts.
197
+ if (opts.dispatchExtraTool && name.startsWith("mcp_")) {
198
+ let parsedArgs = {};
199
+ try {
200
+ parsedArgs = JSON.parse(argsRaw || "{}");
201
+ }
202
+ catch {
203
+ // fall through with empty args — dispatcher returns a useful
204
+ // error string in its own ToolResult
205
+ }
206
+ result = await opts.dispatchExtraTool(name, parsedArgs);
207
+ }
208
+ else {
209
+ result = await executeTool(name, argsRaw, toolCtx, signal);
210
+ }
189
211
  }
190
212
  catch (e) {
191
213
  // Convert the throw into a synthetic tool result so the assistant's
package/dist/agent.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,UAAU,EACV,cAAc,EACd,WAAW,GAKZ,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,EAAoB,MAAM,YAAY,CAAC;AAC1F,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AA8BrD,6EAA6E;AAC7E,8EAA8E;AAC9E,6EAA6E;AAC7E,mEAAmE;AACnE,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AAEjC,MAAM,GAAG,GAAG,SAAS,CAAC;AACtB,MAAM,IAAI,GAAG,SAAS,CAAC;AACvB,MAAM,MAAM,GAAG,SAAS,CAAC;AACzB,MAAM,GAAG,GAAG,UAAU,CAAC;AACvB,MAAM,KAAK,GAAG,SAAS,CAAC;AAExB,SAAS,cAAc,CACrB,OAAgB,EAChB,aAAsB,EACtB,cAAsB,EACtB,MAA+B,EAC/B,MAAc;IAEd,iEAAiE;IACjE,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,OAAO;YACL,SAAS,EAAE,CAAC,IAAY,EAAE,EAAE;gBAC1B,OAAO,CAAC,IAAI,EAAE,CAAC;gBACf,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;oBAChC,OAAO,GAAG,IAAI,CAAC;gBACjB,CAAC;gBACD,MAAM,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC1C,CAAC;YACD,WAAW,EAAE,CAAC,IAAY,EAAE,EAAE;gBAC5B,OAAO,CAAC,IAAI,EAAE,CAAC;gBACf,IAAI,CAAC,aAAa;oBAAE,OAAO;gBAC3B,IAAI,CAAC,OAAO,EAAE,CAAC;oBACb,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;oBAChC,OAAO,GAAG,IAAI,CAAC;gBACjB,CAAC;gBACD,MAAM,CAAC,oBAAoB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC5C,CAAC;YACD,KAAK,EAAE,GAAG,EAAE;gBACV,uEAAuE;gBACvE,gEAAgE;YAClE,CAAC;SACF,CAAC;IACJ,CAAC;IAED,qEAAqE;IACrE,sEAAsE;IACtE,qEAAqE;IACrE,oEAAoE;IACpE,IAAI,cAAc,GAAG,KAAK,CAAC;IAC3B,IAAI,gBAAgB,GAAG,KAAK,CAAC;IAE7B,OAAO;QACL,SAAS,EAAE,CAAC,IAAY,EAAE,EAAE;YAC1B,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,OAAO,CAAC,IAAI,EAAE,CAAC;gBACf,IAAI,gBAAgB,EAAE,CAAC;oBACrB,2EAA2E;oBAC3E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC;gBACvC,CAAC;gBACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,cAAc,GAAG,KAAK,GAAG,CAAC,CAAC;gBAC1D,cAAc,GAAG,IAAI,CAAC;YACxB,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QACD,WAAW,EAAE,CAAC,IAAY,EAAE,EAAE;YAC5B,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,IAAI,CAAC,aAAa;gBAAE,OAAO,CAAC,yCAAyC;YACrE,IAAI,cAAc;gBAAE,OAAO,CAAC,mDAAmD;YAC/E,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACtB,OAAO,CAAC,IAAI,EAAE,CAAC;gBACf,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,YAAY,KAAK,KAAK,GAAG,GAAG,MAAM,IAAI,CAAC,CAAC;gBACnE,gBAAgB,GAAG,IAAI,CAAC;YAC1B,CAAC;YACD,wEAAwE;YACxE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;QACpD,CAAC;QACD,KAAK,EAAE,GAAG,EAAE;YACV,IAAI,cAAc,EAAE,CAAC;gBACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;iBAAM,IAAI,gBAAgB,EAAE,CAAC;gBAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAyBD,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAgB;IAC7C,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACzE,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC;IACjD,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,YAAY,CAAC;IAE3D,2EAA2E;IAC3E,4EAA4E;IAC5E,wEAAwE;IACxE,qEAAqE;IACrE,gEAAgE;IAChE,MAAM,oBAAoB,GAAG,GAAc,EAAE,CAC3C,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACxE,MAAM,QAAQ,GAAG,GAAc,EAAE,CAAC;QAChC;YACE,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,iBAAiB,CAAC;gBACzB,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,IAAI,EAAE,IAAI,IAAI,EAAE;gBAChB,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE;gBAC5B,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,gEAAgE;gBAChE,iEAAiE;gBACjE,gEAAgE;gBAChE,2CAA2C;gBAC3C,YAAY,EAAE,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC;aAC5C,CAAC;SACH;QACD,GAAG,qBAAqB,CAAC,oBAAoB,EAAE,CAAC;KACjD,CAAC;IAEF,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC,CAAC,CAAC;IAC3E,IAAI,aAAa,GAAG,CAAC,CAAC;IAEtB,yEAAyE;IACzE,yEAAyE;IACzE,wEAAwE;IACxE,qEAAqE;IACrE,UAAU,EAAE,OAAO,IAAI,EAAE,CAAC;QACxB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,cAAc,EAAE,KAAK,EAAE,EAAE,CAAC;YACpD,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;YACrB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;YACxC,kEAAkE;YAClE,4CAA4C;YAC5C,IAAI,CAAC,MAAM;gBAAE,OAAO,CAAC,KAAK,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YACxF,IAAI,IAAI,CAAC;YACT,IAAI,CAAC;gBACH,IAAI,GAAG,MAAM,UAAU,CAAC;oBACtB,KAAK;oBACL,QAAQ,EAAE,QAAQ,EAAE;oBACpB,KAAK,EAAE,YAAY;oBACnB,MAAM;oBACN,SAAS,EAAE,QAAQ,CAAC,SAAS;oBAC7B,WAAW,EAAE,QAAQ,CAAC,WAAW;iBAClC,CAAC,CAAC;YACL,CAAC;oBAAS,CAAC;gBACT,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,CAAC;YACD,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjB,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAE/B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC;YAC3B,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;YAElC,MAAM,YAAY,GAAY,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;YAC7D,IAAI,GAAG,CAAC,iBAAiB;gBAAE,YAAY,CAAC,iBAAiB,GAAG,GAAG,CAAC,iBAAiB,CAAC;YAClF,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM;gBAAE,YAAY,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;YACtF,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC5B,MAAM,EAAE,gBAAgB,CAAC,MAAM,EAAE;gBAC/B,OAAO;gBACP,SAAS,EAAE,GAAG,CAAC,iBAAiB;gBAChC,UAAU,EAAE,GAAG,CAAC,UAAU;aAC3B,CAAC,CAAC;YACH,MAAM,EAAE,EAAE,CAAC,CAAC,oDAAoD;YAEhE,IAAI,CAAC,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACnD,OAAO;YACT,CAAC;YAED,MAAM,SAAS,GAAG,GAAG,CAAC,UAAU,CAAC;YACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC1C,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAChC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,IAAI,CAAC;gBAChD,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;gBAC7C,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,IAAI,IAAI,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;gBAC/E,CAAC;gBACD,KAAK,CAAC,gBAAgB,IAAI,CAAC,CAAC;gBAC5B,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAE3E,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;gBACnD,4DAA4D;gBAC5D,MAAM,WAAW,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;gBAChE,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM;oBAAE,WAAW,CAAC,KAAK,EAAE,CAAC;gBACjD,IAAI,MAA+C,CAAC;gBACpD,IAAI,UAAU,GAAY,IAAI,CAAC;gBAC/B,IAAI,CAAC;oBACH,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;gBAC7D,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,oEAAoE;oBACpE,kEAAkE;oBAClE,+DAA+D;oBAC/D,iEAAiE;oBACjE,UAAU,GAAG,CAAC,CAAC;oBACf,MAAM,OAAO,GACX,CAAC,YAAY,KAAK;wBAClB,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,IAAK,CAAuB,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;oBAC7E,MAAM,GAAG;wBACP,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,UAAW,CAAW,CAAC,OAAO,IAAI,aAAa,EAAE;wBACpF,QAAQ,EAAE,OAAO;qBAClB,CAAC;gBACJ,CAAC;wBAAS,CAAC;oBACT,WAAW,CAAC,IAAI,EAAE,CAAC;gBACrB,CAAC;gBACD,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,MAAM;oBACZ,YAAY,EAAE,IAAI,CAAC,EAAE;oBACrB,OAAO,EAAE,MAAM,CAAC,OAAO;iBACxB,CAAC,CAAC;gBACH,MAAM,EAAE,EAAE,CAAC,CAAC,mDAAmD;gBAC/D,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACrE,CAAC;qBAAM,CAAC;oBACN,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;oBAChF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,KAAK,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;gBAC9E,CAAC;gBAED,IAAI,UAAU,EAAE,CAAC;oBACf,mEAAmE;oBACnE,yDAAyD;oBACzD,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;wBAC9C,QAAQ,CAAC,IAAI,CAAC;4BACZ,IAAI,EAAE,MAAM;4BACZ,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE;4BAC7B,OAAO,EAAE,wCAAwC;yBAClD,CAAC,CAAC;oBACL,CAAC;oBACD,MAAM,UAAU,CAAC;gBACnB,CAAC;YACH,CAAC;QACD,CAAC;QACD,qEAAqE;QACrE,sEAAsE;QACtE,gDAAgD;QAChD,IAAI,aAAa,GAAG,eAAe,EAAE,CAAC;YACpC,aAAa,EAAE,CAAC;YAChB,MAAM,IAAI,GAAG,oBAAoB,aAAa,IAAI,eAAe,KAAK,cAAc,GAAG,aAAa,wCAAwC,cAAc,GAAG,CAAC;YAC9J,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,GAAG,KAAK,IAAI,CAAC,CAAC;YAClD,CAAC;YACD,SAAS,UAAU,CAAC;QACtB,CAAC;QACD,MAAM,UAAU,CAAC;IACnB,CAAC;IAED,2DAA2D;IAC3D,MAAM,UAAU,GAAG,cAAc,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;IACxD,MAAM,QAAQ,GACZ,aAAa,GAAG,CAAC;QACf,CAAC,CAAC,mBAAmB,aAAa,wBAAwB,UAAU,uEAAuE;QAC3I,CAAC,CAAC,2BAA2B,cAAc,mIAAmI,CAAC;IACnL,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,QAAQ,GAAG,KAAK,IAAI,CAAC,CAAC;IACtD,CAAC;IACD,MAAM,EAAE,EAAE,CAAC;AACb,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAY,EAAE,KAAY;IACnD,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC1C,OAAO,UAAU,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,aAAa,SAAS,KAAK,CAAC,gBAAgB,WAAW,KAAK,CAAC,iBAAiB,WAAW,KAAK,CAAC,iBAAiB,YAAY,KAAK,CAAC,gBAAgB,EAAE,CAAC;AACtM,CAAC;AAWD,MAAM,UAAU,YAAY,CAAC,KAAY,EAAE,KAAY,EAAE,IAAmB;IAC1E,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC1C,MAAM,KAAK,GACT,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1B,CAAC,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACvC,MAAM,GAAG,GACP,IAAI,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACrF,MAAM,MAAM,GACV,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAClE,MAAM,OAAO,GACX,IAAI,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACtF,OAAO,GAAG,KAAK,GAAG,KAAK,OAAO,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,aAAa,SAAS,KAAK,CAAC,gBAAgB,WAAW,KAAK,CAAC,iBAAiB,WAAW,KAAK,CAAC,iBAAiB,YAAY,KAAK,CAAC,gBAAgB,GAAG,GAAG,GAAG,MAAM,GAAG,OAAO,EAAE,CAAC;AAC5O,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,qBAAqB,CAAC,QAAmB;IACvD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ;YAAE,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC5E,IAAI,OAAO,CAAC,CAAC,iBAAiB,KAAK,QAAQ;YAAE,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAClG,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAAC,CAAS;IAC5B,IAAI,CAAC,IAAI,SAAS;QAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IAC5D,IAAI,CAAC,IAAI,KAAK;QAAE,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;IACpD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC;AAED,SAAS,cAAc,CAAC,CAAS;IAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;IACnB,IAAI,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;IACvF,OAAO,GAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AAChD,CAAC;AAED,SAAS,QAAQ,CAAC,CAAS,EAAE,CAAS;IACpC,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC;AACjD,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,qBAAqB,CAAC,QAAmB;IAChD,MAAM,GAAG,GAAc,EAAE,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QACtB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACZ,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM;YAAE,SAAS;QAE9E,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,OAAO,CAAC,GAAG,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC1D,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACtB,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;YACpC,IAAI,EAAE;gBAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACrB,CAAC,EAAE,CAAC;QACN,CAAC;QACD,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;YAC9B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;gBACrB,GAAG,CAAC,IAAI,CAAC;oBACP,IAAI,EAAE,MAAM;oBACZ,YAAY,EAAE,EAAE,CAAC,EAAE;oBACnB,OAAO,EAAE,iDAAiD;iBAC3D,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,6CAA6C;IAC1D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
package/dist/mcp.js ADDED
@@ -0,0 +1,350 @@
1
+ /**
2
+ * Generic MCP (Model Context Protocol) client integration.
3
+ *
4
+ * Lets the user point dsc at one or more remote MCP servers (Tavily,
5
+ * filesystem, GitHub, custom, ...) via a `mcp.servers` block in
6
+ * deepseek.json. At boot we connect each enabled server, ask for its
7
+ * tool list, and expose those tools to the agent as additional callable
8
+ * tools alongside the built-ins (read_file, bash, etc).
9
+ *
10
+ * Phase 1 (this file): HTTP transport only. Stdio transport (for local
11
+ * subprocess servers) is a future addition — it requires child-process
12
+ * lifecycle management we don't need yet.
13
+ *
14
+ * Naming: server-provided tool `foo` reachable through server name
15
+ * `tavily` is advertised to the model as `mcp_tavily_foo`. The `mcp_`
16
+ * prefix makes routing decisions trivial — when the agent calls a tool
17
+ * starting with `mcp_`, dispatch goes through the MCP client instead of
18
+ * the built-in `executeTool` switch. The server prefix prevents
19
+ * collisions when two servers expose tools with the same name.
20
+ */
21
+ import { Client } from "@modelcontextprotocol/sdk/client/index.js";
22
+ import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
23
+ import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";
24
+ import { confirm } from "./approval.js";
25
+ import { getConfig } from "./api.js";
26
+ /**
27
+ * Whole words that, appearing in a tool name or description, suggest
28
+ * the call mutates state somewhere. The "auto" approval policy gates
29
+ * anything matching and lets clearly-read-only tools (search / list /
30
+ * get / read / ...) pass.
31
+ *
32
+ * We can't use \b word boundaries with a regex because JS treats `_`
33
+ * as a word character — so \bwrite\b would never match inside
34
+ * `write_file`, the most common tool-name shape. Instead we tokenize
35
+ * the input on any non-letter sequence and check each token against
36
+ * this set.
37
+ *
38
+ * Kept deliberately broad — false positives just ask the user, which
39
+ * is the safer failure mode. A missed destructive verb (false negative)
40
+ * is the costly one.
41
+ */
42
+ const DESTRUCTIVE_WORDS = new Set([
43
+ // Base + common -s / -ed (irregular) forms so verb-shaped descriptions
44
+ // like "sends a message" or "deletes the row" trip the heuristic. We
45
+ // skip -ing forms — they're rare in tool names and descriptions, and
46
+ // including them all would balloon the list without much value.
47
+ "write", "writes",
48
+ "create", "creates", "created",
49
+ "delete", "deletes", "deleted",
50
+ "remove", "removes", "removed",
51
+ "update", "updates", "updated",
52
+ "set", "sets",
53
+ "send", "sends", "sent",
54
+ "post", "posts",
55
+ "publish", "publishes", "published",
56
+ "run", "runs",
57
+ "exec", "execute", "executes",
58
+ "kill", "kills",
59
+ "move", "moves",
60
+ "rename", "renames",
61
+ "insert", "inserts",
62
+ "drop", "drops",
63
+ "push", "pushes",
64
+ "put", "puts",
65
+ "patch", "patches",
66
+ "edit", "edits",
67
+ "modify", "modifies",
68
+ "append", "appends",
69
+ "truncate", "truncates",
70
+ "destroy", "destroys",
71
+ "spawn", "spawns",
72
+ "invoke", "invokes",
73
+ ]);
74
+ export function autoRequiresApproval(toolName, description) {
75
+ const haystack = description ? `${toolName} ${description}` : toolName;
76
+ for (const token of haystack.toLowerCase().split(/[^a-z]+/)) {
77
+ if (token && DESTRUCTIVE_WORDS.has(token))
78
+ return true;
79
+ }
80
+ return false;
81
+ }
82
+ const NAME_PATTERN = /^[a-zA-Z0-9_-]+$/;
83
+ /**
84
+ * Walk `${VAR}` references in a string against process.env. Throws when
85
+ * a referenced var is unset — fail-fast beats a silent auth bypass.
86
+ */
87
+ export function expandEnv(input, where) {
88
+ return input.replace(/\$\{([A-Z0-9_]+)\}/gi, (_match, name) => {
89
+ const v = process.env[name];
90
+ if (typeof v !== "string" || v.length === 0) {
91
+ throw new Error(`${where}: environment variable \${${name}} is unset; required for MCP server config`);
92
+ }
93
+ return v;
94
+ });
95
+ }
96
+ /** Read mcp.servers from deepseek.json (via the same cache api.ts uses). */
97
+ export function loadMCPConfig() {
98
+ const cfg = getConfig();
99
+ if (!cfg)
100
+ return {};
101
+ const mcp = cfg.mcp;
102
+ if (!mcp || typeof mcp !== "object")
103
+ return {};
104
+ const servers = mcp.servers;
105
+ if (!servers || typeof servers !== "object")
106
+ return {};
107
+ return servers;
108
+ }
109
+ /**
110
+ * Connect to a single MCP server and discover its tools. Resolves with
111
+ * the connection on success, throws on any failure (caller catches and
112
+ * surfaces — we don't want one broken server to take dsc down).
113
+ */
114
+ async function connectOne(name, config) {
115
+ if (!NAME_PATTERN.test(name)) {
116
+ throw new Error(`mcp server name "${name}" must match ${NAME_PATTERN} (alphanumeric, '_', '-')`);
117
+ }
118
+ // Disambiguate transport: explicit `transport` field wins; otherwise
119
+ // infer from which field is set. Explicit `stdio` plus `url` is an
120
+ // error, etc.
121
+ const transportKind = config.transport ?? (config.command ? "stdio" : "http");
122
+ let transport;
123
+ if (transportKind === "http") {
124
+ if (!config.url) {
125
+ throw new Error(`mcp.${name}: url is required for http transport`);
126
+ }
127
+ const url = new URL(expandEnv(config.url, `mcp.${name}.url`));
128
+ if (config.query) {
129
+ for (const [k, v] of Object.entries(config.query)) {
130
+ url.searchParams.set(k, expandEnv(v, `mcp.${name}.query.${k}`));
131
+ }
132
+ }
133
+ // Expand headers up-front; the transport accepts a static headers
134
+ // map (any provider needing dynamic re-auth should switch to an
135
+ // AuthProvider, which the SDK supports — out of scope here).
136
+ const headers = {};
137
+ if (config.headers) {
138
+ for (const [k, v] of Object.entries(config.headers)) {
139
+ headers[k] = expandEnv(v, `mcp.${name}.headers.${k}`);
140
+ }
141
+ }
142
+ transport = new StreamableHTTPClientTransport(url, {
143
+ requestInit: { headers },
144
+ });
145
+ }
146
+ else {
147
+ // stdio transport — spawn a local subprocess.
148
+ if (!config.command) {
149
+ throw new Error(`mcp.${name}: command is required for stdio transport`);
150
+ }
151
+ const command = expandEnv(config.command, `mcp.${name}.command`);
152
+ const args = (config.args ?? []).map((a, i) => expandEnv(a, `mcp.${name}.args[${i}]`));
153
+ // Inherit parent env first so the child sees PATH etc. Explicit
154
+ // entries override; `${VAR}` expansion lets users forward specific
155
+ // env vars without restating them. Filter undefined values for
156
+ // type-safety against process.env's loose shape.
157
+ const env = {};
158
+ for (const [k, v] of Object.entries(process.env)) {
159
+ if (typeof v === "string")
160
+ env[k] = v;
161
+ }
162
+ if (config.env) {
163
+ for (const [k, v] of Object.entries(config.env)) {
164
+ env[k] = expandEnv(v, `mcp.${name}.env.${k}`);
165
+ }
166
+ }
167
+ transport = new StdioClientTransport({ command, args, env });
168
+ }
169
+ const client = new Client({ name: "dsc", version: "0.5.3" });
170
+ // Connect with a bounded timeout so a hung server doesn't stall dsc
171
+ // boot indefinitely.
172
+ const timeoutMs = config.timeoutMs ?? 8000;
173
+ await withTimeout(client.connect(transport), timeoutMs, `mcp.${name}: connect timed out after ${timeoutMs}ms`);
174
+ // Ask the server what tools it offers, translate to OpenAI shape.
175
+ const listed = await withTimeout(client.listTools(), timeoutMs, `mcp.${name}: listTools timed out`);
176
+ const tools = [];
177
+ const toolMap = new Map();
178
+ for (const t of listed.tools ?? []) {
179
+ if (!t.name || !NAME_PATTERN.test(t.name)) {
180
+ // Skip tools whose names won't survive the OpenAI tool-name regex;
181
+ // we can't safely call them from chatStream regardless.
182
+ continue;
183
+ }
184
+ const namespaced = `mcp_${name}_${t.name}`;
185
+ tools.push({
186
+ type: "function",
187
+ function: {
188
+ name: namespaced,
189
+ description: t.description ?? `tool from MCP server ${name}`,
190
+ // MCP gives us a JSON Schema; OpenAI/DeepSeek's `parameters`
191
+ // accepts JSON Schema directly. Default to empty-object when
192
+ // the server omits inputSchema.
193
+ parameters: t.inputSchema ?? {
194
+ type: "object",
195
+ properties: {},
196
+ },
197
+ },
198
+ });
199
+ toolMap.set(namespaced, t.name);
200
+ }
201
+ return { name, client, transport, tools, toolMap, config };
202
+ }
203
+ async function withTimeout(p, ms, msg) {
204
+ let timer;
205
+ try {
206
+ return await Promise.race([
207
+ p,
208
+ new Promise((_, reject) => {
209
+ timer = setTimeout(() => reject(new Error(msg)), ms);
210
+ }),
211
+ ]);
212
+ }
213
+ finally {
214
+ if (timer)
215
+ clearTimeout(timer);
216
+ }
217
+ }
218
+ /**
219
+ * Connect every enabled MCP server. Failures are isolated per server —
220
+ * one broken config doesn't kill the others. Returns the list of
221
+ * successful connections plus an array of `{ name, error }` for what
222
+ * failed, so the caller can surface them to the user.
223
+ */
224
+ export async function connectAll() {
225
+ const servers = loadMCPConfig();
226
+ const connections = [];
227
+ const errors = [];
228
+ for (const [name, cfg] of Object.entries(servers)) {
229
+ if (cfg.enabled === false)
230
+ continue;
231
+ try {
232
+ const c = await connectOne(name, cfg);
233
+ connections.push(c);
234
+ }
235
+ catch (e) {
236
+ errors.push({ name, error: e.message });
237
+ }
238
+ }
239
+ return { connections, errors };
240
+ }
241
+ /**
242
+ * Invoke a namespaced tool (`mcp_<server>_<tool>`) by name. Returns a
243
+ * ToolResult compatible with the rest of the agent's tool path.
244
+ *
245
+ * Approval gating: each server has a `requireApproval` policy
246
+ * ("always" | "never" | "auto"). "auto" uses the DESTRUCTIVE_VERBS_RE
247
+ * heuristic on the tool name + description. When approval is required
248
+ * we route through approval.confirm() before calling. "always"
249
+ * answers add the namespaced tool name to `sessionApprovals` so
250
+ * subsequent identical tool calls in this session skip the dialog.
251
+ */
252
+ export async function callMCPTool(connections, name, args, opts) {
253
+ // The first underscore-segmented `_<server>_` identifies which
254
+ // connection to dispatch to. We split on the *second* underscore so
255
+ // tool names containing dashes (e.g. tavily-search) work.
256
+ const m = /^mcp_([^_]+)_(.+)$/.exec(name);
257
+ if (!m) {
258
+ return { content: `error: malformed mcp tool name '${name}'` };
259
+ }
260
+ const [, serverName, toolName] = m;
261
+ const conn = connections.find((c) => c.name === serverName);
262
+ if (!conn) {
263
+ return { content: `error: mcp server '${serverName}' not connected` };
264
+ }
265
+ // Confirm the tool is one the server actually advertised (in case the
266
+ // schema got out of sync between connect and invoke).
267
+ const original = conn.toolMap.get(name);
268
+ if (!original || original !== toolName) {
269
+ return { content: `error: tool '${toolName}' not available on '${serverName}'` };
270
+ }
271
+ // ── Approval gate ────────────────────────────────────────────────
272
+ // Default policy: stdio servers always ask (local subprocesses
273
+ // typically have filesystem access). HTTP servers default to "auto"
274
+ // since they're scope-limited to whatever API they wrap.
275
+ const defaultPolicy = (conn.config.transport ?? (conn.config.command ? "stdio" : "http")) === "stdio"
276
+ ? "always"
277
+ : "auto";
278
+ const policy = conn.config.requireApproval ?? defaultPolicy;
279
+ let mustAsk = false;
280
+ if (policy === "always") {
281
+ mustAsk = true;
282
+ }
283
+ else if (policy === "auto") {
284
+ const desc = conn.tools.find((t) => t.function.name === name)?.function
285
+ .description;
286
+ mustAsk = autoRequiresApproval(toolName, desc);
287
+ }
288
+ const alreadyApproved = opts?.sessionApprovals?.has(name) ?? false;
289
+ if (mustAsk && !alreadyApproved) {
290
+ // Pretty-print the args so the user sees what's about to happen.
291
+ // Cap so a huge argument blob doesn't drown the dialog.
292
+ let argsPreview = JSON.stringify(args, null, 2);
293
+ if (argsPreview.length > 1200) {
294
+ argsPreview = argsPreview.slice(0, 1200) + "\n…(truncated)";
295
+ }
296
+ const ans = await confirm({
297
+ title: `Run MCP tool ${name}`,
298
+ body: argsPreview,
299
+ kind: "command",
300
+ });
301
+ if (ans === "no") {
302
+ return { content: "rejected by user", rejected: true };
303
+ }
304
+ if (ans === "always") {
305
+ opts?.sessionApprovals?.add(name);
306
+ }
307
+ }
308
+ try {
309
+ const r = await conn.client.callTool({ name: toolName, arguments: args });
310
+ // MCP returns content as an array of typed items (text, image, etc).
311
+ // Concatenate text parts; flag any non-text content so the agent
312
+ // knows something was elided.
313
+ const parts = [];
314
+ for (const item of r.content ?? []) {
315
+ if (item.type === "text" && typeof item.text === "string") {
316
+ parts.push(item.text);
317
+ }
318
+ else {
319
+ parts.push(`(non-text mcp content: ${String(item.type)})`);
320
+ }
321
+ }
322
+ return { content: parts.join("\n") || "(empty result)" };
323
+ }
324
+ catch (e) {
325
+ return { content: `error: ${e.message}` };
326
+ }
327
+ }
328
+ /** Terminate sessions and close clients. Best-effort.
329
+ * HTTP transports get terminateSession (server-side cleanup); stdio
330
+ * transports don't have one (closing the client kills the child). */
331
+ export async function closeAll(connections) {
332
+ for (const c of connections) {
333
+ try {
334
+ if ("terminateSession" in c.transport &&
335
+ typeof c.transport.terminateSession === "function") {
336
+ await c.transport.terminateSession();
337
+ }
338
+ }
339
+ catch {
340
+ // best-effort
341
+ }
342
+ try {
343
+ await c.client.close();
344
+ }
345
+ catch {
346
+ // best-effort
347
+ }
348
+ }
349
+ }
350
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
package/dist/slash.js CHANGED
@@ -5,6 +5,7 @@ export const SLASH_COMMANDS = [
5
5
  "api-key",
6
6
  "audit",
7
7
  "auto-continue",
8
+ "budget",
8
9
  "clear",
9
10
  "compact",
10
11
  "copy",
@@ -17,6 +18,7 @@ export const SLASH_COMMANDS = [
17
18
  "instructions",
18
19
  "lang",
19
20
  "list",
21
+ "mcp",
20
22
  "model",
21
23
  "queue",
22
24
  "quit",
package/dist/slash.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"slash.js","sourceRoot":"","sources":["../src/slash.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,wEAAwE;AACxE,qCAAqC;AACrC,MAAM,CAAC,MAAM,cAAc,GAA0B;IACnD,SAAS;IACT,OAAO;IACP,eAAe;IACf,OAAO;IACP,SAAS;IACT,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,cAAc;IACd,MAAM;IACN,MAAM;IACN,OAAO;IACP,OAAO;IACP,MAAM;IACN,WAAW;IACX,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,YAAY;IACZ,QAAQ;IACR,SAAS;IACT,MAAM;CACP,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IAIxC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IAClE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IAClE,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CACrE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CACf,CAAC;IACF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IACjE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC;IAC3E,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC;AAC/D,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAc;IACzC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"slash.js","sourceRoot":"","sources":["../src/slash.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,wEAAwE;AACxE,qCAAqC;AACrC,MAAM,CAAC,MAAM,cAAc,GAA0B;IACnD,SAAS;IACT,OAAO;IACP,eAAe;IACf,QAAQ;IACR,OAAO;IACP,SAAS;IACT,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,cAAc;IACd,MAAM;IACN,MAAM;IACN,KAAK;IACL,OAAO;IACP,OAAO;IACP,MAAM;IACN,WAAW;IACX,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,YAAY;IACZ,QAAQ;IACR,SAAS;IACT,MAAM;CACP,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IAIxC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IAClE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IAClE,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CACrE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CACf,CAAC;IACF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IACjE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC;IAC3E,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC;AAC/D,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAc;IACzC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}