@hybridaione/hybridclaw 0.9.7 → 0.9.8

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.
Files changed (135) hide show
  1. package/AGENTS.md +4 -0
  2. package/CHANGELOG.md +63 -0
  3. package/README.md +26 -9
  4. package/config.example.json +13 -2
  5. package/console/package.json +11 -11
  6. package/container/Dockerfile +4 -4
  7. package/container/package-lock.json +13 -13
  8. package/container/package.json +12 -12
  9. package/dist/agents/agent-install-source.d.ts +7 -0
  10. package/dist/agents/agent-install-source.d.ts.map +1 -0
  11. package/dist/agents/agent-install-source.js +198 -0
  12. package/dist/agents/agent-install-source.js.map +1 -0
  13. package/dist/agents/claw-archive.d.ts +6 -0
  14. package/dist/agents/claw-archive.d.ts.map +1 -1
  15. package/dist/agents/claw-archive.js +19 -6
  16. package/dist/agents/claw-archive.js.map +1 -1
  17. package/dist/channels/imessage/backend-bluebubbles.d.ts.map +1 -1
  18. package/dist/channels/imessage/backend-bluebubbles.js +17 -43
  19. package/dist/channels/imessage/backend-bluebubbles.js.map +1 -1
  20. package/dist/channels/msteams/runtime.d.ts.map +1 -1
  21. package/dist/channels/msteams/runtime.js +19 -23
  22. package/dist/channels/msteams/runtime.js.map +1 -1
  23. package/dist/channels/webhook-http.d.ts +20 -0
  24. package/dist/channels/webhook-http.d.ts.map +1 -0
  25. package/dist/channels/webhook-http.js +59 -0
  26. package/dist/channels/webhook-http.js.map +1 -0
  27. package/dist/cli/agent-command.d.ts.map +1 -1
  28. package/dist/cli/agent-command.js +15 -142
  29. package/dist/cli/agent-command.js.map +1 -1
  30. package/dist/cli/help.d.ts.map +1 -1
  31. package/dist/cli/help.js +9 -2
  32. package/dist/cli/help.js.map +1 -1
  33. package/dist/cli.d.ts.map +1 -1
  34. package/dist/cli.js +71 -3
  35. package/dist/cli.js.map +1 -1
  36. package/dist/command-registry.d.ts.map +1 -1
  37. package/dist/command-registry.js +207 -1
  38. package/dist/command-registry.js.map +1 -1
  39. package/dist/config/config.d.ts.map +1 -1
  40. package/dist/config/config.js +7 -2
  41. package/dist/config/config.js.map +1 -1
  42. package/dist/config/runtime-config-revisions.d.ts +34 -0
  43. package/dist/config/runtime-config-revisions.d.ts.map +1 -0
  44. package/dist/config/runtime-config-revisions.js +248 -0
  45. package/dist/config/runtime-config-revisions.js.map +1 -0
  46. package/dist/config/runtime-config.d.ts +22 -3
  47. package/dist/config/runtime-config.d.ts.map +1 -1
  48. package/dist/config/runtime-config.js +133 -21
  49. package/dist/config/runtime-config.js.map +1 -1
  50. package/dist/gateway/concierge-commands.d.ts +17 -0
  51. package/dist/gateway/concierge-commands.d.ts.map +1 -0
  52. package/dist/gateway/concierge-commands.js +87 -0
  53. package/dist/gateway/concierge-commands.js.map +1 -0
  54. package/dist/gateway/concierge-routing.d.ts +34 -0
  55. package/dist/gateway/concierge-routing.d.ts.map +1 -0
  56. package/dist/gateway/concierge-routing.js +176 -0
  57. package/dist/gateway/concierge-routing.js.map +1 -0
  58. package/dist/gateway/concierge-session.d.ts +32 -0
  59. package/dist/gateway/concierge-session.d.ts.map +1 -0
  60. package/dist/gateway/concierge-session.js +132 -0
  61. package/dist/gateway/concierge-session.js.map +1 -0
  62. package/dist/gateway/docs.d.ts.map +1 -1
  63. package/dist/gateway/docs.js +9 -3
  64. package/dist/gateway/docs.js.map +1 -1
  65. package/dist/gateway/gateway-http-server.d.ts.map +1 -1
  66. package/dist/gateway/gateway-http-server.js +17 -11
  67. package/dist/gateway/gateway-http-server.js.map +1 -1
  68. package/dist/gateway/gateway-plugin-service.d.ts +39 -0
  69. package/dist/gateway/gateway-plugin-service.d.ts.map +1 -0
  70. package/dist/gateway/gateway-plugin-service.js +445 -0
  71. package/dist/gateway/gateway-plugin-service.js.map +1 -0
  72. package/dist/gateway/gateway-service.d.ts +1 -31
  73. package/dist/gateway/gateway-service.d.ts.map +1 -1
  74. package/dist/gateway/gateway-service.js +288 -405
  75. package/dist/gateway/gateway-service.js.map +1 -1
  76. package/dist/gateway/gateway-types.d.ts +24 -1
  77. package/dist/gateway/gateway-types.d.ts.map +1 -1
  78. package/dist/gateway/gateway-types.js.map +1 -1
  79. package/dist/gateway/gateway.js +7 -3
  80. package/dist/gateway/gateway.js.map +1 -1
  81. package/dist/infra/container-setup.d.ts.map +1 -1
  82. package/dist/infra/container-setup.js +47 -19
  83. package/dist/infra/container-setup.js.map +1 -1
  84. package/dist/onboarding.js +1 -1
  85. package/dist/onboarding.js.map +1 -1
  86. package/dist/plugins/plugin-api.d.ts.map +1 -1
  87. package/dist/plugins/plugin-api.js +6 -0
  88. package/dist/plugins/plugin-api.js.map +1 -1
  89. package/dist/plugins/plugin-manager.d.ts +15 -1
  90. package/dist/plugins/plugin-manager.d.ts.map +1 -1
  91. package/dist/plugins/plugin-manager.js +93 -0
  92. package/dist/plugins/plugin-manager.js.map +1 -1
  93. package/dist/plugins/plugin-sdk.d.ts +4 -1
  94. package/dist/plugins/plugin-sdk.d.ts.map +1 -1
  95. package/dist/plugins/plugin-sdk.js +2 -1
  96. package/dist/plugins/plugin-sdk.js.map +1 -1
  97. package/dist/plugins/plugin-types.d.ts +42 -0
  98. package/dist/plugins/plugin-types.d.ts.map +1 -1
  99. package/dist/plugins/plugin-webhooks.d.ts +4 -0
  100. package/dist/plugins/plugin-webhooks.d.ts.map +1 -0
  101. package/dist/plugins/plugin-webhooks.js +18 -0
  102. package/dist/plugins/plugin-webhooks.js.map +1 -0
  103. package/dist/providers/hybridai-models.d.ts.map +1 -1
  104. package/dist/providers/hybridai-models.js +2 -0
  105. package/dist/providers/hybridai-models.js.map +1 -1
  106. package/dist/tui.d.ts.map +1 -1
  107. package/dist/tui.js +1 -0
  108. package/dist/tui.js.map +1 -1
  109. package/docs/404.html +6 -2
  110. package/docs/agents.html +24 -3
  111. package/docs/chat.html +27 -5
  112. package/docs/development/README.md +18 -18
  113. package/docs/development/agents.md +13 -15
  114. package/docs/development/extensibility/README.md +1 -1
  115. package/docs/development/extensibility/agent-packages.md +6 -1
  116. package/docs/development/extensibility/plugins.md +140 -0
  117. package/docs/development/guides/bundled-skills.md +2 -1
  118. package/docs/development/internals/README.md +0 -4
  119. package/docs/development/reference/README.md +1 -1
  120. package/docs/development/reference/commands.md +12 -8
  121. package/docs/development/reference/configuration.md +21 -2
  122. package/docs/docs/index.html +1 -1
  123. package/docs/index.html +23 -25
  124. package/docs/static/apple-touch-icon.png +0 -0
  125. package/docs/static/docs.css +7 -1
  126. package/docs/static/docs.js +13 -15
  127. package/docs/static/favicon-96x96.png +0 -0
  128. package/docs/static/favicon.ico +0 -0
  129. package/docs/static/favicon.svg +371 -170
  130. package/docs/static/hybridclaw-logo.svg +372 -0
  131. package/package.json +39 -39
  132. package/skills/sokosumi/SKILL.md +250 -0
  133. package/skills/sokosumi/agents/openai.yaml +5 -0
  134. package/docs/development/internals/releasing.md +0 -125
  135. package/docs/development/internals/testing.md +0 -79
