@openacp/cli 0.6.6 → 0.6.7
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/{adapter-RKK7A5GI.js → adapter-7GY3N4ZH.js} +9 -9
- package/dist/{admin-SCP25TN2.js → admin-2HAFXQBG.js} +6 -4
- package/dist/{chunk-WVMSP4AF.js → chunk-2J2RBYWN.js} +2 -2
- package/dist/{chunk-ZKTIZME6.js → chunk-47B7GNOE.js} +2 -2
- package/dist/{chunk-XVL6AGMG.js → chunk-5OVPEDUB.js} +2 -2
- package/dist/{chunk-AHPRT3RY.js → chunk-5SXG7X5D.js} +523 -251
- package/dist/chunk-5SXG7X5D.js.map +1 -0
- package/dist/{chunk-F3AICYO4.js → chunk-JHYXKVV2.js} +19 -1
- package/dist/chunk-JHYXKVV2.js.map +1 -0
- package/dist/{chunk-FCLGYYTY.js → chunk-JUYDFUSN.js} +224 -2
- package/dist/chunk-JUYDFUSN.js.map +1 -0
- package/dist/{chunk-774Y4RAK.js → chunk-KIRH7TUJ.js} +94 -24
- package/dist/chunk-KIRH7TUJ.js.map +1 -0
- package/dist/{chunk-4GQ3I65A.js → chunk-LBIKITQT.js} +1 -2
- package/dist/{chunk-4GQ3I65A.js.map → chunk-LBIKITQT.js.map} +1 -1
- package/dist/{chunk-ZMVVW3BK.js → chunk-LO4Y5WQ7.js} +127 -18
- package/dist/chunk-LO4Y5WQ7.js.map +1 -0
- package/dist/{chunk-3IRAWHMC.js → chunk-MZXWCDBU.js} +3 -3
- package/dist/{chunk-YQRF3IOR.js → chunk-O7CPGUAI.js} +2 -2
- package/dist/{chunk-7KZI2236.js → chunk-RHE2JSYE.js} +2 -2
- package/dist/{chunk-3ZO3MHZN.js → chunk-SHHMBGB3.js} +4 -3
- package/dist/chunk-SHHMBGB3.js.map +1 -0
- package/dist/{chunk-JV6XQRAE.js → chunk-XANPHG7W.js} +2 -2
- package/dist/{chunk-PJVKOZTR.js → chunk-YEOY2PBJ.js} +2 -2
- package/dist/cli.js +21 -21
- package/dist/{config-B26J3XXN.js → config-CQAS6YHR.js} +2 -2
- package/dist/{config-editor-QTGUK3CD.js → config-editor-37BM56WF.js} +4 -4
- package/dist/{config-registry-7I6GGDOY.js → config-registry-HDXFES2D.js} +2 -2
- package/dist/{daemon-5DS5BQXJ.js → daemon-K33ZPSEZ.js} +3 -3
- package/dist/{discord-QKT3JMRW.js → discord-VOHXRTCH.js} +113 -131
- package/dist/discord-VOHXRTCH.js.map +1 -0
- package/dist/{doctor-QQ3YZEYV.js → doctor-HASEBMUD.js} +4 -4
- package/dist/doctor-W4VGLDVM.js +9 -0
- package/dist/index.d.ts +25 -9
- package/dist/index.js +11 -11
- package/dist/{main-B5L3DD3Y.js → main-DUXVFTDD.js} +19 -19
- package/dist/{new-session-K6UCWYOP.js → new-session-NHK7TOEW.js} +3 -3
- package/dist/{settings-RRF77IC4.js → settings-6TF4WIGJ.js} +3 -3
- package/dist/{setup-5ZKSUR26.js → setup-RJCEB6FS.js} +3 -3
- package/package.json +1 -1
- package/dist/chunk-3ZO3MHZN.js.map +0 -1
- package/dist/chunk-774Y4RAK.js.map +0 -1
- package/dist/chunk-AHPRT3RY.js.map +0 -1
- package/dist/chunk-F3AICYO4.js.map +0 -1
- package/dist/chunk-FCLGYYTY.js.map +0 -1
- package/dist/chunk-ZMVVW3BK.js.map +0 -1
- package/dist/discord-QKT3JMRW.js.map +0 -1
- package/dist/doctor-6SUCVUZB.js +0 -9
- /package/dist/{adapter-RKK7A5GI.js.map → adapter-7GY3N4ZH.js.map} +0 -0
- /package/dist/{admin-SCP25TN2.js.map → admin-2HAFXQBG.js.map} +0 -0
- /package/dist/{chunk-WVMSP4AF.js.map → chunk-2J2RBYWN.js.map} +0 -0
- /package/dist/{chunk-ZKTIZME6.js.map → chunk-47B7GNOE.js.map} +0 -0
- /package/dist/{chunk-XVL6AGMG.js.map → chunk-5OVPEDUB.js.map} +0 -0
- /package/dist/{chunk-3IRAWHMC.js.map → chunk-MZXWCDBU.js.map} +0 -0
- /package/dist/{chunk-YQRF3IOR.js.map → chunk-O7CPGUAI.js.map} +0 -0
- /package/dist/{chunk-7KZI2236.js.map → chunk-RHE2JSYE.js.map} +0 -0
- /package/dist/{chunk-JV6XQRAE.js.map → chunk-XANPHG7W.js.map} +0 -0
- /package/dist/{chunk-PJVKOZTR.js.map → chunk-YEOY2PBJ.js.map} +0 -0
- /package/dist/{config-B26J3XXN.js.map → config-CQAS6YHR.js.map} +0 -0
- /package/dist/{config-editor-QTGUK3CD.js.map → config-editor-37BM56WF.js.map} +0 -0
- /package/dist/{config-registry-7I6GGDOY.js.map → config-registry-HDXFES2D.js.map} +0 -0
- /package/dist/{daemon-5DS5BQXJ.js.map → daemon-K33ZPSEZ.js.map} +0 -0
- /package/dist/{doctor-6SUCVUZB.js.map → doctor-HASEBMUD.js.map} +0 -0
- /package/dist/{doctor-QQ3YZEYV.js.map → doctor-W4VGLDVM.js.map} +0 -0
- /package/dist/{main-B5L3DD3Y.js.map → main-DUXVFTDD.js.map} +0 -0
- /package/dist/{new-session-K6UCWYOP.js.map → new-session-NHK7TOEW.js.map} +0 -0
- /package/dist/{settings-RRF77IC4.js.map → settings-6TF4WIGJ.js.map} +0 -0
- /package/dist/{setup-5ZKSUR26.js.map → setup-RJCEB6FS.js.map} +0 -0
|
@@ -7,15 +7,16 @@ import {
|
|
|
7
7
|
handleNew,
|
|
8
8
|
handleNewChat,
|
|
9
9
|
handleNewSessionButton
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-XANPHG7W.js";
|
|
11
11
|
import {
|
|
12
12
|
handleDangerous,
|
|
13
13
|
handleDangerousButton,
|
|
14
14
|
handleRestart,
|
|
15
15
|
handleTTS,
|
|
16
16
|
handleTTSButton,
|
|
17
|
-
handleUpdate
|
|
18
|
-
|
|
17
|
+
handleUpdate,
|
|
18
|
+
handleVerbosity
|
|
19
|
+
} from "./chunk-KIRH7TUJ.js";
|
|
19
20
|
import {
|
|
20
21
|
handleCancel,
|
|
21
22
|
handleCleanupButton,
|
|
@@ -39,21 +40,31 @@ import {
|
|
|
39
40
|
import {
|
|
40
41
|
handleSettings,
|
|
41
42
|
handleSettingsButton
|
|
42
|
-
} from "./chunk-
|
|
43
|
+
} from "./chunk-O7CPGUAI.js";
|
|
43
44
|
import {
|
|
44
45
|
handleDoctor,
|
|
45
46
|
handleDoctorButton
|
|
46
|
-
} from "./chunk-
|
|
47
|
+
} from "./chunk-RHE2JSYE.js";
|
|
47
48
|
import {
|
|
48
49
|
PRODUCT_GUIDE,
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
50
|
+
STATUS_ICONS,
|
|
51
|
+
dispatchMessage,
|
|
52
|
+
evaluateNoise,
|
|
53
|
+
extractContentText,
|
|
54
|
+
formatTokens,
|
|
55
|
+
formatToolSummary,
|
|
56
|
+
formatToolTitle,
|
|
57
|
+
progressBar,
|
|
58
|
+
splitMessage,
|
|
59
|
+
stripCodeFences,
|
|
60
|
+
truncateContent
|
|
61
|
+
} from "./chunk-JUYDFUSN.js";
|
|
62
|
+
import "./chunk-YEOY2PBJ.js";
|
|
52
63
|
import {
|
|
53
64
|
ChannelAdapter
|
|
54
|
-
} from "./chunk-
|
|
55
|
-
import "./chunk-
|
|
56
|
-
import "./chunk-
|
|
65
|
+
} from "./chunk-LBIKITQT.js";
|
|
66
|
+
import "./chunk-JHYXKVV2.js";
|
|
67
|
+
import "./chunk-SHHMBGB3.js";
|
|
57
68
|
import {
|
|
58
69
|
log
|
|
59
70
|
} from "./chunk-GAK6PIBW.js";
|
|
@@ -129,71 +140,36 @@ var DiscordSendQueue = class {
|
|
|
129
140
|
};
|
|
130
141
|
|
|
131
142
|
// src/adapters/discord/formatting.ts
|
|
132
|
-
var STATUS_ICON = {
|
|
133
|
-
running: "\u{1F504}",
|
|
134
|
-
completed: "\u2705",
|
|
135
|
-
failed: "\u274C",
|
|
136
|
-
pending: "\u23F3",
|
|
137
|
-
in_progress: "\u{1F504}"
|
|
138
|
-
};
|
|
139
|
-
var KIND_ICON = {
|
|
140
|
-
read: "\u{1F4D6}",
|
|
141
|
-
write: "\u270F\uFE0F",
|
|
142
|
-
command: "\u26A1",
|
|
143
|
-
search: "\u{1F50D}"
|
|
144
|
-
};
|
|
145
|
-
function extractContentText(content, depth = 0) {
|
|
146
|
-
if (!content || depth > 5) return "";
|
|
147
|
-
if (typeof content === "string") return content;
|
|
148
|
-
if (Array.isArray(content)) {
|
|
149
|
-
return content.map((c) => extractContentText(c, depth + 1)).filter(Boolean).join("\n");
|
|
150
|
-
}
|
|
151
|
-
if (typeof content === "object" && content !== null) {
|
|
152
|
-
const c = content;
|
|
153
|
-
if (c.type === "text" && typeof c.text === "string") return c.text;
|
|
154
|
-
if (typeof c.text === "string") return c.text;
|
|
155
|
-
if (typeof c.content === "string") return c.content;
|
|
156
|
-
if (c.content && typeof c.content === "object") return extractContentText(c.content, depth + 1);
|
|
157
|
-
if (c.input) return extractContentText(c.input, depth + 1);
|
|
158
|
-
if (c.output) return extractContentText(c.output, depth + 1);
|
|
159
|
-
const keys = Object.keys(c).filter((k) => k !== "type");
|
|
160
|
-
if (keys.length === 0) return "";
|
|
161
|
-
return JSON.stringify(c, null, 2);
|
|
162
|
-
}
|
|
163
|
-
return String(content);
|
|
164
|
-
}
|
|
165
|
-
function truncateContent(text, maxLen = 500) {
|
|
166
|
-
if (text.length <= maxLen) return text;
|
|
167
|
-
return text.slice(0, maxLen) + "\n\u2026 (truncated)";
|
|
168
|
-
}
|
|
169
143
|
function formatViewerLinks(links, filePath) {
|
|
170
144
|
if (!links) return "";
|
|
171
145
|
const fileName = filePath ? filePath.split("/").pop() || filePath : "";
|
|
172
146
|
let text = "\n";
|
|
173
147
|
if (links.file) text += `
|
|
174
148
|
[View ${fileName || "file"}](${links.file})`;
|
|
175
|
-
if (links.diff)
|
|
149
|
+
if (links.diff)
|
|
150
|
+
text += `
|
|
176
151
|
[View diff${fileName ? ` \u2014 ${fileName}` : ""}](${links.diff})`;
|
|
177
152
|
return text;
|
|
178
153
|
}
|
|
179
|
-
function formatToolCall(tool) {
|
|
180
|
-
const si =
|
|
181
|
-
const
|
|
182
|
-
|
|
154
|
+
function formatToolCall(tool, verbosity = "medium") {
|
|
155
|
+
const si = STATUS_ICONS[tool.status || ""] || "\u{1F527}";
|
|
156
|
+
const name = tool.name || "Tool";
|
|
157
|
+
const label = verbosity === "low" ? formatToolTitle(name, tool.rawInput) : formatToolSummary(name, tool.rawInput);
|
|
158
|
+
let text = `${si} **${label}**`;
|
|
183
159
|
text += formatViewerLinks(tool.viewerLinks, tool.viewerFilePath);
|
|
184
|
-
if (!tool.viewerLinks) {
|
|
185
|
-
const details = extractContentText(tool.content);
|
|
160
|
+
if (verbosity === "high" || verbosity === "medium" && !tool.viewerLinks) {
|
|
161
|
+
const details = stripCodeFences(extractContentText(tool.content));
|
|
186
162
|
if (details) {
|
|
187
163
|
text += `
|
|
188
164
|
\`\`\`
|
|
189
|
-
${truncateContent(details)}
|
|
165
|
+
${truncateContent(details, 500)}
|
|
190
166
|
\`\`\``;
|
|
191
167
|
}
|
|
192
168
|
}
|
|
193
169
|
return text;
|
|
194
170
|
}
|
|
195
|
-
function formatToolUpdate(update) {
|
|
196
|
-
return formatToolCall(update);
|
|
171
|
+
function formatToolUpdate(update, verbosity = "medium") {
|
|
172
|
+
return formatToolCall(update, verbosity);
|
|
197
173
|
}
|
|
198
174
|
function formatPlan(entries) {
|
|
199
175
|
const statusIcon = {
|
|
@@ -207,13 +183,6 @@ function formatPlan(entries) {
|
|
|
207
183
|
return `**Plan:**
|
|
208
184
|
${lines.join("\n")}`;
|
|
209
185
|
}
|
|
210
|
-
function formatTokens(n) {
|
|
211
|
-
return n >= 1e3 ? `${Math.round(n / 1e3)}k` : String(n);
|
|
212
|
-
}
|
|
213
|
-
function progressBar(ratio) {
|
|
214
|
-
const filled = Math.round(Math.min(ratio, 1) * 10);
|
|
215
|
-
return "\u2593".repeat(filled) + "\u2591".repeat(10 - filled);
|
|
216
|
-
}
|
|
217
186
|
function formatUsage(usage) {
|
|
218
187
|
const { tokensUsed, contextSize } = usage;
|
|
219
188
|
if (tokensUsed == null) return "\u{1F4CA} Usage data unavailable";
|
|
@@ -225,37 +194,8 @@ function formatUsage(usage) {
|
|
|
225
194
|
return `${emoji} ${formatTokens(tokensUsed)} / ${formatTokens(contextSize)} tokens
|
|
226
195
|
${bar} ${pct}%`;
|
|
227
196
|
}
|
|
228
|
-
function
|
|
229
|
-
|
|
230
|
-
const chunks = [];
|
|
231
|
-
let remaining = text;
|
|
232
|
-
while (remaining.length > 0) {
|
|
233
|
-
if (remaining.length <= maxLength) {
|
|
234
|
-
chunks.push(remaining);
|
|
235
|
-
break;
|
|
236
|
-
}
|
|
237
|
-
const wouldLeaveSmall = remaining.length < maxLength * 1.3;
|
|
238
|
-
const searchLimit = wouldLeaveSmall ? Math.floor(remaining.length / 2) + 300 : maxLength;
|
|
239
|
-
let splitAt = remaining.lastIndexOf("\n\n", searchLimit);
|
|
240
|
-
if (splitAt === -1 || splitAt < searchLimit * 0.2) {
|
|
241
|
-
splitAt = remaining.lastIndexOf("\n", searchLimit);
|
|
242
|
-
}
|
|
243
|
-
if (splitAt === -1 || splitAt < searchLimit * 0.2) {
|
|
244
|
-
splitAt = searchLimit;
|
|
245
|
-
}
|
|
246
|
-
const candidate = remaining.slice(0, splitAt);
|
|
247
|
-
const fences = candidate.match(/```/g);
|
|
248
|
-
if (fences && fences.length % 2 !== 0) {
|
|
249
|
-
const closingFence = remaining.indexOf("```", splitAt);
|
|
250
|
-
if (closingFence !== -1) {
|
|
251
|
-
const afterFence = remaining.indexOf("\n", closingFence + 3);
|
|
252
|
-
splitAt = afterFence !== -1 ? afterFence + 1 : closingFence + 3;
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
chunks.push(remaining.slice(0, splitAt));
|
|
256
|
-
remaining = remaining.slice(splitAt).replace(/^\n+/, "");
|
|
257
|
-
}
|
|
258
|
-
return chunks;
|
|
197
|
+
function splitMessage2(text, maxLength = 1800) {
|
|
198
|
+
return splitMessage(text, maxLength);
|
|
259
199
|
}
|
|
260
200
|
|
|
261
201
|
// src/adapters/discord/tool-call-tracker.ts
|
|
@@ -264,7 +204,7 @@ var ToolCallTracker = class {
|
|
|
264
204
|
this.sendQueue = sendQueue;
|
|
265
205
|
}
|
|
266
206
|
sessions = /* @__PURE__ */ new Map();
|
|
267
|
-
async trackNewCall(sessionId, thread, tool) {
|
|
207
|
+
async trackNewCall(sessionId, thread, tool, verbosity = "medium") {
|
|
268
208
|
if (!this.sessions.has(sessionId)) {
|
|
269
209
|
this.sessions.set(sessionId, /* @__PURE__ */ new Map());
|
|
270
210
|
}
|
|
@@ -276,25 +216,28 @@ var ToolCallTracker = class {
|
|
|
276
216
|
message: void 0,
|
|
277
217
|
name: tool.name,
|
|
278
218
|
kind: tool.kind,
|
|
219
|
+
rawInput: tool.rawInput,
|
|
279
220
|
viewerLinks: tool.viewerLinks,
|
|
280
221
|
viewerFilePath: tool.viewerFilePath,
|
|
281
222
|
ready
|
|
282
223
|
};
|
|
283
224
|
this.sessions.get(sessionId).set(tool.id, state);
|
|
284
|
-
const content = formatToolCall(tool);
|
|
225
|
+
const content = formatToolCall(tool, verbosity);
|
|
285
226
|
try {
|
|
286
|
-
const msg = await this.sendQueue.enqueue(
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
);
|
|
227
|
+
const msg = await this.sendQueue.enqueue(() => thread.send({ content }), {
|
|
228
|
+
type: "other"
|
|
229
|
+
});
|
|
290
230
|
if (msg) state.message = msg;
|
|
291
231
|
} catch (err) {
|
|
292
|
-
log.warn(
|
|
232
|
+
log.warn(
|
|
233
|
+
{ err, toolId: tool.id },
|
|
234
|
+
"[ToolCallTracker] trackNewCall() send failed"
|
|
235
|
+
);
|
|
293
236
|
} finally {
|
|
294
237
|
resolveReady();
|
|
295
238
|
}
|
|
296
239
|
}
|
|
297
|
-
async updateCall(sessionId, update) {
|
|
240
|
+
async updateCall(sessionId, update, verbosity = "medium") {
|
|
298
241
|
const toolState = this.sessions.get(sessionId)?.get(update.id);
|
|
299
242
|
if (!toolState) return;
|
|
300
243
|
if (update.viewerLinks) toolState.viewerLinks = update.viewerLinks;
|
|
@@ -319,15 +262,15 @@ var ToolCallTracker = class {
|
|
|
319
262
|
...update,
|
|
320
263
|
name: toolState.name,
|
|
321
264
|
kind: toolState.kind,
|
|
265
|
+
rawInput: toolState.rawInput,
|
|
322
266
|
viewerLinks: toolState.viewerLinks,
|
|
323
267
|
viewerFilePath: toolState.viewerFilePath
|
|
324
268
|
};
|
|
325
|
-
const content = formatToolUpdate(merged);
|
|
269
|
+
const content = formatToolUpdate(merged, verbosity);
|
|
326
270
|
try {
|
|
327
|
-
await this.sendQueue.enqueue(
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
);
|
|
271
|
+
await this.sendQueue.enqueue(() => toolState.message.edit({ content }), {
|
|
272
|
+
type: "other"
|
|
273
|
+
});
|
|
331
274
|
} catch (err) {
|
|
332
275
|
log.warn(
|
|
333
276
|
{
|
|
@@ -470,7 +413,7 @@ var MessageDraft = class {
|
|
|
470
413
|
} catch {
|
|
471
414
|
}
|
|
472
415
|
}
|
|
473
|
-
const chunks =
|
|
416
|
+
const chunks = splitMessage2(this.buffer, MAX_DISPLAY_LENGTH);
|
|
474
417
|
for (let i = 0; i < chunks.length; i++) {
|
|
475
418
|
const content = chunks[i];
|
|
476
419
|
try {
|
|
@@ -1029,7 +972,7 @@ async function handleMenuButton(interaction, adapter) {
|
|
|
1029
972
|
try {
|
|
1030
973
|
switch (customId) {
|
|
1031
974
|
case "m:new": {
|
|
1032
|
-
const { handleNew: handleNew2 } = await import("./new-session-
|
|
975
|
+
const { handleNew: handleNew2 } = await import("./new-session-NHK7TOEW.js");
|
|
1033
976
|
await interaction.followUp({ content: "Use `/new` to create a new session.", ephemeral: true });
|
|
1034
977
|
break;
|
|
1035
978
|
}
|
|
@@ -1048,7 +991,7 @@ async function handleMenuButton(interaction, adapter) {
|
|
|
1048
991
|
break;
|
|
1049
992
|
}
|
|
1050
993
|
case "m:settings": {
|
|
1051
|
-
const { showSettingsInfo } = await import("./settings-
|
|
994
|
+
const { showSettingsInfo } = await import("./settings-6TF4WIGJ.js");
|
|
1052
995
|
await showSettingsInfo(interaction, adapter);
|
|
1053
996
|
break;
|
|
1054
997
|
}
|
|
@@ -1057,7 +1000,7 @@ async function handleMenuButton(interaction, adapter) {
|
|
|
1057
1000
|
break;
|
|
1058
1001
|
}
|
|
1059
1002
|
case "m:restart": {
|
|
1060
|
-
const { handleRestart: handleRestart2 } = await import("./admin-
|
|
1003
|
+
const { handleRestart: handleRestart2 } = await import("./admin-2HAFXQBG.js");
|
|
1061
1004
|
if (!adapter.core.requestRestart) {
|
|
1062
1005
|
await interaction.followUp({ content: "\u26A0\uFE0F Restart not available.", ephemeral: true });
|
|
1063
1006
|
} else {
|
|
@@ -1076,7 +1019,7 @@ async function handleMenuButton(interaction, adapter) {
|
|
|
1076
1019
|
break;
|
|
1077
1020
|
}
|
|
1078
1021
|
case "m:doctor": {
|
|
1079
|
-
const { runDoctorInline } = await import("./doctor-
|
|
1022
|
+
const { runDoctorInline } = await import("./doctor-HASEBMUD.js");
|
|
1080
1023
|
await runDoctorInline(interaction, adapter);
|
|
1081
1024
|
break;
|
|
1082
1025
|
}
|
|
@@ -1230,14 +1173,23 @@ async function handleSlashCommand(interaction, adapter) {
|
|
|
1230
1173
|
case "tts":
|
|
1231
1174
|
await handleTTS(interaction, adapter);
|
|
1232
1175
|
break;
|
|
1176
|
+
case "verbosity":
|
|
1177
|
+
await handleVerbosity(interaction, adapter);
|
|
1178
|
+
break;
|
|
1233
1179
|
default:
|
|
1234
1180
|
log.warn({ commandName }, "[discord-router] Unknown slash command");
|
|
1235
1181
|
if (!interaction.replied && !interaction.deferred) {
|
|
1236
|
-
await interaction.reply({
|
|
1182
|
+
await interaction.reply({
|
|
1183
|
+
content: `Unknown command: /${commandName}`,
|
|
1184
|
+
ephemeral: true
|
|
1185
|
+
});
|
|
1237
1186
|
}
|
|
1238
1187
|
}
|
|
1239
1188
|
} catch (err) {
|
|
1240
|
-
log.error(
|
|
1189
|
+
log.error(
|
|
1190
|
+
{ err, commandName },
|
|
1191
|
+
"[discord-router] Slash command handler failed"
|
|
1192
|
+
);
|
|
1241
1193
|
try {
|
|
1242
1194
|
const errMsg = `\u274C Command failed: ${err instanceof Error ? err.message : String(err)}`;
|
|
1243
1195
|
if (interaction.deferred) {
|
|
@@ -1264,12 +1216,20 @@ async function setupButtonCallbacks(interaction, adapter) {
|
|
|
1264
1216
|
const actionId = customId.slice(2);
|
|
1265
1217
|
const action = getAction(actionId);
|
|
1266
1218
|
if (!action) {
|
|
1267
|
-
await interaction.reply({
|
|
1219
|
+
await interaction.reply({
|
|
1220
|
+
content: "\u274C Action expired.",
|
|
1221
|
+
ephemeral: true
|
|
1222
|
+
});
|
|
1268
1223
|
return;
|
|
1269
1224
|
}
|
|
1270
1225
|
removeAction(actionId);
|
|
1271
1226
|
if (action.type === "new_session") {
|
|
1272
|
-
await executeNewSession(
|
|
1227
|
+
await executeNewSession(
|
|
1228
|
+
interaction,
|
|
1229
|
+
adapter,
|
|
1230
|
+
action.agent,
|
|
1231
|
+
action.workspace
|
|
1232
|
+
);
|
|
1273
1233
|
} else if (action.type === "cancel_session") {
|
|
1274
1234
|
await executeCancelSession(interaction, adapter);
|
|
1275
1235
|
}
|
|
@@ -1335,7 +1295,7 @@ async function setupButtonCallbacks(interaction, adapter) {
|
|
|
1335
1295
|
}
|
|
1336
1296
|
}
|
|
1337
1297
|
async function executeNewSession(interaction, adapter, agentName, workspace) {
|
|
1338
|
-
const { executeNewSession: doExecute } = await import("./new-session-
|
|
1298
|
+
const { executeNewSession: doExecute } = await import("./new-session-NHK7TOEW.js");
|
|
1339
1299
|
await doExecute(interaction, adapter, agentName, workspace);
|
|
1340
1300
|
}
|
|
1341
1301
|
async function executeCancelSession(interaction, adapter) {
|
|
@@ -1345,13 +1305,21 @@ async function executeCancelSession(interaction, adapter) {
|
|
|
1345
1305
|
|
|
1346
1306
|
// src/adapters/discord/commands/index.ts
|
|
1347
1307
|
var SLASH_COMMANDS = [
|
|
1348
|
-
new SlashCommandBuilder().setName("new").setDescription("Create a new agent session").addStringOption(
|
|
1349
|
-
|
|
1308
|
+
new SlashCommandBuilder().setName("new").setDescription("Create a new agent session").addStringOption(
|
|
1309
|
+
(o) => o.setName("agent").setDescription("Agent to use").setRequired(false)
|
|
1310
|
+
).addStringOption(
|
|
1311
|
+
(o) => o.setName("workspace").setDescription("Workspace directory").setRequired(false)
|
|
1312
|
+
),
|
|
1313
|
+
new SlashCommandBuilder().setName("newchat").setDescription(
|
|
1314
|
+
"New chat in current thread, inheriting agent and workspace"
|
|
1315
|
+
),
|
|
1350
1316
|
new SlashCommandBuilder().setName("cancel").setDescription("Cancel the current session"),
|
|
1351
1317
|
new SlashCommandBuilder().setName("status").setDescription("Show session or global status"),
|
|
1352
1318
|
new SlashCommandBuilder().setName("sessions").setDescription("List all sessions"),
|
|
1353
1319
|
new SlashCommandBuilder().setName("agents").setDescription("List available agents"),
|
|
1354
|
-
new SlashCommandBuilder().setName("install").setDescription("Install an agent by name").addStringOption(
|
|
1320
|
+
new SlashCommandBuilder().setName("install").setDescription("Install an agent by name").addStringOption(
|
|
1321
|
+
(o) => o.setName("name").setDescription("Agent name to install").setRequired(true)
|
|
1322
|
+
),
|
|
1355
1323
|
new SlashCommandBuilder().setName("menu").setDescription("Show the action menu"),
|
|
1356
1324
|
new SlashCommandBuilder().setName("help").setDescription("Show help"),
|
|
1357
1325
|
new SlashCommandBuilder().setName("dangerous").setDescription("Toggle dangerous mode for the current session"),
|
|
@@ -1363,9 +1331,15 @@ var SLASH_COMMANDS = [
|
|
|
1363
1331
|
new SlashCommandBuilder().setName("handoff").setDescription("Generate a terminal resume command for this session"),
|
|
1364
1332
|
new SlashCommandBuilder().setName("clear").setDescription("Reset the assistant session"),
|
|
1365
1333
|
new SlashCommandBuilder().setName("tts").setDescription("Toggle Text to Speech for the current session").addStringOption(
|
|
1366
|
-
(o) => o.setName("mode").setDescription(
|
|
1367
|
-
|
|
1368
|
-
|
|
1334
|
+
(o) => o.setName("mode").setDescription(
|
|
1335
|
+
"on = persistent, off = disable, empty = next message only"
|
|
1336
|
+
).setRequired(false).addChoices({ name: "on", value: "on" }, { name: "off", value: "off" })
|
|
1337
|
+
),
|
|
1338
|
+
new SlashCommandBuilder().setName("verbosity").setDescription("Set display verbosity level").addStringOption(
|
|
1339
|
+
(o) => o.setName("level").setDescription("Verbosity level").setRequired(true).addChoices(
|
|
1340
|
+
{ name: "low \u2014 minimal, title only", value: "low" },
|
|
1341
|
+
{ name: "medium \u2014 balanced (default)", value: "medium" },
|
|
1342
|
+
{ name: "high \u2014 full detail with content", value: "high" }
|
|
1369
1343
|
)
|
|
1370
1344
|
)
|
|
1371
1345
|
];
|
|
@@ -1584,6 +1558,9 @@ var DiscordAdapter = class extends ChannelAdapter {
|
|
|
1584
1558
|
skillManager;
|
|
1585
1559
|
permissionHandler;
|
|
1586
1560
|
sessionTrackers = /* @__PURE__ */ new Map();
|
|
1561
|
+
get verbosity() {
|
|
1562
|
+
return this.discordConfig.displayVerbosity ?? "medium";
|
|
1563
|
+
}
|
|
1587
1564
|
guild;
|
|
1588
1565
|
forumChannel;
|
|
1589
1566
|
notificationChannel;
|
|
@@ -1870,19 +1847,24 @@ var DiscordAdapter = class extends ChannelAdapter {
|
|
|
1870
1847
|
this.draftManager.appendText(ctx.sessionId, content.text);
|
|
1871
1848
|
},
|
|
1872
1849
|
onToolCall: async (ctx, content) => {
|
|
1850
|
+
const meta = content.metadata ?? {};
|
|
1851
|
+
const toolName = String(meta.name ?? content.text ?? "Tool");
|
|
1852
|
+
const toolKind = String(meta.kind ?? "other");
|
|
1853
|
+
const noiseAction = evaluateNoise(toolName, toolKind, meta.rawInput);
|
|
1854
|
+
if (noiseAction === "hide" && this.verbosity !== "high") return;
|
|
1855
|
+
if (noiseAction === "collapse" && this.verbosity === "low") return;
|
|
1873
1856
|
const tracker = this.getOrCreateTracker(ctx.sessionId, ctx.thread);
|
|
1874
1857
|
await tracker.onToolCall();
|
|
1875
1858
|
await this.draftManager.finalize(ctx.sessionId, ctx.thread, ctx.isAssistant);
|
|
1876
|
-
const meta = content.metadata ?? {};
|
|
1877
1859
|
await this.toolTracker.trackNewCall(ctx.sessionId, ctx.thread, {
|
|
1878
1860
|
id: String(meta.id ?? ""),
|
|
1879
|
-
name:
|
|
1861
|
+
name: toolName,
|
|
1880
1862
|
kind: meta.kind,
|
|
1881
1863
|
status: String(meta.status ?? "running"),
|
|
1882
1864
|
content: meta.content,
|
|
1883
1865
|
viewerLinks: meta.viewerLinks,
|
|
1884
1866
|
viewerFilePath: meta.viewerFilePath
|
|
1885
|
-
});
|
|
1867
|
+
}, this.verbosity);
|
|
1886
1868
|
},
|
|
1887
1869
|
onToolUpdate: async (ctx, content) => {
|
|
1888
1870
|
const meta = content.metadata ?? {};
|
|
@@ -1894,7 +1876,7 @@ var DiscordAdapter = class extends ChannelAdapter {
|
|
|
1894
1876
|
content: meta.content,
|
|
1895
1877
|
viewerLinks: meta.viewerLinks,
|
|
1896
1878
|
viewerFilePath: meta.viewerFilePath
|
|
1897
|
-
});
|
|
1879
|
+
}, this.verbosity);
|
|
1898
1880
|
},
|
|
1899
1881
|
onPlan: async (ctx, content) => {
|
|
1900
1882
|
const entries = content.metadata?.entries ?? [];
|
|
@@ -2000,7 +1982,7 @@ var DiscordAdapter = class extends ChannelAdapter {
|
|
|
2000
1982
|
await ensureUnarchived(thread);
|
|
2001
1983
|
const isAssistant = this.assistantSession != null && sessionId === this.assistantSession.id;
|
|
2002
1984
|
const ctx = { sessionId, thread, isAssistant };
|
|
2003
|
-
await dispatchMessage(this.messageHandlers, ctx, content);
|
|
1985
|
+
await dispatchMessage(this.messageHandlers, ctx, content, this.verbosity);
|
|
2004
1986
|
}
|
|
2005
1987
|
// ─── sendPermissionRequest ────────────────────────────────────────────────
|
|
2006
1988
|
async sendPermissionRequest(sessionId, request) {
|
|
@@ -2097,4 +2079,4 @@ ${notification.deepLink}`;
|
|
|
2097
2079
|
export {
|
|
2098
2080
|
DiscordAdapter
|
|
2099
2081
|
};
|
|
2100
|
-
//# sourceMappingURL=discord-
|
|
2082
|
+
//# sourceMappingURL=discord-VOHXRTCH.js.map
|