@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
|
@@ -12,15 +12,22 @@ import { COMMUNICATOR_ROLE, ORCHESTRATOR_ROLE } from '~/core/agents/agent-roles.
|
|
|
12
12
|
import { type DomainError, PresetErrors, SessionErrors, ValidationErrors } from '~/core/errors.js'
|
|
13
13
|
import { definePlugin } from '~/core/plugins/index.js'
|
|
14
14
|
import { knownDefinitionNames, unknownOverrideTargets } from '~/core/preset/overrides.js'
|
|
15
|
-
import { SessionId, sessionIdSchema } from '~/core/sessions/schema.js'
|
|
15
|
+
import { SessionId, sessionIdSchema, sessionMetadataSchema } from '~/core/sessions/schema.js'
|
|
16
16
|
import { agentOverridesSchema, getEntryAgentId, sessionEvents, sessionOverridesPatchSchema } from '~/core/sessions/state.js'
|
|
17
17
|
import { Err, Ok } from '~/lib/utils/result.js'
|
|
18
18
|
|
|
19
|
+
/** Events returned by `sessions.getEvents` when the caller passes no `limit`. */
|
|
20
|
+
const DEFAULT_EVENT_PAGE_SIZE = 100
|
|
21
|
+
|
|
22
|
+
/** How far `sessions.getEvents` reads to fill that page when given no `limit`. */
|
|
23
|
+
const DEFAULT_EVENT_READ_WINDOW = 1000
|
|
24
|
+
|
|
19
25
|
// ============================================================================
|
|
20
26
|
// Presets Plugin — provides presets.list
|
|
21
27
|
// ============================================================================
|
|
22
28
|
|
|
23
29
|
export const presetsPlugin = definePlugin('presets')
|
|
30
|
+
.order(20)
|
|
24
31
|
.managerMethod('list', {
|
|
25
32
|
input: z4.object({}),
|
|
26
33
|
output: z4.object({
|
|
@@ -111,6 +118,7 @@ export const presetsPlugin = definePlugin('presets')
|
|
|
111
118
|
// ============================================================================
|
|
112
119
|
|
|
113
120
|
export const sessionLifecyclePlugin = definePlugin('sessions')
|
|
121
|
+
.order(10)
|
|
114
122
|
.managerMethod('create', {
|
|
115
123
|
input: z4.object({
|
|
116
124
|
presetId: z4.string().min(1),
|
|
@@ -158,7 +166,10 @@ export const sessionLifecyclePlugin = definePlugin('sessions')
|
|
|
158
166
|
order: z4.enum(['asc', 'desc']).optional(),
|
|
159
167
|
}),
|
|
160
168
|
output: z4.object({
|
|
161
|
-
|
|
169
|
+
// The handler returns SessionMetadata[]; z.unknown() used to hide that
|
|
170
|
+
// from every caller, which is how standalone-server's sessions.list
|
|
171
|
+
// drifted from the platform contract unnoticed.
|
|
172
|
+
sessions: z4.array(sessionMetadataSchema),
|
|
162
173
|
total: z4.number(),
|
|
163
174
|
}),
|
|
164
175
|
handler: async (ctx, input) => {
|
|
@@ -227,31 +238,30 @@ export const sessionLifecyclePlugin = definePlugin('sessions')
|
|
|
227
238
|
const sm = ctx.sessionManager
|
|
228
239
|
const sessionId = SessionId(input.sessionId)
|
|
229
240
|
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
241
|
+
return sm.withSessionLease(sessionId, 'manager:sessions.setOverrides', async (session) => {
|
|
242
|
+
const preset = ctx.presets.get(session.state.presetId)
|
|
243
|
+
if (!preset) return Err(PresetErrors.notFound(session.state.presetId))
|
|
233
244
|
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
`Unknown agent definitions in overrides: ${unknown.join(', ')}. Preset '${preset.id}' defines: ${knownDefinitionNames(preset).join(', ')}`,
|
|
241
|
-
))
|
|
242
|
-
}
|
|
245
|
+
const unknown = unknownOverrideTargets(preset, input.overrides)
|
|
246
|
+
if (unknown.length > 0) {
|
|
247
|
+
return Err(ValidationErrors.invalid(
|
|
248
|
+
`Unknown agent definitions in overrides: ${unknown.join(', ')}. Preset '${preset.id}' defines: ${knownDefinitionNames(preset).join(', ')}`,
|
|
249
|
+
))
|
|
250
|
+
}
|
|
243
251
|
|
|
244
|
-
|
|
252
|
+
const setResult = await session.setOverrides(input.overrides)
|
|
253
|
+
if (!setResult.ok) return setResult
|
|
245
254
|
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
255
|
+
// Agents already mid-turn finish on the model they started with: the
|
|
256
|
+
// override is read when the next inference request is built, not applied
|
|
257
|
+
// retroactively to one in flight.
|
|
258
|
+
ctx.logger.info('Session overrides set', { sessionId, overrides: input.overrides })
|
|
250
259
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
260
|
+
const state = session.state
|
|
261
|
+
return Ok({
|
|
262
|
+
agents: Object.fromEntries(state.overrides.agents),
|
|
263
|
+
defaults: state.overrides.defaults,
|
|
264
|
+
})
|
|
255
265
|
})
|
|
256
266
|
},
|
|
257
267
|
})
|
|
@@ -326,34 +336,39 @@ export const sessionLifecyclePlugin = definePlugin('sessions')
|
|
|
326
336
|
lastIndex: z4.number(),
|
|
327
337
|
}),
|
|
328
338
|
handler: async (ctx, input) => {
|
|
329
|
-
|
|
330
|
-
|
|
339
|
+
const limit = input.limit ?? DEFAULT_EVENT_PAGE_SIZE
|
|
340
|
+
// Offset pagination (only when not using since) slices after the read.
|
|
341
|
+
const offset = input.since === undefined ? (input.offset ?? 0) : 0
|
|
342
|
+
// Read past the page: type/agentId filter after the read, so a window
|
|
343
|
+
// only as wide as the page starves a filtered query. `offset` counts
|
|
344
|
+
// matches, so it is covered here only when nothing is filtered out.
|
|
345
|
+
const readLimit = Math.max(input.limit ?? DEFAULT_EVENT_READ_WINDOW, offset + limit)
|
|
346
|
+
|
|
347
|
+
const { events: loadedEvents, fromIndex, toIndex } = await ctx.eventStore.loadRange(
|
|
331
348
|
ctx.sessionId,
|
|
332
349
|
{
|
|
333
350
|
since: input.since,
|
|
334
|
-
limit:
|
|
351
|
+
limit: readLimit,
|
|
335
352
|
},
|
|
336
353
|
)
|
|
337
354
|
|
|
338
|
-
// Filter by type/agentId
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
filtered = filtered.filter(
|
|
345
|
-
(e) => 'agentId' in e && e.agentId === input.agentId,
|
|
355
|
+
// Filter by type/agentId, keeping each event's absolute index
|
|
356
|
+
const matched = loadedEvents
|
|
357
|
+
.map((event, i) => ({ event, index: fromIndex + i }))
|
|
358
|
+
.filter(({ event }) =>
|
|
359
|
+
(!input.type || event.type === input.type)
|
|
360
|
+
&& (!input.agentId || ('agentId' in event && event.agentId === input.agentId))
|
|
346
361
|
)
|
|
347
|
-
}
|
|
348
362
|
|
|
349
|
-
|
|
350
|
-
const
|
|
351
|
-
const
|
|
363
|
+
const page = matched.slice(offset, offset + limit)
|
|
364
|
+
const truncated = matched.length > offset + limit
|
|
365
|
+
const lastOnPage = page[page.length - 1]
|
|
352
366
|
|
|
353
367
|
return Ok({
|
|
354
|
-
events:
|
|
355
|
-
total:
|
|
356
|
-
|
|
368
|
+
events: page.map(({ event }) => event),
|
|
369
|
+
total: matched.length,
|
|
370
|
+
// A truncated page must not report a cursor past the events it dropped.
|
|
371
|
+
lastIndex: truncated && lastOnPage !== undefined ? lastOnPage.index : toIndex,
|
|
357
372
|
})
|
|
358
373
|
},
|
|
359
374
|
})
|
|
@@ -1,29 +1,44 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* Provides a typed, persistent state object per session that can be updated by:
|
|
5
|
-
* - Agent (via tool)
|
|
6
|
-
* - Client/SPA (via RPC method)
|
|
7
|
-
* - Backend/system (via RPC method with system caller context)
|
|
8
|
-
*
|
|
9
|
-
* State changes are broadcast as notifications and can trigger agent dequeue.
|
|
10
|
-
* A preset-defined validate function controls write permissions per caller.
|
|
2
|
+
* Typed persistent state shared by agents, clients, and system callers.
|
|
11
3
|
*/
|
|
12
4
|
import z from 'zod/v4'
|
|
5
|
+
import { ValidationErrors } from '~/core/errors.js'
|
|
6
|
+
import { createEventsFactory } from '~/core/events/types.js'
|
|
13
7
|
import type { CallerContext } from '~/core/plugins/plugin-builder.js'
|
|
14
8
|
import { definePlugin } from '~/core/plugins/plugin-builder.js'
|
|
15
|
-
import {
|
|
9
|
+
import { selectPluginState } from '~/core/sessions/reducer.js'
|
|
16
10
|
import { getEntryAgentId } from '~/core/sessions/state.js'
|
|
17
11
|
import { Err, Ok } from '~/lib/utils/result.js'
|
|
18
|
-
|
|
12
|
+
|
|
13
|
+
export const DEFAULT_SESSION_STATE_MAX_BYTES = 256 * 1024
|
|
14
|
+
|
|
15
|
+
const stateRecordSchema = z.record(z.string(), z.unknown())
|
|
16
|
+
|
|
17
|
+
function isStateRecord(value: unknown): value is Record<string, unknown> {
|
|
18
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value)) return false
|
|
19
|
+
const prototype = Object.getPrototypeOf(value)
|
|
20
|
+
return prototype === Object.prototype || prototype === null
|
|
21
|
+
}
|
|
19
22
|
|
|
20
23
|
export const sessionStateEvents = createEventsFactory({
|
|
21
24
|
events: {
|
|
25
|
+
// Legacy full snapshots remain readable for existing event logs.
|
|
22
26
|
session_state_updated: z.object({
|
|
23
|
-
state:
|
|
27
|
+
state: stateRecordSchema,
|
|
28
|
+
callerSource: z.enum(['agent', 'client', 'system']),
|
|
29
|
+
}),
|
|
30
|
+
session_state_patched: z.object({
|
|
31
|
+
set: stateRecordSchema,
|
|
32
|
+
deletedKeys: z.array(z.string()),
|
|
24
33
|
callerSource: z.enum(['agent', 'client', 'system']),
|
|
34
|
+
externalRevision: z.number().int().nonnegative().optional(),
|
|
35
|
+
}),
|
|
36
|
+
session_state_external_consumed: z.object({
|
|
37
|
+
updates: z.array(z.object({
|
|
38
|
+
key: z.string(),
|
|
39
|
+
revision: z.number().int().nonnegative(),
|
|
40
|
+
})).optional(),
|
|
25
41
|
}),
|
|
26
|
-
session_state_external_consumed: z.object({}),
|
|
27
42
|
},
|
|
28
43
|
})
|
|
29
44
|
|
|
@@ -31,149 +46,288 @@ export interface SessionStatePluginConfig {
|
|
|
31
46
|
schema: z.ZodType
|
|
32
47
|
initial: Record<string, unknown>
|
|
33
48
|
validate?: (current: Record<string, unknown>, proposed: Record<string, unknown>, caller: CallerContext) => true | string
|
|
49
|
+
/** Maximum UTF-8 JSON size of the resulting full state. */
|
|
50
|
+
maxSerializedBytes?: number
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
interface PendingExternalUpdate {
|
|
54
|
+
key: string
|
|
55
|
+
revision: number
|
|
34
56
|
}
|
|
35
57
|
|
|
36
58
|
interface SessionStatePluginState {
|
|
37
59
|
state: Record<string, unknown>
|
|
38
|
-
|
|
60
|
+
pendingExternalUpdates: Map<string, number>
|
|
61
|
+
nextExternalRevision: number
|
|
62
|
+
initialized: boolean
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
type StateValidationResult =
|
|
66
|
+
| { ok: true; state: Record<string, unknown> }
|
|
67
|
+
| { ok: false; message: string }
|
|
68
|
+
|
|
69
|
+
function validateState(config: SessionStatePluginConfig, input: unknown): StateValidationResult {
|
|
70
|
+
const configuredResult = config.schema.safeParse(input)
|
|
71
|
+
if (!configuredResult.success) {
|
|
72
|
+
return { ok: false, message: `Schema validation failed: ${configuredResult.error.message}` }
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (!isStateRecord(configuredResult.data)) {
|
|
76
|
+
return { ok: false, message: `Schema validation failed: session state must be an object` }
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
let serialized: string
|
|
80
|
+
try {
|
|
81
|
+
serialized = JSON.stringify(configuredResult.data, (_key, value: unknown) => {
|
|
82
|
+
if (value === undefined || typeof value === 'function' || typeof value === 'symbol' || typeof value === 'bigint') {
|
|
83
|
+
throw new Error(`Unsupported JSON value: ${value === undefined ? 'undefined' : typeof value}`)
|
|
84
|
+
}
|
|
85
|
+
if (typeof value === 'number' && !Number.isFinite(value)) {
|
|
86
|
+
throw new Error('Unsupported JSON value: non-finite number')
|
|
87
|
+
}
|
|
88
|
+
return value
|
|
89
|
+
})
|
|
90
|
+
} catch (error) {
|
|
91
|
+
return { ok: false, message: `Session state is not JSON serializable: ${error instanceof Error ? error.message : String(error)}` }
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const maxBytes = config.maxSerializedBytes ?? DEFAULT_SESSION_STATE_MAX_BYTES
|
|
95
|
+
if (!Number.isSafeInteger(maxBytes) || maxBytes < 0) {
|
|
96
|
+
return { ok: false, message: 'Session state byte limit must be a non-negative safe integer' }
|
|
97
|
+
}
|
|
98
|
+
const actualBytes = new TextEncoder().encode(serialized).byteLength
|
|
99
|
+
if (actualBytes > maxBytes) {
|
|
100
|
+
return { ok: false, message: `Session state exceeds ${maxBytes} byte limit (${actualBytes} bytes)` }
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const canonical: unknown = JSON.parse(serialized)
|
|
104
|
+
if (!isStateRecord(canonical)) {
|
|
105
|
+
return { ok: false, message: 'Session state JSON must decode to an object' }
|
|
106
|
+
}
|
|
107
|
+
return { ok: true, state: canonical }
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
function initializeState(config: SessionStatePluginConfig): SessionStatePluginState {
|
|
111
|
+
const result = validateState(config, config.initial)
|
|
112
|
+
if (!result.ok) {
|
|
113
|
+
throw new Error(`Invalid initial session state: ${result.message}`)
|
|
114
|
+
}
|
|
115
|
+
return {
|
|
116
|
+
state: result.state,
|
|
117
|
+
pendingExternalUpdates: new Map(),
|
|
118
|
+
nextExternalRevision: 0,
|
|
119
|
+
initialized: true,
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
function valuesEqual(left: unknown, right: unknown): boolean {
|
|
124
|
+
if (Object.is(left, right)) return true
|
|
125
|
+
return JSON.stringify(left) === JSON.stringify(right)
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
function changedKeys(current: Record<string, unknown>, next: Record<string, unknown>): string[] {
|
|
129
|
+
const keys = new Set([...Object.keys(current), ...Object.keys(next)])
|
|
130
|
+
return [...keys].filter((key) => {
|
|
131
|
+
const currentHasKey = Object.hasOwn(current, key)
|
|
132
|
+
const nextHasKey = Object.hasOwn(next, key)
|
|
133
|
+
return currentHasKey !== nextHasKey || !valuesEqual(current[key], next[key])
|
|
134
|
+
})
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
function createPatch(current: Record<string, unknown>, next: Record<string, unknown>) {
|
|
138
|
+
const entries: Array<[string, unknown]> = []
|
|
139
|
+
const deletedKeys: string[] = []
|
|
140
|
+
for (const key of changedKeys(current, next)) {
|
|
141
|
+
if (Object.hasOwn(next, key)) entries.push([key, next[key]])
|
|
142
|
+
else deletedKeys.push(key)
|
|
143
|
+
}
|
|
144
|
+
return { set: Object.fromEntries(entries), deletedKeys }
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
function applyPatch(
|
|
148
|
+
state: Record<string, unknown>,
|
|
149
|
+
patch: { set: Record<string, unknown>; deletedKeys: string[] },
|
|
150
|
+
): Record<string, unknown> {
|
|
151
|
+
const next = { ...state, ...patch.set }
|
|
152
|
+
for (const key of patch.deletedKeys) delete next[key]
|
|
153
|
+
return next
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
function addPendingUpdates(
|
|
157
|
+
current: SessionStatePluginState,
|
|
158
|
+
keys: string[],
|
|
159
|
+
revision: number,
|
|
160
|
+
): Map<string, number> {
|
|
161
|
+
const pending = new Map(current.pendingExternalUpdates)
|
|
162
|
+
for (const key of keys) pending.set(key, revision)
|
|
163
|
+
return pending
|
|
39
164
|
}
|
|
40
165
|
|
|
41
166
|
export const sessionStatePlugin = definePlugin('sessionState')
|
|
167
|
+
.order(140)
|
|
42
168
|
.pluginConfig<SessionStatePluginConfig>()
|
|
43
169
|
.isSessionEnabled(({ pluginConfig }) => pluginConfig !== undefined)
|
|
44
170
|
.events([sessionStateEvents])
|
|
45
171
|
.state({
|
|
46
172
|
key: 'sessionState',
|
|
47
|
-
initial: (): SessionStatePluginState => ({
|
|
48
|
-
|
|
173
|
+
initial: (): SessionStatePluginState => ({
|
|
174
|
+
state: {},
|
|
175
|
+
pendingExternalUpdates: new Map(),
|
|
176
|
+
nextExternalRevision: 0,
|
|
177
|
+
initialized: false,
|
|
178
|
+
}),
|
|
179
|
+
reduce: (uninitialized, event, _sessionState, pluginConfig) => {
|
|
180
|
+
const current = uninitialized.initialized ? uninitialized : initializeState(pluginConfig)
|
|
49
181
|
switch (event.type) {
|
|
50
|
-
case 'session_state_updated':
|
|
182
|
+
case 'session_state_updated': {
|
|
183
|
+
const keys = changedKeys(current.state, event.state)
|
|
184
|
+
if (event.callerSource === 'agent' || keys.length === 0) {
|
|
185
|
+
return { ...current, state: event.state }
|
|
186
|
+
}
|
|
187
|
+
const revision = current.nextExternalRevision + 1
|
|
51
188
|
return {
|
|
52
|
-
|
|
53
|
-
|
|
189
|
+
...current,
|
|
190
|
+
state: event.state,
|
|
191
|
+
pendingExternalUpdates: addPendingUpdates(current, keys, revision),
|
|
192
|
+
nextExternalRevision: revision,
|
|
54
193
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
if (
|
|
60
|
-
return { ...current, state
|
|
194
|
+
}
|
|
195
|
+
case 'session_state_patched': {
|
|
196
|
+
const state = applyPatch(current.state, event)
|
|
197
|
+
const keys = [...Object.keys(event.set), ...event.deletedKeys]
|
|
198
|
+
if (event.callerSource === 'agent' || keys.length === 0) {
|
|
199
|
+
return { ...current, state }
|
|
200
|
+
}
|
|
201
|
+
const revision = event.externalRevision ?? current.nextExternalRevision + 1
|
|
202
|
+
return {
|
|
203
|
+
...current,
|
|
204
|
+
state,
|
|
205
|
+
pendingExternalUpdates: addPendingUpdates(current, keys, revision),
|
|
206
|
+
nextExternalRevision: Math.max(current.nextExternalRevision, revision),
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
case 'session_state_external_consumed': {
|
|
210
|
+
if (!event.updates) return { ...current, pendingExternalUpdates: new Map() }
|
|
211
|
+
const pending = new Map(current.pendingExternalUpdates)
|
|
212
|
+
for (const update of event.updates) {
|
|
213
|
+
if (pending.get(update.key) === update.revision) pending.delete(update.key)
|
|
61
214
|
}
|
|
215
|
+
return { ...current, pendingExternalUpdates: pending }
|
|
216
|
+
}
|
|
217
|
+
default:
|
|
62
218
|
return current
|
|
63
219
|
}
|
|
64
220
|
},
|
|
65
221
|
})
|
|
222
|
+
.context(async (ctx) => {
|
|
223
|
+
const state = selectPluginState<SessionStatePluginState>(ctx.getSessionState(), 'sessionState')
|
|
224
|
+
let nextExternalRevision = state?.nextExternalRevision ?? 0
|
|
225
|
+
// `update` reads the committed state, validates a full merge and appends a
|
|
226
|
+
// patch. Interleaving two of those merges the patches behind the validator,
|
|
227
|
+
// so concurrent updates could land above the byte cap or break a cross-field
|
|
228
|
+
// refinement that each of them satisfied on its own.
|
|
229
|
+
let updateTail: Promise<unknown> = Promise.resolve()
|
|
230
|
+
return {
|
|
231
|
+
reserveExternalRevision: () => ++nextExternalRevision,
|
|
232
|
+
runExclusive: <T>(operation: () => Promise<T>): Promise<T> => {
|
|
233
|
+
const run = updateTail.then(operation, operation)
|
|
234
|
+
updateTail = run.then(() => undefined, () => undefined)
|
|
235
|
+
return run
|
|
236
|
+
},
|
|
237
|
+
}
|
|
238
|
+
})
|
|
66
239
|
.notification('sessionStateChanged', {
|
|
67
240
|
schema: z.object({
|
|
68
241
|
sessionId: z.string(),
|
|
69
|
-
state:
|
|
242
|
+
state: stateRecordSchema,
|
|
70
243
|
}),
|
|
71
244
|
})
|
|
72
245
|
.method('get', {
|
|
73
246
|
input: z.object({ sessionId: z.string() }),
|
|
74
|
-
output: z.object({ state:
|
|
75
|
-
handler: async (ctx) => {
|
|
76
|
-
const currentState = ctx.pluginState.state
|
|
77
|
-
const config = ctx.pluginConfig
|
|
78
|
-
const state = Object.keys(currentState).length === 0 && config ? config.initial : currentState
|
|
79
|
-
return Ok({ state })
|
|
80
|
-
},
|
|
247
|
+
output: z.object({ state: stateRecordSchema }),
|
|
248
|
+
handler: async (ctx) => Ok({ state: ctx.pluginState.state }),
|
|
81
249
|
})
|
|
82
250
|
.method('update', {
|
|
83
251
|
input: z.object({
|
|
84
252
|
sessionId: z.string(),
|
|
85
|
-
updates:
|
|
253
|
+
updates: stateRecordSchema,
|
|
86
254
|
}),
|
|
87
|
-
output: z.object({ state:
|
|
88
|
-
handler: async (ctx, input) => {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
const
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
255
|
+
output: z.object({ state: stateRecordSchema }),
|
|
256
|
+
handler: async (ctx, input) => ctx.pluginContext.runExclusive(async () => {
|
|
257
|
+
// Re-read inside the critical section: `ctx.pluginState` is a snapshot
|
|
258
|
+
// taken before the handler ran, so an update that committed while this
|
|
259
|
+
// call waited its turn would otherwise be merged away.
|
|
260
|
+
const committed = selectPluginState<SessionStatePluginState>(ctx.getSessionState(), 'sessionState')?.state
|
|
261
|
+
?? ctx.pluginState.state
|
|
262
|
+
const proposed = { ...committed, ...input.updates }
|
|
263
|
+
const parsed = validateState(ctx.pluginConfig, proposed)
|
|
264
|
+
if (!parsed.ok) return Err(ValidationErrors.invalid(parsed.message))
|
|
97
265
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
return Err(ValidationErrors.invalid(`Schema validation failed: ${parsed.error.message}`))
|
|
266
|
+
if (ctx.pluginConfig.validate) {
|
|
267
|
+
const result = ctx.pluginConfig.validate(committed, parsed.state, ctx.caller)
|
|
268
|
+
if (result !== true) return Err(ValidationErrors.invalid(result))
|
|
102
269
|
}
|
|
103
270
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
if (result !== true) {
|
|
108
|
-
return Err(ValidationErrors.invalid(result))
|
|
109
|
-
}
|
|
110
|
-
}
|
|
271
|
+
const patch = createPatch(committed, parsed.state)
|
|
272
|
+
const keys = [...Object.keys(patch.set), ...patch.deletedKeys]
|
|
273
|
+
if (keys.length === 0) return Ok({ state: parsed.state })
|
|
111
274
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
275
|
+
const externalRevision = ctx.caller.source === 'agent'
|
|
276
|
+
? undefined
|
|
277
|
+
: ctx.pluginContext.reserveExternalRevision()
|
|
278
|
+
await ctx.emitEvent(sessionStateEvents.create('session_state_patched', {
|
|
279
|
+
...patch,
|
|
115
280
|
callerSource: ctx.caller.source,
|
|
281
|
+
externalRevision,
|
|
116
282
|
}))
|
|
117
283
|
|
|
118
|
-
// Notify connected clients
|
|
119
284
|
ctx.notify('sessionStateChanged', {
|
|
120
285
|
sessionId: String(ctx.sessionId),
|
|
121
|
-
state:
|
|
286
|
+
state: parsed.state,
|
|
122
287
|
})
|
|
123
288
|
|
|
124
|
-
// Schedule agent if external update
|
|
125
289
|
if (ctx.caller.source !== 'agent') {
|
|
126
290
|
const entryAgentId = getEntryAgentId(ctx.sessionState)
|
|
127
|
-
if (entryAgentId)
|
|
128
|
-
ctx.scheduleAgent(entryAgentId)
|
|
129
|
-
}
|
|
291
|
+
if (entryAgentId) ctx.scheduleAgent(entryAgentId)
|
|
130
292
|
}
|
|
131
293
|
|
|
132
|
-
return Ok({ state:
|
|
133
|
-
},
|
|
294
|
+
return Ok({ state: parsed.state })
|
|
295
|
+
}),
|
|
134
296
|
})
|
|
135
297
|
.tool('update_session_state', {
|
|
136
298
|
description: 'Update the session state. Use this to signal status changes (e.g., file ready for download, phase transitions).',
|
|
137
299
|
input: z.object({
|
|
138
|
-
updates:
|
|
300
|
+
updates: stateRecordSchema.describe('Key-value pairs to merge into the current session state'),
|
|
139
301
|
}),
|
|
140
302
|
execute: async (input, _toolCtx, ctx) => {
|
|
141
303
|
const result = await ctx.self.update({
|
|
142
304
|
sessionId: String(ctx.sessionId),
|
|
143
305
|
updates: input.updates,
|
|
144
306
|
})
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
const err = result as { ok: false; error: { message: string } }
|
|
148
|
-
return { ok: false, error: { message: err.error.message, recoverable: true } }
|
|
307
|
+
if (!result.ok) {
|
|
308
|
+
return { ok: false, error: { message: result.error.message, recoverable: true } }
|
|
149
309
|
}
|
|
150
|
-
|
|
151
|
-
return { ok: true, value: [{ type: 'text' as const, text: 'Session state updated.' }] }
|
|
310
|
+
return { ok: true, value: [{ type: 'text', text: 'Session state updated.' }] }
|
|
152
311
|
},
|
|
153
312
|
})
|
|
154
|
-
.dequeue({
|
|
155
|
-
hasPendingMessages: (ctx) => ctx.pluginState.
|
|
313
|
+
.dequeue<PendingExternalUpdate[]>({
|
|
314
|
+
hasPendingMessages: (ctx) => ctx.pluginState.pendingExternalUpdates.size > 0,
|
|
156
315
|
getPendingMessages: (ctx) => {
|
|
157
|
-
if (
|
|
158
|
-
const
|
|
316
|
+
if (ctx.pluginState.pendingExternalUpdates.size === 0) return null
|
|
317
|
+
const updates = [...ctx.pluginState.pendingExternalUpdates].map(([key, revision]) => ({ key, revision }))
|
|
159
318
|
return {
|
|
160
319
|
messages: [{
|
|
161
|
-
role: 'user'
|
|
162
|
-
content: `<system>Session state was updated externally.
|
|
320
|
+
role: 'user',
|
|
321
|
+
content: `<system>Session state was updated externally. Changed keys: ${updates.map((update) => update.key).join(', ')}.</system>`,
|
|
163
322
|
}],
|
|
164
|
-
token:
|
|
323
|
+
token: updates,
|
|
165
324
|
}
|
|
166
325
|
},
|
|
167
|
-
markConsumed: async (ctx) => {
|
|
168
|
-
await ctx.emitEvent(sessionStateEvents.create('session_state_external_consumed', {}))
|
|
326
|
+
markConsumed: async (ctx, updates) => {
|
|
327
|
+
await ctx.emitEvent(sessionStateEvents.create('session_state_external_consumed', { updates }))
|
|
169
328
|
},
|
|
170
329
|
})
|
|
171
330
|
.systemPrompt((ctx) => {
|
|
172
|
-
|
|
173
|
-
if (!config) return null
|
|
174
|
-
const state = Object.keys(ctx.pluginState.state).length === 0
|
|
175
|
-
? config.initial
|
|
176
|
-
: ctx.pluginState.state
|
|
177
|
-
return `## Session State\n\nCurrent session state:\n\`\`\`json\n${JSON.stringify(state, null, 2)}\n\`\`\`\n\nUse the \`update_session_state\` tool to update state values.`
|
|
331
|
+
return `## Session State\n\nCurrent session state:\n\`\`\`json\n${JSON.stringify(ctx.pluginState.state, null, 2)}\n\`\`\`\n\nUse the \`update_session_state\` tool to update state values.`
|
|
178
332
|
})
|
|
179
333
|
.build()
|
|
@@ -86,6 +86,7 @@ export function selectSessionStats(sessionState: SessionState): SessionStatsStat
|
|
|
86
86
|
// ============================================================================
|
|
87
87
|
|
|
88
88
|
export const sessionStatsPlugin = definePlugin('session-stats')
|
|
89
|
+
.order(130)
|
|
89
90
|
.events([agentEvents, llmEvents, toolEvents, contextEvents, userChatEvents])
|
|
90
91
|
.state({
|
|
91
92
|
key: PLUGIN_STATE_KEY,
|