package/AGENTS.md CHANGED
@@ -359,6 +359,10 @@ When the user says "bump release":
359
359
  - Do not modify unrelated modules "while here".
360
360
  - Do not include personal identity, real phone numbers, or live config values
361
361
  in tests, examples, docs, or commits.
362
+ - Do not edit `.dockerignore` without verifying the resulting Docker image
363
+ still contains all runtime-required files (especially `docs/development/`).
364
+ Build the image and confirm the affected paths exist inside it before
365
+ marking the change complete.
362
366
  - Do not edit `node_modules/` or vendored files.
363
367
  - Do not break prompt caching: do not alter past context, change toolsets, or
364
368
  rebuild system prompts mid-conversation.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,69 @@
2
2
 
3
3
  ## [Coming up]
4
4
 
5
+ ## [0.9.8](https://github.com/HybridAIOne/hybridclaw/tree/v0.9.8)
6
+
7
+ ### Added
8
+
9
+ - **Concierge routing controls**: Added a configurable concierge router that can
10
+ ask users about urgency before long-running work, plus `concierge info|on|off`,
11
+ `concierge model [name]`, and `concierge profile <asap|balanced|no_hurry> [model]`
12
+ across gateway, TUI, and slash-command surfaces.
13
+ - **Tracked runtime config revisions**: Added automatic revision snapshots for
14
+ `~/.hybridclaw/config.json`, persisted in `~/.hybridclaw/data/config-revisions.db`,
15
+ with `hybridclaw config revisions [list|rollback|delete|clear]` so operators can
16
+ audit and restore configuration changes.
17
+ - **Expanded agent install flows**: Added `agent install` support inside running
18
+ gateway/TUI sessions, direct `.claw` URL installs, `--skip-import-errors`,
19
+ and tighter handling for official and GitHub package sources.
20
+ - **Plugin inbound webhooks**: Added plugin-owned inbound webhook routes plus
21
+ `registerInboundWebhook(...)`, `dispatchInboundMessage(...)`, and HTTP helper
22
+ utilities in the plugin SDK so plugins can receive external events and route
23
+ them through the normal assistant turn pipeline.
24
+ - **Sokosumi bundled skill**: Added the first-party `sokosumi` skill for
25
+ API-key-authenticated agent hires, coworker task creation, job monitoring,
26
+ and result retrieval.
27
+
28
+ ### Changed
29
+
30
+ - **HybridAI default-model baseline**: Updated the shipped `hybridai`
31
+ provider default from `gpt-5-nano` to `gpt-4.1-mini`, reordered the
32
+ built-in HybridAI model list so onboarding and fresh configs pick that model
33
+ first, and added static capability metadata for `gpt-4.1-mini` without
34
+ changing other provider defaults or concierge profile mappings.
35
+ - **CI, smoke tests, and release checks**: Expanded integration and e2e
36
+ coverage for gateway docs, database/session flows, config reloads, skill
37
+ resolution, chat APIs, npm installs, Docker runtime checks, and agent
38
+ container flows, while tightening release-check and Docker preflight
39
+ coverage in CI.
40
+ - **Plugin service boundaries**: Extracted gateway plugin service plumbing into
41
+ clearer modules, tightened plugin service boundaries, and improved mock/test
42
+ coverage around plugin reload and webhook dispatch behavior.
43
+ - **Public docs and branding surfaces**: Refreshed the public docs shell with
44
+ the HybridClaw logo asset, updated favicon and fallback assets, simplified
45
+ navigation chrome, trimmed hidden internal docs, and refreshed release-facing
46
+ docs so the landing page, README, and manual reflect the shipped feature set.
47
+ - **Package and manifest handling**: Enabled exact npm saves for repo manifests
48
+ and pinned package manifests to their locked versions so release artifacts
49
+ stay aligned with the checked-in lockfiles.
50
+
51
+ ### Fixed
52
+
53
+ - **Gateway image docs coverage**: Fixed packaged gateway images so the repo
54
+ docs ship into runtime images instead of being dropped by `.dockerignore`.
55
+ - **Docs deep-link fallback**: Fixed static docs hosting so deep links under the
56
+ docs shell route through the fallback page instead of breaking on refresh.
57
+ - **Container setup reliability**: Fixed packaged installs so pull-only
58
+ container setup stays on the published runtime image path, and hardened agent
59
+ image apt cache locking during builds.
60
+ - **Agent install and plugin webhook edge cases**: Fixed agent install stream
61
+ typing, import cleanup, partial-failure reporting, and gateway resolution
62
+ errors, and tightened plugin webhook validation, error handling, and
63
+ dispatch.
64
+ - **Config revision robustness**: Fixed inferred revision route sanitization,
65
+ duplicate config reads during revision sync, summary loading behavior, and
66
+ watcher timer cleanup for tracked runtime config changes.
67
+
5
68
  ## [0.9.7](https://github.com/HybridAIOne/hybridclaw/tree/v0.9.7)
