Peter Steinberger
7ecf733342
fix: align channel config schemas and env precedence
2026-01-17 00:43:05 +00:00
Shadow
1ad26d6fea
Config: schema-driven channels and settings
2026-01-17 00:43:05 +00:00
Peter Steinberger
929b86e302
feat(ui): delete sessions from Control UI
2026-01-16 22:33:47 +00:00
Peter Steinberger
500c75b4f0
fix: align ZAI thinking toggles
2026-01-16 22:26:43 +00:00
Peter Steinberger
6c6bc6ff1c
fix: add control UI auth guidance
2026-01-16 09:03:02 +00:00
Peter Steinberger
11d4fc101e
fix: sync cron run history selection in control ui
2026-01-15 08:38:21 +00:00
Peter Steinberger
2bae4d2dba
fix(ui): override token from URL
2026-01-15 08:31:02 +00:00
Peter Steinberger
3171781d58
fix: show raw any-map entries in config UI
2026-01-15 08:24:23 +00:00
Peter Steinberger
53d0bf653a
fix: canonicalize main session keys
2026-01-15 08:05:41 +00:00
Peter Steinberger
9c04a79c0a
fix(ui): move docs link into nav
2026-01-15 08:01:34 +00:00
Peter Steinberger
31d3aef8d6
fix: prevent config clobbering
2026-01-15 04:06:11 +00:00
Peter Steinberger
50fa106d87
refactor: centralize dashboard url + ws close code
2026-01-14 23:42:12 +00:00
rahthakor
0eabc89840
fix(ui): use application-defined WebSocket close code
2026-01-14 23:34:48 +00:00
Peter Steinberger
e3ff8c4d28
refactor(ui): split app modules
2026-01-14 09:11:36 +00:00
Peter Steinberger
8ba80d2dac
refactor(ui): split render + connections
2026-01-14 05:40:14 +00:00
Peter Steinberger
acfa762617
refactor(ui): split config and connections views
2026-01-14 01:17:56 +00:00
Peter Steinberger
84bfaad6e6
fix: finish channels rename sweep
2026-01-13 08:40:40 +00:00
Peter Steinberger
cb0f6cefa4
Deps: update Pi + Vitest and add Bedrock docs
2026-01-13 06:57:11 +00:00
Peter Steinberger
75a7855223
feat: cron ISO at + delete-after-run
2026-01-13 04:55:48 +00:00
Peter Steinberger
b41e75a15d
feat: cron agent binding + doctor UI refresh
2026-01-13 04:25:41 +00:00
Shadow
7ce902b096
Control UI: preserve chat scroll when scrolled up
...
Closes #217
2026-01-12 22:11:43 -06:00
Peter Steinberger
b928b96af5
fix: sync Moonshot Kimi K2 models ( #818 ) (thanks @mickahouan)
...
Co-authored-by: mickahouan <mickahouan@users.noreply.github.com >
2026-01-13 03:19:49 +00:00
Mickaël Ahouansou
abe9440096
feat: add Kimi K2 variants to Moonshot preset
2026-01-13 02:26:43 +00:00
Peter Steinberger
a87d37f26d
style: polish multi-account cards
2026-01-13 02:05:00 +00:00
DB Hurley
95ed49ce9a
feat(ui): display per-account status for multi-account Telegram
...
When multiple Telegram accounts are configured, the Connections UI now
displays individual status cards for each account showing:
- Bot username and account ID
- Running/configured status
- Last inbound message time
- Per-account errors
Falls back to the existing summary view for single-account configs.
No changes needed to types (already added upstream).
2026-01-12 20:03:06 -05:00
Peter Steinberger
115591c5b6
feat: add cron agent binding
2026-01-12 11:07:38 +00:00
Peter Steinberger
b77070cccf
fix: keep mobile nav flattened ( #771 ) (thanks @carlulsoe)
2026-01-12 08:13:49 +00:00
Kit
10a50645ef
fix(ui): flatten nav into horizontal scroll on mobile/tablet
...
On screens under 1100px, the nav groups were displaying in a confusing
grid-like pattern. This flattens all nav items into a single horizontal
scrollable row using display:contents to unwrap the group containers.
Also fixes the issue where collapsed nav groups would hide items on
mobile (where the toggle button is hidden), making them inaccessible.
2026-01-12 08:11:08 +00:00
Peter Steinberger
e19a5dc2b1
feat(control-ui): add model presets
2026-01-12 07:09:58 +00:00
Peter Steinberger
478a543e2e
fix: guard mobile chat sidebar overlay
2026-01-12 03:29:20 +00:00
Peter Steinberger
cf0c72a557
feat: add plugin architecture
2026-01-11 12:11:12 +00:00
Peter Steinberger
7acd26a2fc
Move provider to a plugin-architecture ( #661 )
...
* refactor: introduce provider plugin registry
* refactor: move provider CLI to plugins
* docs: add provider plugin implementation notes
* refactor: shift provider runtime logic into plugins
* refactor: add plugin defaults and summaries
* docs: update provider plugin notes
* feat(commands): add /commands slash list
* Auto-reply: tidy help message
* Auto-reply: fix status command lint
* Tests: align google shared expectations
* Auto-reply: tidy help message
* Auto-reply: fix status command lint
* refactor: move provider routing into plugins
* test: align agent routing expectations
* docs: update provider plugin notes
* refactor: route replies via provider plugins
* docs: note route-reply plugin hooks
* refactor: extend provider plugin contract
* refactor: derive provider status from plugins
* refactor: unify gateway provider control
* refactor: use plugin metadata in auto-reply
* fix: parenthesize cron target selection
* refactor: derive gateway methods from plugins
* refactor: generalize provider logout
* refactor: route provider logout through plugins
* refactor: move WhatsApp web login methods into plugin
* refactor: generalize provider log prefixes
* refactor: centralize default chat provider
* refactor: derive provider lists from registry
* refactor: move provider reload noops into plugins
* refactor: resolve web login provider via alias
* refactor: derive CLI provider options from plugins
* refactor: derive prompt provider list from plugins
* style: apply biome lint fixes
* fix: resolve provider routing edge cases
* docs: update provider plugin refactor notes
* fix(gateway): harden agent provider routing
* refactor: move provider routing into plugins
* refactor: move provider CLI to plugins
* refactor: derive provider lists from registry
* fix: restore slash command parsing
* refactor: align provider ids for schema
* refactor: unify outbound target resolution
* fix: keep outbound labels stable
* feat: add msteams to cron surfaces
* fix: clean up lint build issues
* refactor: localize chat provider alias normalization
* refactor: drive gateway provider lists from plugins
* docs: update provider plugin notes
* style: format message-provider
* fix: avoid provider registry init cycles
* style: sort message-provider imports
* fix: relax provider alias map typing
* refactor: move provider routing into plugins
* refactor: add plugin pairing/config adapters
* refactor: route pairing and provider removal via plugins
* refactor: align auto-reply provider typing
* test: stabilize telegram media mocks
* docs: update provider plugin refactor notes
* refactor: pluginize outbound targets
* refactor: pluginize provider selection
* refactor: generalize text chunk limits
* docs: update provider plugin notes
* refactor: generalize group session/config
* fix: normalize provider id for room detection
* fix: avoid provider init in system prompt
* style: formatting cleanup
* refactor: normalize agent delivery targets
* test: update outbound delivery labels
* chore: fix lint regressions
* refactor: extend provider plugin adapters
* refactor: move elevated/block streaming defaults to plugins
* refactor: defer outbound send deps to plugins
* docs: note plugin-driven streaming/elevated defaults
* refactor: centralize webchat provider constant
* refactor: add provider setup adapters
* refactor: delegate provider add config to plugins
* docs: document plugin-driven provider add
* refactor: add plugin state/binding metadata
* refactor: build agent provider status from plugins
* docs: note plugin-driven agent bindings
* refactor: centralize internal provider constant usage
* fix: normalize WhatsApp targets for groups and E.164 (#631 ) (thanks @imfing)
* refactor: centralize default chat provider
* refactor: centralize WhatsApp target normalization
* refactor: move provider routing into plugins
* refactor: normalize agent delivery targets
* chore: fix lint regressions
* fix: normalize WhatsApp targets for groups and E.164 (#631 ) (thanks @imfing)
* feat: expand provider plugin adapters
* refactor: route auto-reply via provider plugins
* fix: align WhatsApp target normalization
* fix: normalize WhatsApp targets for groups and E.164 (#631 ) (thanks @imfing)
* refactor: centralize WhatsApp target normalization
* feat: add /config chat config updates
* docs: add /config get alias
* feat(commands): add /commands slash list
* refactor: centralize default chat provider
* style: apply biome lint fixes
* chore: fix lint regressions
* fix: clean up whatsapp allowlist typing
* style: format config command helpers
* refactor: pluginize tool threading context
* refactor: normalize session announce targets
* docs: note new plugin threading and announce hooks
* refactor: pluginize message actions
* docs: update provider plugin actions notes
* fix: align provider action adapters
* refactor: centralize webchat checks
* style: format message provider helpers
* refactor: move provider onboarding into adapters
* docs: note onboarding provider adapters
* feat: add msteams onboarding adapter
* style: organize onboarding imports
* fix: normalize msteams allowFrom types
* feat: add plugin text chunk limits
* refactor: use plugin chunk limit fallbacks
* feat: add provider mention stripping hooks
* style: organize provider plugin type imports
* refactor: generalize health snapshots
* refactor: update macOS health snapshot handling
* docs: refresh health snapshot notes
* style: format health snapshot updates
* refactor: drive security warnings via plugins
* docs: note provider security adapter
* style: format provider security adapters
* refactor: centralize provider account defaults
* refactor: type gateway client identity constants
* chore: regen gateway protocol swift
* fix: degrade health on failed provider probe
* refactor: centralize pairing approve hint
* docs: add plugin CLI command references
* refactor: route auth and tool sends through plugins
* docs: expand provider plugin hooks
* refactor: document provider docking touchpoints
* refactor: normalize internal provider defaults
* refactor: streamline outbound delivery wiring
* refactor: make provider onboarding plugin-owned
* refactor: support provider-owned agent tools
* refactor: move telegram draft chunking into telegram module
* refactor: infer provider tool sends via extractToolSend
* fix: repair plugin onboarding imports
* refactor: de-dup outbound target normalization
* style: tidy plugin and agent imports
* refactor: data-drive provider selection line
* fix: satisfy lint after provider plugin rebase
* test: deflake gateway-cli coverage
* style: format gateway-cli coverage test
* refactor(provider-plugins): simplify provider ids
* test(pairing-cli): avoid provider-specific ternary
* style(macos): swiftformat HealthStore
* refactor(sandbox): derive provider tool denylist
* fix(sandbox): avoid plugin init in defaults
* refactor(provider-plugins): centralize provider aliases
* style(test): satisfy biome
* refactor(protocol): v3 providers.status maps
* refactor(ui): adapt to protocol v3
* refactor(macos): adapt to protocol v3
* test: update providers.status v3 fixtures
* refactor(gateway): map provider runtime snapshot
* test(gateway): update reload runtime snapshot
* refactor(whatsapp): normalize heartbeat provider id
* docs(refactor): update provider plugin notes
* style: satisfy biome after rebase
* fix: describe sandboxed elevated in prompt
* feat(gateway): add agent image attachments + live probe
* refactor: derive CLI provider options from plugins
* fix(gateway): harden agent provider routing
* fix(gateway): harden agent provider routing
* refactor: align provider ids for schema
* fix(protocol): keep agent provider string
* fix(gateway): harden agent provider routing
* fix(protocol): keep agent provider string
* refactor: normalize agent delivery targets
* refactor: support provider-owned agent tools
* refactor(config): provider-keyed elevated allowFrom
* style: satisfy biome
* fix(gateway): appease provider narrowing
* style: satisfy biome
* refactor(reply): move group intro hints into plugin
* fix(reply): avoid plugin registry init cycle
* refactor(providers): add lightweight provider dock
* refactor(gateway): use typed client id in connect
* refactor(providers): document docks and avoid init cycles
* refactor(providers): make media limit helper generic
* fix(providers): break plugin registry import cycles
* style: satisfy biome
* refactor(status-all): build providers table from plugins
* refactor(gateway): delegate web login to provider plugin
* refactor(provider): drop web alias
* refactor(provider): lazy-load monitors
* style: satisfy lint/format
* style: format status-all providers table
* style: swiftformat gateway discovery model
* test: make reload plan plugin-driven
* fix: avoid token stringification in status-all
* refactor: make provider IDs explicit in status
* feat: warn on signal/imessage provider runtime errors
* test: cover gateway provider runtime warnings in status
* fix: add runtime kind to provider status issues
* test: cover health degradation on probe failure
* fix: keep routeReply lightweight
* style: organize routeReply imports
* refactor(web): extract auth-store helpers
* refactor(whatsapp): lazy login imports
* refactor(outbound): route replies via plugin outbound
* docs: update provider plugin notes
* style: format provider status issues
* fix: make sandbox scope warning wrap-safe
* refactor: load outbound adapters from provider plugins
* docs: update provider plugin outbound notes
* style(macos): fix swiftformat lint
* docs: changelog for provider plugins
* fix(macos): satisfy swiftformat
* fix(macos): open settings via menu action
* style: format after rebase
* fix(macos): open Settings via menu action
---------
Co-authored-by: LK <luke@kyohere.com >
Co-authored-by: Luke K (pr-0f3t) <2609441+lc0rp@users.noreply.github.com >
Co-authored-by: Xin <xin@imfing.com >
2026-01-11 11:45:25 +00:00
ddyo
fb60637b7f
chore: set minimum release age
2026-01-11 11:27:54 +00:00
Peter Steinberger
36a21ae9b0
fix: improve telegram configuration safety
2026-01-11 03:57:52 +01:00
Peter Steinberger
a1533a17f7
fix(gateway): harden chat abort semantics
2026-01-10 17:23:27 +01:00
Peter Steinberger
d781508952
fix: make chat.send non-blocking
2026-01-10 17:02:28 +01:00
Peter Steinberger
097550c299
fix: centralize verbose overrides and tool stream gating
2026-01-10 00:52:24 +01:00
Peter Steinberger
1acbd6aea0
refactor(ui): split chat renderers and styles
2026-01-09 20:20:06 +01:00
Peter Steinberger
067c20608c
fix(ui): landing cleanup ( #475 ) (thanks @rahthakor)
2026-01-09 19:53:32 +01:00
rahthakor
9624d70187
test(ui): add tests for chat modules and update for icon refactor
...
- Add 21 tests for message-normalizer.ts (normalizeMessage, normalizeRoleForGrouping, isToolResultMessage)
- Add 17 tests for tool-helpers.ts (formatToolOutputForSidebar, getTruncatedPreview)
- Update navigation.test.ts to test iconClassForTab instead of deprecated iconForTab
- Skip focus-mode.browser.test.ts (toggle button moved to settings)
- Skip chat-markdown.browser.test.ts (tool card rendering refactored to sidebar)
- Skip bash-tools.test.ts line offset tests (shell env pollution issue)
2026-01-09 19:47:19 +01:00
Peter Steinberger
02b945cc95
refactor(ui): split mobile layout css
2026-01-09 16:49:02 +01:00
Kit
480aa406bb
feat(ui): improve mobile responsiveness
...
- Add @media (max-width: 600px) breakpoint for mobile-specific styles
- Compact header: smaller title, hidden subtitle, minimal status pill
- Horizontal scrollable nav: all items in one row, swipeable
- Hide redundant page titles on mobile
- Hide docs button on mobile (saves space)
- Smaller theme toggle icons
- Tighter spacing on cards, stats, forms
- Better chat layout: full-width session selector, compact compose
- Single-column log entries on small screens
Desktop layout remains unchanged.
Co-authored-by: Carl Ulsoe <34673973+carlulsoe@users.noreply.github.com >
2026-01-09 16:32:55 +01:00
Peter Steinberger
07430eb33d
Merge pull request #569 from bjesuiter/ui-build-default-to-relative-path
...
fix(ui): default to relative paths for control UI assets
2026-01-09 14:47:46 +00:00
Benjamin Jesuiter
7dcf19d902
fix(ui): default to relative paths for control UI assets
...
Changes the default base path from "/" to "./" so the control UI works
correctly when served under a custom basePath (e.g., /jbclawd/).
Previously, assets were referenced with absolute paths like /assets/...,
which failed when the UI was served under a subpath. With relative paths
(./assets/...), the browser resolves them relative to the HTML location,
making the UI work regardless of the configured basePath.
2026-01-09 15:32:55 +01:00
Azade
3133c7c84e
feat(sessions): expose label in sessions.list and support label lookup in sessions_send
...
- Add `label` field to session entries and expose it in `sessions.list`
- Display label column in the web UI sessions table
- Support `label` parameter in `sessions_send` for lookup by label instead of sessionKey
- `sessions.patch`: Accept and store `label` field
- `sessions.list`: Return `label` in session entries
- `sessions_spawn`: Pass label through to registry and announce flow
- `sessions_send`: Accept optional `label` param, lookup session by label if sessionKey not provided
- `agent` method: Accept `label` and `spawnedBy` params (stored in session entry)
- Add `label` column to sessions table in web UI
- Changed session store writes to merge with existing entry (`{ ...existing, ...new }`)
to preserve fields like `label` that might be set separately
We attempted to implement label persistence "properly" by passing the label
through the `agent` call and storing it during session initialization. However,
the auto-reply flow has multiple write points that overwrite the session entry,
and making all of them merge-aware proved unreliable.
The working solution patches the label in the `finally` block of
`runSubagentAnnounceFlow`, after all other session writes complete.
This is a workaround but robust - the patch happens at the very end,
just before potential cleanup.
A future refactor could make session writes consistently merge-based,
which would allow the cleaner approach of setting label at spawn time.
```typescript
// Spawn with label
sessions_spawn({ task: "...", label: "my-worker" })
// Later, find by label
sessions_send({ label: "my-worker", message: "continue..." })
// Or use sessions_list to see labels
sessions_list() // includes label field in response
```
2026-01-09 15:32:49 +01:00
Josh Palmer
7b79823b24
Adjust UI install for offline pnpm fetch ( #568 )
...
* 🤖 codex: make ui build install prod deps for offline pnpm (issue-pnpm-offline)
* 🤖 codex: ensure ui:test installs dev deps (issue-pnpm-offline)
2026-01-09 13:38:46 +01:00
Peter Steinberger
17ccf53eb1
fix: normalize <think> reasoning blocks
2026-01-09 08:30:05 +00:00
Peter Steinberger
133124e023
fix: strip thinking tags in chat UI
2026-01-09 05:24:11 +00:00
Peter Steinberger
875b849322
feat(ui): link sessions to chat page ( #471 ) — thanks @HazAT
2026-01-09 04:07:56 +01:00
Daniel Griesser
2e1dee197a
feat(ui): link sessions to chat page
...
- Session names in the Sessions table are now clickable links
- Clicking navigates to /chat?session=<key> with that session loaded
- Global sessions excluded (not real conversations)
- Added .session-link CSS styling (accent color, underline on hover)
- Chat page reads 'session' query param and cleans URL after applying
2026-01-09 04:05:33 +01:00