Commit Graph
100 Commits
Author SHA1 Message Date
Mohamed Boudra 5b2f3fd830 chore: fix unresolved imports and tighten knip cross-workspace entries
Delete orphaned voice-mcp-agent-smoke.ts (voice-mcp-bridge was removed
in cff41d78). Fix model-catalog.e2e.test.ts import path. Extend knip
server entries to cover shared/client cross-workspace imports.
2026-04-23 22:41:27 +07:00
Mohamed Boudra 2dd8c27573 chore: delete unused files flagged by knip
38 files removed across app and server (verified unreferenced via
grep + typecheck). Includes dead components, hooks, stores, utils,
POC scripts, an empty orchestrator stub, stale playwright configs,
and a duplicate workspace-registry test-helpers module.

knip config tightened: added babel.config.js, native platform
extensions, and test-stubs/ to app entry patterns.
2026-04-23 22:29:49 +07:00
Mohamed Boudra ba9ed8b995 chore: remove unused deps and declare missing ones
Knip-driven cleanup across all workspaces:

Removed (verified zero imports):
- root: @anthropic-ai/claude-agent-sdk, @modelcontextprotocol/sdk,
  expo, react, react-native, react-dom (duplicates of workspace deps)
- server: @ai-sdk/openai, @deepgram/sdk, express-basic-auth,
  fast-uri, mnemonic-id, tiny-invariant, playwright
- app: @expo/vector-icons, @getpaseo/server,
  @react-navigation/bottom-tabs, @react-navigation/elements,
  base64-js, react-native-css, expo-av, expo-font, expo-symbols,
  expo-web-browser, react-native-permissions,
  react-native-popover-view, react-native-securerandom
- cli: @getpaseo/relay
- desktop: @getpaseo/cli
- relay: @cloudflare/workers-types
- website: tailwindcss (provided by @tailwindcss/vite)

Declared (previously hoisted, now explicit):
- root: @types/ws, playwright, ws (used by scripts/)
- server: @mariozechner/pi-ai, @mariozechner/pi-agent-core
- app: expo-asset, qrcode, @types/qrcode, tiny-invariant,
  @xterm/headless, dotenv, jsdom
- cli: vitest
- desktop: vitest

Also removes the stray `/app.json` (obsolete, overridden by
packages/app/app.config.js).
2026-04-23 22:20:33 +07:00
Mohamed Boudra 2f381a76ed chore: add knip config for unused-code detection
Workspace-aware entry points plus ignore lists for script-only tools
and tools knip's binary resolution misses. Adds `npm run knip`.
2026-04-23 22:13:12 +07:00
Mohamed Boudra cda3d1d46c chore: apply oxlint fix-suggestions (unused imports + useless fragments)
Scoped to only `no-unused-vars` and `react/jsx-no-useless-fragment` —
the safe subset of --fix-suggestions. Primary changes:

- Remove unused named imports from statements
- Remove unused default/type imports entirely
- Collapse `<><Single/></>` fragments to `<Single/>`

Verified clean: typecheck + format + lint all green.
2026-04-23 21:55:25 +07:00
Mohamed Boudra 731c570b25 fix(types): repair typecheck after oxlint safe autofix
The safe --fix introduced three type issues:

1. unicorn/prefer-set-has rewrote array literals to `new Set(...)`
   without updating the `T[]` type annotation — broken assignment.
   Fix type to `Set<T>` in logger.ts and agent-manager.ts.

2. unicorn/no-array-reverse changed `.reverse()` → `.toReversed()`
   (ES2023). Bump `lib` to ES2023 in tsconfig.base.json and
   tsconfig.server.json. Target stays at ES2020 — Node 20 supports
   the methods natively, no downlevel needed.

3. preserve-caught-error added `new Error(msg, { cause })` (ES2022),
   also covered by the lib bump.
