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:
parent
48d655d932
commit
f6841f37a8
|
|
@ -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"]
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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__/
|
||||
|
|
|
|||
|
|
@ -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: |
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
20
CLAUDE.md
20
CLAUDE.md
|
|
@ -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:**
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
14
README.md
14
README.md
|
|
@ -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.
|
||||
|
||||
[](https://github.com/ComposioHQ/agent-orchestrator/stargazers)
|
||||
[](https://www.npmjs.com/package/@composio/ao)
|
||||
[](https://github.com/aoagents/ao/stargazers)
|
||||
[](https://www.npmjs.com/package/@aoagents/ao)
|
||||
[](LICENSE)
|
||||
[](https://github.com/ComposioHQ/agent-orchestrator/pulls?q=is%3Amerged)
|
||||
[](https://github.com/ComposioHQ/agent-orchestrator/releases/tag/metrics-v1)
|
||||
[](https://github.com/aoagents/ao/pulls?q=is%3Amerged)
|
||||
[](https://github.com/aoagents/ao/releases/tag/metrics-v1)
|
||||
[](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>
|
||||
|
|
|
|||
14
SETUP.md
14
SETUP.md
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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/
|
||||
|
|
|
|||
|
|
@ -203,7 +203,7 @@ import {
|
|||
generateConfigHash,
|
||||
generateInstanceId,
|
||||
validateAndStoreOrigin,
|
||||
} from "@composio/ao-core";
|
||||
} from "@aoagents/ao-core";
|
||||
|
||||
// Calculate paths dynamically
|
||||
const sessionsDir = getSessionsDir(configPath, projectPath);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
```
|
||||
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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).
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -1,2 +1,2 @@
|
|||
#!/usr/bin/env node
|
||||
import "@composio/ao-cli";
|
||||
import "@aoagents/ao-cli";
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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:*"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
}));
|
||||
|
||||
|
|
|
|||
|
|
@ -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');
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
}));
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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) => {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -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", () => {
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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>>();
|
||||
|
|
|
|||
|
|
@ -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`.",
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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" },
|
||||
];
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
|
|
|
|||
|
|
@ -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 (
|
||||
|
|
|
|||
|
|
@ -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}",
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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}`);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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, "\\$&");
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"),
|
||||
},
|
||||
],
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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 () => {
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* @composio/ao-core
|
||||
* @aoagents/ao-core
|
||||
*
|
||||
* Core library for the Agent Orchestrator.
|
||||
* Exports all types, config loader, and service implementations.
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import type {
|
|||
EventType,
|
||||
SessionStatus,
|
||||
ActivityState,
|
||||
} from "@composio/ao-core";
|
||||
} from "@aoagents/ao-core";
|
||||
|
||||
/**
|
||||
* Create a test OrchestratorEvent with sensible defaults.
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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 });
|
||||
|
|
|
|||
|
|
@ -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(() => {
|
||||
|
|
|
|||
|
|
@ -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", () => {
|
||||
|
|
|
|||
|
|
@ -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() {
|
||||
|
|
|
|||
|
|
@ -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", () => {
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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)", () => {
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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", () => {
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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
Loading…
Reference in New Issue