@ebowwa/daemons 0.5.0 → 0.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent.d.ts +37 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/bin/discord-cli.js +25 -60
- package/dist/bin/telegram-cli.js +25 -60
- package/dist/channels/base.d.ts +163 -0
- package/dist/channels/base.d.ts.map +1 -0
- package/dist/channels/discord.d.ts +61 -0
- package/dist/channels/discord.d.ts.map +1 -0
- package/dist/channels/index.d.ts +55 -0
- package/dist/channels/index.d.ts.map +1 -0
- package/dist/channels/telegram.d.ts +113 -0
- package/dist/channels/telegram.d.ts.map +1 -0
- package/dist/daemon.d.ts +119 -0
- package/dist/daemon.d.ts.map +1 -0
- package/dist/hooks.d.ts +34 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -60
- package/dist/memory.d.ts +151 -0
- package/dist/memory.d.ts.map +1 -0
- package/dist/skills/coding/commit.d.ts +31 -0
- package/dist/skills/coding/commit.d.ts.map +1 -0
- package/dist/skills/coding/execute-subtask.d.ts +30 -0
- package/dist/skills/coding/execute-subtask.d.ts.map +1 -0
- package/dist/skills/coding/fix-issues.d.ts +29 -0
- package/dist/skills/coding/fix-issues.d.ts.map +1 -0
- package/dist/skills/coding/index.d.ts +21 -0
- package/dist/skills/coding/index.d.ts.map +1 -0
- package/dist/skills/coding/plan-task.d.ts +38 -0
- package/dist/skills/coding/plan-task.d.ts.map +1 -0
- package/dist/skills/coding/quality-check.d.ts +35 -0
- package/dist/skills/coding/quality-check.d.ts.map +1 -0
- package/dist/skills/index.d.ts +38 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/registry.d.ts +95 -0
- package/dist/skills/registry.d.ts.map +1 -0
- package/dist/skills/shared/index.d.ts +16 -0
- package/dist/skills/shared/index.d.ts.map +1 -0
- package/dist/skills/shared/reflect.d.ts +42 -0
- package/dist/skills/shared/reflect.d.ts.map +1 -0
- package/dist/skills/shared/review.d.ts +42 -0
- package/dist/skills/shared/review.d.ts.map +1 -0
- package/dist/skills/shared/trajectory.d.ts +80 -0
- package/dist/skills/shared/trajectory.d.ts.map +1 -0
- package/dist/skills/trading/analyze-market.d.ts +43 -0
- package/dist/skills/trading/analyze-market.d.ts.map +1 -0
- package/dist/skills/trading/check-risk.d.ts +33 -0
- package/dist/skills/trading/check-risk.d.ts.map +1 -0
- package/dist/skills/trading/execute-trade.d.ts +38 -0
- package/dist/skills/trading/execute-trade.d.ts.map +1 -0
- package/dist/skills/trading/generate-signal.d.ts +57 -0
- package/dist/skills/trading/generate-signal.d.ts.map +1 -0
- package/dist/skills/trading/index.d.ts +21 -0
- package/dist/skills/trading/index.d.ts.map +1 -0
- package/dist/skills/trading/monitor-position.d.ts +37 -0
- package/dist/skills/trading/monitor-position.d.ts.map +1 -0
- package/dist/skills/types.d.ts +173 -0
- package/dist/skills/types.d.ts.map +1 -0
- package/dist/skills/workflows.d.ts +36 -0
- package/dist/skills/workflows.d.ts.map +1 -0
- package/dist/state.d.ts +31 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/tools.d.ts +42 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/types.d.ts +281 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/workflow.d.ts +182 -0
- package/dist/workflow.d.ts.map +1 -0
- package/dist/workflows/coding.d.ts +79 -0
- package/dist/workflows/coding.d.ts.map +1 -0
- package/dist/workflows/index.d.ts +24 -0
- package/dist/workflows/index.d.ts.map +1 -0
- package/dist/workflows/trading.d.ts +72 -0
- package/dist/workflows/trading.d.ts.map +1 -0
- package/package.json +9 -2
- package/src/channels/base.ts +1 -0
- package/src/channels/telegram.ts +2 -1
- package/src/skills/shared/trajectory.ts +8 -1
package/dist/agent.d.ts
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GLM Agent - Individual GLM-powered agent
|
|
3
|
+
*
|
|
4
|
+
* Wraps GLM 4.7 API with tool access and hook integration.
|
|
5
|
+
*/
|
|
6
|
+
import type { GLMAgentConfig, GLMToolResult } from "./types.js";
|
|
7
|
+
export declare class GLMAgent {
|
|
8
|
+
private config;
|
|
9
|
+
private client;
|
|
10
|
+
private tools;
|
|
11
|
+
constructor(config: GLMAgentConfig);
|
|
12
|
+
/**
|
|
13
|
+
* Execute a prompt and get response
|
|
14
|
+
*/
|
|
15
|
+
execute(prompt: string, tools?: Record<string, unknown>): Promise<string>;
|
|
16
|
+
/**
|
|
17
|
+
* Execute a tool call
|
|
18
|
+
*/
|
|
19
|
+
executeTool(toolName: string, args: unknown): Promise<GLMToolResult>;
|
|
20
|
+
/**
|
|
21
|
+
* Register a tool
|
|
22
|
+
*/
|
|
23
|
+
registerTool(name: string, handler: (args: unknown) => Promise<unknown>): void;
|
|
24
|
+
/**
|
|
25
|
+
* Get available tools
|
|
26
|
+
*/
|
|
27
|
+
getAvailableTools(): string[];
|
|
28
|
+
/**
|
|
29
|
+
* Get agent ID
|
|
30
|
+
*/
|
|
31
|
+
get agentId(): string;
|
|
32
|
+
/**
|
|
33
|
+
* Get agent name
|
|
34
|
+
*/
|
|
35
|
+
get name(): string;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAIhE,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,KAAK,CAA+D;gBAEhE,MAAM,EAAE,cAAc;IAKlC;;OAEG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IA6B/E;;OAEG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;IA4B1E;;OAEG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI;IAI9E;;OAEG;IACH,iBAAiB,IAAI,MAAM,EAAE;IAI7B;;OAEG;IACH,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}
|
package/dist/bin/discord-cli.js
CHANGED
|
@@ -118961,7 +118961,7 @@ var coerce = {
|
|
|
118961
118961
|
date: (arg) => ZodDate.create({ ...arg, coerce: true })
|
|
118962
118962
|
};
|
|
118963
118963
|
var NEVER = INVALID;
|
|
118964
|
-
// ../codespaces-types/runtime/ai.
|
|
118964
|
+
// ../codespaces-types/runtime/ai.js
|
|
118965
118965
|
var ChatMessageRoleSchema = exports_external.enum(["system", "user", "assistant", "tool"]);
|
|
118966
118966
|
var ToolCallSchema = exports_external.object({
|
|
118967
118967
|
id: exports_external.string(),
|
|
@@ -119214,13 +119214,22 @@ class GLMNetworkError extends Error {
|
|
|
119214
119214
|
function resolveApiKey(apiKey) {
|
|
119215
119215
|
if (apiKey)
|
|
119216
119216
|
return apiKey;
|
|
119217
|
+
const keysArray = process.env.Z_AI_API_KEYS || process.env.ZAI_API_KEYS;
|
|
119218
|
+
if (keysArray) {
|
|
119219
|
+
try {
|
|
119220
|
+
const keys = JSON.parse(keysArray);
|
|
119221
|
+
if (keys.length > 0) {
|
|
119222
|
+
return keys[0];
|
|
119223
|
+
}
|
|
119224
|
+
} catch {}
|
|
119225
|
+
}
|
|
119217
119226
|
if (process.env.Z_AI_API_KEY)
|
|
119218
119227
|
return process.env.Z_AI_API_KEY;
|
|
119219
119228
|
if (process.env.ZAI_API_KEY)
|
|
119220
119229
|
return process.env.ZAI_API_KEY;
|
|
119221
119230
|
if (process.env.GLM_API_KEY)
|
|
119222
119231
|
return process.env.GLM_API_KEY;
|
|
119223
|
-
throw new Error("GLM API key not found. Set Z_AI_API_KEY, ZAI_API_KEY, or GLM_API_KEY
|
|
119232
|
+
throw new Error("GLM API key not found. Set Z_AI_API_KEYS (JSON array), Z_AI_API_KEY, ZAI_API_KEY, or GLM_API_KEY.");
|
|
119224
119233
|
}
|
|
119225
119234
|
function formatLatency(ms) {
|
|
119226
119235
|
if (ms < 1000)
|
|
@@ -119889,7 +119898,7 @@ class ToolExecutor {
|
|
|
119889
119898
|
content,
|
|
119890
119899
|
iterations,
|
|
119891
119900
|
toolCalls: allToolCalls,
|
|
119892
|
-
toolResults,
|
|
119901
|
+
toolResults: Object.fromEntries(toolResults),
|
|
119893
119902
|
rawResponse: response
|
|
119894
119903
|
};
|
|
119895
119904
|
}
|
|
@@ -120628,7 +120637,7 @@ var TrajectoryParams = exports_external2.discriminatedUnion("action", [
|
|
|
120628
120637
|
primitiveId: exports_external2.string(),
|
|
120629
120638
|
package: exports_external2.string(),
|
|
120630
120639
|
version: exports_external2.string(),
|
|
120631
|
-
inputs: exports_external2.record(exports_external2.unknown()),
|
|
120640
|
+
inputs: exports_external2.record(exports_external2.string(), exports_external2.unknown()),
|
|
120632
120641
|
output: exports_external2.unknown(),
|
|
120633
120642
|
durationNs: exports_external2.number(),
|
|
120634
120643
|
verified: exports_external2.boolean(),
|
|
@@ -120678,6 +120687,12 @@ var trajectorySkill = {
|
|
|
120678
120687
|
maxRetries: 1,
|
|
120679
120688
|
async execute(params, context) {
|
|
120680
120689
|
const memory2 = await getTrajectoryMemory();
|
|
120690
|
+
if (!params) {
|
|
120691
|
+
return {
|
|
120692
|
+
success: false,
|
|
120693
|
+
error: "No parameters provided"
|
|
120694
|
+
};
|
|
120695
|
+
}
|
|
120681
120696
|
if (!memory2) {
|
|
120682
120697
|
return {
|
|
120683
120698
|
success: false,
|
|
@@ -122931,9 +122946,7 @@ class ConversationMemory {
|
|
|
122931
122946
|
function registerStartCommand(bot, _memory, _tools) {
|
|
122932
122947
|
bot.onText(/\/start/, async (msg) => {
|
|
122933
122948
|
const chatId = msg.chat.id;
|
|
122934
|
-
await bot.sendMessage(chatId, `\uD83D\uDC4B Hello!
|
|
122935
|
-
|
|
122936
|
-
` + `\uD83E\uDDE0 Powered by GLM-4.7 via Z.AI API
|
|
122949
|
+
await bot.sendMessage(chatId, `\uD83D\uDC4B Hello!
|
|
122937
122950
|
|
|
122938
122951
|
` + `Commands:
|
|
122939
122952
|
` + `/start - Show this message
|
|
@@ -122944,7 +122957,7 @@ function registerStartCommand(bot, _memory, _tools) {
|
|
|
122944
122957
|
` + `/clear - Clear conversation memory
|
|
122945
122958
|
` + `/help - Show help
|
|
122946
122959
|
|
|
122947
|
-
` + "Or just send any message for
|
|
122960
|
+
` + "Or just send any message for assistance!");
|
|
122948
122961
|
});
|
|
122949
122962
|
}
|
|
122950
122963
|
// ../channel-telegram/dist/api/keys.js
|
|
@@ -122968,9 +122981,8 @@ function registerStatusCommand(bot, _memory, _tools) {
|
|
|
122968
122981
|
bot.onText(/\/status/, async (msg) => {
|
|
122969
122982
|
const chatId = msg.chat.id;
|
|
122970
122983
|
const apiKey = getZAIKey();
|
|
122971
|
-
await bot.sendMessage(chatId, `*
|
|
122984
|
+
await bot.sendMessage(chatId, `*API Status*
|
|
122972
122985
|
|
|
122973
|
-
` + `*AI:* GLM-4.7 via Z.AI
|
|
122974
122986
|
` + `*API:* ${apiKey ? "Connected" : "Disconnected"}`, { parse_mode: "Markdown" });
|
|
122975
122987
|
});
|
|
122976
122988
|
}
|
|
@@ -122978,9 +122990,7 @@ function registerStatusCommand(bot, _memory, _tools) {
|
|
|
122978
122990
|
function registerHelpCommand(bot, _memory, _tools) {
|
|
122979
122991
|
bot.onText(/\/help/, async (msg) => {
|
|
122980
122992
|
const chatId = msg.chat.id;
|
|
122981
|
-
await bot.sendMessage(chatId, `\uD83D\uDCDA *
|
|
122982
|
-
|
|
122983
|
-
` + `\uD83E\uDDE0 Powered by GLM-4.7 via Z.AI API
|
|
122993
|
+
await bot.sendMessage(chatId, `\uD83D\uDCDA *Bot Help*
|
|
122984
122994
|
|
|
122985
122995
|
` + `*Commands:*
|
|
122986
122996
|
` + `/start - Show welcome message
|
|
@@ -122994,14 +123004,10 @@ function registerHelpCommand(bot, _memory, _tools) {
|
|
|
122994
123004
|
` + `/resources - Show system resources
|
|
122995
123005
|
` + `/logs [n] - Show last n log lines
|
|
122996
123006
|
` + `/toolsoutput [on|off] - Toggle tool output messages
|
|
122997
|
-
` + `/innerthoughts [msg] - Ask the inner monologue
|
|
122998
123007
|
` + `/help - Show this help
|
|
122999
123008
|
|
|
123000
123009
|
` + `*Usage:*
|
|
123001
|
-
` +
|
|
123002
|
-
|
|
123003
|
-
` + `*Mentions:*
|
|
123004
|
-
` + "@innerthoughts in any message triggers the inner monologue.", { parse_mode: "Markdown" });
|
|
123010
|
+
` + "Just send any message for assistance!", { parse_mode: "Markdown" });
|
|
123005
123011
|
});
|
|
123006
123012
|
}
|
|
123007
123013
|
// ../channel-telegram/dist/commands/git.js
|
|
@@ -123369,47 +123375,6 @@ Tool logging is already enabled.`;
|
|
|
123369
123375
|
}
|
|
123370
123376
|
});
|
|
123371
123377
|
}
|
|
123372
|
-
// ../channel-telegram/dist/commands/innerthoughts.js
|
|
123373
|
-
var MONOLOGUE_URL = process.env.MONOLOGUE_URL || "http://localhost:8920";
|
|
123374
|
-
async function askMonologue(question) {
|
|
123375
|
-
try {
|
|
123376
|
-
const res = await fetch(`${MONOLOGUE_URL}/ask`, {
|
|
123377
|
-
method: "POST",
|
|
123378
|
-
headers: { "Content-Type": "application/json" },
|
|
123379
|
-
body: JSON.stringify({ question })
|
|
123380
|
-
});
|
|
123381
|
-
if (!res.ok) {
|
|
123382
|
-
return `Monologue error: ${res.status}`;
|
|
123383
|
-
}
|
|
123384
|
-
const data = await res.json();
|
|
123385
|
-
let thought = data.thought || "...";
|
|
123386
|
-
thought = thought.replace(/[*_\[\]]/g, "").replace(/\n+/g, " ").trim().slice(0, 400);
|
|
123387
|
-
return thought;
|
|
123388
|
-
} catch (error48) {
|
|
123389
|
-
return `Could not reach inner monologue: ${error48.message}`;
|
|
123390
|
-
}
|
|
123391
|
-
}
|
|
123392
|
-
function registerInnerthoughtsCommand(bot, _memory, _tools) {
|
|
123393
|
-
bot.onText(/\/innerthoughts(?:\s+(.+))?/, async (msg, match) => {
|
|
123394
|
-
const chatId = msg.chat.id;
|
|
123395
|
-
const question = match?.[1]?.trim() || "What are you thinking about?";
|
|
123396
|
-
bot.sendChatAction(chatId, "typing");
|
|
123397
|
-
const thought = await askMonologue(question);
|
|
123398
|
-
await bot.sendMessage(chatId, `\uD83D\uDCAD *Inner Monologue*
|
|
123399
|
-
|
|
123400
|
-
_${thought}_`, { parse_mode: "Markdown" });
|
|
123401
|
-
});
|
|
123402
|
-
bot.on("text", async (msg) => {
|
|
123403
|
-
const text = msg.text || "";
|
|
123404
|
-
if (text.toLowerCase().includes("@innerthoughts")) {
|
|
123405
|
-
const chatId = msg.chat.id;
|
|
123406
|
-
const question = text.replace(/@innerthoughts/gi, "").trim() || "Hello?";
|
|
123407
|
-
bot.sendChatAction(chatId, "typing");
|
|
123408
|
-
const thought = await askMonologue(question);
|
|
123409
|
-
await bot.sendMessage(chatId, `\uD83D\uDCAD _${thought}_`, { parse_mode: "Markdown" });
|
|
123410
|
-
}
|
|
123411
|
-
});
|
|
123412
|
-
}
|
|
123413
123378
|
// ../channel-telegram/dist/commands/restart.js
|
|
123414
123379
|
import { execSync as execSync7 } from "child_process";
|
|
123415
123380
|
function register(bot, tools) {
|
|
@@ -123453,7 +123418,6 @@ function registerAllCommands(bot, memory2, tools) {
|
|
|
123453
123418
|
registerResumeCommand(bot, memory2, tools);
|
|
123454
123419
|
registerQuietCommand(bot, memory2, tools);
|
|
123455
123420
|
registerVerboseCommand(bot, memory2, tools);
|
|
123456
|
-
registerInnerthoughtsCommand(bot, memory2, tools);
|
|
123457
123421
|
register(bot, tools);
|
|
123458
123422
|
}
|
|
123459
123423
|
// ../channel-telegram/dist/utils/normalize.js
|
|
@@ -123720,6 +123684,7 @@ class TelegramChannel {
|
|
|
123720
123684
|
{ command: "logs", description: "View recent logs" },
|
|
123721
123685
|
{ command: "clear", description: "Clear conversation history" },
|
|
123722
123686
|
{ command: "tools", description: "List available tools" },
|
|
123687
|
+
{ command: "resources", description: "Show system resources" },
|
|
123723
123688
|
{ command: "restart", description: "Restart the bot service" },
|
|
123724
123689
|
{ command: "cancel", description: "Stop current task" },
|
|
123725
123690
|
{ command: "quiet", description: "Hide tool logging" },
|
package/dist/bin/telegram-cli.js
CHANGED
|
@@ -118961,7 +118961,7 @@ var coerce = {
|
|
|
118961
118961
|
date: (arg) => ZodDate.create({ ...arg, coerce: true })
|
|
118962
118962
|
};
|
|
118963
118963
|
var NEVER = INVALID;
|
|
118964
|
-
// ../codespaces-types/runtime/ai.
|
|
118964
|
+
// ../codespaces-types/runtime/ai.js
|
|
118965
118965
|
var ChatMessageRoleSchema = exports_external.enum(["system", "user", "assistant", "tool"]);
|
|
118966
118966
|
var ToolCallSchema = exports_external.object({
|
|
118967
118967
|
id: exports_external.string(),
|
|
@@ -119214,13 +119214,22 @@ class GLMNetworkError extends Error {
|
|
|
119214
119214
|
function resolveApiKey(apiKey) {
|
|
119215
119215
|
if (apiKey)
|
|
119216
119216
|
return apiKey;
|
|
119217
|
+
const keysArray = process.env.Z_AI_API_KEYS || process.env.ZAI_API_KEYS;
|
|
119218
|
+
if (keysArray) {
|
|
119219
|
+
try {
|
|
119220
|
+
const keys = JSON.parse(keysArray);
|
|
119221
|
+
if (keys.length > 0) {
|
|
119222
|
+
return keys[0];
|
|
119223
|
+
}
|
|
119224
|
+
} catch {}
|
|
119225
|
+
}
|
|
119217
119226
|
if (process.env.Z_AI_API_KEY)
|
|
119218
119227
|
return process.env.Z_AI_API_KEY;
|
|
119219
119228
|
if (process.env.ZAI_API_KEY)
|
|
119220
119229
|
return process.env.ZAI_API_KEY;
|
|
119221
119230
|
if (process.env.GLM_API_KEY)
|
|
119222
119231
|
return process.env.GLM_API_KEY;
|
|
119223
|
-
throw new Error("GLM API key not found. Set Z_AI_API_KEY, ZAI_API_KEY, or GLM_API_KEY
|
|
119232
|
+
throw new Error("GLM API key not found. Set Z_AI_API_KEYS (JSON array), Z_AI_API_KEY, ZAI_API_KEY, or GLM_API_KEY.");
|
|
119224
119233
|
}
|
|
119225
119234
|
function formatLatency(ms) {
|
|
119226
119235
|
if (ms < 1000)
|
|
@@ -119889,7 +119898,7 @@ class ToolExecutor {
|
|
|
119889
119898
|
content,
|
|
119890
119899
|
iterations,
|
|
119891
119900
|
toolCalls: allToolCalls,
|
|
119892
|
-
toolResults,
|
|
119901
|
+
toolResults: Object.fromEntries(toolResults),
|
|
119893
119902
|
rawResponse: response
|
|
119894
119903
|
};
|
|
119895
119904
|
}
|
|
@@ -120628,7 +120637,7 @@ var TrajectoryParams = exports_external2.discriminatedUnion("action", [
|
|
|
120628
120637
|
primitiveId: exports_external2.string(),
|
|
120629
120638
|
package: exports_external2.string(),
|
|
120630
120639
|
version: exports_external2.string(),
|
|
120631
|
-
inputs: exports_external2.record(exports_external2.unknown()),
|
|
120640
|
+
inputs: exports_external2.record(exports_external2.string(), exports_external2.unknown()),
|
|
120632
120641
|
output: exports_external2.unknown(),
|
|
120633
120642
|
durationNs: exports_external2.number(),
|
|
120634
120643
|
verified: exports_external2.boolean(),
|
|
@@ -120678,6 +120687,12 @@ var trajectorySkill = {
|
|
|
120678
120687
|
maxRetries: 1,
|
|
120679
120688
|
async execute(params, context) {
|
|
120680
120689
|
const memory2 = await getTrajectoryMemory();
|
|
120690
|
+
if (!params) {
|
|
120691
|
+
return {
|
|
120692
|
+
success: false,
|
|
120693
|
+
error: "No parameters provided"
|
|
120694
|
+
};
|
|
120695
|
+
}
|
|
120681
120696
|
if (!memory2) {
|
|
120682
120697
|
return {
|
|
120683
120698
|
success: false,
|
|
@@ -122931,9 +122946,7 @@ class ConversationMemory {
|
|
|
122931
122946
|
function registerStartCommand(bot, _memory, _tools) {
|
|
122932
122947
|
bot.onText(/\/start/, async (msg) => {
|
|
122933
122948
|
const chatId = msg.chat.id;
|
|
122934
|
-
await bot.sendMessage(chatId, `\uD83D\uDC4B Hello!
|
|
122935
|
-
|
|
122936
|
-
` + `\uD83E\uDDE0 Powered by GLM-4.7 via Z.AI API
|
|
122949
|
+
await bot.sendMessage(chatId, `\uD83D\uDC4B Hello!
|
|
122937
122950
|
|
|
122938
122951
|
` + `Commands:
|
|
122939
122952
|
` + `/start - Show this message
|
|
@@ -122944,7 +122957,7 @@ function registerStartCommand(bot, _memory, _tools) {
|
|
|
122944
122957
|
` + `/clear - Clear conversation memory
|
|
122945
122958
|
` + `/help - Show help
|
|
122946
122959
|
|
|
122947
|
-
` + "Or just send any message for
|
|
122960
|
+
` + "Or just send any message for assistance!");
|
|
122948
122961
|
});
|
|
122949
122962
|
}
|
|
122950
122963
|
// ../channel-telegram/dist/api/keys.js
|
|
@@ -122968,9 +122981,8 @@ function registerStatusCommand(bot, _memory, _tools) {
|
|
|
122968
122981
|
bot.onText(/\/status/, async (msg) => {
|
|
122969
122982
|
const chatId = msg.chat.id;
|
|
122970
122983
|
const apiKey = getZAIKey();
|
|
122971
|
-
await bot.sendMessage(chatId, `*
|
|
122984
|
+
await bot.sendMessage(chatId, `*API Status*
|
|
122972
122985
|
|
|
122973
|
-
` + `*AI:* GLM-4.7 via Z.AI
|
|
122974
122986
|
` + `*API:* ${apiKey ? "Connected" : "Disconnected"}`, { parse_mode: "Markdown" });
|
|
122975
122987
|
});
|
|
122976
122988
|
}
|
|
@@ -122978,9 +122990,7 @@ function registerStatusCommand(bot, _memory, _tools) {
|
|
|
122978
122990
|
function registerHelpCommand(bot, _memory, _tools) {
|
|
122979
122991
|
bot.onText(/\/help/, async (msg) => {
|
|
122980
122992
|
const chatId = msg.chat.id;
|
|
122981
|
-
await bot.sendMessage(chatId, `\uD83D\uDCDA *
|
|
122982
|
-
|
|
122983
|
-
` + `\uD83E\uDDE0 Powered by GLM-4.7 via Z.AI API
|
|
122993
|
+
await bot.sendMessage(chatId, `\uD83D\uDCDA *Bot Help*
|
|
122984
122994
|
|
|
122985
122995
|
` + `*Commands:*
|
|
122986
122996
|
` + `/start - Show welcome message
|
|
@@ -122994,14 +123004,10 @@ function registerHelpCommand(bot, _memory, _tools) {
|
|
|
122994
123004
|
` + `/resources - Show system resources
|
|
122995
123005
|
` + `/logs [n] - Show last n log lines
|
|
122996
123006
|
` + `/toolsoutput [on|off] - Toggle tool output messages
|
|
122997
|
-
` + `/innerthoughts [msg] - Ask the inner monologue
|
|
122998
123007
|
` + `/help - Show this help
|
|
122999
123008
|
|
|
123000
123009
|
` + `*Usage:*
|
|
123001
|
-
` +
|
|
123002
|
-
|
|
123003
|
-
` + `*Mentions:*
|
|
123004
|
-
` + "@innerthoughts in any message triggers the inner monologue.", { parse_mode: "Markdown" });
|
|
123010
|
+
` + "Just send any message for assistance!", { parse_mode: "Markdown" });
|
|
123005
123011
|
});
|
|
123006
123012
|
}
|
|
123007
123013
|
// ../channel-telegram/dist/commands/git.js
|
|
@@ -123369,47 +123375,6 @@ Tool logging is already enabled.`;
|
|
|
123369
123375
|
}
|
|
123370
123376
|
});
|
|
123371
123377
|
}
|
|
123372
|
-
// ../channel-telegram/dist/commands/innerthoughts.js
|
|
123373
|
-
var MONOLOGUE_URL = process.env.MONOLOGUE_URL || "http://localhost:8920";
|
|
123374
|
-
async function askMonologue(question) {
|
|
123375
|
-
try {
|
|
123376
|
-
const res = await fetch(`${MONOLOGUE_URL}/ask`, {
|
|
123377
|
-
method: "POST",
|
|
123378
|
-
headers: { "Content-Type": "application/json" },
|
|
123379
|
-
body: JSON.stringify({ question })
|
|
123380
|
-
});
|
|
123381
|
-
if (!res.ok) {
|
|
123382
|
-
return `Monologue error: ${res.status}`;
|
|
123383
|
-
}
|
|
123384
|
-
const data = await res.json();
|
|
123385
|
-
let thought = data.thought || "...";
|
|
123386
|
-
thought = thought.replace(/[*_\[\]]/g, "").replace(/\n+/g, " ").trim().slice(0, 400);
|
|
123387
|
-
return thought;
|
|
123388
|
-
} catch (error48) {
|
|
123389
|
-
return `Could not reach inner monologue: ${error48.message}`;
|
|
123390
|
-
}
|
|
123391
|
-
}
|
|
123392
|
-
function registerInnerthoughtsCommand(bot, _memory, _tools) {
|
|
123393
|
-
bot.onText(/\/innerthoughts(?:\s+(.+))?/, async (msg, match) => {
|
|
123394
|
-
const chatId = msg.chat.id;
|
|
123395
|
-
const question = match?.[1]?.trim() || "What are you thinking about?";
|
|
123396
|
-
bot.sendChatAction(chatId, "typing");
|
|
123397
|
-
const thought = await askMonologue(question);
|
|
123398
|
-
await bot.sendMessage(chatId, `\uD83D\uDCAD *Inner Monologue*
|
|
123399
|
-
|
|
123400
|
-
_${thought}_`, { parse_mode: "Markdown" });
|
|
123401
|
-
});
|
|
123402
|
-
bot.on("text", async (msg) => {
|
|
123403
|
-
const text = msg.text || "";
|
|
123404
|
-
if (text.toLowerCase().includes("@innerthoughts")) {
|
|
123405
|
-
const chatId = msg.chat.id;
|
|
123406
|
-
const question = text.replace(/@innerthoughts/gi, "").trim() || "Hello?";
|
|
123407
|
-
bot.sendChatAction(chatId, "typing");
|
|
123408
|
-
const thought = await askMonologue(question);
|
|
123409
|
-
await bot.sendMessage(chatId, `\uD83D\uDCAD _${thought}_`, { parse_mode: "Markdown" });
|
|
123410
|
-
}
|
|
123411
|
-
});
|
|
123412
|
-
}
|
|
123413
123378
|
// ../channel-telegram/dist/commands/restart.js
|
|
123414
123379
|
import { execSync as execSync7 } from "child_process";
|
|
123415
123380
|
function register(bot, tools) {
|
|
@@ -123453,7 +123418,6 @@ function registerAllCommands(bot, memory2, tools) {
|
|
|
123453
123418
|
registerResumeCommand(bot, memory2, tools);
|
|
123454
123419
|
registerQuietCommand(bot, memory2, tools);
|
|
123455
123420
|
registerVerboseCommand(bot, memory2, tools);
|
|
123456
|
-
registerInnerthoughtsCommand(bot, memory2, tools);
|
|
123457
123421
|
register(bot, tools);
|
|
123458
123422
|
}
|
|
123459
123423
|
// ../channel-telegram/dist/utils/normalize.js
|
|
@@ -123720,6 +123684,7 @@ class TelegramChannel {
|
|
|
123720
123684
|
{ command: "logs", description: "View recent logs" },
|
|
123721
123685
|
{ command: "clear", description: "Clear conversation history" },
|
|
123722
123686
|
{ command: "tools", description: "List available tools" },
|
|
123687
|
+
{ command: "resources", description: "Show system resources" },
|
|
123723
123688
|
{ command: "restart", description: "Restart the bot service" },
|
|
123724
123689
|
{ command: "cancel", description: "Stop current task" },
|
|
123725
123690
|
{ command: "quiet", description: "Hide tool logging" },
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base Channel - Implements ChannelConnector from @ebowwa/channel-types
|
|
3
|
+
*
|
|
4
|
+
* Abstract base class for all communication channels (Telegram, Discord, etc.)
|
|
5
|
+
* Provides shared functionality for message routing, error handling, and conversation management.
|
|
6
|
+
*/
|
|
7
|
+
import { type ChannelConnector, type ChannelId, type ChannelMessage, type ChannelResponse, type ChannelCapabilities, type MessageHandler, type StreamChunk } from "@ebowwa/channel-types";
|
|
8
|
+
import { GLMClient } from "@ebowwa/ai";
|
|
9
|
+
import { GLMDaemon } from "../daemon.js";
|
|
10
|
+
export interface GLMChannelConfig {
|
|
11
|
+
/** Platform identifier */
|
|
12
|
+
platform: "telegram" | "discord" | "whatsapp" | "cli";
|
|
13
|
+
/** Account/bot ID */
|
|
14
|
+
accountId: string;
|
|
15
|
+
/** Instance ID for multiple instances */
|
|
16
|
+
instanceId?: string;
|
|
17
|
+
/** Butler storage directory */
|
|
18
|
+
butlerStorageDir?: string;
|
|
19
|
+
/** Working directory for daemon tasks */
|
|
20
|
+
daemonWorkdir?: string;
|
|
21
|
+
/** Base branch for daemon */
|
|
22
|
+
daemonBaseBranch?: string;
|
|
23
|
+
/** Auto-PR on completion */
|
|
24
|
+
enableDaemonAutoPR?: boolean;
|
|
25
|
+
/** Auto-commit during work */
|
|
26
|
+
enableDaemonAutoCommit?: boolean;
|
|
27
|
+
}
|
|
28
|
+
export interface MessageContext {
|
|
29
|
+
userId: string;
|
|
30
|
+
userName?: string;
|
|
31
|
+
channelId?: string;
|
|
32
|
+
timestamp: Date;
|
|
33
|
+
}
|
|
34
|
+
export interface RouteResult {
|
|
35
|
+
source: "butler" | "daemon" | "error";
|
|
36
|
+
response: string;
|
|
37
|
+
metadata?: {
|
|
38
|
+
daemonId?: string;
|
|
39
|
+
phase?: string;
|
|
40
|
+
executionTime?: number;
|
|
41
|
+
toolIterations?: number;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
export interface MessageClassification {
|
|
45
|
+
type: "chat" | "task" | "status" | "unknown";
|
|
46
|
+
confidence: number;
|
|
47
|
+
suggestedAction: "handle_locally" | "delegate_daemon" | "both";
|
|
48
|
+
}
|
|
49
|
+
export type BaseChannelConfig = GLMChannelConfig;
|
|
50
|
+
/**
|
|
51
|
+
* Abstract base class for communication channels.
|
|
52
|
+
* Implements ChannelConnector from @ebowwa/channel-types.
|
|
53
|
+
*/
|
|
54
|
+
export declare abstract class BaseChannel implements ChannelConnector {
|
|
55
|
+
abstract readonly id: ChannelId;
|
|
56
|
+
abstract readonly label: string;
|
|
57
|
+
abstract readonly capabilities: ChannelCapabilities;
|
|
58
|
+
protected glmClient: GLMClient;
|
|
59
|
+
protected daemon: GLMDaemon | null;
|
|
60
|
+
protected activeDaemonTask: string | null;
|
|
61
|
+
protected config: GLMChannelConfig;
|
|
62
|
+
protected conversationHistory: Map<string, Array<{
|
|
63
|
+
role: string;
|
|
64
|
+
content: string;
|
|
65
|
+
}>>;
|
|
66
|
+
protected messageHandler?: MessageHandler;
|
|
67
|
+
protected connected: boolean;
|
|
68
|
+
constructor(config: GLMChannelConfig);
|
|
69
|
+
/**
|
|
70
|
+
* Start the channel
|
|
71
|
+
*/
|
|
72
|
+
start(): Promise<void>;
|
|
73
|
+
/**
|
|
74
|
+
* Stop the channel
|
|
75
|
+
*/
|
|
76
|
+
stop(): Promise<void>;
|
|
77
|
+
/**
|
|
78
|
+
* Register message handler (from ChannelConnector interface)
|
|
79
|
+
*/
|
|
80
|
+
onMessage(handler: MessageHandler): void;
|
|
81
|
+
/**
|
|
82
|
+
* Send response (from ChannelConnector interface)
|
|
83
|
+
* Must be implemented by subclasses for platform-specific delivery
|
|
84
|
+
*/
|
|
85
|
+
abstract send(response: ChannelResponse): Promise<void>;
|
|
86
|
+
/**
|
|
87
|
+
* Optional streaming support
|
|
88
|
+
*/
|
|
89
|
+
stream?(response: ChannelResponse, chunks: AsyncIterable<StreamChunk>): Promise<void>;
|
|
90
|
+
/**
|
|
91
|
+
* Check if connected
|
|
92
|
+
*/
|
|
93
|
+
isConnected(): boolean;
|
|
94
|
+
/**
|
|
95
|
+
* Start the platform-specific bot (must be implemented by subclasses)
|
|
96
|
+
*/
|
|
97
|
+
protected abstract startPlatform(): Promise<void>;
|
|
98
|
+
/**
|
|
99
|
+
* Stop the platform-specific bot (must be implemented by subclasses)
|
|
100
|
+
*/
|
|
101
|
+
protected abstract stopPlatform(): Promise<void>;
|
|
102
|
+
/**
|
|
103
|
+
* Route a ChannelMessage through the internal handler or use default routing.
|
|
104
|
+
* This bridges ChannelMessage (from channel-types) to the internal routing logic.
|
|
105
|
+
*/
|
|
106
|
+
routeChannelMessage(message: ChannelMessage): Promise<ChannelResponse>;
|
|
107
|
+
/**
|
|
108
|
+
* Route a message to appropriate handler (internal routing logic)
|
|
109
|
+
*/
|
|
110
|
+
routeMessage(content: string, context: MessageContext): Promise<RouteResult>;
|
|
111
|
+
/**
|
|
112
|
+
* Convert internal RouteResult to ChannelResponse
|
|
113
|
+
*/
|
|
114
|
+
protected resultToResponse(result: RouteResult, originalMessage: ChannelMessage): ChannelResponse;
|
|
115
|
+
/**
|
|
116
|
+
* Classify incoming message
|
|
117
|
+
*/
|
|
118
|
+
protected classifyMessage(content: string): Promise<MessageClassification>;
|
|
119
|
+
/**
|
|
120
|
+
* Handle chat messages locally with GLM + tools
|
|
121
|
+
*
|
|
122
|
+
* Uses ToolExecutor from @ebowwa/ai/tools for the tool call loop.
|
|
123
|
+
* Refactored from manual tool loop on Feb 15, 2026.
|
|
124
|
+
*/
|
|
125
|
+
protected handleChat(content: string, context: MessageContext): Promise<RouteResult>;
|
|
126
|
+
/**
|
|
127
|
+
* Handle task messages by delegating to GLMDaemon
|
|
128
|
+
*/
|
|
129
|
+
protected handleTask(content: string, context: MessageContext): Promise<RouteResult>;
|
|
130
|
+
/**
|
|
131
|
+
* Handle status queries
|
|
132
|
+
*/
|
|
133
|
+
protected handleStatus(): Promise<RouteResult>;
|
|
134
|
+
/**
|
|
135
|
+
* Handle unknown messages - ask for clarification
|
|
136
|
+
*/
|
|
137
|
+
protected handleUnknown(content: string): Promise<RouteResult>;
|
|
138
|
+
/**
|
|
139
|
+
* Add message to conversation history
|
|
140
|
+
*/
|
|
141
|
+
protected addToHistory(userId: string, message: {
|
|
142
|
+
role: string;
|
|
143
|
+
content: string;
|
|
144
|
+
}): void;
|
|
145
|
+
/**
|
|
146
|
+
* Get current status
|
|
147
|
+
*/
|
|
148
|
+
getStatus(): {
|
|
149
|
+
hasActiveDaemon: boolean;
|
|
150
|
+
activeTask: string | null;
|
|
151
|
+
conversationCount: number;
|
|
152
|
+
daemonPhase: string | null;
|
|
153
|
+
};
|
|
154
|
+
/**
|
|
155
|
+
* Cleanup resources
|
|
156
|
+
*/
|
|
157
|
+
cleanup(): Promise<void>;
|
|
158
|
+
/**
|
|
159
|
+
* Helper to create ChannelId for this channel
|
|
160
|
+
*/
|
|
161
|
+
protected createId(): ChannelId;
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/channels/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Discord Channel Adapter
|
|
3
|
+
*
|
|
4
|
+
* Implements ChannelConnector from @ebowwa/channel-types.
|
|
5
|
+
* Discord bot using discord.js.
|
|
6
|
+
*/
|
|
7
|
+
import { type ChannelId, type ChannelResponse, type ChannelCapabilities } from "@ebowwa/channel-types";
|
|
8
|
+
import { BaseChannel, type GLMChannelConfig } from "./base.js";
|
|
9
|
+
export interface DiscordChannelConfig extends GLMChannelConfig {
|
|
10
|
+
platform: "discord";
|
|
11
|
+
/** Bot token */
|
|
12
|
+
botToken: string;
|
|
13
|
+
/** Application ID for slash commands */
|
|
14
|
+
applicationId?: string;
|
|
15
|
+
/** Guild ID to restrict to */
|
|
16
|
+
guildId?: string;
|
|
17
|
+
/** Channel IDs to listen to (empty = all) */
|
|
18
|
+
channelIds?: string[];
|
|
19
|
+
/** Enable slash commands */
|
|
20
|
+
enableSlashCommands?: boolean;
|
|
21
|
+
}
|
|
22
|
+
export type { DiscordChannelConfig as DiscordConfig };
|
|
23
|
+
export declare class DiscordChannel extends BaseChannel {
|
|
24
|
+
readonly id: ChannelId;
|
|
25
|
+
readonly label = "Discord";
|
|
26
|
+
readonly capabilities: ChannelCapabilities;
|
|
27
|
+
private client;
|
|
28
|
+
private token;
|
|
29
|
+
private guildId?;
|
|
30
|
+
private channelIds?;
|
|
31
|
+
constructor(config: DiscordChannelConfig);
|
|
32
|
+
/**
|
|
33
|
+
* Send response to Discord
|
|
34
|
+
*/
|
|
35
|
+
send(response: ChannelResponse): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Start Discord bot
|
|
38
|
+
*/
|
|
39
|
+
protected startPlatform(): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* Stop Discord bot
|
|
42
|
+
*/
|
|
43
|
+
protected stopPlatform(): Promise<void>;
|
|
44
|
+
/**
|
|
45
|
+
* Create normalized ChannelMessage from Discord message
|
|
46
|
+
*/
|
|
47
|
+
private createChannelMessage;
|
|
48
|
+
/**
|
|
49
|
+
* Send response, handling chunking for long messages
|
|
50
|
+
*/
|
|
51
|
+
private sendResponse;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Create a Discord channel from config
|
|
55
|
+
*/
|
|
56
|
+
export declare function createDiscordChannel(config: DiscordChannelConfig): DiscordChannel;
|
|
57
|
+
/**
|
|
58
|
+
* Create Discord channel config from environment (Doppler)
|
|
59
|
+
*/
|
|
60
|
+
export declare function createDiscordConfigFromEnv(): DiscordChannelConfig | null;
|
|
61
|
+
//# sourceMappingURL=discord.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discord.d.ts","sourceRoot":"","sources":["../../src/channels/discord.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,KAAK,SAAS,EAEd,KAAK,eAAe,EACpB,KAAK,mBAAmB,EAIzB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,WAAW,EACX,KAAK,gBAAgB,EAEtB,MAAM,WAAW,CAAC;AAMnB,MAAM,WAAW,oBAAqB,SAAQ,gBAAgB;IAC5D,QAAQ,EAAE,SAAS,CAAC;IACpB,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,wCAAwC;IACxC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,4BAA4B;IAC5B,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAGD,YAAY,EAAE,oBAAoB,IAAI,aAAa,EAAE,CAAC;AAMtD,qBAAa,cAAe,SAAQ,WAAW;IAC7C,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,KAAK,aAAa;IAC3B,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAkBxC;IAEF,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,UAAU,CAAC,CAAW;gBAElB,MAAM,EAAE,oBAAoB;IAmBxC;;OAEG;IACG,IAAI,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BpD;;OAEG;cACa,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAiD9C;;OAEG;cACa,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAS7C;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA0D5B;;OAEG;YACW,YAAY;CAY3B;AAMD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,GAAG,cAAc,CAEjF;AAED;;GAEG;AACH,wBAAgB,0BAA0B,IAAI,oBAAoB,GAAG,IAAI,CAwBxE"}
|