Commit Graph

980 Commits

Author SHA1 Message Date
Dhruv Sharma 06cdcd70eb
Merge pull request #1168 from gautamtayal1/session/ao-1
fix(web): remove orchestrator button from orchestrator webpage
2026-04-16 23:24:17 +05:30
Dhruv Sharma 87fb598d87
Merge pull request #1126 from gautamtayal1/fix/spawn-ao-for-opencode
fix (opencode): use local AGENTS.md for OpenCode orchestrator instructions
2026-04-16 18:21:12 +05:30
Adil Shaikh ba77929c93
Merge pull request #1158 from ComposioHQ/feat/issue-1154
fix(cli): stop writing broken yaml when `ao start` runs in a new folder
2026-04-15 15:10:10 +05:30
Gautam Tayal 179c0a6083 fix: add agents.md file for restore command 2026-04-15 13:56:35 +05:30
adil 6d6822e501 refactor(cli): extract shared repo helpers and support GitLab subgroups
- New repo-utils.ts with extractOwnerRepo() and isValidRepoString()
  shared across detectEnvironment, autoCreateConfig, addProjectToConfig
- Remote regex now supports GitLab subgroup paths (group/subgroup/repo)
- Repo validation accepts multi-segment paths (owner/repo and deeper)
- Updated prompt text to mention group/subgroup/repo format
- Updated ProjectConfig.repo docstring to be provider-neutral
- Tests import from shared helpers instead of duplicating regex

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 12:30:32 +05:30
adil bd417aa670 fix(cli): handle undefined return from clack text() prompt
@clack/prompts text() can return undefined when submitted with just
the placeholder value. Guard with typeof check in promptText and
defensive (entered || "") in both callers to prevent .trim() crash.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 12:21:38 +05:30
adil 72e3620b8d test: add tests for optional repo across all changed modules
- detect-env: test GitHub/GitLab HTTPS/SSH remote extraction, unknown
  hosts returning null, missing remote, and non-git directories
- repo-validation: test the anchored regex accepts owner/repo, rejects
  empty, lone slash, missing segments, whitespace, and nested paths
- config-validation: test SCM/tracker inference skipped when repo is
  missing or has no slash, and inferred correctly with owner/repo
- scm-webhooks: test eventMatchesProject returns false when project
  has no repo configured
- orchestrator-prompt: existing test covers repo:undefined → "not configured"
- prompt-builder: existing test covers BASE_AGENT_PROMPT_NO_REPO selection

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 12:06:09 +05:30
adil 536e38b7e6 fix(cli): anchor repo regex and widen remote detection for GitLab
- Anchor repo validation regex with $ to reject trailing junk like
  "acme/repo extra" or "acme/repo#frag" — both prompt locations
- Widen detectEnvironment and addProjectToConfig remote regex to
  match gitlab.com in addition to github.com, so GitLab repos get
  auto-detected owner/repo instead of silently skipping it

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 11:33:07 +05:30
adil 101a725530 fix(test): use vi.spyOn for isHumanCaller after restoreAllMocks
afterEach calls vi.restoreAllMocks() which restores the top-level mock
to the real function. Use vi.spyOn on the module namespace instead of
vi.mocked on the destructured import so the mock survives restoration.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 03:46:27 +05:30
adil e685db9d88 fix(test): mock isHumanCaller as false in autoCreateConfig test
The test has no ownerRepo detected, which triggers the interactive
repo prompt. Mock isHumanCaller to false so the prompt is skipped
in the non-interactive test environment.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 03:43:03 +05:30
Adil Shaikh d9ff7315d4
Merge pull request #1132 from ComposioHQ/feat/issue-1035
fix(core): skip liveness check on spawning sessions to prevent race condition
2026-04-15 03:39:08 +05:30
adil 9db0945b0e fix: address follow-up review comments from @illegalcall
1. Fix ao start <path> regression: when target path differs from cwd,
   run autoCreateConfig on the target (which is a git repo) instead of
   cwd (which may not be). Removes the double-create pattern that added
   a second project entry.

