chore: rename @composio scope to @aoagents across all packages

Renames all npm package scopes from @composio/* to @aoagents/* and
updates GitHub repo references from ComposioHQ/agent-orchestrator
to aoagents/ao throughout the codebase.

- All package.json names and dependencies
- README badges, links, and install instructions
- Documentation references
- Changeset config
- Source code imports and test files
This commit is contained in:
Prateek 2026-04-07 19:59:51 +05:30
parent 48d655d932
commit f6841f37a8
202 changed files with 612 additions and 612 deletions

View File

@ -5,31 +5,31 @@
"fixed": [],
"linked": [
[
"@composio/ao-core",
"@composio/ao-cli",
"@composio/ao",
"@composio/ao-plugin-runtime-tmux",
"@composio/ao-plugin-runtime-process",
"@composio/ao-plugin-agent-claude-code",
"@composio/ao-plugin-agent-codex",
"@composio/ao-plugin-agent-aider",
"@composio/ao-plugin-agent-opencode",
"@composio/ao-plugin-workspace-worktree",
"@composio/ao-plugin-workspace-clone",
"@composio/ao-plugin-tracker-github",
"@composio/ao-plugin-tracker-linear",
"@composio/ao-plugin-scm-github",
"@composio/ao-plugin-notifier-desktop",
"@composio/ao-plugin-notifier-slack",
"@composio/ao-plugin-notifier-webhook",
"@composio/ao-plugin-notifier-composio",
"@composio/ao-plugin-terminal-iterm2",
"@composio/ao-plugin-terminal-web",
"@composio/ao-web"
"@aoagents/ao-core",
"@aoagents/ao-cli",
"@aoagents/ao",
"@aoagents/ao-plugin-runtime-tmux",
"@aoagents/ao-plugin-runtime-process",
"@aoagents/ao-plugin-agent-claude-code",
"@aoagents/ao-plugin-agent-codex",
"@aoagents/ao-plugin-agent-aider",
"@aoagents/ao-plugin-agent-opencode",
"@aoagents/ao-plugin-workspace-worktree",
"@aoagents/ao-plugin-workspace-clone",
"@aoagents/ao-plugin-tracker-github",
"@aoagents/ao-plugin-tracker-linear",
"@aoagents/ao-plugin-scm-github",
"@aoagents/ao-plugin-notifier-desktop",
"@aoagents/ao-plugin-notifier-slack",
"@aoagents/ao-plugin-notifier-webhook",
"@aoagents/ao-plugin-notifier-composio",
"@aoagents/ao-plugin-terminal-iterm2",
"@aoagents/ao-plugin-terminal-web",
"@aoagents/ao-web"
]
],
"access": "public",
"baseBranch": "main",
"updateInternalDependencies": "patch",
"ignore": ["@composio/ao-integration-tests"]
"ignore": ["@aoagents/ao-integration-tests"]
}

View File

@ -17,7 +17,7 @@ Agent Orchestrator is a TypeScript monorepo for managing parallel AI coding agen
- **Security**: Watch for command injection (especially in shell/tmux/git commands), AppleScript injection, GraphQL injection, unsanitized user input in API routes
- **Shell execution**: Prefer `execFile` over `exec` to avoid shell injection. Flag any use of `exec` or string concatenation in shell commands
- **Plugin pattern**: Plugins must export `{ manifest, create } satisfies PluginModule<T>` with types from `@composio/ao-core`
- **Plugin pattern**: Plugins must export `{ manifest, create } satisfies PluginModule<T>` with types from `@aoagents/ao-core`
- **Type safety**: Flag `as unknown as T` casts, unguarded `JSON.parse`, and type re-declarations that should import from core
- **Resource leaks**: Check for uncleared intervals/timeouts, uncleaned event listeners, missing `cancel()` on streams
- **ESM compliance**: Imports must use `.js` extension for local files, `node:` prefix for builtins

View File

@ -36,11 +36,11 @@ jobs:
cache: pnpm
- run: pnpm install --frozen-lockfile
# Build all non-web packages
- run: pnpm -r --filter '!@composio/ao-web' build
- run: pnpm -r --filter '!@aoagents/ao-web' build
# Typecheck all non-web packages
- run: pnpm -r --filter '!@composio/ao-web' typecheck
- run: pnpm -r --filter '!@aoagents/ao-web' typecheck
# Build web (Next.js build includes its own typecheck)
- run: pnpm --filter @composio/ao-web build
- run: pnpm --filter @aoagents/ao-web build
test:
name: Test
@ -53,7 +53,7 @@ jobs:
node-version: 20
cache: pnpm
- run: pnpm install --frozen-lockfile
- run: pnpm -r --filter '!@composio/ao-web' build
- run: pnpm -r --filter '!@aoagents/ao-web' build
- run: pnpm test
test-web:
@ -71,6 +71,6 @@ jobs:
- name: Start tmux server
run: tmux start-server
- run: pnpm install --frozen-lockfile
- run: pnpm -r --filter '!@composio/ao-web' build
- run: pnpm -r --filter '!@aoagents/ao-web' build
- name: Run web server tests (unit + integration)
run: pnpm --filter @composio/ao-web exec vitest run server/__tests__/
run: pnpm --filter @aoagents/ao-web exec vitest run server/__tests__/

View File

@ -61,19 +61,19 @@ jobs:
run: tmux start-server
- run: pnpm install --frozen-lockfile
- run: pnpm -r --filter '!@composio/ao-web' build
- run: pnpm -r --filter '!@aoagents/ao-web' build
- name: Core tests with coverage
if: needs.detect-changes.outputs.core == 'true'
run: pnpm --filter @composio/ao-core exec vitest run --coverage
run: pnpm --filter @aoagents/ao-core exec vitest run --coverage
- name: CLI tests with coverage
if: needs.detect-changes.outputs.cli == 'true'
run: pnpm --filter @composio/ao-cli exec vitest run --coverage
run: pnpm --filter @aoagents/ao-cli exec vitest run --coverage
- name: Web tests with coverage
if: needs.detect-changes.outputs.web == 'true'
run: pnpm --filter @composio/ao-web exec vitest run --coverage
run: pnpm --filter @aoagents/ao-web exec vitest run --coverage
- name: Prepare and merge lcov reports
run: |

View File

@ -48,7 +48,7 @@ jobs:
# --- Build project ---
- run: pnpm install --frozen-lockfile
- run: pnpm -r --filter '!@composio/ao-web' build
- run: pnpm -r --filter '!@aoagents/ao-web' build
# --- Run integration tests ---
- name: Run integration tests
@ -59,6 +59,6 @@ jobs:
LINEAR_TEAM_ID: ${{ secrets.LINEAR_TEAM_ID }}
# Note: COMPOSIO_API_KEY is intentionally not passed here.
# When both keys are set, the plugin prefers the Composio transport
# which requires @composio/core SDK installed. The direct LINEAR_API_KEY
# which requires @aoagents/core SDK installed. The direct LINEAR_API_KEY
# transport needs no extra dependencies.
run: pnpm test:integration

View File

@ -26,7 +26,7 @@ jobs:
cache: pnpm
registry-url: "https://registry.npmjs.org"
- run: pnpm install --frozen-lockfile
- run: pnpm -r --filter '!@composio/ao-web' build
- run: pnpm -r --filter '!@aoagents/ao-web' build
# Disable husky hooks in CI — the pre-commit hook requires gitleaks
# which isn't installed on the runner. The changesets action commits
# version bumps internally and doesn't need secret scanning.

View File

@ -10,7 +10,7 @@ pnpm build # Build all packages
pnpm dev # Web dashboard dev server (Next.js + 2 WS servers)
pnpm typecheck # Type check all packages
pnpm test # All tests (excludes web)
pnpm --filter @composio/ao-web test # Web tests
pnpm --filter @aoagents/ao-web test # Web tests
pnpm lint # ESLint check
pnpm lint:fix # ESLint fix
pnpm format # Prettier format

View File

@ -5,7 +5,7 @@
Agent Orchestrator (AO) is a platform for spawning and managing parallel AI coding agents across distributed systems. It runs multiple agents (Claude Code, Codex, Aider, OpenCode) simultaneously — each in an isolated git worktree with its own PR — and provides a single dashboard to supervise them all. Agents autonomously fix CI failures, address review comments, and manage PRs.
**Org:** ComposioHQ
**Repo:** `github.com/ComposioHQ/agent-orchestrator`
**Repo:** `github.com/aoagents/ao`
**License:** MIT
## Monorepo Structure
@ -62,12 +62,12 @@ pnpm dev # Web dashboard (Next.js + 2 WS serv
# Type checking
pnpm typecheck # All packages
pnpm --filter @composio/ao-web typecheck # Web only
pnpm --filter @aoagents/ao-web typecheck # Web only
# Testing
pnpm test # All packages (excludes web)
pnpm --filter @composio/ao-web test # Web tests
pnpm --filter @composio/ao-web test:watch # Web watch mode
pnpm --filter @aoagents/ao-web test # Web tests
pnpm --filter @aoagents/ao-web test:watch # Web watch mode
pnpm test:integration # Integration tests
# Lint & format
@ -159,7 +159,7 @@ Hash = SHA-256 of config directory (first 12 chars). Prevents collision across m
### Imports
- `@/` alias -> `packages/web/src/`
- `@composio/ao-core` for core imports
- `@aoagents/ao-core` for core imports
- `workspace:*` for cross-package
### Web / Styling
@ -212,7 +212,7 @@ Hash = SHA-256 of config directory (first 12 chars). Prevents collision across m
```
packages/plugins/{slot}-{name}/
├── package.json # @composio/ao-plugin-{slot}-{name}
├── package.json # @aoagents/ao-plugin-{slot}-{name}
├── tsconfig.json # extends ../../../tsconfig.base.json
├── src/
│ ├── index.ts # manifest + create + detect (default export)
@ -221,7 +221,7 @@ packages/plugins/{slot}-{name}/
### Naming
- Package: `@composio/ao-plugin-{slot}-{name}` (lowercase, hyphenated)
- Package: `@aoagents/ao-plugin-{slot}-{name}` (lowercase, hyphenated)
- `manifest.name` must match the `{name}` suffix (e.g. package `...-runtime-tmux` -> name: `"tmux"`)
- `manifest.slot` must use `as const` to preserve the literal type
@ -230,7 +230,7 @@ packages/plugins/{slot}-{name}/
Every plugin default-exports a `PluginModule<T>`:
```typescript
import type { PluginModule, Runtime } from "@composio/ao-core";
import type { PluginModule, Runtime } from "@aoagents/ao-core";
export const manifest = {
name: "tmux",
@ -294,7 +294,7 @@ import {
PREFERRED_GH_PATH, // /usr/local/bin/gh
CI_STATUS, ACTIVITY_STATE, SESSION_STATUS, // Constants
type Session, type ProjectConfig, type RuntimeHandle,
} from "@composio/ao-core";
} from "@aoagents/ao-core";
```
### Testing
@ -342,7 +342,7 @@ All agent plugins (claude-code, codex, aider, opencode, etc.) must implement the
**Environment requirements:**
- All agents must set `AO_SESSION_ID` and optionally `AO_ISSUE_ID`
- All agents using PATH wrappers must prepend `~/.ao/bin` to PATH
- Use `normalizeAgentPermissionMode` from `@composio/ao-core` (not a local duplicate)
- Use `normalizeAgentPermissionMode` from `@aoagents/ao-core` (not a local duplicate)
**Activity detection architecture:**

View File

@ -13,7 +13,7 @@ Thanks for your interest in contributing. This guide covers how to report bugs,
## Reporting Bugs
Open an issue at [github.com/ComposioHQ/agent-orchestrator/issues](https://github.com/ComposioHQ/agent-orchestrator/issues).
Open an issue at [github.com/aoagents/ao/issues](https://github.com/aoagents/ao/issues).
Include:
@ -30,20 +30,20 @@ Include:
**Prerequisites**: Node.js 20+, pnpm 9.15+, Git 2.25+, tmux, gh CLI
```bash
git clone https://github.com/ComposioHQ/agent-orchestrator.git
git clone https://github.com/aoagents/ao.git
cd agent-orchestrator
pnpm install
pnpm build
```
Build order matters — `@composio/ao-core` must be built before the CLI, web, or plugins can run. `pnpm build` at the root handles this automatically.
Build order matters — `@aoagents/ao-core` must be built before the CLI, web, or plugins can run. `pnpm build` at the root handles this automatically.
### Running tests
```bash
pnpm test # all packages
pnpm --filter @composio/ao-core test # core only
pnpm --filter @composio/ao-core test -- --watch # watch mode
pnpm --filter @aoagents/ao-core test # core only
pnpm --filter @aoagents/ao-core test -- --watch # watch mode
pnpm test:integration # integration tests
```
@ -52,7 +52,7 @@ pnpm test:integration # integration tests
```bash
cp agent-orchestrator.yaml.example agent-orchestrator.yaml
# edit agent-orchestrator.yaml for your setup
pnpm --filter @composio/ao-web dev
pnpm --filter @aoagents/ao-web dev
```
### Refreshing a local AO install
@ -65,7 +65,7 @@ git status --short --branch # confirm the install repo is clean
ao update
```
`ao update` fast-forwards the local install repo, reinstalls dependencies, clean-rebuilds `@composio/ao-core`, `@composio/ao-cli`, and `@composio/ao-web`, refreshes the global launcher with `npm link`, and finishes with CLI smoke tests. Use `ao update --skip-smoke` when you only need the rebuild step, or `ao update --smoke-only` when validating an existing install.
`ao update` fast-forwards the local install repo, reinstalls dependencies, clean-rebuilds `@aoagents/ao-core`, `@aoagents/ao-cli`, and `@aoagents/ao-web`, refreshes the global launcher with `npm link`, and finishes with CLI smoke tests. Use `ao update --skip-smoke` when you only need the rebuild step, or `ao update --smoke-only` when validating an existing install.
---
@ -98,7 +98,7 @@ cd packages/plugins/runtime-myplugin
```json
{
"name": "@composio/ao-runtime-myplugin",
"name": "@aoagents/ao-runtime-myplugin",
"version": "0.1.0",
"type": "module",
"main": "dist/index.js",
@ -109,7 +109,7 @@ cd packages/plugins/runtime-myplugin
"test": "vitest"
},
"dependencies": {
"@composio/ao-core": "workspace:*"
"@aoagents/ao-core": "workspace:*"
}
}
```
@ -120,7 +120,7 @@ cd packages/plugins/runtime-myplugin
```typescript
// src/index.ts
import type { PluginModule, Runtime } from "@composio/ao-core";
import type { PluginModule, Runtime } from "@aoagents/ao-core";
export const manifest = {
name: "myplugin",
@ -155,7 +155,7 @@ export default { manifest, create } satisfies PluginModule<Runtime>;
Add it to the CLI's dependencies in `packages/cli/package.json`:
```json
"@composio/ao-runtime-myplugin": "workspace:*"
"@aoagents/ao-runtime-myplugin": "workspace:*"
```
Then register it in `packages/core/src/plugin-registry.ts` inside `loadBuiltins()`.
@ -178,8 +178,8 @@ describe("myplugin runtime", () => {
### 6. Build and test
```bash
pnpm --filter @composio/ao-runtime-myplugin build
pnpm --filter @composio/ao-runtime-myplugin test
pnpm --filter @aoagents/ao-runtime-myplugin build
pnpm --filter @aoagents/ao-runtime-myplugin test
```
### Publishing to the Marketplace Registry

View File

@ -185,5 +185,5 @@ pnpm --filter @agent-orchestrator/web test
## Notes
- Pre-existing component test failures (3) are unrelated to these changes
- Pre-existing warnings (tracker-linear @composio/core, plugin-registry) are unrelated
- Pre-existing warnings (tracker-linear @aoagents/core, plugin-registry) are unrelated
- All new functionality is thoroughly tested with 54 new test cases

View File

@ -51,7 +51,7 @@ OpenClaw already supports:
## Request payload (Phase 0)
```json
{
"message": "[AO Escalation] ao-5 failed CI 5 times on feat/ci-auto-injection. Last error: type mismatch in codex plugin. PR: github.com/ComposioHQ/agent-orchestrator/pull/123. Actions available: retry, skip, kill. Context: {\"sessionId\":\"ao-5\",\"projectId\":\"ao\",\"reason\":\"ci_failed\",\"attempts\":5}",
"message": "[AO Escalation] ao-5 failed CI 5 times on feat/ci-auto-injection. Last error: type mismatch in codex plugin. PR: github.com/aoagents/ao/pull/123. Actions available: retry, skip, kill. Context: {\"sessionId\":\"ao-5\",\"projectId\":\"ao\",\"reason\":\"ci_failed\",\"attempts\":5}",
"name": "AO",
"sessionKey": "hook:ao:ao-5",
"wakeMode": "now",

View File

@ -1,7 +1,7 @@
<h1 align="center">Agent Orchestrator — The Orchestration Layer for Parallel AI Agents</h1>
<p align="center">
<a href="https://platform.composio.dev/?utm_source=Github&utm_medium=Banner&utm_content=AgentOrchestrator">
<a href="https://github.com/aoagents/ao">
<img width="800" alt="Agent Orchestrator banner" src="docs/assets/agent_orchestrator_banner.png">
</a>
</p>
@ -10,11 +10,11 @@
Spawn parallel AI coding agents, each in its own git worktree. Agents autonomously fix CI failures, address review comments, and open PRs — you supervise from one dashboard.
[![GitHub stars](https://img.shields.io/github/stars/ComposioHQ/agent-orchestrator?style=flat-square)](https://github.com/ComposioHQ/agent-orchestrator/stargazers)
[![npm version](https://img.shields.io/npm/v/%40composio%2Fao?style=flat-square)](https://www.npmjs.com/package/@composio/ao)
[![GitHub stars](https://img.shields.io/github/stars/aoagents/ao?style=flat-square)](https://github.com/aoagents/ao/stargazers)
[![npm version](https://img.shields.io/npm/v/%40aoagents%2Fao?style=flat-square)](https://www.npmjs.com/package/@aoagents/ao)
[![License: MIT](https://img.shields.io/badge/license-MIT-blue?style=flat-square)](LICENSE)
[![PRs merged](https://img.shields.io/badge/PRs_merged-61-brightgreen?style=flat-square)](https://github.com/ComposioHQ/agent-orchestrator/pulls?q=is%3Amerged)
[![Tests](https://img.shields.io/badge/test_cases-3%2C288-blue?style=flat-square)](https://github.com/ComposioHQ/agent-orchestrator/releases/tag/metrics-v1)
[![PRs merged](https://img.shields.io/badge/PRs_merged-61-brightgreen?style=flat-square)](https://github.com/aoagents/ao/pulls?q=is%3Amerged)
[![Tests](https://img.shields.io/badge/test_cases-3%2C288-blue?style=flat-square)](https://github.com/aoagents/ao/releases/tag/metrics-v1)
[![Discord](https://img.shields.io/badge/Discord-Join%20Community-5865F2?style=flat-square&logo=discord&logoColor=white)](https://discord.gg/UZv7JjxbwG)
</div>
@ -50,7 +50,7 @@ Agent Orchestrator manages fleets of AI coding agents working in parallel on you
### Install
```bash
npm install -g @composio/ao
npm install -g @aoagents/ao
```
<details>
@ -61,7 +61,7 @@ If `npm install -g` fails with EACCES, prefix with `sudo` or [fix your npm permi
To install from source (for contributors):
```bash
git clone https://github.com/ComposioHQ/agent-orchestrator.git
git clone https://github.com/aoagents/ao.git
cd agent-orchestrator && bash scripts/setup.sh
```
</details>

View File

@ -60,7 +60,7 @@ Comprehensive guide to installing, configuring, and troubleshooting Agent Orches
### Install via npm (recommended)
```bash
npm install -g @composio/ao
npm install -g @aoagents/ao
# Verify
ao --version
@ -72,17 +72,17 @@ This installs the `ao` CLI globally along with all default plugins and the web d
```bash
# Option 1: Use sudo
sudo npm install -g @composio/ao
sudo npm install -g @aoagents/ao
# Option 2: Use npx (no global install needed)
npx @composio/ao start
npx @aoagents/ao start
# Option 3: Fix npm permissions permanently (recommended)
mkdir -p ~/.npm-global
npm config set prefix '~/.npm-global'
echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.zshrc
source ~/.zshrc
npm install -g @composio/ao
npm install -g @aoagents/ao
```
### Build from Source (for contributors)
@ -91,7 +91,7 @@ If you want to develop or contribute to Agent Orchestrator:
```bash
# Clone the repository
git clone https://github.com/ComposioHQ/agent-orchestrator
git clone https://github.com/aoagents/ao
cd agent-orchestrator
# Run the setup script (installs deps, builds, links CLI)
@ -385,7 +385,7 @@ curl -X POST -H 'Content-type: application/json' \
To add a custom tracker (Jira, Asana, etc.), create a plugin:
1. See plugin examples in `packages/plugins/tracker-*/`
2. Implement the `Tracker` interface from `@composio/ao-core`
2. Implement the `Tracker` interface from `@aoagents/ao-core`
3. Register your plugin in the config
See [Development Guide](./docs/DEVELOPMENT.md) for plugin development guidelines.
@ -839,4 +839,4 @@ Useful for:
---
**Need help?** Open an issue at: https://github.com/ComposioHQ/agent-orchestrator/issues
**Need help?** Open an issue at: https://github.com/aoagents/ao/issues

View File

@ -669,7 +669,7 @@ agent-orchestrator/
├── agent-orchestrator.yaml.example
├── packages/
│ ├── core/ # @composio/ao-core
│ ├── core/ # @aoagents/ao-core
│ │ └── src/
│ │ ├── types.ts # All interfaces + types
│ │ ├── config.ts # YAML config loader + Zod validation
@ -680,7 +680,7 @@ agent-orchestrator/
│ │ ├── metadata.ts # Flat-file read/write
│ │ └── index.ts
│ │
│ ├── cli/ # @composio/ao-cli → `ao` binary
│ ├── cli/ # @aoagents/ao-cli → `ao` binary
│ │ └── src/
│ │ ├── index.ts # Commander.js setup
│ │ └── commands/
@ -694,7 +694,7 @@ agent-orchestrator/
│ │ ├── dashboard.ts # ao dashboard (starts web)
│ │ └── open.ts # ao open [session|all]
│ │
│ ├── web/ # @composio/ao-web
│ ├── web/ # @aoagents/ao-web
│ │ ├── next.config.ts
│ │ └── src/
│ │ ├── app/

View File

@ -203,7 +203,7 @@ import {
generateConfigHash,
generateInstanceId,
validateAndStoreOrigin,
} from "@composio/ao-core";
} from "@aoagents/ao-core";
// Calculate paths dynamically
const sessionsDir = getSessionsDir(configPath, projectPath);

View File

@ -79,7 +79,7 @@ Activity states (orthogonal to lifecycle): `active`, `ready`, `idle`, `waiting_i
**Prerequisites**: Node.js 20+, pnpm 9.15+, Git 2.25+
```bash
git clone https://github.com/ComposioHQ/agent-orchestrator.git
git clone https://github.com/aoagents/ao.git
cd agent-orchestrator
pnpm install
pnpm build
@ -158,7 +158,7 @@ git status --short --branch # `ao update` expects a clean working tree on main
ao update
```
`ao update` is intentionally conservative: it fast-forwards the local install checkout from `origin/main`, runs `pnpm install`, clean-rebuilds `@composio/ao-core`, `@composio/ao-cli`, and `@composio/ao-web`, refreshes the global launcher with `npm link`, and ends with CLI smoke tests. Use `ao update --skip-smoke` to stop after the rebuild, or `ao update --smoke-only` to rerun the smoke checks without fetching or rebuilding.
`ao update` is intentionally conservative: it fast-forwards the local install checkout from `origin/main`, runs `pnpm install`, clean-rebuilds `@aoagents/ao-core`, `@aoagents/ao-cli`, and `@aoagents/ao-web`, refreshes the global launcher with `npm link`, and ends with CLI smoke tests. Use `ao update --skip-smoke` to stop after the rebuild, or `ao update --smoke-only` to rerun the smoke checks without fetching or rebuilding.
If your branch has drift from `main`, update the install checkout first and then return to your feature worktree. That keeps CLI behavior and generated docs aligned with the version contributors are expected to run.
@ -185,7 +185,7 @@ function processInput(value: unknown): string {
}
// Type-only imports for type-only usage
import type { PluginModule, Runtime } from "@composio/ao-core";
import type { PluginModule, Runtime } from "@aoagents/ao-core";
```
Formatting: semicolons, double quotes, 2-space indent, strict mode.
@ -223,7 +223,7 @@ A plugin exports a `manifest`, a `create()` factory, and a default `PluginModule
```typescript
// packages/plugins/runtime-myplugin/src/index.ts
import type { PluginModule, Runtime } from "@composio/ao-core";
import type { PluginModule, Runtime } from "@aoagents/ao-core";
export const manifest = {
name: "myplugin",
@ -257,7 +257,7 @@ export default { manifest, create } satisfies PluginModule<Runtime>;
```json
{
"name": "@composio/ao-runtime-myplugin",
"name": "@aoagents/ao-runtime-myplugin",
"version": "0.1.0",
"type": "module",
"main": "dist/index.js",
@ -268,7 +268,7 @@ export default { manifest, create } satisfies PluginModule<Runtime>;
"test": "vitest"
},
"dependencies": {
"@composio/ao-core": "workspace:*"
"@aoagents/ao-core": "workspace:*"
}
}
```
@ -318,10 +318,10 @@ Orchestrator sessions use a separate prompt from `packages/core/src/orchestrator
pnpm test
# Run tests for a specific package
pnpm --filter @composio/ao-core test
pnpm --filter @aoagents/ao-core test
# Watch mode
pnpm --filter @composio/ao-core test -- --watch
pnpm --filter @aoagents/ao-core test -- --watch
# Integration tests
pnpm test:integration
@ -344,7 +344,7 @@ Use mock plugins in tests — don't call real tmux or external services in unit
1. Edit `Session` interface in `packages/core/src/types.ts`
2. Initialize the field in `spawn()` in `session-manager.ts`
3. Rebuild: `pnpm --filter @composio/ao-core build`
3. Rebuild: `pnpm --filter @aoagents/ao-core build`
### Add a new reaction

