@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.
Files changed (133) hide show
  1. package/README.md +34 -16
  2. package/dist/cli.d.ts +11 -0
  3. package/dist/cli.js +28362 -449
  4. package/dist/cli.js.map +1 -1
  5. package/dist/data/registry-snapshot.json +1 -1
  6. package/dist/index.d.ts +1930 -467
  7. package/dist/index.js +17331 -102
  8. package/dist/index.js.map +1 -1
  9. package/package.json +13 -7
  10. package/dist/action-detect-P7ZE4NEM.js +0 -16
  11. package/dist/action-detect-P7ZE4NEM.js.map +0 -1
  12. package/dist/adapter-ZOANORGM.js +0 -799
  13. package/dist/adapter-ZOANORGM.js.map +0 -1
  14. package/dist/admin-6SYB6XCZ.js +0 -23
  15. package/dist/admin-6SYB6XCZ.js.map +0 -1
  16. package/dist/agent-catalog-FC3HGDEQ.js +0 -11
  17. package/dist/agent-catalog-FC3HGDEQ.js.map +0 -1
  18. package/dist/agent-dependencies-4OWBMZWZ.js +0 -24
  19. package/dist/agent-dependencies-4OWBMZWZ.js.map +0 -1
  20. package/dist/agent-registry-WT4NXPYG.js +0 -9
  21. package/dist/agent-registry-WT4NXPYG.js.map +0 -1
  22. package/dist/agent-store-VZLFPTZU.js +0 -9
  23. package/dist/agent-store-VZLFPTZU.js.map +0 -1
  24. package/dist/agents-QO7DKARJ.js +0 -15
  25. package/dist/agents-QO7DKARJ.js.map +0 -1
  26. package/dist/api-client-CFQT5U7D.js +0 -14
  27. package/dist/api-client-CFQT5U7D.js.map +0 -1
  28. package/dist/autostart-X33OGMX6.js +0 -23
  29. package/dist/autostart-X33OGMX6.js.map +0 -1
  30. package/dist/chunk-2CJ46J3C.js +0 -154
  31. package/dist/chunk-2CJ46J3C.js.map +0 -1
  32. package/dist/chunk-2HMQOC7N.js +0 -134
  33. package/dist/chunk-2HMQOC7N.js.map +0 -1
  34. package/dist/chunk-33RP6K2O.js +0 -435
  35. package/dist/chunk-33RP6K2O.js.map +0 -1
  36. package/dist/chunk-34M4OS5P.js +0 -83
  37. package/dist/chunk-34M4OS5P.js.map +0 -1
  38. package/dist/chunk-4CTX774K.js +0 -265
  39. package/dist/chunk-4CTX774K.js.map +0 -1
  40. package/dist/chunk-7QJS2XBD.js +0 -92
  41. package/dist/chunk-7QJS2XBD.js.map +0 -1
  42. package/dist/chunk-BNLGTZ34.js +0 -122
  43. package/dist/chunk-BNLGTZ34.js.map +0 -1
  44. package/dist/chunk-CS3KCJ5D.js +0 -4788
  45. package/dist/chunk-CS3KCJ5D.js.map +0 -1
  46. package/dist/chunk-GAK6PIBW.js +0 -224
  47. package/dist/chunk-GAK6PIBW.js.map +0 -1
  48. package/dist/chunk-I7WC6E5S.js +0 -71
  49. package/dist/chunk-I7WC6E5S.js.map +0 -1
  50. package/dist/chunk-J4SJTKIK.js +0 -203
  51. package/dist/chunk-J4SJTKIK.js.map +0 -1
  52. package/dist/chunk-JHYXKVV2.js +0 -183
  53. package/dist/chunk-JHYXKVV2.js.map +0 -1
  54. package/dist/chunk-JKBFUAJK.js +0 -282
  55. package/dist/chunk-JKBFUAJK.js.map +0 -1
  56. package/dist/chunk-KIRH7TUJ.js +0 -219
  57. package/dist/chunk-KIRH7TUJ.js.map +0 -1
  58. package/dist/chunk-LBIKITQT.js +0 -22
  59. package/dist/chunk-LBIKITQT.js.map +0 -1
  60. package/dist/chunk-LCRLAV4G.js +0 -1085
  61. package/dist/chunk-LCRLAV4G.js.map +0 -1
  62. package/dist/chunk-LGP2YGRL.js +0 -4880
  63. package/dist/chunk-LGP2YGRL.js.map +0 -1
  64. package/dist/chunk-MKHUZLII.js +0 -738
  65. package/dist/chunk-MKHUZLII.js.map +0 -1
  66. package/dist/chunk-NAMYZIS5.js +0 -1
  67. package/dist/chunk-NAMYZIS5.js.map +0 -1
  68. package/dist/chunk-NVPG6JCL.js +0 -724
  69. package/dist/chunk-NVPG6JCL.js.map +0 -1
  70. package/dist/chunk-O7CPGUAI.js +0 -298
  71. package/dist/chunk-O7CPGUAI.js.map +0 -1
  72. package/dist/chunk-OWP7RZ62.js +0 -697
  73. package/dist/chunk-OWP7RZ62.js.map +0 -1
  74. package/dist/chunk-S64CB6J3.js +0 -98
  75. package/dist/chunk-S64CB6J3.js.map +0 -1
  76. package/dist/chunk-UKT3G5IA.js +0 -484
  77. package/dist/chunk-UKT3G5IA.js.map +0 -1
  78. package/dist/chunk-V5GZQEIY.js +0 -101
  79. package/dist/chunk-V5GZQEIY.js.map +0 -1
  80. package/dist/chunk-VOIJ6OY4.js +0 -63
  81. package/dist/chunk-VOIJ6OY4.js.map +0 -1
  82. package/dist/chunk-VUNV25KB.js +0 -16
  83. package/dist/chunk-VUNV25KB.js.map +0 -1
  84. package/dist/chunk-W3EYKZNQ.js +0 -45
  85. package/dist/chunk-W3EYKZNQ.js.map +0 -1
  86. package/dist/chunk-WTZDAYZX.js +0 -172
  87. package/dist/chunk-WTZDAYZX.js.map +0 -1
  88. package/dist/chunk-XANPHG7W.js +0 -145
  89. package/dist/chunk-XANPHG7W.js.map +0 -1
  90. package/dist/config-6S355X75.js +0 -15
  91. package/dist/config-6S355X75.js.map +0 -1
  92. package/dist/config-editor-QQTZMWGD.js +0 -13
  93. package/dist/config-editor-QQTZMWGD.js.map +0 -1
  94. package/dist/config-registry-AHYI4MYL.js +0 -18
  95. package/dist/config-registry-AHYI4MYL.js.map +0 -1
  96. package/dist/daemon-4CS6HMB5.js +0 -30
  97. package/dist/daemon-4CS6HMB5.js.map +0 -1
  98. package/dist/discord-OMC52Y54.js +0 -2239
  99. package/dist/discord-OMC52Y54.js.map +0 -1
  100. package/dist/dist-UHQK5CXN.js +0 -21151
  101. package/dist/dist-UHQK5CXN.js.map +0 -1
  102. package/dist/doctor-HZZ5BSHB.js +0 -10
  103. package/dist/doctor-HZZ5BSHB.js.map +0 -1
  104. package/dist/doctor-OLYBO3V3.js +0 -15
  105. package/dist/doctor-OLYBO3V3.js.map +0 -1
  106. package/dist/install-cloudflared-Z7VCGOVG.js +0 -33
  107. package/dist/install-cloudflared-Z7VCGOVG.js.map +0 -1
  108. package/dist/install-jq-HUYSQWKR.js +0 -32
  109. package/dist/install-jq-HUYSQWKR.js.map +0 -1
  110. package/dist/integrate-PNEHRY2I.js +0 -373
  111. package/dist/integrate-PNEHRY2I.js.map +0 -1
  112. package/dist/log-NXABYJTT.js +0 -24
  113. package/dist/log-NXABYJTT.js.map +0 -1
  114. package/dist/main-XOZCLFUK.js +0 -238
  115. package/dist/main-XOZCLFUK.js.map +0 -1
  116. package/dist/menu-YY5MKHEK.js +0 -16
  117. package/dist/menu-YY5MKHEK.js.map +0 -1
  118. package/dist/new-session-FEO4J4VU.js +0 -17
  119. package/dist/new-session-FEO4J4VU.js.map +0 -1
  120. package/dist/post-upgrade-CJG5I7M2.js +0 -80
  121. package/dist/post-upgrade-CJG5I7M2.js.map +0 -1
  122. package/dist/session-IUSI7P5S.js +0 -20
  123. package/dist/session-IUSI7P5S.js.map +0 -1
  124. package/dist/settings-RQPAM4KC.js +0 -14
  125. package/dist/settings-RQPAM4KC.js.map +0 -1
  126. package/dist/setup-XHS4OMPM.js +0 -37
  127. package/dist/setup-XHS4OMPM.js.map +0 -1
  128. package/dist/suggest-7D6B542M.js +0 -38
  129. package/dist/suggest-7D6B542M.js.map +0 -1
  130. package/dist/tunnel-service-CJLUH6SZ.js +0 -1174
  131. package/dist/tunnel-service-CJLUH6SZ.js.map +0 -1
  132. package/dist/version-NQZBM5M7.js +0 -16
  133. package/dist/version-NQZBM5M7.js.map +0 -1
