@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
package/src/core/agents/agent.ts
CHANGED
|
@@ -9,8 +9,9 @@
|
|
|
9
9
|
|
|
10
10
|
import z from 'zod/v4'
|
|
11
11
|
import { DebounceCallback } from '~/core/agents/debounce.js'
|
|
12
|
-
import
|
|
13
|
-
import
|
|
12
|
+
import { AgentId } from '~/core/agents/schema.js'
|
|
13
|
+
import { agentWakeKey, type AgentWakeKind } from '~/core/wake-key.js'
|
|
14
|
+
import type { AgentState, HandlerResult, ReasoningDetails, ThinkingBlocks } from '~/core/agents/state.js'
|
|
14
15
|
import { agentEvents } from '~/core/agents/state.js'
|
|
15
16
|
import { withSessionId } from '~/core/events/test-helpers.js'
|
|
16
17
|
import type { FileStore } from '~/core/file-store/types.js'
|
|
@@ -43,12 +44,14 @@ import type { ToolDefinition } from '~/core/tools/definition.js'
|
|
|
43
44
|
import type { ToolCall } from '~/core/tools/schema.js'
|
|
44
45
|
import { ToolCallId } from '~/core/tools/schema.js'
|
|
45
46
|
import { toolEvents } from '~/core/tools/state.js'
|
|
47
|
+
import type { Scheduler } from '~/platform/scheduler.js'
|
|
46
48
|
import { getAgentUnconsumedMailbox, selectMailboxState } from '~/plugins/mailbox/query.js'
|
|
47
49
|
import { AGENT_BASE_BRIEFING } from '~/prompts/base.js'
|
|
48
50
|
import { buildEnvironmentSection } from '~/prompts/builder.js'
|
|
49
51
|
import { Err, Ok, type Result } from '~/lib/utils/result.js'
|
|
50
52
|
import type { Logger } from '../../lib/logger/logger.js'
|
|
51
53
|
import type { SessionContext } from '../sessions/context.js'
|
|
54
|
+
import { isValidSessionId, SessionId } from '../sessions/schema.js'
|
|
52
55
|
import type { SessionStore } from '../sessions/session-store.js'
|
|
53
56
|
import type { SessionState } from '../sessions/state.js'
|
|
54
57
|
import { resolveAgentOverrides } from '../sessions/state.js'
|
|
@@ -102,7 +105,7 @@ export interface AgentConfig<TInput = unknown> {
|
|
|
102
105
|
*/
|
|
103
106
|
export interface AgentDependencies {
|
|
104
107
|
id: AgentId
|
|
105
|
-
|
|
108
|
+
getSessionContext: () => SessionContext
|
|
106
109
|
store: SessionStore
|
|
107
110
|
llmProvider: LLMProvider
|
|
108
111
|
/** Named provider instances, passed to InferenceContext for middleware routing */
|
|
@@ -141,7 +144,7 @@ export interface AgentDependencies {
|
|
|
141
144
|
export class Agent {
|
|
142
145
|
readonly id: AgentId
|
|
143
146
|
private readonly config: AgentConfig
|
|
144
|
-
private readonly
|
|
147
|
+
private readonly getSessionContext: () => SessionContext
|
|
145
148
|
private readonly store: SessionStore
|
|
146
149
|
private readonly logger: Logger
|
|
147
150
|
private readonly llmProvider: LLMProvider
|
|
@@ -159,20 +162,24 @@ export class Agent {
|
|
|
159
162
|
private tools: Map<string, ToolDefinition>
|
|
160
163
|
|
|
161
164
|
// Scheduler state (embedded)
|
|
162
|
-
|
|
163
|
-
private
|
|
165
|
+
/** Poll timer for the debounceCallback path only — see scheduleProcessing(). */
|
|
166
|
+
private debounceCheckTimer?: ReturnType<typeof setTimeout>
|
|
167
|
+
/** Whether a retry wake is armed. In-memory: a fresh process re-arms from replayed state. */
|
|
168
|
+
private errorRetryArmed = false
|
|
169
|
+
private releaseScheduledLease?: () => void
|
|
170
|
+
/** Host scheduler, resolved once — the platform never changes for a session. */
|
|
171
|
+
private scheduler?: Scheduler
|
|
164
172
|
private processing = false
|
|
165
173
|
private scheduled = false
|
|
166
174
|
private pendingReschedule = false
|
|
175
|
+
/** In-flight continue() calls, so disposal can drain a turn instead of racing it. */
|
|
176
|
+
private readonly inFlightContinues = new Set<Promise<void>>()
|
|
167
177
|
private readonly abortController = new AbortController()
|
|
168
178
|
|
|
169
|
-
/** Track conversation turn number for handler context */
|
|
170
|
-
private turnNumber = 0
|
|
171
|
-
|
|
172
179
|
constructor(deps: AgentDependencies) {
|
|
173
180
|
this.id = deps.id
|
|
174
181
|
this.config = deps.config
|
|
175
|
-
this.
|
|
182
|
+
this.getSessionContext = deps.getSessionContext
|
|
176
183
|
this.store = deps.store
|
|
177
184
|
this.logger = deps.logger
|
|
178
185
|
this.llmProvider = deps.llmProvider
|
|
@@ -186,12 +193,14 @@ export class Agent {
|
|
|
186
193
|
this.pluginMethodCaller = deps.pluginMethodCaller
|
|
187
194
|
this.scheduleCallback = deps.schedule
|
|
188
195
|
this.tools = this.buildToolsMap()
|
|
196
|
+
}
|
|
189
197
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
198
|
+
/**
|
|
199
|
+
* Turn the agent is working on: committed turns plus the one in flight.
|
|
200
|
+
* Read from persisted state so a reload or a compaction can't reset it.
|
|
201
|
+
*/
|
|
202
|
+
private get turnNumber(): number {
|
|
203
|
+
return (this.state?.turnNumber ?? 0) + 1
|
|
195
204
|
}
|
|
196
205
|
|
|
197
206
|
/**
|
|
@@ -221,13 +230,49 @@ export class Agent {
|
|
|
221
230
|
// Public API
|
|
222
231
|
// ============================================================================
|
|
223
232
|
|
|
233
|
+
/** Drop the scheduled lease. Idempotent — the release closure self-guards. */
|
|
234
|
+
private dropScheduledLease(): void {
|
|
235
|
+
this.releaseScheduledLease?.()
|
|
236
|
+
this.releaseScheduledLease = undefined
|
|
237
|
+
}
|
|
238
|
+
|
|
224
239
|
/**
|
|
225
240
|
* Unified processing entry point - decides what to do next.
|
|
226
241
|
* Safe to call multiple times; skips if already processing.
|
|
227
242
|
*/
|
|
228
|
-
|
|
243
|
+
continue(): Promise<void> {
|
|
244
|
+
const pending = this.runContinue().finally(() => {
|
|
245
|
+
this.inFlightContinues.delete(pending)
|
|
246
|
+
})
|
|
247
|
+
this.inFlightContinues.add(pending)
|
|
248
|
+
return pending
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* Await the turn that is currently running, if any — including work it starts
|
|
253
|
+
* while draining. Never rejects: callers use it to drain before teardown, not
|
|
254
|
+
* to observe processing errors.
|
|
255
|
+
*/
|
|
256
|
+
async waitForIdle(): Promise<void> {
|
|
257
|
+
while (this.inFlightContinues.size > 0) {
|
|
258
|
+
await Promise.allSettled([...this.inFlightContinues])
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
private async runContinue(): Promise<void> {
|
|
263
|
+
// Release before the guards: both early-return paths are reachable from a
|
|
264
|
+
// fired timer, and the lease would otherwise outlive the schedule forever.
|
|
265
|
+
// The retry lease is not touched here — it only ever exists inside the
|
|
266
|
+
// retry callback, which releases it itself.
|
|
267
|
+
this.dropScheduledLease()
|
|
229
268
|
if (this.processing) return
|
|
230
269
|
if (this.store.isClosed()) return
|
|
270
|
+
let releaseProcessingLease: (() => void) | undefined
|
|
271
|
+
try {
|
|
272
|
+
releaseProcessingLease = this.getSessionContext().runtimeActivity.acquire(`agent:${this.id}:processing`)
|
|
273
|
+
} catch {
|
|
274
|
+
return
|
|
275
|
+
}
|
|
231
276
|
this.processing = true
|
|
232
277
|
this.scheduled = false
|
|
233
278
|
|
|
@@ -317,6 +362,7 @@ export class Agent {
|
|
|
317
362
|
this.pendingReschedule = false
|
|
318
363
|
this.scheduleProcessing()
|
|
319
364
|
}
|
|
365
|
+
releaseProcessingLease()
|
|
320
366
|
}
|
|
321
367
|
}
|
|
322
368
|
|
|
@@ -327,82 +373,119 @@ export class Agent {
|
|
|
327
373
|
scheduleProcessing(): void {
|
|
328
374
|
if (this.scheduled) return
|
|
329
375
|
if (this.store.isClosed()) return
|
|
376
|
+
// After shutdown() a fresh schedule would outlive the drain and fire against
|
|
377
|
+
// a session that already cleared its agents and plugin contexts.
|
|
378
|
+
if (this.abortController.signal.aborted) return
|
|
330
379
|
if (this.processing) {
|
|
331
380
|
this.pendingReschedule = true
|
|
332
381
|
return
|
|
333
382
|
}
|
|
334
383
|
|
|
335
384
|
this.cancelSchedule()
|
|
385
|
+
try {
|
|
386
|
+
this.releaseScheduledLease = this.getSessionContext().runtimeActivity.acquire(`agent:${this.id}:scheduled`)
|
|
387
|
+
} catch {
|
|
388
|
+
return
|
|
389
|
+
}
|
|
336
390
|
this.scheduled = true
|
|
337
391
|
|
|
338
392
|
const agentState = this.state
|
|
339
|
-
if (!agentState)
|
|
393
|
+
if (!agentState) {
|
|
394
|
+
this.cancelSchedule()
|
|
395
|
+
return
|
|
396
|
+
}
|
|
340
397
|
|
|
341
398
|
if (this.config.debounceCallback) {
|
|
342
|
-
//
|
|
399
|
+
// Stays a plain timer: the poll re-enters with a closure and its own
|
|
400
|
+
// in-memory `scheduled` guard, neither of which a resumed wake can carry.
|
|
343
401
|
const checkInterval = this.config.checkIntervalMs ?? 100
|
|
344
402
|
|
|
345
403
|
const scheduleCheck = () => {
|
|
346
|
-
this.
|
|
347
|
-
//
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
}
|
|
404
|
+
this.debounceCheckTimer = setTimeout(() => {
|
|
405
|
+
// A throw here (hasPluginPendingMessages, or the preset-supplied
|
|
406
|
+
// debounceCallback — user code) must not strand the scheduled lease.
|
|
407
|
+
void this.runDebounceCheck(scheduleCheck)
|
|
408
|
+
}, checkInterval)
|
|
409
|
+
}
|
|
353
410
|
|
|
354
|
-
|
|
355
|
-
|
|
411
|
+
scheduleCheck()
|
|
412
|
+
} else {
|
|
413
|
+
// Debounce by wake (default: 500ms) — nothing but the key is needed to resume.
|
|
414
|
+
this.armWake('debounce', this.config.debounceMs ?? 500)
|
|
415
|
+
}
|
|
416
|
+
}
|
|
356
417
|
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
418
|
+
/**
|
|
419
|
+
* Run the continuation a due wake stands for — the one entry point for a host,
|
|
420
|
+
* whether this process armed the delay or an alarm held it across an eviction.
|
|
421
|
+
*/
|
|
422
|
+
async deliverWake(kind: AgentWakeKind): Promise<void> {
|
|
423
|
+
if (this.abortController.signal.aborted) return
|
|
360
424
|
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
425
|
+
switch (kind) {
|
|
426
|
+
case 'debounce':
|
|
427
|
+
// Not scheduleProcessing(): that arms a fresh delay and the turn never runs.
|
|
428
|
+
this.scheduled = false
|
|
429
|
+
await this.continue()
|
|
430
|
+
return
|
|
366
431
|
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
432
|
+
case 'retry':
|
|
433
|
+
this.errorRetryArmed = false
|
|
434
|
+
this.scheduleProcessing()
|
|
435
|
+
return
|
|
436
|
+
}
|
|
437
|
+
}
|
|
371
438
|
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
439
|
+
/** One debounce-callback check. Never rejects: on error it cancels the schedule. */
|
|
440
|
+
private async runDebounceCheck(scheduleNext: () => void): Promise<void> {
|
|
441
|
+
try {
|
|
442
|
+
// Re-read state fresh each check — no stale data
|
|
443
|
+
const currentState = this.state
|
|
444
|
+
if (!currentState) {
|
|
445
|
+
this.cancelSchedule()
|
|
446
|
+
return
|
|
447
|
+
}
|
|
378
448
|
|
|
379
|
-
|
|
380
|
-
|
|
449
|
+
// Guard: schedule could be cancelled between timer fire and here
|
|
450
|
+
if (!this.scheduled) return
|
|
381
451
|
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
scheduleCheck()
|
|
391
|
-
}
|
|
392
|
-
}, checkInterval)
|
|
452
|
+
const sessionState = this.store.getState()
|
|
453
|
+
const unconsumed = getUnconsumedMessages(sessionState, this.id)
|
|
454
|
+
const pendingToolResults = currentState.pendingToolResults
|
|
455
|
+
|
|
456
|
+
// If no messages, no pending tool results, and no plugin pending, nothing to do
|
|
457
|
+
if (unconsumed.length === 0 && pendingToolResults.length === 0 && !this.hasPluginPendingMessages()) {
|
|
458
|
+
this.cancelSchedule()
|
|
459
|
+
return
|
|
393
460
|
}
|
|
394
461
|
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
const
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
462
|
+
const oldestTimestamp = unconsumed.length > 0
|
|
463
|
+
? Math.min(...unconsumed.map((m) => m.timestamp))
|
|
464
|
+
: Date.now()
|
|
465
|
+
const oldestWaitingMs = Date.now() - oldestTimestamp
|
|
466
|
+
|
|
467
|
+
const decision = await this.config.debounceCallback!({
|
|
468
|
+
messages: unconsumed,
|
|
469
|
+
oldestWaitingMs,
|
|
470
|
+
totalPending: unconsumed.length,
|
|
471
|
+
pendingToolResults,
|
|
472
|
+
})
|
|
473
|
+
|
|
474
|
+
// Re-check after async callback — schedule could be cancelled during await
|
|
475
|
+
if (!this.scheduled) return
|
|
476
|
+
|
|
477
|
+
if (decision === 'process_now') {
|
|
478
|
+
this.cancelSchedule()
|
|
402
479
|
this.continue().catch((err) => {
|
|
403
480
|
this.logger.error('Unhandled error in continue()', err instanceof Error ? err : undefined, { agentId: this.id })
|
|
404
481
|
})
|
|
405
|
-
}
|
|
482
|
+
} else {
|
|
483
|
+
// Callback said "wait" — schedule next check. Fresh state next iteration.
|
|
484
|
+
scheduleNext()
|
|
485
|
+
}
|
|
486
|
+
} catch (err) {
|
|
487
|
+
this.logger.error('Debounce check failed', err instanceof Error ? err : undefined, { agentId: this.id })
|
|
488
|
+
this.cancelSchedule()
|
|
406
489
|
}
|
|
407
490
|
}
|
|
408
491
|
|
|
@@ -416,10 +499,8 @@ export class Agent {
|
|
|
416
499
|
// AbortError may be thrown synchronously by abort signal listeners
|
|
417
500
|
}
|
|
418
501
|
this.cancelSchedule()
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
this.errorRetryTimer = undefined
|
|
422
|
-
}
|
|
502
|
+
this.errorRetryArmed = false
|
|
503
|
+
this.cancelWake('retry')
|
|
423
504
|
}
|
|
424
505
|
|
|
425
506
|
/**
|
|
@@ -545,12 +626,16 @@ export class Agent {
|
|
|
545
626
|
* remaining backoff and re-arms if it hasn't elapsed yet.
|
|
546
627
|
*/
|
|
547
628
|
private scheduleErrorRetry(delayMs: number): void {
|
|
548
|
-
if (this.
|
|
629
|
+
if (this.errorRetryArmed) return
|
|
549
630
|
if (this.store.isClosed()) return
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
631
|
+
// Nothing cancels a wake armed after shutdown(), and delivering it would
|
|
632
|
+
// reload a session this host has already torn down.
|
|
633
|
+
if (this.abortController.signal.aborted) return
|
|
634
|
+
this.errorRetryArmed = true
|
|
635
|
+
// The backoff itself is unleased: a provider that keeps failing would
|
|
636
|
+
// otherwise pin the runtime resident forever, and the preserved dequeue
|
|
637
|
+
// token is in the event log, so a rebuilt runtime still has the work.
|
|
638
|
+
this.armWake('retry', delayMs)
|
|
554
639
|
}
|
|
555
640
|
|
|
556
641
|
private static readonly MAX_INFERENCE_RETRIES = 3
|
|
@@ -572,8 +657,6 @@ export class Agent {
|
|
|
572
657
|
// Need either tool results or plugin messages to process
|
|
573
658
|
if (!hasToolResults && pluginDequeued.length === 0) return
|
|
574
659
|
|
|
575
|
-
this.turnNumber++
|
|
576
|
-
|
|
577
660
|
// 0. beforeInference handler - can skip LLM entirely or pause
|
|
578
661
|
const beforeResult = await this.executeBeforeInference(agentState)
|
|
579
662
|
if (beforeResult !== null) {
|
|
@@ -810,7 +893,7 @@ export class Agent {
|
|
|
810
893
|
if (afterResult !== null) {
|
|
811
894
|
if (afterResult.action === 'pause') {
|
|
812
895
|
// Commit the turn before pausing so pendingMessages move to conversationHistory.
|
|
813
|
-
await this.emitInferenceCompleted(response, llmCallId, llmResponse.value.metrics)
|
|
896
|
+
await this.emitInferenceCompleted(response, llmCallId, llmResponse.value.metrics, llmResponse.value.reasoningDetails, llmResponse.value.thinkingBlocks)
|
|
814
897
|
await this.consumeDequeuedTokens(pluginDequeued)
|
|
815
898
|
await this.emitHandlerPause(afterResult.reason)
|
|
816
899
|
return
|
|
@@ -830,8 +913,7 @@ export class Agent {
|
|
|
830
913
|
this.store.sessionId,
|
|
831
914
|
llmEvents.create('inference_retried', { agentId: this.id }),
|
|
832
915
|
))
|
|
833
|
-
// Retry inference
|
|
834
|
-
this.turnNumber--
|
|
916
|
+
// Retry inference — the turn never committed, so it keeps its number.
|
|
835
917
|
const freshState = this.state
|
|
836
918
|
if (!freshState) return
|
|
837
919
|
await this.runInference(freshState, retryCount + 1)
|
|
@@ -844,7 +926,9 @@ export class Agent {
|
|
|
844
926
|
|
|
845
927
|
// 4d. Inference completed
|
|
846
928
|
// Tool calls will be executed in the next continue() cycle
|
|
847
|
-
|
|
929
|
+
// Reasoning travels beside `response`, not inside it: an afterInference handler may
|
|
930
|
+
// rewrite the text, but the blocks stay the model's own and go back untouched.
|
|
931
|
+
await this.emitInferenceCompleted(response, llmCallId, llmResponse.value.metrics, llmResponse.value.reasoningDetails, llmResponse.value.thinkingBlocks)
|
|
848
932
|
|
|
849
933
|
// Consume dequeue tokens after the commit: a crash in the gap re-delivers the
|
|
850
934
|
// message on restart (at-least-once) instead of dropping it (consume-first
|
|
@@ -869,6 +953,8 @@ export class Agent {
|
|
|
869
953
|
cachedTokens?: number
|
|
870
954
|
cacheWriteTokens?: number
|
|
871
955
|
},
|
|
956
|
+
reasoningDetails?: ReasoningDetails,
|
|
957
|
+
thinkingBlocks?: ThinkingBlocks,
|
|
872
958
|
): Promise<void> {
|
|
873
959
|
await this.store.emit(withSessionId(
|
|
874
960
|
this.store.sessionId,
|
|
@@ -882,6 +968,8 @@ export class Agent {
|
|
|
882
968
|
name: tc.name,
|
|
883
969
|
input: tc.input,
|
|
884
970
|
})),
|
|
971
|
+
reasoningDetails,
|
|
972
|
+
thinkingBlocks,
|
|
885
973
|
},
|
|
886
974
|
metrics: metrics ?? {
|
|
887
975
|
promptTokens: 0,
|
|
@@ -903,12 +991,42 @@ export class Agent {
|
|
|
903
991
|
* Cancel any scheduled processing.
|
|
904
992
|
*/
|
|
905
993
|
private cancelSchedule(): void {
|
|
906
|
-
if (this.
|
|
907
|
-
clearTimeout(this.
|
|
908
|
-
this.
|
|
994
|
+
if (this.debounceCheckTimer) {
|
|
995
|
+
clearTimeout(this.debounceCheckTimer)
|
|
996
|
+
this.debounceCheckTimer = undefined
|
|
909
997
|
}
|
|
998
|
+
this.cancelWake('debounce')
|
|
910
999
|
this.scheduled = false
|
|
911
1000
|
this.pendingReschedule = false
|
|
1001
|
+
this.releaseScheduledLease?.()
|
|
1002
|
+
this.releaseScheduledLease = undefined
|
|
1003
|
+
}
|
|
1004
|
+
|
|
1005
|
+
/** The host scheduler, or null once the runtime is gone — a disposed session builds no context. */
|
|
1006
|
+
private tryGetScheduler(): Scheduler | null {
|
|
1007
|
+
if (this.scheduler) return this.scheduler
|
|
1008
|
+
try {
|
|
1009
|
+
this.scheduler = this.getSessionContext().platform.scheduler
|
|
1010
|
+
return this.scheduler
|
|
1011
|
+
} catch {
|
|
1012
|
+
return null
|
|
1013
|
+
}
|
|
1014
|
+
}
|
|
1015
|
+
|
|
1016
|
+
/**
|
|
1017
|
+
* Arm a wake without awaiting the host: scheduleProcessing() and shutdown() are
|
|
1018
|
+
* synchronous, while a host may persist the wake asynchronously.
|
|
1019
|
+
*/
|
|
1020
|
+
private armWake(kind: AgentWakeKind, delayMs: number): void {
|
|
1021
|
+
this.tryGetScheduler()?.wake(agentWakeKey(this.store.sessionId, this.id, kind), delayMs).catch((err: unknown) => {
|
|
1022
|
+
this.logger.error('Failed to arm scheduler wake', err instanceof Error ? err : undefined, { agentId: this.id, kind })
|
|
1023
|
+
})
|
|
1024
|
+
}
|
|
1025
|
+
|
|
1026
|
+
private cancelWake(kind: AgentWakeKind): void {
|
|
1027
|
+
this.tryGetScheduler()?.cancel(agentWakeKey(this.store.sessionId, this.id, kind)).catch((err: unknown) => {
|
|
1028
|
+
this.logger.error('Failed to cancel scheduler wake', err instanceof Error ? err : undefined, { agentId: this.id, kind })
|
|
1029
|
+
})
|
|
912
1030
|
}
|
|
913
1031
|
|
|
914
1032
|
/**
|
|
@@ -1062,20 +1180,26 @@ export class Agent {
|
|
|
1062
1180
|
* Build base AgentContext for handler/hook calls.
|
|
1063
1181
|
*/
|
|
1064
1182
|
private buildAgentContext(agentState: AgentState): AgentContext {
|
|
1183
|
+
const sessionContext = this.getSessionContext()
|
|
1065
1184
|
return {
|
|
1066
|
-
// SessionContext fields
|
|
1067
|
-
sessionId:
|
|
1185
|
+
// SessionContext fields are rebuilt for up-to-date state.
|
|
1186
|
+
sessionId: sessionContext.sessionId,
|
|
1068
1187
|
sessionState: this.store.getState(),
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1188
|
+
getSessionState: sessionContext.getSessionState,
|
|
1189
|
+
sessionInput: sessionContext.sessionInput,
|
|
1190
|
+
environment: sessionContext.environment,
|
|
1191
|
+
llm: sessionContext.llm,
|
|
1192
|
+
files: sessionContext.files,
|
|
1193
|
+
eventStore: sessionContext.eventStore,
|
|
1194
|
+
llmLogger: sessionContext.llmLogger,
|
|
1195
|
+
platform: sessionContext.platform,
|
|
1076
1196
|
logger: this.logger,
|
|
1077
|
-
|
|
1078
|
-
|
|
1197
|
+
runtimeActivity: sessionContext.runtimeActivity,
|
|
1198
|
+
reserveSequence: sessionContext.reserveSequence,
|
|
1199
|
+
reserveMailboxMessageSequence: sessionContext.reserveMailboxMessageSequence,
|
|
1200
|
+
emitEvent: sessionContext.emitEvent,
|
|
1201
|
+
emitEvents: sessionContext.emitEvents,
|
|
1202
|
+
notify: sessionContext.notify,
|
|
1079
1203
|
// AgentContext fields
|
|
1080
1204
|
agentId: this.id,
|
|
1081
1205
|
agentState,
|
|
@@ -23,6 +23,12 @@ import type { ServiceConfig } from '~/plugins/services/schema.js'
|
|
|
23
23
|
*/
|
|
24
24
|
export type UserCommunicationMode = 'tool' | 'xml' | 'both'
|
|
25
25
|
|
|
26
|
+
/**
|
|
27
|
+
* Key holding the object refs behind `agents: string[]`. A symbol so it rides
|
|
28
|
+
* along on a spread or a clone without ever showing up in JSON or Object.keys.
|
|
29
|
+
*/
|
|
30
|
+
export const childAgentRefs = Symbol('roj.childAgentRefs')
|
|
31
|
+
|
|
26
32
|
/**
|
|
27
33
|
* Base configuration shared by all agent types.
|
|
28
34
|
*/
|
|
@@ -37,6 +43,8 @@ export interface BaseAgentConfig<TInput = unknown> {
|
|
|
37
43
|
tools?: ToolDefinition<any>[]
|
|
38
44
|
/** Names of agents this agent can spawn */
|
|
39
45
|
agents?: string[]
|
|
46
|
+
/** Object refs behind `agents`, set by defineAgent/createOrchestrator. */
|
|
47
|
+
readonly [childAgentRefs]?: readonly AnyAgentDefinition[]
|
|
40
48
|
/** Per-plugin agent-level configs */
|
|
41
49
|
plugins?: AgentPluginConfig[]
|
|
42
50
|
/** Debounce time in ms before processing mailbox. Default: 500ms */
|
package/src/core/agents/retry.ts
CHANGED
|
@@ -2,6 +2,7 @@ import type { LLMError } from '~/core/llm/provider.js'
|
|
|
2
2
|
import type { Result } from '~/lib/utils/result.js'
|
|
3
3
|
import { Err } from '~/lib/utils/result.js'
|
|
4
4
|
import type { Logger } from '../../lib/logger/logger.js'
|
|
5
|
+
import { sleep } from '~/lib/utils/sleep.js'
|
|
5
6
|
|
|
6
7
|
// ============================================================================
|
|
7
8
|
// Retry Options
|
|
@@ -26,7 +27,7 @@ export const DEFAULT_RETRY_OPTIONS: Required<RetryOptions> = {
|
|
|
26
27
|
export interface WithRetryOptions<E> extends RetryOptions {
|
|
27
28
|
isRetryable: (error: E) => boolean
|
|
28
29
|
getRetryDelay?: (error: E) => number | undefined
|
|
29
|
-
/** Error to return when
|
|
30
|
+
/** Error to return when the caller's signal aborts, whichever attempt that happens on. */
|
|
30
31
|
abortError?: E
|
|
31
32
|
logger?: Logger
|
|
32
33
|
context?: string
|
|
@@ -51,8 +52,13 @@ export async function withRetry<T, E>(
|
|
|
51
52
|
|
|
52
53
|
while (attempt < opts.maxAttempts) {
|
|
53
54
|
if (options.signal?.aborted) {
|
|
54
|
-
|
|
55
|
-
|
|
55
|
+
// abortError wins over lastError: the caller cancelled, and that is what
|
|
56
|
+
// the cancellation means regardless of how the previous attempt failed.
|
|
57
|
+
// Returning the previous failure instead makes a cancel indistinguishable
|
|
58
|
+
// from a genuine one — Agent.runInference then emits inference_failed and
|
|
59
|
+
// notifies the parent for what was really a shutdown.
|
|
60
|
+
const error = options.abortError ?? lastError
|
|
61
|
+
if (error !== null && error !== undefined) {
|
|
56
62
|
return Err(error)
|
|
57
63
|
}
|
|
58
64
|
break
|
|
@@ -71,12 +77,16 @@ export async function withRetry<T, E>(
|
|
|
71
77
|
}
|
|
72
78
|
|
|
73
79
|
lastError = result.error
|
|
80
|
+
attempt++
|
|
81
|
+
|
|
82
|
+
if (options.signal?.aborted) {
|
|
83
|
+
return Err(options.abortError ?? lastError)
|
|
84
|
+
}
|
|
74
85
|
|
|
75
|
-
if (!options.isRetryable(lastError)) {
|
|
86
|
+
if (attempt >= opts.maxAttempts || !options.isRetryable(lastError)) {
|
|
76
87
|
return result
|
|
77
88
|
}
|
|
78
89
|
|
|
79
|
-
attempt++
|
|
80
90
|
const delay = calculateDelay(attempt, lastError, opts, options.getRetryDelay)
|
|
81
91
|
|
|
82
92
|
if (options.logger) {
|
|
@@ -114,17 +124,6 @@ function calculateDelay<E>(
|
|
|
114
124
|
return Math.min(exponentialDelay + jitter, opts.maxDelayMs)
|
|
115
125
|
}
|
|
116
126
|
|
|
117
|
-
function sleep(ms: number, signal?: AbortSignal): Promise<void> {
|
|
118
|
-
if (signal?.aborted) return Promise.resolve()
|
|
119
|
-
return new Promise<void>((resolve) => {
|
|
120
|
-
const timer = setTimeout(resolve, ms)
|
|
121
|
-
signal?.addEventListener('abort', () => {
|
|
122
|
-
clearTimeout(timer)
|
|
123
|
-
resolve()
|
|
124
|
-
}, { once: true })
|
|
125
|
-
})
|
|
126
|
-
}
|
|
127
|
-
|
|
128
127
|
// ============================================================================
|
|
129
128
|
// LLM-specific helpers
|
|
130
129
|
// ============================================================================
|
|
@@ -158,7 +157,7 @@ export async function withLLMRetry<T>(
|
|
|
158
157
|
...options,
|
|
159
158
|
isRetryable: isRetryableLLMError,
|
|
160
159
|
getRetryDelay: getLLMRetryDelay,
|
|
161
|
-
abortError: { type: 'aborted', message: '
|
|
160
|
+
abortError: { type: 'aborted', message: 'Request was aborted' },
|
|
162
161
|
context: 'LLM inference',
|
|
163
162
|
})
|
|
164
163
|
}
|
package/src/core/agents/state.ts
CHANGED
|
@@ -136,6 +136,28 @@ export interface UserLLMMessage {
|
|
|
136
136
|
cacheControl?: LLMMessageCacheControl
|
|
137
137
|
}
|
|
138
138
|
|
|
139
|
+
/**
|
|
140
|
+
* Provider chain-of-thought blocks, kept opaque (OpenRouter `reasoning_details`).
|
|
141
|
+
*
|
|
142
|
+
* The provider requires the exact sequence it produced to come back verbatim, so
|
|
143
|
+
* these are never parsed, reordered or normalized — only stored and echoed. The
|
|
144
|
+
* shape is provider- and model-specific and changes without notice; nothing in
|
|
145
|
+
* the SDK may depend on it.
|
|
146
|
+
*/
|
|
147
|
+
export type ReasoningDetails = unknown[]
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Anthropic extended-thinking blocks (`thinking` and `redacted_thinking`), kept opaque
|
|
151
|
+
* for the same reason as {@link ReasoningDetails}: each carries a `signature` the API
|
|
152
|
+
* verifies, so an edited block is worse than a missing one.
|
|
153
|
+
*
|
|
154
|
+
* Deliberately a separate field rather than sharing `reasoningDetails`. A session can
|
|
155
|
+
* change model mid-conversation, so one field would eventually put Anthropic-shaped
|
|
156
|
+
* blocks in front of OpenRouter or the reverse. Two fields make that case degrade to
|
|
157
|
+
* "absent", which both providers accept, instead of "wrong shape", which neither does.
|
|
158
|
+
*/
|
|
159
|
+
export type ThinkingBlocks = unknown[]
|
|
160
|
+
|
|
139
161
|
/**
|
|
140
162
|
* Assistant message - LLM response.
|
|
141
163
|
*/
|
|
@@ -143,6 +165,10 @@ export interface AssistantLLMMessage {
|
|
|
143
165
|
role: 'assistant'
|
|
144
166
|
content: string
|
|
145
167
|
toolCalls?: ToolCall[]
|
|
168
|
+
/** Reasoning blocks to echo back on later requests, so the model keeps its chain of thought across tool calls. */
|
|
169
|
+
reasoningDetails?: ReasoningDetails
|
|
170
|
+
/** Anthropic thinking blocks to replay on later requests. Required by the API during tool use. */
|
|
171
|
+
thinkingBlocks?: ThinkingBlocks
|
|
146
172
|
/** Marks this message as a prompt cache breakpoint. */
|
|
147
173
|
cacheControl?: LLMMessageCacheControl
|
|
148
174
|
}
|
|
@@ -210,6 +236,8 @@ export interface AgentState {
|
|
|
210
236
|
typedInput?: unknown
|
|
211
237
|
/** Whether onStart handler has been executed (for first-run initialization) */
|
|
212
238
|
onStartCalled?: boolean
|
|
239
|
+
/** Inference turns committed so far — persisted, so compaction can't erase it. */
|
|
240
|
+
turnNumber?: number
|
|
213
241
|
/** Reason for pause (set when status is 'paused') */
|
|
214
242
|
pauseReason?: AgentPauseReason
|
|
215
243
|
/** Human-readable pause message */
|
|
@@ -56,6 +56,10 @@ export const compactedConversationMessageSchema: z4.ZodType<LLMMessage> = z4.dis
|
|
|
56
56
|
name: z4.string(),
|
|
57
57
|
input: z4.unknown(),
|
|
58
58
|
})).optional(),
|
|
59
|
+
/** Opaque provider reasoning blocks — retained turns keep them, see ReasoningDetails. */
|
|
60
|
+
reasoningDetails: z4.array(z4.unknown()).optional(),
|
|
61
|
+
/** Anthropic thinking blocks — same. */
|
|
62
|
+
thinkingBlocks: z4.array(z4.unknown()).optional(),
|
|
59
63
|
cacheControl: cacheControlSchema.optional(),
|
|
60
64
|
}),
|
|
61
65
|
z4.object({
|