@stigmer/runner 3.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/README.md +212 -0
- package/dist/.build-fingerprint +1 -0
- package/dist/activities/call-agent-status.d.ts +37 -0
- package/dist/activities/call-agent-status.js +91 -0
- package/dist/activities/call-agent-status.js.map +1 -0
- package/dist/activities/call-agent.d.ts +25 -0
- package/dist/activities/call-agent.js +233 -0
- package/dist/activities/call-agent.js.map +1 -0
- package/dist/activities/call-eval.d.ts +50 -0
- package/dist/activities/call-eval.js +244 -0
- package/dist/activities/call-eval.js.map +1 -0
- package/dist/activities/call-function.d.ts +21 -0
- package/dist/activities/call-function.js +54 -0
- package/dist/activities/call-function.js.map +1 -0
- package/dist/activities/call-grpc.d.ts +22 -0
- package/dist/activities/call-grpc.js +101 -0
- package/dist/activities/call-grpc.js.map +1 -0
- package/dist/activities/call-http.d.ts +32 -0
- package/dist/activities/call-http.js +134 -0
- package/dist/activities/call-http.js.map +1 -0
- package/dist/activities/call-llm.d.ts +39 -0
- package/dist/activities/call-llm.js +260 -0
- package/dist/activities/call-llm.js.map +1 -0
- package/dist/activities/call-transform.d.ts +20 -0
- package/dist/activities/call-transform.js +33 -0
- package/dist/activities/call-transform.js.map +1 -0
- package/dist/activities/call-validate.d.ts +41 -0
- package/dist/activities/call-validate.js +163 -0
- package/dist/activities/call-validate.js.map +1 -0
- package/dist/activities/classify-tool-approvals.d.ts +47 -0
- package/dist/activities/classify-tool-approvals.js +207 -0
- package/dist/activities/classify-tool-approvals.js.map +1 -0
- package/dist/activities/discover-mcp-server.d.ts +65 -0
- package/dist/activities/discover-mcp-server.js +269 -0
- package/dist/activities/discover-mcp-server.js.map +1 -0
- package/dist/activities/emit-event.d.ts +46 -0
- package/dist/activities/emit-event.js +125 -0
- package/dist/activities/emit-event.js.map +1 -0
- package/dist/activities/ensure-thread.d.ts +24 -0
- package/dist/activities/ensure-thread.js +44 -0
- package/dist/activities/ensure-thread.js.map +1 -0
- package/dist/activities/evaluate-expressions.d.ts +21 -0
- package/dist/activities/evaluate-expressions.js +39 -0
- package/dist/activities/evaluate-expressions.js.map +1 -0
- package/dist/activities/execute-cursor/approval-policy.d.ts +104 -0
- package/dist/activities/execute-cursor/approval-policy.js +193 -0
- package/dist/activities/execute-cursor/approval-policy.js.map +1 -0
- package/dist/activities/execute-cursor/approval-state.d.ts +157 -0
- package/dist/activities/execute-cursor/approval-state.js +223 -0
- package/dist/activities/execute-cursor/approval-state.js.map +1 -0
- package/dist/activities/execute-cursor/attachment-resolver.d.ts +19 -0
- package/dist/activities/execute-cursor/attachment-resolver.js +52 -0
- package/dist/activities/execute-cursor/attachment-resolver.js.map +1 -0
- package/dist/activities/execute-cursor/blueprint-resolver.d.ts +66 -0
- package/dist/activities/execute-cursor/blueprint-resolver.js +169 -0
- package/dist/activities/execute-cursor/blueprint-resolver.js.map +1 -0
- package/dist/activities/execute-cursor/connect-backfill.d.ts +18 -0
- package/dist/activities/execute-cursor/connect-backfill.js +27 -0
- package/dist/activities/execute-cursor/connect-backfill.js.map +1 -0
- package/dist/activities/execute-cursor/cursor-event-recorder.d.ts +24 -0
- package/dist/activities/execute-cursor/cursor-event-recorder.js +66 -0
- package/dist/activities/execute-cursor/cursor-event-recorder.js.map +1 -0
- package/dist/activities/execute-cursor/cursor-mode.d.ts +32 -0
- package/dist/activities/execute-cursor/cursor-mode.js +36 -0
- package/dist/activities/execute-cursor/cursor-mode.js.map +1 -0
- package/dist/activities/execute-cursor/delta-enricher.d.ts +87 -0
- package/dist/activities/execute-cursor/delta-enricher.js +265 -0
- package/dist/activities/execute-cursor/delta-enricher.js.map +1 -0
- package/dist/activities/execute-cursor/env-resolver.d.ts +19 -0
- package/dist/activities/execute-cursor/env-resolver.js +47 -0
- package/dist/activities/execute-cursor/env-resolver.js.map +1 -0
- package/dist/activities/execute-cursor/error-classifier.d.ts +73 -0
- package/dist/activities/execute-cursor/error-classifier.js +185 -0
- package/dist/activities/execute-cursor/error-classifier.js.map +1 -0
- package/dist/activities/execute-cursor/fetch-interceptor.d.ts +59 -0
- package/dist/activities/execute-cursor/fetch-interceptor.js +317 -0
- package/dist/activities/execute-cursor/fetch-interceptor.js.map +1 -0
- package/dist/activities/execute-cursor/hitl-diagnostics.d.ts +32 -0
- package/dist/activities/execute-cursor/hitl-diagnostics.js +73 -0
- package/dist/activities/execute-cursor/hitl-diagnostics.js.map +1 -0
- package/dist/activities/execute-cursor/hook-script.d.ts +47 -0
- package/dist/activities/execute-cursor/hook-script.js +156 -0
- package/dist/activities/execute-cursor/hook-script.js.map +1 -0
- package/dist/activities/execute-cursor/http2-interceptor.d.ts +94 -0
- package/dist/activities/execute-cursor/http2-interceptor.js +209 -0
- package/dist/activities/execute-cursor/http2-interceptor.js.map +1 -0
- package/dist/activities/execute-cursor/index.d.ts +67 -0
- package/dist/activities/execute-cursor/index.js +1176 -0
- package/dist/activities/execute-cursor/index.js.map +1 -0
- package/dist/activities/execute-cursor/mcp-config.d.ts +30 -0
- package/dist/activities/execute-cursor/mcp-config.js +39 -0
- package/dist/activities/execute-cursor/mcp-config.js.map +1 -0
- package/dist/activities/execute-cursor/mcp-resolver.d.ts +91 -0
- package/dist/activities/execute-cursor/mcp-resolver.js +178 -0
- package/dist/activities/execute-cursor/mcp-resolver.js.map +1 -0
- package/dist/activities/execute-cursor/message-translator.d.ts +211 -0
- package/dist/activities/execute-cursor/message-translator.js +786 -0
- package/dist/activities/execute-cursor/message-translator.js.map +1 -0
- package/dist/activities/execute-cursor/model-pricing-data.d.ts +40 -0
- package/dist/activities/execute-cursor/model-pricing-data.js +114 -0
- package/dist/activities/execute-cursor/model-pricing-data.js.map +1 -0
- package/dist/activities/execute-cursor/model-pricing.d.ts +42 -0
- package/dist/activities/execute-cursor/model-pricing.js +141 -0
- package/dist/activities/execute-cursor/model-pricing.js.map +1 -0
- package/dist/activities/execute-cursor/placeholder-resolver.d.ts +34 -0
- package/dist/activities/execute-cursor/placeholder-resolver.js +82 -0
- package/dist/activities/execute-cursor/placeholder-resolver.js.map +1 -0
- package/dist/activities/execute-cursor/prompt-builder.d.ts +80 -0
- package/dist/activities/execute-cursor/prompt-builder.js +280 -0
- package/dist/activities/execute-cursor/prompt-builder.js.map +1 -0
- package/dist/activities/execute-cursor/rejection-capture.d.ts +30 -0
- package/dist/activities/execute-cursor/rejection-capture.js +80 -0
- package/dist/activities/execute-cursor/rejection-capture.js.map +1 -0
- package/dist/activities/execute-cursor/session-lifecycle.d.ts +189 -0
- package/dist/activities/execute-cursor/session-lifecycle.js +285 -0
- package/dist/activities/execute-cursor/session-lifecycle.js.map +1 -0
- package/dist/activities/execute-cursor/skill-resolver.d.ts +29 -0
- package/dist/activities/execute-cursor/skill-resolver.js +134 -0
- package/dist/activities/execute-cursor/skill-resolver.js.map +1 -0
- package/dist/activities/execute-cursor/subagent-config.d.ts +34 -0
- package/dist/activities/execute-cursor/subagent-config.js +55 -0
- package/dist/activities/execute-cursor/subagent-config.js.map +1 -0
- package/dist/activities/execute-cursor/todo-tracker.d.ts +35 -0
- package/dist/activities/execute-cursor/todo-tracker.js +108 -0
- package/dist/activities/execute-cursor/todo-tracker.js.map +1 -0
- package/dist/activities/execute-cursor/usage-accumulator.d.ts +55 -0
- package/dist/activities/execute-cursor/usage-accumulator.js +89 -0
- package/dist/activities/execute-cursor/usage-accumulator.js.map +1 -0
- package/dist/activities/execute-cursor/workspace-provision.d.ts +22 -0
- package/dist/activities/execute-cursor/workspace-provision.js +37 -0
- package/dist/activities/execute-cursor/workspace-provision.js.map +1 -0
- package/dist/activities/execute-cursor/workspace-setup.d.ts +27 -0
- package/dist/activities/execute-cursor/workspace-setup.js +61 -0
- package/dist/activities/execute-cursor/workspace-setup.js.map +1 -0
- package/dist/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.d.ts +71 -0
- package/dist/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.js +182 -0
- package/dist/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.js.map +1 -0
- package/dist/activities/execute-deep-agent/attachment-injector.d.ts +67 -0
- package/dist/activities/execute-deep-agent/attachment-injector.js +306 -0
- package/dist/activities/execute-deep-agent/attachment-injector.js.map +1 -0
- package/dist/activities/execute-deep-agent/auto-publish.d.ts +17 -0
- package/dist/activities/execute-deep-agent/auto-publish.js +71 -0
- package/dist/activities/execute-deep-agent/auto-publish.js.map +1 -0
- package/dist/activities/execute-deep-agent/environment.d.ts +24 -0
- package/dist/activities/execute-deep-agent/environment.js +50 -0
- package/dist/activities/execute-deep-agent/environment.js.map +1 -0
- package/dist/activities/execute-deep-agent/event-recorder.d.ts +21 -0
- package/dist/activities/execute-deep-agent/event-recorder.js +67 -0
- package/dist/activities/execute-deep-agent/event-recorder.js.map +1 -0
- package/dist/activities/execute-deep-agent/execution-state.d.ts +61 -0
- package/dist/activities/execute-deep-agent/execution-state.js +76 -0
- package/dist/activities/execute-deep-agent/execution-state.js.map +1 -0
- package/dist/activities/execute-deep-agent/execution-status-writer.d.ts +17 -0
- package/dist/activities/execute-deep-agent/execution-status-writer.js +9 -0
- package/dist/activities/execute-deep-agent/execution-status-writer.js.map +1 -0
- package/dist/activities/execute-deep-agent/hitl.d.ts +58 -0
- package/dist/activities/execute-deep-agent/hitl.js +155 -0
- package/dist/activities/execute-deep-agent/hitl.js.map +1 -0
- package/dist/activities/execute-deep-agent/index.d.ts +14 -0
- package/dist/activities/execute-deep-agent/index.js +286 -0
- package/dist/activities/execute-deep-agent/index.js.map +1 -0
- package/dist/activities/execute-deep-agent/inline-publisher.d.ts +36 -0
- package/dist/activities/execute-deep-agent/inline-publisher.js +105 -0
- package/dist/activities/execute-deep-agent/inline-publisher.js.map +1 -0
- package/dist/activities/execute-deep-agent/post-stream.d.ts +23 -0
- package/dist/activities/execute-deep-agent/post-stream.js +71 -0
- package/dist/activities/execute-deep-agent/post-stream.js.map +1 -0
- package/dist/activities/execute-deep-agent/prompt-builder.d.ts +27 -0
- package/dist/activities/execute-deep-agent/prompt-builder.js +200 -0
- package/dist/activities/execute-deep-agent/prompt-builder.js.map +1 -0
- package/dist/activities/execute-deep-agent/setup.d.ts +55 -0
- package/dist/activities/execute-deep-agent/setup.js +411 -0
- package/dist/activities/execute-deep-agent/setup.js.map +1 -0
- package/dist/activities/execute-deep-agent/status-builder-shared.d.ts +39 -0
- package/dist/activities/execute-deep-agent/status-builder-shared.js +120 -0
- package/dist/activities/execute-deep-agent/status-builder-shared.js.map +1 -0
- package/dist/activities/execute-deep-agent/status-builder.d.ts +81 -0
- package/dist/activities/execute-deep-agent/status-builder.js +312 -0
- package/dist/activities/execute-deep-agent/status-builder.js.map +1 -0
- package/dist/activities/execute-deep-agent/streaming-scheduler.d.ts +60 -0
- package/dist/activities/execute-deep-agent/streaming-scheduler.js +114 -0
- package/dist/activities/execute-deep-agent/streaming-scheduler.js.map +1 -0
- package/dist/activities/execute-deep-agent/streaming-side-effects.d.ts +22 -0
- package/dist/activities/execute-deep-agent/streaming-side-effects.js +83 -0
- package/dist/activities/execute-deep-agent/streaming-side-effects.js.map +1 -0
- package/dist/activities/execute-deep-agent/streaming-terminal.d.ts +12 -0
- package/dist/activities/execute-deep-agent/streaming-terminal.js +71 -0
- package/dist/activities/execute-deep-agent/streaming-terminal.js.map +1 -0
- package/dist/activities/execute-deep-agent/streaming-v3.d.ts +13 -0
- package/dist/activities/execute-deep-agent/streaming-v3.js +170 -0
- package/dist/activities/execute-deep-agent/streaming-v3.js.map +1 -0
- package/dist/activities/execute-deep-agent/streaming.d.ts +66 -0
- package/dist/activities/execute-deep-agent/streaming.js +169 -0
- package/dist/activities/execute-deep-agent/streaming.js.map +1 -0
- package/dist/activities/execute-deep-agent/subagent-tracker.d.ts +90 -0
- package/dist/activities/execute-deep-agent/subagent-tracker.js +364 -0
- package/dist/activities/execute-deep-agent/subagent-tracker.js.map +1 -0
- package/dist/activities/execute-deep-agent/subagent-transformer.d.ts +150 -0
- package/dist/activities/execute-deep-agent/subagent-transformer.js +450 -0
- package/dist/activities/execute-deep-agent/subagent-transformer.js.map +1 -0
- package/dist/activities/execute-deep-agent/subagent-wiring.d.ts +28 -0
- package/dist/activities/execute-deep-agent/subagent-wiring.js +40 -0
- package/dist/activities/execute-deep-agent/subagent-wiring.js.map +1 -0
- package/dist/activities/execute-deep-agent/v3-event-recorder.d.ts +31 -0
- package/dist/activities/execute-deep-agent/v3-event-recorder.js +71 -0
- package/dist/activities/execute-deep-agent/v3-event-recorder.js.map +1 -0
- package/dist/activities/execute-deep-agent/v3-events.d.ts +102 -0
- package/dist/activities/execute-deep-agent/v3-events.js +35 -0
- package/dist/activities/execute-deep-agent/v3-events.js.map +1 -0
- package/dist/activities/execute-deep-agent/v3-protocol-normalizer.d.ts +15 -0
- package/dist/activities/execute-deep-agent/v3-protocol-normalizer.js +235 -0
- package/dist/activities/execute-deep-agent/v3-protocol-normalizer.js.map +1 -0
- package/dist/activities/execute-deep-agent/v3-status-builder.d.ts +68 -0
- package/dist/activities/execute-deep-agent/v3-status-builder.js +394 -0
- package/dist/activities/execute-deep-agent/v3-status-builder.js.map +1 -0
- package/dist/activities/execute-deep-agent/writeback-coordinator.d.ts +71 -0
- package/dist/activities/execute-deep-agent/writeback-coordinator.js +295 -0
- package/dist/activities/execute-deep-agent/writeback-coordinator.js.map +1 -0
- package/dist/activities/hydrate-workflow-execution.d.ts +32 -0
- package/dist/activities/hydrate-workflow-execution.js +212 -0
- package/dist/activities/hydrate-workflow-execution.js.map +1 -0
- package/dist/activities/notification.d.ts +19 -0
- package/dist/activities/notification.js +47 -0
- package/dist/activities/notification.js.map +1 -0
- package/dist/activities/promote-task-output.d.ts +38 -0
- package/dist/activities/promote-task-output.js +90 -0
- package/dist/activities/promote-task-output.js.map +1 -0
- package/dist/activities/run-command.d.ts +15 -0
- package/dist/activities/run-command.js +123 -0
- package/dist/activities/run-command.js.map +1 -0
- package/dist/activities/workflow-event-activities.d.ts +48 -0
- package/dist/activities/workflow-event-activities.js +415 -0
- package/dist/activities/workflow-event-activities.js.map +1 -0
- package/dist/bootstrap.d.ts +80 -0
- package/dist/bootstrap.js +114 -0
- package/dist/bootstrap.js.map +1 -0
- package/dist/budget/index.d.ts +1 -0
- package/dist/budget/index.js +2 -0
- package/dist/budget/index.js.map +1 -0
- package/dist/budget/tracker.d.ts +52 -0
- package/dist/budget/tracker.js +123 -0
- package/dist/budget/tracker.js.map +1 -0
- package/dist/claimcheck/compressor.d.ts +2 -0
- package/dist/claimcheck/compressor.js +8 -0
- package/dist/claimcheck/compressor.js.map +1 -0
- package/dist/claimcheck/config.d.ts +7 -0
- package/dist/claimcheck/config.js +10 -0
- package/dist/claimcheck/config.js.map +1 -0
- package/dist/claimcheck/index.d.ts +3 -0
- package/dist/claimcheck/index.js +4 -0
- package/dist/claimcheck/index.js.map +1 -0
- package/dist/claimcheck/payload-codec.d.ts +23 -0
- package/dist/claimcheck/payload-codec.js +81 -0
- package/dist/claimcheck/payload-codec.js.map +1 -0
- package/dist/client/server-contracts.d.ts +52 -0
- package/dist/client/server-contracts.js +72 -0
- package/dist/client/server-contracts.js.map +1 -0
- package/dist/client/stigmer-client.d.ts +131 -0
- package/dist/client/stigmer-client.js +239 -0
- package/dist/client/stigmer-client.js.map +1 -0
- package/dist/config.d.ts +64 -0
- package/dist/config.js +123 -0
- package/dist/config.js.map +1 -0
- package/dist/idle-watchdog.d.ts +11 -0
- package/dist/idle-watchdog.js +24 -0
- package/dist/idle-watchdog.js.map +1 -0
- package/dist/index.d.ts +43 -0
- package/dist/index.js +42 -0
- package/dist/index.js.map +1 -0
- package/dist/interceptors/workflow-metrics-sink.d.ts +11 -0
- package/dist/interceptors/workflow-metrics-sink.js +51 -0
- package/dist/interceptors/workflow-metrics-sink.js.map +1 -0
- package/dist/ipc-protocol-fixtures.d.ts +32 -0
- package/dist/ipc-protocol-fixtures.js +69 -0
- package/dist/ipc-protocol-fixtures.js.map +1 -0
- package/dist/ipc-protocol.d.ts +60 -0
- package/dist/ipc-protocol.js +19 -0
- package/dist/ipc-protocol.js.map +1 -0
- package/dist/main.d.ts +19 -0
- package/dist/main.js +292 -0
- package/dist/main.js.map +1 -0
- package/dist/middleware/approval-gate.d.ts +30 -0
- package/dist/middleware/approval-gate.js +125 -0
- package/dist/middleware/approval-gate.js.map +1 -0
- package/dist/middleware/cost-cap.d.ts +22 -0
- package/dist/middleware/cost-cap.js +159 -0
- package/dist/middleware/cost-cap.js.map +1 -0
- package/dist/middleware/error-hints.d.ts +27 -0
- package/dist/middleware/error-hints.js +116 -0
- package/dist/middleware/error-hints.js.map +1 -0
- package/dist/middleware/execution-budget.d.ts +20 -0
- package/dist/middleware/execution-budget.js +151 -0
- package/dist/middleware/execution-budget.js.map +1 -0
- package/dist/middleware/graceful-stop.d.ts +17 -0
- package/dist/middleware/graceful-stop.js +63 -0
- package/dist/middleware/graceful-stop.js.map +1 -0
- package/dist/middleware/index.d.ts +27 -0
- package/dist/middleware/index.js +45 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/loop-detection.d.ts +14 -0
- package/dist/middleware/loop-detection.js +156 -0
- package/dist/middleware/loop-detection.js.map +1 -0
- package/dist/middleware/otel-spans.d.ts +11 -0
- package/dist/middleware/otel-spans.js +177 -0
- package/dist/middleware/otel-spans.js.map +1 -0
- package/dist/middleware/think-tool.d.ts +23 -0
- package/dist/middleware/think-tool.js +33 -0
- package/dist/middleware/think-tool.js.map +1 -0
- package/dist/middleware/tool-truncation.d.ts +16 -0
- package/dist/middleware/tool-truncation.js +67 -0
- package/dist/middleware/tool-truncation.js.map +1 -0
- package/dist/middleware/types.d.ts +100 -0
- package/dist/middleware/types.js +9 -0
- package/dist/middleware/types.js.map +1 -0
- package/dist/notification/index.d.ts +2 -0
- package/dist/notification/index.js +6 -0
- package/dist/notification/index.js.map +1 -0
- package/dist/notification/provider.d.ts +29 -0
- package/dist/notification/provider.js +25 -0
- package/dist/notification/provider.js.map +1 -0
- package/dist/notification/webhook.d.ts +13 -0
- package/dist/notification/webhook.js +55 -0
- package/dist/notification/webhook.js.map +1 -0
- package/dist/otel-metrics.d.ts +21 -0
- package/dist/otel-metrics.js +54 -0
- package/dist/otel-metrics.js.map +1 -0
- package/dist/otel.d.ts +57 -0
- package/dist/otel.js +164 -0
- package/dist/otel.js.map +1 -0
- package/dist/runner-manager.d.ts +113 -0
- package/dist/runner-manager.js +412 -0
- package/dist/runner-manager.js.map +1 -0
- package/dist/runner-token-coordinator.d.ts +56 -0
- package/dist/runner-token-coordinator.js +84 -0
- package/dist/runner-token-coordinator.js.map +1 -0
- package/dist/runner.d.ts +104 -0
- package/dist/runner.js +234 -0
- package/dist/runner.js.map +1 -0
- package/dist/shared/approval-policy.d.ts +45 -0
- package/dist/shared/approval-policy.js +122 -0
- package/dist/shared/approval-policy.js.map +1 -0
- package/dist/shared/artifact-storage.d.ts +44 -0
- package/dist/shared/artifact-storage.js +162 -0
- package/dist/shared/artifact-storage.js.map +1 -0
- package/dist/shared/checkpointer/factory.d.ts +28 -0
- package/dist/shared/checkpointer/factory.js +55 -0
- package/dist/shared/checkpointer/factory.js.map +1 -0
- package/dist/shared/checkpointer/http-saver.d.ts +34 -0
- package/dist/shared/checkpointer/http-saver.js +274 -0
- package/dist/shared/checkpointer/http-saver.js.map +1 -0
- package/dist/shared/checkpointer/types.d.ts +12 -0
- package/dist/shared/checkpointer/types.js +2 -0
- package/dist/shared/checkpointer/types.js.map +1 -0
- package/dist/shared/connect-backfill.d.ts +58 -0
- package/dist/shared/connect-backfill.js +119 -0
- package/dist/shared/connect-backfill.js.map +1 -0
- package/dist/shared/extract-json.d.ts +26 -0
- package/dist/shared/extract-json.js +140 -0
- package/dist/shared/extract-json.js.map +1 -0
- package/dist/shared/grpc-retry.d.ts +35 -0
- package/dist/shared/grpc-retry.js +78 -0
- package/dist/shared/grpc-retry.js.map +1 -0
- package/dist/shared/heartbeat.d.ts +22 -0
- package/dist/shared/heartbeat.js +55 -0
- package/dist/shared/heartbeat.js.map +1 -0
- package/dist/shared/json-schema-to-zod.d.ts +13 -0
- package/dist/shared/json-schema-to-zod.js +49 -0
- package/dist/shared/json-schema-to-zod.js.map +1 -0
- package/dist/shared/llm-proxy.d.ts +57 -0
- package/dist/shared/llm-proxy.js +116 -0
- package/dist/shared/llm-proxy.js.map +1 -0
- package/dist/shared/mcp-manager.d.ts +47 -0
- package/dist/shared/mcp-manager.js +118 -0
- package/dist/shared/mcp-manager.js.map +1 -0
- package/dist/shared/mcp-resolver.d.ts +41 -0
- package/dist/shared/mcp-resolver.js +96 -0
- package/dist/shared/mcp-resolver.js.map +1 -0
- package/dist/shared/model-pricing-data.d.ts +18 -0
- package/dist/shared/model-pricing-data.js +78 -0
- package/dist/shared/model-pricing-data.js.map +1 -0
- package/dist/shared/model-pricing.d.ts +24 -0
- package/dist/shared/model-pricing.js +58 -0
- package/dist/shared/model-pricing.js.map +1 -0
- package/dist/shared/model-registry.d.ts +55 -0
- package/dist/shared/model-registry.js +178 -0
- package/dist/shared/model-registry.js.map +1 -0
- package/dist/shared/placeholder-resolver.d.ts +27 -0
- package/dist/shared/placeholder-resolver.js +75 -0
- package/dist/shared/placeholder-resolver.js.map +1 -0
- package/dist/shared/plan-artifact.d.ts +56 -0
- package/dist/shared/plan-artifact.js +98 -0
- package/dist/shared/plan-artifact.js.map +1 -0
- package/dist/shared/skill-relevance.d.ts +65 -0
- package/dist/shared/skill-relevance.js +175 -0
- package/dist/shared/skill-relevance.js.map +1 -0
- package/dist/shared/skill-writer.d.ts +73 -0
- package/dist/shared/skill-writer.js +230 -0
- package/dist/shared/skill-writer.js.map +1 -0
- package/dist/shared/status.d.ts +37 -0
- package/dist/shared/status.js +73 -0
- package/dist/shared/status.js.map +1 -0
- package/dist/shared/subagent-gate.d.ts +41 -0
- package/dist/shared/subagent-gate.js +93 -0
- package/dist/shared/subagent-gate.js.map +1 -0
- package/dist/shared/tool-kind.d.ts +22 -0
- package/dist/shared/tool-kind.js +79 -0
- package/dist/shared/tool-kind.js.map +1 -0
- package/dist/shared/workspace/file-tree.d.ts +13 -0
- package/dist/shared/workspace/file-tree.js +101 -0
- package/dist/shared/workspace/file-tree.js.map +1 -0
- package/dist/shared/workspace/local-backend.d.ts +41 -0
- package/dist/shared/workspace/local-backend.js +113 -0
- package/dist/shared/workspace/local-backend.js.map +1 -0
- package/dist/shared/workspace/platform-dir.d.ts +25 -0
- package/dist/shared/workspace/platform-dir.js +36 -0
- package/dist/shared/workspace/platform-dir.js.map +1 -0
- package/dist/shared/workspace/platform-mount.d.ts +95 -0
- package/dist/shared/workspace/platform-mount.js +157 -0
- package/dist/shared/workspace/platform-mount.js.map +1 -0
- package/dist/shared/workspace/provisioner.d.ts +47 -0
- package/dist/shared/workspace/provisioner.js +84 -0
- package/dist/shared/workspace/provisioner.js.map +1 -0
- package/dist/shared/workspace/sources/empty.d.ts +8 -0
- package/dist/shared/workspace/sources/empty.js +18 -0
- package/dist/shared/workspace/sources/empty.js.map +1 -0
- package/dist/shared/workspace/sources/git.d.ts +22 -0
- package/dist/shared/workspace/sources/git.js +207 -0
- package/dist/shared/workspace/sources/git.js.map +1 -0
- package/dist/shared/workspace/sources/local-path.d.ts +17 -0
- package/dist/shared/workspace/sources/local-path.js +57 -0
- package/dist/shared/workspace/sources/local-path.js.map +1 -0
- package/dist/shared/workspace/types.d.ts +58 -0
- package/dist/shared/workspace/types.js +25 -0
- package/dist/shared/workspace/types.js.map +1 -0
- package/dist/shared/zip-extract.d.ts +30 -0
- package/dist/shared/zip-extract.js +150 -0
- package/dist/shared/zip-extract.js.map +1 -0
- package/dist/worker.d.ts +27 -0
- package/dist/worker.js +65 -0
- package/dist/worker.js.map +1 -0
- package/dist/workflow-engine/clone.d.ts +11 -0
- package/dist/workflow-engine/clone.js +21 -0
- package/dist/workflow-engine/clone.js.map +1 -0
- package/dist/workflow-engine/do-executor.d.ts +27 -0
- package/dist/workflow-engine/do-executor.js +418 -0
- package/dist/workflow-engine/do-executor.js.map +1 -0
- package/dist/workflow-engine/duration.d.ts +12 -0
- package/dist/workflow-engine/duration.js +25 -0
- package/dist/workflow-engine/duration.js.map +1 -0
- package/dist/workflow-engine/error-utils.d.ts +42 -0
- package/dist/workflow-engine/error-utils.js +77 -0
- package/dist/workflow-engine/error-utils.js.map +1 -0
- package/dist/workflow-engine/errors.d.ts +46 -0
- package/dist/workflow-engine/errors.js +105 -0
- package/dist/workflow-engine/errors.js.map +1 -0
- package/dist/workflow-engine/expression-utils.d.ts +60 -0
- package/dist/workflow-engine/expression-utils.js +108 -0
- package/dist/workflow-engine/expression-utils.js.map +1 -0
- package/dist/workflow-engine/expression.d.ts +132 -0
- package/dist/workflow-engine/expression.js +366 -0
- package/dist/workflow-engine/expression.js.map +1 -0
- package/dist/workflow-engine/loader.d.ts +23 -0
- package/dist/workflow-engine/loader.js +429 -0
- package/dist/workflow-engine/loader.js.map +1 -0
- package/dist/workflow-engine/recovery.d.ts +53 -0
- package/dist/workflow-engine/recovery.js +46 -0
- package/dist/workflow-engine/recovery.js.map +1 -0
- package/dist/workflow-engine/resolve.d.ts +83 -0
- package/dist/workflow-engine/resolve.js +257 -0
- package/dist/workflow-engine/resolve.js.map +1 -0
- package/dist/workflow-engine/retry.d.ts +30 -0
- package/dist/workflow-engine/retry.js +97 -0
- package/dist/workflow-engine/retry.js.map +1 -0
- package/dist/workflow-engine/state.d.ts +26 -0
- package/dist/workflow-engine/state.js +49 -0
- package/dist/workflow-engine/state.js.map +1 -0
- package/dist/workflow-engine/task-factory.d.ts +20 -0
- package/dist/workflow-engine/task-factory.js +133 -0
- package/dist/workflow-engine/task-factory.js.map +1 -0
- package/dist/workflow-engine/task-status-accumulator.d.ts +59 -0
- package/dist/workflow-engine/task-status-accumulator.js +164 -0
- package/dist/workflow-engine/task-status-accumulator.js.map +1 -0
- package/dist/workflow-engine/tasks/call-agent-output.d.ts +26 -0
- package/dist/workflow-engine/tasks/call-agent-output.js +109 -0
- package/dist/workflow-engine/tasks/call-agent-output.js.map +1 -0
- package/dist/workflow-engine/tasks/call-agent.d.ts +31 -0
- package/dist/workflow-engine/tasks/call-agent.js +161 -0
- package/dist/workflow-engine/tasks/call-agent.js.map +1 -0
- package/dist/workflow-engine/tasks/call-function.d.ts +19 -0
- package/dist/workflow-engine/tasks/call-function.js +64 -0
- package/dist/workflow-engine/tasks/call-function.js.map +1 -0
- package/dist/workflow-engine/tasks/call-grpc.d.ts +15 -0
- package/dist/workflow-engine/tasks/call-grpc.js +27 -0
- package/dist/workflow-engine/tasks/call-grpc.js.map +1 -0
- package/dist/workflow-engine/tasks/call-http.d.ts +19 -0
- package/dist/workflow-engine/tasks/call-http.js +31 -0
- package/dist/workflow-engine/tasks/call-http.js.map +1 -0
- package/dist/workflow-engine/tasks/for.d.ts +39 -0
- package/dist/workflow-engine/tasks/for.js +154 -0
- package/dist/workflow-engine/tasks/for.js.map +1 -0
- package/dist/workflow-engine/tasks/fork.d.ts +42 -0
- package/dist/workflow-engine/tasks/fork.js +142 -0
- package/dist/workflow-engine/tasks/fork.js.map +1 -0
- package/dist/workflow-engine/tasks/human-input.d.ts +33 -0
- package/dist/workflow-engine/tasks/human-input.js +109 -0
- package/dist/workflow-engine/tasks/human-input.js.map +1 -0
- package/dist/workflow-engine/tasks/listen.d.ts +34 -0
- package/dist/workflow-engine/tasks/listen.js +119 -0
- package/dist/workflow-engine/tasks/listen.js.map +1 -0
- package/dist/workflow-engine/tasks/raise.d.ts +18 -0
- package/dist/workflow-engine/tasks/raise.js +60 -0
- package/dist/workflow-engine/tasks/raise.js.map +1 -0
- package/dist/workflow-engine/tasks/run.d.ts +39 -0
- package/dist/workflow-engine/tasks/run.js +114 -0
- package/dist/workflow-engine/tasks/run.js.map +1 -0
- package/dist/workflow-engine/tasks/set.d.ts +15 -0
- package/dist/workflow-engine/tasks/set.js +31 -0
- package/dist/workflow-engine/tasks/set.js.map +1 -0
- package/dist/workflow-engine/tasks/switch.d.ts +25 -0
- package/dist/workflow-engine/tasks/switch.js +76 -0
- package/dist/workflow-engine/tasks/switch.js.map +1 -0
- package/dist/workflow-engine/tasks/try.d.ts +49 -0
- package/dist/workflow-engine/tasks/try.js +189 -0
- package/dist/workflow-engine/tasks/try.js.map +1 -0
- package/dist/workflow-engine/tasks/wait.d.ts +24 -0
- package/dist/workflow-engine/tasks/wait.js +39 -0
- package/dist/workflow-engine/tasks/wait.js.map +1 -0
- package/dist/workflow-engine/types.d.ts +682 -0
- package/dist/workflow-engine/types.js +47 -0
- package/dist/workflow-engine/types.js.map +1 -0
- package/dist/workflows/call-agent-orchestrator.d.ts +31 -0
- package/dist/workflows/call-agent-orchestrator.js +214 -0
- package/dist/workflows/call-agent-orchestrator.js.map +1 -0
- package/dist/workflows/connect-mcp-server.d.ts +20 -0
- package/dist/workflows/connect-mcp-server.js +113 -0
- package/dist/workflows/connect-mcp-server.js.map +1 -0
- package/dist/workflows/engine-core.d.ts +36 -0
- package/dist/workflows/engine-core.js +272 -0
- package/dist/workflows/engine-core.js.map +1 -0
- package/dist/workflows/execute-from-execution.d.ts +32 -0
- package/dist/workflows/execute-from-execution.js +71 -0
- package/dist/workflows/execute-from-execution.js.map +1 -0
- package/dist/workflows/execute-serverless-workflow.d.ts +32 -0
- package/dist/workflows/execute-serverless-workflow.js +36 -0
- package/dist/workflows/execute-serverless-workflow.js.map +1 -0
- package/dist/workflows/human-input-orchestrator.d.ts +19 -0
- package/dist/workflows/human-input-orchestrator.js +59 -0
- package/dist/workflows/human-input-orchestrator.js.map +1 -0
- package/dist/workflows/index.d.ts +22 -0
- package/dist/workflows/index.js +23 -0
- package/dist/workflows/index.js.map +1 -0
- package/dist/workflows/listen-orchestrator.d.ts +29 -0
- package/dist/workflows/listen-orchestrator.js +143 -0
- package/dist/workflows/listen-orchestrator.js.map +1 -0
- package/dist/workflows/metrics-sink.d.ts +33 -0
- package/dist/workflows/metrics-sink.js +21 -0
- package/dist/workflows/metrics-sink.js.map +1 -0
- package/dist/workflows/run-orchestrator.d.ts +15 -0
- package/dist/workflows/run-orchestrator.js +27 -0
- package/dist/workflows/run-orchestrator.js.map +1 -0
- package/dist/workflows/types.d.ts +46 -0
- package/dist/workflows/types.js +15 -0
- package/dist/workflows/types.js.map +1 -0
- package/dist/workflows/workflow-signals.d.ts +29 -0
- package/dist/workflows/workflow-signals.js +46 -0
- package/dist/workflows/workflow-signals.js.map +1 -0
- package/package.json +108 -0
- package/src/__test-utils__/__tests__/replay-fetch.test.ts +155 -0
- package/src/__test-utils__/mock-client.ts +44 -0
- package/src/__test-utils__/mock-workspace.ts +28 -0
- package/src/__test-utils__/proto-helpers.ts +41 -0
- package/src/__test-utils__/replay-fetch.ts +523 -0
- package/src/__tests__/bootstrap.test.ts +221 -0
- package/src/__tests__/claimcheck-codec.test.ts +257 -0
- package/src/__tests__/config.test.ts +150 -0
- package/src/__tests__/deterministic-eval-llm.test.ts +269 -0
- package/src/__tests__/deterministic-mcp-hitl.test.ts +405 -0
- package/src/__tests__/golden-e2e.test.ts +250 -0
- package/src/__tests__/ipc-protocol-fixtures.test.ts +66 -0
- package/src/__tests__/ipc-protocol.test.ts +32 -0
- package/src/__tests__/otel-metrics.test.ts +40 -0
- package/src/__tests__/runner-manager.test.ts +55 -0
- package/src/__tests__/runner-token-coordinator.test.ts +166 -0
- package/src/__tests__/runner.test.ts +182 -0
- package/src/__tests__/worker.test.ts +18 -0
- package/src/activities/__tests__/call-agent-contracts.test.ts +483 -0
- package/src/activities/__tests__/call-agent.test.ts +263 -0
- package/src/activities/__tests__/call-function.test.ts +47 -0
- package/src/activities/__tests__/call-grpc.test.ts +39 -0
- package/src/activities/__tests__/call-http.test.ts +288 -0
- package/src/activities/__tests__/call-llm.test.ts +301 -0
- package/src/activities/__tests__/classify-tool-approvals.test.ts +430 -0
- package/src/activities/__tests__/discover-mcp-server.test.ts +641 -0
- package/src/activities/__tests__/ensure-thread.test.ts +96 -0
- package/src/activities/__tests__/error-classifier.test.ts +372 -0
- package/src/activities/__tests__/evaluate-expressions.test.ts +114 -0
- package/src/activities/__tests__/hydrate-workflow-execution.test.ts +321 -0
- package/src/activities/__tests__/notification.test.ts +151 -0
- package/src/activities/__tests__/workflow-event-activities.test.ts +664 -0
- package/src/activities/call-agent-status.ts +130 -0
- package/src/activities/call-agent.ts +302 -0
- package/src/activities/call-eval.ts +333 -0
- package/src/activities/call-function.ts +73 -0
- package/src/activities/call-grpc.ts +140 -0
- package/src/activities/call-http.ts +185 -0
- package/src/activities/call-llm.ts +379 -0
- package/src/activities/call-transform.ts +54 -0
- package/src/activities/call-validate.ts +223 -0
- package/src/activities/classify-tool-approvals.ts +319 -0
- package/src/activities/discover-mcp-server.ts +411 -0
- package/src/activities/emit-event.ts +195 -0
- package/src/activities/ensure-thread.ts +45 -0
- package/src/activities/evaluate-expressions.ts +47 -0
- package/src/activities/execute-cursor/__tests__/approval-gate.test.ts +188 -0
- package/src/activities/execute-cursor/__tests__/build-prompt.test.ts +111 -0
- package/src/activities/execute-cursor/__tests__/cursor-baseurl-routing.test.ts +86 -0
- package/src/activities/execute-cursor/__tests__/cursor-fetch-interceptor-bypass.test.ts +64 -0
- package/src/activities/execute-cursor/__tests__/cursor-mode.test.ts +95 -0
- package/src/activities/execute-cursor/__tests__/cursor-sdk-auth-smoke.test.ts +90 -0
- package/src/activities/execute-cursor/__tests__/delta-enricher.test.ts +242 -0
- package/src/activities/execute-cursor/__tests__/error-classifier-introspection.test.ts +156 -0
- package/src/activities/execute-cursor/__tests__/fetch-interceptor.test.ts +211 -0
- package/src/activities/execute-cursor/__tests__/hitl-ledger.test.ts +298 -0
- package/src/activities/execute-cursor/__tests__/http2-interceptor.test.ts +360 -0
- package/src/activities/execute-cursor/__tests__/message-translator.test.ts +657 -0
- package/src/activities/execute-cursor/__tests__/model-pricing.test.ts +92 -0
- package/src/activities/execute-cursor/__tests__/prompt-builder-delegation.test.ts +101 -0
- package/src/activities/execute-cursor/__tests__/runner-error-regressions.test.ts +144 -0
- package/src/activities/execute-cursor/__tests__/session-lifecycle.test.ts +65 -0
- package/src/activities/execute-cursor/__tests__/skill-resolver.test.ts +265 -0
- package/src/activities/execute-cursor/__tests__/subagent-config.test.ts +107 -0
- package/src/activities/execute-cursor/__tests__/todo-tracker.test.ts +498 -0
- package/src/activities/execute-cursor/__tests__/workspace-provision.test.ts +283 -0
- package/src/activities/execute-cursor/approval-policy.ts +224 -0
- package/src/activities/execute-cursor/approval-state.ts +311 -0
- package/src/activities/execute-cursor/attachment-resolver.ts +78 -0
- package/src/activities/execute-cursor/blueprint-resolver.ts +234 -0
- package/src/activities/execute-cursor/connect-backfill.ts +49 -0
- package/src/activities/execute-cursor/cursor-event-recorder.ts +83 -0
- package/src/activities/execute-cursor/cursor-mode.ts +42 -0
- package/src/activities/execute-cursor/delta-enricher.ts +307 -0
- package/src/activities/execute-cursor/env-resolver.ts +64 -0
- package/src/activities/execute-cursor/error-classifier.ts +247 -0
- package/src/activities/execute-cursor/fetch-interceptor.ts +382 -0
- package/src/activities/execute-cursor/hitl-diagnostics.ts +82 -0
- package/src/activities/execute-cursor/hook-script.ts +159 -0
- package/src/activities/execute-cursor/http2-interceptor.ts +253 -0
- package/src/activities/execute-cursor/index.ts +1439 -0
- package/src/activities/execute-cursor/mcp-config.ts +66 -0
- package/src/activities/execute-cursor/mcp-resolver.ts +271 -0
- package/src/activities/execute-cursor/message-translator.ts +896 -0
- package/src/activities/execute-cursor/model-pricing-data.ts +167 -0
- package/src/activities/execute-cursor/model-pricing.ts +167 -0
- package/src/activities/execute-cursor/placeholder-resolver.ts +109 -0
- package/src/activities/execute-cursor/prompt-builder.ts +349 -0
- package/src/activities/execute-cursor/rejection-capture.ts +100 -0
- package/src/activities/execute-cursor/session-lifecycle.ts +429 -0
- package/src/activities/execute-cursor/skill-resolver.ts +176 -0
- package/src/activities/execute-cursor/subagent-config.ts +62 -0
- package/src/activities/execute-cursor/todo-tracker.ts +133 -0
- package/src/activities/execute-cursor/usage-accumulator.ts +126 -0
- package/src/activities/execute-cursor/workspace-provision.ts +55 -0
- package/src/activities/execute-cursor/workspace-setup.ts +75 -0
- package/src/activities/execute-deep-agent/__test-utils__/v3-event-fixtures.ts +281 -0
- package/src/activities/execute-deep-agent/__tests__/attachment-injector.test.ts +720 -0
- package/src/activities/execute-deep-agent/__tests__/auto-publish.test.ts +146 -0
- package/src/activities/execute-deep-agent/__tests__/environment.test.ts +103 -0
- package/src/activities/execute-deep-agent/__tests__/event-recorder.test.ts +150 -0
- package/src/activities/execute-deep-agent/__tests__/execution-state-extended.test.ts +150 -0
- package/src/activities/execute-deep-agent/__tests__/execution-state.test.ts +157 -0
- package/src/activities/execute-deep-agent/__tests__/hitl-integration.test.ts +223 -0
- package/src/activities/execute-deep-agent/__tests__/hitl.test.ts +244 -0
- package/src/activities/execute-deep-agent/__tests__/index.test.ts +91 -0
- package/src/activities/execute-deep-agent/__tests__/inline-publisher.test.ts +240 -0
- package/src/activities/execute-deep-agent/__tests__/post-stream.test.ts +112 -0
- package/src/activities/execute-deep-agent/__tests__/prompt-builder.test.ts +208 -0
- package/src/activities/execute-deep-agent/__tests__/status-builder.test.ts +1771 -0
- package/src/activities/execute-deep-agent/__tests__/streaming-scheduler.test.ts +199 -0
- package/src/activities/execute-deep-agent/__tests__/streaming-v3.test.ts +527 -0
- package/src/activities/execute-deep-agent/__tests__/streaming.test.ts +508 -0
- package/src/activities/execute-deep-agent/__tests__/subagent-tracker.test.ts +474 -0
- package/src/activities/execute-deep-agent/__tests__/subagent-transformer.test.ts +734 -0
- package/src/activities/execute-deep-agent/__tests__/subagent-wiring.test.ts +71 -0
- package/src/activities/execute-deep-agent/__tests__/summarization-verification.test.ts +323 -0
- package/src/activities/execute-deep-agent/__tests__/v3-event-recorder.test.ts +186 -0
- package/src/activities/execute-deep-agent/__tests__/v3-protocol-normalizer.test.ts +324 -0
- package/src/activities/execute-deep-agent/__tests__/v3-status-builder.test.ts +504 -0
- package/src/activities/execute-deep-agent/__tests__/writeback-coordinator.test.ts +399 -0
- package/src/activities/execute-deep-agent/attachment-injector.ts +470 -0
- package/src/activities/execute-deep-agent/auto-publish.ts +80 -0
- package/src/activities/execute-deep-agent/environment.ts +67 -0
- package/src/activities/execute-deep-agent/event-recorder.ts +95 -0
- package/src/activities/execute-deep-agent/execution-state.ts +87 -0
- package/src/activities/execute-deep-agent/execution-status-writer.ts +19 -0
- package/src/activities/execute-deep-agent/hitl.ts +221 -0
- package/src/activities/execute-deep-agent/index.ts +342 -0
- package/src/activities/execute-deep-agent/inline-publisher.ts +134 -0
- package/src/activities/execute-deep-agent/post-stream.ts +109 -0
- package/src/activities/execute-deep-agent/prompt-builder.ts +264 -0
- package/src/activities/execute-deep-agent/setup.ts +599 -0
- package/src/activities/execute-deep-agent/status-builder-shared.ts +136 -0
- package/src/activities/execute-deep-agent/status-builder.ts +412 -0
- package/src/activities/execute-deep-agent/streaming-scheduler.ts +159 -0
- package/src/activities/execute-deep-agent/streaming-side-effects.ts +89 -0
- package/src/activities/execute-deep-agent/streaming-terminal.ts +96 -0
- package/src/activities/execute-deep-agent/streaming-v3.ts +272 -0
- package/src/activities/execute-deep-agent/streaming.ts +303 -0
- package/src/activities/execute-deep-agent/subagent-tracker.ts +445 -0
- package/src/activities/execute-deep-agent/subagent-transformer.ts +648 -0
- package/src/activities/execute-deep-agent/subagent-wiring.ts +56 -0
- package/src/activities/execute-deep-agent/v3-event-recorder.ts +111 -0
- package/src/activities/execute-deep-agent/v3-events.ts +153 -0
- package/src/activities/execute-deep-agent/v3-protocol-normalizer.ts +264 -0
- package/src/activities/execute-deep-agent/v3-status-builder.ts +490 -0
- package/src/activities/execute-deep-agent/writeback-coordinator.ts +420 -0
- package/src/activities/hydrate-workflow-execution.ts +306 -0
- package/src/activities/notification.ts +71 -0
- package/src/activities/promote-task-output.ts +126 -0
- package/src/activities/run-command.ts +148 -0
- package/src/activities/workflow-event-activities.ts +481 -0
- package/src/bootstrap.ts +173 -0
- package/src/budget/__tests__/tracker.test.ts +293 -0
- package/src/budget/index.ts +9 -0
- package/src/budget/tracker.ts +171 -0
- package/src/claimcheck/compressor.ts +9 -0
- package/src/claimcheck/config.ts +20 -0
- package/src/claimcheck/index.ts +3 -0
- package/src/claimcheck/payload-codec.ts +107 -0
- package/src/client/__tests__/server-contracts.test.ts +149 -0
- package/src/client/__tests__/stigmer-client.test.ts +142 -0
- package/src/client/server-contracts.ts +125 -0
- package/src/client/stigmer-client.ts +339 -0
- package/src/config.ts +185 -0
- package/src/idle-watchdog.ts +28 -0
- package/src/index.ts +48 -0
- package/src/interceptors/workflow-metrics-sink.ts +56 -0
- package/src/ipc-protocol-fixtures.ts +117 -0
- package/src/ipc-protocol.ts +113 -0
- package/src/main.ts +324 -0
- package/src/middleware/__tests__/approval-gate.test.ts +231 -0
- package/src/middleware/__tests__/cost-cap.test.ts +192 -0
- package/src/middleware/__tests__/error-hints.test.ts +90 -0
- package/src/middleware/__tests__/execution-budget.test.ts +138 -0
- package/src/middleware/__tests__/graceful-stop.test.ts +105 -0
- package/src/middleware/__tests__/loop-detection.test.ts +137 -0
- package/src/middleware/__tests__/otel-spans.test.ts +89 -0
- package/src/middleware/__tests__/think-tool.test.ts +26 -0
- package/src/middleware/__tests__/tool-truncation.test.ts +112 -0
- package/src/middleware/approval-gate.ts +179 -0
- package/src/middleware/cost-cap.ts +213 -0
- package/src/middleware/error-hints.ts +136 -0
- package/src/middleware/execution-budget.ts +176 -0
- package/src/middleware/graceful-stop.ts +86 -0
- package/src/middleware/index.ts +70 -0
- package/src/middleware/loop-detection.ts +192 -0
- package/src/middleware/otel-spans.ts +205 -0
- package/src/middleware/think-tool.ts +38 -0
- package/src/middleware/tool-truncation.ts +94 -0
- package/src/middleware/types.ts +114 -0
- package/src/notification/__tests__/provider.test.ts +85 -0
- package/src/notification/__tests__/webhook.test.ts +127 -0
- package/src/notification/index.ts +15 -0
- package/src/notification/provider.ts +52 -0
- package/src/notification/webhook.ts +61 -0
- package/src/otel-metrics.ts +73 -0
- package/src/otel.ts +194 -0
- package/src/runner-manager.ts +652 -0
- package/src/runner-token-coordinator.ts +135 -0
- package/src/runner.ts +380 -0
- package/src/shared/__tests__/approval-policy.test.ts +256 -0
- package/src/shared/__tests__/artifact-storage-extended.test.ts +208 -0
- package/src/shared/__tests__/artifact-storage.test.ts +365 -0
- package/src/shared/__tests__/connect-backfill.test.ts +346 -0
- package/src/shared/__tests__/extract-json.test.ts +153 -0
- package/src/shared/__tests__/grpc-retry-extended.test.ts +176 -0
- package/src/shared/__tests__/grpc-retry.test.ts +172 -0
- package/src/shared/__tests__/json-schema-to-zod.test.ts +227 -0
- package/src/shared/__tests__/llm-proxy.test.ts +179 -0
- package/src/shared/__tests__/mcp-manager.test.ts +154 -0
- package/src/shared/__tests__/model-pricing.test.ts +85 -0
- package/src/shared/__tests__/model-registry.test.ts +197 -0
- package/src/shared/__tests__/placeholder-resolver.test.ts +210 -0
- package/src/shared/__tests__/plan-artifact.test.ts +142 -0
- package/src/shared/__tests__/skill-relevance.test.ts +292 -0
- package/src/shared/__tests__/skill-writer.test.ts +349 -0
- package/src/shared/__tests__/status.test.ts +142 -0
- package/src/shared/__tests__/subagent-gate.test.ts +112 -0
- package/src/shared/__tests__/tool-kind.test.ts +58 -0
- package/src/shared/__tests__/zip-extract.test.ts +204 -0
- package/src/shared/approval-policy.ts +146 -0
- package/src/shared/artifact-storage.ts +207 -0
- package/src/shared/checkpointer/__tests__/factory.test.ts +42 -0
- package/src/shared/checkpointer/__tests__/http-saver.test.ts +176 -0
- package/src/shared/checkpointer/factory.ts +73 -0
- package/src/shared/checkpointer/http-saver.ts +349 -0
- package/src/shared/checkpointer/types.ts +12 -0
- package/src/shared/connect-backfill.ts +162 -0
- package/src/shared/extract-json.ts +153 -0
- package/src/shared/grpc-retry.ts +113 -0
- package/src/shared/heartbeat.ts +70 -0
- package/src/shared/json-schema-to-zod.ts +53 -0
- package/src/shared/llm-proxy.ts +138 -0
- package/src/shared/mcp-manager.ts +150 -0
- package/src/shared/mcp-resolver.ts +150 -0
- package/src/shared/model-pricing-data.ts +109 -0
- package/src/shared/model-pricing.ts +81 -0
- package/src/shared/model-registry.ts +214 -0
- package/src/shared/placeholder-resolver.ts +102 -0
- package/src/shared/plan-artifact.ts +120 -0
- package/src/shared/skill-relevance.ts +222 -0
- package/src/shared/skill-writer.ts +300 -0
- package/src/shared/status.ts +94 -0
- package/src/shared/subagent-gate.ts +117 -0
- package/src/shared/tool-kind.ts +91 -0
- package/src/shared/workspace/__tests__/file-tree.test.ts +210 -0
- package/src/shared/workspace/__tests__/git-source.test.ts +423 -0
- package/src/shared/workspace/__tests__/local-backend-platform.test.ts +259 -0
- package/src/shared/workspace/__tests__/local-backend.test.ts +154 -0
- package/src/shared/workspace/__tests__/platform-mount.test.ts +378 -0
- package/src/shared/workspace/__tests__/provisioner.test.ts +145 -0
- package/src/shared/workspace/file-tree.ts +116 -0
- package/src/shared/workspace/local-backend.ts +140 -0
- package/src/shared/workspace/platform-dir.ts +38 -0
- package/src/shared/workspace/platform-mount.ts +190 -0
- package/src/shared/workspace/provisioner.ts +150 -0
- package/src/shared/workspace/sources/empty.ts +20 -0
- package/src/shared/workspace/sources/git.ts +285 -0
- package/src/shared/workspace/sources/local-path.ts +89 -0
- package/src/shared/workspace/types.ts +69 -0
- package/src/shared/zip-extract.ts +193 -0
- package/src/worker.ts +98 -0
- package/src/workflow-engine/__tests__/do-executor-recovery.test.ts +382 -0
- package/src/workflow-engine/__tests__/do-executor.test.ts +963 -0
- package/src/workflow-engine/__tests__/errors.test.ts +174 -0
- package/src/workflow-engine/__tests__/expression.test.ts +776 -0
- package/src/workflow-engine/__tests__/for.test.ts +575 -0
- package/src/workflow-engine/__tests__/fork.test.ts +838 -0
- package/src/workflow-engine/__tests__/golden-execution.test.ts +1085 -0
- package/src/workflow-engine/__tests__/jq-wasm-spike.test.ts +90 -0
- package/src/workflow-engine/__tests__/loader.test.ts +1393 -0
- package/src/workflow-engine/__tests__/pause-resume.test.ts +267 -0
- package/src/workflow-engine/__tests__/recovery.test.ts +115 -0
- package/src/workflow-engine/__tests__/resolve.test.ts +432 -0
- package/src/workflow-engine/__tests__/retry.test.ts +306 -0
- package/src/workflow-engine/__tests__/state.test.ts +174 -0
- package/src/workflow-engine/__tests__/task-status-accumulator.test.ts +373 -0
- package/src/workflow-engine/__tests__/tasks/call-agent-output.test.ts +120 -0
- package/src/workflow-engine/__tests__/tasks/call-agent.test.ts +816 -0
- package/src/workflow-engine/__tests__/tasks/call-function.test.ts +205 -0
- package/src/workflow-engine/__tests__/tasks/call-grpc.test.ts +133 -0
- package/src/workflow-engine/__tests__/tasks/call-http.test.ts +150 -0
- package/src/workflow-engine/__tests__/tasks/emit-event.test.ts +322 -0
- package/src/workflow-engine/__tests__/tasks/human-input.test.ts +416 -0
- package/src/workflow-engine/__tests__/tasks/listen.test.ts +422 -0
- package/src/workflow-engine/__tests__/tasks/raise.test.ts +166 -0
- package/src/workflow-engine/__tests__/tasks/run.test.ts +272 -0
- package/src/workflow-engine/__tests__/tasks/set.test.ts +127 -0
- package/src/workflow-engine/__tests__/tasks/switch.test.ts +277 -0
- package/src/workflow-engine/__tests__/tasks/try.test.ts +590 -0
- package/src/workflow-engine/__tests__/tasks/wait.test.ts +173 -0
- package/src/workflow-engine/clone.ts +18 -0
- package/src/workflow-engine/do-executor.ts +569 -0
- package/src/workflow-engine/duration.ts +22 -0
- package/src/workflow-engine/error-utils.ts +97 -0
- package/src/workflow-engine/errors.ts +130 -0
- package/src/workflow-engine/expression-utils.ts +129 -0
- package/src/workflow-engine/expression.ts +430 -0
- package/src/workflow-engine/loader.ts +524 -0
- package/src/workflow-engine/recovery.ts +80 -0
- package/src/workflow-engine/resolve.ts +342 -0
- package/src/workflow-engine/retry.ts +109 -0
- package/src/workflow-engine/state.ts +56 -0
- package/src/workflow-engine/task-factory.ts +160 -0
- package/src/workflow-engine/task-status-accumulator.ts +204 -0
- package/src/workflow-engine/tasks/call-agent-output.ts +132 -0
- package/src/workflow-engine/tasks/call-agent.ts +221 -0
- package/src/workflow-engine/tasks/call-function.ts +107 -0
- package/src/workflow-engine/tasks/call-grpc.ts +47 -0
- package/src/workflow-engine/tasks/call-http.ts +51 -0
- package/src/workflow-engine/tasks/for.ts +244 -0
- package/src/workflow-engine/tasks/fork.ts +228 -0
- package/src/workflow-engine/tasks/human-input.ts +147 -0
- package/src/workflow-engine/tasks/listen.ts +166 -0
- package/src/workflow-engine/tasks/raise.ts +81 -0
- package/src/workflow-engine/tasks/run.ts +142 -0
- package/src/workflow-engine/tasks/set.ts +47 -0
- package/src/workflow-engine/tasks/switch.ts +102 -0
- package/src/workflow-engine/tasks/try.ts +274 -0
- package/src/workflow-engine/tasks/wait.ts +53 -0
- package/src/workflow-engine/types.ts +911 -0
- package/src/workflows/__tests__/connect-mcp-server.test.ts +359 -0
- package/src/workflows/__tests__/execute-serverless-workflow.test.ts +277 -0
- package/src/workflows/call-agent-orchestrator.ts +283 -0
- package/src/workflows/connect-mcp-server.ts +152 -0
- package/src/workflows/engine-core.ts +406 -0
- package/src/workflows/execute-from-execution.ts +101 -0
- package/src/workflows/execute-serverless-workflow.ts +60 -0
- package/src/workflows/human-input-orchestrator.ts +76 -0
- package/src/workflows/index.ts +32 -0
- package/src/workflows/listen-orchestrator.ts +200 -0
- package/src/workflows/metrics-sink.ts +48 -0
- package/src/workflows/run-orchestrator.ts +34 -0
- package/src/workflows/types.ts +64 -0
- package/src/workflows/workflow-signals.ts +55 -0
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Loop detection middleware for autonomous agents.
|
|
3
|
+
*
|
|
4
|
+
* Detects and prevents infinite loops by tracking tool invocations:
|
|
5
|
+
*
|
|
6
|
+
* afterModel — inspects AIMessage tool_calls, tracks signatures
|
|
7
|
+
* (tool name + param hash) in a sliding window, injects
|
|
8
|
+
* SystemMessage interventions when repetitive patterns are detected.
|
|
9
|
+
*
|
|
10
|
+
* wrapToolCall — when the total-repetition threshold has been exceeded,
|
|
11
|
+
* short-circuits tool execution with a ToolMessage halt notice.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { createHash } from "node:crypto";
|
|
15
|
+
import { ToolMessage, SystemMessage } from "@langchain/core/messages";
|
|
16
|
+
import type { AIMessage } from "@langchain/core/messages";
|
|
17
|
+
import type { StigmerMiddleware, LoopDetectionConfig } from "./types.js";
|
|
18
|
+
|
|
19
|
+
const DEFAULTS: LoopDetectionConfig = {
|
|
20
|
+
historySize: 20,
|
|
21
|
+
consecutiveThreshold: 7,
|
|
22
|
+
totalThreshold: 20,
|
|
23
|
+
enabled: true,
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
type Signature = readonly [name: string, hash: string];
|
|
27
|
+
|
|
28
|
+
function hashParams(params: Record<string, unknown>): string {
|
|
29
|
+
try {
|
|
30
|
+
const normalized = JSON.stringify(params, Object.keys(params).sort(), undefined);
|
|
31
|
+
return createHash("sha256").update(normalized).digest("hex").slice(0, 16);
|
|
32
|
+
} catch {
|
|
33
|
+
return "error";
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function detectConsecutive(history: Signature[]): { isLoop: boolean; toolName: string; count: number } {
|
|
38
|
+
if (history.length === 0) return { isLoop: false, toolName: "", count: 0 };
|
|
39
|
+
|
|
40
|
+
const [recentName, recentHash] = history[history.length - 1];
|
|
41
|
+
let count = 1;
|
|
42
|
+
|
|
43
|
+
for (let i = history.length - 2; i >= 0; i--) {
|
|
44
|
+
if (history[i][0] === recentName && history[i][1] === recentHash) {
|
|
45
|
+
count++;
|
|
46
|
+
} else {
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return { isLoop: false, toolName: recentName, count };
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function detectTotal(history: Signature[]): { isExcessive: boolean; toolName: string; count: number } {
|
|
55
|
+
if (history.length === 0) return { isExcessive: false, toolName: "", count: 0 };
|
|
56
|
+
|
|
57
|
+
const [recentName, recentHash] = history[history.length - 1];
|
|
58
|
+
let count = 0;
|
|
59
|
+
for (const [name, hash] of history) {
|
|
60
|
+
if (name === recentName && hash === recentHash) count++;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return { isExcessive: false, toolName: recentName, count };
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function buildIntervention(
|
|
67
|
+
toolName: string,
|
|
68
|
+
consecutiveCount: number,
|
|
69
|
+
totalCount: number,
|
|
70
|
+
isFinal: boolean,
|
|
71
|
+
): SystemMessage {
|
|
72
|
+
if (isFinal) {
|
|
73
|
+
return new SystemMessage({
|
|
74
|
+
content:
|
|
75
|
+
`\u26a0\ufe0f LOOP DETECTED: Critical repetition limit reached.\n\n` +
|
|
76
|
+
`You have called '${toolName}' ${totalCount} times with similar parameters. ` +
|
|
77
|
+
`This indicates you are stuck in a loop and unable to make progress.\n\n` +
|
|
78
|
+
`**You MUST conclude your work now:**\n` +
|
|
79
|
+
`1. Summarize what you have learned so far\n` +
|
|
80
|
+
`2. Explain the obstacle preventing progress\n` +
|
|
81
|
+
`3. Provide your best assessment based on available information\n` +
|
|
82
|
+
`4. Do NOT call '${toolName}' again\n\n` +
|
|
83
|
+
`Conclude gracefully with the information you have gathered.`,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return new SystemMessage({
|
|
88
|
+
content:
|
|
89
|
+
`\u26a0\ufe0f LOOP WARNING: Repetitive pattern detected.\n\n` +
|
|
90
|
+
`You have called '${toolName}' ${consecutiveCount} times in a row. ` +
|
|
91
|
+
`This suggests you may be stuck or approaching the problem incorrectly.\n\n` +
|
|
92
|
+
`**Recommended actions:**\n` +
|
|
93
|
+
`1. Try a completely different approach or tool\n` +
|
|
94
|
+
`2. Re-examine your assumptions about the problem\n` +
|
|
95
|
+
`3. Consider if you have enough information to conclude\n` +
|
|
96
|
+
`4. Avoid calling '${toolName}' again unless absolutely necessary\n\n` +
|
|
97
|
+
`Adapt your strategy to make progress.`,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export function createLoopDetectionMiddleware(
|
|
102
|
+
config: Partial<LoopDetectionConfig> = {},
|
|
103
|
+
): StigmerMiddleware {
|
|
104
|
+
const cfg = { ...DEFAULTS, ...config };
|
|
105
|
+
let history: Signature[] = [];
|
|
106
|
+
let interventionCount = 0;
|
|
107
|
+
let stopped = false;
|
|
108
|
+
|
|
109
|
+
return {
|
|
110
|
+
name: "LoopDetectionMiddleware",
|
|
111
|
+
|
|
112
|
+
beforeAgent() {
|
|
113
|
+
history = [];
|
|
114
|
+
interventionCount = 0;
|
|
115
|
+
stopped = false;
|
|
116
|
+
},
|
|
117
|
+
|
|
118
|
+
afterModel(state) {
|
|
119
|
+
if (!cfg.enabled || stopped) return;
|
|
120
|
+
|
|
121
|
+
const messages = (state.messages ?? []) as unknown[];
|
|
122
|
+
let lastAi: AIMessage | null = null;
|
|
123
|
+
for (let i = messages.length - 1; i >= 0; i--) {
|
|
124
|
+
const msg = messages[i] as { _getType?: () => string; tool_calls?: unknown[] };
|
|
125
|
+
if (msg?._getType?.() === "ai") {
|
|
126
|
+
lastAi = msg as unknown as AIMessage;
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
if (!lastAi) return;
|
|
132
|
+
const toolCalls = (lastAi as unknown as { tool_calls?: Array<{ name?: string; args?: Record<string, unknown> }> }).tool_calls;
|
|
133
|
+
if (!toolCalls || toolCalls.length === 0) return;
|
|
134
|
+
|
|
135
|
+
for (const tc of toolCalls) {
|
|
136
|
+
const name = tc.name ?? "unknown";
|
|
137
|
+
const args = tc.args ?? {};
|
|
138
|
+
const paramHash = hashParams(args);
|
|
139
|
+
|
|
140
|
+
history.push([name, paramHash]);
|
|
141
|
+
if (history.length > cfg.historySize) {
|
|
142
|
+
history = history.slice(-cfg.historySize);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
const { toolName: consToolName, count: consCount } = detectConsecutive(history);
|
|
146
|
+
const { toolName: totalToolName, count: totalCount } = detectTotal(history);
|
|
147
|
+
|
|
148
|
+
if (totalCount >= cfg.totalThreshold) {
|
|
149
|
+
const intervention = buildIntervention(totalToolName, consCount, totalCount, true);
|
|
150
|
+
interventionCount++;
|
|
151
|
+
stopped = true;
|
|
152
|
+
console.warn(
|
|
153
|
+
`[LoopDetection] STOP: ${totalToolName} called ${totalCount} times (threshold: ${cfg.totalThreshold})`,
|
|
154
|
+
);
|
|
155
|
+
return { messages: [intervention] };
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
if (consCount >= cfg.consecutiveThreshold && interventionCount === 0) {
|
|
159
|
+
const intervention = buildIntervention(consToolName, consCount, totalCount, false);
|
|
160
|
+
interventionCount++;
|
|
161
|
+
console.warn(
|
|
162
|
+
`[LoopDetection] WARNING: ${consToolName} called ${consCount} times in a row (threshold: ${cfg.consecutiveThreshold})`,
|
|
163
|
+
);
|
|
164
|
+
return { messages: [intervention] };
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
},
|
|
168
|
+
|
|
169
|
+
async wrapToolCall(request, handler) {
|
|
170
|
+
if (stopped) {
|
|
171
|
+
return new ToolMessage({
|
|
172
|
+
content:
|
|
173
|
+
"[Loop detected: tool execution halted by loop detection middleware. " +
|
|
174
|
+
"Conclude your work with the information you have gathered.]",
|
|
175
|
+
tool_call_id: request.toolCall.id,
|
|
176
|
+
name: request.toolCall.name,
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
return handler(request);
|
|
180
|
+
},
|
|
181
|
+
|
|
182
|
+
afterAgent() {
|
|
183
|
+
if (history.length > 0) {
|
|
184
|
+
const unique = new Set(history.map(([n, h]) => `${n}:${h}`)).size;
|
|
185
|
+
console.log(
|
|
186
|
+
`[LoopDetection] Summary: ${history.length} tool calls tracked, ` +
|
|
187
|
+
`${unique} unique signatures, ${interventionCount} interventions, stopped=${stopped}`,
|
|
188
|
+
);
|
|
189
|
+
}
|
|
190
|
+
},
|
|
191
|
+
};
|
|
192
|
+
}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenTelemetry spans and metrics middleware for deep-agent execution.
|
|
3
|
+
*
|
|
4
|
+
* Creates stigmer.llm.call and stigmer.mcp.tool_call spans with
|
|
5
|
+
* attributes matching the Go workflow-runner schema (pkg/otel/spans.go).
|
|
6
|
+
* Also records metrics (histograms + counters) for aggregate dashboards.
|
|
7
|
+
*
|
|
8
|
+
* Graceful no-op when no TracerProvider/MeterProvider is configured.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type { StigmerMiddleware, OtelSpansConfig } from "./types.js";
|
|
12
|
+
|
|
13
|
+
const SPAN_LLM_CALL = "stigmer.llm.call";
|
|
14
|
+
const SPAN_MCP_TOOL = "stigmer.mcp.tool_call";
|
|
15
|
+
|
|
16
|
+
const ATTR_LLM_PROVIDER = "stigmer.llm.provider";
|
|
17
|
+
const ATTR_LLM_MODEL = "stigmer.llm.model";
|
|
18
|
+
const ATTR_LLM_INPUT_TOKENS = "stigmer.llm.input_tokens";
|
|
19
|
+
const ATTR_LLM_OUTPUT_TOKENS = "stigmer.llm.output_tokens";
|
|
20
|
+
const ATTR_MCP_TOOL_NAME = "stigmer.mcp.tool_name";
|
|
21
|
+
const ATTR_MCP_SERVER_NAME = "stigmer.mcp.server_name";
|
|
22
|
+
|
|
23
|
+
const METRIC_LLM_CALL_DURATION = "stigmer.llm.call.duration";
|
|
24
|
+
const METRIC_LLM_CALL_COUNT = "stigmer.llm.call.count";
|
|
25
|
+
const METRIC_LLM_TOKENS_INPUT = "stigmer.llm.tokens.input";
|
|
26
|
+
const METRIC_LLM_TOKENS_OUTPUT = "stigmer.llm.tokens.output";
|
|
27
|
+
const METRIC_MCP_TOOL_CALL_DURATION = "stigmer.mcp.tool_call.duration";
|
|
28
|
+
const METRIC_MCP_TOOL_CALL_COUNT = "stigmer.mcp.tool_call.count";
|
|
29
|
+
|
|
30
|
+
const TRACER_NAME = "stigmer-runner";
|
|
31
|
+
const METER_NAME = "stigmer-runner";
|
|
32
|
+
|
|
33
|
+
function inferProvider(modelName: string): string {
|
|
34
|
+
const lower = modelName.toLowerCase();
|
|
35
|
+
if (lower.startsWith("claude")) return "anthropic";
|
|
36
|
+
if (lower.startsWith("gpt") || lower.startsWith("o1") || lower.startsWith("o3") || lower.startsWith("o4")) return "openai";
|
|
37
|
+
if (["qwen", "llama", "deepseek", "codellama", "mistral", "phi"].some(p => lower.startsWith(p))) return "ollama";
|
|
38
|
+
return "unknown";
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Lazy OTel accessor. Returns null-object implementations when
|
|
43
|
+
* @opentelemetry/api is not available or no provider is configured.
|
|
44
|
+
*/
|
|
45
|
+
async function getOtel() {
|
|
46
|
+
try {
|
|
47
|
+
const api = await import("@opentelemetry/api");
|
|
48
|
+
return api;
|
|
49
|
+
} catch {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export function createOtelSpansMiddleware(
|
|
55
|
+
config: Partial<OtelSpansConfig> = {},
|
|
56
|
+
): StigmerMiddleware {
|
|
57
|
+
const toolServerMap = config.toolServerMap ?? new Map();
|
|
58
|
+
|
|
59
|
+
// Metric instruments are created lazily on first use
|
|
60
|
+
let metricsInitialized = false;
|
|
61
|
+
let llmCallDuration: { record(v: number, attrs?: Record<string, unknown>): void } | null = null;
|
|
62
|
+
let llmCallCount: { add(v: number, attrs?: Record<string, unknown>): void } | null = null;
|
|
63
|
+
let llmTokensInput: { add(v: number, attrs?: Record<string, unknown>): void } | null = null;
|
|
64
|
+
let llmTokensOutput: { add(v: number, attrs?: Record<string, unknown>): void } | null = null;
|
|
65
|
+
let mcpToolDuration: { record(v: number, attrs?: Record<string, unknown>): void } | null = null;
|
|
66
|
+
let mcpToolCount: { add(v: number, attrs?: Record<string, unknown>): void } | null = null;
|
|
67
|
+
|
|
68
|
+
async function ensureMetrics(): Promise<void> {
|
|
69
|
+
if (metricsInitialized) return;
|
|
70
|
+
metricsInitialized = true;
|
|
71
|
+
|
|
72
|
+
const api = await getOtel();
|
|
73
|
+
if (!api) return;
|
|
74
|
+
|
|
75
|
+
try {
|
|
76
|
+
const meter = api.metrics.getMeter(METER_NAME);
|
|
77
|
+
llmCallDuration = meter.createHistogram(METRIC_LLM_CALL_DURATION, {
|
|
78
|
+
unit: "ms",
|
|
79
|
+
description: "Duration of LLM API calls in milliseconds",
|
|
80
|
+
});
|
|
81
|
+
llmCallCount = meter.createCounter(METRIC_LLM_CALL_COUNT, {
|
|
82
|
+
description: "Total number of LLM API calls",
|
|
83
|
+
});
|
|
84
|
+
llmTokensInput = meter.createCounter(METRIC_LLM_TOKENS_INPUT, {
|
|
85
|
+
unit: "{token}",
|
|
86
|
+
description: "Total input tokens consumed across LLM calls",
|
|
87
|
+
});
|
|
88
|
+
llmTokensOutput = meter.createCounter(METRIC_LLM_TOKENS_OUTPUT, {
|
|
89
|
+
unit: "{token}",
|
|
90
|
+
description: "Total output tokens produced across LLM calls",
|
|
91
|
+
});
|
|
92
|
+
mcpToolDuration = meter.createHistogram(METRIC_MCP_TOOL_CALL_DURATION, {
|
|
93
|
+
unit: "ms",
|
|
94
|
+
description: "Duration of MCP tool calls in milliseconds",
|
|
95
|
+
});
|
|
96
|
+
mcpToolCount = meter.createCounter(METRIC_MCP_TOOL_CALL_COUNT, {
|
|
97
|
+
description: "Total number of MCP tool calls",
|
|
98
|
+
});
|
|
99
|
+
} catch {
|
|
100
|
+
// Metrics not available
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return {
|
|
105
|
+
name: "OtelSpansMiddleware",
|
|
106
|
+
|
|
107
|
+
async wrapModelCall(request, handler) {
|
|
108
|
+
const api = await getOtel();
|
|
109
|
+
await ensureMetrics();
|
|
110
|
+
|
|
111
|
+
if (!api) return handler(request);
|
|
112
|
+
|
|
113
|
+
const invocationParams = (request.model as { model?: string; model_name?: string }) ?? {};
|
|
114
|
+
const modelName = invocationParams.model ?? invocationParams.model_name ?? "";
|
|
115
|
+
const provider = inferProvider(modelName);
|
|
116
|
+
|
|
117
|
+
const tracer = api.trace.getTracer(TRACER_NAME);
|
|
118
|
+
const span = tracer.startSpan(SPAN_LLM_CALL, {
|
|
119
|
+
attributes: {
|
|
120
|
+
[ATTR_LLM_PROVIDER]: provider,
|
|
121
|
+
[ATTR_LLM_MODEL]: modelName,
|
|
122
|
+
},
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
const startTime = performance.now();
|
|
126
|
+
try {
|
|
127
|
+
const response = await api.context.with(
|
|
128
|
+
api.trace.setSpan(api.context.active(), span),
|
|
129
|
+
() => handler(request),
|
|
130
|
+
);
|
|
131
|
+
|
|
132
|
+
const elapsedMs = performance.now() - startTime;
|
|
133
|
+
|
|
134
|
+
const usage = (response as unknown as {
|
|
135
|
+
usage_metadata?: {
|
|
136
|
+
input_tokens?: number;
|
|
137
|
+
output_tokens?: number;
|
|
138
|
+
};
|
|
139
|
+
}).usage_metadata;
|
|
140
|
+
|
|
141
|
+
const inputTokens = usage?.input_tokens ?? 0;
|
|
142
|
+
const outputTokens = usage?.output_tokens ?? 0;
|
|
143
|
+
|
|
144
|
+
if (inputTokens) span.setAttribute(ATTR_LLM_INPUT_TOKENS, inputTokens);
|
|
145
|
+
if (outputTokens) span.setAttribute(ATTR_LLM_OUTPUT_TOKENS, outputTokens);
|
|
146
|
+
span.end();
|
|
147
|
+
|
|
148
|
+
const attrs = { [ATTR_LLM_PROVIDER]: provider, [ATTR_LLM_MODEL]: modelName };
|
|
149
|
+
llmCallDuration?.record(elapsedMs, attrs);
|
|
150
|
+
llmCallCount?.add(1, attrs);
|
|
151
|
+
if (inputTokens) llmTokensInput?.add(inputTokens, attrs);
|
|
152
|
+
if (outputTokens) llmTokensOutput?.add(outputTokens, attrs);
|
|
153
|
+
|
|
154
|
+
return response;
|
|
155
|
+
} catch (err) {
|
|
156
|
+
span.setStatus({ code: api.SpanStatusCode.ERROR, message: String(err) });
|
|
157
|
+
if (err instanceof Error) span.recordException(err);
|
|
158
|
+
span.end();
|
|
159
|
+
throw err;
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
|
|
163
|
+
async wrapToolCall(request, handler) {
|
|
164
|
+
const toolName = request.toolCall.name;
|
|
165
|
+
const serverName = toolServerMap.get(toolName);
|
|
166
|
+
|
|
167
|
+
if (!serverName) return handler(request);
|
|
168
|
+
|
|
169
|
+
const api = await getOtel();
|
|
170
|
+
await ensureMetrics();
|
|
171
|
+
|
|
172
|
+
if (!api) return handler(request);
|
|
173
|
+
|
|
174
|
+
const tracer = api.trace.getTracer(TRACER_NAME);
|
|
175
|
+
const span = tracer.startSpan(SPAN_MCP_TOOL, {
|
|
176
|
+
attributes: {
|
|
177
|
+
[ATTR_MCP_TOOL_NAME]: toolName,
|
|
178
|
+
[ATTR_MCP_SERVER_NAME]: serverName,
|
|
179
|
+
},
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
const startTime = performance.now();
|
|
183
|
+
try {
|
|
184
|
+
const result = await api.context.with(
|
|
185
|
+
api.trace.setSpan(api.context.active(), span),
|
|
186
|
+
() => handler(request),
|
|
187
|
+
);
|
|
188
|
+
|
|
189
|
+
const elapsedMs = performance.now() - startTime;
|
|
190
|
+
span.end();
|
|
191
|
+
|
|
192
|
+
const attrs = { [ATTR_MCP_TOOL_NAME]: toolName, [ATTR_MCP_SERVER_NAME]: serverName };
|
|
193
|
+
mcpToolDuration?.record(elapsedMs, attrs);
|
|
194
|
+
mcpToolCount?.add(1, attrs);
|
|
195
|
+
|
|
196
|
+
return result;
|
|
197
|
+
} catch (err) {
|
|
198
|
+
span.setStatus({ code: api.SpanStatusCode.ERROR, message: String(err) });
|
|
199
|
+
if (err instanceof Error) span.recordException(err);
|
|
200
|
+
span.end();
|
|
201
|
+
throw err;
|
|
202
|
+
}
|
|
203
|
+
},
|
|
204
|
+
};
|
|
205
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Think tool for structured agent reasoning.
|
|
3
|
+
*
|
|
4
|
+
* A no-op tool that gives LLMs a dedicated place to reason before acting.
|
|
5
|
+
* The thought is captured as a regular tool-call argument, making it
|
|
6
|
+
* observable through the existing status pipeline (StatusBuilder, gRPC
|
|
7
|
+
* updates, CLI rendering) without any special handling.
|
|
8
|
+
*
|
|
9
|
+
* Follows the Anthropic "think tool" pattern:
|
|
10
|
+
* https://www.anthropic.com/engineering/claude-think-tool
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { tool } from "@langchain/core/tools";
|
|
14
|
+
import { z } from "zod";
|
|
15
|
+
|
|
16
|
+
export function createThinkTool() {
|
|
17
|
+
return tool(
|
|
18
|
+
async (_input: { thought: string }) => "ok",
|
|
19
|
+
{
|
|
20
|
+
name: "think",
|
|
21
|
+
description:
|
|
22
|
+
"Use this tool to think through a problem step-by-step. " +
|
|
23
|
+
"The think tool does not read files, execute commands, or make any changes — " +
|
|
24
|
+
"it simply records your reasoning. Call it when you need to pause and work " +
|
|
25
|
+
"something out before acting.\n\n" +
|
|
26
|
+
"Good times to use think:\n" +
|
|
27
|
+
"- After reading files or tool output, to analyse what you learned\n" +
|
|
28
|
+
"- Before a complex or multi-step operation, to plan your approach\n" +
|
|
29
|
+
"- When you need to choose between several possible strategies\n" +
|
|
30
|
+
"- When debugging — to reason about what might have gone wrong\n\n" +
|
|
31
|
+
"You do NOT need to use think for every step — only when genuine " +
|
|
32
|
+
"reasoning will improve the quality of your next action.",
|
|
33
|
+
schema: z.object({
|
|
34
|
+
thought: z.string().describe("Your reasoning, analysis, or plan."),
|
|
35
|
+
}),
|
|
36
|
+
},
|
|
37
|
+
);
|
|
38
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool result truncation middleware.
|
|
3
|
+
*
|
|
4
|
+
* Prevents any single tool result from consuming an excessive share of
|
|
5
|
+
* the LLM's context window. Applied uniformly to ALL tools via
|
|
6
|
+
* wrapToolCall. When a ToolMessage result exceeds maxChars, the content
|
|
7
|
+
* is prefix-truncated and a marker is appended telling the LLM to
|
|
8
|
+
* request specific sections.
|
|
9
|
+
*
|
|
10
|
+
* Default limit: 30,000 characters (~7,500 tokens).
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import { ToolMessage } from "@langchain/core/messages";
|
|
14
|
+
import type {
|
|
15
|
+
StigmerMiddleware,
|
|
16
|
+
ToolCallRequest,
|
|
17
|
+
ToolTruncationConfig,
|
|
18
|
+
} from "./types.js";
|
|
19
|
+
|
|
20
|
+
const DEFAULT_MAX_CHARS = 30_000;
|
|
21
|
+
|
|
22
|
+
export function createToolTruncationMiddleware(
|
|
23
|
+
config: Partial<ToolTruncationConfig> = {},
|
|
24
|
+
): StigmerMiddleware & { readonly truncationCount: number; readonly totalCharsTruncated: number } {
|
|
25
|
+
const maxChars = config.maxChars ?? DEFAULT_MAX_CHARS;
|
|
26
|
+
if (maxChars <= 0) {
|
|
27
|
+
throw new Error(`maxChars must be positive, got ${maxChars}`);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
let truncationCount = 0;
|
|
31
|
+
let totalCharsTruncated = 0;
|
|
32
|
+
|
|
33
|
+
function buildMarker(originalChars: number): string {
|
|
34
|
+
return (
|
|
35
|
+
`\n\n[truncated — result was ${originalChars.toLocaleString()} chars, ` +
|
|
36
|
+
`exceeded ${maxChars.toLocaleString()} char limit. ` +
|
|
37
|
+
`Ask for specific sections or narrow your query.]`
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const middleware: StigmerMiddleware & { readonly truncationCount: number; readonly totalCharsTruncated: number } = {
|
|
42
|
+
name: "ToolTruncationMiddleware",
|
|
43
|
+
|
|
44
|
+
get truncationCount() { return truncationCount; },
|
|
45
|
+
get totalCharsTruncated() { return totalCharsTruncated; },
|
|
46
|
+
|
|
47
|
+
beforeAgent() {
|
|
48
|
+
truncationCount = 0;
|
|
49
|
+
totalCharsTruncated = 0;
|
|
50
|
+
},
|
|
51
|
+
|
|
52
|
+
async wrapToolCall(request, handler) {
|
|
53
|
+
const result = await handler(request);
|
|
54
|
+
|
|
55
|
+
if (!(result instanceof ToolMessage)) return result;
|
|
56
|
+
|
|
57
|
+
const content = result.content;
|
|
58
|
+
if (typeof content !== "string") return result;
|
|
59
|
+
if (content.length <= maxChars) return result;
|
|
60
|
+
|
|
61
|
+
const originalChars = content.length;
|
|
62
|
+
const charsTruncated = originalChars - maxChars;
|
|
63
|
+
const truncatedContent = content.slice(0, maxChars) + buildMarker(originalChars);
|
|
64
|
+
|
|
65
|
+
truncationCount++;
|
|
66
|
+
totalCharsTruncated += charsTruncated;
|
|
67
|
+
|
|
68
|
+
const toolName = request.toolCall.name;
|
|
69
|
+
console.warn(
|
|
70
|
+
`[TRUNCATED] tool=${toolName} original_chars=${originalChars} ` +
|
|
71
|
+
`limit=${maxChars} chars_truncated=${charsTruncated}`,
|
|
72
|
+
);
|
|
73
|
+
|
|
74
|
+
config.onTruncation?.(toolName, charsTruncated);
|
|
75
|
+
|
|
76
|
+
return new ToolMessage({
|
|
77
|
+
content: truncatedContent,
|
|
78
|
+
tool_call_id: request.toolCall.id,
|
|
79
|
+
name: toolName,
|
|
80
|
+
});
|
|
81
|
+
},
|
|
82
|
+
|
|
83
|
+
afterAgent() {
|
|
84
|
+
if (truncationCount > 0) {
|
|
85
|
+
console.log(
|
|
86
|
+
`[ToolTruncation] Summary: ${truncationCount} results truncated, ` +
|
|
87
|
+
`${totalCharsTruncated} total chars removed (limit=${maxChars})`,
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
return middleware;
|
|
94
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared configuration types for the middleware stack.
|
|
3
|
+
*
|
|
4
|
+
* Each middleware module reads its own slice of MiddlewareStackConfig.
|
|
5
|
+
* The factory in index.ts assembles the config from ExecutionConfig
|
|
6
|
+
* proto fields and passes it to buildMiddlewareStack().
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import type { ToolMessage, SystemMessage, AIMessage } from "@langchain/core/messages";
|
|
10
|
+
import type { Command } from "@langchain/langgraph";
|
|
11
|
+
|
|
12
|
+
export type { ToolMessage, SystemMessage, AIMessage };
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Minimal AgentMiddleware interface matching the langchain JS contract.
|
|
16
|
+
*
|
|
17
|
+
* The canonical type lives in langchain (nested under deepagents), but
|
|
18
|
+
* is not directly importable from our dependency graph. This structural
|
|
19
|
+
* type is wire-compatible — langchain uses structural typing, not
|
|
20
|
+
* nominal, so any object matching this shape is accepted as middleware.
|
|
21
|
+
*/
|
|
22
|
+
export interface StigmerMiddleware {
|
|
23
|
+
readonly name: string;
|
|
24
|
+
beforeAgent?: (state: Record<string, unknown>, runtime: unknown) => unknown;
|
|
25
|
+
afterModel?: (state: Record<string, unknown>, runtime: unknown) => unknown;
|
|
26
|
+
wrapToolCall?: (
|
|
27
|
+
request: ToolCallRequest,
|
|
28
|
+
handler: (request: ToolCallRequest) => Promise<ToolMessage | Command> | ToolMessage | Command,
|
|
29
|
+
) => Promise<ToolMessage | Command> | ToolMessage | Command;
|
|
30
|
+
wrapModelCall?: (
|
|
31
|
+
request: ModelCallRequest,
|
|
32
|
+
handler: (request: ModelCallRequest) => Promise<AIMessage | Command> | AIMessage | Command,
|
|
33
|
+
) => Promise<AIMessage | Command> | AIMessage | Command;
|
|
34
|
+
afterAgent?: (state: Record<string, unknown>, runtime: unknown) => unknown;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Tool call request — the shape passed to wrapToolCall.
|
|
39
|
+
* Matches langchain ToolCallRequest structurally.
|
|
40
|
+
*/
|
|
41
|
+
export interface ToolCallRequest {
|
|
42
|
+
readonly toolCall: {
|
|
43
|
+
readonly id: string;
|
|
44
|
+
readonly name: string;
|
|
45
|
+
readonly args: Record<string, unknown>;
|
|
46
|
+
};
|
|
47
|
+
readonly tool: unknown;
|
|
48
|
+
readonly state: Record<string, unknown> & { messages?: unknown[] };
|
|
49
|
+
readonly runtime: unknown;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Model call request — the shape passed to wrapModelCall.
|
|
54
|
+
* Matches langchain ModelRequest structurally.
|
|
55
|
+
*/
|
|
56
|
+
export interface ModelCallRequest {
|
|
57
|
+
readonly model: unknown;
|
|
58
|
+
readonly messages: unknown[];
|
|
59
|
+
readonly systemPrompt?: string;
|
|
60
|
+
readonly systemMessage?: SystemMessage;
|
|
61
|
+
readonly tools?: unknown[];
|
|
62
|
+
readonly state: Record<string, unknown> & { messages?: unknown[] };
|
|
63
|
+
readonly runtime: unknown;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export interface LoopDetectionConfig {
|
|
67
|
+
readonly historySize: number;
|
|
68
|
+
readonly consecutiveThreshold: number;
|
|
69
|
+
readonly totalThreshold: number;
|
|
70
|
+
readonly enabled: boolean;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export interface ExecutionBudgetConfig {
|
|
74
|
+
readonly recursionLimit: number;
|
|
75
|
+
readonly warningPct: number;
|
|
76
|
+
readonly warningInterval: number | null;
|
|
77
|
+
readonly maxWarnings: number;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export interface ToolTruncationConfig {
|
|
81
|
+
readonly maxChars: number;
|
|
82
|
+
readonly onTruncation?: (toolName: string, charsTruncated: number) => void;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export interface CostCapConfig {
|
|
86
|
+
readonly maxCostUsd: number;
|
|
87
|
+
readonly inputPricePerMillion: number;
|
|
88
|
+
readonly outputPricePerMillion: number;
|
|
89
|
+
readonly cacheReadPricePerMillion: number;
|
|
90
|
+
readonly warningPct: number;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export interface OtelSpansConfig {
|
|
94
|
+
readonly toolServerMap: ReadonlyMap<string, string>;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export interface ApprovalGateConfig {
|
|
98
|
+
readonly policies: ReadonlyMap<string, import("../shared/approval-policy.js").MergedToolPolicy>;
|
|
99
|
+
readonly autoApproveAll: boolean;
|
|
100
|
+
readonly toolServerMap: ReadonlyMap<string, string>;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Top-level configuration for buildMiddlewareStack().
|
|
105
|
+
* All sections are optional — the factory applies sensible defaults.
|
|
106
|
+
*/
|
|
107
|
+
export interface MiddlewareStackConfig {
|
|
108
|
+
readonly loopDetection?: Partial<LoopDetectionConfig>;
|
|
109
|
+
readonly executionBudget?: Partial<ExecutionBudgetConfig>;
|
|
110
|
+
readonly toolTruncation?: Partial<ToolTruncationConfig>;
|
|
111
|
+
readonly costCap?: CostCapConfig | null;
|
|
112
|
+
readonly otelSpans?: Partial<OtelSpansConfig>;
|
|
113
|
+
readonly approvalGate?: ApprovalGateConfig | null;
|
|
114
|
+
}
|