Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
22 changes: 11 additions & 11 deletions .github/workflows/api-acceptance.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,27 +4,27 @@ on:
push:
branches: [main]
paths:
- 'services/agents-api/**'
- 'services/core/**'
- 'contracts/agents-api/**'
- 'packages/agents-client/**'
- 'internal/**'
- 'go.mod'
- 'go.sum'
- 'Makefile'
- 'scripts/build-agents-api.sh'
- 'scripts/build-agents-api-image.sh'
- 'scripts/build-core.sh'
- 'scripts/build-core-image.sh'
- '.github/workflows/api-acceptance.yml'
pull_request:
paths:
- 'services/agents-api/**'
- 'services/core/**'
- 'contracts/agents-api/**'
- 'packages/agents-client/**'
- 'internal/**'
- 'go.mod'
- 'go.sum'
- 'Makefile'
- 'scripts/build-agents-api.sh'
- 'scripts/build-agents-api-image.sh'
- 'scripts/build-core.sh'
- 'scripts/build-core-image.sh'
- '.github/workflows/api-acceptance.yml'

permissions:
Expand Down Expand Up @@ -62,7 +62,7 @@ jobs:
env:
OAC_TEST_DATABASE_URL: postgres://agents_api:agents_api_test_only@127.0.0.1:${{ job.services.postgres.ports['5432'] }}/oac_ci_tests?sslmode=disable
run: |
OAC_DEV_CORE_BUILD_DIR="$RUNNER_TEMP/oac-core-build" make build-agents-api
OAC_DEV_CORE_BUILD_DIR="$RUNNER_TEMP/oac-core-build" make build-core
OAC_DATABASE_URL="$OAC_TEST_DATABASE_URL" "$RUNNER_TEMP/oac-core-build/oac-core-migrate"
"$RUNNER_TEMP/oac-core-build/oac-core-device" --help
"$RUNNER_TEMP/oac-core-build/oac-core-environment-key" --help
Expand All @@ -74,7 +74,7 @@ jobs:
python - <<'PY'
import json, subprocess, sys
pin = json.load(open('contracts/agents-api/upstream.json'))
subprocess.run([sys.executable, '-m', 'pip', 'install', '-r', 'services/agents-api/tests/requirements.txt',
subprocess.run([sys.executable, '-m', 'pip', 'install', '-r', 'services/core/tests/requirements.txt',
'openai @ git+https://github.com/openai/openai-python@' + pin['commit']], check=True)
PY
- name: Verify official-client HTTP compatibility
Expand All @@ -83,11 +83,11 @@ jobs:
OAC_TEST_SERVER_BIN: ${{ runner.temp }}/oac-core-build/oac-core
OAC_TEST_OFFICIAL_SDK_PYTHON: python
run: |
python services/agents-api/tests/official_client.py
go test ./services/agents-api/internal/store -run '^(TestFunctionStateOfficialClientReadsAndLiveEvents|TestSavedReferenceRetryOfficialClient|TestAgentUpdateOfficialClient|TestAgentDeletionOfficialClient|TestSessionAgentFilterOfficialClient|TestSessionDeletionOfficialClient|TestEnvironmentInitialFailureOfficialClient|TestSelfHostedInitialCreationOfficialClient|TestSelfHostedCancellationOfficialClient|TestSelfHostedFunctionsOfficialClient|TestSelfHostedSteeringOfficialClient)$' -count=1
python services/core/tests/official_client.py
go test ./services/core/internal/store -run '^(TestFunctionStateOfficialClientReadsAndLiveEvents|TestSavedReferenceRetryOfficialClient|TestAgentUpdateOfficialClient|TestAgentDeletionOfficialClient|TestSessionAgentFilterOfficialClient|TestSessionDeletionOfficialClient|TestEnvironmentInitialFailureOfficialClient|TestSelfHostedInitialCreationOfficialClient|TestSelfHostedCancellationOfficialClient|TestSelfHostedFunctionsOfficialClient|TestSelfHostedSteeringOfficialClient)$' -count=1
- name: Verify standalone container distribution
env:
OAC_TEST_DATABASE_URL: postgres://agents_api:agents_api_test_only@127.0.0.1:${{ job.services.postgres.ports['5432'] }}/oac_ci_tests?sslmode=disable
OAC_DEV_CORE_IMAGE: oac-core:ci
OAC_TEST_OFFICIAL_SDK_PYTHON: python
run: make check-agents-api-container
run: make check-core-container
34 changes: 17 additions & 17 deletions .github/workflows/native.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name: native-check
on:
pull_request:
paths:
- 'apps/parsar-daemon/**'
- 'apps/daemon/**'
- 'internal/**'
- 'contracts/agents-api/**'
- 'packages/claude-sdk-adapter/**'
Expand All @@ -12,7 +12,7 @@ on:
- 'scripts/build-native-installer*'
- 'scripts/native-harness-smoke.mjs'
- 'scripts/native-onboarding-smoke.mjs'
- 'services/agents-api/internal/nativeinstaller/**'
- 'services/core/internal/nativeinstaller/**'
- 'scripts/build-mcode-harness.sh'
- 'go.mod'
- 'go.sum'
Expand Down Expand Up @@ -61,42 +61,42 @@ jobs:
node-version: '22.22.0'
- name: Build the native daemon and test bundle boundaries
run: |
go build -ldflags "-X github.com/MiniMax-AI-Dev/parsar/apps/parsar-daemon/internal/cli.Version=$(git rev-parse HEAD)" -o "$RUNNER_TEMP/oac-daemon${{ runner.os == 'Windows' && '.exe' || '' }}" ./apps/parsar-daemon/cmd/parsar-daemon
go build -ldflags "-X github.com/MiniMax-AI/OpenAgentCore/apps/daemon/internal/cli.Version=$(git rev-parse HEAD)" -o "$RUNNER_TEMP/oac-daemon${{ runner.os == 'Windows' && '.exe' || '' }}" ./apps/daemon/cmd/oac-daemon
node --test scripts/build-native-installer.test.mjs
- name: Native filesystem, authentication and process lifecycle
run: >-
go test -race -count=1
./internal/runtimefs
./apps/parsar-daemon/internal/auth
./apps/parsar-daemon/internal/paths
./apps/parsar-daemon/internal/daemonize
./apps/parsar-daemon/internal/agent/clirunner
./apps/daemon/internal/auth
./apps/daemon/internal/paths
./apps/daemon/internal/daemonize
./apps/daemon/internal/agent/clirunner
- name: Native Harness ownership and environment identity
run: >-
go test -race -count=1
./apps/parsar-daemon/internal/agent/codex
./apps/parsar-daemon/internal/agent/claudesdk
./apps/parsar-daemon/internal/agent/mcode
./apps/daemon/internal/agent/codex
./apps/daemon/internal/agent/claudesdk
./apps/daemon/internal/agent/mcode
-run 'TestJSONRPCClientOwnsToolDescendants|TestSelfHostedToolEnvironment'
- name: Native capability snapshots, files and installation
run: >-
go test -race -count=1
./apps/parsar-daemon/internal/localworkspace
./apps/parsar-daemon/internal/cli
./apps/daemon/internal/localworkspace
./apps/daemon/internal/cli
-run 'TestNative|TestRuntimeInit|TestRuntimePreparationRejects|TestPreparationFreezesLocalContentsAcrossReconnect|TestSnapshotMarker'
- name: Windows npm and npx stdio launchers without network
if: runner.os == 'Windows'
run: >-
go test -race -count=1 -timeout=2m
./apps/parsar-daemon/internal/localworkspace
./apps/parsar-daemon/internal/cli
./apps/daemon/internal/localworkspace
./apps/daemon/internal/cli
-run 'TestWindowsPackageManager|TestWindowsRuntimeMCP'
- name: Build pinned native components
run: |
npm install --global pnpm@10.30.3
pnpm install --frozen-lockfile --filter @parsar/claude-sdk-adapter...
pnpm --filter @parsar/claude-sdk-adapter build --outDir "$RUNNER_TEMP/claude-compiled"
pnpm --config.inject-workspace-packages=true --config.extend-node-path=false --filter @parsar/claude-sdk-adapter deploy --prod "$RUNNER_TEMP/claude-runtime"
pnpm install --frozen-lockfile --filter @oac/claude-sdk-adapter...
pnpm --filter @oac/claude-sdk-adapter build --outDir "$RUNNER_TEMP/claude-compiled"
pnpm --config.inject-workspace-packages=true --config.extend-node-path=false --filter @oac/claude-sdk-adapter deploy --prod "$RUNNER_TEMP/claude-runtime"
rm -rf "$RUNNER_TEMP/claude-runtime/dist"
mv "$RUNNER_TEMP/claude-compiled" "$RUNNER_TEMP/claude-runtime/dist"
# Reify the dedicated frozen export lock without pnpm's symlink layout.
Expand Down
4 changes: 2 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ __pycache__/
/state/
/cache/
/target/
# `go build ./services/core-console` in the repository root writes this binary.
/core-console
# `go build ./services/web` in the repository root writes this binary.
/web
/playwright-report/
/test-results/
/.agents/
Expand Down
20 changes: 10 additions & 10 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,14 @@ OpenAgentCore is protocol-first and modular. Core orchestrates operations that p

| Boundary | Protocol code | Protocol doc |
| --- | --- | --- |
| Application–Core (`/v1`) | Types in `contracts/agents-api/v1/` and route annotations in `services/agents-api/internal/api/`; `make openapi` generates `contracts/agents-api/openapi.yaml` | [Agents API guide](docs/api/public-agent-api.md) |
| Web and operators–Core (`/core/v1`) | Route annotations in `services/agents-api/internal/api/`; `make openapi` generates `contracts/agents-api/core.openapi.yaml` | [Core API](docs/api/README.md#core-api) |
| Nodes and daemons–Core (`/api/v1` HTTP routes; the node and daemon wire protocols are separate rows) | Route annotations in `services/agents-api/internal/api/`; `make openapi` generates `contracts/agents-api/runtime.openapi.yaml` | [Machine connection API](docs/api/README.md#machine-connection-api) |
| Core–Sandbox Provider | `services/agents-api/internal/sandbox/sandbox_provider.go` | [Sandbox Provider guide](docs/sandbox-provider.md) |
| Core–sandbox node | `services/agents-api/internal/sandbox/node/wire.go` | [Node generation protocol](contracts/agents-api/node-generation-protocol.md) |
| Application–Core (`/v1`) | Types in `contracts/agents-api/v1/` and route annotations in `services/core/internal/api/`; `make openapi` generates `contracts/agents-api/openapi.yaml` | [Agents API guide](docs/api/public-agent-api.md) |
| Web and operators–Core (`/core/v1`) | Route annotations in `services/core/internal/api/`; `make openapi` generates `contracts/agents-api/core.openapi.yaml` | [Core API](docs/api/README.md#core-api) |
| Nodes and daemons–Core (`/api/v1` HTTP routes; the node and daemon wire protocols are separate rows) | Route annotations in `services/core/internal/api/`; `make openapi` generates `contracts/agents-api/runtime.openapi.yaml` | [Machine connection API](docs/api/README.md#machine-connection-api) |
| Core–Sandbox Provider | `services/core/internal/sandbox/sandbox_provider.go` | [Sandbox Provider guide](docs/sandbox-provider.md) |
| Core–sandbox node | `services/core/internal/sandbox/node/wire.go` | [Node generation protocol](contracts/agents-api/node-generation-protocol.md) |
| Provider–Runtime startup | `internal/runtimebootstrap/bootstrap.go` | [Runtime bootstrap](docs/runtime-bootstrap.md) |
| Core–Runtime wire | `internal/agentdaemon/proto/` | [Core–Runtime protocol](docs/runtime-protocol.md) |
| Runtime–Harness | `apps/parsar-daemon/internal/agent/harness.go` | [Harness onboarding](contracts/agents-api/harness-onboarding.md) |
| Runtime–Harness | `apps/daemon/internal/agent/harness.go` | [Harness onboarding](contracts/agents-api/harness-onboarding.md) |
| Harness–Model provider | `internal/modelprovider/config.go` | [Model execution](contracts/agents-api/model-execution.md) |

Most boundaries still span several files; the listed file or directory is the entry point. Do not add files to a boundary; this is a [known gap](#known-gaps).
Expand Down Expand Up @@ -57,10 +57,10 @@ OpenAgentCore is pre-release. Replace superseded interfaces, execution paths and

Existing code still breaks these rules in places. The bullets below are examples, not a complete list. Do not copy these patterns. Until a gap is closed, follow the extension guide; a change that touches a gap moves it toward the rule.

- Protocol definitions spread over several files, such as the Sandbox Provider contract across `services/agents-api/internal/sandbox/` and `services/agents-api/internal/providercontract/`.
- Support discovered by type assertion, such as daemon workspace reads in `apps/parsar-daemon/internal/dispatch/workspace_read.go` and Core's observation source selection in `services/agents-api/cmd/server/main.go`.
- Harness-specific code in shared places, such as Core engine profiles in `services/agents-api/internal/engine/<harness>.go`, daemon discovery and registration, the installer's Harness list and default in `deploy/install/config.schema.json`, and Core's own default Harness when `OAC_DEFAULT_HARNESS` is unset.
- Vendor-specific configuration, routes and UI outside the adapter, such as the E2B selection and store fields (`services/agents-api/internal/sandbox/selection.go`), the `/core/v1/sandbox/e2b/*` routes, E2B credential hooks in `providers.Adapter` and the E2B Web views.
- Protocol definitions spread over several files, such as the Sandbox Provider contract across `services/core/internal/sandbox/` and `services/core/internal/providercontract/`.
- Support discovered by type assertion, such as daemon workspace reads in `apps/daemon/internal/dispatch/workspace_read.go` and Core's observation source selection in `services/core/cmd/server/main.go`.
- Harness-specific code in shared places, such as Core engine profiles in `services/core/internal/engine/<harness>.go`, daemon discovery and registration, the installer's Harness list and default in `deploy/install/config.schema.json`, and Core's own default Harness when `OAC_DEFAULT_HARNESS` is unset.
- Vendor-specific configuration, routes and UI outside the adapter, such as the E2B selection and store fields (`services/core/internal/sandbox/selection.go`), the `/core/v1/sandbox/e2b/*` routes, E2B credential hooks in `providers.Adapter` and the E2B Web views.
- Host-local state spread over several `~/.oac/` directories, such as the Runtime's `~/.oac/daemon/`, `~/.oac/runtime/<kind>/` and `~/.oac/environments/<environment-id>/`.
- Persistence and vendor types in the Core and machine OpenAPI documents, such as the `store.*` and `e2b.*` definitions in `contracts/agents-api/core.openapi.yaml`.

Expand Down
Loading
Loading