Commit Graph

405 Commits

Author SHA1 Message Date
Gautam Tayal ffcf5ea8bb feat(workspace): enhance worktree creation with remote branch resolution 2026-03-29 12:51:46 +05:30
suraj_markup 677df4b4f2
Merge pull request #754 from gautamtayal1/fix/cli-prompt-multi-projects
refactor(cli): prompt user when multiple projects are configured
2026-03-29 03:51:57 +05:30
Ashish Huddar 8d16049222 fix: correct mismatched status colors after light/dark token swap
- Light mode --color-status-ready: #5B7EF8 → #5e6ad2 (DESIGN.md specifies darker shade for light backgrounds)
- Light mode --color-tint-red: rgba(207,34,46,...) → rgba(220,38,38,...) to match new #dc2626
- Dark mode --color-tint-red: rgba(255,123,114,...) → rgba(239,68,68,...) to match new #ef4444
- ActivityDot.tsx: update hardcoded bg tints — active gets green rgba(34,197,94,0.1), ready gets blue rgba(91,126,248,0.1)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-29 00:42:34 +05:30
Ashish Huddar f4ba0fb64d implement design system: Geist Sans, new accent tokens, GPU-composited dot pulse
- Replace IBM Plex Sans/Mono with Geist Sans (keep JetBrains Mono)
- Update accent: #5e6ad2 → #5B7EF8 (blue), add amber respond/cyan review status tokens
- Update status colors: working=green #22c55e, ready=blue #5B7EF8, error=red #ef4444
- Add --radius-base: 2px; apply 2px border-radius to session cards and orchestrator buttons
- Replace box-shadow activity-pulse with GPU-composited dot-ring pseudo-element (.dot-pulse)
- Remove ready-rail-breathe and ready-sheen keyframes (decorative anxiety, high perf cost)
- Update card entrance: slide-up uses 8px translateY and spring easing cubic-bezier(0.16,1,0.3,1)
- Cap nav backdrop-filter at blur(12px)
- Add contain: layout style paint to session cards
- Pulse animation min-opacity 0.4→0.6

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-29 00:10:28 +05:30
Gautam Tayal b010e322e0 fix 2026-03-28 21:47:31 +05:30
Gautam Tayal e03d22871e fix 2026-03-28 21:46:16 +05:30
Gautam Tayal db7a7039e9 fix 2026-03-28 21:41:51 +05:30
Gautam Tayal 3860a42424 fix 2026-03-28 21:40:21 +05:30
Gautam Tayal b83347402b fix 2026-03-28 13:58:41 +05:30
Gautam Tayal 8da1c2e54f fix 2026-03-28 13:18:10 +05:30
Gautam Tayal 71d7411ada refactor(cli): update project resolution to prompt user for selection in multi-project scenarios 2026-03-28 13:10:10 +05:30
harshitsinghbhandari 5f7a3d50cb fix: comments fixed 2026-03-28 03:15:35 +05:30
harshitsinghbhandari 2a7c4a3f57 phase3-done 2026-03-28 02:57:53 +05:30
Dhruv Sharma a26b0bc5c5
Merge pull request #728 from ComposioHQ/feat/724
refactor(core): decompose session-manager.test.ts into modular test files
2026-03-28 02:01:22 +05:30
Dhruv Sharma ff48b052a8
Merge pull request #720 from harshitsinghbhandari/patch-1
feat(core): extract shared test utilities and migrate lifecycle-manager tests
2026-03-28 00:51:58 +05:30
harshitsinghbhandari 47fa76c0de fix: latest issue 2026-03-27 22:34:05 +05:30
Dhruv Sharma c487b40919
Merge pull request #735 from ruskaruma/fix/mandate-ao-cli-in-prompt
fix(core): mandate ao send and ban raw tmux in orchestrator prompt
2026-03-27 22:16:35 +05:30
ruskaruma b65cc702be fix: correct ao send --no-wait wording per review 2026-03-27 20:50:13 +05:30
harshitsinghbhandari 540dad772b fix: comments from #720 fixed 2026-03-27 20:32:20 +05:30
Harshit Singh Bhandari 01b93706f4
Merge pull request #3 from ComposioHQ/main
merge
2026-03-27 19:30:27 +05:30
ruskaruma c975f952ff fix(core):mandate ao send and ban raw tmux (#340) 2026-03-27 12:28:02 +05:30
Dhruv Sharma 5933991252
Merge pull request #631 from illegalcall/feat/openclaw-integration
feat: OpenClaw plugin, AO skill, Discord notifier, and setup wizard
2026-03-27 09:48:25 +05:30
Dhruv Sharma 8a35384657 fix: resolve lint errors in openclaw-plugin and notifier-openclaw
- Add typed interfaces (PluginApi, PluginEvent, CommandContext, CommandResult)
  to replace `any` types in openclaw-plugin/index.ts
- Replace `== null` with strict equality checks (eqeqeq)
- Attach `{ cause: err }` to rethrown ECONNREFUSED error in notifier-openclaw
  to satisfy preserve-caught-error rule

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-27 02:36:24 +05:30
Ashish Huddar af6c4c5add
Merge pull request #634 from ComposioHQ/feat/issue-633
chore(web): mobile-responsive layout for dashboard and session views
2026-03-27 01:44:07 +05:30
Dhruv Sharma b619461470 fix: assign 429 error to lastError so exhausted rate-limit throws immediately
Without this, the catch block's `err === lastError` identity check fails and
the error is absorbed into the retry loop instead of propagating.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-27 01:42:59 +05:30
Dhruv Sharma 373654f4e1 fix yaml test 2026-03-27 01:41:08 +05:30
Ashish Huddar c32fb6a03c Fix session polling and BottomSheet freshness 2026-03-27 01:38:54 +05:30
Ashish Huddar 8ce7366b82 Import useRef for session detail page 2026-03-27 01:34:13 +05:30
Ashish Huddar ada469556a Fix session detail project polling and orchestrator response 2026-03-27 01:27:38 +05:30
Ashish Huddar c008c3c4c2 Refresh bottom sheet session data and update tests 2026-03-27 00:32:52 +05:30
Ashish Huddar 24a293d811 Handle send errors and stabilize script tests 2026-03-27 00:25:10 +05:30
AO Bot 2eedb613ad refactor(core): decompose session-manager.test.ts into modular test files (#724)
The monolithic 5,032-line session-manager.test.ts has been split into
focused, domain-specific files to improve maintainability and enable
parallel test execution.

New structure:
- session-manager/test-utils.ts - shared mock factories and test setup
- session-manager/opencode-helpers.ts - parameterized shell mock installers
- session-manager/spawn.test.ts - 41 spawn tests
- session-manager/spawn-orchestrator.test.ts - 31 spawnOrchestrator tests
- session-manager/query.test.ts - 19 list + get tests
- session-manager/lifecycle.test.ts - 23 kill + cleanup tests
- session-manager/communication.test.ts - 18 send + remap tests
- session-manager/restore.test.ts - 19 restore tests
- session-manager/claim-pr.test.ts - 19 claimPR + PluginRegistry + isIssueNotFoundError tests

Total test count preserved at 174. Zero changes to core logic.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 18:28:00 +00:00
Ashish Huddar 5b1f3625a5 Reset mobile view-all state and surface send errors 2026-03-26 23:37:51 +05:30
Dhruv Sharma ecf4848e9b fix: prevent Discord retry counter compounding on persistent 429s
When rateLimitRetries was exhausted, a 429 fell through to the normal
error path where isRetryableHttpStatus(429)=true caused it to also
consume the error retry budget — giving 2×retries total attempts.

Now throws immediately when rate-limit budget is exhausted so the two
counters remain independent: up to `retries` rate-limit waits, then
up to `retries+1` attempts for genuine errors (5xx), never compounding.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 23:26:25 +05:30
Dhruv Sharma 62ecad06b1 fix: address final CodeRabbit PR review findings
- openclaw-probe.ts: fix trailing ": " when response body is empty —
  use conditional interpolation instead of .trim() on the full string
- doctor.ts: split connectivity check and test-notify into separate
  try-catch blocks with distinct error messages so failures are
  attributed correctly ("Notifier connectivity check failed" vs
  "Sending test notifications failed")

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 23:17:42 +05:30
Dhruv Sharma 28bb9aa6b7 fix: apply minimum wait for Discord 429 without Retry-After header
Previously, a 429 with no Retry-After header fell through to response.text()
with no explicit wait, relying on the generic exponential backoff. Now all 429
responses are handled uniformly via rateLimitRetries: use the Retry-After
value when present, otherwise fall back to retryDelayMs as the minimum wait.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 23:11:58 +05:30
Dhruv Sharma d0c0b9b0d0 fix: don't burn error retry budget on Discord 429 Retry-After waits
Each 429 with a Retry-After header was consuming one slot from the error
retry budget. With retries=3, three sustained rate-limits would exhaust
retries before any real error retry could fire.

Track rate-limit waits with a separate rateLimitRetries counter (capped at
retries to prevent infinite loops) and decrement attempt before continue so
the for-loop increment cancels out and the error retry budget is preserved.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 23:07:17 +05:30
Dhruv Sharma 8896187b76 fix: preserve existing notifiers when creating default notificationRouting
When notificationRouting didn't exist, the setup wizard created a default
that included desktop only for urgent/action and dropped it for warning/info.
Users with defaults.notifiers: [desktop] would silently lose desktop
notifications for lower-priority events since notificationRouting takes
precedence over defaults.notifiers.

Now seeds all four priority levels from the existing defaults.notifiers array
(plus openclaw) so no previously-configured notifier is lost.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 22:50:15 +05:30
Ashish Huddar 4a842d4742 Fix ao launcher linking and mobile toast offset 2026-03-26 22:47:25 +05:30
Dhruv Sharma 21412dc725 fix: address Cursor Bugbot review comments (round 2)
- Fix YAML project key detection for inline comments: trimmed.endsWith(":")
  fails on valid YAML like "my-app: # description" — strip inline comments
  before the check so getConfiguredRepos works with commented project keys
- Fix Discord retry backoff skipping after 429+5xx sequence: the skipNextBackoff
  flag caused exponential backoff to be skipped on the attempt AFTER a 429,
  even when that attempt failed with an unrelated 5xx error. Removed the flag
  entirely — continue already skips backoff naturally for the 429 iteration

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 22:39:28 +05:30
Ashish Huddar e1867d0bef Preserve orchestrator ID when session project changes 2026-03-26 22:38:30 +05:30
Ashish Huddar 128c9101c8 Handle dashboard send failures and optimize session polling 2026-03-26 22:28:31 +05:30
Dhruv Sharma 8b491d4441 fix: address Cursor Bugbot review comments
- Add module-level sanitizeCliArg() and apply to all AI tool execute
  handlers (ao_spawn, ao_batch_spawn, ao_send, ao_kill, ao_session_restore,
  ao_review_check, ao_session_cleanup) to prevent CLI flag injection from
  LLM-supplied params
- Clear batchSpawnFollowUpTimeouts in board scanner stop handler too —
  previously leaked when healthPollIntervalMs <= 0 (health service never starts)
- Exclude commented lines from shell profile token regex with (?!\s*#)
  negative lookahead to avoid replacing # OPENCLAW_HOOKS_TOKEN=... lines
- Resolve \${ENV_VAR} placeholders in doctor's OpenClaw token check —
  ao setup openclaw writes the literal string "\${OPENCLAW_HOOKS_TOKEN}"
  which was being sent as the Bearer token instead of the actual value

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 22:25:46 +05:30
Dhruv Sharma c8ba03bb8d fix: fail hard when --test-notify is set but config load fails
When `ao doctor --test-notify` is requested and config loading throws,
use fail() instead of warn() so the process exits non-zero. Consistent
with the existing behavior when no config file exists at all.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 22:02:52 +05:30
Dhruv Sharma 570f3b588f fix: address CodeRabbit review comments
- Use consistent regex for OPENCLAW_HOOKS_TOKEN detection and replacement
  in shell profile (prevents silent no-ops for non-exported lines)
- Broaden token detection regex to match lines with/without export prefix
  and leading whitespace
- Fix misleading --non-interactive help text (token is auto-generated)
- Fix doctor.ts catch block to say "Notifier checks failed" not "load config"
- Fix 204 mock in Discord notifier test (ok: true, not ok: false)
- Fix weak no-duplicate assertion in setup.test.ts (actually count list items)
- Add discord to notifier options comment in config-instruction.ts
- URL-encode threadId in Discord webhook URL construction
- Add aoCwd to required[] in openclaw.plugin.json configSchema
- Add HTTPS recommendation comment to agent-orchestrator.yaml.example
- Add rimraf for cross-platform clean script in notifier-discord
- Rename "Recommended Settings" to "Required: Disable Conflicting Built-in Skills"
  with explicit warning in docs
- Add /ao setup post-setup reminder to manually disable coding-agent skill
- Fix misleading README non-interactive example wording

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-26 21:58:19 +05:30
Harshit Singh Bhandari 5449acd04e
Add mock implementation for workspace list function 2026-03-26 19:30:41 +05:30
Harshit Singh Bhandari 532fdd22a4
Remove unused imports from lifecycle-manager test 2026-03-26 19:24:05 +05:30
AO Bot 0d4ddcc8c7 feat(core): extract shared test utilities and migrate lifecycle-manager tests (#715)
Create test-utils.ts with reusable factories (createTestEnvironment,
createMockPlugins, createMockRegistry, createMockSCM, createMockNotifier,
createMockSessionManager, makeSession, makePR) and refactor
lifecycle-manager.test.ts to use them, reducing setup boilerplate by >70%.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 13:41:43 +00:00
github-actions[bot] 09dbf806d3 chore: version packages 2026-03-26 12:18:20 +00:00
suraj-markup aa7e360898 refactor(cli): centralize agent runtime selection logic 2026-03-26 15:48:22 +05:30