6
69
 
7
70
  ### Added
package/README.md CHANGED
@@ -22,8 +22,9 @@ Portable `.claw` packages can snapshot an agent workspace plus bundled skills
22
22
  and plugins for transfer or backup, and persistent browser profiles let the
23
23
  agent reuse authenticated web sessions for later browser automation.
24
24
  Local plugins can extend the gateway with typed manifests, plugin tools,
25
- memory layers, prompt hooks, and lifecycle hooks, including the installable
26
- QMD-backed memory layer shipped in `plugins/qmd-memory`.
25
+ memory layers, prompt hooks, lifecycle hooks, and fixed plugin-owned inbound
26
+ webhook routes, including the installable QMD-backed memory layer shipped in
27
+ `plugins/qmd-memory`.
27
28
  Web chat and TUI can attach current-turn files, and inline context references
28
29
  like `@file:src/app.ts`, `@diff`, or `@url:https://example.com/spec` can
29
30
  ground a turn without pasting raw content.
@@ -31,6 +32,9 @@ ground a turn without pasting raw content.
31
32
  Operators can also health-check the runtime with `hybridclaw doctor`, tune
32
33
  skill availability globally or per channel, and review adaptive skill health
33
34
  and amendment history from the CLI, TUI, or admin surfaces.
35
+ Concierge routing can ask about urgency before longer jobs and map execution
36
+ to profile-specific models, while tracked runtime config revisions make local
37
+ config changes auditable and reversible.
34
38
  For turn-level debugging, gateway start/restart can also persist best-effort
35
39
  redacted prompts, responses, and tool payloads with `--log-requests`.
36
40
 
@@ -45,7 +49,9 @@ Prerequisites: Node.js 22. Docker is recommended when you want the default
45
49
  container sandbox. The published install bootstraps the packaged container
46
50
  runtime dependencies during `npm install -g`.
47
51
  The current release tag is