2026-04-23 21:55:19 +07:00
Mohamed Boudra 177153e5e8 chore: apply oxlint autofix (safe level)
Auto-fixed 102 warnings (6040 → 5938) across 57 files. Main categories:
- preserve-caught-error: add { cause: error } to re-thrown errors
- unicorn/no-array-reverse: .reverse() → .toReversed()
- unicorn/no-useless-fallback-in-spread: drop unnecessary ?? {} in spreads
- oxc/no-map-spread: rewrite object spread in .map() to Object.assign
- react-hooks/exhaustive-deps: trim module-level constants from dep arrays

Ran npm run format after to clean up whitespace from lint mutations.
2026-04-23 21:47:36 +07:00
Mohamed Boudra 9c88850de0 chore: replace biome with oxc (oxfmt + oxlint)
- Remove @biomejs/biome from root and packages/expo-two-way-audio
- Delete biome.json
- Add .oxfmtrc.json (migrated from biome via oxfmt --migrate=biome)
- Add .oxlintrc.json with curated rule set: react, react-perf,
  react-hooks, typescript, unicorn, oxc, import, promise
  - Rules target functional gotchas, untyped code, perf issues,
    deep JSX, nested ternaries, complexity, unused code
  - Noisy stylistic rules explicitly disabled
- Add npm scripts: lint, lint:fix (oxfmt replaces format/format:check)
- Update CI to run oxfmt --check

Lint is wired up but not enforced — all rules at warn. Baseline:
6040 warnings, 0 errors.
2026-04-23 21:44:56 +07:00
Mohamed Boudra ce4b0d54c7 chore: reformat codebase with oxfmt
Apply prettier-compatible formatting across the repo to match the
incoming oxfmt configuration. Mechanical reformat only — no logic
changes. Covers YAML quote normalization, package.json key sorting,
Markdown/TOML formatting, and minor TS whitespace tweaks.
2026-04-23 21:44:48 +07:00
Mohamed Boudra 9b25f8fc36 Auto-submit iOS builds for App Store review via fastlane
Adds a fastlane lane and an EAS Workflow custom job that runs after
submit_ios. Picks up the latest TestFlight build, waits for Apple
processing, and submits for review with auto-release on approval.

