Peter Steinberger
939b18475d
fix(exec): honor shell comments in allow-always analysis
2026-03-07 23:31:25 +00:00
Peter Steinberger
d6f28a3da7
fix(usage): format near-million token counts as millions ( #39129 )
...
Co-authored-by: CurryMessi <curry-messi@users.noreply.github.com >
2026-03-07 19:59:12 +00:00
Vincent Koc
42e3d8d693
Secrets: add inline allowlist review set ( #38314 )
...
* Secrets: add inline allowlist review set
* Secrets: narrow detect-secrets file exclusions
* Secrets: exclude Docker fingerprint false positive
* Secrets: allowlist test and docs false positives
* Secrets: refresh baseline after allowlist updates
* Secrets: fix gateway chat fixture pragma
* Secrets: format pre-commit config
* Android: keep talk mode fixture JSON valid
* Feishu: rely on client timeout injection
* Secrets: allowlist provider auth test fixtures
* Secrets: allowlist onboard search fixtures
* Secrets: allowlist onboard mode fixture
* Secrets: allowlist gateway auth mode fixture
* Secrets: allowlist APNS wake test key
* Secrets: allowlist gateway reload fixtures
* Secrets: allowlist moonshot video fixture
* Secrets: allowlist auto audio fixture
* Secrets: allowlist tiny audio fixture
* Secrets: allowlist embeddings fixtures
* Secrets: allowlist resolve fixtures
* Secrets: allowlist target registry pattern fixtures
* Secrets: allowlist gateway chat env fixture
* Secrets: refresh baseline after fixture allowlists
* Secrets: reapply gateway chat env allowlist
* Secrets: reapply gateway chat env allowlist
* Secrets: stabilize gateway chat env allowlist
* Secrets: allowlist runtime snapshot save fixture
* Secrets: allowlist oauth profile fixtures
* Secrets: allowlist compaction identifier fixture
* Secrets: allowlist model auth fixture
* Secrets: allowlist model status fixtures
* Secrets: allowlist custom onboarding fixture
* Secrets: allowlist mattermost token summary fixtures
* Secrets: allowlist gateway auth suite fixtures
* Secrets: allowlist channel summary fixture
* Secrets: allowlist provider usage auth fixtures
* Secrets: allowlist media proxy fixture
* Secrets: allowlist secrets audit fixtures
* Secrets: refresh baseline after final fixture allowlists
* Feishu: prefer explicit client timeout
* Feishu: test direct timeout precedence
2026-03-06 19:35:26 -05:00
Vignesh Natarajan
1ab9393212
fix(secrets): harden api key normalization for ByteString headers
2026-03-05 18:31:45 -08:00
Tak Hoffman
7f2708a8c3
fix(routing): unify session delivery invariants for duplicate suppression ( #33786 )
...
* Routing: unify session delivery invariants
* Routing: address PR review feedback
* Routing: tighten topic and session-scope suppression
* fix(chat): inherit routes for per-account channel-peer sessions
2026-03-03 21:40:38 -06:00
Peter Steinberger
6b85ec3022
docs: tighten subscription guidance and update MiniMax M2.5 refs
2026-03-03 00:02:37 +00:00
Peter Steinberger
d3dc4e54f7
perf(runtime): trim hot-path allocations and cache channel plugin lookups
2026-03-02 23:56:30 +00:00
Byungsker
17578d77e1
fix(agents): add forward-compat fallback for google-gemini-cli gemini-3.1-pro/flash-preview ( #26570 )
...
* fix(agents): add "google" provider to isReasoningTagProvider to prevent reasoning leak
The gemini-api-key auth flow creates a profile with provider "google"
(e.g. google/gemini-3-pro-preview), but isReasoningTagProvider only
matched "google-gemini-cli" (OAuth) and "google-generative-ai". As a
result:
- reasoningTagHint was false → system prompt omitted <think>/<final>
formatting instructions
- enforceFinalTag was false → <final> tag filtering was skipped
Raw <think> reasoning output was delivered to the end user.
Fix: add the bare "google" provider string to the match list and cover
it with two new test cases (exact match + case-insensitive).
Fixes #26551
* fix(agents): add forward-compat fallback for google-gemini-cli gemini-3.1-pro/flash-preview
gemini-3.1-pro-preview and gemini-3.1-flash-preview are not yet present in
pi-ai's built-in google-gemini-cli model catalog (only gemini-3-pro-preview
and gemini-3-flash-preview are registered). When users configure these models
they get "Unknown model" errors even though Gemini CLI OAuth supports them.
The codebase already has isGemini31Model() in extra-params.ts, which proves
intent to support these models. Add a resolveGoogleGeminiCli31ForwardCompatModel
entry to resolveForwardCompatModel following the same clone-template pattern
used for zai/glm-5 and anthropic 4.6 models.
- gemini-3.1-pro-* clones gemini-3-pro-preview (with reasoning: true)
- gemini-3.1-flash-* clones gemini-3-flash-preview (with reasoning: true)
Also add test helpers and three test cases to model.forward-compat.test.ts.
Fixes #26524
* Changelog: credit Google Gemini provider fallback fixes
---------
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
2026-02-26 18:39:13 -05:00
joshavant
0e69660c41
feat(secrets): finalize external secrets runtime and migration hardening
2026-02-26 14:47:22 +00:00
Peter Steinberger
382fe8009a
refactor!: remove google-antigravity provider support
2026-02-23 05:20:14 +01:00
Peter Steinberger
53ed7a0f5c
test: dedupe repeated test fixtures and assertions
2026-02-22 18:37:25 +00:00
Peter Steinberger
dacb3d1aa2
refactor(queue): share drain helpers across announce and reply
2026-02-22 17:54:51 +00:00
Peter Steinberger
78c3c2a542
fix: stabilize flaky tests and sanitize directive-only chat tags
2026-02-22 12:19:33 +01:00
Peter Steinberger
c3e13175d2
perf(test): bypass queue debounce in fast mode and tighten announce defaults
2026-02-22 09:13:01 +00:00
Peter Steinberger
c708a18b0f
test: table-drive utils and channel-match cases
2026-02-21 23:02:44 +00:00
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