48
- [v0.9.7](https://github.com/HybridAIOne/hybridclaw/releases/tag/v0.9.7).
52
+ [v0.9.8](https://github.com/HybridAIOne/hybridclaw/releases/tag/v0.9.8).
53
+ This release adds concierge routing, tracked config revisions, plugin inbound
54
+ webhooks, expanded agent install sources, and the bundled `sokosumi` skill.
49
55
  Release notes live in [CHANGELOG.md](./CHANGELOG.md), and the browsable
50
56
  operator and maintainer manual lives under
51
57
  [docs/development/README.md](./docs/development/README.md).
@@ -212,6 +218,10 @@ Examples:
212
218
  /agent model openrouter/anthropic/claude-sonnet-4
213
219
  /model info
214
220
  /model default openrouter/anthropic/claude-sonnet-4
221
+ /concierge info
222
+ /concierge on
223
+ /concierge model gemini-3-flash
224
+ /concierge profile no_hurry ollama/qwen3:latest
215
225
  ```
216
226
 
217
227
  - `hybridai.defaultModel` in `~/.hybridclaw/config.json` can point at a HybridAI model, an `openai-codex/...` model, an `openrouter/...` model, a `mistral/...` model, a `huggingface/...` model, or a local backend model such as `ollama/...`.
@@ -228,6 +238,9 @@ Examples:
228
238
  - `/model clear` removes the session override and falls back to the current agent model or the global default.
229
239
  - `/agent model <name>` sets the persistent model for the current session agent.
230
240
  - `/model info` shows the current model configuration by scope (global default, agent model, and any session override).
241
+ - `/concierge on|off` toggles the global concierge router that can ask users about urgency before long-running requests.
242
+ - `/concierge model [name]` shows or sets the small decision model used for concierge routing.
243
+ - `/concierge profile <asap|balanced|no_hurry> [model]` shows or sets the execution model mapped to each concierge urgency profile.
231
244
  - Use `HYBRIDAI_BASE_URL` to override `hybridai.baseUrl` for the current
232
245
  process without rewriting `~/.hybridclaw/config.json`, which is useful for
233
246
  local or preview HybridAI deployments.
@@ -356,9 +369,11 @@ hybridclaw agent activate demo-agent
356
369
  - `agent inspect` validates the manifest and prints archive metadata without
357
370
  extracting it.
358
371
  - `agent install` restores the agent, fills missing bootstrap files, and
359
- re-registers bundled content with the runtime from a local `.claw` file or a
360
- packaged GitHub source such as `official:<agent-dir>` or
361
- `github:owner/repo[/<ref>]/<agent-dir>`.
372
+ re-registers bundled content with the runtime from a local `.claw` file, a
373
+ direct `.claw` URL, or a packaged GitHub source such as `official:<agent-dir>`
374
+ or `github:owner/repo[/<ref>]/<agent-dir>`.
375
+ - `agent install --skip-import-errors` continues when a manifest-declared skill
376
+ import fails and prints retry commands for the skipped imports.
362
377
  - `.claw` manifests can include agent presentation metadata such as a
363
378
  `displayName` and workspace-relative profile image asset for web chat.
364
379
  - `agent activate <agent-id>` sets the default agent for new requests that do
@@ -481,7 +496,7 @@ such as `filesystem__read_file` or `github__list_issues`.
481
496
 
482
497
  ## Bundled Skills
483
498
 
484
- HybridClaw currently ships with 27 bundled skills. Notable workflow and app
499
+ HybridClaw currently ships with 30 bundled skills. Notable workflow and app
485
500
  integrations include:
486
501
 
487
502
  - `pdf` is bundled and supports text extraction, page rendering, fillable form inspection/filling, and non-fillable overlay workflows.
@@ -501,6 +516,7 @@ integrations include:
501
516
  - `google-workspace` is bundled for Gmail, Calendar, Drive, Docs, and Sheets setup guidance plus browser/API workflow coordination.
502
517
  - `1password` is bundled for secure `op`-based secret lookup and command injection workflows.
503
518
  - `stripe` is bundled for Stripe API, CLI, Dashboard, checkout, billing, and webhook-debugging workflows with a test-mode-first default.
519
+ - `sokosumi` is bundled for API-key-authenticated Sokosumi agent hires, coworker tasks, job monitoring, and result retrieval without relying on the Ink TUI.
504
520
  - `wordpress` is bundled for WP-CLI, wp-admin, and draft-first content publishing workflows on WordPress sites.
505
521
  - `apple-calendar` is bundled for Apple Calendar or iCal workflows, especially `.ics` drafting/import and macOS calendar coordination.
506
522
  - `apple-passwords` is bundled for Passwords.app and Keychain-backed credential lookup on macOS.
@@ -566,18 +582,19 @@ CLI runtime commands:
566
582
  - `hybridclaw gateway stop` — Stop managed gateway backend process
567
583
  - `hybridclaw gateway status` — Show lifecycle/API status
568
584
  - `hybridclaw gateway <command...>` — Send a command to a running gateway (for example `sessions`, `bot info`)
585
+ - `hybridclaw gateway concierge [info|on|off|model [name]|profile <asap|balanced|no_hurry> [model]]` — Inspect or configure concierge routing defaults
569
586
  - `hybridclaw gateway agent [list|switch <id>|create <id> [--model <model>]|model [name]]` — Inspect or change the current session-to-agent binding and persistent agent model
570
587
  - `hybridclaw gateway compact` — Archive older session history into semantic memory while preserving a recent active context tail
571
588
  - `hybridclaw gateway reset [yes|no]` — Clear session history, reset per-session model/chatbot/RAG settings, and remove the current agent workspace (confirmation required)
572
589
  - `hybridclaw agent list` — Show registered agents in a script-friendly tab-separated format
573
- - `hybridclaw agent export [agent-id] [-o <path>]`, `inspect <file.claw>`, `install <file.claw> [--id <id>]`, `uninstall <agent-id> [--yes]` — Manage portable `.claw` agent archives (legacy `pack` / `unpack` aliases still work)
590
+ - `hybridclaw agent export [agent-id] [-o <path>]`, `inspect <file.claw>`, `install <file.claw|https://.../*.claw|official:<agent-dir>|github:owner/repo[/<ref>]/<agent-dir>> [--id <id>] [--force] [--skip-skill-scan] [--skip-externals] [--skip-import-errors] [--yes]`, `uninstall <agent-id> [--yes]` — Manage portable `.claw` agent archives (legacy `pack` / `unpack` aliases still work)
574
591
  - `hybridclaw tui` — Start terminal client connected to gateway
575
592
  - `hybridclaw tui --resume <sessionId>` / `hybridclaw --resume <sessionId>` — Resume an earlier TUI session by canonical session id
576
593
  - `hybridclaw onboarding` — Run trust-model acceptance plus interactive provider onboarding
577
594
  - `hybridclaw auth login [provider] ...` — Namespaced provider setup/login entrypoint
578
595
  - `hybridclaw auth status <provider>` — Show provider status for `hybridai`, `codex`, `openrouter`, `mistral`, `huggingface`, `local`, or `msteams`
579
596
  - `hybridclaw auth logout <provider>` — Clear provider credentials or disable local backends/Teams
580
- - `hybridclaw config`, `check`, `reload`, `set <key> <value>` — Inspect, validate, hot-reload, or edit the local runtime config file
597
+ - `hybridclaw config`, `check`, `reload`, `set <key> <value>`, `revisions [list|rollback <id>|delete <id>|clear]` — Inspect, validate, hot-reload, edit, audit, or restore the local runtime config file
581
598
  - `hybridclaw auth login msteams [--app-id <id>] [--app-password <secret>] [--tenant-id <id>]` — Enable Microsoft Teams, persist the app secret, and print webhook next steps
582
599
  - `hybridclaw auth whatsapp reset` — Clear linked WhatsApp auth so the account can be re-paired cleanly
583
600
  - `hybridclaw channels discord setup [--token <token>] [--allow-user-id <snowflake>]... [--prefix <prefix>]` — Prepare restricted command-only Discord config and print bot/token next steps
@@ -167,11 +167,11 @@
167
167
  },
168
168
  "hybridai": {
169
169
  "baseUrl": "https://hybridai.one",
170
- "defaultModel": "gpt-5-nano",
170
+ "defaultModel": "gpt-4.1-mini",
171
171
  "defaultChatbotId": "",
172
172
  "maxTokens": 4096,
173
173
  "enableRag": true,
174
- "models": ["gpt-5-nano", "gpt-5-mini", "gpt-5"]
174
+ "models": ["gpt-4.1-mini", "gpt-5-nano", "gpt-5"]
175
175
  },
176
176
  "codex": {
177
177
  "baseUrl": "https://chatgpt.com/backend-api/codex",
@@ -331,6 +331,17 @@
331
331
  "models": []
332
332
  }
333
333
  },