@@ -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":";;;;;AAAA,SAAS,kBAAkB,eAAe,mBAAmB;AAQ7D,eAAsB,gBACpB,aACA,SACe;AACf,QAAM,YAAY,WAAW,EAAE,WAAW,KAAK,CAAC;AAEhD,QAAM,YAAY,YAAY;AAC9B,QAAM,UAAU,QAAQ,KAAK,eAAe;AAAA,IAC1C;AAAA,IACA;AAAA,EACF;AAEA,MAAI,SAAS;AACX,YAAQ,gBAAgB,CAAC,QAAQ;AACjC,YAAQ,KAAK,eACV,YAAY,QAAQ,IAAI,EAAE,eAAe,QAAQ,cAAc,CAAC,EAChE,MAAM,MAAM;AAAA,IAAC,CAAC;AACjB,QAAI;AAAA,MACF,EAAE,WAAW,QAAQ,IAAI,eAAe,QAAQ,cAAc;AAAA,MAC9D;AAAA,IACF;AAEA,UAAMA,OAAM,QAAQ,gBAChB,kGACA;AACJ,UAAM,YAAY,UAAUA,IAAG;AAC/B;AAAA,EACF;AAGA,QAAM,SAAS,QAAQ,KAAK,eAAe;AAAA,IACzC;AAAA,IACA;AAAA,EACF;AACA,MAAI,CAAC,UAAU,OAAO,WAAW,eAAe,OAAO,WAAW,SAAS;AACzE,UAAM,YAAY,UAAU,iDAAuC;AACnE;AAAA,EACF;AAEA,QAAM,mBAAmB,EAAE,OAAO,iBAAiB;AACnD,UAAQ,KAAK,eACV,YAAY,OAAO,WAAW,EAAE,eAAe,iBAAiB,CAAC,EACjE,MAAM,MAAM;AAAA,EAAC,CAAC;AACjB,MAAI;AAAA,IACF,EAAE,WAAW,OAAO,WAAW,eAAe,iBAAiB;AAAA,IAC/D;AAAA,EACF;AAEA,QAAM,MAAM,mBACR,kGACA;AACJ,QAAM,YAAY,UAAU,GAAG;AACjC;AAEA,eAAsB,sBACpB,aACA,SACe;AACf,QAAM,YAAY,YAAY,SAAS,MAAM,CAAC;AAC9C,QAAM,UAAU,QAAQ,KAAK,eAAe,WAAW,SAAS;AAGhE,MAAI,SAAS;AACX,YAAQ,gBAAgB,CAAC,QAAQ;AACjC,YAAQ,KAAK,eACV,YAAY,WAAW,EAAE,eAAe,QAAQ,cAAc,CAAC,EAC/D,MAAM,MAAM;AAAA,IAAC,CAAC;AACjB,QAAI;AAAA,MACF,EAAE,WAAW,eAAe,QAAQ,cAAc;AAAA,MAClD;AAAA,IACF;AAEA,UAAMC,aAAY,QAAQ,gBACtB,yEACA;AAEJ,QAAI;AACF,YAAM,YAAY,OAAO;AAAA,QACvB,YAAY;AAAA,UACV;AAAA,YACE;AAAA,YACA,QAAQ;AAAA,YACR,QAAQ,cAAc;AAAA,UACxB;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH,QAAQ;AAAA,IAER;AAEA,QAAI;AACF,YAAM,YAAY,SAAS,EAAE,SAASA,YAAW,WAAW,KAAK,CAAC;AAAA,IACpE,QAAQ;AAAA,IAER;AACA;AAAA,EACF;AAGA,QAAM,SAAS,QAAQ,KAAK,eAAe,iBAAiB,SAAS;AACrE,MAAI,CAAC,UAAU,OAAO,WAAW,eAAe,OAAO,WAAW,SAAS;AACzE,UAAM,YAAY,MAAM;AAAA,MACtB,SAAS;AAAA,MACT,WAAW;AAAA,IACb,CAAC;AACD;AAAA,EACF;AAEA,QAAM,mBAAmB,EAAE,OAAO,iBAAiB;AACnD,UAAQ,KAAK,eACV,YAAY,WAAW,EAAE,eAAe,iBAAiB,CAAC,EAC1D,MAAM,MAAM;AAAA,EAAC,CAAC;AACjB,MAAI;AAAA,IACF,EAAE,WAAW,eAAe,iBAAiB;AAAA,IAC7C;AAAA,EACF;AAEA,QAAM,YAAY,mBACd,yEACA;AAEJ,MAAI;AAEF,UAAM,YAAY,OAAO;AAAA,MACvB,YAAY;AAAA,QACV,4BAA4B,WAAW,kBAAkB,KAAK;AAAA,MAChE;AAAA,IACF,CAAC;AAAA,EACH,QAAQ;AAAA,EAER;AAEA,MAAI;AACF,UAAM,YAAY,SAAS,EAAE,SAAS,WAAW,WAAW,KAAK,CAAC;AAAA,EACpE,QAAQ;AAAA,EAER;AACF;AAIO,SAAS,4BACd,WACA,eACA,WACiC;AACjC,SAAO,IAAI,iBAAgC,EAAE;AAAA,IAC3C,IAAI,cAAc,EACf,YAAY,KAAK,SAAS,EAAE,EAC5B;AAAA,MACC,gBACI,qCACA;AAAA,IACN,EACC,SAAS,gBAAgB,YAAY,YAAY,YAAY,MAAM;AAAA,IACtE,IAAI,cAAc,EACf,YAAY,KAAK,SAAS,EAAE,EAC5B,SAAS,YAAY,6BAAsB,0BAAmB,EAC9D,SAAS,YAAY,YAAY,UAAU,YAAY,SAAS;AAAA,EACrE;AACF;AAEA,eAAsB,UACpB,aACA,SACe;AACf,QAAM,YAAY,WAAW,EAAE,WAAW,KAAK,CAAC;AAEhD,QAAM,YAAY,YAAY;AAC9B,QAAM,UAAU,QAAQ,KAAK,eAAe;AAAA,IAC1C;AAAA,IACA;AAAA,EACF;AAEA,MAAI,CAAC,SAAS;AACZ,UAAM,YAAY,UAAU,iDAAuC;AACnE;AAAA,EACF;AAEA,QAAM,OAAO,YAAY,QAAQ,UAAU,MAAM;AAEjD,MAAI,SAAS,MAAM;AACjB,YAAQ,aAAa,IAAI;AACzB,UAAM,YAAY,UAAU,oDAA6C;AAAA,EAC3E,WAAW,SAAS,OAAO;AACzB,YAAQ,aAAa,KAAK;AAC1B,UAAM,YAAY,UAAU,oCAA6B;AAAA,EAC3D,OAAO;AACL,YAAQ,aAAa,MAAM;AAC3B,UAAM,YAAY;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AACF;AAEA,eAAsB,gBACpB,aACA,SACe;AACf,QAAM,YAAY,YAAY,SAAS,MAAM,CAAC;AAC9C,QAAM,UAAU,QAAQ,KAAK,eAAe,WAAW,SAAS;AAEhE,MAAI,CAAC,SAAS;AACZ,UAAM,YAAY,MAAM;AAAA,MACtB,SAAS;AAAA,MACT,WAAW;AAAA,IACb,CAAC;AACD;AAAA,EACF;AAEA,QAAM,UAAU,QAAQ,cAAc,OAAO,QAAQ;AACrD,UAAQ,aAAa,OAAO;AAE5B,QAAM,YACJ,YAAY,OACR,qCACA;AAEN,MAAI;AACF,UAAM,YAAY,OAAO;AAAA,MACvB,YAAY;AAAA,QACV;AAAA,UACE;AAAA,UACA,QAAQ;AAAA,UACR,YAAY;AAAA,QACd;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH,QAAQ;AAAA,EAER;AAEA,MAAI;AACF,UAAM,YAAY,SAAS,EAAE,SAAS,WAAW,WAAW,KAAK,CAAC;AAAA,EACpE,QAAQ;AAAA,EAER;AACF;AAEA,eAAsB,cACpB,aACA,SACe;AACf,QAAM,YAAY,WAAW,EAAE,WAAW,KAAK,CAAC;AAEhD,MAAI,CAAC,QAAQ,KAAK,gBAAgB;AAChC,UAAM,YAAY;AAAA,MAChB;AAAA,IACF;AACA;AAAA,EACF;AAEA,QAAM,YAAY;AAAA,IAChB;AAAA,EACF;AACA,QAAM,IAAI,QAAQ,CAAC,MAAM,WAAW,GAAG,GAAG,CAAC;AAC3C,QAAM,QAAQ,KAAK,eAAe;AACpC;AAEA,eAAsB,aACpB,aACA,SACe;AACf,QAAM,YAAY,WAAW,EAAE,WAAW,KAAK,CAAC;AAEhD,QAAM,YAAY;AAAA,IAChB;AAAA,EACF;AACF;AAIA,IAAM,mBAA2C;AAAA,EAC/C,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,MAAM;AACR;AAEA,eAAsB,gBACpB,aACA,SACe;AACf,QAAM,YAAY,WAAW,EAAE,WAAW,KAAK,CAAC;AAEhD,QAAM,QAAQ,YAAY,QAAQ,UAAU,SAAS,IAAI;AACzD,MAAI,UAAU,SAAS,UAAU,YAAY,UAAU,QAAQ;AAC7D,UAAM,YAAY;AAAA,MAChB;AAAA,IACF;AACA;AAAA,EACF;AAEA,QAAM,QAAQ,KAAK,cAAc;AAAA,IAC/B,EAAE,UAAU,EAAE,SAAS,EAAE,kBAAkB,MAAM,EAAE,EAAE;AAAA,IACrD;AAAA,EACF;AAEA,QAAM,YAAY;AAAA,IAChB,GAAG,iBAAiB,KAAK,CAAC,+BAA+B,KAAK;AAAA,EAChE;AACF;","names":["msg","toastText"]}
@@ -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":[]}