@roj-ai/sdk 0.0.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 +453 -0
- package/dist/bootstrap.d.ts.map +1 -0
- package/dist/builtin-events.d.ts +16 -0
- package/dist/builtin-events.d.ts.map +1 -0
- package/dist/bun-platform/fs.d.ts +9 -0
- package/dist/bun-platform/fs.d.ts.map +1 -0
- package/dist/bun-platform/index.d.ts +12 -0
- package/dist/bun-platform/index.d.ts.map +1 -0
- package/dist/bun-platform/process.d.ts +6 -0
- package/dist/bun-platform/process.d.ts.map +1 -0
- package/dist/config.d.ts +38 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.test.d.ts +2 -0
- package/dist/config.test.d.ts.map +1 -0
- package/dist/core/agent-loop.integration.test.d.ts +2 -0
- package/dist/core/agent-loop.integration.test.d.ts.map +1 -0
- package/dist/core/agents/agent-config.test.d.ts +2 -0
- package/dist/core/agents/agent-config.test.d.ts.map +1 -0
- package/dist/core/agents/agent-roles.d.ts +33 -0
- package/dist/core/agents/agent-roles.d.ts.map +1 -0
- package/dist/core/agents/agent-shutdown.test.d.ts +6 -0
- package/dist/core/agents/agent-shutdown.test.d.ts.map +1 -0
- package/dist/core/agents/agent.d.ts +234 -0
- package/dist/core/agents/agent.d.ts.map +1 -0
- package/dist/core/agents/agent.test.d.ts +2 -0
- package/dist/core/agents/agent.test.d.ts.map +1 -0
- package/dist/core/agents/communicator.d.ts +3 -0
- package/dist/core/agents/communicator.d.ts.map +1 -0
- package/dist/core/agents/config.d.ts +84 -0
- package/dist/core/agents/config.d.ts.map +1 -0
- package/dist/core/agents/context.d.ts +16 -0
- package/dist/core/agents/context.d.ts.map +1 -0
- package/dist/core/agents/debounce.d.ts +52 -0
- package/dist/core/agents/debounce.d.ts.map +1 -0
- package/dist/core/agents/handler-events.test.d.ts +5 -0
- package/dist/core/agents/handler-events.test.d.ts.map +1 -0
- package/dist/core/agents/index.d.ts +2 -0
- package/dist/core/agents/index.d.ts.map +1 -0
- package/dist/core/agents/response-sanitizer.d.ts +25 -0
- package/dist/core/agents/response-sanitizer.d.ts.map +1 -0
- package/dist/core/agents/response-sanitizer.test.d.ts +2 -0
- package/dist/core/agents/response-sanitizer.test.d.ts.map +1 -0
- package/dist/core/agents/retry.d.ts +40 -0
- package/dist/core/agents/retry.d.ts.map +1 -0
- package/dist/core/agents/schema.d.ts +57 -0
- package/dist/core/agents/schema.d.ts.map +1 -0
- package/dist/core/agents/state.d.ts +255 -0
- package/dist/core/agents/state.d.ts.map +1 -0
- package/dist/core/context/state.d.ts +28 -0
- package/dist/core/context/state.d.ts.map +1 -0
- package/dist/core/errors.d.ts +29 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/event-sourcing.integration.test.d.ts +2 -0
- package/dist/core/event-sourcing.integration.test.d.ts.map +1 -0
- package/dist/core/events/base-event-store.d.ts +55 -0
- package/dist/core/events/base-event-store.d.ts.map +1 -0
- package/dist/core/events/event-store.d.ts +108 -0
- package/dist/core/events/event-store.d.ts.map +1 -0
- package/dist/core/events/file.d.ts +50 -0
- package/dist/core/events/file.d.ts.map +1 -0
- package/dist/core/events/file.test.d.ts +2 -0
- package/dist/core/events/file.test.d.ts.map +1 -0
- package/dist/core/events/index.d.ts +4 -0
- package/dist/core/events/index.d.ts.map +1 -0
- package/dist/core/events/memory.d.ts +43 -0
- package/dist/core/events/memory.d.ts.map +1 -0
- package/dist/core/events/memory.test.d.ts +2 -0
- package/dist/core/events/memory.test.d.ts.map +1 -0
- package/dist/core/events/metadata-utils.d.ts +27 -0
- package/dist/core/events/metadata-utils.d.ts.map +1 -0
- package/dist/core/events/test-helpers.d.ts +28 -0
- package/dist/core/events/test-helpers.d.ts.map +1 -0
- package/dist/core/events/types.d.ts +46 -0
- package/dist/core/events/types.d.ts.map +1 -0
- package/dist/core/file-store/file-store.d.ts +56 -0
- package/dist/core/file-store/file-store.d.ts.map +1 -0
- package/dist/core/file-store/types.d.ts +50 -0
- package/dist/core/file-store/types.d.ts.map +1 -0
- package/dist/core/image/image-processor.d.ts +15 -0
- package/dist/core/image/image-processor.d.ts.map +1 -0
- package/dist/core/image/image-processor.test.d.ts +2 -0
- package/dist/core/image/image-processor.test.d.ts.map +1 -0
- package/dist/core/image/index.d.ts +5 -0
- package/dist/core/image/index.d.ts.map +1 -0
- package/dist/core/image/noop-resizer.d.ts +5 -0
- package/dist/core/image/noop-resizer.d.ts.map +1 -0
- package/dist/core/image/types.d.ts +20 -0
- package/dist/core/image/types.d.ts.map +1 -0
- package/dist/core/image/vips-resizer.d.ts +21 -0
- package/dist/core/image/vips-resizer.d.ts.map +1 -0
- package/dist/core/image/vips-resizer.test.d.ts +2 -0
- package/dist/core/image/vips-resizer.test.d.ts.map +1 -0
- package/dist/core/llm/anthropic.d.ts +51 -0
- package/dist/core/llm/anthropic.d.ts.map +1 -0
- package/dist/core/llm/anthropic.test.d.ts +2 -0
- package/dist/core/llm/anthropic.test.d.ts.map +1 -0
- package/dist/core/llm/cache-breakpoints.d.ts +17 -0
- package/dist/core/llm/cache-breakpoints.d.ts.map +1 -0
- package/dist/core/llm/cache-live.test.d.ts +16 -0
- package/dist/core/llm/cache-live.test.d.ts.map +1 -0
- package/dist/core/llm/index.d.ts +16 -0
- package/dist/core/llm/index.d.ts.map +1 -0
- package/dist/core/llm/llm-log-types.d.ts +148 -0
- package/dist/core/llm/llm-log-types.d.ts.map +1 -0
- package/dist/core/llm/logger.d.ts +74 -0
- package/dist/core/llm/logger.d.ts.map +1 -0
- package/dist/core/llm/logger.test.d.ts +7 -0
- package/dist/core/llm/logger.test.d.ts.map +1 -0
- package/dist/core/llm/logging-provider.d.ts +20 -0
- package/dist/core/llm/logging-provider.d.ts.map +1 -0
- package/dist/core/llm/middleware.d.ts +79 -0
- package/dist/core/llm/middleware.d.ts.map +1 -0
- package/dist/core/llm/mock.d.ts +79 -0
- package/dist/core/llm/mock.d.ts.map +1 -0
- package/dist/core/llm/mock.test.d.ts +2 -0
- package/dist/core/llm/mock.test.d.ts.map +1 -0
- package/dist/core/llm/openrouter-mapping.test.d.ts +2 -0
- package/dist/core/llm/openrouter-mapping.test.d.ts.map +1 -0
- package/dist/core/llm/openrouter.d.ts +37 -0
- package/dist/core/llm/openrouter.d.ts.map +1 -0
- package/dist/core/llm/openrouter.test.d.ts +2 -0
- package/dist/core/llm/openrouter.test.d.ts.map +1 -0
- package/dist/core/llm/provider-integration.test.d.ts +12 -0
- package/dist/core/llm/provider-integration.test.d.ts.map +1 -0
- package/dist/core/llm/provider.d.ts +175 -0
- package/dist/core/llm/provider.d.ts.map +1 -0
- package/dist/core/llm/routing-provider.d.ts +31 -0
- package/dist/core/llm/routing-provider.d.ts.map +1 -0
- package/dist/core/llm/routing-provider.test.d.ts +2 -0
- package/dist/core/llm/routing-provider.test.d.ts.map +1 -0
- package/dist/core/llm/schema.d.ts +24 -0
- package/dist/core/llm/schema.d.ts.map +1 -0
- package/dist/core/llm/snapshot-fetch.d.ts +21 -0
- package/dist/core/llm/snapshot-fetch.d.ts.map +1 -0
- package/dist/core/llm/snapshot-middleware.d.ts +71 -0
- package/dist/core/llm/snapshot-middleware.d.ts.map +1 -0
- package/dist/core/llm/snapshot-middleware.test.d.ts +2 -0
- package/dist/core/llm/snapshot-middleware.test.d.ts.map +1 -0
- package/dist/core/llm/state.d.ts +73 -0
- package/dist/core/llm/state.d.ts.map +1 -0
- package/dist/core/llm/tokens.d.ts +36 -0
- package/dist/core/llm/tokens.d.ts.map +1 -0
- package/dist/core/multi-agent.integration.test.d.ts +2 -0
- package/dist/core/multi-agent.integration.test.d.ts.map +1 -0
- package/dist/core/plugin-hooks.integration.test.d.ts +2 -0
- package/dist/core/plugin-hooks.integration.test.d.ts.map +1 -0
- package/dist/core/plugins/hook-types.d.ts +55 -0
- package/dist/core/plugins/hook-types.d.ts.map +1 -0
- package/dist/core/plugins/index.d.ts +23 -0
- package/dist/core/plugins/index.d.ts.map +1 -0
- package/dist/core/plugins/plugin-builder.d.ts +474 -0
- package/dist/core/plugins/plugin-builder.d.ts.map +1 -0
- package/dist/core/preset/config.d.ts +55 -0
- package/dist/core/preset/config.d.ts.map +1 -0
- package/dist/core/preset/index.d.ts +8 -0
- package/dist/core/preset/index.d.ts.map +1 -0
- package/dist/core/preset/preset-builder.d.ts +44 -0
- package/dist/core/preset/preset-builder.d.ts.map +1 -0
- package/dist/core/session-lifecycle.integration.test.d.ts +2 -0
- package/dist/core/session-lifecycle.integration.test.d.ts.map +1 -0
- package/dist/core/sessions/apply-event.d.ts +19 -0
- package/dist/core/sessions/apply-event.d.ts.map +1 -0
- package/dist/core/sessions/context.d.ts +34 -0
- package/dist/core/sessions/context.d.ts.map +1 -0
- package/dist/core/sessions/fork-utils.d.ts +20 -0
- package/dist/core/sessions/fork-utils.d.ts.map +1 -0
- package/dist/core/sessions/fork-utils.test.d.ts +2 -0
- package/dist/core/sessions/fork-utils.test.d.ts.map +1 -0
- package/dist/core/sessions/reducer.d.ts +50 -0
- package/dist/core/sessions/reducer.d.ts.map +1 -0
- package/dist/core/sessions/schema.d.ts +82 -0
- package/dist/core/sessions/schema.d.ts.map +1 -0
- package/dist/core/sessions/session-environment.d.ts +13 -0
- package/dist/core/sessions/session-environment.d.ts.map +1 -0
- package/dist/core/sessions/session-manager.d.ts +183 -0
- package/dist/core/sessions/session-manager.d.ts.map +1 -0
- package/dist/core/sessions/session-store.d.ts +69 -0
- package/dist/core/sessions/session-store.d.ts.map +1 -0
- package/dist/core/sessions/session.d.ts +212 -0
- package/dist/core/sessions/session.d.ts.map +1 -0
- package/dist/core/sessions/session.test.d.ts +2 -0
- package/dist/core/sessions/session.test.d.ts.map +1 -0
- package/dist/core/sessions/state.d.ts +110 -0
- package/dist/core/sessions/state.d.ts.map +1 -0
- package/dist/core/system.d.ts +97 -0
- package/dist/core/system.d.ts.map +1 -0
- package/dist/core/tools/context.d.ts +3 -0
- package/dist/core/tools/context.d.ts.map +1 -0
- package/dist/core/tools/definition.d.ts +10 -0
- package/dist/core/tools/definition.d.ts.map +1 -0
- package/dist/core/tools/executor.d.ts +28 -0
- package/dist/core/tools/executor.d.ts.map +1 -0
- package/dist/core/tools/executor.test.d.ts +2 -0
- package/dist/core/tools/executor.test.d.ts.map +1 -0
- package/dist/core/tools/index.d.ts +4 -0
- package/dist/core/tools/index.d.ts.map +1 -0
- package/dist/core/tools/schema.d.ts +61 -0
- package/dist/core/tools/schema.d.ts.map +1 -0
- package/dist/core/tools/state.d.ts +28 -0
- package/dist/core/tools/state.d.ts.map +1 -0
- package/dist/index.d.ts +111 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/lib/json/index.d.ts +17 -0
- package/dist/lib/json/index.d.ts.map +1 -0
- package/dist/lib/logger/console.d.ts +35 -0
- package/dist/lib/logger/console.d.ts.map +1 -0
- package/dist/lib/logger/console.test.d.ts +2 -0
- package/dist/lib/logger/console.test.d.ts.map +1 -0
- package/dist/lib/logger/file.d.ts +20 -0
- package/dist/lib/logger/file.d.ts.map +1 -0
- package/dist/lib/logger/index.d.ts +5 -0
- package/dist/lib/logger/index.d.ts.map +1 -0
- package/dist/lib/logger/logger.d.ts +87 -0
- package/dist/lib/logger/logger.d.ts.map +1 -0
- package/dist/lib/logger/ring-buffer.d.ts +33 -0
- package/dist/lib/logger/ring-buffer.d.ts.map +1 -0
- package/dist/lib/logger/tee.d.ts +15 -0
- package/dist/lib/logger/tee.d.ts.map +1 -0
- package/dist/lib/mime.d.ts +9 -0
- package/dist/lib/mime.d.ts.map +1 -0
- package/dist/lib/never.d.ts +2 -0
- package/dist/lib/never.d.ts.map +1 -0
- package/dist/lib/utils/hash.d.ts +19 -0
- package/dist/lib/utils/hash.d.ts.map +1 -0
- package/dist/lib/utils/result.d.ts +26 -0
- package/dist/lib/utils/result.d.ts.map +1 -0
- package/dist/platform/fs.d.ts +39 -0
- package/dist/platform/fs.d.ts.map +1 -0
- package/dist/platform/index.d.ts +21 -0
- package/dist/platform/index.d.ts.map +1 -0
- package/dist/platform/process.d.ts +24 -0
- package/dist/platform/process.d.ts.map +1 -0
- package/dist/plugins/agent-status/plugin.d.ts +8 -0
- package/dist/plugins/agent-status/plugin.d.ts.map +1 -0
- package/dist/plugins/agents/agents.integration.test.d.ts +2 -0
- package/dist/plugins/agents/agents.integration.test.d.ts.map +1 -0
- package/dist/plugins/agents/index.d.ts +3 -0
- package/dist/plugins/agents/index.d.ts.map +1 -0
- package/dist/plugins/agents/plugin.d.ts +57 -0
- package/dist/plugins/agents/plugin.d.ts.map +1 -0
- package/dist/plugins/context-compact/context-compact.integration.test.d.ts +2 -0
- package/dist/plugins/context-compact/context-compact.integration.test.d.ts.map +1 -0
- package/dist/plugins/context-compact/context-compactor.d.ts +88 -0
- package/dist/plugins/context-compact/context-compactor.d.ts.map +1 -0
- package/dist/plugins/context-compact/context-compactor.test.d.ts +2 -0
- package/dist/plugins/context-compact/context-compactor.test.d.ts.map +1 -0
- package/dist/plugins/context-compact/history-offloader.d.ts +17 -0
- package/dist/plugins/context-compact/history-offloader.d.ts.map +1 -0
- package/dist/plugins/context-compact/history-offloader.test.d.ts +2 -0
- package/dist/plugins/context-compact/history-offloader.test.d.ts.map +1 -0
- package/dist/plugins/context-compact/index.d.ts +4 -0
- package/dist/plugins/context-compact/index.d.ts.map +1 -0
- package/dist/plugins/context-compact/plugin.d.ts +15 -0
- package/dist/plugins/context-compact/plugin.d.ts.map +1 -0
- package/dist/plugins/filesystem/filesystem.integration.test.d.ts +2 -0
- package/dist/plugins/filesystem/filesystem.integration.test.d.ts.map +1 -0
- package/dist/plugins/filesystem/helpers.d.ts +34 -0
- package/dist/plugins/filesystem/helpers.d.ts.map +1 -0
- package/dist/plugins/filesystem/index.d.ts +5 -0
- package/dist/plugins/filesystem/index.d.ts.map +1 -0
- package/dist/plugins/filesystem/listing.d.ts +38 -0
- package/dist/plugins/filesystem/listing.d.ts.map +1 -0
- package/dist/plugins/filesystem/plugin.d.ts +53 -0
- package/dist/plugins/filesystem/plugin.d.ts.map +1 -0
- package/dist/plugins/filesystem/schema.d.ts +7 -0
- package/dist/plugins/filesystem/schema.d.ts.map +1 -0
- package/dist/plugins/git-status/index.d.ts +2 -0
- package/dist/plugins/git-status/index.d.ts.map +1 -0
- package/dist/plugins/git-status/plugin.d.ts +12 -0
- package/dist/plugins/git-status/plugin.d.ts.map +1 -0
- package/dist/plugins/limits-guard/config.d.ts +23 -0
- package/dist/plugins/limits-guard/config.d.ts.map +1 -0
- package/dist/plugins/limits-guard/index.d.ts +5 -0
- package/dist/plugins/limits-guard/index.d.ts.map +1 -0
- package/dist/plugins/limits-guard/limit-guard.d.ts +40 -0
- package/dist/plugins/limits-guard/limit-guard.d.ts.map +1 -0
- package/dist/plugins/limits-guard/limit-guard.test.d.ts +2 -0
- package/dist/plugins/limits-guard/limit-guard.test.d.ts.map +1 -0
- package/dist/plugins/limits-guard/limits-guard.integration.test.d.ts +2 -0
- package/dist/plugins/limits-guard/limits-guard.integration.test.d.ts.map +1 -0
- package/dist/plugins/limits-guard/plugin.d.ts +39 -0
- package/dist/plugins/limits-guard/plugin.d.ts.map +1 -0
- package/dist/plugins/llm-debug/index.d.ts +2 -0
- package/dist/plugins/llm-debug/index.d.ts.map +1 -0
- package/dist/plugins/llm-debug/llm-debug.integration.test.d.ts +2 -0
- package/dist/plugins/llm-debug/llm-debug.integration.test.d.ts.map +1 -0
- package/dist/plugins/llm-debug/plugin.d.ts +31 -0
- package/dist/plugins/llm-debug/plugin.d.ts.map +1 -0
- package/dist/plugins/logs/index.d.ts +2 -0
- package/dist/plugins/logs/index.d.ts.map +1 -0
- package/dist/plugins/logs/plugin.d.ts +10 -0
- package/dist/plugins/logs/plugin.d.ts.map +1 -0
- package/dist/plugins/mailbox/helpers.d.ts +20 -0
- package/dist/plugins/mailbox/helpers.d.ts.map +1 -0
- package/dist/plugins/mailbox/index.d.ts +9 -0
- package/dist/plugins/mailbox/index.d.ts.map +1 -0
- package/dist/plugins/mailbox/mailbox.integration.test.d.ts +2 -0
- package/dist/plugins/mailbox/mailbox.integration.test.d.ts.map +1 -0
- package/dist/plugins/mailbox/plugin.d.ts +31 -0
- package/dist/plugins/mailbox/plugin.d.ts.map +1 -0
- package/dist/plugins/mailbox/prompts.d.ts +21 -0
- package/dist/plugins/mailbox/prompts.d.ts.map +1 -0
- package/dist/plugins/mailbox/query.d.ts +33 -0
- package/dist/plugins/mailbox/query.d.ts.map +1 -0
- package/dist/plugins/mailbox/schema.d.ts +54 -0
- package/dist/plugins/mailbox/schema.d.ts.map +1 -0
- package/dist/plugins/mailbox/state.d.ts +40 -0
- package/dist/plugins/mailbox/state.d.ts.map +1 -0
- package/dist/plugins/resources/index.d.ts +7 -0
- package/dist/plugins/resources/index.d.ts.map +1 -0
- package/dist/plugins/resources/manifest.d.ts +23 -0
- package/dist/plugins/resources/manifest.d.ts.map +1 -0
- package/dist/plugins/resources/plugin.d.ts +28 -0
- package/dist/plugins/resources/plugin.d.ts.map +1 -0
- package/dist/plugins/resources/post-inject.d.ts +39 -0
- package/dist/plugins/resources/post-inject.d.ts.map +1 -0
- package/dist/plugins/resources/state.d.ts +25 -0
- package/dist/plugins/resources/state.d.ts.map +1 -0
- package/dist/plugins/result-eviction/index.d.ts +3 -0
- package/dist/plugins/result-eviction/index.d.ts.map +1 -0
- package/dist/plugins/result-eviction/plugin.d.ts +19 -0
- package/dist/plugins/result-eviction/plugin.d.ts.map +1 -0
- package/dist/plugins/result-eviction/result-eviction.integration.test.d.ts +2 -0
- package/dist/plugins/result-eviction/result-eviction.integration.test.d.ts.map +1 -0
- package/dist/plugins/services/plugin.d.ts +85 -0
- package/dist/plugins/services/plugin.d.ts.map +1 -0
- package/dist/plugins/services/port-pool.d.ts +32 -0
- package/dist/plugins/services/port-pool.d.ts.map +1 -0
- package/dist/plugins/services/prompt.d.ts +13 -0
- package/dist/plugins/services/prompt.d.ts.map +1 -0
- package/dist/plugins/services/schema.d.ts +70 -0
- package/dist/plugins/services/schema.d.ts.map +1 -0
- package/dist/plugins/services/service.d.ts +86 -0
- package/dist/plugins/services/service.d.ts.map +1 -0
- package/dist/plugins/services/services.integration.test.d.ts +2 -0
- package/dist/plugins/services/services.integration.test.d.ts.map +1 -0
- package/dist/plugins/session-lifecycle/index.d.ts +2 -0
- package/dist/plugins/session-lifecycle/index.d.ts.map +1 -0
- package/dist/plugins/session-lifecycle/plugin.d.ts +97 -0
- package/dist/plugins/session-lifecycle/plugin.d.ts.map +1 -0
- package/dist/plugins/session-lifecycle/session-lifecycle.integration.test.d.ts +2 -0
- package/dist/plugins/session-lifecycle/session-lifecycle.integration.test.d.ts.map +1 -0
- package/dist/plugins/session-state/plugin.d.ts +48 -0
- package/dist/plugins/session-state/plugin.d.ts.map +1 -0
- package/dist/plugins/session-stats/index.d.ts +4 -0
- package/dist/plugins/session-stats/index.d.ts.map +1 -0
- package/dist/plugins/session-stats/plugin.d.ts +29 -0
- package/dist/plugins/session-stats/plugin.d.ts.map +1 -0
- package/dist/plugins/shell/executor.d.ts +78 -0
- package/dist/plugins/shell/executor.d.ts.map +1 -0
- package/dist/plugins/shell/index.d.ts +6 -0
- package/dist/plugins/shell/index.d.ts.map +1 -0
- package/dist/plugins/shell/plugin.d.ts +51 -0
- package/dist/plugins/shell/plugin.d.ts.map +1 -0
- package/dist/plugins/shell/shell.integration.test.d.ts +2 -0
- package/dist/plugins/shell/shell.integration.test.d.ts.map +1 -0
- package/dist/plugins/shell/shell.test.d.ts +2 -0
- package/dist/plugins/shell/shell.test.d.ts.map +1 -0
- package/dist/plugins/skills/discovery.d.ts +69 -0
- package/dist/plugins/skills/discovery.d.ts.map +1 -0
- package/dist/plugins/skills/discovery.test.d.ts +2 -0
- package/dist/plugins/skills/discovery.test.d.ts.map +1 -0
- package/dist/plugins/skills/index.d.ts +11 -0
- package/dist/plugins/skills/index.d.ts.map +1 -0
- package/dist/plugins/skills/plugin.d.ts +94 -0
- package/dist/plugins/skills/plugin.d.ts.map +1 -0
- package/dist/plugins/skills/prompts.d.ts +29 -0
- package/dist/plugins/skills/prompts.d.ts.map +1 -0
- package/dist/plugins/skills/schema.d.ts +64 -0
- package/dist/plugins/skills/schema.d.ts.map +1 -0
- package/dist/plugins/skills/skills.integration.test.d.ts +2 -0
- package/dist/plugins/skills/skills.integration.test.d.ts.map +1 -0
- package/dist/plugins/snapshotting/index.d.ts +4 -0
- package/dist/plugins/snapshotting/index.d.ts.map +1 -0
- package/dist/plugins/snapshotting/jj-snapshotter.d.ts +27 -0
- package/dist/plugins/snapshotting/jj-snapshotter.d.ts.map +1 -0
- package/dist/plugins/snapshotting/plugin.d.ts +15 -0
- package/dist/plugins/snapshotting/plugin.d.ts.map +1 -0
- package/dist/plugins/snapshotting/snapshotter.d.ts +19 -0
- package/dist/plugins/snapshotting/snapshotter.d.ts.map +1 -0
- package/dist/plugins/todo/index.d.ts +7 -0
- package/dist/plugins/todo/index.d.ts.map +1 -0
- package/dist/plugins/todo/plugin.d.ts +95 -0
- package/dist/plugins/todo/plugin.d.ts.map +1 -0
- package/dist/plugins/todo/prompts.d.ts +13 -0
- package/dist/plugins/todo/prompts.d.ts.map +1 -0
- package/dist/plugins/todo/schema.d.ts +44 -0
- package/dist/plugins/todo/schema.d.ts.map +1 -0
- package/dist/plugins/todo/todo.integration.test.d.ts +2 -0
- package/dist/plugins/todo/todo.integration.test.d.ts.map +1 -0
- package/dist/plugins/uploads/index.d.ts +9 -0
- package/dist/plugins/uploads/index.d.ts.map +1 -0
- package/dist/plugins/uploads/plugin.d.ts +56 -0
- package/dist/plugins/uploads/plugin.d.ts.map +1 -0
- package/dist/plugins/uploads/preprocessor.d.ts +70 -0
- package/dist/plugins/uploads/preprocessor.d.ts.map +1 -0
- package/dist/plugins/uploads/preprocessors/image-classifier.d.ts +49 -0
- package/dist/plugins/uploads/preprocessors/image-classifier.d.ts.map +1 -0
- package/dist/plugins/uploads/preprocessors/index.d.ts +7 -0
- package/dist/plugins/uploads/preprocessors/index.d.ts.map +1 -0
- package/dist/plugins/uploads/preprocessors/markitdown-preprocessor.d.ts +43 -0
- package/dist/plugins/uploads/preprocessors/markitdown-preprocessor.d.ts.map +1 -0
- package/dist/plugins/uploads/preprocessors/zip-preprocessor.d.ts +30 -0
- package/dist/plugins/uploads/preprocessors/zip-preprocessor.d.ts.map +1 -0
- package/dist/plugins/uploads/schema.d.ts +72 -0
- package/dist/plugins/uploads/schema.d.ts.map +1 -0
- package/dist/plugins/uploads/state.d.ts +38 -0
- package/dist/plugins/uploads/state.d.ts.map +1 -0
- package/dist/plugins/uploads/uploads.integration.test.d.ts +2 -0
- package/dist/plugins/uploads/uploads.integration.test.d.ts.map +1 -0
- package/dist/plugins/user-chat/index.d.ts +7 -0
- package/dist/plugins/user-chat/index.d.ts.map +1 -0
- package/dist/plugins/user-chat/plugin.d.ts +221 -0
- package/dist/plugins/user-chat/plugin.d.ts.map +1 -0
- package/dist/plugins/user-chat/prompts.d.ts +13 -0
- package/dist/plugins/user-chat/prompts.d.ts.map +1 -0
- package/dist/plugins/user-chat/schema.d.ts +82 -0
- package/dist/plugins/user-chat/schema.d.ts.map +1 -0
- package/dist/plugins/user-chat/user-chat.integration.test.d.ts +2 -0
- package/dist/plugins/user-chat/user-chat.integration.test.d.ts.map +1 -0
- package/dist/plugins/workers/context.d.ts +159 -0
- package/dist/plugins/workers/context.d.ts.map +1 -0
- package/dist/plugins/workers/definition.d.ts +118 -0
- package/dist/plugins/workers/definition.d.ts.map +1 -0
- package/dist/plugins/workers/index.d.ts +11 -0
- package/dist/plugins/workers/index.d.ts.map +1 -0
- package/dist/plugins/workers/plugin.d.ts +125 -0
- package/dist/plugins/workers/plugin.d.ts.map +1 -0
- package/dist/plugins/workers/worker.d.ts +76 -0
- package/dist/plugins/workers/worker.d.ts.map +1 -0
- package/dist/plugins/workers/workers.integration.test.d.ts +2 -0
- package/dist/plugins/workers/workers.integration.test.d.ts.map +1 -0
- package/dist/prompts/base.d.ts +75 -0
- package/dist/prompts/base.d.ts.map +1 -0
- package/dist/prompts/builder.d.ts +73 -0
- package/dist/prompts/builder.d.ts.map +1 -0
- package/dist/prompts/index.d.ts +10 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/macros.d.ts +15 -0
- package/dist/prompts/macros.d.ts.map +1 -0
- package/dist/prompts/macros.test.d.ts +2 -0
- package/dist/prompts/macros.test.d.ts.map +1 -0
- package/dist/testing/bootstrap-for-testing.d.ts +12 -0
- package/dist/testing/bootstrap-for-testing.d.ts.map +1 -0
- package/dist/testing/index.d.ts +8 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/node-platform.d.ts +12 -0
- package/dist/testing/node-platform.d.ts.map +1 -0
- package/dist/testing/notification-collector.d.ts +46 -0
- package/dist/testing/notification-collector.d.ts.map +1 -0
- package/dist/testing/preset-helpers.d.ts +28 -0
- package/dist/testing/preset-helpers.d.ts.map +1 -0
- package/dist/testing/test-harness.d.ts +117 -0
- package/dist/testing/test-harness.d.ts.map +1 -0
- package/dist/testing/test-harness.test.d.ts +2 -0
- package/dist/testing/test-harness.test.d.ts.map +1 -0
- package/dist/testing/wait-helpers.d.ts +17 -0
- package/dist/testing/wait-helpers.d.ts.map +1 -0
- package/dist/transport/adapter/client-adapter.d.ts +32 -0
- package/dist/transport/adapter/client-adapter.d.ts.map +1 -0
- package/dist/transport/adapter/index.d.ts +23 -0
- package/dist/transport/adapter/index.d.ts.map +1 -0
- package/dist/transport/adapter/server-adapter.d.ts +29 -0
- package/dist/transport/adapter/server-adapter.d.ts.map +1 -0
- package/dist/transport/adapter/types.d.ts +14 -0
- package/dist/transport/adapter/types.d.ts.map +1 -0
- package/dist/transport/http/app.d.ts +41 -0
- package/dist/transport/http/app.d.ts.map +1 -0
- package/dist/transport/http/index.d.ts +7 -0
- package/dist/transport/http/index.d.ts.map +1 -0
- package/dist/transport/http/middleware/bearer-auth.d.ts +16 -0
- package/dist/transport/http/middleware/bearer-auth.d.ts.map +1 -0
- package/dist/transport/http/middleware/error-handler.d.ts +21 -0
- package/dist/transport/http/middleware/error-handler.d.ts.map +1 -0
- package/dist/transport/http/routes/files.d.ts +16 -0
- package/dist/transport/http/routes/files.d.ts.map +1 -0
- package/dist/transport/http/routes/resources.d.ts +12 -0
- package/dist/transport/http/routes/resources.d.ts.map +1 -0
- package/dist/transport/http/routes/rpc.d.ts +22 -0
- package/dist/transport/http/routes/rpc.d.ts.map +1 -0
- package/dist/transport/http/routes/rpc.integration.test.d.ts +2 -0
- package/dist/transport/http/routes/rpc.integration.test.d.ts.map +1 -0
- package/dist/transport/http/routes/rpc.test.d.ts +2 -0
- package/dist/transport/http/routes/rpc.test.d.ts.map +1 -0
- package/dist/transport/http/routes/upload.d.ts +14 -0
- package/dist/transport/http/routes/upload.d.ts.map +1 -0
- package/dist/transport/rpc/index.d.ts +8 -0
- package/dist/transport/rpc/index.d.ts.map +1 -0
- package/dist/transport/rpc/methods.d.ts +25 -0
- package/dist/transport/rpc/methods.d.ts.map +1 -0
- package/dist/user-config.d.ts +29 -0
- package/dist/user-config.d.ts.map +1 -0
- package/package.json +154 -0
- package/src/bootstrap.ts +268 -0
- package/src/builtin-events.ts +25 -0
- package/src/bun-platform/fs.ts +50 -0
- package/src/bun-platform/index.ts +21 -0
- package/src/bun-platform/process.ts +25 -0
- package/src/config.test.ts +174 -0
- package/src/config.ts +103 -0
- package/src/core/agent-loop.integration.test.ts +503 -0
- package/src/core/agents/agent-config.test.ts +240 -0
- package/src/core/agents/agent-roles.ts +41 -0
- package/src/core/agents/agent-shutdown.test.ts +236 -0
- package/src/core/agents/agent.test.ts +387 -0
- package/src/core/agents/agent.ts +1472 -0
- package/src/core/agents/communicator.ts +16 -0
- package/src/core/agents/config.ts +98 -0
- package/src/core/agents/context.ts +19 -0
- package/src/core/agents/debounce.ts +116 -0
- package/src/core/agents/handler-events.test.ts +167 -0
- package/src/core/agents/index.ts +1 -0
- package/src/core/agents/response-sanitizer.test.ts +137 -0
- package/src/core/agents/response-sanitizer.ts +67 -0
- package/src/core/agents/retry.ts +164 -0
- package/src/core/agents/schema.ts +75 -0
- package/src/core/agents/state.ts +272 -0
- package/src/core/context/state.ts +38 -0
- package/src/core/errors.ts +55 -0
- package/src/core/event-sourcing.integration.test.ts +191 -0
- package/src/core/events/base-event-store.ts +264 -0
- package/src/core/events/event-store.ts +143 -0
- package/src/core/events/file.test.ts +436 -0
- package/src/core/events/file.ts +372 -0
- package/src/core/events/index.ts +3 -0
- package/src/core/events/memory.test.ts +741 -0
- package/src/core/events/memory.ts +131 -0
- package/src/core/events/metadata-utils.ts +133 -0
- package/src/core/events/test-helpers.ts +31 -0
- package/src/core/events/types.ts +64 -0
- package/src/core/file-store/file-store.ts +275 -0
- package/src/core/file-store/types.ts +52 -0
- package/src/core/image/image-processor.test.ts +218 -0
- package/src/core/image/image-processor.ts +127 -0
- package/src/core/image/index.ts +4 -0
- package/src/core/image/noop-resizer.ts +7 -0
- package/src/core/image/types.ts +24 -0
- package/src/core/image/vips-resizer.test.ts +377 -0
- package/src/core/image/vips-resizer.ts +124 -0
- package/src/core/llm/__snapshots__/anthropic-assistant-text-with-tool-calls.json +156 -0
- package/src/core/llm/__snapshots__/anthropic-consecutive-tool-results.json +152 -0
- package/src/core/llm/__snapshots__/anthropic-image-data-url.json +105 -0
- package/src/core/llm/__snapshots__/anthropic-image-http-url.json +104 -0
- package/src/core/llm/__snapshots__/anthropic-multiple-images.json +113 -0
- package/src/core/llm/__snapshots__/anthropic-multiple-tool-calls-requested.json +151 -0
- package/src/core/llm/__snapshots__/anthropic-simple-user-message.json +97 -0
- package/src/core/llm/__snapshots__/anthropic-system-message-in-conversation.json +119 -0
- package/src/core/llm/__snapshots__/anthropic-tool-call.json +123 -0
- package/src/core/llm/__snapshots__/anthropic-tool-error-result.json +139 -0
- package/src/core/llm/__snapshots__/anthropic-tool-result-with-image.json +152 -0
- package/src/core/llm/__snapshots__/anthropic-tool-roundtrip.json +139 -0
- package/src/core/llm/__snapshots__/openrouter-assistant-text-with-tool-calls.json +150 -0
- package/src/core/llm/__snapshots__/openrouter-consecutive-tool-results.json +150 -0
- package/src/core/llm/__snapshots__/openrouter-image-data-url.json +107 -0
- package/src/core/llm/__snapshots__/openrouter-image-http-url.json +107 -0
- package/src/core/llm/__snapshots__/openrouter-multiple-images.json +113 -0
- package/src/core/llm/__snapshots__/openrouter-multiple-tool-calls-requested.json +158 -0
- package/src/core/llm/__snapshots__/openrouter-simple-user-message.json +96 -0
- package/src/core/llm/__snapshots__/openrouter-system-message-in-conversation.json +108 -0
- package/src/core/llm/__snapshots__/openrouter-tool-call.json +129 -0
- package/src/core/llm/__snapshots__/openrouter-tool-error-result.json +137 -0
- package/src/core/llm/__snapshots__/openrouter-tool-result-with-image.json +148 -0
- package/src/core/llm/__snapshots__/openrouter-tool-roundtrip.json +137 -0
- package/src/core/llm/anthropic.test.ts +509 -0
- package/src/core/llm/anthropic.ts +578 -0
- package/src/core/llm/cache-breakpoints.ts +38 -0
- package/src/core/llm/cache-live.test.ts +155 -0
- package/src/core/llm/index.ts +30 -0
- package/src/core/llm/llm-log-types.ts +167 -0
- package/src/core/llm/logger.test.ts +270 -0
- package/src/core/llm/logger.ts +306 -0
- package/src/core/llm/logging-provider.ts +73 -0
- package/src/core/llm/middleware.ts +172 -0
- package/src/core/llm/mock.test.ts +402 -0
- package/src/core/llm/mock.ts +234 -0
- package/src/core/llm/openrouter-mapping.test.ts +153 -0
- package/src/core/llm/openrouter.test.ts +499 -0
- package/src/core/llm/openrouter.ts +458 -0
- package/src/core/llm/provider-integration.test.ts +408 -0
- package/src/core/llm/provider.ts +238 -0
- package/src/core/llm/routing-provider.test.ts +113 -0
- package/src/core/llm/routing-provider.ts +86 -0
- package/src/core/llm/schema.ts +47 -0
- package/src/core/llm/snapshot-fetch.ts +158 -0
- package/src/core/llm/snapshot-middleware.test.ts +168 -0
- package/src/core/llm/snapshot-middleware.ts +185 -0
- package/src/core/llm/state.ts +92 -0
- package/src/core/llm/tokens.ts +61 -0
- package/src/core/multi-agent.integration.test.ts +340 -0
- package/src/core/plugin-hooks.integration.test.ts +428 -0
- package/src/core/plugins/hook-types.ts +49 -0
- package/src/core/plugins/index.ts +52 -0
- package/src/core/plugins/plugin-builder.ts +967 -0
- package/src/core/preset/config.ts +110 -0
- package/src/core/preset/index.ts +11 -0
- package/src/core/preset/preset-builder.ts +111 -0
- package/src/core/session-lifecycle.integration.test.ts +202 -0
- package/src/core/sessions/apply-event.ts +46 -0
- package/src/core/sessions/context.ts +36 -0
- package/src/core/sessions/fork-utils.test.ts +158 -0
- package/src/core/sessions/fork-utils.ts +71 -0
- package/src/core/sessions/reducer.ts +95 -0
- package/src/core/sessions/schema.ts +91 -0
- package/src/core/sessions/session-environment.ts +12 -0
- package/src/core/sessions/session-manager.ts +883 -0
- package/src/core/sessions/session-store.ts +141 -0
- package/src/core/sessions/session.test.ts +1730 -0
- package/src/core/sessions/session.ts +833 -0
- package/src/core/sessions/state.ts +520 -0
- package/src/core/system.ts +206 -0
- package/src/core/tools/context.ts +3 -0
- package/src/core/tools/definition.ts +15 -0
- package/src/core/tools/executor.test.ts +160 -0
- package/src/core/tools/executor.ts +117 -0
- package/src/core/tools/index.ts +3 -0
- package/src/core/tools/schema.ts +80 -0
- package/src/core/tools/state.ts +34 -0
- package/src/index.ts +165 -0
- package/src/lib/json/index.ts +20 -0
- package/src/lib/logger/console.test.ts +348 -0
- package/src/lib/logger/console.ts +185 -0
- package/src/lib/logger/file.ts +65 -0
- package/src/lib/logger/index.ts +4 -0
- package/src/lib/logger/logger.ts +114 -0
- package/src/lib/logger/ring-buffer.ts +65 -0
- package/src/lib/logger/tee.ts +51 -0
- package/src/lib/mime.ts +23 -0
- package/src/lib/never.ts +3 -0
- package/src/lib/utils/hash.ts +38 -0
- package/src/lib/utils/result.ts +35 -0
- package/src/platform/fs.ts +38 -0
- package/src/platform/index.ts +23 -0
- package/src/platform/process.ts +28 -0
- package/src/plugins/agent-status/plugin.ts +77 -0
- package/src/plugins/agents/agents.integration.test.ts +808 -0
- package/src/plugins/agents/index.ts +2 -0
- package/src/plugins/agents/plugin.ts +242 -0
- package/src/plugins/context-compact/context-compact.integration.test.ts +207 -0
- package/src/plugins/context-compact/context-compactor.test.ts +923 -0
- package/src/plugins/context-compact/context-compactor.ts +343 -0
- package/src/plugins/context-compact/history-offloader.test.ts +100 -0
- package/src/plugins/context-compact/history-offloader.ts +47 -0
- package/src/plugins/context-compact/index.ts +3 -0
- package/src/plugins/context-compact/plugin.ts +62 -0
- package/src/plugins/filesystem/filesystem.integration.test.ts +485 -0
- package/src/plugins/filesystem/helpers.ts +216 -0
- package/src/plugins/filesystem/index.ts +4 -0
- package/src/plugins/filesystem/listing.ts +276 -0
- package/src/plugins/filesystem/plugin.ts +468 -0
- package/src/plugins/filesystem/schema.ts +6 -0
- package/src/plugins/git-status/index.ts +1 -0
- package/src/plugins/git-status/plugin.ts +166 -0
- package/src/plugins/limits-guard/config.ts +26 -0
- package/src/plugins/limits-guard/index.ts +4 -0
- package/src/plugins/limits-guard/limit-guard.test.ts +161 -0
- package/src/plugins/limits-guard/limit-guard.ts +164 -0
- package/src/plugins/limits-guard/limits-guard.integration.test.ts +437 -0
- package/src/plugins/limits-guard/plugin.ts +306 -0
- package/src/plugins/llm-debug/index.ts +1 -0
- package/src/plugins/llm-debug/llm-debug.integration.test.ts +192 -0
- package/src/plugins/llm-debug/plugin.ts +172 -0
- package/src/plugins/logs/index.ts +1 -0
- package/src/plugins/logs/plugin.ts +39 -0
- package/src/plugins/mailbox/helpers.ts +83 -0
- package/src/plugins/mailbox/index.ts +13 -0
- package/src/plugins/mailbox/mailbox.integration.test.ts +705 -0
- package/src/plugins/mailbox/plugin.ts +270 -0
- package/src/plugins/mailbox/prompts.ts +104 -0
- package/src/plugins/mailbox/query.ts +53 -0
- package/src/plugins/mailbox/schema.ts +81 -0
- package/src/plugins/mailbox/state.ts +52 -0
- package/src/plugins/resources/index.ts +11 -0
- package/src/plugins/resources/manifest.ts +25 -0
- package/src/plugins/resources/plugin.ts +201 -0
- package/src/plugins/resources/post-inject.ts +74 -0
- package/src/plugins/resources/state.ts +30 -0
- package/src/plugins/result-eviction/index.ts +2 -0
- package/src/plugins/result-eviction/plugin.ts +65 -0
- package/src/plugins/result-eviction/result-eviction.integration.test.ts +244 -0
- package/src/plugins/services/plugin.ts +485 -0
- package/src/plugins/services/port-pool.ts +73 -0
- package/src/plugins/services/prompt.ts +53 -0
- package/src/plugins/services/schema.ts +83 -0
- package/src/plugins/services/service.ts +578 -0
- package/src/plugins/services/services.integration.test.ts +595 -0
- package/src/plugins/session-lifecycle/index.ts +1 -0
- package/src/plugins/session-lifecycle/plugin.ts +302 -0
- package/src/plugins/session-lifecycle/session-lifecycle.integration.test.ts +639 -0
- package/src/plugins/session-state/plugin.ts +179 -0
- package/src/plugins/session-stats/index.ts +3 -0
- package/src/plugins/session-stats/plugin.ts +120 -0
- package/src/plugins/shell/executor.ts +462 -0
- package/src/plugins/shell/index.ts +23 -0
- package/src/plugins/shell/plugin.ts +118 -0
- package/src/plugins/shell/shell.integration.test.ts +273 -0
- package/src/plugins/shell/shell.test.ts +314 -0
- package/src/plugins/skills/discovery.test.ts +395 -0
- package/src/plugins/skills/discovery.ts +276 -0
- package/src/plugins/skills/index.ts +32 -0
- package/src/plugins/skills/plugin.ts +381 -0
- package/src/plugins/skills/prompts.ts +84 -0
- package/src/plugins/skills/schema.ts +88 -0
- package/src/plugins/skills/skills.integration.test.ts +580 -0
- package/src/plugins/snapshotting/index.ts +3 -0
- package/src/plugins/snapshotting/jj-snapshotter.ts +122 -0
- package/src/plugins/snapshotting/plugin.ts +36 -0
- package/src/plugins/snapshotting/snapshotter.ts +20 -0
- package/src/plugins/todo/index.ts +11 -0
- package/src/plugins/todo/plugin.ts +363 -0
- package/src/plugins/todo/prompts.ts +63 -0
- package/src/plugins/todo/schema.ts +71 -0
- package/src/plugins/todo/todo.integration.test.ts +687 -0
- package/src/plugins/uploads/index.ts +13 -0
- package/src/plugins/uploads/plugin.ts +406 -0
- package/src/plugins/uploads/preprocessor.ts +111 -0
- package/src/plugins/uploads/preprocessors/image-classifier.ts +176 -0
- package/src/plugins/uploads/preprocessors/index.ts +7 -0
- package/src/plugins/uploads/preprocessors/markitdown-preprocessor.ts +262 -0
- package/src/plugins/uploads/preprocessors/zip-preprocessor.ts +210 -0
- package/src/plugins/uploads/schema.ts +92 -0
- package/src/plugins/uploads/state.ts +42 -0
- package/src/plugins/uploads/uploads.integration.test.ts +654 -0
- package/src/plugins/user-chat/index.ts +17 -0
- package/src/plugins/user-chat/plugin.ts +728 -0
- package/src/plugins/user-chat/prompts.ts +30 -0
- package/src/plugins/user-chat/schema.ts +80 -0
- package/src/plugins/user-chat/user-chat.integration.test.ts +794 -0
- package/src/plugins/workers/context.ts +251 -0
- package/src/plugins/workers/definition.ts +169 -0
- package/src/plugins/workers/index.ts +21 -0
- package/src/plugins/workers/plugin.ts +722 -0
- package/src/plugins/workers/worker.ts +115 -0
- package/src/plugins/workers/workers.integration.test.ts +778 -0
- package/src/prompts/base.ts +266 -0
- package/src/prompts/builder.ts +194 -0
- package/src/prompts/index.ts +36 -0
- package/src/prompts/macros.test.ts +107 -0
- package/src/prompts/macros.ts +27 -0
- package/src/testing/bootstrap-for-testing.ts +39 -0
- package/src/testing/index.ts +7 -0
- package/src/testing/node-platform.ts +80 -0
- package/src/testing/notification-collector.ts +100 -0
- package/src/testing/preset-helpers.ts +57 -0
- package/src/testing/test-harness.test.ts +63 -0
- package/src/testing/test-harness.ts +279 -0
- package/src/testing/wait-helpers.ts +84 -0
- package/src/transport/adapter/client-adapter.ts +81 -0
- package/src/transport/adapter/index.ts +42 -0
- package/src/transport/adapter/server-adapter.ts +93 -0
- package/src/transport/adapter/types.ts +20 -0
- package/src/transport/http/app.ts +129 -0
- package/src/transport/http/index.ts +7 -0
- package/src/transport/http/middleware/bearer-auth.ts +40 -0
- package/src/transport/http/middleware/error-handler.ts +76 -0
- package/src/transport/http/routes/files.ts +274 -0
- package/src/transport/http/routes/resources.ts +115 -0
- package/src/transport/http/routes/rpc.integration.test.ts +243 -0
- package/src/transport/http/routes/rpc.test.ts +372 -0
- package/src/transport/http/routes/rpc.ts +156 -0
- package/src/transport/http/routes/upload.ts +286 -0
- package/src/transport/rpc/index.ts +11 -0
- package/src/transport/rpc/methods.ts +38 -0
- package/src/user-config.ts +33 -0
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import type { AnyAgentDefinition, CommunicatorConfig, OrchestratorConfig } from '~/core/agents/config.js'
|
|
2
|
+
import type { LLMMiddleware } from '~/core/llm/middleware.js'
|
|
3
|
+
import type { SessionPluginConfig } from '~/core/plugins/plugin-builder.js'
|
|
4
|
+
import type { CreatePresetInput } from './preset-builder.js'
|
|
5
|
+
import { collectFromTree } from './preset-builder.js'
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Preset - complete configuration for a Roj session
|
|
9
|
+
*/
|
|
10
|
+
export interface PresetDefinition {
|
|
11
|
+
id: string
|
|
12
|
+
name: string
|
|
13
|
+
description?: string
|
|
14
|
+
|
|
15
|
+
/** Default workspace directory path. Can be overridden per session. */
|
|
16
|
+
workspaceDir?: string
|
|
17
|
+
|
|
18
|
+
/** When true, agents see virtual paths (/home/user/session, /home/user/workspace) instead of real filesystem paths */
|
|
19
|
+
sandboxed?: boolean
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Session-level plugin configurations.
|
|
23
|
+
* Created via `pluginDefinition.configure(config)`.
|
|
24
|
+
*/
|
|
25
|
+
plugins?: SessionPluginConfig[]
|
|
26
|
+
|
|
27
|
+
/** Orchestrator configuration (always exists) */
|
|
28
|
+
orchestrator: OrchestratorConfig
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Communication agent configuration.
|
|
32
|
+
* When present, user messages are routed through communicator first.
|
|
33
|
+
* When absent, messages go directly to orchestrator.
|
|
34
|
+
*/
|
|
35
|
+
communicator?: CommunicatorConfig
|
|
36
|
+
|
|
37
|
+
/** Definitions of spawnable agents (accepts both typed and untyped agents) */
|
|
38
|
+
agents: AnyAgentDefinition[]
|
|
39
|
+
|
|
40
|
+
/** LLM middleware chain applied to all agents in this preset (runs before agent-level middleware) */
|
|
41
|
+
llmMiddleware?: LLMMiddleware[]
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Platform resource slugs to inject into sessions by default.
|
|
45
|
+
* The init workflow resolves these slugs to resource files and injects them
|
|
46
|
+
* into the workspace when no explicit resourceIds are provided.
|
|
47
|
+
*/
|
|
48
|
+
defaultResourceSlugs?: string[]
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Create a preset with automatic collection.
|
|
53
|
+
*
|
|
54
|
+
* Recursively walks the orchestrator (and communicator) tree to collect
|
|
55
|
+
* all agents. Then validates with `validatePreset()`.
|
|
56
|
+
*
|
|
57
|
+
* @throws Error if preset validation fails
|
|
58
|
+
*/
|
|
59
|
+
export function createPreset(input: CreatePresetInput): PresetDefinition {
|
|
60
|
+
const collected = collectFromTree(input.orchestrator)
|
|
61
|
+
|
|
62
|
+
if (input.communicator) {
|
|
63
|
+
const commCollected = collectFromTree(input.communicator)
|
|
64
|
+
for (const a of commCollected.agents) {
|
|
65
|
+
if (!collected.agents.includes(a)) collected.agents.push(a)
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const preset: PresetDefinition = {
|
|
70
|
+
...input,
|
|
71
|
+
agents: collected.agents,
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const errors = validatePreset(preset)
|
|
75
|
+
if (errors.length > 0) {
|
|
76
|
+
throw new Error(`Invalid preset "${preset.id}":\n${errors.map((e) => ` - ${e}`).join('\n')}`)
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return preset
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Validates a preset configuration, checking that all referenced agents, and services exist.
|
|
84
|
+
* @param preset The preset to validate
|
|
85
|
+
* @returns Array of error messages (empty if valid)
|
|
86
|
+
*/
|
|
87
|
+
export const validatePreset = (preset: PresetDefinition): string[] => {
|
|
88
|
+
const errors: string[] = []
|
|
89
|
+
|
|
90
|
+
// Collect all defined agent names
|
|
91
|
+
const agentNames = new Set(preset.agents.map((a) => a.name))
|
|
92
|
+
|
|
93
|
+
// Check orchestrator spawnable agents
|
|
94
|
+
for (const name of preset.orchestrator.agents ?? []) {
|
|
95
|
+
if (!agentNames.has(name)) {
|
|
96
|
+
errors.push(`Orchestrator references unknown agent: ${name}`)
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// Check each agent's spawnable agents and workers
|
|
101
|
+
for (const agent of preset.agents) {
|
|
102
|
+
for (const name of agent.agents ?? []) {
|
|
103
|
+
if (!agentNames.has(name)) {
|
|
104
|
+
errors.push(`Agent '${agent.name}' references unknown agent: ${name}`)
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
return errors
|
|
110
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Preset module - type-safe preset builder and configuration
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
// Re-export from config
|
|
6
|
+
export type { PresetDefinition as Preset } from './config.js'
|
|
7
|
+
export { createPreset, validatePreset } from './config.js'
|
|
8
|
+
|
|
9
|
+
// Re-export from preset-builder
|
|
10
|
+
export type { CreateOrchestratorInput, DefineAgentInput } from './preset-builder.js'
|
|
11
|
+
export { createOrchestrator, defineAgent } from './preset-builder.js'
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type-safe preset builder for Roj SDK.
|
|
3
|
+
*
|
|
4
|
+
* Replaces string-based cross-references (spawnableAgents)
|
|
5
|
+
* with object references, catching typos and renames at compile time.
|
|
6
|
+
*
|
|
7
|
+
* `createPreset` recursively collects agents from the orchestrator tree.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import type { Preset } from '~/core/preset/index.js'
|
|
11
|
+
import type { AgentDefinition, AnyAgentDefinition, BaseAgentConfig, OrchestratorConfig } from '../agents/config.js'
|
|
12
|
+
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// Helper types
|
|
15
|
+
// ============================================================================
|
|
16
|
+
|
|
17
|
+
interface ObjectRefs {
|
|
18
|
+
agents?: AnyAgentDefinition[]
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Replace string ref fields with short object-ref fields.
|
|
23
|
+
* `agents: string[]` → `agents: AnyAgentDefinition[]`
|
|
24
|
+
*/
|
|
25
|
+
type WithObjectRefs<T> =
|
|
26
|
+
& Omit<T, 'spawnableAgents' | 'agents'>
|
|
27
|
+
& ObjectRefs
|
|
28
|
+
|
|
29
|
+
// ============================================================================
|
|
30
|
+
// Public input types
|
|
31
|
+
// ============================================================================
|
|
32
|
+
|
|
33
|
+
/** Input type for defineAgent - uses object refs instead of string names */
|
|
34
|
+
export type DefineAgentInput<TInput = unknown> = WithObjectRefs<AgentDefinition<TInput>>
|
|
35
|
+
|
|
36
|
+
/** Input type for createOrchestrator - uses object refs instead of string names */
|
|
37
|
+
export type CreateOrchestratorInput = WithObjectRefs<BaseAgentConfig>
|
|
38
|
+
|
|
39
|
+
/** Input type for createPreset - agents are auto-collected from the tree */
|
|
40
|
+
export type CreatePresetInput = Omit<Preset, 'agents'>
|
|
41
|
+
|
|
42
|
+
// ============================================================================
|
|
43
|
+
// Internal: ref storage & resolution
|
|
44
|
+
// ============================================================================
|
|
45
|
+
|
|
46
|
+
/** Stores original object refs for each resolved config, keyed by identity */
|
|
47
|
+
const refStore = new WeakMap<object, ObjectRefs>()
|
|
48
|
+
|
|
49
|
+
function resolveAndStore<T extends object>(
|
|
50
|
+
refs: ObjectRefs,
|
|
51
|
+
resolved: T,
|
|
52
|
+
): T {
|
|
53
|
+
refStore.set(resolved, refs)
|
|
54
|
+
return resolved
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
interface ResolvedRefs {
|
|
58
|
+
agents: string[]
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function resolveRefs(refs: ObjectRefs): ResolvedRefs {
|
|
62
|
+
return {
|
|
63
|
+
agents: (refs.agents ?? []).map((a) => a.name),
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/** Recursively collect agents from a config node */
|
|
68
|
+
export function collectFromTree(root: object): { agents: AnyAgentDefinition[] } {
|
|
69
|
+
const agents = new Set<AnyAgentDefinition>()
|
|
70
|
+
|
|
71
|
+
function visit(node: object) {
|
|
72
|
+
const refs = refStore.get(node)
|
|
73
|
+
if (!refs) return
|
|
74
|
+
|
|
75
|
+
for (const agent of refs.agents ?? []) {
|
|
76
|
+
if (!agents.has(agent)) {
|
|
77
|
+
agents.add(agent)
|
|
78
|
+
visit(agent)
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
visit(root)
|
|
84
|
+
return { agents: [...agents] }
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// ============================================================================
|
|
88
|
+
// Public API
|
|
89
|
+
// ============================================================================
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Define an agent with type-safe object references.
|
|
93
|
+
*
|
|
94
|
+
* Accepts `agents` as object references
|
|
95
|
+
* and resolves them to string names for the runtime.
|
|
96
|
+
*/
|
|
97
|
+
export function defineAgent<TInput = unknown>(input: DefineAgentInput<TInput>): AgentDefinition<TInput> {
|
|
98
|
+
const { agents, ...rest } = input
|
|
99
|
+
return resolveAndStore({ agents }, { ...rest, ...resolveRefs({ agents }) })
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Create an orchestrator config with type-safe object references.
|
|
104
|
+
*
|
|
105
|
+
* Accepts `agents` as object references
|
|
106
|
+
* and resolves them to string names for the runtime.
|
|
107
|
+
*/
|
|
108
|
+
export function createOrchestrator(input: CreateOrchestratorInput): OrchestratorConfig {
|
|
109
|
+
const { agents, ...rest } = input
|
|
110
|
+
return resolveAndStore({ agents }, { ...rest, ...resolveRefs({ agents }) })
|
|
111
|
+
}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { describe, expect, it } from 'bun:test'
|
|
2
|
+
import { AgentId } from '~/core/agents/schema.js'
|
|
3
|
+
import { agentEvents } from '~/core/agents/state.js'
|
|
4
|
+
import { MockLLMProvider } from '~/core/llm/mock.js'
|
|
5
|
+
import { ModelId } from '~/core/llm/schema.js'
|
|
6
|
+
import { SessionId } from '~/core/sessions/schema.js'
|
|
7
|
+
import { sessionEvents } from '~/core/sessions/state.js'
|
|
8
|
+
import { createTestPreset, TestHarness } from '~/testing/index.js'
|
|
9
|
+
|
|
10
|
+
describe('core: session lifecycle', () => {
|
|
11
|
+
it('create session → session_created event emitted', async () => {
|
|
12
|
+
const harness = new TestHarness({
|
|
13
|
+
presets: [createTestPreset()],
|
|
14
|
+
llmProvider: MockLLMProvider.withFixedResponse({ content: 'Ok', toolCalls: [] }),
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
const session = await harness.createSession('test')
|
|
18
|
+
|
|
19
|
+
const events = await session.getEventsByType(sessionEvents, 'session_created')
|
|
20
|
+
expect(events).toHaveLength(1)
|
|
21
|
+
expect(events[0].presetId).toBe('test')
|
|
22
|
+
|
|
23
|
+
await harness.shutdown()
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
it('create session → orchestrator agent spawned automatically', async () => {
|
|
27
|
+
const harness = new TestHarness({
|
|
28
|
+
presets: [createTestPreset()],
|
|
29
|
+
llmProvider: MockLLMProvider.withFixedResponse({ content: 'Ok', toolCalls: [] }),
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
const session = await harness.createSession('test')
|
|
33
|
+
|
|
34
|
+
const spawnEvents = await session.getEventsByType(agentEvents, 'agent_spawned')
|
|
35
|
+
expect(spawnEvents.length).toBeGreaterThanOrEqual(1)
|
|
36
|
+
|
|
37
|
+
// The orchestrator should be the entry agent
|
|
38
|
+
const entryAgentId = session.getEntryAgentId()
|
|
39
|
+
expect(entryAgentId).not.toBeNull()
|
|
40
|
+
|
|
41
|
+
const agentState = session.state.agents.get(entryAgentId!)
|
|
42
|
+
expect(agentState).toBeDefined()
|
|
43
|
+
|
|
44
|
+
await harness.shutdown()
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
it('create session with communicator config → both communicator and orchestrator spawned', async () => {
|
|
48
|
+
const harness = new TestHarness({
|
|
49
|
+
presets: [{
|
|
50
|
+
id: 'test-comm',
|
|
51
|
+
name: 'Test with communicator',
|
|
52
|
+
orchestrator: {
|
|
53
|
+
system: 'Orchestrator.',
|
|
54
|
+
model: ModelId('mock'),
|
|
55
|
+
tools: [],
|
|
56
|
+
agents: [],
|
|
57
|
+
debounceMs: 0,
|
|
58
|
+
},
|
|
59
|
+
communicator: {
|
|
60
|
+
system: 'Communicator.',
|
|
61
|
+
model: ModelId('mock'),
|
|
62
|
+
debounceMs: 0,
|
|
63
|
+
},
|
|
64
|
+
agents: [],
|
|
65
|
+
}],
|
|
66
|
+
llmProvider: MockLLMProvider.withFixedResponse({ content: 'Ok', toolCalls: [] }),
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
const session = await harness.createSession('test-comm')
|
|
70
|
+
|
|
71
|
+
const spawnEvents = await session.getEventsByType(agentEvents, 'agent_spawned')
|
|
72
|
+
// Should have both communicator and orchestrator
|
|
73
|
+
expect(spawnEvents.length).toBeGreaterThanOrEqual(2)
|
|
74
|
+
|
|
75
|
+
// Entry agent should be the communicator
|
|
76
|
+
const entryAgentId = session.getEntryAgentId()
|
|
77
|
+
expect(entryAgentId).not.toBeNull()
|
|
78
|
+
|
|
79
|
+
// Both agents should exist in state
|
|
80
|
+
expect(session.state.agents.size).toBeGreaterThanOrEqual(2)
|
|
81
|
+
|
|
82
|
+
await harness.shutdown()
|
|
83
|
+
})
|
|
84
|
+
|
|
85
|
+
it('close session → session_closed event → status becomes closed', async () => {
|
|
86
|
+
const harness = new TestHarness({
|
|
87
|
+
presets: [createTestPreset()],
|
|
88
|
+
llmProvider: MockLLMProvider.withFixedResponse({ content: 'Ok', toolCalls: [] }),
|
|
89
|
+
})
|
|
90
|
+
|
|
91
|
+
const session = await harness.createSession('test')
|
|
92
|
+
await session.sendAndWaitForIdle('Hi')
|
|
93
|
+
|
|
94
|
+
await session.close()
|
|
95
|
+
|
|
96
|
+
// Reload the session to check state
|
|
97
|
+
const reloaded = await harness.sessionManager.getSession(session.sessionId)
|
|
98
|
+
expect(reloaded.ok).toBe(true)
|
|
99
|
+
if (reloaded.ok) {
|
|
100
|
+
expect(reloaded.value.state.status).toBe('closed')
|
|
101
|
+
|
|
102
|
+
const closedEvents = await harness.eventStore.getEventsByType(session.sessionId, 'session_closed')
|
|
103
|
+
expect(closedEvents).toHaveLength(1)
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
await harness.shutdown()
|
|
107
|
+
})
|
|
108
|
+
|
|
109
|
+
it('reopen session → session_reopened event → agents can process again', async () => {
|
|
110
|
+
const harness = new TestHarness({
|
|
111
|
+
presets: [createTestPreset()],
|
|
112
|
+
llmProvider: MockLLMProvider.withFixedResponse({ content: 'Ok', toolCalls: [] }),
|
|
113
|
+
})
|
|
114
|
+
|
|
115
|
+
const session = await harness.createSession('test')
|
|
116
|
+
await session.sendAndWaitForIdle('Hi')
|
|
117
|
+
|
|
118
|
+
// Close
|
|
119
|
+
await session.close()
|
|
120
|
+
|
|
121
|
+
// Reopen via plugin method (need to reload first)
|
|
122
|
+
const reloaded = await harness.sessionManager.getSession(session.sessionId)
|
|
123
|
+
expect(reloaded.ok).toBe(true)
|
|
124
|
+
if (reloaded.ok) {
|
|
125
|
+
const reopenResult = await reloaded.value.callPluginMethod('sessions.reopen', {})
|
|
126
|
+
expect(reopenResult.ok).toBe(true)
|
|
127
|
+
|
|
128
|
+
const reopenedEvents = await harness.eventStore.getEventsByType(session.sessionId, 'session_reopened')
|
|
129
|
+
expect(reopenedEvents).toHaveLength(1)
|
|
130
|
+
|
|
131
|
+
// Session should be active again
|
|
132
|
+
expect(reloaded.value.state.status).toBe('active')
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
await harness.shutdown()
|
|
136
|
+
})
|
|
137
|
+
|
|
138
|
+
it('session state reconstructed correctly from events', async () => {
|
|
139
|
+
const harness = new TestHarness({
|
|
140
|
+
presets: [createTestPreset()],
|
|
141
|
+
llmProvider: MockLLMProvider.withFixedResponse({ content: 'Ok', toolCalls: [] }),
|
|
142
|
+
})
|
|
143
|
+
|
|
144
|
+
const session = await harness.createSession('test')
|
|
145
|
+
await session.sendAndWaitForIdle('Hello')
|
|
146
|
+
|
|
147
|
+
const originalState = session.state
|
|
148
|
+
const originalAgentCount = originalState.agents.size
|
|
149
|
+
const originalPresetId = originalState.presetId
|
|
150
|
+
|
|
151
|
+
// Reload session from event store (simulates restart)
|
|
152
|
+
const reloaded = await harness.sessionManager.getSession(session.sessionId)
|
|
153
|
+
expect(reloaded.ok).toBe(true)
|
|
154
|
+
if (reloaded.ok) {
|
|
155
|
+
const reloadedState = reloaded.value.state
|
|
156
|
+
expect(reloadedState.presetId).toBe(originalPresetId)
|
|
157
|
+
expect(reloadedState.agents.size).toBe(originalAgentCount)
|
|
158
|
+
expect(reloadedState.status).toBe('active')
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
await harness.shutdown()
|
|
162
|
+
})
|
|
163
|
+
|
|
164
|
+
it('fork session → new session with events up to fork point, independent processing', async () => {
|
|
165
|
+
const harness = new TestHarness({
|
|
166
|
+
presets: [createTestPreset()],
|
|
167
|
+
llmProvider: MockLLMProvider.withFixedResponse({ content: 'Ok', toolCalls: [] }),
|
|
168
|
+
})
|
|
169
|
+
|
|
170
|
+
const session = await harness.createSession('test')
|
|
171
|
+
await session.sendAndWaitForIdle('Message 1')
|
|
172
|
+
await session.sendAndWaitForIdle('Message 2')
|
|
173
|
+
|
|
174
|
+
const originalEvents = await session.getEvents()
|
|
175
|
+
// Fork at roughly half the events
|
|
176
|
+
const forkIndex = Math.floor(originalEvents.length / 2)
|
|
177
|
+
|
|
178
|
+
const forkResult = await harness.sessionManager.callManagerMethod('sessions.fork', {
|
|
179
|
+
sessionId: String(session.sessionId),
|
|
180
|
+
eventIndex: forkIndex,
|
|
181
|
+
})
|
|
182
|
+
|
|
183
|
+
expect(forkResult.ok).toBe(true)
|
|
184
|
+
if (forkResult.ok) {
|
|
185
|
+
expect(forkResult.value).toMatchObject({ sessionId: expect.any(String) })
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
if (forkResult.ok && typeof forkResult.value === 'object' && forkResult.value !== null && 'sessionId' in forkResult.value) {
|
|
189
|
+
const forkedSessionId = SessionId(String(forkResult.value.sessionId))
|
|
190
|
+
|
|
191
|
+
// Forked session should have fewer events than the original
|
|
192
|
+
const forkedEvents = await harness.eventStore.load(forkedSessionId)
|
|
193
|
+
expect(forkedEvents.length).toBeLessThan(originalEvents.length)
|
|
194
|
+
|
|
195
|
+
// Original session should be unaffected
|
|
196
|
+
const originalEventsAfter = await session.getEvents()
|
|
197
|
+
expect(originalEventsAfter.length).toBe(originalEvents.length)
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
await harness.shutdown()
|
|
201
|
+
})
|
|
202
|
+
})
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Composed event reducer — core reducer + plugin state slices.
|
|
3
|
+
*
|
|
4
|
+
* This file is the composition root for the event-sourced reducer.
|
|
5
|
+
* Core SessionState stays free of plugin imports; each plugin owns a
|
|
6
|
+
* dynamic state slice accessed via `selectPluginState()`.
|
|
7
|
+
*
|
|
8
|
+
* The default `applyEvent` includes core + always-enabled plugins (mailbox).
|
|
9
|
+
* Additional plugin reducers are composed via `createApplyEvent()`.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import type { ConfiguredPlugin } from '~/core/plugins/plugin-builder.js'
|
|
13
|
+
import { mailboxPlugin } from '~/plugins/mailbox/plugin.js'
|
|
14
|
+
import type { SessionReducer } from './reducer.js'
|
|
15
|
+
import { composeReducers } from './reducer.js'
|
|
16
|
+
import { coreReducer } from './state.js'
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Base reducer: core events + always-enabled plugin state slices (mailbox).
|
|
20
|
+
* Mailbox is always enabled, has no config, and is fundamental to all sessions.
|
|
21
|
+
*/
|
|
22
|
+
const mailboxConfigured = mailboxPlugin.create({})
|
|
23
|
+
const baseReducer: SessionReducer = mailboxConfigured.slice
|
|
24
|
+
? composeReducers(coreReducer, mailboxConfigured.slice.reducer)
|
|
25
|
+
: coreReducer
|
|
26
|
+
|
|
27
|
+
export const applyEvent: SessionReducer = baseReducer
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Create a composed reducer that handles core + all plugin events.
|
|
31
|
+
* Use this when additional plugins are available (e.g. in SessionStore).
|
|
32
|
+
*/
|
|
33
|
+
export const createApplyEvent = (plugins: ConfiguredPlugin[]): SessionReducer => {
|
|
34
|
+
const pluginReducers: SessionReducer[] = []
|
|
35
|
+
for (const plugin of plugins) {
|
|
36
|
+
// Skip mailbox — already included in baseReducer
|
|
37
|
+
if (plugin.name === 'mailbox') continue
|
|
38
|
+
if (plugin.slice !== undefined) {
|
|
39
|
+
pluginReducers.push(plugin.slice.reducer)
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
if (pluginReducers.length === 0) return baseReducer
|
|
44
|
+
|
|
45
|
+
return composeReducers(baseReducer, ...pluginReducers)
|
|
46
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { EventStore } from '~/core/events/event-store'
|
|
2
|
+
import type { BaseEvent } from '~/core/events/types'
|
|
3
|
+
import type { LLMLogger } from '~/core/llm/logger'
|
|
4
|
+
import type { LLMProvider } from '~/core/llm/provider'
|
|
5
|
+
import type { Logger } from '~/lib/logger/logger'
|
|
6
|
+
import type { Platform } from '~/platform/index.js'
|
|
7
|
+
import type { FileStore } from '../file-store/types'
|
|
8
|
+
import type { SessionId } from './schema'
|
|
9
|
+
import type { SessionEnvironment } from './session-environment'
|
|
10
|
+
import type { SessionState } from './state'
|
|
11
|
+
|
|
12
|
+
export type SessionContext<TSessionInput = unknown> = {
|
|
13
|
+
readonly sessionId: SessionId
|
|
14
|
+
/** The full session state (readonly) */
|
|
15
|
+
readonly sessionState: SessionState
|
|
16
|
+
/** The typed input if agent has inputSchema, otherwise the task string */
|
|
17
|
+
readonly sessionInput: TSessionInput
|
|
18
|
+
/** Session environment directories */
|
|
19
|
+
readonly environment: SessionEnvironment
|
|
20
|
+
/** LLM inference client for handlers that need LLM access */
|
|
21
|
+
readonly llm: LLMProvider
|
|
22
|
+
/** FileStore with full access - resolves agent-visible paths */
|
|
23
|
+
readonly files: FileStore
|
|
24
|
+
/** Event store for loading/querying events */
|
|
25
|
+
readonly eventStore: EventStore
|
|
26
|
+
/** LLM call logger for debugging and audit */
|
|
27
|
+
readonly llmLogger?: LLMLogger
|
|
28
|
+
/** Host-environment adapters (filesystem, process). */
|
|
29
|
+
readonly platform: Platform
|
|
30
|
+
|
|
31
|
+
readonly logger: Logger
|
|
32
|
+
|
|
33
|
+
emitEvent: (event: Omit<BaseEvent<string>, 'sessionId'>) => Promise<void>
|
|
34
|
+
/** Send a notification to connected clients via transport (ephemeral, not persisted) */
|
|
35
|
+
notify: (type: string, payload: unknown) => void
|
|
36
|
+
}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { AgentId } from '~/core/agents/schema.js'
|
|
2
|
+
import { agentEvents } from '~/core/agents/state.js'
|
|
3
|
+
import { withSessionId } from '~/core/events/test-helpers.js'
|
|
4
|
+
import type { DomainEvent, FactoryEventType } from '~/core/events/types.js'
|
|
5
|
+
import { SessionId } from '~/core/sessions/schema.js'
|
|
6
|
+
import { sessionEvents } from '~/core/sessions/state.js'
|
|
7
|
+
import type { SessionCreatedEvent } from '~/core/sessions/state.js'
|
|
8
|
+
import { ToolCallId } from '~/core/tools/schema.js'
|
|
9
|
+
import { toolEvents } from '~/core/tools/state.js'
|
|
10
|
+
|
|
11
|
+
type ToolEvent = FactoryEventType<typeof toolEvents>
|
|
12
|
+
import { describe, expect, it } from 'bun:test'
|
|
13
|
+
import { findSnapshotRefsAtIndex, rewriteEventsForFork } from './fork-utils.js'
|
|
14
|
+
|
|
15
|
+
const sourceSessionId = SessionId('source-session-id')
|
|
16
|
+
const newSessionId = SessionId('new-session-id')
|
|
17
|
+
const agentId = AgentId('agent-1')
|
|
18
|
+
|
|
19
|
+
function makeEvents(): DomainEvent[] {
|
|
20
|
+
return [
|
|
21
|
+
{
|
|
22
|
+
...withSessionId(
|
|
23
|
+
sourceSessionId,
|
|
24
|
+
sessionEvents.create('session_created', {
|
|
25
|
+
presetId: 'test-preset',
|
|
26
|
+
workspaceDir: '/workspace/source',
|
|
27
|
+
}),
|
|
28
|
+
),
|
|
29
|
+
timestamp: 1000,
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
...withSessionId(
|
|
33
|
+
sourceSessionId,
|
|
34
|
+
agentEvents.create('agent_spawned', {
|
|
35
|
+
agentId,
|
|
36
|
+
definitionName: 'orchestrator',
|
|
37
|
+
parentId: null,
|
|
38
|
+
}),
|
|
39
|
+
),
|
|
40
|
+
timestamp: 1001,
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
...withSessionId(
|
|
44
|
+
sourceSessionId,
|
|
45
|
+
toolEvents.create('tool_completed', {
|
|
46
|
+
agentId,
|
|
47
|
+
toolCallId: ToolCallId('tc-1'),
|
|
48
|
+
result: 'done',
|
|
49
|
+
sessionRef: 'session-ref-1',
|
|
50
|
+
workspaceRef: 'workspace-ref-1',
|
|
51
|
+
}),
|
|
52
|
+
),
|
|
53
|
+
timestamp: 1002,
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
...withSessionId(
|
|
57
|
+
sourceSessionId,
|
|
58
|
+
toolEvents.create('tool_completed', {
|
|
59
|
+
agentId,
|
|
60
|
+
toolCallId: ToolCallId('tc-2'),
|
|
61
|
+
result: 'done again',
|
|
62
|
+
sessionRef: 'session-ref-2',
|
|
63
|
+
}),
|
|
64
|
+
),
|
|
65
|
+
timestamp: 1003,
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
...withSessionId(
|
|
69
|
+
sourceSessionId,
|
|
70
|
+
toolEvents.create('tool_failed', {
|
|
71
|
+
agentId,
|
|
72
|
+
toolCallId: ToolCallId('tc-3'),
|
|
73
|
+
error: 'oops',
|
|
74
|
+
workspaceRef: 'workspace-ref-3',
|
|
75
|
+
sessionRef: 'session-ref-3',
|
|
76
|
+
}),
|
|
77
|
+
),
|
|
78
|
+
timestamp: 1004,
|
|
79
|
+
},
|
|
80
|
+
]
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
describe('rewriteEventsForFork', () => {
|
|
84
|
+
it('slices events up to eventIndex inclusive', () => {
|
|
85
|
+
const events = makeEvents()
|
|
86
|
+
const result = rewriteEventsForFork(events, 2, newSessionId, sourceSessionId)
|
|
87
|
+
expect(result).toHaveLength(3)
|
|
88
|
+
})
|
|
89
|
+
|
|
90
|
+
it('rewrites sessionId on all events', () => {
|
|
91
|
+
const events = makeEvents()
|
|
92
|
+
const result = rewriteEventsForFork(events, 2, newSessionId, sourceSessionId)
|
|
93
|
+
for (const event of result) {
|
|
94
|
+
expect(event.sessionId).toBe(newSessionId)
|
|
95
|
+
}
|
|
96
|
+
})
|
|
97
|
+
|
|
98
|
+
it('adds forkedFrom to session_created event', () => {
|
|
99
|
+
const events = makeEvents()
|
|
100
|
+
const result = rewriteEventsForFork(events, 2, newSessionId, sourceSessionId)
|
|
101
|
+
const created = result[0] as SessionCreatedEvent
|
|
102
|
+
expect(created.type).toBe('session_created')
|
|
103
|
+
expect(created.forkedFrom).toEqual({
|
|
104
|
+
sessionId: sourceSessionId,
|
|
105
|
+
eventIndex: 2,
|
|
106
|
+
})
|
|
107
|
+
})
|
|
108
|
+
|
|
109
|
+
it('preserves all other event fields', () => {
|
|
110
|
+
const events = makeEvents()
|
|
111
|
+
const result = rewriteEventsForFork(events, 2, newSessionId, sourceSessionId)
|
|
112
|
+
const toolEvent = result[2] as ToolEvent
|
|
113
|
+
expect(toolEvent.type).toBe('tool_completed')
|
|
114
|
+
if (toolEvent.type === 'tool_completed') {
|
|
115
|
+
expect(toolEvent.sessionRef).toBe('session-ref-1')
|
|
116
|
+
expect(toolEvent.workspaceRef).toBe('workspace-ref-1')
|
|
117
|
+
expect(toolEvent.result).toBe('done')
|
|
118
|
+
}
|
|
119
|
+
})
|
|
120
|
+
|
|
121
|
+
it('handles eventIndex 0 (only session_created)', () => {
|
|
122
|
+
const events = makeEvents()
|
|
123
|
+
const result = rewriteEventsForFork(events, 0, newSessionId, sourceSessionId)
|
|
124
|
+
expect(result).toHaveLength(1)
|
|
125
|
+
expect(result[0].type).toBe('session_created')
|
|
126
|
+
})
|
|
127
|
+
})
|
|
128
|
+
|
|
129
|
+
describe('findSnapshotRefsAtIndex', () => {
|
|
130
|
+
it('finds the most recent refs scanning backwards', () => {
|
|
131
|
+
const events = makeEvents()
|
|
132
|
+
const refs = findSnapshotRefsAtIndex(events, 4)
|
|
133
|
+
expect(refs.sessionRef).toBe('session-ref-3')
|
|
134
|
+
expect(refs.workspaceRef).toBe('workspace-ref-3')
|
|
135
|
+
})
|
|
136
|
+
|
|
137
|
+
it('finds refs at exact index', () => {
|
|
138
|
+
const events = makeEvents()
|
|
139
|
+
const refs = findSnapshotRefsAtIndex(events, 2)
|
|
140
|
+
expect(refs.sessionRef).toBe('session-ref-1')
|
|
141
|
+
expect(refs.workspaceRef).toBe('workspace-ref-1')
|
|
142
|
+
})
|
|
143
|
+
|
|
144
|
+
it('falls back to earlier events for missing refs', () => {
|
|
145
|
+
const events = makeEvents()
|
|
146
|
+
// Event 3 has sessionRef but no workspaceRef, should fall back to event 2 for workspaceRef
|
|
147
|
+
const refs = findSnapshotRefsAtIndex(events, 3)
|
|
148
|
+
expect(refs.sessionRef).toBe('session-ref-2')
|
|
149
|
+
expect(refs.workspaceRef).toBe('workspace-ref-1')
|
|
150
|
+
})
|
|
151
|
+
|
|
152
|
+
it('returns undefined refs when no events have them', () => {
|
|
153
|
+
const events = makeEvents()
|
|
154
|
+
const refs = findSnapshotRefsAtIndex(events, 1)
|
|
155
|
+
expect(refs.sessionRef).toBeUndefined()
|
|
156
|
+
expect(refs.workspaceRef).toBeUndefined()
|
|
157
|
+
})
|
|
158
|
+
})
|