334
+ "routing": {
335
+ "concierge": {
336
+ "enabled": false,
337
+ "model": "gemini-3-flash",
338
+ "profiles": {
339
+ "asap": "gpt-5",
340
+ "balanced": "gpt-5-mini",
341
+ "noHurry": "gpt-5-nano"
342
+ }
343
+ }
344
+ },
334
345
  "heartbeat": {
335
346
  "enabled": true,
336
347
  "intervalMs": 1800000,
@@ -9,18 +9,18 @@
9
9
  "typecheck": "tsc --noEmit"
10
10
  },
11
11
  "dependencies": {
12
- "@tanstack/react-query": "^5.90.21",
13
- "@tanstack/react-router": "^1.167.4",
14
- "@xterm/addon-fit": "^0.11.0",
15
- "react": "^19.2.4",
16
- "react-dom": "^19.2.4",
17
- "xterm": "^5.3.0"
12
+ "@tanstack/react-query": "5.90.21",
13
+ "@tanstack/react-router": "1.167.4",
14
+ "@xterm/addon-fit": "0.11.0",
15
+ "react": "19.2.4",
16
+ "react-dom": "19.2.4",
17
+ "xterm": "5.3.0"
18
18
  },
19
19
  "devDependencies": {
20
- "@types/react": "^19.2.14",
21
- "@types/react-dom": "^19.2.3",
22
- "@vitejs/plugin-react": "^5.2.0",
23
- "typescript": "^5.9.3",
24
- "vite": "^8.0.0"
20
+ "@types/react": "19.2.14",
21
+ "@types/react-dom": "19.2.3",
22
+ "@vitejs/plugin-react": "5.2.0",
23
+ "typescript": "5.9.3",
24
+ "vite": "8.0.0"
25
25
  }
26
26
  }
@@ -15,8 +15,8 @@ FROM node:22-slim@sha256:80fdb3f57c815e1b638d221f30a826823467c4a56c8f6a8d7aa091c
15
15
  LABEL org.opencontainers.image.source="https://github.com/HybridAIOne/hybridclaw"
16
16
  LABEL org.opencontainers.image.description="HybridClaw sandboxed agent runtime"
17
17
 
