@xyne/workflow-sdk 1.0.0
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 +36 -0
- package/dist/agents/agent-step.d.ts +152 -0
- package/dist/agents/agent-step.d.ts.map +1 -0
- package/dist/agents/agent-step.js +403 -0
- package/dist/agents/agent-step.js.map +1 -0
- package/dist/agents/base-runtime.d.ts +38 -0
- package/dist/agents/base-runtime.d.ts.map +1 -0
- package/dist/agents/base-runtime.js +21 -0
- package/dist/agents/base-runtime.js.map +1 -0
- package/dist/agents/index.d.ts +12 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +17 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/interceptor.d.ts +19 -0
- package/dist/agents/interceptor.d.ts.map +1 -0
- package/dist/agents/interceptor.js +21 -0
- package/dist/agents/interceptor.js.map +1 -0
- package/dist/agents/interceptors/approval-gate.d.ts +14 -0
- package/dist/agents/interceptors/approval-gate.d.ts.map +1 -0
- package/dist/agents/interceptors/approval-gate.js +19 -0
- package/dist/agents/interceptors/approval-gate.js.map +1 -0
- package/dist/agents/interceptors/tool-logger.d.ts +15 -0
- package/dist/agents/interceptors/tool-logger.d.ts.map +1 -0
- package/dist/agents/interceptors/tool-logger.js +23 -0
- package/dist/agents/interceptors/tool-logger.js.map +1 -0
- package/dist/agents/pi-mono-runtime.d.ts +88 -0
- package/dist/agents/pi-mono-runtime.d.ts.map +1 -0
- package/dist/agents/pi-mono-runtime.js +129 -0
- package/dist/agents/pi-mono-runtime.js.map +1 -0
- package/dist/agents/tool-registry.d.ts +25 -0
- package/dist/agents/tool-registry.d.ts.map +1 -0
- package/dist/agents/tool-registry.js +47 -0
- package/dist/agents/tool-registry.js.map +1 -0
- package/dist/agents/tool-types.d.ts +25 -0
- package/dist/agents/tool-types.d.ts.map +1 -0
- package/dist/agents/tool-types.js +9 -0
- package/dist/agents/tool-types.js.map +1 -0
- package/dist/agents/types.d.ts +91 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +12 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/builder/index.d.ts +30 -0
- package/dist/builder/index.d.ts.map +1 -0
- package/dist/builder/index.js +32 -0
- package/dist/builder/index.js.map +1 -0
- package/dist/client/index.d.ts +19 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +18 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/types.d.ts +128 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/types.js +10 -0
- package/dist/client/types.js.map +1 -0
- package/dist/client/workflow-client.d.ts +15 -0
- package/dist/client/workflow-client.d.ts.map +1 -0
- package/dist/client/workflow-client.js +293 -0
- package/dist/client/workflow-client.js.map +1 -0
- package/dist/common/attachment.d.ts +31 -0
- package/dist/common/attachment.d.ts.map +1 -0
- package/dist/common/attachment.js +21 -0
- package/dist/common/attachment.js.map +1 -0
- package/dist/common/executable-check.d.ts +42 -0
- package/dist/common/executable-check.d.ts.map +1 -0
- package/dist/common/executable-check.js +115 -0
- package/dist/common/executable-check.js.map +1 -0
- package/dist/common/index.d.ts +21 -0
- package/dist/common/index.d.ts.map +1 -0
- package/dist/common/index.js +19 -0
- package/dist/common/index.js.map +1 -0
- package/dist/common/resume-payload.d.ts +34 -0
- package/dist/common/resume-payload.d.ts.map +1 -0
- package/dist/common/resume-payload.js +12 -0
- package/dist/common/resume-payload.js.map +1 -0
- package/dist/engine/available-context.d.ts +29 -0
- package/dist/engine/available-context.d.ts.map +1 -0
- package/dist/engine/available-context.js +66 -0
- package/dist/engine/available-context.js.map +1 -0
- package/dist/engine/condition-evaluator.d.ts +13 -0
- package/dist/engine/condition-evaluator.d.ts.map +1 -0
- package/dist/engine/condition-evaluator.js +92 -0
- package/dist/engine/condition-evaluator.js.map +1 -0
- package/dist/engine/config-validator.d.ts +25 -0
- package/dist/engine/config-validator.d.ts.map +1 -0
- package/dist/engine/config-validator.js +316 -0
- package/dist/engine/config-validator.js.map +1 -0
- package/dist/engine/pause-step.d.ts +20 -0
- package/dist/engine/pause-step.d.ts.map +1 -0
- package/dist/engine/pause-step.js +24 -0
- package/dist/engine/pause-step.js.map +1 -0
- package/dist/engine/service-registry.d.ts +49 -0
- package/dist/engine/service-registry.d.ts.map +1 -0
- package/dist/engine/service-registry.js +76 -0
- package/dist/engine/service-registry.js.map +1 -0
- package/dist/engine/variable-resolver.d.ts +29 -0
- package/dist/engine/variable-resolver.d.ts.map +1 -0
- package/dist/engine/variable-resolver.js +130 -0
- package/dist/engine/variable-resolver.js.map +1 -0
- package/dist/engine/workflow-executor.d.ts +96 -0
- package/dist/engine/workflow-executor.d.ts.map +1 -0
- package/dist/engine/workflow-executor.js +837 -0
- package/dist/engine/workflow-executor.js.map +1 -0
- package/dist/index.d.ts +57 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +56 -0
- package/dist/index.js.map +1 -0
- package/dist/persistence/in-memory-adapter.d.ts +138 -0
- package/dist/persistence/in-memory-adapter.d.ts.map +1 -0
- package/dist/persistence/in-memory-adapter.js +315 -0
- package/dist/persistence/in-memory-adapter.js.map +1 -0
- package/dist/persistence/types.d.ts +214 -0
- package/dist/persistence/types.d.ts.map +1 -0
- package/dist/persistence/types.js +8 -0
- package/dist/persistence/types.js.map +1 -0
- package/dist/router/types.d.ts +57 -0
- package/dist/router/types.d.ts.map +1 -0
- package/dist/router/types.js +8 -0
- package/dist/router/types.js.map +1 -0
- package/dist/router/workflow-router.d.ts +26 -0
- package/dist/router/workflow-router.d.ts.map +1 -0
- package/dist/router/workflow-router.js +611 -0
- package/dist/router/workflow-router.js.map +1 -0
- package/dist/runtime/execution-event-bus.d.ts +38 -0
- package/dist/runtime/execution-event-bus.d.ts.map +1 -0
- package/dist/runtime/execution-event-bus.js +87 -0
- package/dist/runtime/execution-event-bus.js.map +1 -0
- package/dist/runtime/types.d.ts +129 -0
- package/dist/runtime/types.d.ts.map +1 -0
- package/dist/runtime/types.js +5 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/runtime/workflow-runtime.d.ts +256 -0
- package/dist/runtime/workflow-runtime.d.ts.map +1 -0
- package/dist/runtime/workflow-runtime.js +699 -0
- package/dist/runtime/workflow-runtime.js.map +1 -0
- package/dist/steps/base-step.d.ts +204 -0
- package/dist/steps/base-step.d.ts.map +1 -0
- package/dist/steps/base-step.js +69 -0
- package/dist/steps/base-step.js.map +1 -0
- package/dist/steps/builtin/code.step.d.ts +95 -0
- package/dist/steps/builtin/code.step.d.ts.map +1 -0
- package/dist/steps/builtin/code.step.js +122 -0
- package/dist/steps/builtin/code.step.js.map +1 -0
- package/dist/steps/builtin/conditional.step.d.ts +146 -0
- package/dist/steps/builtin/conditional.step.d.ts.map +1 -0
- package/dist/steps/builtin/conditional.step.js +71 -0
- package/dist/steps/builtin/conditional.step.js.map +1 -0
- package/dist/steps/builtin/dedup.step.d.ts +65 -0
- package/dist/steps/builtin/dedup.step.d.ts.map +1 -0
- package/dist/steps/builtin/dedup.step.js +61 -0
- package/dist/steps/builtin/dedup.step.js.map +1 -0
- package/dist/steps/builtin/http-request.step.d.ts +928 -0
- package/dist/steps/builtin/http-request.step.d.ts.map +1 -0
- package/dist/steps/builtin/http-request.step.js +570 -0
- package/dist/steps/builtin/http-request.step.js.map +1 -0
- package/dist/steps/builtin/loop.step.d.ts +100 -0
- package/dist/steps/builtin/loop.step.d.ts.map +1 -0
- package/dist/steps/builtin/loop.step.js +79 -0
- package/dist/steps/builtin/loop.step.js.map +1 -0
- package/dist/steps/builtin/parallel.step.d.ts +208 -0
- package/dist/steps/builtin/parallel.step.d.ts.map +1 -0
- package/dist/steps/builtin/parallel.step.js +249 -0
- package/dist/steps/builtin/parallel.step.js.map +1 -0
- package/dist/steps/builtin/switch.step.d.ts +200 -0
- package/dist/steps/builtin/switch.step.d.ts.map +1 -0
- package/dist/steps/builtin/switch.step.js +92 -0
- package/dist/steps/builtin/switch.step.js.map +1 -0
- package/dist/steps/builtin/transform.step.d.ts +247 -0
- package/dist/steps/builtin/transform.step.d.ts.map +1 -0
- package/dist/steps/builtin/transform.step.js +135 -0
- package/dist/steps/builtin/transform.step.js.map +1 -0
- package/dist/steps/builtin/wait.step.d.ts +921 -0
- package/dist/steps/builtin/wait.step.d.ts.map +1 -0
- package/dist/steps/builtin/wait.step.js +211 -0
- package/dist/steps/builtin/wait.step.js.map +1 -0
- package/dist/steps/step-registry.d.ts +64 -0
- package/dist/steps/step-registry.d.ts.map +1 -0
- package/dist/steps/step-registry.js +102 -0
- package/dist/steps/step-registry.js.map +1 -0
- package/dist/storage/in-memory-adapter.d.ts +25 -0
- package/dist/storage/in-memory-adapter.d.ts.map +1 -0
- package/dist/storage/in-memory-adapter.js +41 -0
- package/dist/storage/in-memory-adapter.js.map +1 -0
- package/dist/storage/types.d.ts +53 -0
- package/dist/storage/types.d.ts.map +1 -0
- package/dist/storage/types.js +13 -0
- package/dist/storage/types.js.map +1 -0
- package/dist/testing/index.d.ts +10 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +10 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/mock-context.d.ts +13 -0
- package/dist/testing/mock-context.d.ts.map +1 -0
- package/dist/testing/mock-context.js +21 -0
- package/dist/testing/mock-context.js.map +1 -0
- package/dist/testing/mock-step-context.d.ts +47 -0
- package/dist/testing/mock-step-context.d.ts.map +1 -0
- package/dist/testing/mock-step-context.js +59 -0
- package/dist/testing/mock-step-context.js.map +1 -0
- package/dist/triggers/base-trigger.d.ts +58 -0
- package/dist/triggers/base-trigger.d.ts.map +1 -0
- package/dist/triggers/base-trigger.js +37 -0
- package/dist/triggers/base-trigger.js.map +1 -0
- package/dist/triggers/builtin/default-cron-trigger.d.ts +44 -0
- package/dist/triggers/builtin/default-cron-trigger.d.ts.map +1 -0
- package/dist/triggers/builtin/default-cron-trigger.js +31 -0
- package/dist/triggers/builtin/default-cron-trigger.js.map +1 -0
- package/dist/triggers/builtin/default-event-trigger.d.ts +32 -0
- package/dist/triggers/builtin/default-event-trigger.d.ts.map +1 -0
- package/dist/triggers/builtin/default-event-trigger.js +21 -0
- package/dist/triggers/builtin/default-event-trigger.js.map +1 -0
- package/dist/triggers/builtin/default-manual-trigger.d.ts +119 -0
- package/dist/triggers/builtin/default-manual-trigger.d.ts.map +1 -0
- package/dist/triggers/builtin/default-manual-trigger.js +64 -0
- package/dist/triggers/builtin/default-manual-trigger.js.map +1 -0
- package/dist/triggers/builtin/default-webhook-trigger.d.ts +72 -0
- package/dist/triggers/builtin/default-webhook-trigger.d.ts.map +1 -0
- package/dist/triggers/builtin/default-webhook-trigger.js +91 -0
- package/dist/triggers/builtin/default-webhook-trigger.js.map +1 -0
- package/dist/triggers/cron-trigger.d.ts +52 -0
- package/dist/triggers/cron-trigger.d.ts.map +1 -0
- package/dist/triggers/cron-trigger.js +15 -0
- package/dist/triggers/cron-trigger.js.map +1 -0
- package/dist/triggers/event-trigger.d.ts +14 -0
- package/dist/triggers/event-trigger.d.ts.map +1 -0
- package/dist/triggers/event-trigger.js +13 -0
- package/dist/triggers/event-trigger.js.map +1 -0
- package/dist/triggers/manual-trigger.d.ts +11 -0
- package/dist/triggers/manual-trigger.d.ts.map +1 -0
- package/dist/triggers/manual-trigger.js +10 -0
- package/dist/triggers/manual-trigger.js.map +1 -0
- package/dist/triggers/trigger-registry.d.ts +48 -0
- package/dist/triggers/trigger-registry.d.ts.map +1 -0
- package/dist/triggers/trigger-registry.js +81 -0
- package/dist/triggers/trigger-registry.js.map +1 -0
- package/dist/triggers/webhook-trigger.d.ts +54 -0
- package/dist/triggers/webhook-trigger.d.ts.map +1 -0
- package/dist/triggers/webhook-trigger.js +13 -0
- package/dist/triggers/webhook-trigger.js.map +1 -0
- package/dist/types/attachment.d.ts +23 -0
- package/dist/types/attachment.d.ts.map +1 -0
- package/dist/types/attachment.js +2 -0
- package/dist/types/attachment.js.map +1 -0
- package/dist/types/categories.d.ts +14 -0
- package/dist/types/categories.d.ts.map +1 -0
- package/dist/types/categories.js +10 -0
- package/dist/types/categories.js.map +1 -0
- package/dist/types/context.d.ts +61 -0
- package/dist/types/context.d.ts.map +1 -0
- package/dist/types/context.js +2 -0
- package/dist/types/context.js.map +1 -0
- package/dist/types/index.d.ts +18 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +12 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/known-types.d.ts +34 -0
- package/dist/types/known-types.d.ts.map +1 -0
- package/dist/types/known-types.js +49 -0
- package/dist/types/known-types.js.map +1 -0
- package/dist/types/operators.d.ts +20 -0
- package/dist/types/operators.d.ts.map +1 -0
- package/dist/types/operators.js +27 -0
- package/dist/types/operators.js.map +1 -0
- package/dist/types/pause-path.d.ts +23 -0
- package/dist/types/pause-path.d.ts.map +1 -0
- package/dist/types/pause-path.js +2 -0
- package/dist/types/pause-path.js.map +1 -0
- package/dist/types/pause-state.d.ts +100 -0
- package/dist/types/pause-state.d.ts.map +1 -0
- package/dist/types/pause-state.js +15 -0
- package/dist/types/pause-state.js.map +1 -0
- package/dist/types/resume-payload.d.ts +34 -0
- package/dist/types/resume-payload.d.ts.map +1 -0
- package/dist/types/resume-payload.js +12 -0
- package/dist/types/resume-payload.js.map +1 -0
- package/dist/types/status.d.ts +27 -0
- package/dist/types/status.d.ts.map +1 -0
- package/dist/types/status.js +41 -0
- package/dist/types/status.js.map +1 -0
- package/dist/types/step-events.d.ts +22 -0
- package/dist/types/step-events.d.ts.map +1 -0
- package/dist/types/step-events.js +8 -0
- package/dist/types/step-events.js.map +1 -0
- package/dist/types/step-types.d.ts +12 -0
- package/dist/types/step-types.d.ts.map +1 -0
- package/dist/types/step-types.js +2 -0
- package/dist/types/step-types.js.map +1 -0
- package/dist/types/trigger-types.d.ts +12 -0
- package/dist/types/trigger-types.d.ts.map +1 -0
- package/dist/types/trigger-types.js +2 -0
- package/dist/types/trigger-types.js.map +1 -0
- package/dist/types/validation.d.ts +19 -0
- package/dist/types/validation.d.ts.map +1 -0
- package/dist/types/validation.js +11 -0
- package/dist/types/validation.js.map +1 -0
- package/dist/types/workflow-config.d.ts +122 -0
- package/dist/types/workflow-config.d.ts.map +1 -0
- package/dist/types/workflow-config.js +71 -0
- package/dist/types/workflow-config.js.map +1 -0
- package/dist/util/executable-check.d.ts +42 -0
- package/dist/util/executable-check.d.ts.map +1 -0
- package/dist/util/executable-check.js +115 -0
- package/dist/util/executable-check.js.map +1 -0
- package/dist/util/schema-convert.d.ts +14 -0
- package/dist/util/schema-convert.d.ts.map +1 -0
- package/dist/util/schema-convert.js +16 -0
- package/dist/util/schema-convert.js.map +1 -0
- package/dist/util/variable-ref.d.ts +52 -0
- package/dist/util/variable-ref.d.ts.map +1 -0
- package/dist/util/variable-ref.js +89 -0
- package/dist/util/variable-ref.js.map +1 -0
- package/package.json +97 -0
package/README.md
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# @xyne/workflow-sdk
|
|
2
|
+
|
|
3
|
+
Workflow engine SDK — build, validate, and execute workflows composed of triggers, steps, and control-flow primitives, with a framework-agnostic HTTP router and an optional LLM-agent system.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @xyne/workflow-sdk
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
The agent system (`@xyne/workflow-sdk/agents`) additionally requires the pi-mono peer dependencies:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npm install @earendil-works/pi-agent-core @earendil-works/pi-ai typebox
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Entry points
|
|
18
|
+
|
|
19
|
+
| Import | Contents |
|
|
20
|
+
| --- | --- |
|
|
21
|
+
| `@xyne/workflow-sdk` | Core: registries, executor, runtime, types |
|
|
22
|
+
| `@xyne/workflow-sdk/builder` | `WorkflowConfig` / step / trigger config types for building workflows |
|
|
23
|
+
| `@xyne/workflow-sdk/client` | Typed HTTP client for the workflow router |
|
|
24
|
+
| `@xyne/workflow-sdk/router` | Framework-agnostic route definitions |
|
|
25
|
+
| `@xyne/workflow-sdk/runtime` | Runtime wiring types |
|
|
26
|
+
| `@xyne/workflow-sdk/agents` | LLM agent step + tool registry (requires pi-mono peers) |
|
|
27
|
+
| `@xyne/workflow-sdk/testing` | Mock contexts + test helpers |
|
|
28
|
+
| `@xyne/workflow-sdk/common` | Shared utilities |
|
|
29
|
+
|
|
30
|
+
## Built-in steps
|
|
31
|
+
|
|
32
|
+
`CODE`, `HTTP_REQUEST`, `CONDITIONAL`, `SWITCH`, `LOOP`, `PARALLEL`, `WAIT`, `DEDUP`, plus the agent step (`RUN_AGENT`).
|
|
33
|
+
|
|
34
|
+
## License
|
|
35
|
+
|
|
36
|
+
UNLICENSED — © Xyne. All rights reserved.
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentStep — orchestrator step that runs an LLM agent within a workflow.
|
|
3
|
+
*
|
|
4
|
+
* Extends BaseActionStep. Receives a BaseAgentRuntime via composition (not
|
|
5
|
+
* inheritance). Handles tool resolution, interceptor chain, event
|
|
6
|
+
* consumption, pause/resume, and capability-based degradation.
|
|
7
|
+
*
|
|
8
|
+
* All configuration (tools, model, system prompt, MCP servers) comes from
|
|
9
|
+
* per-workflow config — nothing is baked in at registration.
|
|
10
|
+
*/
|
|
11
|
+
import { z } from 'zod';
|
|
12
|
+
import { BaseActionStep } from '../steps/base-step.js';
|
|
13
|
+
import type { StepExecutionContext } from '../steps/base-step.js';
|
|
14
|
+
import type { StepType } from '../types/step-types.js';
|
|
15
|
+
import type { StepCategory } from '../types/categories.js';
|
|
16
|
+
import type { BaseAgentRuntime } from './base-runtime.js';
|
|
17
|
+
import type { AgentToolRegistry } from './tool-registry.js';
|
|
18
|
+
import type { AgentResult } from './types.js';
|
|
19
|
+
export declare const AgentStepConfigSchema: z.ZodObject<{
|
|
20
|
+
systemPrompt: z.ZodString;
|
|
21
|
+
userMessage: z.ZodString;
|
|
22
|
+
tools: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
23
|
+
requireApproval: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
24
|
+
maxTurns: z.ZodDefault<z.ZodNumber>;
|
|
25
|
+
toolTimeout: z.ZodDefault<z.ZodNumber>;
|
|
26
|
+
}, "strip", z.ZodTypeAny, {
|
|
27
|
+
systemPrompt: string;
|
|
28
|
+
userMessage: string;
|
|
29
|
+
maxTurns: number;
|
|
30
|
+
toolTimeout: number;
|
|
31
|
+
tools?: string[] | undefined;
|
|
32
|
+
requireApproval?: string[] | undefined;
|
|
33
|
+
}, {
|
|
34
|
+
systemPrompt: string;
|
|
35
|
+
userMessage: string;
|
|
36
|
+
tools?: string[] | undefined;
|
|
37
|
+
requireApproval?: string[] | undefined;
|
|
38
|
+
maxTurns?: number | undefined;
|
|
39
|
+
toolTimeout?: number | undefined;
|
|
40
|
+
}>;
|
|
41
|
+
export type AgentStepConfig = z.infer<typeof AgentStepConfigSchema>;
|
|
42
|
+
export declare class AgentStep extends BaseActionStep<typeof AgentStepConfigSchema, AgentResult> {
|
|
43
|
+
private readonly runtime;
|
|
44
|
+
private readonly toolRegistry;
|
|
45
|
+
readonly type: StepType;
|
|
46
|
+
readonly name = "Run Agent";
|
|
47
|
+
readonly description = "Execute an LLM agent with tools";
|
|
48
|
+
readonly configSchema: z.ZodObject<{
|
|
49
|
+
systemPrompt: z.ZodString;
|
|
50
|
+
userMessage: z.ZodString;
|
|
51
|
+
tools: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
52
|
+
requireApproval: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
53
|
+
maxTurns: z.ZodDefault<z.ZodNumber>;
|
|
54
|
+
toolTimeout: z.ZodDefault<z.ZodNumber>;
|
|
55
|
+
}, "strip", z.ZodTypeAny, {
|
|
56
|
+
systemPrompt: string;
|
|
57
|
+
userMessage: string;
|
|
58
|
+
maxTurns: number;
|
|
59
|
+
toolTimeout: number;
|
|
60
|
+
tools?: string[] | undefined;
|
|
61
|
+
requireApproval?: string[] | undefined;
|
|
62
|
+
}, {
|
|
63
|
+
systemPrompt: string;
|
|
64
|
+
userMessage: string;
|
|
65
|
+
tools?: string[] | undefined;
|
|
66
|
+
requireApproval?: string[] | undefined;
|
|
67
|
+
maxTurns?: number | undefined;
|
|
68
|
+
toolTimeout?: number | undefined;
|
|
69
|
+
}>;
|
|
70
|
+
readonly outputSchema: z.ZodObject<{
|
|
71
|
+
response: z.ZodString;
|
|
72
|
+
toolCalls: z.ZodArray<z.ZodObject<{
|
|
73
|
+
name: z.ZodString;
|
|
74
|
+
args: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
75
|
+
result: z.ZodUnknown;
|
|
76
|
+
durationMs: z.ZodNumber;
|
|
77
|
+
}, "strip", z.ZodTypeAny, {
|
|
78
|
+
name: string;
|
|
79
|
+
args: Record<string, unknown>;
|
|
80
|
+
durationMs: number;
|
|
81
|
+
result?: unknown;
|
|
82
|
+
}, {
|
|
83
|
+
name: string;
|
|
84
|
+
args: Record<string, unknown>;
|
|
85
|
+
durationMs: number;
|
|
86
|
+
result?: unknown;
|
|
87
|
+
}>, "many">;
|
|
88
|
+
turnCount: z.ZodNumber;
|
|
89
|
+
usage: z.ZodObject<{
|
|
90
|
+
inputTokens: z.ZodNumber;
|
|
91
|
+
outputTokens: z.ZodNumber;
|
|
92
|
+
}, "strip", z.ZodTypeAny, {
|
|
93
|
+
inputTokens: number;
|
|
94
|
+
outputTokens: number;
|
|
95
|
+
}, {
|
|
96
|
+
inputTokens: number;
|
|
97
|
+
outputTokens: number;
|
|
98
|
+
}>;
|
|
99
|
+
}, "strip", z.ZodTypeAny, {
|
|
100
|
+
response: string;
|
|
101
|
+
toolCalls: {
|
|
102
|
+
name: string;
|
|
103
|
+
args: Record<string, unknown>;
|
|
104
|
+
durationMs: number;
|
|
105
|
+
result?: unknown;
|
|
106
|
+
}[];
|
|
107
|
+
turnCount: number;
|
|
108
|
+
usage: {
|
|
109
|
+
inputTokens: number;
|
|
110
|
+
outputTokens: number;
|
|
111
|
+
};
|
|
112
|
+
}, {
|
|
113
|
+
response: string;
|
|
114
|
+
toolCalls: {
|
|
115
|
+
name: string;
|
|
116
|
+
args: Record<string, unknown>;
|
|
117
|
+
durationMs: number;
|
|
118
|
+
result?: unknown;
|
|
119
|
+
}[];
|
|
120
|
+
turnCount: number;
|
|
121
|
+
usage: {
|
|
122
|
+
inputTokens: number;
|
|
123
|
+
outputTokens: number;
|
|
124
|
+
};
|
|
125
|
+
}>;
|
|
126
|
+
readonly category: StepCategory;
|
|
127
|
+
constructor(runtime: BaseAgentRuntime, toolRegistry: AgentToolRegistry);
|
|
128
|
+
decorateConfigSchema(jsonSchema: Record<string, unknown>): Record<string, unknown>;
|
|
129
|
+
execute(config: AgentStepConfig, ctx: StepExecutionContext): Promise<AgentResult>;
|
|
130
|
+
/**
|
|
131
|
+
* Continue a prior conversation. Called from `execute()` when
|
|
132
|
+
* `ctx.priorState.messages` is present (review-gate retry or rerunFromStep).
|
|
133
|
+
*
|
|
134
|
+
* Reconstructs the agent input with the full prior conversation and the
|
|
135
|
+
* current `config.userMessage` as the new user turn. The runtime decides
|
|
136
|
+
* how to inject the new message into the message stream.
|
|
137
|
+
*/
|
|
138
|
+
private continueConversation;
|
|
139
|
+
onResume(rowData: Record<string, unknown>, config: AgentStepConfig, ctx: StepExecutionContext): Promise<AgentResult>;
|
|
140
|
+
private convertTools;
|
|
141
|
+
/**
|
|
142
|
+
* Convert a Zod schema to a JSON Schema object for pi-mono tool parameters.
|
|
143
|
+
* Uses Zod's built-in JSON Schema support when available, falls back to
|
|
144
|
+
* a basic type: "object" wrapper.
|
|
145
|
+
*/
|
|
146
|
+
private zodToJsonSchema;
|
|
147
|
+
private buildInterceptors;
|
|
148
|
+
private buildHooks;
|
|
149
|
+
private consumeEvents;
|
|
150
|
+
private buildResult;
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=agent-step.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-step.d.ts","sourceRoot":"","sources":["../../src/agents/agent-step.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAQ5D,OAAO,KAAK,EACV,WAAW,EAKZ,MAAM,YAAY,CAAC;AAIpB,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;EAOhC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAiDpE,qBAAa,SAAU,SAAQ,cAAc,CAC3C,OAAO,qBAAqB,EAC5B,WAAW,CACZ;IASG,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAT/B,SAAkB,IAAI,EAAE,QAAQ,CAAe;IAC/C,SAAkB,IAAI,eAAe;IACrC,SAAkB,WAAW,qCAAqC;IAClE,SAAkB,YAAY;;;;;;;;;;;;;;;;;;;;;OAAyB;IACvD,SAAkB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAAqB;IACnD,SAAkB,QAAQ,EAAE,YAAY,CAAQ;gBAG7B,OAAO,EAAE,gBAAgB,EACzB,YAAY,EAAE,iBAAiB;IAKzC,oBAAoB,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAyB5E,OAAO,CACpB,MAAM,EAAE,eAAe,EACvB,GAAG,EAAE,oBAAoB,GACxB,OAAO,CAAC,WAAW,CAAC;IA2CvB;;;;;;;OAOG;YACW,oBAAoB;IAkDnB,QAAQ,CACrB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,MAAM,EAAE,eAAe,EACvB,GAAG,EAAE,oBAAoB,GACxB,OAAO,CAAC,WAAW,CAAC;IAiDvB,OAAO,CAAC,YAAY;IA8BpB;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,iBAAiB;IAazB,OAAO,CAAC,UAAU;YAmBJ,aAAa;IAkI3B,OAAO,CAAC,WAAW;CAkBpB"}
|
|
@@ -0,0 +1,403 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentStep — orchestrator step that runs an LLM agent within a workflow.
|
|
3
|
+
*
|
|
4
|
+
* Extends BaseActionStep. Receives a BaseAgentRuntime via composition (not
|
|
5
|
+
* inheritance). Handles tool resolution, interceptor chain, event
|
|
6
|
+
* consumption, pause/resume, and capability-based degradation.
|
|
7
|
+
*
|
|
8
|
+
* All configuration (tools, model, system prompt, MCP servers) comes from
|
|
9
|
+
* per-workflow config — nothing is baked in at registration.
|
|
10
|
+
*/
|
|
11
|
+
import { z } from 'zod';
|
|
12
|
+
import { BaseActionStep } from '../steps/base-step.js';
|
|
13
|
+
import { runInterceptorChain, } from './interceptor.js';
|
|
14
|
+
import { ApprovalGateInterceptor } from './interceptors/approval-gate.js';
|
|
15
|
+
import { ToolLoggingInterceptor } from './interceptors/tool-logger.js';
|
|
16
|
+
// ─── Config Schema ───
|
|
17
|
+
export const AgentStepConfigSchema = z.object({
|
|
18
|
+
systemPrompt: z.string().describe('Instructions that define the agent\'s behavior and capabilities'),
|
|
19
|
+
userMessage: z.string().describe('The user message or task prompt sent to the agent'),
|
|
20
|
+
tools: z.array(z.string()).optional().describe('Tool names the agent is allowed to use'),
|
|
21
|
+
requireApproval: z.array(z.string()).optional().describe('Tool names that require human approval before execution'),
|
|
22
|
+
maxTurns: z.number().int().min(1).default(10).describe('Maximum number of agent reasoning turns'),
|
|
23
|
+
toolTimeout: z.number().int().positive().default(30_000).describe('Timeout per tool call in milliseconds'),
|
|
24
|
+
});
|
|
25
|
+
// ─── Result Schema ───
|
|
26
|
+
const AgentResultSchema = z.object({
|
|
27
|
+
response: z.string(),
|
|
28
|
+
toolCalls: z.array(z.object({
|
|
29
|
+
name: z.string(),
|
|
30
|
+
args: z.record(z.unknown()),
|
|
31
|
+
result: z.unknown(),
|
|
32
|
+
durationMs: z.number(),
|
|
33
|
+
})),
|
|
34
|
+
turnCount: z.number(),
|
|
35
|
+
usage: z.object({
|
|
36
|
+
inputTokens: z.number(),
|
|
37
|
+
outputTokens: z.number(),
|
|
38
|
+
}),
|
|
39
|
+
});
|
|
40
|
+
// ─── Utility ───
|
|
41
|
+
function withTimeout(promise, timeoutMs) {
|
|
42
|
+
return Promise.race([
|
|
43
|
+
promise,
|
|
44
|
+
new Promise((_resolve, reject) => {
|
|
45
|
+
const timer = setTimeout(() => { reject(new Error(`Tool execution timed out after ${timeoutMs}ms`)); }, timeoutMs);
|
|
46
|
+
// Don't block Node from exiting
|
|
47
|
+
if (typeof timer === 'object' && 'unref' in timer) {
|
|
48
|
+
timer.unref();
|
|
49
|
+
}
|
|
50
|
+
}),
|
|
51
|
+
]);
|
|
52
|
+
}
|
|
53
|
+
/** Extract text content from an AssistantMessage. */
|
|
54
|
+
function extractResponseText(message) {
|
|
55
|
+
return message.content
|
|
56
|
+
.filter((c) => c.type === 'text')
|
|
57
|
+
.map((c) => c.text)
|
|
58
|
+
.join('');
|
|
59
|
+
}
|
|
60
|
+
// ─── AgentStep ───
|
|
61
|
+
export class AgentStep extends BaseActionStep {
|
|
62
|
+
runtime;
|
|
63
|
+
toolRegistry;
|
|
64
|
+
type = 'RUN_AGENT';
|
|
65
|
+
name = 'Run Agent';
|
|
66
|
+
description = 'Execute an LLM agent with tools';
|
|
67
|
+
configSchema = AgentStepConfigSchema;
|
|
68
|
+
outputSchema = AgentResultSchema;
|
|
69
|
+
category = 'ai';
|
|
70
|
+
constructor(runtime, toolRegistry) {
|
|
71
|
+
super();
|
|
72
|
+
this.runtime = runtime;
|
|
73
|
+
this.toolRegistry = toolRegistry;
|
|
74
|
+
}
|
|
75
|
+
decorateConfigSchema(jsonSchema) {
|
|
76
|
+
const toolNames = this.toolRegistry.getNames();
|
|
77
|
+
if (toolNames.length === 0)
|
|
78
|
+
return jsonSchema;
|
|
79
|
+
const props = jsonSchema['properties'];
|
|
80
|
+
if (!props)
|
|
81
|
+
return jsonSchema;
|
|
82
|
+
// Inject enum into tools array items so the generic renderer shows multi-select
|
|
83
|
+
if (props['tools']?.['items']) {
|
|
84
|
+
props['tools'] = {
|
|
85
|
+
...props['tools'],
|
|
86
|
+
items: { ...props['tools']['items'], enum: toolNames },
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
// Same for requireApproval
|
|
90
|
+
if (props['requireApproval']?.['items']) {
|
|
91
|
+
props['requireApproval'] = {
|
|
92
|
+
...props['requireApproval'],
|
|
93
|
+
items: { ...props['requireApproval']['items'], enum: toolNames },
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
return jsonSchema;
|
|
97
|
+
}
|
|
98
|
+
async execute(config, ctx) {
|
|
99
|
+
// Conversation continuity: when a prior run left messages (review-gate
|
|
100
|
+
// retry or rerunFromStep), continue the conversation with the new
|
|
101
|
+
// userMessage as additional context. The agent sees the full history.
|
|
102
|
+
const priorMessages = extractPriorMessages(ctx.priorState);
|
|
103
|
+
if (priorMessages && priorMessages.length > 0) {
|
|
104
|
+
return this.continueConversation(priorMessages, config, ctx);
|
|
105
|
+
}
|
|
106
|
+
// 1. Resolve tools from registry
|
|
107
|
+
const workflowTools = config.tools
|
|
108
|
+
? this.toolRegistry.resolve(config.tools)
|
|
109
|
+
: [];
|
|
110
|
+
// 2. Convert WorkflowTools → pi-mono AgentTools
|
|
111
|
+
const piTools = this.convertTools(workflowTools, config.toolTimeout, ctx);
|
|
112
|
+
// 3. Clamp maxTurns if runtime doesn't support multi-turn
|
|
113
|
+
const effectiveMaxTurns = this.runtime.capabilities.multiTurn
|
|
114
|
+
? config.maxTurns
|
|
115
|
+
: 1;
|
|
116
|
+
// 4. Build interceptor chain
|
|
117
|
+
const interceptors = this.buildInterceptors(config, ctx);
|
|
118
|
+
// 5. Map interceptors → AgentHooks
|
|
119
|
+
const hooks = this.buildHooks(interceptors, ctx);
|
|
120
|
+
// 6. Execute runtime
|
|
121
|
+
const events = this.runtime.execute(config, {
|
|
122
|
+
tools: this.runtime.capabilities.toolUse ? piTools : [],
|
|
123
|
+
hooks: this.runtime.capabilities.hooks ? hooks : {},
|
|
124
|
+
signal: ctx.runtime.metadata['signal'] ?? new AbortController().signal,
|
|
125
|
+
}, ctx);
|
|
126
|
+
// 7. Consume event stream
|
|
127
|
+
return this.consumeEvents(events, ctx, effectiveMaxTurns);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Continue a prior conversation. Called from `execute()` when
|
|
131
|
+
* `ctx.priorState.messages` is present (review-gate retry or rerunFromStep).
|
|
132
|
+
*
|
|
133
|
+
* Reconstructs the agent input with the full prior conversation and the
|
|
134
|
+
* current `config.userMessage` as the new user turn. The runtime decides
|
|
135
|
+
* how to inject the new message into the message stream.
|
|
136
|
+
*/
|
|
137
|
+
async continueConversation(priorMessages, config, ctx) {
|
|
138
|
+
const priorState = (ctx.priorState ?? {});
|
|
139
|
+
const workflowTools = config.tools
|
|
140
|
+
? this.toolRegistry.resolve(config.tools)
|
|
141
|
+
: [];
|
|
142
|
+
const piTools = this.convertTools(workflowTools, config.toolTimeout, ctx);
|
|
143
|
+
const interceptors = this.buildInterceptors(config, ctx);
|
|
144
|
+
const hooks = this.buildHooks(interceptors, ctx);
|
|
145
|
+
const effectiveMaxTurns = this.runtime.capabilities.multiTurn
|
|
146
|
+
? config.maxTurns
|
|
147
|
+
: 1;
|
|
148
|
+
const completedToolCalls = priorState.completedToolCalls ?? [];
|
|
149
|
+
const usage = priorState.usage ?? { inputTokens: 0, outputTokens: 0 };
|
|
150
|
+
const currentTurn = priorState.currentTurn ?? 0;
|
|
151
|
+
const input = {
|
|
152
|
+
tools: this.runtime.capabilities.toolUse ? piTools : [],
|
|
153
|
+
hooks: this.runtime.capabilities.hooks ? hooks : {},
|
|
154
|
+
signal: ctx.runtime.metadata['signal'] ?? new AbortController().signal,
|
|
155
|
+
resume: {
|
|
156
|
+
messages: priorMessages,
|
|
157
|
+
payload: { action: 'approve', feedback: config.userMessage },
|
|
158
|
+
pauseState: {
|
|
159
|
+
type: 'awaiting_feedback',
|
|
160
|
+
reason: 'Continuing prior conversation',
|
|
161
|
+
prompt: config.userMessage,
|
|
162
|
+
state: {
|
|
163
|
+
messages: priorMessages,
|
|
164
|
+
currentTurn,
|
|
165
|
+
completedToolCalls,
|
|
166
|
+
usage,
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
},
|
|
170
|
+
};
|
|
171
|
+
const events = this.runtime.execute(config, input, ctx);
|
|
172
|
+
return this.consumeEvents(events, ctx, effectiveMaxTurns, {
|
|
173
|
+
messages: priorMessages,
|
|
174
|
+
currentTurn,
|
|
175
|
+
completedToolCalls,
|
|
176
|
+
usage,
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
async onResume(rowData, config, ctx) {
|
|
180
|
+
const pauseState = rowData;
|
|
181
|
+
const resumePayload = ctx.runtime.metadata['resumePayload'];
|
|
182
|
+
const pauseRequest = ctx.runtime.metadata['pauseRequest'];
|
|
183
|
+
if (resumePayload?.action === 'abort') {
|
|
184
|
+
return {
|
|
185
|
+
response: pauseState.messages.length > 0
|
|
186
|
+
? 'Agent execution aborted by user.'
|
|
187
|
+
: '',
|
|
188
|
+
toolCalls: pauseState.completedToolCalls,
|
|
189
|
+
turnCount: pauseState.currentTurn,
|
|
190
|
+
usage: pauseState.usage,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
// Resolve tools again (MCP tools may have changed)
|
|
194
|
+
const workflowTools = config.tools
|
|
195
|
+
? this.toolRegistry.resolve(config.tools)
|
|
196
|
+
: [];
|
|
197
|
+
const piTools = this.convertTools(workflowTools, config.toolTimeout, ctx);
|
|
198
|
+
const interceptors = this.buildInterceptors(config, ctx);
|
|
199
|
+
const hooks = this.buildHooks(interceptors, ctx);
|
|
200
|
+
const effectiveMaxTurns = this.runtime.capabilities.multiTurn
|
|
201
|
+
? config.maxTurns
|
|
202
|
+
: 1;
|
|
203
|
+
const input = {
|
|
204
|
+
tools: this.runtime.capabilities.toolUse ? piTools : [],
|
|
205
|
+
hooks: this.runtime.capabilities.hooks ? hooks : {},
|
|
206
|
+
signal: ctx.runtime.metadata['signal'] ?? new AbortController().signal,
|
|
207
|
+
};
|
|
208
|
+
if (pauseRequest) {
|
|
209
|
+
input.resume = {
|
|
210
|
+
messages: pauseState.messages,
|
|
211
|
+
payload: resumePayload ?? { action: 'approve' },
|
|
212
|
+
pauseState: pauseRequest,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
const events = this.runtime.execute(config, input, ctx);
|
|
216
|
+
// Consume events, carrying over state from before pause
|
|
217
|
+
return this.consumeEvents(events, ctx, effectiveMaxTurns, pauseState);
|
|
218
|
+
}
|
|
219
|
+
// ─── Private: Tool conversion ───
|
|
220
|
+
convertTools(tools, timeoutMs, ctx) {
|
|
221
|
+
return tools.map((tool) => ({
|
|
222
|
+
name: tool.name,
|
|
223
|
+
label: tool.name,
|
|
224
|
+
description: tool.description,
|
|
225
|
+
parameters: this.zodToJsonSchema(tool.inputSchema),
|
|
226
|
+
execute: async (_toolCallId, params, signal) => {
|
|
227
|
+
const result = await withTimeout(tool.execute(params, {
|
|
228
|
+
signal: signal ?? new AbortController().signal,
|
|
229
|
+
log: ctx.log,
|
|
230
|
+
}), timeoutMs);
|
|
231
|
+
return {
|
|
232
|
+
content: [{ type: 'text', text: JSON.stringify(result) }],
|
|
233
|
+
details: result,
|
|
234
|
+
};
|
|
235
|
+
},
|
|
236
|
+
}));
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Convert a Zod schema to a JSON Schema object for pi-mono tool parameters.
|
|
240
|
+
* Uses Zod's built-in JSON Schema support when available, falls back to
|
|
241
|
+
* a basic type: "object" wrapper.
|
|
242
|
+
*/
|
|
243
|
+
zodToJsonSchema(schema) {
|
|
244
|
+
// Zod v3.25+ has a built-in jsonSchema() method
|
|
245
|
+
if ('jsonSchema' in schema && typeof schema.jsonSchema === 'function') {
|
|
246
|
+
return schema.jsonSchema();
|
|
247
|
+
}
|
|
248
|
+
// Fallback: opaque object schema
|
|
249
|
+
return { type: 'object' };
|
|
250
|
+
}
|
|
251
|
+
// ─── Private: Interceptors ───
|
|
252
|
+
buildInterceptors(config, ctx) {
|
|
253
|
+
const interceptors = [
|
|
254
|
+
new ToolLoggingInterceptor(ctx.emit.bind(ctx)),
|
|
255
|
+
];
|
|
256
|
+
if (config.requireApproval && config.requireApproval.length > 0) {
|
|
257
|
+
interceptors.push(new ApprovalGateInterceptor(config.requireApproval));
|
|
258
|
+
}
|
|
259
|
+
return interceptors;
|
|
260
|
+
}
|
|
261
|
+
buildHooks(interceptors, ctx) {
|
|
262
|
+
return {
|
|
263
|
+
async beforeToolCall(tool, args) {
|
|
264
|
+
return runInterceptorChain(interceptors, tool, args);
|
|
265
|
+
},
|
|
266
|
+
async afterToolCall(tool, args, result) {
|
|
267
|
+
ctx.emit({
|
|
268
|
+
type: 'tool_call',
|
|
269
|
+
data: { tool, args, result, phase: 'end' },
|
|
270
|
+
});
|
|
271
|
+
},
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
// ─── Private: Event consumption ───
|
|
275
|
+
async consumeEvents(events, ctx, maxTurns, initialState) {
|
|
276
|
+
const state = initialState ?? {
|
|
277
|
+
messages: [],
|
|
278
|
+
currentTurn: 0,
|
|
279
|
+
completedToolCalls: [],
|
|
280
|
+
usage: { inputTokens: 0, outputTokens: 0 },
|
|
281
|
+
};
|
|
282
|
+
// Track args from tool_execution_start for use in tool_execution_end
|
|
283
|
+
const pendingToolArgs = new Map();
|
|
284
|
+
for await (const event of events) {
|
|
285
|
+
switch (event.type) {
|
|
286
|
+
case 'turn_start':
|
|
287
|
+
state.currentTurn++;
|
|
288
|
+
if (state.currentTurn > maxTurns) {
|
|
289
|
+
ctx.log.warn(`Agent exceeded maxTurns (${maxTurns}), stopping`);
|
|
290
|
+
return this.buildResult(state);
|
|
291
|
+
}
|
|
292
|
+
break;
|
|
293
|
+
case 'message_start':
|
|
294
|
+
ctx.emit({ type: 'thinking', data: { phase: 'start' } });
|
|
295
|
+
break;
|
|
296
|
+
case 'message_update': {
|
|
297
|
+
const updateMsg = event.message;
|
|
298
|
+
const partialText = extractResponseText(updateMsg);
|
|
299
|
+
ctx.emit({
|
|
300
|
+
type: 'progress',
|
|
301
|
+
data: { content: partialText },
|
|
302
|
+
});
|
|
303
|
+
break;
|
|
304
|
+
}
|
|
305
|
+
case 'message_end': {
|
|
306
|
+
const endMsg = event.message;
|
|
307
|
+
state.messages.push(endMsg);
|
|
308
|
+
// Accumulate usage from assistant messages
|
|
309
|
+
if (endMsg.role === 'assistant' && endMsg.usage) {
|
|
310
|
+
state.usage.inputTokens += endMsg.usage.input;
|
|
311
|
+
state.usage.outputTokens += endMsg.usage.output;
|
|
312
|
+
}
|
|
313
|
+
ctx.emit({
|
|
314
|
+
type: 'substep',
|
|
315
|
+
data: { type: 'message', content: extractResponseText(endMsg) },
|
|
316
|
+
});
|
|
317
|
+
break;
|
|
318
|
+
}
|
|
319
|
+
case 'tool_execution_start': {
|
|
320
|
+
const startEvt = event;
|
|
321
|
+
pendingToolArgs.set(startEvt.toolCallId, startEvt.args ?? {});
|
|
322
|
+
ctx.emit({
|
|
323
|
+
type: 'tool_call',
|
|
324
|
+
data: {
|
|
325
|
+
tool: startEvt.toolName,
|
|
326
|
+
args: startEvt.args,
|
|
327
|
+
phase: 'start',
|
|
328
|
+
toolCallId: startEvt.toolCallId,
|
|
329
|
+
},
|
|
330
|
+
});
|
|
331
|
+
break;
|
|
332
|
+
}
|
|
333
|
+
case 'tool_execution_end': {
|
|
334
|
+
const endEvt = event;
|
|
335
|
+
const toolArgs = pendingToolArgs.get(endEvt.toolCallId) ?? {};
|
|
336
|
+
pendingToolArgs.delete(endEvt.toolCallId);
|
|
337
|
+
state.completedToolCalls.push({
|
|
338
|
+
name: endEvt.toolName,
|
|
339
|
+
args: toolArgs,
|
|
340
|
+
result: endEvt.result,
|
|
341
|
+
durationMs: 0, // pi-mono doesn't provide timing; host can enrich
|
|
342
|
+
});
|
|
343
|
+
ctx.emit({
|
|
344
|
+
type: 'tool_call',
|
|
345
|
+
data: {
|
|
346
|
+
tool: endEvt.toolName,
|
|
347
|
+
result: endEvt.result,
|
|
348
|
+
phase: 'end',
|
|
349
|
+
toolCallId: endEvt.toolCallId,
|
|
350
|
+
isError: endEvt.isError,
|
|
351
|
+
},
|
|
352
|
+
});
|
|
353
|
+
break;
|
|
354
|
+
}
|
|
355
|
+
case 'turn_end': {
|
|
356
|
+
const turnEvt = event;
|
|
357
|
+
// Store tool result messages in state for resume
|
|
358
|
+
for (const tr of turnEvt.toolResults) {
|
|
359
|
+
state.messages.push(tr);
|
|
360
|
+
}
|
|
361
|
+
break;
|
|
362
|
+
}
|
|
363
|
+
case 'agent_end':
|
|
364
|
+
// Final event — loop will exit naturally
|
|
365
|
+
break;
|
|
366
|
+
default:
|
|
367
|
+
// agent_start, tool_execution_update, etc. — ignore
|
|
368
|
+
break;
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
return this.buildResult(state);
|
|
372
|
+
}
|
|
373
|
+
buildResult(state) {
|
|
374
|
+
// Find the last assistant message for the response text
|
|
375
|
+
let response = '';
|
|
376
|
+
for (let i = state.messages.length - 1; i >= 0; i--) {
|
|
377
|
+
const msg = state.messages[i];
|
|
378
|
+
if (msg && 'role' in msg && msg.role === 'assistant') {
|
|
379
|
+
response = extractResponseText(msg);
|
|
380
|
+
break;
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
return {
|
|
384
|
+
response,
|
|
385
|
+
toolCalls: state.completedToolCalls,
|
|
386
|
+
turnCount: state.currentTurn,
|
|
387
|
+
usage: state.usage,
|
|
388
|
+
};
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
/**
|
|
392
|
+
* Pull prior conversation messages out of an opaque `priorState` blob.
|
|
393
|
+
* Returns null if the shape doesn't match a serialized `AgentPauseState`.
|
|
394
|
+
*/
|
|
395
|
+
function extractPriorMessages(priorState) {
|
|
396
|
+
if (!priorState)
|
|
397
|
+
return null;
|
|
398
|
+
const candidate = priorState['messages'];
|
|
399
|
+
if (!Array.isArray(candidate))
|
|
400
|
+
return null;
|
|
401
|
+
return candidate;
|
|
402
|
+
}
|
|
403
|
+
//# sourceMappingURL=agent-step.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-step.js","sourceRoot":"","sources":["../../src/agents/agent-step.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BaseAgentRuntime — abstract class for LLM runtime implementations.
|
|
3
|
+
*
|
|
4
|
+
* Returns `AsyncIterable<AgentEvent>` (pi-mono type). Single `execute()`
|
|
5
|
+
* method — run and resume use the same entry point (resume context is
|
|
6
|
+
* optional in `AgentInput`).
|
|
7
|
+
*
|
|
8
|
+
* **What the runtime does:**
|
|
9
|
+
* - Sends messages to the LLM
|
|
10
|
+
* - Yields pi-mono AgentEvent stream
|
|
11
|
+
* - Calls tools via hooks
|
|
12
|
+
*
|
|
13
|
+
* **What the runtime does NOT do:**
|
|
14
|
+
* - Tool resolution (AgentStep does this)
|
|
15
|
+
* - HITL / pause decisions (interceptor chain does this)
|
|
16
|
+
* - MCP connections (host-side adapter does this)
|
|
17
|
+
* - Event persistence (AgentStep does this via ctx.emit)
|
|
18
|
+
*/
|
|
19
|
+
import type { z } from 'zod';
|
|
20
|
+
import type { AgentEvent } from '@earendil-works/pi-agent-core';
|
|
21
|
+
import type { AgentCapabilities, AgentInput } from './types.js';
|
|
22
|
+
import type { StepExecutionContext } from '../steps/base-step.js';
|
|
23
|
+
export declare abstract class BaseAgentRuntime<TConfig extends z.ZodTypeAny = z.ZodTypeAny> {
|
|
24
|
+
abstract readonly name: string;
|
|
25
|
+
abstract readonly capabilities: AgentCapabilities;
|
|
26
|
+
abstract readonly configSchema: TConfig;
|
|
27
|
+
/**
|
|
28
|
+
* Execute the agent. Returns an async iterable of pi-mono AgentEvent.
|
|
29
|
+
*
|
|
30
|
+
* - Fresh run: `input.resume` is undefined
|
|
31
|
+
* - Resuming after pause: `input.resume` contains conversation history + user's response
|
|
32
|
+
*
|
|
33
|
+
* The runtime does NOT handle tool execution, HITL, or MCP — AgentStep
|
|
34
|
+
* orchestrates all of that before calling this method.
|
|
35
|
+
*/
|
|
36
|
+
abstract execute(config: z.infer<TConfig>, input: AgentInput, ctx: StepExecutionContext): AsyncIterable<AgentEvent>;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=base-runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-runtime.d.ts","sourceRoot":"","sources":["../../src/agents/base-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAElE,8BAAsB,gBAAgB,CACpC,OAAO,SAAS,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU;IAE3C,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC;IAClD,QAAQ,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAExC;;;;;;;;OAQG;IACH,QAAQ,CAAC,OAAO,CACd,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EACxB,KAAK,EAAE,UAAU,EACjB,GAAG,EAAE,oBAAoB,GACxB,aAAa,CAAC,UAAU,CAAC;CAC7B"}
|