@este.systems/dsc 0.5.2 → 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 +36 -1
- package/README.md +68 -3
- package/dist/agent.js +24 -2
- package/dist/agent.js.map +1 -1
- package/dist/mcp.js +350 -0
- package/dist/mcp.js.map +1 -0
- package/dist/slash.js +2 -0
- package/dist/slash.js.map +1 -1
- package/dist/tui/History.js +14 -42
- package/dist/tui/History.js.map +1 -1
- package/dist/tui/Markdown.js +1 -1
- package/dist/tui/Markdown.js.map +1 -1
- package/dist/tui.js +161 -1
- package/dist/tui.js.map +1 -1
- package/package.json +3 -1
package/dist/tui/History.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Box, Static, Text } from "ink";
|
|
3
3
|
import { useStore } from "./useStore.js";
|
|
4
4
|
import { Markdown } from "./Markdown.js";
|
|
@@ -9,38 +9,6 @@ export function History() {
|
|
|
9
9
|
const history = useStore((s) => s.history);
|
|
10
10
|
return (_jsx(Static, { items: history, children: (m) => _jsx(MessageRow, { message: m }, m.id) }));
|
|
11
11
|
}
|
|
12
|
-
/**
|
|
13
|
-
* Split `content` at the last blank line that isn't inside a code fence.
|
|
14
|
-
* Lines before that point are "stable" (no more characters will arrive in
|
|
15
|
-
* those paragraphs); lines after it are the tail still being streamed.
|
|
16
|
-
*
|
|
17
|
-
* Splitting on blank lines is safe because every markdown block-level
|
|
18
|
-
* construct (paragraph, heading, list block, blockquote, table) is
|
|
19
|
-
* terminated by one — so anything before the last blank is a complete
|
|
20
|
-
* block the parser can render without surprises. Mid-line edits within
|
|
21
|
-
* the tail are kept as plain text until they're "committed" by a blank
|
|
22
|
-
* line, at which point they shift into the stable prefix on the next
|
|
23
|
-
* chunk.
|
|
24
|
-
*/
|
|
25
|
-
function splitStableTail(content) {
|
|
26
|
-
const lines = content.split("\n");
|
|
27
|
-
let inFence = false;
|
|
28
|
-
let lastBlank = -1;
|
|
29
|
-
for (let i = 0; i < lines.length; i++) {
|
|
30
|
-
if (/^```/.test(lines[i])) {
|
|
31
|
-
inFence = !inFence;
|
|
32
|
-
continue;
|
|
33
|
-
}
|
|
34
|
-
if (!inFence && lines[i].trim() === "")
|
|
35
|
-
lastBlank = i;
|
|
36
|
-
}
|
|
37
|
-
if (lastBlank < 0)
|
|
38
|
-
return { stable: "", tail: content };
|
|
39
|
-
return {
|
|
40
|
-
stable: lines.slice(0, lastBlank + 1).join("\n"),
|
|
41
|
-
tail: lines.slice(lastBlank + 1).join("\n"),
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
12
|
export function MessageRow({ message: m, streaming = false }) {
|
|
45
13
|
if (m.role === "tool") {
|
|
46
14
|
const label = m.tool_name ? `← ${m.tool_name}` : "← tool";
|
|
@@ -67,15 +35,19 @@ export function MessageRow({ message: m, streaming = false }) {
|
|
|
67
35
|
// header with the body indented two columns and styled italic
|
|
68
36
|
// dim. Sits between the assistant label and the answer so the
|
|
69
37
|
// user can skim past it once they trust the model on a task.
|
|
70
|
-
_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { dimColor: true, children: "thinking" }), _jsx(Box, { marginLeft: 2, children: _jsx(Text, { dimColor: true, italic: true, children: m.reasoning }) })] })) : null, isAssistant && m.content ? (
|
|
71
|
-
//
|
|
72
|
-
//
|
|
73
|
-
//
|
|
74
|
-
//
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
38
|
+
_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { dimColor: true, children: "thinking" }), _jsx(Box, { marginLeft: 2, children: _jsx(Text, { dimColor: true, italic: true, children: m.reasoning }) })] })) : null, isAssistant && m.content ? (
|
|
39
|
+
// Always render through Markdown — even during streaming. The
|
|
40
|
+
// previous "wait for a blank line before any rich render" rule
|
|
41
|
+
// was too conservative: most assistant turns don't emit a blank
|
|
42
|
+
// line until very late, so users saw plain text the whole time
|
|
43
|
+
// and rich rendering only on finalize. With React.memo on the
|
|
44
|
+
// Markdown component, the parse + ink reconcile only happen
|
|
45
|
+
// when `source` changes (i.e. when a chunk arrives), not on
|
|
46
|
+
// every parent re-render (spinner tick, status sync). Partial
|
|
47
|
+
// markdown markers (open **, half-typed ```) render as literal
|
|
48
|
+
// text and snap to formatted once they pair — brief flicker on
|
|
49
|
+
// those characters in exchange for rich rendering throughout.
|
|
50
|
+
_jsx(Markdown, { source: m.content })) : m.content ? (_jsx(Text, { children: m.content })) : null] }));
|
|
79
51
|
}
|
|
80
52
|
function truncate(s, n) {
|
|
81
53
|
return s.length <= n ? s : s.slice(0, n) + "…";
|
package/dist/tui/History.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"History.js","sourceRoot":"","sources":["../../src/tui/History.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAExC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,yEAAyE;AACzE,0EAA0E;AAC1E,0CAA0C;AAC1C,MAAM,UAAU,OAAO;IACrB,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC3C,OAAO,CACL,KAAC,MAAM,IAAC,KAAK,EAAE,OAAO,YACnB,CAAC,CAAC,EAAE,EAAE,CAAC,KAAC,UAAU,IAAY,OAAO,EAAE,CAAC,IAAhB,CAAC,CAAC,EAAE,CAAgB,GACtC,CACV,CAAC;AACJ,CAAC;
|
|
1
|
+
{"version":3,"file":"History.js","sourceRoot":"","sources":["../../src/tui/History.tsx"],"names":[],"mappings":"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"}
|
package/dist/tui/Markdown.js
CHANGED
package/dist/tui/Markdown.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Markdown.js","sourceRoot":"","sources":["../../src/tui/Markdown.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Markdown.js","sourceRoot":"","sources":["../../src/tui/Markdown.tsx"],"names":[],"mappings":"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"}
|
package/dist/tui.js
CHANGED
|
@@ -5,6 +5,7 @@ import { getState, setState } from "./store.js";
|
|
|
5
5
|
import { AVAILABLE_MODELS, DEFAULT_MODEL, DeepSeekError, apiKeySource, computeCostUsd, configPath, hasApiKey, recordUsage, saveApiKey, saveSearchKey, saveSearchProvider, } from "./api.js";
|
|
6
6
|
import { getProvider, getProviderKey } from "./search.js";
|
|
7
7
|
import { loadInstructions } from "./instructions.js";
|
|
8
|
+
import { callMCPTool, connectAll as connectMCP, } from "./mcp.js";
|
|
8
9
|
import { runAgent, formatCost, estimateContextTokens, } from "./agent.js";
|
|
9
10
|
import * as history from "./history.js";
|
|
10
11
|
import * as approval from "./approval.js";
|
|
@@ -141,6 +142,15 @@ async function main() {
|
|
|
141
142
|
sessionId: session.id,
|
|
142
143
|
sessionApprovals: new Set(),
|
|
143
144
|
};
|
|
145
|
+
// MCP connections live here so /mcp, runTurn, and the close-on-exit
|
|
146
|
+
// hook can all reach them. Populated by connectMCP() once at boot,
|
|
147
|
+
// mutated by /mcp reconnect (future). When no `mcp.servers` block is
|
|
148
|
+
// in the config this is just an empty array — no network, no cost.
|
|
149
|
+
let mcpConnections = [];
|
|
150
|
+
const mcpExtraTools = () => mcpConnections.flatMap((c) => c.tools);
|
|
151
|
+
const mcpDispatch = (name, args) => callMCPTool(mcpConnections, name, args, {
|
|
152
|
+
sessionApprovals: toolCtx.sessionApprovals,
|
|
153
|
+
});
|
|
144
154
|
// Coalescing save (same shape as REPL).
|
|
145
155
|
let savePromise = null;
|
|
146
156
|
let savePending = false;
|
|
@@ -166,10 +176,17 @@ async function main() {
|
|
|
166
176
|
return savePromise;
|
|
167
177
|
};
|
|
168
178
|
const sessionStart = Date.now();
|
|
179
|
+
// Per-session USD cost ceiling. `null` = no limit (default).
|
|
180
|
+
// `/budget` toggles. We pre-turn-check the spend against this and
|
|
181
|
+
// abort the next prompt when over; `budgetWarned` keeps the 80%
|
|
182
|
+
// notice from firing on every status tick.
|
|
183
|
+
let budgetUsd = null;
|
|
184
|
+
let budgetWarned = false;
|
|
169
185
|
const promptQueue = [];
|
|
170
186
|
// Push the freshly-computed numbers into the store; StatusBar reads from
|
|
171
187
|
// there. Called after every onTurn and once per second for the timer.
|
|
172
188
|
const syncStatus = () => {
|
|
189
|
+
const cost = computeCostUsd(stats, model);
|
|
173
190
|
setState({
|
|
174
191
|
model,
|
|
175
192
|
contextTokens: estimateContextTokens(messages),
|
|
@@ -182,8 +199,16 @@ async function main() {
|
|
|
182
199
|
queue: promptQueue.slice(),
|
|
183
200
|
queueDepth: promptQueue.length,
|
|
184
201
|
compacted: !!session.compaction,
|
|
185
|
-
cost
|
|
202
|
+
cost,
|
|
186
203
|
});
|
|
204
|
+
// 80% budget warning. Fires once per /budget set; resetting or
|
|
205
|
+
// changing the budget clears the flag so the next threshold gets
|
|
206
|
+
// its own notice. Skipped when no budget is configured.
|
|
207
|
+
if (budgetUsd !== null && !budgetWarned && cost >= budgetUsd * 0.8) {
|
|
208
|
+
const pct = Math.round((cost / budgetUsd) * 100);
|
|
209
|
+
info(`budget warning: $${cost.toFixed(4)} of $${budgetUsd.toFixed(2)} (${pct}%). Next turn aborts at $${budgetUsd.toFixed(2)}.`);
|
|
210
|
+
budgetWarned = true;
|
|
211
|
+
}
|
|
187
212
|
};
|
|
188
213
|
setState({
|
|
189
214
|
model,
|
|
@@ -321,6 +346,31 @@ async function main() {
|
|
|
321
346
|
};
|
|
322
347
|
let pendingAbort = null;
|
|
323
348
|
const runTurn = async (userText) => {
|
|
349
|
+
// Pre-turn budget check. We block at the *start* of the next turn
|
|
350
|
+
// rather than mid-stream — letting a turn that's already in flight
|
|
351
|
+
// finish is the less surprising behavior.
|
|
352
|
+
if (budgetUsd !== null) {
|
|
353
|
+
// Snapshot the mutable let into a const so TS keeps the non-null
|
|
354
|
+
// narrowing across the setState closure below.
|
|
355
|
+
const limit = budgetUsd;
|
|
356
|
+
const cost = computeCostUsd(stats, model);
|
|
357
|
+
if (cost >= limit) {
|
|
358
|
+
// Echo the user's prompt so it doesn't look like input was
|
|
359
|
+
// swallowed, then explain why nothing's happening.
|
|
360
|
+
setState((s) => ({
|
|
361
|
+
history: [
|
|
362
|
+
...s.history,
|
|
363
|
+
{ id: `u-${s.history.length}`, role: "user", content: userText },
|
|
364
|
+
{
|
|
365
|
+
id: `e-${s.history.length + 1}`,
|
|
366
|
+
role: "system",
|
|
367
|
+
content: `error: budget reached ($${cost.toFixed(4)} >= $${limit.toFixed(2)}). /budget off to lift, /budget <amount> to raise.`,
|
|
368
|
+
},
|
|
369
|
+
],
|
|
370
|
+
}));
|
|
371
|
+
return;
|
|
372
|
+
}
|
|
373
|
+
}
|
|
324
374
|
// Push the user message into history immediately so it's visible before
|
|
325
375
|
// the model responds.
|
|
326
376
|
setState((s) => ({
|
|
@@ -349,6 +399,8 @@ async function main() {
|
|
|
349
399
|
maxAutoContinue: getState().autoContinue,
|
|
350
400
|
language: session.language,
|
|
351
401
|
events,
|
|
402
|
+
extraTools: mcpExtraTools(),
|
|
403
|
+
dispatchExtraTool: mcpDispatch,
|
|
352
404
|
});
|
|
353
405
|
}
|
|
354
406
|
catch (e) {
|
|
@@ -485,9 +537,11 @@ async function main() {
|
|
|
485
537
|
"/lang [name|off] force the model to reply in a language",
|
|
486
538
|
"/auto-continue [N|off] auto-grant N extra MAX_TOOL_DEPTH budgets",
|
|
487
539
|
"/cost show token usage and cost",
|
|
540
|
+
"/budget [usd|off] set per-session USD ceiling (warn at 80%, abort at 100%)",
|
|
488
541
|
"/copy copy last assistant response to clipboard",
|
|
489
542
|
"/version show version info",
|
|
490
543
|
"/instructions list active per-project / per-user instruction overlays",
|
|
544
|
+
"/mcp list connected MCP servers and their tools",
|
|
491
545
|
"/compact [keep] summarize old turns (default keep=4)",
|
|
492
546
|
"/transcript dump full message log",
|
|
493
547
|
"/audit [path|show N] audit log info",
|
|
@@ -497,6 +551,7 @@ async function main() {
|
|
|
497
551
|
"/api-key [key] show source / save api key to config file",
|
|
498
552
|
"/search [use|key] … show / switch search provider / save brave|tavily key",
|
|
499
553
|
"/update check npm for a newer dsc and install it",
|
|
554
|
+
"/edit [text] open $EDITOR; the saved buffer becomes the next prompt",
|
|
500
555
|
"/exit exit",
|
|
501
556
|
].join("\n"));
|
|
502
557
|
return true;
|
|
@@ -617,6 +672,40 @@ async function main() {
|
|
|
617
672
|
case "cost":
|
|
618
673
|
info(formatCost(stats, model));
|
|
619
674
|
return true;
|
|
675
|
+
case "budget": {
|
|
676
|
+
// /budget -> show current limit + spend
|
|
677
|
+
// /budget <usd> -> set a session ceiling
|
|
678
|
+
// /budget off -> clear
|
|
679
|
+
const text = arg.trim().toLowerCase();
|
|
680
|
+
if (!text) {
|
|
681
|
+
const cost = computeCostUsd(stats, model);
|
|
682
|
+
if (budgetUsd === null) {
|
|
683
|
+
info(`budget: not set (spent: $${cost.toFixed(4)})\n/budget <usd> to set a limit, /budget off to clear`);
|
|
684
|
+
}
|
|
685
|
+
else {
|
|
686
|
+
const pct = budgetUsd > 0 ? Math.round((cost / budgetUsd) * 100) : 0;
|
|
687
|
+
info(`budget: $${budgetUsd.toFixed(2)} spent: $${cost.toFixed(4)} (${pct}%) warned: ${budgetWarned ? "yes" : "no"}`);
|
|
688
|
+
}
|
|
689
|
+
return true;
|
|
690
|
+
}
|
|
691
|
+
if (text === "off" || text === "none" || text === "0") {
|
|
692
|
+
budgetUsd = null;
|
|
693
|
+
budgetWarned = false;
|
|
694
|
+
info("budget cleared");
|
|
695
|
+
return true;
|
|
696
|
+
}
|
|
697
|
+
const n = parseFloat(text);
|
|
698
|
+
if (!Number.isFinite(n) || n <= 0) {
|
|
699
|
+
info("error: usage: /budget <amount-usd> | off");
|
|
700
|
+
return true;
|
|
701
|
+
}
|
|
702
|
+
budgetUsd = n;
|
|
703
|
+
// Reset the warning flag so the user gets a fresh 80% notice
|
|
704
|
+
// against the new limit even if they're already over it.
|
|
705
|
+
budgetWarned = false;
|
|
706
|
+
info(`budget: $${n.toFixed(2)} (warn at 80%, abort the next turn at 100%)`);
|
|
707
|
+
return true;
|
|
708
|
+
}
|
|
620
709
|
case "copy": {
|
|
621
710
|
// Copy the most recent assistant response to the OS clipboard. The
|
|
622
711
|
// last *assistant* (not tool, not system, not user) is what the
|
|
@@ -731,6 +820,43 @@ async function main() {
|
|
|
731
820
|
case "version":
|
|
732
821
|
info(formatVersionInfo());
|
|
733
822
|
return true;
|
|
823
|
+
case "mcp": {
|
|
824
|
+
// Status / inspection only for now — connections are established
|
|
825
|
+
// at boot. Future: subcommands for reconnect, disable, etc.
|
|
826
|
+
if (mcpConnections.length === 0) {
|
|
827
|
+
info([
|
|
828
|
+
"No MCP servers connected.",
|
|
829
|
+
"",
|
|
830
|
+
"To wire one in, add an `mcp.servers` block to your config:",
|
|
831
|
+
` ${configPath()}`,
|
|
832
|
+
"",
|
|
833
|
+
"Example (Tavily remote MCP):",
|
|
834
|
+
' "mcp": {',
|
|
835
|
+
' "servers": {',
|
|
836
|
+
' "tavily": {',
|
|
837
|
+
' "url": "https://mcp.tavily.com/mcp/",',
|
|
838
|
+
' "headers": { "Authorization": "Bearer ${TAVILY_API_KEY}" }',
|
|
839
|
+
" }",
|
|
840
|
+
" }",
|
|
841
|
+
" }",
|
|
842
|
+
"",
|
|
843
|
+
"Restart dsc after editing — connections are made at boot.",
|
|
844
|
+
].join("\n"));
|
|
845
|
+
return true;
|
|
846
|
+
}
|
|
847
|
+
const lines = [];
|
|
848
|
+
for (const c of mcpConnections) {
|
|
849
|
+
lines.push(`── ${c.name} ──`);
|
|
850
|
+
for (const t of c.tools) {
|
|
851
|
+
// t.function.name is namespaced (mcp_<server>_<tool>); strip
|
|
852
|
+
// the prefix for readability.
|
|
853
|
+
const short = t.function.name.replace(/^mcp_[^_]+_/, "");
|
|
854
|
+
lines.push(` ${short}: ${t.function.description ?? ""}`);
|
|
855
|
+
}
|
|
856
|
+
}
|
|
857
|
+
info(lines.join("\n"));
|
|
858
|
+
return true;
|
|
859
|
+
}
|
|
734
860
|
case "instructions": {
|
|
735
861
|
// Show every overlay the agent currently sees, in the order they
|
|
736
862
|
// appear in the system prompt. Resolved fresh per call so edits
|
|
@@ -775,6 +901,15 @@ async function main() {
|
|
|
775
901
|
}
|
|
776
902
|
info(`installing ${check.latest} (currently ${check.current}) via npm…`);
|
|
777
903
|
let r = await runUpdate();
|
|
904
|
+
// ETARGET = npm's registry has the new version's metadata but
|
|
905
|
+
// the tarball hasn't propagated to all CDN edges yet (common
|
|
906
|
+
// for the first minute or two after `npm publish`). Wait
|
|
907
|
+
// briefly and retry once before surfacing as a failure.
|
|
908
|
+
if (!r.ok && /ETARGET/i.test(r.output)) {
|
|
909
|
+
info("tarball not on all CDN edges yet (ETARGET); retrying in 8s…");
|
|
910
|
+
await new Promise((res) => setTimeout(res, 8000));
|
|
911
|
+
r = await runUpdate();
|
|
912
|
+
}
|
|
778
913
|
// Auto-recover from EACCES on Linux/macOS: offer to set
|
|
779
914
|
// npm's prefix under ~/.local so the install doesn't need
|
|
780
915
|
// sudo, optionally append the PATH export to the user's
|
|
@@ -1184,6 +1319,8 @@ async function main() {
|
|
|
1184
1319
|
assistantLabel: session.assistantLabel,
|
|
1185
1320
|
maxAutoContinue: getState().autoContinue,
|
|
1186
1321
|
language: session.language,
|
|
1322
|
+
extraTools: mcpExtraTools(),
|
|
1323
|
+
dispatchExtraTool: mcpDispatch,
|
|
1187
1324
|
// No events: agent writes its assistant header, content, tool
|
|
1188
1325
|
// arrows, and notices directly to stdout — same as REPL one-shot.
|
|
1189
1326
|
});
|
|
@@ -1256,6 +1393,29 @@ async function main() {
|
|
|
1256
1393
|
.join(", ");
|
|
1257
1394
|
info(`loaded instruction overlays: ${labels} (/instructions to inspect)`);
|
|
1258
1395
|
}
|
|
1396
|
+
// Connect any configured MCP servers in the background. We don't block
|
|
1397
|
+
// boot — the user can interact with built-in tools immediately, and
|
|
1398
|
+
// MCP-provided tools become available the moment connectAll resolves.
|
|
1399
|
+
// If a turn starts before MCP is ready, that turn just doesn't see
|
|
1400
|
+
// those tools; subsequent turns do.
|
|
1401
|
+
void (async () => {
|
|
1402
|
+
try {
|
|
1403
|
+
const { connections, errors } = await connectMCP();
|
|
1404
|
+
mcpConnections = connections;
|
|
1405
|
+
if (connections.length > 0) {
|
|
1406
|
+
const summary = connections
|
|
1407
|
+
.map((c) => `${c.name} (${c.tools.length} tools)`)
|
|
1408
|
+
.join(", ");
|
|
1409
|
+
info(`mcp connected: ${summary} (/mcp to inspect)`);
|
|
1410
|
+
}
|
|
1411
|
+
for (const e of errors) {
|
|
1412
|
+
info(`error: mcp server '${e.name}' failed: ${e.error}`);
|
|
1413
|
+
}
|
|
1414
|
+
}
|
|
1415
|
+
catch (e) {
|
|
1416
|
+
info(`error: mcp connect failed: ${e.message}`);
|
|
1417
|
+
}
|
|
1418
|
+
})();
|
|
1259
1419
|
// Fire-and-forget update probe. Uses the 24h cache by default so a
|
|
1260
1420
|
// chatty notice doesn't appear on every launch — only once per day,
|
|
1261
1421
|
// when the registry says we're behind. Failures are swallowed silently.
|