- harness/es.py: append-only event store + проекции (образец — кооп-портал) - harness/levels.py: уровни 1с/1м/1ч/1д, контекст ∝ масштабу - harness/scheduler.py: уровневые потоки, идемпотентные тики, absorbed-стабы - harness/isolated_runner.py + _llm_worker.py: LLM-тик в сабпроцессе (глобальный asyncio-рантайм Strands не переживает 2+ create_harness) - cli.py: init/task/tasks/status/events + requeue (написан самим минутным агентом) - 9router: отдельный ключ sk-simbiot, модель auto (glm-5.3 первым)
77 lines
2.3 KiB
Python
77 lines
2.3 KiB
Python
"""Typed hook system for extending agent functionality.
|
|
|
|
This module provides a composable mechanism for building objects that can hook
|
|
into specific events during the agent lifecycle. The hook system enables both
|
|
built-in SDK components and user code to react to or modify agent behavior
|
|
through strongly-typed event callbacks.
|
|
|
|
Example Usage:
|
|
```python
|
|
from strands.hooks import HookProvider, HookRegistry
|
|
from strands.hooks.events import BeforeInvocationEvent, AfterInvocationEvent
|
|
|
|
class LoggingHooks(HookProvider):
|
|
def register_hooks(self, registry: HookRegistry) -> None:
|
|
registry.add_callback(BeforeInvocationEvent, self.log_start)
|
|
registry.add_callback(AfterInvocationEvent, self.log_end)
|
|
|
|
def log_start(self, event: BeforeInvocationEvent) -> None:
|
|
print(f"Request started for {event.agent.name}")
|
|
|
|
def log_end(self, event: AfterInvocationEvent) -> None:
|
|
print(f"Request completed for {event.agent.name}")
|
|
|
|
# Use with agent
|
|
agent = Agent(hooks=[LoggingHooks()])
|
|
```
|
|
|
|
This replaces the older callback_handler approach with a more composable,
|
|
type-safe system that supports multiple subscribers per event type.
|
|
"""
|
|
|
|
from .events import (
|
|
AfterInvocationEvent,
|
|
AfterModelCallEvent,
|
|
# Multiagent hook events
|
|
AfterMultiAgentInvocationEvent,
|
|
AfterNodeCallEvent,
|
|
AfterToolCallEvent,
|
|
AfterToolsEvent,
|
|
AgentInitializedEvent,
|
|
BeforeInvocationEvent,
|
|
BeforeModelCallEvent,
|
|
BeforeMultiAgentInvocationEvent,
|
|
BeforeNodeCallEvent,
|
|
BeforeToolCallEvent,
|
|
BeforeToolsEvent,
|
|
MessageAddedEvent,
|
|
MessageUpdatedEvent,
|
|
MultiAgentInitializedEvent,
|
|
)
|
|
from .registry import BaseHookEvent, HookCallback, HookEvent, HookOrder, HookProvider, HookRegistry
|
|
|
|
__all__ = [
|
|
"AgentInitializedEvent",
|
|
"BeforeInvocationEvent",
|
|
"BeforeToolCallEvent",
|
|
"BeforeToolsEvent",
|
|
"AfterToolCallEvent",
|
|
"AfterToolsEvent",
|
|
"BeforeModelCallEvent",
|
|
"AfterModelCallEvent",
|
|
"AfterInvocationEvent",
|
|
"MessageAddedEvent",
|
|
"MessageUpdatedEvent",
|
|
"HookEvent",
|
|
"HookOrder",
|
|
"HookProvider",
|
|
"HookCallback",
|
|
"HookRegistry",
|
|
"HookEvent",
|
|
"BaseHookEvent",
|
|
"AfterMultiAgentInvocationEvent",
|
|
"AfterNodeCallEvent",
|
|
"BeforeMultiAgentInvocationEvent",
|
|
"BeforeNodeCallEvent",
|
|
"MultiAgentInitializedEvent",
|
|
]
|