@herdctl/discord 1.1.0 → 1.2.0
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 +14 -1
- package/dist/__tests__/attachments.test.d.ts +8 -0
- package/dist/__tests__/attachments.test.d.ts.map +1 -0
- package/dist/__tests__/attachments.test.js +439 -0
- package/dist/__tests__/attachments.test.js.map +1 -0
- package/dist/__tests__/discord-connector.test.js +4 -1
- package/dist/__tests__/discord-connector.test.js.map +1 -1
- package/dist/__tests__/embeds.test.d.ts +2 -0
- package/dist/__tests__/embeds.test.d.ts.map +1 -0
- package/dist/__tests__/embeds.test.js +47 -0
- package/dist/__tests__/embeds.test.js.map +1 -0
- package/dist/__tests__/logger.test.js +4 -1
- package/dist/__tests__/logger.test.js.map +1 -1
- package/dist/__tests__/manager.test.js +1193 -28
- package/dist/__tests__/manager.test.js.map +1 -1
- package/dist/__tests__/message-normalizer.test.d.ts +2 -0
- package/dist/__tests__/message-normalizer.test.d.ts.map +1 -0
- package/dist/__tests__/message-normalizer.test.js +83 -0
- package/dist/__tests__/message-normalizer.test.js.map +1 -0
- package/dist/__tests__/runtime-parity.test.d.ts +2 -0
- package/dist/__tests__/runtime-parity.test.d.ts.map +1 -0
- package/dist/__tests__/runtime-parity.test.js +157 -0
- package/dist/__tests__/runtime-parity.test.js.map +1 -0
- package/dist/auto-mode-handler.d.ts.map +1 -1
- package/dist/auto-mode-handler.js +9 -0
- package/dist/auto-mode-handler.js.map +1 -1
- package/dist/commands/__tests__/command-manager.test.js +63 -3
- package/dist/commands/__tests__/command-manager.test.js.map +1 -1
- package/dist/commands/__tests__/extended-commands.test.d.ts +2 -0
- package/dist/commands/__tests__/extended-commands.test.d.ts.map +1 -0
- package/dist/commands/__tests__/extended-commands.test.js +159 -0
- package/dist/commands/__tests__/extended-commands.test.js.map +1 -0
- package/dist/commands/__tests__/help.test.js +5 -6
- package/dist/commands/__tests__/help.test.js.map +1 -1
- package/dist/commands/__tests__/reset.test.js +14 -6
- package/dist/commands/__tests__/reset.test.js.map +1 -1
- package/dist/commands/__tests__/status.test.js +27 -25
- package/dist/commands/__tests__/status.test.js.map +1 -1
- package/dist/commands/cancel.d.ts +3 -0
- package/dist/commands/cancel.d.ts.map +1 -0
- package/dist/commands/cancel.js +7 -0
- package/dist/commands/cancel.js.map +1 -0
- package/dist/commands/command-manager.d.ts +4 -1
- package/dist/commands/command-manager.d.ts.map +1 -1
- package/dist/commands/command-manager.js +65 -3
- package/dist/commands/command-manager.js.map +1 -1
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +33 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/help.d.ts +1 -1
- package/dist/commands/help.d.ts.map +1 -1
- package/dist/commands/help.js +26 -12
- package/dist/commands/help.js.map +1 -1
- package/dist/commands/index.d.ts +12 -1
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +12 -1
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/new.d.ts +3 -0
- package/dist/commands/new.d.ts.map +1 -0
- package/dist/commands/new.js +22 -0
- package/dist/commands/new.js.map +1 -0
- package/dist/commands/ping.d.ts +3 -0
- package/dist/commands/ping.d.ts.map +1 -0
- package/dist/commands/ping.js +22 -0
- package/dist/commands/ping.js.map +1 -0
- package/dist/commands/reset.d.ts +1 -1
- package/dist/commands/reset.d.ts.map +1 -1
- package/dist/commands/reset.js +13 -13
- package/dist/commands/reset.js.map +1 -1
- package/dist/commands/retry.d.ts +3 -0
- package/dist/commands/retry.d.ts.map +1 -0
- package/dist/commands/retry.js +25 -0
- package/dist/commands/retry.js.map +1 -0
- package/dist/commands/session.d.ts +3 -0
- package/dist/commands/session.d.ts.map +1 -0
- package/dist/commands/session.js +47 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/commands/skill.d.ts +3 -0
- package/dist/commands/skill.d.ts.map +1 -0
- package/dist/commands/skill.js +44 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/commands/skills.d.ts +3 -0
- package/dist/commands/skills.d.ts.map +1 -0
- package/dist/commands/skills.js +30 -0
- package/dist/commands/skills.js.map +1 -0
- package/dist/commands/status.d.ts +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +25 -18
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/stop.d.ts +3 -0
- package/dist/commands/stop.d.ts.map +1 -0
- package/dist/commands/stop.js +25 -0
- package/dist/commands/stop.js.map +1 -0
- package/dist/commands/tools.d.ts +3 -0
- package/dist/commands/tools.d.ts.map +1 -0
- package/dist/commands/tools.js +30 -0
- package/dist/commands/tools.js.map +1 -0
- package/dist/commands/types.d.ts +71 -1
- package/dist/commands/types.d.ts.map +1 -1
- package/dist/commands/usage.d.ts +3 -0
- package/dist/commands/usage.d.ts.map +1 -0
- package/dist/commands/usage.js +58 -0
- package/dist/commands/usage.js.map +1 -0
- package/dist/discord-connector.d.ts +10 -1
- package/dist/discord-connector.d.ts.map +1 -1
- package/dist/discord-connector.js +153 -8
- package/dist/discord-connector.js.map +1 -1
- package/dist/embeds.d.ts +47 -0
- package/dist/embeds.d.ts.map +1 -0
- package/dist/embeds.js +121 -0
- package/dist/embeds.js.map +1 -0
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/manager.d.ts +53 -24
- package/dist/manager.d.ts.map +1 -1
- package/dist/manager.js +1031 -217
- package/dist/manager.js.map +1 -1
- package/dist/mention-handler.d.ts.map +1 -1
- package/dist/mention-handler.js +27 -0
- package/dist/mention-handler.js.map +1 -1
- package/dist/message-normalizer.d.ts +40 -0
- package/dist/message-normalizer.d.ts.map +1 -0
- package/dist/message-normalizer.js +99 -0
- package/dist/message-normalizer.js.map +1 -0
- package/dist/types.d.ts +80 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/voice-transcriber.d.ts +31 -0
- package/dist/voice-transcriber.d.ts.map +1 -0
- package/dist/voice-transcriber.js +44 -0
- package/dist/voice-transcriber.js.map +1 -0
- package/package.json +3 -3
package/dist/commands/index.js
CHANGED
|
@@ -4,10 +4,21 @@
|
|
|
4
4
|
* Provides command registration, handling, and built-in commands
|
|
5
5
|
* for controlling the bot via Discord slash commands.
|
|
6
6
|
*/
|
|
7
|
+
// Built-in Commands
|
|
8
|
+
export { cancelCommand } from "./cancel.js";
|
|
7
9
|
// Command Manager
|
|
8
10
|
export { CommandManager } from "./command-manager.js";
|
|
9
|
-
|
|
11
|
+
export { configCommand } from "./config.js";
|
|
10
12
|
export { helpCommand } from "./help.js";
|
|
13
|
+
export { newCommand } from "./new.js";
|
|
14
|
+
export { pingCommand } from "./ping.js";
|
|
11
15
|
export { resetCommand } from "./reset.js";
|
|
16
|
+
export { retryCommand } from "./retry.js";
|
|
17
|
+
export { sessionCommand } from "./session.js";
|
|
18
|
+
export { skillCommand } from "./skill.js";
|
|
19
|
+
export { skillsCommand } from "./skills.js";
|
|
12
20
|
export { statusCommand } from "./status.js";
|
|
21
|
+
export { stopCommand } from "./stop.js";
|
|
22
|
+
export { toolsCommand } from "./tools.js";
|
|
23
|
+
export { usageCommand } from "./usage.js";
|
|
13
24
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,kBAAkB;AAClB,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,oBAAoB;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,kBAAkB;AAClB,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAa1C,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"new.d.ts","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/D,eAAO,MAAM,UAAU,EAAE,YAuBxB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export const newCommand = {
|
|
2
|
+
name: "new",
|
|
3
|
+
description: "Start a fresh conversation (clear current session)",
|
|
4
|
+
async execute(context) {
|
|
5
|
+
const { interaction, sessionManager, agentName } = context;
|
|
6
|
+
const channelId = interaction.channelId;
|
|
7
|
+
const wasCleared = await sessionManager.clearSession(channelId);
|
|
8
|
+
await interaction.reply({
|
|
9
|
+
embeds: [
|
|
10
|
+
{
|
|
11
|
+
description: wasCleared
|
|
12
|
+
? "Started a new conversation. Previous session context was cleared."
|
|
13
|
+
: "Started a new conversation. No previous session was active.",
|
|
14
|
+
color: 0x22c55e,
|
|
15
|
+
footer: { text: `herdctl · ${agentName}` },
|
|
16
|
+
},
|
|
17
|
+
],
|
|
18
|
+
ephemeral: true,
|
|
19
|
+
});
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=new.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"new.js","sourceRoot":"","sources":["../../src/commands/new.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,UAAU,GAAiB;IACtC,IAAI,EAAE,KAAK;IACX,WAAW,EAAE,oDAAoD;IAEjE,KAAK,CAAC,OAAO,CAAC,OAAuB;QACnC,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;QAC3D,MAAM,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC;QAExC,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAEhE,MAAM,WAAW,CAAC,KAAK,CAAC;YACtB,MAAM,EAAE;gBACN;oBACE,WAAW,EAAE,UAAU;wBACrB,CAAC,CAAC,mEAAmE;wBACrE,CAAC,CAAC,6DAA6D;oBACjE,KAAK,EAAE,QAAQ;oBACf,MAAM,EAAE,EAAE,IAAI,EAAE,aAAa,SAAS,EAAE,EAAE;iBAC3C;aACF;YACD,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ping.d.ts","sourceRoot":"","sources":["../../src/commands/ping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/D,eAAO,MAAM,WAAW,EAAE,YAqBzB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export const pingCommand = {
|
|
2
|
+
name: "ping",
|
|
3
|
+
description: "Quick health check",
|
|
4
|
+
async execute(context) {
|
|
5
|
+
const { interaction, connectorState, agentName } = context;
|
|
6
|
+
await interaction.reply({
|
|
7
|
+
embeds: [
|
|
8
|
+
{
|
|
9
|
+
description: [
|
|
10
|
+
"**Status:** online",
|
|
11
|
+
`**Connector:** ${connectorState.status}`,
|
|
12
|
+
`**Agent:** ${agentName}`,
|
|
13
|
+
].join("\n"),
|
|
14
|
+
color: 0x22c55e,
|
|
15
|
+
footer: { text: `herdctl · ${agentName}` },
|
|
16
|
+
},
|
|
17
|
+
],
|
|
18
|
+
ephemeral: true,
|
|
19
|
+
});
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=ping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ping.js","sourceRoot":"","sources":["../../src/commands/ping.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAiB;IACvC,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,oBAAoB;IAEjC,KAAK,CAAC,OAAO,CAAC,OAAuB;QACnC,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;QAC3D,MAAM,WAAW,CAAC,KAAK,CAAC;YACtB,MAAM,EAAE;gBACN;oBACE,WAAW,EAAE;wBACX,oBAAoB;wBACpB,kBAAkB,cAAc,CAAC,MAAM,EAAE;wBACzC,cAAc,SAAS,EAAE;qBAC1B,CAAC,IAAI,CAAC,IAAI,CAAC;oBACZ,KAAK,EAAE,QAAQ;oBACf,MAAM,EAAE,EAAE,IAAI,EAAE,aAAa,SAAS,EAAE,EAAE;iBAC3C;aACF;YACD,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
|
package/dist/commands/reset.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* /reset command - Clear conversation context
|
|
3
3
|
*
|
|
4
4
|
* Clears the session for the current channel, starting a fresh conversation.
|
|
5
|
-
* Responds ephemerally with confirmation.
|
|
5
|
+
* Responds ephemerally with a color-coded embed confirmation.
|
|
6
6
|
*/
|
|
7
7
|
import type { SlashCommand } from "./types.js";
|
|
8
8
|
export declare const resetCommand: SlashCommand;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reset.d.ts","sourceRoot":"","sources":["../../src/commands/reset.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/D,eAAO,MAAM,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"reset.d.ts","sourceRoot":"","sources":["../../src/commands/reset.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/D,eAAO,MAAM,YAAY,EAAE,YAuB1B,CAAC"}
|
package/dist/commands/reset.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* /reset command - Clear conversation context
|
|
3
3
|
*
|
|
4
4
|
* Clears the session for the current channel, starting a fresh conversation.
|
|
5
|
-
* Responds ephemerally with confirmation.
|
|
5
|
+
* Responds ephemerally with a color-coded embed confirmation.
|
|
6
6
|
*/
|
|
7
7
|
export const resetCommand = {
|
|
8
8
|
name: "reset",
|
|
@@ -11,18 +11,18 @@ export const resetCommand = {
|
|
|
11
11
|
const { interaction, sessionManager, agentName } = context;
|
|
12
12
|
const channelId = interaction.channelId;
|
|
13
13
|
const wasCleared = await sessionManager.clearSession(channelId);
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
14
|
+
await interaction.reply({
|
|
15
|
+
embeds: [
|
|
16
|
+
{
|
|
17
|
+
description: wasCleared
|
|
18
|
+
? "Session cleared. Starting fresh."
|
|
19
|
+
: "No active session in this channel.",
|
|
20
|
+
color: wasCleared ? 0x22c55e : 0x6b7280,
|
|
21
|
+
footer: { text: `herdctl \u00b7 ${agentName}` },
|
|
22
|
+
},
|
|
23
|
+
],
|
|
24
|
+
ephemeral: true,
|
|
25
|
+
});
|
|
26
26
|
},
|
|
27
27
|
};
|
|
28
28
|
//# sourceMappingURL=reset.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reset.js","sourceRoot":"","sources":["../../src/commands/reset.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,kDAAkD;IAE/D,KAAK,CAAC,OAAO,CAAC,OAAuB;QACnC,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;QAC3D,MAAM,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC;QAExC,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAEhE,
|
|
1
|
+
{"version":3,"file":"reset.js","sourceRoot":"","sources":["../../src/commands/reset.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,kDAAkD;IAE/D,KAAK,CAAC,OAAO,CAAC,OAAuB;QACnC,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;QAC3D,MAAM,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC;QAExC,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAEhE,MAAM,WAAW,CAAC,KAAK,CAAC;YACtB,MAAM,EAAE;gBACN;oBACE,WAAW,EAAE,UAAU;wBACrB,CAAC,CAAC,kCAAkC;wBACpC,CAAC,CAAC,oCAAoC;oBACxC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;oBACvC,MAAM,EAAE,EAAE,IAAI,EAAE,kBAAkB,SAAS,EAAE,EAAE;iBAChD;aACF;YACD,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../../src/commands/retry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/D,eAAO,MAAM,YAAY,EAAE,YA0B1B,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export const retryCommand = {
|
|
2
|
+
name: "retry",
|
|
3
|
+
description: "Retry the last prompt in this channel",
|
|
4
|
+
async execute(context) {
|
|
5
|
+
const { interaction, commandActions, agentName } = context;
|
|
6
|
+
const channelId = interaction.channelId;
|
|
7
|
+
const result = commandActions?.retryRun
|
|
8
|
+
? await commandActions.retryRun(channelId)
|
|
9
|
+
: {
|
|
10
|
+
success: false,
|
|
11
|
+
message: "Retry is not available in this deployment.",
|
|
12
|
+
};
|
|
13
|
+
await interaction.reply({
|
|
14
|
+
embeds: [
|
|
15
|
+
{
|
|
16
|
+
description: result.message,
|
|
17
|
+
color: result.success ? 0x22c55e : 0xef4444,
|
|
18
|
+
footer: { text: `herdctl · ${agentName}` },
|
|
19
|
+
},
|
|
20
|
+
],
|
|
21
|
+
ephemeral: true,
|
|
22
|
+
});
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=retry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/commands/retry.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,uCAAuC;IAEpD,KAAK,CAAC,OAAO,CAAC,OAAuB;QACnC,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;QAC3D,MAAM,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC;QAExC,MAAM,MAAM,GAAG,cAAc,EAAE,QAAQ;YACrC,CAAC,CAAC,MAAM,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC1C,CAAC,CAAC;gBACE,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,4CAA4C;aACtD,CAAC;QAEN,MAAM,WAAW,CAAC,KAAK,CAAC;YACtB,MAAM,EAAE;gBACN;oBACE,WAAW,EAAE,MAAM,CAAC,OAAO;oBAC3B,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;oBAC3C,MAAM,EAAE,EAAE,IAAI,EAAE,aAAa,SAAS,EAAE,EAAE;iBAC3C;aACF;YACD,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/D,eAAO,MAAM,cAAc,EAAE,YAmD5B,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { formatDuration } from "@herdctl/chat";
|
|
2
|
+
export const sessionCommand = {
|
|
3
|
+
name: "session",
|
|
4
|
+
description: "Show current session and run state for this channel",
|
|
5
|
+
async execute(context) {
|
|
6
|
+
const { interaction, sessionManager, commandActions, agentName } = context;
|
|
7
|
+
const channelId = interaction.channelId;
|
|
8
|
+
const session = await sessionManager.getSession(channelId);
|
|
9
|
+
const managedInfo = commandActions?.getSessionInfo
|
|
10
|
+
? await commandActions.getSessionInfo(channelId)
|
|
11
|
+
: undefined;
|
|
12
|
+
const lines = [];
|
|
13
|
+
if (session) {
|
|
14
|
+
lines.push("**Session**");
|
|
15
|
+
lines.push(`\`${session.sessionId.substring(0, 20)}…\` · Active ${formatDuration(session.lastMessageAt)} ago`);
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
lines.push("**Session**");
|
|
19
|
+
lines.push("No active session.");
|
|
20
|
+
}
|
|
21
|
+
lines.push("");
|
|
22
|
+
lines.push("**Run State**");
|
|
23
|
+
if (managedInfo?.activeJobId) {
|
|
24
|
+
lines.push(`Running job: \`${managedInfo.activeJobId}\``);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
lines.push("No active run in this channel.");
|
|
28
|
+
}
|
|
29
|
+
if (managedInfo?.lastPrompt) {
|
|
30
|
+
const preview = managedInfo.lastPrompt.length > 100
|
|
31
|
+
? `${managedInfo.lastPrompt.substring(0, 100)}…`
|
|
32
|
+
: managedInfo.lastPrompt;
|
|
33
|
+
lines.push(`Last prompt: \`${preview}\``);
|
|
34
|
+
}
|
|
35
|
+
await interaction.reply({
|
|
36
|
+
embeds: [
|
|
37
|
+
{
|
|
38
|
+
description: lines.join("\n"),
|
|
39
|
+
color: 0x3b82f6,
|
|
40
|
+
footer: { text: `herdctl · ${agentName}` },
|
|
41
|
+
},
|
|
42
|
+
],
|
|
43
|
+
ephemeral: true,
|
|
44
|
+
});
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/commands/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG/C,MAAM,CAAC,MAAM,cAAc,GAAiB;IAC1C,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,qDAAqD;IAElE,KAAK,CAAC,OAAO,CAAC,OAAuB;QACnC,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;QAC3E,MAAM,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC;QAExC,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC3D,MAAM,WAAW,GAAG,cAAc,EAAE,cAAc;YAChD,CAAC,CAAC,MAAM,cAAc,CAAC,cAAc,CAAC,SAAS,CAAC;YAChD,CAAC,CAAC,SAAS,CAAC;QAEd,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC1B,KAAK,CAAC,IAAI,CACR,KAAK,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,cAAc,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CACnG,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACnC,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC5B,IAAI,WAAW,EAAE,WAAW,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,kBAAkB,WAAW,CAAC,WAAW,IAAI,CAAC,CAAC;QAC5D,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,WAAW,EAAE,UAAU,EAAE,CAAC;YAC5B,MAAM,OAAO,GACX,WAAW,CAAC,UAAU,CAAC,MAAM,GAAG,GAAG;gBACjC,CAAC,CAAC,GAAG,WAAW,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG;gBAChD,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,kBAAkB,OAAO,IAAI,CAAC,CAAC;QAC5C,CAAC;QAED,MAAM,WAAW,CAAC,KAAK,CAAC;YACtB,MAAM,EAAE;gBACN;oBACE,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;oBAC7B,KAAK,EAAE,QAAQ;oBACf,MAAM,EAAE,EAAE,IAAI,EAAE,aAAa,SAAS,EAAE,EAAE;iBAC3C;aACF;YACD,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../../src/commands/skill.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,YAAY,CAAC;AA8B/D,eAAO,MAAM,YAAY,EAAE,YAyB1B,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
function buildSkillCommand(builder) {
|
|
2
|
+
builder.addStringOption((option) => option.setName("name").setDescription("Skill name").setRequired(true).setAutocomplete(true));
|
|
3
|
+
builder.addStringOption((option) => option.setName("input").setDescription("Optional input for the skill").setRequired(false));
|
|
4
|
+
return builder;
|
|
5
|
+
}
|
|
6
|
+
async function autocompleteSkill(interaction, context) {
|
|
7
|
+
const focused = interaction.options.getFocused().toLowerCase();
|
|
8
|
+
const skills = context.commandActions?.listSkills
|
|
9
|
+
? await context.commandActions.listSkills()
|
|
10
|
+
: [];
|
|
11
|
+
const choices = skills
|
|
12
|
+
.filter((skill) => skill.name.toLowerCase().includes(focused))
|
|
13
|
+
.slice(0, 25)
|
|
14
|
+
.map((skill) => ({
|
|
15
|
+
name: skill.description ? `${skill.name} — ${skill.description}`.slice(0, 100) : skill.name,
|
|
16
|
+
value: skill.name,
|
|
17
|
+
}));
|
|
18
|
+
await interaction.respond(choices);
|
|
19
|
+
}
|
|
20
|
+
export const skillCommand = {
|
|
21
|
+
name: "skill",
|
|
22
|
+
description: "Trigger a skill in this channel",
|
|
23
|
+
build: buildSkillCommand,
|
|
24
|
+
autocomplete: autocompleteSkill,
|
|
25
|
+
async execute(context) {
|
|
26
|
+
const { interaction, commandActions, agentName } = context;
|
|
27
|
+
const skillName = interaction.options.getString("name", true);
|
|
28
|
+
const input = interaction.options.getString("input", false) ?? undefined;
|
|
29
|
+
const result = commandActions?.runSkill
|
|
30
|
+
? await commandActions.runSkill(interaction.channelId, skillName, input)
|
|
31
|
+
: { success: false, message: "Skill execution is not available in this deployment." };
|
|
32
|
+
await interaction.reply({
|
|
33
|
+
embeds: [
|
|
34
|
+
{
|
|
35
|
+
description: result.message,
|
|
36
|
+
color: result.success ? 0x22c55e : 0xef4444,
|
|
37
|
+
footer: { text: `herdctl · ${agentName}` },
|
|
38
|
+
},
|
|
39
|
+
],
|
|
40
|
+
ephemeral: true,
|
|
41
|
+
});
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=skill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill.js","sourceRoot":"","sources":["../../src/commands/skill.ts"],"names":[],"mappings":"AAGA,SAAS,iBAAiB,CAAC,OAA4B;IACrD,OAAO,CAAC,eAAe,CAAC,CAAC,MAAM,EAAE,EAAE,CACjC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAC5F,CAAC;IACF,OAAO,CAAC,eAAe,CAAC,CAAC,MAAM,EAAE,EAAE,CACjC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,8BAA8B,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAC1F,CAAC;IACF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC9B,WAAoC,EACpC,OAA4C;IAE5C,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,WAAW,EAAE,CAAC;IAC/D,MAAM,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,UAAU;QAC/C,CAAC,CAAC,MAAM,OAAO,CAAC,cAAc,CAAC,UAAU,EAAE;QAC3C,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,OAAO,GAAG,MAAM;SACnB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;SAC7D,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;SACZ,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACf,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI;QAC3F,KAAK,EAAE,KAAK,CAAC,IAAI;KAClB,CAAC,CAAC,CAAC;IACN,MAAM,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,iCAAiC;IAC9C,KAAK,EAAE,iBAAiB;IACxB,YAAY,EAAE,iBAAiB;IAE/B,KAAK,CAAC,OAAO,CAAC,OAAuB;QACnC,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;QAC3D,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC9D,MAAM,KAAK,GAAG,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,SAAS,CAAC;QACzE,MAAM,MAAM,GAAG,cAAc,EAAE,QAAQ;YACrC,CAAC,CAAC,MAAM,cAAc,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC;YACxE,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,sDAAsD,EAAE,CAAC;QAExF,MAAM,WAAW,CAAC,KAAK,CAAC;YACtB,MAAM,EAAE;gBACN;oBACE,WAAW,EAAE,MAAM,CAAC,OAAO;oBAC3B,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;oBAC3C,MAAM,EAAE,EAAE,IAAI,EAAE,aAAa,SAAS,EAAE,EAAE;iBAC3C;aACF;YACD,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../src/commands/skills.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/D,eAAO,MAAM,aAAa,EAAE,YAgC3B,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export const skillsCommand = {
|
|
2
|
+
name: "skills",
|
|
3
|
+
description: "List discovered skills for this agent",
|
|
4
|
+
async execute(context) {
|
|
5
|
+
const { interaction, commandActions, agentName } = context;
|
|
6
|
+
const skills = commandActions?.listSkills ? await commandActions.listSkills() : [];
|
|
7
|
+
if (skills.length === 0) {
|
|
8
|
+
await interaction.reply({
|
|
9
|
+
content: "No skills were discovered for this agent.",
|
|
10
|
+
ephemeral: true,
|
|
11
|
+
});
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const lines = skills.slice(0, 25).map((skill) => {
|
|
15
|
+
const detail = skill.description ? ` — ${skill.description}` : "";
|
|
16
|
+
return `• \`${skill.name}\`${detail}`;
|
|
17
|
+
});
|
|
18
|
+
await interaction.reply({
|
|
19
|
+
embeds: [
|
|
20
|
+
{
|
|
21
|
+
description: [`Discovered **${skills.length}** skill(s):`, "", ...lines].join("\n"),
|
|
22
|
+
color: 0x3b82f6,
|
|
23
|
+
footer: { text: `herdctl · ${agentName}` },
|
|
24
|
+
},
|
|
25
|
+
],
|
|
26
|
+
ephemeral: true,
|
|
27
|
+
});
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=skills.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/commands/skills.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,aAAa,GAAiB;IACzC,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,uCAAuC;IAEpD,KAAK,CAAC,OAAO,CAAC,OAAuB;QACnC,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;QAC3D,MAAM,MAAM,GAAG,cAAc,EAAE,UAAU,CAAC,CAAC,CAAC,MAAM,cAAc,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAEnF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,WAAW,CAAC,KAAK,CAAC;gBACtB,OAAO,EAAE,2CAA2C;gBACpD,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,OAAO,OAAO,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,MAAM,WAAW,CAAC,KAAK,CAAC;YACtB,MAAM,EAAE;gBACN;oBACE,WAAW,EAAE,CAAC,gBAAgB,MAAM,CAAC,MAAM,cAAc,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;oBACnF,KAAK,EAAE,QAAQ;oBACf,MAAM,EAAE,EAAE,IAAI,EAAE,aAAa,SAAS,EAAE,EAAE;iBAC3C;aACF;YACD,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* /status command - Show agent status and session info
|
|
3
3
|
*
|
|
4
|
-
* Responds ephemerally with
|
|
4
|
+
* Responds ephemerally with a condensed embed showing connection status
|
|
5
5
|
* and session information for the current channel.
|
|
6
6
|
*/
|
|
7
7
|
import type { SlashCommand } from "./types.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/D,eAAO,MAAM,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/D,eAAO,MAAM,aAAa,EAAE,YAyD3B,CAAC"}
|
package/dist/commands/status.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* /status command - Show agent status and session info
|
|
3
3
|
*
|
|
4
|
-
* Responds ephemerally with
|
|
4
|
+
* Responds ephemerally with a condensed embed showing connection status
|
|
5
5
|
* and session information for the current channel.
|
|
6
6
|
*/
|
|
7
|
-
import { formatDuration,
|
|
7
|
+
import { formatDuration, getStatusEmoji } from "@herdctl/chat";
|
|
8
8
|
export const statusCommand = {
|
|
9
9
|
name: "status",
|
|
10
10
|
description: "Show agent status and session info",
|
|
@@ -13,35 +13,42 @@ export const statusCommand = {
|
|
|
13
13
|
const channelId = interaction.channelId;
|
|
14
14
|
// Get session info for this channel
|
|
15
15
|
const session = await sessionManager.getSession(channelId);
|
|
16
|
-
// Build status
|
|
16
|
+
// Build condensed status
|
|
17
17
|
const statusEmoji = getStatusEmoji(connectorState.status);
|
|
18
18
|
const botUsername = connectorState.botUser?.username ?? "Unknown";
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
19
|
+
const statusLabel = connectorState.status.charAt(0).toUpperCase() + connectorState.status.slice(1);
|
|
20
|
+
const lines = [];
|
|
21
|
+
// Connection line: "🟢 **Connected** as MyBot · Uptime 2h 30m"
|
|
22
|
+
const connectionParts = [`${statusEmoji} **${statusLabel}**`, `as ${botUsername}`];
|
|
23
23
|
if (connectorState.connectedAt) {
|
|
24
|
-
|
|
25
|
-
statusMessage += `\n**Uptime:** ${formatDuration(connectorState.connectedAt)}`;
|
|
24
|
+
connectionParts.push(`\u00b7 Uptime ${formatDuration(connectorState.connectedAt)}`);
|
|
26
25
|
}
|
|
26
|
+
lines.push(connectionParts.join(" "));
|
|
27
27
|
if (connectorState.reconnectAttempts > 0) {
|
|
28
|
-
|
|
28
|
+
lines.push(`Reconnect attempts: ${connectorState.reconnectAttempts}`);
|
|
29
29
|
}
|
|
30
30
|
if (connectorState.lastError) {
|
|
31
|
-
|
|
31
|
+
lines.push(`Last error: ${connectorState.lastError}`);
|
|
32
32
|
}
|
|
33
|
-
// Session
|
|
34
|
-
|
|
33
|
+
// Session section
|
|
34
|
+
lines.push("");
|
|
35
35
|
if (session) {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
statusMessage += `\n**Session Age:** ${formatDuration(session.lastMessageAt)}`;
|
|
36
|
+
lines.push("**Session**");
|
|
37
|
+
lines.push(`\`${session.sessionId.substring(0, 20)}\u2026\` \u00b7 Active ${formatDuration(session.lastMessageAt)} ago`);
|
|
39
38
|
}
|
|
40
39
|
else {
|
|
41
|
-
|
|
40
|
+
lines.push("**Session**");
|
|
41
|
+
lines.push("No active session in this channel.");
|
|
42
42
|
}
|
|
43
43
|
await interaction.reply({
|
|
44
|
-
|
|
44
|
+
embeds: [
|
|
45
|
+
{
|
|
46
|
+
description: lines.join("\n"),
|
|
47
|
+
color: 0x3b82f6,
|
|
48
|
+
footer: { text: `herdctl \u00b7 ${agentName}` },
|
|
49
|
+
timestamp: new Date().toISOString(),
|
|
50
|
+
},
|
|
51
|
+
],
|
|
45
52
|
ephemeral: true,
|
|
46
53
|
});
|
|
47
54
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG/D,MAAM,CAAC,MAAM,aAAa,GAAiB;IACzC,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,oCAAoC;IAEjD,KAAK,CAAC,OAAO,CAAC,OAAuB;QACnC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;QAC3E,MAAM,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC;QAExC,oCAAoC;QACpC,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAE3D,yBAAyB;QACzB,MAAM,WAAW,GAAG,cAAc,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAC1D,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,EAAE,QAAQ,IAAI,SAAS,CAAC;QAClE,MAAM,WAAW,GACf,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAEjF,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,+DAA+D;QAC/D,MAAM,eAAe,GAAG,CAAC,GAAG,WAAW,MAAM,WAAW,IAAI,EAAE,MAAM,WAAW,EAAE,CAAC,CAAC;QACnF,IAAI,cAAc,CAAC,WAAW,EAAE,CAAC;YAC/B,eAAe,CAAC,IAAI,CAAC,iBAAiB,cAAc,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACtF,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAEtC,IAAI,cAAc,CAAC,iBAAiB,GAAG,CAAC,EAAE,CAAC;YACzC,KAAK,CAAC,IAAI,CAAC,uBAAuB,cAAc,CAAC,iBAAiB,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,cAAc,CAAC,SAAS,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,eAAe,cAAc,CAAC,SAAS,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,kBAAkB;QAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC1B,KAAK,CAAC,IAAI,CACR,KAAK,OAAO,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,0BAA0B,cAAc,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAC7G,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC1B,KAAK,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QACnD,CAAC;QAED,MAAM,WAAW,CAAC,KAAK,CAAC;YACtB,MAAM,EAAE;gBACN;oBACE,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;oBAC7B,KAAK,EAAE,QAAQ;oBACf,MAAM,EAAE,EAAE,IAAI,EAAE,kBAAkB,SAAS,EAAE,EAAE;oBAC/C,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;iBACpC;aACF;YACD,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../src/commands/stop.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/D,eAAO,MAAM,WAAW,EAAE,YA0BzB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export const stopCommand = {
|
|
2
|
+
name: "stop",
|
|
3
|
+
description: "Stop the active run in this channel",
|
|
4
|
+
async execute(context) {
|
|
5
|
+
const { interaction, commandActions, agentName } = context;
|
|
6
|
+
const channelId = interaction.channelId;
|
|
7
|
+
const result = commandActions?.stopRun
|
|
8
|
+
? await commandActions.stopRun(channelId)
|
|
9
|
+
: {
|
|
10
|
+
success: false,
|
|
11
|
+
message: "Stop is not available in this deployment.",
|
|
12
|
+
};
|
|
13
|
+
await interaction.reply({
|
|
14
|
+
embeds: [
|
|
15
|
+
{
|
|
16
|
+
description: result.message,
|
|
17
|
+
color: result.success ? 0x22c55e : 0xef4444,
|
|
18
|
+
footer: { text: `herdctl · ${agentName}` },
|
|
19
|
+
},
|
|
20
|
+
],
|
|
21
|
+
ephemeral: true,
|
|
22
|
+
});
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=stop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/commands/stop.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,WAAW,GAAiB;IACvC,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,qCAAqC;IAElD,KAAK,CAAC,OAAO,CAAC,OAAuB;QACnC,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;QAC3D,MAAM,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC;QAExC,MAAM,MAAM,GAAG,cAAc,EAAE,OAAO;YACpC,CAAC,CAAC,MAAM,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC;YACzC,CAAC,CAAC;gBACE,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,2CAA2C;aACrD,CAAC;QAEN,MAAM,WAAW,CAAC,KAAK,CAAC;YACtB,MAAM,EAAE;gBACN;oBACE,WAAW,EAAE,MAAM,CAAC,OAAO;oBAC3B,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ;oBAC3C,MAAM,EAAE,EAAE,IAAI,EAAE,aAAa,SAAS,EAAE,EAAE;iBAC3C;aACF;YACD,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/commands/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/D,eAAO,MAAM,YAAY,EAAE,YA8B1B,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export const toolsCommand = {
|
|
2
|
+
name: "tools",
|
|
3
|
+
description: "Show allowed/denied tools and MCP integration status",
|
|
4
|
+
async execute(context) {
|
|
5
|
+
const { interaction, commandActions, agentName } = context;
|
|
6
|
+
const config = commandActions?.getAgentConfig ? await commandActions.getAgentConfig() : null;
|
|
7
|
+
if (!config) {
|
|
8
|
+
await interaction.reply({
|
|
9
|
+
content: "Tool details are not available in this deployment.",
|
|
10
|
+
ephemeral: true,
|
|
11
|
+
});
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
await interaction.reply({
|
|
15
|
+
embeds: [
|
|
16
|
+
{
|
|
17
|
+
description: [
|
|
18
|
+
`**Allowed:** ${config.allowedTools?.length ? config.allowedTools.join(", ") : "all defaults"}`,
|
|
19
|
+
`**Denied:** ${config.deniedTools?.length ? config.deniedTools.join(", ") : "none"}`,
|
|
20
|
+
`**MCP Servers:** ${config.mcpServers?.length ? config.mcpServers.join(", ") : "none"}`,
|
|
21
|
+
].join("\n"),
|
|
22
|
+
color: 0x3b82f6,
|
|
23
|
+
footer: { text: `herdctl · ${agentName}` },
|
|
24
|
+
},
|
|
25
|
+
],
|
|
26
|
+
ephemeral: true,
|
|
27
|
+
});
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/commands/tools.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,sDAAsD;IAEnE,KAAK,CAAC,OAAO,CAAC,OAAuB;QACnC,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;QAC3D,MAAM,MAAM,GAAG,cAAc,EAAE,cAAc,CAAC,CAAC,CAAC,MAAM,cAAc,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7F,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,WAAW,CAAC,KAAK,CAAC;gBACtB,OAAO,EAAE,oDAAoD;gBAC7D,SAAS,EAAE,IAAI;aAChB,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,MAAM,WAAW,CAAC,KAAK,CAAC;YACtB,MAAM,EAAE;gBACN;oBACE,WAAW,EAAE;wBACX,gBAAgB,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE;wBAC/F,eAAe,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;wBACpF,oBAAoB,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;qBACxF,CAAC,IAAI,CAAC,IAAI,CAAC;oBACZ,KAAK,EAAE,QAAQ;oBACf,MAAM,EAAE,EAAE,IAAI,EAAE,aAAa,SAAS,EAAE,EAAE;iBAC3C;aACF;YACD,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
|