agent-relay 2.0.28 → 2.0.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -0
- package/dist/index.cjs +85691 -0
- package/dist/src/bridge/index.d.ts.map +1 -0
- package/dist/src/bridge/index.js.map +1 -0
- package/dist/src/cli/commands/doctor.d.ts +2 -0
- package/dist/src/cli/commands/doctor.d.ts.map +1 -0
- package/dist/src/cli/commands/doctor.js +451 -0
- package/dist/src/cli/commands/doctor.js.map +1 -0
- package/dist/src/cli/index.d.ts.map +1 -0
- package/dist/src/cli/index.js +29 -1
- package/dist/src/cli/index.js.map +1 -0
- package/dist/src/config/relay-config.d.ts.map +1 -0
- package/dist/src/config/relay-config.js.map +1 -0
- package/dist/src/continuity/index.d.ts.map +1 -0
- package/dist/src/continuity/index.js.map +1 -0
- package/dist/src/daemon/index.d.ts.map +1 -0
- package/dist/src/daemon/index.js.map +1 -0
- package/dist/src/health-worker-manager.d.ts.map +1 -0
- package/dist/src/health-worker-manager.js.map +1 -0
- package/dist/src/health-worker.d.ts.map +1 -0
- package/dist/src/health-worker.js.map +1 -0
- package/dist/src/hooks/index.d.ts.map +1 -0
- package/dist/src/hooks/index.js.map +1 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/memory/index.d.ts.map +1 -0
- package/dist/src/memory/index.js.map +1 -0
- package/dist/src/policy/index.d.ts.map +1 -0
- package/dist/src/policy/index.js.map +1 -0
- package/dist/src/protocol/index.d.ts.map +1 -0
- package/dist/src/protocol/index.js.map +1 -0
- package/dist/src/resiliency/index.d.ts.map +1 -0
- package/dist/src/resiliency/index.js.map +1 -0
- package/dist/src/shared/cli-auth-config.d.ts.map +1 -0
- package/dist/src/shared/cli-auth-config.js.map +1 -0
- package/dist/src/state/index.d.ts.map +1 -0
- package/dist/src/state/index.js.map +1 -0
- package/dist/src/storage/index.d.ts.map +1 -0
- package/dist/src/storage/index.js.map +1 -0
- package/dist/src/trajectory/index.d.ts.map +1 -0
- package/dist/src/trajectory/index.js.map +1 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/index.js.map +1 -0
- package/dist/src/wrapper/index.d.ts.map +1 -0
- package/dist/src/wrapper/index.js.map +1 -0
- package/package.json +83 -20
- package/packages/api-types/dist/index.d.ts.map +1 -0
- package/packages/api-types/dist/index.js.map +1 -0
- package/packages/api-types/dist/schemas/agent.d.ts.map +1 -0
- package/packages/api-types/dist/schemas/agent.js.map +1 -0
- package/packages/api-types/dist/schemas/api.d.ts.map +1 -0
- package/packages/api-types/dist/schemas/api.js.map +1 -0
- package/packages/api-types/dist/schemas/decision.d.ts.map +1 -0
- package/packages/api-types/dist/schemas/decision.js.map +1 -0
- package/packages/api-types/dist/schemas/fleet.d.ts.map +1 -0
- package/packages/api-types/dist/schemas/fleet.js.map +1 -0
- package/packages/api-types/dist/schemas/history.d.ts.map +1 -0
- package/packages/api-types/dist/schemas/history.js.map +1 -0
- package/packages/api-types/dist/schemas/index.d.ts.map +1 -0
- package/packages/api-types/dist/schemas/index.js.map +1 -0
- package/packages/api-types/dist/schemas/message.d.ts.map +1 -0
- package/packages/api-types/dist/schemas/message.js.map +1 -0
- package/packages/api-types/dist/schemas/session.d.ts.map +1 -0
- package/packages/api-types/dist/schemas/session.js.map +1 -0
- package/packages/api-types/dist/schemas/task.d.ts.map +1 -0
- package/packages/api-types/dist/schemas/task.js.map +1 -0
- package/packages/api-types/package.json +1 -1
- package/packages/api-types/src/index.ts +22 -0
- package/packages/api-types/src/schemas/agent.test.ts +164 -0
- package/packages/api-types/src/schemas/agent.ts +110 -0
- package/packages/api-types/src/schemas/api.test.ts +372 -0
- package/packages/api-types/src/schemas/api.ts +194 -0
- package/packages/api-types/src/schemas/decision.test.ts +324 -0
- package/packages/api-types/src/schemas/decision.ts +136 -0
- package/packages/api-types/src/schemas/fleet.test.ts +212 -0
- package/packages/api-types/src/schemas/fleet.ts +83 -0
- package/packages/api-types/src/schemas/history.test.ts +242 -0
- package/packages/api-types/src/schemas/history.ts +84 -0
- package/packages/api-types/src/schemas/index.ts +148 -0
- package/packages/api-types/src/schemas/message.test.ts +192 -0
- package/packages/api-types/src/schemas/message.ts +98 -0
- package/packages/api-types/src/schemas/session.test.ts +104 -0
- package/packages/api-types/src/schemas/session.ts +40 -0
- package/packages/api-types/src/schemas/task.test.ts +192 -0
- package/packages/api-types/src/schemas/task.ts +78 -0
- package/packages/api-types/tsconfig.json +19 -0
- package/packages/api-types/vitest.config.ts +9 -0
- package/packages/benchmark/README.md +200 -0
- package/packages/benchmark/datasets/coding-tasks.yaml +127 -0
- package/packages/benchmark/datasets/coordination-tasks.yaml +122 -0
- package/packages/benchmark/dist/benchmark.d.ts +47 -0
- package/packages/benchmark/dist/benchmark.d.ts.map +1 -0
- package/packages/benchmark/dist/benchmark.js +224 -0
- package/packages/benchmark/dist/benchmark.js.map +1 -0
- package/packages/benchmark/dist/cli.d.ts +8 -0
- package/packages/benchmark/dist/cli.d.ts.map +1 -0
- package/packages/benchmark/dist/cli.js +185 -0
- package/packages/benchmark/dist/cli.js.map +1 -0
- package/packages/benchmark/dist/harbor.d.ts +53 -0
- package/packages/benchmark/dist/harbor.d.ts.map +1 -0
- package/packages/benchmark/dist/harbor.js +127 -0
- package/packages/benchmark/dist/harbor.js.map +1 -0
- package/packages/benchmark/dist/index.d.ts +48 -0
- package/packages/benchmark/dist/index.d.ts.map +1 -0
- package/packages/benchmark/dist/index.js +50 -0
- package/packages/benchmark/dist/index.js.map +1 -0
- package/packages/benchmark/dist/runners/base.d.ts +63 -0
- package/packages/benchmark/dist/runners/base.d.ts.map +1 -0
- package/packages/benchmark/dist/runners/base.js +155 -0
- package/packages/benchmark/dist/runners/base.js.map +1 -0
- package/packages/benchmark/dist/runners/index.d.ts +10 -0
- package/packages/benchmark/dist/runners/index.d.ts.map +1 -0
- package/packages/benchmark/dist/runners/index.js +10 -0
- package/packages/benchmark/dist/runners/index.js.map +1 -0
- package/packages/benchmark/dist/runners/single.d.ts +19 -0
- package/packages/benchmark/dist/runners/single.d.ts.map +1 -0
- package/packages/benchmark/dist/runners/single.js +111 -0
- package/packages/benchmark/dist/runners/single.js.map +1 -0
- package/packages/benchmark/dist/runners/subagent.d.ts +32 -0
- package/packages/benchmark/dist/runners/subagent.d.ts.map +1 -0
- package/packages/benchmark/dist/runners/subagent.js +212 -0
- package/packages/benchmark/dist/runners/subagent.js.map +1 -0
- package/packages/benchmark/dist/runners/swarm.d.ts +36 -0
- package/packages/benchmark/dist/runners/swarm.d.ts.map +1 -0
- package/packages/benchmark/dist/runners/swarm.js +273 -0
- package/packages/benchmark/dist/runners/swarm.js.map +1 -0
- package/packages/benchmark/dist/types.d.ts +178 -0
- package/packages/benchmark/dist/types.d.ts.map +1 -0
- package/packages/benchmark/dist/types.js +16 -0
- package/packages/benchmark/dist/types.js.map +1 -0
- package/packages/benchmark/package.json +80 -0
- package/packages/benchmark/src/benchmark.ts +298 -0
- package/packages/benchmark/src/cli.ts +240 -0
- package/packages/benchmark/src/harbor.ts +170 -0
- package/packages/benchmark/src/index.ts +73 -0
- package/packages/benchmark/src/runners/base.ts +204 -0
- package/packages/benchmark/src/runners/index.ts +10 -0
- package/packages/benchmark/src/runners/single.ts +121 -0
- package/packages/benchmark/src/runners/subagent.ts +240 -0
- package/packages/benchmark/src/runners/swarm.ts +326 -0
- package/packages/benchmark/src/types.ts +205 -0
- package/packages/benchmark/tsconfig.json +20 -0
- package/packages/bridge/dist/index.d.ts.map +1 -0
- package/packages/bridge/dist/index.js.map +1 -0
- package/packages/bridge/dist/multi-project-client.d.ts.map +1 -0
- package/packages/bridge/dist/multi-project-client.js.map +1 -0
- package/packages/bridge/dist/shadow-cli.d.ts.map +1 -0
- package/packages/bridge/dist/shadow-cli.js.map +1 -0
- package/packages/bridge/dist/spawner.d.ts.map +1 -0
- package/packages/bridge/dist/spawner.js +15 -2
- package/packages/bridge/dist/spawner.js.map +1 -0
- package/packages/bridge/dist/types.d.ts.map +1 -0
- package/packages/bridge/dist/types.js.map +1 -0
- package/packages/bridge/dist/utils.d.ts.map +1 -0
- package/packages/bridge/dist/utils.js.map +1 -0
- package/packages/bridge/package.json +8 -8
- package/packages/bridge/src/index.ts +25 -0
- package/packages/bridge/src/multi-project-client.test.ts +340 -0
- package/packages/bridge/src/multi-project-client.ts +469 -0
- package/packages/bridge/src/shadow-cli.ts +95 -0
- package/packages/bridge/src/spawner-mcp.test.ts +505 -0
- package/packages/bridge/src/spawner.ts +1724 -0
- package/packages/bridge/src/types.ts +145 -0
- package/packages/bridge/src/utils.test.ts +98 -0
- package/packages/bridge/src/utils.ts +67 -0
- package/packages/bridge/tsconfig.json +29 -0
- package/packages/bridge/vitest.config.ts +9 -0
- package/packages/cli-tester/dist/index.d.ts.map +1 -0
- package/packages/cli-tester/dist/index.js.map +1 -0
- package/packages/cli-tester/dist/utils/credential-check.d.ts.map +1 -0
- package/packages/cli-tester/dist/utils/credential-check.js.map +1 -0
- package/packages/cli-tester/dist/utils/socket-client.d.ts.map +1 -0
- package/packages/cli-tester/dist/utils/socket-client.js.map +1 -0
- package/packages/cli-tester/docker/Dockerfile +61 -0
- package/packages/cli-tester/docker/docker-compose.yml +71 -0
- package/packages/cli-tester/package.json +1 -1
- package/packages/cli-tester/src/index.ts +40 -0
- package/packages/cli-tester/src/utils/credential-check.ts +284 -0
- package/packages/cli-tester/src/utils/socket-client.ts +211 -0
- package/packages/cli-tester/tests/credential-check.test.ts +56 -0
- package/packages/cli-tester/tsconfig.json +11 -0
- package/packages/config/dist/agent-config.d.ts.map +1 -0
- package/packages/config/dist/agent-config.js.map +1 -0
- package/packages/config/dist/bridge-config.d.ts.map +1 -0
- package/packages/config/dist/bridge-config.js.map +1 -0
- package/packages/config/dist/bridge-utils.d.ts.map +1 -0
- package/packages/config/dist/bridge-utils.js.map +1 -0
- package/packages/config/dist/cli-auth-config.d.ts.map +1 -0
- package/packages/config/dist/cli-auth-config.js.map +1 -0
- package/packages/config/dist/cloud-config.d.ts.map +1 -0
- package/packages/config/dist/cloud-config.js.map +1 -0
- package/packages/config/dist/index.d.ts.map +1 -0
- package/packages/config/dist/index.js.map +1 -0
- package/packages/config/dist/project-namespace.d.ts.map +1 -0
- package/packages/config/dist/project-namespace.js.map +1 -0
- package/packages/config/dist/relay-config.d.ts.map +1 -0
- package/packages/config/dist/relay-config.js.map +1 -0
- package/packages/config/dist/relay-file-writer.d.ts.map +1 -0
- package/packages/config/dist/relay-file-writer.js.map +1 -0
- package/packages/config/dist/schemas.d.ts.map +1 -0
- package/packages/config/dist/schemas.js.map +1 -0
- package/packages/config/dist/shadow-config.d.ts.map +1 -0
- package/packages/config/dist/shadow-config.js.map +1 -0
- package/packages/config/dist/teams-config.d.ts.map +1 -0
- package/packages/config/dist/teams-config.js.map +1 -0
- package/packages/config/dist/trajectory-config.d.ts.map +1 -0
- package/packages/config/dist/trajectory-config.js.map +1 -0
- package/packages/config/package.json +2 -2
- package/packages/config/src/agent-config.test.ts +245 -0
- package/packages/config/src/agent-config.ts +160 -0
- package/packages/config/src/bridge-config.test.ts +132 -0
- package/packages/config/src/bridge-config.ts +189 -0
- package/packages/config/src/bridge-utils.ts +59 -0
- package/packages/config/src/cli-auth-config.ts +548 -0
- package/packages/config/src/cloud-config.ts +208 -0
- package/packages/config/src/index.ts +12 -0
- package/packages/config/src/project-namespace.ts +344 -0
- package/packages/config/src/relay-config.test.ts +51 -0
- package/packages/config/src/relay-config.ts +36 -0
- package/packages/config/src/relay-file-writer.test.ts +351 -0
- package/packages/config/src/relay-file-writer.ts +508 -0
- package/packages/config/src/schemas.test.ts +59 -0
- package/packages/config/src/schemas.ts +201 -0
- package/packages/config/src/shadow-config.ts +205 -0
- package/packages/config/src/teams-config.ts +135 -0
- package/packages/config/src/trajectory-config.ts +222 -0
- package/packages/config/tsconfig.json +21 -0
- package/packages/config/vitest.config.ts +9 -0
- package/packages/continuity/dist/formatter.d.ts.map +1 -0
- package/packages/continuity/dist/formatter.js.map +1 -0
- package/packages/continuity/dist/handoff-store.d.ts.map +1 -0
- package/packages/continuity/dist/handoff-store.js.map +1 -0
- package/packages/continuity/dist/index.d.ts.map +1 -0
- package/packages/continuity/dist/index.js.map +1 -0
- package/packages/continuity/dist/ledger-store.d.ts.map +1 -0
- package/packages/continuity/dist/ledger-store.js.map +1 -0
- package/packages/continuity/dist/manager.d.ts.map +1 -0
- package/packages/continuity/dist/manager.js.map +1 -0
- package/packages/continuity/dist/parser.d.ts.map +1 -0
- package/packages/continuity/dist/parser.js.map +1 -0
- package/packages/continuity/dist/types.d.ts.map +1 -0
- package/packages/continuity/dist/types.js.map +1 -0
- package/packages/continuity/package.json +1 -1
- package/packages/continuity/src/formatter.ts +371 -0
- package/packages/continuity/src/handoff-store.ts +523 -0
- package/packages/continuity/src/index.ts +9 -0
- package/packages/continuity/src/ledger-store.ts +594 -0
- package/packages/continuity/src/manager.test.ts +291 -0
- package/packages/continuity/src/manager.ts +774 -0
- package/packages/continuity/src/parser.test.ts +292 -0
- package/packages/continuity/src/parser.ts +680 -0
- package/packages/continuity/src/types.ts +211 -0
- package/packages/continuity/tsconfig.json +21 -0
- package/packages/continuity/vitest.config.ts +9 -0
- package/packages/daemon/dist/agent-manager.d.ts.map +1 -0
- package/packages/daemon/dist/agent-manager.js.map +1 -0
- package/packages/daemon/dist/agent-registry.d.ts.map +1 -0
- package/packages/daemon/dist/agent-registry.js.map +1 -0
- package/packages/daemon/dist/agent-signing.d.ts.map +1 -0
- package/packages/daemon/dist/agent-signing.js.map +1 -0
- package/packages/daemon/dist/api.d.ts.map +1 -0
- package/packages/daemon/dist/api.js.map +1 -0
- package/packages/daemon/dist/auth.d.ts.map +1 -0
- package/packages/daemon/dist/auth.js.map +1 -0
- package/packages/daemon/dist/channel-membership-store.d.ts.map +1 -0
- package/packages/daemon/dist/channel-membership-store.js.map +1 -0
- package/packages/daemon/dist/cli-auth.d.ts.map +1 -0
- package/packages/daemon/dist/cli-auth.js.map +1 -0
- package/packages/daemon/dist/cloud-sync.d.ts.map +1 -0
- package/packages/daemon/dist/cloud-sync.js.map +1 -0
- package/packages/daemon/dist/connection.d.ts.map +1 -0
- package/packages/daemon/dist/connection.js.map +1 -0
- package/packages/daemon/dist/consensus-integration.d.ts.map +1 -0
- package/packages/daemon/dist/consensus-integration.js.map +1 -0
- package/packages/daemon/dist/consensus.d.ts.map +1 -0
- package/packages/daemon/dist/consensus.js.map +1 -0
- package/packages/daemon/dist/delivery-tracker.d.ts.map +1 -0
- package/packages/daemon/dist/delivery-tracker.js.map +1 -0
- package/packages/daemon/dist/enhanced-features.d.ts.map +1 -0
- package/packages/daemon/dist/enhanced-features.js.map +1 -0
- package/packages/daemon/dist/index.d.ts.map +1 -0
- package/packages/daemon/dist/index.js.map +1 -0
- package/packages/daemon/dist/migrations/index.d.ts.map +1 -0
- package/packages/daemon/dist/migrations/index.js.map +1 -0
- package/packages/daemon/dist/orchestrator.d.ts.map +1 -0
- package/packages/daemon/dist/orchestrator.js.map +1 -0
- package/packages/daemon/dist/rate-limiter.d.ts.map +1 -0
- package/packages/daemon/dist/rate-limiter.js.map +1 -0
- package/packages/daemon/dist/registry.d.ts.map +1 -0
- package/packages/daemon/dist/registry.js.map +1 -0
- package/packages/daemon/dist/relay-ledger.d.ts.map +1 -0
- package/packages/daemon/dist/relay-ledger.js.map +1 -0
- package/packages/daemon/dist/relay-watchdog.d.ts.map +1 -0
- package/packages/daemon/dist/relay-watchdog.js.map +1 -0
- package/packages/daemon/dist/repo-manager.d.ts.map +1 -0
- package/packages/daemon/dist/repo-manager.js.map +1 -0
- package/packages/daemon/dist/router.d.ts.map +1 -0
- package/packages/daemon/dist/router.js.map +1 -0
- package/packages/daemon/dist/server.d.ts +1 -0
- package/packages/daemon/dist/server.d.ts.map +1 -0
- package/packages/daemon/dist/server.js +46 -16
- package/packages/daemon/dist/server.js.map +1 -0
- package/packages/daemon/dist/spawn-manager.d.ts.map +1 -0
- package/packages/daemon/dist/spawn-manager.js.map +1 -0
- package/packages/daemon/dist/sync-queue.d.ts.map +1 -0
- package/packages/daemon/dist/sync-queue.js.map +1 -0
- package/packages/daemon/dist/types.d.ts.map +1 -0
- package/packages/daemon/dist/types.js.map +1 -0
- package/packages/daemon/dist/workspace-manager.d.ts.map +1 -0
- package/packages/daemon/dist/workspace-manager.js.map +1 -0
- package/packages/daemon/package.json +12 -12
- package/packages/daemon/src/agent-manager.ts +679 -0
- package/packages/daemon/src/agent-registry.ts +284 -0
- package/packages/daemon/src/agent-signing.ts +707 -0
- package/packages/daemon/src/api.ts +1012 -0
- package/packages/daemon/src/auth.ts +276 -0
- package/packages/daemon/src/channel-membership-store.ts +217 -0
- package/packages/daemon/src/cli-auth.ts +906 -0
- package/packages/daemon/src/cloud-sync.ts +902 -0
- package/packages/daemon/src/connection.ts +534 -0
- package/packages/daemon/src/consensus-integration.ts +510 -0
- package/packages/daemon/src/consensus.ts +848 -0
- package/packages/daemon/src/delivery-tracker.ts +145 -0
- package/packages/daemon/src/enhanced-features.ts +390 -0
- package/packages/daemon/src/index.ts +52 -0
- package/packages/daemon/src/migrations/0001_initial.sql +72 -0
- package/packages/daemon/src/migrations/index.test.ts +195 -0
- package/packages/daemon/src/migrations/index.ts +286 -0
- package/packages/daemon/src/orchestrator.test.ts +231 -0
- package/packages/daemon/src/orchestrator.ts +1376 -0
- package/packages/daemon/src/rate-limiter.ts +172 -0
- package/packages/daemon/src/registry.ts +8 -0
- package/packages/daemon/src/relay-ledger.test.ts +358 -0
- package/packages/daemon/src/relay-ledger.ts +713 -0
- package/packages/daemon/src/relay-watchdog.test.ts +881 -0
- package/packages/daemon/src/relay-watchdog.ts +785 -0
- package/packages/daemon/src/repo-manager.ts +468 -0
- package/packages/daemon/src/router.test.ts +149 -0
- package/packages/daemon/src/router.ts +1885 -0
- package/packages/daemon/src/server.ts +1871 -0
- package/packages/daemon/src/spawn-manager.ts +275 -0
- package/packages/daemon/src/sync-queue.ts +477 -0
- package/packages/daemon/src/types.ts +158 -0
- package/packages/daemon/src/workspace-manager.ts +371 -0
- package/packages/daemon/tsconfig.json +21 -0
- package/packages/hooks/dist/browser.d.ts.map +1 -0
- package/packages/hooks/dist/browser.js.map +1 -0
- package/packages/hooks/dist/emitter.d.ts.map +1 -0
- package/packages/hooks/dist/emitter.js.map +1 -0
- package/packages/hooks/dist/inbox-check/hook.d.ts.map +1 -0
- package/packages/hooks/dist/inbox-check/hook.js.map +1 -0
- package/packages/hooks/dist/inbox-check/index.d.ts.map +1 -0
- package/packages/hooks/dist/inbox-check/index.js.map +1 -0
- package/packages/hooks/dist/inbox-check/types.d.ts.map +1 -0
- package/packages/hooks/dist/inbox-check/types.js.map +1 -0
- package/packages/hooks/dist/inbox-check/utils.d.ts.map +1 -0
- package/packages/hooks/dist/inbox-check/utils.js.map +1 -0
- package/packages/hooks/dist/index.d.ts.map +1 -0
- package/packages/hooks/dist/index.js.map +1 -0
- package/packages/hooks/dist/registry.d.ts.map +1 -0
- package/packages/hooks/dist/registry.js.map +1 -0
- package/packages/hooks/dist/trajectory-hooks.d.ts.map +1 -0
- package/packages/hooks/dist/trajectory-hooks.js.map +1 -0
- package/packages/hooks/dist/types.d.ts.map +1 -0
- package/packages/hooks/dist/types.js.map +1 -0
- package/packages/hooks/package.json +4 -4
- package/packages/hooks/src/browser.ts +2 -0
- package/packages/hooks/src/emitter.ts +84 -0
- package/packages/hooks/src/inbox-check/hook.ts +114 -0
- package/packages/hooks/src/inbox-check/index.ts +8 -0
- package/packages/hooks/src/inbox-check/types.ts +39 -0
- package/packages/hooks/src/inbox-check/utils.test.ts +287 -0
- package/packages/hooks/src/inbox-check/utils.ts +125 -0
- package/packages/hooks/src/index.ts +11 -0
- package/packages/hooks/src/registry.ts +614 -0
- package/packages/hooks/src/shims.d.ts +3 -0
- package/packages/hooks/src/trajectory-hooks.ts +251 -0
- package/packages/hooks/src/types.ts +342 -0
- package/packages/hooks/tsconfig.json +21 -0
- package/packages/hooks/vitest.config.ts +9 -0
- package/packages/mcp/dist/bin.d.ts.map +1 -0
- package/packages/mcp/dist/bin.js.map +1 -0
- package/packages/mcp/dist/client.d.ts +9 -15
- package/packages/mcp/dist/client.d.ts.map +1 -0
- package/packages/mcp/dist/client.js +42 -74
- package/packages/mcp/dist/client.js.map +1 -0
- package/packages/mcp/dist/cloud.d.ts.map +1 -0
- package/packages/mcp/dist/cloud.js.map +1 -0
- package/packages/mcp/dist/errors.d.ts.map +1 -0
- package/packages/mcp/dist/errors.js.map +1 -0
- package/packages/mcp/dist/file-transport.d.ts.map +1 -0
- package/packages/mcp/dist/file-transport.js.map +1 -0
- package/packages/mcp/dist/hybrid-client.d.ts.map +1 -0
- package/packages/mcp/dist/hybrid-client.js.map +1 -0
- package/packages/mcp/dist/index.d.ts.map +1 -0
- package/packages/mcp/dist/index.js.map +1 -0
- package/packages/mcp/dist/install-cli.d.ts.map +1 -0
- package/packages/mcp/dist/install-cli.js.map +1 -0
- package/packages/mcp/dist/install.d.ts.map +1 -0
- package/packages/mcp/dist/install.js.map +1 -0
- package/packages/mcp/dist/prompts/index.d.ts.map +1 -0
- package/packages/mcp/dist/prompts/index.js.map +1 -0
- package/packages/mcp/dist/prompts/protocol.d.ts.map +1 -0
- package/packages/mcp/dist/prompts/protocol.js.map +1 -0
- package/packages/mcp/dist/resources/agents.d.ts.map +1 -0
- package/packages/mcp/dist/resources/agents.js.map +1 -0
- package/packages/mcp/dist/resources/inbox.d.ts.map +1 -0
- package/packages/mcp/dist/resources/inbox.js.map +1 -0
- package/packages/mcp/dist/resources/index.d.ts.map +1 -0
- package/packages/mcp/dist/resources/index.js.map +1 -0
- package/packages/mcp/dist/resources/project.d.ts.map +1 -0
- package/packages/mcp/dist/resources/project.js.map +1 -0
- package/packages/mcp/dist/server.d.ts.map +1 -0
- package/packages/mcp/dist/server.js.map +1 -0
- package/packages/mcp/dist/simple.d.ts +2 -5
- package/packages/mcp/dist/simple.d.ts.map +1 -0
- package/packages/mcp/dist/simple.js.map +1 -0
- package/packages/mcp/dist/tools/index.d.ts.map +1 -0
- package/packages/mcp/dist/tools/index.js.map +1 -0
- package/packages/mcp/dist/tools/relay-broadcast.d.ts.map +1 -0
- package/packages/mcp/dist/tools/relay-broadcast.js.map +1 -0
- package/packages/mcp/dist/tools/relay-channel.d.ts.map +1 -0
- package/packages/mcp/dist/tools/relay-channel.js.map +1 -0
- package/packages/mcp/dist/tools/relay-connected.d.ts.map +1 -0
- package/packages/mcp/dist/tools/relay-connected.js.map +1 -0
- package/packages/mcp/dist/tools/relay-consensus.d.ts.map +1 -0
- package/packages/mcp/dist/tools/relay-consensus.js.map +1 -0
- package/packages/mcp/dist/tools/relay-continuity.d.ts.map +1 -0
- package/packages/mcp/dist/tools/relay-continuity.js.map +1 -0
- package/packages/mcp/dist/tools/relay-health.d.ts.map +1 -0
- package/packages/mcp/dist/tools/relay-health.js.map +1 -0
- package/packages/mcp/dist/tools/relay-inbox.d.ts.map +1 -0
- package/packages/mcp/dist/tools/relay-inbox.js.map +1 -0
- package/packages/mcp/dist/tools/relay-logs.d.ts.map +1 -0
- package/packages/mcp/dist/tools/relay-logs.js.map +1 -0
- package/packages/mcp/dist/tools/relay-metrics.d.ts.map +1 -0
- package/packages/mcp/dist/tools/relay-metrics.js.map +1 -0
- package/packages/mcp/dist/tools/relay-release.d.ts.map +1 -0
- package/packages/mcp/dist/tools/relay-release.js.map +1 -0
- package/packages/mcp/dist/tools/relay-remove-agent.d.ts.map +1 -0
- package/packages/mcp/dist/tools/relay-remove-agent.js.map +1 -0
- package/packages/mcp/dist/tools/relay-send.d.ts.map +1 -0
- package/packages/mcp/dist/tools/relay-send.js +4 -2
- package/packages/mcp/dist/tools/relay-send.js.map +1 -0
- package/packages/mcp/dist/tools/relay-shadow.d.ts.map +1 -0
- package/packages/mcp/dist/tools/relay-shadow.js.map +1 -0
- package/packages/mcp/dist/tools/relay-spawn.d.ts.map +1 -0
- package/packages/mcp/dist/tools/relay-spawn.js.map +1 -0
- package/packages/mcp/dist/tools/relay-status.d.ts.map +1 -0
- package/packages/mcp/dist/tools/relay-status.js.map +1 -0
- package/packages/mcp/dist/tools/relay-subscribe.d.ts.map +1 -0
- package/packages/mcp/dist/tools/relay-subscribe.js.map +1 -0
- package/packages/mcp/dist/tools/relay-who.d.ts.map +1 -0
- package/packages/mcp/dist/tools/relay-who.js.map +1 -0
- package/packages/mcp/package.json +3 -3
- package/packages/mcp/src/bin.ts +149 -0
- package/packages/mcp/src/client.ts +400 -0
- package/packages/mcp/src/cloud.ts +523 -0
- package/packages/mcp/src/errors.ts +54 -0
- package/packages/mcp/src/file-transport.ts +268 -0
- package/packages/mcp/src/hybrid-client.ts +209 -0
- package/packages/mcp/src/index.ts +122 -0
- package/packages/mcp/src/install-cli.ts +210 -0
- package/packages/mcp/src/install.ts +745 -0
- package/packages/mcp/src/prompts/index.ts +1 -0
- package/packages/mcp/src/prompts/protocol.ts +164 -0
- package/packages/mcp/src/resources/agents.ts +21 -0
- package/packages/mcp/src/resources/inbox.ts +21 -0
- package/packages/mcp/src/resources/index.ts +3 -0
- package/packages/mcp/src/resources/project.ts +29 -0
- package/packages/mcp/src/server.ts +431 -0
- package/packages/mcp/src/simple.ts +214 -0
- package/packages/mcp/src/tools/index.ts +133 -0
- package/packages/mcp/src/tools/relay-broadcast.ts +32 -0
- package/packages/mcp/src/tools/relay-channel.ts +93 -0
- package/packages/mcp/src/tools/relay-connected.ts +52 -0
- package/packages/mcp/src/tools/relay-consensus.ts +92 -0
- package/packages/mcp/src/tools/relay-continuity.ts +127 -0
- package/packages/mcp/src/tools/relay-health.ts +148 -0
- package/packages/mcp/src/tools/relay-inbox.ts +70 -0
- package/packages/mcp/src/tools/relay-logs.ts +106 -0
- package/packages/mcp/src/tools/relay-metrics.ts +140 -0
- package/packages/mcp/src/tools/relay-release.ts +54 -0
- package/packages/mcp/src/tools/relay-remove-agent.ts +58 -0
- package/packages/mcp/src/tools/relay-send.ts +84 -0
- package/packages/mcp/src/tools/relay-shadow.ts +67 -0
- package/packages/mcp/src/tools/relay-spawn.ts +87 -0
- package/packages/mcp/src/tools/relay-status.ts +57 -0
- package/packages/mcp/src/tools/relay-subscribe.ts +61 -0
- package/packages/mcp/src/tools/relay-who.ts +59 -0
- package/packages/mcp/tests/client.test.ts +476 -0
- package/packages/mcp/tests/discover.test.ts +195 -0
- package/packages/mcp/tests/install.test.ts +123 -0
- package/packages/mcp/tests/prompts.test.ts +12 -0
- package/packages/mcp/tests/resources.test.ts +53 -0
- package/packages/mcp/tests/tools.test.ts +1242 -0
- package/packages/mcp/tsconfig.json +22 -0
- package/packages/mcp/vitest.config.ts +9 -0
- package/packages/memory/dist/adapters/index.d.ts.map +1 -0
- package/packages/memory/dist/adapters/index.js.map +1 -0
- package/packages/memory/dist/adapters/inmemory.d.ts.map +1 -0
- package/packages/memory/dist/adapters/inmemory.js.map +1 -0
- package/packages/memory/dist/adapters/supermemory.d.ts.map +1 -0
- package/packages/memory/dist/adapters/supermemory.js.map +1 -0
- package/packages/memory/dist/context-compaction.d.ts.map +1 -0
- package/packages/memory/dist/context-compaction.js.map +1 -0
- package/packages/memory/dist/factory.d.ts.map +1 -0
- package/packages/memory/dist/factory.js.map +1 -0
- package/packages/memory/dist/index.d.ts.map +1 -0
- package/packages/memory/dist/index.js.map +1 -0
- package/packages/memory/dist/memory-hooks.d.ts.map +1 -0
- package/packages/memory/dist/memory-hooks.js.map +1 -0
- package/packages/memory/dist/service.d.ts.map +1 -0
- package/packages/memory/dist/service.js.map +1 -0
- package/packages/memory/dist/types.d.ts.map +1 -0
- package/packages/memory/dist/types.js.map +1 -0
- package/packages/memory/package.json +2 -2
- package/packages/memory/src/adapters/index.ts +8 -0
- package/packages/memory/src/adapters/inmemory.ts +265 -0
- package/packages/memory/src/adapters/supermemory.ts +449 -0
- package/packages/memory/src/context-compaction.test.ts +660 -0
- package/packages/memory/src/context-compaction.ts +612 -0
- package/packages/memory/src/factory.ts +170 -0
- package/packages/memory/src/index.ts +33 -0
- package/packages/memory/src/memory-hooks.ts +410 -0
- package/packages/memory/src/service.ts +194 -0
- package/packages/memory/src/types.ts +211 -0
- package/packages/memory/tsconfig.json +21 -0
- package/packages/memory/vitest.config.ts +9 -0
- package/packages/policy/dist/agent-policy.d.ts.map +1 -0
- package/packages/policy/dist/agent-policy.js.map +1 -0
- package/packages/policy/dist/cloud-policy-fetcher.d.ts.map +1 -0
- package/packages/policy/dist/cloud-policy-fetcher.js.map +1 -0
- package/packages/policy/dist/index.d.ts.map +1 -0
- package/packages/policy/dist/index.js.map +1 -0
- package/packages/policy/package.json +2 -2
- package/packages/policy/src/agent-policy.ts +866 -0
- package/packages/policy/src/cloud-policy-fetcher.ts +78 -0
- package/packages/policy/src/index.ts +21 -0
- package/packages/policy/tsconfig.json +21 -0
- package/packages/policy/vitest.config.ts +9 -0
- package/packages/protocol/dist/channels.d.ts.map +1 -0
- package/packages/protocol/dist/channels.js.map +1 -0
- package/packages/protocol/dist/framing.d.ts.map +1 -0
- package/packages/protocol/dist/framing.js.map +1 -0
- package/packages/protocol/dist/id-generator.d.ts.map +1 -0
- package/packages/protocol/dist/id-generator.js.map +1 -0
- package/packages/protocol/dist/index.d.ts.map +1 -0
- package/packages/protocol/dist/index.js.map +1 -0
- package/packages/protocol/dist/relay-pty-schemas.d.ts +70 -2
- package/packages/protocol/dist/relay-pty-schemas.d.ts.map +1 -0
- package/packages/protocol/dist/relay-pty-schemas.js.map +1 -0
- package/packages/protocol/dist/types.d.ts +8 -0
- package/packages/protocol/dist/types.d.ts.map +1 -0
- package/packages/protocol/dist/types.js.map +1 -0
- package/packages/protocol/package.json +1 -1
- package/packages/protocol/src/channels.test.ts +330 -0
- package/packages/protocol/src/channels.ts +270 -0
- package/packages/protocol/src/framing.test.ts +164 -0
- package/packages/protocol/src/framing.ts +242 -0
- package/packages/protocol/src/id-generator.ts +69 -0
- package/packages/protocol/src/index.ts +4 -0
- package/packages/protocol/src/relay-pty-schemas.ts +400 -0
- package/packages/protocol/src/types.test.ts +271 -0
- package/packages/protocol/src/types.ts +846 -0
- package/packages/protocol/tsconfig.json +21 -0
- package/packages/protocol/vitest.config.ts +9 -0
- package/packages/resiliency/dist/cgroup-manager.d.ts.map +1 -0
- package/packages/resiliency/dist/cgroup-manager.js.map +1 -0
- package/packages/resiliency/dist/context-persistence.d.ts.map +1 -0
- package/packages/resiliency/dist/context-persistence.js.map +1 -0
- package/packages/resiliency/dist/crash-insights.d.ts.map +1 -0
- package/packages/resiliency/dist/crash-insights.js.map +1 -0
- package/packages/resiliency/dist/gossip-health.d.ts.map +1 -0
- package/packages/resiliency/dist/gossip-health.js.map +1 -0
- package/packages/resiliency/dist/health-monitor.d.ts.map +1 -0
- package/packages/resiliency/dist/health-monitor.js.map +1 -0
- package/packages/resiliency/dist/index.d.ts.map +1 -0
- package/packages/resiliency/dist/index.js.map +1 -0
- package/packages/resiliency/dist/leader-watchdog.d.ts.map +1 -0
- package/packages/resiliency/dist/leader-watchdog.js.map +1 -0
- package/packages/resiliency/dist/logger.d.ts.map +1 -0
- package/packages/resiliency/dist/logger.js.map +1 -0
- package/packages/resiliency/dist/memory-monitor.d.ts.map +1 -0
- package/packages/resiliency/dist/memory-monitor.js.map +1 -0
- package/packages/resiliency/dist/metrics.d.ts.map +1 -0
- package/packages/resiliency/dist/metrics.js.map +1 -0
- package/packages/resiliency/dist/provider-context.d.ts.map +1 -0
- package/packages/resiliency/dist/provider-context.js.map +1 -0
- package/packages/resiliency/dist/stateless-lead.d.ts.map +1 -0
- package/packages/resiliency/dist/stateless-lead.js.map +1 -0
- package/packages/resiliency/dist/supervisor.d.ts.map +1 -0
- package/packages/resiliency/dist/supervisor.js.map +1 -0
- package/packages/resiliency/package.json +1 -1
- package/packages/resiliency/src/cgroup-manager.ts +468 -0
- package/packages/resiliency/src/context-persistence.ts +538 -0
- package/packages/resiliency/src/crash-insights.test.ts +620 -0
- package/packages/resiliency/src/crash-insights.ts +660 -0
- package/packages/resiliency/src/gossip-health.ts +333 -0
- package/packages/resiliency/src/health-monitor.ts +371 -0
- package/packages/resiliency/src/index.ts +157 -0
- package/packages/resiliency/src/leader-watchdog.ts +260 -0
- package/packages/resiliency/src/logger.ts +320 -0
- package/packages/resiliency/src/memory-monitor.test.ts +637 -0
- package/packages/resiliency/src/memory-monitor.ts +740 -0
- package/packages/resiliency/src/metrics.ts +311 -0
- package/packages/resiliency/src/provider-context.ts +452 -0
- package/packages/resiliency/src/stateless-lead.ts +408 -0
- package/packages/resiliency/src/supervisor.ts +578 -0
- package/packages/resiliency/tsconfig.json +21 -0
- package/packages/resiliency/vitest.config.ts +9 -0
- package/packages/sdk/dist/client.d.ts.map +1 -0
- package/packages/sdk/dist/client.js.map +1 -0
- package/packages/sdk/dist/index.d.ts.map +1 -0
- package/packages/sdk/dist/index.js.map +1 -0
- package/packages/sdk/dist/logs.d.ts.map +1 -0
- package/packages/sdk/dist/logs.js.map +1 -0
- package/packages/sdk/dist/protocol/index.d.ts.map +1 -0
- package/packages/sdk/dist/protocol/index.js.map +1 -0
- package/packages/sdk/dist/standalone.d.ts.map +1 -0
- package/packages/sdk/dist/standalone.js.map +1 -0
- package/packages/sdk/examples/SWARM_CAPABILITIES.md +498 -0
- package/packages/sdk/examples/SWARM_PATTERNS.md +541 -0
- package/packages/sdk/package.json +2 -2
- package/packages/sdk/src/client.test.ts +568 -0
- package/packages/sdk/src/client.ts +1418 -0
- package/packages/sdk/src/index.ts +103 -0
- package/packages/sdk/src/logs.test.ts +98 -0
- package/packages/sdk/src/logs.ts +126 -0
- package/packages/sdk/src/protocol/framing.test.ts +164 -0
- package/packages/sdk/src/protocol/index.ts +8 -0
- package/packages/sdk/src/standalone.ts +176 -0
- package/packages/sdk/tsconfig.json +22 -0
- package/packages/sdk/vitest.config.ts +9 -0
- package/packages/spawner/.trajectories/index.json +5 -0
- package/packages/spawner/dist/index.d.ts.map +1 -0
- package/packages/spawner/dist/index.js.map +1 -0
- package/packages/spawner/dist/types.d.ts.map +1 -0
- package/packages/spawner/dist/types.js.map +1 -0
- package/packages/spawner/package.json +1 -1
- package/packages/spawner/src/index.ts +8 -0
- package/packages/spawner/src/types.test.ts +385 -0
- package/packages/spawner/src/types.ts +228 -0
- package/packages/spawner/tsconfig.json +19 -0
- package/packages/spawner/vitest.config.ts +9 -0
- package/packages/state/dist/agent-state.d.ts.map +1 -0
- package/packages/state/dist/agent-state.js.map +1 -0
- package/packages/state/dist/index.d.ts.map +1 -0
- package/packages/state/dist/index.js.map +1 -0
- package/packages/state/package.json +1 -1
- package/packages/state/src/agent-state.test.ts +335 -0
- package/packages/state/src/agent-state.ts +153 -0
- package/packages/state/src/index.ts +12 -0
- package/packages/state/tsconfig.json +21 -0
- package/packages/state/vitest.config.ts +9 -0
- package/packages/storage/dist/adapter.d.ts +28 -1
- package/packages/storage/dist/adapter.d.ts.map +1 -0
- package/packages/storage/dist/adapter.js +104 -10
- package/packages/storage/dist/adapter.js.map +1 -0
- package/packages/storage/dist/batched-sqlite-adapter.d.ts.map +1 -0
- package/packages/storage/dist/batched-sqlite-adapter.js.map +1 -0
- package/packages/storage/dist/dead-letter-queue.d.ts.map +1 -0
- package/packages/storage/dist/dead-letter-queue.js.map +1 -0
- package/packages/storage/dist/dlq-adapter.d.ts.map +1 -0
- package/packages/storage/dist/dlq-adapter.js.map +1 -0
- package/packages/storage/dist/index.d.ts +1 -0
- package/packages/storage/dist/index.d.ts.map +1 -0
- package/packages/storage/dist/index.js +1 -0
- package/packages/storage/dist/index.js.map +1 -0
- package/packages/storage/dist/jsonl-adapter.d.ts +77 -0
- package/packages/storage/dist/jsonl-adapter.d.ts.map +1 -0
- package/packages/storage/dist/jsonl-adapter.js +505 -0
- package/packages/storage/dist/jsonl-adapter.js.map +1 -0
- package/packages/storage/dist/sqlite-adapter.d.ts +6 -1
- package/packages/storage/dist/sqlite-adapter.d.ts.map +1 -0
- package/packages/storage/dist/sqlite-adapter.js +47 -0
- package/packages/storage/dist/sqlite-adapter.js.map +1 -0
- package/packages/storage/package.json +2 -2
- package/packages/storage/src/adapter.ts +438 -0
- package/packages/storage/src/batched-sqlite-adapter.test.ts +240 -0
- package/packages/storage/src/batched-sqlite-adapter.ts +239 -0
- package/packages/storage/src/dead-letter-queue.ts +643 -0
- package/packages/storage/src/dlq-adapter.test.ts +492 -0
- package/packages/storage/src/dlq-adapter.ts +954 -0
- package/packages/storage/src/index.ts +6 -0
- package/packages/storage/src/jsonl-adapter.test.ts +200 -0
- package/packages/storage/src/jsonl-adapter.ts +618 -0
- package/packages/storage/src/memory-adapter.test.ts +36 -0
- package/packages/storage/src/sqlite-adapter.test.ts +562 -0
- package/packages/storage/src/sqlite-adapter.ts +1058 -0
- package/packages/storage/tsconfig.json +21 -0
- package/packages/storage/vitest.config.ts +9 -0
- package/packages/telemetry/dist/client.d.ts.map +1 -0
- package/packages/telemetry/dist/client.js.map +1 -0
- package/packages/telemetry/dist/config.d.ts.map +1 -0
- package/packages/telemetry/dist/config.js.map +1 -0
- package/packages/telemetry/dist/events.d.ts.map +1 -0
- package/packages/telemetry/dist/events.js.map +1 -0
- package/packages/telemetry/dist/index.d.ts.map +1 -0
- package/packages/telemetry/dist/index.js.map +1 -0
- package/packages/telemetry/dist/machine-id.d.ts.map +1 -0
- package/packages/telemetry/dist/machine-id.js.map +1 -0
- package/packages/telemetry/dist/posthog-config.d.ts.map +1 -0
- package/packages/telemetry/dist/posthog-config.js.map +1 -0
- package/packages/telemetry/package.json +1 -1
- package/packages/telemetry/src/client.ts +158 -0
- package/packages/telemetry/src/config.ts +110 -0
- package/packages/telemetry/src/events.ts +137 -0
- package/packages/telemetry/src/index.ts +46 -0
- package/packages/telemetry/src/machine-id.ts +63 -0
- package/packages/telemetry/src/posthog-config.ts +39 -0
- package/packages/telemetry/tsconfig.json +21 -0
- package/packages/trajectory/dist/index.d.ts.map +1 -0
- package/packages/trajectory/dist/index.js.map +1 -0
- package/packages/trajectory/dist/integration.d.ts.map +1 -0
- package/packages/trajectory/dist/integration.js.map +1 -0
- package/packages/trajectory/package.json +2 -2
- package/packages/trajectory/src/index.ts +1 -0
- package/packages/trajectory/src/integration.ts +1268 -0
- package/packages/trajectory/tsconfig.json +21 -0
- package/packages/trajectory/vitest.config.ts +9 -0
- package/packages/user-directory/dist/index.d.ts.map +1 -0
- package/packages/user-directory/dist/index.js.map +1 -0
- package/packages/user-directory/dist/user-directory.d.ts.map +1 -0
- package/packages/user-directory/dist/user-directory.js.map +1 -0
- package/packages/user-directory/package.json +2 -2
- package/packages/user-directory/src/index.ts +12 -0
- package/packages/user-directory/src/user-directory.ts +393 -0
- package/packages/user-directory/tsconfig.json +21 -0
- package/packages/user-directory/vitest.config.ts +9 -0
- package/packages/utils/dist/cjs/client-helpers.js +127 -0
- package/packages/utils/dist/cjs/command-resolver.js +89 -0
- package/packages/utils/dist/cjs/error-tracking.js +106 -0
- package/packages/utils/dist/cjs/git-remote.js +120 -0
- package/packages/utils/dist/cjs/index.js +40 -0
- package/packages/utils/dist/cjs/logger.js +105 -0
- package/packages/utils/dist/cjs/model-mapping.js +54 -0
- package/packages/utils/dist/cjs/name-generator.js +179 -0
- package/packages/utils/dist/cjs/package.json +3 -0
- package/packages/utils/dist/cjs/precompiled-patterns.js +271 -0
- package/packages/utils/dist/cjs/relay-pty-path.js +143 -0
- package/packages/utils/dist/cjs/update-checker.js +185 -0
- package/packages/utils/dist/client-helpers.d.ts +73 -0
- package/packages/utils/dist/client-helpers.d.ts.map +1 -0
- package/packages/utils/dist/client-helpers.js +130 -0
- package/packages/utils/dist/client-helpers.js.map +1 -0
- package/packages/utils/dist/command-resolver.d.ts.map +1 -0
- package/packages/utils/dist/command-resolver.js.map +1 -0
- package/packages/utils/dist/error-tracking.d.ts.map +1 -0
- package/packages/utils/dist/error-tracking.js.map +1 -0
- package/packages/utils/dist/git-remote.d.ts.map +1 -0
- package/packages/utils/dist/git-remote.js.map +1 -0
- package/packages/utils/dist/index.d.ts +1 -0
- package/packages/utils/dist/index.d.ts.map +1 -0
- package/packages/utils/dist/index.js +1 -0
- package/packages/utils/dist/index.js.map +1 -0
- package/packages/utils/dist/logger.d.ts.map +1 -0
- package/packages/utils/dist/logger.js.map +1 -0
- package/packages/utils/dist/model-mapping.d.ts.map +1 -0
- package/packages/utils/dist/model-mapping.js.map +1 -0
- package/packages/utils/dist/name-generator.d.ts.map +1 -0
- package/packages/utils/dist/name-generator.js.map +1 -0
- package/packages/utils/dist/precompiled-patterns.d.ts.map +1 -0
- package/packages/utils/dist/precompiled-patterns.js.map +1 -0
- package/packages/utils/dist/relay-pty-path.d.ts +11 -5
- package/packages/utils/dist/relay-pty-path.d.ts.map +1 -0
- package/packages/utils/dist/relay-pty-path.js +60 -5
- package/packages/utils/dist/relay-pty-path.js.map +1 -0
- package/packages/utils/dist/update-checker.d.ts.map +1 -0
- package/packages/utils/dist/update-checker.js.map +1 -0
- package/packages/utils/package.json +37 -14
- package/packages/utils/scripts/build-cjs.mjs +24 -0
- package/packages/utils/src/client-helpers.ts +221 -0
- package/packages/utils/src/command-resolver.ts +82 -0
- package/packages/utils/src/error-tracking.ts +189 -0
- package/packages/utils/src/git-remote.ts +143 -0
- package/packages/utils/src/index.ts +10 -0
- package/packages/utils/src/logger.ts +107 -0
- package/packages/utils/src/model-mapping.test.ts +122 -0
- package/packages/utils/src/model-mapping.ts +58 -0
- package/packages/utils/src/name-generator.test.ts +259 -0
- package/packages/utils/src/name-generator.ts +56 -0
- package/packages/utils/src/precompiled-patterns.test.ts +452 -0
- package/packages/utils/src/precompiled-patterns.ts +395 -0
- package/packages/utils/src/relay-pty-path.ts +196 -0
- package/packages/utils/src/update-checker.test.ts +260 -0
- package/packages/utils/src/update-checker.ts +211 -0
- package/packages/utils/tsconfig.json +21 -0
- package/packages/utils/vitest.config.ts +9 -0
- package/packages/wrapper/dist/__fixtures__/claude-outputs.d.ts.map +1 -0
- package/packages/wrapper/dist/__fixtures__/claude-outputs.js.map +1 -0
- package/packages/wrapper/dist/__fixtures__/codex-outputs.d.ts.map +1 -0
- package/packages/wrapper/dist/__fixtures__/codex-outputs.js.map +1 -0
- package/packages/wrapper/dist/__fixtures__/gemini-outputs.d.ts.map +1 -0
- package/packages/wrapper/dist/__fixtures__/gemini-outputs.js.map +1 -0
- package/packages/wrapper/dist/__fixtures__/index.d.ts.map +1 -0
- package/packages/wrapper/dist/__fixtures__/index.js.map +1 -0
- package/packages/wrapper/dist/auth-detection.d.ts.map +1 -0
- package/packages/wrapper/dist/auth-detection.js.map +1 -0
- package/packages/wrapper/dist/base-wrapper.d.ts.map +1 -0
- package/packages/wrapper/dist/base-wrapper.js.map +1 -0
- package/packages/wrapper/dist/client.d.ts.map +1 -0
- package/packages/wrapper/dist/client.js.map +1 -0
- package/packages/wrapper/dist/id-generator.d.ts.map +1 -0
- package/packages/wrapper/dist/id-generator.js.map +1 -0
- package/packages/wrapper/dist/idle-detector.d.ts.map +1 -0
- package/packages/wrapper/dist/idle-detector.js.map +1 -0
- package/packages/wrapper/dist/inbox.d.ts.map +1 -0
- package/packages/wrapper/dist/inbox.js.map +1 -0
- package/packages/wrapper/dist/index.d.ts.map +1 -0
- package/packages/wrapper/dist/index.js.map +1 -0
- package/packages/wrapper/dist/parser.d.ts.map +1 -0
- package/packages/wrapper/dist/parser.js.map +1 -0
- package/packages/wrapper/dist/prompt-composer.d.ts.map +1 -0
- package/packages/wrapper/dist/prompt-composer.js.map +1 -0
- package/packages/wrapper/dist/relay-pty-orchestrator.d.ts +10 -0
- package/packages/wrapper/dist/relay-pty-orchestrator.d.ts.map +1 -0
- package/packages/wrapper/dist/relay-pty-orchestrator.js +69 -0
- package/packages/wrapper/dist/relay-pty-orchestrator.js.map +1 -0
- package/packages/wrapper/dist/shared.d.ts.map +1 -0
- package/packages/wrapper/dist/shared.js.map +1 -0
- package/packages/wrapper/dist/stuck-detector.d.ts.map +1 -0
- package/packages/wrapper/dist/stuck-detector.js.map +1 -0
- package/packages/wrapper/dist/tmux-resolver.d.ts.map +1 -0
- package/packages/wrapper/dist/tmux-resolver.js.map +1 -0
- package/packages/wrapper/dist/tmux-wrapper.d.ts.map +1 -0
- package/packages/wrapper/dist/tmux-wrapper.js.map +1 -0
- package/packages/wrapper/dist/trajectory-integration.d.ts.map +1 -0
- package/packages/wrapper/dist/trajectory-integration.js.map +1 -0
- package/packages/wrapper/dist/wrapper-types.d.ts.map +1 -0
- package/packages/wrapper/dist/wrapper-types.js.map +1 -0
- package/packages/wrapper/package.json +6 -9
- package/packages/wrapper/src/__fixtures__/claude-outputs.ts +471 -0
- package/packages/wrapper/src/__fixtures__/codex-outputs.ts +99 -0
- package/packages/wrapper/src/__fixtures__/gemini-outputs.ts +151 -0
- package/packages/wrapper/src/__fixtures__/index.ts +47 -0
- package/packages/wrapper/src/auth-detection.ts +244 -0
- package/packages/wrapper/src/base-wrapper.test.ts +589 -0
- package/packages/wrapper/src/base-wrapper.ts +810 -0
- package/packages/wrapper/src/client.test.ts +262 -0
- package/packages/wrapper/src/client.ts +984 -0
- package/packages/wrapper/src/id-generator.test.ts +71 -0
- package/packages/wrapper/src/id-generator.ts +69 -0
- package/packages/wrapper/src/idle-detector.test.ts +418 -0
- package/packages/wrapper/src/idle-detector.ts +384 -0
- package/packages/wrapper/src/inbox.test.ts +233 -0
- package/packages/wrapper/src/inbox.ts +89 -0
- package/packages/wrapper/src/index.ts +170 -0
- package/packages/wrapper/src/parser.regression.test.ts +251 -0
- package/packages/wrapper/src/parser.test.ts +1359 -0
- package/packages/wrapper/src/parser.ts +1477 -0
- package/packages/wrapper/src/prompt-composer.test.ts +219 -0
- package/packages/wrapper/src/prompt-composer.ts +231 -0
- package/packages/wrapper/src/relay-pty-orchestrator.test.ts +1204 -0
- package/packages/wrapper/src/relay-pty-orchestrator.ts +2626 -0
- package/packages/wrapper/src/shared.test.ts +322 -0
- package/packages/wrapper/src/shared.ts +495 -0
- package/packages/wrapper/src/stuck-detector.test.ts +303 -0
- package/packages/wrapper/src/stuck-detector.ts +511 -0
- package/packages/wrapper/src/tmux-resolver.test.ts +104 -0
- package/packages/wrapper/src/tmux-resolver.ts +207 -0
- package/packages/wrapper/src/tmux-wrapper.test.ts +316 -0
- package/packages/wrapper/src/tmux-wrapper.ts +2095 -0
- package/packages/wrapper/src/trajectory-detection.test.ts +151 -0
- package/packages/wrapper/src/trajectory-integration.ts +1261 -0
- package/packages/wrapper/src/wrapper-types.ts +45 -0
- package/packages/wrapper/tsconfig.json +19 -0
- package/packages/wrapper/vitest.config.ts +9 -0
- package/scripts/build-cjs.mjs +23 -0
- package/scripts/postinstall.js +132 -0
- package/.cursor/mcp.json +0 -11
- package/.gitattributes +0 -3
- package/.gitleaks.toml +0 -26
- package/.mcp.json +0 -11
- package/.nvmrc +0 -1
- package/ARCHITECTURE.md +0 -1245
- package/CHANGELOG.md +0 -231
- package/TESTING.md +0 -278
- package/TRAIL_GIT_AUTH_FIX.md +0 -113
- package/scripts/demos/README.md +0 -79
- package/scripts/demos/server-capacity.sh +0 -69
- package/scripts/demos/sprint-planning.sh +0 -73
- package/scripts/hooks/install.sh +0 -16
- package/scripts/hooks/pre-commit +0 -60
- package/scripts/post-publish-verify/README.md +0 -80
- package/scripts/post-publish-verify/run-verify.sh +0 -127
- package/scripts/post-publish-verify/verify-install.sh +0 -249
- package/scripts/stress-test-orchestrator-integration.mts +0 -1366
- package/scripts/stress-test-orchestrator.mjs +0 -584
- package/scripts/stress-test-relay-pty.sh +0 -452
- package/scripts/test-interactive-terminal.sh +0 -248
- package/specs/PRIMITIVES_ROADMAP.md +0 -2154
- package/tests/benchmarks/protocol.bench.ts +0 -310
- package/turbo.json +0 -37
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
2
|
+
import Database from 'better-sqlite3';
|
|
3
|
+
import fs from 'node:fs';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import os from 'node:os';
|
|
6
|
+
import {
|
|
7
|
+
ensureMigrationsTable,
|
|
8
|
+
getAppliedMigrations,
|
|
9
|
+
isMigrationApplied,
|
|
10
|
+
recordMigration,
|
|
11
|
+
calculateChecksum,
|
|
12
|
+
runMigrations,
|
|
13
|
+
getPendingMigrations,
|
|
14
|
+
verifyMigrations,
|
|
15
|
+
loadMigrationFiles,
|
|
16
|
+
} from './index.js';
|
|
17
|
+
|
|
18
|
+
describe('Migration Runner', () => {
|
|
19
|
+
let testDir: string;
|
|
20
|
+
let db: Database.Database;
|
|
21
|
+
|
|
22
|
+
beforeEach(async () => {
|
|
23
|
+
// Create temp test directory
|
|
24
|
+
testDir = await fs.promises.mkdtemp(path.join(os.tmpdir(), 'relay-migrations-test-'));
|
|
25
|
+
db = new Database(path.join(testDir, 'test.sqlite'));
|
|
26
|
+
db.pragma('journal_mode = WAL');
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
afterEach(() => {
|
|
30
|
+
db.close();
|
|
31
|
+
try {
|
|
32
|
+
fs.rmSync(testDir, { recursive: true, force: true });
|
|
33
|
+
} catch {
|
|
34
|
+
// Ignore cleanup errors
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
describe('ensureMigrationsTable', () => {
|
|
39
|
+
it('should create __migrations table if not exists', () => {
|
|
40
|
+
ensureMigrationsTable(db);
|
|
41
|
+
|
|
42
|
+
const tables = db.prepare(`
|
|
43
|
+
SELECT name FROM sqlite_master WHERE type='table' AND name='__migrations'
|
|
44
|
+
`).all();
|
|
45
|
+
|
|
46
|
+
expect(tables).toHaveLength(1);
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
it('should be idempotent', () => {
|
|
50
|
+
ensureMigrationsTable(db);
|
|
51
|
+
ensureMigrationsTable(db);
|
|
52
|
+
|
|
53
|
+
const tables = db.prepare(`
|
|
54
|
+
SELECT name FROM sqlite_master WHERE type='table' AND name='__migrations'
|
|
55
|
+
`).all();
|
|
56
|
+
|
|
57
|
+
expect(tables).toHaveLength(1);
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
describe('calculateChecksum', () => {
|
|
62
|
+
it('should return consistent checksums for same input', () => {
|
|
63
|
+
const sql = 'CREATE TABLE test (id INTEGER);';
|
|
64
|
+
const hash1 = calculateChecksum(sql);
|
|
65
|
+
const hash2 = calculateChecksum(sql);
|
|
66
|
+
|
|
67
|
+
expect(hash1).toBe(hash2);
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
it('should return different checksums for different input', () => {
|
|
71
|
+
const hash1 = calculateChecksum('CREATE TABLE test1 (id INTEGER);');
|
|
72
|
+
const hash2 = calculateChecksum('CREATE TABLE test2 (id INTEGER);');
|
|
73
|
+
|
|
74
|
+
expect(hash1).not.toBe(hash2);
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
it('should return 8-character hex string', () => {
|
|
78
|
+
const hash = calculateChecksum('some sql');
|
|
79
|
+
expect(hash).toMatch(/^[0-9a-f]{8}$/);
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
describe('recordMigration / getAppliedMigrations', () => {
|
|
84
|
+
it('should record and retrieve migrations', () => {
|
|
85
|
+
ensureMigrationsTable(db);
|
|
86
|
+
|
|
87
|
+
recordMigration(db, '0001_initial', 'abc12345');
|
|
88
|
+
recordMigration(db, '0002_add_column', 'def67890');
|
|
89
|
+
|
|
90
|
+
const applied = getAppliedMigrations(db);
|
|
91
|
+
|
|
92
|
+
expect(applied).toHaveLength(2);
|
|
93
|
+
expect(applied[0].name).toBe('0001_initial');
|
|
94
|
+
expect(applied[0].checksum).toBe('abc12345');
|
|
95
|
+
expect(applied[1].name).toBe('0002_add_column');
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
describe('isMigrationApplied', () => {
|
|
100
|
+
it('should return true for applied migrations', () => {
|
|
101
|
+
ensureMigrationsTable(db);
|
|
102
|
+
recordMigration(db, '0001_initial', 'abc12345');
|
|
103
|
+
|
|
104
|
+
expect(isMigrationApplied(db, '0001_initial')).toBe(true);
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
it('should return false for unapplied migrations', () => {
|
|
108
|
+
ensureMigrationsTable(db);
|
|
109
|
+
|
|
110
|
+
expect(isMigrationApplied(db, '0001_initial')).toBe(false);
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
describe('loadMigrationFiles', () => {
|
|
115
|
+
it('should load embedded migrations', () => {
|
|
116
|
+
const migrations = loadMigrationFiles();
|
|
117
|
+
|
|
118
|
+
expect(migrations.length).toBeGreaterThanOrEqual(1);
|
|
119
|
+
expect(migrations[0].name).toBe('0001_initial');
|
|
120
|
+
expect(migrations[0].sql).toContain('CREATE TABLE');
|
|
121
|
+
expect(migrations[0].checksum).toMatch(/^[0-9a-f]{8}$/);
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
describe('runMigrations', () => {
|
|
126
|
+
it('should run initial migration successfully', () => {
|
|
127
|
+
const result = runMigrations(db);
|
|
128
|
+
|
|
129
|
+
// Should have applied the initial migration
|
|
130
|
+
expect(result.applied.length).toBeGreaterThanOrEqual(1);
|
|
131
|
+
expect(result.errors).toHaveLength(0);
|
|
132
|
+
|
|
133
|
+
// Tables should exist
|
|
134
|
+
const tables = db.prepare(`
|
|
135
|
+
SELECT name FROM sqlite_master WHERE type='table' AND name IN ('relay_files', 'agents', '__migrations')
|
|
136
|
+
`).all() as Array<{ name: string }>;
|
|
137
|
+
|
|
138
|
+
expect(tables.map(t => t.name)).toContain('relay_files');
|
|
139
|
+
expect(tables.map(t => t.name)).toContain('agents');
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
it('should skip already applied migrations', () => {
|
|
143
|
+
// Run migrations first time
|
|
144
|
+
const result1 = runMigrations(db);
|
|
145
|
+
const appliedCount = result1.applied.length;
|
|
146
|
+
|
|
147
|
+
// Run again
|
|
148
|
+
const result2 = runMigrations(db);
|
|
149
|
+
|
|
150
|
+
// Should skip all previously applied
|
|
151
|
+
expect(result2.skipped.length).toBe(appliedCount);
|
|
152
|
+
expect(result2.applied).toHaveLength(0);
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
it('should be idempotent', () => {
|
|
156
|
+
runMigrations(db);
|
|
157
|
+
runMigrations(db);
|
|
158
|
+
runMigrations(db);
|
|
159
|
+
|
|
160
|
+
// Should still have valid schema
|
|
161
|
+
const result = db.prepare(`SELECT COUNT(*) as count FROM relay_files`).get() as { count: number };
|
|
162
|
+
expect(result.count).toBe(0);
|
|
163
|
+
});
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
describe('getPendingMigrations', () => {
|
|
167
|
+
it('should return all migrations for fresh database', () => {
|
|
168
|
+
// Don't run migrations, just check pending
|
|
169
|
+
ensureMigrationsTable(db);
|
|
170
|
+
const pending = getPendingMigrations(db);
|
|
171
|
+
|
|
172
|
+
expect(pending.length).toBeGreaterThanOrEqual(1);
|
|
173
|
+
expect(pending[0].name).toBe('0001_initial');
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
it('should return empty array after all migrations applied', () => {
|
|
177
|
+
runMigrations(db);
|
|
178
|
+
const pending = getPendingMigrations(db);
|
|
179
|
+
|
|
180
|
+
expect(pending).toHaveLength(0);
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
describe('verifyMigrations', () => {
|
|
185
|
+
it('should return empty array when checksums match', () => {
|
|
186
|
+
runMigrations(db);
|
|
187
|
+
const mismatches = verifyMigrations(db);
|
|
188
|
+
|
|
189
|
+
expect(mismatches).toHaveLength(0);
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
// Note: Testing checksum mismatch would require modifying embedded migrations
|
|
193
|
+
// which is not practical in unit tests
|
|
194
|
+
});
|
|
195
|
+
});
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite Migration Runner for Relay Ledger
|
|
3
|
+
*
|
|
4
|
+
* Provides a lightweight migration system for the relay-ledger.db SQLite database.
|
|
5
|
+
* Tracks applied migrations in a __migrations table and runs them in order.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Sequential migration execution by name
|
|
9
|
+
* - Idempotent (safe to run multiple times)
|
|
10
|
+
* - Tracks applied migrations with timestamps
|
|
11
|
+
* - Embedded SQL for portability (no file dependencies)
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import type Database from 'better-sqlite3';
|
|
15
|
+
|
|
16
|
+
// ============================================================================
|
|
17
|
+
// Types
|
|
18
|
+
// ============================================================================
|
|
19
|
+
|
|
20
|
+
export interface MigrationRecord {
|
|
21
|
+
id: number;
|
|
22
|
+
name: string;
|
|
23
|
+
appliedAt: number;
|
|
24
|
+
checksum: string;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export interface MigrationFile {
|
|
28
|
+
name: string;
|
|
29
|
+
sql: string;
|
|
30
|
+
checksum: string;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export interface MigrationResult {
|
|
34
|
+
applied: string[];
|
|
35
|
+
skipped: string[];
|
|
36
|
+
errors: Array<{ name: string; error: string }>;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// ============================================================================
|
|
40
|
+
// Embedded Migrations
|
|
41
|
+
// ============================================================================
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Embedded migrations - SQL is stored directly in code for portability.
|
|
45
|
+
* Add new migrations to this array in order.
|
|
46
|
+
*/
|
|
47
|
+
const EMBEDDED_MIGRATIONS: Array<{ name: string; sql: string }> = [
|
|
48
|
+
{
|
|
49
|
+
name: '0001_initial',
|
|
50
|
+
sql: `
|
|
51
|
+
-- Relay Ledger - Initial Schema
|
|
52
|
+
-- Migration 0001: Initial tables for relay file tracking
|
|
53
|
+
|
|
54
|
+
-- Main relay files table
|
|
55
|
+
CREATE TABLE IF NOT EXISTS relay_files (
|
|
56
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
57
|
+
file_id TEXT NOT NULL UNIQUE,
|
|
58
|
+
source_path TEXT NOT NULL,
|
|
59
|
+
archive_path TEXT,
|
|
60
|
+
agent_name TEXT NOT NULL,
|
|
61
|
+
message_type TEXT NOT NULL,
|
|
62
|
+
status TEXT NOT NULL DEFAULT 'pending',
|
|
63
|
+
retries INTEGER NOT NULL DEFAULT 0,
|
|
64
|
+
max_retries INTEGER NOT NULL DEFAULT 3,
|
|
65
|
+
discovered_at INTEGER NOT NULL,
|
|
66
|
+
processed_at INTEGER,
|
|
67
|
+
archived_at INTEGER,
|
|
68
|
+
error TEXT,
|
|
69
|
+
content_hash TEXT,
|
|
70
|
+
file_size INTEGER NOT NULL DEFAULT 0,
|
|
71
|
+
file_mtime_ns INTEGER,
|
|
72
|
+
file_inode INTEGER,
|
|
73
|
+
CONSTRAINT valid_status CHECK (status IN ('pending', 'processing', 'delivered', 'failed', 'archived'))
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
CREATE INDEX IF NOT EXISTS idx_relay_files_status ON relay_files(status);
|
|
77
|
+
CREATE INDEX IF NOT EXISTS idx_relay_files_agent ON relay_files(agent_name);
|
|
78
|
+
CREATE INDEX IF NOT EXISTS idx_relay_files_discovered ON relay_files(discovered_at);
|
|
79
|
+
CREATE INDEX IF NOT EXISTS idx_relay_files_source ON relay_files(source_path);
|
|
80
|
+
|
|
81
|
+
-- Agents registry table
|
|
82
|
+
CREATE TABLE IF NOT EXISTS agents (
|
|
83
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
84
|
+
agent_name TEXT NOT NULL UNIQUE,
|
|
85
|
+
created_at INTEGER NOT NULL,
|
|
86
|
+
last_seen_at INTEGER NOT NULL,
|
|
87
|
+
status TEXT NOT NULL DEFAULT 'active',
|
|
88
|
+
metadata TEXT,
|
|
89
|
+
CONSTRAINT valid_agent_status CHECK (status IN ('active', 'inactive'))
|
|
90
|
+
);
|
|
91
|
+
|
|
92
|
+
CREATE INDEX IF NOT EXISTS idx_agents_status ON agents(status);
|
|
93
|
+
CREATE INDEX IF NOT EXISTS idx_agents_last_seen ON agents(last_seen_at);
|
|
94
|
+
|
|
95
|
+
-- Orchestrator state table (key-value store for crash recovery)
|
|
96
|
+
CREATE TABLE IF NOT EXISTS orchestrator_state (
|
|
97
|
+
key TEXT PRIMARY KEY,
|
|
98
|
+
value TEXT NOT NULL,
|
|
99
|
+
updated_at INTEGER NOT NULL
|
|
100
|
+
);
|
|
101
|
+
|
|
102
|
+
-- Pending operations table (crash recovery atomicity)
|
|
103
|
+
CREATE TABLE IF NOT EXISTS pending_operations (
|
|
104
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
105
|
+
operation_type TEXT NOT NULL,
|
|
106
|
+
target_id TEXT NOT NULL,
|
|
107
|
+
payload TEXT,
|
|
108
|
+
created_at INTEGER NOT NULL,
|
|
109
|
+
attempts INTEGER NOT NULL DEFAULT 0,
|
|
110
|
+
last_attempt_at INTEGER,
|
|
111
|
+
error TEXT,
|
|
112
|
+
CONSTRAINT valid_operation_type CHECK (operation_type IN ('process', 'archive', 'cleanup'))
|
|
113
|
+
);
|
|
114
|
+
|
|
115
|
+
CREATE INDEX IF NOT EXISTS idx_pending_ops_type ON pending_operations(operation_type);
|
|
116
|
+
CREATE INDEX IF NOT EXISTS idx_pending_ops_target ON pending_operations(target_id);
|
|
117
|
+
`,
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
name: '0002_symlink_paths',
|
|
121
|
+
sql: `
|
|
122
|
+
-- Migration 0002: Add symlink path tracking for production workspace support
|
|
123
|
+
-- Workspaces in cloud/production may be symlinked for isolation.
|
|
124
|
+
-- We store both the original symlink path (for debugging) and canonical path (for operations).
|
|
125
|
+
|
|
126
|
+
-- Add symlink_path column to track original path (may be symlink)
|
|
127
|
+
ALTER TABLE relay_files ADD COLUMN symlink_path TEXT;
|
|
128
|
+
|
|
129
|
+
-- Create index for symlink lookups
|
|
130
|
+
CREATE INDEX IF NOT EXISTS idx_relay_files_symlink ON relay_files(symlink_path);
|
|
131
|
+
`,
|
|
132
|
+
},
|
|
133
|
+
];
|
|
134
|
+
|
|
135
|
+
// ============================================================================
|
|
136
|
+
// Migration Runner
|
|
137
|
+
// ============================================================================
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Create the migrations tracking table if it doesn't exist
|
|
141
|
+
*/
|
|
142
|
+
export function ensureMigrationsTable(db: Database.Database): void {
|
|
143
|
+
db.exec(`
|
|
144
|
+
CREATE TABLE IF NOT EXISTS __migrations (
|
|
145
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
146
|
+
name TEXT NOT NULL UNIQUE,
|
|
147
|
+
applied_at INTEGER NOT NULL,
|
|
148
|
+
checksum TEXT NOT NULL
|
|
149
|
+
);
|
|
150
|
+
`);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Get all applied migrations
|
|
155
|
+
*/
|
|
156
|
+
export function getAppliedMigrations(db: Database.Database): MigrationRecord[] {
|
|
157
|
+
const rows = db.prepare(`
|
|
158
|
+
SELECT id, name, applied_at, checksum FROM __migrations ORDER BY id ASC
|
|
159
|
+
`).all() as Array<{ id: number; name: string; applied_at: number; checksum: string }>;
|
|
160
|
+
|
|
161
|
+
return rows.map(row => ({
|
|
162
|
+
id: row.id,
|
|
163
|
+
name: row.name,
|
|
164
|
+
appliedAt: row.applied_at,
|
|
165
|
+
checksum: row.checksum,
|
|
166
|
+
}));
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* Check if a specific migration has been applied
|
|
171
|
+
*/
|
|
172
|
+
export function isMigrationApplied(db: Database.Database, name: string): boolean {
|
|
173
|
+
const row = db.prepare(`SELECT 1 FROM __migrations WHERE name = ?`).get(name);
|
|
174
|
+
return row !== undefined;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* Record a migration as applied
|
|
179
|
+
*/
|
|
180
|
+
export function recordMigration(db: Database.Database, name: string, checksum: string): void {
|
|
181
|
+
db.prepare(`
|
|
182
|
+
INSERT INTO __migrations (name, applied_at, checksum) VALUES (?, ?, ?)
|
|
183
|
+
`).run(name, Date.now(), checksum);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Calculate a simple checksum for migration content
|
|
188
|
+
*/
|
|
189
|
+
export function calculateChecksum(sql: string): string {
|
|
190
|
+
// Simple hash for migration verification
|
|
191
|
+
let hash = 0;
|
|
192
|
+
for (let i = 0; i < sql.length; i++) {
|
|
193
|
+
const char = sql.charCodeAt(i);
|
|
194
|
+
hash = ((hash << 5) - hash) + char;
|
|
195
|
+
hash = hash & hash; // Convert to 32-bit integer
|
|
196
|
+
}
|
|
197
|
+
return Math.abs(hash).toString(16).padStart(8, '0');
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* Load migrations from embedded definitions
|
|
202
|
+
*/
|
|
203
|
+
export function loadMigrationFiles(): MigrationFile[] {
|
|
204
|
+
return EMBEDDED_MIGRATIONS.map(m => ({
|
|
205
|
+
name: m.name,
|
|
206
|
+
sql: m.sql,
|
|
207
|
+
checksum: calculateChecksum(m.sql),
|
|
208
|
+
}));
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/**
|
|
212
|
+
* Run all pending migrations
|
|
213
|
+
*/
|
|
214
|
+
export function runMigrations(db: Database.Database): MigrationResult {
|
|
215
|
+
const result: MigrationResult = {
|
|
216
|
+
applied: [],
|
|
217
|
+
skipped: [],
|
|
218
|
+
errors: [],
|
|
219
|
+
};
|
|
220
|
+
|
|
221
|
+
// Ensure migrations table exists
|
|
222
|
+
ensureMigrationsTable(db);
|
|
223
|
+
|
|
224
|
+
// Load all migrations
|
|
225
|
+
const migrations = loadMigrationFiles();
|
|
226
|
+
|
|
227
|
+
// Get applied migrations
|
|
228
|
+
const applied = new Set(getAppliedMigrations(db).map(m => m.name));
|
|
229
|
+
|
|
230
|
+
// Run pending migrations in order
|
|
231
|
+
for (const migration of migrations) {
|
|
232
|
+
if (applied.has(migration.name)) {
|
|
233
|
+
result.skipped.push(migration.name);
|
|
234
|
+
continue;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
try {
|
|
238
|
+
// Run migration in a transaction
|
|
239
|
+
db.transaction(() => {
|
|
240
|
+
db.exec(migration.sql);
|
|
241
|
+
recordMigration(db, migration.name, migration.checksum);
|
|
242
|
+
})();
|
|
243
|
+
|
|
244
|
+
result.applied.push(migration.name);
|
|
245
|
+
} catch (err) {
|
|
246
|
+
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
247
|
+
result.errors.push({ name: migration.name, error: errorMessage });
|
|
248
|
+
// Stop on first error
|
|
249
|
+
break;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
return result;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* Get pending migrations that haven't been applied yet
|
|
258
|
+
*/
|
|
259
|
+
export function getPendingMigrations(db: Database.Database): MigrationFile[] {
|
|
260
|
+
ensureMigrationsTable(db);
|
|
261
|
+
const applied = new Set(getAppliedMigrations(db).map(m => m.name));
|
|
262
|
+
return loadMigrationFiles().filter(m => !applied.has(m.name));
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* Verify migration checksums match what was originally applied
|
|
267
|
+
*/
|
|
268
|
+
export function verifyMigrations(db: Database.Database): Array<{ name: string; expected: string; actual: string }> {
|
|
269
|
+
const applied = getAppliedMigrations(db);
|
|
270
|
+
const files = loadMigrationFiles();
|
|
271
|
+
const fileMap = new Map(files.map(f => [f.name, f]));
|
|
272
|
+
const mismatches: Array<{ name: string; expected: string; actual: string }> = [];
|
|
273
|
+
|
|
274
|
+
for (const record of applied) {
|
|
275
|
+
const file = fileMap.get(record.name);
|
|
276
|
+
if (file && file.checksum !== record.checksum) {
|
|
277
|
+
mismatches.push({
|
|
278
|
+
name: record.name,
|
|
279
|
+
expected: record.checksum,
|
|
280
|
+
actual: file.checksum,
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
return mismatches;
|
|
286
|
+
}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Orchestrator Health Monitoring Tests
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
6
|
+
|
|
7
|
+
// Mock child_process for process checking
|
|
8
|
+
vi.mock('child_process', () => ({
|
|
9
|
+
execSync: vi.fn(() => ''),
|
|
10
|
+
}));
|
|
11
|
+
|
|
12
|
+
// Test the health state management without starting the full orchestrator
|
|
13
|
+
describe('Orchestrator Health Monitoring', () => {
|
|
14
|
+
describe('AgentHealthState', () => {
|
|
15
|
+
it('should track agent health state structure', () => {
|
|
16
|
+
// Verify the interface structure by creating a mock
|
|
17
|
+
const health = {
|
|
18
|
+
key: 'workspace1:agent1',
|
|
19
|
+
workspaceId: 'workspace1',
|
|
20
|
+
agentName: 'agent1',
|
|
21
|
+
pid: 12345,
|
|
22
|
+
lastHeartbeatAt: new Date(),
|
|
23
|
+
lastSampleAt: new Date(),
|
|
24
|
+
lastRssBytes: 100 * 1024 * 1024, // 100MB
|
|
25
|
+
lastCpuPercent: 25.5,
|
|
26
|
+
releasing: false,
|
|
27
|
+
lastCpuAlertAt: undefined,
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
expect(health.key).toBe('workspace1:agent1');
|
|
31
|
+
expect(health.pid).toBe(12345);
|
|
32
|
+
expect(health.releasing).toBe(false);
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
describe('isProcessAlive', () => {
|
|
37
|
+
it('should return true for current process', () => {
|
|
38
|
+
// Current process should always be alive
|
|
39
|
+
let alive = false;
|
|
40
|
+
try {
|
|
41
|
+
process.kill(process.pid, 0);
|
|
42
|
+
alive = true;
|
|
43
|
+
} catch {
|
|
44
|
+
alive = false;
|
|
45
|
+
}
|
|
46
|
+
expect(alive).toBe(true);
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
it('should return false for non-existent PID', () => {
|
|
50
|
+
// PID 99999999 should not exist
|
|
51
|
+
let alive = false;
|
|
52
|
+
try {
|
|
53
|
+
process.kill(99999999, 0);
|
|
54
|
+
alive = true;
|
|
55
|
+
} catch {
|
|
56
|
+
alive = false;
|
|
57
|
+
}
|
|
58
|
+
expect(alive).toBe(false);
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
describe('CPU Alert Threshold', () => {
|
|
63
|
+
it('should use default CPU threshold of 300%', () => {
|
|
64
|
+
// Default is 300% (allows for multi-core usage)
|
|
65
|
+
const defaultThreshold = 300;
|
|
66
|
+
expect(defaultThreshold).toBe(300);
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
it('should parse CPU threshold from environment', () => {
|
|
70
|
+
const envValue = '150';
|
|
71
|
+
const parsed = parseFloat(envValue);
|
|
72
|
+
expect(parsed).toBe(150);
|
|
73
|
+
expect(Number.isFinite(parsed)).toBe(true);
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
describe('Health Registration Flow', () => {
|
|
78
|
+
it('should create proper health key', () => {
|
|
79
|
+
const workspaceId = 'ws-123';
|
|
80
|
+
const agentName = 'test-agent';
|
|
81
|
+
const key = `${workspaceId}:${agentName}`;
|
|
82
|
+
expect(key).toBe('ws-123:test-agent');
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
it('should track releasing state', () => {
|
|
86
|
+
// Simulating the flow:
|
|
87
|
+
// 1. Agent spawns -> releasing = false
|
|
88
|
+
// 2. stopAgent called -> releasing = true
|
|
89
|
+
// 3. Heartbeat check -> skips crash detection because releasing = true
|
|
90
|
+
|
|
91
|
+
const health = {
|
|
92
|
+
key: 'ws1:agent1',
|
|
93
|
+
workspaceId: 'ws1',
|
|
94
|
+
agentName: 'agent1',
|
|
95
|
+
pid: 1234,
|
|
96
|
+
releasing: false,
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
// Before stop
|
|
100
|
+
expect(health.releasing).toBe(false);
|
|
101
|
+
|
|
102
|
+
// During stop
|
|
103
|
+
health.releasing = true;
|
|
104
|
+
expect(health.releasing).toBe(true);
|
|
105
|
+
|
|
106
|
+
// Heartbeat check would skip crash announcement
|
|
107
|
+
const isAlive = false; // Process died
|
|
108
|
+
const shouldAnnounce = !isAlive && !health.releasing;
|
|
109
|
+
expect(shouldAnnounce).toBe(false);
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
describe('Resource Alert Cooldown', () => {
|
|
114
|
+
it('should respect cooldown period for CPU alerts', () => {
|
|
115
|
+
const RESOURCE_ALERT_COOLDOWN_MS = 60_000;
|
|
116
|
+
const lastAlertAt = Date.now() - 30_000; // 30 seconds ago
|
|
117
|
+
const now = Date.now();
|
|
118
|
+
|
|
119
|
+
const inCooldown = lastAlertAt && now - lastAlertAt < RESOURCE_ALERT_COOLDOWN_MS;
|
|
120
|
+
expect(inCooldown).toBe(true);
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
it('should allow alert after cooldown expires', () => {
|
|
124
|
+
const RESOURCE_ALERT_COOLDOWN_MS = 60_000;
|
|
125
|
+
const lastAlertAt = Date.now() - 90_000; // 90 seconds ago
|
|
126
|
+
const now = Date.now();
|
|
127
|
+
|
|
128
|
+
const inCooldown = lastAlertAt && now - lastAlertAt < RESOURCE_ALERT_COOLDOWN_MS;
|
|
129
|
+
expect(inCooldown).toBe(false);
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
describe('Crash Context', () => {
|
|
134
|
+
it('should categorize crash causes', () => {
|
|
135
|
+
const causes = ['oom', 'memory_leak', 'sudden_spike', 'unknown'] as const;
|
|
136
|
+
|
|
137
|
+
// Test OOM detection
|
|
138
|
+
const oomMemory = 2 * 1024 * 1024 * 1024; // 2GB
|
|
139
|
+
const oomThreshold = 1.5 * 1024 * 1024 * 1024; // 1.5GB
|
|
140
|
+
const isOom = oomMemory >= oomThreshold;
|
|
141
|
+
expect(isOom).toBe(true);
|
|
142
|
+
|
|
143
|
+
// Test memory leak detection
|
|
144
|
+
const growthRate = 15 * 1024 * 1024; // 15MB/min
|
|
145
|
+
const leakThreshold = 10 * 1024 * 1024; // 10MB/min
|
|
146
|
+
const isLeak = growthRate > leakThreshold;
|
|
147
|
+
expect(isLeak).toBe(true);
|
|
148
|
+
|
|
149
|
+
// Test sudden spike detection
|
|
150
|
+
const currentMemory = 500 * 1024 * 1024;
|
|
151
|
+
const previousMemory = 300 * 1024 * 1024;
|
|
152
|
+
const spike = currentMemory - previousMemory;
|
|
153
|
+
const isSpike = spike > 100 * 1024 * 1024; // 100MB threshold
|
|
154
|
+
expect(isSpike).toBe(true);
|
|
155
|
+
});
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
describe('Health Monitoring Integration', () => {
|
|
160
|
+
describe('Event Broadcasting', () => {
|
|
161
|
+
it('should structure crash event correctly', () => {
|
|
162
|
+
const event = {
|
|
163
|
+
type: 'agent:crashed',
|
|
164
|
+
workspaceId: 'ws-123',
|
|
165
|
+
data: {
|
|
166
|
+
name: 'test-agent',
|
|
167
|
+
pid: 12345,
|
|
168
|
+
crashContext: {
|
|
169
|
+
likelyCause: 'oom',
|
|
170
|
+
peakMemory: 1024 * 1024 * 1024,
|
|
171
|
+
averageMemory: 800 * 1024 * 1024,
|
|
172
|
+
memoryTrend: 'growing',
|
|
173
|
+
analysisNotes: ['Memory was at OOM-imminent level'],
|
|
174
|
+
},
|
|
175
|
+
},
|
|
176
|
+
timestamp: new Date(),
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
expect(event.type).toBe('agent:crashed');
|
|
180
|
+
expect(event.data.crashContext.likelyCause).toBe('oom');
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
it('should structure resource alert event correctly', () => {
|
|
184
|
+
const event = {
|
|
185
|
+
type: 'agent:resource-alert',
|
|
186
|
+
workspaceId: 'ws-123',
|
|
187
|
+
agentId: 'test-agent',
|
|
188
|
+
data: {
|
|
189
|
+
name: 'test-agent',
|
|
190
|
+
resourceType: 'memory',
|
|
191
|
+
currentValue: 600 * 1024 * 1024,
|
|
192
|
+
alertLevel: 'warning',
|
|
193
|
+
message: 'Agent "test-agent" memory usage is elevated',
|
|
194
|
+
recommendation: 'Keep monitoring, consider investigation if trend continues',
|
|
195
|
+
},
|
|
196
|
+
timestamp: new Date(),
|
|
197
|
+
};
|
|
198
|
+
|
|
199
|
+
expect(event.type).toBe('agent:resource-alert');
|
|
200
|
+
expect(event.data.resourceType).toBe('memory');
|
|
201
|
+
expect(event.data.alertLevel).toBe('warning');
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
describe('System Message Broadcasting', () => {
|
|
206
|
+
it('should format crash message correctly', () => {
|
|
207
|
+
const agentName = 'worker-1';
|
|
208
|
+
const pid = 12345;
|
|
209
|
+
const likelyCause = 'oom';
|
|
210
|
+
const analysisNotes = ['Memory was at OOM-imminent level', 'Peak memory: 1.5 GB'];
|
|
211
|
+
|
|
212
|
+
const message = likelyCause !== 'unknown'
|
|
213
|
+
? `AGENT CRASHED: "${agentName}" has died unexpectedly (PID: ${pid}). Likely cause: ${likelyCause}. ${analysisNotes.slice(0, 2).join('. ')}`
|
|
214
|
+
: `AGENT CRASHED: "${agentName}" has died unexpectedly (PID: ${pid}).`;
|
|
215
|
+
|
|
216
|
+
expect(message).toContain('AGENT CRASHED');
|
|
217
|
+
expect(message).toContain(agentName);
|
|
218
|
+
expect(message).toContain('Likely cause: oom');
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
it('should format resource alert message correctly', () => {
|
|
222
|
+
const agentName = 'worker-1';
|
|
223
|
+
const cpuPercent = 350.5;
|
|
224
|
+
|
|
225
|
+
const message = `RESOURCE ALERT: "${agentName}" is running at ${cpuPercent.toFixed(1)}% CPU. Consider reducing workload.`;
|
|
226
|
+
|
|
227
|
+
expect(message).toContain('RESOURCE ALERT');
|
|
228
|
+
expect(message).toContain('350.5% CPU');
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
});
|