18
- RUN --mount=type=cache,target=/var/cache/apt \
19
- --mount=type=cache,target=/var/lib/apt/lists \
18
+ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
19
+ --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \
20
20
  apt-get update && apt-get install -y --no-install-recommends \
21
21
  ripgrep git curl python3 python3-pip poppler-utils qpdf pandoc
22
22
 
@@ -63,8 +63,8 @@ ENTRYPOINT ["node", "/app/dist/index.js"]
63
63
  FROM runtime-lite AS runtime
64
64
 
65
65
  USER root
66
- RUN --mount=type=cache,target=/var/cache/apt \
67
- --mount=type=cache,target=/var/lib/apt/lists \
66
+ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
67
+ --mount=type=cache,target=/var/lib/apt/lists,sharing=locked \
68
68
  apt-get update && apt-get install -y --no-install-recommends \
69
69
  libreoffice-calc libreoffice-impress libreoffice-writer
70
70
  USER node
@@ -1,28 +1,28 @@
1
1
  {
2
2
  "name": "hybridclaw-agent",
3
- "version": "0.9.7",
3
+ "version": "0.9.8",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "hybridclaw-agent",
9
- "version": "0.9.7",
9
+ "version": "0.9.8",
10
10
  "dependencies": {
11
- "@modelcontextprotocol/sdk": "^1.27.1",
12
- "@mozilla/readability": "^0.6.0",
13
- "agent-browser": "^0.15.1",
14
- "jszip": "^3.10.1",
15
- "linkedom": "^0.18.12",
16
- "pdf-lib": "^1.17.1",
17
- "pdfjs-dist": "^5.4.394",
18
- "playwright": "^1.58.2"
11
+ "@modelcontextprotocol/sdk": "1.27.1",
12
+ "@mozilla/readability": "0.6.0",
13
+ "agent-browser": "0.15.1",
14
+ "jszip": "3.10.1",
15
+ "linkedom": "0.18.12",
16
+ "pdf-lib": "1.17.1",
17
+ "pdfjs-dist": "5.5.207",
18
+ "playwright": "1.58.2"
19
19
  },
20
20
  "devDependencies": {
21
- "@types/node": "^22.10.0",
22
- "typescript": "^5.7.0"
21
+ "@types/node": "22.19.11",
22
+ "typescript": "5.9.3"
23
23
  },
24
24
  "optionalDependencies": {
25
- "@napi-rs/canvas": "^0.1.82"
25
+ "@napi-rs/canvas": "0.1.96"
26
26
  }
27
27
  },
28
28
  "node_modules/@appium/logger": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hybridclaw-agent",
3
- "version": "0.9.7",
3
+ "version": "0.9.8",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "files": [
@@ -17,21 +17,21 @@
17
17
  "publish:dry": "npm publish --dry-run"
18
18
  },
19
19
  "dependencies": {
20
- "@modelcontextprotocol/sdk": "^1.27.1",
21
- "@mozilla/readability": "^0.6.0",
22
- "agent-browser": "^0.15.1",
23
- "jszip": "^3.10.1",
24
- "linkedom": "^0.18.12",
25
- "pdf-lib": "^1.17.1",
26
- "pdfjs-dist": "^5.4.394",
27
- "playwright": "^1.58.2"
20
+ "@modelcontextprotocol/sdk": "1.27.1",
21
+ "@mozilla/readability": "0.6.0",
22
+ "agent-browser": "0.15.1",
23
+ "jszip": "3.10.1",
24
+ "linkedom": "0.18.12",
25
+ "pdf-lib": "1.17.1",
26
+ "pdfjs-dist": "5.5.207",
27
+ "playwright": "1.58.2"
28
28
  },
29
29
  "optionalDependencies": {
30
- "@napi-rs/canvas": "^0.1.82"
30
+ "@napi-rs/canvas": "0.1.96"
31
31
  },
32
32
  "devDependencies": {
33
- "@types/node": "^22.10.0",
34
- "typescript": "^5.7.0"
33
+ "@types/node": "22.19.11",
34
+ "typescript": "5.9.3"
35
35
  },