View File

@ -47,14 +47,14 @@ Published plugins should:
- ship built JavaScript, not raw TypeScript-only entrypoints
- export an ESM entrypoint through `exports` or `main`
- declare a semver dependency on `@composio/ao-core`
- declare a semver dependency on `@aoagents/ao-core`
- keep side effects out of module top-level code where possible
Recommended package shape:
```json
{
"name": "@composio/ao-plugin-example",
"name": "@aoagents/ao-plugin-example",
"version": "0.1.0",
"type": "module",
"main": "dist/index.js",
@ -76,7 +76,7 @@ Project config enables plugins through `plugins:` entries:
plugins:
- name: openclaw
source: registry
package: "@composio/ao-plugin-notifier-openclaw"
package: "@aoagents/ao-plugin-notifier-openclaw"
version: "0.1.1"
```

View File

@ -160,8 +160,8 @@ Minimal journal schema example:
"status": "failed",
"attempt": 2,
"operationKey": "create_pr:f4d7dbe5b0f8:upstream",
"targetRepo": "ComposioHQ/agent-orchestrator",
"issueUrl": "https://github.com/ComposioHQ/agent-orchestrator/issues/399",
"targetRepo": "aoagents/ao",
"issueUrl": "https://github.com/aoagents/ao/issues/399",
"prUrl": null,
"consent": {
"createFork": "approved",

View File

@ -5,7 +5,7 @@ How to set up the Agent Orchestrator (AO) plugin for OpenClaw so the AI bot dele
## Prerequisites
- [OpenClaw](https://openclaw.ai) installed and running
- [Agent Orchestrator](https://github.com/ComposioHQ/agent-orchestrator) installed with `ao init` completed in your repo
- [Agent Orchestrator](https://github.com/aoagents/ao) installed with `ao init` completed in your repo
- `ao`, `gh`, `tmux`, and `node` available in PATH
- GitHub CLI (`gh`) authenticated

View File

@ -27,7 +27,7 @@ This document defines intended behavior for Agent Orchestrator when `agent: open
## 1) Plugin Resolution
- CLI must resolve `opencode` via `getAgentByName` and `getAgent` without error.
- Core plugin registry built-ins must include `@composio/ao-plugin-agent-opencode` under slot `agent`.
- Core plugin registry built-ins must include `@aoagents/ao-plugin-agent-opencode` under slot `agent`.
- Expected failure mode: unknown agent names fail fast with `Unknown agent plugin: <name>`.
## 2) `ao start` (orchestrator session)
@ -98,7 +98,7 @@ This document defines intended behavior for Agent Orchestrator when `agent: open
## Revalidation Baseline (Current)
- Unit/integration validation that should remain green for OpenCode workflows:
- `@composio/ao-plugin-agent-opencode` tests.
- `@composio/ao-core` tests: `session-manager.test.ts`, `plugin-registry.test.ts`.
- `@composio/ao-cli` tests: `plugins.test.ts`, `start.test.ts`, `session.test.ts`, `send.test.ts`, `status.test.ts`.
- `@composio/ao-integration-tests` with `test:integration` (includes `agent-opencode.integration.test.ts`, conditionally skipped tests where prerequisites are unavailable).
- `@aoagents/ao-plugin-agent-opencode` tests.
- `@aoagents/ao-core` tests: `session-manager.test.ts`, `plugin-registry.test.ts`.
- `@aoagents/ao-cli` tests: `plugins.test.ts`, `start.test.ts`, `session.test.ts`, `send.test.ts`, `status.test.ts`.
- `@aoagents/ao-integration-tests` with `test:integration` (includes `agent-opencode.integration.test.ts`, conditionally skipped tests where prerequisites are unavailable).

View File

@ -22,11 +22,11 @@
],
"repository": {
"type": "git",
"url": "https://github.com/ComposioHQ/agent-orchestrator.git",
"url": "https://github.com/aoagents/ao.git",
"directory": "openclaw-plugin"
},
"homepage": "https://github.com/ComposioHQ/agent-orchestrator/tree/main/openclaw-plugin",
"bugs": "https://github.com/ComposioHQ/agent-orchestrator/issues",
"homepage": "https://github.com/aoagents/ao/tree/main/openclaw-plugin",
"bugs": "https://github.com/aoagents/ao/issues",
"keywords": ["openclaw", "openclaw-plugin", "plugin", "agent-orchestrator", "composio", "ai-agents", "coding-agents"],
"publishConfig": {
"access": "public"

View File

@ -11,14 +11,14 @@
"type": "module",
"scripts": {
"build": "pnpm -r build",
"dev": "pnpm --filter @composio/ao-web dev",
"dev": "pnpm --filter @aoagents/ao-web dev",
"lint": "eslint .",
"lint:fix": "eslint . --fix",
"format": "prettier --write .",
"format:check": "prettier --check .",
"typecheck": "pnpm -r typecheck",
"test": "pnpm -r --filter '!@composio/ao-web' test",
"test:integration": "pnpm --filter @composio/ao-integration-tests test:integration",
"test": "pnpm -r --filter '!@aoagents/ao-web' test",
"test:integration": "pnpm --filter @aoagents/ao-integration-tests test:integration",
"clean": "pnpm -r clean",
"changeset": "changeset",
"version-packages": "changeset version",

View File

@ -1,2 +1,2 @@
#!/usr/bin/env node
import "@composio/ao-cli";
import "@aoagents/ao-cli";

View File

@ -1,6 +1,6 @@
#!/usr/bin/env node
/**
* Postinstall script for @composio/ao (npm/yarn global installs).
* Postinstall script for @aoagents/ao (npm/yarn global installs).
*
* Fixes node-pty's spawn-helper binary missing the execute bit.
* node-pty@1.1.0 ships spawn-helper without +x; the monorepo works around

View File

@ -1,5 +1,5 @@
{
"name": "@composio/ao",
"name": "@aoagents/ao",
"version": "0.2.2",
"description": "Orchestrate parallel AI coding agents — global CLI wrapper",
"license": "MIT",
@ -15,17 +15,17 @@
],
"repository": {
"type": "git",
"url": "https://github.com/ComposioHQ/agent-orchestrator.git",
"url": "https://github.com/aoagents/ao.git",
"directory": "packages/ao"
},
"homepage": "https://github.com/ComposioHQ/agent-orchestrator",
"homepage": "https://github.com/aoagents/ao",
"bugs": {
"url": "https://github.com/ComposioHQ/agent-orchestrator/issues"
"url": "https://github.com/aoagents/ao/issues"
},
"engines": {
"node": ">=20.0.0"
},
"dependencies": {
"@composio/ao-cli": "workspace:*"
"@aoagents/ao-cli": "workspace:*"
}
}

View File

@ -93,7 +93,7 @@ describe("isInstalledUnderNodeModules", () => {
it("returns true for a Unix node_modules path segment", async () => {
const { isInstalledUnderNodeModules } = await import("../../src/lib/dashboard-rebuild.js");
expect(isInstalledUnderNodeModules("/usr/local/lib/node_modules/@composio/ao-web")).toBe(true);
expect(isInstalledUnderNodeModules("/usr/local/lib/node_modules/@aoagents/ao-web")).toBe(true);
});
it("returns true for a Windows node_modules path segment", async () => {
@ -124,7 +124,7 @@ describe("assertDashboardRebuildSupported", () => {
const { assertDashboardRebuildSupported } = await import("../../src/lib/dashboard-rebuild.js");
expect(() =>
assertDashboardRebuildSupported("/usr/local/lib/node_modules/@composio/ao-web"),
assertDashboardRebuildSupported("/usr/local/lib/node_modules/@aoagents/ao-web"),
).toThrow("Dashboard rebuild is only available from a source checkout");
});
});
@ -164,7 +164,7 @@ describe("rebuildDashboardProductionArtifacts", () => {
const { rebuildDashboardProductionArtifacts } = await import("../../src/lib/dashboard-rebuild.js");
await expect(
rebuildDashboardProductionArtifacts("/usr/local/lib/node_modules/@composio/ao-web"),
rebuildDashboardProductionArtifacts("/usr/local/lib/node_modules/@aoagents/ao-web"),
).rejects.toThrow("Dashboard rebuild is only available from a source checkout");
});
});

View File

@ -27,7 +27,7 @@ vi.mock("../../src/lib/script-runner.js", () => ({
runRepoScript: (...args: unknown[]) => mockRunRepoScript(...args),
}));
vi.mock("@composio/ao-core", () => ({
vi.mock("@aoagents/ao-core", () => ({
createPluginRegistry: (...args: unknown[]) => mockCreatePluginRegistry(...args),
findConfigFile: (...args: unknown[]) => mockFindConfigFile(...args),
getObservabilityBaseDir: () => "/tmp/.agent-orchestrator/observability",

View File

@ -20,7 +20,7 @@ vi.mock("../../src/lib/shell.js", () => ({
getTmuxActivity: vi.fn().mockResolvedValue(null),
}));
vi.mock("@composio/ao-core", () => ({
vi.mock("@aoagents/ao-core", () => ({
loadConfig: () => mockConfigRef.current,
}));

View File

@ -4,7 +4,7 @@ import { tmpdir } from "node:os";
import { join } from "node:path";
import { Command } from "commander";
import { parse as parseYaml } from "yaml";
import type { PluginManifest, PluginModule } from "@composio/ao-core";
import type { PluginManifest, PluginModule } from "@aoagents/ao-core";
const {
mockFindConfigFile,
@ -24,7 +24,7 @@ const {
mockUninstallPackageFromStore: vi.fn(),
}));
vi.mock("@composio/ao-core", async (importOriginal) => {
vi.mock("@aoagents/ao-core", async (importOriginal) => {
const actual = await importOriginal();
return {
...actual,
@ -48,7 +48,7 @@ vi.mock("../../src/commands/setup.js", () => ({
import { registerPlugin } from "../../src/commands/plugin.js";
const OPENCLAW_PACKAGE = "@composio/ao-plugin-notifier-openclaw";
const OPENCLAW_PACKAGE = "@aoagents/ao-plugin-notifier-openclaw";
const GOOSE_PACKAGE = "@example/ao-plugin-agent-goose";
function makePlugin(slot: PluginManifest["slot"], name: string): PluginModule {
@ -221,7 +221,7 @@ describe("plugin command", () => {
};
expect(packageJson.name).toBe("@alice/ao-plugin-notifier-acme-alerts");
expect(packageJson.author).toBe("Alice");
expect(packageJson.dependencies?.["@composio/ao-core"]).toBe("^0.2.0");
expect(packageJson.dependencies?.["@aoagents/ao-core"]).toBe("^0.2.0");
const entrypoint = readFileSync(join(targetDir, "src", "index.ts"), "utf-8");
expect(entrypoint).toContain('slot: "notifier" as const');

View File

@ -10,7 +10,7 @@ import {
} from "node:fs";
import { join } from "node:path";
import { tmpdir } from "node:os";
import { type Session, type SessionManager, getSessionsDir } from "@composio/ao-core";
import { type Session, type SessionManager, getSessionsDir } from "@aoagents/ao-core";
const { mockTmux, mockExec, mockGh, mockConfigRef, mockSessionManager, sessionsDirRef } =
vi.hoisted(() => ({
@ -55,9 +55,9 @@ vi.mock("ora", () => ({
}),
}));
vi.mock("@composio/ao-core", async (importOriginal) => {
vi.mock("@aoagents/ao-core", async (importOriginal) => {
// eslint-disable-next-line @typescript-eslint/consistent-type-imports
const actual = await importOriginal<typeof import("@composio/ao-core")>();
const actual = await importOriginal<typeof import("@aoagents/ao-core")>();
return {
...actual,
loadConfig: () => mockConfigRef.current,

View File

@ -47,7 +47,7 @@ vi.mock("../../src/lib/session-utils.js", () => ({
findProjectForSession: () => null,
}));
vi.mock("@composio/ao-core", () => ({
vi.mock("@aoagents/ao-core", () => ({
loadConfig: () => {
if (!mockConfigRef.current) {
throw new Error("no config");

View File

@ -19,7 +19,7 @@ import {
SessionNotFoundError,
getSessionsDir,
getProjectBaseDir,
} from "@composio/ao-core";
} from "@aoagents/ao-core";
const {
mockTmux,
@ -87,9 +87,9 @@ vi.mock("../../src/lib/shell.js", () => ({
},
}));
vi.mock("@composio/ao-core", async (importOriginal) => {
vi.mock("@aoagents/ao-core", async (importOriginal) => {
// eslint-disable-next-line @typescript-eslint/consistent-type-imports
const actual = await importOriginal<typeof import("@composio/ao-core")>();
const actual = await importOriginal<typeof import("@aoagents/ao-core")>();
return {
...actual,
loadConfig: () => mockConfigRef.current,

View File

@ -25,7 +25,7 @@ const { mockProbeGateway, mockValidateToken, mockDetectOpenClawInstallation } =
mockDetectOpenClawInstallation: vi.fn(),
}));
vi.mock("@composio/ao-core", () => ({
vi.mock("@aoagents/ao-core", () => ({
findConfigFile: (...args: unknown[]) => mockFindConfigFile(...args),
}));

View File

@ -2,7 +2,7 @@ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
import { mkdtempSync, mkdirSync, writeFileSync, rmSync } from "node:fs";
import { join } from "node:path";
import { tmpdir } from "node:os";
import { type Session, type SessionManager, getProjectBaseDir } from "@composio/ao-core";
import { type Session, type SessionManager, getProjectBaseDir } from "@aoagents/ao-core";
const { mockExec, mockConfigRef, mockSessionManager, mockEnsureLifecycleWorker } = vi.hoisted(
() => ({
@ -42,9 +42,9 @@ vi.mock("ora", () => ({
}),
}));
vi.mock("@composio/ao-core", async (importOriginal) => {
vi.mock("@aoagents/ao-core", async (importOriginal) => {
// eslint-disable-next-line @typescript-eslint/consistent-type-imports
const actual = await importOriginal<typeof import("@composio/ao-core")>();
const actual = await importOriginal<typeof import("@aoagents/ao-core")>();
return {
...actual,
loadConfig: () => mockConfigRef.current,

View File

@ -10,7 +10,7 @@ import { mkdtempSync, mkdirSync, writeFileSync, readFileSync, rmSync, existsSync
import { join } from "node:path";
import { tmpdir } from "node:os";
import { parse as parseYaml } from "yaml";
import type { SessionManager } from "@composio/ao-core";
import type { SessionManager } from "@aoagents/ao-core";
// ---------------------------------------------------------------------------
// Hoisted mocks
@ -74,9 +74,9 @@ vi.mock("ora", () => ({
}),
}));
vi.mock("@composio/ao-core", async (importOriginal) => {
vi.mock("@aoagents/ao-core", async (importOriginal) => {
// eslint-disable-next-line @typescript-eslint/consistent-type-imports
const actual = await importOriginal<typeof import("@composio/ao-core")>();
const actual = await importOriginal<typeof import("@aoagents/ao-core")>();
const normalizeOrchestratorSessionStrategy =
actual.normalizeOrchestratorSessionStrategy ??
((strategy: string | undefined) => {

View File

@ -14,7 +14,7 @@ import {
type Session,
type SessionManager,
type ActivityState,
} from "@composio/ao-core";
} from "@aoagents/ao-core";
const {
mockTmux,
@ -72,9 +72,9 @@ vi.mock("../../src/lib/shell.js", () => ({
},
}));
vi.mock("@composio/ao-core", async (importOriginal) => {
vi.mock("@aoagents/ao-core", async (importOriginal) => {
// eslint-disable-next-line @typescript-eslint/consistent-type-imports
const actual = await importOriginal<typeof import("@composio/ao-core")>();
const actual = await importOriginal<typeof import("@aoagents/ao-core")>();
return {
...actual,
loadConfig: () => mockConfigRef.current,
@ -949,7 +949,7 @@ describe("status command", () => {
// ── lines 262-266: loadConfig() throws → fallback to tmux discovery ───────
it("falls back to tmux session discovery when loadConfig throws", async () => {
// The vi.mock for @composio/ao-core uses `() => mockConfigRef.current`.
// The vi.mock for @aoagents/ao-core uses `() => mockConfigRef.current`.
// Setting current to a throwing getter makes loadConfig throw.
// Simpler: use a Proxy-based trick — but easiest is a getter that throws.
const originalCurrent = mockConfigRef.current;

View File

@ -5,7 +5,7 @@ import {
getAgentByNameFromRegistry,
getSCMFromRegistry,
} from "../../src/lib/plugins.js";
import type { Agent, OrchestratorConfig, PluginRegistry, SCM } from "@composio/ao-core";
import type { Agent, OrchestratorConfig, PluginRegistry, SCM } from "@aoagents/ao-core";
function makeConfig(
defaultAgent: string,

View File

@ -60,9 +60,9 @@ describe("preflight.checkBuilt", () => {
});
it("finds ao-core when hoisted one level up (npm global install layout)", async () => {
// /web/node_modules/@composio/ao-core — miss
// /node_modules/@composio/ao-core — hit
// /node_modules/@composio/ao-core/dist/index.js — exists
// /web/node_modules/@aoagents/ao-core — miss
// /node_modules/@aoagents/ao-core — hit
// /node_modules/@aoagents/ao-core/dist/index.js — exists
// /web/.next/BUILD_ID and /web/dist-server/start-all.js — exist
mockExistsSync
.mockReturnValueOnce(false)
@ -76,8 +76,8 @@ describe("preflight.checkBuilt", () => {
it("throws npm hint when ao-core not found in global install", async () => {
mockExistsSync.mockReturnValue(false);
await expect(
preflight.checkBuilt("/usr/local/lib/node_modules/@composio/ao-web"),
).rejects.toThrow("npm install -g @composio/ao@latest");
preflight.checkBuilt("/usr/local/lib/node_modules/@aoagents/ao-web"),
).rejects.toThrow("npm install -g @aoagents/ao@latest");
});
it("throws pnpm hint when ao-core not found in monorepo", async () => {
@ -115,8 +115,8 @@ describe("preflight.checkBuilt", () => {
.mockReturnValueOnce(true)
.mockReturnValueOnce(false);
await expect(
preflight.checkBuilt("/usr/local/lib/node_modules/@composio/ao-web"),
).rejects.toThrow("npm install -g @composio/ao@latest");
preflight.checkBuilt("/usr/local/lib/node_modules/@aoagents/ao-web"),
).rejects.toThrow("npm install -g @aoagents/ao@latest");
});
it("throws npm hint when ao-core dist is missing in global install", async () => {
@ -125,8 +125,8 @@ describe("preflight.checkBuilt", () => {
.mockReturnValueOnce(true)
.mockReturnValueOnce(false);
await expect(
preflight.checkBuilt("/usr/local/lib/node_modules/@composio/ao-web"),
).rejects.toThrow("npm install -g @composio/ao@latest");
preflight.checkBuilt("/usr/local/lib/node_modules/@aoagents/ao-web"),
).rejects.toThrow("npm install -g @aoagents/ao@latest");
});
});

View File

@ -5,7 +5,7 @@ import {
findProjectForSession,
isOrchestratorSessionName,
} from "../../src/lib/session-utils.js";
import type { OrchestratorConfig } from "@composio/ao-core";
import type { OrchestratorConfig } from "@aoagents/ao-core";
describe("escapeRegex", () => {
it("escapes dots, asterisks, plus, question marks", () => {

View File

@ -71,8 +71,8 @@ esac\nexit 0`,
expect(commands).toContain("git fetch origin main");
expect(commands).toContain("git pull --ff-only origin main");
expect(commands).toContain("pnpm install");
expect(commands).toContain("pnpm --filter @composio/ao-core clean");
expect(commands).toContain("pnpm --filter @composio/ao-cli build");
expect(commands).toContain("pnpm --filter @aoagents/ao-core clean");
expect(commands).toContain("pnpm --filter @aoagents/ao-cli build");
expect(commands).toContain("npm link");
});

View File

@ -1,5 +1,5 @@
{
"name": "@composio/ao-cli",
"name": "@aoagents/ao-cli",
"version": "0.2.2",
"description": "CLI for agent-orchestrator — the `ao` command",
"license": "MIT",
@ -14,12 +14,12 @@
],
"repository": {
"type": "git",
"url": "https://github.com/ComposioHQ/agent-orchestrator.git",
"url": "https://github.com/aoagents/ao.git",
"directory": "packages/cli"
},
"homepage": "https://github.com/ComposioHQ/agent-orchestrator",
"homepage": "https://github.com/aoagents/ao",
"bugs": {
"url": "https://github.com/ComposioHQ/agent-orchestrator/issues"
"url": "https://github.com/aoagents/ao/issues"
},
"engines": {
"node": ">=20.0.0"
@ -33,27 +33,27 @@
"clean": "rm -rf dist"
},
"dependencies": {
"@composio/ao-core": "workspace:*",
"@composio/ao-plugin-agent-aider": "workspace:*",
"@composio/ao-plugin-agent-claude-code": "workspace:*",
"@composio/ao-plugin-agent-codex": "workspace:*",
"@composio/ao-plugin-agent-opencode": "workspace:*",
"@composio/ao-plugin-notifier-composio": "workspace:*",
"@composio/ao-plugin-notifier-desktop": "workspace:*",
"@composio/ao-plugin-notifier-discord": "workspace:*",
"@composio/ao-plugin-notifier-openclaw": "workspace:*",
"@composio/ao-plugin-notifier-slack": "workspace:*",
"@composio/ao-plugin-notifier-webhook": "workspace:*",
"@composio/ao-plugin-runtime-process": "workspace:*",
"@composio/ao-plugin-runtime-tmux": "workspace:*",
"@composio/ao-plugin-scm-github": "workspace:*",
"@composio/ao-plugin-terminal-iterm2": "workspace:*",
"@composio/ao-plugin-terminal-web": "workspace:*",
"@composio/ao-plugin-tracker-github": "workspace:*",
"@composio/ao-plugin-tracker-linear": "workspace:*",
"@composio/ao-plugin-workspace-clone": "workspace:*",
"@composio/ao-plugin-workspace-worktree": "workspace:*",
"@composio/ao-web": "workspace:*",
"@aoagents/ao-core": "workspace:*",
"@aoagents/ao-plugin-agent-aider": "workspace:*",
"@aoagents/ao-plugin-agent-claude-code": "workspace:*",
"@aoagents/ao-plugin-agent-codex": "workspace:*",
"@aoagents/ao-plugin-agent-opencode": "workspace:*",
"@aoagents/ao-plugin-notifier-composio": "workspace:*",
"@aoagents/ao-plugin-notifier-desktop": "workspace:*",
"@aoagents/ao-plugin-notifier-discord": "workspace:*",
"@aoagents/ao-plugin-notifier-openclaw": "workspace:*",
"@aoagents/ao-plugin-notifier-slack": "workspace:*",
"@aoagents/ao-plugin-notifier-webhook": "workspace:*",
"@aoagents/ao-plugin-runtime-process": "workspace:*",
"@aoagents/ao-plugin-runtime-tmux": "workspace:*",
"@aoagents/ao-plugin-scm-github": "workspace:*",
"@aoagents/ao-plugin-terminal-iterm2": "workspace:*",
"@aoagents/ao-plugin-terminal-web": "workspace:*",
"@aoagents/ao-plugin-tracker-github": "workspace:*",
"@aoagents/ao-plugin-tracker-linear": "workspace:*",
"@aoagents/ao-plugin-workspace-clone": "workspace:*",
"@aoagents/ao-plugin-workspace-worktree": "workspace:*",
"@aoagents/ao-web": "workspace:*",
"@clack/prompts": "^0.9.1",
"chalk": "^5.4.0",
"commander": "^13.0.0",

View File

@ -1,7 +1,7 @@
[
{
"id": "agent-codex",
"package": "@composio/ao-plugin-agent-codex",
"package": "@aoagents/ao-plugin-agent-codex",
"slot": "agent",
"description": "Agent plugin: OpenAI Codex CLI",
"source": "registry",
@ -9,7 +9,7 @@
},
{
"id": "agent-aider",
"package": "@composio/ao-plugin-agent-aider",
"package": "@aoagents/ao-plugin-agent-aider",
"slot": "agent",
"description": "Agent plugin: Aider CLI",
"source": "registry",
@ -17,7 +17,7 @@
},
{
"id": "agent-opencode",
"package": "@composio/ao-plugin-agent-opencode",
"package": "@aoagents/ao-plugin-agent-opencode",
"slot": "agent",
"description": "Agent plugin: OpenCode CLI",
"source": "registry",
@ -25,7 +25,7 @@
},
{
"id": "notifier-openclaw",
"package": "@composio/ao-plugin-notifier-openclaw",
"package": "@aoagents/ao-plugin-notifier-openclaw",
"slot": "notifier",
"description": "Notifier plugin: OpenClaw webhook notifications",
"source": "registry",
@ -34,7 +34,7 @@
},
{
"id": "notifier-discord",
"package": "@composio/ao-plugin-notifier-discord",
"package": "@aoagents/ao-plugin-notifier-discord",
"slot": "notifier",
"description": "Notifier plugin: Discord notifications",
"source": "registry",
@ -42,7 +42,7 @@
},
{
"id": "tracker-gitlab",
"package": "@composio/ao-plugin-tracker-gitlab",
"package": "@aoagents/ao-plugin-tracker-gitlab",
"slot": "tracker",
"description": "Tracker plugin: GitLab issues",
"source": "registry",
@ -50,7 +50,7 @@
},
{
"id": "scm-gitlab",
"package": "@composio/ao-plugin-scm-gitlab",
"package": "@aoagents/ao-plugin-scm-gitlab",
"slot": "scm",
"description": "SCM plugin: GitLab pull/merge requests",
"source": "registry",

View File

@ -2,7 +2,7 @@ import { spawn } from "node:child_process";
import { resolve } from "node:path";
import chalk from "chalk";
import type { Command } from "commander";
import { loadConfig } from "@composio/ao-core";
import { loadConfig } from "@aoagents/ao-core";
import { findWebDir, buildDashboardEnv, waitForPortAndOpen } from "../lib/web-dir.js";
import {
findRunningDashboardPid,
@ -106,7 +106,7 @@ export function registerDashboard(program: Command): void {
const stderr = stderrChunks.join("");
if (looksLikeStaleBuild(stderr)) {
const recoveryCommand = isInstalledUnderNodeModules(webDir)
? "npm install -g @composio/ao@latest"
? "npm install -g @aoagents/ao@latest"
: "ao dashboard --rebuild";
console.error(
chalk.yellow(

View File

@ -11,7 +11,7 @@ import {
type OrchestratorConfig,
type PluginRegistry,
type PluginSlot,
} from "@composio/ao-core";
} from "@aoagents/ao-core";
import { runRepoScript } from "../lib/script-runner.js";
import { detectOpenClawInstallation, validateToken } from "../lib/openclaw-probe.js";
import { importPluginModuleFromSource } from "../lib/plugin-store.js";

View File

@ -1,6 +1,6 @@
import type { Command } from "commander";
import chalk from "chalk";
import { createCorrelationId, createProjectObserver, loadConfig } from "@composio/ao-core";
import { createCorrelationId, createProjectObserver, loadConfig } from "@aoagents/ao-core";
import { getLifecycleManager } from "../lib/create-session-manager.js";
import {
clearLifecycleWorkerPid,

View File

@ -1,6 +1,6 @@
import chalk from "chalk";
import type { Command } from "commander";
import { loadConfig } from "@composio/ao-core";
import { loadConfig } from "@aoagents/ao-core";
import { exec, getTmuxSessions } from "../lib/shell.js";
import { matchesPrefix } from "../lib/session-utils.js";

View File

@ -8,7 +8,7 @@ import {
type PluginSlot,
type InstalledPluginConfig,
type OrchestratorConfig,
} from "@composio/ao-core";
} from "@aoagents/ao-core";
import { parseDocument } from "yaml";
import {
buildPluginDescriptor,

View File

@ -1,7 +1,7 @@
import chalk from "chalk";
import ora from "ora";
import type { Command } from "commander";
import { loadConfig } from "@composio/ao-core";
import { loadConfig } from "@aoagents/ao-core";
import { gh } from "../lib/shell.js";
import { getSessionManager } from "../lib/create-session-manager.js";

View File

@ -8,7 +8,7 @@ import {
type OpenCodeSessionManager,
type Session,
loadConfig,
} from "@composio/ao-core";
} from "@aoagents/ao-core";
import { exec, tmux } from "../lib/shell.js";
import { getAgentByName, getAgentByNameFromRegistry } from "../lib/plugins.js";
import { getPluginRegistry, getSessionManager } from "../lib/create-session-manager.js";

View File

@ -1,7 +1,7 @@
import { spawn } from "node:child_process";
import chalk from "chalk";
import type { Command } from "commander";
import { loadConfig, SessionNotRestorableError, WorkspaceMissingError } from "@composio/ao-core";
import { loadConfig, SessionNotRestorableError, WorkspaceMissingError } from "@aoagents/ao-core";
import { git, getTmuxActivity, tmux } from "../lib/shell.js";
import { formatAge } from "../lib/format.js";
import { getSessionManager } from "../lib/create-session-manager.js";

View File

@ -14,7 +14,7 @@ import { join } from "node:path";
import chalk from "chalk";
import type { Command } from "commander";
import { parse as yamlParse, parseDocument } from "yaml";
import { findConfigFile } from "@composio/ao-core";
import { findConfigFile } from "@aoagents/ao-core";
import {
probeGateway,
validateToken,

View File

@ -12,7 +12,7 @@ import {
type OrchestratorConfig,
type DecomposerConfig,
DEFAULT_DECOMPOSER_CONFIG,
} from "@composio/ao-core";
} from "@aoagents/ao-core";
import { exec } from "../lib/shell.js";
import { banner } from "../lib/format.js";
import { getSessionManager } from "../lib/create-session-manager.js";

View File

@ -34,7 +34,7 @@ import {
type OrchestratorConfig,
type ProjectConfig,
type ParsedRepoUrl,
} from "@composio/ao-core";
} from "@aoagents/ao-core";
import { parse as yamlParse, stringify as yamlStringify } from "yaml";
import { exec, execSilent, git } from "../lib/shell.js";
import { getSessionManager } from "../lib/create-session-manager.js";

View File

@ -12,7 +12,7 @@ import {
type ProjectConfig,
isOrchestratorSession,
loadConfig,
} from "@composio/ao-core";
} from "@aoagents/ao-core";
import { git, getTmuxSessions, getTmuxActivity } from "../lib/shell.js";
import {
banner,

View File

@ -6,7 +6,7 @@ import {
type OrchestratorConfig,
type PluginRegistry,
loadConfig,
} from "@composio/ao-core";
} from "@aoagents/ao-core";
import { importPluginModuleFromSource } from "../lib/plugin-store.js";
/**
@ -56,7 +56,7 @@ async function getTracker(
// getSessionManager internally creates the registry; we need the registry
// directly, so we replicate the same pattern from create-session-manager.
const { createPluginRegistry } = await import("@composio/ao-core");
const { createPluginRegistry } = await import("@aoagents/ao-core");
const registry = createPluginRegistry();
await registry.loadFromConfig(config, importPluginModuleFromSource);

View File

@ -15,7 +15,7 @@ import {
type OpenCodeSessionManager,
type PluginRegistry,
type LifecycleManager,
} from "@composio/ao-core";
} from "@aoagents/ao-core";
import { importPluginModuleFromSource } from "./plugin-store.js";
const registryPromises = new Map<string, Promise<PluginRegistry>>();

View File

@ -24,7 +24,7 @@ export function assertDashboardRebuildSupported(webDir: string): void {
if (isInstalledUnderNodeModules(webDir)) {
throw new Error(
"Dashboard rebuild is only available from a source checkout. " +
"Run `ao update`, or reinstall with `npm install -g @composio/ao@latest`.",
"Run `ao update`, or reinstall with `npm install -g @aoagents/ao@latest`.",
);
}
}

View File

@ -4,7 +4,7 @@
* No hardcoded binary paths relies entirely on each plugin's detect() export.
*/
import type { PluginModule } from "@composio/ao-core";
import type { PluginModule } from "@aoagents/ao-core";
import { isHumanCaller } from "./caller-context.js";
import { promptSelect } from "./prompts.js";
@ -15,10 +15,10 @@ export interface DetectedAgent {
/** Known agent plugins — package name mapping. */
const AGENT_PLUGINS: Array<{ name: string; pkg: string }> = [
{ name: "claude-code", pkg: "@composio/ao-plugin-agent-claude-code" },
{ name: "aider", pkg: "@composio/ao-plugin-agent-aider" },
{ name: "codex", pkg: "@composio/ao-plugin-agent-codex" },
{ name: "opencode", pkg: "@composio/ao-plugin-agent-opencode" },
{ name: "claude-code", pkg: "@aoagents/ao-plugin-agent-claude-code" },
{ name: "aider", pkg: "@aoagents/ao-plugin-agent-aider" },
{ name: "codex", pkg: "@aoagents/ao-plugin-agent-codex" },
{ name: "opencode", pkg: "@aoagents/ao-plugin-agent-opencode" },
];
/**

View File

@ -1,5 +1,5 @@
import chalk from "chalk";
import type { CIStatus, ReviewDecision, ActivityState } from "@composio/ao-core";
import type { CIStatus, ReviewDecision, ActivityState } from "@aoagents/ao-core";
export function header(title: string): string {
const line = "─".repeat(76);

View File

@ -9,7 +9,7 @@ import {
writeFileSync,
} from "node:fs";
import { join } from "node:path";
import { getProjectBaseDir, type OrchestratorConfig } from "@composio/ao-core";
import { getProjectBaseDir, type OrchestratorConfig } from "@aoagents/ao-core";
const LIFECYCLE_PID_FILE = "lifecycle-worker.pid";
const LIFECYCLE_LOG_FILE = "lifecycle-worker.log";

View File

@ -3,7 +3,7 @@ import { createRequire } from "node:module";
import { homedir } from "node:os";
import { dirname, isAbsolute, join, resolve } from "node:path";
import { pathToFileURL } from "node:url";
import { resolveLocalPluginEntrypoint, type InstalledPluginConfig, type PluginSlot } from "@composio/ao-core";
import { resolveLocalPluginEntrypoint, type InstalledPluginConfig, type PluginSlot } from "@aoagents/ao-core";
const registryData = createRequire(import.meta.url)("../assets/plugin-registry.json") as unknown[];
@ -19,7 +19,7 @@ export interface MarketplacePluginEntry {
export const BUNDLED_MARKETPLACE_PLUGIN_CATALOG = registryData as MarketplacePluginEntry[];
export const DEFAULT_REMOTE_MARKETPLACE_REGISTRY_URL =
"https://raw.githubusercontent.com/ComposioHQ/agent-orchestrator/main/packages/cli/src/assets/plugin-registry.json";
"https://raw.githubusercontent.com/aoagents/ao/main/packages/cli/src/assets/plugin-registry.json";
const MARKETPLACE_CACHE_FILE = "plugin-registry.json";
const MARKETPLACE_FETCH_TIMEOUT_MS = 30_000;
@ -125,7 +125,7 @@ export async function refreshMarketplaceCatalog(
return mergedEntries;
}
export { normalizeImportedPluginModule } from "@composio/ao-core";
export { normalizeImportedPluginModule } from "@aoagents/ao-core";
export function isLocalPluginReference(reference: string): boolean {
return (

View File

@ -1,6 +1,6 @@
import { existsSync, mkdirSync, readdirSync, writeFileSync } from "node:fs";
import { join, resolve } from "node:path";
import type { PluginSlot } from "@composio/ao-core";
import type { PluginSlot } from "@aoagents/ao-core";
export interface PluginScaffoldInput {
author?: string;
@ -80,7 +80,7 @@ function buildPackageJson(input: PluginScaffoldInput): string {
clean: "rm -rf dist",
},
dependencies: {
"@composio/ao-core": CORE_VERSION_RANGE,
"@aoagents/ao-core": CORE_VERSION_RANGE,
},
devDependencies: {
"@types/node": NODE_TYPES_VERSION,
@ -122,7 +122,7 @@ function buildIndexTs(input: PluginScaffoldInput): string {
const displayName = input.displayName.replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\n/g, '\\n');
const description = input.description.replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\n/g, '\\n');
return `import type { PluginModule } from "@composio/ao-core";
return `import type { PluginModule } from "@aoagents/ao-core";
export const manifest = {
name: "${manifestName}",

View File

@ -1,9 +1,9 @@
import type { Agent, OrchestratorConfig, PluginRegistry, SCM } from "@composio/ao-core";
import claudeCodePlugin from "@composio/ao-plugin-agent-claude-code";
import codexPlugin from "@composio/ao-plugin-agent-codex";
import aiderPlugin from "@composio/ao-plugin-agent-aider";
import opencodePlugin from "@composio/ao-plugin-agent-opencode";
import githubSCMPlugin from "@composio/ao-plugin-scm-github";
import type { Agent, OrchestratorConfig, PluginRegistry, SCM } from "@aoagents/ao-core";
import claudeCodePlugin from "@aoagents/ao-plugin-agent-claude-code";
import codexPlugin from "@aoagents/ao-plugin-agent-codex";
import aiderPlugin from "@aoagents/ao-plugin-agent-aider";
import opencodePlugin from "@aoagents/ao-plugin-agent-opencode";
import githubSCMPlugin from "@aoagents/ao-plugin-scm-github";
const agentPlugins: Record<string, { create(): Agent }> = {
"claude-code": claudeCodePlugin,

View File

@ -28,7 +28,7 @@ async function checkPort(port: number): Promise<void> {
/**
* Check that workspace packages have been compiled (TypeScript JavaScript).
* Locates @composio/ao-core by walking up from webDir, handling both pnpm
* Locates @aoagents/ao-core by walking up from webDir, handling both pnpm
* workspaces (symlinked deps in webDir/node_modules) and npm/yarn global
* installs (hoisted to a parent node_modules).
*/
@ -37,14 +37,14 @@ async function checkBuilt(webDir: string): Promise<void> {
const corePkgDir = findPackageUp(webDir, "@composio", "ao-core");
if (!corePkgDir) {
const hint = isNpmInstall
? "Run: npm install -g @composio/ao@latest"
? "Run: npm install -g @aoagents/ao@latest"
: "Run: pnpm install && pnpm build";
throw new Error(`Dependencies not installed. ${hint}`);
}
const coreEntry = resolve(corePkgDir, "dist", "index.js");
if (!existsSync(coreEntry)) {
const hint = isNpmInstall
? "Run: npm install -g @composio/ao@latest"
? "Run: npm install -g @aoagents/ao@latest"
: "Run: pnpm build";
throw new Error(`Packages not built. ${hint}`);
}
@ -53,7 +53,7 @@ async function checkBuilt(webDir: string): Promise<void> {
const startAllEntry = resolve(webDir, "dist-server", "start-all.js");
if (!existsSync(webBuildId) || !existsSync(startAllEntry)) {
const hint = isNpmInstall
? "Run: npm install -g @composio/ao@latest"
? "Run: npm install -g @aoagents/ao@latest"
: "Run: pnpm build";
throw new Error(`Packages not built. ${hint}`);
}

View File

@ -1,4 +1,4 @@
import type { OrchestratorConfig } from "@composio/ao-core";
import type { OrchestratorConfig } from "@aoagents/ao-core";
export function escapeRegex(str: string): string {
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");

View File

@ -1,5 +1,5 @@
/**
* Web directory locator finds the @composio/ao-web package.
* Web directory locator finds the @aoagents/ao-web package.
* Shared utility to avoid duplication between dashboard.ts and start.ts.
*/
@ -177,14 +177,14 @@ export async function buildDashboardEnv(
}
/**
* Locate the @composio/ao-web package directory.
* Locate the @aoagents/ao-web package directory.
* Uses createRequire for ESM-compatible require.resolve, with fallback
* to sibling package paths that work from both src/ and dist/.
*/
export function findWebDir(): string {
// Try to resolve from node_modules first (installed as workspace dep)
try {
const pkgJson = require.resolve("@composio/ao-web/package.json");
const pkgJson = require.resolve("@aoagents/ao-web/package.json");
return resolve(pkgJson, "..");
} catch {
// Fallback: sibling package in monorepo (works both from src/ and dist/)
@ -200,8 +200,8 @@ export function findWebDir(): string {
}
}
throw new Error(
"Could not find @composio/ao-web package.\n" +
" If installed via npm: npm install -g @composio/ao\n" +
"Could not find @aoagents/ao-web package.\n" +
" If installed via npm: npm install -g @aoagents/ao\n" +
" If cloned from source: pnpm install && pnpm build",
);
}

View File

@ -20,35 +20,35 @@ export default defineConfig({
resolve: {
alias: [
{
find: "@composio/ao-core/scm-webhook-utils",
find: "@aoagents/ao-core/scm-webhook-utils",
replacement: resolve(__dirname, "../core/src/scm-webhook-utils.ts"),
},
{
find: "@composio/ao-core/types",
find: "@aoagents/ao-core/types",
replacement: resolve(__dirname, "../core/src/types.ts"),
},
{
find: "@composio/ao-core",
find: "@aoagents/ao-core",
replacement: resolve(__dirname, "../core/src/index.ts"),
},
{
find: "@composio/ao-plugin-agent-claude-code",
find: "@aoagents/ao-plugin-agent-claude-code",
replacement: resolve(__dirname, "../plugins/agent-claude-code/src/index.ts"),
},
{
find: "@composio/ao-plugin-agent-codex",
find: "@aoagents/ao-plugin-agent-codex",
replacement: resolve(__dirname, "../plugins/agent-codex/src/index.ts"),
},
{
find: "@composio/ao-plugin-agent-aider",
find: "@aoagents/ao-plugin-agent-aider",
replacement: resolve(__dirname, "../plugins/agent-aider/src/index.ts"),
},
{
find: "@composio/ao-plugin-agent-opencode",
find: "@aoagents/ao-plugin-agent-opencode",
replacement: resolve(__dirname, "../plugins/agent-opencode/src/index.ts"),
},
{
find: "@composio/ao-plugin-scm-github",
find: "@aoagents/ao-plugin-scm-github",
replacement: resolve(__dirname, "../plugins/scm-github/src/index.ts"),
},
],

View File

@ -1,4 +1,4 @@
# @composio/ao-core
# @aoagents/ao-core
Core services, types, and configuration for the Agent Orchestrator system.
@ -125,7 +125,7 @@ Loads and validates `agent-orchestrator.yaml`:
1. Edit `src/types.ts``Session` interface
2. Edit `src/services/session-manager.ts` → initialize field in `spawn()`
3. Rebuild: `pnpm --filter @composio/ao-core build`
3. Rebuild: `pnpm --filter @aoagents/ao-core build`
### Adding an Event Type
@ -141,7 +141,7 @@ Loads and validates `agent-orchestrator.yaml`:
### Feedback Tools (v1)
`@composio/ao-core` exports two structured feedback tool contracts:
`@aoagents/ao-core` exports two structured feedback tool contracts:
- `bug_report`
- `improvement_suggestion`
@ -158,7 +158,7 @@ Both share the same required input fields:
Example:
```ts
import { FEEDBACK_TOOL_NAMES, FeedbackReportStore, getFeedbackReportsDir } from "@composio/ao-core";
import { FEEDBACK_TOOL_NAMES, FeedbackReportStore, getFeedbackReportsDir } from "@aoagents/ao-core";
const reportsDir = getFeedbackReportsDir(configPath, projectPath);
const store = new FeedbackReportStore(reportsDir);
@ -188,13 +188,13 @@ Migration notes:
```bash
# Run all core tests
pnpm --filter @composio/ao-core test
pnpm --filter @aoagents/ao-core test
# Run in watch mode
pnpm --filter @composio/ao-core test -- --watch
pnpm --filter @aoagents/ao-core test -- --watch
# Run specific test
pnpm --filter @composio/ao-core test -- session-manager.test.ts
pnpm --filter @aoagents/ao-core test -- session-manager.test.ts
```
Tests are in `src/__tests__/`:
@ -209,10 +209,10 @@ Tests are in `src/__tests__/`:
```bash
# Build core
pnpm --filter @composio/ao-core build
pnpm --filter @aoagents/ao-core build
# Typecheck
pnpm --filter @composio/ao-core typecheck
pnpm --filter @aoagents/ao-core typecheck
```
This package is a dependency of all other packages. Build it first if working on the codebase.

View File

@ -1,5 +1,5 @@
{
"name": "@composio/ao-core",
"name": "@aoagents/ao-core",
"version": "0.2.0",
"description": "Core library — types, config, session manager, lifecycle manager, event bus",
"license": "MIT",
@ -29,12 +29,12 @@
],
"repository": {
"type": "git",
"url": "https://github.com/ComposioHQ/agent-orchestrator.git",
"url": "https://github.com/aoagents/ao.git",
"directory": "packages/core"
},
"homepage": "https://github.com/ComposioHQ/agent-orchestrator",
"homepage": "https://github.com/aoagents/ao",
"bugs": {
"url": "https://github.com/ComposioHQ/agent-orchestrator/issues"
"url": "https://github.com/aoagents/ao/issues"
},
"engines": {
"node": ">=20.0.0"

View File

@ -37,8 +37,8 @@ import { createSessionManager } from "../session-manager.js";
import { createLifecycleManager } from "../lifecycle-manager.js";
import { writeMetadata } from "../metadata.js";
import { getSessionsDir, getProjectBaseDir } from "../paths.js";
import trackerGithub from "@composio/ao-plugin-tracker-github";
import scmGithub from "@composio/ao-plugin-scm-github";
import trackerGithub from "@aoagents/ao-plugin-tracker-github";
import scmGithub from "@aoagents/ao-plugin-scm-github";
import { createMockPlugins, makeHandle, makeSession as makeSessionBase, makePR, type TestEnvironment } from "./test-utils.js";
import type {
OrchestratorConfig,

View File

@ -152,9 +152,9 @@ describe("loadBuiltins", () => {
const fakeOpenCode = makePlugin("agent", "opencode");
await registry.loadBuiltins(undefined, async (pkg: string) => {
if (pkg === "@composio/ao-plugin-agent-claude-code") return fakeClaudeCode;
if (pkg === "@composio/ao-plugin-agent-codex") return fakeCodex;
if (pkg === "@composio/ao-plugin-agent-opencode") return fakeOpenCode;
if (pkg === "@aoagents/ao-plugin-agent-claude-code") return fakeClaudeCode;
if (pkg === "@aoagents/ao-plugin-agent-codex") return fakeCodex;
if (pkg === "@aoagents/ao-plugin-agent-opencode") return fakeOpenCode;
throw new Error(`Not found: ${pkg}`);
});
@ -175,8 +175,8 @@ describe("loadBuiltins", () => {
const fakeScm = makePlugin("scm", "gitlab");
await registry.loadBuiltins(undefined, async (pkg: string) => {
if (pkg === "@composio/ao-plugin-tracker-gitlab") return fakeTracker;
if (pkg === "@composio/ao-plugin-scm-gitlab") return fakeScm;
if (pkg === "@aoagents/ao-plugin-tracker-gitlab") return fakeTracker;
if (pkg === "@aoagents/ao-plugin-scm-gitlab") return fakeScm;
throw new Error(`Not found: ${pkg}`);
});
@ -203,7 +203,7 @@ describe("loadBuiltins", () => {
});
await registry.loadBuiltins(config, async (pkg: string) => {
if (pkg === "@composio/ao-plugin-notifier-webhook") return fakeWebhookNotifier;
if (pkg === "@aoagents/ao-plugin-notifier-webhook") return fakeWebhookNotifier;
throw new Error(`Not found: ${pkg}`);
});
@ -228,7 +228,7 @@ describe("loadBuiltins", () => {
});
await registry.loadBuiltins(config, async (pkg: string) => {
if (pkg === "@composio/ao-plugin-notifier-webhook") return fakeWebhookNotifier;
if (pkg === "@aoagents/ao-plugin-notifier-webhook") return fakeWebhookNotifier;
throw new Error(`Not found: ${pkg}`);
});
@ -252,7 +252,7 @@ describe("loadBuiltins", () => {
});
await registry.loadBuiltins(cfg, async (pkg: string) => {
if (pkg === "@composio/ao-plugin-notifier-openclaw") return fakeOpenClaw;
if (pkg === "@aoagents/ao-plugin-notifier-openclaw") return fakeOpenClaw;
throw new Error(`Not found: ${pkg}`);
});
@ -271,7 +271,7 @@ describe("loadBuiltins", () => {
mywebhook: {
plugin: "webhook",
// package field is allowed for resolution but should be stripped:
package: "@composio/ao-plugin-notifier-webhook",
package: "@aoagents/ao-plugin-notifier-webhook",
// These are plugin-specific fields that should be passed through:
url: "https://webhook.example.com/notify",
retries: 3,
@ -280,7 +280,7 @@ describe("loadBuiltins", () => {
});
await registry.loadBuiltins(cfg, async (pkg: string) => {
if (pkg === "@composio/ao-plugin-notifier-webhook") return fakeWebhook;
if (pkg === "@aoagents/ao-plugin-notifier-webhook") return fakeWebhook;
throw new Error(`Not found: ${pkg}`);
});
@ -308,7 +308,7 @@ describe("loadBuiltins", () => {
const stderrSpy = vi.spyOn(process.stderr, "write").mockImplementation(() => true);
await registry.loadBuiltins(cfg, async (pkg: string) => {
if (pkg === "@composio/ao-plugin-notifier-webhook") return fakeWebhook;
if (pkg === "@aoagents/ao-plugin-notifier-webhook") return fakeWebhook;
return null;
});
@ -334,8 +334,8 @@ describe("loadBuiltins", () => {
});
await registry.loadBuiltins(cfg, async (pkg: string) => {
if (pkg === "@composio/ao-plugin-notifier-openclaw") return fakeOpenClaw;
if (pkg === "@composio/ao-plugin-notifier-webhook") return fakeWebhook;
if (pkg === "@aoagents/ao-plugin-notifier-openclaw") return fakeOpenClaw;
if (pkg === "@aoagents/ao-plugin-notifier-webhook") return fakeWebhook;
throw new Error(`Not found: ${pkg}`);
});
@ -353,7 +353,7 @@ describe("loadBuiltins", () => {
const fakeImportFn = async (pkg: string): Promise<unknown> => {
importedPackages.push(pkg);
// Return a valid plugin module for runtime-tmux
if (pkg === "@composio/ao-plugin-runtime-tmux") {
if (pkg === "@aoagents/ao-plugin-runtime-tmux") {
return {
manifest: { name: "tmux", slot: "runtime", description: "test", version: "0.0.0" },
create: () => ({ name: "tmux" }),
@ -367,7 +367,7 @@ describe("loadBuiltins", () => {
// importFn should have been called for all builtin plugins
expect(importedPackages.length).toBeGreaterThan(0);
expect(importedPackages).toContain("@composio/ao-plugin-runtime-tmux");
expect(importedPackages).toContain("@aoagents/ao-plugin-runtime-tmux");
// The tmux plugin should be registered
const tmux = registry.get("runtime", "tmux");
@ -424,7 +424,7 @@ describe("loadFromConfig", () => {
// Should have attempted to import builtin plugins via the provided importFn
expect(importedPackages.length).toBeGreaterThan(0);
expect(importedPackages).toContain("@composio/ao-plugin-runtime-tmux");
expect(importedPackages).toContain("@aoagents/ao-plugin-runtime-tmux");
});
it("loads external package plugins from config.plugins", async () => {

View File

@ -1,5 +1,5 @@
/**
* @composio/ao-core
* @aoagents/ao-core
*
* Core library for the Agent Orchestrator.
* Exports all types, config loader, and service implementations.

View File

@ -3,7 +3,7 @@
*
* Plugins can be:
* 1. Built-in (packages/plugins/*)
* 2. npm packages (@composio/ao-plugin-*)
* 2. npm packages (@aoagents/ao-plugin-*)
* 3. Local file paths specified in config
*/
@ -32,33 +32,33 @@ function makeKey(slot: PluginSlot, name: string): string {
/** Built-in plugin package names, mapped to their npm package */
const BUILTIN_PLUGINS: Array<{ slot: PluginSlot; name: string; pkg: string }> = [
// Runtimes
{ slot: "runtime", name: "tmux", pkg: "@composio/ao-plugin-runtime-tmux" },
{ slot: "runtime", name: "process", pkg: "@composio/ao-plugin-runtime-process" },
{ slot: "runtime", name: "tmux", pkg: "@aoagents/ao-plugin-runtime-tmux" },
{ slot: "runtime", name: "process", pkg: "@aoagents/ao-plugin-runtime-process" },
// Agents
{ slot: "agent", name: "claude-code", pkg: "@composio/ao-plugin-agent-claude-code" },
{ slot: "agent", name: "codex", pkg: "@composio/ao-plugin-agent-codex" },
{ slot: "agent", name: "aider", pkg: "@composio/ao-plugin-agent-aider" },
{ slot: "agent", name: "opencode", pkg: "@composio/ao-plugin-agent-opencode" },
{ slot: "agent", name: "claude-code", pkg: "@aoagents/ao-plugin-agent-claude-code" },
{ slot: "agent", name: "codex", pkg: "@aoagents/ao-plugin-agent-codex" },
{ slot: "agent", name: "aider", pkg: "@aoagents/ao-plugin-agent-aider" },
{ slot: "agent", name: "opencode", pkg: "@aoagents/ao-plugin-agent-opencode" },
// Workspaces
{ slot: "workspace", name: "worktree", pkg: "@composio/ao-plugin-workspace-worktree" },
{ slot: "workspace", name: "clone", pkg: "@composio/ao-plugin-workspace-clone" },
{ slot: "workspace", name: "worktree", pkg: "@aoagents/ao-plugin-workspace-worktree" },
{ slot: "workspace", name: "clone", pkg: "@aoagents/ao-plugin-workspace-clone" },
// Trackers
{ slot: "tracker", name: "github", pkg: "@composio/ao-plugin-tracker-github" },
{ slot: "tracker", name: "linear", pkg: "@composio/ao-plugin-tracker-linear" },
{ slot: "tracker", name: "gitlab", pkg: "@composio/ao-plugin-tracker-gitlab" },
{ slot: "tracker", name: "github", pkg: "@aoagents/ao-plugin-tracker-github" },
{ slot: "tracker", name: "linear", pkg: "@aoagents/ao-plugin-tracker-linear" },
{ slot: "tracker", name: "gitlab", pkg: "@aoagents/ao-plugin-tracker-gitlab" },
// SCM
{ slot: "scm", name: "github", pkg: "@composio/ao-plugin-scm-github" },
{ slot: "scm", name: "gitlab", pkg: "@composio/ao-plugin-scm-gitlab" },
{ slot: "scm", name: "github", pkg: "@aoagents/ao-plugin-scm-github" },
{ slot: "scm", name: "gitlab", pkg: "@aoagents/ao-plugin-scm-gitlab" },
// Notifiers
{ slot: "notifier", name: "composio", pkg: "@composio/ao-plugin-notifier-composio" },
{ slot: "notifier", name: "desktop", pkg: "@composio/ao-plugin-notifier-desktop" },
{ slot: "notifier", name: "discord", pkg: "@composio/ao-plugin-notifier-discord" },
{ slot: "notifier", name: "openclaw", pkg: "@composio/ao-plugin-notifier-openclaw" },
{ slot: "notifier", name: "slack", pkg: "@composio/ao-plugin-notifier-slack" },
{ slot: "notifier", name: "webhook", pkg: "@composio/ao-plugin-notifier-webhook" },
{ slot: "notifier", name: "composio", pkg: "@aoagents/ao-plugin-notifier-composio" },
{ slot: "notifier", name: "desktop", pkg: "@aoagents/ao-plugin-notifier-desktop" },
{ slot: "notifier", name: "discord", pkg: "@aoagents/ao-plugin-notifier-discord" },
{ slot: "notifier", name: "openclaw", pkg: "@aoagents/ao-plugin-notifier-openclaw" },
{ slot: "notifier", name: "slack", pkg: "@aoagents/ao-plugin-notifier-slack" },
{ slot: "notifier", name: "webhook", pkg: "@aoagents/ao-plugin-notifier-webhook" },
// Terminals
{ slot: "terminal", name: "iterm2", pkg: "@composio/ao-plugin-terminal-iterm2" },
{ slot: "terminal", name: "web", pkg: "@composio/ao-plugin-terminal-web" },
{ slot: "terminal", name: "iterm2", pkg: "@aoagents/ao-plugin-terminal-iterm2" },
{ slot: "terminal", name: "web", pkg: "@aoagents/ao-plugin-terminal-web" },
];
function extractPluginConfig(

View File

@ -10,11 +10,11 @@ export default defineConfig({
// Integration tests import real plugins. These aliases resolve
// package names to source files so we don't need circular devDeps
// (plugins depend on core, core can't depend on plugins).
"@composio/ao-plugin-tracker-github": resolve(
"@aoagents/ao-plugin-tracker-github": resolve(
__dirname,
"../plugins/tracker-github/src/index.ts",
),
"@composio/ao-plugin-scm-github": resolve(__dirname, "../plugins/scm-github/src/index.ts"),
"@aoagents/ao-plugin-scm-github": resolve(__dirname, "../plugins/scm-github/src/index.ts"),
},
coverage: {
provider: "v8",

View File

@ -1,5 +1,5 @@
{
"name": "@composio/ao-integration-tests",
"name": "@aoagents/ao-integration-tests",
"version": "0.1.0",
"private": true,
"description": "Integration tests — requires real binaries and tmux",
@ -10,25 +10,25 @@
"typecheck": "tsc --noEmit"
},
"dependencies": {
"@composio/ao-core": "workspace:*",
"@composio/ao-plugin-agent-claude-code": "workspace:*",
"@composio/ao-plugin-agent-codex": "workspace:*",
"@composio/ao-plugin-agent-aider": "workspace:*",
"@composio/ao-plugin-agent-opencode": "workspace:*",
"@composio/ao-plugin-runtime-tmux": "workspace:*",
"@composio/ao-plugin-runtime-process": "workspace:*",
"@composio/ao-plugin-workspace-worktree": "workspace:*",
"@composio/ao-plugin-workspace-clone": "workspace:*",
"@composio/ao-plugin-tracker-linear": "workspace:*"
"@aoagents/ao-core": "workspace:*",
"@aoagents/ao-plugin-agent-claude-code": "workspace:*",
"@aoagents/ao-plugin-agent-codex": "workspace:*",
"@aoagents/ao-plugin-agent-aider": "workspace:*",
"@aoagents/ao-plugin-agent-opencode": "workspace:*",
"@aoagents/ao-plugin-runtime-tmux": "workspace:*",
"@aoagents/ao-plugin-runtime-process": "workspace:*",
"@aoagents/ao-plugin-workspace-worktree": "workspace:*",
"@aoagents/ao-plugin-workspace-clone": "workspace:*",
"@aoagents/ao-plugin-tracker-linear": "workspace:*"
},
"devDependencies": {
"@composio/ao-plugin-notifier-desktop": "workspace:*",
"@composio/ao-plugin-notifier-openclaw": "workspace:*",
"@composio/ao-plugin-notifier-slack": "workspace:*",
"@composio/ao-plugin-notifier-webhook": "workspace:*",
"@composio/ao-plugin-notifier-composio": "workspace:*",
"@composio/ao-plugin-terminal-iterm2": "workspace:*",
"@composio/ao-plugin-terminal-web": "workspace:*",
"@aoagents/ao-plugin-notifier-desktop": "workspace:*",
"@aoagents/ao-plugin-notifier-openclaw": "workspace:*",
"@aoagents/ao-plugin-notifier-slack": "workspace:*",
"@aoagents/ao-plugin-notifier-webhook": "workspace:*",
"@aoagents/ao-plugin-notifier-composio": "workspace:*",
"@aoagents/ao-plugin-terminal-iterm2": "workspace:*",
"@aoagents/ao-plugin-terminal-web": "workspace:*",
"@vitest/coverage-v8": "^3.0.0",
"@types/node": "^25.2.3",
"typescript": "^5.7.0",

View File

@ -14,9 +14,9 @@ import { mkdtemp, rm } from "node:fs/promises";
import { tmpdir } from "node:os";
import { join } from "node:path";
import { promisify } from "node:util";
import type { ActivityDetection, AgentSessionInfo } from "@composio/ao-core";
import type { ActivityDetection, AgentSessionInfo } from "@aoagents/ao-core";
import { afterAll, beforeAll, describe, expect, it } from "vitest";
import aiderPlugin from "@composio/ao-plugin-agent-aider";
import aiderPlugin from "@aoagents/ao-plugin-agent-aider";
import {
isTmuxAvailable,
killSessionsByPrefix,

View File

@ -23,9 +23,9 @@ import {
readLastJsonlEntry,
type ActivityDetection,
type AgentSessionInfo,
} from "@composio/ao-core";
} from "@aoagents/ao-core";
import { afterAll, beforeAll, describe, expect, it, vi } from "vitest";
import claudeCodePlugin, { toClaudeProjectPath } from "@composio/ao-plugin-agent-claude-code";
import claudeCodePlugin, { toClaudeProjectPath } from "@aoagents/ao-plugin-agent-claude-code";
import {
isTmuxAvailable,
killSessionsByPrefix,

View File

@ -1,6 +1,6 @@
import { describe, expect, it } from "vitest";
import type { AgentLaunchConfig } from "@composio/ao-core";
import codexPlugin from "@composio/ao-plugin-agent-codex";
import type { AgentLaunchConfig } from "@aoagents/ao-core";
import codexPlugin from "@aoagents/ao-plugin-agent-codex";
function makeLaunchConfig(overrides: Partial<AgentLaunchConfig> = {}): AgentLaunchConfig {
return {

View File

@ -14,9 +14,9 @@ import { mkdtemp, rm } from "node:fs/promises";
import { tmpdir } from "node:os";
import { join } from "node:path";
import { promisify } from "node:util";
import type { ActivityDetection, AgentSessionInfo } from "@composio/ao-core";
import type { ActivityDetection, AgentSessionInfo } from "@aoagents/ao-core";
import { afterAll, beforeAll, describe, expect, it } from "vitest";
import codexPlugin from "@composio/ao-plugin-agent-codex";
import codexPlugin from "@aoagents/ao-plugin-agent-codex";
import {
isTmuxAvailable,
killSessionsByPrefix,

View File

@ -16,9 +16,9 @@ import { mkdtemp, readFile, rm } from "node:fs/promises";
import { homedir, tmpdir } from "node:os";
import { join } from "node:path";
import { promisify } from "node:util";
import type { ActivityDetection, AgentSessionInfo } from "@composio/ao-core";
import type { ActivityDetection, AgentSessionInfo } from "@aoagents/ao-core";
import { afterAll, beforeAll, describe, expect, it } from "vitest";
import opencodePlugin from "@composio/ao-plugin-agent-opencode";
import opencodePlugin from "@aoagents/ao-plugin-agent-opencode";
import {
isTmuxAvailable,
killSessionsByPrefix,

View File

@ -25,7 +25,7 @@ import {
generateConfigHash,
getSessionsDir,
generateTmuxName,
} from "@composio/ao-core";
} from "@aoagents/ao-core";
import { isTmuxAvailable, killSessionsByPrefix, killSession } from "./helpers/tmux.js";
const tmuxOk = await isTmuxAvailable();

View File

@ -21,7 +21,7 @@ import {
deleteMetadata,
listMetadata,
validateAndStoreOrigin,
} from "@composio/ao-core";
} from "@aoagents/ao-core";
describe("config → metadata service integration (real filesystem)", () => {
let tmpDir: string;

View File

@ -5,7 +5,7 @@ import type {
EventType,
SessionStatus,
ActivityState,
} from "@composio/ao-core";
} from "@aoagents/ao-core";
/**
* Create a test OrchestratorEvent with sensible defaults.

View File

@ -2,7 +2,7 @@
* Factory helpers to build Session and RuntimeHandle objects for tests.
*/
import type { RuntimeHandle, Session } from "@composio/ao-core";
import type { RuntimeHandle, Session } from "@aoagents/ao-core";
/** Build a tmux RuntimeHandle for a given session name. */
export function makeTmuxHandle(sessionName: string): RuntimeHandle {

View File

@ -2,7 +2,7 @@
* Integration test for metadata lifecycle real filesystem operations.
*
* Tests the full metadata CRUD cycle (write, read, update, list, delete/archive)
* and concurrent access patterns using @composio/ao-core metadata functions
* and concurrent access patterns using @aoagents/ao-core metadata functions
* with real filesystem I/O.
*/
@ -19,7 +19,7 @@ import {
deleteMetadata,
listMetadata,
type SessionMetadata,
} from "@composio/ao-core";
} from "@aoagents/ao-core";
describe("metadata lifecycle (real filesystem)", () => {
let tmpDir: string;

View File

@ -5,8 +5,8 @@
* Everything else runs for real: config parsing, tool slug routing, message formatting.
*/
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
import type { NotifyAction } from "@composio/ao-core";
import composioPlugin from "@composio/ao-plugin-notifier-composio";
import type { NotifyAction } from "@aoagents/ao-core";
import composioPlugin from "@aoagents/ao-plugin-notifier-composio";
import { makeEvent } from "./helpers/event-factory.js";
const mockExecuteAction = vi.fn().mockResolvedValue({ successful: true });

View File

@ -5,7 +5,7 @@
* Everything else runs for real: config parsing, escaping chains, formatting.
*/
import { describe, it, expect, vi, beforeEach, type Mock } from "vitest";
import type { NotifyAction } from "@composio/ao-core";
import type { NotifyAction } from "@aoagents/ao-core";
import { makeEvent } from "./helpers/event-factory.js";
vi.mock("node:child_process", () => ({
@ -23,7 +23,7 @@ const mockExecFile = execFile as unknown as Mock;
const mockPlatform = platform as unknown as Mock;
// Import the full plugin module — config parsing, escaping, formatting all run for real
import desktopPlugin from "@composio/ao-plugin-notifier-desktop";
import desktopPlugin from "@aoagents/ao-plugin-notifier-desktop";
describe("notifier-desktop integration", () => {
beforeEach(() => {

View File

@ -4,8 +4,8 @@
* Mocks network boundary only (global fetch + timers).
*/
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
import type { NotifyAction } from "@composio/ao-core";
import openClawPlugin from "@composio/ao-plugin-notifier-openclaw";
import type { NotifyAction } from "@aoagents/ao-core";
import openClawPlugin from "@aoagents/ao-plugin-notifier-openclaw";
import { makeEvent } from "./helpers/event-factory.js";
describe("notifier-openclaw integration", () => {

View File

@ -5,8 +5,8 @@
* Everything else runs for real: config parsing, Block Kit construction, channel routing.
*/
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
import type { NotifyAction, EventPriority } from "@composio/ao-core";
import slackPlugin from "@composio/ao-plugin-notifier-slack";
import type { NotifyAction, EventPriority } from "@aoagents/ao-core";
import slackPlugin from "@aoagents/ao-plugin-notifier-slack";
import { makeEvent } from "./helpers/event-factory.js";
function mockFetchOk() {

View File

@ -5,8 +5,8 @@
* Everything else runs for real: config parsing, retry logic, payload serialization.
*/
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
import type { NotifyAction } from "@composio/ao-core";
import webhookPlugin from "@composio/ao-plugin-notifier-webhook";
import type { NotifyAction } from "@aoagents/ao-core";
import webhookPlugin from "@aoagents/ao-plugin-notifier-webhook";
import { makeEvent } from "./helpers/event-factory.js";
describe("notifier-webhook integration", () => {

View File

@ -19,8 +19,8 @@ import { tmpdir } from "node:os";
import { join } from "node:path";
import { promisify } from "node:util";
import { afterAll, beforeAll, describe, expect, it } from "vitest";
import claudeCodePlugin from "@composio/ao-plugin-agent-claude-code";
import runtimeTmuxPlugin from "@composio/ao-plugin-runtime-tmux";
import claudeCodePlugin from "@aoagents/ao-plugin-agent-claude-code";
import runtimeTmuxPlugin from "@aoagents/ao-plugin-runtime-tmux";
import {
isTmuxAvailable,
killSessionsByPrefix,

View File

@ -1,6 +1,6 @@
import { afterAll, describe, expect, it } from "vitest";
import processPlugin from "@composio/ao-plugin-runtime-process";
import type { RuntimeHandle } from "@composio/ao-core";
import processPlugin from "@aoagents/ao-plugin-runtime-process";
import type { RuntimeHandle } from "@aoagents/ao-core";
import { sleep } from "./helpers/polling.js";
describe("runtime-process (integration)", () => {

View File

@ -1,6 +1,6 @@
import { afterAll, beforeAll, describe, expect, it } from "vitest";
import tmuxPlugin from "@composio/ao-plugin-runtime-tmux";
import type { RuntimeHandle } from "@composio/ao-core";
import tmuxPlugin from "@aoagents/ao-plugin-runtime-tmux";
import type { RuntimeHandle } from "@aoagents/ao-core";
import { isTmuxAvailable, killSessionsByPrefix } from "./helpers/tmux.js";
import { sleep } from "./helpers/polling.js";

View File

@ -19,7 +19,7 @@ import { platform } from "node:os";
const mockExecFile = execFile as unknown as Mock;
const mockPlatform = platform as unknown as Mock;
import iterm2Plugin from "@composio/ao-plugin-terminal-iterm2";
import iterm2Plugin from "@aoagents/ao-plugin-terminal-iterm2";
import { makeSession } from "./helpers/event-factory.js";
function simulateOsascript(stdout: string) {

View File

@ -5,7 +5,7 @@
* Tests verify state tracking, URL construction, and log output.
*/
import { describe, it, expect, vi, beforeEach } from "vitest";
import webPlugin from "@composio/ao-plugin-terminal-web";
import webPlugin from "@aoagents/ao-plugin-terminal-web";
import { makeSession } from "./helpers/event-factory.js";
describe("terminal-web integration", () => {

View File

@ -19,9 +19,9 @@
*/
import { request } from "node:https";
import type { ProjectConfig } from "@composio/ao-core";
import type { ProjectConfig } from "@aoagents/ao-core";
import { afterAll, beforeAll, describe, expect, it } from "vitest";
import trackerLinear from "@composio/ao-plugin-tracker-linear";
import trackerLinear from "@aoagents/ao-plugin-tracker-linear";
import { pollUntil, pollUntilEqual } from "./helpers/polling.js";
// ---------------------------------------------------------------------------

View File

@ -5,8 +5,8 @@ import { tmpdir } from "node:os";
import { join } from "node:path";
import { promisify } from "node:util";
import { afterAll, beforeAll, describe, expect, it } from "vitest";
import clonePlugin from "@composio/ao-plugin-workspace-clone";
import type { ProjectConfig, WorkspaceInfo } from "@composio/ao-core";
import clonePlugin from "@aoagents/ao-plugin-workspace-clone";
import type { ProjectConfig, WorkspaceInfo } from "@aoagents/ao-core";
const execFileAsync = promisify(execFile);

View File

@ -5,8 +5,8 @@ import { tmpdir } from "node:os";
import { join } from "node:path";
import { promisify } from "node:util";
import { afterAll, beforeAll, describe, expect, it } from "vitest";
import worktreePlugin from "@composio/ao-plugin-workspace-worktree";
import type { ProjectConfig, WorkspaceInfo } from "@composio/ao-core";
import worktreePlugin from "@aoagents/ao-plugin-workspace-worktree";
import type { ProjectConfig, WorkspaceInfo } from "@aoagents/ao-core";
const execFileAsync = promisify(execFile);

View File

@ -1,5 +1,5 @@
{
"name": "@composio/ao-plugin-agent-aider",
"name": "@aoagents/ao-plugin-agent-aider",
"version": "0.2.0",
"description": "Agent plugin: Aider",
"license": "MIT",
@ -17,12 +17,12 @@
],
"repository": {
"type": "git",
"url": "https://github.com/ComposioHQ/agent-orchestrator.git",
"url": "https://github.com/aoagents/ao.git",
"directory": "packages/plugins/agent-aider"
},
"homepage": "https://github.com/ComposioHQ/agent-orchestrator",
"homepage": "https://github.com/aoagents/ao",
"bugs": {
"url": "https://github.com/ComposioHQ/agent-orchestrator/issues"
"url": "https://github.com/aoagents/ao/issues"
},
"engines": {
"node": ">=20.0.0"
@ -34,7 +34,7 @@
"clean": "rm -rf dist"
},
"dependencies": {
"@composio/ao-core": "workspace:*"
"@aoagents/ao-core": "workspace:*"
},
"devDependencies": {
"@types/node": "^25.2.3",

View File

@ -1,5 +1,5 @@
import { describe, it, expect, vi, beforeEach } from "vitest";
import type { Session, RuntimeHandle, AgentLaunchConfig } from "@composio/ao-core";
import type { Session, RuntimeHandle, AgentLaunchConfig } from "@aoagents/ao-core";
// Mock fs/promises for getSessionInfo tests (readFile for .aider.chat.history.md)
vi.mock("node:fs/promises", async (importOriginal) => {
@ -18,7 +18,7 @@ const { mockAppendActivityEntry, mockReadLastActivityEntry, mockRecordTerminalAc
mockRecordTerminalActivity: vi.fn().mockResolvedValue(undefined),
}));
vi.mock("@composio/ao-core", async (importOriginal) => {
vi.mock("@aoagents/ao-core", async (importOriginal) => {
const actual = (await importOriginal()) as Record<string, unknown>;
return {
...actual,

Some files were not shown because too many files have changed in this diff Show More