@marcopeg/hal 1.0.11 → 1.0.15
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 +151 -32
- package/dist/agent/index.d.ts +5 -7
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +15 -9
- package/dist/agent/index.js.map +1 -1
- package/dist/bot/commands/loader.d.ts +5 -0
- package/dist/bot/commands/loader.d.ts.map +1 -1
- package/dist/bot/commands/loader.js +31 -0
- package/dist/bot/commands/loader.js.map +1 -1
- package/dist/bot/commands/session.d.ts +11 -0
- package/dist/bot/commands/session.d.ts.map +1 -0
- package/dist/bot/commands/session.js +65 -0
- package/dist/bot/commands/session.js.map +1 -0
- package/dist/bot/handlers/document.d.ts.map +1 -1
- package/dist/bot/handlers/document.js +8 -8
- package/dist/bot/handlers/document.js.map +1 -1
- package/dist/bot/handlers/photo.d.ts.map +1 -1
- package/dist/bot/handlers/photo.js +8 -8
- package/dist/bot/handlers/photo.js.map +1 -1
- package/dist/bot/handlers/text.d.ts.map +1 -1
- package/dist/bot/handlers/text.js +14 -8
- package/dist/bot/handlers/text.js.map +1 -1
- package/dist/bot/handlers/voice.d.ts.map +1 -1
- package/dist/bot/handlers/voice.js +8 -8
- package/dist/bot/handlers/voice.js.map +1 -1
- package/dist/bot.d.ts.map +1 -1
- package/dist/bot.js +10 -21
- package/dist/bot.js.map +1 -1
- package/dist/cli.js +65 -17
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +66 -19
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +25 -5
- package/dist/config.js.map +1 -1
- package/dist/context/resolver.d.ts.map +1 -1
- package/dist/context/resolver.js +6 -5
- package/dist/context/resolver.js.map +1 -1
- package/dist/engine/adapters/claude.d.ts +3 -0
- package/dist/engine/adapters/claude.d.ts.map +1 -0
- package/dist/engine/adapters/claude.js +241 -0
- package/dist/engine/adapters/claude.js.map +1 -0
- package/dist/engine/adapters/codex.d.ts +9 -0
- package/dist/engine/adapters/codex.d.ts.map +1 -0
- package/dist/engine/adapters/codex.js +109 -0
- package/dist/engine/adapters/codex.js.map +1 -0
- package/dist/engine/adapters/copilot.d.ts +3 -0
- package/dist/engine/adapters/copilot.d.ts.map +1 -0
- package/dist/engine/adapters/copilot.js +109 -0
- package/dist/engine/adapters/copilot.js.map +1 -0
- package/dist/engine/adapters/opencode.d.ts +7 -0
- package/dist/engine/adapters/opencode.d.ts.map +1 -0
- package/dist/engine/adapters/opencode.js +94 -0
- package/dist/engine/adapters/opencode.js.map +1 -0
- package/dist/engine/index.d.ts +4 -0
- package/dist/engine/index.d.ts.map +1 -0
- package/dist/engine/index.js +3 -0
- package/dist/engine/index.js.map +1 -0
- package/dist/engine/prompt.d.ts +9 -0
- package/dist/engine/prompt.d.ts.map +1 -0
- package/dist/engine/prompt.js +29 -0
- package/dist/engine/prompt.js.map +1 -0
- package/dist/engine/registry.d.ts +9 -0
- package/dist/engine/registry.d.ts.map +1 -0
- package/dist/engine/registry.js +24 -0
- package/dist/engine/registry.js.map +1 -0
- package/dist/engine/types.d.ts +45 -0
- package/dist/engine/types.d.ts.map +1 -0
- package/dist/engine/types.js +7 -0
- package/dist/engine/types.js.map +1 -0
- package/dist/types.d.ts +5 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/user/setup.d.ts +5 -0
- package/dist/user/setup.d.ts.map +1 -1
- package/dist/user/setup.js +13 -0
- package/dist/user/setup.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { writeFile } from "node:fs/promises";
|
|
2
2
|
import { join, resolve } from "node:path";
|
|
3
|
-
import { executeClaudeQuery } from "../../claude/executor.js";
|
|
4
|
-
import { parseClaudeOutput } from "../../claude/parser.js";
|
|
5
3
|
import { sendChunkedResponse } from "../../telegram/chunker.js";
|
|
6
4
|
import { sendDownloadFiles } from "../../telegram/fileSender.js";
|
|
7
5
|
import { ensureUserSetup, getDownloadsPath, getSessionId, getUploadsPath, saveSessionId, } from "../../user/setup.js";
|
|
@@ -61,7 +59,7 @@ export function createDocumentHandler(ctx) {
|
|
|
61
59
|
await gramCtx.reply("Unsupported file type. Supported: PDF, images, text, and code files.");
|
|
62
60
|
return;
|
|
63
61
|
}
|
|
64
|
-
logger.
|
|
62
|
+
logger.info({ fileName, mimeType }, "Document received");
|
|
65
63
|
const userDir = resolve(join(config.dataDir, String(userId)));
|
|
66
64
|
try {
|
|
67
65
|
await ensureUserSetup(userDir);
|
|
@@ -80,7 +78,9 @@ export function createDocumentHandler(ctx) {
|
|
|
80
78
|
await writeFile(docPath, buffer);
|
|
81
79
|
logger.debug({ path: docPath }, "Document saved");
|
|
82
80
|
const prompt = `Please read the file "./uploads/${safeName}" and ${caption}`;
|
|
83
|
-
const sessionId =
|
|
81
|
+
const sessionId = config.engineSession
|
|
82
|
+
? await getSessionId(userDir)
|
|
83
|
+
: null;
|
|
84
84
|
const statusMsg = await gramCtx.reply("_Processing..._", {
|
|
85
85
|
parse_mode: "Markdown",
|
|
86
86
|
});
|
|
@@ -100,16 +100,16 @@ export function createDocumentHandler(ctx) {
|
|
|
100
100
|
}
|
|
101
101
|
};
|
|
102
102
|
const downloadsPath = getDownloadsPath(userDir);
|
|
103
|
-
logger.
|
|
104
|
-
const result = await
|
|
103
|
+
logger.info("Executing engine query with document");
|
|
104
|
+
const result = await ctx.engine.execute({ prompt, gramCtx, userDir, downloadsPath, sessionId, onProgress }, ctx);
|
|
105
105
|
try {
|
|
106
106
|
await gramCtx.api.deleteMessage(gramCtx.chat.id, statusMsg.message_id);
|
|
107
107
|
}
|
|
108
108
|
catch {
|
|
109
109
|
// Ignore delete errors
|
|
110
110
|
}
|
|
111
|
-
const parsed =
|
|
112
|
-
if (parsed.sessionId) {
|
|
111
|
+
const parsed = ctx.engine.parse(result);
|
|
112
|
+
if (config.engineSession && parsed.sessionId) {
|
|
113
113
|
await saveSessionId(userDir, parsed.sessionId);
|
|
114
114
|
}
|
|
115
115
|
await sendChunkedResponse(gramCtx, parsed.text);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document.js","sourceRoot":"","sources":["../../../src/bot/handlers/document.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"document.js","sourceRoot":"","sources":["../../../src/bot/handlers/document.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"photo.d.ts","sourceRoot":"","sources":["../../../src/bot/handlers/photo.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"photo.d.ts","sourceRoot":"","sources":["../../../src/bot/handlers/photo.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AASrD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,cAAc,IACtC,SAAS,OAAO,KAAG,OAAO,CAAC,IAAI,CAAC,CAuG/C"}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { writeFile } from "node:fs/promises";
|
|
2
2
|
import { join, resolve } from "node:path";
|
|
3
|
-
import { executeClaudeQuery } from "../../claude/executor.js";
|
|
4
|
-
import { parseClaudeOutput } from "../../claude/parser.js";
|
|
5
3
|
import { sendChunkedResponse } from "../../telegram/chunker.js";
|
|
6
4
|
import { sendDownloadFiles } from "../../telegram/fileSender.js";
|
|
7
5
|
import { ensureUserSetup, getDownloadsPath, getSessionId, getUploadsPath, saveSessionId, } from "../../user/setup.js";
|
|
@@ -17,7 +15,7 @@ export function createPhotoHandler(ctx) {
|
|
|
17
15
|
if (!userId || !photo || photo.length === 0) {
|
|
18
16
|
return;
|
|
19
17
|
}
|
|
20
|
-
logger.
|
|
18
|
+
logger.info({ userId }, "Photo received");
|
|
21
19
|
const userDir = resolve(join(config.dataDir, String(userId)));
|
|
22
20
|
try {
|
|
23
21
|
await ensureUserSetup(userDir);
|
|
@@ -39,7 +37,9 @@ export function createPhotoHandler(ctx) {
|
|
|
39
37
|
await writeFile(imagePath, buffer);
|
|
40
38
|
logger.debug({ path: imagePath }, "Image saved");
|
|
41
39
|
const prompt = `Please look at the image file "./uploads/${imageName}" and ${caption}`;
|
|
42
|
-
const sessionId =
|
|
40
|
+
const sessionId = config.engineSession
|
|
41
|
+
? await getSessionId(userDir)
|
|
42
|
+
: null;
|
|
43
43
|
const statusMsg = await gramCtx.reply("_Processing..._", {
|
|
44
44
|
parse_mode: "Markdown",
|
|
45
45
|
});
|
|
@@ -59,16 +59,16 @@ export function createPhotoHandler(ctx) {
|
|
|
59
59
|
}
|
|
60
60
|
};
|
|
61
61
|
const downloadsPath = getDownloadsPath(userDir);
|
|
62
|
-
logger.
|
|
63
|
-
const result = await
|
|
62
|
+
logger.info("Executing engine query with image");
|
|
63
|
+
const result = await ctx.engine.execute({ prompt, gramCtx, userDir, downloadsPath, sessionId, onProgress }, ctx);
|
|
64
64
|
try {
|
|
65
65
|
await gramCtx.api.deleteMessage(gramCtx.chat.id, statusMsg.message_id);
|
|
66
66
|
}
|
|
67
67
|
catch {
|
|
68
68
|
// Ignore delete errors
|
|
69
69
|
}
|
|
70
|
-
const parsed =
|
|
71
|
-
if (parsed.sessionId) {
|
|
70
|
+
const parsed = ctx.engine.parse(result);
|
|
71
|
+
if (config.engineSession && parsed.sessionId) {
|
|
72
72
|
await saveSessionId(userDir, parsed.sessionId);
|
|
73
73
|
}
|
|
74
74
|
await sendChunkedResponse(gramCtx, parsed.text);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"photo.js","sourceRoot":"","sources":["../../../src/bot/handlers/photo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"photo.js","sourceRoot":"","sources":["../../../src/bot/handlers/photo.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../src/bot/handlers/text.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../src/bot/handlers/text.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAKtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AASrD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,cAAc,IACrC,SAAS,OAAO,KAAG,OAAO,CAAC,IAAI,CAAC,CA4O/C"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { join, resolve } from "node:path";
|
|
2
2
|
import { createAgent, getSkillsDir } from "../../agent/index.js";
|
|
3
|
-
import { executeClaudeQuery } from "../../claude/executor.js";
|
|
4
3
|
import { resolveContext } from "../../context/resolver.js";
|
|
5
4
|
import { sendChunkedResponse } from "../../telegram/chunker.js";
|
|
6
5
|
import { sendDownloadFiles } from "../../telegram/fileSender.js";
|
|
@@ -17,10 +16,11 @@ export function createTextHandler(ctx) {
|
|
|
17
16
|
if (!userId || !messageText) {
|
|
18
17
|
return;
|
|
19
18
|
}
|
|
20
|
-
logger.
|
|
19
|
+
logger.info({
|
|
21
20
|
userId,
|
|
22
21
|
username: gramCtx.from?.username,
|
|
23
22
|
name: gramCtx.from?.first_name,
|
|
23
|
+
message: messageText,
|
|
24
24
|
}, "Message received");
|
|
25
25
|
// ── Slash command interception ────────────────────────────────────────────
|
|
26
26
|
if (messageText.startsWith("/")) {
|
|
@@ -70,7 +70,7 @@ export function createTextHandler(ctx) {
|
|
|
70
70
|
return;
|
|
71
71
|
}
|
|
72
72
|
// No .mjs handler — check if this is a registered skill
|
|
73
|
-
const skillEntry = await resolveSkillEntry(commandName, getSkillsDir(config.cwd), logger);
|
|
73
|
+
const skillEntry = await resolveSkillEntry(commandName, getSkillsDir(config.cwd, ctx), logger);
|
|
74
74
|
if (skillEntry?.skillPrompt) {
|
|
75
75
|
const prompt = args.length > 0
|
|
76
76
|
? `${skillEntry.skillPrompt}\n\nUser input: ${args.join(" ")}`
|
|
@@ -126,7 +126,9 @@ export function createTextHandler(ctx) {
|
|
|
126
126
|
await gramCtx.reply("Please provide a message.");
|
|
127
127
|
return;
|
|
128
128
|
}
|
|
129
|
-
const sessionId =
|
|
129
|
+
const sessionId = config.engineSession
|
|
130
|
+
? await getSessionId(userDir)
|
|
131
|
+
: null;
|
|
130
132
|
logger.debug({ sessionId: sessionId || "new" }, "Session");
|
|
131
133
|
const statusMsg = await gramCtx.reply("_Processing..._", {
|
|
132
134
|
parse_mode: "Markdown",
|
|
@@ -147,8 +149,8 @@ export function createTextHandler(ctx) {
|
|
|
147
149
|
}
|
|
148
150
|
};
|
|
149
151
|
const downloadsPath = getDownloadsPath(userDir);
|
|
150
|
-
logger.
|
|
151
|
-
const result = await
|
|
152
|
+
logger.info("Executing engine query");
|
|
153
|
+
const result = await ctx.engine.execute({
|
|
152
154
|
prompt: messageText,
|
|
153
155
|
gramCtx,
|
|
154
156
|
userDir,
|
|
@@ -156,14 +158,18 @@ export function createTextHandler(ctx) {
|
|
|
156
158
|
sessionId,
|
|
157
159
|
onProgress,
|
|
158
160
|
}, ctx);
|
|
159
|
-
logger.
|
|
161
|
+
logger.info({
|
|
162
|
+
success: result.success,
|
|
163
|
+
error: result.error,
|
|
164
|
+
response: result.output?.slice(0, 200),
|
|
165
|
+
}, "Engine result");
|
|
160
166
|
try {
|
|
161
167
|
await gramCtx.api.deleteMessage(gramCtx.chat.id, statusMsg.message_id);
|
|
162
168
|
}
|
|
163
169
|
catch {
|
|
164
170
|
// Ignore delete errors
|
|
165
171
|
}
|
|
166
|
-
if (result.sessionId) {
|
|
172
|
+
if (config.engineSession && result.sessionId) {
|
|
167
173
|
await saveSessionId(userDir, result.sessionId);
|
|
168
174
|
logger.debug({ sessionId: result.sessionId }, "Session saved");
|
|
169
175
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../../src/bot/handlers/text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../../src/bot/handlers/text.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"voice.d.ts","sourceRoot":"","sources":["../../../src/bot/handlers/voice.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"voice.d.ts","sourceRoot":"","sources":["../../../src/bot/handlers/voice.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAItC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAiCrD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,cAAc,IACtC,SAAS,OAAO,KAAG,OAAO,CAAC,IAAI,CAAC,CAwK/C"}
|
|
@@ -2,8 +2,6 @@ import { exec } from "node:child_process";
|
|
|
2
2
|
import { unlink, writeFile } from "node:fs/promises";
|
|
3
3
|
import { join, resolve } from "node:path";
|
|
4
4
|
import { promisify } from "node:util";
|
|
5
|
-
import { executeClaudeQuery } from "../../claude/executor.js";
|
|
6
|
-
import { parseClaudeOutput } from "../../claude/parser.js";
|
|
7
5
|
import { sendChunkedResponse } from "../../telegram/chunker.js";
|
|
8
6
|
import { sendDownloadFiles } from "../../telegram/fileSender.js";
|
|
9
7
|
import { transcribeAudio } from "../../transcription/whisper.js";
|
|
@@ -38,7 +36,7 @@ export function createVoiceHandler(ctx) {
|
|
|
38
36
|
if (!userId || !voice) {
|
|
39
37
|
return;
|
|
40
38
|
}
|
|
41
|
-
logger.
|
|
39
|
+
logger.info({ userId, duration: voice.duration, fileSize: voice.file_size }, "Voice message received");
|
|
42
40
|
const userDir = resolve(join(config.dataDir, String(userId)));
|
|
43
41
|
try {
|
|
44
42
|
await ensureUserSetup(userDir);
|
|
@@ -95,7 +93,9 @@ export function createVoiceHandler(ctx) {
|
|
|
95
93
|
catch {
|
|
96
94
|
// Ignore cleanup errors
|
|
97
95
|
}
|
|
98
|
-
const sessionId =
|
|
96
|
+
const sessionId = config.engineSession
|
|
97
|
+
? await getSessionId(userDir)
|
|
98
|
+
: null;
|
|
99
99
|
let lastProgressUpdate = Date.now();
|
|
100
100
|
let lastProgressText = "Processing...";
|
|
101
101
|
const onProgress = async (message) => {
|
|
@@ -112,8 +112,8 @@ export function createVoiceHandler(ctx) {
|
|
|
112
112
|
}
|
|
113
113
|
};
|
|
114
114
|
const downloadsPath = getDownloadsPath(userDir);
|
|
115
|
-
logger.
|
|
116
|
-
const result = await
|
|
115
|
+
logger.info({ transcription: transcription.text }, "Executing engine query");
|
|
116
|
+
const result = await ctx.engine.execute({
|
|
117
117
|
prompt: transcription.text,
|
|
118
118
|
gramCtx,
|
|
119
119
|
userDir,
|
|
@@ -127,8 +127,8 @@ export function createVoiceHandler(ctx) {
|
|
|
127
127
|
catch {
|
|
128
128
|
// Ignore delete errors
|
|
129
129
|
}
|
|
130
|
-
const parsed =
|
|
131
|
-
if (parsed.sessionId) {
|
|
130
|
+
const parsed = ctx.engine.parse(result);
|
|
131
|
+
if (config.engineSession && parsed.sessionId) {
|
|
132
132
|
await saveSessionId(userDir, parsed.sessionId);
|
|
133
133
|
}
|
|
134
134
|
await sendChunkedResponse(gramCtx, parsed.text);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"voice.js","sourceRoot":"","sources":["../../../src/bot/handlers/voice.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"voice.js","sourceRoot":"","sources":["../../../src/bot/handlers/voice.ts"],"names":[],"mappings":"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"}
|
package/dist/bot.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bot.d.ts","sourceRoot":"","sources":["../src/bot.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bot.d.ts","sourceRoot":"","sources":["../src/bot.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED;;;;GAIG;AACH,wBAAsB,QAAQ,CAAC,UAAU,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,CAwG7E"}
|
package/dist/bot.js
CHANGED
|
@@ -1,39 +1,25 @@
|
|
|
1
|
-
import { execSync } from "node:child_process";
|
|
2
1
|
import { Bot } from "grammy";
|
|
3
|
-
import { getSkillsDir } from "./agent/index.js";
|
|
4
2
|
import { createClearHandler } from "./bot/commands/clear.js";
|
|
5
3
|
import { helpHandler } from "./bot/commands/help.js";
|
|
6
4
|
import { loadCommands } from "./bot/commands/loader.js";
|
|
5
|
+
import { createSessionHandler } from "./bot/commands/session.js";
|
|
7
6
|
import { startHandler } from "./bot/commands/start.js";
|
|
8
7
|
import { startCommandWatcher } from "./bot/commands/watcher.js";
|
|
9
8
|
import { createDocumentHandler, createPhotoHandler, createTextHandler, createVoiceHandler, } from "./bot/handlers/index.js";
|
|
10
9
|
import { createAuthMiddleware } from "./bot/middleware/auth.js";
|
|
11
10
|
import { createRateLimitMiddleware } from "./bot/middleware/rateLimit.js";
|
|
12
|
-
/**
|
|
13
|
-
* Check if the Claude CLI command is available, throwing on failure.
|
|
14
|
-
*/
|
|
15
|
-
function checkClaudeCommand(command) {
|
|
16
|
-
try {
|
|
17
|
-
execSync(`${command} --version`, { stdio: "pipe" });
|
|
18
|
-
}
|
|
19
|
-
catch {
|
|
20
|
-
throw new Error(`Claude CLI command "${command}" not found or not executable. ` +
|
|
21
|
-
`Please ensure Claude Code is installed and the command is in your PATH. ` +
|
|
22
|
-
`You can also set a custom command in hal.config.json under "claude.command".`);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
11
|
/**
|
|
26
12
|
* Start a single bot for one project context.
|
|
27
13
|
* Resolves when the bot is fully running; rejects if startup fails.
|
|
28
14
|
* Returns a handle with a stop() function for graceful shutdown.
|
|
29
15
|
*/
|
|
30
16
|
export async function startBot(projectCtx) {
|
|
31
|
-
const { config, logger } = projectCtx;
|
|
17
|
+
const { config, logger, engine } = projectCtx;
|
|
32
18
|
logger.info({ cwd: config.cwd, dataDir: config.dataDir }, "Starting bot");
|
|
33
|
-
// Verify
|
|
34
|
-
logger.debug({
|
|
35
|
-
|
|
36
|
-
logger.info({
|
|
19
|
+
// Verify the engine CLI is available (throws on failure)
|
|
20
|
+
logger.debug({ engine: config.engine, command: engine.command }, "Checking engine CLI");
|
|
21
|
+
engine.check();
|
|
22
|
+
logger.info({ engine: config.engine, command: engine.command }, "Engine CLI verified");
|
|
37
23
|
const bot = new Bot(config.telegram.botToken);
|
|
38
24
|
// Wire per-bot middleware
|
|
39
25
|
const { middleware: rateLimitMw, cleanup: rateLimitCleanup } = createRateLimitMiddleware(projectCtx);
|
|
@@ -43,6 +29,9 @@ export async function startBot(projectCtx) {
|
|
|
43
29
|
bot.command("start", startHandler);
|
|
44
30
|
bot.command("help", helpHandler);
|
|
45
31
|
bot.command("clear", createClearHandler(projectCtx));
|
|
32
|
+
const sessionHandler = createSessionHandler(projectCtx);
|
|
33
|
+
bot.command("new", sessionHandler);
|
|
34
|
+
bot.command("clean", sessionHandler);
|
|
46
35
|
// Wire handlers
|
|
47
36
|
bot.on("message:text", createTextHandler(projectCtx));
|
|
48
37
|
bot.on("message:photo", createPhotoHandler(projectCtx));
|
|
@@ -73,7 +62,7 @@ export async function startBot(projectCtx) {
|
|
|
73
62
|
// Wait until the bot reports it's running (or fails)
|
|
74
63
|
await startedPromise;
|
|
75
64
|
// Register project-specific commands and skills with Telegram on startup
|
|
76
|
-
const skillsDir =
|
|
65
|
+
const skillsDir = engine.skillsDir(config.cwd);
|
|
77
66
|
const commands = await loadCommands(config.cwd, config.configDir, logger, skillsDir);
|
|
78
67
|
if (commands.length > 0) {
|
|
79
68
|
await bot.api.setMyCommands(commands.map((c) => ({ command: c.command, description: c.description })));
|
package/dist/bot.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bot.js","sourceRoot":"","sources":["../src/bot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"bot.js","sourceRoot":"","sources":["../src/bot.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -5,12 +5,14 @@ import { join, resolve } from "node:path";
|
|
|
5
5
|
import { startBot } from "./bot.js";
|
|
6
6
|
import { loadMultiConfig, resolveProjectConfig, validateProjects, } from "./config.js";
|
|
7
7
|
import { evaluateBootTimeShells } from "./context/resolver.js";
|
|
8
|
+
import { getEngine } from "./engine/index.js";
|
|
8
9
|
import { createProjectLogger, createStartupLogger } from "./logger.js";
|
|
9
10
|
// ─── Config template ──────────────────────────────────────────────────────────
|
|
10
|
-
|
|
11
|
+
function buildConfigTemplate(engineName) {
|
|
12
|
+
return `{
|
|
11
13
|
"globals": {
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
+
"engine": {
|
|
15
|
+
"name": "${engineName}"
|
|
14
16
|
},
|
|
15
17
|
"logging": {
|
|
16
18
|
"level": "info",
|
|
@@ -39,9 +41,10 @@ const CONFIG_TEMPLATE = `{
|
|
|
39
41
|
]
|
|
40
42
|
}
|
|
41
43
|
`;
|
|
44
|
+
}
|
|
42
45
|
function showHelp() {
|
|
43
46
|
console.log(`
|
|
44
|
-
HAL -
|
|
47
|
+
HAL - AI Code Personal Assistant for Telegram
|
|
45
48
|
|
|
46
49
|
Usage:
|
|
47
50
|
npx @marcopeg/hal [command] [options]
|
|
@@ -51,11 +54,13 @@ Commands:
|
|
|
51
54
|
start Start the bots (default)
|
|
52
55
|
|
|
53
56
|
Options:
|
|
54
|
-
--cwd <path>
|
|
55
|
-
--
|
|
57
|
+
--cwd <path> Directory containing hal.config.json (default: current directory)
|
|
58
|
+
--engine <name> Engine to use: claude, copilot, codex, opencode (default: claude)
|
|
59
|
+
--help, -h Show this help message
|
|
56
60
|
|
|
57
61
|
Examples:
|
|
58
62
|
npx @marcopeg/hal init
|
|
63
|
+
npx @marcopeg/hal init --engine copilot
|
|
59
64
|
npx @marcopeg/hal init --cwd ./workspace
|
|
60
65
|
npx @marcopeg/hal
|
|
61
66
|
npx @marcopeg/hal --cwd ./workspace
|
|
@@ -63,7 +68,7 @@ Examples:
|
|
|
63
68
|
Configuration (hal.config.json):
|
|
64
69
|
{
|
|
65
70
|
"globals": {
|
|
66
|
-
"
|
|
71
|
+
"engine": { "name": "claude" },
|
|
67
72
|
"logging": { "level": "info", "flow": true, "persist": false },
|
|
68
73
|
"rateLimit": { "max": 10, "windowMs": 60000 }
|
|
69
74
|
},
|
|
@@ -78,10 +83,17 @@ Configuration (hal.config.json):
|
|
|
78
83
|
}
|
|
79
84
|
`);
|
|
80
85
|
}
|
|
86
|
+
const VALID_ENGINES = [
|
|
87
|
+
"claude",
|
|
88
|
+
"copilot",
|
|
89
|
+
"codex",
|
|
90
|
+
"opencode",
|
|
91
|
+
];
|
|
81
92
|
function parseArgs() {
|
|
82
93
|
const args = process.argv.slice(2);
|
|
83
94
|
let cwd = process.cwd();
|
|
84
95
|
let command = "start";
|
|
96
|
+
let engine = "claude";
|
|
85
97
|
for (let i = 0; i < args.length; i++) {
|
|
86
98
|
const arg = args[i];
|
|
87
99
|
if (arg === "--cwd" && args[i + 1]) {
|
|
@@ -91,6 +103,23 @@ function parseArgs() {
|
|
|
91
103
|
else if (arg.startsWith("--cwd=")) {
|
|
92
104
|
cwd = resolve(process.cwd(), arg.slice(6));
|
|
93
105
|
}
|
|
106
|
+
else if (arg === "--engine" && args[i + 1]) {
|
|
107
|
+
const val = args[i + 1];
|
|
108
|
+
if (!VALID_ENGINES.includes(val)) {
|
|
109
|
+
console.error(`Error: unknown engine "${val}". Valid engines: ${VALID_ENGINES.join(", ")}`);
|
|
110
|
+
process.exit(1);
|
|
111
|
+
}
|
|
112
|
+
engine = val;
|
|
113
|
+
i++;
|
|
114
|
+
}
|
|
115
|
+
else if (arg.startsWith("--engine=")) {
|
|
116
|
+
const val = arg.slice(9);
|
|
117
|
+
if (!VALID_ENGINES.includes(val)) {
|
|
118
|
+
console.error(`Error: unknown engine "${val}". Valid engines: ${VALID_ENGINES.join(", ")}`);
|
|
119
|
+
process.exit(1);
|
|
120
|
+
}
|
|
121
|
+
engine = val;
|
|
122
|
+
}
|
|
94
123
|
else if (arg === "--help" || arg === "-h") {
|
|
95
124
|
showHelp();
|
|
96
125
|
process.exit(0);
|
|
@@ -102,20 +131,30 @@ function parseArgs() {
|
|
|
102
131
|
command = "start";
|
|
103
132
|
}
|
|
104
133
|
}
|
|
105
|
-
return { command, cwd };
|
|
134
|
+
return { command, cwd, engine };
|
|
106
135
|
}
|
|
107
136
|
// ─── init command ─────────────────────────────────────────────────────────────
|
|
108
|
-
async function runInit(cwd) {
|
|
137
|
+
async function runInit(cwd, engineName) {
|
|
109
138
|
const configPath = join(cwd, "hal.config.json");
|
|
110
139
|
if (existsSync(configPath)) {
|
|
111
140
|
console.error(`Error: hal.config.json already exists in ${cwd}`);
|
|
112
141
|
process.exit(1);
|
|
113
142
|
}
|
|
114
|
-
|
|
115
|
-
|
|
143
|
+
// Write config with the selected engine
|
|
144
|
+
const template = buildConfigTemplate(engineName);
|
|
145
|
+
await writeFile(configPath, template, "utf-8");
|
|
146
|
+
console.log(`Created hal.config.json in ${cwd} (engine: ${engineName})`);
|
|
147
|
+
// Scaffold engine-specific instructions file
|
|
148
|
+
const engine = getEngine(engineName);
|
|
149
|
+
const instrFile = engine.instructionsFile();
|
|
150
|
+
const instrPath = join(cwd, instrFile);
|
|
151
|
+
if (!existsSync(instrPath)) {
|
|
152
|
+
await writeFile(instrPath, `# Project Instructions\n\nAdd your project-specific instructions here.\n`, "utf-8");
|
|
153
|
+
console.log(`Created ${instrFile}`);
|
|
154
|
+
}
|
|
116
155
|
console.log(`\nNext steps:`);
|
|
117
156
|
console.log(`1. Edit hal.config.json and set your Telegram bot token in projects[0].telegram.botToken`);
|
|
118
|
-
console.log(`2. Set the project cwd to the folder
|
|
157
|
+
console.log(`2. Set the project cwd to the folder the engine should work in`);
|
|
119
158
|
console.log(`3. Add allowed user IDs to the "allowedUserIds" array`);
|
|
120
159
|
console.log(`4. Run: npx @marcopeg/hal --cwd ${cwd}`);
|
|
121
160
|
process.exit(0);
|
|
@@ -127,9 +166,17 @@ async function runStart(configDir) {
|
|
|
127
166
|
// Load and validate the multi-project config
|
|
128
167
|
const { config: multiConfig, loadedFiles } = loadMultiConfig(configDir);
|
|
129
168
|
const globals = multiConfig.globals ?? {};
|
|
130
|
-
// Resolve all project configs
|
|
169
|
+
// Resolve all project configs, skip inactive ones
|
|
131
170
|
const rootContext = multiConfig.context;
|
|
132
|
-
const
|
|
171
|
+
const allProjects = multiConfig.projects.map((project) => resolveProjectConfig(project, globals, configDir, rootContext));
|
|
172
|
+
const resolvedProjects = allProjects.filter((_, i) => {
|
|
173
|
+
const project = multiConfig.projects[i];
|
|
174
|
+
if (project.active === false) {
|
|
175
|
+
startupLogger.info(`Skipping inactive project "${project.name ?? project.cwd}"`);
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
return true;
|
|
179
|
+
});
|
|
133
180
|
// Boot-time validation (unique cwds, tokens, names)
|
|
134
181
|
validateProjects(resolvedProjects);
|
|
135
182
|
// Boot-time sourcing log
|
|
@@ -147,7 +194,8 @@ async function runStart(configDir) {
|
|
|
147
194
|
const shellCache = config.context
|
|
148
195
|
? evaluateBootTimeShells(config.context, logger)
|
|
149
196
|
: {};
|
|
150
|
-
|
|
197
|
+
const engine = getEngine(config.engine, config.engineCommand, config.engineModel);
|
|
198
|
+
return { config, logger, bootContext: { shellCache }, engine };
|
|
151
199
|
});
|
|
152
200
|
// Emit startup notices for flow=false projects
|
|
153
201
|
for (const { config } of contexts) {
|
|
@@ -177,9 +225,9 @@ async function runStart(configDir) {
|
|
|
177
225
|
}
|
|
178
226
|
// ─── Entry point ──────────────────────────────────────────────────────────────
|
|
179
227
|
async function main() {
|
|
180
|
-
const { command, cwd } = parseArgs();
|
|
228
|
+
const { command, cwd, engine } = parseArgs();
|
|
181
229
|
if (command === "init") {
|
|
182
|
-
await runInit(cwd);
|
|
230
|
+
await runInit(cwd, engine);
|
|
183
231
|
}
|
|
184
232
|
else {
|
|
185
233
|
await runStart(cwd);
|