36
36
  "overrides": {
37
37
  "hono": "4.12.8",
@@ -0,0 +1,7 @@
1
+ export interface ResolvedInstallArchive {
2
+ archivePath: string;
3
+ cleanup?: () => void;
4
+ }
5
+ export declare function isLocalFilesystemInstallSource(rawArchivePath: string): boolean;
6
+ export declare function resolveInstallArchiveSource(rawArchivePath: string): Promise<ResolvedInstallArchive>;
7
+ //# sourceMappingURL=agent-install-source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-install-source.d.ts","sourceRoot":"","sources":["../../src/agents/agent-install-source.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AA8OD,wBAAgB,8BAA8B,CAC5C,cAAc,EAAE,MAAM,GACrB,OAAO,CAST;AAED,wBAAsB,2BAA2B,CAC/C,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,sBAAsB,CAAC,CAoBjC"}
@@ -0,0 +1,198 @@
1
+ import fs from 'node:fs';
2
+ import os from 'node:os';
3
+ import path from 'node:path';
4
+ import { Readable, Transform } from 'node:stream';
5
+ import { pipeline } from 'node:stream/promises';
6
+ import { CLAW_ARCHIVE_MAX_COMPRESSED_BYTES } from './claw-security.js';
7
+ const OFFICIAL_CLAWS_REPO = 'HybridAIOne/claws';
8
+ const OFFICIAL_CLAWS_REF = 'main';
9
+ function normalizeOfficialClawSelector(value, sourceLabel) {
10
+ const selector = value.trim();
11
+ if (!selector) {
12
+ throw new Error(`Missing agent selector for ${sourceLabel}.`);
13
+ }
14
+ if (selector.endsWith('.claw')) {
15
+ throw new Error(`${sourceLabel} must point to an agent directory, not a packaged .claw file.`);
16
+ }
17
+ return selector;
18
+ }
19
+ function githubApiHeaders(url) {
20
+ const headers = {};
21
+ if (!url.startsWith('https://api.github.com/')) {
22
+ return headers;
23
+ }
24
+ const token = process.env.GITHUB_TOKEN?.trim() || process.env.GH_TOKEN?.trim() || '';
25
+ if (token) {
26
+ headers.Authorization = `Bearer ${token}`;
27
+ }
28
+ return headers;
29
+ }
30
+ async function fetchJson(url) {
31
+ const response = await fetch(url, {
32
+ headers: githubApiHeaders(url),
33
+ });
34
+ if (!response.ok) {
35
+ throw new Error(`Request failed for ${url}: HTTP ${response.status}`);
36
+ }
37
+ return (await response.json());
38
+ }
39
+ async function downloadArchive(url) {
40
+ const response = await fetch(url, {
41
+ headers: githubApiHeaders(url),
42
+ });
43
+ if (!response.ok) {
44
+ throw new Error(`Request failed for ${url}: HTTP ${response.status}`);
45
+ }
46
+ const contentLengthHeader = response.headers.get('content-length');
47
+ const contentLength = Number.parseInt(contentLengthHeader || '', 10);
48
+ if (Number.isFinite(contentLength) &&
49
+ contentLength > CLAW_ARCHIVE_MAX_COMPRESSED_BYTES) {
50
+ throw new Error(`Archive download exceeds the ${CLAW_ARCHIVE_MAX_COMPRESSED_BYTES} byte limit.`);
51
+ }
52
+ if (!response.body) {
53
+ throw new Error(`Response body was empty for ${url}.`);
54
+ }
55
+ const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'hybridclaw-agent-install-'));
56
+ const fileName = path.basename(new URL(url).pathname).trim() || 'agent-package.claw';
57
+ const archivePath = path.join(tempDir, fileName);
58
+ let totalBytes = 0;
59
+ try {
60
+ await pipeline(Readable.fromWeb(response.body), new Transform({
61
+ transform(chunk, _encoding, callback) {
62
+ totalBytes += Buffer.byteLength(chunk);
63
+ if (totalBytes > CLAW_ARCHIVE_MAX_COMPRESSED_BYTES) {
64
+ callback(new Error(`Archive download exceeds the ${CLAW_ARCHIVE_MAX_COMPRESSED_BYTES} byte limit.`));
65
+ return;
66
+ }
67
+ callback(null, chunk);
68
+ },
69
+ }), fs.createWriteStream(archivePath, { mode: 0o644 }));
70
+ return {
71
+ archivePath,
72
+ cleanup: () => {
73
+ fs.rmSync(tempDir, { recursive: true, force: true });
74
+ },
75
+ };
76
+ }
77
+ catch (error) {
78
+ fs.rmSync(tempDir, { recursive: true, force: true });
79
+ throw error;
80
+ }
81
+ }
82
+ function parseOfficialClawsSource(rawValue) {
83
+ const raw = rawValue.trim();
84
+ if (!raw)
85
+ return null;
86
+ if (raw.startsWith('official:')) {
87
+ const selector = normalizeOfficialClawSelector(raw.slice('official:'.length), '`official:<agent-dir>` install source');
88
+ return {
89
+ repo: OFFICIAL_CLAWS_REPO,
90
+ ref: OFFICIAL_CLAWS_REF,
91
+ selector,
92
+ };
93
+ }
94
+ if (!raw.startsWith('github:')) {
95
+ return null;
96
+ }
97
+ const spec = raw.slice('github:'.length).trim();
98
+ const segments = spec.split('/').filter(Boolean);
99
+ if (segments.length !== 3 && segments.length !== 4) {
100
+ throw new Error('GitHub install source must look like `github:owner/repo/<agent-dir>` or `github:owner/repo/<ref>/<agent-dir>`.');
101
+ }
102
+ const repo = `${segments[0]}/${segments[1]}`;
103
+ if (segments.length === 3) {
104
+ return {
105
+ repo,
106
+ ref: OFFICIAL_CLAWS_REF,
107
+ selector: normalizeOfficialClawSelector(segments[2], '`github:owner/repo/<agent-dir>` install source'),
108
+ };
109
+ }
110
+ return {
111
+ repo,
112
+ ref: segments[2],
113
+ selector: normalizeOfficialClawSelector(segments[3], '`github:owner/repo/<ref>/<agent-dir>` install source'),
114
+ };
115
+ }
116
+ async function resolveOfficialClawDirName(repo, ref, selector) {
117
+ const normalizedSelector = selector.trim().replace(/\.claw$/i, '');
118
+ if (!normalizedSelector) {
119
+ throw new Error('Agent selector cannot be empty.');
120
+ }
121
+ const directories = await fetchJson(`https://api.github.com/repos/${repo}/contents/src?ref=${encodeURIComponent(ref)}`);
122
+ const directoryEntries = Array.isArray(directories) ? directories : [];
123
+ const dirNames = directoryEntries
124
+ .filter((entry) => entry.type === 'dir' && typeof entry.name === 'string')
125
+ .map((entry) => String(entry.name).trim())
126
+ .filter(Boolean);
127
+ if (dirNames.length === 0) {
128
+ throw new Error(`No packaged agent directories were found under ${repo}@${ref} src/. The repository contents may be empty or malformed.`);
129
+ }
130
+ if (dirNames.includes(normalizedSelector)) {
131
+ return normalizedSelector;
132
+ }
133
+ throw new Error(`Could not find packaged agent directory "${normalizedSelector}" in ${repo}@${ref}. Use the exact src directory name or an explicit dist/<file>.claw path.`);
134
+ }
135
+ function parseGitHubArchiveUrl(rawValue) {
136
+ const raw = rawValue.trim();
137
+ if (!/^https?:\/\//.test(raw))
138
+ return null;
139
+ const url = new URL(raw);
140
+ const pathname = url.pathname.replace(/^\/+/, '');
141
+ if (url.hostname === 'raw.githubusercontent.com' &&
142
+ pathname.endsWith('.claw')) {
143
+ return url.toString();
144
+ }
145
+ if (url.hostname === 'github.com' &&
146
+ pathname.includes('/blob/') &&
147
+ pathname.endsWith('.claw')) {
148
+ const segments = pathname.split('/').filter(Boolean);
149
+ if (segments.length >= 5 && segments[2] === 'blob') {
150
+ const repo = `${segments[0]}/${segments[1]}`;
151
+ const ref = segments[3];
152
+ const filePath = segments.slice(4).join('/');
153
+ return `https://raw.githubusercontent.com/${repo}/${encodeURIComponent(ref)}/${filePath}`;
154
+ }
155
+ }
156
+ return null;
157
+ }
158
+ function parseDirectArchiveUrl(rawValue) {
159
+ const raw = rawValue.trim();
160
+ if (!/^https?:\/\//.test(raw))
161
+ return null;
162
+ const githubUrl = parseGitHubArchiveUrl(raw);
163
+ if (githubUrl) {
164
+ return githubUrl;
165
+ }
166
+ const url = new URL(raw);
167
+ if (url.pathname.endsWith('.claw')) {
168
+ return url.toString();
169
+ }
170
+ throw new Error(`Install source URL must point to a .claw archive: ${url.toString()}`);
171
+ }
172
+ export function isLocalFilesystemInstallSource(rawArchivePath) {
173
+ const raw = rawArchivePath.trim();
174
+ if (!raw)
175
+ return false;
176
+ try {
177
+ if (parseDirectArchiveUrl(raw))
178
+ return false;
179
+ return parseOfficialClawsSource(raw) == null;
180
+ }
181
+ catch {
182
+ return false;
183
+ }
184
+ }
185
+ export async function resolveInstallArchiveSource(rawArchivePath) {
186
+ const directUrl = parseDirectArchiveUrl(rawArchivePath);
187
+ if (directUrl) {
188
+ return downloadArchive(directUrl);
189
+ }
190
+ const official = parseOfficialClawsSource(rawArchivePath);
191
+ if (!official) {
192
+ return { archivePath: path.resolve(rawArchivePath) };
193
+ }
194
+ const selector = official.selector.trim();
195
+ const dirName = await resolveOfficialClawDirName(official.repo, official.ref, selector);
196
+ return downloadArchive(`https://raw.githubusercontent.com/${official.repo}/${encodeURIComponent(official.ref)}/dist/${dirName}.claw`);
197
+ }
198
+ //# sourceMappingURL=agent-install-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-install-source.js","sourceRoot":"","sources":["../../src/agents/agent-install-source.ts"],"names":[],"mappings":"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"}
@@ -65,12 +65,17 @@ export interface UnpackAgentOptions {
65
65
  yes?: boolean;
66
66
  skipSkillScan?: boolean;
67
67
  skipExternals?: boolean;
68
+ skipImportErrors?: boolean;
68
69
  cwd?: string;
69
70
  homeDir?: string;
70
71
  tempRoot?: string;
71
72
  runCommand?: PluginInstallCommandRunner;
72
73
  confirm?: (inspection: ClawArchiveInspection) => Promise<boolean> | boolean;
73
74
  }
75
+ export interface FailedImportedSkillInstall {
76
+ source: string;
77
+ error: string;
78
+ }
74
79
  export interface UnpackAgentResult {
75
80
  archivePath: string;
76
81
  manifest: ClawManifest;
@@ -78,6 +83,7 @@ export interface UnpackAgentResult {
78
83
  workspacePath: string;
79
84
  bundledSkills: string[];
80
85
  importedSkills: SkillImportResult[];
86
+ failedImportedSkills?: FailedImportedSkillInstall[];
81
87
  installedPlugins: InstallPluginResult[];
82
88
  externalActions: string[];
83
89
  runtimeConfigChanged: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"claw-archive.d.ts","sourceRoot":"","sources":["../../src/agents/claw-archive.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claw-archive.d.ts","sourceRoot":"","sources":["../../src/agents/claw-archive.ts"],"names":[],"mappings":"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"}