Peter Steinberger
f9108120c2
fix(gateway): strip inline directive tags from displayed text
2026-02-21 20:08:55 +01:00
Onur
8178ea472d
feat: thread-bound subagents on Discord ( #21805 )
...
* docs: thread-bound subagents plan
* docs: add exact thread-bound subagent implementation touchpoints
* Docs: prioritize auto thread-bound subagent flow
* Docs: add ACP harness thread-binding extensions
* Discord: add thread-bound session routing and auto-bind spawn flow
* Subagents: add focus commands and ACP/session binding lifecycle hooks
* Tests: cover thread bindings, focus commands, and ACP unbind hooks
* Docs: add plugin-hook appendix for thread-bound subagents
* Plugins: add subagent lifecycle hook events
* Core: emit subagent lifecycle hooks and decouple Discord bindings
* Discord: handle subagent bind lifecycle via plugin hooks
* Subagents: unify completion finalizer and split registry modules
* Add subagent lifecycle events module
* Hooks: fix subagent ended context key
* Discord: share thread bindings across ESM and Jiti
* Subagents: add persistent sessions_spawn mode for thread-bound sessions
* Subagents: clarify thread intro and persistent completion copy
* test(subagents): stabilize sessions_spawn lifecycle cleanup assertions
* Discord: add thread-bound session TTL with auto-unfocus
* Subagents: fail session spawns when thread bind fails
* Subagents: cover thread session failure cleanup paths
* Session: add thread binding TTL config and /session ttl controls
* Tests: align discord reaction expectations
* Agent: persist sessionFile for keyed subagent sessions
* Discord: normalize imports after conflict resolution
* Sessions: centralize sessionFile resolve/persist helper
* Discord: harden thread-bound subagent session routing
* Rebase: resolve upstream/main conflicts
* Subagents: move thread binding into hooks and split bindings modules
* Docs: add channel-agnostic subagent routing hook plan
* Agents: decouple subagent routing from Discord
* Discord: refactor thread-bound subagent flows
* Subagents: prevent duplicate end hooks and orphaned failed sessions
* Refactor: split subagent command and provider phases
* Subagents: honor hook delivery target overrides
* Discord: add thread binding kill switches and refresh plan doc
* Discord: fix thread bind channel resolution
* Routing: centralize account id normalization
* Discord: clean up thread bindings on startup failures
* Discord: add startup cleanup regression tests
* Docs: add long-term thread-bound subagent architecture
* Docs: split session binding plan and dedupe thread-bound doc
* Subagents: add channel-agnostic session binding routing
* Subagents: stabilize announce completion routing tests
* Subagents: cover multi-bound completion routing
* Subagents: suppress lifecycle hooks on failed thread bind
* tests: fix discord provider mock typing regressions
* docs/protocol: sync slash command aliases and delete param models
* fix: add changelog entry for Discord thread-bound subagents (#21805 ) (thanks @onutc)
---------
Co-authored-by: Shadow <hi@shadowing.dev >
2026-02-21 16:14:55 +01:00
Peter Steinberger
a1cb700a05
test: dedupe and optimize test suites
2026-02-19 15:19:38 +00:00
Peter Steinberger
742fb90571
test(queue): cover collect drain helper states
2026-02-19 07:01:54 +00:00
Peter Steinberger
b22deada9e
refactor(queue): reuse collect-mode item drain flow
2026-02-19 07:01:54 +00:00
Peter Steinberger
8d048d412f
refactor(queue): share next-item drain helper across queue drains
2026-02-19 06:43:36 +00:00
Peter Steinberger
1aa4d3a6f0
refactor(queue): share runtime settings and summary helpers
2026-02-18 18:25:25 +00:00
Peter Steinberger
5d81c3ead6
perf(test): remove timer sleeps from concurrency test
2026-02-18 17:43:06 +00:00
Peter Steinberger
288015a9fc
refactor(auth): share api key masking utility
2026-02-18 17:13:35 +00:00
Peter Steinberger
82cb185881
refactor(core): unify bounded concurrency runner
2026-02-18 16:48:35 +00:00
cpojer
ed75d30ad3
chore: Fix types in tests 34/N.
2026-02-17 15:50:07 +09:00
cpojer
97c8f4999e
chore: Fix types in tests 27/N.
2026-02-17 14:31:55 +09:00
Peter Steinberger
19f53543d2
refactor(utils): share chunkItems helper
2026-02-16 01:52:30 +00:00
Peter Steinberger
32221e194a
refactor(probe): share withTimeout
2026-02-16 00:39:11 +00:00
Peter Steinberger
55fd88e967
perf(test): consolidate utils parsing helpers
2026-02-16 00:18:27 +00:00
Peter Steinberger
d82c5ea9d1
refactor(utils): share safe json stringify
2026-02-14 15:39:46 +00:00
Peter Steinberger
e1e05e57cb
refactor(utils): share shell argv tokenizer
2026-02-14 15:39:46 +00:00
Peter Steinberger
81361755b7
refactor(reactions): share reaction level resolver
2026-02-14 15:39:45 +00:00
Peter Steinberger
7d3e5788e8
fix: stop enforcing <final> for ollama ( #16191 ) (thanks @Glucksberg)
2026-02-14 14:21:34 +01:00
Glucksberg
74193ff754
fix(ollama): remove Ollama from isReasoningTagProvider ( #2279 )
...
Ollama's OpenAI-compatible endpoint handles reasoning natively via the
`reasoning` field in streaming chunks. Treating Ollama as a
reasoning-tag provider incorrectly forces <think>/<final> tag
enforcement, which causes stripBlockTags() to discard all output
(since Ollama models don't emit <final> tags), resulting in
'(no output)' for every Ollama model.
This fix removes 'ollama' from the isReasoningTagProvider() check,
allowing Ollama models to work correctly through the standard
content/reasoning field separation.
2026-02-14 14:21:34 +01:00
Marcus Castro
7ec60d6449
fix: use relayAbort helper for addEventListener to preserve AbortError reason
2026-02-13 18:13:18 +01:00
Marcus Castro
d9c582627c
perf: use .abort.bind() instead of arrow closures to prevent memory leaks ( #7174 )
2026-02-13 18:13:18 +01:00
quotentiroler
a26670a2fb
refactor: consolidate fetchWithTimeout into shared utility
2026-02-09 20:34:56 -08:00
Peter Steinberger
42a07791c4
fix(auth): strip line breaks from pasted keys
2026-02-09 11:26:27 -06:00
max
eb3e9c649b
chore: fix vitest standalone configs and update package description ( #11865 )
...
* chore: fix vitest standalone configs and update package description
- vitest.live.config.ts and vitest.e2e.config.ts now extend root config
- Inherits testTimeout (120s), resolve.alias, pool, setupFiles, excludes
- ui/vitest.node.config.ts gets explicit 120s timeout
- package.json description updated for multi-channel AI gateway
- Removed unused src/utils/time-format.ts
* chore: filter inherited excludes in live/e2e vitest configs
* refactor: dedupe GroupPolicy/DmPolicy in extensions
Import from openclaw/plugin-sdk instead of re-declaring identical types.
2026-02-08 05:24:50 -08:00
max
a1123dd9be
Centralize date/time formatting utilities ( #11831 )
2026-02-08 04:53:31 -08:00
Tak Hoffman
8a352c8f9d
Web UI: add token usage dashboard ( #10072 )
...
* feat(ui): Token Usage dashboard with session analytics
Adds a comprehensive Token Usage view to the dashboard:
Backend:
- Extended session-cost-usage.ts with per-session daily breakdown
- Added date range filtering (startMs/endMs) to API endpoints
- New sessions.usage, sessions.usage.timeseries, sessions.usage.logs endpoints
- Cost breakdown by token type (input/output/cache read/write)
Frontend:
- Two-column layout: Daily chart + breakdown | Sessions list
- Interactive daily bar chart with click-to-filter and shift-click range select
- Session detail panel with usage timeline, conversation logs, context weight
- Filter chips for active day/session selections
- Toggle between tokens/cost view modes (default: cost)
- Responsive design for smaller screens
UX improvements:
- 21-day default date range
- Debounced date input (400ms)
- Session list shows filtered totals when days selected
- Context weight breakdown shows skills, tools, files contribution
* fix(ui): restore gatewayUrl validation and syncUrlWithSessionKey signature
- Restore normalizeGatewayUrl() to validate ws:/wss: protocol
- Restore isTopLevelWindow() guard for iframe security
- Revert syncUrlWithSessionKey signature (host param was unused)
* feat(ui): Token Usage dashboard with session analytics
Adds a comprehensive Token Usage view to the dashboard:
Backend:
- Extended session-cost-usage.ts with per-session daily breakdown
- Added date range filtering (startMs/endMs) to API endpoints
- New sessions.usage, sessions.usage.timeseries, sessions.usage.logs endpoints
- Cost breakdown by token type (input/output/cache read/write)
Frontend:
- Two-column layout: Daily chart + breakdown | Sessions list
- Interactive daily bar chart with click-to-filter and shift-click range select
- Session detail panel with usage timeline, conversation logs, context weight
- Filter chips for active day/session selections
- Toggle between tokens/cost view modes (default: cost)
- Responsive design for smaller screens
UX improvements:
- 21-day default date range
- Debounced date input (400ms)
- Session list shows filtered totals when days selected
- Context weight breakdown shows skills, tools, files contribution
* fix: usage dashboard data + cost handling (#8462 ) (thanks @mcinteerj)
* Usage: enrich metrics dashboard
* Usage: add latency + model trends
* Gateway: improve usage log parsing
* UI: add usage query helpers
* UI: client-side usage filter + debounce
* Build: harden write-cli-compat timing
* UI: add conversation log filters
* UI: fix usage dashboard lint + state
* Web UI: default usage dates to local day
* Protocol: sync session usage params (#8462 ) (thanks @mcinteerj, @TakHoffman)
---------
Co-authored-by: Jake McInteer <mcinteerj@gmail.com >
2026-02-05 22:35:46 -06:00
Benjamin Jesuiter
3e82cbd55b
Memory: parse quoted qmd command
2026-02-02 23:45:05 -08:00
cpojer
f06dd8df06
chore: Enable "experimentalSortImports" in Oxfmt and reformat all imorts.
2026-02-01 10:03:47 +09:00
cpojer
5ceff756e1
chore: Enable "curly" rule to avoid single-statement if confusion/errors.
2026-01-31 16:19:20 +09:00
Ayaan Zaidi
310eed825e
fix: preserve delivery thread fallback ( #4911 ) (thanks @yevhen)
2026-01-31 09:31:40 +05:30
Yevhen Bobrov
a642ca4ea8
Fix telegram threadId in deliveryContext
2026-01-31 09:31:40 +05:30
Peter Steinberger
9a7160786a
refactor: rename to openclaw
2026-01-30 03:16:21 +01:00
Peter Steinberger
6d16a658e5
refactor: rename clawdbot to moltbot with legacy compat
2026-01-27 12:21:02 +00:00
plum-dawg
c96ffa7186
feat: Add Line plugin ( #1630 )
...
* feat: add LINE plugin (#1630 ) (thanks @plum-dawg)
* feat: complete LINE plugin (#1630 ) (thanks @plum-dawg)
* chore: drop line plugin node_modules (#1630 ) (thanks @plum-dawg)
* test: mock /context report in commands test (#1630 ) (thanks @plum-dawg)
* test: limit macOS CI workers to avoid OOM (#1630 ) (thanks @plum-dawg)
* test: reduce macOS CI vitest workers (#1630 ) (thanks @plum-dawg)
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-01-25 12:22:36 +00:00
iHildy
b76cd6695d
feat: add beta googlechat channel
2026-01-24 23:30:45 +00:00
Peter Steinberger
279f799388
fix: harden Mattermost plugin gating ( #1428 ) (thanks @damoahdominic)
2026-01-23 01:23:23 +00:00
Dominic Damoah
91278d8b4e
Merge branch 'main' into feat/mattermost-channel
2026-01-22 03:11:53 -05:00
Peter Steinberger
388d302472
fix: carry reply tags across streamed chunks
2026-01-22 08:01:34 +00:00
Dominic Damoah
bf6df6d6b7
feat: add Mattermost channel support
...
Add Mattermost as a supported messaging channel with bot API and WebSocket integration. Includes channel state tracking (tint, summary, details), multi-account support, and delivery target routing. Update documentation and tests to include Mattermost alongside existing channels.
2026-01-21 18:40:56 -05:00
Peter Steinberger
e447233533
chore: sync protocol outputs
2026-01-21 00:19:53 +00:00
Peter Steinberger
02ca148583
fix: preserve subagent thread routing ( #1241 )
...
Thanks @gnarco.
Co-authored-by: gnarco <gnarco@users.noreply.github.com >
2026-01-20 17:22:07 +00:00
CJ Winslow
a28c271488
TUI: optimize fuzzy filtering and consolidate time formatting
...
- Extract formatRelativeTime to shared utility for reuse across components
- Optimize FilterableSelectList with pre-lowercased searchTextLower field (avoids toLowerCase on every keystroke)
- Implement custom fuzzy matching with space-separated token support and word boundary scoring
- Use matchesKey utility for consistent keybinding handling (arrows, vim j/k, ctrl+p/n)
- Fix searchable-select-list to support vim keybindings consistently
- Fix system-prompt runtimeInfo null check with nullish coalescing operator
2026-01-20 16:37:08 +00:00
Peter Steinberger
d5c8172197
fix: optimize routed CLI path ( #1195 ) (thanks @gumadeiras)
2026-01-18 23:28:09 +00:00
Gustavo Madeira Santana
acb523de86
CLI: streamline startup paths and env parsing
...
Add shared parseBooleanValue()/isTruthyEnvValue() and apply across CLI, gateway, memory, and live-test flags for consistent env handling.
Introduce route-first fast paths, lazy subcommand registration, and deferred plugin loading to reduce CLI startup overhead.
Centralize config validation via ensureConfigReady() and add config caching/deferred shell env fallback for fewer IO passes.
Harden logger initialization/imports and add focused tests for argv, boolean parsing, frontmatter, and CLI subcommands.
2026-01-18 23:10:39 +00:00
Peter Steinberger
31e8ecca10
fix: format verbose tool output by channel
2026-01-17 10:17:57 +00:00
Peter Steinberger
7cebe7a506
style: run oxfmt
2026-01-17 08:00:05 +00:00
Peter Steinberger
eb8a0510e0
refactor: unify queue drop handling
2026-01-17 06:38:33 +00:00
Peter Steinberger
c7ae5100fa
refactor: share queue helpers
...
Co-authored-by: adam91holt <adam91holt@users.noreply.github.com >
2026-01-17 06:02:27 +00:00
Peter Steinberger
285ed8bac3
fix: sync delivery routing context
...
Co-authored-by: adam91holt <adam91holt@users.noreply.github.com >
2026-01-17 06:02:27 +00:00