@marcopeg/hal 1.0.11 → 1.0.12
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 +121 -32
- package/dist/agent/index.d.ts +5 -7
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +10 -9
- package/dist/agent/index.js.map +1 -1
- package/dist/bot/commands/loader.d.ts.map +1 -1
- package/dist/bot/commands/loader.js +15 -0
- package/dist/bot/commands/loader.js.map +1 -1
- package/dist/bot/handlers/document.d.ts.map +1 -1
- package/dist/bot/handlers/document.js +4 -6
- 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 +4 -6
- 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 +10 -6
- 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 +4 -6
- package/dist/bot/handlers/voice.js.map +1 -1
- package/dist/bot.d.ts.map +1 -1
- package/dist/bot.js +6 -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 +56 -19
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +21 -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 +7 -0
- package/dist/engine/adapters/codex.d.ts.map +1 -0
- package/dist/engine/adapters/codex.js +94 -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 +42 -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 +3 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,38 +1,54 @@
|
|
|
1
1
|
# HAL
|
|
2
2
|
|
|
3
|
-
A Telegram bot that provides access to
|
|
3
|
+
A Telegram bot that provides access to AI coding agents as a personal assistant. Run multiple engines (Claude Code, GitHub Copilot, and more) across multiple projects simultaneously, each with its own dedicated Telegram bot.
|
|
4
4
|
|
|
5
5
|
## Features
|
|
6
6
|
|
|
7
|
+
- **Multi-engine support** — use Claude Code, GitHub Copilot, Codex, or OpenCode per project
|
|
7
8
|
- **Multi-project support** — run multiple bots from a single config, each connected to a different directory
|
|
8
|
-
- Chat with
|
|
9
|
+
- Chat with your AI coding agent via Telegram
|
|
9
10
|
- Send images and documents for analysis
|
|
10
11
|
- **Voice message support** with local Whisper transcription
|
|
11
|
-
- **File sending** —
|
|
12
|
+
- **File sending** — the engine can send files back to you
|
|
12
13
|
- **Context injection** — every message includes metadata (timestamps, user info, custom values) and supports hot-reloaded hooks
|
|
13
|
-
- **Custom slash commands** — add `.mjs` command files per-project or globally; hot-reloaded so
|
|
14
|
-
- **Skills** —
|
|
14
|
+
- **Custom slash commands** — add `.mjs` command files per-project or globally; hot-reloaded so the engine can create new commands at runtime
|
|
15
|
+
- **Skills** — `.claude/skills/` entries are automatically exposed as Telegram slash commands; no extra setup needed
|
|
15
16
|
- Persistent conversation sessions per user
|
|
16
17
|
- Per-project access control, rate limiting, and logging
|
|
17
18
|
- Log persistence to file with daily rotation support
|
|
18
19
|
|
|
19
20
|
## How It Works
|
|
20
21
|
|
|
21
|
-
This tool runs one
|
|
22
|
+
This tool runs one AI coding agent subprocess per project, each in its configured working directory. The default engine is Claude Code, but each project can use a different engine.
|
|
22
23
|
|
|
23
|
-
|
|
24
|
-
|
|
24
|
+
The engine reads its standard config files from the project directory:
|
|
25
|
+
|
|
26
|
+
- `CLAUDE.md` / `AGENTS.md` — Project-specific instructions and context (filename depends on engine)
|
|
27
|
+
- `.claude/settings.json` — Permissions and tool settings (Claude Code)
|
|
25
28
|
- `.claude/commands/` — Custom slash commands
|
|
26
29
|
- `.mcp.json` — MCP server configurations
|
|
27
30
|
|
|
28
|
-
You get the full power of
|
|
31
|
+
You get the full power of your chosen AI coding agent — file access, code execution, configured MCP tools — all accessible through Telegram.
|
|
32
|
+
|
|
33
|
+
### Supported Engines
|
|
34
|
+
|
|
35
|
+
| Engine | CLI Command | Status | Instructions File |
|
|
36
|
+
|--------|-------------|--------|-------------------|
|
|
37
|
+
| **Claude Code** | `claude` | Full support | `CLAUDE.md` |
|
|
38
|
+
| **GitHub Copilot** | `copilot` | Full support | `AGENTS.md` |
|
|
39
|
+
| **Codex** | `codex` | Stub (basic prompt/response) | `AGENTS.md` |
|
|
40
|
+
| **OpenCode** | `opencode` | Stub (basic prompt/response) | `AGENTS.md` |
|
|
41
|
+
|
|
42
|
+
See [Engine Configuration](#engine-configuration) for setup details.
|
|
29
43
|
|
|
30
|
-
See [Claude Code documentation](https://docs.anthropic.com/en/docs/claude-code)
|
|
44
|
+
See [Claude Code documentation](https://docs.anthropic.com/en/docs/claude-code) and [GitHub Copilot CLI documentation](https://docs.github.com/en/copilot/concepts/agents/copilot-cli) for engine-specific configuration.
|
|
31
45
|
|
|
32
46
|
## Prerequisites
|
|
33
47
|
|
|
34
48
|
- Node.js 18+
|
|
35
|
-
-
|
|
49
|
+
- At least one supported AI coding CLI installed and authenticated:
|
|
50
|
+
- [Claude Code CLI](https://github.com/anthropics/claude-code) — `claude`
|
|
51
|
+
- [GitHub Copilot CLI](https://docs.github.com/en/copilot/concepts/agents/copilot-cli) — `copilot`
|
|
36
52
|
- A Telegram bot token per project (from [@BotFather](https://t.me/BotFather)) — see [Creating a Telegram Bot](#creating-a-telegram-bot)
|
|
37
53
|
- **ffmpeg** (required for voice messages) — `brew install ffmpeg` on macOS
|
|
38
54
|
|
|
@@ -42,6 +58,9 @@ See [Claude Code documentation](https://docs.anthropic.com/en/docs/claude-code)
|
|
|
42
58
|
# Create hal.config.json in the current directory
|
|
43
59
|
npx @marcopeg/hal init
|
|
44
60
|
|
|
61
|
+
# Initialize with a specific engine
|
|
62
|
+
npx @marcopeg/hal init --engine copilot
|
|
63
|
+
|
|
45
64
|
# Edit hal.config.json: add your bot token and project path
|
|
46
65
|
# then start all bots
|
|
47
66
|
npx @marcopeg/hal
|
|
@@ -66,7 +85,7 @@ Create a `hal.config.json` in your workspace directory (where you run the CLI fr
|
|
|
66
85
|
```json
|
|
67
86
|
{
|
|
68
87
|
"globals": {
|
|
69
|
-
"
|
|
88
|
+
"engine": { "name": "claude" },
|
|
70
89
|
"logging": { "level": "info", "flow": true, "persist": false },
|
|
71
90
|
"rateLimit": { "max": 10, "windowMs": 60000 },
|
|
72
91
|
"access": { "allowedUserIds": [] }
|
|
@@ -82,6 +101,7 @@ Create a `hal.config.json` in your workspace directory (where you run the CLI fr
|
|
|
82
101
|
{
|
|
83
102
|
"name": "frontend",
|
|
84
103
|
"cwd": "./frontend",
|
|
104
|
+
"engine": { "name": "copilot", "model": "gpt-5-mini" },
|
|
85
105
|
"telegram": { "botToken": "${FRONTEND_BOT_TOKEN}" },
|
|
86
106
|
"access": { "allowedUserIds": [123456789] }
|
|
87
107
|
}
|
|
@@ -133,7 +153,7 @@ On every boot an `info`-level log lists all config and env files that were loade
|
|
|
133
153
|
|
|
134
154
|
### Context Injection
|
|
135
155
|
|
|
136
|
-
Every message sent to
|
|
156
|
+
Every message sent to the engine is automatically enriched with a structured context header. This provides metadata (message info, timestamps, custom values) so the AI can reason about the current request without extra tool calls.
|
|
137
157
|
|
|
138
158
|
#### Implicit context (always-on)
|
|
139
159
|
|
|
@@ -151,7 +171,7 @@ These keys are injected for every message, even without any `context` configurat
|
|
|
151
171
|
| `bot.messageType` | `text` / `photo` / `document` / `voice` |
|
|
152
172
|
| `project.name` | Project name (falls back to internal slug if not set) |
|
|
153
173
|
| `project.cwd` | Resolved absolute project working directory |
|
|
154
|
-
| `project.slug` |
|
|
174
|
+
| `project.slug` | Project slug (full path with `/` → `-`) |
|
|
155
175
|
| `sys.datetime` | Current local datetime with timezone |
|
|
156
176
|
| `sys.date` | Current date, `YYYY-MM-DD` |
|
|
157
177
|
| `sys.time` | Current time, `HH:MM:SS` |
|
|
@@ -205,7 +225,7 @@ For advanced enrichment, you can provide a `context.mjs` hook file that transfor
|
|
|
205
225
|
| `{configDir}/.hal/hooks/context.mjs` | Global — runs for all projects |
|
|
206
226
|
| `{project.cwd}/.hal/hooks/context.mjs` | Project — runs for that project only |
|
|
207
227
|
|
|
208
|
-
When both exist, they chain: global runs first, its output feeds into the project hook. Both are **hot-reloaded** on every message (no restart needed) — so
|
|
228
|
+
When both exist, they chain: global runs first, its output feeds into the project hook. Both are **hot-reloaded** on every message (no restart needed) — so the AI engine itself can create or modify hooks at runtime.
|
|
209
229
|
|
|
210
230
|
```js
|
|
211
231
|
// .hal/hooks/context.mjs
|
|
@@ -217,12 +237,12 @@ export default async (context) => ({
|
|
|
217
237
|
```
|
|
218
238
|
|
|
219
239
|
- **Input**: fully-resolved `Record<string, string>` context
|
|
220
|
-
- **Output**: a `Record<string, string>` — the final context passed to
|
|
240
|
+
- **Output**: a `Record<string, string>` — the final context passed to the engine
|
|
221
241
|
- If a hook throws, the bot logs the error and falls back to the pre-hook context
|
|
222
242
|
|
|
223
243
|
#### Prompt format
|
|
224
244
|
|
|
225
|
-
The resolved context is prepended to the user message before passing to
|
|
245
|
+
The resolved context is prepended to the user message before passing to the engine:
|
|
226
246
|
|
|
227
247
|
```
|
|
228
248
|
# Context
|
|
@@ -240,7 +260,9 @@ Default settings applied to all projects. Any setting defined in a project overr
|
|
|
240
260
|
|
|
241
261
|
| Key | Description | Default |
|
|
242
262
|
|-----|-------------|---------|
|
|
243
|
-
| `globals.
|
|
263
|
+
| `globals.engine.name` | Engine: `claude`, `copilot`, `codex`, `opencode` | `"claude"` |
|
|
264
|
+
| `globals.engine.command` | Override the CLI command path | _(engine name)_ |
|
|
265
|
+
| `globals.engine.model` | Override the AI model | _(engine default)_ |
|
|
244
266
|
| `globals.logging.level` | Log level: `debug`, `info`, `warn`, `error` | `"info"` |
|
|
245
267
|
| `globals.logging.flow` | Write logs to terminal | `true` |
|
|
246
268
|
| `globals.logging.persist` | Write logs to file | `false` |
|
|
@@ -258,16 +280,13 @@ Each project entry creates one Telegram bot connected to one directory.
|
|
|
258
280
|
| Key | Required | Description |
|
|
259
281
|
|-----|----------|-------------|
|
|
260
282
|
| `name` | No | Unique identifier used as a slug for logs/data paths |
|
|
283
|
+
| `active` | No | Set to `false` to skip this project at boot (default: `true`) |
|
|
261
284
|
| `cwd` | **Yes** | Path to the project directory (relative to config file, or absolute) |
|
|
262
285
|
| `telegram.botToken` | **Yes** | Telegram bot token from BotFather |
|
|
263
286
|
| `access.allowedUserIds` | No | Override the global user whitelist for this bot |
|
|
264
|
-
| `
|
|
265
|
-
| `
|
|
266
|
-
| `
|
|
267
|
-
| `logging.persist` | No | Override file logging |
|
|
268
|
-
| `rateLimit.max` | No | Override rate limit max |
|
|
269
|
-
| `rateLimit.windowMs` | No | Override rate limit window |
|
|
270
|
-
| `transcription.model` | No | Override Whisper model |
|
|
287
|
+
| `engine.name` | No | Override the engine for this project |
|
|
288
|
+
| `engine.command` | No | Override the CLI command path |
|
|
289
|
+
| `engine.model` | No | Override the AI model |
|
|
271
290
|
| `transcription.showTranscription` | No | Override transcription display |
|
|
272
291
|
| `dataDir` | No | Override user data directory (see below) |
|
|
273
292
|
| `context` | No | Per-project context overrides (see [Context Injection](#context-injection)) |
|
|
@@ -294,6 +313,76 @@ When `logging.persist: true`, logs are written to:
|
|
|
294
313
|
<config-dir>/.hal/logs/<project-slug>/YYYY-MM-DD.txt
|
|
295
314
|
```
|
|
296
315
|
|
|
316
|
+
### Engine Configuration
|
|
317
|
+
|
|
318
|
+
Set the engine globally or per-project. The engine determines which AI coding CLI is invoked for each message.
|
|
319
|
+
|
|
320
|
+
```json
|
|
321
|
+
{
|
|
322
|
+
"globals": {
|
|
323
|
+
"engine": { "name": "claude" }
|
|
324
|
+
},
|
|
325
|
+
"projects": [
|
|
326
|
+
{
|
|
327
|
+
"name": "backend",
|
|
328
|
+
"cwd": "./backend",
|
|
329
|
+
"telegram": { "botToken": "${BACKEND_BOT_TOKEN}" }
|
|
330
|
+
},
|
|
331
|
+
{
|
|
332
|
+
"name": "frontend",
|
|
333
|
+
"cwd": "./frontend",
|
|
334
|
+
"engine": { "name": "copilot", "model": "gpt-5-mini" },
|
|
335
|
+
"telegram": { "botToken": "${FRONTEND_BOT_TOKEN}" }
|
|
336
|
+
},
|
|
337
|
+
{
|
|
338
|
+
"name": "legacy",
|
|
339
|
+
"active": false,
|
|
340
|
+
"cwd": "./legacy",
|
|
341
|
+
"telegram": { "botToken": "${LEGACY_BOT_TOKEN}" }
|
|
342
|
+
}
|
|
343
|
+
]
|
|
344
|
+
}
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
In this example:
|
|
348
|
+
- **backend** inherits the global engine (Claude Code, default model)
|
|
349
|
+
- **frontend** uses GitHub Copilot with the `gpt-5-mini` model
|
|
350
|
+
- **legacy** is inactive and will be skipped at boot
|
|
351
|
+
|
|
352
|
+
The `engine` object supports three fields:
|
|
353
|
+
|
|
354
|
+
| Field | Description | Default |
|
|
355
|
+
|-------|-------------|---------|
|
|
356
|
+
| `name` | Engine identifier: `claude`, `copilot`, `codex`, `opencode` | `"claude"` |
|
|
357
|
+
| `command` | Custom path to the CLI binary | _(engine name)_ |
|
|
358
|
+
| `model` | AI model override (omit to use the engine's default) | _(engine default)_ |
|
|
359
|
+
|
|
360
|
+
#### GitHub Copilot Models
|
|
361
|
+
|
|
362
|
+
When using the `copilot` engine, the following models are available via `engine.model`:
|
|
363
|
+
|
|
364
|
+
| Model | Description |
|
|
365
|
+
|-------|-------------|
|
|
366
|
+
| `claude-sonnet-4.6` | Anthropic Claude Sonnet 4.6 |
|
|
367
|
+
| `claude-sonnet-4.5` | Anthropic Claude Sonnet 4.5 |
|
|
368
|
+
| `claude-haiku-4.5` | Anthropic Claude Haiku 4.5 |
|
|
369
|
+
| `claude-opus-4.6` | Anthropic Claude Opus 4.6 |
|
|
370
|
+
| `claude-opus-4.6-fast` | Anthropic Claude Opus 4.6 (fast) |
|
|
371
|
+
| `claude-opus-4.5` | Anthropic Claude Opus 4.5 |
|
|
372
|
+
| `claude-sonnet-4` | Anthropic Claude Sonnet 4 |
|
|
373
|
+
| `gemini-3-pro-preview` | Google Gemini 3 Pro (preview) |
|
|
374
|
+
| `gpt-5.3-codex` | OpenAI GPT-5.3 Codex |
|
|
375
|
+
| `gpt-5.2-codex` | OpenAI GPT-5.2 Codex |
|
|
376
|
+
| `gpt-5.2` | OpenAI GPT-5.2 |
|
|
377
|
+
| `gpt-5.1-codex-max` | OpenAI GPT-5.1 Codex Max |
|
|
378
|
+
| `gpt-5.1-codex` | OpenAI GPT-5.1 Codex |
|
|
379
|
+
| `gpt-5.1` | OpenAI GPT-5.1 |
|
|
380
|
+
| `gpt-5.1-codex-mini` | OpenAI GPT-5.1 Codex Mini |
|
|
381
|
+
| `gpt-5-mini` | OpenAI GPT-5 Mini |
|
|
382
|
+
| `gpt-4.1` | OpenAI GPT-4.1 |
|
|
383
|
+
|
|
384
|
+
If `engine.model` is omitted, the engine uses its own default model.
|
|
385
|
+
|
|
297
386
|
## Directory Structure
|
|
298
387
|
|
|
299
388
|
With a config at `~/workspace/hal.config.json`:
|
|
@@ -400,7 +489,7 @@ Tokens following the command name, split on whitespace.
|
|
|
400
489
|
|
|
401
490
|
#### `ctx: Record<string, string>`
|
|
402
491
|
|
|
403
|
-
The fully-resolved context that would be sent to the AI for this message — identical to what
|
|
492
|
+
The fully-resolved context that would be sent to the AI for this message — identical to what the engine sees in its `# Context` header. Includes all implicit keys plus any config vars and hook results:
|
|
404
493
|
|
|
405
494
|
| Key group | Description |
|
|
406
495
|
|-----------|-------------|
|
|
@@ -504,7 +593,7 @@ The project-level context object. Useful fields:
|
|
|
504
593
|
|
|
505
594
|
### Skills
|
|
506
595
|
|
|
507
|
-
[Claude Code skills](https://docs.anthropic.com/en/docs/claude-code/skills) live in `.claude/skills/` inside the project directory. Each skill is a folder containing a `SKILL.md` file with a YAML frontmatter block and a prompt body:
|
|
596
|
+
[Claude Code skills](https://docs.anthropic.com/en/docs/claude-code/skills) live in `.claude/skills/` inside the project directory (shared across all engines). Each skill is a folder containing a `SKILL.md` file with a YAML frontmatter block and a prompt body:
|
|
508
597
|
|
|
509
598
|
```
|
|
510
599
|
<project-cwd>/
|
|
@@ -544,7 +633,7 @@ See [`examples/obsidian/.claude/skills/chuck/`](examples/obsidian/.claude/skills
|
|
|
544
633
|
|
|
545
634
|
### Hot-reload
|
|
546
635
|
|
|
547
|
-
Commands and skills are **hot-reloaded** — drop a new `.mjs` file or `SKILL.md` into the relevant directory and the bot registers it with Telegram automatically, with no restart. This means
|
|
636
|
+
Commands and skills are **hot-reloaded** — drop a new `.mjs` file or `SKILL.md` into the relevant directory and the bot registers it with Telegram automatically, with no restart. This means the AI engine can write new command or skill files as part of a task and users see them in the `/` menu immediately.
|
|
548
637
|
|
|
549
638
|
## Creating a Telegram Bot
|
|
550
639
|
|
|
@@ -599,10 +688,10 @@ Voice messages are transcribed locally using [Whisper](https://github.com/openai
|
|
|
599
688
|
|
|
600
689
|
## Sending Files to Users
|
|
601
690
|
|
|
602
|
-
|
|
691
|
+
The engine can send files back through Telegram. Each user has a `downloads/` folder under their data directory. The engine is informed of this path in every prompt.
|
|
603
692
|
|
|
604
|
-
1.
|
|
605
|
-
2. The bot detects it after
|
|
693
|
+
1. The engine writes a file to the downloads folder
|
|
694
|
+
2. The bot detects it after the engine's response completes
|
|
606
695
|
3. The file is sent via Telegram (as a document)
|
|
607
696
|
4. The file is deleted from the server after delivery
|
|
608
697
|
|
|
@@ -624,7 +713,7 @@ The old single-project config format is no longer supported. Migrate by wrapping
|
|
|
624
713
|
```json
|
|
625
714
|
{
|
|
626
715
|
"globals": {
|
|
627
|
-
"
|
|
716
|
+
"engine": { "name": "claude" },
|
|
628
717
|
"logging": { "level": "info" }
|
|
629
718
|
},
|
|
630
719
|
"projects": [
|
package/dist/agent/index.d.ts
CHANGED
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
import type { Agent, ProjectContext } from "../types.js";
|
|
2
2
|
/**
|
|
3
3
|
* Return the engine-specific skills directory for the given project.
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Delegates to the engine adapter attached to the project context.
|
|
5
|
+
* Falls back to .claude/skills/ when no engine is available (e.g. during init).
|
|
6
6
|
*/
|
|
7
|
-
export declare function getSkillsDir(projectCwd: string): string;
|
|
7
|
+
export declare function getSkillsDir(projectCwd: string, ctx?: ProjectContext): string;
|
|
8
8
|
/**
|
|
9
9
|
* Create an Agent for the given project context.
|
|
10
10
|
*
|
|
11
|
-
* This factory
|
|
12
|
-
*
|
|
13
|
-
* providers (Codex, Copilot, …) is added, engine selection will happen here
|
|
14
|
-
* based on project config — command handlers never need to change.
|
|
11
|
+
* This factory delegates to the engine adapter on the project context.
|
|
12
|
+
* Command handlers never need to know which engine is in use.
|
|
15
13
|
*/
|
|
16
14
|
export declare function createAgent(projectCtx: ProjectContext): Agent;
|
|
17
15
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEzD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,cAAc,GAAG,MAAM,CAK7E;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,cAAc,GAAG,KAAK,CAc7D"}
|
package/dist/agent/index.js
CHANGED
|
@@ -1,25 +1,26 @@
|
|
|
1
1
|
import { join } from "node:path";
|
|
2
|
-
import { executeClaudeQuery } from "../claude/executor.js";
|
|
3
2
|
/**
|
|
4
3
|
* Return the engine-specific skills directory for the given project.
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* Delegates to the engine adapter attached to the project context.
|
|
5
|
+
* Falls back to .claude/skills/ when no engine is available (e.g. during init).
|
|
7
6
|
*/
|
|
8
|
-
export function getSkillsDir(projectCwd) {
|
|
7
|
+
export function getSkillsDir(projectCwd, ctx) {
|
|
8
|
+
if (ctx?.engine) {
|
|
9
|
+
return ctx.engine.skillsDir(projectCwd);
|
|
10
|
+
}
|
|
9
11
|
return join(projectCwd, ".claude", "skills");
|
|
10
12
|
}
|
|
11
13
|
/**
|
|
12
14
|
* Create an Agent for the given project context.
|
|
13
15
|
*
|
|
14
|
-
* This factory
|
|
15
|
-
*
|
|
16
|
-
* providers (Codex, Copilot, …) is added, engine selection will happen here
|
|
17
|
-
* based on project config — command handlers never need to change.
|
|
16
|
+
* This factory delegates to the engine adapter on the project context.
|
|
17
|
+
* Command handlers never need to know which engine is in use.
|
|
18
18
|
*/
|
|
19
19
|
export function createAgent(projectCtx) {
|
|
20
|
+
const { engine } = projectCtx;
|
|
20
21
|
return {
|
|
21
22
|
async call(prompt, options) {
|
|
22
|
-
const result = await
|
|
23
|
+
const result = await engine.execute({ prompt, userDir: "", onProgress: options?.onProgress }, projectCtx);
|
|
23
24
|
if (!result.success) {
|
|
24
25
|
throw new Error(result.error ?? "Agent call failed");
|
|
25
26
|
}
|
package/dist/agent/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,UAAkB,EAAE,GAAoB;IACnE,IAAI,GAAG,EAAE,MAAM,EAAE,CAAC;QAChB,OAAO,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,UAA0B;IACpD,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC;IAC9B,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO;YACxB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,OAAO,CACjC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,EACxD,UAAU,CACX,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,mBAAmB,CAAC,CAAC;YACvD,CAAC;YACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACvB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/bot/commands/loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAI7B,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/bot/commands/loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAI7B,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA2ND;;;;;GAKG;AACH,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,IAAI,CAAC,MAAM,EACnB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,YAAY,EAAE,CAAC,CAsBzB;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,IAAI,CAAC,MAAM,GAClB,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CA4B9B;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAChB,MAAM,GAAG,IAAI,CAcf"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { existsSync } from "node:fs";
|
|
2
2
|
import { readdir, readFile } from "node:fs/promises";
|
|
3
3
|
import { join } from "node:path";
|
|
4
|
+
const TELEGRAM_COMMAND_RE = /^[a-z0-9_]{1,32}$/;
|
|
5
|
+
function isValidTelegramCommandName(name) {
|
|
6
|
+
return TELEGRAM_COMMAND_RE.test(name);
|
|
7
|
+
}
|
|
4
8
|
// ─── Directory helpers ───────────────────────────────────────────────────────
|
|
5
9
|
function projectCommandDir(projectCwd) {
|
|
6
10
|
return join(projectCwd, ".hal", "commands");
|
|
@@ -20,6 +24,10 @@ async function importCommandFile(filePath, logger) {
|
|
|
20
24
|
// Derive command name from filename (strip .mjs extension)
|
|
21
25
|
const fileName = filePath.split("/").pop() ?? "";
|
|
22
26
|
const command = fileName.replace(/\.mjs$/, "");
|
|
27
|
+
if (!isValidTelegramCommandName(command)) {
|
|
28
|
+
logger.warn({ filePath, command }, "Invalid Telegram command name from filename — skipping");
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
23
31
|
return {
|
|
24
32
|
command,
|
|
25
33
|
description: mod.description,
|
|
@@ -127,6 +135,10 @@ async function scanSkillsDir(dir, logger) {
|
|
|
127
135
|
if (parsed.name !== folder) {
|
|
128
136
|
logger.warn({ folder, frontmatterName: parsed.name }, "Skill frontmatter `name` differs from folder name — using folder name as command");
|
|
129
137
|
}
|
|
138
|
+
if (!isValidTelegramCommandName(folder)) {
|
|
139
|
+
logger.warn({ folder, skillMdPath }, "Invalid Telegram command name from skill folder — skipping");
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
130
142
|
skills.push({
|
|
131
143
|
command: folder,
|
|
132
144
|
description: parsed.description,
|
|
@@ -167,6 +179,9 @@ export async function loadCommands(projectCwd, configDir, logger, skillsDir) {
|
|
|
167
179
|
* Returns null if the skill doesn't exist or its SKILL.md can't be parsed.
|
|
168
180
|
*/
|
|
169
181
|
export async function resolveSkillEntry(commandName, skillsDir, logger) {
|
|
182
|
+
if (!isValidTelegramCommandName(commandName)) {
|
|
183
|
+
return null;
|
|
184
|
+
}
|
|
170
185
|
const skillMdPath = join(skillsDir, commandName, "SKILL.md");
|
|
171
186
|
if (!existsSync(skillMdPath)) {
|
|
172
187
|
return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/bot/commands/loader.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/bot/commands/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../../src/bot/handlers/document.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../../src/bot/handlers/document.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAGtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AA4CrD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,cAAc,IACzC,SAAS,OAAO,KAAG,OAAO,CAAC,IAAI,CAAC,CAmH/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";
|
|
@@ -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);
|
|
@@ -100,15 +98,15 @@ export function createDocumentHandler(ctx) {
|
|
|
100
98
|
}
|
|
101
99
|
};
|
|
102
100
|
const downloadsPath = getDownloadsPath(userDir);
|
|
103
|
-
logger.
|
|
104
|
-
const result = await
|
|
101
|
+
logger.info("Executing engine query with document");
|
|
102
|
+
const result = await ctx.engine.execute({ prompt, gramCtx, userDir, downloadsPath, sessionId, onProgress }, ctx);
|
|
105
103
|
try {
|
|
106
104
|
await gramCtx.api.deleteMessage(gramCtx.chat.id, statusMsg.message_id);
|
|
107
105
|
}
|
|
108
106
|
catch {
|
|
109
107
|
// Ignore delete errors
|
|
110
108
|
}
|
|
111
|
-
const parsed =
|
|
109
|
+
const parsed = ctx.engine.parse(result);
|
|
112
110
|
if (parsed.sessionId) {
|
|
113
111
|
await saveSessionId(userDir, parsed.sessionId);
|
|
114
112
|
}
|
|
@@ -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,CAqG/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);
|
|
@@ -59,15 +57,15 @@ export function createPhotoHandler(ctx) {
|
|
|
59
57
|
}
|
|
60
58
|
};
|
|
61
59
|
const downloadsPath = getDownloadsPath(userDir);
|
|
62
|
-
logger.
|
|
63
|
-
const result = await
|
|
60
|
+
logger.info("Executing engine query with image");
|
|
61
|
+
const result = await ctx.engine.execute({ prompt, gramCtx, userDir, downloadsPath, sessionId, onProgress }, ctx);
|
|
64
62
|
try {
|
|
65
63
|
await gramCtx.api.deleteMessage(gramCtx.chat.id, statusMsg.message_id);
|
|
66
64
|
}
|
|
67
65
|
catch {
|
|
68
66
|
// Ignore delete errors
|
|
69
67
|
}
|
|
70
|
-
const parsed =
|
|
68
|
+
const parsed = ctx.engine.parse(result);
|
|
71
69
|
if (parsed.sessionId) {
|
|
72
70
|
await saveSessionId(userDir, parsed.sessionId);
|
|
73
71
|
}
|
|
@@ -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,CA0O/C"}
|