AuditEffectPower 场景

用一个 effect 场景说明 Power 如何只做副作用,而不改主值

场景

你想记录某类事件:

  • 某条消息进来了
  • 某个动作被触发了

但你不想:

  • 改写主值
  • 阻断流程

这时最适合 effect。

示例

import { Power, type PowerHooks } from "@downcity/city/power";

class AuditEffectPower extends Power {
  readonly name = "audit_effect";
  readonly title = "Audit Effect";
  readonly description = "Writes one audit line for every observed event.";

  readonly hooks: PowerHooks = {
    effect: {
      "audit.observe": [
        async ({ value, power }) => {
          console.log(`[${power}] observed`, value);
        },
      ],
    },
  };
}

// City 已登记并把 audit_effect 绑定到 entry 的 Agent/Workspace。
await city.powers.scope({ agent_id: agent.id, workspace_id: workspace.id }).effect("audit.observe", {
  event: "incoming_message",
  session_id: "sess_001",
});

为什么这里不是 pipeline

因为你并不关心返回一个新值,只关心副作用本身。

相关文档