77 Commits
Author SHA1 Message Date
Colin JohnsonandGitHub 0d3cbae6a1 fix(ios): sidebar drags jitter and toolbar control flickers (#111831)
* fix(ios): smooth sidebar gestures and toolbar controls

* fix(ios): keep sidebar edge gesture below toolbar

* chore(ios): refresh native localization inventory

* fix(ios): preserve edge content interactions

* fix(ios): restore smooth sidebar tracking

* test(ios): align drawer source guards
2026-07-20 17:26:17 -04:00
Colin JohnsonandGitHub 2f967bc8f3 test(ios): refresh chat voice and sidebar UI coverage (#111655) 2026-07-20 08:02:16 -04:00
Colin JohnsonandGitHub 1ca6b6ff67 feat(ios): unify chat and voice experience (#107879)
* feat(ios): unify chat and voice experience

* refactor(ios): finish unified chat ownership

* fix(ios): unify chat and voice capture ownership

* fix(ios): serialize Talk permission hydration

* fix(ios): clear voice CI regressions

* fix(ios): clear remaining unified chat CI failures

* chore(i18n): sync native source inventory

* refactor(ios): defer provider-only realtime voice

* fix(ios): clean unified chat voice PR

* fix(ios): localize unified voice controls

* fix(ios): serialize composer audio controls

* fix(ios): isolate dictation preparation lifecycle

* fix(ios): key chat tab icons by appearance

* fix(ios): preserve talk upgrade handshakes

* fix(ios): refresh native i18n inventory

* fix(ios): reconcile shared locale artifacts

* fix(ios): satisfy chat view lint limit

* fix(ios): reconcile shared composer implementation

* test(apple): avoid XCTest actor deinit crash

* fix(ios): satisfy SwiftFormat scope spacing

* fix(ios): remove duplicate merged helper declarations
2026-07-18 14:30:10 -04:00
6242842722 fix(ios): focus missing gateway credentials (#98189)
* fix(ios): focus missing gateway credentials

Co-authored-by: Colin <colin@solvely.net>

* test(macos): let main actor polling suspend

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-12 23:36:29 -07:00
632efa2d73 fix ios qr scanner lifecycle (#101235)
* fix ios qr scanner lifecycle

* fix(ios): tighten QR scanner lifecycle change

---------

Co-authored-by: joshavant <830519+joshavant@users.noreply.github.com>
2026-07-06 21:34:44 -05:00
Colin JohnsonandGitHub 82106a18b3 fix(android): stabilize recent sessions overview (#101161) 2026-07-06 21:20:06 -04:00
Colin JohnsonandGitHub 9c2bbd0750 fix(android): stabilize chat refresh loading (#100966) 2026-07-06 13:33:05 -04:00
7cfc66ad07 fix(android): derive Voice readiness from Gateway catalog (#98269)
* fix(android): derive voice readiness from Gateway catalog

Co-authored-by: Colin <colin@solvely.net>

* chore(android): sync native i18n inventory

* test(gateway): use registered realtime provider ids

* fix(gateway): satisfy Talk catalog lint

* chore(android): refresh voice i18n inventory

* fix(talk): preserve runtime readiness semantics

* fix(talk): make catalog readiness authoritative

* fix(talk): validate selected provider readiness

* fix(android): honor authoritative talk readiness

* fix(android): inventory voice readiness copy

* fix(talk): report runtime-selected catalog provider

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 23:32:03 -07:00
ffda2f00a0 fix: keep Android gateway settings save idempotent (#98277)
* fix(android): keep gateway settings save idempotent

* fix(android): centralize gateway settings auth ownership

Co-authored-by: Colin <colin@solvely.net>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-02 15:53:47 -07:00
Colin JohnsonandGitHub 54b09580f6 fix(ios): reset sidebar navigation stacks (#94991) 2026-06-29 20:56:22 -04:00
Colin JohnsonandGitHub 59d8462b1d fix(macos): open dashboard when Dock or Finder relaunches app (#97637)
* fix(macos): open dashboard on Dock reopen

* fix(macos): preserve visible-window Dock reopen

* style(macos): satisfy deep link switch formatting
2026-06-28 20:24:15 -07:00
4ae0a5d958 ci: run QA smoke profile in CI (#94291)
* ci: add qa lab smoke profile dispatch

* ci: prove qa lab smoke profile on prs

* ci: preserve manual qa lab profile dispatch

* ci: run qa lab smoke profile on pull requests

* ci: keep QA smoke mock lane bounded

* ci: run QA smoke PR proof through crabline

* ci: keep mock QA timeouts on caller fallbacks

* ci: prebuild QA smoke runtime

* ci: delegate smoke QA evidence workflow

* ci: trust release branch smoke evidence refs

* ci: trim smoke evidence workflow comments

* ci: align smoke evidence wrapper with QA profile contract

* ci: keep smoke profile evidence mock-only

* ci: make smoke profile evidence manual

* ci: shard qa smoke profile in ci

* ci: drop qa-channel-only smoke shard

* ci: derive qa smoke shards from taxonomy

* ci: keep qa smoke planner legacy-safe

* ci: enforce qa smoke shard failures

* ci: run qa smoke in existing fast shard

* ci: opt qa smoke into crabline concurrency

* test(ci): align qa smoke guard with taxonomy cleanup

* ci: split qa smoke into dedicated check

---------

Co-authored-by: Dallin Romney <dallinromney@gmail.com>
2026-06-24 09:47:45 -07:00
Colin JohnsonandGitHub e39249100e fix: route Android exec approvals to in-app inbox (#95593)
* fix: route Android exec approvals to in-app inbox

* fix: read nested Android exec approval commands
2026-06-22 19:00:16 -05:00
5e342c774d improve: refresh Android overview control surface (#95557)
* improve android overview control surface

* fix android lint gates

* fix android voice e2e debug broadcast

* harden android voice e2e receiver

* fix(android): clarify Talk entry copy

---------

Co-authored-by: joshavant <830519+joshavant@users.noreply.github.com>
2026-06-22 18:57:33 -05:00
Colin JohnsonandGitHub 3675c01410 fix: /status is too verbose for pinned model sessions (#95797)
* fix: compact status model override output

* fix: align compact status override wording
2026-06-22 18:49:58 -05:00
d5a27b0b96 test: add QA Lab UX Matrix evidence scenario (#94306)
* test: add qa lab ux matrix script scenario

* fix(qa-lab): annotate UX Matrix producer catch callback as unknown for oxlint

---------

Co-authored-by: Dallin Romney <dallinromney@gmail.com>
2026-06-18 14:10:06 -07:00
c677424edb qa-lab: add evidence artifact gallery (#94283)
* qa-lab: add evidence artifact gallery

* qa-lab: harden evidence gallery artifacts

* qa-lab: share evidence gallery view types

* qa-lab: disable evidence preview caching

* refactor(qa-lab): resolve evidence artifacts once and trim gallery render/test duplication

* fix(qa-lab): build evidence model before sending /api/evidence success headers

---------

Co-authored-by: Dallin Romney <dallinromney@gmail.com>
2026-06-18 12:17:46 -07:00
591313e80a qa-lab: support script-backed evidence scenarios (#94276)
* qa: add script scenario execution kind

* fix(qa-lab): carry suite profile into script producer evidence and simplify artifact path resolution

* fix(qa-lab): keep out-of-repo producer artifacts absolute to avoid ../ traversal refs

---------

Co-authored-by: Dallin Romney <dallinromney@gmail.com>
2026-06-17 15:09:25 -07:00
8e77d5e144 fix(android): wait for node capability approval before onboarding (#93792)
* fix android node approval wait state

* docs: add android approval wait proof

* fix(android): address approval state review cleanup

* docs: move PR proof images out of repo

* test: trim android node approval proof

* fix(android): wait for node approval before onboarding

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-06-17 09:38:33 +08:00
c45c87acca feat(ios): add watch action surface (#93387)
* feat(ios): add watch action surface

* fix: harden watch action surface

* fix: clean watch codegen lint

* fix(ios): scope watch chat commands to gateway

---------

Co-authored-by: joshavant <830519+joshavant@users.noreply.github.com>
2026-06-16 15:22:16 +02:00
Colin JohnsonandGitHub fd855c831f feat(webui): add session workspace rail (#92856)
* feat(webui): add session workspace rail

* fix(webui): address session workspace review

* fix(webui): secure session workspace previews

* fix(webui): handle nested session workspace paths

* fix(webui): update session file protocol models

* fix(webui): clear session rail lint
2026-06-14 22:39:51 +08:00
Colin JohnsonandGitHub 1a8747620e fix: reflow composer beside workspace rail
Reflow the Control UI chat composer into the main chat column when the Workspace Files rail is expanded, so the composer stays beside the rail instead of extending underneath it.

Prepared head SHA: 7108d88cda
Co-authored-by: Colin Johnson <211764741+Solvely-Colin@users.noreply.github.com>
Co-authored-by: shakkernerd <165377636+shakkernerd@users.noreply.github.com>
Reviewed-by: @shakkernerd
2026-06-14 00:40:03 +01:00
Colin JohnsonandGitHub e58310b000 fix(ios): force stale foreground gateway reconnects (#92552) 2026-06-13 20:33:39 +02:00
ColinandShakker 2129d5b3ab fix(control-ui): refine mobile chat layout 2026-06-10 20:03:13 +01:00
bf89552e67 Improve iPad and iPhone control surfaces (#91557)
* feat(ios): expand iPad layout support

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* feat: improve iPad and iPhone control surfaces

* fix: preserve workboard dispatch compatibility

* fix: keep Talk reachable on iPad

* fix: add universal iPad app icons

* fix: address ready-review iOS feedback

* fix: avoid workboard board id shadowing

* fix ios sidebar separators

---------

Co-authored-by: Solvely-Colin <211764741+Solvely-Colin@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: joshavant <830519+joshavant@users.noreply.github.com>
2026-06-09 21:46:02 -05:00
ColinandShakker 646df2da83 fix skill workshop filtered fallback 2026-06-01 23:00:40 +01:00
ColinandShakker 211321ce5c address skill workshop review comments 2026-06-01 23:00:40 +01:00
ColinandShakker a34e822cd4 fix skill workshop filtered navigation 2026-06-01 23:00:40 +01:00
ColinandShakker 8c180c9153 fix(ui): render skill workshop tab 2026-06-01 23:00:40 +01:00
Colin JohnsonandGitHub f6e51ff99a feat(ios): refresh pro UI and gateway flows (#87367)
Summary:
- Replace the legacy iOS shell with Pro Command, Chat, Agents, and Settings tabs.
- Wire iOS chat/session/settings/diagnostics and realtime Talk flows through gateway-backed APIs.
- Add gateway/session and shared chat coverage for the new iOS flow.

Verification:
- git diff --check
- node scripts/run-vitest.mjs src/gateway/server.sessions.create.test.ts src/gateway/talk-realtime-relay.test.ts
- swift test --filter ChatViewModelTests (apps/shared/OpenClawKit)
- xcodebuild build for Nimrod's iPhone succeeded; install succeeded; launch was blocked because the phone was locked

Known follow-up:
- Preserve traceLevel in sessions.create parent runtime inheritance and keep the changelog credit in the follow-up patch.
2026-05-28 17:23:26 +03:00
Colin JohnsonandGitHub e730e9bd0b feat(ios): add realtime talk relay mode
Adds realtime Gateway Talk relay support for iOS, including OpenAI realtime provider selection and voice selection controls.

Maintainer fixups preserved provider auth fallback resolution, kept setup-code/manual auth through TLS trust prompts, recomputed pairing auth from current form fields, fixed the realtime voice label Swift compile issue, added provider auth regression coverage, and refreshed shrinkwrap metadata for the current CI merge base.

Verification:
- `fnm exec --using 24.15.0 pnpm deps:shrinkwrap:check`
- `git diff --check`
- `swiftformat --lint --config config/swiftformat --unexclude apps/ios/Sources apps/ios/Sources/Gateway/GatewayConnectionController.swift apps/ios/Sources/Onboarding/GatewayOnboardingView.swift apps/ios/Sources/Onboarding/OnboardingWizardView.swift apps/ios/Sources/Settings/SettingsTab.swift apps/ios/Sources/Voice/TalkModeGatewayConfig.swift`
- `swiftlint lint --config apps/ios/.swiftlint.yml apps/ios/Sources/Gateway/GatewayConnectionController.swift apps/ios/Sources/Onboarding/GatewayOnboardingView.swift apps/ios/Sources/Onboarding/OnboardingWizardView.swift apps/ios/Sources/Settings/SettingsTab.swift apps/ios/Sources/Voice/TalkModeGatewayConfig.swift`
- `AUTOREVIEW_AUTO_TESTS=0 .agents/skills/autoreview/scripts/autoreview --mode branch --base origin/main`
- GitHub CI clean for `8a76c829611c0eb70d4c3b5328f1868aaf3516e1` (cancelled `auto-response` ignored)

Co-authored-by: Colin Johnson <colin@solvely.net>
2026-05-22 17:34:06 +01:00
ColinandPeter Steinberger 6e80294079 Fix Discord realtime voice playback stability 2026-05-18 12:50:16 +01:00
ColinandPeter Steinberger 6481021763 fix: pass config to google meet realtime bridge 2026-05-10 00:13:23 -04:00
ColinandPeter Steinberger ed4012642a docs: credit realtime voice contributor 2026-05-10 00:13:23 -04:00
ColinandPeter Steinberger d5893d99d0 fix: keep realtime OAuth off custom endpoints 2026-05-10 00:13:23 -04:00
ColinandPeter Steinberger a77d2c142c fix: address realtime voice review feedback 2026-05-10 00:13:23 -04:00
ColinandPeter Steinberger 7a2a31dede feat: add realtime voice OAuth controls 2026-05-10 00:13:23 -04:00
Colin JohnsonandGitHub 21082d2ede fix(plugins): verify bundled runtime deps installs
Verify bundled runtime dependency installs before reporting success, so a clean npm exit cannot hide packages missing from the managed runtime-deps root.

Also updates the bundle command test mock for the current plugin enable-state API.

Local proof:
- `pnpm test src/plugins/bundle-commands.test.ts`
- `pnpm test src/plugins/bundled-runtime-deps.test.ts src/commands/doctor-bundled-plugin-runtime-deps.test.ts src/plugins/loader.test.ts`
- `pnpm check:changed`

Co-authored-by: Colin <colin@solvely.net>
2026-04-26 04:32:33 +01:00
0f36ee5a2e Slack: harden slash and interactions ingress checks (openclaw#29091) thanks @Solvely-Colin
Verified:
- pnpm build
- pnpm check
- pnpm test:macmini

Co-authored-by: Solvely-Colin <211764741+Solvely-Colin@users.noreply.github.com>
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>
2026-03-01 09:40:57 -06:00
ColinandPeter Steinberger 1faf8e8e9d Slack: add external select flow for large arg menus 2026-02-16 23:51:44 +01:00
ColinandPeter Steinberger 7a4efbb030 Slack: capture workflow button interaction metadata 2026-02-16 23:51:44 +01:00
ColinandPeter Steinberger bd20c1e24d Slack: include stacked modal lifecycle context 2026-02-16 23:51:44 +01:00
ColinandPeter Steinberger ce973332f6 Slack: add media block fallback text handling 2026-02-16 23:51:44 +01:00
ColinandPeter Steinberger 7aaf1547df Slack: escape mrkdwn in interaction confirmations 2026-02-16 23:51:44 +01:00
ColinandPeter Steinberger a7c1b8aea7 Slack: attribute interaction confirmations and structured selects 2026-02-16 23:51:44 +01:00
ColinandPeter Steinberger 9fcb93dd13 Slack: add rich text previews for modal inputs 2026-02-16 23:51:44 +01:00
ColinandPeter Steinberger 05ab147081 Slack: expand advanced modal controls payloads and confirms 2026-02-16 23:51:44 +01:00
ColinandPeter Steinberger 5bbbc3e3e6 Slack: show picker values in interaction confirmations 2026-02-16 23:51:44 +01:00
ColinandPeter Steinberger 5f9a04604e Slack: add header and context blocks to arg menus 2026-02-16 23:51:44 +01:00
ColinandPeter Steinberger 7c5529a153 Slack: enrich modal input payload normalization 2026-02-16 23:51:44 +01:00
ColinandPeter Steinberger d1aa2323bd Slack: update action rows for select interactions 2026-02-16 23:51:44 +01:00
ColinandPeter Steinberger 1bfdd4e237 Slack: add overflow menus for slash arg choices 2026-02-16 23:51:44 +01:00
ColinandPeter Steinberger 296ba8e934 Slack: enrich block action context payloads 2026-02-16 23:51:44 +01:00
ColinandPeter Steinberger 7e42408ade Slack: dedupe normalized interaction selections 2026-02-16 23:51:44 +01:00
ColinandPeter Steinberger 6e790303df Slack: validate runtime blocks in send and edit paths 2026-02-16 23:51:44 +01:00
ColinandPeter Steinberger c01c6b7079 Slack: expand interaction payload normalization coverage 2026-02-16 23:51:44 +01:00
ColinandPeter Steinberger ac969e602c Slack: add modal private metadata utilities 2026-02-16 23:51:44 +01:00
ColinandPeter Steinberger 82d132f1ba Slack: add send blocks behavior tests 2026-02-16 23:51:44 +01:00
ColinandPeter Steinberger e8a1d4171d Slack: guard select option value length in slash menus 2026-02-16 23:51:44 +01:00
ColinandPeter Steinberger c943ffab7c Slack: reject blocks plus media in send paths 2026-02-16 23:51:44 +01:00
ColinandPeter Steinberger 10d876e319 Slack: validate blocks input shape centrally 2026-02-16 23:51:44 +01:00
ColinandPeter Steinberger e023c84d78 Slack: infer interaction channel type from channel ID 2026-02-16 23:51:44 +01:00
ColinandPeter Steinberger 378e18b75b Slack: support blocks in plugin edit action 2026-02-16 23:51:44 +01:00
ColinandPeter Steinberger 3912a2264b Slack: support blocks in plugin send action 2026-02-16 23:51:44 +01:00
ColinandPeter Steinberger 08bc1dce6a Slack: support Block Kit blocks in editMessage 2026-02-16 23:51:44 +01:00
ColinandPeter Steinberger c9684a2678 Slack: support Block Kit blocks in sendMessage actions 2026-02-16 23:51:44 +01:00
ColinandPeter Steinberger bd17587b2a Slack: route modal interactions via private metadata 2026-02-16 23:51:44 +01:00
ColinandPeter Steinberger d57cbcf713 Slack: use static_select for large slash arg menus 2026-02-16 23:51:44 +01:00
ColinandPeter Steinberger cf0ca47a82 Slack: capture Block Kit view closed events 2026-02-16 23:51:44 +01:00
ColinandPeter Steinberger e7cded82b2 Slack: capture Block Kit modal submissions 2026-02-16 23:51:44 +01:00
ColinandPeter Steinberger 21ba564fb0 Slack: fix CI typing for interaction handler 2026-02-16 23:51:44 +01:00
ColinandPeter Steinberger 55b70aa8b4 Slack: register interaction event handler 2026-02-16 23:51:44 +01:00
ColinandPeter Steinberger 9419d029c9 Slack: enrich Block Kit interaction events 2026-02-16 23:51:44 +01:00
ColinandPeter Steinberger 89ce1460e1 feat(slack): add configurable stream modes 2026-02-16 23:50:42 +01:00
ColinandPeter Steinberger 087edec93f feat(slack): add draft preview cleanup lifecycle 2026-02-16 23:50:42 +01:00
ColinandPeter Steinberger dfd5a79631 fix(slack): pass account token for draft final chat.update 2026-02-16 23:50:42 +01:00
ColinandPeter Steinberger bec974aba9 feat(slack): stream partial replies via draft message updates 2026-02-16 23:50:42 +01:00