2. Gate remaining PR/CI sections in orchestrator-prompt: PR Takeover,
   PR Review Flow, Bulk Issue Processing, and Monitoring Progress
   details are now wrapped in project.repo checks so repo-less projects
   don't get contradictory instructions.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 03:38:38 +05:30
Adil Shaikh 2bb09498d4
Merge pull request #1159 from ComposioHQ/feat/issue-1150
fix(cli): prevent duplicate YAML entry on already-running `ao start`
2026-04-15 03:38:20 +05:30
Adil Shaikh e612017ebd
Merge pull request #1157 from ComposioHQ/feat/issue-645
fix(cli): kill dashboard child on SIGINT and scan ports in stopDashboard
2026-04-15 03:33:39 +05:30
adil 05a34913e3 fix(cli): address PR review feedback
- Move ensureGit() after path dedup check so already-registered paths
  return early without requiring git
- Use realpathSync for canonical path comparison (resolves symlinks,
  case variants, trailing slashes)
- Bail out with error when both SIGTERM and SIGKILL fail to stop AO
  instead of unconditionally unregistering a live instance
- Rewrite path-dedup test to exercise the path-arg branch via
  AO_CONFIG_PATH, covering addProjectToConfig's dedup lines

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 03:10:23 +05:30
adil a7b0c8567a fix(core): guard lifecycle-manager poll path against spawning race condition
Address review feedback from @illegalcall:

1. Fix canProbeRuntimeIdentity in determineStatus() — the previous
   guard (hasPersistedRuntimeIdentity || status !== spawning) was
   ineffective because spawn writes runtimeHandle to metadata before
   leaving "spawning" status. Simplified to just check status !== spawning.

2. Guard getActivityState exited→killed transition — agent plugins
   return "exited" before the process starts, so spawning sessions
   were being marked killed via the agent activity path too.

3. Add lifecycle-manager tests covering both paths: runtime.isAlive
   false with persisted handle, and agent reporting "exited" activity
   during spawning.

Refs #1035

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 03:09:44 +05:30
adil d63231a6ea fix(test): update autoCreateConfig test to use isGitRepo: true
The test was mocking detectEnvironment with isGitRepo: false, which now
correctly triggers the fail-fast error for non-git directories. Updated
to isGitRepo: true since the test is verifying config generation
defaults, not non-git behavior.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 03:07:12 +05:30
adil c8af50fac2 fix: address all 9 review comments from @illegalcall
1. prompt-builder: gate PR/CI instructions on project.repo — use
   trimmed BASE_AGENT_PROMPT_NO_REPO when no remote configured
2. orchestrator-prompt: gate Quick Start and Available Commands
   sections on project.repo — omit issue/PR commands when absent
3. types.ts: add changeset (minor for ao-core) with migration note
4. config.ts: consistent includes("/") guard for tracker inference
5. start.ts: fail fast with clear error when run in non-git directory
6. start.ts: stricter repo validation regex (requires non-empty
   segments on both sides of slash)
7. start.ts: addProjectToConfig now prompts for repo like
   autoCreateConfig does, with matching warning message
8. scm-webhooks.ts: pre-filter projects without repo in
   findWebhookProjects to skip unnecessary SCM plugin lookups
9. lifecycle-manager.ts: fix GitLab subgroup split — use lastIndexOf
   to correctly handle group/subgroup/repo paths

