Commit Graph

474 Commits

Author SHA1 Message Date
Ashish Huddar 0cfae4962b chore: remove .gstack/ from .gitignore
~/.gstack/ is a home directory path, never tracked by the repo.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-28 23:57:55 +05:30
Ashish Huddar d87d79b970 feat: add comprehensive design system (DESIGN.md)
Complete design system created via /design-consultation with competitive
research (Conductor.build, T3 Code, OpenAI Codex, Emdash) and 4 design
voices (primary, Codex CLI, Claude subagent, Emil Kowalski design eng).

Key decisions: Geist Sans + JetBrains Mono (2 fonts), dual accent system
(blue #5B7EF8 + amber #f1be64), 2px base border-radius, GPU-composited
animations, status colors with distinct semantic roles.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 23:55:24 +05:30
Dhruv Sharma b1b32adb0f
Merge pull request #750 from harshitsinghbhandari/phase3-refactor
Last Phase of Tests Refactor
2026-03-28 10:14:40 +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 2345385728
Merge pull request #749 from illegalcall/feat/openclaw-integration
fix: minor name update
2026-03-28 02:48:39 +05:30
Dhruv Sharma 1bc25622b6 fix: minor name update 2026-03-28 02:42:16 +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 b49c69ba78 fix: last 10 commits for secrets check 2026-03-27 22:38: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 3f4a08b251
Merge pull request #732 from ComposioHQ/feat/721
Fix Gitleaks errors and checksum issues.
2026-03-27 11:14:31 +05:30
copilot-swe-agent[bot] 91117f9e36
ci: fix gitleaks checksum filename, install dir, fetch-depth, and PR SHA fetch
Agent-Logs-Url: https://github.com/ComposioHQ/agent-orchestrator/sessions/87c2a42f-535a-4051-ab50-1f3fcc5aac1d

Co-authored-by: harshitsinghbhandari <212377671+harshitsinghbhandari@users.noreply.github.com>
2026-03-27 05:26:08 +00:00
Harshit Singh Bhandari c36440df62
Merge pull request #731 from harshitsinghbhandari/feat/721
ci: add gitleaks checksum verification and optimize fetch-depth
2026-03-27 10:45:53 +05:30
harshitsinghbhandari c762fa1453 ci: add gitleaks checksum verification and optimize fetch-depth 2026-03-27 10:08:56 +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
Dhruv Sharma 88b18722ca commited pnpm lock 2026-03-27 02:27:01 +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
AO Bot 70fe5369c3 fix: use correct gitleaks --log-opts syntax with commit range (#721)
The previous approach incorrectly used --since-commit (not a valid
gitleaks flag) and --log-opts= (equals syntax not supported). Fix by
using --log-opts with a space separator and a proper git commit range
(base..head) for PR scans.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 14:25:52 +00:00
AO Bot f0bcb7b758 fix: replace gitleaks-action v2 with free CLI to fix org license error (#721)
The gitleaks/gitleaks-action@v2 requires a paid license for organization
repos, causing the Security workflow to fail on every PR. Replace it with
a direct `gitleaks detect` CLI invocation which is free and doesn't
require a license key.

On PRs, the scan is scoped to only the commits in the PR (via
--since-commit) for faster feedback. On push/schedule, it scans the
full repo history.

Closes #721

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 14:23:06 +00:00
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