@este.systems/dsc 1.0.2 → 1.1.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 +17 -2
- package/README.md +62 -32
- package/bin/dsc.mjs +17 -13
- package/dist/api.js +85 -6
- package/dist/api.js.map +1 -1
- package/dist/mcp.js +7 -6
- package/dist/mcp.js.map +1 -1
- package/dist/preferences.js +113 -0
- package/dist/preferences.js.map +1 -0
- package/dist/prompt.js +1 -1
- package/dist/search.js +1 -1
- package/dist/search.js.map +1 -1
- package/dist/serve.js +183 -0
- package/dist/serve.js.map +1 -0
- package/dist/serve_protocol.js +10 -0
- package/dist/serve_protocol.js.map +1 -0
- package/dist/slash.js +1 -0
- package/dist/slash.js.map +1 -1
- package/dist/tui/History.js +5 -1
- package/dist/tui/History.js.map +1 -1
- package/dist/tui.js +93 -12
- package/dist/tui.js.map +1 -1
- package/package.json +6 -2
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Persistent user preferences set via slash commands.
|
|
3
|
+
*
|
|
4
|
+
* Stored at `$XDG_CONFIG_HOME/dsc/preferences.json` (default
|
|
5
|
+
* `~/.config/dsc/preferences.json`) — deliberately a separate file
|
|
6
|
+
* from the API-credential `config.json` so dsc's UI prefs don't
|
|
7
|
+
* mix with secrets and so removing one doesn't affect the other.
|
|
8
|
+
*
|
|
9
|
+
* What's persisted (only toggle-shaped settings the user explicitly
|
|
10
|
+
* sets via slash):
|
|
11
|
+
*
|
|
12
|
+
* yolo /yolo
|
|
13
|
+
* reasoning /reasoning [on|off]
|
|
14
|
+
* autoContinue /auto-continue [N|off]
|
|
15
|
+
* budgetUsd /budget [usd|off]
|
|
16
|
+
*
|
|
17
|
+
* What's NOT persisted: anything per-session (model, language,
|
|
18
|
+
* assistant label, session name) — those already live in the session
|
|
19
|
+
* JSON so they ride along with /resume.
|
|
20
|
+
*
|
|
21
|
+
* yolo and an active budget are flagged at boot via a loud system
|
|
22
|
+
* message in the TUI so a forgotten-from-last-launch setting can't
|
|
23
|
+
* silently bypass approvals or abort an unexpected turn.
|
|
24
|
+
*/
|
|
25
|
+
import { promises as fsp } from "node:fs";
|
|
26
|
+
import { homedir } from "node:os";
|
|
27
|
+
import * as path from "node:path";
|
|
28
|
+
export function preferencesPath() {
|
|
29
|
+
const xdg = process.env.XDG_CONFIG_HOME;
|
|
30
|
+
const base = xdg && xdg.length ? xdg : path.join(homedir(), ".config");
|
|
31
|
+
return path.join(base, "dsc", "preferences.json");
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Read the saved preferences. Returns an empty object when the file
|
|
35
|
+
* doesn't exist or can't be parsed — we never want a corrupt preferences
|
|
36
|
+
* file to keep dsc from booting.
|
|
37
|
+
*/
|
|
38
|
+
export async function readPreferences() {
|
|
39
|
+
let text;
|
|
40
|
+
try {
|
|
41
|
+
text = await fsp.readFile(preferencesPath(), "utf8");
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return {};
|
|
45
|
+
}
|
|
46
|
+
// Strip BOM PowerShell might have left.
|
|
47
|
+
if (text.charCodeAt(0) === 0xfeff)
|
|
48
|
+
text = text.slice(1);
|
|
49
|
+
try {
|
|
50
|
+
const parsed = JSON.parse(text);
|
|
51
|
+
if (!parsed || typeof parsed !== "object")
|
|
52
|
+
return {};
|
|
53
|
+
const out = {};
|
|
54
|
+
if (typeof parsed.yolo === "boolean")
|
|
55
|
+
out.yolo = parsed.yolo;
|
|
56
|
+
if (typeof parsed.reasoning === "boolean")
|
|
57
|
+
out.reasoning = parsed.reasoning;
|
|
58
|
+
if (typeof parsed.autoContinue === "number" && Number.isFinite(parsed.autoContinue)) {
|
|
59
|
+
out.autoContinue = parsed.autoContinue;
|
|
60
|
+
}
|
|
61
|
+
if (typeof parsed.budgetUsd === "number" && Number.isFinite(parsed.budgetUsd) && parsed.budgetUsd > 0) {
|
|
62
|
+
out.budgetUsd = parsed.budgetUsd;
|
|
63
|
+
}
|
|
64
|
+
return out;
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
return {};
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Merge `updates` into the on-disk preferences file. Pass `null` to
|
|
72
|
+
* remove a key (so `/yolo` → off can clear the saved value rather than
|
|
73
|
+
* persist `yolo: false`). Atomic write via tmp + rename so a crashed
|
|
74
|
+
* write can't leave a partial file. Returns the file path written to.
|
|
75
|
+
*/
|
|
76
|
+
export async function savePreferences(updates) {
|
|
77
|
+
const p = preferencesPath();
|
|
78
|
+
await fsp.mkdir(path.dirname(p), { recursive: true });
|
|
79
|
+
const current = await readPreferences();
|
|
80
|
+
const next = { ...current };
|
|
81
|
+
for (const [key, value] of Object.entries(updates)) {
|
|
82
|
+
const k = key;
|
|
83
|
+
if (value === null || value === undefined) {
|
|
84
|
+
delete next[k];
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
next[k] = value;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
const tmp = p + ".tmp";
|
|
91
|
+
await fsp.writeFile(tmp, JSON.stringify(next, null, 2), {
|
|
92
|
+
encoding: "utf8",
|
|
93
|
+
mode: 0o600,
|
|
94
|
+
});
|
|
95
|
+
await fsp.rename(tmp, p);
|
|
96
|
+
try {
|
|
97
|
+
await fsp.chmod(p, 0o600);
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
// POSIX-only; ignore on Windows
|
|
101
|
+
}
|
|
102
|
+
return p;
|
|
103
|
+
}
|
|
104
|
+
/** Delete the preferences file entirely. Best-effort. */
|
|
105
|
+
export async function clearPreferences() {
|
|
106
|
+
try {
|
|
107
|
+
await fsp.unlink(preferencesPath());
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
// already gone — fine
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=preferences.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preferences.js","sourceRoot":"","sources":["../src/preferences.ts"],"names":[],"mappings":"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"}
|
package/dist/prompt.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Static prefix — kept byte-identical across calls so DeepSeek's prompt-prefix
|
|
3
3
|
// cache hits it on every turn. Dynamic per-turn context is appended via
|
|
4
4
|
// buildSystemPrompt below; only those tail bytes are billed at miss rate.
|
|
5
|
-
export const SYSTEM_PROMPT = `You are dsc, a CLI coding assistant
|
|
5
|
+
export const SYSTEM_PROMPT = `You are dsc (Dev Shell Companion), a CLI coding assistant. You operate inside the user's terminal in their working directory and can edit files and run shell commands via tools.
|
|
6
6
|
|
|
7
7
|
Available tools:
|
|
8
8
|
- read_file(path, offset?, limit?): read a file (returns lines with 1-based numbers).
|
package/dist/search.js
CHANGED
|
@@ -10,7 +10,7 @@ export class SearchError extends Error {
|
|
|
10
10
|
// ─── Provider selection ──────────────────────────────────────────────────────
|
|
11
11
|
// Resolution order:
|
|
12
12
|
// 1. DSC_SEARCH_PROVIDER env var
|
|
13
|
-
// 2. config.search.provider in
|
|
13
|
+
// 2. config.search.provider in config.json
|
|
14
14
|
// 3. "ddg" (no key required)
|
|
15
15
|
export function getProvider() {
|
|
16
16
|
const env = process.env.DSC_SEARCH_PROVIDER?.trim().toLowerCase();
|
package/dist/search.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAiBjD,MAAM,OAAO,WAAY,SAAQ,KAAK;IACA;IAApC,YAAY,OAAe,EAAS,MAAe;QACjD,KAAK,CAAC,OAAO,CAAC,CAAC;QADmB,WAAM,GAAN,MAAM,CAAS;QAEjD,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF;AAED,gFAAgF;AAEhF,oBAAoB;AACpB,mCAAmC;AACnC,
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../src/search.ts"],"names":[],"mappings":"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"}
|
package/dist/serve.js
ADDED
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `dsc serve` — WebSocket daemon for headless dsc.
|
|
3
|
+
*
|
|
4
|
+
* Exposes the agent loop (tools, MCP, DeepSeek chat) over a WebSocket
|
|
5
|
+
* for a programmatic client (surface, script, webhook).
|
|
6
|
+
*
|
|
7
|
+
* Usage: dsc serve [--port <n>]
|
|
8
|
+
*
|
|
9
|
+
* Protocol: see serve_protocol.ts.
|
|
10
|
+
*/
|
|
11
|
+
import { WebSocketServer, WebSocket } from "ws";
|
|
12
|
+
import { runAgent, formatCost } from "./agent.js";
|
|
13
|
+
import { newStats, DEFAULT_MODEL } from "./api.js";
|
|
14
|
+
import { connectAll, closeAll, callMCPTool } from "./mcp.js";
|
|
15
|
+
import { PROTOCOL_VERSION } from "./serve_protocol.js";
|
|
16
|
+
// ── Config ──────────────────────────────────────────────────────────
|
|
17
|
+
const PORT = Number(process.env.DSC_SERVE_PORT) || 9090;
|
|
18
|
+
// ── State ───────────────────────────────────────────────────────────
|
|
19
|
+
const pendingApprovals = new Map();
|
|
20
|
+
let approvalIdCounter = 0;
|
|
21
|
+
// ── Event → protocol broadcast ──────────────────────────────────────
|
|
22
|
+
function send(ws, msg) {
|
|
23
|
+
const text = JSON.stringify(msg);
|
|
24
|
+
ws.send(text, (err) => {
|
|
25
|
+
if (err && ws.readyState === WebSocket.OPEN) {
|
|
26
|
+
// Best-effort for now.
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
// ── Entry ───────────────────────────────────────────────────────────
|
|
31
|
+
export async function serve(port = PORT) {
|
|
32
|
+
const model = DEFAULT_MODEL;
|
|
33
|
+
const stats = newStats();
|
|
34
|
+
// Start the WebSocket server immediately — don't block on MCP connections.
|
|
35
|
+
const wss = new WebSocketServer({ port, host: "127.0.0.1" });
|
|
36
|
+
console.error(`dsc serve — ws://127.0.0.1:${port} (pid ${process.pid})`);
|
|
37
|
+
// Suppress server-level errors from unclean client disconnects
|
|
38
|
+
wss.on("error", (err) => {
|
|
39
|
+
console.error("server error:", err.message);
|
|
40
|
+
});
|
|
41
|
+
// Connect MCP servers in the background. Clients that connect before MCP is
|
|
42
|
+
// ready will see prompts run without MCP tools; MCP tools become available
|
|
43
|
+
// as connections finish.
|
|
44
|
+
let extraTools = [];
|
|
45
|
+
let connections = [];
|
|
46
|
+
connectAll().then((result) => {
|
|
47
|
+
connections = result.connections;
|
|
48
|
+
extraTools = connections.flatMap((c) => c.tools);
|
|
49
|
+
if (result.errors.length) {
|
|
50
|
+
for (const e of result.errors) {
|
|
51
|
+
console.error(`mcp server '${e.name}' failed: ${e.error}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (connections.length) {
|
|
55
|
+
console.error(`mcp: ${connections.length} server(s) connected`);
|
|
56
|
+
}
|
|
57
|
+
}).catch((e) => {
|
|
58
|
+
console.error("mcp connection error:", e.message);
|
|
59
|
+
});
|
|
60
|
+
wss.on("connection", (ws) => {
|
|
61
|
+
console.error("client connected");
|
|
62
|
+
let messages = [];
|
|
63
|
+
// Suppress WebSocket errors so an unclean client disconnect doesn't crash the daemon
|
|
64
|
+
ws.on("error", (err) => {
|
|
65
|
+
console.error("client error:", err.message);
|
|
66
|
+
});
|
|
67
|
+
// Hello
|
|
68
|
+
send(ws, {
|
|
69
|
+
type: "hello",
|
|
70
|
+
protocol_version: PROTOCOL_VERSION,
|
|
71
|
+
version: "1.0.0",
|
|
72
|
+
});
|
|
73
|
+
ws.on("message", async (raw) => {
|
|
74
|
+
let parsed;
|
|
75
|
+
try {
|
|
76
|
+
parsed = JSON.parse(raw.toString());
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
send(ws, { type: "notice", text: "invalid JSON" });
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
switch (parsed.type) {
|
|
83
|
+
// ── Prompt ──────────────────────────────────────────────
|
|
84
|
+
case "prompt": {
|
|
85
|
+
messages.push({ role: "user", content: parsed.text });
|
|
86
|
+
const toolCtx = {
|
|
87
|
+
cwd: process.cwd(),
|
|
88
|
+
yolo: false,
|
|
89
|
+
filesTouched: new Set(),
|
|
90
|
+
sessionId: "",
|
|
91
|
+
sessionApprovals: new Set(),
|
|
92
|
+
};
|
|
93
|
+
const mcpDispatch = (name, args) => callMCPTool(connections, name, args, {
|
|
94
|
+
sessionApprovals: toolCtx.sessionApprovals,
|
|
95
|
+
});
|
|
96
|
+
await runAgent({
|
|
97
|
+
model,
|
|
98
|
+
stats,
|
|
99
|
+
toolCtx,
|
|
100
|
+
messages,
|
|
101
|
+
signal: undefined,
|
|
102
|
+
maxAutoContinue: 1,
|
|
103
|
+
extraTools,
|
|
104
|
+
dispatchExtraTool: mcpDispatch,
|
|
105
|
+
events: {
|
|
106
|
+
onAssistantStart: (_turnId) => { },
|
|
107
|
+
onAssistantContent: (_turnId, chunk) => {
|
|
108
|
+
send(ws, { type: "token", text: chunk });
|
|
109
|
+
},
|
|
110
|
+
onAssistantReasoning: (_turnId, chunk) => {
|
|
111
|
+
send(ws, { type: "thinking", text: chunk });
|
|
112
|
+
},
|
|
113
|
+
onAssistantFinal: (_turnId, _msg) => {
|
|
114
|
+
send(ws, { type: "turn_end" });
|
|
115
|
+
},
|
|
116
|
+
onToolStart: (_callId, name, argsRaw) => {
|
|
117
|
+
let args = {};
|
|
118
|
+
try {
|
|
119
|
+
args = JSON.parse(argsRaw);
|
|
120
|
+
}
|
|
121
|
+
catch { /* fall through */ }
|
|
122
|
+
send(ws, { type: "tool", name, args });
|
|
123
|
+
},
|
|
124
|
+
onToolEnd: (_callId, name, content, rejected) => {
|
|
125
|
+
send(ws, {
|
|
126
|
+
type: "tool_result",
|
|
127
|
+
name,
|
|
128
|
+
content,
|
|
129
|
+
rejected,
|
|
130
|
+
});
|
|
131
|
+
},
|
|
132
|
+
onNotice: (text) => {
|
|
133
|
+
send(ws, { type: "notice", text });
|
|
134
|
+
},
|
|
135
|
+
},
|
|
136
|
+
});
|
|
137
|
+
send(ws, { type: "notice", text: formatCost(stats, model) });
|
|
138
|
+
break;
|
|
139
|
+
}
|
|
140
|
+
// ── Approval response ───────────────────────────────────
|
|
141
|
+
case "approval_response": {
|
|
142
|
+
const pending = pendingApprovals.get(parsed.id);
|
|
143
|
+
if (pending) {
|
|
144
|
+
pending.resolve(parsed.answer);
|
|
145
|
+
pendingApprovals.delete(parsed.id);
|
|
146
|
+
}
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
case "slash": {
|
|
150
|
+
const cmd = parsed.command;
|
|
151
|
+
if (cmd === "clear") {
|
|
152
|
+
messages = [];
|
|
153
|
+
send(ws, { type: "notice", text: "session cleared" });
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
send(ws, { type: "notice", text: `unknown slash: /${cmd}` });
|
|
157
|
+
}
|
|
158
|
+
break;
|
|
159
|
+
}
|
|
160
|
+
default:
|
|
161
|
+
send(ws, { type: "notice", text: `unknown message type` });
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
ws.on("close", () => {
|
|
165
|
+
console.error("client disconnected");
|
|
166
|
+
// Keep MCP connections alive for the next client
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
// Graceful shutdown
|
|
170
|
+
const shutdown = async () => {
|
|
171
|
+
console.error("\nshutting down");
|
|
172
|
+
wss.close();
|
|
173
|
+
await closeAll(connections);
|
|
174
|
+
process.exit(0);
|
|
175
|
+
};
|
|
176
|
+
process.on("SIGINT", shutdown);
|
|
177
|
+
process.on("SIGTERM", shutdown);
|
|
178
|
+
}
|
|
179
|
+
// ── CLI entry ───────────────────────────────────────────────────────
|
|
180
|
+
const portArg = process.argv.indexOf("--port");
|
|
181
|
+
const port = portArg >= 0 ? Number(process.argv[portArg + 1]) || PORT : PORT;
|
|
182
|
+
serve(port);
|
|
183
|
+
//# sourceMappingURL=serve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../src/serve.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Protocol types for `dsc serve` — WebSocket daemon ↔ programmatic client.
|
|
3
|
+
*
|
|
4
|
+
* Protocol version 1. All messages are JSON-RPC-like objects with a `type`
|
|
5
|
+
* discriminator. The server never sends more than one JSON message per line
|
|
6
|
+
* (newline-delimited JSON for readability over `wscat`/`websocat`).
|
|
7
|
+
*/
|
|
8
|
+
// ── Version ─────────────────────────────────────────────────────────
|
|
9
|
+
export const PROTOCOL_VERSION = 1;
|
|
10
|
+
//# sourceMappingURL=serve_protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve_protocol.js","sourceRoot":"","sources":["../src/serve_protocol.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,uEAAuE;AAEvE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAC"}
|
package/dist/slash.js
CHANGED
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,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"}
|
|
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,aAAa;IACb,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"}
|
package/dist/tui/History.js
CHANGED
|
@@ -18,7 +18,11 @@ export function MessageRow({ message: m, streaming = false }) {
|
|
|
18
18
|
// Errors get red; everything else (slash-command output, notices) goes
|
|
19
19
|
// dim so it reads like the REPL's status/info lines rather than a bold
|
|
20
20
|
// header.
|
|
21
|
-
|
|
21
|
+
// Anything that needs to grab the eye renders red. `warning:` joins
|
|
22
|
+
// `error` / `API error` / `(interrupted` here so persisted-yolo and
|
|
23
|
+
// persisted-budget announcements at boot don't get lost in the
|
|
24
|
+
// dim system-info stream.
|
|
25
|
+
const isError = /^(error|warning|API error|\(interrupted)/i.test(m.content);
|
|
22
26
|
return (_jsx(Box, { marginBottom: 1, children: _jsx(Text, { color: isError ? "red" : undefined, dimColor: !isError, children: m.content }) }));
|
|
23
27
|
}
|
|
24
28
|
if (m.role === "user") {
|
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;AAWD,MAAM,UAAU,UAAU,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,GAAG,KAAK,EAAmB;IAC3E,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC1D,OAAO,CACL,KAAC,GAAG,IAAC,YAAY,EAAE,CAAC,YAClB,MAAC,IAAI,IAAC,QAAQ,mBACX,KAAK,QAAI,YAAY,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,IACjC,GACH,CACP,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACxB,uEAAuE;QACvE,uEAAuE;QACvE,UAAU;QACV,MAAM,OAAO,GAAG,
|
|
1
|
+
{"version":3,"file":"History.js","sourceRoot":"","sources":["../../src/tui/History.tsx"],"names":[],"mappings":"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"}
|