@songsid/agend 2.1.4-beta.8 → 2.1.4-beta.9

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/dist/locale.js CHANGED
@@ -141,6 +141,11 @@ const messages = {
141
141
  "slash.cancel": "Interrupt the agent's current operation (sends Escape)",
142
142
  "slash.dashboard": "Get dashboard URLs (admin only)",
143
143
  "slash.compact": "Compact agent context window",
144
+ "slash.steer": "Interject into the agent's current task",
145
+ "steer.usage": "Usage: /steer <message> — interjects into the running turn",
146
+ "steer.sent": "🎯 Steering message sent to {0} (lands mid-turn; falls back to the queue if the CLI can't take busy input).",
147
+ "steer.not_connected": "❌ Instance not connected (IPC unavailable)",
148
+ "steer.unsupported": "⚠️ /steer is not supported for the {0} backend yet (its TUI can't take input mid-turn). The message was NOT sent — use a normal message instead, or /cancel first.",
144
149
  "slash.clear": "Clear agent conversation context",
145
150
  "slash.save": "Save the agent's conversation",
146
151
  "slash.load": "Load a saved conversation",
@@ -297,6 +302,11 @@ const messages = {
297
302
  "slash.cancel": "中斷 Agent 目前的動作(送出 Escape)",
298
303
  "slash.dashboard": "取得儀表板網址(管理員)",
299
304
  "slash.compact": "壓縮 Agent 上下文",
305
+ "slash.steer": "插入指示到 Agent 當前任務",
306
+ "steer.usage": "用法:/steer <訊息> — 插入到進行中的回合",
307
+ "steer.sent": "🎯 已將指示插入 {0} 的當前任務(若 CLI 不接受忙碌輸入會自動改排隊)。",
308
+ "steer.not_connected": "❌ Instance 未連線(IPC 不可用)",
309
+ "steer.unsupported": "⚠️ {0} backend 尚未支援 /steer(其 TUI 無法在回合中接收輸入)。訊息未送出——請改用一般訊息,或先 /cancel。",
300
310
  "slash.clear": "清空 Agent 對話上下文",
301
311
  "slash.save": "儲存 Agent 對話",
302
312
  "slash.load": "載入已儲存的對話",
@@ -1 +1 @@
1
- {"version":3,"file":"locale.js","sourceRoot":"","sources":["../src/locale.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"locale.js","sourceRoot":"","sources":["../src/locale.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Semantic tool-progress labelling for the channel processing bubble.
3
+ *
4
+ * This is a SECOND labeller, deliberately separate from `Daemon.summarizeTool`:
5
+ * that one feeds the statusline / `/view` / recent events and is pinned by
6
+ * tests to the terse `Read <path>` / `$ <cmd>` form. This one feeds the
7
+ * channel bubble only — it is semantic (`npm test` → `🧪 執行測試`), may
8
+ * return `""` for uninteresting work, and never carries shell arguments at
9
+ * the default `standard` level. Do not merge the two: they serve different
10
+ * audiences with different safety requirements (the bubble is broadcast to a
11
+ * chat channel; the statusline is an operator surface).
12
+ */
13
+ export type ToolProgressLevel = "off" | "standard" | "verbose";
14
+ /**
15
+ * Strip credentials before anything reaches a chat channel. Patterns are
16
+ * deliberately broad — a false positive redacts a harmless token, a false
17
+ * negative broadcasts a secret.
18
+ */
19
+ export declare function redactSecrets(text: string): string;
20
+ /**
21
+ * The channel-bubble labeller. Returns "" when the tool use is not worth a
22
+ * line (channel-plumbing MCP tools, low-signal inspection commands at
23
+ * `standard`). Input shapes vary per backend; unknown shapes degrade to the
24
+ * bare tool name rather than throwing.
25
+ */
26
+ export declare function summarizeProgress(name: string, input: unknown, level?: "standard" | "verbose"): string;
27
+ /**
28
+ * Per-turn progress accumulator: dedupes consecutive repeats, keeps a rolling
29
+ * window of the latest lines, renders to the bubble block.
30
+ */
31
+ export declare class ProgressAccumulator {
32
+ private maxLines;
33
+ private lines;
34
+ constructor(maxLines?: number);
35
+ /** Add a labelled line. Empty labels are ignored. Returns true when the rendered block changed. */
36
+ add(label: string): boolean;
37
+ reset(): void;
38
+ isEmpty(): boolean;
39
+ render(): string;
40
+ }
@@ -0,0 +1,289 @@
1
+ /**
2
+ * Semantic tool-progress labelling for the channel processing bubble.
3
+ *
4
+ * This is a SECOND labeller, deliberately separate from `Daemon.summarizeTool`:
5
+ * that one feeds the statusline / `/view` / recent events and is pinned by
6
+ * tests to the terse `Read <path>` / `$ <cmd>` form. This one feeds the
7
+ * channel bubble only — it is semantic (`npm test` → `🧪 執行測試`), may
8
+ * return `""` for uninteresting work, and never carries shell arguments at
9
+ * the default `standard` level. Do not merge the two: they serve different
10
+ * audiences with different safety requirements (the bubble is broadcast to a
11
+ * chat channel; the statusline is an operator surface).
12
+ */
13
+ /** Max characters for any single progress line (before the display cap). */
14
+ const LABEL_MAX_CHARS = 80;
15
+ /** Max characters of command preview appended at `verbose`. */
16
+ const VERBOSE_PREVIEW_CHARS = 48;
17
+ /**
18
+ * Strip credentials before anything reaches a chat channel. Patterns are
19
+ * deliberately broad — a false positive redacts a harmless token, a false
20
+ * negative broadcasts a secret.
21
+ */
22
+ export function redactSecrets(text) {
23
+ return text
24
+ // JWTs (three base64url segments) — before generic keys, which match prefixes
25
+ .replace(/\beyJ[\w-]{8,}\.[\w-]{8,}\.[\w-]+/g, "[REDACTED]")
26
+ // Known key shapes: OpenAI/Anthropic/GitHub/Slack/AWS/Telegram bot tokens
27
+ .replace(/\b(sk|pk|rk)-[A-Za-z0-9_-]{16,}/g, "[REDACTED]")
28
+ .replace(/\bsk-ant-[A-Za-z0-9_-]{10,}/g, "[REDACTED]")
29
+ .replace(/\bgh[pousr]_[A-Za-z0-9]{16,}/g, "[REDACTED]")
30
+ .replace(/\bxox[baprs]-[A-Za-z0-9-]{10,}/g, "[REDACTED]")
31
+ .replace(/\bAKIA[0-9A-Z]{16}\b/g, "[REDACTED]")
32
+ .replace(/\b\d{8,10}:AA[A-Za-z0-9_-]{30,}/g, "[REDACTED]")
33
+ // Bearer / basic auth headers
34
+ .replace(/\b(Bearer|Basic)\s+[A-Za-z0-9+/._=-]{8,}/gi, "$1 [REDACTED]")
35
+ // key=value / key: value assignments for sensitive names
36
+ .replace(/\b((?:api[-_]?key|token|secret|passwd|password|authorization|credential)s?\s*[=:]\s*)(["']?)[^\s"']{6,}\2/gi, "$1[REDACTED]")
37
+ // URL userinfo credentials (https://user:pass@host)
38
+ .replace(/(\w+:\/\/[^/\s:@]+:)[^@\s]+@/g, "$1[REDACTED]@");
39
+ }
40
+ /** Flatten whitespace and cap length for a single bubble line. */
41
+ function capLine(s) {
42
+ const flat = s.replace(/\s+/g, " ").trim();
43
+ return flat.length > LABEL_MAX_CHARS ? `${flat.slice(0, LABEL_MAX_CHARS - 1)}…` : flat;
44
+ }
45
+ /** Shorten an absolute path to something readable in a bubble line. */
46
+ function shortPath(p) {
47
+ const clean = String(p).trim();
48
+ if (clean.length <= 48)
49
+ return clean;
50
+ const parts = clean.split("/");
51
+ if (parts.length <= 3)
52
+ return clean;
53
+ return `…/${parts.slice(-3).join("/")}`;
54
+ }
55
+ /**
56
+ * Reduce a shell command to its intent. Returns null for commands with no
57
+ * interesting intent — the caller renders a generic "執行指令" line with the
58
+ * program name only (never arguments) at `standard`.
59
+ */
60
+ function classifyShellCommand(cmd) {
61
+ const c = cmd.trim();
62
+ // Test runners
63
+ if (/\b(npm|pnpm|yarn|bun)( run)? test\b/.test(c) || /\b(vitest|jest|pytest|go test|cargo test|mocha|rspec)\b/.test(c)) {
64
+ return { label: "🧪 執行測試", preview: true };
65
+ }
66
+ // Typecheck / build
67
+ if (/\btsc\b/.test(c) || /\b(npm|pnpm|yarn|bun) run build\b/.test(c) || /\b(cargo|go) build\b/.test(c) || /\bmake\b/.test(c)) {
68
+ return { label: "🔨 建置/型別檢查", preview: true };
69
+ }
70
+ // Dependency install
71
+ if (/\b(npm|pnpm|yarn|bun) (i|ci|install|add)\b/.test(c) || /\bpip3? install\b/.test(c) || /\bcargo add\b/.test(c)) {
72
+ return { label: "📦 安裝依賴", preview: true };
73
+ }
74
+ // Git — order matters: push/pull before generic commit
75
+ if (/\bgit push\b/.test(c))
76
+ return { label: "⬆️ git push", preview: true };
77
+ if (/\bgit (pull|fetch)\b/.test(c))
78
+ return { label: "⬇️ git pull/fetch", preview: true };
79
+ if (/\bgit commit\b/.test(c))
80
+ return { label: "💾 git commit", preview: false };
81
+ if (/\bgit (checkout|switch|branch)\b/.test(c))
82
+ return { label: "🔀 git 分支操作", preview: true };
83
+ if (/\bgit (diff|log|status|show|blame)\b/.test(c))
84
+ return { label: "🔎 檢視 git 狀態", preview: true };
85
+ if (/\bgh (pr|issue|api|run)\b/.test(c))
86
+ return { label: "🐙 GitHub 操作", preview: true };
87
+ return null;
88
+ }
89
+ /** Low-signal inspection commands: hidden entirely at `standard`. */
90
+ function isLowSignalCommand(cmd) {
91
+ return /^(rg|grep|find|fd|ls|cat|head|tail|wc|which|pwd|echo|sed|awk|cut|sort|uniq)\b/.test(cmd.trim());
92
+ }
93
+ /** First program name of a shell command, pipelines/chains reduced to the head. */
94
+ function shellProgramName(cmd) {
95
+ const head = cmd.trim().split(/\s*(?:&&|\|\||\||;)\s*/)[0] ?? "";
96
+ const tokens = head.trim().split(/\s+/);
97
+ // Skip env assignments and common wrappers
98
+ let i = 0;
99
+ while (i < tokens.length && /^[A-Za-z_][A-Za-z0-9_]*=/.test(tokens[i]))
100
+ i++;
101
+ if (tokens[i] === "sudo" || tokens[i] === "npx" || tokens[i] === "timeout")
102
+ i++;
103
+ if (tokens[i] && /^\d+[smh]?$/.test(tokens[i]))
104
+ i++; // timeout's duration arg
105
+ return tokens[i] ?? "";
106
+ }
107
+ function labelShell(cmd, level) {
108
+ const intent = classifyShellCommand(cmd);
109
+ if (intent) {
110
+ if (level === "verbose" && intent.preview) {
111
+ return `${intent.label}:${redactSecrets(cmd).slice(0, VERBOSE_PREVIEW_CHARS)}`;
112
+ }
113
+ return intent.label;
114
+ }
115
+ if (level === "verbose")
116
+ return `⚙️ $ ${redactSecrets(cmd).slice(0, VERBOSE_PREVIEW_CHARS)}`;
117
+ if (isLowSignalCommand(cmd))
118
+ return "";
119
+ // standard: program name only, never arguments
120
+ const prog = shellProgramName(cmd);
121
+ return prog ? `⚙️ 執行指令:${prog}` : "";
122
+ }
123
+ /** Extract the shell command from a codex exec input (array or JSON string). */
124
+ function codexShellCommand(input) {
125
+ let inp = input;
126
+ if (typeof inp === "string") {
127
+ // custom_tool_call "exec" input is a JS snippet driving tools.* — surface the call names
128
+ const raw = inp;
129
+ const toolCalls = [...raw.matchAll(/\btools\.(\w+)\s*\(/g)].map(m => m[1]);
130
+ if (toolCalls.length)
131
+ return null; // handled by caller via codexToolsCalled
132
+ // Not JSON → a plain JS snippet for codex's exec runtime, not a shell command.
133
+ try {
134
+ inp = JSON.parse(raw);
135
+ }
136
+ catch {
137
+ return null;
138
+ }
139
+ }
140
+ const obj = inp;
141
+ if (!obj)
142
+ return null;
143
+ const cmd = obj.command;
144
+ if (Array.isArray(cmd)) {
145
+ // ["bash","-lc","actual command"] — take the last element
146
+ return String(cmd[cmd.length - 1] ?? "");
147
+ }
148
+ if (typeof cmd === "string")
149
+ return cmd;
150
+ return null;
151
+ }
152
+ function codexToolsCalled(input) {
153
+ if (typeof input !== "string")
154
+ return [];
155
+ return [...new Set([...input.matchAll(/\btools\.(\w+)\s*\(/g)].map(m => m[1]))];
156
+ }
157
+ /**
158
+ * Name-level classification shared by direct tool uses and codex exec's
159
+ * tools.* calls. Returns "" for channel-plumbing agend MCP tools (suppressed),
160
+ * `🔌 server:tool` for other MCP tools, undefined for everything else.
161
+ *
162
+ * agend naming varies per CLI: claude-code `mcp__agend__reply`, codex
163
+ * `mcp__agend_<instance>__reply`, opencode `agend-<instance>_reply` — hence
164
+ * prefix matching rather than an exact list.
165
+ */
166
+ function labelToolName(name) {
167
+ if (/^mcp__agend[_-]|^agend[-_]/.test(name))
168
+ return "";
169
+ const mcpMatch = name.match(/^mcp__(\w+?)__(\w+)$/);
170
+ if (mcpMatch)
171
+ return capLine(`🔌 ${mcpMatch[1]}:${mcpMatch[2]}`);
172
+ return undefined;
173
+ }
174
+ /**
175
+ * The channel-bubble labeller. Returns "" when the tool use is not worth a
176
+ * line (channel-plumbing MCP tools, low-signal inspection commands at
177
+ * `standard`). Input shapes vary per backend; unknown shapes degrade to the
178
+ * bare tool name rather than throwing.
179
+ */
180
+ export function summarizeProgress(name, input, level = "standard") {
181
+ const inp = (input ?? {});
182
+ const named = labelToolName(name);
183
+ if (named !== undefined)
184
+ return named;
185
+ switch (name) {
186
+ // claude-code shapes
187
+ case "Read": {
188
+ const p = inp.file_path ?? inp.path ?? "";
189
+ return p ? capLine(`📄 讀取檔案:${shortPath(redactSecrets(String(p)))}`) : "📄 讀取檔案";
190
+ }
191
+ case "Edit":
192
+ case "Write":
193
+ case "NotebookEdit": {
194
+ const p = inp.file_path ?? inp.path ?? "";
195
+ return p ? capLine(`✏️ 編輯檔案:${shortPath(redactSecrets(String(p)))}`) : "✏️ 編輯檔案";
196
+ }
197
+ case "Glob":
198
+ case "Grep":
199
+ return level === "verbose" ? capLine(`🔍 搜尋:${redactSecrets(String(inp.pattern ?? ""))}`) : "🔍 搜尋程式碼";
200
+ case "Agent":
201
+ case "Task":
202
+ return "🤝 派工作給子 Agent";
203
+ case "WebFetch":
204
+ return level === "verbose" && inp.url ? capLine(`🌐 讀取網頁:${redactSecrets(String(inp.url))}`) : "🌐 讀取網頁";
205
+ case "WebSearch":
206
+ return "🌐 網路搜尋";
207
+ case "Skill":
208
+ return inp.skill ? capLine(`📚 使用 Skill:${String(inp.skill)}`) : "📚 使用 Skill";
209
+ case "TodoWrite":
210
+ return ""; // bookkeeping, not work
211
+ case "Bash":
212
+ case "bash": // opencode
213
+ case "shell": { // kiro / codex function_call
214
+ const cmd = String(inp.command ?? "");
215
+ return cmd ? capLine(labelShell(cmd, level)) : "";
216
+ }
217
+ case "exec": { // codex custom_tool_call — JS driving tools.*
218
+ const calls = codexToolsCalled(input);
219
+ if (calls.length) {
220
+ const labels = [...new Set(calls.map(c => labelToolName(c) ?? `🔌 ${c}`))].filter(Boolean);
221
+ return labels.length ? capLine(labels.join(" · ")) : "";
222
+ }
223
+ const cmd = codexShellCommand(input);
224
+ if (cmd)
225
+ return capLine(labelShell(cmd, level));
226
+ // A JS snippet with no tools.* calls: still work happening, name it as such.
227
+ return typeof input === "string" && input.trim() ? "⚙️ 執行程式碼" : "";
228
+ }
229
+ // kiro built-in file ops
230
+ case "fs_read": {
231
+ const ops = inp.operations;
232
+ const p = ops?.[0]?.path ?? inp.path ?? "";
233
+ return p ? capLine(`📄 讀取檔案:${shortPath(redactSecrets(String(p)))}`) : "📄 讀取檔案";
234
+ }
235
+ case "fs_write": {
236
+ const p = inp.path ?? "";
237
+ return p ? capLine(`✏️ 編輯檔案:${shortPath(redactSecrets(String(p)))}`) : "✏️ 編輯檔案";
238
+ }
239
+ // opencode built-ins
240
+ case "read":
241
+ return inp.filePath ? capLine(`📄 讀取檔案:${shortPath(redactSecrets(String(inp.filePath)))}`) : "📄 讀取檔案";
242
+ case "edit":
243
+ case "write":
244
+ return inp.filePath ? capLine(`✏️ 編輯檔案:${shortPath(redactSecrets(String(inp.filePath)))}`) : "✏️ 編輯檔案";
245
+ case "glob":
246
+ case "grep":
247
+ return "🔍 搜尋程式碼";
248
+ case "webfetch":
249
+ return "🌐 讀取網頁";
250
+ case "todowrite":
251
+ case "todoread":
252
+ return "";
253
+ }
254
+ // Unknown tool: show its name, nothing else — inputs of unknown tools are
255
+ // the highest-risk place for secrets.
256
+ return capLine(`🔧 ${name}`);
257
+ }
258
+ /**
259
+ * Per-turn progress accumulator: dedupes consecutive repeats, keeps a rolling
260
+ * window of the latest lines, renders to the bubble block.
261
+ */
262
+ export class ProgressAccumulator {
263
+ maxLines;
264
+ lines = [];
265
+ constructor(maxLines = 8) {
266
+ this.maxLines = maxLines;
267
+ }
268
+ /** Add a labelled line. Empty labels are ignored. Returns true when the rendered block changed. */
269
+ add(label) {
270
+ if (!label)
271
+ return false;
272
+ if (this.lines[this.lines.length - 1] === label)
273
+ return false;
274
+ this.lines.push(label);
275
+ if (this.lines.length > this.maxLines)
276
+ this.lines.splice(0, this.lines.length - this.maxLines);
277
+ return true;
278
+ }
279
+ reset() {
280
+ this.lines = [];
281
+ }
282
+ isEmpty() {
283
+ return this.lines.length === 0;
284
+ }
285
+ render() {
286
+ return this.lines.join("\n");
287
+ }
288
+ }
289
+ //# sourceMappingURL=tool-progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-progress.js","sourceRoot":"","sources":["../src/tool-progress.ts"],"names":[],"mappings":"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"}
@@ -108,6 +108,21 @@ export declare class TopicCommands {
108
108
  sendCompact(instanceName: string): Promise<string>;
109
109
  /** Whether the instance backend exposes a verified full-reset command. */
110
110
  supportsClear(instanceName: string): boolean;
111
+ /**
112
+ * Steer: interject a message into the instance's CURRENT turn. The daemon
113
+ * pastes it into the busy CLI instead of queueing for idle (falling back to
114
+ * the queue if the TUI swallows busy input — see Daemon.steerMessage).
115
+ */
116
+ /**
117
+ * Backends whose TUI accepts a busy-pane paste as steering input,
118
+ * live-verified: claude-code and codex buffer-then-submit at the turn
119
+ * boundary, grok accepts it in its input line. kiro's legacy TUI swallows
120
+ * the paste outright, and opencode/antigravity are unverified — for those
121
+ * the user gets an honest "not supported" instead of a silent queue
122
+ * fallback that looks like a steer but behaves like a normal message.
123
+ */
124
+ private static STEER_SUPPORTED_BACKENDS;
125
+ sendSteer(instanceName: string, content: string, msg: Pick<InboundMessage, "chatId" | "messageId" | "username" | "userId" | "threadId" | "adapterId" | "source">): string;
111
126
  /** Send the backend-appropriate full conversation reset through raw_paste. */
112
127
  sendClear(instanceName: string): Promise<string>;
113
128
  /** Send a backend-appropriate session-save command to a fleet-topic instance. */
@@ -422,6 +422,23 @@ export class TopicCommands {
422
422
  await adapter.sendText(msg.chatId, result, { threadId: msg.threadId });
423
423
  return true;
424
424
  }
425
+ if (text === "/steer" || text.startsWith("/steer ") || text.startsWith("/steer@")) {
426
+ const adapter = this.getReplyAdapter(msg);
427
+ if (!adapter)
428
+ return false;
429
+ // Deliberately NOT admin-gated: anyone who can speak in this topic can
430
+ // already send the instance a message; /steer only changes WHEN it lands
431
+ // (mid-turn instead of after), and it goes through the full [user:]
432
+ // formatting — unlike /raw, which bypasses it and is gated.
433
+ const content = text.replace(/^\/steer(@\S+)?/, "").trim();
434
+ if (!content) {
435
+ await adapter.sendText(msg.chatId, t("steer.usage"), { threadId: msg.threadId });
436
+ return true;
437
+ }
438
+ const result = this.sendSteer(instanceName, content, msg);
439
+ await adapter.sendText(msg.chatId, result, { threadId: msg.threadId });
440
+ return true;
441
+ }
425
442
  if (text === "/clear" || text.startsWith("/clear@")) {
426
443
  const adapter = this.getReplyAdapter(msg);
427
444
  if (!adapter)
@@ -532,6 +549,43 @@ export class TopicCommands {
532
549
  supportsClear(instanceName) {
533
550
  return clearCommandForBackend(this.effectiveBackend(instanceName)) !== null;
534
551
  }
552
+ /**
553
+ * Steer: interject a message into the instance's CURRENT turn. The daemon
554
+ * pastes it into the busy CLI instead of queueing for idle (falling back to
555
+ * the queue if the TUI swallows busy input — see Daemon.steerMessage).
556
+ */
557
+ /**
558
+ * Backends whose TUI accepts a busy-pane paste as steering input,
559
+ * live-verified: claude-code and codex buffer-then-submit at the turn
560
+ * boundary, grok accepts it in its input line. kiro's legacy TUI swallows
561
+ * the paste outright, and opencode/antigravity are unverified — for those
562
+ * the user gets an honest "not supported" instead of a silent queue
563
+ * fallback that looks like a steer but behaves like a normal message.
564
+ */
565
+ static STEER_SUPPORTED_BACKENDS = new Set(["claude-code", "codex", "grok", "mock"]);
566
+ sendSteer(instanceName, content, msg) {
567
+ const backend = this.effectiveBackend(instanceName);
568
+ if (!TopicCommands.STEER_SUPPORTED_BACKENDS.has(backend)) {
569
+ return t("steer.unsupported", backend);
570
+ }
571
+ const ipc = this.ctx.instanceIpcClients.get(instanceName);
572
+ if (!ipc?.connected)
573
+ return t("steer.not_connected");
574
+ ipc.send({
575
+ type: "steer",
576
+ content,
577
+ meta: {
578
+ chat_id: msg.chatId,
579
+ message_id: msg.messageId ?? "",
580
+ user: msg.username,
581
+ user_id: msg.userId,
582
+ thread_id: msg.threadId ?? "",
583
+ adapter_id: msg.adapterId ?? "",
584
+ source: msg.source,
585
+ },
586
+ });
587
+ return t("steer.sent", instanceName);
588
+ }
535
589
  /** Send the backend-appropriate full conversation reset through raw_paste. */
536
590
  async sendClear(instanceName) {
537
591
  const backend = this.effectiveBackend(instanceName);
@@ -928,6 +982,7 @@ export class TopicCommands {
928
982
  { command: "dashboard", description: "🔒 Get dashboard URLs" },
929
983
  { command: "ctx", description: "Show context usage" },
930
984
  { command: "compact", description: "Compact agent context" },
985
+ { command: "steer", description: "Interject into the current task" },
931
986
  { command: "clear", description: "🔒 Clear agent conversation context" },
932
987
  { command: "model", description: "🔒 Switch model (admin only)" },
933
988
  { command: "effort", description: "🔒 Set reasoning effort (admin only)" },
@@ -961,6 +1016,7 @@ export class TopicCommands {
961
1016
  { command: "start", description: "🔒 Start an agent in this chat" },
962
1017
  { command: "stop", description: "🔒 Stop the agent" },
963
1018
  { command: "compact", description: "🔒 Compact agent context" },
1019
+ { command: "steer", description: "Interject into the current task" },
964
1020
  { command: "clear", description: "🔒 Clear agent conversation context" },
965
1021
  { command: "model", description: "🔒 Switch model (admin only)" },
966
1022
  { command: "effort", description: "🔒 Set reasoning effort (admin only)" },