@roj-ai/sdk 0.1.36 → 0.2.2
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 +202 -87
- 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 +3 -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.js +2 -2
- 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 +58 -72
- 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 +53 -66
- 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 +11 -0
- 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 +2 -2
- package/dist/core/llm/state.js +4 -4
- 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 +11 -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 +25 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -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/index.d.ts +1 -0
- package/dist/plugins/git-status/index.d.ts.map +1 -1
- package/dist/plugins/git-status/plugin.d.ts +38 -7
- package/dist/plugins/git-status/plugin.d.ts.map +1 -1
- package/dist/plugins/git-status/plugin.js +169 -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 +17 -7
- 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 +210 -92
- package/src/core/agents/config.ts +8 -0
- package/src/core/agents/retry.ts +16 -17
- package/src/core/agents/state.ts +2 -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 +63 -79
- package/src/core/llm/logger.ts +175 -37
- package/src/core/llm/openrouter.ts +57 -72
- package/src/core/llm/provider-request.ts +40 -0
- package/src/core/llm/provider.ts +28 -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 +11 -0
- package/src/core/system.ts +15 -0
- package/src/core/wake-key.ts +65 -0
- package/src/index.ts +32 -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/index.ts +1 -0
- package/src/plugins/git-status/plugin.ts +211 -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/model-shortlist-live.test.d.ts +0 -35
- package/dist/core/llm/model-shortlist-live.test.d.ts.map +0 -1
- package/dist/core/llm/model-shortlist-live.test.js +0 -452
- package/dist/core/llm/model-shortlist-live.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 -190
- 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/reasoning-details.test.d.ts +0 -2
- package/dist/core/llm/reasoning-details.test.d.ts.map +0 -1
- package/dist/core/llm/reasoning-details.test.js +0 -144
- package/dist/core/llm/reasoning-details.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/llm/thinking-blocks.test.d.ts +0 -2
- package/dist/core/llm/thinking-blocks.test.d.ts.map +0 -1
- package/dist/core/llm/thinking-blocks.test.js +0 -291
- package/dist/core/llm/thinking-blocks.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/reasoning-round-trip.integration.test.d.ts +0 -2
- package/dist/core/reasoning-round-trip.integration.test.d.ts.map +0 -1
- package/dist/core/reasoning-round-trip.integration.test.js +0 -150
- package/dist/core/reasoning-round-trip.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/model-shortlist-live.test.ts +0 -577
- package/src/core/llm/openrouter-mapping.test.ts +0 -234
- package/src/core/llm/openrouter.test.ts +0 -499
- package/src/core/llm/provider-integration.test.ts +0 -408
- package/src/core/llm/reasoning-details.test.ts +0 -177
- package/src/core/llm/routing-provider.test.ts +0 -113
- package/src/core/llm/snapshot-middleware.test.ts +0 -168
- package/src/core/llm/thinking-blocks.test.ts +0 -345
- package/src/core/multi-agent.integration.test.ts +0 -340
- package/src/core/plugin-hooks.integration.test.ts +0 -568
- package/src/core/reasoning-round-trip.integration.test.ts +0 -188
- 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
|
@@ -16,6 +16,7 @@ import { ValidationErrors } from "~/core/errors.js";
|
|
|
16
16
|
import { createEventsFactory } from "~/core/events/types.js";
|
|
17
17
|
import { estimateTokens, truncateByTokens } from "~/core/llm/tokens.js";
|
|
18
18
|
import { definePlugin } from "~/core/plugins/plugin-builder.js";
|
|
19
|
+
import { selectPluginState } from "~/core/sessions/reducer.js";
|
|
19
20
|
import { sessionIdSchema } from "~/core/sessions/schema.js";
|
|
20
21
|
import { getEntryAgentId } from "~/core/sessions/state.js";
|
|
21
22
|
import { createTool } from "~/core/tools/definition.js";
|
|
@@ -67,6 +68,7 @@ export const userChatEvents = createEventsFactory({
|
|
|
67
68
|
user_chat_messages_consumed: z.object({
|
|
68
69
|
agentId: agentIdSchema,
|
|
69
70
|
messageIds: z.array(chatMessageIdSchema),
|
|
71
|
+
ordinals: z.array(z.number().int().positive()).optional(),
|
|
70
72
|
}),
|
|
71
73
|
},
|
|
72
74
|
});
|
|
@@ -124,15 +126,18 @@ export type ChatMessage =
|
|
|
124
126
|
// ============================================================================
|
|
125
127
|
|
|
126
128
|
export interface PendingInboundMessage {
|
|
129
|
+
ordinal: number;
|
|
127
130
|
messageId: ChatMessageId;
|
|
128
131
|
agentId: AgentId;
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
consumed: boolean;
|
|
132
|
+
/** Stable index into visible message history for user messages. */
|
|
133
|
+
messageIndex?: number;
|
|
132
134
|
/** For answers: the question's message ID */
|
|
133
135
|
questionId?: ChatMessageId;
|
|
134
|
-
|
|
135
|
-
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
export interface PendingAnswerRecord {
|
|
139
|
+
questionId: ChatMessageId;
|
|
140
|
+
answerValue: unknown;
|
|
136
141
|
}
|
|
137
142
|
|
|
138
143
|
// ============================================================================
|
|
@@ -143,6 +148,14 @@ export interface UserChatState {
|
|
|
143
148
|
messages: ChatMessage[];
|
|
144
149
|
counter: number;
|
|
145
150
|
pendingInbound: PendingInboundMessage[];
|
|
151
|
+
/** Immutable answer payloads retained only until dequeue consumption. */
|
|
152
|
+
pendingAnswers?: Map<number, PendingAnswerRecord>;
|
|
153
|
+
/** Highest reducer-assigned inbound occurrence. */
|
|
154
|
+
nextInboundOrdinal?: number;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
interface UserChatPluginContext {
|
|
158
|
+
nextMessageSequence: number;
|
|
146
159
|
}
|
|
147
160
|
|
|
148
161
|
// ============================================================================
|
|
@@ -293,18 +306,84 @@ const MESSAGE_TRUNCATION_TARGET = 5_000;
|
|
|
293
306
|
// Helpers
|
|
294
307
|
// ============================================================================
|
|
295
308
|
|
|
309
|
+
function findQuestion(
|
|
310
|
+
messages: ChatMessage[],
|
|
311
|
+
questionId: ChatMessageId,
|
|
312
|
+
): AskUserChatMessage | undefined {
|
|
313
|
+
for (const message of messages) {
|
|
314
|
+
if (message.type === "ask_user" && message.questionId === questionId) {
|
|
315
|
+
return message;
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
return undefined;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
function findUserMessage(
|
|
322
|
+
messages: ChatMessage[],
|
|
323
|
+
messageId: ChatMessageId,
|
|
324
|
+
): UserChatMessage | undefined {
|
|
325
|
+
for (const message of messages) {
|
|
326
|
+
if (message.type === "user_message" && message.messageId === messageId) {
|
|
327
|
+
return message;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
return undefined;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
function messageSequence(messageId: ChatMessageId): number {
|
|
334
|
+
const match = /^m(\d+)$/.exec(messageId);
|
|
335
|
+
return match ? Number(match[1]) : 0;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
function nextStateCounter(state: UserChatState, messageId: ChatMessageId): number {
|
|
339
|
+
return Math.max(state.counter + 1, messageSequence(messageId));
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
function nextMessageSequence(state: UserChatState | undefined): number {
|
|
343
|
+
if (!state) return 1;
|
|
344
|
+
let highest = state.counter;
|
|
345
|
+
for (const message of state.messages) {
|
|
346
|
+
const messageId = message.type === "ask_user" ? message.questionId : message.messageId;
|
|
347
|
+
highest = Math.max(highest, messageSequence(messageId));
|
|
348
|
+
}
|
|
349
|
+
for (const pending of state.pendingInbound) {
|
|
350
|
+
highest = Math.max(highest, messageSequence(pending.messageId));
|
|
351
|
+
}
|
|
352
|
+
return highest + 1;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
function reserveMessageSequence(context: UserChatPluginContext): number {
|
|
356
|
+
const sequence = context.nextMessageSequence;
|
|
357
|
+
context.nextMessageSequence++;
|
|
358
|
+
return sequence;
|
|
359
|
+
}
|
|
360
|
+
|
|
296
361
|
/**
|
|
297
362
|
* Format pending inbound messages for the LLM.
|
|
298
363
|
*/
|
|
299
|
-
function formatPendingForLLM(
|
|
364
|
+
function formatPendingForLLM(
|
|
365
|
+
messages: ChatMessage[],
|
|
366
|
+
pending: PendingInboundMessage[],
|
|
367
|
+
pendingAnswers: ReadonlyMap<number, PendingAnswerRecord> | undefined,
|
|
368
|
+
): string {
|
|
300
369
|
const parts: string[] = [];
|
|
301
370
|
for (const msg of pending) {
|
|
302
371
|
if (msg.questionId !== undefined) {
|
|
372
|
+
const answer = pendingAnswers?.get(msg.ordinal);
|
|
373
|
+
const answerValue = answer
|
|
374
|
+
? answer.answerValue
|
|
375
|
+
: findQuestion(messages, msg.questionId)?.answer;
|
|
303
376
|
parts.push(
|
|
304
|
-
`[User answered question ${msg.questionId}]: ${JSON.stringify(
|
|
377
|
+
`[User answered question ${msg.questionId}]: ${JSON.stringify(answerValue)}`,
|
|
305
378
|
);
|
|
306
379
|
} else {
|
|
307
|
-
|
|
380
|
+
const indexedMessage = msg.messageIndex === undefined
|
|
381
|
+
? undefined
|
|
382
|
+
: messages[msg.messageIndex];
|
|
383
|
+
const userMessage = indexedMessage?.type === "user_message"
|
|
384
|
+
? indexedMessage
|
|
385
|
+
: findUserMessage(messages, msg.messageId);
|
|
386
|
+
if (userMessage) parts.push(`[User]: ${userMessage.content}`);
|
|
308
387
|
}
|
|
309
388
|
}
|
|
310
389
|
return parts.join("\n");
|
|
@@ -365,18 +444,27 @@ function decodeAskUserDisplayStrings(input: AskUserInputType): AskUserInputType
|
|
|
365
444
|
// ============================================================================
|
|
366
445
|
|
|
367
446
|
export const userChatPlugin = definePlugin("user-chat")
|
|
447
|
+
.order(60)
|
|
368
448
|
.pluginConfig<UserChatPresetConfig>()
|
|
369
449
|
.events([userChatEvents])
|
|
450
|
+
.context(async (ctx): Promise<UserChatPluginContext> => ({
|
|
451
|
+
nextMessageSequence: nextMessageSequence(
|
|
452
|
+
selectPluginState<UserChatState>(ctx.sessionState, "messages"),
|
|
453
|
+
),
|
|
454
|
+
}))
|
|
370
455
|
.state<UserChatState>({
|
|
371
456
|
key: "messages",
|
|
372
457
|
initial: (): UserChatState => ({
|
|
373
458
|
messages: [],
|
|
374
459
|
counter: 0,
|
|
375
460
|
pendingInbound: [],
|
|
461
|
+
pendingAnswers: new Map(),
|
|
462
|
+
nextInboundOrdinal: 0,
|
|
376
463
|
}),
|
|
377
464
|
reduce: (state, event) => {
|
|
378
465
|
switch (event.type) {
|
|
379
466
|
case "user_chat_message_received": {
|
|
467
|
+
const ordinal = (state.nextInboundOrdinal ?? 0) + 1;
|
|
380
468
|
const userMessage: UserChatMessage = {
|
|
381
469
|
type: "user_message",
|
|
382
470
|
messageId: event.messageId,
|
|
@@ -384,20 +472,22 @@ export const userChatPlugin = definePlugin("user-chat")
|
|
|
384
472
|
timestamp: event.timestamp,
|
|
385
473
|
};
|
|
386
474
|
const pending: PendingInboundMessage = {
|
|
475
|
+
ordinal,
|
|
387
476
|
messageId: event.messageId,
|
|
388
477
|
agentId: event.agentId,
|
|
389
|
-
|
|
390
|
-
timestamp: event.timestamp,
|
|
391
|
-
consumed: false,
|
|
478
|
+
messageIndex: state.messages.length,
|
|
392
479
|
};
|
|
393
480
|
return {
|
|
394
481
|
messages: [...state.messages, userMessage],
|
|
395
|
-
counter: state.
|
|
482
|
+
counter: nextStateCounter(state, event.messageId),
|
|
396
483
|
pendingInbound: [...state.pendingInbound, pending],
|
|
484
|
+
pendingAnswers: state.pendingAnswers,
|
|
485
|
+
nextInboundOrdinal: ordinal,
|
|
397
486
|
};
|
|
398
487
|
}
|
|
399
488
|
|
|
400
489
|
case "user_chat_answer_received": {
|
|
490
|
+
const ordinal = (state.nextInboundOrdinal ?? 0) + 1;
|
|
401
491
|
// Update the question in messages as answered
|
|
402
492
|
const updatedMessages = state.messages.map((msg) =>
|
|
403
493
|
msg.type === "ask_user" && msg.questionId === event.questionId
|
|
@@ -405,31 +495,61 @@ export const userChatPlugin = definePlugin("user-chat")
|
|
|
405
495
|
: msg,
|
|
406
496
|
);
|
|
407
497
|
const pending: PendingInboundMessage = {
|
|
498
|
+
ordinal,
|
|
408
499
|
messageId: event.messageId,
|
|
409
500
|
agentId: event.agentId,
|
|
410
|
-
content: JSON.stringify(event.answerValue),
|
|
411
|
-
timestamp: event.timestamp,
|
|
412
|
-
consumed: false,
|
|
413
501
|
questionId: event.questionId,
|
|
414
|
-
answerValue: event.answerValue,
|
|
415
502
|
};
|
|
503
|
+
const pendingAnswers = new Map(state.pendingAnswers ?? []);
|
|
504
|
+
pendingAnswers.set(ordinal, {
|
|
505
|
+
questionId: event.questionId,
|
|
506
|
+
answerValue: event.answerValue,
|
|
507
|
+
});
|
|
416
508
|
return {
|
|
417
509
|
messages: updatedMessages,
|
|
418
|
-
counter: state.
|
|
510
|
+
counter: nextStateCounter(state, event.messageId),
|
|
419
511
|
pendingInbound: [...state.pendingInbound, pending],
|
|
512
|
+
pendingAnswers,
|
|
513
|
+
nextInboundOrdinal: ordinal,
|
|
420
514
|
};
|
|
421
515
|
}
|
|
422
516
|
|
|
423
517
|
case "user_chat_messages_consumed": {
|
|
424
|
-
const
|
|
518
|
+
const consumedOrdinals = new Set<number>();
|
|
519
|
+
if (event.ordinals) {
|
|
520
|
+
for (const ordinal of event.ordinals) consumedOrdinals.add(ordinal);
|
|
521
|
+
} else {
|
|
522
|
+
const remainingById = new Map<string, number>();
|
|
523
|
+
for (const messageId of event.messageIds) {
|
|
524
|
+
const key = String(messageId);
|
|
525
|
+
remainingById.set(key, (remainingById.get(key) ?? 0) + 1);
|
|
526
|
+
}
|
|
527
|
+
for (const pending of state.pendingInbound) {
|
|
528
|
+
if (pending.agentId !== event.agentId) continue;
|
|
529
|
+
const key = String(pending.messageId);
|
|
530
|
+
const remaining = remainingById.get(key) ?? 0;
|
|
531
|
+
if (remaining === 0) continue;
|
|
532
|
+
consumedOrdinals.add(pending.ordinal);
|
|
533
|
+
remainingById.set(key, remaining - 1);
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
const pendingAnswers = new Map(state.pendingAnswers ?? []);
|
|
537
|
+
for (const pending of state.pendingInbound) {
|
|
538
|
+
if (
|
|
539
|
+
pending.agentId === event.agentId &&
|
|
540
|
+
consumedOrdinals.has(pending.ordinal)
|
|
541
|
+
) {
|
|
542
|
+
pendingAnswers.delete(pending.ordinal);
|
|
543
|
+
}
|
|
544
|
+
}
|
|
425
545
|
return {
|
|
426
546
|
...state,
|
|
427
|
-
pendingInbound: state.pendingInbound.
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
: msg,
|
|
547
|
+
pendingInbound: state.pendingInbound.filter(
|
|
548
|
+
(msg) =>
|
|
549
|
+
msg.agentId !== event.agentId ||
|
|
550
|
+
!consumedOrdinals.has(msg.ordinal),
|
|
432
551
|
),
|
|
552
|
+
pendingAnswers,
|
|
433
553
|
};
|
|
434
554
|
}
|
|
435
555
|
|
|
@@ -445,7 +565,7 @@ export const userChatPlugin = definePlugin("user-chat")
|
|
|
445
565
|
return {
|
|
446
566
|
...state,
|
|
447
567
|
messages: [...state.messages, askMessage],
|
|
448
|
-
counter: state.
|
|
568
|
+
counter: nextStateCounter(state, event.messageId),
|
|
449
569
|
};
|
|
450
570
|
}
|
|
451
571
|
|
|
@@ -460,7 +580,7 @@ export const userChatPlugin = definePlugin("user-chat")
|
|
|
460
580
|
return {
|
|
461
581
|
...state,
|
|
462
582
|
messages: [...state.messages, agentMessage],
|
|
463
|
-
counter: state.
|
|
583
|
+
counter: nextStateCounter(state, event.messageId),
|
|
464
584
|
};
|
|
465
585
|
}
|
|
466
586
|
|
|
@@ -497,7 +617,9 @@ export const userChatPlugin = definePlugin("user-chat")
|
|
|
497
617
|
messageId: z.string(),
|
|
498
618
|
}),
|
|
499
619
|
handler: async (ctx, input) => {
|
|
500
|
-
const messageId = generateChatMessageId(
|
|
620
|
+
const messageId = generateChatMessageId(
|
|
621
|
+
reserveMessageSequence(ctx.pluginContext),
|
|
622
|
+
);
|
|
501
623
|
const timestamp = Date.now();
|
|
502
624
|
await ctx.emitEvent(
|
|
503
625
|
userChatEvents.create("user_question_asked", {
|
|
@@ -528,7 +650,9 @@ export const userChatPlugin = definePlugin("user-chat")
|
|
|
528
650
|
messageId: z.string(),
|
|
529
651
|
}),
|
|
530
652
|
handler: async (ctx, input) => {
|
|
531
|
-
const messageId = generateChatMessageId(
|
|
653
|
+
const messageId = generateChatMessageId(
|
|
654
|
+
reserveMessageSequence(ctx.pluginContext),
|
|
655
|
+
);
|
|
532
656
|
const timestamp = Date.now();
|
|
533
657
|
await ctx.emitEvent(
|
|
534
658
|
userChatEvents.create("user_message_sent", {
|
|
@@ -572,7 +696,9 @@ export const userChatPlugin = definePlugin("user-chat")
|
|
|
572
696
|
);
|
|
573
697
|
}
|
|
574
698
|
|
|
575
|
-
const messageId = generateChatMessageId(
|
|
699
|
+
const messageId = generateChatMessageId(
|
|
700
|
+
reserveMessageSequence(ctx.pluginContext),
|
|
701
|
+
);
|
|
576
702
|
|
|
577
703
|
// Soft truncation — save full content to file, pass truncated + reference
|
|
578
704
|
let content = input.content;
|
|
@@ -582,7 +708,18 @@ export const userChatPlugin = definePlugin("user-chat")
|
|
|
582
708
|
: null;
|
|
583
709
|
if (truncation) {
|
|
584
710
|
const filePath = `.user-messages/${messageId}.md`;
|
|
585
|
-
await ctx.files.session.write(
|
|
711
|
+
const writeResult = await ctx.files.session.write(
|
|
712
|
+
filePath,
|
|
713
|
+
input.content,
|
|
714
|
+
);
|
|
715
|
+
if (!writeResult.ok) {
|
|
716
|
+
// Without the full copy on disk the truncated message would silently lose content.
|
|
717
|
+
return Err(
|
|
718
|
+
ValidationErrors.invalid(
|
|
719
|
+
`Failed to store full message: ${writeResult.error}`,
|
|
720
|
+
),
|
|
721
|
+
);
|
|
722
|
+
}
|
|
586
723
|
content = `${truncation.content}\n\n[Full message saved to: ${filePath} — use read_file to access it]`;
|
|
587
724
|
}
|
|
588
725
|
|
|
@@ -606,7 +743,15 @@ export const userChatPlugin = definePlugin("user-chat")
|
|
|
606
743
|
}),
|
|
607
744
|
output: z.object({}),
|
|
608
745
|
handler: async (ctx, input) => {
|
|
609
|
-
|
|
746
|
+
// A retried batch resubmits answers that already landed; the agent must see one.
|
|
747
|
+
const asked = ctx.pluginState.messages.find(
|
|
748
|
+
(msg) => msg.type === "ask_user" && msg.questionId === input.questionId,
|
|
749
|
+
);
|
|
750
|
+
if (asked?.type === "ask_user" && asked.answered) return Ok({});
|
|
751
|
+
|
|
752
|
+
const messageId = generateChatMessageId(
|
|
753
|
+
reserveMessageSequence(ctx.pluginContext),
|
|
754
|
+
);
|
|
610
755
|
await ctx.emitEvent(
|
|
611
756
|
userChatEvents.create("user_chat_answer_received", {
|
|
612
757
|
agentId: input.agentId,
|
|
@@ -633,18 +778,28 @@ export const userChatPlugin = definePlugin("user-chat")
|
|
|
633
778
|
})
|
|
634
779
|
.dequeue({
|
|
635
780
|
hasPendingMessages: (ctx) =>
|
|
636
|
-
ctx.pluginState.pendingInbound.some(
|
|
637
|
-
(m) => !m.consumed && m.agentId === ctx.agentId,
|
|
638
|
-
),
|
|
781
|
+
ctx.pluginState.pendingInbound.some((m) => m.agentId === ctx.agentId),
|
|
639
782
|
|
|
640
783
|
getPendingMessages: (ctx) => {
|
|
641
784
|
const pending = ctx.pluginState.pendingInbound.filter(
|
|
642
|
-
(m) =>
|
|
785
|
+
(m) => m.agentId === ctx.agentId,
|
|
643
786
|
);
|
|
644
787
|
if (pending.length === 0) return null;
|
|
645
788
|
return {
|
|
646
|
-
messages: [
|
|
647
|
-
|
|
789
|
+
messages: [
|
|
790
|
+
{
|
|
791
|
+
role: "user",
|
|
792
|
+
content: formatPendingForLLM(
|
|
793
|
+
ctx.pluginState.messages,
|
|
794
|
+
pending,
|
|
795
|
+
ctx.pluginState.pendingAnswers,
|
|
796
|
+
),
|
|
797
|
+
},
|
|
798
|
+
],
|
|
799
|
+
token: pending.map((message) => ({
|
|
800
|
+
messageId: message.messageId,
|
|
801
|
+
ordinal: message.ordinal,
|
|
802
|
+
})),
|
|
648
803
|
};
|
|
649
804
|
},
|
|
650
805
|
|
|
@@ -652,7 +807,8 @@ export const userChatPlugin = definePlugin("user-chat")
|
|
|
652
807
|
await ctx.emitEvent(
|
|
653
808
|
userChatEvents.create("user_chat_messages_consumed", {
|
|
654
809
|
agentId: ctx.agentId,
|
|
655
|
-
messageIds: token,
|
|
810
|
+
messageIds: token.map((item) => item.messageId),
|
|
811
|
+
ordinals: token.map((item) => item.ordinal),
|
|
656
812
|
}),
|
|
657
813
|
);
|
|
658
814
|
},
|
|
@@ -666,12 +822,12 @@ export const userChatPlugin = definePlugin("user-chat")
|
|
|
666
822
|
|
|
667
823
|
const userTagRegex = /<user>([\s\S]*?)<\/user>/g;
|
|
668
824
|
let match: RegExpExecArray | null;
|
|
669
|
-
let localCounter = ctx.pluginState.counter;
|
|
670
825
|
while ((match = userTagRegex.exec(responseContent)) !== null) {
|
|
671
826
|
const content = match[1].trim();
|
|
672
827
|
if (!content) continue;
|
|
673
|
-
|
|
674
|
-
|
|
828
|
+
const chatMessageId = generateChatMessageId(
|
|
829
|
+
reserveMessageSequence(ctx.pluginContext),
|
|
830
|
+
);
|
|
675
831
|
await ctx.emitEvent(
|
|
676
832
|
userChatEvents.create("user_message_sent", {
|
|
677
833
|
agentId: ctx.agentId,
|
|
@@ -12,13 +12,12 @@ import type { AgentId } from '~/core/agents/schema.js'
|
|
|
12
12
|
import type { FileStore } from '~/core/file-store/types.js'
|
|
13
13
|
import type { SessionId } from '~/core/sessions/schema.js'
|
|
14
14
|
import type { SessionState } from '~/core/sessions/state.js'
|
|
15
|
-
import { getNextMessageSeq, selectMailboxState } from '~/plugins/mailbox/query.js'
|
|
16
15
|
import { generateMessageId } from '~/plugins/mailbox/schema.js'
|
|
17
16
|
import { mailboxEvents } from '~/plugins/mailbox/state.js'
|
|
18
17
|
import type { Logger } from '../../lib/logger/logger.js'
|
|
19
18
|
import type { WorkerSubEvent } from './definition.js'
|
|
20
|
-
import type { EmitEvent } from './
|
|
21
|
-
import { workerEvents } from './
|
|
19
|
+
import type { EmitEvent } from './state.js'
|
|
20
|
+
import { workerEvents } from './state.js'
|
|
22
21
|
import { WorkerId } from './worker.js'
|
|
23
22
|
|
|
24
23
|
// ============================================================================
|
|
@@ -47,6 +46,14 @@ export interface WorkerContext<TState, TSubEvent extends WorkerSubEvent> {
|
|
|
47
46
|
/** File store for reading/writing files */
|
|
48
47
|
readonly files: FileStore
|
|
49
48
|
|
|
49
|
+
/**
|
|
50
|
+
* True when `execute()` is re-entered for a worker that already ran — after a
|
|
51
|
+
* runtime rebuild or a `resume`. The state handed to this run is already
|
|
52
|
+
* reconstructed from the event log, so a resumed worker must continue from
|
|
53
|
+
* `getState()` rather than start over.
|
|
54
|
+
*/
|
|
55
|
+
readonly resumed: boolean
|
|
56
|
+
|
|
50
57
|
/**
|
|
51
58
|
* Get current worker state (reconstructed from events).
|
|
52
59
|
*/
|
|
@@ -54,7 +61,10 @@ export interface WorkerContext<TState, TSubEvent extends WorkerSubEvent> {
|
|
|
54
61
|
|
|
55
62
|
/**
|
|
56
63
|
* Emit a worker-specific event.
|
|
57
|
-
*
|
|
64
|
+
*
|
|
65
|
+
* Applies the event to local state and persists it — but only while this run is
|
|
66
|
+
* live: once the run has been stopped (pause, cancel, session close) the emit is
|
|
67
|
+
* skipped and nothing is persisted.
|
|
58
68
|
*/
|
|
59
69
|
emit(event: TSubEvent): Promise<void>
|
|
60
70
|
|
|
@@ -65,8 +75,9 @@ export interface WorkerContext<TState, TSubEvent extends WorkerSubEvent> {
|
|
|
65
75
|
shouldContinue(): boolean
|
|
66
76
|
|
|
67
77
|
/**
|
|
68
|
-
* Check if
|
|
69
|
-
*
|
|
78
|
+
* Check if a pause was requested for this worker.
|
|
79
|
+
* A pause also stops execution — `shouldContinue()` goes false and `resume`
|
|
80
|
+
* re-enters `execute()` — so this only tells a pause from a cancellation.
|
|
70
81
|
*/
|
|
71
82
|
isPaused(): boolean
|
|
72
83
|
|
|
@@ -102,11 +113,16 @@ export class WorkerContextImpl<TState, TSubEvent extends WorkerSubEvent> impleme
|
|
|
102
113
|
readonly agentId: AgentId
|
|
103
114
|
readonly logger: Logger
|
|
104
115
|
readonly files: FileStore
|
|
116
|
+
readonly resumed: boolean
|
|
105
117
|
|
|
106
118
|
private readonly workerType: string
|
|
107
119
|
private readonly emitEvent: EmitEvent
|
|
108
120
|
private readonly getSessionStateCallback: () => SessionState
|
|
109
121
|
private readonly reducer: (state: TState, event: TSubEvent) => TState
|
|
122
|
+
private readonly reserveMailboxMessageSequence: () => number
|
|
123
|
+
private readonly acquireEffectLease: () => (() => void) | null
|
|
124
|
+
private readonly inFlightEffects = new Set<Promise<void>>()
|
|
125
|
+
private readonly effectLeases = new Set<() => void>()
|
|
110
126
|
private localState: TState
|
|
111
127
|
|
|
112
128
|
/**
|
|
@@ -115,10 +131,7 @@ export class WorkerContextImpl<TState, TSubEvent extends WorkerSubEvent> impleme
|
|
|
115
131
|
*/
|
|
116
132
|
private _cancelled = false
|
|
117
133
|
|
|
118
|
-
/**
|
|
119
|
-
* Local pause flag - provides immediate signal before event is persisted.
|
|
120
|
-
* This is set by pause() and checked by isPaused() for fast response.
|
|
121
|
-
*/
|
|
134
|
+
/** Set by pause() so a winding-down run can tell a pause from a cancellation. */
|
|
122
135
|
private _paused = false
|
|
123
136
|
|
|
124
137
|
/**
|
|
@@ -126,6 +139,7 @@ export class WorkerContextImpl<TState, TSubEvent extends WorkerSubEvent> impleme
|
|
|
126
139
|
* Aborted when cancel() is called.
|
|
127
140
|
*/
|
|
128
141
|
private readonly abortController = new AbortController()
|
|
142
|
+
private active = true
|
|
129
143
|
|
|
130
144
|
private readonly scheduleCallback?: () => void
|
|
131
145
|
|
|
@@ -137,8 +151,11 @@ export class WorkerContextImpl<TState, TSubEvent extends WorkerSubEvent> impleme
|
|
|
137
151
|
files: FileStore
|
|
138
152
|
emitEvent: EmitEvent
|
|
139
153
|
getSessionState: () => SessionState
|
|
154
|
+
reserveMailboxMessageSequence: () => number
|
|
155
|
+
acquireEffectLease: () => (() => void) | null
|
|
140
156
|
reducer: (state: TState, event: TSubEvent) => TState
|
|
141
157
|
initialState: TState
|
|
158
|
+
resumed: boolean
|
|
142
159
|
logger: Logger
|
|
143
160
|
schedule?: () => void
|
|
144
161
|
}) {
|
|
@@ -149,8 +166,11 @@ export class WorkerContextImpl<TState, TSubEvent extends WorkerSubEvent> impleme
|
|
|
149
166
|
this.files = params.files
|
|
150
167
|
this.emitEvent = params.emitEvent
|
|
151
168
|
this.getSessionStateCallback = params.getSessionState
|
|
169
|
+
this.reserveMailboxMessageSequence = params.reserveMailboxMessageSequence
|
|
170
|
+
this.acquireEffectLease = params.acquireEffectLease
|
|
152
171
|
this.reducer = params.reducer
|
|
153
172
|
this.localState = params.initialState
|
|
173
|
+
this.resumed = params.resumed
|
|
154
174
|
this.logger = params.logger
|
|
155
175
|
this.scheduleCallback = params.schedule
|
|
156
176
|
}
|
|
@@ -167,12 +187,21 @@ export class WorkerContextImpl<TState, TSubEvent extends WorkerSubEvent> impleme
|
|
|
167
187
|
* Applies the event to local state before persisting.
|
|
168
188
|
*/
|
|
169
189
|
async emit(event: TSubEvent): Promise<void> {
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
190
|
+
await this.runEffect(async () => {
|
|
191
|
+
this.localState = this.reducer(this.localState, event)
|
|
192
|
+
await this.emitEvent(workerEvents.create('worker_sub_event', {
|
|
193
|
+
workerId: this.workerId,
|
|
194
|
+
workerType: this.workerType,
|
|
195
|
+
subEvent: event,
|
|
196
|
+
}))
|
|
197
|
+
})
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/** Persist a terminal worker event within the context effect lifecycle. */
|
|
201
|
+
async persistTerminal(event: Parameters<EmitEvent>[0]): Promise<boolean> {
|
|
202
|
+
return this.runEffect(async () => {
|
|
203
|
+
await this.emitEvent(event)
|
|
204
|
+
})
|
|
176
205
|
}
|
|
177
206
|
|
|
178
207
|
/**
|
|
@@ -180,7 +209,7 @@ export class WorkerContextImpl<TState, TSubEvent extends WorkerSubEvent> impleme
|
|
|
180
209
|
* Returns false if cancelled.
|
|
181
210
|
*/
|
|
182
211
|
shouldContinue(): boolean {
|
|
183
|
-
return !this._cancelled
|
|
212
|
+
return this.active && !this._cancelled
|
|
184
213
|
}
|
|
185
214
|
|
|
186
215
|
/**
|
|
@@ -197,20 +226,24 @@ export class WorkerContextImpl<TState, TSubEvent extends WorkerSubEvent> impleme
|
|
|
197
226
|
* as sender, but workers need to send as WorkerId. Migrate when mailbox.send supports WorkerId.
|
|
198
227
|
*/
|
|
199
228
|
async notifyAgent(message: string): Promise<void> {
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
229
|
+
await this.runEffect(async () => {
|
|
230
|
+
const sequence = this.reserveMailboxMessageSequence()
|
|
231
|
+
const messageId = generateMessageId(sequence)
|
|
232
|
+
|
|
233
|
+
await this.emitEvent(mailboxEvents.create('mailbox_message', {
|
|
234
|
+
toAgentId: this.agentId,
|
|
235
|
+
sequence,
|
|
236
|
+
message: {
|
|
237
|
+
id: messageId,
|
|
238
|
+
from: this.workerId,
|
|
239
|
+
content: message,
|
|
240
|
+
timestamp: Date.now(),
|
|
241
|
+
consumed: false,
|
|
242
|
+
},
|
|
243
|
+
}))
|
|
244
|
+
|
|
245
|
+
if (this.active) this.scheduleCallback?.()
|
|
246
|
+
})
|
|
214
247
|
}
|
|
215
248
|
|
|
216
249
|
/**
|
|
@@ -235,17 +268,47 @@ export class WorkerContextImpl<TState, TSubEvent extends WorkerSubEvent> impleme
|
|
|
235
268
|
this.abortController.abort()
|
|
236
269
|
}
|
|
237
270
|
|
|
238
|
-
/**
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
271
|
+
/** Permanently disable callbacks — the worker is stopping and will never resume this run. */
|
|
272
|
+
invalidate(): void {
|
|
273
|
+
this.active = false
|
|
274
|
+
this.cancel()
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/** Wait for effects that started before invalidation. */
|
|
278
|
+
async waitForEffects(): Promise<void> {
|
|
279
|
+
await Promise.allSettled([...this.inFlightEffects])
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/** Give back the leases of effects that outlived their drain deadline, so a stalled write cannot pin the runtime forever. */
|
|
283
|
+
releaseEffectLeases(): void {
|
|
284
|
+
for (const release of this.effectLeases) release()
|
|
285
|
+
this.effectLeases.clear()
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
private async runEffect(effect: () => Promise<void>): Promise<boolean> {
|
|
289
|
+
if (!this.active) return false
|
|
290
|
+
// The runtime can start unloading between the check above and here — skip the
|
|
291
|
+
// effect rather than throw a lease error into worker code.
|
|
292
|
+
const releaseLease = this.acquireEffectLease()
|
|
293
|
+
if (!releaseLease) return false
|
|
294
|
+
this.effectLeases.add(releaseLease)
|
|
295
|
+
let promise: Promise<void> | undefined
|
|
296
|
+
try {
|
|
297
|
+
promise = effect()
|
|
298
|
+
this.inFlightEffects.add(promise)
|
|
299
|
+
await promise
|
|
300
|
+
} finally {
|
|
301
|
+
if (promise) this.inFlightEffects.delete(promise)
|
|
302
|
+
this.effectLeases.delete(releaseLease)
|
|
303
|
+
releaseLease()
|
|
304
|
+
}
|
|
305
|
+
return true
|
|
243
306
|
}
|
|
244
307
|
|
|
245
308
|
/**
|
|
246
|
-
*
|
|
309
|
+
* Record that this run is stopping because of a pause, not a cancellation.
|
|
247
310
|
*/
|
|
248
|
-
|
|
249
|
-
this._paused =
|
|
311
|
+
pause(): void {
|
|
312
|
+
this._paused = true
|
|
250
313
|
}
|
|
251
314
|
}
|
|
@@ -101,6 +101,13 @@ export interface WorkerDefinition<
|
|
|
101
101
|
/**
|
|
102
102
|
* Main execution logic.
|
|
103
103
|
* The worker runs until completion, failure, or cancellation.
|
|
104
|
+
*
|
|
105
|
+
* Re-entrant, and must be idempotent: a rebuilt session runtime and
|
|
106
|
+
* `workers.resume` both call this again from the top, with `context.resumed`
|
|
107
|
+
* true and the state already replayed from the event log. Drive the loop from
|
|
108
|
+
* `context.getState()` and emit the event that records a side effect before
|
|
109
|
+
* performing it — never from local variables seeded at entry, which a re-entry
|
|
110
|
+
* resets while the persisted state moves on.
|
|
104
111
|
*/
|
|
105
112
|
execute(
|
|
106
113
|
config: TConfig,
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
// Plugin
|
|
2
|
-
export { workerPlugin } from './plugin.js'
|
|
2
|
+
export { MAX_CONCURRENT_WORKERS, WORKER_EFFECT_DRAIN_TIMEOUT_MS, WORKER_STOP_TIMEOUT_MS, workerPlugin } from './plugin.js'
|
|
3
3
|
export type { WorkerAgentConfig, WorkerPresetConfig } from './plugin.js'
|
|
4
4
|
|
|
5
5
|
// Events (now in plugin.ts)
|
|
6
|
-
export { workerEvents } from './
|
|
7
|
-
export type { WorkerCompletedEvent, WorkerFailedEvent, WorkerStartedEvent, WorkerStatusChangedEvent, WorkerSubEventEmittedEvent } from './
|
|
6
|
+
export { workerEvents } from './state.js'
|
|
7
|
+
export type { WorkerCompletedEvent, WorkerFailedEvent, WorkerStartedEvent, WorkerStatusChangedEvent, WorkerSubEventEmittedEvent } from './state.js'
|
|
8
8
|
|
|
9
9
|
// Definition
|
|
10
10
|
export type { WorkerDefinition, WorkerSubEvent } from './definition.js'
|
|
@@ -18,4 +18,4 @@ export { WorkerContextImpl } from './context.js'
|
|
|
18
18
|
export type { WorkerError, WorkerResult } from './worker.js'
|
|
19
19
|
|
|
20
20
|
// Types
|
|
21
|
-
export type { EmitEvent } from './
|
|
21
|
+
export type { EmitEvent } from './state.js'
|