@hybridaione/hybridclaw 0.1.24 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +63 -0
- package/README.md +83 -11
- package/config.example.json +10 -2
- package/container/package-lock.json +2 -2
- package/container/package.json +1 -1
- package/container/src/browser-tools.ts +1 -1
- package/container/src/index.ts +348 -10
- package/container/src/token-usage.ts +18 -2
- package/container/src/tools.ts +531 -1
- package/container/src/types.ts +30 -2
- package/dist/agent.d.ts +2 -2
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +2 -2
- package/dist/agent.js.map +1 -1
- package/dist/channels/discord/attachments.d.ts +9 -0
- package/dist/channels/discord/attachments.d.ts.map +1 -0
- package/dist/channels/discord/attachments.js +245 -0
- package/dist/channels/discord/attachments.js.map +1 -0
- package/dist/channels/discord/delivery.d.ts +31 -0
- package/dist/channels/discord/delivery.d.ts.map +1 -0
- package/dist/channels/discord/delivery.js +60 -0
- package/dist/channels/discord/delivery.js.map +1 -0
- package/dist/channels/discord/inbound.d.ts +20 -0
- package/dist/channels/discord/inbound.d.ts.map +1 -0
- package/dist/channels/discord/inbound.js +44 -0
- package/dist/channels/discord/inbound.js.map +1 -0
- package/dist/channels/discord/mentions.d.ts +14 -0
- package/dist/channels/discord/mentions.d.ts.map +1 -0
- package/dist/channels/discord/mentions.js +118 -0
- package/dist/channels/discord/mentions.js.map +1 -0
- package/dist/channels/discord/runtime.d.ts +22 -0
- package/dist/channels/discord/runtime.d.ts.map +1 -0
- package/dist/channels/discord/runtime.js +972 -0
- package/dist/channels/discord/runtime.js.map +1 -0
- package/dist/channels/discord/stream.d.ts +32 -0
- package/dist/channels/discord/stream.d.ts.map +1 -0
- package/dist/channels/discord/stream.js +196 -0
- package/dist/channels/discord/stream.js.map +1 -0
- package/dist/channels/discord/tool-actions.d.ts +31 -0
- package/dist/channels/discord/tool-actions.d.ts.map +1 -0
- package/dist/channels/discord/tool-actions.js +268 -0
- package/dist/channels/discord/tool-actions.js.map +1 -0
- package/dist/cli.js +15 -1
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +6 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +21 -2
- package/dist/config.js.map +1 -1
- package/dist/container-runner.d.ts +3 -2
- package/dist/container-runner.d.ts.map +1 -1
- package/dist/container-runner.js +28 -3
- package/dist/container-runner.js.map +1 -1
- package/dist/conversation.d.ts +2 -1
- package/dist/conversation.d.ts.map +1 -1
- package/dist/conversation.js +3 -2
- package/dist/conversation.js.map +1 -1
- package/dist/discord.basic.test.d.ts +2 -0
- package/dist/discord.basic.test.d.ts.map +1 -0
- package/dist/discord.basic.test.js +38 -0
- package/dist/discord.basic.test.js.map +1 -0
- package/dist/discord.d.ts +5 -23
- package/dist/discord.d.ts.map +1 -1
- package/dist/discord.js +3 -543
- package/dist/discord.js.map +1 -1
- package/dist/gateway-service.d.ts +7 -1
- package/dist/gateway-service.d.ts.map +1 -1
- package/dist/gateway-service.js +495 -62
- package/dist/gateway-service.js.map +1 -1
- package/dist/gateway-service.media-routing.test.d.ts +2 -0
- package/dist/gateway-service.media-routing.test.d.ts.map +1 -0
- package/dist/gateway-service.media-routing.test.js +29 -0
- package/dist/gateway-service.media-routing.test.js.map +1 -0
- package/dist/gateway-types.d.ts +8 -0
- package/dist/gateway-types.d.ts.map +1 -1
- package/dist/gateway-types.js.map +1 -1
- package/dist/gateway.js +7 -3
- package/dist/gateway.js.map +1 -1
- package/dist/git-commit.d.ts +2 -0
- package/dist/git-commit.d.ts.map +1 -0
- package/dist/git-commit.js +63 -0
- package/dist/git-commit.js.map +1 -0
- package/dist/health.d.ts.map +1 -1
- package/dist/health.js +37 -4
- package/dist/health.js.map +1 -1
- package/dist/heartbeat.d.ts.map +1 -1
- package/dist/heartbeat.js +3 -0
- package/dist/heartbeat.js.map +1 -1
- package/dist/onboarding.d.ts.map +1 -1
- package/dist/onboarding.js +1 -2
- package/dist/onboarding.js.map +1 -1
- package/dist/prompt-hooks.d.ts +9 -1
- package/dist/prompt-hooks.d.ts.map +1 -1
- package/dist/prompt-hooks.js +34 -1
- package/dist/prompt-hooks.js.map +1 -1
- package/dist/runtime-config.d.ts +9 -1
- package/dist/runtime-config.d.ts.map +1 -1
- package/dist/runtime-config.js +20 -214
- package/dist/runtime-config.js.map +1 -1
- package/dist/token-efficiency.basic.test.d.ts +2 -0
- package/dist/token-efficiency.basic.test.d.ts.map +1 -0
- package/dist/token-efficiency.basic.test.js +29 -0
- package/dist/token-efficiency.basic.test.js.map +1 -0
- package/dist/token-efficiency.d.ts.map +1 -1
- package/dist/token-efficiency.js +18 -1
- package/dist/token-efficiency.js.map +1 -1
- package/dist/tui.js +9 -0
- package/dist/tui.js.map +1 -1
- package/dist/types.d.ts +25 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/update.d.ts +3 -0
- package/dist/update.d.ts.map +1 -0
- package/dist/update.js +331 -0
- package/dist/update.js.map +1 -0
- package/docs/index.html +21 -1
- package/package.json +10 -2
- package/skills/personality/SKILL.md +108 -0
- package/skills/skill-creator/SKILL.md +232 -0
- package/skills/skill-creator/agents/openai.yaml +4 -0
- package/skills/skill-creator/license.txt +202 -0
- package/skills/skill-creator/references/openai_yaml.md +40 -0
- package/skills/skill-creator/references/output-patterns.md +119 -0
- package/skills/skill-creator/references/workflows.md +99 -0
- package/skills/skill-creator/scripts/generate_openai_yaml.py +271 -0
- package/skills/skill-creator/scripts/init_skill.py +238 -0
- package/skills/skill-creator/scripts/package_skill.py +161 -0
- package/skills/skill-creator/scripts/quick_validate.py +291 -0
- package/skills/skill-creator/scripts/test_package_skill.py +80 -0
- package/src/agent.ts +11 -1
- package/src/channels/discord/attachments.ts +282 -0
- package/src/channels/discord/delivery.ts +99 -0
- package/src/channels/discord/inbound.ts +72 -0
- package/src/channels/discord/mentions.ts +130 -0
- package/src/channels/discord/runtime.ts +1191 -0
- package/src/{discord-stream.ts → channels/discord/stream.ts} +2 -2
- package/src/channels/discord/tool-actions.ts +332 -0
- package/src/cli.ts +15 -1
- package/src/config.ts +22 -2
- package/src/container-runner.ts +44 -2
- package/src/conversation.ts +8 -1
- package/src/gateway-service.ts +543 -61
- package/src/gateway-types.ts +8 -0
- package/src/gateway.ts +11 -5
- package/src/health.ts +42 -4
- package/src/heartbeat.ts +3 -0
- package/src/onboarding.ts +1 -2
- package/src/prompt-hooks.ts +47 -2
- package/src/runtime-config.ts +44 -194
- package/src/token-efficiency.ts +17 -1
- package/src/tui.ts +8 -0
- package/src/types.ts +29 -1
- package/src/update.ts +389 -0
- package/templates/AGENTS.md +19 -0
- package/tests/discord.basic.test.ts +43 -0
- package/tests/gateway-service.media-routing.test.ts +33 -0
- package/tests/token-efficiency.basic.test.ts +32 -0
- package/vitest.e2e.config.ts +15 -0
- package/vitest.integration.config.ts +15 -0
- package/vitest.live.config.ts +16 -0
- package/vitest.unit.config.ts +15 -0
- package/src/discord.ts +0 -653
package/CHANGELOG.md
CHANGED
|
@@ -8,6 +8,69 @@
|
|
|
8
8
|
|
|
9
9
|
### Fixed
|
|
10
10
|
|
|
11
|
+
## [0.2.2](https://github.com/HybridAIOne/hybridclaw/tree/v0.2.2)
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
- **Discord image attachment ingest/cache**: Added receive-time image ingest with local cache under `data/discord-media-cache`, preserving attachment order and carrying `path`, `mimeType`, `sizeBytes`, and `originalUrl` per media item.
|
|
16
|
+
- **Structured media context pipeline**: Added typed media payload (`MediaPaths`/`MediaUrls`/`MediaTypes` equivalents) from Discord runtime through gateway/container request boundaries.
|
|
17
|
+
- **Attachment vision tools**: Added `vision_analyze` (and `image` alias) for Discord-uploaded image analysis using local cached paths first, with Discord CDN URL fallback.
|
|
18
|
+
- **Native multimodal injection**: Added direct image-part injection for vision-capable models, with automatic retry without image parts if the model rejects multimodal payloads.
|
|
19
|
+
- **Scoped Vitest test configs**: Added dedicated `vitest.{unit,integration,e2e,live}.config.ts` files and matching npm scripts (`test:unit`, `test:integration`, `test:e2e`, `test:live`, `test:watch`) for explicit suite boundaries.
|
|
20
|
+
|
|
21
|
+
### Changed
|
|
22
|
+
|
|
23
|
+
- **Discord channel module layout**: Completed migration of Discord runtime internals into `src/channels/discord/*`, including `runtime.ts` and `stream.ts`, and removed legacy root-level `src/discord.ts` shim.
|
|
24
|
+
- **Image-question tool routing**: Discord image questions now prioritize attachment vision (`vision_analyze`) and block `browser_vision` unless the user explicitly asks about the active browser tab/page.
|
|
25
|
+
- **Browser vision scope guidance**: Updated `browser_vision` tool description to clarify it is for browser-page tasks only, not Discord-uploaded files.
|
|
26
|
+
- **Test runner strategy**: Switched from compiled test artifacts (`dist-tests` + `tsconfig.tests.json`) to direct TypeScript execution via Vitest.
|
|
27
|
+
- **Test file location and conventions**: Moved basic test files from `src/*.test.ts` to `tests/` and aligned naming/scoping conventions for unit/integration/e2e/live suites.
|
|
28
|
+
|
|
29
|
+
### Fixed
|
|
30
|
+
|
|
31
|
+
- **Discord image analysis fallback behavior**: Added safer cache/CDN fallback handling and guardrails (Discord CDN allowlist, size/type limits, per-image success/failure logging) to avoid brittle image-analysis failures.
|
|
32
|
+
- **Regression coverage for wrong vision tool selection**: Added basic regression test coverage that Discord image questions should not route to browser screenshot vision.
|
|
33
|
+
|
|
34
|
+
## [0.2.1](https://github.com/HybridAIOne/hybridclaw/tree/v0.2.1)
|
|
35
|
+
|
|
36
|
+
### Added
|
|
37
|
+
|
|
38
|
+
- **Discord `message` tool actions**: Added OpenClaw-style `message` tool support in the container with `read`, `member-info`, and `channel-info` actions, routed via the gateway API.
|
|
39
|
+
- **Gateway Discord action endpoint**: Added `POST /api/discord/action` to execute Discord context actions for tools and automated runs.
|
|
40
|
+
|
|
41
|
+
### Changed
|
|
42
|
+
|
|
43
|
+
- **Discord presence handling**: Switched from prompt-injected presence snapshots to cache-backed presence data returned by `member-info` (`status` + `activities`) when available.
|
|
44
|
+
- **Discord context guidance**: Updated safety prompt policy to explicitly route recap/member lookup questions through `message` tool actions instead of guessing.
|
|
45
|
+
- **Tool allowlists**: Enabled `message` in heartbeat and base subagent allowed tool sets for delegated and automated workflows.
|
|
46
|
+
- **Container gateway auth context**: Container input now carries gateway base URL/token and maps loopback hosts to `host.docker.internal` for in-container API reachability.
|
|
47
|
+
- **Gateway token fallback**: Runtime now generates an internal gateway API token when no explicit token is configured, while preserving env/config overrides.
|
|
48
|
+
|
|
49
|
+
### Fixed
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
## [0.2.0](https://github.com/HybridAIOne/hybridclaw/tree/v0.2.0)
|
|
53
|
+
|
|
54
|
+
### Added
|
|
55
|
+
|
|
56
|
+
- **Personality switcher skill**: Added `skills/personality/SKILL.md` with `/personality` command workflow (`list`, `set`, `reset`) and a 25-profile persona set (including expert, style, and role personas like `pirate`, `noir`, `german`, `coach`, `doctor`, `soldier`, and `lawyer`).
|
|
57
|
+
- **Ralph loop runtime mode**: Added configurable autonomous iteration (`proactive.ralph.maxIterations`) in the container tool loop. When enabled, turns continue automatically until the model emits `<choice>STOP</choice>` (or the configured loop budget is reached).
|
|
58
|
+
- **Ralph command controls**: Added gateway/TUI command support for `ralph on|off|set <n>|info`, with immediate current-session container restart to apply loop settings without waiting for idle recycle.
|
|
59
|
+
- **Skill creator authoring toolkit**: Added bundled `skills/skill-creator/` (invocable skill, references, and helper scripts) for initializing, validating, packaging, and generating `agents/openai.yaml` metadata for new skills.
|
|
60
|
+
- **Discord context enrichment pipeline**: Added pending guild-history context, participant alias memory, `@name` mention-to-ID rewrite support, and optional per-channel presence snapshots for better grounded Discord replies.
|
|
61
|
+
|
|
62
|
+
### Changed
|
|
63
|
+
|
|
64
|
+
- **Personality persistence contract**: Standardized the managed `SOUL.md` personality block to `Name`, `Definition`, and `Rules`, so active persona behavior is fully file-driven.
|
|
65
|
+
- **Personality style policy**: Updated persona rules so style signals are explicitly visible for the active personality (instead of only a subset).
|
|
66
|
+
- **Personality skill prompt mode**: Set personality switching to command-only behavior (`always: false`, `disable-model-invocation: true`) to avoid per-turn prompt overhead while keeping `/personality` invocations available.
|
|
67
|
+
- **Workspace AGENTS template behavior**: Updated `templates/AGENTS.md` group-chat guidance with explicit "Quality > quantity" speaking rules and emoji-reaction social-signal policy (`React Like a Human`, one reaction per message).
|
|
68
|
+
- **Runtime self-awareness hook**: Prompt assembly now always injects runtime metadata (`version`, UTC date, model/default model, chatbot/channel/guild IDs, node/OS/host/workspace) and keeps it active in `minimal` mode.
|
|
69
|
+
- **Discord runtime controls**: Added and hot-wired `discord.{guildMembersIntent,presenceIntent,respondToAllMessages,commandsOnly,commandUserId}` config behavior for intent selection, trigger policy, and command-user authorization.
|
|
70
|
+
- **Gateway status reporting**: `status` command output now includes the running HybridClaw version line.
|
|
71
|
+
|
|
72
|
+
### Fixed
|
|
73
|
+
|
|
11
74
|
## [0.1.24](https://github.com/HybridAIOne/hybridclaw/tree/v0.1.24)
|
|
12
75
|
|
|
13
76
|
### Added
|
package/README.md
CHANGED
|
@@ -11,7 +11,17 @@ npm install -g @hybridaione/hybridclaw
|
|
|
11
11
|
hybridclaw onboarding
|
|
12
12
|
```
|
|
13
13
|
|
|
14
|
-
Latest release: [v0.
|
|
14
|
+
Latest release: [v0.2.2](https://github.com/HybridAIOne/hybridclaw/releases/tag/v0.2.2)
|
|
15
|
+
|
|
16
|
+
## What's new in v0.2.2
|
|
17
|
+
|
|
18
|
+
- Added Discord attachment ingest/cache with structured media context (`path`, `mime`, `size`, `original_url`) passed into the agent pipeline
|
|
19
|
+
- Added `vision_analyze`/`image` tools for Discord-uploaded image analysis (local cached path first, Discord CDN fallback)
|
|
20
|
+
- Added native model vision image-part injection for vision-capable models, with safe fallback if multimodal input is rejected
|
|
21
|
+
- Routed Discord image questions away from `browser_vision` (unless explicitly about the active browser tab/page)
|
|
22
|
+
- Completed Discord runtime migration into `src/channels/discord/*` and removed the legacy root-level `src/discord.ts` shim
|
|
23
|
+
- Switched tests from compiled `dist-tests` artifacts to direct TypeScript execution via Vitest
|
|
24
|
+
- Moved basic tests to `tests/` with explicit scope naming conventions
|
|
15
25
|
|
|
16
26
|
## HybridAI Advantage
|
|
17
27
|
|
|
@@ -79,6 +89,7 @@ HybridClaw best-in-class capabilities:
|
|
|
79
89
|
- formal prompt hook orchestration (`bootstrap`, `memory`, `safety`)
|
|
80
90
|
- Discord conversational UX: edit-in-place streaming responses, fence-safe chunking beyond Discord's 2000-char limit, typing keepalive, debounce batching, reply-chain-aware context, and concise attachment-first screenshot replies
|
|
81
91
|
- token-efficient context assembly: per-message history truncation, hard history budgets with head/tail preservation, and head/tail truncation for oversized bootstrap files
|
|
92
|
+
- runtime self-awareness in prompts: exact HybridClaw version/date, model, and runtime host metadata injected each turn for reliable "what version/model are you?" answers
|
|
82
93
|
- proactive runtime layer with active-hours gating, push delegation (`single`/`parallel`/`chain`), depth-aware tool policy, and retry controls
|
|
83
94
|
- structured audit trail: append-only hash-chained wire logs (`data/audit/<session>/wire.jsonl`) with tamper-evident immutability, normalized SQLite audit tables, and verification/search CLI commands
|
|
84
95
|
- observability export: incremental `events:batch` forwarding with durable cursor tracking and bot-scoped ingest token lifecycle via `ingest-token:ensure`
|
|
@@ -92,11 +103,18 @@ HybridClaw uses typed runtime config in `config.json` (auto-created on first run
|
|
|
92
103
|
|
|
93
104
|
- Start from `config.example.json` (reference)
|
|
94
105
|
- Runtime watches `config.json` and hot-reloads most settings (model defaults, heartbeat, prompt hooks, limits, etc.)
|
|
106
|
+
- `discord.guildMembersIntent` enables richer guild member context and better `@name` mention resolution in replies (requires enabling **Server Members Intent** in Discord Developer Portal)
|
|
107
|
+
- `discord.presenceIntent` enables Discord presence events (requires enabling **Presence Intent** in Discord Developer Portal)
|
|
108
|
+
- `discord.respondToAllMessages` changes guild trigger behavior: `false` (default) replies only on mention/`!claw`; `true` replies to every user message in the channel
|
|
109
|
+
- `discord.commandUserId` restricts `!claw <command>` admin commands to a single Discord user ID (all other messages still use normal chat handling)
|
|
110
|
+
- `discord.commandsOnly` optional hard mode: if `true`, the bot ignores non-`!claw` messages and only accepts prefixed commands (optionally limited by `discord.commandUserId`)
|
|
95
111
|
- `skills.extraDirs` adds additional enterprise/shared skill roots (lowest precedence tier)
|
|
96
|
-
- `proactive.*` controls autonomous behavior (`activeHours`, `delegation`, `autoRetry`)
|
|
112
|
+
- `proactive.*` controls autonomous behavior (`activeHours`, `delegation`, `autoRetry`, `ralph`)
|
|
113
|
+
- `proactive.ralph.maxIterations` enables Ralph loop (`0` off, `-1` unlimited, `>0` extra autonomous iterations before forcing completion)
|
|
114
|
+
- TUI/Gateway command: `ralph on|off|set <n>|info` (`0` off, `-1` unlimited, `1-64` extra iterations)
|
|
97
115
|
- `observability.*` controls push ingest into HybridAI (`events:batch` endpoint, batching, identity metadata)
|
|
98
116
|
- Some settings require restart to fully apply (for example HTTP bind host/port)
|
|
99
|
-
- Default bot is configured via `hybridai.defaultChatbotId` in `config.json`
|
|
117
|
+
- Default bot is configured via `hybridai.defaultChatbotId` in `config.json`
|
|
100
118
|
|
|
101
119
|
Secrets remain in `.env`:
|
|
102
120
|
|
|
@@ -258,6 +276,29 @@ Explicit invocation is supported via:
|
|
|
258
276
|
Example skill in this repo:
|
|
259
277
|
|
|
260
278
|
- `skills/repo-orientation/SKILL.md`
|
|
279
|
+
- `skills/current-time/SKILL.md`
|
|
280
|
+
- `skills/personality/SKILL.md`
|
|
281
|
+
- `skills/skill-creator/SKILL.md`
|
|
282
|
+
|
|
283
|
+
### Personality switching skill
|
|
284
|
+
|
|
285
|
+
HybridClaw includes a command-only personality skill that updates the active persona contract in `SOUL.md`.
|
|
286
|
+
|
|
287
|
+
- List current/available persona: `/personality` (or `/personality list`)
|
|
288
|
+
- Activate persona: `/personality <name>`
|
|
289
|
+
- Reset to default persona: `/personality reset`
|
|
290
|
+
|
|
291
|
+
The skill writes/updates a managed block in `SOUL.md`:
|
|
292
|
+
|
|
293
|
+
- `## Active personality`
|
|
294
|
+
- `Name: ...`
|
|
295
|
+
- `Definition: ...` (copied from the selected profile in `skills/personality/SKILL.md`)
|
|
296
|
+
- `Rules: ...` (runtime style/behavior constraints)
|
|
297
|
+
|
|
298
|
+
Notes:
|
|
299
|
+
|
|
300
|
+
- The personality skill is intentionally command-only (`always: false`, `disable-model-invocation: true`) to avoid adding per-turn prompt overhead.
|
|
301
|
+
- Profiles are defined in `skills/personality/SKILL.md` and currently include 25 switchable personas (expert, style, and role personas).
|
|
261
302
|
|
|
262
303
|
## Agent tools
|
|
263
304
|
|
|
@@ -310,6 +351,34 @@ System prompt assembly is handled by a formal hook pipeline:
|
|
|
310
351
|
|
|
311
352
|
Hook toggles live in `config.json` under `promptHooks`.
|
|
312
353
|
|
|
354
|
+
## Testing
|
|
355
|
+
|
|
356
|
+
Run checks locally:
|
|
357
|
+
|
|
358
|
+
```bash
|
|
359
|
+
# Typecheck only (no emit)
|
|
360
|
+
npm run typecheck
|
|
361
|
+
|
|
362
|
+
# Strict TS lint gate (unused locals/params)
|
|
363
|
+
npm run lint
|
|
364
|
+
|
|
365
|
+
# Unit tests (default `npm test`)
|
|
366
|
+
npm run test:unit
|
|
367
|
+
|
|
368
|
+
# Scoped suites (ready for dedicated tests)
|
|
369
|
+
npm run test:integration
|
|
370
|
+
npm run test:e2e
|
|
371
|
+
npm run test:live
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
Test layout and scopes:
|
|
375
|
+
|
|
376
|
+
- tests live under `tests/` (not `src/`)
|
|
377
|
+
- unit tests: `tests/**/*.test.ts` (excluding `*.integration|*.e2e|*.live`)
|
|
378
|
+
- integration tests: `tests/**/*.integration.test.ts`
|
|
379
|
+
- e2e tests: `tests/**/*.e2e.test.ts`
|
|
380
|
+
- live tests: `tests/**/*.live.test.ts`
|
|
381
|
+
|
|
313
382
|
## Commands
|
|
314
383
|
|
|
315
384
|
CLI runtime commands:
|
|
@@ -321,6 +390,7 @@ CLI runtime commands:
|
|
|
321
390
|
- `hybridclaw gateway <command...>` — Send a command to a running gateway (for example `sessions`, `bot info`)
|
|
322
391
|
- `hybridclaw tui` — Start terminal client connected to gateway
|
|
323
392
|
- `hybridclaw onboarding` — Run HybridAI account/API key onboarding
|
|
393
|
+
- `hybridclaw update [status|--check] [--yes]` — Check for updates and upgrade global npm installs (source checkouts get git-based update instructions)
|
|
324
394
|
- `hybridclaw audit ...` — Verify and inspect structured audit trail (`recent`, `search`, `approvals`, `verify`, `instructions`)
|
|
325
395
|
|
|
326
396
|
In Discord, use `!claw help` to see all commands. Key ones:
|
|
@@ -339,12 +409,14 @@ In Discord, use `!claw help` to see all commands. Key ones:
|
|
|
339
409
|
## Project structure
|
|
340
410
|
|
|
341
411
|
```
|
|
342
|
-
src/gateway.ts
|
|
343
|
-
src/tui.ts
|
|
344
|
-
src/discord.ts
|
|
345
|
-
src/
|
|
346
|
-
src/gateway-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
412
|
+
src/gateway.ts Core runtime entrypoint (DB, scheduler, heartbeat, HTTP API)
|
|
413
|
+
src/tui.ts Terminal adapter (thin client to gateway)
|
|
414
|
+
src/channels/discord/runtime.ts Discord runtime integration and message transport
|
|
415
|
+
src/channels/discord/*.ts Discord responsibility modules (inbound, delivery, mentions, attachments, tools, stream)
|
|
416
|
+
src/gateway-service.ts Core shared agent/session logic used by gateway API
|
|
417
|
+
src/gateway-client.ts HTTP client used by thin clients (e.g. TUI)
|
|
418
|
+
tests/ Vitest suites (unit/integration/e2e/live scopes)
|
|
419
|
+
container/src/ Agent code (tools, HybridAI client, IPC)
|
|
420
|
+
templates/ Workspace bootstrap files
|
|
421
|
+
data/ Runtime data (gitignored): SQLite DB, sessions, agent workspaces
|
|
350
422
|
```
|
package/config.example.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version":
|
|
2
|
+
"version": 3,
|
|
3
3
|
"security": {
|
|
4
4
|
"trustModelAccepted": false,
|
|
5
5
|
"trustModelAcceptedAt": "",
|
|
@@ -10,7 +10,12 @@
|
|
|
10
10
|
"extraDirs": []
|
|
11
11
|
},
|
|
12
12
|
"discord": {
|
|
13
|
-
"prefix": "!claw"
|
|
13
|
+
"prefix": "!claw",
|
|
14
|
+
"guildMembersIntent": false,
|
|
15
|
+
"presenceIntent": false,
|
|
16
|
+
"respondToAllMessages": false,
|
|
17
|
+
"commandsOnly": false,
|
|
18
|
+
"commandUserId": ""
|
|
14
19
|
},
|
|
15
20
|
"hybridai": {
|
|
16
21
|
"baseUrl": "https://hybridai.one",
|
|
@@ -94,6 +99,9 @@
|
|
|
94
99
|
"maxAttempts": 3,
|
|
95
100
|
"baseDelayMs": 2000,
|
|
96
101
|
"maxDelayMs": 8000
|
|
102
|
+
},
|
|
103
|
+
"ralph": {
|
|
104
|
+
"maxIterations": 0
|
|
97
105
|
}
|
|
98
106
|
}
|
|
99
107
|
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hybridclaw-agent",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "hybridclaw-agent",
|
|
9
|
-
"version": "0.
|
|
9
|
+
"version": "0.2.2",
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"@mozilla/readability": "^0.6.0",
|
|
12
12
|
"agent-browser": "^0.15.1",
|
package/container/package.json
CHANGED
|
@@ -1199,7 +1199,7 @@ export const BROWSER_TOOL_DEFINITIONS: ToolDefinition[] = [
|
|
|
1199
1199
|
function: {
|
|
1200
1200
|
name: 'browser_vision',
|
|
1201
1201
|
description:
|
|
1202
|
-
'Capture
|
|
1202
|
+
'Capture the current browser page screenshot and analyze it with a vision model. Use only for active browser-tab/page tasks, not for Discord-uploaded files.',
|
|
1203
1203
|
parameters: {
|
|
1204
1204
|
type: 'object',
|
|
1205
1205
|
properties: {
|