@roj-ai/sdk 0.1.36 → 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 +202 -87
- package/dist/core/agents/agent.js.map +1 -1
- package/dist/core/agents/config.d.ts +8 -1
- package/dist/core/agents/config.d.ts.map +1 -1
- package/dist/core/agents/config.js +5 -1
- package/dist/core/agents/config.js.map +1 -1
- package/dist/core/agents/retry.d.ts +1 -1
- package/dist/core/agents/retry.d.ts.map +1 -1
- package/dist/core/agents/retry.js +14 -16
- package/dist/core/agents/retry.js.map +1 -1
- package/dist/core/agents/state.d.ts +3 -1
- package/dist/core/agents/state.d.ts.map +1 -1
- package/dist/core/agents/state.js +1 -1
- package/dist/core/agents/state.js.map +1 -1
- package/dist/core/context/state.d.ts +3 -3
- package/dist/core/context/state.js +2 -2
- package/dist/core/events/base-event-store.d.ts.map +1 -1
- package/dist/core/events/base-event-store.js +22 -14
- package/dist/core/events/base-event-store.js.map +1 -1
- package/dist/core/events/file.d.ts +39 -1
- package/dist/core/events/file.d.ts.map +1 -1
- package/dist/core/events/file.js +159 -20
- package/dist/core/events/file.js.map +1 -1
- package/dist/core/events/types.d.ts +1 -1
- package/dist/core/file-store/containment.d.ts +19 -0
- package/dist/core/file-store/containment.d.ts.map +1 -0
- package/dist/core/file-store/containment.js +62 -0
- package/dist/core/file-store/containment.js.map +1 -0
- package/dist/core/file-store/file-store.d.ts +22 -2
- package/dist/core/file-store/file-store.d.ts.map +1 -1
- package/dist/core/file-store/file-store.js +88 -20
- package/dist/core/file-store/file-store.js.map +1 -1
- package/dist/core/file-store/types.d.ts +13 -1
- package/dist/core/file-store/types.d.ts.map +1 -1
- package/dist/core/image/image-processor.d.ts.map +1 -1
- package/dist/core/image/image-processor.js +3 -1
- package/dist/core/image/image-processor.js.map +1 -1
- package/dist/core/image/types.d.ts +2 -0
- package/dist/core/image/types.d.ts.map +1 -1
- package/dist/core/image/vips-resizer.d.ts.map +1 -1
- package/dist/core/image/vips-resizer.js +81 -33
- package/dist/core/image/vips-resizer.js.map +1 -1
- package/dist/core/llm/anthropic.d.ts +0 -1
- package/dist/core/llm/anthropic.d.ts.map +1 -1
- package/dist/core/llm/anthropic.js +58 -72
- package/dist/core/llm/anthropic.js.map +1 -1
- package/dist/core/llm/logger.d.ts +14 -2
- package/dist/core/llm/logger.d.ts.map +1 -1
- package/dist/core/llm/logger.js +161 -36
- package/dist/core/llm/logger.js.map +1 -1
- package/dist/core/llm/openrouter.d.ts +0 -1
- package/dist/core/llm/openrouter.d.ts.map +1 -1
- package/dist/core/llm/openrouter.js +53 -66
- package/dist/core/llm/openrouter.js.map +1 -1
- package/dist/core/llm/provider-request.d.ts +10 -0
- package/dist/core/llm/provider-request.d.ts.map +1 -0
- package/dist/core/llm/provider-request.js +41 -0
- package/dist/core/llm/provider-request.js.map +1 -0
- package/dist/core/llm/provider.d.ts +11 -0
- package/dist/core/llm/provider.d.ts.map +1 -1
- package/dist/core/llm/provider.js +26 -0
- package/dist/core/llm/provider.js.map +1 -1
- package/dist/core/llm/state.d.ts +2 -2
- package/dist/core/llm/state.js +4 -4
- package/dist/core/plugins/plugin-builder.d.ts +57 -3
- package/dist/core/plugins/plugin-builder.d.ts.map +1 -1
- package/dist/core/plugins/plugin-builder.js +68 -14
- package/dist/core/plugins/plugin-builder.js.map +1 -1
- package/dist/core/preset/preset-builder.d.ts +3 -2
- package/dist/core/preset/preset-builder.d.ts.map +1 -1
- package/dist/core/preset/preset-builder.js +7 -16
- package/dist/core/preset/preset-builder.js.map +1 -1
- package/dist/core/sessions/context.d.ts +23 -5
- package/dist/core/sessions/context.d.ts.map +1 -1
- package/dist/core/sessions/runtime-activity.d.ts +33 -0
- package/dist/core/sessions/runtime-activity.d.ts.map +1 -0
- package/dist/core/sessions/runtime-activity.js +55 -0
- package/dist/core/sessions/runtime-activity.js.map +1 -0
- package/dist/core/sessions/schema.d.ts +23 -2
- package/dist/core/sessions/schema.d.ts.map +1 -1
- package/dist/core/sessions/schema.js +24 -3
- package/dist/core/sessions/schema.js.map +1 -1
- package/dist/core/sessions/session-manager.d.ts +83 -6
- package/dist/core/sessions/session-manager.d.ts.map +1 -1
- package/dist/core/sessions/session-manager.js +517 -118
- package/dist/core/sessions/session-manager.js.map +1 -1
- package/dist/core/sessions/session-store.d.ts +18 -0
- package/dist/core/sessions/session-store.d.ts.map +1 -1
- package/dist/core/sessions/session-store.js +33 -0
- package/dist/core/sessions/session-store.js.map +1 -1
- package/dist/core/sessions/session.d.ts +42 -6
- package/dist/core/sessions/session.d.ts.map +1 -1
- package/dist/core/sessions/session.js +176 -44
- package/dist/core/sessions/session.js.map +1 -1
- package/dist/core/sessions/state.d.ts +10 -1
- package/dist/core/sessions/state.d.ts.map +1 -1
- package/dist/core/sessions/state.js +11 -1
- package/dist/core/sessions/state.js.map +1 -1
- package/dist/core/system.d.ts +9 -0
- package/dist/core/system.d.ts.map +1 -1
- package/dist/core/system.js +4 -1
- package/dist/core/system.js.map +1 -1
- package/dist/core/tools/executor.d.ts +1 -1
- package/dist/core/wake-key.d.ts +34 -0
- package/dist/core/wake-key.d.ts.map +1 -0
- package/dist/core/wake-key.js +51 -0
- package/dist/core/wake-key.js.map +1 -0
- package/dist/index.d.ts +23 -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 +17 -7
- package/src/bootstrap.ts +119 -35
- package/src/bun-platform/fs.ts +1 -0
- package/src/bun-platform/index.ts +18 -1
- package/src/bun-platform/server-lifecycle.ts +218 -0
- package/src/bun-platform/shell.ts +362 -0
- package/src/config.ts +130 -0
- package/src/core/agents/agent.ts +210 -92
- package/src/core/agents/config.ts +8 -0
- package/src/core/agents/retry.ts +16 -17
- package/src/core/agents/state.ts +2 -0
- package/src/core/events/base-event-store.ts +24 -16
- package/src/core/events/file.ts +198 -22
- package/src/core/file-store/containment.ts +75 -0
- package/src/core/file-store/file-store.ts +106 -25
- package/src/core/file-store/types.ts +14 -1
- package/src/core/image/image-processor.ts +3 -1
- package/src/core/image/types.ts +2 -0
- package/src/core/image/vips-resizer.ts +102 -37
- package/src/core/llm/anthropic.ts +63 -79
- package/src/core/llm/logger.ts +175 -37
- package/src/core/llm/openrouter.ts +57 -72
- package/src/core/llm/provider-request.ts +40 -0
- package/src/core/llm/provider.ts +28 -0
- package/src/core/plugins/plugin-builder.ts +106 -14
- package/src/core/preset/preset-builder.ts +12 -22
- package/src/core/sessions/context.ts +18 -0
- package/src/core/sessions/runtime-activity.ts +78 -0
- package/src/core/sessions/schema.ts +29 -3
- package/src/core/sessions/session-manager.ts +560 -140
- package/src/core/sessions/session-store.ts +38 -0
- package/src/core/sessions/session.ts +187 -47
- package/src/core/sessions/state.ts +11 -0
- package/src/core/system.ts +15 -0
- package/src/core/wake-key.ts +65 -0
- package/src/index.ts +30 -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/model-shortlist-live.test.d.ts +0 -35
- package/dist/core/llm/model-shortlist-live.test.d.ts.map +0 -1
- package/dist/core/llm/model-shortlist-live.test.js +0 -452
- package/dist/core/llm/model-shortlist-live.test.js.map +0 -1
- package/dist/core/llm/openrouter-mapping.test.d.ts +0 -2
- package/dist/core/llm/openrouter-mapping.test.d.ts.map +0 -1
- package/dist/core/llm/openrouter-mapping.test.js +0 -190
- package/dist/core/llm/openrouter-mapping.test.js.map +0 -1
- package/dist/core/llm/openrouter.test.d.ts +0 -2
- package/dist/core/llm/openrouter.test.d.ts.map +0 -1
- package/dist/core/llm/openrouter.test.js +0 -377
- package/dist/core/llm/openrouter.test.js.map +0 -1
- package/dist/core/llm/provider-integration.test.d.ts +0 -12
- package/dist/core/llm/provider-integration.test.d.ts.map +0 -1
- package/dist/core/llm/provider-integration.test.js +0 -350
- package/dist/core/llm/provider-integration.test.js.map +0 -1
- package/dist/core/llm/reasoning-details.test.d.ts +0 -2
- package/dist/core/llm/reasoning-details.test.d.ts.map +0 -1
- package/dist/core/llm/reasoning-details.test.js +0 -144
- package/dist/core/llm/reasoning-details.test.js.map +0 -1
- package/dist/core/llm/routing-provider.test.d.ts +0 -2
- package/dist/core/llm/routing-provider.test.d.ts.map +0 -1
- package/dist/core/llm/routing-provider.test.js +0 -94
- package/dist/core/llm/routing-provider.test.js.map +0 -1
- package/dist/core/llm/snapshot-middleware.test.d.ts +0 -2
- package/dist/core/llm/snapshot-middleware.test.d.ts.map +0 -1
- package/dist/core/llm/snapshot-middleware.test.js +0 -144
- package/dist/core/llm/snapshot-middleware.test.js.map +0 -1
- package/dist/core/llm/thinking-blocks.test.d.ts +0 -2
- package/dist/core/llm/thinking-blocks.test.d.ts.map +0 -1
- package/dist/core/llm/thinking-blocks.test.js +0 -291
- package/dist/core/llm/thinking-blocks.test.js.map +0 -1
- package/dist/core/multi-agent.integration.test.d.ts +0 -2
- package/dist/core/multi-agent.integration.test.d.ts.map +0 -1
- package/dist/core/multi-agent.integration.test.js +0 -298
- package/dist/core/multi-agent.integration.test.js.map +0 -1
- package/dist/core/plugin-hooks.integration.test.d.ts +0 -2
- package/dist/core/plugin-hooks.integration.test.d.ts.map +0 -1
- package/dist/core/plugin-hooks.integration.test.js +0 -458
- package/dist/core/plugin-hooks.integration.test.js.map +0 -1
- package/dist/core/reasoning-round-trip.integration.test.d.ts +0 -2
- package/dist/core/reasoning-round-trip.integration.test.d.ts.map +0 -1
- package/dist/core/reasoning-round-trip.integration.test.js +0 -150
- package/dist/core/reasoning-round-trip.integration.test.js.map +0 -1
- package/dist/core/session-lifecycle.integration.test.d.ts +0 -2
- package/dist/core/session-lifecycle.integration.test.d.ts.map +0 -1
- package/dist/core/session-lifecycle.integration.test.js +0 -159
- package/dist/core/session-lifecycle.integration.test.js.map +0 -1
- package/dist/core/sessions/fork-utils.test.d.ts +0 -2
- package/dist/core/sessions/fork-utils.test.d.ts.map +0 -1
- package/dist/core/sessions/fork-utils.test.js +0 -129
- package/dist/core/sessions/fork-utils.test.js.map +0 -1
- package/dist/core/sessions/session-overrides.integration.test.d.ts +0 -2
- package/dist/core/sessions/session-overrides.integration.test.d.ts.map +0 -1
- package/dist/core/sessions/session-overrides.integration.test.js +0 -154
- package/dist/core/sessions/session-overrides.integration.test.js.map +0 -1
- package/dist/core/sessions/session.test.d.ts +0 -2
- package/dist/core/sessions/session.test.d.ts.map +0 -1
- package/dist/core/sessions/session.test.js +0 -1100
- package/dist/core/sessions/session.test.js.map +0 -1
- package/dist/core/tools/executor.test.d.ts +0 -2
- package/dist/core/tools/executor.test.d.ts.map +0 -1
- package/dist/core/tools/executor.test.js +0 -144
- package/dist/core/tools/executor.test.js.map +0 -1
- package/dist/lib/logger/console.test.d.ts +0 -2
- package/dist/lib/logger/console.test.d.ts.map +0 -1
- package/dist/lib/logger/console.test.js +0 -258
- package/dist/lib/logger/console.test.js.map +0 -1
- package/dist/lib/never.d.ts +0 -2
- package/dist/lib/never.d.ts.map +0 -1
- package/dist/lib/never.js +0 -4
- package/dist/lib/never.js.map +0 -1
- package/dist/lib/utils/concurrency.test.d.ts +0 -2
- package/dist/lib/utils/concurrency.test.d.ts.map +0 -1
- package/dist/lib/utils/concurrency.test.js +0 -135
- package/dist/lib/utils/concurrency.test.js.map +0 -1
- package/dist/plugins/agent-status/agent-status.test.d.ts +0 -2
- package/dist/plugins/agent-status/agent-status.test.d.ts.map +0 -1
- package/dist/plugins/agent-status/agent-status.test.js +0 -136
- package/dist/plugins/agent-status/agent-status.test.js.map +0 -1
- package/dist/plugins/agents/agents.integration.test.d.ts +0 -2
- package/dist/plugins/agents/agents.integration.test.d.ts.map +0 -1
- package/dist/plugins/agents/agents.integration.test.js +0 -830
- package/dist/plugins/agents/agents.integration.test.js.map +0 -1
- package/dist/plugins/agents/supervision.integration.test.d.ts +0 -2
- package/dist/plugins/agents/supervision.integration.test.d.ts.map +0 -1
- package/dist/plugins/agents/supervision.integration.test.js +0 -215
- package/dist/plugins/agents/supervision.integration.test.js.map +0 -1
- package/dist/plugins/context-compact/compaction-live.test.d.ts +0 -17
- package/dist/plugins/context-compact/compaction-live.test.d.ts.map +0 -1
- package/dist/plugins/context-compact/compaction-live.test.js +0 -177
- package/dist/plugins/context-compact/compaction-live.test.js.map +0 -1
- package/dist/plugins/context-compact/context-compact.integration.test.d.ts +0 -2
- package/dist/plugins/context-compact/context-compact.integration.test.d.ts.map +0 -1
- package/dist/plugins/context-compact/context-compact.integration.test.js +0 -364
- package/dist/plugins/context-compact/context-compact.integration.test.js.map +0 -1
- package/dist/plugins/context-compact/context-compactor.test.d.ts +0 -2
- package/dist/plugins/context-compact/context-compactor.test.d.ts.map +0 -1
- package/dist/plugins/context-compact/context-compactor.test.js +0 -858
- package/dist/plugins/context-compact/context-compactor.test.js.map +0 -1
- package/dist/plugins/context-compact/history-offloader.test.d.ts +0 -2
- package/dist/plugins/context-compact/history-offloader.test.d.ts.map +0 -1
- package/dist/plugins/context-compact/history-offloader.test.js +0 -77
- package/dist/plugins/context-compact/history-offloader.test.js.map +0 -1
- package/dist/plugins/filesystem/filesystem.integration.test.d.ts +0 -2
- package/dist/plugins/filesystem/filesystem.integration.test.d.ts.map +0 -1
- package/dist/plugins/filesystem/filesystem.integration.test.js +0 -447
- package/dist/plugins/filesystem/filesystem.integration.test.js.map +0 -1
- package/dist/plugins/filesystem/schema.d.ts +0 -7
- package/dist/plugins/filesystem/schema.d.ts.map +0 -1
- package/dist/plugins/filesystem/schema.js +0 -2
- package/dist/plugins/filesystem/schema.js.map +0 -1
- package/dist/plugins/limits-guard/limit-guard.test.d.ts +0 -2
- package/dist/plugins/limits-guard/limit-guard.test.d.ts.map +0 -1
- package/dist/plugins/limits-guard/limit-guard.test.js +0 -194
- package/dist/plugins/limits-guard/limit-guard.test.js.map +0 -1
- package/dist/plugins/limits-guard/limits-guard.integration.test.d.ts +0 -2
- package/dist/plugins/limits-guard/limits-guard.integration.test.d.ts.map +0 -1
- package/dist/plugins/limits-guard/limits-guard.integration.test.js +0 -887
- package/dist/plugins/limits-guard/limits-guard.integration.test.js.map +0 -1
- package/dist/plugins/llm-debug/llm-debug.integration.test.d.ts +0 -2
- package/dist/plugins/llm-debug/llm-debug.integration.test.d.ts.map +0 -1
- package/dist/plugins/llm-debug/llm-debug.integration.test.js +0 -157
- package/dist/plugins/llm-debug/llm-debug.integration.test.js.map +0 -1
- package/dist/plugins/mailbox/mailbox.integration.test.d.ts +0 -2
- package/dist/plugins/mailbox/mailbox.integration.test.d.ts.map +0 -1
- package/dist/plugins/mailbox/mailbox.integration.test.js +0 -678
- package/dist/plugins/mailbox/mailbox.integration.test.js.map +0 -1
- package/dist/plugins/resources/resources.integration.test.d.ts +0 -2
- package/dist/plugins/resources/resources.integration.test.d.ts.map +0 -1
- package/dist/plugins/resources/resources.integration.test.js +0 -62
- package/dist/plugins/resources/resources.integration.test.js.map +0 -1
- package/dist/plugins/result-eviction/result-eviction.integration.test.d.ts +0 -2
- package/dist/plugins/result-eviction/result-eviction.integration.test.d.ts.map +0 -1
- package/dist/plugins/result-eviction/result-eviction.integration.test.js +0 -294
- package/dist/plugins/result-eviction/result-eviction.integration.test.js.map +0 -1
- package/dist/plugins/services/pid-registry.test.d.ts +0 -2
- package/dist/plugins/services/pid-registry.test.d.ts.map +0 -1
- package/dist/plugins/services/pid-registry.test.js +0 -161
- package/dist/plugins/services/pid-registry.test.js.map +0 -1
- package/dist/plugins/services/services.integration.test.d.ts +0 -2
- package/dist/plugins/services/services.integration.test.d.ts.map +0 -1
- package/dist/plugins/services/services.integration.test.js +0 -1057
- package/dist/plugins/services/services.integration.test.js.map +0 -1
- package/dist/plugins/session-lifecycle/session-lifecycle.integration.test.d.ts +0 -2
- package/dist/plugins/session-lifecycle/session-lifecycle.integration.test.d.ts.map +0 -1
- package/dist/plugins/session-lifecycle/session-lifecycle.integration.test.js +0 -498
- package/dist/plugins/session-lifecycle/session-lifecycle.integration.test.js.map +0 -1
- package/dist/plugins/session-stats/plugin.test.d.ts +0 -2
- package/dist/plugins/session-stats/plugin.test.d.ts.map +0 -1
- package/dist/plugins/session-stats/plugin.test.js +0 -145
- package/dist/plugins/session-stats/plugin.test.js.map +0 -1
- package/dist/plugins/shell/shell.integration.test.d.ts +0 -2
- package/dist/plugins/shell/shell.integration.test.d.ts.map +0 -1
- package/dist/plugins/shell/shell.integration.test.js +0 -234
- package/dist/plugins/shell/shell.integration.test.js.map +0 -1
- package/dist/plugins/shell/shell.test.d.ts +0 -2
- package/dist/plugins/shell/shell.test.d.ts.map +0 -1
- package/dist/plugins/shell/shell.test.js +0 -236
- package/dist/plugins/shell/shell.test.js.map +0 -1
- package/dist/plugins/skills/discovery.test.d.ts +0 -2
- package/dist/plugins/skills/discovery.test.d.ts.map +0 -1
- package/dist/plugins/skills/discovery.test.js +0 -312
- package/dist/plugins/skills/discovery.test.js.map +0 -1
- package/dist/plugins/skills/skills.integration.test.d.ts +0 -2
- package/dist/plugins/skills/skills.integration.test.d.ts.map +0 -1
- package/dist/plugins/skills/skills.integration.test.js +0 -475
- package/dist/plugins/skills/skills.integration.test.js.map +0 -1
- package/dist/plugins/todo/todo.integration.test.d.ts +0 -2
- package/dist/plugins/todo/todo.integration.test.d.ts.map +0 -1
- package/dist/plugins/todo/todo.integration.test.js +0 -605
- package/dist/plugins/todo/todo.integration.test.js.map +0 -1
- package/dist/plugins/uploads/preprocessors/image-classifier.test.d.ts +0 -2
- package/dist/plugins/uploads/preprocessors/image-classifier.test.d.ts.map +0 -1
- package/dist/plugins/uploads/preprocessors/image-classifier.test.js +0 -113
- package/dist/plugins/uploads/preprocessors/image-classifier.test.js.map +0 -1
- package/dist/plugins/uploads/uploads.integration.test.d.ts +0 -2
- package/dist/plugins/uploads/uploads.integration.test.d.ts.map +0 -1
- package/dist/plugins/uploads/uploads.integration.test.js +0 -639
- package/dist/plugins/uploads/uploads.integration.test.js.map +0 -1
- package/dist/plugins/user-chat/user-chat.integration.test.d.ts +0 -2
- package/dist/plugins/user-chat/user-chat.integration.test.d.ts.map +0 -1
- package/dist/plugins/user-chat/user-chat.integration.test.js +0 -754
- package/dist/plugins/user-chat/user-chat.integration.test.js.map +0 -1
- package/dist/plugins/workers/workers.integration.test.d.ts +0 -2
- package/dist/plugins/workers/workers.integration.test.d.ts.map +0 -1
- package/dist/plugins/workers/workers.integration.test.js +0 -629
- package/dist/plugins/workers/workers.integration.test.js.map +0 -1
- package/dist/prompts/macros.test.d.ts +0 -2
- package/dist/prompts/macros.test.d.ts.map +0 -1
- package/dist/prompts/macros.test.js +0 -80
- package/dist/prompts/macros.test.js.map +0 -1
- package/dist/testing/test-harness.test.d.ts +0 -2
- package/dist/testing/test-harness.test.d.ts.map +0 -1
- package/dist/testing/test-harness.test.js +0 -92
- package/dist/testing/test-harness.test.js.map +0 -1
- package/dist/transport/http/routes/rpc.integration.test.d.ts +0 -2
- package/dist/transport/http/routes/rpc.integration.test.d.ts.map +0 -1
- package/dist/transport/http/routes/rpc.integration.test.js +0 -189
- package/dist/transport/http/routes/rpc.integration.test.js.map +0 -1
- package/dist/transport/http/routes/rpc.test.d.ts +0 -2
- package/dist/transport/http/routes/rpc.test.d.ts.map +0 -1
- package/dist/transport/http/routes/rpc.test.js +0 -316
- package/dist/transport/http/routes/rpc.test.js.map +0 -1
- package/src/config.test.ts +0 -174
- package/src/core/agent-loop.integration.test.ts +0 -503
- package/src/core/agents/agent-config.test.ts +0 -240
- package/src/core/agents/agent-shutdown.test.ts +0 -236
- package/src/core/agents/agent.test.ts +0 -387
- package/src/core/agents/communicator.ts +0 -16
- package/src/core/agents/handler-events.test.ts +0 -167
- package/src/core/agents/response-sanitizer.test.ts +0 -137
- package/src/core/error-recovery.integration.test.ts +0 -343
- package/src/core/event-sourcing.integration.test.ts +0 -191
- package/src/core/events/file.test.ts +0 -436
- package/src/core/events/memory.test.ts +0 -741
- package/src/core/image/image-processor.test.ts +0 -218
- package/src/core/image/vips-resizer.test.ts +0 -388
- package/src/core/llm/anthropic.test.ts +0 -546
- package/src/core/llm/cache-breakpoints.test.ts +0 -85
- package/src/core/llm/cache-live.test.ts +0 -155
- package/src/core/llm/logger.test.ts +0 -270
- package/src/core/llm/message-sanitization.test.ts +0 -217
- package/src/core/llm/mock.test.ts +0 -402
- package/src/core/llm/model-shortlist-live.test.ts +0 -577
- package/src/core/llm/openrouter-mapping.test.ts +0 -234
- package/src/core/llm/openrouter.test.ts +0 -499
- package/src/core/llm/provider-integration.test.ts +0 -408
- package/src/core/llm/reasoning-details.test.ts +0 -177
- package/src/core/llm/routing-provider.test.ts +0 -113
- package/src/core/llm/snapshot-middleware.test.ts +0 -168
- package/src/core/llm/thinking-blocks.test.ts +0 -345
- package/src/core/multi-agent.integration.test.ts +0 -340
- package/src/core/plugin-hooks.integration.test.ts +0 -568
- package/src/core/reasoning-round-trip.integration.test.ts +0 -188
- package/src/core/session-lifecycle.integration.test.ts +0 -202
- package/src/core/sessions/fork-utils.test.ts +0 -158
- package/src/core/sessions/session-overrides.integration.test.ts +0 -210
- package/src/core/sessions/session.test.ts +0 -1736
- package/src/core/tools/executor.test.ts +0 -161
- package/src/lib/logger/console.test.ts +0 -348
- package/src/lib/never.ts +0 -3
- package/src/lib/utils/concurrency.test.ts +0 -169
- package/src/plugins/agent-status/agent-status.test.ts +0 -164
- package/src/plugins/agents/agents.integration.test.ts +0 -976
- package/src/plugins/agents/supervision.integration.test.ts +0 -249
- package/src/plugins/context-compact/compaction-live.test.ts +0 -221
- package/src/plugins/context-compact/context-compact.integration.test.ts +0 -418
- package/src/plugins/context-compact/context-compactor.test.ts +0 -1036
- package/src/plugins/context-compact/history-offloader.test.ts +0 -100
- package/src/plugins/filesystem/filesystem.integration.test.ts +0 -529
- package/src/plugins/filesystem/schema.ts +0 -6
- package/src/plugins/limits-guard/limit-guard.test.ts +0 -253
- package/src/plugins/limits-guard/limits-guard.integration.test.ts +0 -1012
- package/src/plugins/llm-debug/llm-debug.integration.test.ts +0 -192
- package/src/plugins/mailbox/mailbox.integration.test.ts +0 -794
- package/src/plugins/resources/resources.integration.test.ts +0 -68
- package/src/plugins/result-eviction/result-eviction.integration.test.ts +0 -332
- package/src/plugins/services/pid-registry.test.ts +0 -180
- package/src/plugins/services/services.integration.test.ts +0 -1223
- package/src/plugins/session-lifecycle/session-lifecycle.integration.test.ts +0 -639
- package/src/plugins/session-stats/plugin.test.ts +0 -160
- package/src/plugins/shell/shell.integration.test.ts +0 -273
- package/src/plugins/shell/shell.test.ts +0 -314
- package/src/plugins/skills/discovery.test.ts +0 -395
- package/src/plugins/skills/skills.integration.test.ts +0 -580
- package/src/plugins/todo/todo.integration.test.ts +0 -687
- package/src/plugins/uploads/preprocessors/image-classifier.test.ts +0 -142
- package/src/plugins/uploads/uploads.integration.test.ts +0 -831
- package/src/plugins/user-chat/user-chat.integration.test.ts +0 -893
- package/src/plugins/workers/workers.integration.test.ts +0 -778
- package/src/prompts/macros.test.ts +0 -107
- package/src/testing/test-harness.test.ts +0 -114
- package/src/transport/http/routes/rpc.integration.test.ts +0 -243
- package/src/transport/http/routes/rpc.test.ts +0 -372
|
@@ -15,11 +15,17 @@ import { AgentId, agentIdSchema, generateAgentId } from '~/core/agents/schema.js
|
|
|
15
15
|
import { type AgentState, agentEvents } from '~/core/agents/state.js'
|
|
16
16
|
import { AgentErrors, ValidationErrors } from '~/core/errors.js'
|
|
17
17
|
import { definePlugin } from '~/core/plugins/index.js'
|
|
18
|
-
import {
|
|
18
|
+
import type { SessionContext } from '~/core/sessions/context.js'
|
|
19
|
+
import { pluginWakeKey } from '~/core/wake-key.js'
|
|
20
|
+
import type { SessionState } from '~/core/sessions/state.js'
|
|
21
|
+
import { agentSequenceKey, getNextAgentSeq } from '~/core/sessions/state.js'
|
|
19
22
|
import { createTool } from '~/core/tools/definition.js'
|
|
20
|
-
import type { Logger } from '~/lib/logger/logger.js'
|
|
21
23
|
import { Err, Ok } from '~/lib/utils/result.js'
|
|
22
24
|
import { mailboxPlugin } from '~/plugins/mailbox/plugin.js'
|
|
25
|
+
import { getAgentUnconsumedMailbox, selectMailboxState } from '~/plugins/mailbox/query.js'
|
|
26
|
+
|
|
27
|
+
const PLUGIN_NAME = 'agents'
|
|
28
|
+
const SUPERVISION_TICK_METHOD = '_supervisionTick'
|
|
23
29
|
|
|
24
30
|
/**
|
|
25
31
|
* Information about a spawnable agent, used to generate typed start_<name> tools.
|
|
@@ -55,16 +61,6 @@ export interface AgentsPluginConfig {
|
|
|
55
61
|
*/
|
|
56
62
|
export const SUPERVISION_INTERVAL_CACHE_FRIENDLY = 240_000
|
|
57
63
|
|
|
58
|
-
/** Per-session runtime state held in plugin context — timers + trigger callback. */
|
|
59
|
-
interface AgentsPluginContext {
|
|
60
|
-
timers: Map<AgentId, ReturnType<typeof setTimeout>>
|
|
61
|
-
/** Set in onSessionReady — calls agents._supervisionTick via callPluginMethod (fresh ctx). */
|
|
62
|
-
triggerTick: ((agentId: AgentId) => Promise<unknown>) | null
|
|
63
|
-
/** null = supervision disabled for this session. */
|
|
64
|
-
intervalMs: number | null
|
|
65
|
-
logger: Logger | null
|
|
66
|
-
}
|
|
67
|
-
|
|
68
64
|
/**
|
|
69
65
|
* Get all direct children of an agent.
|
|
70
66
|
*/
|
|
@@ -76,6 +72,55 @@ function getDirectChildren(sessionAgents: Map<AgentId, AgentState>, parentId: Ag
|
|
|
76
72
|
return out
|
|
77
73
|
}
|
|
78
74
|
|
|
75
|
+
/**
|
|
76
|
+
* Input waiting in the agent's queue that the loop will dequeue on its next turn.
|
|
77
|
+
*
|
|
78
|
+
* Incomplete on purpose, for want of a seam: `Agent.decide()` asks every plugin with
|
|
79
|
+
* a `dequeue` hook (mailbox, user-chat, uploads) and nothing exposes that predicate
|
|
80
|
+
* at session level, so a child fed only through user-chat or uploads reads as idle
|
|
81
|
+
* here. See PR #18.
|
|
82
|
+
*/
|
|
83
|
+
function hasQueuedInput(sessionState: SessionState, agentId: AgentId): boolean {
|
|
84
|
+
return getAgentUnconsumedMailbox(selectMailboxState(sessionState), agentId).length > 0
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Is this agent running, or holding input it will run?
|
|
89
|
+
*
|
|
90
|
+
* `paused` is the only status that never resumes on its own — everything else is
|
|
91
|
+
* decided by the queue, exactly as `Agent.decide()` decides it. In particular an
|
|
92
|
+
* `errored` agent is NOT idle: with its input still queued (a retryable failure
|
|
93
|
+
* preserves the dequeue token) `decide()` returns `resume_from_error` and the
|
|
94
|
+
* agent retries itself at the capped backoff.
|
|
95
|
+
*/
|
|
96
|
+
function isAgentWorking(sessionState: SessionState, agent: AgentState): boolean {
|
|
97
|
+
if (agent.status === 'paused') return false
|
|
98
|
+
if (agent.status === 'inferring' || agent.status === 'tool_exec') return true
|
|
99
|
+
// decide() resumes an errored agent only for queued input — stale
|
|
100
|
+
// pendingToolResults were already there when the inference failed.
|
|
101
|
+
if (agent.status === 'errored') return hasQueuedInput(sessionState, agent.id)
|
|
102
|
+
if (agent.pendingToolCalls.length > 0 || agent.pendingToolResults.length > 0) return true
|
|
103
|
+
return hasQueuedInput(sessionState, agent.id)
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Is anything below this agent still working? Agents are never removed from
|
|
108
|
+
* session state, so "has children" stays true forever and cannot gate the tick.
|
|
109
|
+
* Walks the whole subtree — a child idling on its own children is still work.
|
|
110
|
+
*/
|
|
111
|
+
function hasWorkingDescendant(sessionState: SessionState, parentId: AgentId): boolean {
|
|
112
|
+
const queue = getDirectChildren(sessionState.agents, parentId)
|
|
113
|
+
const seen = new Set<AgentId>()
|
|
114
|
+
for (let i = 0; i < queue.length; i++) {
|
|
115
|
+
const agent = queue[i]
|
|
116
|
+
if (seen.has(agent.id)) continue
|
|
117
|
+
seen.add(agent.id)
|
|
118
|
+
if (isAgentWorking(sessionState, agent)) return true
|
|
119
|
+
queue.push(...getDirectChildren(sessionState.agents, agent.id))
|
|
120
|
+
}
|
|
121
|
+
return false
|
|
122
|
+
}
|
|
123
|
+
|
|
79
124
|
/**
|
|
80
125
|
* Count assistant tool calls across conversation history + currently pending.
|
|
81
126
|
*/
|
|
@@ -143,31 +188,34 @@ function buildChildrenStatus(sessionAgents: Map<AgentId, AgentState>, parentId:
|
|
|
143
188
|
return `<children-status>\n${lines.join('\n')}\n</children-status>`
|
|
144
189
|
}
|
|
145
190
|
|
|
191
|
+
/** What arming a supervision wake needs, in every context that arms one. */
|
|
192
|
+
type SupervisionScheduling = Pick<SessionContext, 'platform' | 'sessionId' | 'logger'>
|
|
193
|
+
|
|
194
|
+
function supervisionWakeKey(ctx: SupervisionScheduling, agentId: AgentId): string {
|
|
195
|
+
return pluginWakeKey(ctx.sessionId, PLUGIN_NAME, SUPERVISION_TICK_METHOD, agentId)
|
|
196
|
+
}
|
|
197
|
+
|
|
146
198
|
/**
|
|
147
|
-
* (Re)
|
|
199
|
+
* (Re)arm the supervision tick for an agent.
|
|
200
|
+
*
|
|
201
|
+
* The wake carries no closure — it comes back as `agents._supervisionTick` on a
|
|
202
|
+
* session loaded by id. `wake()` replaces any pending wake for the same key,
|
|
203
|
+
* which is also how a natural inference pushes the next tick out.
|
|
148
204
|
*/
|
|
149
|
-
function scheduleSupervisionTick(
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
const timer = setTimeout(() => {
|
|
158
|
-
pluginContext.timers.delete(agentId)
|
|
159
|
-
const trigger = pluginContext.triggerTick
|
|
160
|
-
if (!trigger) return
|
|
161
|
-
trigger(agentId).catch((err) => {
|
|
162
|
-
pluginContext.logger?.error(
|
|
163
|
-
'Supervision tick failed',
|
|
164
|
-
err instanceof Error ? err : undefined,
|
|
165
|
-
{ agentId },
|
|
166
|
-
)
|
|
167
|
-
})
|
|
168
|
-
}, delayMs)
|
|
205
|
+
async function scheduleSupervisionTick(ctx: SupervisionScheduling, agentId: AgentId, delayMs: number): Promise<void> {
|
|
206
|
+
try {
|
|
207
|
+
await ctx.platform.scheduler.wake(supervisionWakeKey(ctx, agentId), delayMs)
|
|
208
|
+
} catch (err) {
|
|
209
|
+
ctx.logger.error('Failed to arm supervision wake', err instanceof Error ? err : undefined, { agentId })
|
|
210
|
+
}
|
|
211
|
+
}
|
|
169
212
|
|
|
170
|
-
|
|
213
|
+
async function cancelSupervisionTick(ctx: SupervisionScheduling, agentId: AgentId): Promise<void> {
|
|
214
|
+
try {
|
|
215
|
+
await ctx.platform.scheduler.cancel(supervisionWakeKey(ctx, agentId))
|
|
216
|
+
} catch (err) {
|
|
217
|
+
ctx.logger.error('Failed to cancel supervision wake', err instanceof Error ? err : undefined, { agentId })
|
|
218
|
+
}
|
|
171
219
|
}
|
|
172
220
|
|
|
173
221
|
/**
|
|
@@ -186,15 +234,10 @@ function createStartAgentSchema(agent: SpawnableAgentInfo) {
|
|
|
186
234
|
})
|
|
187
235
|
}
|
|
188
236
|
|
|
189
|
-
export const agentsPlugin = definePlugin(
|
|
237
|
+
export const agentsPlugin = definePlugin(PLUGIN_NAME)
|
|
238
|
+
.order(40)
|
|
190
239
|
.pluginConfig<AgentsPluginConfig>()
|
|
191
240
|
.dependencies([mailboxPlugin])
|
|
192
|
-
.context(async (): Promise<AgentsPluginContext> => ({
|
|
193
|
-
timers: new Map(),
|
|
194
|
-
triggerTick: null,
|
|
195
|
-
intervalMs: null,
|
|
196
|
-
logger: null,
|
|
197
|
-
}))
|
|
198
241
|
.isEnabled((ctx) => {
|
|
199
242
|
return ctx.agentConfig.spawnableAgents.length > 0
|
|
200
243
|
})
|
|
@@ -222,7 +265,11 @@ export const agentsPlugin = definePlugin('agents')
|
|
|
222
265
|
}
|
|
223
266
|
|
|
224
267
|
// Generate agent ID and emit spawn event
|
|
225
|
-
const
|
|
268
|
+
const seq = ctx.reserveSequence(
|
|
269
|
+
agentSequenceKey(input.definitionName),
|
|
270
|
+
() => getNextAgentSeq(ctx.getSessionState(), input.definitionName),
|
|
271
|
+
)
|
|
272
|
+
const agentId = generateAgentId(input.definitionName, seq)
|
|
226
273
|
await ctx.emitEvent(agentEvents.create('agent_spawned', {
|
|
227
274
|
agentId,
|
|
228
275
|
definitionName: input.definitionName,
|
|
@@ -247,8 +294,9 @@ export const agentsPlugin = definePlugin('agents')
|
|
|
247
294
|
})
|
|
248
295
|
|
|
249
296
|
// Ensure parent has a supervision tick running now that it has a child.
|
|
250
|
-
|
|
251
|
-
|
|
297
|
+
const intervalMs = ctx.pluginConfig.superviseChildrenIntervalMs
|
|
298
|
+
if (intervalMs !== undefined) {
|
|
299
|
+
await scheduleSupervisionTick(ctx, parentId, intervalMs)
|
|
252
300
|
}
|
|
253
301
|
|
|
254
302
|
return Ok({ agentId })
|
|
@@ -339,14 +387,15 @@ export const agentsPlugin = definePlugin('agents')
|
|
|
339
387
|
return Ok({})
|
|
340
388
|
},
|
|
341
389
|
})
|
|
342
|
-
.method(
|
|
390
|
+
.method(SUPERVISION_TICK_METHOD, {
|
|
343
391
|
input: z.object({ agentId: agentIdSchema }),
|
|
344
392
|
output: z.object({}),
|
|
345
393
|
handler: async (ctx, input) => {
|
|
346
394
|
const agentId = AgentId(input.agentId)
|
|
347
395
|
|
|
348
396
|
// Self may already be gone (terminated mid-tick); just stop.
|
|
349
|
-
|
|
397
|
+
const agent = ctx.sessionState.agents.get(agentId)
|
|
398
|
+
if (!agent) return Ok({})
|
|
350
399
|
|
|
351
400
|
const children = getDirectChildren(ctx.sessionState.agents, agentId)
|
|
352
401
|
if (children.length === 0) {
|
|
@@ -354,63 +403,67 @@ export const agentsPlugin = definePlugin('agents')
|
|
|
354
403
|
return Ok({})
|
|
355
404
|
}
|
|
356
405
|
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
agentId,
|
|
366
|
-
error: sendResult.error.message,
|
|
406
|
+
// A paused parent cannot consume a snapshot — sending anyway piles one
|
|
407
|
+
// un-consumable message per interval into its mailbox until it resumes.
|
|
408
|
+
if (agent.status !== 'paused') {
|
|
409
|
+
const snapshot = buildChildrenStatus(ctx.sessionState.agents, agentId)
|
|
410
|
+
const sendResult = await ctx.deps.mailbox.send({
|
|
411
|
+
toAgentId: agentId,
|
|
412
|
+
content: snapshot,
|
|
413
|
+
fromSupervisor: true,
|
|
367
414
|
})
|
|
415
|
+
if (!sendResult.ok) {
|
|
416
|
+
ctx.logger.warn('Supervision snapshot send failed', {
|
|
417
|
+
agentId,
|
|
418
|
+
error: sendResult.error.message,
|
|
419
|
+
})
|
|
420
|
+
}
|
|
368
421
|
}
|
|
369
422
|
|
|
370
|
-
// Reschedule the next tick from now (rolling)
|
|
371
|
-
|
|
372
|
-
|
|
423
|
+
// Reschedule the next tick from now (rolling), but only while something
|
|
424
|
+
// below is still working — otherwise the tick would re-arm forever.
|
|
425
|
+
// Read live state: the send above appended an event and dispatched
|
|
426
|
+
// listeners, so ctx.sessionState is already behind by the time we decide.
|
|
427
|
+
const intervalMs = ctx.pluginConfig.superviseChildrenIntervalMs
|
|
428
|
+
if (intervalMs !== undefined && hasWorkingDescendant(ctx.getSessionState(), agentId)) {
|
|
429
|
+
await scheduleSupervisionTick(ctx, agentId, intervalMs)
|
|
373
430
|
}
|
|
374
431
|
|
|
375
432
|
return Ok({})
|
|
376
433
|
},
|
|
377
434
|
})
|
|
378
435
|
.sessionHook('onSessionReady', async (ctx) => {
|
|
436
|
+
// Supervision is disabled by default; spawn() and afterInference() read the
|
|
437
|
+
// same config and skip too.
|
|
379
438
|
const intervalMs = ctx.pluginConfig.superviseChildrenIntervalMs
|
|
380
|
-
if (intervalMs === undefined)
|
|
381
|
-
// Supervision disabled (default). No timer wiring; spawn() and
|
|
382
|
-
// afterInference() check intervalMs === null and skip too.
|
|
383
|
-
ctx.pluginContext.intervalMs = null
|
|
384
|
-
return
|
|
385
|
-
}
|
|
386
|
-
ctx.pluginContext.intervalMs = intervalMs
|
|
387
|
-
ctx.pluginContext.logger = ctx.logger
|
|
388
|
-
|
|
389
|
-
// Wire the trigger callback — calls back via self.* so each tick gets a
|
|
390
|
-
// fresh ctx (live sessionState/pluginState/deps).
|
|
391
|
-
ctx.pluginContext.triggerTick = (agentId) => ctx.self._supervisionTick({ agentId })
|
|
439
|
+
if (intervalMs === undefined) return
|
|
392
440
|
|
|
393
|
-
// (Re-)
|
|
441
|
+
// (Re-)arm a wake for every agent that currently has direct children.
|
|
394
442
|
// Covers initial session creation AND server-restart reload (onSessionReady
|
|
395
443
|
// fires in both paths). Worst-case drift after restart = intervalMs.
|
|
444
|
+
// Not gated on live status: a reload resets 'inferring' back to 'pending',
|
|
445
|
+
// so the first tick — not this hook — decides whether to keep going.
|
|
396
446
|
for (const agent of ctx.sessionState.agents.values()) {
|
|
397
447
|
if (getDirectChildren(ctx.sessionState.agents, agent.id).length > 0) {
|
|
398
|
-
scheduleSupervisionTick(ctx
|
|
448
|
+
await scheduleSupervisionTick(ctx, agent.id, intervalMs)
|
|
399
449
|
}
|
|
400
450
|
}
|
|
401
451
|
})
|
|
402
452
|
.sessionHook('onSessionClose', async (ctx) => {
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
453
|
+
if (ctx.pluginConfig.superviseChildrenIntervalMs === undefined) return
|
|
454
|
+
|
|
455
|
+
// Eviction runs this too, and onSessionReady re-arms on the next load —
|
|
456
|
+
// so a parked session ticks no more often than a resident one.
|
|
457
|
+
for (const agent of ctx.sessionState.agents.values()) {
|
|
458
|
+
await cancelSupervisionTick(ctx, agent.id)
|
|
459
|
+
}
|
|
406
460
|
})
|
|
407
461
|
.hook('afterInference', async (ctx) => {
|
|
408
462
|
// Natural inference warmed the cache — push the next tick out by intervalMs
|
|
409
463
|
// so we don't double-charge for parents who are already actively interacting.
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
}
|
|
464
|
+
const intervalMs = ctx.pluginConfig.superviseChildrenIntervalMs
|
|
465
|
+
if (intervalMs !== undefined && hasWorkingDescendant(ctx.sessionState, ctx.agentId)) {
|
|
466
|
+
await scheduleSupervisionTick(ctx, ctx.agentId, intervalMs)
|
|
414
467
|
}
|
|
415
468
|
return null
|
|
416
469
|
})
|
|
@@ -424,7 +477,7 @@ export const agentsPlugin = definePlugin('agents')
|
|
|
424
477
|
|
|
425
478
|
// Only include supervision instructions if supervision is actually enabled
|
|
426
479
|
// for this session — otherwise the section is misleading bloat.
|
|
427
|
-
if (ctx.
|
|
480
|
+
if (ctx.pluginConfig.superviseChildrenIntervalMs === undefined) return base
|
|
428
481
|
|
|
429
482
|
return `${base}
|
|
430
483
|
|
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
7
|
import { extname, join, resolve } from 'node:path'
|
|
8
|
-
import
|
|
8
|
+
import { containmentOf } from '~/core/file-store/containment.js'
|
|
9
|
+
import type { FileSystem, WalkEntry } from '~/platform/fs.js'
|
|
9
10
|
|
|
10
11
|
// ============================================================================
|
|
11
12
|
// Constants
|
|
@@ -145,6 +146,9 @@ export function getMimeType(filePath: string): string {
|
|
|
145
146
|
|
|
146
147
|
/**
|
|
147
148
|
* Prevent path traversal — returns resolved path if safe, null otherwise.
|
|
149
|
+
*
|
|
150
|
+
* Lexical only. Callers that then touch the filesystem must also check the real
|
|
151
|
+
* target with `containmentOf`.
|
|
148
152
|
*/
|
|
149
153
|
export function preventTraversal(baseDir: string, requestedPath: string): string | null {
|
|
150
154
|
const resolved = resolve(baseDir, requestedPath)
|
|
@@ -154,16 +158,61 @@ export function preventTraversal(baseDir: string, requestedPath: string): string
|
|
|
154
158
|
return resolved
|
|
155
159
|
}
|
|
156
160
|
|
|
161
|
+
/** Path under `baseDir`, with the separator dropped. */
|
|
162
|
+
function relativeUnder(path: string, baseDir: string): string {
|
|
163
|
+
return path.slice(baseDir.endsWith('/') ? baseDir.length : baseDir.length + 1)
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
/** A walked entry as this plugin reports it; `relativeTo` adds the `path` the recursive listing carries. */
|
|
167
|
+
function toDirectoryEntry(entry: WalkEntry, relativeTo?: string): DirectoryEntry {
|
|
168
|
+
const name = entry.path.slice(entry.path.lastIndexOf('/') + 1)
|
|
169
|
+
const isDir = entry.type === 'directory'
|
|
170
|
+
const out: DirectoryEntry = {
|
|
171
|
+
name,
|
|
172
|
+
...(relativeTo === undefined ? {} : { path: relativeUnder(entry.path, relativeTo) }),
|
|
173
|
+
type: isDir ? 'directory' : 'file',
|
|
174
|
+
size: isDir ? 0 : entry.size,
|
|
175
|
+
}
|
|
176
|
+
if (!isDir) out.mimeType = getMimeType(name)
|
|
177
|
+
return out
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/** Directories first, then alphabetical — applied to whichever path produced the entries. */
|
|
181
|
+
function sortEntries(entries: DirectoryEntry[]): DirectoryEntry[] {
|
|
182
|
+
entries.sort((a, b) => {
|
|
183
|
+
if (a.type !== b.type) return a.type === 'directory' ? -1 : 1
|
|
184
|
+
return a.name.localeCompare(b.name)
|
|
185
|
+
})
|
|
186
|
+
return entries
|
|
187
|
+
}
|
|
188
|
+
|
|
157
189
|
/**
|
|
158
190
|
* List a single directory level, returning sorted DirectoryEntry[].
|
|
159
191
|
* Directories first, then alphabetical within each group.
|
|
160
192
|
*/
|
|
161
193
|
export async function listDirectory(fs: FileSystem, baseDir: string, subPath: string): Promise<DirectoryEntry[]> {
|
|
162
194
|
const targetDir = subPath ? preventTraversal(baseDir, subPath) : baseDir
|
|
163
|
-
if (!targetDir) {
|
|
195
|
+
if (!targetDir || (await containmentOf(fs, [baseDir], targetDir)) !== 'inside') {
|
|
164
196
|
throw new ListingError('forbidden', 'Path traversal not allowed')
|
|
165
197
|
}
|
|
166
198
|
|
|
199
|
+
if (fs.walk) {
|
|
200
|
+
let found: WalkEntry[]
|
|
201
|
+
try {
|
|
202
|
+
found = await fs.walk(targetDir, { depth: 1, excludeHidden: true })
|
|
203
|
+
} catch {
|
|
204
|
+
throw new ListingError('not_found', 'Directory not found')
|
|
205
|
+
}
|
|
206
|
+
return sortEntries(found.map((entry) => toDirectoryEntry(entry)))
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// The readdir and a stat per entry are one question asked in pieces, so let a
|
|
210
|
+
// platform that can share those reads see them as one.
|
|
211
|
+
const read = (): Promise<DirectoryEntry[]> => readLevel(fs, targetDir)
|
|
212
|
+
return fs.scopeReads ? fs.scopeReads(read) : read()
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
async function readLevel(fs: FileSystem, targetDir: string): Promise<DirectoryEntry[]> {
|
|
167
216
|
let dirents: import('node:fs').Dirent[]
|
|
168
217
|
try {
|
|
169
218
|
dirents = await fs.readdir(targetDir, { withFileTypes: true })
|
|
@@ -199,13 +248,7 @@ export async function listDirectory(fs: FileSystem, baseDir: string, subPath: st
|
|
|
199
248
|
entries.push(entry)
|
|
200
249
|
}
|
|
201
250
|
|
|
202
|
-
|
|
203
|
-
entries.sort((a, b) => {
|
|
204
|
-
if (a.type !== b.type) return a.type === 'directory' ? -1 : 1
|
|
205
|
-
return a.name.localeCompare(b.name)
|
|
206
|
-
})
|
|
207
|
-
|
|
208
|
-
return entries
|
|
251
|
+
return sortEntries(entries)
|
|
209
252
|
}
|
|
210
253
|
|
|
211
254
|
/**
|
|
@@ -213,9 +256,19 @@ export async function listDirectory(fs: FileSystem, baseDir: string, subPath: st
|
|
|
213
256
|
* Skips hidden files and IGNORED_DIRS.
|
|
214
257
|
*/
|
|
215
258
|
export async function listDirectoryRecursive(fs: FileSystem, baseDir: string): Promise<DirectoryEntry[]> {
|
|
259
|
+
if (fs.walk) {
|
|
260
|
+
try {
|
|
261
|
+
const found = await fs.walk(baseDir, { exclude: [...IGNORED_DIRS], excludeHidden: true })
|
|
262
|
+
return found.map((entry) => toDirectoryEntry(entry, baseDir))
|
|
263
|
+
} catch {
|
|
264
|
+
// The loop below answers an unreadable directory with an empty listing, not a throw.
|
|
265
|
+
return []
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
|
|
216
269
|
const entries: DirectoryEntry[] = []
|
|
217
270
|
|
|
218
|
-
async function walk(dir: string, prefix: string) {
|
|
271
|
+
async function walk(dir: string, prefix: string): Promise<void> {
|
|
219
272
|
let dirents: import('node:fs').Dirent[]
|
|
220
273
|
try {
|
|
221
274
|
dirents = await fs.readdir(dir, { withFileTypes: true })
|
|
@@ -258,8 +311,13 @@ export async function listDirectoryRecursive(fs: FileSystem, baseDir: string): P
|
|
|
258
311
|
}
|
|
259
312
|
}
|
|
260
313
|
|
|
261
|
-
|
|
262
|
-
|
|
314
|
+
// Every stat here follows a readdir the level above already read past, so a
|
|
315
|
+
// platform that can share those reads should be given the chance to.
|
|
316
|
+
const run = async (): Promise<DirectoryEntry[]> => {
|
|
317
|
+
await walk(baseDir, '')
|
|
318
|
+
return entries
|
|
319
|
+
}
|
|
320
|
+
return fs.scopeReads ? fs.scopeReads(run) : run()
|
|
263
321
|
}
|
|
264
322
|
|
|
265
323
|
// ============================================================================
|
|
@@ -2,6 +2,7 @@ import { join, relative, resolve } from 'node:path'
|
|
|
2
2
|
import z from 'zod/v4'
|
|
3
3
|
import { agentEvents } from '~/core/agents/state.js'
|
|
4
4
|
import { ValidationErrors } from '~/core/errors.js'
|
|
5
|
+
import { containmentOf } from '~/core/file-store/containment.js'
|
|
5
6
|
import type { FileEntry } from '~/core/file-store/types.js'
|
|
6
7
|
import type { ToolResultContent } from '~/core/llm/llm-log-types.js'
|
|
7
8
|
import { truncateByTokens } from '~/core/llm/tokens.js'
|
|
@@ -110,6 +111,7 @@ const replaceInFileInputSchema = z.object({
|
|
|
110
111
|
// ============================================================================
|
|
111
112
|
|
|
112
113
|
export const filesystemPlugin = definePlugin('filesystem')
|
|
114
|
+
.order(110)
|
|
113
115
|
.pluginConfig<FilesystemPresetConfig>()
|
|
114
116
|
.context(async () => {
|
|
115
117
|
return {} // No plugin-specific context needed
|
|
@@ -160,11 +162,11 @@ export const filesystemPlugin = definePlugin('filesystem')
|
|
|
160
162
|
|
|
161
163
|
// Image files → return as multimodal image content.
|
|
162
164
|
// Store the agent-visible input.path (not the resolved real path):
|
|
163
|
-
// the URL survives into conversationHistory and
|
|
164
|
-
//
|
|
165
|
-
//
|
|
166
|
-
//
|
|
167
|
-
//
|
|
165
|
+
// the URL survives into conversationHistory and is re-resolved via
|
|
166
|
+
// fileStore.containedPath() on every later inference — which checks
|
|
167
|
+
// containment again, because what the path names can change in
|
|
168
|
+
// between. A resolved disk path would be rejected there when
|
|
169
|
+
// sandboxed, surfacing as "[Image unavailable: …]" on every turn.
|
|
168
170
|
const mimeType = getImageMimeType(input.path)
|
|
169
171
|
if (mimeType) {
|
|
170
172
|
return Ok([
|
|
@@ -439,7 +441,7 @@ export const filesystemPlugin = definePlugin('filesystem')
|
|
|
439
441
|
try {
|
|
440
442
|
if (input.recursive) {
|
|
441
443
|
const targetDir = subPath ? preventTraversal(resolvedWorkspace, subPath) : resolvedWorkspace
|
|
442
|
-
if (!targetDir) {
|
|
444
|
+
if (!targetDir || (await containmentOf(ctx.platform.fs, [resolvedWorkspace], targetDir)) !== 'inside') {
|
|
443
445
|
return Err(ValidationErrors.invalid('Path traversal not allowed'))
|
|
444
446
|
}
|
|
445
447
|
const entries = await listDirectoryRecursive(ctx.platform.fs, targetDir)
|