@agentick/core 0.0.1
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/LICENSE +21 -0
- package/README.md +875 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/.tsbuildinfo.build +1 -0
- package/dist/agent.d.ts +32 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +26 -0
- package/dist/agent.js.map +1 -0
- package/dist/agentick-instance.d.ts +285 -0
- package/dist/agentick-instance.d.ts.map +1 -0
- package/dist/agentick-instance.js +700 -0
- package/dist/agentick-instance.js.map +1 -0
- package/dist/aidk-instance.d.ts +294 -0
- package/dist/aidk-instance.d.ts.map +1 -0
- package/dist/aidk-instance.js +340 -0
- package/dist/aidk-instance.js.map +1 -0
- package/dist/app/session-store.d.ts +57 -0
- package/dist/app/session-store.d.ts.map +1 -0
- package/dist/app/session-store.js +87 -0
- package/dist/app/session-store.js.map +1 -0
- package/dist/app/session.d.ts +209 -0
- package/dist/app/session.d.ts.map +1 -0
- package/dist/app/session.js +2131 -0
- package/dist/app/session.js.map +1 -0
- package/dist/app/sqlite-session-store.d.ts +60 -0
- package/dist/app/sqlite-session-store.d.ts.map +1 -0
- package/dist/app/sqlite-session-store.js +234 -0
- package/dist/app/sqlite-session-store.js.map +1 -0
- package/dist/app/types.d.ts +1461 -0
- package/dist/app/types.d.ts.map +1 -0
- package/dist/app/types.js +14 -0
- package/dist/app/types.js.map +1 -0
- package/dist/app.d.ts +79 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +83 -0
- package/dist/app.js.map +1 -0
- package/dist/channels/adapters/index.d.ts +2 -0
- package/dist/channels/adapters/index.d.ts.map +1 -0
- package/dist/channels/adapters/index.js +2 -0
- package/dist/channels/adapters/index.js.map +1 -0
- package/dist/channels/adapters/redis.d.ts +77 -0
- package/dist/channels/adapters/redis.d.ts.map +1 -0
- package/dist/channels/adapters/redis.js +259 -0
- package/dist/channels/adapters/redis.js.map +1 -0
- package/dist/channels/index.d.ts +38 -0
- package/dist/channels/index.d.ts.map +1 -0
- package/dist/channels/index.js +38 -0
- package/dist/channels/index.js.map +1 -0
- package/dist/channels/service.d.ts +684 -0
- package/dist/channels/service.d.ts.map +1 -0
- package/dist/channels/service.js +870 -0
- package/dist/channels/service.js.map +1 -0
- package/dist/channels/transports/index.d.ts +4 -0
- package/dist/channels/transports/index.d.ts.map +1 -0
- package/dist/channels/transports/index.js +4 -0
- package/dist/channels/transports/index.js.map +1 -0
- package/dist/channels/transports/socketio.d.ts +98 -0
- package/dist/channels/transports/socketio.d.ts.map +1 -0
- package/dist/channels/transports/socketio.js +246 -0
- package/dist/channels/transports/socketio.js.map +1 -0
- package/dist/channels/transports/streamable-http.d.ts +107 -0
- package/dist/channels/transports/streamable-http.d.ts.map +1 -0
- package/dist/channels/transports/streamable-http.js +353 -0
- package/dist/channels/transports/streamable-http.js.map +1 -0
- package/dist/channels/transports/websocket.d.ts +117 -0
- package/dist/channels/transports/websocket.d.ts.map +1 -0
- package/dist/channels/transports/websocket.js +416 -0
- package/dist/channels/transports/websocket.js.map +1 -0
- package/dist/com/index.d.ts +29 -0
- package/dist/com/index.d.ts.map +1 -0
- package/dist/com/index.js +29 -0
- package/dist/com/index.js.map +1 -0
- package/dist/com/object-model.d.ts +634 -0
- package/dist/com/object-model.d.ts.map +1 -0
- package/dist/com/object-model.js +963 -0
- package/dist/com/object-model.js.map +1 -0
- package/dist/com/types.d.ts +192 -0
- package/dist/com/types.d.ts.map +1 -0
- package/dist/com/types.js +1 -0
- package/dist/com/types.js.map +1 -0
- package/dist/compiler/collector.d.ts +16 -0
- package/dist/compiler/collector.d.ts.map +1 -0
- package/dist/compiler/collector.js +388 -0
- package/dist/compiler/collector.js.map +1 -0
- package/dist/compiler/content-block-registry.d.ts +11 -0
- package/dist/compiler/content-block-registry.d.ts.map +1 -0
- package/dist/compiler/content-block-registry.js +312 -0
- package/dist/compiler/content-block-registry.js.map +1 -0
- package/dist/compiler/extractors.d.ts +68 -0
- package/dist/compiler/extractors.d.ts.map +1 -0
- package/dist/compiler/extractors.js +547 -0
- package/dist/compiler/extractors.js.map +1 -0
- package/dist/compiler/fiber-compiler.d.ts +203 -0
- package/dist/compiler/fiber-compiler.d.ts.map +1 -0
- package/dist/compiler/fiber-compiler.js +498 -0
- package/dist/compiler/fiber-compiler.js.map +1 -0
- package/dist/compiler/fiber.d.ts +61 -0
- package/dist/compiler/fiber.d.ts.map +1 -0
- package/dist/compiler/fiber.js +244 -0
- package/dist/compiler/fiber.js.map +1 -0
- package/dist/compiler/index.d.ts +18 -0
- package/dist/compiler/index.d.ts.map +1 -0
- package/dist/compiler/index.js +38 -0
- package/dist/compiler/index.js.map +1 -0
- package/dist/compiler/scheduler.d.ts +95 -0
- package/dist/compiler/scheduler.d.ts.map +1 -0
- package/dist/compiler/scheduler.js +138 -0
- package/dist/compiler/scheduler.js.map +1 -0
- package/dist/compiler/structure-renderer.d.ts +42 -0
- package/dist/compiler/structure-renderer.d.ts.map +1 -0
- package/dist/compiler/structure-renderer.js +189 -0
- package/dist/compiler/structure-renderer.js.map +1 -0
- package/dist/compiler/types.d.ts +96 -0
- package/dist/compiler/types.d.ts.map +1 -0
- package/dist/compiler/types.js +19 -0
- package/dist/compiler/types.js.map +1 -0
- package/dist/component/component-hooks.d.ts +68 -0
- package/dist/component/component-hooks.d.ts.map +1 -0
- package/dist/component/component-hooks.js +112 -0
- package/dist/component/component-hooks.js.map +1 -0
- package/dist/component/component.d.ts +314 -0
- package/dist/component/component.d.ts.map +1 -0
- package/dist/component/component.js +64 -0
- package/dist/component/component.js.map +1 -0
- package/dist/component/index.d.ts +47 -0
- package/dist/component/index.d.ts.map +1 -0
- package/dist/component/index.js +47 -0
- package/dist/component/index.js.map +1 -0
- package/dist/component/tentickle-component.d.ts +185 -0
- package/dist/component/tentickle-component.d.ts.map +1 -0
- package/dist/component/tentickle-component.js +182 -0
- package/dist/component/tentickle-component.js.map +1 -0
- package/dist/content/index.d.ts +12 -0
- package/dist/content/index.d.ts.map +1 -0
- package/dist/content/index.js +17 -0
- package/dist/content/index.js.map +1 -0
- package/dist/context/index.d.ts +51 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +69 -0
- package/dist/context/index.js.map +1 -0
- package/dist/core/channel-helpers.d.ts +31 -0
- package/dist/core/channel-helpers.d.ts.map +1 -0
- package/dist/core/channel-helpers.js +62 -0
- package/dist/core/channel-helpers.js.map +1 -0
- package/dist/core/channel.d.ts +164 -0
- package/dist/core/channel.d.ts.map +1 -0
- package/dist/core/channel.js +199 -0
- package/dist/core/channel.js.map +1 -0
- package/dist/core/context.d.ts +412 -0
- package/dist/core/context.d.ts.map +1 -0
- package/dist/core/context.js +290 -0
- package/dist/core/context.js.map +1 -0
- package/dist/core/event-buffer.d.ts +212 -0
- package/dist/core/event-buffer.d.ts.map +1 -0
- package/dist/core/event-buffer.js +346 -0
- package/dist/core/event-buffer.js.map +1 -0
- package/dist/core/execution-helpers.d.ts +179 -0
- package/dist/core/execution-helpers.d.ts.map +1 -0
- package/dist/core/execution-helpers.js +212 -0
- package/dist/core/execution-helpers.js.map +1 -0
- package/dist/core/execution-tracker.d.ts +53 -0
- package/dist/core/execution-tracker.d.ts.map +1 -0
- package/dist/core/execution-tracker.js +309 -0
- package/dist/core/execution-tracker.js.map +1 -0
- package/dist/core/index.d.ts +58 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +58 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/logger.d.ts +341 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +346 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/metrics-helpers.d.ts +40 -0
- package/dist/core/metrics-helpers.d.ts.map +1 -0
- package/dist/core/metrics-helpers.js +72 -0
- package/dist/core/metrics-helpers.js.map +1 -0
- package/dist/core/otel-provider.d.ts +54 -0
- package/dist/core/otel-provider.d.ts.map +1 -0
- package/dist/core/otel-provider.js +107 -0
- package/dist/core/otel-provider.js.map +1 -0
- package/dist/core/procedure-graph.d.ts +136 -0
- package/dist/core/procedure-graph.d.ts.map +1 -0
- package/dist/core/procedure-graph.js +272 -0
- package/dist/core/procedure-graph.js.map +1 -0
- package/dist/core/procedure.d.ts +755 -0
- package/dist/core/procedure.d.ts.map +1 -0
- package/dist/core/procedure.js +899 -0
- package/dist/core/procedure.js.map +1 -0
- package/dist/core/stream.d.ts +106 -0
- package/dist/core/stream.d.ts.map +1 -0
- package/dist/core/stream.js +186 -0
- package/dist/core/stream.js.map +1 -0
- package/dist/core/telemetry.d.ts +182 -0
- package/dist/core/telemetry.d.ts.map +1 -0
- package/dist/core/telemetry.js +124 -0
- package/dist/core/telemetry.js.map +1 -0
- package/dist/engine/client-tool-coordinator.d.ts +50 -0
- package/dist/engine/client-tool-coordinator.d.ts.map +1 -0
- package/dist/engine/client-tool-coordinator.js +121 -0
- package/dist/engine/client-tool-coordinator.js.map +1 -0
- package/dist/engine/engine-events.d.ts +117 -0
- package/dist/engine/engine-events.d.ts.map +1 -0
- package/dist/engine/engine-events.js +178 -0
- package/dist/engine/engine-events.js.map +1 -0
- package/dist/engine/engine-response.d.ts +48 -0
- package/dist/engine/engine-response.d.ts.map +1 -0
- package/dist/engine/engine-response.js +2 -0
- package/dist/engine/engine-response.js.map +1 -0
- package/dist/engine/execution-graph.d.ts +104 -0
- package/dist/engine/execution-graph.d.ts.map +1 -0
- package/dist/engine/execution-graph.js +257 -0
- package/dist/engine/execution-graph.js.map +1 -0
- package/dist/engine/execution-handle.d.ts +212 -0
- package/dist/engine/execution-handle.d.ts.map +1 -0
- package/dist/engine/execution-handle.js +602 -0
- package/dist/engine/execution-handle.js.map +1 -0
- package/dist/engine/execution-types.d.ts +248 -0
- package/dist/engine/execution-types.d.ts.map +1 -0
- package/dist/engine/execution-types.js +23 -0
- package/dist/engine/execution-types.js.map +1 -0
- package/dist/engine/index.d.ts +21 -0
- package/dist/engine/index.d.ts.map +1 -0
- package/dist/engine/index.js +23 -0
- package/dist/engine/index.js.map +1 -0
- package/dist/engine/tool-confirmation-coordinator.d.ts +74 -0
- package/dist/engine/tool-confirmation-coordinator.d.ts.map +1 -0
- package/dist/engine/tool-confirmation-coordinator.js +137 -0
- package/dist/engine/tool-confirmation-coordinator.js.map +1 -0
- package/dist/engine/tool-executor.d.ts +127 -0
- package/dist/engine/tool-executor.d.ts.map +1 -0
- package/dist/engine/tool-executor.js +363 -0
- package/dist/engine/tool-executor.js.map +1 -0
- package/dist/hibernation/index.d.ts +126 -0
- package/dist/hibernation/index.d.ts.map +1 -0
- package/dist/hibernation/index.js +127 -0
- package/dist/hibernation/index.js.map +1 -0
- package/dist/hooks/base-hook-registry.d.ts +41 -0
- package/dist/hooks/base-hook-registry.d.ts.map +1 -0
- package/dist/hooks/base-hook-registry.js +76 -0
- package/dist/hooks/base-hook-registry.js.map +1 -0
- package/dist/hooks/com-state.d.ts +40 -0
- package/dist/hooks/com-state.d.ts.map +1 -0
- package/dist/hooks/com-state.js +90 -0
- package/dist/hooks/com-state.js.map +1 -0
- package/dist/hooks/context-info.d.ts +139 -0
- package/dist/hooks/context-info.d.ts.map +1 -0
- package/dist/hooks/context-info.js +115 -0
- package/dist/hooks/context-info.js.map +1 -0
- package/dist/hooks/context-internal.d.ts +21 -0
- package/dist/hooks/context-internal.d.ts.map +1 -0
- package/dist/hooks/context-internal.js +20 -0
- package/dist/hooks/context-internal.js.map +1 -0
- package/dist/hooks/context.d.ts +64 -0
- package/dist/hooks/context.d.ts.map +1 -0
- package/dist/hooks/context.js +83 -0
- package/dist/hooks/context.js.map +1 -0
- package/dist/hooks/data.d.ts +33 -0
- package/dist/hooks/data.d.ts.map +1 -0
- package/dist/hooks/data.js +84 -0
- package/dist/hooks/data.js.map +1 -0
- package/dist/hooks/formatter-context.d.ts +34 -0
- package/dist/hooks/formatter-context.d.ts.map +1 -0
- package/dist/hooks/formatter-context.js +34 -0
- package/dist/hooks/formatter-context.js.map +1 -0
- package/dist/hooks/hook-registry.d.ts +45 -0
- package/dist/hooks/hook-registry.d.ts.map +1 -0
- package/dist/hooks/hook-registry.js +109 -0
- package/dist/hooks/hook-registry.js.map +1 -0
- package/dist/hooks/index.d.ts +20 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +47 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/knob.d.ts +87 -0
- package/dist/hooks/knob.d.ts.map +1 -0
- package/dist/hooks/knob.js +129 -0
- package/dist/hooks/knob.js.map +1 -0
- package/dist/hooks/knobs-component.d.ts +70 -0
- package/dist/hooks/knobs-component.d.ts.map +1 -0
- package/dist/hooks/knobs-component.js +300 -0
- package/dist/hooks/knobs-component.js.map +1 -0
- package/dist/hooks/lifecycle.d.ts +158 -0
- package/dist/hooks/lifecycle.d.ts.map +1 -0
- package/dist/hooks/lifecycle.js +217 -0
- package/dist/hooks/lifecycle.js.map +1 -0
- package/dist/hooks/message-context.d.ts +101 -0
- package/dist/hooks/message-context.d.ts.map +1 -0
- package/dist/hooks/message-context.js +145 -0
- package/dist/hooks/message-context.js.map +1 -0
- package/dist/hooks/policy-context.d.ts.map +1 -0
- package/dist/hooks/runtime-context.d.ts +122 -0
- package/dist/hooks/runtime-context.d.ts.map +1 -0
- package/dist/hooks/runtime-context.js +149 -0
- package/dist/hooks/runtime-context.js.map +1 -0
- package/dist/hooks/signal.d.ts +267 -0
- package/dist/hooks/signal.d.ts.map +1 -0
- package/dist/hooks/signal.js +825 -0
- package/dist/hooks/signal.js.map +1 -0
- package/dist/hooks/types.d.ts +179 -0
- package/dist/hooks/types.d.ts.map +1 -0
- package/dist/hooks/types.js +5 -0
- package/dist/hooks/types.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +50 -0
- package/dist/index.js.map +1 -0
- package/dist/jsx/components/agent.d.ts +64 -0
- package/dist/jsx/components/agent.d.ts.map +1 -0
- package/dist/jsx/components/agent.js +80 -0
- package/dist/jsx/components/agent.js.map +1 -0
- package/dist/jsx/components/complete.d.ts +65 -0
- package/dist/jsx/components/complete.d.ts.map +1 -0
- package/dist/jsx/components/complete.js +64 -0
- package/dist/jsx/components/complete.js.map +1 -0
- package/dist/jsx/components/content.d.ts +98 -0
- package/dist/jsx/components/content.d.ts.map +1 -0
- package/dist/jsx/components/content.js +51 -0
- package/dist/jsx/components/content.js.map +1 -0
- package/dist/jsx/components/harness.d.ts +118 -0
- package/dist/jsx/components/harness.d.ts.map +1 -0
- package/dist/jsx/components/harness.js +117 -0
- package/dist/jsx/components/harness.js.map +1 -0
- package/dist/jsx/components/index.d.ts +11 -0
- package/dist/jsx/components/index.d.ts.map +1 -0
- package/dist/jsx/components/index.js +11 -0
- package/dist/jsx/components/index.js.map +1 -0
- package/dist/jsx/components/markdown.d.ts +31 -0
- package/dist/jsx/components/markdown.d.ts.map +1 -0
- package/dist/jsx/components/markdown.js +17 -0
- package/dist/jsx/components/markdown.js.map +1 -0
- package/dist/jsx/components/messages.d.ts +283 -0
- package/dist/jsx/components/messages.d.ts.map +1 -0
- package/dist/jsx/components/messages.js +257 -0
- package/dist/jsx/components/messages.js.map +1 -0
- package/dist/jsx/components/model.d.ts +94 -0
- package/dist/jsx/components/model.d.ts.map +1 -0
- package/dist/jsx/components/model.js +96 -0
- package/dist/jsx/components/model.js.map +1 -0
- package/dist/jsx/components/primitives.d.ts +117 -0
- package/dist/jsx/components/primitives.d.ts.map +1 -0
- package/dist/jsx/components/primitives.js +83 -0
- package/dist/jsx/components/primitives.js.map +1 -0
- package/dist/jsx/components/renderer.d.ts +24 -0
- package/dist/jsx/components/renderer.d.ts.map +1 -0
- package/dist/jsx/components/renderer.js +11 -0
- package/dist/jsx/components/renderer.js.map +1 -0
- package/dist/jsx/components/semantic.d.ts +155 -0
- package/dist/jsx/components/semantic.d.ts.map +1 -0
- package/dist/jsx/components/semantic.js +39 -0
- package/dist/jsx/components/semantic.js.map +1 -0
- package/dist/jsx/components/timeline.d.ts +157 -0
- package/dist/jsx/components/timeline.d.ts.map +1 -0
- package/dist/jsx/components/timeline.js +357 -0
- package/dist/jsx/components/timeline.js.map +1 -0
- package/dist/jsx/components/token-budget.d.ts +70 -0
- package/dist/jsx/components/token-budget.d.ts.map +1 -0
- package/dist/jsx/components/token-budget.js +135 -0
- package/dist/jsx/components/token-budget.js.map +1 -0
- package/dist/jsx/components/xml.d.ts +27 -0
- package/dist/jsx/components/xml.d.ts.map +1 -0
- package/dist/jsx/components/xml.js +17 -0
- package/dist/jsx/components/xml.js.map +1 -0
- package/dist/jsx/index.d.ts +58 -0
- package/dist/jsx/index.d.ts.map +1 -0
- package/dist/jsx/index.js +59 -0
- package/dist/jsx/index.js.map +1 -0
- package/dist/jsx/jsx-runtime.d.ts +370 -0
- package/dist/jsx/jsx-runtime.d.ts.map +1 -0
- package/dist/jsx/jsx-runtime.js +79 -0
- package/dist/jsx/jsx-runtime.js.map +1 -0
- package/dist/jsx/jsx-types.d.ts +23 -0
- package/dist/jsx/jsx-types.d.ts.map +1 -0
- package/dist/jsx/jsx-types.js +1 -0
- package/dist/jsx/jsx-types.js.map +1 -0
- package/dist/mcp/client.d.ts +46 -0
- package/dist/mcp/client.d.ts.map +1 -0
- package/dist/mcp/client.js +138 -0
- package/dist/mcp/client.js.map +1 -0
- package/dist/mcp/component.d.ts +95 -0
- package/dist/mcp/component.d.ts.map +1 -0
- package/dist/mcp/component.js +185 -0
- package/dist/mcp/component.js.map +1 -0
- package/dist/mcp/create-mcp-tool.d.ts +191 -0
- package/dist/mcp/create-mcp-tool.d.ts.map +1 -0
- package/dist/mcp/create-mcp-tool.js +228 -0
- package/dist/mcp/create-mcp-tool.js.map +1 -0
- package/dist/mcp/index.d.ts +49 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +48 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/service.d.ts +39 -0
- package/dist/mcp/service.d.ts.map +1 -0
- package/dist/mcp/service.js +77 -0
- package/dist/mcp/service.js.map +1 -0
- package/dist/mcp/tool.d.ts +55 -0
- package/dist/mcp/tool.d.ts.map +1 -0
- package/dist/mcp/tool.js +119 -0
- package/dist/mcp/tool.js.map +1 -0
- package/dist/mcp/types.d.ts +72 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +6 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/middleware/defaults.d.ts +9 -0
- package/dist/middleware/defaults.d.ts.map +1 -0
- package/dist/middleware/defaults.js +47 -0
- package/dist/middleware/defaults.js.map +1 -0
- package/dist/model/adapter-helpers.d.ts +161 -0
- package/dist/model/adapter-helpers.d.ts.map +1 -0
- package/dist/model/adapter-helpers.js +351 -0
- package/dist/model/adapter-helpers.js.map +1 -0
- package/dist/model/adapter.d.ts +399 -0
- package/dist/model/adapter.d.ts.map +1 -0
- package/dist/model/adapter.js +497 -0
- package/dist/model/adapter.js.map +1 -0
- package/dist/model/index.d.ts +54 -0
- package/dist/model/index.d.ts.map +1 -0
- package/dist/model/index.js +55 -0
- package/dist/model/index.js.map +1 -0
- package/dist/model/model-hooks.d.ts +45 -0
- package/dist/model/model-hooks.d.ts.map +1 -0
- package/dist/model/model-hooks.js +24 -0
- package/dist/model/model-hooks.js.map +1 -0
- package/dist/model/model.d.ts +302 -0
- package/dist/model/model.d.ts.map +1 -0
- package/dist/model/model.js +20 -0
- package/dist/model/model.js.map +1 -0
- package/dist/model/simple-adapter.d.ts +176 -0
- package/dist/model/simple-adapter.d.ts.map +1 -0
- package/dist/model/simple-adapter.js +264 -0
- package/dist/model/simple-adapter.js.map +1 -0
- package/dist/model/stream-accumulator.d.ts +284 -0
- package/dist/model/stream-accumulator.d.ts.map +1 -0
- package/dist/model/stream-accumulator.js +532 -0
- package/dist/model/stream-accumulator.js.map +1 -0
- package/dist/model/utils/index.d.ts +2 -0
- package/dist/model/utils/index.d.ts.map +1 -0
- package/dist/model/utils/index.js +2 -0
- package/dist/model/utils/index.js.map +1 -0
- package/dist/model/utils/language-model.d.ts +26 -0
- package/dist/model/utils/language-model.d.ts.map +1 -0
- package/dist/model/utils/language-model.js +706 -0
- package/dist/model/utils/language-model.js.map +1 -0
- package/dist/procedure/index.d.ts +20 -0
- package/dist/procedure/index.d.ts.map +1 -0
- package/dist/procedure/index.js +19 -0
- package/dist/procedure/index.js.map +1 -0
- package/dist/reconciler/devtools-bridge.d.ts +40 -0
- package/dist/reconciler/devtools-bridge.d.ts.map +1 -0
- package/dist/reconciler/devtools-bridge.js +79 -0
- package/dist/reconciler/devtools-bridge.js.map +1 -0
- package/dist/reconciler/host-config.d.ts +39 -0
- package/dist/reconciler/host-config.d.ts.map +1 -0
- package/dist/reconciler/host-config.js +195 -0
- package/dist/reconciler/host-config.js.map +1 -0
- package/dist/reconciler/index.d.ts +7 -0
- package/dist/reconciler/index.d.ts.map +1 -0
- package/dist/reconciler/index.js +7 -0
- package/dist/reconciler/index.js.map +1 -0
- package/dist/reconciler/reconciler.d.ts +47 -0
- package/dist/reconciler/reconciler.d.ts.map +1 -0
- package/dist/reconciler/reconciler.js +89 -0
- package/dist/reconciler/reconciler.js.map +1 -0
- package/dist/reconciler/types.d.ts +86 -0
- package/dist/reconciler/types.d.ts.map +1 -0
- package/dist/reconciler/types.js +37 -0
- package/dist/reconciler/types.js.map +1 -0
- package/dist/renderers/base.d.ts +98 -0
- package/dist/renderers/base.d.ts.map +1 -0
- package/dist/renderers/base.js +82 -0
- package/dist/renderers/base.js.map +1 -0
- package/dist/renderers/index.d.ts +31 -0
- package/dist/renderers/index.d.ts.map +1 -0
- package/dist/renderers/index.js +31 -0
- package/dist/renderers/index.js.map +1 -0
- package/dist/renderers/markdown.d.ts +48 -0
- package/dist/renderers/markdown.d.ts.map +1 -0
- package/dist/renderers/markdown.js +432 -0
- package/dist/renderers/markdown.js.map +1 -0
- package/dist/renderers/types.d.ts +7 -0
- package/dist/renderers/types.d.ts.map +1 -0
- package/dist/renderers/types.js +7 -0
- package/dist/renderers/types.js.map +1 -0
- package/dist/renderers/xml.d.ts +49 -0
- package/dist/renderers/xml.d.ts.map +1 -0
- package/dist/renderers/xml.js +444 -0
- package/dist/renderers/xml.js.map +1 -0
- package/dist/state/boundary.d.ts +347 -0
- package/dist/state/boundary.d.ts.map +1 -0
- package/dist/state/boundary.js +341 -0
- package/dist/state/boundary.js.map +1 -0
- package/dist/state/context.d.ts +138 -0
- package/dist/state/context.d.ts.map +1 -0
- package/dist/state/context.js +139 -0
- package/dist/state/context.js.map +1 -0
- package/dist/state/hooks.d.ts +798 -0
- package/dist/state/hooks.d.ts.map +1 -0
- package/dist/state/hooks.js +1437 -0
- package/dist/state/hooks.js.map +1 -0
- package/dist/state/index.d.ts +72 -0
- package/dist/state/index.d.ts.map +1 -0
- package/dist/state/index.js +73 -0
- package/dist/state/index.js.map +1 -0
- package/dist/state/signal.d.ts +223 -0
- package/dist/state/signal.d.ts.map +1 -0
- package/dist/state/signal.js +699 -0
- package/dist/state/signal.js.map +1 -0
- package/dist/state/use-state.d.ts +210 -0
- package/dist/state/use-state.d.ts.map +1 -0
- package/dist/state/use-state.js +327 -0
- package/dist/state/use-state.js.map +1 -0
- package/dist/tentickle-instance.d.ts +285 -0
- package/dist/tentickle-instance.d.ts.map +1 -0
- package/dist/tentickle-instance.js +700 -0
- package/dist/tentickle-instance.js.map +1 -0
- package/dist/testing/act.d.ts +59 -0
- package/dist/testing/act.d.ts.map +1 -0
- package/dist/testing/act.js +92 -0
- package/dist/testing/act.js.map +1 -0
- package/dist/testing/async-helpers.d.ts +99 -0
- package/dist/testing/async-helpers.d.ts.map +1 -0
- package/dist/testing/async-helpers.js +193 -0
- package/dist/testing/async-helpers.js.map +1 -0
- package/dist/testing/compile-agent.d.ts +101 -0
- package/dist/testing/compile-agent.d.ts.map +1 -0
- package/dist/testing/compile-agent.js +136 -0
- package/dist/testing/compile-agent.js.map +1 -0
- package/dist/testing/index.d.ts +57 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +59 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/mock-app.d.ts +163 -0
- package/dist/testing/mock-app.d.ts.map +1 -0
- package/dist/testing/mock-app.js +393 -0
- package/dist/testing/mock-app.js.map +1 -0
- package/dist/testing/mocks.d.ts +142 -0
- package/dist/testing/mocks.d.ts.map +1 -0
- package/dist/testing/mocks.js +191 -0
- package/dist/testing/mocks.js.map +1 -0
- package/dist/testing/render-agent.d.ts +146 -0
- package/dist/testing/render-agent.d.ts.map +1 -0
- package/dist/testing/render-agent.js +200 -0
- package/dist/testing/render-agent.js.map +1 -0
- package/dist/testing/test-adapter.d.ts +157 -0
- package/dist/testing/test-adapter.d.ts.map +1 -0
- package/dist/testing/test-adapter.js +297 -0
- package/dist/testing/test-adapter.js.map +1 -0
- package/dist/testing/test-model.d.ts +132 -0
- package/dist/testing/test-model.d.ts.map +1 -0
- package/dist/testing/test-model.js +260 -0
- package/dist/testing/test-model.js.map +1 -0
- package/dist/tool/index.d.ts +61 -0
- package/dist/tool/index.d.ts.map +1 -0
- package/dist/tool/index.js +63 -0
- package/dist/tool/index.js.map +1 -0
- package/dist/tool/tool-hooks.d.ts +45 -0
- package/dist/tool/tool-hooks.d.ts.map +1 -0
- package/dist/tool/tool-hooks.js +35 -0
- package/dist/tool/tool-hooks.js.map +1 -0
- package/dist/tool/tool.d.ts +403 -0
- package/dist/tool/tool.d.ts.map +1 -0
- package/dist/tool/tool.js +176 -0
- package/dist/tool/tool.js.map +1 -0
- package/dist/types.d.ts +442 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +97 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/abort-utils.d.ts +5 -0
- package/dist/utils/abort-utils.d.ts.map +1 -0
- package/dist/utils/abort-utils.js +50 -0
- package/dist/utils/abort-utils.js.map +1 -0
- package/dist/utils/classify-error.d.ts +19 -0
- package/dist/utils/classify-error.d.ts.map +1 -0
- package/dist/utils/classify-error.js +77 -0
- package/dist/utils/classify-error.js.map +1 -0
- package/dist/utils/index.d.ts +21 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +21 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/normalization.d.ts +6 -0
- package/dist/utils/normalization.d.ts.map +1 -0
- package/dist/utils/normalization.js +103 -0
- package/dist/utils/normalization.js.map +1 -0
- package/dist/utils/registry.d.ts +15 -0
- package/dist/utils/registry.d.ts.map +1 -0
- package/dist/utils/registry.js +28 -0
- package/dist/utils/registry.js.map +1 -0
- package/dist/utils/schema.d.ts +7 -0
- package/dist/utils/schema.d.ts.map +1 -0
- package/dist/utils/schema.js +13 -0
- package/dist/utils/schema.js.map +1 -0
- package/dist/utils/token-estimate.d.ts +87 -0
- package/dist/utils/token-estimate.d.ts.map +1 -0
- package/dist/utils/token-estimate.js +199 -0
- package/dist/utils/token-estimate.js.map +1 -0
- package/dist/v2/reconciler/host-config.d.ts +31 -0
- package/dist/v2/reconciler/host-config.d.ts.map +1 -0
- package/dist/v2/reconciler/host-config.js +197 -0
- package/dist/v2/reconciler/host-config.js.map +1 -0
- package/dist/v2/reconciler/index.d.ts +7 -0
- package/dist/v2/reconciler/index.d.ts.map +1 -0
- package/dist/v2/reconciler/index.js +7 -0
- package/dist/v2/reconciler/index.js.map +1 -0
- package/dist/v2/reconciler/reconciler.d.ts +39 -0
- package/dist/v2/reconciler/reconciler.d.ts.map +1 -0
- package/dist/v2/reconciler/reconciler.js +54 -0
- package/dist/v2/reconciler/reconciler.js.map +1 -0
- package/dist/v2/reconciler/types.d.ts +64 -0
- package/dist/v2/reconciler/types.d.ts.map +1 -0
- package/dist/v2/reconciler/types.js +20 -0
- package/dist/v2/reconciler/types.js.map +1 -0
- package/dist/v2/renderers/index.d.ts +7 -0
- package/dist/v2/renderers/index.d.ts.map +1 -0
- package/dist/v2/renderers/index.js +7 -0
- package/dist/v2/renderers/index.js.map +1 -0
- package/dist/v2/renderers/markdown.d.ts +16 -0
- package/dist/v2/renderers/markdown.d.ts.map +1 -0
- package/dist/v2/renderers/markdown.js +65 -0
- package/dist/v2/renderers/markdown.js.map +1 -0
- package/dist/v2/renderers/types.d.ts +26 -0
- package/dist/v2/renderers/types.d.ts.map +1 -0
- package/dist/v2/renderers/types.js +6 -0
- package/dist/v2/renderers/types.js.map +1 -0
- package/dist/v2/renderers/xml.d.ts +17 -0
- package/dist/v2/renderers/xml.d.ts.map +1 -0
- package/dist/v2/renderers/xml.js +73 -0
- package/dist/v2/renderers/xml.js.map +1 -0
- package/package.json +49 -0
|
@@ -0,0 +1,755 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* New Procedure Implementation - Variable Arity, Decorators, Pipelines
|
|
3
|
+
*
|
|
4
|
+
* Design Principles:
|
|
5
|
+
* - Everything is a Procedure
|
|
6
|
+
* - Variable arity support (0, 1, N args)
|
|
7
|
+
* - Decorator = Function (same type)
|
|
8
|
+
* - Hooks are Procedures (@hook decorator)
|
|
9
|
+
* - Pipelines for middleware bundles
|
|
10
|
+
* - Direct calls (no registration)
|
|
11
|
+
* - Automatic tracking (execution graph, telemetry)
|
|
12
|
+
*/
|
|
13
|
+
import { z } from "zod";
|
|
14
|
+
import { type KernelContext } from "./context";
|
|
15
|
+
import { type ExecutionBoundaryConfig } from "./execution-tracker";
|
|
16
|
+
import type { ExecutionStatus } from "../engine/execution-types";
|
|
17
|
+
import { EventBuffer, type TypedEvent } from "./event-buffer";
|
|
18
|
+
/**
|
|
19
|
+
* Extract the result type from a handle-like object.
|
|
20
|
+
* If T has a `result` property that is a Promise, extract its resolved type.
|
|
21
|
+
*/
|
|
22
|
+
export type ResultOf<T> = T extends {
|
|
23
|
+
result: Promise<infer R>;
|
|
24
|
+
} ? R : T;
|
|
25
|
+
/**
|
|
26
|
+
* Enhanced Promise returned by all procedures.
|
|
27
|
+
*
|
|
28
|
+
* ProcedurePromise extends Promise<T> with a `.result` property that chains
|
|
29
|
+
* through to the inner result. This allows ergonomic access to final values
|
|
30
|
+
* without losing access to the handle.
|
|
31
|
+
*
|
|
32
|
+
* @typeParam T - The type the promise resolves to (usually a handle or value)
|
|
33
|
+
*
|
|
34
|
+
* @example Get the handle
|
|
35
|
+
* ```typescript
|
|
36
|
+
* const handle = await run(<Agent />, opts);
|
|
37
|
+
* handle.status; // 'running'
|
|
38
|
+
* for await (const event of handle) { }
|
|
39
|
+
* ```
|
|
40
|
+
*
|
|
41
|
+
* @example Get the result directly
|
|
42
|
+
* ```typescript
|
|
43
|
+
* const result = await run(<Agent />, opts).result;
|
|
44
|
+
* // Equivalent to: (await run(<Agent />, opts)).result
|
|
45
|
+
* ```
|
|
46
|
+
*
|
|
47
|
+
* @example Both work
|
|
48
|
+
* ```typescript
|
|
49
|
+
* const promise = run(<Agent />, opts);
|
|
50
|
+
* const handle = await promise; // Get handle
|
|
51
|
+
* const result = await promise.result; // Get final result
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
export interface ProcedurePromise<T> extends Promise<T> {
|
|
55
|
+
/**
|
|
56
|
+
* Promise that resolves to the final result.
|
|
57
|
+
* Chains through to T.result if T has a result property.
|
|
58
|
+
*/
|
|
59
|
+
readonly result: Promise<ResultOf<T>>;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Create a ProcedurePromise from a regular Promise.
|
|
63
|
+
*
|
|
64
|
+
* Adds a `.result` property that chains through to the inner handle's result.
|
|
65
|
+
* If the resolved value has a `.result` property, `.result` resolves to that.
|
|
66
|
+
* Otherwise, `.result` resolves to the value itself.
|
|
67
|
+
*
|
|
68
|
+
* @param promise - The base promise to enhance
|
|
69
|
+
* @returns Enhanced ProcedurePromise with .result chaining
|
|
70
|
+
*/
|
|
71
|
+
export declare function createProcedurePromise<T>(promise: Promise<T>): ProcedurePromise<T>;
|
|
72
|
+
/**
|
|
73
|
+
* Symbol used to brand Procedure objects for deterministic type checking.
|
|
74
|
+
* Using Symbol.for() ensures the same symbol across module instances.
|
|
75
|
+
*/
|
|
76
|
+
export declare const PROCEDURE_SYMBOL: unique symbol;
|
|
77
|
+
/**
|
|
78
|
+
* Check if a value is a Procedure using Symbol branding.
|
|
79
|
+
*
|
|
80
|
+
* This is more reliable than duck typing because it uses a unique Symbol
|
|
81
|
+
* that can only be present on objects created by the procedure system.
|
|
82
|
+
*
|
|
83
|
+
* @param value - The value to check
|
|
84
|
+
* @returns True if the value is a branded Procedure
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* ```typescript
|
|
88
|
+
* const proc = createProcedure(async (x: number) => x * 2);
|
|
89
|
+
* isProcedure(proc); // true
|
|
90
|
+
* isProcedure(() => {}); // false
|
|
91
|
+
* isProcedure({ use: () => {} }); // false (duck typing would say true)
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
94
|
+
export declare function isProcedure(value: any): value is Procedure<any>;
|
|
95
|
+
/**
|
|
96
|
+
* Middleware function that can intercept and transform procedure execution.
|
|
97
|
+
*
|
|
98
|
+
* Middleware can:
|
|
99
|
+
* - Transform input arguments before passing to the next middleware/handler
|
|
100
|
+
* - Modify the result after `next()` returns
|
|
101
|
+
* - Short-circuit execution by not calling `next()`
|
|
102
|
+
* - Handle or transform errors
|
|
103
|
+
*
|
|
104
|
+
* @typeParam TArgs - The argument types of the procedure
|
|
105
|
+
*
|
|
106
|
+
* @example
|
|
107
|
+
* ```typescript
|
|
108
|
+
* const loggingMiddleware: Middleware<[string]> = async (args, envelope, next) => {
|
|
109
|
+
* console.log(`${envelope.operationName} called with:`, args);
|
|
110
|
+
* const start = Date.now();
|
|
111
|
+
* try {
|
|
112
|
+
* const result = await next();
|
|
113
|
+
* console.log(`Completed in ${Date.now() - start}ms`);
|
|
114
|
+
* return result;
|
|
115
|
+
* } catch (error) {
|
|
116
|
+
* console.error(`Failed:`, error);
|
|
117
|
+
* throw error;
|
|
118
|
+
* }
|
|
119
|
+
* };
|
|
120
|
+
* ```
|
|
121
|
+
*
|
|
122
|
+
* @example Transform arguments
|
|
123
|
+
* ```typescript
|
|
124
|
+
* const upperMiddleware: Middleware<[string]> = async (args, envelope, next) => {
|
|
125
|
+
* return next([args[0].toUpperCase()]);
|
|
126
|
+
* };
|
|
127
|
+
* ```
|
|
128
|
+
*
|
|
129
|
+
* @see {@link ProcedureEnvelope} - The envelope containing execution metadata
|
|
130
|
+
* @see {@link createPipeline} - Bundle multiple middleware for reuse
|
|
131
|
+
*/
|
|
132
|
+
export type Middleware<TArgs extends any[] = any[]> = (args: TArgs, envelope: ProcedureEnvelope<TArgs>, next: (transformedArgs?: TArgs) => Promise<any>) => Promise<any>;
|
|
133
|
+
/**
|
|
134
|
+
* Metadata envelope passed to middleware containing execution context.
|
|
135
|
+
*
|
|
136
|
+
* @typeParam TArgs - The argument types of the procedure
|
|
137
|
+
*
|
|
138
|
+
* @example
|
|
139
|
+
* ```typescript
|
|
140
|
+
* const middleware: Middleware<[string]> = async (args, envelope, next) => {
|
|
141
|
+
* if (envelope.sourceType === 'hook') {
|
|
142
|
+
* console.log(`Hook ${envelope.operationName} from ${envelope.sourceId}`);
|
|
143
|
+
* }
|
|
144
|
+
* return next();
|
|
145
|
+
* };
|
|
146
|
+
* ```
|
|
147
|
+
*/
|
|
148
|
+
export interface ProcedureEnvelope<TArgs extends any[]> {
|
|
149
|
+
/** Whether this is a regular procedure or a hook */
|
|
150
|
+
sourceType: "procedure" | "hook";
|
|
151
|
+
/** Identifier of the source (e.g., class name for decorated methods) */
|
|
152
|
+
sourceId?: string;
|
|
153
|
+
/** Name of the operation being executed */
|
|
154
|
+
operationName: string;
|
|
155
|
+
/** The arguments passed to the procedure */
|
|
156
|
+
args: TArgs;
|
|
157
|
+
/** The current kernel context */
|
|
158
|
+
context: KernelContext;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Handle for monitoring and controlling a running procedure execution.
|
|
162
|
+
*
|
|
163
|
+
* ExecutionHandle is AsyncIterable for streaming events.
|
|
164
|
+
* Use `.result` to get the final value as a Promise.
|
|
165
|
+
*
|
|
166
|
+
* NOTE: ExecutionHandle is NOT PromiseLike. This is intentional - it allows
|
|
167
|
+
* procedures to return ProcedurePromise<ExecutionHandle> where `await proc()`
|
|
168
|
+
* gives you the handle (not the result). Use `await handle.result` for the
|
|
169
|
+
* final value, or `await proc().result` for a one-liner.
|
|
170
|
+
*
|
|
171
|
+
* @typeParam TResult - The return type of the procedure
|
|
172
|
+
* @typeParam TEvent - The event type for streaming (defaults to any)
|
|
173
|
+
*
|
|
174
|
+
* @example Get handle, then result
|
|
175
|
+
* ```typescript
|
|
176
|
+
* const handle = await myProc('input');
|
|
177
|
+
* handle.status; // 'running'
|
|
178
|
+
* const result = await handle.result;
|
|
179
|
+
* ```
|
|
180
|
+
*
|
|
181
|
+
* @example Get result directly
|
|
182
|
+
* ```typescript
|
|
183
|
+
* const result = await myProc('input').result;
|
|
184
|
+
* ```
|
|
185
|
+
*
|
|
186
|
+
* @example Stream events
|
|
187
|
+
* ```typescript
|
|
188
|
+
* const handle = await myProc('input');
|
|
189
|
+
* for await (const event of handle) {
|
|
190
|
+
* console.log('Event:', event);
|
|
191
|
+
* }
|
|
192
|
+
* ```
|
|
193
|
+
*
|
|
194
|
+
* @example Access status and control
|
|
195
|
+
* ```typescript
|
|
196
|
+
* const handle = await myProc('input');
|
|
197
|
+
* console.log('Status:', handle.status); // 'running'
|
|
198
|
+
* handle.abort('user cancelled');
|
|
199
|
+
* console.log('Status:', handle.status); // 'aborted'
|
|
200
|
+
* ```
|
|
201
|
+
*
|
|
202
|
+
* @see {@link ExecutionHandleImpl} - Default implementation
|
|
203
|
+
* @see {@link HandleFactory} - Custom handle factory function type
|
|
204
|
+
*/
|
|
205
|
+
export interface ExecutionHandle<TResult, TEvent extends TypedEvent = any> extends AsyncIterable<TEvent> {
|
|
206
|
+
/** Current execution status */
|
|
207
|
+
readonly status: "running" | "completed" | "error" | "aborted" | ExecutionStatus;
|
|
208
|
+
/** Trace ID for distributed tracing correlation */
|
|
209
|
+
readonly traceId: string;
|
|
210
|
+
/**
|
|
211
|
+
* Event buffer for streaming execution events.
|
|
212
|
+
* Supports dual consumption - multiple iterators can independently consume all events.
|
|
213
|
+
* Late subscribers receive replayed events from the start.
|
|
214
|
+
*
|
|
215
|
+
* API is compatible with EventEmitter: on, once, off, emit, addListener, removeListener.
|
|
216
|
+
* Use `on('eventType', handler)` to subscribe to specific event types.
|
|
217
|
+
* Use `on(handler)` or `on('*', handler)` for wildcard subscription.
|
|
218
|
+
*/
|
|
219
|
+
readonly events: EventBuffer<TEvent>;
|
|
220
|
+
/**
|
|
221
|
+
* @deprecated Use `events` instead. This is now an alias for backwards compatibility.
|
|
222
|
+
*/
|
|
223
|
+
readonly eventBuffer: EventBuffer<TEvent>;
|
|
224
|
+
/** Abort the execution */
|
|
225
|
+
abort(reason?: string): void;
|
|
226
|
+
/**
|
|
227
|
+
* Promise that resolves with the final result.
|
|
228
|
+
* Use `await handle.result` to get the value.
|
|
229
|
+
*/
|
|
230
|
+
readonly result: Promise<TResult>;
|
|
231
|
+
[Symbol.asyncIterator](): AsyncIterator<TEvent>;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Default implementation of ExecutionHandle.
|
|
235
|
+
*
|
|
236
|
+
* Creates a handle that wraps a result promise and event stream.
|
|
237
|
+
* Uses EventBuffer for dual consumption - multiple iterators can independently
|
|
238
|
+
* consume all events, and late subscribers receive replayed events.
|
|
239
|
+
*
|
|
240
|
+
* @typeParam TResult - The return type of the procedure
|
|
241
|
+
* @typeParam TEvent - The event type for streaming
|
|
242
|
+
*/
|
|
243
|
+
export declare class ExecutionHandleImpl<TResult, TEvent extends TypedEvent = any> implements ExecutionHandle<TResult, TEvent> {
|
|
244
|
+
readonly result: Promise<TResult>;
|
|
245
|
+
readonly traceId: string;
|
|
246
|
+
private _status;
|
|
247
|
+
private _abortController;
|
|
248
|
+
readonly events: EventBuffer<TEvent>;
|
|
249
|
+
constructor(result: Promise<TResult>, events: EventBuffer<TEvent>, traceId: string, abortController?: AbortController);
|
|
250
|
+
/**
|
|
251
|
+
* @deprecated Use `events` instead. This getter exists for backwards compatibility.
|
|
252
|
+
*/
|
|
253
|
+
get eventBuffer(): EventBuffer<TEvent>;
|
|
254
|
+
get status(): "running" | "completed" | "error" | "aborted";
|
|
255
|
+
abort(reason?: string): void;
|
|
256
|
+
/**
|
|
257
|
+
* Push an event to the buffer.
|
|
258
|
+
* This is the primary way to emit events from procedure handlers.
|
|
259
|
+
*/
|
|
260
|
+
pushEvent(event: TEvent): void;
|
|
261
|
+
[Symbol.asyncIterator](): AsyncIterator<TEvent>;
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Factory function for creating custom execution handles.
|
|
265
|
+
*
|
|
266
|
+
* Use this to provide custom handle implementations with additional
|
|
267
|
+
* functionality like cancellation, status tracking, or specialized events.
|
|
268
|
+
*
|
|
269
|
+
* @typeParam THandle - The custom handle type (must extend ExecutionHandle)
|
|
270
|
+
* @typeParam TContext - The context type (must extend KernelContext)
|
|
271
|
+
*
|
|
272
|
+
* @example
|
|
273
|
+
* ```typescript
|
|
274
|
+
* const customHandleFactory: HandleFactory = (events, traceId, result, context, abortController) => {
|
|
275
|
+
* const handle = new ExecutionHandleImpl(result, events, traceId, abortController);
|
|
276
|
+
* // Add custom properties/methods
|
|
277
|
+
* return Object.assign(handle, {
|
|
278
|
+
* customMethod() { ... }
|
|
279
|
+
* });
|
|
280
|
+
* };
|
|
281
|
+
*
|
|
282
|
+
* const proc = createProcedure(
|
|
283
|
+
* { handleFactory: customHandleFactory },
|
|
284
|
+
* async (input) => input
|
|
285
|
+
* );
|
|
286
|
+
* ```
|
|
287
|
+
*
|
|
288
|
+
* @see {@link ExecutionHandle} - The base handle interface
|
|
289
|
+
* @see {@link ExecutionHandleImpl} - Default implementation
|
|
290
|
+
*/
|
|
291
|
+
export type HandleFactory<THandle extends ExecutionHandle<any, any> = ExecutionHandle<any, any>, TContext extends KernelContext = KernelContext> = (events: EventBuffer<any>, traceId: string, result: Promise<any>, context: TContext, abortController?: AbortController) => THandle;
|
|
292
|
+
/**
|
|
293
|
+
* Configuration options for creating a procedure.
|
|
294
|
+
*
|
|
295
|
+
* @example
|
|
296
|
+
* ```typescript
|
|
297
|
+
* const proc = createProcedure({
|
|
298
|
+
* name: 'myProcedure',
|
|
299
|
+
* schema: z.object({ input: z.string() }),
|
|
300
|
+
* middleware: [loggingMiddleware],
|
|
301
|
+
* timeout: 5000,
|
|
302
|
+
* }, async ({ input }) => input.toUpperCase());
|
|
303
|
+
* ```
|
|
304
|
+
*
|
|
305
|
+
* @see {@link createProcedure} - Create a procedure with these options
|
|
306
|
+
*/
|
|
307
|
+
export interface ProcedureOptions {
|
|
308
|
+
/** Name of the procedure (used in telemetry and logging) */
|
|
309
|
+
name?: string;
|
|
310
|
+
/** Middleware pipeline to apply to this procedure */
|
|
311
|
+
middleware?: (Middleware<any[]> | MiddlewarePipeline)[];
|
|
312
|
+
/**
|
|
313
|
+
* Factory for creating execution handles.
|
|
314
|
+
*
|
|
315
|
+
* - `undefined` (default): Creates ExecutionHandleImpl, returns ExecutionHandle
|
|
316
|
+
* - `HandleFactory`: Creates custom handle, returns that handle type
|
|
317
|
+
* - `false`: Pass-through mode - no handle created, returns handler result directly
|
|
318
|
+
*
|
|
319
|
+
* Use `false` for procedures that delegate to other procedures returning handles,
|
|
320
|
+
* avoiding double-wrapping.
|
|
321
|
+
*
|
|
322
|
+
* @example Pass-through procedure
|
|
323
|
+
* ```typescript
|
|
324
|
+
* const run = createProcedure(
|
|
325
|
+
* { name: 'tentickle:run', handleFactory: false },
|
|
326
|
+
* (element, input) => app.run(input) // Returns SessionExecutionHandle directly
|
|
327
|
+
* );
|
|
328
|
+
* ```
|
|
329
|
+
*/
|
|
330
|
+
handleFactory?: HandleFactory | true | false;
|
|
331
|
+
/** Zod schema for input validation */
|
|
332
|
+
schema?: z.ZodType<any>;
|
|
333
|
+
/** Parent procedure name (for hooks) */
|
|
334
|
+
parentProcedure?: string;
|
|
335
|
+
/** @internal Whether this is a procedure or hook */
|
|
336
|
+
sourceType?: "procedure" | "hook";
|
|
337
|
+
/** @internal Source identifier (e.g., class name) */
|
|
338
|
+
sourceId?: string;
|
|
339
|
+
/** Metadata for telemetry span attributes (e.g., { type: 'tool', id: 'myTool' }) */
|
|
340
|
+
metadata?: Record<string, any>;
|
|
341
|
+
/** Timeout in milliseconds. If exceeded, throws AbortError.timeout() */
|
|
342
|
+
timeout?: number;
|
|
343
|
+
/**
|
|
344
|
+
* Skip ExecutionTracker procedure tracking for this procedure.
|
|
345
|
+
* Used for transparent wrappers like withContext() that delegate to another procedure.
|
|
346
|
+
* @internal
|
|
347
|
+
*/
|
|
348
|
+
skipTracking?: boolean;
|
|
349
|
+
/**
|
|
350
|
+
* Declarative execution boundary configuration.
|
|
351
|
+
*
|
|
352
|
+
* - `'always'`: Always create a new root execution (engine:execute, engine:stream)
|
|
353
|
+
* - `'child'`: Always create a new child execution (component_tool, fork, spawn)
|
|
354
|
+
* - `'auto'`: Create only if not already in an execution (model:generate, model:stream)
|
|
355
|
+
* - `false`: Never create an execution boundary (compile:tick, internal procedures)
|
|
356
|
+
*
|
|
357
|
+
* @default 'auto'
|
|
358
|
+
*/
|
|
359
|
+
executionBoundary?: ExecutionBoundaryConfig;
|
|
360
|
+
/**
|
|
361
|
+
* Explicit execution type (e.g., 'engine', 'model', 'component_tool', 'fork', 'spawn').
|
|
362
|
+
* If not provided, derived from procedure name.
|
|
363
|
+
* Only used when this procedure becomes an execution boundary.
|
|
364
|
+
*/
|
|
365
|
+
executionType?: string;
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* A callable function wrapper with middleware, validation, and execution control.
|
|
369
|
+
*
|
|
370
|
+
* Procedures are the core execution primitive in Tentickle. They wrap any async function
|
|
371
|
+
* and provide:
|
|
372
|
+
* - **Middleware pipeline** - Transform args, intercept results, handle errors
|
|
373
|
+
* - **Schema validation** - Zod-based input validation
|
|
374
|
+
* - **Execution handles** - Every call returns ExecutionHandle for control
|
|
375
|
+
* - **Automatic tracking** - Every call is tracked in the procedure graph
|
|
376
|
+
* - **Composition** - Chain procedures with `.pipe()`
|
|
377
|
+
*
|
|
378
|
+
* Procedures return ExecutionHandle which is both PromiseLike AND AsyncIterable:
|
|
379
|
+
* - `await proc(args)` → resolves to the result
|
|
380
|
+
* - `for await (const event of proc(args))` → streams events
|
|
381
|
+
*
|
|
382
|
+
* @typeParam THandler - The function type being wrapped
|
|
383
|
+
*
|
|
384
|
+
* @example Direct call - await for result
|
|
385
|
+
* ```typescript
|
|
386
|
+
* const greet = createProcedure(async (name: string) => `Hello, ${name}!`);
|
|
387
|
+
* const result = await greet('World'); // 'Hello, World!'
|
|
388
|
+
* ```
|
|
389
|
+
*
|
|
390
|
+
* @example Stream events
|
|
391
|
+
* ```typescript
|
|
392
|
+
* const handle = proc(input);
|
|
393
|
+
* for await (const event of handle) {
|
|
394
|
+
* console.log('Event:', event);
|
|
395
|
+
* }
|
|
396
|
+
* ```
|
|
397
|
+
*
|
|
398
|
+
* @example Access handle status
|
|
399
|
+
* ```typescript
|
|
400
|
+
* const handle = proc(input);
|
|
401
|
+
* console.log('Status:', handle.status); // 'running'
|
|
402
|
+
* handle.abort('cancelled');
|
|
403
|
+
* ```
|
|
404
|
+
*
|
|
405
|
+
* @example With middleware
|
|
406
|
+
* ```typescript
|
|
407
|
+
* const proc = createProcedure(async (x: number) => x * 2)
|
|
408
|
+
* .use(loggingMiddleware)
|
|
409
|
+
* .use(timingMiddleware);
|
|
410
|
+
* ```
|
|
411
|
+
*
|
|
412
|
+
* @see {@link createProcedure} - Create a new procedure
|
|
413
|
+
* @see {@link Middleware} - Middleware function type
|
|
414
|
+
* @see {@link ExecutionHandle} - Handle for execution control
|
|
415
|
+
*/
|
|
416
|
+
export interface Procedure<THandler extends (...args: any[]) => any, TPassThrough extends boolean = false> {
|
|
417
|
+
/**
|
|
418
|
+
* Call the procedure directly.
|
|
419
|
+
* Returns ProcedurePromise<ExecutionHandle<T>>.
|
|
420
|
+
*
|
|
421
|
+
* Usage:
|
|
422
|
+
* - `await proc()` → ExecutionHandle (with status, streaming, abort)
|
|
423
|
+
* - `await proc().result` → T (the final value)
|
|
424
|
+
*/
|
|
425
|
+
(...args: ExtractArgs<THandler>): TPassThrough extends true ? Promise<ExtractReturn<THandler>> : ProcedurePromise<ExecutionHandle<ExtractReturn<THandler>>>;
|
|
426
|
+
/**
|
|
427
|
+
* Execute the procedure with explicit arguments.
|
|
428
|
+
* Equivalent to direct call.
|
|
429
|
+
*/
|
|
430
|
+
exec(...args: ExtractArgs<THandler>): TPassThrough extends true ? Promise<ExtractReturn<THandler>> : ProcedurePromise<ExecutionHandle<ExtractReturn<THandler>>>;
|
|
431
|
+
/**
|
|
432
|
+
* Add middleware to the procedure. Returns a new Procedure (immutable).
|
|
433
|
+
* @param middleware - Middleware functions or pipelines to add
|
|
434
|
+
*/
|
|
435
|
+
use(...middleware: (Middleware<ExtractArgs<THandler>> | MiddlewarePipeline)[]): Procedure<THandler, TPassThrough>;
|
|
436
|
+
/**
|
|
437
|
+
* Create a procedure variant with merged context. Returns a new Procedure.
|
|
438
|
+
* @param ctx - Partial context to merge with the current context
|
|
439
|
+
*/
|
|
440
|
+
withContext(ctx: Partial<KernelContext>): Procedure<THandler, TPassThrough>;
|
|
441
|
+
/**
|
|
442
|
+
* Add a single middleware. Returns a new Procedure.
|
|
443
|
+
* Convenience method equivalent to `.use(mw)`.
|
|
444
|
+
*/
|
|
445
|
+
withMiddleware(mw: Middleware<ExtractArgs<THandler>> | MiddlewarePipeline): Procedure<THandler, TPassThrough>;
|
|
446
|
+
/**
|
|
447
|
+
* Create a procedure variant with a timeout. Returns a new Procedure.
|
|
448
|
+
* Throws `AbortError.timeout()` if the timeout is exceeded.
|
|
449
|
+
* @param ms - Timeout in milliseconds
|
|
450
|
+
*/
|
|
451
|
+
withTimeout(ms: number): Procedure<THandler, TPassThrough>;
|
|
452
|
+
/**
|
|
453
|
+
* Create a procedure variant with merged metadata. Returns a new Procedure.
|
|
454
|
+
* Metadata is passed to ExecutionTracker and included in procedure events.
|
|
455
|
+
* Useful for passing model IDs, tool names, or other execution-specific info.
|
|
456
|
+
*
|
|
457
|
+
* @param metadata - Metadata to merge with existing procedure metadata
|
|
458
|
+
*
|
|
459
|
+
* @example
|
|
460
|
+
* ```typescript
|
|
461
|
+
* // Model adapter passes model info
|
|
462
|
+
* const result = await model.generate
|
|
463
|
+
* .withMetadata({ modelId: 'gpt-4o', provider: 'openai' })
|
|
464
|
+
* .exec(messages);
|
|
465
|
+
*
|
|
466
|
+
* // Tool passes tool info
|
|
467
|
+
* const result = await tool.execute
|
|
468
|
+
* .withMetadata({ toolName: 'search', toolId: 'search-v2' })
|
|
469
|
+
* .exec(input);
|
|
470
|
+
* ```
|
|
471
|
+
*/
|
|
472
|
+
withMetadata(metadata: Record<string, unknown>): Procedure<THandler, TPassThrough>;
|
|
473
|
+
/**
|
|
474
|
+
* Pipe the output of this procedure to another procedure.
|
|
475
|
+
* Creates a new procedure that runs this procedure, then passes its result to the next.
|
|
476
|
+
*
|
|
477
|
+
* @example
|
|
478
|
+
* ```typescript
|
|
479
|
+
* const parse = createProcedure(async (input: string) => JSON.parse(input));
|
|
480
|
+
* const validate = createProcedure(async (data: object) => schema.parse(data));
|
|
481
|
+
* const transform = createProcedure(async (valid: Valid) => transform(valid));
|
|
482
|
+
*
|
|
483
|
+
* const pipeline = parse.pipe(validate).pipe(transform);
|
|
484
|
+
* const result = await pipeline('{"name": "test"}');
|
|
485
|
+
* ```
|
|
486
|
+
*/
|
|
487
|
+
pipe<TNext extends (arg: ExtractReturn<THandler>) => any>(next: Procedure<TNext>): Procedure<(...args: ExtractArgs<THandler>) => Promise<ExtractReturn<TNext>>, TPassThrough>;
|
|
488
|
+
}
|
|
489
|
+
/**
|
|
490
|
+
* Helper type to extract argument types from a function signature.
|
|
491
|
+
* Handles functions with `this` parameters and generator functions.
|
|
492
|
+
*
|
|
493
|
+
* @example
|
|
494
|
+
* ```typescript
|
|
495
|
+
* type Args1 = ExtractArgs<(input: string) => void>; // [string]
|
|
496
|
+
* type Args2 = ExtractArgs<(this: Test, input: string) => void>; // [string]
|
|
497
|
+
* type Args3 = ExtractArgs<() => Generator<string>>; // []
|
|
498
|
+
* ```
|
|
499
|
+
*/
|
|
500
|
+
export type ExtractArgs<T> = T extends {
|
|
501
|
+
(this: infer _This, ...args: infer Args): any;
|
|
502
|
+
} ? Args : T extends {
|
|
503
|
+
(...args: infer Args): any;
|
|
504
|
+
} ? Args : T extends {
|
|
505
|
+
(this: infer _This, ...args: infer Args): Generator<infer _Y, infer _R, infer _N>;
|
|
506
|
+
} ? Args : T extends {
|
|
507
|
+
(...args: infer Args): Generator<infer _Y, infer _R, infer _N>;
|
|
508
|
+
} ? Args : T extends {
|
|
509
|
+
(this: infer _This, ...args: infer Args): AsyncGenerator<infer _Y, infer _R, infer _N>;
|
|
510
|
+
} ? Args : T extends {
|
|
511
|
+
(...args: infer Args): AsyncGenerator<infer _Y, infer _R, infer _N>;
|
|
512
|
+
} ? Args : never;
|
|
513
|
+
/**
|
|
514
|
+
* Helper type to extract return type from a function signature.
|
|
515
|
+
* Handles both Promise and direct returns, and unwraps Promise.
|
|
516
|
+
* Preserves AsyncIterable as-is.
|
|
517
|
+
*/
|
|
518
|
+
export type ExtractReturn<T> = T extends (...args: any[]) => infer Return ? Return extends Promise<infer U> ? U : Return extends AsyncIterable<any> ? Return : Return : never;
|
|
519
|
+
/**
|
|
520
|
+
* Helper type to transform a method signature to Procedure type.
|
|
521
|
+
* Extracts args and return type, then creates Procedure<TArgs, TOutput>.
|
|
522
|
+
*
|
|
523
|
+
* Use this type to get proper IntelliSense for decorated methods:
|
|
524
|
+
*
|
|
525
|
+
* @example
|
|
526
|
+
* ```typescript
|
|
527
|
+
* class Model {
|
|
528
|
+
* @procedure()
|
|
529
|
+
* async execute(input: string): Promise<string> { ... }
|
|
530
|
+
* }
|
|
531
|
+
*
|
|
532
|
+
* // For IntelliSense, you can use:
|
|
533
|
+
* type ModelWithProcedures = {
|
|
534
|
+
* execute: AsProcedure<Model['execute']>;
|
|
535
|
+
* };
|
|
536
|
+
*
|
|
537
|
+
* // Or cast at usage:
|
|
538
|
+
* const model = new Model();
|
|
539
|
+
* const execute = model.execute as AsProcedure<typeof model.execute>;
|
|
540
|
+
* ```
|
|
541
|
+
*/
|
|
542
|
+
export type AsProcedure<T extends (...args: any[]) => any> = Procedure<T>;
|
|
543
|
+
/**
|
|
544
|
+
* Helper type to transform all methods in a class to Procedures.
|
|
545
|
+
*
|
|
546
|
+
* **Primary Use Case**: Use with decorators when you need IntelliSense.
|
|
547
|
+
*
|
|
548
|
+
* ```typescript
|
|
549
|
+
* class Model {
|
|
550
|
+
* @procedure()
|
|
551
|
+
* async execute(input: string): Promise<string> { ... }
|
|
552
|
+
* }
|
|
553
|
+
*
|
|
554
|
+
* // Most of the time - runtime works perfectly, no types needed
|
|
555
|
+
* const model = new Model();
|
|
556
|
+
* await model.execute('test'); // ✅ Works
|
|
557
|
+
*
|
|
558
|
+
* // When you need IntelliSense - cast once
|
|
559
|
+
* const typedModel = model as WithProcedures<Model>;
|
|
560
|
+
* typedModel.execute.use(...); // ✅ Full IntelliSense
|
|
561
|
+
* typedModel.execute.withHandle(); // ✅ Full IntelliSense
|
|
562
|
+
* ```
|
|
563
|
+
*
|
|
564
|
+
* **Alternative**: Use property initializers for full types everywhere:
|
|
565
|
+
* ```typescript
|
|
566
|
+
* class Model {
|
|
567
|
+
* execute = createProcedure(async (input: string) => input);
|
|
568
|
+
* // ✅ Full types always, but more verbose
|
|
569
|
+
* }
|
|
570
|
+
* ```
|
|
571
|
+
*/
|
|
572
|
+
export type WithProcedures<T> = {
|
|
573
|
+
[K in keyof T]: T[K] extends (...args: any[]) => any ? AsProcedure<T[K]> : T[K];
|
|
574
|
+
};
|
|
575
|
+
/**
|
|
576
|
+
* A reusable bundle of middleware that can be applied to procedures.
|
|
577
|
+
*
|
|
578
|
+
* Pipelines allow you to define common middleware combinations once
|
|
579
|
+
* and reuse them across multiple procedures.
|
|
580
|
+
*
|
|
581
|
+
* @example
|
|
582
|
+
* ```typescript
|
|
583
|
+
* const commonPipeline = createPipeline()
|
|
584
|
+
* .use(loggingMiddleware)
|
|
585
|
+
* .use(timingMiddleware)
|
|
586
|
+
* .use(errorHandlingMiddleware);
|
|
587
|
+
*
|
|
588
|
+
* const proc1 = createProcedure(handler1).use(commonPipeline);
|
|
589
|
+
* const proc2 = createProcedure(handler2).use(commonPipeline);
|
|
590
|
+
* ```
|
|
591
|
+
*
|
|
592
|
+
* @see {@link createPipeline} - Create a new middleware pipeline
|
|
593
|
+
* @see {@link Middleware} - Individual middleware function type
|
|
594
|
+
*/
|
|
595
|
+
export interface MiddlewarePipeline {
|
|
596
|
+
/** Add middleware to this pipeline. Returns the pipeline for chaining. */
|
|
597
|
+
use(...middleware: Middleware<any[]>[]): MiddlewarePipeline;
|
|
598
|
+
/** Get all middleware in this pipeline. */
|
|
599
|
+
getMiddleware(): Middleware<any[]>[];
|
|
600
|
+
}
|
|
601
|
+
/**
|
|
602
|
+
* Create a reusable middleware pipeline.
|
|
603
|
+
*
|
|
604
|
+
* Pipelines bundle multiple middleware together for reuse across procedures.
|
|
605
|
+
* They can be passed to `procedure.use()` just like individual middleware.
|
|
606
|
+
*
|
|
607
|
+
* @param middleware - Initial middleware to include in the pipeline
|
|
608
|
+
* @returns A new MiddlewarePipeline
|
|
609
|
+
*
|
|
610
|
+
* @example
|
|
611
|
+
* ```typescript
|
|
612
|
+
* // Create a pipeline with initial middleware
|
|
613
|
+
* const authPipeline = createPipeline([authMiddleware, rateLimitMiddleware]);
|
|
614
|
+
*
|
|
615
|
+
* // Or build it up with .use()
|
|
616
|
+
* const logPipeline = createPipeline()
|
|
617
|
+
* .use(requestLogging)
|
|
618
|
+
* .use(responseLogging);
|
|
619
|
+
*
|
|
620
|
+
* // Apply to procedures
|
|
621
|
+
* const proc = createProcedure(handler)
|
|
622
|
+
* .use(authPipeline)
|
|
623
|
+
* .use(logPipeline);
|
|
624
|
+
* ```
|
|
625
|
+
*
|
|
626
|
+
* @see {@link MiddlewarePipeline} - The pipeline interface
|
|
627
|
+
*/
|
|
628
|
+
export declare function createPipeline(middleware?: Middleware<any[]>[]): MiddlewarePipeline;
|
|
629
|
+
export declare function isAsyncIterable(obj: any): obj is AsyncIterable<any>;
|
|
630
|
+
/**
|
|
631
|
+
* Helper to create a generator procedure that captures 'this' context.
|
|
632
|
+
*/
|
|
633
|
+
type Handler<TArgs extends any[]> = ((...args: TArgs) => any) | ((this: any, ...args: TArgs) => any);
|
|
634
|
+
export declare function generatorProcedure<TThis, TArgs extends any[], THandler extends Handler<TArgs>>(optionsOrFn?: ProcedureOptions | THandler, fn?: THandler): Procedure<THandler>;
|
|
635
|
+
/**
|
|
636
|
+
* Create a Procedure from a function.
|
|
637
|
+
*
|
|
638
|
+
* By default, calling the procedure returns an ExecutionHandle.
|
|
639
|
+
* Use `handleFactory: false` for pass-through mode where the handler's
|
|
640
|
+
* return value is returned directly (useful for delegating to other procedures).
|
|
641
|
+
*
|
|
642
|
+
* @example Standard procedure (returns ExecutionHandle)
|
|
643
|
+
* ```typescript
|
|
644
|
+
* const greet = createProcedure(async (name: string) => `Hello, ${name}!`);
|
|
645
|
+
* const handle = greet('World'); // ExecutionHandle
|
|
646
|
+
* const result = await handle; // "Hello, World!"
|
|
647
|
+
* ```
|
|
648
|
+
*
|
|
649
|
+
* @example Pass-through procedure (returns handler result directly)
|
|
650
|
+
* ```typescript
|
|
651
|
+
* const run = createProcedure(
|
|
652
|
+
* { name: 'tentickle:run', handleFactory: false },
|
|
653
|
+
* (element, input) => app.run(input) // Returns SessionExecutionHandle
|
|
654
|
+
* );
|
|
655
|
+
* const handle = run(<jsx />, opts); // SessionExecutionHandle directly
|
|
656
|
+
* ```
|
|
657
|
+
*/
|
|
658
|
+
export declare function createProcedure<THandler extends (...args: any[]) => any>(handler: THandler): Procedure<THandler>;
|
|
659
|
+
export declare function createProcedure<THandler extends (...args: any[]) => any>(options: ProcedureOptions & {
|
|
660
|
+
handleFactory: false;
|
|
661
|
+
}, handler: THandler): Procedure<THandler, true>;
|
|
662
|
+
export declare function createProcedure<THandler extends (...args: any[]) => any>(options: ProcedureOptions, handler: THandler): Procedure<THandler>;
|
|
663
|
+
/**
|
|
664
|
+
* Pipe multiple procedures together, passing the output of each to the next.
|
|
665
|
+
*
|
|
666
|
+
* @example
|
|
667
|
+
* ```typescript
|
|
668
|
+
* const parse = createProcedure(async (json: string) => JSON.parse(json));
|
|
669
|
+
* const validate = createProcedure(async (data: unknown) => schema.parse(data));
|
|
670
|
+
* const transform = createProcedure(async (valid: Valid) => transform(valid));
|
|
671
|
+
*
|
|
672
|
+
* // Create a pipeline that parses, validates, then transforms
|
|
673
|
+
* const pipeline = pipe(parse, validate, transform);
|
|
674
|
+
* const result = await pipeline('{"name": "test"}');
|
|
675
|
+
* ```
|
|
676
|
+
*/
|
|
677
|
+
export declare function pipe<T1 extends (...args: any[]) => any>(p1: Procedure<T1>): Procedure<T1>;
|
|
678
|
+
export declare function pipe<T1 extends (...args: any[]) => any, T2 extends (arg: ExtractReturn<T1>) => any>(p1: Procedure<T1>, p2: Procedure<T2>): Procedure<(...args: ExtractArgs<T1>) => Promise<ExtractReturn<T2>>>;
|
|
679
|
+
export declare function pipe<T1 extends (...args: any[]) => any, T2 extends (arg: ExtractReturn<T1>) => any, T3 extends (arg: ExtractReturn<T2>) => any>(p1: Procedure<T1>, p2: Procedure<T2>, p3: Procedure<T3>): Procedure<(...args: ExtractArgs<T1>) => Promise<ExtractReturn<T3>>>;
|
|
680
|
+
export declare function pipe<T1 extends (...args: any[]) => any, T2 extends (arg: ExtractReturn<T1>) => any, T3 extends (arg: ExtractReturn<T2>) => any, T4 extends (arg: ExtractReturn<T3>) => any>(p1: Procedure<T1>, p2: Procedure<T2>, p3: Procedure<T3>, p4: Procedure<T4>): Procedure<(...args: ExtractArgs<T1>) => Promise<ExtractReturn<T4>>>;
|
|
681
|
+
export declare function pipe<T1 extends (...args: any[]) => any, T2 extends (arg: ExtractReturn<T1>) => any, T3 extends (arg: ExtractReturn<T2>) => any, T4 extends (arg: ExtractReturn<T3>) => any, T5 extends (arg: ExtractReturn<T4>) => any>(p1: Procedure<T1>, p2: Procedure<T2>, p3: Procedure<T3>, p4: Procedure<T4>, p5: Procedure<T5>): Procedure<(...args: ExtractArgs<T1>) => Promise<ExtractReturn<T5>>>;
|
|
682
|
+
/**
|
|
683
|
+
* Compose multiple procedures into a single procedure (right-to-left execution).
|
|
684
|
+
* This is the functional programming convention: compose(a, b, c)(x) = a(b(c(x)))
|
|
685
|
+
*
|
|
686
|
+
* For left-to-right execution, use `pipe()` instead.
|
|
687
|
+
*
|
|
688
|
+
* @example
|
|
689
|
+
* ```typescript
|
|
690
|
+
* const format = createProcedure((s: string) => s.toUpperCase());
|
|
691
|
+
* const validate = createProcedure((s: string) => s.trim());
|
|
692
|
+
* const parse = createProcedure((input: string) => input);
|
|
693
|
+
*
|
|
694
|
+
* // compose executes right-to-left: parse -> validate -> format
|
|
695
|
+
* const pipeline = compose(format, validate, parse);
|
|
696
|
+
* const result = await pipeline(' hello '); // "HELLO"
|
|
697
|
+
* ```
|
|
698
|
+
*/
|
|
699
|
+
export declare function compose<T1 extends (...args: any[]) => any>(p1: Procedure<T1>): Procedure<T1>;
|
|
700
|
+
export declare function compose<T1 extends (arg: ExtractReturn<T2>) => any, T2 extends (...args: any[]) => any>(p1: Procedure<T1>, p2: Procedure<T2>): Procedure<(...args: ExtractArgs<T2>) => Promise<ExtractReturn<T1>>>;
|
|
701
|
+
export declare function compose<T1 extends (arg: ExtractReturn<T2>) => any, T2 extends (arg: ExtractReturn<T3>) => any, T3 extends (...args: any[]) => any>(p1: Procedure<T1>, p2: Procedure<T2>, p3: Procedure<T3>): Procedure<(...args: ExtractArgs<T3>) => Promise<ExtractReturn<T1>>>;
|
|
702
|
+
export declare function compose<T1 extends (arg: ExtractReturn<T2>) => any, T2 extends (arg: ExtractReturn<T3>) => any, T3 extends (arg: ExtractReturn<T4>) => any, T4 extends (...args: any[]) => any>(p1: Procedure<T1>, p2: Procedure<T2>, p3: Procedure<T3>, p4: Procedure<T4>): Procedure<(...args: ExtractArgs<T4>) => Promise<ExtractReturn<T1>>>;
|
|
703
|
+
export declare function compose<T1 extends (arg: ExtractReturn<T2>) => any, T2 extends (arg: ExtractReturn<T3>) => any, T3 extends (arg: ExtractReturn<T4>) => any, T4 extends (arg: ExtractReturn<T5>) => any, T5 extends (...args: any[]) => any>(p1: Procedure<T1>, p2: Procedure<T2>, p3: Procedure<T3>, p4: Procedure<T4>, p5: Procedure<T5>): Procedure<(...args: ExtractArgs<T5>) => Promise<ExtractReturn<T1>>>;
|
|
704
|
+
/**
|
|
705
|
+
* Create a Hook Procedure from a function.
|
|
706
|
+
*
|
|
707
|
+
* @example
|
|
708
|
+
* ```typescript
|
|
709
|
+
* const processChunk = createHook(async (chunk: string) => chunk.toUpperCase());
|
|
710
|
+
* // Type inferred: Procedure<[string], string>
|
|
711
|
+
* ```
|
|
712
|
+
*/
|
|
713
|
+
export declare function createHook<THandler extends (...args: any[]) => any>(handler: THandler): Procedure<THandler>;
|
|
714
|
+
export declare function createHook<THandler extends (...args: any[]) => any>(options: ProcedureOptions, handler: THandler): Procedure<THandler>;
|
|
715
|
+
/**
|
|
716
|
+
* Type-safe helper to apply middleware to a Procedure while preserving types.
|
|
717
|
+
*
|
|
718
|
+
* This helper ensures that middleware types are correctly matched to the Procedure's
|
|
719
|
+
* argument types, avoiding the need for type assertions.
|
|
720
|
+
*
|
|
721
|
+
* @example
|
|
722
|
+
* ```typescript
|
|
723
|
+
* const proc = createProcedure({ name: 'test' }, async (input: string) => input);
|
|
724
|
+
* const middleware: Middleware<[string]>[] = [...];
|
|
725
|
+
* const procWithMw = applyMiddleware(proc, middleware);
|
|
726
|
+
* // procWithMw is still Procedure<[string], string> - types preserved!
|
|
727
|
+
* ```
|
|
728
|
+
*/
|
|
729
|
+
export declare function applyMiddleware<TArgs extends any[], TOutput>(procedure: Procedure<(...args: TArgs) => TOutput>, ...middleware: (Middleware<TArgs> | MiddlewarePipeline)[]): Procedure<(...args: TArgs) => TOutput>;
|
|
730
|
+
/**
|
|
731
|
+
* Type-safe helper to apply middleware from a registry/hook system.
|
|
732
|
+
*
|
|
733
|
+
* This is useful when middleware comes from hook registries where types might
|
|
734
|
+
* be unions or `Middleware<any[]>`. The helper ensures type safety by requiring
|
|
735
|
+
* the middleware to match the Procedure's argument types.
|
|
736
|
+
*
|
|
737
|
+
* @example
|
|
738
|
+
* ```typescript
|
|
739
|
+
* const proc = createProcedure({ name: 'test' }, async (input: string) => input);
|
|
740
|
+
* const registryMiddleware = registry.getMiddleware('test'); // Middleware<any[]>[]
|
|
741
|
+
* const procWithMw = applyRegistryMiddleware(proc, registryMiddleware);
|
|
742
|
+
* // Types are preserved and validated
|
|
743
|
+
* ```
|
|
744
|
+
*/
|
|
745
|
+
export declare function applyRegistryMiddleware<THandler extends (...args: any[]) => any>(procedure: Procedure<THandler>, ...middleware: (Middleware<any[]> | MiddlewarePipeline)[]): Procedure<THandler>;
|
|
746
|
+
export declare function wrapProcedure(middleware: Middleware<any[]>[]): {
|
|
747
|
+
<THandler extends (...args: any[]) => any>(handler: THandler): Procedure<THandler>;
|
|
748
|
+
<THandler extends (...args: any[]) => any>(config: ProcedureOptions, handler: THandler): Procedure<THandler>;
|
|
749
|
+
};
|
|
750
|
+
export declare function wrapHook(middleware: Middleware<any[]>[]): {
|
|
751
|
+
<THandler extends (...args: any[]) => any>(handler: THandler): Procedure<THandler>;
|
|
752
|
+
<THandler extends (...args: any[]) => any>(config: ProcedureOptions, handler: THandler): Procedure<THandler>;
|
|
753
|
+
};
|
|
754
|
+
export {};
|
|
755
|
+
//# sourceMappingURL=procedure.d.ts.map
|