@roj-ai/sdk 0.1.35 → 0.2.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/dist/bootstrap.d.ts +420 -26
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +55 -24
- package/dist/bootstrap.js.map +1 -1
- package/dist/bun-platform/fs.d.ts.map +1 -1
- package/dist/bun-platform/fs.js +1 -0
- package/dist/bun-platform/fs.js.map +1 -1
- package/dist/bun-platform/index.d.ts +4 -1
- package/dist/bun-platform/index.d.ts.map +1 -1
- package/dist/bun-platform/index.js +7 -1
- package/dist/bun-platform/index.js.map +1 -1
- package/dist/bun-platform/server-lifecycle.d.ts +30 -0
- package/dist/bun-platform/server-lifecycle.d.ts.map +1 -0
- package/dist/bun-platform/server-lifecycle.js +182 -0
- package/dist/bun-platform/server-lifecycle.js.map +1 -0
- package/dist/bun-platform/shell.d.ts +33 -0
- package/dist/bun-platform/shell.d.ts.map +1 -0
- package/dist/bun-platform/shell.js +322 -0
- package/dist/bun-platform/shell.js.map +1 -0
- package/dist/config.d.ts +34 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +97 -0
- package/dist/config.js.map +1 -1
- package/dist/core/agents/agent.d.ts +42 -7
- package/dist/core/agents/agent.d.ts.map +1 -1
- package/dist/core/agents/agent.js +209 -90
- package/dist/core/agents/agent.js.map +1 -1
- package/dist/core/agents/config.d.ts +8 -1
- package/dist/core/agents/config.d.ts.map +1 -1
- package/dist/core/agents/config.js +5 -1
- package/dist/core/agents/config.js.map +1 -1
- package/dist/core/agents/retry.d.ts +1 -1
- package/dist/core/agents/retry.d.ts.map +1 -1
- package/dist/core/agents/retry.js +14 -16
- package/dist/core/agents/retry.js.map +1 -1
- package/dist/core/agents/state.d.ts +27 -1
- package/dist/core/agents/state.d.ts.map +1 -1
- package/dist/core/agents/state.js +1 -1
- package/dist/core/agents/state.js.map +1 -1
- package/dist/core/context/state.d.ts +3 -3
- package/dist/core/context/state.d.ts.map +1 -1
- package/dist/core/context/state.js +6 -2
- package/dist/core/context/state.js.map +1 -1
- package/dist/core/events/base-event-store.d.ts.map +1 -1
- package/dist/core/events/base-event-store.js +22 -14
- package/dist/core/events/base-event-store.js.map +1 -1
- package/dist/core/events/file.d.ts +39 -1
- package/dist/core/events/file.d.ts.map +1 -1
- package/dist/core/events/file.js +159 -20
- package/dist/core/events/file.js.map +1 -1
- package/dist/core/events/types.d.ts +1 -1
- package/dist/core/file-store/containment.d.ts +19 -0
- package/dist/core/file-store/containment.d.ts.map +1 -0
- package/dist/core/file-store/containment.js +62 -0
- package/dist/core/file-store/containment.js.map +1 -0
- package/dist/core/file-store/file-store.d.ts +22 -2
- package/dist/core/file-store/file-store.d.ts.map +1 -1
- package/dist/core/file-store/file-store.js +88 -20
- package/dist/core/file-store/file-store.js.map +1 -1
- package/dist/core/file-store/types.d.ts +13 -1
- package/dist/core/file-store/types.d.ts.map +1 -1
- package/dist/core/image/image-processor.d.ts.map +1 -1
- package/dist/core/image/image-processor.js +3 -1
- package/dist/core/image/image-processor.js.map +1 -1
- package/dist/core/image/types.d.ts +2 -0
- package/dist/core/image/types.d.ts.map +1 -1
- package/dist/core/image/vips-resizer.d.ts.map +1 -1
- package/dist/core/image/vips-resizer.js +81 -33
- package/dist/core/image/vips-resizer.js.map +1 -1
- package/dist/core/llm/anthropic.d.ts +0 -1
- package/dist/core/llm/anthropic.d.ts.map +1 -1
- package/dist/core/llm/anthropic.js +101 -74
- package/dist/core/llm/anthropic.js.map +1 -1
- package/dist/core/llm/logger.d.ts +14 -2
- package/dist/core/llm/logger.d.ts.map +1 -1
- package/dist/core/llm/logger.js +161 -36
- package/dist/core/llm/logger.js.map +1 -1
- package/dist/core/llm/openrouter.d.ts +0 -1
- package/dist/core/llm/openrouter.d.ts.map +1 -1
- package/dist/core/llm/openrouter.js +70 -74
- package/dist/core/llm/openrouter.js.map +1 -1
- package/dist/core/llm/provider-request.d.ts +10 -0
- package/dist/core/llm/provider-request.d.ts.map +1 -0
- package/dist/core/llm/provider-request.js +41 -0
- package/dist/core/llm/provider-request.js.map +1 -0
- package/dist/core/llm/provider.d.ts +45 -3
- package/dist/core/llm/provider.d.ts.map +1 -1
- package/dist/core/llm/provider.js +26 -0
- package/dist/core/llm/provider.js.map +1 -1
- package/dist/core/llm/state.d.ts +4 -2
- package/dist/core/llm/state.d.ts.map +1 -1
- package/dist/core/llm/state.js +15 -4
- package/dist/core/llm/state.js.map +1 -1
- package/dist/core/plugins/plugin-builder.d.ts +57 -3
- package/dist/core/plugins/plugin-builder.d.ts.map +1 -1
- package/dist/core/plugins/plugin-builder.js +68 -14
- package/dist/core/plugins/plugin-builder.js.map +1 -1
- package/dist/core/preset/preset-builder.d.ts +3 -2
- package/dist/core/preset/preset-builder.d.ts.map +1 -1
- package/dist/core/preset/preset-builder.js +7 -16
- package/dist/core/preset/preset-builder.js.map +1 -1
- package/dist/core/sessions/context.d.ts +23 -5
- package/dist/core/sessions/context.d.ts.map +1 -1
- package/dist/core/sessions/runtime-activity.d.ts +33 -0
- package/dist/core/sessions/runtime-activity.d.ts.map +1 -0
- package/dist/core/sessions/runtime-activity.js +55 -0
- package/dist/core/sessions/runtime-activity.js.map +1 -0
- package/dist/core/sessions/schema.d.ts +23 -2
- package/dist/core/sessions/schema.d.ts.map +1 -1
- package/dist/core/sessions/schema.js +24 -3
- package/dist/core/sessions/schema.js.map +1 -1
- package/dist/core/sessions/session-manager.d.ts +83 -6
- package/dist/core/sessions/session-manager.d.ts.map +1 -1
- package/dist/core/sessions/session-manager.js +517 -118
- package/dist/core/sessions/session-manager.js.map +1 -1
- package/dist/core/sessions/session-store.d.ts +18 -0
- package/dist/core/sessions/session-store.d.ts.map +1 -1
- package/dist/core/sessions/session-store.js +33 -0
- package/dist/core/sessions/session-store.js.map +1 -1
- package/dist/core/sessions/session.d.ts +42 -6
- package/dist/core/sessions/session.d.ts.map +1 -1
- package/dist/core/sessions/session.js +176 -44
- package/dist/core/sessions/session.js.map +1 -1
- package/dist/core/sessions/state.d.ts +10 -1
- package/dist/core/sessions/state.d.ts.map +1 -1
- package/dist/core/sessions/state.js +16 -1
- package/dist/core/sessions/state.js.map +1 -1
- package/dist/core/system.d.ts +9 -0
- package/dist/core/system.d.ts.map +1 -1
- package/dist/core/system.js +4 -1
- package/dist/core/system.js.map +1 -1
- package/dist/core/tools/executor.d.ts +1 -1
- package/dist/core/wake-key.d.ts +34 -0
- package/dist/core/wake-key.d.ts.map +1 -0
- package/dist/core/wake-key.js +51 -0
- package/dist/core/wake-key.js.map +1 -0
- package/dist/index.d.ts +24 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +22 -8
- package/dist/index.js.map +1 -1
- package/dist/lib/archive/archive-inspection.d.ts +48 -0
- package/dist/lib/archive/archive-inspection.d.ts.map +1 -0
- package/dist/lib/archive/archive-inspection.fixtures.d.ts +7 -0
- package/dist/lib/archive/archive-inspection.fixtures.d.ts.map +1 -0
- package/dist/lib/archive/archive-inspection.fixtures.js +134 -0
- package/dist/lib/archive/archive-inspection.fixtures.js.map +1 -0
- package/dist/lib/archive/archive-inspection.js +253 -0
- package/dist/lib/archive/archive-inspection.js.map +1 -0
- package/dist/lib/archive/index.d.ts +3 -0
- package/dist/lib/archive/index.d.ts.map +1 -0
- package/dist/lib/archive/index.js +2 -0
- package/dist/lib/archive/index.js.map +1 -0
- package/dist/lib/logger/console.d.ts +5 -12
- package/dist/lib/logger/console.d.ts.map +1 -1
- package/dist/lib/logger/console.js +5 -47
- package/dist/lib/logger/console.js.map +1 -1
- package/dist/lib/logger/file.d.ts +8 -11
- package/dist/lib/logger/file.d.ts.map +1 -1
- package/dist/lib/logger/file.js +26 -37
- package/dist/lib/logger/file.js.map +1 -1
- package/dist/lib/logger/index.d.ts +3 -1
- package/dist/lib/logger/index.d.ts.map +1 -1
- package/dist/lib/logger/index.js +3 -1
- package/dist/lib/logger/index.js.map +1 -1
- package/dist/lib/logger/jsonl.d.ts +21 -0
- package/dist/lib/logger/jsonl.d.ts.map +1 -0
- package/dist/lib/logger/jsonl.js +29 -0
- package/dist/lib/logger/jsonl.js.map +1 -0
- package/dist/lib/logger/logger.d.ts +22 -0
- package/dist/lib/logger/logger.d.ts.map +1 -1
- package/dist/lib/logger/logger.js +37 -0
- package/dist/lib/logger/logger.js.map +1 -1
- package/dist/lib/logger/session-log.d.ts +21 -0
- package/dist/lib/logger/session-log.d.ts.map +1 -0
- package/dist/lib/logger/session-log.js +37 -0
- package/dist/lib/logger/session-log.js.map +1 -0
- package/dist/lib/utils/concurrency.d.ts +1 -1
- package/dist/lib/utils/concurrency.d.ts.map +1 -1
- package/dist/lib/utils/concurrency.js +30 -7
- package/dist/lib/utils/concurrency.js.map +1 -1
- package/dist/lib/utils/fs-batch.d.ts +17 -0
- package/dist/lib/utils/fs-batch.d.ts.map +1 -0
- package/dist/lib/utils/fs-batch.js +38 -0
- package/dist/lib/utils/fs-batch.js.map +1 -0
- package/dist/lib/utils/result.d.ts +7 -22
- package/dist/lib/utils/result.d.ts.map +1 -1
- package/dist/lib/utils/result.js +6 -17
- package/dist/lib/utils/result.js.map +1 -1
- package/dist/lib/utils/sleep.d.ts +10 -0
- package/dist/lib/utils/sleep.d.ts.map +1 -0
- package/dist/lib/utils/sleep.js +26 -0
- package/dist/lib/utils/sleep.js.map +1 -0
- package/dist/platform/fs-revision.d.ts +21 -0
- package/dist/platform/fs-revision.d.ts.map +1 -0
- package/dist/platform/fs-revision.js +9 -0
- package/dist/platform/fs-revision.js.map +1 -0
- package/dist/platform/fs.d.ts +104 -1
- package/dist/platform/fs.d.ts.map +1 -1
- package/dist/platform/git.d.ts +59 -0
- package/dist/platform/git.d.ts.map +1 -0
- package/dist/platform/git.js +8 -0
- package/dist/platform/git.js.map +1 -0
- package/dist/platform/index.d.ts +40 -1
- package/dist/platform/index.d.ts.map +1 -1
- package/dist/platform/index.js +1 -1
- package/dist/platform/index.js.map +1 -1
- package/dist/platform/llm-call-log.d.ts +80 -0
- package/dist/platform/llm-call-log.d.ts.map +1 -0
- package/dist/platform/llm-call-log.js +12 -0
- package/dist/platform/llm-call-log.js.map +1 -0
- package/dist/platform/scheduler.d.ts +32 -0
- package/dist/platform/scheduler.d.ts.map +1 -0
- package/dist/platform/scheduler.js +46 -0
- package/dist/platform/scheduler.js.map +1 -0
- package/dist/platform/session-log.d.ts +36 -0
- package/dist/platform/session-log.d.ts.map +1 -0
- package/dist/platform/session-log.js +12 -0
- package/dist/platform/session-log.js.map +1 -0
- package/dist/platform/shell.d.ts +83 -0
- package/dist/platform/shell.d.ts.map +1 -0
- package/dist/platform/shell.js +13 -0
- package/dist/platform/shell.js.map +1 -0
- package/dist/plugins/agent-status/plugin.d.ts.map +1 -1
- package/dist/plugins/agent-status/plugin.js +1 -0
- package/dist/plugins/agent-status/plugin.js.map +1 -1
- package/dist/plugins/agents/plugin.d.ts.map +1 -1
- package/dist/plugins/agents/plugin.js +129 -62
- package/dist/plugins/agents/plugin.js.map +1 -1
- package/dist/plugins/filesystem/listing.d.ts +3 -0
- package/dist/plugins/filesystem/listing.d.ts.map +1 -1
- package/dist/plugins/filesystem/listing.js +66 -10
- package/dist/plugins/filesystem/listing.js.map +1 -1
- package/dist/plugins/filesystem/plugin.d.ts.map +1 -1
- package/dist/plugins/filesystem/plugin.js +8 -6
- package/dist/plugins/filesystem/plugin.js.map +1 -1
- package/dist/plugins/git-status/plugin.d.ts +34 -7
- package/dist/plugins/git-status/plugin.d.ts.map +1 -1
- package/dist/plugins/git-status/plugin.js +168 -64
- package/dist/plugins/git-status/plugin.js.map +1 -1
- package/dist/plugins/llm-debug/plugin.d.ts.map +1 -1
- package/dist/plugins/llm-debug/plugin.js +1 -0
- package/dist/plugins/llm-debug/plugin.js.map +1 -1
- package/dist/plugins/logs/plugin.d.ts +1 -4
- package/dist/plugins/logs/plugin.d.ts.map +1 -1
- package/dist/plugins/logs/plugin.js +7 -0
- package/dist/plugins/logs/plugin.js.map +1 -1
- package/dist/plugins/mailbox/helpers.d.ts +2 -2
- package/dist/plugins/mailbox/helpers.js +1 -1
- package/dist/plugins/mailbox/plugin.d.ts.map +1 -1
- package/dist/plugins/mailbox/plugin.js +38 -43
- package/dist/plugins/mailbox/plugin.js.map +1 -1
- package/dist/plugins/mailbox/query.d.ts +7 -2
- package/dist/plugins/mailbox/query.d.ts.map +1 -1
- package/dist/plugins/mailbox/query.js +14 -7
- package/dist/plugins/mailbox/query.js.map +1 -1
- package/dist/plugins/mailbox/state.d.ts +5 -4
- package/dist/plugins/mailbox/state.d.ts.map +1 -1
- package/dist/plugins/mailbox/state.js +6 -5
- package/dist/plugins/mailbox/state.js.map +1 -1
- package/dist/plugins/resources/filename.d.ts +4 -0
- package/dist/plugins/resources/filename.d.ts.map +1 -0
- package/dist/plugins/resources/filename.js +18 -0
- package/dist/plugins/resources/filename.js.map +1 -0
- package/dist/plugins/resources/plugin.d.ts +3 -0
- package/dist/plugins/resources/plugin.d.ts.map +1 -1
- package/dist/plugins/resources/plugin.js +97 -60
- package/dist/plugins/resources/plugin.js.map +1 -1
- package/dist/plugins/resources/state.d.ts +1 -1
- package/dist/plugins/resources/state.js +1 -1
- package/dist/plugins/result-eviction/plugin.d.ts.map +1 -1
- package/dist/plugins/result-eviction/plugin.js +6 -1
- package/dist/plugins/result-eviction/plugin.js.map +1 -1
- package/dist/plugins/services/plugin.d.ts +4 -1
- package/dist/plugins/services/plugin.d.ts.map +1 -1
- package/dist/plugins/services/plugin.js +251 -100
- package/dist/plugins/services/plugin.js.map +1 -1
- package/dist/plugins/services/prompt.d.ts.map +1 -1
- package/dist/plugins/services/prompt.js +1 -4
- package/dist/plugins/services/prompt.js.map +1 -1
- package/dist/plugins/services/schema.d.ts +15 -5
- package/dist/plugins/services/schema.d.ts.map +1 -1
- package/dist/plugins/services/service.d.ts +100 -18
- package/dist/plugins/services/service.d.ts.map +1 -1
- package/dist/plugins/services/service.js +680 -230
- package/dist/plugins/services/service.js.map +1 -1
- package/dist/plugins/session-lifecycle/plugin.d.ts +21 -1
- package/dist/plugins/session-lifecycle/plugin.d.ts.map +1 -1
- package/dist/plugins/session-lifecycle/plugin.js +53 -40
- package/dist/plugins/session-lifecycle/plugin.js.map +1 -1
- package/dist/plugins/session-state/plugin.d.ts +21 -13
- package/dist/plugins/session-state/plugin.d.ts.map +1 -1
- package/dist/plugins/session-state/plugin.js +214 -79
- package/dist/plugins/session-state/plugin.js.map +1 -1
- package/dist/plugins/session-stats/plugin.d.ts.map +1 -1
- package/dist/plugins/session-stats/plugin.js +1 -0
- package/dist/plugins/session-stats/plugin.js.map +1 -1
- package/dist/plugins/shell/executor.d.ts +17 -15
- package/dist/plugins/shell/executor.d.ts.map +1 -1
- package/dist/plugins/shell/executor.js +130 -195
- package/dist/plugins/shell/executor.js.map +1 -1
- package/dist/plugins/shell/index.d.ts +2 -2
- package/dist/plugins/shell/index.d.ts.map +1 -1
- package/dist/plugins/shell/index.js +2 -2
- package/dist/plugins/shell/index.js.map +1 -1
- package/dist/plugins/shell/plugin.d.ts +5 -4
- package/dist/plugins/shell/plugin.d.ts.map +1 -1
- package/dist/plugins/shell/plugin.js +4 -8
- package/dist/plugins/shell/plugin.js.map +1 -1
- package/dist/plugins/skills/discovery.d.ts.map +1 -1
- package/dist/plugins/skills/discovery.js +10 -8
- package/dist/plugins/skills/discovery.js.map +1 -1
- package/dist/plugins/skills/index.d.ts +1 -1
- package/dist/plugins/skills/index.d.ts.map +1 -1
- package/dist/plugins/skills/plugin.d.ts +1 -1
- package/dist/plugins/skills/plugin.d.ts.map +1 -1
- package/dist/plugins/skills/plugin.js +23 -30
- package/dist/plugins/skills/plugin.js.map +1 -1
- package/dist/plugins/skills/prompts.d.ts +3 -3
- package/dist/plugins/skills/prompts.d.ts.map +1 -1
- package/dist/plugins/skills/prompts.js.map +1 -1
- package/dist/plugins/skills/schema.d.ts +4 -2
- package/dist/plugins/skills/schema.d.ts.map +1 -1
- package/dist/plugins/todo/schema.d.ts +1 -1
- package/dist/plugins/uploads/plugin.d.ts +11 -4
- package/dist/plugins/uploads/plugin.d.ts.map +1 -1
- package/dist/plugins/uploads/plugin.js +891 -225
- package/dist/plugins/uploads/plugin.js.map +1 -1
- package/dist/plugins/uploads/preprocessor.d.ts +14 -0
- package/dist/plugins/uploads/preprocessor.d.ts.map +1 -1
- package/dist/plugins/uploads/preprocessor.js +11 -0
- package/dist/plugins/uploads/preprocessor.js.map +1 -1
- package/dist/plugins/uploads/preprocessors/image-classifier.d.ts +1 -1
- package/dist/plugins/uploads/preprocessors/image-classifier.d.ts.map +1 -1
- package/dist/plugins/uploads/preprocessors/image-classifier.js +51 -26
- package/dist/plugins/uploads/preprocessors/image-classifier.js.map +1 -1
- package/dist/plugins/uploads/preprocessors/markitdown-preprocessor.d.ts +2 -2
- package/dist/plugins/uploads/preprocessors/markitdown-preprocessor.d.ts.map +1 -1
- package/dist/plugins/uploads/preprocessors/markitdown-preprocessor.js +41 -16
- package/dist/plugins/uploads/preprocessors/markitdown-preprocessor.js.map +1 -1
- package/dist/plugins/uploads/preprocessors/pdf-preprocessor.d.ts +1 -1
- package/dist/plugins/uploads/preprocessors/pdf-preprocessor.d.ts.map +1 -1
- package/dist/plugins/uploads/preprocessors/pdf-preprocessor.js +29 -14
- package/dist/plugins/uploads/preprocessors/pdf-preprocessor.js.map +1 -1
- package/dist/plugins/uploads/preprocessors/zip-preprocessor.d.ts +1 -1
- package/dist/plugins/uploads/preprocessors/zip-preprocessor.d.ts.map +1 -1
- package/dist/plugins/uploads/preprocessors/zip-preprocessor.js +62 -34
- package/dist/plugins/uploads/preprocessors/zip-preprocessor.js.map +1 -1
- package/dist/plugins/uploads/schema.d.ts +25 -2
- package/dist/plugins/uploads/schema.d.ts.map +1 -1
- package/dist/plugins/uploads/schema.js +24 -3
- package/dist/plugins/uploads/schema.js.map +1 -1
- package/dist/plugins/uploads/state.d.ts +13 -1
- package/dist/plugins/uploads/state.d.ts.map +1 -1
- package/dist/plugins/uploads/state.js +4 -1
- package/dist/plugins/uploads/state.js.map +1 -1
- package/dist/plugins/user-chat/plugin.d.ts +12 -5
- package/dist/plugins/user-chat/plugin.d.ts.map +1 -1
- package/dist/plugins/user-chat/plugin.js +141 -32
- package/dist/plugins/user-chat/plugin.js.map +1 -1
- package/dist/plugins/workers/context.d.ts +35 -13
- package/dist/plugins/workers/context.d.ts.map +1 -1
- package/dist/plugins/workers/context.js +82 -32
- package/dist/plugins/workers/context.js.map +1 -1
- package/dist/plugins/workers/definition.d.ts +7 -0
- package/dist/plugins/workers/definition.d.ts.map +1 -1
- package/dist/plugins/workers/definition.js.map +1 -1
- package/dist/plugins/workers/index.d.ts +4 -4
- package/dist/plugins/workers/index.d.ts.map +1 -1
- package/dist/plugins/workers/index.js +2 -2
- package/dist/plugins/workers/index.js.map +1 -1
- package/dist/plugins/workers/plugin.d.ts +10 -57
- package/dist/plugins/workers/plugin.d.ts.map +1 -1
- package/dist/plugins/workers/plugin.js +385 -123
- package/dist/plugins/workers/plugin.js.map +1 -1
- package/dist/plugins/workers/state.d.ts +69 -0
- package/dist/plugins/workers/state.d.ts.map +1 -0
- package/dist/plugins/workers/state.js +52 -0
- package/dist/plugins/workers/state.js.map +1 -0
- package/dist/plugins/workers/worker.d.ts +15 -4
- package/dist/plugins/workers/worker.d.ts.map +1 -1
- package/dist/testing/conformance.d.ts +106 -0
- package/dist/testing/conformance.d.ts.map +1 -0
- package/dist/testing/conformance.js +1463 -0
- package/dist/testing/conformance.js.map +1 -0
- package/dist/testing/node-platform.d.ts.map +1 -1
- package/dist/testing/node-platform.js +5 -0
- package/dist/testing/node-platform.js.map +1 -1
- package/dist/testing/test-harness.d.ts +11 -1
- package/dist/testing/test-harness.d.ts.map +1 -1
- package/dist/testing/test-harness.js +17 -37
- package/dist/testing/test-harness.js.map +1 -1
- package/dist/testing/wait-helpers.d.ts.map +1 -1
- package/dist/testing/wait-helpers.js +1 -3
- package/dist/testing/wait-helpers.js.map +1 -1
- package/dist/transport/adapter/client-adapter.d.ts +6 -0
- package/dist/transport/adapter/client-adapter.d.ts.map +1 -1
- package/dist/transport/adapter/client-adapter.js +50 -3
- package/dist/transport/adapter/client-adapter.js.map +1 -1
- package/dist/transport/adapter/heartbeat.d.ts +16 -0
- package/dist/transport/adapter/heartbeat.d.ts.map +1 -0
- package/dist/transport/adapter/heartbeat.js +41 -0
- package/dist/transport/adapter/heartbeat.js.map +1 -0
- package/dist/transport/adapter/server-adapter.d.ts.map +1 -1
- package/dist/transport/adapter/server-adapter.js +6 -0
- package/dist/transport/adapter/server-adapter.js.map +1 -1
- package/dist/transport/http/app.d.ts +3 -30
- package/dist/transport/http/app.d.ts.map +1 -1
- package/dist/transport/http/app.js +3 -7
- package/dist/transport/http/app.js.map +1 -1
- package/dist/transport/http/context.d.ts +40 -0
- package/dist/transport/http/context.d.ts.map +1 -0
- package/dist/transport/http/context.js +17 -0
- package/dist/transport/http/context.js.map +1 -0
- package/dist/transport/http/fetch-guard.d.ts +49 -0
- package/dist/transport/http/fetch-guard.d.ts.map +1 -0
- package/dist/transport/http/fetch-guard.js +312 -0
- package/dist/transport/http/fetch-guard.js.map +1 -0
- package/dist/transport/http/index.d.ts +1 -1
- package/dist/transport/http/index.d.ts.map +1 -1
- package/dist/transport/http/middleware/bearer-auth.d.ts +1 -1
- package/dist/transport/http/middleware/bearer-auth.d.ts.map +1 -1
- package/dist/transport/http/middleware/error-handler.d.ts +2 -2
- package/dist/transport/http/middleware/error-handler.d.ts.map +1 -1
- package/dist/transport/http/path-containment.d.ts +20 -0
- package/dist/transport/http/path-containment.d.ts.map +1 -0
- package/dist/transport/http/path-containment.js +31 -0
- package/dist/transport/http/path-containment.js.map +1 -0
- package/dist/transport/http/responses.d.ts +30 -0
- package/dist/transport/http/responses.d.ts.map +1 -0
- package/dist/transport/http/responses.js +5 -0
- package/dist/transport/http/responses.js.map +1 -0
- package/dist/transport/http/routes/files.d.ts +1 -1
- package/dist/transport/http/routes/files.d.ts.map +1 -1
- package/dist/transport/http/routes/files.js +54 -155
- package/dist/transport/http/routes/files.js.map +1 -1
- package/dist/transport/http/routes/resources.d.ts +1 -1
- package/dist/transport/http/routes/resources.d.ts.map +1 -1
- package/dist/transport/http/routes/resources.js +92 -57
- package/dist/transport/http/routes/resources.js.map +1 -1
- package/dist/transport/http/routes/rpc.d.ts +6 -1
- package/dist/transport/http/routes/rpc.d.ts.map +1 -1
- package/dist/transport/http/routes/rpc.js +51 -21
- package/dist/transport/http/routes/rpc.js.map +1 -1
- package/dist/transport/http/routes/upload.d.ts +1 -1
- package/dist/transport/http/routes/upload.d.ts.map +1 -1
- package/dist/transport/http/routes/upload.js +256 -169
- package/dist/transport/http/routes/upload.js.map +1 -1
- package/dist/user-config.d.ts +34 -7
- package/dist/user-config.d.ts.map +1 -1
- package/dist/user-config.js +71 -0
- package/dist/user-config.js.map +1 -1
- package/package.json +18 -8
- package/src/bootstrap.ts +119 -35
- package/src/bun-platform/fs.ts +1 -0
- package/src/bun-platform/index.ts +18 -1
- package/src/bun-platform/server-lifecycle.ts +218 -0
- package/src/bun-platform/shell.ts +362 -0
- package/src/config.ts +130 -0
- package/src/core/agents/agent.ts +219 -95
- package/src/core/agents/config.ts +8 -0
- package/src/core/agents/retry.ts +16 -17
- package/src/core/agents/state.ts +28 -0
- package/src/core/context/state.ts +4 -0
- package/src/core/events/base-event-store.ts +24 -16
- package/src/core/events/file.ts +198 -22
- package/src/core/file-store/containment.ts +75 -0
- package/src/core/file-store/file-store.ts +106 -25
- package/src/core/file-store/types.ts +14 -1
- package/src/core/image/image-processor.ts +3 -1
- package/src/core/image/types.ts +2 -0
- package/src/core/image/vips-resizer.ts +102 -37
- package/src/core/llm/anthropic.ts +127 -82
- package/src/core/llm/logger.ts +175 -37
- package/src/core/llm/openrouter.ts +82 -81
- package/src/core/llm/provider-request.ts +40 -0
- package/src/core/llm/provider.ts +72 -3
- package/src/core/llm/state.ts +12 -0
- package/src/core/plugins/plugin-builder.ts +106 -14
- package/src/core/preset/preset-builder.ts +12 -22
- package/src/core/sessions/context.ts +18 -0
- package/src/core/sessions/runtime-activity.ts +78 -0
- package/src/core/sessions/schema.ts +29 -3
- package/src/core/sessions/session-manager.ts +560 -140
- package/src/core/sessions/session-store.ts +38 -0
- package/src/core/sessions/session.ts +187 -47
- package/src/core/sessions/state.ts +16 -0
- package/src/core/system.ts +15 -0
- package/src/core/wake-key.ts +65 -0
- package/src/index.ts +31 -12
- package/src/lib/archive/archive-inspection.fixtures.ts +138 -0
- package/src/lib/archive/archive-inspection.ts +359 -0
- package/src/lib/archive/index.ts +17 -0
- package/src/lib/logger/console.ts +7 -57
- package/src/lib/logger/file.ts +28 -50
- package/src/lib/logger/index.ts +3 -1
- package/src/lib/logger/jsonl.ts +36 -0
- package/src/lib/logger/logger.ts +48 -0
- package/src/lib/logger/session-log.ts +42 -0
- package/src/lib/utils/concurrency.ts +37 -8
- package/src/lib/utils/fs-batch.ts +49 -0
- package/src/lib/utils/result.ts +7 -31
- package/src/lib/utils/sleep.ts +23 -0
- package/src/platform/fs-revision.ts +21 -0
- package/src/platform/fs.ts +109 -1
- package/src/platform/git.ts +67 -0
- package/src/platform/index.ts +51 -1
- package/src/platform/llm-call-log.ts +86 -0
- package/src/platform/scheduler.ts +71 -0
- package/src/platform/session-log.ts +39 -0
- package/src/platform/shell.ts +89 -0
- package/src/plugins/agent-status/plugin.ts +1 -0
- package/src/plugins/agents/plugin.ts +134 -81
- package/src/plugins/filesystem/listing.ts +70 -12
- package/src/plugins/filesystem/plugin.ts +8 -6
- package/src/plugins/git-status/plugin.ts +204 -77
- package/src/plugins/llm-debug/plugin.ts +1 -0
- package/src/plugins/logs/plugin.ts +9 -0
- package/src/plugins/mailbox/plugin.ts +46 -64
- package/src/plugins/mailbox/query.ts +15 -7
- package/src/plugins/mailbox/state.ts +1 -0
- package/src/plugins/resources/filename.ts +19 -0
- package/src/plugins/resources/plugin.ts +111 -59
- package/src/plugins/result-eviction/plugin.ts +6 -1
- package/src/plugins/services/plugin.ts +254 -98
- package/src/plugins/services/prompt.ts +1 -6
- package/src/plugins/services/schema.ts +17 -3
- package/src/plugins/services/service.ts +702 -252
- package/src/plugins/session-lifecycle/plugin.ts +56 -41
- package/src/plugins/session-state/plugin.ts +242 -88
- package/src/plugins/session-stats/plugin.ts +1 -0
- package/src/plugins/shell/executor.ts +144 -226
- package/src/plugins/shell/index.ts +1 -4
- package/src/plugins/shell/plugin.ts +7 -9
- package/src/plugins/skills/discovery.ts +10 -8
- package/src/plugins/skills/index.ts +1 -1
- package/src/plugins/skills/plugin.ts +19 -27
- package/src/plugins/skills/prompts.ts +3 -3
- package/src/plugins/skills/schema.ts +5 -2
- package/src/plugins/uploads/plugin.ts +991 -273
- package/src/plugins/uploads/preprocessor.ts +25 -0
- package/src/plugins/uploads/preprocessors/image-classifier.ts +56 -25
- package/src/plugins/uploads/preprocessors/markitdown-preprocessor.ts +41 -15
- package/src/plugins/uploads/preprocessors/pdf-preprocessor.ts +32 -16
- package/src/plugins/uploads/preprocessors/zip-preprocessor.ts +67 -38
- package/src/plugins/uploads/schema.ts +30 -3
- package/src/plugins/uploads/state.ts +12 -0
- package/src/plugins/user-chat/plugin.ts +196 -40
- package/src/plugins/workers/context.ts +102 -39
- package/src/plugins/workers/definition.ts +7 -0
- package/src/plugins/workers/index.ts +4 -4
- package/src/plugins/workers/plugin.ts +461 -151
- package/src/plugins/workers/state.ts +64 -0
- package/src/plugins/workers/worker.ts +15 -4
- package/src/testing/conformance.ts +1751 -0
- package/src/testing/node-platform.ts +5 -0
- package/src/testing/test-harness.ts +21 -38
- package/src/testing/wait-helpers.ts +1 -4
- package/src/transport/adapter/client-adapter.ts +60 -3
- package/src/transport/adapter/heartbeat.ts +50 -0
- package/src/transport/adapter/server-adapter.ts +6 -0
- package/src/transport/http/app.ts +7 -35
- package/src/transport/http/context.ts +46 -0
- package/src/transport/http/fetch-guard.ts +318 -0
- package/src/transport/http/index.ts +1 -1
- package/src/transport/http/middleware/bearer-auth.ts +1 -1
- package/src/transport/http/middleware/error-handler.ts +1 -1
- package/src/transport/http/path-containment.ts +44 -0
- package/src/transport/http/responses.ts +20 -0
- package/src/transport/http/routes/files.ts +69 -159
- package/src/transport/http/routes/resources.ts +124 -93
- package/src/transport/http/routes/rpc.ts +63 -26
- package/src/transport/http/routes/upload.ts +327 -258
- package/src/user-config.ts +93 -7
- package/dist/config.test.d.ts +0 -2
- package/dist/config.test.d.ts.map +0 -1
- package/dist/config.test.js +0 -155
- package/dist/config.test.js.map +0 -1
- package/dist/core/agent-loop.integration.test.d.ts +0 -2
- package/dist/core/agent-loop.integration.test.d.ts.map +0 -1
- package/dist/core/agent-loop.integration.test.js +0 -414
- package/dist/core/agent-loop.integration.test.js.map +0 -1
- package/dist/core/agents/agent-config.test.d.ts +0 -2
- package/dist/core/agents/agent-config.test.d.ts.map +0 -1
- package/dist/core/agents/agent-config.test.js +0 -194
- package/dist/core/agents/agent-config.test.js.map +0 -1
- package/dist/core/agents/agent-shutdown.test.d.ts +0 -6
- package/dist/core/agents/agent-shutdown.test.d.ts.map +0 -1
- package/dist/core/agents/agent-shutdown.test.js +0 -180
- package/dist/core/agents/agent-shutdown.test.js.map +0 -1
- package/dist/core/agents/agent.test.d.ts +0 -2
- package/dist/core/agents/agent.test.d.ts.map +0 -1
- package/dist/core/agents/agent.test.js +0 -313
- package/dist/core/agents/agent.test.js.map +0 -1
- package/dist/core/agents/communicator.d.ts +0 -3
- package/dist/core/agents/communicator.d.ts.map +0 -1
- package/dist/core/agents/communicator.js +0 -13
- package/dist/core/agents/communicator.js.map +0 -1
- package/dist/core/agents/handler-events.test.d.ts +0 -5
- package/dist/core/agents/handler-events.test.d.ts.map +0 -1
- package/dist/core/agents/handler-events.test.js +0 -115
- package/dist/core/agents/handler-events.test.js.map +0 -1
- package/dist/core/agents/response-sanitizer.test.d.ts +0 -2
- package/dist/core/agents/response-sanitizer.test.d.ts.map +0 -1
- package/dist/core/agents/response-sanitizer.test.js +0 -101
- package/dist/core/agents/response-sanitizer.test.js.map +0 -1
- package/dist/core/error-recovery.integration.test.d.ts +0 -2
- package/dist/core/error-recovery.integration.test.d.ts.map +0 -1
- package/dist/core/error-recovery.integration.test.js +0 -288
- package/dist/core/error-recovery.integration.test.js.map +0 -1
- package/dist/core/event-sourcing.integration.test.d.ts +0 -2
- package/dist/core/event-sourcing.integration.test.d.ts.map +0 -1
- package/dist/core/event-sourcing.integration.test.js +0 -154
- package/dist/core/event-sourcing.integration.test.js.map +0 -1
- package/dist/core/events/file.test.d.ts +0 -2
- package/dist/core/events/file.test.d.ts.map +0 -1
- package/dist/core/events/file.test.js +0 -284
- package/dist/core/events/file.test.js.map +0 -1
- package/dist/core/events/memory.test.d.ts +0 -2
- package/dist/core/events/memory.test.d.ts.map +0 -1
- package/dist/core/events/memory.test.js +0 -502
- package/dist/core/events/memory.test.js.map +0 -1
- package/dist/core/image/image-processor.test.d.ts +0 -2
- package/dist/core/image/image-processor.test.d.ts.map +0 -1
- package/dist/core/image/image-processor.test.js +0 -171
- package/dist/core/image/image-processor.test.js.map +0 -1
- package/dist/core/image/vips-resizer.test.d.ts +0 -2
- package/dist/core/image/vips-resizer.test.d.ts.map +0 -1
- package/dist/core/image/vips-resizer.test.js +0 -336
- package/dist/core/image/vips-resizer.test.js.map +0 -1
- package/dist/core/llm/anthropic.test.d.ts +0 -2
- package/dist/core/llm/anthropic.test.d.ts.map +0 -1
- package/dist/core/llm/anthropic.test.js +0 -464
- package/dist/core/llm/anthropic.test.js.map +0 -1
- package/dist/core/llm/cache-breakpoints.test.d.ts +0 -2
- package/dist/core/llm/cache-breakpoints.test.d.ts.map +0 -1
- package/dist/core/llm/cache-breakpoints.test.js +0 -69
- package/dist/core/llm/cache-breakpoints.test.js.map +0 -1
- package/dist/core/llm/cache-live.test.d.ts +0 -16
- package/dist/core/llm/cache-live.test.d.ts.map +0 -1
- package/dist/core/llm/cache-live.test.js +0 -137
- package/dist/core/llm/cache-live.test.js.map +0 -1
- package/dist/core/llm/logger.test.d.ts +0 -7
- package/dist/core/llm/logger.test.d.ts.map +0 -1
- package/dist/core/llm/logger.test.js +0 -228
- package/dist/core/llm/logger.test.js.map +0 -1
- package/dist/core/llm/message-sanitization.test.d.ts +0 -2
- package/dist/core/llm/message-sanitization.test.d.ts.map +0 -1
- package/dist/core/llm/message-sanitization.test.js +0 -181
- package/dist/core/llm/message-sanitization.test.js.map +0 -1
- package/dist/core/llm/mock.test.d.ts +0 -2
- package/dist/core/llm/mock.test.d.ts.map +0 -1
- package/dist/core/llm/mock.test.js +0 -318
- package/dist/core/llm/mock.test.js.map +0 -1
- package/dist/core/llm/openrouter-mapping.test.d.ts +0 -2
- package/dist/core/llm/openrouter-mapping.test.d.ts.map +0 -1
- package/dist/core/llm/openrouter-mapping.test.js +0 -172
- package/dist/core/llm/openrouter-mapping.test.js.map +0 -1
- package/dist/core/llm/openrouter.test.d.ts +0 -2
- package/dist/core/llm/openrouter.test.d.ts.map +0 -1
- package/dist/core/llm/openrouter.test.js +0 -377
- package/dist/core/llm/openrouter.test.js.map +0 -1
- package/dist/core/llm/provider-integration.test.d.ts +0 -12
- package/dist/core/llm/provider-integration.test.d.ts.map +0 -1
- package/dist/core/llm/provider-integration.test.js +0 -350
- package/dist/core/llm/provider-integration.test.js.map +0 -1
- package/dist/core/llm/routing-provider.test.d.ts +0 -2
- package/dist/core/llm/routing-provider.test.d.ts.map +0 -1
- package/dist/core/llm/routing-provider.test.js +0 -94
- package/dist/core/llm/routing-provider.test.js.map +0 -1
- package/dist/core/llm/snapshot-middleware.test.d.ts +0 -2
- package/dist/core/llm/snapshot-middleware.test.d.ts.map +0 -1
- package/dist/core/llm/snapshot-middleware.test.js +0 -144
- package/dist/core/llm/snapshot-middleware.test.js.map +0 -1
- package/dist/core/multi-agent.integration.test.d.ts +0 -2
- package/dist/core/multi-agent.integration.test.d.ts.map +0 -1
- package/dist/core/multi-agent.integration.test.js +0 -298
- package/dist/core/multi-agent.integration.test.js.map +0 -1
- package/dist/core/plugin-hooks.integration.test.d.ts +0 -2
- package/dist/core/plugin-hooks.integration.test.d.ts.map +0 -1
- package/dist/core/plugin-hooks.integration.test.js +0 -458
- package/dist/core/plugin-hooks.integration.test.js.map +0 -1
- package/dist/core/session-lifecycle.integration.test.d.ts +0 -2
- package/dist/core/session-lifecycle.integration.test.d.ts.map +0 -1
- package/dist/core/session-lifecycle.integration.test.js +0 -159
- package/dist/core/session-lifecycle.integration.test.js.map +0 -1
- package/dist/core/sessions/fork-utils.test.d.ts +0 -2
- package/dist/core/sessions/fork-utils.test.d.ts.map +0 -1
- package/dist/core/sessions/fork-utils.test.js +0 -129
- package/dist/core/sessions/fork-utils.test.js.map +0 -1
- package/dist/core/sessions/session-overrides.integration.test.d.ts +0 -2
- package/dist/core/sessions/session-overrides.integration.test.d.ts.map +0 -1
- package/dist/core/sessions/session-overrides.integration.test.js +0 -154
- package/dist/core/sessions/session-overrides.integration.test.js.map +0 -1
- package/dist/core/sessions/session.test.d.ts +0 -2
- package/dist/core/sessions/session.test.d.ts.map +0 -1
- package/dist/core/sessions/session.test.js +0 -1100
- package/dist/core/sessions/session.test.js.map +0 -1
- package/dist/core/tools/executor.test.d.ts +0 -2
- package/dist/core/tools/executor.test.d.ts.map +0 -1
- package/dist/core/tools/executor.test.js +0 -144
- package/dist/core/tools/executor.test.js.map +0 -1
- package/dist/lib/logger/console.test.d.ts +0 -2
- package/dist/lib/logger/console.test.d.ts.map +0 -1
- package/dist/lib/logger/console.test.js +0 -258
- package/dist/lib/logger/console.test.js.map +0 -1
- package/dist/lib/never.d.ts +0 -2
- package/dist/lib/never.d.ts.map +0 -1
- package/dist/lib/never.js +0 -4
- package/dist/lib/never.js.map +0 -1
- package/dist/lib/utils/concurrency.test.d.ts +0 -2
- package/dist/lib/utils/concurrency.test.d.ts.map +0 -1
- package/dist/lib/utils/concurrency.test.js +0 -135
- package/dist/lib/utils/concurrency.test.js.map +0 -1
- package/dist/plugins/agent-status/agent-status.test.d.ts +0 -2
- package/dist/plugins/agent-status/agent-status.test.d.ts.map +0 -1
- package/dist/plugins/agent-status/agent-status.test.js +0 -136
- package/dist/plugins/agent-status/agent-status.test.js.map +0 -1
- package/dist/plugins/agents/agents.integration.test.d.ts +0 -2
- package/dist/plugins/agents/agents.integration.test.d.ts.map +0 -1
- package/dist/plugins/agents/agents.integration.test.js +0 -830
- package/dist/plugins/agents/agents.integration.test.js.map +0 -1
- package/dist/plugins/agents/supervision.integration.test.d.ts +0 -2
- package/dist/plugins/agents/supervision.integration.test.d.ts.map +0 -1
- package/dist/plugins/agents/supervision.integration.test.js +0 -215
- package/dist/plugins/agents/supervision.integration.test.js.map +0 -1
- package/dist/plugins/context-compact/compaction-live.test.d.ts +0 -17
- package/dist/plugins/context-compact/compaction-live.test.d.ts.map +0 -1
- package/dist/plugins/context-compact/compaction-live.test.js +0 -177
- package/dist/plugins/context-compact/compaction-live.test.js.map +0 -1
- package/dist/plugins/context-compact/context-compact.integration.test.d.ts +0 -2
- package/dist/plugins/context-compact/context-compact.integration.test.d.ts.map +0 -1
- package/dist/plugins/context-compact/context-compact.integration.test.js +0 -364
- package/dist/plugins/context-compact/context-compact.integration.test.js.map +0 -1
- package/dist/plugins/context-compact/context-compactor.test.d.ts +0 -2
- package/dist/plugins/context-compact/context-compactor.test.d.ts.map +0 -1
- package/dist/plugins/context-compact/context-compactor.test.js +0 -858
- package/dist/plugins/context-compact/context-compactor.test.js.map +0 -1
- package/dist/plugins/context-compact/history-offloader.test.d.ts +0 -2
- package/dist/plugins/context-compact/history-offloader.test.d.ts.map +0 -1
- package/dist/plugins/context-compact/history-offloader.test.js +0 -77
- package/dist/plugins/context-compact/history-offloader.test.js.map +0 -1
- package/dist/plugins/filesystem/filesystem.integration.test.d.ts +0 -2
- package/dist/plugins/filesystem/filesystem.integration.test.d.ts.map +0 -1
- package/dist/plugins/filesystem/filesystem.integration.test.js +0 -447
- package/dist/plugins/filesystem/filesystem.integration.test.js.map +0 -1
- package/dist/plugins/filesystem/schema.d.ts +0 -7
- package/dist/plugins/filesystem/schema.d.ts.map +0 -1
- package/dist/plugins/filesystem/schema.js +0 -2
- package/dist/plugins/filesystem/schema.js.map +0 -1
- package/dist/plugins/limits-guard/limit-guard.test.d.ts +0 -2
- package/dist/plugins/limits-guard/limit-guard.test.d.ts.map +0 -1
- package/dist/plugins/limits-guard/limit-guard.test.js +0 -194
- package/dist/plugins/limits-guard/limit-guard.test.js.map +0 -1
- package/dist/plugins/limits-guard/limits-guard.integration.test.d.ts +0 -2
- package/dist/plugins/limits-guard/limits-guard.integration.test.d.ts.map +0 -1
- package/dist/plugins/limits-guard/limits-guard.integration.test.js +0 -887
- package/dist/plugins/limits-guard/limits-guard.integration.test.js.map +0 -1
- package/dist/plugins/llm-debug/llm-debug.integration.test.d.ts +0 -2
- package/dist/plugins/llm-debug/llm-debug.integration.test.d.ts.map +0 -1
- package/dist/plugins/llm-debug/llm-debug.integration.test.js +0 -157
- package/dist/plugins/llm-debug/llm-debug.integration.test.js.map +0 -1
- package/dist/plugins/mailbox/mailbox.integration.test.d.ts +0 -2
- package/dist/plugins/mailbox/mailbox.integration.test.d.ts.map +0 -1
- package/dist/plugins/mailbox/mailbox.integration.test.js +0 -678
- package/dist/plugins/mailbox/mailbox.integration.test.js.map +0 -1
- package/dist/plugins/resources/resources.integration.test.d.ts +0 -2
- package/dist/plugins/resources/resources.integration.test.d.ts.map +0 -1
- package/dist/plugins/resources/resources.integration.test.js +0 -62
- package/dist/plugins/resources/resources.integration.test.js.map +0 -1
- package/dist/plugins/result-eviction/result-eviction.integration.test.d.ts +0 -2
- package/dist/plugins/result-eviction/result-eviction.integration.test.d.ts.map +0 -1
- package/dist/plugins/result-eviction/result-eviction.integration.test.js +0 -294
- package/dist/plugins/result-eviction/result-eviction.integration.test.js.map +0 -1
- package/dist/plugins/services/pid-registry.test.d.ts +0 -2
- package/dist/plugins/services/pid-registry.test.d.ts.map +0 -1
- package/dist/plugins/services/pid-registry.test.js +0 -161
- package/dist/plugins/services/pid-registry.test.js.map +0 -1
- package/dist/plugins/services/services.integration.test.d.ts +0 -2
- package/dist/plugins/services/services.integration.test.d.ts.map +0 -1
- package/dist/plugins/services/services.integration.test.js +0 -1057
- package/dist/plugins/services/services.integration.test.js.map +0 -1
- package/dist/plugins/session-lifecycle/session-lifecycle.integration.test.d.ts +0 -2
- package/dist/plugins/session-lifecycle/session-lifecycle.integration.test.d.ts.map +0 -1
- package/dist/plugins/session-lifecycle/session-lifecycle.integration.test.js +0 -498
- package/dist/plugins/session-lifecycle/session-lifecycle.integration.test.js.map +0 -1
- package/dist/plugins/session-stats/plugin.test.d.ts +0 -2
- package/dist/plugins/session-stats/plugin.test.d.ts.map +0 -1
- package/dist/plugins/session-stats/plugin.test.js +0 -145
- package/dist/plugins/session-stats/plugin.test.js.map +0 -1
- package/dist/plugins/shell/shell.integration.test.d.ts +0 -2
- package/dist/plugins/shell/shell.integration.test.d.ts.map +0 -1
- package/dist/plugins/shell/shell.integration.test.js +0 -234
- package/dist/plugins/shell/shell.integration.test.js.map +0 -1
- package/dist/plugins/shell/shell.test.d.ts +0 -2
- package/dist/plugins/shell/shell.test.d.ts.map +0 -1
- package/dist/plugins/shell/shell.test.js +0 -236
- package/dist/plugins/shell/shell.test.js.map +0 -1
- package/dist/plugins/skills/discovery.test.d.ts +0 -2
- package/dist/plugins/skills/discovery.test.d.ts.map +0 -1
- package/dist/plugins/skills/discovery.test.js +0 -312
- package/dist/plugins/skills/discovery.test.js.map +0 -1
- package/dist/plugins/skills/skills.integration.test.d.ts +0 -2
- package/dist/plugins/skills/skills.integration.test.d.ts.map +0 -1
- package/dist/plugins/skills/skills.integration.test.js +0 -475
- package/dist/plugins/skills/skills.integration.test.js.map +0 -1
- package/dist/plugins/todo/todo.integration.test.d.ts +0 -2
- package/dist/plugins/todo/todo.integration.test.d.ts.map +0 -1
- package/dist/plugins/todo/todo.integration.test.js +0 -605
- package/dist/plugins/todo/todo.integration.test.js.map +0 -1
- package/dist/plugins/uploads/preprocessors/image-classifier.test.d.ts +0 -2
- package/dist/plugins/uploads/preprocessors/image-classifier.test.d.ts.map +0 -1
- package/dist/plugins/uploads/preprocessors/image-classifier.test.js +0 -113
- package/dist/plugins/uploads/preprocessors/image-classifier.test.js.map +0 -1
- package/dist/plugins/uploads/uploads.integration.test.d.ts +0 -2
- package/dist/plugins/uploads/uploads.integration.test.d.ts.map +0 -1
- package/dist/plugins/uploads/uploads.integration.test.js +0 -639
- package/dist/plugins/uploads/uploads.integration.test.js.map +0 -1
- package/dist/plugins/user-chat/user-chat.integration.test.d.ts +0 -2
- package/dist/plugins/user-chat/user-chat.integration.test.d.ts.map +0 -1
- package/dist/plugins/user-chat/user-chat.integration.test.js +0 -754
- package/dist/plugins/user-chat/user-chat.integration.test.js.map +0 -1
- package/dist/plugins/workers/workers.integration.test.d.ts +0 -2
- package/dist/plugins/workers/workers.integration.test.d.ts.map +0 -1
- package/dist/plugins/workers/workers.integration.test.js +0 -629
- package/dist/plugins/workers/workers.integration.test.js.map +0 -1
- package/dist/prompts/macros.test.d.ts +0 -2
- package/dist/prompts/macros.test.d.ts.map +0 -1
- package/dist/prompts/macros.test.js +0 -80
- package/dist/prompts/macros.test.js.map +0 -1
- package/dist/testing/test-harness.test.d.ts +0 -2
- package/dist/testing/test-harness.test.d.ts.map +0 -1
- package/dist/testing/test-harness.test.js +0 -92
- package/dist/testing/test-harness.test.js.map +0 -1
- package/dist/transport/http/routes/rpc.integration.test.d.ts +0 -2
- package/dist/transport/http/routes/rpc.integration.test.d.ts.map +0 -1
- package/dist/transport/http/routes/rpc.integration.test.js +0 -189
- package/dist/transport/http/routes/rpc.integration.test.js.map +0 -1
- package/dist/transport/http/routes/rpc.test.d.ts +0 -2
- package/dist/transport/http/routes/rpc.test.d.ts.map +0 -1
- package/dist/transport/http/routes/rpc.test.js +0 -316
- package/dist/transport/http/routes/rpc.test.js.map +0 -1
- package/src/config.test.ts +0 -174
- package/src/core/agent-loop.integration.test.ts +0 -503
- package/src/core/agents/agent-config.test.ts +0 -240
- package/src/core/agents/agent-shutdown.test.ts +0 -236
- package/src/core/agents/agent.test.ts +0 -387
- package/src/core/agents/communicator.ts +0 -16
- package/src/core/agents/handler-events.test.ts +0 -167
- package/src/core/agents/response-sanitizer.test.ts +0 -137
- package/src/core/error-recovery.integration.test.ts +0 -343
- package/src/core/event-sourcing.integration.test.ts +0 -191
- package/src/core/events/file.test.ts +0 -436
- package/src/core/events/memory.test.ts +0 -741
- package/src/core/image/image-processor.test.ts +0 -218
- package/src/core/image/vips-resizer.test.ts +0 -388
- package/src/core/llm/anthropic.test.ts +0 -546
- package/src/core/llm/cache-breakpoints.test.ts +0 -85
- package/src/core/llm/cache-live.test.ts +0 -155
- package/src/core/llm/logger.test.ts +0 -270
- package/src/core/llm/message-sanitization.test.ts +0 -217
- package/src/core/llm/mock.test.ts +0 -402
- package/src/core/llm/openrouter-mapping.test.ts +0 -210
- package/src/core/llm/openrouter.test.ts +0 -499
- package/src/core/llm/provider-integration.test.ts +0 -408
- package/src/core/llm/routing-provider.test.ts +0 -113
- package/src/core/llm/snapshot-middleware.test.ts +0 -168
- package/src/core/multi-agent.integration.test.ts +0 -340
- package/src/core/plugin-hooks.integration.test.ts +0 -568
- package/src/core/session-lifecycle.integration.test.ts +0 -202
- package/src/core/sessions/fork-utils.test.ts +0 -158
- package/src/core/sessions/session-overrides.integration.test.ts +0 -210
- package/src/core/sessions/session.test.ts +0 -1736
- package/src/core/tools/executor.test.ts +0 -161
- package/src/lib/logger/console.test.ts +0 -348
- package/src/lib/never.ts +0 -3
- package/src/lib/utils/concurrency.test.ts +0 -169
- package/src/plugins/agent-status/agent-status.test.ts +0 -164
- package/src/plugins/agents/agents.integration.test.ts +0 -976
- package/src/plugins/agents/supervision.integration.test.ts +0 -249
- package/src/plugins/context-compact/compaction-live.test.ts +0 -221
- package/src/plugins/context-compact/context-compact.integration.test.ts +0 -418
- package/src/plugins/context-compact/context-compactor.test.ts +0 -1036
- package/src/plugins/context-compact/history-offloader.test.ts +0 -100
- package/src/plugins/filesystem/filesystem.integration.test.ts +0 -529
- package/src/plugins/filesystem/schema.ts +0 -6
- package/src/plugins/limits-guard/limit-guard.test.ts +0 -253
- package/src/plugins/limits-guard/limits-guard.integration.test.ts +0 -1012
- package/src/plugins/llm-debug/llm-debug.integration.test.ts +0 -192
- package/src/plugins/mailbox/mailbox.integration.test.ts +0 -794
- package/src/plugins/resources/resources.integration.test.ts +0 -68
- package/src/plugins/result-eviction/result-eviction.integration.test.ts +0 -332
- package/src/plugins/services/pid-registry.test.ts +0 -180
- package/src/plugins/services/services.integration.test.ts +0 -1223
- package/src/plugins/session-lifecycle/session-lifecycle.integration.test.ts +0 -639
- package/src/plugins/session-stats/plugin.test.ts +0 -160
- package/src/plugins/shell/shell.integration.test.ts +0 -273
- package/src/plugins/shell/shell.test.ts +0 -314
- package/src/plugins/skills/discovery.test.ts +0 -395
- package/src/plugins/skills/skills.integration.test.ts +0 -580
- package/src/plugins/todo/todo.integration.test.ts +0 -687
- package/src/plugins/uploads/preprocessors/image-classifier.test.ts +0 -142
- package/src/plugins/uploads/uploads.integration.test.ts +0 -831
- package/src/plugins/user-chat/user-chat.integration.test.ts +0 -893
- package/src/plugins/workers/workers.integration.test.ts +0 -778
- package/src/prompts/macros.test.ts +0 -107
- package/src/testing/test-harness.test.ts +0 -114
- package/src/transport/http/routes/rpc.integration.test.ts +0 -243
- package/src/transport/http/routes/rpc.test.ts +0 -372
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ToolCall } from '~/core/agents/state.js'
|
|
1
|
+
import type { ReasoningDetails, ToolCall } from '~/core/agents/state.js'
|
|
2
2
|
import type { ImageProcessor } from '~/core/image/types.js'
|
|
3
3
|
import type { ChatMessageContentItem } from '~/core/llm/llm-log-types.js'
|
|
4
4
|
import { ToolCallId } from '~/core/tools/schema.js'
|
|
@@ -14,10 +14,13 @@ import type {
|
|
|
14
14
|
LLMMetrics,
|
|
15
15
|
LLMProvider,
|
|
16
16
|
OpenRouterProviderRouting,
|
|
17
|
+
OpenRouterReasoningOptions,
|
|
17
18
|
ProviderHttpRequest,
|
|
18
19
|
RawInferenceRequest,
|
|
19
20
|
} from './provider.js'
|
|
20
|
-
import {
|
|
21
|
+
import { mapProviderError } from './provider.js'
|
|
22
|
+
import { ProviderRequestAbortError, runProviderRequest } from './provider-request.js'
|
|
23
|
+
import { sanitizeProviderMessages } from './message-sanitization.js'
|
|
21
24
|
|
|
22
25
|
// ============================================================================
|
|
23
26
|
// Configuration
|
|
@@ -52,6 +55,9 @@ interface OpenRouterChoice {
|
|
|
52
55
|
message: {
|
|
53
56
|
content: string | null | Array<{ type: string; text?: string }>
|
|
54
57
|
tool_calls?: OpenRouterToolCall[]
|
|
58
|
+
/** Plaintext chain of thought, when the model exposes one. Display only — the round trip goes through reasoning_details. */
|
|
59
|
+
reasoning?: string
|
|
60
|
+
reasoning_details?: ReasoningDetails
|
|
55
61
|
}
|
|
56
62
|
finish_reason: string | null
|
|
57
63
|
}
|
|
@@ -107,6 +113,7 @@ interface OpenRouterMessage {
|
|
|
107
113
|
content: string | OpenRouterContentItem[]
|
|
108
114
|
tool_calls?: OpenRouterToolCall[]
|
|
109
115
|
tool_call_id?: string
|
|
116
|
+
reasoning_details?: ReasoningDetails
|
|
110
117
|
}
|
|
111
118
|
|
|
112
119
|
/**
|
|
@@ -160,6 +167,8 @@ interface OpenRouterRequestBody {
|
|
|
160
167
|
stream_options: { include_usage: true }
|
|
161
168
|
/** Provider routing preferences */
|
|
162
169
|
provider?: OpenRouterProviderRouting
|
|
170
|
+
/** Reasoning budget */
|
|
171
|
+
reasoning?: OpenRouterReasoningOptions
|
|
163
172
|
/** Routing strategy */
|
|
164
173
|
route?: 'fallback'
|
|
165
174
|
/** Model transforms */
|
|
@@ -206,76 +215,74 @@ export class OpenRouterProvider implements LLMProvider {
|
|
|
206
215
|
}
|
|
207
216
|
|
|
208
217
|
const httpRequest = await this.buildHttpRequest(rawRequest, context)
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
const timeoutId = setTimeout(() => controller.abort(), this.timeout)
|
|
212
|
-
|
|
213
|
-
if (context?.signal) {
|
|
214
|
-
context.signal.addEventListener('abort', () => controller.abort(), { once: true })
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
let response: Response
|
|
218
|
-
try {
|
|
219
|
-
response = await this.fetchFn(httpRequest.url, {
|
|
218
|
+
return await runProviderRequest({ callerSignal: context?.signal, timeoutMs: this.timeout }, async (signal) => {
|
|
219
|
+
const response = await this.fetchFn(httpRequest.url, {
|
|
220
220
|
method: httpRequest.method,
|
|
221
221
|
headers: {
|
|
222
222
|
...httpRequest.headers,
|
|
223
223
|
'Authorization': `Bearer ${this.apiKey}`,
|
|
224
224
|
},
|
|
225
225
|
body: JSON.stringify(httpRequest.body),
|
|
226
|
-
signal
|
|
226
|
+
signal,
|
|
227
227
|
})
|
|
228
|
-
} finally {
|
|
229
|
-
clearTimeout(timeoutId)
|
|
230
|
-
}
|
|
231
228
|
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
229
|
+
if (!response.ok) {
|
|
230
|
+
const body = await response.text()
|
|
231
|
+
return Err(this.mapHttpError(response.status, body))
|
|
232
|
+
}
|
|
236
233
|
|
|
237
|
-
|
|
238
|
-
|
|
234
|
+
const data = await response.json() as OpenRouterResponse
|
|
235
|
+
const latencyMs = Date.now() - startTime
|
|
239
236
|
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
237
|
+
const choice = data.choices[0]
|
|
238
|
+
if (!choice) {
|
|
239
|
+
return Err({ type: 'server_error', message: 'No choices returned from LLM' })
|
|
240
|
+
}
|
|
244
241
|
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
242
|
+
const toolCalls: ToolCall[] = (choice.message.tool_calls ?? []).map(
|
|
243
|
+
(tc) => ({
|
|
244
|
+
id: ToolCallId(tc.id),
|
|
245
|
+
name: tc.function.name,
|
|
246
|
+
input: this.parseToolArguments(tc.function.arguments),
|
|
247
|
+
}),
|
|
248
|
+
)
|
|
249
|
+
|
|
250
|
+
const promptTokens = data.usage?.prompt_tokens ?? 0
|
|
251
|
+
const completionTokens = data.usage?.completion_tokens ?? 0
|
|
252
|
+
const cost = data.usage?.cost
|
|
253
|
+
|
|
254
|
+
const metrics: LLMMetrics = {
|
|
255
|
+
promptTokens,
|
|
256
|
+
completionTokens,
|
|
257
|
+
totalTokens: data.usage?.total_tokens ?? 0,
|
|
258
|
+
latencyMs,
|
|
259
|
+
model: data.model,
|
|
260
|
+
provider: this.name,
|
|
261
|
+
cost,
|
|
262
|
+
cachedTokens: data.usage?.prompt_tokens_details?.cached_tokens || undefined,
|
|
263
|
+
cacheWriteTokens: data.usage?.prompt_tokens_details?.cache_write_tokens || undefined,
|
|
264
|
+
reasoningTokens: data.usage?.completion_tokens_details?.reasoning_tokens || undefined,
|
|
265
|
+
}
|
|
269
266
|
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
267
|
+
return Ok({
|
|
268
|
+
content: this.extractContent(choice.message.content),
|
|
269
|
+
toolCalls,
|
|
270
|
+
finishReason: this.mapFinishReason(choice.finish_reason),
|
|
271
|
+
metrics,
|
|
272
|
+
providerRequestId: data.id,
|
|
273
|
+
reasoning: choice.message.reasoning || undefined,
|
|
274
|
+
// Normalized to undefined here so an empty array never reaches the wire on the way back.
|
|
275
|
+
reasoningDetails: choice.message.reasoning_details?.length ? choice.message.reasoning_details : undefined,
|
|
276
|
+
})
|
|
276
277
|
})
|
|
277
278
|
} catch (error) {
|
|
278
|
-
|
|
279
|
+
if (error instanceof ProviderRequestAbortError) {
|
|
280
|
+
return Err({
|
|
281
|
+
type: error.abortCause === 'caller' ? 'aborted' : 'timeout',
|
|
282
|
+
message: error.message,
|
|
283
|
+
})
|
|
284
|
+
}
|
|
285
|
+
return Err(mapProviderError(error))
|
|
279
286
|
}
|
|
280
287
|
}
|
|
281
288
|
|
|
@@ -317,6 +324,9 @@ export class OpenRouterProvider implements LLMProvider {
|
|
|
317
324
|
if (orOpts.providers) {
|
|
318
325
|
body.provider = orOpts.providers
|
|
319
326
|
}
|
|
327
|
+
if (orOpts.reasoning) {
|
|
328
|
+
body.reasoning = orOpts.reasoning
|
|
329
|
+
}
|
|
320
330
|
if (orOpts.route) {
|
|
321
331
|
body.route = orOpts.route
|
|
322
332
|
}
|
|
@@ -366,19 +376,22 @@ export class OpenRouterProvider implements LLMProvider {
|
|
|
366
376
|
tool_call_id: msg.toolCallId,
|
|
367
377
|
}
|
|
368
378
|
}
|
|
369
|
-
case 'assistant':
|
|
379
|
+
case 'assistant': {
|
|
380
|
+
const mapped: OpenRouterMessage = { role: 'assistant', content: msg.content }
|
|
370
381
|
if (msg.toolCalls?.length) {
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
382
|
+
mapped.tool_calls = msg.toolCalls.map((tc): OpenRouterToolCall => ({
|
|
383
|
+
id: tc.id,
|
|
384
|
+
type: 'function',
|
|
385
|
+
function: { name: tc.name, arguments: JSON.stringify(tc.input) },
|
|
386
|
+
}))
|
|
387
|
+
}
|
|
388
|
+
// Echoed verbatim and only when present: the provider rejects an edited or reordered
|
|
389
|
+
// sequence, and adding the key for a non-reasoning model would rewrite the cached prefix.
|
|
390
|
+
if (msg.reasoningDetails?.length) {
|
|
391
|
+
mapped.reasoning_details = msg.reasoningDetails
|
|
380
392
|
}
|
|
381
|
-
return
|
|
393
|
+
return mapped
|
|
394
|
+
}
|
|
382
395
|
case 'system':
|
|
383
396
|
return { role: 'system', content: msg.content }
|
|
384
397
|
case 'user':
|
|
@@ -468,16 +481,4 @@ export class OpenRouterProvider implements LLMProvider {
|
|
|
468
481
|
return { type: 'server_error', message, statusCode: status, responseBody: body }
|
|
469
482
|
}
|
|
470
483
|
|
|
471
|
-
private mapError(err: unknown): LLMError {
|
|
472
|
-
if (err instanceof ProviderMessageValidationError) {
|
|
473
|
-
return { type: 'invalid_request', message: err.message }
|
|
474
|
-
}
|
|
475
|
-
if (err instanceof Error && err.name === 'AbortError') {
|
|
476
|
-
return { type: 'aborted', message: 'Request was aborted' }
|
|
477
|
-
}
|
|
478
|
-
if (err instanceof TypeError && (err.message.includes('fetch') || err.message.includes('network'))) {
|
|
479
|
-
return { type: 'network_error', message: err.message, cause: err }
|
|
480
|
-
}
|
|
481
|
-
return { type: 'network_error', message: err instanceof Error ? err.message : String(err), cause: err }
|
|
482
|
-
}
|
|
483
484
|
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export type ProviderRequestAbortCause = 'caller' | 'timeout'
|
|
2
|
+
|
|
3
|
+
export class ProviderRequestAbortError extends Error {
|
|
4
|
+
constructor(readonly abortCause: ProviderRequestAbortCause) {
|
|
5
|
+
super(abortCause === 'caller' ? 'Request was aborted' : 'Request timed out')
|
|
6
|
+
this.name = 'ProviderRequestAbortError'
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export async function runProviderRequest<T>(
|
|
11
|
+
options: { callerSignal?: AbortSignal; timeoutMs: number },
|
|
12
|
+
run: (signal: AbortSignal) => Promise<T>,
|
|
13
|
+
): Promise<T> {
|
|
14
|
+
if (options.callerSignal?.aborted) throw new ProviderRequestAbortError('caller')
|
|
15
|
+
|
|
16
|
+
const controller = new AbortController()
|
|
17
|
+
let abortCause: ProviderRequestAbortCause | undefined
|
|
18
|
+
const abort = (cause: ProviderRequestAbortCause) => {
|
|
19
|
+
if (abortCause) return
|
|
20
|
+
abortCause = cause
|
|
21
|
+
controller.abort()
|
|
22
|
+
}
|
|
23
|
+
const abortFromCaller = () => abort('caller')
|
|
24
|
+
const timeoutId = setTimeout(() => abort('timeout'), options.timeoutMs)
|
|
25
|
+
options.callerSignal?.addEventListener('abort', abortFromCaller, {
|
|
26
|
+
once: true,
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
try {
|
|
30
|
+
const response = await run(controller.signal)
|
|
31
|
+
if (abortCause) throw new ProviderRequestAbortError(abortCause)
|
|
32
|
+
return response
|
|
33
|
+
} catch (error) {
|
|
34
|
+
if (abortCause) throw new ProviderRequestAbortError(abortCause)
|
|
35
|
+
throw error
|
|
36
|
+
} finally {
|
|
37
|
+
clearTimeout(timeoutId)
|
|
38
|
+
options.callerSignal?.removeEventListener('abort', abortFromCaller)
|
|
39
|
+
}
|
|
40
|
+
}
|
package/src/core/llm/provider.ts
CHANGED
|
@@ -1,13 +1,23 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type {
|
|
2
|
+
AssistantLLMMessage,
|
|
3
|
+
LLMMessage,
|
|
4
|
+
ReasoningDetails,
|
|
5
|
+
SystemLLMMessage,
|
|
6
|
+
ThinkingBlocks,
|
|
7
|
+
ToolCall,
|
|
8
|
+
ToolLLMMessage,
|
|
9
|
+
UserLLMMessage,
|
|
10
|
+
} from '~/core/agents/state.js'
|
|
2
11
|
import type { FileStore } from '~/core/file-store/types.js'
|
|
3
12
|
import type { ToolResultContent } from '~/core/llm/llm-log-types.js'
|
|
4
13
|
import type { ToolDefinition } from '~/core/tools/definition.js'
|
|
5
14
|
import type { ToolCallId } from '~/core/tools/schema.js'
|
|
6
15
|
import type { Result } from '~/lib/utils/result.js'
|
|
16
|
+
import { ProviderMessageValidationError } from './message-sanitization.js'
|
|
7
17
|
import { ModelId } from './schema.js'
|
|
8
18
|
|
|
9
19
|
// Re-export LLMMessage types from agents/state for backwards compatibility
|
|
10
|
-
export type { AssistantLLMMessage, LLMMessage, SystemLLMMessage, ToolCall, ToolLLMMessage, UserLLMMessage }
|
|
20
|
+
export type { AssistantLLMMessage, LLMMessage, ReasoningDetails, SystemLLMMessage, ThinkingBlocks, ToolCall, ToolLLMMessage, UserLLMMessage }
|
|
11
21
|
|
|
12
22
|
// ============================================================================
|
|
13
23
|
// Request types
|
|
@@ -41,9 +51,37 @@ export interface OpenRouterProviderRouting {
|
|
|
41
51
|
quantizations?: string[]
|
|
42
52
|
}
|
|
43
53
|
|
|
54
|
+
/**
|
|
55
|
+
* Reasoning controls.
|
|
56
|
+
*
|
|
57
|
+
* Without these the model's own default applies, and several of the defaults are expensive:
|
|
58
|
+
* `high` on Claude Sonnet 5, Opus 5 and Grok 4.5, `max` on Kimi K3. Reasoning is also
|
|
59
|
+
* `mandatory` on Gemini 3.6 Flash, Grok 4.5 and Kimi K2.7 Code — those cannot be turned off,
|
|
60
|
+
* only turned down.
|
|
61
|
+
*
|
|
62
|
+
* **Which efforts a model accepts differs per model.** The catalog's
|
|
63
|
+
* `reasoning.supported_efforts` is the authority: Kimi K3 has no `medium`, `minimal` exists
|
|
64
|
+
* only on Gemini, `xhigh`/`none` only on the OpenAI and newer Anthropic models. The union here
|
|
65
|
+
* is every value seen across them, not a set any single model takes.
|
|
66
|
+
*
|
|
67
|
+
* @see https://openrouter.ai/docs/use-cases/reasoning-tokens
|
|
68
|
+
*/
|
|
69
|
+
export interface OpenRouterReasoningOptions {
|
|
70
|
+
/** Relative budget. Mutually exclusive with `max_tokens` — set one. */
|
|
71
|
+
effort?: 'none' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh' | 'max'
|
|
72
|
+
/** Absolute token budget, for models that take one instead of an effort. */
|
|
73
|
+
max_tokens?: number
|
|
74
|
+
/** Explicitly enable reasoning at the model's default effort. */
|
|
75
|
+
enabled?: boolean
|
|
76
|
+
/** Reason, but omit the blocks from the response. Note this breaks the round trip. */
|
|
77
|
+
exclude?: boolean
|
|
78
|
+
}
|
|
79
|
+
|
|
44
80
|
export interface OpenRouterRequestOptions {
|
|
45
81
|
/** Provider routing preferences */
|
|
46
82
|
providers?: OpenRouterProviderRouting
|
|
83
|
+
/** Reasoning budget. Omitted: the model's own default, which is often `high`. */
|
|
84
|
+
reasoning?: OpenRouterReasoningOptions
|
|
47
85
|
/** Routing strategy */
|
|
48
86
|
route?: 'fallback'
|
|
49
87
|
/** Model transforms */
|
|
@@ -141,8 +179,12 @@ export interface InferenceResponse {
|
|
|
141
179
|
metrics: LLMMetrics
|
|
142
180
|
/** Provider-specific request ID (e.g., OpenRouter generation ID for fetching stats) */
|
|
143
181
|
providerRequestId?: string
|
|
144
|
-
/** Extended thinking / reasoning content (for models that support it) */
|
|
182
|
+
/** Extended thinking / reasoning content (for models that support it) — human-readable, for logs and the debug UI. */
|
|
145
183
|
reasoning?: string
|
|
184
|
+
/** Opaque reasoning blocks to echo back on the next request. Absent for models that do not reason. */
|
|
185
|
+
reasoningDetails?: ReasoningDetails
|
|
186
|
+
/** Anthropic thinking blocks to replay on the next request. Absent unless extended thinking is enabled. */
|
|
187
|
+
thinkingBlocks?: ThinkingBlocks
|
|
146
188
|
}
|
|
147
189
|
|
|
148
190
|
/**
|
|
@@ -240,3 +282,30 @@ export const LLMMessageFactory = {
|
|
|
240
282
|
|
|
241
283
|
system: (content: string): SystemLLMMessage => ({ role: 'system', content }),
|
|
242
284
|
}
|
|
285
|
+
|
|
286
|
+
// ============================================================================
|
|
287
|
+
// Error mapping
|
|
288
|
+
// ============================================================================
|
|
289
|
+
|
|
290
|
+
/**
|
|
291
|
+
* Maps a thrown provider error onto an LLMError.
|
|
292
|
+
*
|
|
293
|
+
* `timedOut` distinguishes our own request timeout from a caller-initiated
|
|
294
|
+
* cancel: both abort the same controller and surface as an indistinguishable
|
|
295
|
+
* AbortError, but only the timeout is retryable. Mapping a timeout to 'aborted'
|
|
296
|
+
* makes Agent.runInference bail silently and leave the agent stuck 'inferring'.
|
|
297
|
+
*/
|
|
298
|
+
export function mapProviderError(err: unknown, opts?: { timedOut?: boolean }): LLMError {
|
|
299
|
+
if (err instanceof ProviderMessageValidationError) {
|
|
300
|
+
return { type: 'invalid_request', message: err.message }
|
|
301
|
+
}
|
|
302
|
+
if (err instanceof Error && err.name === 'AbortError') {
|
|
303
|
+
return opts?.timedOut
|
|
304
|
+
? { type: 'timeout', message: 'Request timed out', cause: err }
|
|
305
|
+
: { type: 'aborted', message: 'Request was aborted' }
|
|
306
|
+
}
|
|
307
|
+
if (err instanceof TypeError && (err.message.includes('fetch') || err.message.includes('network'))) {
|
|
308
|
+
return { type: 'network_error', message: err.message, cause: err }
|
|
309
|
+
}
|
|
310
|
+
return { type: 'network_error', message: err instanceof Error ? err.message : String(err), cause: err }
|
|
311
|
+
}
|
package/src/core/llm/state.ts
CHANGED
|
@@ -48,6 +48,9 @@ export type LLMMetrics = {
|
|
|
48
48
|
// LLM events
|
|
49
49
|
// ============================================================================
|
|
50
50
|
|
|
51
|
+
/** Opaque by design — provider chain-of-thought blocks are stored and echoed verbatim, never inspected. */
|
|
52
|
+
const opaqueBlocksSchema = z4.array(z4.unknown())
|
|
53
|
+
|
|
51
54
|
const llmMetricsSchema = z4.object({
|
|
52
55
|
promptTokens: z4.number(),
|
|
53
56
|
completionTokens: z4.number(),
|
|
@@ -77,6 +80,15 @@ export const llmEvents = createEventsFactory({
|
|
|
77
80
|
name: z4.string(),
|
|
78
81
|
input: z4.unknown(),
|
|
79
82
|
})),
|
|
83
|
+
/**
|
|
84
|
+
* Opaque provider reasoning blocks (see ReasoningDetails). Carried by the
|
|
85
|
+
* event, not just by the live response, because a session rebuilt from the
|
|
86
|
+
* log would otherwise resume without the chain of thought the provider
|
|
87
|
+
* expects to get back.
|
|
88
|
+
*/
|
|
89
|
+
reasoningDetails: opaqueBlocksSchema.optional(),
|
|
90
|
+
/** Anthropic thinking blocks (see ThinkingBlocks). Carried for the same reason. */
|
|
91
|
+
thinkingBlocks: opaqueBlocksSchema.optional(),
|
|
80
92
|
}),
|
|
81
93
|
metrics: llmMetricsSchema,
|
|
82
94
|
llmCallId: llmCallIdSchema.optional(),
|
|
@@ -60,7 +60,7 @@ type ManagerMethodEntry = { input: unknown; output: unknown }
|
|
|
60
60
|
|
|
61
61
|
/**
|
|
62
62
|
* Notification entry — registered via .notification() on PluginBuilder.
|
|
63
|
-
*
|
|
63
|
+
* The schema is enforced at runtime: see `guardNotify`.
|
|
64
64
|
*/
|
|
65
65
|
type NotificationEntry = { schema: z4.ZodType }
|
|
66
66
|
|
|
@@ -129,6 +129,10 @@ export type DepsFromPlugins<TPlugins extends readonly PluginDefinition<string, a
|
|
|
129
129
|
* - 'agent': called via agent tool (ctx.self)
|
|
130
130
|
* - 'client': called via SPA RPC (user-initiated)
|
|
131
131
|
* - 'system': called via backend/webhook (trusted)
|
|
132
|
+
*
|
|
133
|
+
* `beforeMethod` gates branch on this, so it is an authority claim, not an input:
|
|
134
|
+
* a host must stamp it from what it authenticated and must never take it from a
|
|
135
|
+
* request body an untrusted caller can write.
|
|
132
136
|
*/
|
|
133
137
|
export type CallerContext = {
|
|
134
138
|
source: 'agent' | 'client' | 'system'
|
|
@@ -238,9 +242,27 @@ type HookMap<TCtx> = {
|
|
|
238
242
|
onPause: (ctx: TCtx & { reason?: string }) => Promise<OnPauseResult>
|
|
239
243
|
}
|
|
240
244
|
|
|
245
|
+
/**
|
|
246
|
+
* Why a resident session runtime is being closed.
|
|
247
|
+
*
|
|
248
|
+
* `evicted` parks an idle runtime that will be rebuilt on the next access, so
|
|
249
|
+
* close hooks must keep anything the session still needs; `closed` and
|
|
250
|
+
* `shutdown` end it for good.
|
|
251
|
+
*/
|
|
252
|
+
export type SessionCloseReason = 'closed' | 'evicted' | 'shutdown'
|
|
253
|
+
|
|
241
254
|
type SessionHookMap<TCtx> = {
|
|
255
|
+
/**
|
|
256
|
+
* Runs once per resident runtime lifetime, not once per session — an evicted
|
|
257
|
+
* runtime is rebuilt from its event log and runs this hook again.
|
|
258
|
+
*/
|
|
242
259
|
onSessionReady: (ctx: TCtx) => Promise<void>
|
|
243
|
-
|
|
260
|
+
/**
|
|
261
|
+
* Runs once per resident runtime lifetime, not once per session — an idle
|
|
262
|
+
* eviction runs it too, and the next access runs `onSessionReady` again.
|
|
263
|
+
* Check `reason` before destroying anything the session still needs.
|
|
264
|
+
*/
|
|
265
|
+
onSessionClose: (ctx: TCtx & { reason: SessionCloseReason }) => Promise<void>
|
|
244
266
|
beforeMethod: (ctx: TCtx & { method: string; input: unknown; agentId?: AgentId }) => Promise<BeforeMethodResult>
|
|
245
267
|
}
|
|
246
268
|
|
|
@@ -316,8 +338,10 @@ type ErasedAgentHookMap = {
|
|
|
316
338
|
* Session-level hook map with proper return types but erased context.
|
|
317
339
|
*/
|
|
318
340
|
type ErasedSessionHookMap = {
|
|
341
|
+
/** Fires once per resident runtime lifetime — a rebuilt runtime runs it again. */
|
|
319
342
|
onSessionReady: (ctx: BaseSessionHookContext) => Promise<void>
|
|
320
|
-
|
|
343
|
+
/** Fires once per resident runtime lifetime — `reason` says whether the session ends or is only parked. */
|
|
344
|
+
onSessionClose: (ctx: BaseSessionHookContext & { reason: SessionCloseReason }) => Promise<void>
|
|
321
345
|
beforeMethod: (ctx: BaseSessionHookContext & { method: string; input: unknown; agentId?: AgentId }) => Promise<BeforeMethodResult>
|
|
322
346
|
}
|
|
323
347
|
|
|
@@ -329,8 +353,16 @@ type ErasedSessionHookMap = {
|
|
|
329
353
|
* ConfiguredPlugin — runtime-ready plugin instance with config bound.
|
|
330
354
|
* This is the shape that session/runtime code consumes.
|
|
331
355
|
*/
|
|
356
|
+
/**
|
|
357
|
+
* Hook precedence for a plugin that declares none. Sorts after every built-in,
|
|
358
|
+
* so preset and third-party plugins keep running in registration order.
|
|
359
|
+
*/
|
|
360
|
+
export const DEFAULT_PLUGIN_ORDER = 1000
|
|
361
|
+
|
|
332
362
|
export interface ConfiguredPlugin {
|
|
333
363
|
name: string
|
|
364
|
+
/** Hook precedence — see PluginBuilder.order(). Absent means DEFAULT_PLUGIN_ORDER. */
|
|
365
|
+
order?: number
|
|
334
366
|
methods: Record<string, {
|
|
335
367
|
input: z4.ZodType
|
|
336
368
|
output: z4.ZodType
|
|
@@ -391,6 +423,8 @@ export interface PluginDefinition<
|
|
|
391
423
|
TMethods extends Record<string, MethodEntry> = {},
|
|
392
424
|
> {
|
|
393
425
|
name: TName
|
|
426
|
+
/** Hook precedence — see PluginBuilder.order(). Absent means DEFAULT_PLUGIN_ORDER. */
|
|
427
|
+
order?: number
|
|
394
428
|
create(...args: TConfig extends void ? [] : [config: TConfig]): ConfiguredPlugin
|
|
395
429
|
configure(...args: TConfig extends void ? [] : [config: TConfig]): SessionPluginConfig<TName, TConfig>
|
|
396
430
|
configureAgent(...args: TAgentConfig extends void ? [] : [config: TAgentConfig]): AgentPluginConfig<TName, TAgentConfig>
|
|
@@ -420,6 +454,8 @@ interface StaticToolSpec {
|
|
|
420
454
|
|
|
421
455
|
interface BuilderConfig {
|
|
422
456
|
name: string
|
|
457
|
+
/** Hook precedence — see PluginBuilder.order(). */
|
|
458
|
+
order: number | undefined
|
|
423
459
|
events: readonly EventSourceRef[]
|
|
424
460
|
/** Names of dependency plugins — stored for runtime wiring */
|
|
425
461
|
dependencyNames: string[]
|
|
@@ -481,6 +517,7 @@ export class PluginBuilder<
|
|
|
481
517
|
this._name = name
|
|
482
518
|
this._cfg = cfg ?? {
|
|
483
519
|
name,
|
|
520
|
+
order: undefined,
|
|
484
521
|
events: [],
|
|
485
522
|
dependencyNames: [],
|
|
486
523
|
stateConfig: undefined,
|
|
@@ -503,6 +540,16 @@ export class PluginBuilder<
|
|
|
503
540
|
|
|
504
541
|
// --- Setup ---
|
|
505
542
|
|
|
543
|
+
/**
|
|
544
|
+
* Declare where this plugin sits in hook order. Lower runs first, which for the
|
|
545
|
+
* agent hooks — first non-null result wins — decides who gets to act. Built-ins
|
|
546
|
+
* occupy 10…150; anything without an order runs after them, in registration order.
|
|
547
|
+
*/
|
|
548
|
+
order(value: number): this {
|
|
549
|
+
this._cfg.order = value
|
|
550
|
+
return this
|
|
551
|
+
}
|
|
552
|
+
|
|
506
553
|
pluginConfig<T>(): PluginBuilder<TName, T, TContext, TState, TMethods, TManagerMethods, TAgentConfig, TFactories, TNotifications, TDeps> {
|
|
507
554
|
return this as unknown as PluginBuilder<TName, T, TContext, TState, TMethods, TManagerMethods, TAgentConfig, TFactories, TNotifications, TDeps>
|
|
508
555
|
}
|
|
@@ -713,6 +760,16 @@ export class PluginBuilder<
|
|
|
713
760
|
return this
|
|
714
761
|
}
|
|
715
762
|
|
|
763
|
+
/**
|
|
764
|
+
* Register a session-level hook.
|
|
765
|
+
*
|
|
766
|
+
* `onSessionReady` and `onSessionClose` bracket one *resident runtime*, not
|
|
767
|
+
* one session: an idle runtime is evicted (close hook runs with
|
|
768
|
+
* `reason: 'evicted'`) and rebuilt from the event log on the next access,
|
|
769
|
+
* which runs `onSessionReady` again. Only `reason: 'closed'` / `'shutdown'`
|
|
770
|
+
* mean the session is really over — anything destructive belongs behind that
|
|
771
|
+
* check.
|
|
772
|
+
*/
|
|
716
773
|
sessionHook<TName extends keyof SessionHookMap<PluginSessionHookContext<TConfig, TMethods, TContext, TState, TNotifications, TDeps>>>(
|
|
717
774
|
name: TName,
|
|
718
775
|
fn: SessionHookMap<PluginSessionHookContext<TConfig, TMethods, TContext, TState, TNotifications, TDeps>>[TName],
|
|
@@ -789,6 +846,7 @@ export class PluginBuilder<
|
|
|
789
846
|
|
|
790
847
|
const def: PluginDefinition<TName, TConfig, TAgentConfig, TManagerMethods, TMethods> = {
|
|
791
848
|
name,
|
|
849
|
+
order: cfg.order,
|
|
792
850
|
create: ((...args: unknown[]) => {
|
|
793
851
|
const pluginConfig = args[0]
|
|
794
852
|
return buildConfiguredPlugin(cfg, pluginConfig)
|
|
@@ -813,7 +871,40 @@ export class PluginBuilder<
|
|
|
813
871
|
// Build configured plugin — binds config into all closures
|
|
814
872
|
// ============================================================================
|
|
815
873
|
|
|
874
|
+
type NotifyFn = (type: string, payload: unknown) => void
|
|
875
|
+
|
|
876
|
+
/**
|
|
877
|
+
* Hold `ctx.notify` to the contract the plugin declared with `.notification()`:
|
|
878
|
+
* an undeclared type or a payload that fails its schema is logged and dropped
|
|
879
|
+
* rather than broadcast, so clients never see a shape nothing promised.
|
|
880
|
+
*/
|
|
881
|
+
function guardNotify(
|
|
882
|
+
pluginName: string,
|
|
883
|
+
notifications: Record<string, { schema: z4.ZodType }>,
|
|
884
|
+
ctx: { notify: NotifyFn; logger: Logger },
|
|
885
|
+
): NotifyFn {
|
|
886
|
+
return (type, payload) => {
|
|
887
|
+
const declared = notifications[type]
|
|
888
|
+
if (!declared) {
|
|
889
|
+
ctx.logger.error(`Plugin "${pluginName}" emitted undeclared notification "${type}"`)
|
|
890
|
+
return
|
|
891
|
+
}
|
|
892
|
+
|
|
893
|
+
const parsed = declared.schema.safeParse(payload)
|
|
894
|
+
if (!parsed.success) {
|
|
895
|
+
ctx.logger.error(`Plugin "${pluginName}" notification "${type}" does not match its declared schema`, undefined, {
|
|
896
|
+
issues: parsed.error.message,
|
|
897
|
+
})
|
|
898
|
+
return
|
|
899
|
+
}
|
|
900
|
+
|
|
901
|
+
ctx.notify(type, payload)
|
|
902
|
+
}
|
|
903
|
+
}
|
|
904
|
+
|
|
816
905
|
function buildConfiguredPlugin(cfg: BuilderConfig, pluginConfig: unknown): ConfiguredPlugin {
|
|
906
|
+
const notifyFor = (ctx: { notify: NotifyFn; logger: Logger }): NotifyFn => guardNotify(cfg.name, cfg.notifications, ctx)
|
|
907
|
+
|
|
817
908
|
let slice: StateSlice | undefined
|
|
818
909
|
if (cfg.stateConfig) {
|
|
819
910
|
const stateReduce = cfg.stateConfig.reduce
|
|
@@ -832,7 +923,7 @@ function buildConfiguredPlugin(cfg: BuilderConfig, pluginConfig: unknown): Confi
|
|
|
832
923
|
name,
|
|
833
924
|
// Agent.ts provides the full context with extra fields (pendingMessages, turnNumber, etc.)
|
|
834
925
|
// — this wrapper just injects pluginConfig at the boundary
|
|
835
|
-
(ctx: BasePluginHookContext) => fn({ ...ctx, pluginConfig }),
|
|
926
|
+
(ctx: BasePluginHookContext) => fn({ ...ctx, pluginConfig, notify: notifyFor(ctx) }),
|
|
836
927
|
]),
|
|
837
928
|
) as Partial<ErasedAgentHookMap>
|
|
838
929
|
: undefined
|
|
@@ -844,7 +935,7 @@ function buildConfiguredPlugin(cfg: BuilderConfig, pluginConfig: unknown): Confi
|
|
|
844
935
|
name,
|
|
845
936
|
// Session.ts provides the full context with extra fields (method, input,
|
|
846
937
|
// agentId for beforeMethod) — this wrapper just injects pluginConfig.
|
|
847
|
-
(ctx: BaseSessionHookContext) => fn({ ...ctx, pluginConfig }),
|
|
938
|
+
(ctx: BaseSessionHookContext) => fn({ ...ctx, pluginConfig, notify: notifyFor(ctx) }),
|
|
848
939
|
]),
|
|
849
940
|
) as Partial<ErasedSessionHookMap>
|
|
850
941
|
: undefined
|
|
@@ -855,7 +946,7 @@ function buildConfiguredPlugin(cfg: BuilderConfig, pluginConfig: unknown): Confi
|
|
|
855
946
|
let getTools: ((ctx: BasePluginHookContext) => ToolDefinition<any>[]) | undefined
|
|
856
947
|
if (staticToolSpecs.length > 0 || dynamicToolsFn) {
|
|
857
948
|
getTools = (ctx: BasePluginHookContext) => {
|
|
858
|
-
const enrichedCtx: BasePluginHookContext = { ...ctx, pluginConfig }
|
|
949
|
+
const enrichedCtx: BasePluginHookContext = { ...ctx, pluginConfig, notify: notifyFor(ctx) }
|
|
859
950
|
const tools: ToolDefinition<any>[] = []
|
|
860
951
|
// Static tools — create ToolDefinition from StaticToolSpec using closure
|
|
861
952
|
for (const spec of staticToolSpecs) {
|
|
@@ -877,32 +968,32 @@ function buildConfiguredPlugin(cfg: BuilderConfig, pluginConfig: unknown): Confi
|
|
|
877
968
|
// Wrap createContext to pass pluginConfig
|
|
878
969
|
const contextFactory = cfg.contextFactory
|
|
879
970
|
const wrappedContextFactory = contextFactory
|
|
880
|
-
? (ctx: SessionContext) => contextFactory(ctx, pluginConfig)
|
|
971
|
+
? (ctx: SessionContext) => contextFactory({ ...ctx, notify: notifyFor(ctx) }, pluginConfig)
|
|
881
972
|
: undefined
|
|
882
973
|
|
|
883
974
|
// Wrap status/systemPrompt/dequeue to inject pluginConfig
|
|
884
975
|
const statusFn = cfg.statusFn
|
|
885
976
|
const wrappedStatus = statusFn
|
|
886
|
-
? (ctx: BasePluginHookContext) => statusFn({ ...ctx, pluginConfig })
|
|
977
|
+
? (ctx: BasePluginHookContext) => statusFn({ ...ctx, pluginConfig, notify: notifyFor(ctx) })
|
|
887
978
|
: undefined
|
|
888
979
|
|
|
889
980
|
const systemPromptFn = cfg.systemPromptFn
|
|
890
981
|
const wrappedSystemPrompt = systemPromptFn
|
|
891
|
-
? (ctx: BasePluginHookContext) => systemPromptFn({ ...ctx, pluginConfig })
|
|
982
|
+
? (ctx: BasePluginHookContext) => systemPromptFn({ ...ctx, pluginConfig, notify: notifyFor(ctx) })
|
|
892
983
|
: undefined
|
|
893
984
|
|
|
894
985
|
const dequeueHook = cfg.dequeueHook
|
|
895
986
|
const wrappedDequeue = dequeueHook
|
|
896
987
|
? {
|
|
897
|
-
hasPendingMessages: (ctx: BasePluginHookContext) => dequeueHook.hasPendingMessages({ ...ctx, pluginConfig }),
|
|
898
|
-
getPendingMessages: (ctx: BasePluginHookContext) => dequeueHook.getPendingMessages({ ...ctx, pluginConfig }),
|
|
899
|
-
markConsumed: (ctx: BasePluginHookContext, token: unknown) => dequeueHook.markConsumed({ ...ctx, pluginConfig }, token),
|
|
988
|
+
hasPendingMessages: (ctx: BasePluginHookContext) => dequeueHook.hasPendingMessages({ ...ctx, pluginConfig, notify: notifyFor(ctx) }),
|
|
989
|
+
getPendingMessages: (ctx: BasePluginHookContext) => dequeueHook.getPendingMessages({ ...ctx, pluginConfig, notify: notifyFor(ctx) }),
|
|
990
|
+
markConsumed: (ctx: BasePluginHookContext, token: unknown) => dequeueHook.markConsumed({ ...ctx, pluginConfig, notify: notifyFor(ctx) }, token),
|
|
900
991
|
}
|
|
901
992
|
: undefined
|
|
902
993
|
|
|
903
994
|
const beforeDequeueFn = cfg.beforeDequeueFn
|
|
904
995
|
const wrappedBeforeDequeue = beforeDequeueFn
|
|
905
|
-
? (ctx: BasePluginHookContext & { sourcePlugin: string }) => beforeDequeueFn({ ...ctx, pluginConfig })
|
|
996
|
+
? (ctx: BasePluginHookContext & { sourcePlugin: string }) => beforeDequeueFn({ ...ctx, pluginConfig, notify: notifyFor(ctx) })
|
|
906
997
|
: undefined
|
|
907
998
|
|
|
908
999
|
// Wrap isEnabled to pass pluginConfig
|
|
@@ -925,12 +1016,13 @@ function buildConfiguredPlugin(cfg: BuilderConfig, pluginConfig: unknown): Confi
|
|
|
925
1016
|
wrappedMethods[name] = {
|
|
926
1017
|
input: method.input,
|
|
927
1018
|
output: method.output,
|
|
928
|
-
handler: (ctx, input) => method.handler({ ...ctx, pluginConfig }, input),
|
|
1019
|
+
handler: (ctx, input) => method.handler({ ...ctx, pluginConfig, notify: notifyFor(ctx) }, input),
|
|
929
1020
|
}
|
|
930
1021
|
}
|
|
931
1022
|
|
|
932
1023
|
return {
|
|
933
1024
|
name: cfg.name,
|
|
1025
|
+
order: cfg.order,
|
|
934
1026
|
methods: wrappedMethods,
|
|
935
1027
|
notifications: cfg.notifications,
|
|
936
1028
|
dependencyNames: cfg.dependencyNames,
|