@openacp/cli 0.6.10 → 2026.41.2
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 +34 -16
- package/dist/cli.d.ts +11 -0
- package/dist/cli.js +28362 -449
- package/dist/cli.js.map +1 -1
- package/dist/data/registry-snapshot.json +1 -1
- package/dist/index.d.ts +1930 -467
- package/dist/index.js +17331 -102
- package/dist/index.js.map +1 -1
- package/package.json +13 -7
- package/dist/action-detect-P7ZE4NEM.js +0 -16
- package/dist/action-detect-P7ZE4NEM.js.map +0 -1
- package/dist/adapter-ZOANORGM.js +0 -799
- package/dist/adapter-ZOANORGM.js.map +0 -1
- package/dist/admin-6SYB6XCZ.js +0 -23
- package/dist/admin-6SYB6XCZ.js.map +0 -1
- package/dist/agent-catalog-FC3HGDEQ.js +0 -11
- package/dist/agent-catalog-FC3HGDEQ.js.map +0 -1
- package/dist/agent-dependencies-4OWBMZWZ.js +0 -24
- package/dist/agent-dependencies-4OWBMZWZ.js.map +0 -1
- package/dist/agent-registry-WT4NXPYG.js +0 -9
- package/dist/agent-registry-WT4NXPYG.js.map +0 -1
- package/dist/agent-store-VZLFPTZU.js +0 -9
- package/dist/agent-store-VZLFPTZU.js.map +0 -1
- package/dist/agents-QO7DKARJ.js +0 -15
- package/dist/agents-QO7DKARJ.js.map +0 -1
- package/dist/api-client-CFQT5U7D.js +0 -14
- package/dist/api-client-CFQT5U7D.js.map +0 -1
- package/dist/autostart-X33OGMX6.js +0 -23
- package/dist/autostart-X33OGMX6.js.map +0 -1
- package/dist/chunk-2CJ46J3C.js +0 -154
- package/dist/chunk-2CJ46J3C.js.map +0 -1
- package/dist/chunk-2HMQOC7N.js +0 -134
- package/dist/chunk-2HMQOC7N.js.map +0 -1
- package/dist/chunk-33RP6K2O.js +0 -435
- package/dist/chunk-33RP6K2O.js.map +0 -1
- package/dist/chunk-34M4OS5P.js +0 -83
- package/dist/chunk-34M4OS5P.js.map +0 -1
- package/dist/chunk-4CTX774K.js +0 -265
- package/dist/chunk-4CTX774K.js.map +0 -1
- package/dist/chunk-7QJS2XBD.js +0 -92
- package/dist/chunk-7QJS2XBD.js.map +0 -1
- package/dist/chunk-BNLGTZ34.js +0 -122
- package/dist/chunk-BNLGTZ34.js.map +0 -1
- package/dist/chunk-CS3KCJ5D.js +0 -4788
- package/dist/chunk-CS3KCJ5D.js.map +0 -1
- package/dist/chunk-GAK6PIBW.js +0 -224
- package/dist/chunk-GAK6PIBW.js.map +0 -1
- package/dist/chunk-I7WC6E5S.js +0 -71
- package/dist/chunk-I7WC6E5S.js.map +0 -1
- package/dist/chunk-J4SJTKIK.js +0 -203
- package/dist/chunk-J4SJTKIK.js.map +0 -1
- package/dist/chunk-JHYXKVV2.js +0 -183
- package/dist/chunk-JHYXKVV2.js.map +0 -1
- package/dist/chunk-JKBFUAJK.js +0 -282
- package/dist/chunk-JKBFUAJK.js.map +0 -1
- package/dist/chunk-KIRH7TUJ.js +0 -219
- package/dist/chunk-KIRH7TUJ.js.map +0 -1
- package/dist/chunk-LBIKITQT.js +0 -22
- package/dist/chunk-LBIKITQT.js.map +0 -1
- package/dist/chunk-LCRLAV4G.js +0 -1085
- package/dist/chunk-LCRLAV4G.js.map +0 -1
- package/dist/chunk-LGP2YGRL.js +0 -4880
- package/dist/chunk-LGP2YGRL.js.map +0 -1
- package/dist/chunk-MKHUZLII.js +0 -738
- package/dist/chunk-MKHUZLII.js.map +0 -1
- package/dist/chunk-NAMYZIS5.js +0 -1
- package/dist/chunk-NAMYZIS5.js.map +0 -1
- package/dist/chunk-NVPG6JCL.js +0 -724
- package/dist/chunk-NVPG6JCL.js.map +0 -1
- package/dist/chunk-O7CPGUAI.js +0 -298
- package/dist/chunk-O7CPGUAI.js.map +0 -1
- package/dist/chunk-OWP7RZ62.js +0 -697
- package/dist/chunk-OWP7RZ62.js.map +0 -1
- package/dist/chunk-S64CB6J3.js +0 -98
- package/dist/chunk-S64CB6J3.js.map +0 -1
- package/dist/chunk-UKT3G5IA.js +0 -484
- package/dist/chunk-UKT3G5IA.js.map +0 -1
- package/dist/chunk-V5GZQEIY.js +0 -101
- package/dist/chunk-V5GZQEIY.js.map +0 -1
- package/dist/chunk-VOIJ6OY4.js +0 -63
- package/dist/chunk-VOIJ6OY4.js.map +0 -1
- package/dist/chunk-VUNV25KB.js +0 -16
- package/dist/chunk-VUNV25KB.js.map +0 -1
- package/dist/chunk-W3EYKZNQ.js +0 -45
- package/dist/chunk-W3EYKZNQ.js.map +0 -1
- package/dist/chunk-WTZDAYZX.js +0 -172
- package/dist/chunk-WTZDAYZX.js.map +0 -1
- package/dist/chunk-XANPHG7W.js +0 -145
- package/dist/chunk-XANPHG7W.js.map +0 -1
- package/dist/config-6S355X75.js +0 -15
- package/dist/config-6S355X75.js.map +0 -1
- package/dist/config-editor-QQTZMWGD.js +0 -13
- package/dist/config-editor-QQTZMWGD.js.map +0 -1
- package/dist/config-registry-AHYI4MYL.js +0 -18
- package/dist/config-registry-AHYI4MYL.js.map +0 -1
- package/dist/daemon-4CS6HMB5.js +0 -30
- package/dist/daemon-4CS6HMB5.js.map +0 -1
- package/dist/discord-OMC52Y54.js +0 -2239
- package/dist/discord-OMC52Y54.js.map +0 -1
- package/dist/dist-UHQK5CXN.js +0 -21151
- package/dist/dist-UHQK5CXN.js.map +0 -1
- package/dist/doctor-HZZ5BSHB.js +0 -10
- package/dist/doctor-HZZ5BSHB.js.map +0 -1
- package/dist/doctor-OLYBO3V3.js +0 -15
- package/dist/doctor-OLYBO3V3.js.map +0 -1
- package/dist/install-cloudflared-Z7VCGOVG.js +0 -33
- package/dist/install-cloudflared-Z7VCGOVG.js.map +0 -1
- package/dist/install-jq-HUYSQWKR.js +0 -32
- package/dist/install-jq-HUYSQWKR.js.map +0 -1
- package/dist/integrate-PNEHRY2I.js +0 -373
- package/dist/integrate-PNEHRY2I.js.map +0 -1
- package/dist/log-NXABYJTT.js +0 -24
- package/dist/log-NXABYJTT.js.map +0 -1
- package/dist/main-XOZCLFUK.js +0 -238
- package/dist/main-XOZCLFUK.js.map +0 -1
- package/dist/menu-YY5MKHEK.js +0 -16
- package/dist/menu-YY5MKHEK.js.map +0 -1
- package/dist/new-session-FEO4J4VU.js +0 -17
- package/dist/new-session-FEO4J4VU.js.map +0 -1
- package/dist/post-upgrade-CJG5I7M2.js +0 -80
- package/dist/post-upgrade-CJG5I7M2.js.map +0 -1
- package/dist/session-IUSI7P5S.js +0 -20
- package/dist/session-IUSI7P5S.js.map +0 -1
- package/dist/settings-RQPAM4KC.js +0 -14
- package/dist/settings-RQPAM4KC.js.map +0 -1
- package/dist/setup-XHS4OMPM.js +0 -37
- package/dist/setup-XHS4OMPM.js.map +0 -1
- package/dist/suggest-7D6B542M.js +0 -38
- package/dist/suggest-7D6B542M.js.map +0 -1
- package/dist/tunnel-service-CJLUH6SZ.js +0 -1174
- package/dist/tunnel-service-CJLUH6SZ.js.map +0 -1
- package/dist/version-NQZBM5M7.js +0 -16
- package/dist/version-NQZBM5M7.js.map +0 -1
package/dist/chunk-KIRH7TUJ.js
DELETED
|
@@ -1,219 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
log
|
|
3
|
-
} from "./chunk-GAK6PIBW.js";
|
|
4
|
-
|
|
5
|
-
// src/adapters/discord/commands/admin.ts
|
|
6
|
-
import { ActionRowBuilder, ButtonBuilder, ButtonStyle } from "discord.js";
|
|
7
|
-
async function handleDangerous(interaction, adapter) {
|
|
8
|
-
await interaction.deferReply({ ephemeral: true });
|
|
9
|
-
const channelId = interaction.channelId;
|
|
10
|
-
const session = adapter.core.sessionManager.getSessionByThread(
|
|
11
|
-
"discord",
|
|
12
|
-
channelId
|
|
13
|
-
);
|
|
14
|
-
if (session) {
|
|
15
|
-
session.dangerousMode = !session.dangerousMode;
|
|
16
|
-
adapter.core.sessionManager.patchRecord(session.id, { dangerousMode: session.dangerousMode }).catch(() => {
|
|
17
|
-
});
|
|
18
|
-
log.info(
|
|
19
|
-
{ sessionId: session.id, dangerousMode: session.dangerousMode },
|
|
20
|
-
"[discord-admin] Dangerous mode toggled via command"
|
|
21
|
-
);
|
|
22
|
-
const msg2 = session.dangerousMode ? "\u2620\uFE0F **Dangerous mode enabled** \u2014 All permission requests will be auto-approved." : "\u{1F510} **Dangerous mode disabled** \u2014 Permission requests will be shown normally.";
|
|
23
|
-
await interaction.editReply(msg2);
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
const record = adapter.core.sessionManager.getRecordByThread(
|
|
27
|
-
"discord",
|
|
28
|
-
channelId
|
|
29
|
-
);
|
|
30
|
-
if (!record || record.status === "cancelled" || record.status === "error") {
|
|
31
|
-
await interaction.editReply("\u26A0\uFE0F No active session in this channel.");
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
const newDangerousMode = !(record.dangerousMode ?? false);
|
|
35
|
-
adapter.core.sessionManager.patchRecord(record.sessionId, { dangerousMode: newDangerousMode }).catch(() => {
|
|
36
|
-
});
|
|
37
|
-
log.info(
|
|
38
|
-
{ sessionId: record.sessionId, dangerousMode: newDangerousMode },
|
|
39
|
-
"[discord-admin] Dangerous mode toggled via command (store-only)"
|
|
40
|
-
);
|
|
41
|
-
const msg = newDangerousMode ? "\u2620\uFE0F **Dangerous mode enabled** \u2014 All permission requests will be auto-approved." : "\u{1F510} **Dangerous mode disabled** \u2014 Permission requests will be shown normally.";
|
|
42
|
-
await interaction.editReply(msg);
|
|
43
|
-
}
|
|
44
|
-
async function handleDangerousButton(interaction, adapter) {
|
|
45
|
-
const sessionId = interaction.customId.slice(2);
|
|
46
|
-
const session = adapter.core.sessionManager.getSession(sessionId);
|
|
47
|
-
if (session) {
|
|
48
|
-
session.dangerousMode = !session.dangerousMode;
|
|
49
|
-
adapter.core.sessionManager.patchRecord(sessionId, { dangerousMode: session.dangerousMode }).catch(() => {
|
|
50
|
-
});
|
|
51
|
-
log.info(
|
|
52
|
-
{ sessionId, dangerousMode: session.dangerousMode },
|
|
53
|
-
"[discord-admin] Dangerous mode toggled via button"
|
|
54
|
-
);
|
|
55
|
-
const toastText2 = session.dangerousMode ? "\u2620\uFE0F Dangerous mode enabled \u2014 permissions auto-approved" : "\u{1F510} Dangerous mode disabled \u2014 permissions shown normally";
|
|
56
|
-
try {
|
|
57
|
-
await interaction.update({
|
|
58
|
-
components: [
|
|
59
|
-
buildSessionControlKeyboard(
|
|
60
|
-
sessionId,
|
|
61
|
-
session.dangerousMode,
|
|
62
|
-
session.voiceMode === "on"
|
|
63
|
-
)
|
|
64
|
-
]
|
|
65
|
-
});
|
|
66
|
-
} catch {
|
|
67
|
-
}
|
|
68
|
-
try {
|
|
69
|
-
await interaction.followUp({ content: toastText2, ephemeral: true });
|
|
70
|
-
} catch {
|
|
71
|
-
}
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
const record = adapter.core.sessionManager.getSessionRecord(sessionId);
|
|
75
|
-
if (!record || record.status === "cancelled" || record.status === "error") {
|
|
76
|
-
await interaction.reply({
|
|
77
|
-
content: "\u26A0\uFE0F Session not found or already ended.",
|
|
78
|
-
ephemeral: true
|
|
79
|
-
});
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
const newDangerousMode = !(record.dangerousMode ?? false);
|
|
83
|
-
adapter.core.sessionManager.patchRecord(sessionId, { dangerousMode: newDangerousMode }).catch(() => {
|
|
84
|
-
});
|
|
85
|
-
log.info(
|
|
86
|
-
{ sessionId, dangerousMode: newDangerousMode },
|
|
87
|
-
"[discord-admin] Dangerous mode toggled via button (store-only)"
|
|
88
|
-
);
|
|
89
|
-
const toastText = newDangerousMode ? "\u2620\uFE0F Dangerous mode enabled \u2014 permissions auto-approved" : "\u{1F510} Dangerous mode disabled \u2014 permissions shown normally";
|
|
90
|
-
try {
|
|
91
|
-
await interaction.update({
|
|
92
|
-
components: [
|
|
93
|
-
buildSessionControlKeyboard(sessionId, newDangerousMode, false)
|
|
94
|
-
]
|
|
95
|
-
});
|
|
96
|
-
} catch {
|
|
97
|
-
}
|
|
98
|
-
try {
|
|
99
|
-
await interaction.followUp({ content: toastText, ephemeral: true });
|
|
100
|
-
} catch {
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
function buildSessionControlKeyboard(sessionId, dangerousMode, voiceMode) {
|
|
104
|
-
return new ActionRowBuilder().addComponents(
|
|
105
|
-
new ButtonBuilder().setCustomId(`d:${sessionId}`).setLabel(
|
|
106
|
-
dangerousMode ? "\u{1F510} Disable Dangerous Mode" : "\u2620\uFE0F Enable Dangerous Mode"
|
|
107
|
-
).setStyle(dangerousMode ? ButtonStyle.Secondary : ButtonStyle.Danger),
|
|
108
|
-
new ButtonBuilder().setCustomId(`v:${sessionId}`).setLabel(voiceMode ? "\u{1F50A} Text to Speech" : "\u{1F507} Text to Speech").setStyle(voiceMode ? ButtonStyle.Success : ButtonStyle.Secondary)
|
|
109
|
-
);
|
|
110
|
-
}
|
|
111
|
-
async function handleTTS(interaction, adapter) {
|
|
112
|
-
await interaction.deferReply({ ephemeral: true });
|
|
113
|
-
const channelId = interaction.channelId;
|
|
114
|
-
const session = adapter.core.sessionManager.getSessionByThread(
|
|
115
|
-
"discord",
|
|
116
|
-
channelId
|
|
117
|
-
);
|
|
118
|
-
if (!session) {
|
|
119
|
-
await interaction.editReply("\u26A0\uFE0F No active session in this channel.");
|
|
120
|
-
return;
|
|
121
|
-
}
|
|
122
|
-
const mode = interaction.options.getString("mode");
|
|
123
|
-
if (mode === "on") {
|
|
124
|
-
session.setVoiceMode("on");
|
|
125
|
-
await interaction.editReply("\u{1F50A} Text to Speech enabled for this session.");
|
|
126
|
-
} else if (mode === "off") {
|
|
127
|
-
session.setVoiceMode("off");
|
|
128
|
-
await interaction.editReply("\u{1F507} Text to Speech disabled.");
|
|
129
|
-
} else {
|
|
130
|
-
session.setVoiceMode("next");
|
|
131
|
-
await interaction.editReply(
|
|
132
|
-
"\u{1F50A} Text to Speech enabled for the next message."
|
|
133
|
-
);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
async function handleTTSButton(interaction, adapter) {
|
|
137
|
-
const sessionId = interaction.customId.slice(2);
|
|
138
|
-
const session = adapter.core.sessionManager.getSession(sessionId);
|
|
139
|
-
if (!session) {
|
|
140
|
-
await interaction.reply({
|
|
141
|
-
content: "\u26A0\uFE0F Session not found or not active.",
|
|
142
|
-
ephemeral: true
|
|
143
|
-
});
|
|
144
|
-
return;
|
|
145
|
-
}
|
|
146
|
-
const newMode = session.voiceMode === "on" ? "off" : "on";
|
|
147
|
-
session.setVoiceMode(newMode);
|
|
148
|
-
const toastText = newMode === "on" ? "\u{1F50A} Text to Speech enabled" : "\u{1F507} Text to Speech disabled";
|
|
149
|
-
try {
|
|
150
|
-
await interaction.update({
|
|
151
|
-
components: [
|
|
152
|
-
buildSessionControlKeyboard(
|
|
153
|
-
sessionId,
|
|
154
|
-
session.dangerousMode,
|
|
155
|
-
newMode === "on"
|
|
156
|
-
)
|
|
157
|
-
]
|
|
158
|
-
});
|
|
159
|
-
} catch {
|
|
160
|
-
}
|
|
161
|
-
try {
|
|
162
|
-
await interaction.followUp({ content: toastText, ephemeral: true });
|
|
163
|
-
} catch {
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
async function handleRestart(interaction, adapter) {
|
|
167
|
-
await interaction.deferReply({ ephemeral: true });
|
|
168
|
-
if (!adapter.core.requestRestart) {
|
|
169
|
-
await interaction.editReply(
|
|
170
|
-
"\u26A0\uFE0F Restart is not available (no restart handler registered)."
|
|
171
|
-
);
|
|
172
|
-
return;
|
|
173
|
-
}
|
|
174
|
-
await interaction.editReply(
|
|
175
|
-
"\u{1F504} **Restarting OpenACP...**\nRebuilding and restarting. Be back shortly."
|
|
176
|
-
);
|
|
177
|
-
await new Promise((r) => setTimeout(r, 500));
|
|
178
|
-
await adapter.core.requestRestart();
|
|
179
|
-
}
|
|
180
|
-
async function handleUpdate(interaction, adapter) {
|
|
181
|
-
await interaction.deferReply({ ephemeral: true });
|
|
182
|
-
await interaction.editReply(
|
|
183
|
-
"\u26A0\uFE0F Update via Discord is not implemented yet. Run `npm install -g @openacp/cli@latest` in your terminal, then use `/restart`."
|
|
184
|
-
);
|
|
185
|
-
}
|
|
186
|
-
var VERBOSITY_LABELS = {
|
|
187
|
-
low: "\u{1F507} Low",
|
|
188
|
-
medium: "\u{1F4CA} Medium",
|
|
189
|
-
high: "\u{1F4D6} High"
|
|
190
|
-
};
|
|
191
|
-
async function handleVerbosity(interaction, adapter) {
|
|
192
|
-
await interaction.deferReply({ ephemeral: true });
|
|
193
|
-
const level = interaction.options.getString("level", true);
|
|
194
|
-
if (level !== "low" && level !== "medium" && level !== "high") {
|
|
195
|
-
await interaction.editReply(
|
|
196
|
-
"\u26A0\uFE0F Invalid level. Use `low`, `medium`, or `high`."
|
|
197
|
-
);
|
|
198
|
-
return;
|
|
199
|
-
}
|
|
200
|
-
await adapter.core.configManager.save(
|
|
201
|
-
{ channels: { discord: { displayVerbosity: level } } },
|
|
202
|
-
"channels.discord.displayVerbosity"
|
|
203
|
-
);
|
|
204
|
-
await interaction.editReply(
|
|
205
|
-
`${VERBOSITY_LABELS[level]} Display verbosity set to **${level}**.`
|
|
206
|
-
);
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
export {
|
|
210
|
-
handleDangerous,
|
|
211
|
-
handleDangerousButton,
|
|
212
|
-
buildSessionControlKeyboard,
|
|
213
|
-
handleTTS,
|
|
214
|
-
handleTTSButton,
|
|
215
|
-
handleRestart,
|
|
216
|
-
handleUpdate,
|
|
217
|
-
handleVerbosity
|
|
218
|
-
};
|
|
219
|
-
//# sourceMappingURL=chunk-KIRH7TUJ.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/adapters/discord/commands/admin.ts"],"sourcesContent":["import { ActionRowBuilder, ButtonBuilder, ButtonStyle } from \"discord.js\";\nimport type {\n ChatInputCommandInteraction,\n ButtonInteraction,\n} from \"discord.js\";\nimport { log } from \"../../../core/log.js\";\nimport type { DiscordAdapter } from \"../adapter.js\";\n\nexport async function handleDangerous(\n interaction: ChatInputCommandInteraction,\n adapter: DiscordAdapter,\n): Promise<void> {\n await interaction.deferReply({ ephemeral: true });\n\n const channelId = interaction.channelId;\n const session = adapter.core.sessionManager.getSessionByThread(\n \"discord\",\n channelId,\n );\n\n if (session) {\n session.dangerousMode = !session.dangerousMode;\n adapter.core.sessionManager\n .patchRecord(session.id, { dangerousMode: session.dangerousMode })\n .catch(() => {});\n log.info(\n { sessionId: session.id, dangerousMode: session.dangerousMode },\n \"[discord-admin] Dangerous mode toggled via command\",\n );\n\n const msg = session.dangerousMode\n ? \"☠️ **Dangerous mode enabled** — All permission requests will be auto-approved.\"\n : \"🔐 **Dangerous mode disabled** — Permission requests will be shown normally.\";\n await interaction.editReply(msg);\n return;\n }\n\n // Session not in memory — update store directly\n const record = adapter.core.sessionManager.getRecordByThread(\n \"discord\",\n channelId,\n );\n if (!record || record.status === \"cancelled\" || record.status === \"error\") {\n await interaction.editReply(\"⚠️ No active session in this channel.\");\n return;\n }\n\n const newDangerousMode = !(record.dangerousMode ?? false);\n adapter.core.sessionManager\n .patchRecord(record.sessionId, { dangerousMode: newDangerousMode })\n .catch(() => {});\n log.info(\n { sessionId: record.sessionId, dangerousMode: newDangerousMode },\n \"[discord-admin] Dangerous mode toggled via command (store-only)\",\n );\n\n const msg = newDangerousMode\n ? \"☠️ **Dangerous mode enabled** — All permission requests will be auto-approved.\"\n : \"🔐 **Dangerous mode disabled** — Permission requests will be shown normally.\";\n await interaction.editReply(msg);\n}\n\nexport async function handleDangerousButton(\n interaction: ButtonInteraction,\n adapter: DiscordAdapter,\n): Promise<void> {\n const sessionId = interaction.customId.slice(2); // strip 'd:'\n const session = adapter.core.sessionManager.getSession(sessionId);\n\n // Session live in memory — toggle directly\n if (session) {\n session.dangerousMode = !session.dangerousMode;\n adapter.core.sessionManager\n .patchRecord(sessionId, { dangerousMode: session.dangerousMode })\n .catch(() => {});\n log.info(\n { sessionId, dangerousMode: session.dangerousMode },\n \"[discord-admin] Dangerous mode toggled via button\",\n );\n\n const toastText = session.dangerousMode\n ? \"☠️ Dangerous mode enabled — permissions auto-approved\"\n : \"🔐 Dangerous mode disabled — permissions shown normally\";\n\n try {\n await interaction.update({\n components: [\n buildSessionControlKeyboard(\n sessionId,\n session.dangerousMode,\n session.voiceMode === \"on\",\n ),\n ],\n });\n } catch {\n /* ignore */\n }\n\n try {\n await interaction.followUp({ content: toastText, ephemeral: true });\n } catch {\n /* ignore */\n }\n return;\n }\n\n // Session not in memory — toggle in store\n const record = adapter.core.sessionManager.getSessionRecord(sessionId);\n if (!record || record.status === \"cancelled\" || record.status === \"error\") {\n await interaction.reply({\n content: \"⚠️ Session not found or already ended.\",\n ephemeral: true,\n });\n return;\n }\n\n const newDangerousMode = !(record.dangerousMode ?? false);\n adapter.core.sessionManager\n .patchRecord(sessionId, { dangerousMode: newDangerousMode })\n .catch(() => {});\n log.info(\n { sessionId, dangerousMode: newDangerousMode },\n \"[discord-admin] Dangerous mode toggled via button (store-only)\",\n );\n\n const toastText = newDangerousMode\n ? \"☠️ Dangerous mode enabled — permissions auto-approved\"\n : \"🔐 Dangerous mode disabled — permissions shown normally\";\n\n try {\n // Store-only path: voiceMode unknown, default to off\n await interaction.update({\n components: [\n buildSessionControlKeyboard(sessionId, newDangerousMode, false),\n ],\n });\n } catch {\n /* ignore */\n }\n\n try {\n await interaction.followUp({ content: toastText, ephemeral: true });\n } catch {\n /* ignore */\n }\n}\n\n// ─── TTS ──────────────────────────────────────────────────────────────────────\n\nexport function buildSessionControlKeyboard(\n sessionId: string,\n dangerousMode: boolean,\n voiceMode: boolean,\n): ActionRowBuilder<ButtonBuilder> {\n return new ActionRowBuilder<ButtonBuilder>().addComponents(\n new ButtonBuilder()\n .setCustomId(`d:${sessionId}`)\n .setLabel(\n dangerousMode\n ? \"🔐 Disable Dangerous Mode\"\n : \"☠️ Enable Dangerous Mode\",\n )\n .setStyle(dangerousMode ? ButtonStyle.Secondary : ButtonStyle.Danger),\n new ButtonBuilder()\n .setCustomId(`v:${sessionId}`)\n .setLabel(voiceMode ? \"🔊 Text to Speech\" : \"🔇 Text to Speech\")\n .setStyle(voiceMode ? ButtonStyle.Success : ButtonStyle.Secondary),\n );\n}\n\nexport async function handleTTS(\n interaction: ChatInputCommandInteraction,\n adapter: DiscordAdapter,\n): Promise<void> {\n await interaction.deferReply({ ephemeral: true });\n\n const channelId = interaction.channelId;\n const session = adapter.core.sessionManager.getSessionByThread(\n \"discord\",\n channelId,\n );\n\n if (!session) {\n await interaction.editReply(\"⚠️ No active session in this channel.\");\n return;\n }\n\n const mode = interaction.options.getString(\"mode\");\n\n if (mode === \"on\") {\n session.setVoiceMode(\"on\");\n await interaction.editReply(\"🔊 Text to Speech enabled for this session.\");\n } else if (mode === \"off\") {\n session.setVoiceMode(\"off\");\n await interaction.editReply(\"🔇 Text to Speech disabled.\");\n } else {\n session.setVoiceMode(\"next\");\n await interaction.editReply(\n \"🔊 Text to Speech enabled for the next message.\",\n );\n }\n}\n\nexport async function handleTTSButton(\n interaction: ButtonInteraction,\n adapter: DiscordAdapter,\n): Promise<void> {\n const sessionId = interaction.customId.slice(2); // strip 'v:'\n const session = adapter.core.sessionManager.getSession(sessionId);\n\n if (!session) {\n await interaction.reply({\n content: \"⚠️ Session not found or not active.\",\n ephemeral: true,\n });\n return;\n }\n\n const newMode = session.voiceMode === \"on\" ? \"off\" : \"on\";\n session.setVoiceMode(newMode);\n\n const toastText =\n newMode === \"on\"\n ? \"🔊 Text to Speech enabled\"\n : \"🔇 Text to Speech disabled\";\n\n try {\n await interaction.update({\n components: [\n buildSessionControlKeyboard(\n sessionId,\n session.dangerousMode,\n newMode === \"on\",\n ),\n ],\n });\n } catch {\n /* ignore */\n }\n\n try {\n await interaction.followUp({ content: toastText, ephemeral: true });\n } catch {\n /* ignore */\n }\n}\n\nexport async function handleRestart(\n interaction: ChatInputCommandInteraction,\n adapter: DiscordAdapter,\n): Promise<void> {\n await interaction.deferReply({ ephemeral: true });\n\n if (!adapter.core.requestRestart) {\n await interaction.editReply(\n \"⚠️ Restart is not available (no restart handler registered).\",\n );\n return;\n }\n\n await interaction.editReply(\n \"🔄 **Restarting OpenACP...**\\nRebuilding and restarting. Be back shortly.\",\n );\n await new Promise((r) => setTimeout(r, 500));\n await adapter.core.requestRestart();\n}\n\nexport async function handleUpdate(\n interaction: ChatInputCommandInteraction,\n adapter: DiscordAdapter,\n): Promise<void> {\n await interaction.deferReply({ ephemeral: true });\n // Stub: not implemented yet\n await interaction.editReply(\n \"⚠️ Update via Discord is not implemented yet. Run `npm install -g @openacp/cli@latest` in your terminal, then use `/restart`.\",\n );\n}\n\n// ─── Verbosity ─────────────────────────────────────────────────────────────\n\nconst VERBOSITY_LABELS: Record<string, string> = {\n low: \"🔇 Low\",\n medium: \"📊 Medium\",\n high: \"📖 High\",\n};\n\nexport async function handleVerbosity(\n interaction: ChatInputCommandInteraction,\n adapter: DiscordAdapter,\n): Promise<void> {\n await interaction.deferReply({ ephemeral: true });\n\n const level = interaction.options.getString(\"level\", true);\n if (level !== \"low\" && level !== \"medium\" && level !== \"high\") {\n await interaction.editReply(\n \"⚠️ Invalid level. Use `low`, `medium`, or `high`.\",\n );\n return;\n }\n\n await adapter.core.configManager.save(\n { channels: { discord: { displayVerbosity: level } } },\n \"channels.discord.displayVerbosity\",\n );\n\n await interaction.editReply(\n `${VERBOSITY_LABELS[level]} Display verbosity set to **${level}**.`,\n );\n}\n"],"mappings":"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","names":["msg","toastText"]}
|
package/dist/chunk-LBIKITQT.js
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
// src/core/channel.ts
|
|
2
|
-
var ChannelAdapter = class {
|
|
3
|
-
constructor(core, config) {
|
|
4
|
-
this.core = core;
|
|
5
|
-
this.config = config;
|
|
6
|
-
}
|
|
7
|
-
async deleteSessionThread(_sessionId) {
|
|
8
|
-
}
|
|
9
|
-
// Skill commands — override in adapters that support dynamic commands
|
|
10
|
-
async sendSkillCommands(_sessionId, _commands) {
|
|
11
|
-
}
|
|
12
|
-
async cleanupSkillCommands(_sessionId) {
|
|
13
|
-
}
|
|
14
|
-
// Archive — override in adapters that support topic archiving
|
|
15
|
-
async archiveSessionTopic(_sessionId) {
|
|
16
|
-
}
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
export {
|
|
20
|
-
ChannelAdapter
|
|
21
|
-
};
|
|
22
|
-
//# sourceMappingURL=chunk-LBIKITQT.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/channel.ts"],"sourcesContent":["import type { OutgoingMessage, PermissionRequest, NotificationMessage, AgentCommand } from './types.js'\n\nexport interface ChannelConfig {\n enabled: boolean\n [key: string]: unknown\n}\n\nexport interface IChannelAdapter {\n start(): Promise<void>\n stop(): Promise<void>\n\n // Outgoing: core → channel\n sendMessage(sessionId: string, content: OutgoingMessage): Promise<void>\n sendPermissionRequest(sessionId: string, request: PermissionRequest): Promise<void>\n sendNotification(notification: NotificationMessage): Promise<void>\n\n // Session lifecycle on channel side\n createSessionThread(sessionId: string, name: string): Promise<string> // returns threadId\n renameSessionThread(sessionId: string, newName: string): Promise<void>\n deleteSessionThread(sessionId: string): Promise<void>\n\n // Skill commands — optional\n sendSkillCommands(sessionId: string, commands: AgentCommand[]): Promise<void>\n cleanupSkillCommands(sessionId: string): Promise<void>\n}\n\n/**\n * Base class providing default no-op implementations for optional methods.\n * Adapters can extend this or implement IChannelAdapter directly.\n */\nexport abstract class ChannelAdapter<TCore = unknown> implements IChannelAdapter {\n constructor(public readonly core: TCore, protected config: ChannelConfig) {}\n\n abstract start(): Promise<void>\n abstract stop(): Promise<void>\n\n // Outgoing: core → channel\n abstract sendMessage(sessionId: string, content: OutgoingMessage): Promise<void>\n abstract sendPermissionRequest(sessionId: string, request: PermissionRequest): Promise<void>\n abstract sendNotification(notification: NotificationMessage): Promise<void>\n\n // Session lifecycle on channel side\n abstract createSessionThread(sessionId: string, name: string): Promise<string> // returns threadId\n abstract renameSessionThread(sessionId: string, newName: string): Promise<void>\n async deleteSessionThread(_sessionId: string): Promise<void> {}\n\n // Skill commands — override in adapters that support dynamic commands\n async sendSkillCommands(_sessionId: string, _commands: AgentCommand[]): Promise<void> {}\n async cleanupSkillCommands(_sessionId: string): Promise<void> {}\n\n // Archive — override in adapters that support topic archiving\n async archiveSessionTopic(_sessionId: string): Promise<void> {}\n}\n"],"mappings":";AA8BO,IAAe,iBAAf,MAA0E;AAAA,EAC/E,YAA4B,MAAuB,QAAuB;AAA9C;AAAuB;AAAA,EAAwB;AAAA,EAa3E,MAAM,oBAAoB,YAAmC;AAAA,EAAC;AAAA;AAAA,EAG9D,MAAM,kBAAkB,YAAoB,WAA0C;AAAA,EAAC;AAAA,EACvF,MAAM,qBAAqB,YAAmC;AAAA,EAAC;AAAA;AAAA,EAG/D,MAAM,oBAAoB,YAAmC;AAAA,EAAC;AAChE;","names":[]}
|