waaseyaa/ai-agent
Composer 安装命令:
composer require waaseyaa/ai-agent
包简介
AI agent orchestration and tool execution for Waaseyaa
README 文档
README
Layer 5 — AI
Waaseyaa agent runtime: the executor, the run service, the Messenger handler, and the in-process audit-log persistence. This package turns a registered AgentDefinition and an initiator account into a persisted AgentRun with real-time SSE progress, token / cost accounting, HITL approvals, and an append-only audit trail.
Where to start
The canonical doctrine spec is docs/specs/agent-executor.md. It owns the success criteria, NFR thresholds, audit invariants, SSE event vocabulary, HITL state machine, security posture, and the Waaseyaa\AI\Tools\ToolRegistryInterface contract.
For the tool catalogue (8 stock tools + remote MCP source) see packages/ai-tools/README.md.
Surfaces
| Surface | Entry point | Notes |
|---|---|---|
| CLI | packages/cli/src/Command/Ai/{AiRunCommand,AiPurgeRunsCommand,AiReapStalledRunsCommand}.php |
bin/waaseyaa ai:run "<prompt>" --inline for sync; omit --inline for async enqueue. |
| HTTP | packages/ai-agent/src/Controller/AgentRunController.php (routes: packages/ai-agent/src/Routing/AgentRouteServiceProvider.php) |
POST /api/ai/agent/run, GET /api/ai/agent/run/{id}, DELETE /api/ai/agent/run/{id}, POST /api/ai/agent/run/{id}/approve. Per-route capability checks + initiator ownership via AgentRunAccessPolicy. |
| SSE | BroadcastStorage push on agent.run.<id> |
Consume via GET /broadcast?channels=agent.run.<id>. Events: run_started, iteration, tool_call, tool_result, approval_required, run_completed, run_failed, run_cancelled. |
| Messenger worker | packages/ai-agent/src/Message/{RunAgent,RunAgentHandler}.php |
Consumes the RunAgent message; CAS-guarded against duplicate delivery (NFR-015). |
| Scheduler | packages/scheduler/src/Schedule/Ai/AgentScheduleEntries.php |
Daily purge + 5-minute stalled-run reaper. |
Bimaaji-backed tools
Four #[AsAgentTool] adapters expose bimaaji's application-graph introspection and validated-mutation surface to the embedded agent runtime. Discovered via the package-manifest compiler; their dependencies (ApplicationGraphGenerator, MutationValidator, PatchGenerator) resolve from the container after BimaajiServiceProvider::register().
| Tool name | Capability | Class | Purpose |
|---|---|---|---|
bimaaji_introspect_graph |
bimaaji.read |
Waaseyaa\AI\Agent\Tool\Bimaaji\IntrospectGraphTool |
Full application-graph snapshot (six default sections). |
bimaaji_introspect_section |
bimaaji.read |
Waaseyaa\AI\Agent\Tool\Bimaaji\IntrospectSectionTool |
Section-scoped payload (admin, entities, jsonapi, public_surface, routing, sovereignty). |
bimaaji_propose_mutation |
bimaaji.mutate |
Waaseyaa\AI\Agent\Tool\Bimaaji\ProposeMutationTool |
Validate a proposed schema mutation against the current graph; returns the full MutationResult envelope (status + errors). |
bimaaji_generate_patch |
bimaaji.mutate |
Waaseyaa\AI\Agent\Tool\Bimaaji\GeneratePatchTool |
Re-validate the request and emit a PatchSet in memory (never touches the filesystem — the consuming agent loop decides what to do with the patches). |
Capabilities: bimaaji.read is generally safe to grant; bimaaji.mutate is default-off per AD-02 and should be granted only to agents that need to propose schema changes. The mutation tools enforce the deny via AbstractAgentTool::requireCapability(); rejected calls surface as AgentToolResult::error(summary: 'forbidden') and are recorded in the audit log.
Example — run the reference demo agent inline:
bin/waaseyaa ai:run "Introspect the entities section, propose adding a 'nickname' field to User, then generate the patch." \
--agent=bimaaji_demo --inline
bimaaji_demo (packages/ai-agent/tests/Fixture/BimaajiDemoAgent.php) is the test-only reference agent that wires the four tools into a single introspect → propose → generate workflow. Real production agents should mirror its shape — declare the four tool names in tools: and gate the agent on bimaaji.read; per-tool capabilities are enforced inside each tool.
See also:
- M2 mission spec —
kitty-specs/ai-agent-bimaaji-tools-01KS5VKR/ - Tool-shape contract (SC-004 surface map) —
kitty-specs/ai-agent-bimaaji-tools-01KS5VKR/verification.md - Bimaaji subsystem spec —
docs/specs/bimaaji.md
Extension points
Register agent bundles and tools via attribute discovery — the package-manifest compiler scans both.
use Waaseyaa\AI\Agent\Attribute\AsAgentDefinition; #[AsAgentDefinition(id: 'my_agent', model: 'gpt-4o-mini')] final class MyAgent { /* prompt, tools, system, max_iterations, destructive_default, requires_capability */ } use Waaseyaa\AI\Tools\Attribute\AsAgentTool; #[AsAgentTool(name: 'my_tool', capability: 'my.feature', destructive: false)] final class MyTool extends \Waaseyaa\AI\Tools\AbstractAgentTool { /* execute() */ }
After adding new attributes run bin/waaseyaa optimize:manifest (or restart the dev server).
Persisted entities
| Entity | Purpose |
|---|---|
Waaseyaa\AI\Agent\Entity\AgentRun |
Run record: initiator, bundle snapshot, status, transcript (truncated at the configured cap), token/cost totals, approval state, timestamps. |
Waaseyaa\AI\Agent\Entity\AgentAuditLog |
Append-only event log: one row per provider call / tool call / tool result / approval. Purged only by AiPurgeRunsCommand. |
Repositories live in packages/ai-agent/src/Repository/. The legacy in-memory Waaseyaa\AI\Agent\AgentAuditLog value-object list inside AgentExecutor is removed.
Services
| Class | Role |
|---|---|
AgentRunService |
enqueue() (async path) and runInline() (CLI/dev sync path). |
AgentExecutor |
Per-iteration loop: provider call, tool dispatch via ToolRegistryInterface, HITL gating, cancellation poll. |
AgentDefinitionRegistry |
Resolves AgentDefinition VOs by id. |
StalledRunReaper |
Transitions runs stuck past max_runtime_seconds to failed. |
Mcp\McpClientToolSource + StreamableHttpMcpClient |
Adapts remote MCP servers into the local tool registry; capability prefix tool.mcp.<server>.<name>. |
Quality gates
Every change to this package MUST keep the following green:
bin/check-package-layers— ai-agent imports only from layer ≤ 5 (entity, entity-storage, access, queue, ai-schema, ai-tools).bin/check-dead-code— no new findings beyondphpstan-dead-code-baseline.neon.composer check-composer-policy— CP002 / CP003 / CP-NEW.composer phpstan— level 5.composer cs-check— PHP-CS-Fixer dry-run.- Bulk-edit gate —
occurrence_map.yamlvalidates; zeroBLOCKrows in the diff-compliance report.
Tests:
./vendor/bin/phpunit packages/ai-agent/tests/ ./vendor/bin/phpunit tests/Integration/PhaseN/AgentRuntime/
waaseyaa/ai-agent 适用场景与选型建议
waaseyaa/ai-agent 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 8k 次下载、GitHub Stars 达 0, 最近一次更新时间为 2026 年 03 月 14 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 waaseyaa/ai-agent 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 waaseyaa/ai-agent 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 waaseyaa/ai-agent 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
This module allows drag & drop grouping of items in a GridField
Adds text size controls and text-to-speech controls to Flarum discussion content.
Native Blade date, datetime, and date range pickers.
Symfony and Flysystem integration for the maintained KCFinder continuation.
Laravel integration for the maintained KCFinder continuation.
PHPStan rules shared across KnpLabs organization projects
统计信息
- 总下载量: 8k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 36
- 依赖项目数: 4
- 推荐数: 0
其他信息
- 授权协议: GPL-2.0-or-later
- 更新时间: 2026-03-14