Uses ASC_KEY_ID, ASC_ISSUER_ID, ASC_KEY_P8 secrets from the EAS
production environment.
2026-04-23 21:36:35 +07:00
Mohamed Boudra 26e6d97e81 Auto-submit Android to production track
Was uploading to internal track as draft, requiring manual release in
Play Console. Now rolls out to 100% on production after Google review.
2026-04-23 21:21:58 +07:00
Mohamed Boudra 80102753e1 Make worktree archive optimistic 2026-04-23 21:16:23 +07:00
Mohamed Boudra e521e1f79d chore(release): cut 0.1.62 2026-04-23 20:28:53 +07:00
Mohamed Boudra a62c7471d2 docs: add 0.1.62 changelog entry 2026-04-23 20:27:40 +07:00
Mohamed Boudra 3edf812578 Fix PR worktree status lookup 2026-04-23 20:10:48 +07:00
Mohamed BoudraandGitHub dfc8223bcc Make workspace git registration nonblocking (#542) 2026-04-23 18:21:59 +08:00
Mohamed Boudra 083cd34db4 Merge branch 'scan-cleanup-opportunities' 2026-04-23 15:28:34 +07:00
Mohamed Boudra 9abc0217e9 refactor: extract types and simplify activity grouping 2026-04-23 15:28:25 +07:00
Mohamed Boudra 576cc0b668 Add sidebar callout surface 2026-04-23 15:19:40 +07:00
Mohamed Boudra e21ef2fc9b fix: prevent old release website redeploys 2026-04-23 10:17:37 +07:00
Mohamed Boudra c8b61f7ddc Show release contributors from synced notes 2026-04-23 09:17:45 +07:00
Mohamed Boudra 9c5974735e Fix desktop CLI environment boundary 2026-04-23 07:08:24 +07:00
Mohamed Boudra f65f82bac9 fix(release): keep changelog notes authoritative 2026-04-23 06:43:18 +07:00
Mohamed Boudra 8cc7e8951c chore(release): cut 0.1.61 2026-04-23 06:33:09 +07:00
Mohamed Boudra 38a41a71ff docs: promote 0.1.61 changelog 2026-04-23 06:32:11 +07:00
Mohamed Boudra ce6393a933 fix(app): avoid hashing image preview payloads 2026-04-22 23:15:28 +07:00
Mohamed Boudra 1f7b4eb10f chore(release): cut 0.1.61-beta.1 2026-04-22 22:37:42 +07:00
Mohamed Boudra 3560fb58bb docs: add 0.1.61-beta.1 changelog entry 2026-04-22 22:36:27 +07:00
Mohamed Boudra 4140e640fe feat(app): store assistant image previews as assets 2026-04-22 22:28:56 +07:00
Mohamed Boudra 434b28fc8e Add Providers docs page
Splits first-class and custom provider docs out of the Configuration
page onto /docs/providers. Introduces the first-class providers
(claude, codex, opencode, copilot, pi) and covers extending a provider,
Z.AI and Qwen plans, multiple profiles, custom binaries, ACP agents,
additionalModels, and disabling. Points to docs/CUSTOM-PROVIDERS.md on
GitHub as the source of truth.
2026-04-22 22:24:12 +07:00
Mohamed Boudra 1f8f8e4036 Reduce workspace rerenders during explorer resize 2026-04-22 22:18:11 +07:00
Mohamed Boudra b133285f6d Add additive custom provider models 2026-04-22 22:16:54 +07:00
Mohamed Boudra 4d5889ff38 Load Pi extensions for model discovery 2026-04-22 22:12:49 +07:00
Mohamed Boudra 95c773ce6d chore(release): cut 0.1.60 2026-04-22 20:38:54 +07:00
Mohamed Boudra c6680b3001 fix(release): preserve 0.1.60 schema compatibility 2026-04-22 20:37:19 +07:00
Mohamed Boudra 484e453401 Fix timeline catch-up for projected overlap 2026-04-22 20:21:26 +07:00
Mohamed Boudra 4b867c2f41 Fix mobile tool call expansion while streaming 2026-04-22 20:05:41 +07:00
Mohamed Boudra 368ce0339a Lazy-load GitHub picker queries 2026-04-22 20:00:43 +07:00
Mohamed Boudra 8e63274ce6 fix(server): unify worktree archive paths 2026-04-22 19:59:00 +07:00
Mohamed Boudra d80c524e0e fix(app): restore archive and composer CI checks 2026-04-22 19:16:28 +07:00
Mohamed Boudra 89efb007f9 Fix Codex replacement turn idle flash 2026-04-22 18:54:20 +07:00
Mohamed Boudra 407b4b68b0 Recover branch during rebase 2026-04-22 18:35:01 +07:00
Mohamed Boudra 637109eab0 Fix workspace hover card safe zone 2026-04-22 18:22:20 +07:00
Mohamed Boudra 027b3839fc chore(release): cut 0.1.60-beta.2 2026-04-22 18:06:55 +07:00
Mohamed Boudra c3589bdc84 chore: refresh lockfile metadata 2026-04-22 18:05:56 +07:00
Mohamed Boudra a5e6cc2d2b docs: note beta sanity fixes 2026-04-22 18:04:32 +07:00
Mohamed Boudra 713c90ea42 fix(server): restore release-blocking lifecycle checks 2026-04-22 18:03:37 +07:00
Mohamed Boudra e51fdada51 docs: update changelog for 0.1.60-beta.2 2026-04-22 17:58:50 +07:00
Mohamed Boudra dd98ae9359 fix(server): checkout fork PRs into owner branches 2026-04-22 17:53:53 +07:00
Mohamed Boudra 274a7fd217 fix(server): preserve dev runner signal handling 2026-04-22 17:53:53 +07:00
Mohamed Boudra a582fccef0 fix(app): clear new workspace drafts after submit 2026-04-22 17:53:53 +07:00
Mohamed Boudra 019bf65790 Fix running-agent replacement lifecycle 2026-04-22 17:53:53 +07:00
Mohamed Boudra 9218f70df3 Remove leftover app debug logging 2026-04-22 17:53:53 +07:00
Mohamed Boudra 9e3d8f0ec5 fix(cli): send version during daemon handshake 2026-04-22 16:19:51 +07:00
Mohamed Boudra 43b9123c5c fix(app): restore workspace tab focus on refresh 2026-04-22 16:19:43 +07:00
Mohamed Boudra b6afc66131 fix(app): avoid settings header offset 2026-04-22 16:19:31 +07:00
Mohamed Boudra 7993dc02dc Add working indicator top spacing 2026-04-22 16:06:34 +07:00
Mohamed Boudra 6601db2673 Fix stream action spacing branches 2026-04-22 15:49:00 +07:00
Mohamed Boudra e4badd95f4 Restore stream auxiliary spacing 2026-04-22 15:44:29 +07:00
Mohamed Boudra 02fc354686 Gate desktop daemon dev providers in production 2026-04-22 15:42:36 +07:00
Mohamed Boudra aef54d5180 Optimize agent stream rendering 2026-04-22 15:38:53 +07:00
Mohamed Boudra 3c5bfd6e3d Stabilize sidebar workspace press handler 2026-04-22 14:14:34 +07:00
Mohamed Boudra f422dabf1e Reduce redundant runtime updates 2026-04-22 14:03:59 +07:00
Mohamed Boudra 2706d5e934 fix(app): avoid duplicate bootstrap connection client 2026-04-22 13:26:45 +07:00
Mohamed Boudra 6b210df471 fix(app): stabilize startup connection routing 2026-04-22 13:11:41 +07:00
Mohamed Boudra 9a39ba4be0 Default agent ls to active scope 2026-04-22 12:52:52 +07:00
Mohamed Boudra fc86ce2a5f Tighten Escape agent interrupt shortcut 2026-04-22 12:52:47 +07:00
Mohamed Boudra 6edf19c7c6 fix(app): streamline startup loading states 2026-04-22 12:13:23 +07:00
Mohamed Boudra 80c319dc49 Avoid git refresh for agent status updates 2026-04-22 12:07:57 +07:00
Mohamed Boudra 77c8c91ab5 Fix dev server Ctrl-C shutdown wait 2026-04-22 12:03:46 +07:00
Mohamed Boudra 6503245493 Avoid GitHub self-heal polling without remote 2026-04-22 11:21:37 +07:00
Mohamed Boudra 184902dd0d Merge branch 'perf/startup-rpc-metrics' 2026-04-22 11:03:41 +07:00
Mohamed Boudra 42cdabdf57 Fix optimistic workspace creation on Android 2026-04-22 11:03:35 +07:00
Mohamed Boudra 247983ee87 Improve startup provider snapshots and dev harness 2026-04-22 10:52:19 +07:00
Mohamed Boudra 7b9cc3d423 fix(app/e2e): use xterm buffer for alt-screen exit sync 2026-04-21 23:28:35 +07:00
Mohamed Boudra 244c40a62f test(app): restore e2e playwright suite to green
- Fake gh stub now handles `gh pr view --json <fields>` by exiting 1
  with "no pull requests found for branch", matching the daemon's
  expected no-current-PR path; resolveCurrentPullRequestView no longer
  cascades failures across the suite.
- Rewrite the two post-setup script tests in workspace-setup-streaming
  to exercise explicit launch paths (UI scripts menu + daemon RPC) —
  39db3ea5 intentionally removed automatic post-setup script spawning.
- Harden terminal-alternate-screen synchronization: wait for the probe
  to observe alt-enter and alt-exit plus the final normal-screen marker
  before asserting, so the echoed command no longer races the alt-screen
  transition.
2026-04-21 23:04:57 +07:00
Mohamed Boudra 3fe63d5a2c fix(app,server): discover server-cached setup snapshots across sessions
807cce6a hides the "Show setup" action when there is no workspace setup
snapshot. That broke the case where setup genuinely ran on a different
WebSocket session than the one the browser reconnected with: the snapshot
was cached per-Session, so discovery returned null and the action stayed
hidden.

Share the setup snapshot cache at the websocket-server level and inject
it into every Session. On focus, the workspace screen now requests
fetchWorkspaceSetupStatus when it has no local snapshot; workspaces with
no setup history still return null, preserving 807cce6a's intent.
2026-04-21 23:04:47 +07:00
Mohamed Boudra 1582028902 Cache available editor discovery 2026-04-21 22:39:46 +07:00
Mohamed Boudra 7e7cc1ad56 Contain malformed ACP stdout logging 2026-04-21 22:38:12 +07:00
Mohamed Boudra 27ddfb1ea7 Fix workspace diff stats for behind branches 2026-04-21 22:03:24 +07:00
Mohamed Boudra 807cce6ad9 Hide setup action when no setup ran 2026-04-21 22:03:06 +07:00
Mohamed Boudra 73b28a7f60 Fix notification clicks preserving workspace deck 2026-04-21 21:57:15 +07:00
Mohamed Boudra 8dad423635 fix(app): remove pointer cursor on user message bubbles
The Pressable wrapping user messages is only used for hover detection,
so default to the auto cursor instead of pointer on web.
2026-04-21 21:54:45 +07:00
Mohamed Boudra abaa29e73c ci(app): install playwright browsers before app vitest run
packages/app's vitest config has a browser project backed by playwright
+ chromium; the app-tests job needs the browsers installed the same way
the playwright job already does.
2026-04-21 21:53:23 +07:00
Mohamed Boudra ae2a301cb6 fix(server): reflect terminalId default in workspace script schema test
workspace script schema defaults terminalId to null; include it in the
expected shape of the test's toEqual assertion.
2026-04-21 21:33:39 +07:00
Mohamed Boudra 006d57d546 fix(server): align MCP and model-resolver tests with current API
mcp-server tests invoked registered tools via .handler, but the MCP
SDK exposes the callable as .callback. model-resolver now passes
force: false to fetchModels; widen the spy matcher to match.
2026-04-21 21:29:23 +07:00
Mohamed Boudra c402db8b1c test: add manual terminal perf harness 2026-04-21 20:47:28 +07:00
Mohamed Boudra 6a03873d81 fix: smooth terminal streaming 2026-04-21 20:47:17 +07:00
Mohamed Boudra 39db3ea5ff refactor: simplify worktree script spawning 2026-04-21 20:46:54 +07:00
Mohamed Boudra 79bf5ac3c7 test: add app browser coverage 2026-04-21 20:46:49 +07:00
Mohamed Boudra 051507717c Fix sticky workspace hover card 2026-04-21 18:17:39 +07:00
Mohamed Boudra f3cb19529c Harden agent refresh rescue path 2026-04-21 17:22:50 +07:00
Mohamed Boudra cea97c83b3 Reuse terminals for non-service scripts and track lifecycle via OSC 633
Scripts launched from the UI now run in a dedicated terminal per script
(titled after the script) and reuse the same terminal across re-runs.
Script lifecycle is driven by a new onCommandFinished signal sourced from
OSC 633 command-finished events emitted by the zsh shell integration, so
foreground script exit updates status without killing the terminal.
Script payloads now carry terminalId so the workspace can surface the
associated tab from the scripts dropdown.
2026-04-21 17:12:53 +07:00
Mohamed Boudra 3e2faab7f8 Fix committed diff excluding dirty worktree 2026-04-21 15:02:20 +07:00
Mohamed Boudra ebf8a21c08 Fix TTLCache import and rename schedule provider resolver 2026-04-21 14:19:51 +07:00
Mohamed Boudra 515ba62be6 Persist sidebar collapse state and stabilize Metro port 2026-04-21 14:01:16 +07:00
Mohamed Boudra 32a20cbeea Merge branch 'research/mcp-list-agents-summary' 2026-04-21 13:46:25 +07:00
Mohamed Boudra 9877936d13 feat: require provider/model format and return compact list items 2026-04-21 13:44:55 +07:00
Mohamed Boudra 1a473ed7f3 Persist composer preferences and stabilize hydration 2026-04-21 13:43:22 +07:00
Mohamed Boudra 3832053736 fix: provider-scoped snapshot refresh with self-healing invalidation 2026-04-21 13:14:59 +07:00