@openacp/cli 0.6.8 → 0.6.10
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/README.md +100 -154
- package/dist/{action-detect-6M5GCGAU.js → action-detect-P7ZE4NEM.js} +2 -1
- package/dist/{adapter-7GY3N4ZH.js → adapter-ZOANORGM.js} +8 -7
- package/dist/{adapter-7GY3N4ZH.js.map → adapter-ZOANORGM.js.map} +1 -1
- package/dist/{admin-2HAFXQBG.js → admin-6SYB6XCZ.js} +2 -1
- package/dist/{agent-catalog-SBZQRYOD.js → agent-catalog-FC3HGDEQ.js} +2 -1
- package/dist/{agent-dependencies-QY5QSULV.js → agent-dependencies-4OWBMZWZ.js} +2 -1
- package/dist/{agent-registry-KZFSIRSJ.js → agent-registry-WT4NXPYG.js} +2 -1
- package/dist/{agent-store-CGE4G6PA.js → agent-store-VZLFPTZU.js} +2 -1
- package/dist/{agents-QJPHNWK2.js → agents-QO7DKARJ.js} +2 -1
- package/dist/{api-client-BH2JFHQW.js → api-client-CFQT5U7D.js} +2 -1
- package/dist/{autostart-6M3FZAKW.js → autostart-X33OGMX6.js} +2 -1
- package/dist/{chunk-RHE2JSYE.js → chunk-2HMQOC7N.js} +2 -2
- package/dist/{chunk-SHHMBGB3.js → chunk-33RP6K2O.js} +2 -2
- package/dist/{chunk-5SXG7X5D.js → chunk-CS3KCJ5D.js} +103 -55
- package/dist/chunk-CS3KCJ5D.js.map +1 -0
- package/dist/{chunk-47B7GNOE.js → chunk-LCRLAV4G.js} +541 -191
- package/dist/chunk-LCRLAV4G.js.map +1 -0
- package/dist/{chunk-LO4Y5WQ7.js → chunk-LGP2YGRL.js} +7 -7
- package/dist/{chunk-LO4Y5WQ7.js.map → chunk-LGP2YGRL.js.map} +1 -1
- package/dist/{chunk-MZXWCDBU.js → chunk-MKHUZLII.js} +4 -4
- package/dist/chunk-MKHUZLII.js.map +1 -0
- package/dist/{chunk-YEOY2PBJ.js → chunk-NVPG6JCL.js} +3 -3
- package/dist/{chunk-JUYDFUSN.js → chunk-OWP7RZ62.js} +38 -14
- package/dist/chunk-OWP7RZ62.js.map +1 -0
- package/dist/{chunk-5OVPEDUB.js → chunk-VOIJ6OY4.js} +2 -2
- package/dist/chunk-VUNV25KB.js +16 -0
- package/dist/{chunk-2J2RBYWN.js → chunk-WTZDAYZX.js} +2 -2
- package/dist/cli.js +53 -47
- package/dist/cli.js.map +1 -1
- package/dist/{config-CQAS6YHR.js → config-6S355X75.js} +3 -2
- package/dist/config-editor-QQTZMWGD.js +13 -0
- package/dist/{config-registry-HDXFES2D.js → config-registry-AHYI4MYL.js} +2 -1
- package/dist/{daemon-K33ZPSEZ.js → daemon-4CS6HMB5.js} +4 -3
- package/dist/{discord-VOHXRTCH.js → discord-OMC52Y54.js} +251 -94
- package/dist/discord-OMC52Y54.js.map +1 -0
- package/dist/dist-UHQK5CXN.js +21151 -0
- package/dist/dist-UHQK5CXN.js.map +1 -0
- package/dist/doctor-HZZ5BSHB.js +10 -0
- package/dist/{doctor-HASEBMUD.js → doctor-OLYBO3V3.js} +5 -4
- package/dist/index.js +11 -10
- package/dist/{install-cloudflared-FSILDS5J.js → install-cloudflared-Z7VCGOVG.js} +2 -1
- package/dist/{install-cloudflared-FSILDS5J.js.map → install-cloudflared-Z7VCGOVG.js.map} +1 -1
- package/dist/{install-jq-P6RUBKPV.js → install-jq-HUYSQWKR.js} +2 -1
- package/dist/{install-jq-P6RUBKPV.js.map → install-jq-HUYSQWKR.js.map} +1 -1
- package/dist/{integrate-O4OCR4SN.js → integrate-PNEHRY2I.js} +2 -1
- package/dist/{integrate-O4OCR4SN.js.map → integrate-PNEHRY2I.js.map} +1 -1
- package/dist/{log-RCVBXLTN.js → log-NXABYJTT.js} +2 -1
- package/dist/{main-DUXVFTDD.js → main-XOZCLFUK.js} +21 -20
- package/dist/main-XOZCLFUK.js.map +1 -0
- package/dist/{menu-XR2GET2B.js → menu-YY5MKHEK.js} +2 -1
- package/dist/{new-session-NHK7TOEW.js → new-session-FEO4J4VU.js} +2 -1
- package/dist/{post-upgrade-62LUHDJO.js → post-upgrade-CJG5I7M2.js} +6 -5
- package/dist/{post-upgrade-62LUHDJO.js.map → post-upgrade-CJG5I7M2.js.map} +1 -1
- package/dist/{session-O6ZPLJIZ.js → session-IUSI7P5S.js} +2 -1
- package/dist/{settings-6TF4WIGJ.js → settings-RQPAM4KC.js} +2 -1
- package/dist/{setup-RJCEB6FS.js → setup-XHS4OMPM.js} +6 -3
- package/dist/{suggest-RST5VOHB.js → suggest-7D6B542M.js} +3 -1
- package/dist/{suggest-RST5VOHB.js.map → suggest-7D6B542M.js.map} +1 -1
- package/dist/{tunnel-service-NJJH4I26.js → tunnel-service-CJLUH6SZ.js} +3 -2
- package/dist/{tunnel-service-NJJH4I26.js.map → tunnel-service-CJLUH6SZ.js.map} +1 -1
- package/dist/{version-AXXV6IV2.js → version-NQZBM5M7.js} +2 -1
- package/dist/version-NQZBM5M7.js.map +1 -0
- package/package.json +15 -1
- package/dist/chunk-47B7GNOE.js.map +0 -1
- package/dist/chunk-5SXG7X5D.js.map +0 -1
- package/dist/chunk-JUYDFUSN.js.map +0 -1
- package/dist/chunk-MZXWCDBU.js.map +0 -1
- package/dist/config-editor-37BM56WF.js +0 -12
- package/dist/discord-VOHXRTCH.js.map +0 -1
- package/dist/doctor-W4VGLDVM.js +0 -9
- package/dist/main-DUXVFTDD.js.map +0 -1
- /package/dist/{action-detect-6M5GCGAU.js.map → action-detect-P7ZE4NEM.js.map} +0 -0
- /package/dist/{admin-2HAFXQBG.js.map → admin-6SYB6XCZ.js.map} +0 -0
- /package/dist/{agent-catalog-SBZQRYOD.js.map → agent-catalog-FC3HGDEQ.js.map} +0 -0
- /package/dist/{agent-dependencies-QY5QSULV.js.map → agent-dependencies-4OWBMZWZ.js.map} +0 -0
- /package/dist/{agent-registry-KZFSIRSJ.js.map → agent-registry-WT4NXPYG.js.map} +0 -0
- /package/dist/{agent-store-CGE4G6PA.js.map → agent-store-VZLFPTZU.js.map} +0 -0
- /package/dist/{agents-QJPHNWK2.js.map → agents-QO7DKARJ.js.map} +0 -0
- /package/dist/{api-client-BH2JFHQW.js.map → api-client-CFQT5U7D.js.map} +0 -0
- /package/dist/{autostart-6M3FZAKW.js.map → autostart-X33OGMX6.js.map} +0 -0
- /package/dist/{chunk-RHE2JSYE.js.map → chunk-2HMQOC7N.js.map} +0 -0
- /package/dist/{chunk-SHHMBGB3.js.map → chunk-33RP6K2O.js.map} +0 -0
- /package/dist/{chunk-YEOY2PBJ.js.map → chunk-NVPG6JCL.js.map} +0 -0
- /package/dist/{chunk-5OVPEDUB.js.map → chunk-VOIJ6OY4.js.map} +0 -0
- /package/dist/{config-CQAS6YHR.js.map → chunk-VUNV25KB.js.map} +0 -0
- /package/dist/{chunk-2J2RBYWN.js.map → chunk-WTZDAYZX.js.map} +0 -0
- /package/dist/{config-editor-37BM56WF.js.map → config-6S355X75.js.map} +0 -0
- /package/dist/{config-registry-HDXFES2D.js.map → config-editor-QQTZMWGD.js.map} +0 -0
- /package/dist/{daemon-K33ZPSEZ.js.map → config-registry-AHYI4MYL.js.map} +0 -0
- /package/dist/{doctor-HASEBMUD.js.map → daemon-4CS6HMB5.js.map} +0 -0
- /package/dist/{doctor-W4VGLDVM.js.map → doctor-HZZ5BSHB.js.map} +0 -0
- /package/dist/{log-RCVBXLTN.js.map → doctor-OLYBO3V3.js.map} +0 -0
- /package/dist/{menu-XR2GET2B.js.map → log-NXABYJTT.js.map} +0 -0
- /package/dist/{new-session-NHK7TOEW.js.map → menu-YY5MKHEK.js.map} +0 -0
- /package/dist/{session-O6ZPLJIZ.js.map → new-session-FEO4J4VU.js.map} +0 -0
- /package/dist/{settings-6TF4WIGJ.js.map → session-IUSI7P5S.js.map} +0 -0
- /package/dist/{setup-RJCEB6FS.js.map → settings-RQPAM4KC.js.map} +0 -0
- /package/dist/{version-AXXV6IV2.js.map → setup-XHS4OMPM.js.map} +0 -0
|
@@ -44,10 +44,9 @@ import {
|
|
|
44
44
|
import {
|
|
45
45
|
handleDoctor,
|
|
46
46
|
handleDoctorButton
|
|
47
|
-
} from "./chunk-
|
|
47
|
+
} from "./chunk-2HMQOC7N.js";
|
|
48
48
|
import {
|
|
49
49
|
PRODUCT_GUIDE,
|
|
50
|
-
STATUS_ICONS,
|
|
51
50
|
dispatchMessage,
|
|
52
51
|
evaluateNoise,
|
|
53
52
|
extractContentText,
|
|
@@ -55,22 +54,28 @@ import {
|
|
|
55
54
|
formatToolSummary,
|
|
56
55
|
formatToolTitle,
|
|
57
56
|
progressBar,
|
|
57
|
+
resolveToolIcon,
|
|
58
58
|
splitMessage,
|
|
59
59
|
stripCodeFences,
|
|
60
60
|
truncateContent
|
|
61
|
-
} from "./chunk-
|
|
62
|
-
import "./chunk-YEOY2PBJ.js";
|
|
61
|
+
} from "./chunk-OWP7RZ62.js";
|
|
63
62
|
import {
|
|
64
63
|
ChannelAdapter
|
|
65
64
|
} from "./chunk-LBIKITQT.js";
|
|
65
|
+
import "./chunk-NVPG6JCL.js";
|
|
66
66
|
import "./chunk-JHYXKVV2.js";
|
|
67
|
-
import "./chunk-
|
|
67
|
+
import "./chunk-33RP6K2O.js";
|
|
68
68
|
import {
|
|
69
69
|
log
|
|
70
70
|
} from "./chunk-GAK6PIBW.js";
|
|
71
|
+
import "./chunk-VUNV25KB.js";
|
|
71
72
|
|
|
72
73
|
// src/adapters/discord/adapter.ts
|
|
73
|
-
import {
|
|
74
|
+
import {
|
|
75
|
+
Client,
|
|
76
|
+
GatewayIntentBits,
|
|
77
|
+
MessageFlags
|
|
78
|
+
} from "discord.js";
|
|
74
79
|
|
|
75
80
|
// src/adapters/discord/send-queue.ts
|
|
76
81
|
var DiscordSendQueue = class {
|
|
@@ -151,27 +156,47 @@ function formatViewerLinks(links, filePath) {
|
|
|
151
156
|
[View diff${fileName ? ` \u2014 ${fileName}` : ""}](${links.diff})`;
|
|
152
157
|
return text;
|
|
153
158
|
}
|
|
154
|
-
function
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
text += formatViewerLinks(tool.viewerLinks, tool.viewerFilePath);
|
|
160
|
-
if (verbosity === "high" || verbosity === "medium" && !tool.viewerLinks) {
|
|
161
|
-
const details = stripCodeFences(extractContentText(tool.content));
|
|
162
|
-
if (details) {
|
|
159
|
+
function formatHighDetails(rawInput, content, maxLen) {
|
|
160
|
+
let text = "";
|
|
161
|
+
if (rawInput) {
|
|
162
|
+
const inputStr = typeof rawInput === "string" ? rawInput : JSON.stringify(rawInput, null, 2);
|
|
163
|
+
if (inputStr && inputStr !== "{}") {
|
|
163
164
|
text += `
|
|
165
|
+
**Input:**
|
|
164
166
|
\`\`\`
|
|
165
|
-
${truncateContent(
|
|
167
|
+
${truncateContent(inputStr, maxLen)}
|
|
166
168
|
\`\`\``;
|
|
167
169
|
}
|
|
168
170
|
}
|
|
171
|
+
const details = stripCodeFences(extractContentText(content));
|
|
172
|
+
if (details) {
|
|
173
|
+
text += `
|
|
174
|
+
**Output:**
|
|
175
|
+
\`\`\`
|
|
176
|
+
${truncateContent(details, maxLen)}
|
|
177
|
+
\`\`\``;
|
|
178
|
+
}
|
|
179
|
+
return text;
|
|
180
|
+
}
|
|
181
|
+
function formatToolCall(tool, verbosity = "medium") {
|
|
182
|
+
const si = resolveToolIcon(tool);
|
|
183
|
+
const name = tool.name || "Tool";
|
|
184
|
+
const label = verbosity === "low" ? formatToolTitle(name, tool.rawInput, tool.displayTitle) : formatToolSummary(name, tool.rawInput, tool.displaySummary);
|
|
185
|
+
let text = `${si} **${label}**`;
|
|
186
|
+
text += formatViewerLinks(tool.viewerLinks, tool.viewerFilePath);
|
|
187
|
+
if (verbosity === "high") {
|
|
188
|
+
text += formatHighDetails(tool.rawInput, tool.content, 500);
|
|
189
|
+
}
|
|
169
190
|
return text;
|
|
170
191
|
}
|
|
171
192
|
function formatToolUpdate(update, verbosity = "medium") {
|
|
172
193
|
return formatToolCall(update, verbosity);
|
|
173
194
|
}
|
|
174
|
-
function formatPlan(entries) {
|
|
195
|
+
function formatPlan(entries, verbosity = "medium") {
|
|
196
|
+
if (verbosity === "medium") {
|
|
197
|
+
const done = entries.filter((e) => e.status === "completed").length;
|
|
198
|
+
return `\u{1F4CB} **Plan:** ${done}/${entries.length} steps completed`;
|
|
199
|
+
}
|
|
175
200
|
const statusIcon = {
|
|
176
201
|
pending: "\u23F3",
|
|
177
202
|
in_progress: "\u{1F504}",
|
|
@@ -183,16 +208,23 @@ function formatPlan(entries) {
|
|
|
183
208
|
return `**Plan:**
|
|
184
209
|
${lines.join("\n")}`;
|
|
185
210
|
}
|
|
186
|
-
function formatUsage(usage) {
|
|
187
|
-
const { tokensUsed, contextSize } = usage;
|
|
211
|
+
function formatUsage(usage, verbosity = "medium") {
|
|
212
|
+
const { tokensUsed, contextSize, cost } = usage;
|
|
188
213
|
if (tokensUsed == null) return "\u{1F4CA} Usage data unavailable";
|
|
214
|
+
if (verbosity === "medium") {
|
|
215
|
+
const costStr = cost != null ? ` \xB7 $${cost.toFixed(2)}` : "";
|
|
216
|
+
return `\u{1F4CA} ${formatTokens(tokensUsed)} tokens${costStr}`;
|
|
217
|
+
}
|
|
189
218
|
if (contextSize == null) return `\u{1F4CA} ${formatTokens(tokensUsed)} tokens`;
|
|
190
219
|
const ratio = tokensUsed / contextSize;
|
|
191
220
|
const pct = Math.round(ratio * 100);
|
|
192
221
|
const bar = progressBar(ratio);
|
|
193
222
|
const emoji = pct >= 85 ? "\u26A0\uFE0F" : "\u{1F4CA}";
|
|
194
|
-
|
|
223
|
+
let text = `${emoji} ${formatTokens(tokensUsed)} / ${formatTokens(contextSize)} tokens
|
|
195
224
|
${bar} ${pct}%`;
|
|
225
|
+
if (cost != null) text += `
|
|
226
|
+
\u{1F4B0} $${cost.toFixed(2)}`;
|
|
227
|
+
return text;
|
|
196
228
|
}
|
|
197
229
|
function splitMessage2(text, maxLength = 1800) {
|
|
198
230
|
return splitMessage(text, maxLength);
|
|
@@ -547,8 +579,8 @@ var UsageMessage = class {
|
|
|
547
579
|
this.sendQueue = sendQueue;
|
|
548
580
|
}
|
|
549
581
|
message;
|
|
550
|
-
async send(usage) {
|
|
551
|
-
const text = formatUsage(usage);
|
|
582
|
+
async send(usage, verbosity = "medium") {
|
|
583
|
+
const text = formatUsage(usage, verbosity);
|
|
552
584
|
const embed = new EmbedBuilder().setDescription(text);
|
|
553
585
|
try {
|
|
554
586
|
if (this.message) {
|
|
@@ -572,10 +604,7 @@ var UsageMessage = class {
|
|
|
572
604
|
const msg = this.message;
|
|
573
605
|
this.message = void 0;
|
|
574
606
|
try {
|
|
575
|
-
await this.sendQueue.enqueue(
|
|
576
|
-
() => msg.delete(),
|
|
577
|
-
{ type: "other" }
|
|
578
|
-
);
|
|
607
|
+
await this.sendQueue.enqueue(() => msg.delete(), { type: "other" });
|
|
579
608
|
} catch (err) {
|
|
580
609
|
log.warn({ err }, "[UsageMessage] delete() failed");
|
|
581
610
|
}
|
|
@@ -592,6 +621,10 @@ var PlanCard = class {
|
|
|
592
621
|
latestEntries;
|
|
593
622
|
lastSentText;
|
|
594
623
|
flushTimer;
|
|
624
|
+
verbosity = "medium";
|
|
625
|
+
setVerbosity(v) {
|
|
626
|
+
this.verbosity = v;
|
|
627
|
+
}
|
|
595
628
|
update(entries) {
|
|
596
629
|
this.latestEntries = entries;
|
|
597
630
|
if (this.flushTimer) clearTimeout(this.flushTimer);
|
|
@@ -620,7 +653,7 @@ var PlanCard = class {
|
|
|
620
653
|
}
|
|
621
654
|
async _flush() {
|
|
622
655
|
if (!this.latestEntries) return;
|
|
623
|
-
const text = formatPlan(this.latestEntries);
|
|
656
|
+
const text = formatPlan(this.latestEntries, this.verbosity);
|
|
624
657
|
if (this.message && text === this.lastSentText) return;
|
|
625
658
|
this.lastSentText = text;
|
|
626
659
|
const embed = new EmbedBuilder().setDescription(text);
|
|
@@ -674,14 +707,15 @@ var ActivityTracker = class {
|
|
|
674
707
|
this.thinking.dismiss();
|
|
675
708
|
this.thinking.reset();
|
|
676
709
|
}
|
|
677
|
-
async onPlan(entries) {
|
|
710
|
+
async onPlan(entries, verbosity) {
|
|
678
711
|
await this._firstEventGuard();
|
|
679
712
|
this.thinking.dismiss();
|
|
680
713
|
this.hasPlanCard = true;
|
|
714
|
+
if (verbosity) this.planCard.setVerbosity(verbosity);
|
|
681
715
|
this.planCard.update(entries);
|
|
682
716
|
}
|
|
683
|
-
async sendUsage(usage) {
|
|
684
|
-
await this.usage.send(usage);
|
|
717
|
+
async sendUsage(usage, verbosity = "medium") {
|
|
718
|
+
await this.usage.send(usage, verbosity);
|
|
685
719
|
}
|
|
686
720
|
async cleanup() {
|
|
687
721
|
this.thinking.dismiss();
|
|
@@ -972,12 +1006,12 @@ async function handleMenuButton(interaction, adapter) {
|
|
|
972
1006
|
try {
|
|
973
1007
|
switch (customId) {
|
|
974
1008
|
case "m:new": {
|
|
975
|
-
const { handleNew: handleNew2 } = await import("./new-session-
|
|
1009
|
+
const { handleNew: handleNew2 } = await import("./new-session-FEO4J4VU.js");
|
|
976
1010
|
await interaction.followUp({ content: "Use `/new` to create a new session.", ephemeral: true });
|
|
977
1011
|
break;
|
|
978
1012
|
}
|
|
979
1013
|
case "m:sessions": {
|
|
980
|
-
const { handleSessions: handleSessions2 } = await import("./session-
|
|
1014
|
+
const { handleSessions: handleSessions2 } = await import("./session-IUSI7P5S.js");
|
|
981
1015
|
await showSessionsList(interaction, adapter);
|
|
982
1016
|
break;
|
|
983
1017
|
}
|
|
@@ -986,12 +1020,12 @@ async function handleMenuButton(interaction, adapter) {
|
|
|
986
1020
|
break;
|
|
987
1021
|
}
|
|
988
1022
|
case "m:agents": {
|
|
989
|
-
const { showAgentsList } = await import("./agents-
|
|
1023
|
+
const { showAgentsList } = await import("./agents-QO7DKARJ.js");
|
|
990
1024
|
await showAgentsList(interaction, adapter);
|
|
991
1025
|
break;
|
|
992
1026
|
}
|
|
993
1027
|
case "m:settings": {
|
|
994
|
-
const { showSettingsInfo } = await import("./settings-
|
|
1028
|
+
const { showSettingsInfo } = await import("./settings-RQPAM4KC.js");
|
|
995
1029
|
await showSettingsInfo(interaction, adapter);
|
|
996
1030
|
break;
|
|
997
1031
|
}
|
|
@@ -1000,7 +1034,7 @@ async function handleMenuButton(interaction, adapter) {
|
|
|
1000
1034
|
break;
|
|
1001
1035
|
}
|
|
1002
1036
|
case "m:restart": {
|
|
1003
|
-
const { handleRestart: handleRestart2 } = await import("./admin-
|
|
1037
|
+
const { handleRestart: handleRestart2 } = await import("./admin-6SYB6XCZ.js");
|
|
1004
1038
|
if (!adapter.core.requestRestart) {
|
|
1005
1039
|
await interaction.followUp({ content: "\u26A0\uFE0F Restart not available.", ephemeral: true });
|
|
1006
1040
|
} else {
|
|
@@ -1019,7 +1053,7 @@ async function handleMenuButton(interaction, adapter) {
|
|
|
1019
1053
|
break;
|
|
1020
1054
|
}
|
|
1021
1055
|
case "m:doctor": {
|
|
1022
|
-
const { runDoctorInline } = await import("./doctor-
|
|
1056
|
+
const { runDoctorInline } = await import("./doctor-OLYBO3V3.js");
|
|
1023
1057
|
await runDoctorInline(interaction, adapter);
|
|
1024
1058
|
break;
|
|
1025
1059
|
}
|
|
@@ -1212,7 +1246,7 @@ async function setupButtonCallbacks(interaction, adapter) {
|
|
|
1212
1246
|
return;
|
|
1213
1247
|
}
|
|
1214
1248
|
if (customId.startsWith("a:")) {
|
|
1215
|
-
const { getAction, removeAction } = await import("./action-detect-
|
|
1249
|
+
const { getAction, removeAction } = await import("./action-detect-P7ZE4NEM.js");
|
|
1216
1250
|
const actionId = customId.slice(2);
|
|
1217
1251
|
const action = getAction(actionId);
|
|
1218
1252
|
if (!action) {
|
|
@@ -1295,11 +1329,11 @@ async function setupButtonCallbacks(interaction, adapter) {
|
|
|
1295
1329
|
}
|
|
1296
1330
|
}
|
|
1297
1331
|
async function executeNewSession(interaction, adapter, agentName, workspace) {
|
|
1298
|
-
const { executeNewSession: doExecute } = await import("./new-session-
|
|
1332
|
+
const { executeNewSession: doExecute } = await import("./new-session-FEO4J4VU.js");
|
|
1299
1333
|
await doExecute(interaction, adapter, agentName, workspace);
|
|
1300
1334
|
}
|
|
1301
1335
|
async function executeCancelSession(interaction, adapter) {
|
|
1302
|
-
const { executeCancelSession: doCancel } = await import("./session-
|
|
1336
|
+
const { executeCancelSession: doCancel } = await import("./session-IUSI7P5S.js");
|
|
1303
1337
|
await doCancel(interaction, adapter);
|
|
1304
1338
|
}
|
|
1305
1339
|
|
|
@@ -1582,7 +1616,10 @@ var DiscordAdapter = class extends ChannelAdapter {
|
|
|
1582
1616
|
this.draftManager = new DraftManager(this.sendQueue);
|
|
1583
1617
|
this.fileService = core.fileService;
|
|
1584
1618
|
this.client.rest.on("rateLimited", (info) => {
|
|
1585
|
-
log.warn(
|
|
1619
|
+
log.warn(
|
|
1620
|
+
{ route: info.route, timeToReset: info.timeToReset },
|
|
1621
|
+
"[DiscordAdapter] Rate limited"
|
|
1622
|
+
);
|
|
1586
1623
|
this.sendQueue.onRateLimited();
|
|
1587
1624
|
});
|
|
1588
1625
|
}
|
|
@@ -1591,13 +1628,18 @@ var DiscordAdapter = class extends ChannelAdapter {
|
|
|
1591
1628
|
return new Promise((resolve, reject) => {
|
|
1592
1629
|
this.client.once("ready", async () => {
|
|
1593
1630
|
try {
|
|
1594
|
-
log.info(
|
|
1631
|
+
log.info(
|
|
1632
|
+
{ guildId: this.discordConfig.guildId },
|
|
1633
|
+
"[DiscordAdapter] Client ready, initializing..."
|
|
1634
|
+
);
|
|
1595
1635
|
const guild = this.client.guilds.cache.get(this.discordConfig.guildId) ?? await this.client.guilds.fetch(this.discordConfig.guildId).catch(() => null);
|
|
1596
1636
|
if (!guild) {
|
|
1597
1637
|
throw new Error(`Guild not found: ${this.discordConfig.guildId}`);
|
|
1598
1638
|
}
|
|
1599
1639
|
this.guild = guild;
|
|
1600
|
-
const saveConfig = (updates) => this.core.configManager.save(
|
|
1640
|
+
const saveConfig = (updates) => this.core.configManager.save(
|
|
1641
|
+
updates
|
|
1642
|
+
);
|
|
1601
1643
|
const { forumChannel, notificationChannel } = await ensureForums(
|
|
1602
1644
|
guild,
|
|
1603
1645
|
{
|
|
@@ -1608,7 +1650,10 @@ var DiscordAdapter = class extends ChannelAdapter {
|
|
|
1608
1650
|
);
|
|
1609
1651
|
this.forumChannel = forumChannel;
|
|
1610
1652
|
this.notificationChannel = notificationChannel;
|
|
1611
|
-
this.skillManager = new SkillCommandManager(
|
|
1653
|
+
this.skillManager = new SkillCommandManager(
|
|
1654
|
+
this.sendQueue,
|
|
1655
|
+
this.core.sessionManager
|
|
1656
|
+
);
|
|
1612
1657
|
this.permissionHandler = new PermissionHandler(
|
|
1613
1658
|
guild.id,
|
|
1614
1659
|
(sessionId) => this.core.sessionManager.getSession(sessionId),
|
|
@@ -1621,7 +1666,10 @@ var DiscordAdapter = class extends ChannelAdapter {
|
|
|
1621
1666
|
try {
|
|
1622
1667
|
await this.notificationChannel.send(welcomeMsg);
|
|
1623
1668
|
} catch (err) {
|
|
1624
|
-
log.warn(
|
|
1669
|
+
log.warn(
|
|
1670
|
+
{ err },
|
|
1671
|
+
"[DiscordAdapter] Failed to send welcome message"
|
|
1672
|
+
);
|
|
1625
1673
|
}
|
|
1626
1674
|
await this.setupAssistant();
|
|
1627
1675
|
log.info("[DiscordAdapter] Initialization complete");
|
|
@@ -1640,7 +1688,10 @@ var DiscordAdapter = class extends ChannelAdapter {
|
|
|
1640
1688
|
try {
|
|
1641
1689
|
await this.assistantSession.destroy();
|
|
1642
1690
|
} catch (err) {
|
|
1643
|
-
log.warn(
|
|
1691
|
+
log.warn(
|
|
1692
|
+
{ err },
|
|
1693
|
+
"[DiscordAdapter] Failed to destroy assistant session"
|
|
1694
|
+
);
|
|
1644
1695
|
}
|
|
1645
1696
|
this.assistantSession = null;
|
|
1646
1697
|
}
|
|
@@ -1678,7 +1729,12 @@ var DiscordAdapter = class extends ChannelAdapter {
|
|
|
1678
1729
|
const userId = message.author.id;
|
|
1679
1730
|
let text = message.content;
|
|
1680
1731
|
log.debug(
|
|
1681
|
-
{
|
|
1732
|
+
{
|
|
1733
|
+
threadId,
|
|
1734
|
+
userId,
|
|
1735
|
+
text: text.slice(0, 50),
|
|
1736
|
+
attachmentCount: message.attachments.size
|
|
1737
|
+
},
|
|
1682
1738
|
"[DiscordAdapter] messageCreate received"
|
|
1683
1739
|
);
|
|
1684
1740
|
if (!text && message.attachments.size === 0) return;
|
|
@@ -1697,7 +1753,10 @@ var DiscordAdapter = class extends ChannelAdapter {
|
|
|
1697
1753
|
"[discord-media] Processing incoming attachments"
|
|
1698
1754
|
);
|
|
1699
1755
|
}
|
|
1700
|
-
const attachments = await this.processIncomingAttachments(
|
|
1756
|
+
const attachments = await this.processIncomingAttachments(
|
|
1757
|
+
message,
|
|
1758
|
+
sessionId
|
|
1759
|
+
);
|
|
1701
1760
|
if (!text && attachments.length > 0) {
|
|
1702
1761
|
text = buildFallbackText(attachments);
|
|
1703
1762
|
}
|
|
@@ -1710,7 +1769,10 @@ var DiscordAdapter = class extends ChannelAdapter {
|
|
|
1710
1769
|
}
|
|
1711
1770
|
if (this.discordConfig.assistantThreadId && threadId === this.discordConfig.assistantThreadId) {
|
|
1712
1771
|
if (this.assistantSession && text) {
|
|
1713
|
-
await this.assistantSession.enqueuePrompt(
|
|
1772
|
+
await this.assistantSession.enqueuePrompt(
|
|
1773
|
+
text,
|
|
1774
|
+
attachments.length > 0 ? attachments : void 0
|
|
1775
|
+
);
|
|
1714
1776
|
}
|
|
1715
1777
|
return;
|
|
1716
1778
|
}
|
|
@@ -1733,14 +1795,25 @@ var DiscordAdapter = class extends ChannelAdapter {
|
|
|
1733
1795
|
try {
|
|
1734
1796
|
const existing = this.guild.channels.cache.get(threadId) ?? await this.guild.channels.fetch(threadId);
|
|
1735
1797
|
if (existing && existing.isThread()) {
|
|
1736
|
-
await ensureUnarchived(
|
|
1737
|
-
|
|
1798
|
+
await ensureUnarchived(
|
|
1799
|
+
existing
|
|
1800
|
+
);
|
|
1801
|
+
log.info(
|
|
1802
|
+
{ threadId },
|
|
1803
|
+
"[DiscordAdapter] Reusing existing assistant thread"
|
|
1804
|
+
);
|
|
1738
1805
|
} else {
|
|
1739
|
-
log.warn(
|
|
1806
|
+
log.warn(
|
|
1807
|
+
{ threadId },
|
|
1808
|
+
"[DiscordAdapter] Assistant thread not found, recreating..."
|
|
1809
|
+
);
|
|
1740
1810
|
threadId = null;
|
|
1741
1811
|
}
|
|
1742
1812
|
} catch {
|
|
1743
|
-
log.warn(
|
|
1813
|
+
log.warn(
|
|
1814
|
+
{ threadId },
|
|
1815
|
+
"[DiscordAdapter] Assistant thread inaccessible, recreating..."
|
|
1816
|
+
);
|
|
1744
1817
|
threadId = null;
|
|
1745
1818
|
}
|
|
1746
1819
|
}
|
|
@@ -1794,7 +1867,10 @@ var DiscordAdapter = class extends ChannelAdapter {
|
|
|
1794
1867
|
fileName = "voice.wav";
|
|
1795
1868
|
mimeType = "audio/wav";
|
|
1796
1869
|
} catch (err) {
|
|
1797
|
-
log.warn(
|
|
1870
|
+
log.warn(
|
|
1871
|
+
{ err },
|
|
1872
|
+
"[discord-media] OGG\u2192WAV conversion failed, saving original"
|
|
1873
|
+
);
|
|
1798
1874
|
}
|
|
1799
1875
|
}
|
|
1800
1876
|
return this.fileService.saveFile(sessionId, fileName, data, mimeType);
|
|
@@ -1802,10 +1878,18 @@ var DiscordAdapter = class extends ChannelAdapter {
|
|
|
1802
1878
|
);
|
|
1803
1879
|
const rejected = results.filter((r) => r.status === "rejected");
|
|
1804
1880
|
if (rejected.length > 0) {
|
|
1805
|
-
log.warn(
|
|
1881
|
+
log.warn(
|
|
1882
|
+
{ rejected: rejected.map((r) => r.reason) },
|
|
1883
|
+
"[discord-media] Some attachments failed"
|
|
1884
|
+
);
|
|
1806
1885
|
}
|
|
1807
|
-
const saved = results.filter(
|
|
1808
|
-
|
|
1886
|
+
const saved = results.filter(
|
|
1887
|
+
(r) => r.status === "fulfilled"
|
|
1888
|
+
).map((r) => r.value).filter((att) => att !== null);
|
|
1889
|
+
log.info(
|
|
1890
|
+
{ count: saved.length, files: saved.map((a) => a.fileName) },
|
|
1891
|
+
"[discord-media] Attachments processed"
|
|
1892
|
+
);
|
|
1809
1893
|
return saved;
|
|
1810
1894
|
}
|
|
1811
1895
|
// ─── Helper: resolve thread ───────────────────────────────────────────────
|
|
@@ -1819,17 +1903,26 @@ var DiscordAdapter = class extends ChannelAdapter {
|
|
|
1819
1903
|
try {
|
|
1820
1904
|
const channel = this.guild.channels.cache.get(threadId) ?? await this.guild.channels.fetch(threadId);
|
|
1821
1905
|
if (channel && channel.isThread()) return channel;
|
|
1822
|
-
log.warn(
|
|
1906
|
+
log.warn(
|
|
1907
|
+
{ sessionId, threadId },
|
|
1908
|
+
"[DiscordAdapter] Channel is not a thread"
|
|
1909
|
+
);
|
|
1823
1910
|
return null;
|
|
1824
1911
|
} catch (err) {
|
|
1825
|
-
log.warn(
|
|
1912
|
+
log.warn(
|
|
1913
|
+
{ err, sessionId, threadId },
|
|
1914
|
+
"[DiscordAdapter] Failed to fetch thread"
|
|
1915
|
+
);
|
|
1826
1916
|
return null;
|
|
1827
1917
|
}
|
|
1828
1918
|
}
|
|
1829
1919
|
// ─── Helper: get or create activity tracker ──────────────────────────────
|
|
1830
1920
|
getOrCreateTracker(sessionId, thread) {
|
|
1831
1921
|
if (!this.sessionTrackers.has(sessionId)) {
|
|
1832
|
-
this.sessionTrackers.set(
|
|
1922
|
+
this.sessionTrackers.set(
|
|
1923
|
+
sessionId,
|
|
1924
|
+
new ActivityTracker(thread, this.sendQueue)
|
|
1925
|
+
);
|
|
1833
1926
|
}
|
|
1834
1927
|
return this.sessionTrackers.get(sessionId);
|
|
1835
1928
|
}
|
|
@@ -1855,42 +1948,71 @@ var DiscordAdapter = class extends ChannelAdapter {
|
|
|
1855
1948
|
if (noiseAction === "collapse" && this.verbosity === "low") return;
|
|
1856
1949
|
const tracker = this.getOrCreateTracker(ctx.sessionId, ctx.thread);
|
|
1857
1950
|
await tracker.onToolCall();
|
|
1858
|
-
await this.draftManager.finalize(
|
|
1859
|
-
|
|
1860
|
-
|
|
1861
|
-
|
|
1862
|
-
|
|
1863
|
-
|
|
1864
|
-
|
|
1865
|
-
|
|
1866
|
-
|
|
1867
|
-
|
|
1951
|
+
await this.draftManager.finalize(
|
|
1952
|
+
ctx.sessionId,
|
|
1953
|
+
ctx.thread,
|
|
1954
|
+
ctx.isAssistant
|
|
1955
|
+
);
|
|
1956
|
+
await this.toolTracker.trackNewCall(
|
|
1957
|
+
ctx.sessionId,
|
|
1958
|
+
ctx.thread,
|
|
1959
|
+
{
|
|
1960
|
+
id: String(meta.id ?? ""),
|
|
1961
|
+
name: toolName,
|
|
1962
|
+
kind: meta.kind,
|
|
1963
|
+
status: String(meta.status ?? "running"),
|
|
1964
|
+
content: meta.content,
|
|
1965
|
+
rawInput: meta.rawInput,
|
|
1966
|
+
viewerLinks: meta.viewerLinks,
|
|
1967
|
+
viewerFilePath: meta.viewerFilePath,
|
|
1968
|
+
displaySummary: meta.displaySummary,
|
|
1969
|
+
displayTitle: meta.displayTitle,
|
|
1970
|
+
displayKind: meta.displayKind
|
|
1971
|
+
},
|
|
1972
|
+
this.verbosity
|
|
1973
|
+
);
|
|
1868
1974
|
},
|
|
1869
1975
|
onToolUpdate: async (ctx, content) => {
|
|
1870
1976
|
const meta = content.metadata ?? {};
|
|
1871
|
-
await this.toolTracker.updateCall(
|
|
1872
|
-
|
|
1873
|
-
|
|
1874
|
-
|
|
1875
|
-
|
|
1876
|
-
|
|
1877
|
-
|
|
1878
|
-
|
|
1879
|
-
|
|
1977
|
+
await this.toolTracker.updateCall(
|
|
1978
|
+
ctx.sessionId,
|
|
1979
|
+
{
|
|
1980
|
+
id: String(meta.id ?? ""),
|
|
1981
|
+
name: content.text || String(meta.name ?? ""),
|
|
1982
|
+
kind: meta.kind,
|
|
1983
|
+
status: String(meta.status ?? "completed"),
|
|
1984
|
+
content: meta.content,
|
|
1985
|
+
rawInput: meta.rawInput,
|
|
1986
|
+
viewerLinks: meta.viewerLinks,
|
|
1987
|
+
viewerFilePath: meta.viewerFilePath,
|
|
1988
|
+
displaySummary: meta.displaySummary,
|
|
1989
|
+
displayTitle: meta.displayTitle,
|
|
1990
|
+
displayKind: meta.displayKind
|
|
1991
|
+
},
|
|
1992
|
+
this.verbosity
|
|
1993
|
+
);
|
|
1880
1994
|
},
|
|
1881
1995
|
onPlan: async (ctx, content) => {
|
|
1882
1996
|
const entries = content.metadata?.entries ?? [];
|
|
1883
1997
|
const tracker = this.getOrCreateTracker(ctx.sessionId, ctx.thread);
|
|
1884
|
-
await tracker.onPlan(entries);
|
|
1998
|
+
await tracker.onPlan(entries, this.verbosity);
|
|
1885
1999
|
},
|
|
1886
2000
|
onUsage: async (ctx, content) => {
|
|
1887
|
-
await this.draftManager.finalize(
|
|
2001
|
+
await this.draftManager.finalize(
|
|
2002
|
+
ctx.sessionId,
|
|
2003
|
+
ctx.thread,
|
|
2004
|
+
ctx.isAssistant
|
|
2005
|
+
);
|
|
1888
2006
|
const meta = content.metadata ?? {};
|
|
1889
2007
|
const tracker = this.getOrCreateTracker(ctx.sessionId, ctx.thread);
|
|
1890
|
-
await tracker.sendUsage(
|
|
1891
|
-
|
|
1892
|
-
|
|
1893
|
-
|
|
2008
|
+
await tracker.sendUsage(
|
|
2009
|
+
{
|
|
2010
|
+
tokensUsed: meta.tokensUsed,
|
|
2011
|
+
contextSize: meta.contextSize,
|
|
2012
|
+
cost: meta.cost
|
|
2013
|
+
},
|
|
2014
|
+
this.verbosity
|
|
2015
|
+
);
|
|
1894
2016
|
try {
|
|
1895
2017
|
const deepLink = buildDeepLink(this.guild.id, ctx.thread.id);
|
|
1896
2018
|
await this.sendNotification({
|
|
@@ -1903,7 +2025,11 @@ var DiscordAdapter = class extends ChannelAdapter {
|
|
|
1903
2025
|
}
|
|
1904
2026
|
},
|
|
1905
2027
|
onSessionEnd: async (ctx, _content) => {
|
|
1906
|
-
await this.draftManager.finalize(
|
|
2028
|
+
await this.draftManager.finalize(
|
|
2029
|
+
ctx.sessionId,
|
|
2030
|
+
ctx.thread,
|
|
2031
|
+
ctx.isAssistant
|
|
2032
|
+
);
|
|
1907
2033
|
const tracker = this.getOrCreateTracker(ctx.sessionId, ctx.thread);
|
|
1908
2034
|
await tracker.cleanup();
|
|
1909
2035
|
this.toolTracker.cleanup(ctx.sessionId);
|
|
@@ -1918,7 +2044,11 @@ var DiscordAdapter = class extends ChannelAdapter {
|
|
|
1918
2044
|
}
|
|
1919
2045
|
},
|
|
1920
2046
|
onError: async (ctx, content) => {
|
|
1921
|
-
await this.draftManager.finalize(
|
|
2047
|
+
await this.draftManager.finalize(
|
|
2048
|
+
ctx.sessionId,
|
|
2049
|
+
ctx.thread,
|
|
2050
|
+
ctx.isAssistant
|
|
2051
|
+
);
|
|
1922
2052
|
const tracker = this.getOrCreateTracker(ctx.sessionId, ctx.thread);
|
|
1923
2053
|
await tracker.cleanup();
|
|
1924
2054
|
this.toolTracker.cleanup(ctx.sessionId);
|
|
@@ -1934,12 +2064,25 @@ var DiscordAdapter = class extends ChannelAdapter {
|
|
|
1934
2064
|
onAttachment: async (ctx, content) => {
|
|
1935
2065
|
if (!content.attachment) return;
|
|
1936
2066
|
const { attachment } = content;
|
|
1937
|
-
await this.draftManager.finalize(
|
|
2067
|
+
await this.draftManager.finalize(
|
|
2068
|
+
ctx.sessionId,
|
|
2069
|
+
ctx.thread,
|
|
2070
|
+
ctx.isAssistant
|
|
2071
|
+
);
|
|
1938
2072
|
if (isAttachmentTooLarge(attachment.size)) {
|
|
1939
|
-
log.warn(
|
|
2073
|
+
log.warn(
|
|
2074
|
+
{
|
|
2075
|
+
sessionId: ctx.sessionId,
|
|
2076
|
+
fileName: attachment.fileName,
|
|
2077
|
+
size: attachment.size
|
|
2078
|
+
},
|
|
2079
|
+
"[discord-media] File too large (>25MB)"
|
|
2080
|
+
);
|
|
1940
2081
|
try {
|
|
1941
2082
|
await this.sendQueue.enqueue(
|
|
1942
|
-
() => ctx.thread.send({
|
|
2083
|
+
() => ctx.thread.send({
|
|
2084
|
+
content: `\u26A0\uFE0F File too large to send (${Math.round(attachment.size / 1024 / 1024)}MB): ${attachment.fileName}`
|
|
2085
|
+
}),
|
|
1943
2086
|
{ type: "other" }
|
|
1944
2087
|
);
|
|
1945
2088
|
} catch {
|
|
@@ -1948,7 +2091,11 @@ var DiscordAdapter = class extends ChannelAdapter {
|
|
|
1948
2091
|
}
|
|
1949
2092
|
try {
|
|
1950
2093
|
await this.sendQueue.enqueue(
|
|
1951
|
-
() => ctx.thread.send({
|
|
2094
|
+
() => ctx.thread.send({
|
|
2095
|
+
files: [
|
|
2096
|
+
{ attachment: attachment.filePath, name: attachment.fileName }
|
|
2097
|
+
]
|
|
2098
|
+
}),
|
|
1952
2099
|
{ type: "other" }
|
|
1953
2100
|
);
|
|
1954
2101
|
if (attachment.type === "audio") {
|
|
@@ -1959,7 +2106,10 @@ var DiscordAdapter = class extends ChannelAdapter {
|
|
|
1959
2106
|
}
|
|
1960
2107
|
}
|
|
1961
2108
|
} catch (err) {
|
|
1962
|
-
log.error(
|
|
2109
|
+
log.error(
|
|
2110
|
+
{ err, sessionId: ctx.sessionId, fileName: attachment.fileName },
|
|
2111
|
+
"[discord-media] Failed to send attachment"
|
|
2112
|
+
);
|
|
1963
2113
|
}
|
|
1964
2114
|
},
|
|
1965
2115
|
onSystemMessage: async (ctx, content) => {
|
|
@@ -1988,12 +2138,19 @@ var DiscordAdapter = class extends ChannelAdapter {
|
|
|
1988
2138
|
async sendPermissionRequest(sessionId, request) {
|
|
1989
2139
|
const session = this.core.sessionManager.getSession(sessionId);
|
|
1990
2140
|
if (!session) {
|
|
1991
|
-
log.warn(
|
|
2141
|
+
log.warn(
|
|
2142
|
+
{ sessionId },
|
|
2143
|
+
"[DiscordAdapter] sendPermissionRequest: session not found"
|
|
2144
|
+
);
|
|
1992
2145
|
return;
|
|
1993
2146
|
}
|
|
1994
2147
|
const thread = await this.getThread(sessionId);
|
|
1995
2148
|
if (!thread) return;
|
|
1996
|
-
await this.permissionHandler.sendPermissionRequest(
|
|
2149
|
+
await this.permissionHandler.sendPermissionRequest(
|
|
2150
|
+
session,
|
|
2151
|
+
request,
|
|
2152
|
+
thread
|
|
2153
|
+
);
|
|
1997
2154
|
}
|
|
1998
2155
|
// ─── sendNotification ─────────────────────────────────────────────────────
|
|
1999
2156
|
async sendNotification(notification) {
|
|
@@ -2079,4 +2236,4 @@ ${notification.deepLink}`;
|
|
|
2079
2236
|
export {
|
|
2080
2237
|
DiscordAdapter
|
|
2081
2238
|
};
|
|
2082
|
-
//# sourceMappingURL=discord-
|
|
2239
|
+
//# sourceMappingURL=discord-OMC52Y54.js.map
|