Closes #1154

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 03:04:12 +05:30
adil 80932f367a fix(cli): address review — use exit handler, verify PIDs, filter kills (#645)
1. Replace SIGINT/SIGTERM handlers with a process `exit` handler to avoid
   conflicting with the shutdown handler that flushes lifecycle state and
   exits with the correct code (130 for SIGINT).

2. Expand dashboard process pattern to match dev mode (next dev, ao-web)
   in addition to production (next-server, start-all.js).

3. Only kill dashboard-matching PIDs from lsof output, leaving unrelated
   co-listeners (sidecars, SO_REUSEPORT) untouched.

4. Use killDashboardOnPort for the first port attempt too, preventing
   blind kills on the configured port when running.json is stale.

5. Add test for mixed-PID filtering on a single port.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 03:01:41 +05:30
Dhruv Sharma 9691e6e6c5
Merge pull request #1215 from illegalcall/fix/codex-session-tracking-1099
Fix Codex session activity parsing for payload JSONL
2026-04-15 01:50:22 +05:30
Dhruv Sharma 49954403ef docs(codex): clarify token-accounting precedence in session parser
Token sources in streamCodexSessionData are precedence-ordered via `continue`.
`total_token_usage` is a cumulative snapshot (overwrite) while the others are
per-turn deltas (accumulate) — document this so a future reader doesn't "fix"
the asymmetry and break cumulative totals.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 01:45:16 +05:30
adil 47e14782d1 fix(cli): clean up signal listeners when dashboard exits
Remove SIGINT/SIGTERM/exit listeners from process when the dashboard
child exits, preventing listener accumulation if runStartup is called
multiple times in the same process.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 22:34:55 +05:30
adil 9ae7c00cef test: add coverage for optional repo and ignore interactive prompt lines
- Add test for orchestrator-prompt with repo: undefined (verifies
  "not configured" fallback instead of showing literal "undefined")
- Add c8 ignore for interactive prompt code in autoCreateConfig and
  promptText (same pattern as existing promptConfirm/promptSelect)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 22:13:03 +05:30
adil 4c31685584 fix(cli): prompt user for repo when remote is not auto-detected
Instead of silently omitting the repo field when no GitHub remote is
found, interactively ask the user to enter their owner/repo. This way
users on GitLab or other hosts can provide the correct value during
first-run setup rather than having to manually edit the yaml afterward.

If the user skips the prompt, the config is still valid (repo remains
optional) with a clear warning about what features are unavailable.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 22:13:03 +05:30
adil 2cf9128101 refactor: clean up redundant requireRepo calls and nullish coalescing
- Use ?? instead of || for ownerRepo fallback (semantically correct for
  null-to-undefined conversion)
- Extract requireRepo() result into a local variable in tracker-gitlab's
  updateIssue and issueUrl to avoid redundant validation calls

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 22:13:02 +05:30
adil 7de9a981fe fix(core): guard tracker inference for projects without repo
Skip inferring tracker plugin when project.repo is undefined, matching
the existing SCM inference guard. Without this, tracker operations would
throw via requireRepo() for projects with no remote configured.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 22:13:01 +05:30
adil 17ea240f68 fix(cli): stop writing broken yaml when `ao start` runs in a new folder
- Make `repo` field optional in ProjectConfig and Zod schema so projects
  without a detected GitHub remote can still load and run
- Remove placeholder `repo: "owner/repo"` from autoCreateConfig() and
  addProjectToConfig() — omit the field entirely when no remote is found
- Always use actual workingDir for `path` instead of unreliable `~/<projectId>`
  fallback for non-git directories
- Add null guards for `project.repo` across SCM plugins, tracker plugins,
  lifecycle manager, webhooks, and prompt builders to prevent crashes when
  repo is not configured

Closes #1154

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 22:13:01 +05:30
adil e666c88098 fix(cli): address review — verify dashboard process before kill, restore exit on SIGINT
1. Port scan now uses killDashboardOnPort() which checks `ps -p <pid> -o args=`
   for next-server/start-all.js before killing, avoiding collateral damage to
   unrelated services on nearby ports.

2. SIGINT/SIGTERM handlers now call process.exit() after killing the child,
   restoring default exit behavior so Ctrl+C doesn't leave the parent hung
   if the child is unresponsive.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 22:12:58 +05:30
adil 4958512d9e test(cli): add coverage for port scan fallback and c8 ignore for signal handlers
Adds test for stopDashboard finding an orphaned dashboard on a reassigned
port via the port-range scan fallback. Marks signal handler body with
c8 ignore since it only fires on process termination.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 22:12:57 +05:30
adil e620a182c9 fix(cli): kill dashboard child on SIGINT and scan ports in stopDashboard (#645)
Two bugs caused `ao stop` to fail when the dashboard port was auto-reassigned:

1. Ctrl+C did not propagate to the dashboard child process because Node.js
   doesn't guarantee signal forwarding. Added SIGINT/SIGTERM/exit handlers
   in runStartup() to explicitly kill the dashboard child.

2. stopDashboard() only checked the configured port, missing orphaned
   dashboards on reassigned ports. Refactored into killOnPort() helper
   and added a port-range scan fallback (up to MAX_PORT_SCAN ports).

Closes #645

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 22:12:56 +05:30
adil 24a29194eb fix(cli): fix flaky multi-project test by setting non-interactive caller
The "errors when multiple projects and no arg" test expects the error
path (not the prompt path) in resolveProject. Set mockIsHumanCaller
to false so the test reliably hits the non-interactive error branch.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 17:42:47 +05:30
adil f5818c8b88 test(cli): add tests for already-running detection and path-based dedup
Cover the moved isAlreadyRunning() check (non-TTY exit, quit, open,
restart, new orchestrator) and the path-based dedup guard in
addProjectToConfig(). Uses hoisted mocks for isAlreadyRunning,
isHumanCaller, promptSelect, unregister, and waitForExit to ensure
proper test isolation.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 17:42:47 +05:30
adil cea7bfa51c fix(cli): prevent duplicate YAML entry when `ao start` detects already-running instance
Move the `isAlreadyRunning()` check before any config-mutating operations
so that running `ao start` on an already-running project no longer writes
a phantom duplicate entry to agent-orchestrator.yaml. The "new orchestrator"
choice is deferred via a flag until after config is loaded.

Also add path-based deduplication in `addProjectToConfig()` so that a
project whose resolved path already exists in config is returned as-is
instead of being appended with a numeric suffix.

Closes #1150

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 17:42:47 +05:30
Dhruv Sharma ad10dbf7aa
Merge pull request #1119 from harshitsinghbhandari/feat/1072
feat(power): prevent macOS idle sleep while AO is running
2026-04-14 17:26:58 +05:30
Harsh Batheja 95fbecc379
refactor(cli): remove lifecycle-worker subprocess, poll in-process (#1186)
* refactor(cli): remove lifecycle-worker subprocess model, run polling in-process

Replaces the per-project `ao lifecycle-worker` subprocess with an in-process
polling loop managed inside `lifecycle-service`. All registered projects are
now polled from the single long-lived `ao start` process.

- Drops the `lifecycle-worker` command and its registration.
- Rewrites `lifecycle-service` around a `Map<projectId, ActiveLoop>`,
  with SIGINT/SIGTERM/beforeExit graceful shutdown.
- Removes PID-file coordination (PID file, log file, status, etc.) —
  these only existed to track subprocess state.
- Per-project error isolation is preserved: the core lifecycle manager's
  `pollAll()` already catches per-cycle errors, and stop failures in one
  project can't prevent others from stopping.
- Updates `start`/`spawn` callers and tests to drop the PID/logFile shape.
- Adds `lifecycle-service.test.ts` covering idempotency, unknown projects,
  error isolation across projects, and graceful stop-all.

Closes #1185

* fix(cli): address bugbot review on lifecycle-service in-process refactor

- `ao spawn` / `ao batch-spawn` no longer call `ensureLifecycleWorker`.
  That call used to start `setInterval` polling in the one-shot spawn
  process, which (a) kept the CLI alive forever after the session spawned
  and (b) duplicated polling already running in `ao start`. Replaced with
  a `warnIfAONotRunning()` helper that checks `running.json` and prints a
  hint if the orchestrator isn't up.
- `ao stop` no longer calls `stopLifecycleWorker`. That call always ran
  against a fresh in-memory map (stop is a separate process from start),
  so it always returned false and printed "Lifecycle worker not running"
  misleadingly. SIGTERM to the `ao start` PID already triggers the shared
  shutdown handler in `lifecycle-service`, which stops every loop.
- Drop duplicated shutdown closure inside `registerSignalsOnce` — signal
  handlers now reference `stopAllLifecycleWorkers` directly.
- Update tests accordingly: spawn.test.ts mocks `running-state.getRunning`,
  start.test.ts drops `stopLifecycleWorker` expectations.

* fix(cli): drop SIGINT/SIGTERM listeners from lifecycle-service

Installing listeners for those signals removes Node.js's default
"exit on signal" behavior (per Node docs: "its default behavior will
be removed — Node.js will no longer exit"). Since the registered
listener doesn't call process.exit(), the `ao start` process would
hang on SIGTERM with the setInterval timer keeping the event loop
alive forever — effectively breaking `ao stop`.

Default signal handling terminates the process cleanly; the OS
reclaims the interval timer and dashboard child. `stopAllLifecycleWorkers`
stays exported for callers that want explicit cleanup before exit.

* fix(cli): project-scoped spawn warning + flush lifecycle health on exit

Addresses reviewer feedback on PR #1186:

- `warnIfAONotRunning` now takes a projectId and warns not only when no
  AO is running, but also when the running instance isn't polling the
  target project (e.g. `ao start A` then `ao spawn` in B left users
  silent about the fact that B wasn't being polled).
- `running.json` now records only the project this `ao start` actually
  polls, not every project in config. Previously this list was a lie —
  `ensureLifecycleWorker` is called for the selected project only.
- `ao start` installs SIGINT/SIGTERM handlers that call
  `stopAllLifecycleWorkers()` (flushing per-project "stopped" health
  state) and then `process.exit()`. Installing the handler safely
  requires an explicit exit because SIGINT/SIGTERM listeners remove
  Node's default exit behavior.

* fix(cli): remove dead stopLifecycleWorker, add missing test mock

Addresses bugbot comments on PR #1186:

- Delete `stopLifecycleWorker` from `lifecycle-service.ts`. It was only
  called from `ao stop` in the old subprocess model; in the in-process
  model, SIGTERM to the `ao start` pid + the shutdown handler in
  `start.ts` covers cleanup. No production caller remains.
- Add `stopAllLifecycleWorkers: vi.fn()` to `start.test.ts`'s
  `lifecycle-service.js` mock. Without it, `vi.mock` replaced the module
  and the named import resolved to undefined; the shutdown handler's
  try/catch would silently swallow the resulting TypeError, hiding any
  regression in how shutdown is wired.
- Update `lifecycle-service.test.ts` to drop references to the removed
  export (one test removed, one repurposed as a no-op smoke test for
  `stopAllLifecycleWorkers` against an empty active map).
2026-04-14 17:23:33 +05:30
Dhruv Sharma 3540e512b6
Merge pull request #1219 from ComposioHQ/feat/issue-1209
fix(web): link passing CI check chips to their check run URL
2026-04-14 09:58:40 +05:30
i-trytoohard ac5fb3121d
fix(web): add restore button to session detail page for killed/terminated sessions (#1207)
Fixes #1205

## Summary
- Added Restore button to SessionTopStrip component (shows when session is terminal + restorable)
- Replaced no-op Kill button with actual kill handler
- Added restore handler that calls POST /api/sessions/:id/restore
- Reuses existing done-restore-btn styling from SessionCard
- Restorable = terminal status AND not 'merged'

## Test
1. Kill a session via CLI
2. Navigate to /sessions/<id>
3. Verify Restore button appears (not Kill)
4. Click Restore → session should restore and page reloads
5. Verify merged sessions do NOT show Restore button
2026-04-13 23:50:04 +05:30
Ashish Huddar 16aa089b91 fix(web): link passing CI check chips to their check run URL
Passing CI check chips in the session kanban card were rendered as
plain <span> elements, so clicking them did nothing even though
check.url was available in DashboardCICheck. Wrap each chip in an
<a> tag when check.url is present, matching the pattern already
used by CICheckList in CIBadge.tsx. Stop click propagation so the
chip click does not bubble up to the card's navigation handler.

Also fix a pre-existing broken test from #1218 that still expected
the old terminal link href without the #session-terminal-section
anchor, which was blocking the test suite.

Fixes #1209
2026-04-13 23:46:48 +05:30
i-trytoohard f22d2d9ccc
fix(web): terminal button deep-links to terminal section (#1218)
Previously both the 'terminal' button and 'View current context →' link
on the kanban card navigated to the same session detail page without
distinction. The terminal button now links to #session-terminal-section
anchor, which already exists in SessionDetail.tsx.

Fixes #1217

Co-authored-by: AO Bot <ao-bot@composio.dev>
2026-04-13 23:40:41 +05:30
Dhruv Sharma 426eb730eb
Merge pull request #1142 from yyovil/fix/1140-terminal-fullscreen-upstream
fix(web): fullscreen terminal does not occupy the full viewport
2026-04-13 21:54:56 +05:30
Dhruv Sharma ab1e4fb069
Merge pull request #1180 from yyovil/add/type-resolution
Add node type resolution for non-web packages
2026-04-13 19:56:36 +05:30
Dhruv Sharma 64b6a2ec72 fix(codex): address cursor bugbot comments on readJsonlPrefixLines
Use a single StringDecoder across reads so multi-byte UTF-8 sequences
that straddle the 8KB chunk boundary buffer correctly instead of
producing U+FFFD replacement characters that break JSON.parse.

Also fix the test mock: makeFakeFileHandle now advances an internal
cursor and returns bytesRead: 0 at EOF. The prior mock copied from
offset 0 every call, which would infinite-loop readJsonlPrefixLines
for any line larger than the 8192-byte chunk size.

Add a regression test using 3,000 CJK characters (9,000 bytes of
payload) to exercise the chunk boundary path.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-13 19:23:29 +05:30
Dhruv Sharma df9f3c8b5d fix(codex): classify activity by payload.type for wrapped event_msg
Real Codex sessions emit records like
`{"type":"event_msg","payload":{"type":"error",...}}` and
`{"type":"event_msg","payload":{"type":"approval_request",...}}`.
readLastJsonlEntry only exposed the top-level `type`, so the codex
plugin's activity switch matched `event_msg` and decayed to ready/idle,
never surfacing `blocked` or `waiting_input`. The approval_request/error
branches were dead code for payload-wrapped sessions, which is the exact
format this PR series is migrating to.

- readLastJsonlEntry now returns payloadType alongside lastType.
- Codex getActivityState prefers payloadType when present and classifies
  task_started/agent_reasoning as active, task_complete as ready, and
  the approval/error variants as waiting_input/blocked.
- New tests cover the payload-wrapped approval_request, exec_approval_request,
  error, task_started, and task_complete cases end-to-end.
- Core utils gains coverage for payloadType extraction and null fallbacks.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-13 18:53:50 +05:30
yyovil 9bed49d453 fix: scope node types to node packages 2026-04-13 18:25:21 +05:30
Dhruv Sharma 4ab844e47f Fix Codex session activity parsing 2026-04-13 16:45:57 +05:30
Dhruv Sharma e5e9114131
Merge pull request #1203 from ComposioHQ/cleanup 2026-04-13 14:00:31 +05:30
Dhruv Sharma 59f279d183
Merge pull request #1204 from ComposioHQ/cleanup-1 2026-04-13 14:00:10 +05:30
Dhruv Sharma 6ad5d5ba10
Delete DESIGN-OPENCLAW-PLUGIN.md 2026-04-13 13:16:28 +05:30
Dhruv Sharma 1e74b345fe
Delete DASHBOARD_FIXES_SUMMARY.md 2026-04-13 13:15:47 +05:30
adil 8ff258213b fix(core): update comment and add regression test for spawning guard
Address review feedback:
- Update comment in enrichSessionWithRuntimeState to reflect the
  spawning exception instead of saying "regardless of session status"
- Add regression test verifying isAlive() is not called for spawning
  sessions and status remains "spawning" (not falsely set to "killed")

Refs #1035

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 12:59:17 +05:30