waaseyaa/ai-agent 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

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:

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 beyond phpstan-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.yaml validates; zero BLOCK rows 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 我们能提供哪些服务?
定制开发 / 二次开发

基于 waaseyaa/ai-agent 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 8k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 36
  • 依赖项目数: 4
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: GPL-2.0-or-later
  • 更新时间: 2026-03-14