@roj-ai/sdk 0.1.35 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bootstrap.d.ts +420 -26
- package/dist/bootstrap.d.ts.map +1 -1
- package/dist/bootstrap.js +55 -24
- package/dist/bootstrap.js.map +1 -1
- package/dist/bun-platform/fs.d.ts.map +1 -1
- package/dist/bun-platform/fs.js +1 -0
- package/dist/bun-platform/fs.js.map +1 -1
- package/dist/bun-platform/index.d.ts +4 -1
- package/dist/bun-platform/index.d.ts.map +1 -1
- package/dist/bun-platform/index.js +7 -1
- package/dist/bun-platform/index.js.map +1 -1
- package/dist/bun-platform/server-lifecycle.d.ts +30 -0
- package/dist/bun-platform/server-lifecycle.d.ts.map +1 -0
- package/dist/bun-platform/server-lifecycle.js +182 -0
- package/dist/bun-platform/server-lifecycle.js.map +1 -0
- package/dist/bun-platform/shell.d.ts +33 -0
- package/dist/bun-platform/shell.d.ts.map +1 -0
- package/dist/bun-platform/shell.js +322 -0
- package/dist/bun-platform/shell.js.map +1 -0
- package/dist/config.d.ts +34 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +97 -0
- package/dist/config.js.map +1 -1
- package/dist/core/agents/agent.d.ts +42 -7
- package/dist/core/agents/agent.d.ts.map +1 -1
- package/dist/core/agents/agent.js +209 -90
- package/dist/core/agents/agent.js.map +1 -1
- package/dist/core/agents/config.d.ts +8 -1
- package/dist/core/agents/config.d.ts.map +1 -1
- package/dist/core/agents/config.js +5 -1
- package/dist/core/agents/config.js.map +1 -1
- package/dist/core/agents/retry.d.ts +1 -1
- package/dist/core/agents/retry.d.ts.map +1 -1
- package/dist/core/agents/retry.js +14 -16
- package/dist/core/agents/retry.js.map +1 -1
- package/dist/core/agents/state.d.ts +27 -1
- package/dist/core/agents/state.d.ts.map +1 -1
- package/dist/core/agents/state.js +1 -1
- package/dist/core/agents/state.js.map +1 -1
- package/dist/core/context/state.d.ts +3 -3
- package/dist/core/context/state.d.ts.map +1 -1
- package/dist/core/context/state.js +6 -2
- package/dist/core/context/state.js.map +1 -1
- package/dist/core/events/base-event-store.d.ts.map +1 -1
- package/dist/core/events/base-event-store.js +22 -14
- package/dist/core/events/base-event-store.js.map +1 -1
- package/dist/core/events/file.d.ts +39 -1
- package/dist/core/events/file.d.ts.map +1 -1
- package/dist/core/events/file.js +159 -20
- package/dist/core/events/file.js.map +1 -1
- package/dist/core/events/types.d.ts +1 -1
- package/dist/core/file-store/containment.d.ts +19 -0
- package/dist/core/file-store/containment.d.ts.map +1 -0
- package/dist/core/file-store/containment.js +62 -0
- package/dist/core/file-store/containment.js.map +1 -0
- package/dist/core/file-store/file-store.d.ts +22 -2
- package/dist/core/file-store/file-store.d.ts.map +1 -1
- package/dist/core/file-store/file-store.js +88 -20
- package/dist/core/file-store/file-store.js.map +1 -1
- package/dist/core/file-store/types.d.ts +13 -1
- package/dist/core/file-store/types.d.ts.map +1 -1
- package/dist/core/image/image-processor.d.ts.map +1 -1
- package/dist/core/image/image-processor.js +3 -1
- package/dist/core/image/image-processor.js.map +1 -1
- package/dist/core/image/types.d.ts +2 -0
- package/dist/core/image/types.d.ts.map +1 -1
- package/dist/core/image/vips-resizer.d.ts.map +1 -1
- package/dist/core/image/vips-resizer.js +81 -33
- package/dist/core/image/vips-resizer.js.map +1 -1
- package/dist/core/llm/anthropic.d.ts +0 -1
- package/dist/core/llm/anthropic.d.ts.map +1 -1
- package/dist/core/llm/anthropic.js +101 -74
- package/dist/core/llm/anthropic.js.map +1 -1
- package/dist/core/llm/logger.d.ts +14 -2
- package/dist/core/llm/logger.d.ts.map +1 -1
- package/dist/core/llm/logger.js +161 -36
- package/dist/core/llm/logger.js.map +1 -1
- package/dist/core/llm/openrouter.d.ts +0 -1
- package/dist/core/llm/openrouter.d.ts.map +1 -1
- package/dist/core/llm/openrouter.js +70 -74
- package/dist/core/llm/openrouter.js.map +1 -1
- package/dist/core/llm/provider-request.d.ts +10 -0
- package/dist/core/llm/provider-request.d.ts.map +1 -0
- package/dist/core/llm/provider-request.js +41 -0
- package/dist/core/llm/provider-request.js.map +1 -0
- package/dist/core/llm/provider.d.ts +45 -3
- package/dist/core/llm/provider.d.ts.map +1 -1
- package/dist/core/llm/provider.js +26 -0
- package/dist/core/llm/provider.js.map +1 -1
- package/dist/core/llm/state.d.ts +4 -2
- package/dist/core/llm/state.d.ts.map +1 -1
- package/dist/core/llm/state.js +15 -4
- package/dist/core/llm/state.js.map +1 -1
- package/dist/core/plugins/plugin-builder.d.ts +57 -3
- package/dist/core/plugins/plugin-builder.d.ts.map +1 -1
- package/dist/core/plugins/plugin-builder.js +68 -14
- package/dist/core/plugins/plugin-builder.js.map +1 -1
- package/dist/core/preset/preset-builder.d.ts +3 -2
- package/dist/core/preset/preset-builder.d.ts.map +1 -1
- package/dist/core/preset/preset-builder.js +7 -16
- package/dist/core/preset/preset-builder.js.map +1 -1
- package/dist/core/sessions/context.d.ts +23 -5
- package/dist/core/sessions/context.d.ts.map +1 -1
- package/dist/core/sessions/runtime-activity.d.ts +33 -0
- package/dist/core/sessions/runtime-activity.d.ts.map +1 -0
- package/dist/core/sessions/runtime-activity.js +55 -0
- package/dist/core/sessions/runtime-activity.js.map +1 -0
- package/dist/core/sessions/schema.d.ts +23 -2
- package/dist/core/sessions/schema.d.ts.map +1 -1
- package/dist/core/sessions/schema.js +24 -3
- package/dist/core/sessions/schema.js.map +1 -1
- package/dist/core/sessions/session-manager.d.ts +83 -6
- package/dist/core/sessions/session-manager.d.ts.map +1 -1
- package/dist/core/sessions/session-manager.js +517 -118
- package/dist/core/sessions/session-manager.js.map +1 -1
- package/dist/core/sessions/session-store.d.ts +18 -0
- package/dist/core/sessions/session-store.d.ts.map +1 -1
- package/dist/core/sessions/session-store.js +33 -0
- package/dist/core/sessions/session-store.js.map +1 -1
- package/dist/core/sessions/session.d.ts +42 -6
- package/dist/core/sessions/session.d.ts.map +1 -1
- package/dist/core/sessions/session.js +176 -44
- package/dist/core/sessions/session.js.map +1 -1
- package/dist/core/sessions/state.d.ts +10 -1
- package/dist/core/sessions/state.d.ts.map +1 -1
- package/dist/core/sessions/state.js +16 -1
- package/dist/core/sessions/state.js.map +1 -1
- package/dist/core/system.d.ts +9 -0
- package/dist/core/system.d.ts.map +1 -1
- package/dist/core/system.js +4 -1
- package/dist/core/system.js.map +1 -1
- package/dist/core/tools/executor.d.ts +1 -1
- package/dist/core/wake-key.d.ts +34 -0
- package/dist/core/wake-key.d.ts.map +1 -0
- package/dist/core/wake-key.js +51 -0
- package/dist/core/wake-key.js.map +1 -0
- package/dist/index.d.ts +24 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +22 -8
- package/dist/index.js.map +1 -1
- package/dist/lib/archive/archive-inspection.d.ts +48 -0
- package/dist/lib/archive/archive-inspection.d.ts.map +1 -0
- package/dist/lib/archive/archive-inspection.fixtures.d.ts +7 -0
- package/dist/lib/archive/archive-inspection.fixtures.d.ts.map +1 -0
- package/dist/lib/archive/archive-inspection.fixtures.js +134 -0
- package/dist/lib/archive/archive-inspection.fixtures.js.map +1 -0
- package/dist/lib/archive/archive-inspection.js +253 -0
- package/dist/lib/archive/archive-inspection.js.map +1 -0
- package/dist/lib/archive/index.d.ts +3 -0
- package/dist/lib/archive/index.d.ts.map +1 -0
- package/dist/lib/archive/index.js +2 -0
- package/dist/lib/archive/index.js.map +1 -0
- package/dist/lib/logger/console.d.ts +5 -12
- package/dist/lib/logger/console.d.ts.map +1 -1
- package/dist/lib/logger/console.js +5 -47
- package/dist/lib/logger/console.js.map +1 -1
- package/dist/lib/logger/file.d.ts +8 -11
- package/dist/lib/logger/file.d.ts.map +1 -1
- package/dist/lib/logger/file.js +26 -37
- package/dist/lib/logger/file.js.map +1 -1
- package/dist/lib/logger/index.d.ts +3 -1
- package/dist/lib/logger/index.d.ts.map +1 -1
- package/dist/lib/logger/index.js +3 -1
- package/dist/lib/logger/index.js.map +1 -1
- package/dist/lib/logger/jsonl.d.ts +21 -0
- package/dist/lib/logger/jsonl.d.ts.map +1 -0
- package/dist/lib/logger/jsonl.js +29 -0
- package/dist/lib/logger/jsonl.js.map +1 -0
- package/dist/lib/logger/logger.d.ts +22 -0
- package/dist/lib/logger/logger.d.ts.map +1 -1
- package/dist/lib/logger/logger.js +37 -0
- package/dist/lib/logger/logger.js.map +1 -1
- package/dist/lib/logger/session-log.d.ts +21 -0
- package/dist/lib/logger/session-log.d.ts.map +1 -0
- package/dist/lib/logger/session-log.js +37 -0
- package/dist/lib/logger/session-log.js.map +1 -0
- package/dist/lib/utils/concurrency.d.ts +1 -1
- package/dist/lib/utils/concurrency.d.ts.map +1 -1
- package/dist/lib/utils/concurrency.js +30 -7
- package/dist/lib/utils/concurrency.js.map +1 -1
- package/dist/lib/utils/fs-batch.d.ts +17 -0
- package/dist/lib/utils/fs-batch.d.ts.map +1 -0
- package/dist/lib/utils/fs-batch.js +38 -0
- package/dist/lib/utils/fs-batch.js.map +1 -0
- package/dist/lib/utils/result.d.ts +7 -22
- package/dist/lib/utils/result.d.ts.map +1 -1
- package/dist/lib/utils/result.js +6 -17
- package/dist/lib/utils/result.js.map +1 -1
- package/dist/lib/utils/sleep.d.ts +10 -0
- package/dist/lib/utils/sleep.d.ts.map +1 -0
- package/dist/lib/utils/sleep.js +26 -0
- package/dist/lib/utils/sleep.js.map +1 -0
- package/dist/platform/fs-revision.d.ts +21 -0
- package/dist/platform/fs-revision.d.ts.map +1 -0
- package/dist/platform/fs-revision.js +9 -0
- package/dist/platform/fs-revision.js.map +1 -0
- package/dist/platform/fs.d.ts +104 -1
- package/dist/platform/fs.d.ts.map +1 -1
- package/dist/platform/git.d.ts +59 -0
- package/dist/platform/git.d.ts.map +1 -0
- package/dist/platform/git.js +8 -0
- package/dist/platform/git.js.map +1 -0
- package/dist/platform/index.d.ts +40 -1
- package/dist/platform/index.d.ts.map +1 -1
- package/dist/platform/index.js +1 -1
- package/dist/platform/index.js.map +1 -1
- package/dist/platform/llm-call-log.d.ts +80 -0
- package/dist/platform/llm-call-log.d.ts.map +1 -0
- package/dist/platform/llm-call-log.js +12 -0
- package/dist/platform/llm-call-log.js.map +1 -0
- package/dist/platform/scheduler.d.ts +32 -0
- package/dist/platform/scheduler.d.ts.map +1 -0
- package/dist/platform/scheduler.js +46 -0
- package/dist/platform/scheduler.js.map +1 -0
- package/dist/platform/session-log.d.ts +36 -0
- package/dist/platform/session-log.d.ts.map +1 -0
- package/dist/platform/session-log.js +12 -0
- package/dist/platform/session-log.js.map +1 -0
- package/dist/platform/shell.d.ts +83 -0
- package/dist/platform/shell.d.ts.map +1 -0
- package/dist/platform/shell.js +13 -0
- package/dist/platform/shell.js.map +1 -0
- package/dist/plugins/agent-status/plugin.d.ts.map +1 -1
- package/dist/plugins/agent-status/plugin.js +1 -0
- package/dist/plugins/agent-status/plugin.js.map +1 -1
- package/dist/plugins/agents/plugin.d.ts.map +1 -1
- package/dist/plugins/agents/plugin.js +129 -62
- package/dist/plugins/agents/plugin.js.map +1 -1
- package/dist/plugins/filesystem/listing.d.ts +3 -0
- package/dist/plugins/filesystem/listing.d.ts.map +1 -1
- package/dist/plugins/filesystem/listing.js +66 -10
- package/dist/plugins/filesystem/listing.js.map +1 -1
- package/dist/plugins/filesystem/plugin.d.ts.map +1 -1
- package/dist/plugins/filesystem/plugin.js +8 -6
- package/dist/plugins/filesystem/plugin.js.map +1 -1
- package/dist/plugins/git-status/plugin.d.ts +34 -7
- package/dist/plugins/git-status/plugin.d.ts.map +1 -1
- package/dist/plugins/git-status/plugin.js +168 -64
- package/dist/plugins/git-status/plugin.js.map +1 -1
- package/dist/plugins/llm-debug/plugin.d.ts.map +1 -1
- package/dist/plugins/llm-debug/plugin.js +1 -0
- package/dist/plugins/llm-debug/plugin.js.map +1 -1
- package/dist/plugins/logs/plugin.d.ts +1 -4
- package/dist/plugins/logs/plugin.d.ts.map +1 -1
- package/dist/plugins/logs/plugin.js +7 -0
- package/dist/plugins/logs/plugin.js.map +1 -1
- package/dist/plugins/mailbox/helpers.d.ts +2 -2
- package/dist/plugins/mailbox/helpers.js +1 -1
- package/dist/plugins/mailbox/plugin.d.ts.map +1 -1
- package/dist/plugins/mailbox/plugin.js +38 -43
- package/dist/plugins/mailbox/plugin.js.map +1 -1
- package/dist/plugins/mailbox/query.d.ts +7 -2
- package/dist/plugins/mailbox/query.d.ts.map +1 -1
- package/dist/plugins/mailbox/query.js +14 -7
- package/dist/plugins/mailbox/query.js.map +1 -1
- package/dist/plugins/mailbox/state.d.ts +5 -4
- package/dist/plugins/mailbox/state.d.ts.map +1 -1
- package/dist/plugins/mailbox/state.js +6 -5
- package/dist/plugins/mailbox/state.js.map +1 -1
- package/dist/plugins/resources/filename.d.ts +4 -0
- package/dist/plugins/resources/filename.d.ts.map +1 -0
- package/dist/plugins/resources/filename.js +18 -0
- package/dist/plugins/resources/filename.js.map +1 -0
- package/dist/plugins/resources/plugin.d.ts +3 -0
- package/dist/plugins/resources/plugin.d.ts.map +1 -1
- package/dist/plugins/resources/plugin.js +97 -60
- package/dist/plugins/resources/plugin.js.map +1 -1
- package/dist/plugins/resources/state.d.ts +1 -1
- package/dist/plugins/resources/state.js +1 -1
- package/dist/plugins/result-eviction/plugin.d.ts.map +1 -1
- package/dist/plugins/result-eviction/plugin.js +6 -1
- package/dist/plugins/result-eviction/plugin.js.map +1 -1
- package/dist/plugins/services/plugin.d.ts +4 -1
- package/dist/plugins/services/plugin.d.ts.map +1 -1
- package/dist/plugins/services/plugin.js +251 -100
- package/dist/plugins/services/plugin.js.map +1 -1
- package/dist/plugins/services/prompt.d.ts.map +1 -1
- package/dist/plugins/services/prompt.js +1 -4
- package/dist/plugins/services/prompt.js.map +1 -1
- package/dist/plugins/services/schema.d.ts +15 -5
- package/dist/plugins/services/schema.d.ts.map +1 -1
- package/dist/plugins/services/service.d.ts +100 -18
- package/dist/plugins/services/service.d.ts.map +1 -1
- package/dist/plugins/services/service.js +680 -230
- package/dist/plugins/services/service.js.map +1 -1
- package/dist/plugins/session-lifecycle/plugin.d.ts +21 -1
- package/dist/plugins/session-lifecycle/plugin.d.ts.map +1 -1
- package/dist/plugins/session-lifecycle/plugin.js +53 -40
- package/dist/plugins/session-lifecycle/plugin.js.map +1 -1
- package/dist/plugins/session-state/plugin.d.ts +21 -13
- package/dist/plugins/session-state/plugin.d.ts.map +1 -1
- package/dist/plugins/session-state/plugin.js +214 -79
- package/dist/plugins/session-state/plugin.js.map +1 -1
- package/dist/plugins/session-stats/plugin.d.ts.map +1 -1
- package/dist/plugins/session-stats/plugin.js +1 -0
- package/dist/plugins/session-stats/plugin.js.map +1 -1
- package/dist/plugins/shell/executor.d.ts +17 -15
- package/dist/plugins/shell/executor.d.ts.map +1 -1
- package/dist/plugins/shell/executor.js +130 -195
- package/dist/plugins/shell/executor.js.map +1 -1
- package/dist/plugins/shell/index.d.ts +2 -2
- package/dist/plugins/shell/index.d.ts.map +1 -1
- package/dist/plugins/shell/index.js +2 -2
- package/dist/plugins/shell/index.js.map +1 -1
- package/dist/plugins/shell/plugin.d.ts +5 -4
- package/dist/plugins/shell/plugin.d.ts.map +1 -1
- package/dist/plugins/shell/plugin.js +4 -8
- package/dist/plugins/shell/plugin.js.map +1 -1
- package/dist/plugins/skills/discovery.d.ts.map +1 -1
- package/dist/plugins/skills/discovery.js +10 -8
- package/dist/plugins/skills/discovery.js.map +1 -1
- package/dist/plugins/skills/index.d.ts +1 -1
- package/dist/plugins/skills/index.d.ts.map +1 -1
- package/dist/plugins/skills/plugin.d.ts +1 -1
- package/dist/plugins/skills/plugin.d.ts.map +1 -1
- package/dist/plugins/skills/plugin.js +23 -30
- package/dist/plugins/skills/plugin.js.map +1 -1
- package/dist/plugins/skills/prompts.d.ts +3 -3
- package/dist/plugins/skills/prompts.d.ts.map +1 -1
- package/dist/plugins/skills/prompts.js.map +1 -1
- package/dist/plugins/skills/schema.d.ts +4 -2
- package/dist/plugins/skills/schema.d.ts.map +1 -1
- package/dist/plugins/todo/schema.d.ts +1 -1
- package/dist/plugins/uploads/plugin.d.ts +11 -4
- package/dist/plugins/uploads/plugin.d.ts.map +1 -1
- package/dist/plugins/uploads/plugin.js +891 -225
- package/dist/plugins/uploads/plugin.js.map +1 -1
- package/dist/plugins/uploads/preprocessor.d.ts +14 -0
- package/dist/plugins/uploads/preprocessor.d.ts.map +1 -1
- package/dist/plugins/uploads/preprocessor.js +11 -0
- package/dist/plugins/uploads/preprocessor.js.map +1 -1
- package/dist/plugins/uploads/preprocessors/image-classifier.d.ts +1 -1
- package/dist/plugins/uploads/preprocessors/image-classifier.d.ts.map +1 -1
- package/dist/plugins/uploads/preprocessors/image-classifier.js +51 -26
- package/dist/plugins/uploads/preprocessors/image-classifier.js.map +1 -1
- package/dist/plugins/uploads/preprocessors/markitdown-preprocessor.d.ts +2 -2
- package/dist/plugins/uploads/preprocessors/markitdown-preprocessor.d.ts.map +1 -1
- package/dist/plugins/uploads/preprocessors/markitdown-preprocessor.js +41 -16
- package/dist/plugins/uploads/preprocessors/markitdown-preprocessor.js.map +1 -1
- package/dist/plugins/uploads/preprocessors/pdf-preprocessor.d.ts +1 -1
- package/dist/plugins/uploads/preprocessors/pdf-preprocessor.d.ts.map +1 -1
- package/dist/plugins/uploads/preprocessors/pdf-preprocessor.js +29 -14
- package/dist/plugins/uploads/preprocessors/pdf-preprocessor.js.map +1 -1
- package/dist/plugins/uploads/preprocessors/zip-preprocessor.d.ts +1 -1
- package/dist/plugins/uploads/preprocessors/zip-preprocessor.d.ts.map +1 -1
- package/dist/plugins/uploads/preprocessors/zip-preprocessor.js +62 -34
- package/dist/plugins/uploads/preprocessors/zip-preprocessor.js.map +1 -1
- package/dist/plugins/uploads/schema.d.ts +25 -2
- package/dist/plugins/uploads/schema.d.ts.map +1 -1
- package/dist/plugins/uploads/schema.js +24 -3
- package/dist/plugins/uploads/schema.js.map +1 -1
- package/dist/plugins/uploads/state.d.ts +13 -1
- package/dist/plugins/uploads/state.d.ts.map +1 -1
- package/dist/plugins/uploads/state.js +4 -1
- package/dist/plugins/uploads/state.js.map +1 -1
- package/dist/plugins/user-chat/plugin.d.ts +12 -5
- package/dist/plugins/user-chat/plugin.d.ts.map +1 -1
- package/dist/plugins/user-chat/plugin.js +141 -32
- package/dist/plugins/user-chat/plugin.js.map +1 -1
- package/dist/plugins/workers/context.d.ts +35 -13
- package/dist/plugins/workers/context.d.ts.map +1 -1
- package/dist/plugins/workers/context.js +82 -32
- package/dist/plugins/workers/context.js.map +1 -1
- package/dist/plugins/workers/definition.d.ts +7 -0
- package/dist/plugins/workers/definition.d.ts.map +1 -1
- package/dist/plugins/workers/definition.js.map +1 -1
- package/dist/plugins/workers/index.d.ts +4 -4
- package/dist/plugins/workers/index.d.ts.map +1 -1
- package/dist/plugins/workers/index.js +2 -2
- package/dist/plugins/workers/index.js.map +1 -1
- package/dist/plugins/workers/plugin.d.ts +10 -57
- package/dist/plugins/workers/plugin.d.ts.map +1 -1
- package/dist/plugins/workers/plugin.js +385 -123
- package/dist/plugins/workers/plugin.js.map +1 -1
- package/dist/plugins/workers/state.d.ts +69 -0
- package/dist/plugins/workers/state.d.ts.map +1 -0
- package/dist/plugins/workers/state.js +52 -0
- package/dist/plugins/workers/state.js.map +1 -0
- package/dist/plugins/workers/worker.d.ts +15 -4
- package/dist/plugins/workers/worker.d.ts.map +1 -1
- package/dist/testing/conformance.d.ts +106 -0
- package/dist/testing/conformance.d.ts.map +1 -0
- package/dist/testing/conformance.js +1463 -0
- package/dist/testing/conformance.js.map +1 -0
- package/dist/testing/node-platform.d.ts.map +1 -1
- package/dist/testing/node-platform.js +5 -0
- package/dist/testing/node-platform.js.map +1 -1
- package/dist/testing/test-harness.d.ts +11 -1
- package/dist/testing/test-harness.d.ts.map +1 -1
- package/dist/testing/test-harness.js +17 -37
- package/dist/testing/test-harness.js.map +1 -1
- package/dist/testing/wait-helpers.d.ts.map +1 -1
- package/dist/testing/wait-helpers.js +1 -3
- package/dist/testing/wait-helpers.js.map +1 -1
- package/dist/transport/adapter/client-adapter.d.ts +6 -0
- package/dist/transport/adapter/client-adapter.d.ts.map +1 -1
- package/dist/transport/adapter/client-adapter.js +50 -3
- package/dist/transport/adapter/client-adapter.js.map +1 -1
- package/dist/transport/adapter/heartbeat.d.ts +16 -0
- package/dist/transport/adapter/heartbeat.d.ts.map +1 -0
- package/dist/transport/adapter/heartbeat.js +41 -0
- package/dist/transport/adapter/heartbeat.js.map +1 -0
- package/dist/transport/adapter/server-adapter.d.ts.map +1 -1
- package/dist/transport/adapter/server-adapter.js +6 -0
- package/dist/transport/adapter/server-adapter.js.map +1 -1
- package/dist/transport/http/app.d.ts +3 -30
- package/dist/transport/http/app.d.ts.map +1 -1
- package/dist/transport/http/app.js +3 -7
- package/dist/transport/http/app.js.map +1 -1
- package/dist/transport/http/context.d.ts +40 -0
- package/dist/transport/http/context.d.ts.map +1 -0
- package/dist/transport/http/context.js +17 -0
- package/dist/transport/http/context.js.map +1 -0
- package/dist/transport/http/fetch-guard.d.ts +49 -0
- package/dist/transport/http/fetch-guard.d.ts.map +1 -0
- package/dist/transport/http/fetch-guard.js +312 -0
- package/dist/transport/http/fetch-guard.js.map +1 -0
- package/dist/transport/http/index.d.ts +1 -1
- package/dist/transport/http/index.d.ts.map +1 -1
- package/dist/transport/http/middleware/bearer-auth.d.ts +1 -1
- package/dist/transport/http/middleware/bearer-auth.d.ts.map +1 -1
- package/dist/transport/http/middleware/error-handler.d.ts +2 -2
- package/dist/transport/http/middleware/error-handler.d.ts.map +1 -1
- package/dist/transport/http/path-containment.d.ts +20 -0
- package/dist/transport/http/path-containment.d.ts.map +1 -0
- package/dist/transport/http/path-containment.js +31 -0
- package/dist/transport/http/path-containment.js.map +1 -0
- package/dist/transport/http/responses.d.ts +30 -0
- package/dist/transport/http/responses.d.ts.map +1 -0
- package/dist/transport/http/responses.js +5 -0
- package/dist/transport/http/responses.js.map +1 -0
- package/dist/transport/http/routes/files.d.ts +1 -1
- package/dist/transport/http/routes/files.d.ts.map +1 -1
- package/dist/transport/http/routes/files.js +54 -155
- package/dist/transport/http/routes/files.js.map +1 -1
- package/dist/transport/http/routes/resources.d.ts +1 -1
- package/dist/transport/http/routes/resources.d.ts.map +1 -1
- package/dist/transport/http/routes/resources.js +92 -57
- package/dist/transport/http/routes/resources.js.map +1 -1
- package/dist/transport/http/routes/rpc.d.ts +6 -1
- package/dist/transport/http/routes/rpc.d.ts.map +1 -1
- package/dist/transport/http/routes/rpc.js +51 -21
- package/dist/transport/http/routes/rpc.js.map +1 -1
- package/dist/transport/http/routes/upload.d.ts +1 -1
- package/dist/transport/http/routes/upload.d.ts.map +1 -1
- package/dist/transport/http/routes/upload.js +256 -169
- package/dist/transport/http/routes/upload.js.map +1 -1
- package/dist/user-config.d.ts +34 -7
- package/dist/user-config.d.ts.map +1 -1
- package/dist/user-config.js +71 -0
- package/dist/user-config.js.map +1 -1
- package/package.json +18 -8
- package/src/bootstrap.ts +119 -35
- package/src/bun-platform/fs.ts +1 -0
- package/src/bun-platform/index.ts +18 -1
- package/src/bun-platform/server-lifecycle.ts +218 -0
- package/src/bun-platform/shell.ts +362 -0
- package/src/config.ts +130 -0
- package/src/core/agents/agent.ts +219 -95
- package/src/core/agents/config.ts +8 -0
- package/src/core/agents/retry.ts +16 -17
- package/src/core/agents/state.ts +28 -0
- package/src/core/context/state.ts +4 -0
- package/src/core/events/base-event-store.ts +24 -16
- package/src/core/events/file.ts +198 -22
- package/src/core/file-store/containment.ts +75 -0
- package/src/core/file-store/file-store.ts +106 -25
- package/src/core/file-store/types.ts +14 -1
- package/src/core/image/image-processor.ts +3 -1
- package/src/core/image/types.ts +2 -0
- package/src/core/image/vips-resizer.ts +102 -37
- package/src/core/llm/anthropic.ts +127 -82
- package/src/core/llm/logger.ts +175 -37
- package/src/core/llm/openrouter.ts +82 -81
- package/src/core/llm/provider-request.ts +40 -0
- package/src/core/llm/provider.ts +72 -3
- package/src/core/llm/state.ts +12 -0
- package/src/core/plugins/plugin-builder.ts +106 -14
- package/src/core/preset/preset-builder.ts +12 -22
- package/src/core/sessions/context.ts +18 -0
- package/src/core/sessions/runtime-activity.ts +78 -0
- package/src/core/sessions/schema.ts +29 -3
- package/src/core/sessions/session-manager.ts +560 -140
- package/src/core/sessions/session-store.ts +38 -0
- package/src/core/sessions/session.ts +187 -47
- package/src/core/sessions/state.ts +16 -0
- package/src/core/system.ts +15 -0
- package/src/core/wake-key.ts +65 -0
- package/src/index.ts +31 -12
- package/src/lib/archive/archive-inspection.fixtures.ts +138 -0
- package/src/lib/archive/archive-inspection.ts +359 -0
- package/src/lib/archive/index.ts +17 -0
- package/src/lib/logger/console.ts +7 -57
- package/src/lib/logger/file.ts +28 -50
- package/src/lib/logger/index.ts +3 -1
- package/src/lib/logger/jsonl.ts +36 -0
- package/src/lib/logger/logger.ts +48 -0
- package/src/lib/logger/session-log.ts +42 -0
- package/src/lib/utils/concurrency.ts +37 -8
- package/src/lib/utils/fs-batch.ts +49 -0
- package/src/lib/utils/result.ts +7 -31
- package/src/lib/utils/sleep.ts +23 -0
- package/src/platform/fs-revision.ts +21 -0
- package/src/platform/fs.ts +109 -1
- package/src/platform/git.ts +67 -0
- package/src/platform/index.ts +51 -1
- package/src/platform/llm-call-log.ts +86 -0
- package/src/platform/scheduler.ts +71 -0
- package/src/platform/session-log.ts +39 -0
- package/src/platform/shell.ts +89 -0
- package/src/plugins/agent-status/plugin.ts +1 -0
- package/src/plugins/agents/plugin.ts +134 -81
- package/src/plugins/filesystem/listing.ts +70 -12
- package/src/plugins/filesystem/plugin.ts +8 -6
- package/src/plugins/git-status/plugin.ts +204 -77
- package/src/plugins/llm-debug/plugin.ts +1 -0
- package/src/plugins/logs/plugin.ts +9 -0
- package/src/plugins/mailbox/plugin.ts +46 -64
- package/src/plugins/mailbox/query.ts +15 -7
- package/src/plugins/mailbox/state.ts +1 -0
- package/src/plugins/resources/filename.ts +19 -0
- package/src/plugins/resources/plugin.ts +111 -59
- package/src/plugins/result-eviction/plugin.ts +6 -1
- package/src/plugins/services/plugin.ts +254 -98
- package/src/plugins/services/prompt.ts +1 -6
- package/src/plugins/services/schema.ts +17 -3
- package/src/plugins/services/service.ts +702 -252
- package/src/plugins/session-lifecycle/plugin.ts +56 -41
- package/src/plugins/session-state/plugin.ts +242 -88
- package/src/plugins/session-stats/plugin.ts +1 -0
- package/src/plugins/shell/executor.ts +144 -226
- package/src/plugins/shell/index.ts +1 -4
- package/src/plugins/shell/plugin.ts +7 -9
- package/src/plugins/skills/discovery.ts +10 -8
- package/src/plugins/skills/index.ts +1 -1
- package/src/plugins/skills/plugin.ts +19 -27
- package/src/plugins/skills/prompts.ts +3 -3
- package/src/plugins/skills/schema.ts +5 -2
- package/src/plugins/uploads/plugin.ts +991 -273
- package/src/plugins/uploads/preprocessor.ts +25 -0
- package/src/plugins/uploads/preprocessors/image-classifier.ts +56 -25
- package/src/plugins/uploads/preprocessors/markitdown-preprocessor.ts +41 -15
- package/src/plugins/uploads/preprocessors/pdf-preprocessor.ts +32 -16
- package/src/plugins/uploads/preprocessors/zip-preprocessor.ts +67 -38
- package/src/plugins/uploads/schema.ts +30 -3
- package/src/plugins/uploads/state.ts +12 -0
- package/src/plugins/user-chat/plugin.ts +196 -40
- package/src/plugins/workers/context.ts +102 -39
- package/src/plugins/workers/definition.ts +7 -0
- package/src/plugins/workers/index.ts +4 -4
- package/src/plugins/workers/plugin.ts +461 -151
- package/src/plugins/workers/state.ts +64 -0
- package/src/plugins/workers/worker.ts +15 -4
- package/src/testing/conformance.ts +1751 -0
- package/src/testing/node-platform.ts +5 -0
- package/src/testing/test-harness.ts +21 -38
- package/src/testing/wait-helpers.ts +1 -4
- package/src/transport/adapter/client-adapter.ts +60 -3
- package/src/transport/adapter/heartbeat.ts +50 -0
- package/src/transport/adapter/server-adapter.ts +6 -0
- package/src/transport/http/app.ts +7 -35
- package/src/transport/http/context.ts +46 -0
- package/src/transport/http/fetch-guard.ts +318 -0
- package/src/transport/http/index.ts +1 -1
- package/src/transport/http/middleware/bearer-auth.ts +1 -1
- package/src/transport/http/middleware/error-handler.ts +1 -1
- package/src/transport/http/path-containment.ts +44 -0
- package/src/transport/http/responses.ts +20 -0
- package/src/transport/http/routes/files.ts +69 -159
- package/src/transport/http/routes/resources.ts +124 -93
- package/src/transport/http/routes/rpc.ts +63 -26
- package/src/transport/http/routes/upload.ts +327 -258
- package/src/user-config.ts +93 -7
- package/dist/config.test.d.ts +0 -2
- package/dist/config.test.d.ts.map +0 -1
- package/dist/config.test.js +0 -155
- package/dist/config.test.js.map +0 -1
- package/dist/core/agent-loop.integration.test.d.ts +0 -2
- package/dist/core/agent-loop.integration.test.d.ts.map +0 -1
- package/dist/core/agent-loop.integration.test.js +0 -414
- package/dist/core/agent-loop.integration.test.js.map +0 -1
- package/dist/core/agents/agent-config.test.d.ts +0 -2
- package/dist/core/agents/agent-config.test.d.ts.map +0 -1
- package/dist/core/agents/agent-config.test.js +0 -194
- package/dist/core/agents/agent-config.test.js.map +0 -1
- package/dist/core/agents/agent-shutdown.test.d.ts +0 -6
- package/dist/core/agents/agent-shutdown.test.d.ts.map +0 -1
- package/dist/core/agents/agent-shutdown.test.js +0 -180
- package/dist/core/agents/agent-shutdown.test.js.map +0 -1
- package/dist/core/agents/agent.test.d.ts +0 -2
- package/dist/core/agents/agent.test.d.ts.map +0 -1
- package/dist/core/agents/agent.test.js +0 -313
- package/dist/core/agents/agent.test.js.map +0 -1
- package/dist/core/agents/communicator.d.ts +0 -3
- package/dist/core/agents/communicator.d.ts.map +0 -1
- package/dist/core/agents/communicator.js +0 -13
- package/dist/core/agents/communicator.js.map +0 -1
- package/dist/core/agents/handler-events.test.d.ts +0 -5
- package/dist/core/agents/handler-events.test.d.ts.map +0 -1
- package/dist/core/agents/handler-events.test.js +0 -115
- package/dist/core/agents/handler-events.test.js.map +0 -1
- package/dist/core/agents/response-sanitizer.test.d.ts +0 -2
- package/dist/core/agents/response-sanitizer.test.d.ts.map +0 -1
- package/dist/core/agents/response-sanitizer.test.js +0 -101
- package/dist/core/agents/response-sanitizer.test.js.map +0 -1
- package/dist/core/error-recovery.integration.test.d.ts +0 -2
- package/dist/core/error-recovery.integration.test.d.ts.map +0 -1
- package/dist/core/error-recovery.integration.test.js +0 -288
- package/dist/core/error-recovery.integration.test.js.map +0 -1
- package/dist/core/event-sourcing.integration.test.d.ts +0 -2
- package/dist/core/event-sourcing.integration.test.d.ts.map +0 -1
- package/dist/core/event-sourcing.integration.test.js +0 -154
- package/dist/core/event-sourcing.integration.test.js.map +0 -1
- package/dist/core/events/file.test.d.ts +0 -2
- package/dist/core/events/file.test.d.ts.map +0 -1
- package/dist/core/events/file.test.js +0 -284
- package/dist/core/events/file.test.js.map +0 -1
- package/dist/core/events/memory.test.d.ts +0 -2
- package/dist/core/events/memory.test.d.ts.map +0 -1
- package/dist/core/events/memory.test.js +0 -502
- package/dist/core/events/memory.test.js.map +0 -1
- package/dist/core/image/image-processor.test.d.ts +0 -2
- package/dist/core/image/image-processor.test.d.ts.map +0 -1
- package/dist/core/image/image-processor.test.js +0 -171
- package/dist/core/image/image-processor.test.js.map +0 -1
- package/dist/core/image/vips-resizer.test.d.ts +0 -2
- package/dist/core/image/vips-resizer.test.d.ts.map +0 -1
- package/dist/core/image/vips-resizer.test.js +0 -336
- package/dist/core/image/vips-resizer.test.js.map +0 -1
- package/dist/core/llm/anthropic.test.d.ts +0 -2
- package/dist/core/llm/anthropic.test.d.ts.map +0 -1
- package/dist/core/llm/anthropic.test.js +0 -464
- package/dist/core/llm/anthropic.test.js.map +0 -1
- package/dist/core/llm/cache-breakpoints.test.d.ts +0 -2
- package/dist/core/llm/cache-breakpoints.test.d.ts.map +0 -1
- package/dist/core/llm/cache-breakpoints.test.js +0 -69
- package/dist/core/llm/cache-breakpoints.test.js.map +0 -1
- package/dist/core/llm/cache-live.test.d.ts +0 -16
- package/dist/core/llm/cache-live.test.d.ts.map +0 -1
- package/dist/core/llm/cache-live.test.js +0 -137
- package/dist/core/llm/cache-live.test.js.map +0 -1
- package/dist/core/llm/logger.test.d.ts +0 -7
- package/dist/core/llm/logger.test.d.ts.map +0 -1
- package/dist/core/llm/logger.test.js +0 -228
- package/dist/core/llm/logger.test.js.map +0 -1
- package/dist/core/llm/message-sanitization.test.d.ts +0 -2
- package/dist/core/llm/message-sanitization.test.d.ts.map +0 -1
- package/dist/core/llm/message-sanitization.test.js +0 -181
- package/dist/core/llm/message-sanitization.test.js.map +0 -1
- package/dist/core/llm/mock.test.d.ts +0 -2
- package/dist/core/llm/mock.test.d.ts.map +0 -1
- package/dist/core/llm/mock.test.js +0 -318
- package/dist/core/llm/mock.test.js.map +0 -1
- package/dist/core/llm/openrouter-mapping.test.d.ts +0 -2
- package/dist/core/llm/openrouter-mapping.test.d.ts.map +0 -1
- package/dist/core/llm/openrouter-mapping.test.js +0 -172
- package/dist/core/llm/openrouter-mapping.test.js.map +0 -1
- package/dist/core/llm/openrouter.test.d.ts +0 -2
- package/dist/core/llm/openrouter.test.d.ts.map +0 -1
- package/dist/core/llm/openrouter.test.js +0 -377
- package/dist/core/llm/openrouter.test.js.map +0 -1
- package/dist/core/llm/provider-integration.test.d.ts +0 -12
- package/dist/core/llm/provider-integration.test.d.ts.map +0 -1
- package/dist/core/llm/provider-integration.test.js +0 -350
- package/dist/core/llm/provider-integration.test.js.map +0 -1
- package/dist/core/llm/routing-provider.test.d.ts +0 -2
- package/dist/core/llm/routing-provider.test.d.ts.map +0 -1
- package/dist/core/llm/routing-provider.test.js +0 -94
- package/dist/core/llm/routing-provider.test.js.map +0 -1
- package/dist/core/llm/snapshot-middleware.test.d.ts +0 -2
- package/dist/core/llm/snapshot-middleware.test.d.ts.map +0 -1
- package/dist/core/llm/snapshot-middleware.test.js +0 -144
- package/dist/core/llm/snapshot-middleware.test.js.map +0 -1
- package/dist/core/multi-agent.integration.test.d.ts +0 -2
- package/dist/core/multi-agent.integration.test.d.ts.map +0 -1
- package/dist/core/multi-agent.integration.test.js +0 -298
- package/dist/core/multi-agent.integration.test.js.map +0 -1
- package/dist/core/plugin-hooks.integration.test.d.ts +0 -2
- package/dist/core/plugin-hooks.integration.test.d.ts.map +0 -1
- package/dist/core/plugin-hooks.integration.test.js +0 -458
- package/dist/core/plugin-hooks.integration.test.js.map +0 -1
- package/dist/core/session-lifecycle.integration.test.d.ts +0 -2
- package/dist/core/session-lifecycle.integration.test.d.ts.map +0 -1
- package/dist/core/session-lifecycle.integration.test.js +0 -159
- package/dist/core/session-lifecycle.integration.test.js.map +0 -1
- package/dist/core/sessions/fork-utils.test.d.ts +0 -2
- package/dist/core/sessions/fork-utils.test.d.ts.map +0 -1
- package/dist/core/sessions/fork-utils.test.js +0 -129
- package/dist/core/sessions/fork-utils.test.js.map +0 -1
- package/dist/core/sessions/session-overrides.integration.test.d.ts +0 -2
- package/dist/core/sessions/session-overrides.integration.test.d.ts.map +0 -1
- package/dist/core/sessions/session-overrides.integration.test.js +0 -154
- package/dist/core/sessions/session-overrides.integration.test.js.map +0 -1
- package/dist/core/sessions/session.test.d.ts +0 -2
- package/dist/core/sessions/session.test.d.ts.map +0 -1
- package/dist/core/sessions/session.test.js +0 -1100
- package/dist/core/sessions/session.test.js.map +0 -1
- package/dist/core/tools/executor.test.d.ts +0 -2
- package/dist/core/tools/executor.test.d.ts.map +0 -1
- package/dist/core/tools/executor.test.js +0 -144
- package/dist/core/tools/executor.test.js.map +0 -1
- package/dist/lib/logger/console.test.d.ts +0 -2
- package/dist/lib/logger/console.test.d.ts.map +0 -1
- package/dist/lib/logger/console.test.js +0 -258
- package/dist/lib/logger/console.test.js.map +0 -1
- package/dist/lib/never.d.ts +0 -2
- package/dist/lib/never.d.ts.map +0 -1
- package/dist/lib/never.js +0 -4
- package/dist/lib/never.js.map +0 -1
- package/dist/lib/utils/concurrency.test.d.ts +0 -2
- package/dist/lib/utils/concurrency.test.d.ts.map +0 -1
- package/dist/lib/utils/concurrency.test.js +0 -135
- package/dist/lib/utils/concurrency.test.js.map +0 -1
- package/dist/plugins/agent-status/agent-status.test.d.ts +0 -2
- package/dist/plugins/agent-status/agent-status.test.d.ts.map +0 -1
- package/dist/plugins/agent-status/agent-status.test.js +0 -136
- package/dist/plugins/agent-status/agent-status.test.js.map +0 -1
- package/dist/plugins/agents/agents.integration.test.d.ts +0 -2
- package/dist/plugins/agents/agents.integration.test.d.ts.map +0 -1
- package/dist/plugins/agents/agents.integration.test.js +0 -830
- package/dist/plugins/agents/agents.integration.test.js.map +0 -1
- package/dist/plugins/agents/supervision.integration.test.d.ts +0 -2
- package/dist/plugins/agents/supervision.integration.test.d.ts.map +0 -1
- package/dist/plugins/agents/supervision.integration.test.js +0 -215
- package/dist/plugins/agents/supervision.integration.test.js.map +0 -1
- package/dist/plugins/context-compact/compaction-live.test.d.ts +0 -17
- package/dist/plugins/context-compact/compaction-live.test.d.ts.map +0 -1
- package/dist/plugins/context-compact/compaction-live.test.js +0 -177
- package/dist/plugins/context-compact/compaction-live.test.js.map +0 -1
- package/dist/plugins/context-compact/context-compact.integration.test.d.ts +0 -2
- package/dist/plugins/context-compact/context-compact.integration.test.d.ts.map +0 -1
- package/dist/plugins/context-compact/context-compact.integration.test.js +0 -364
- package/dist/plugins/context-compact/context-compact.integration.test.js.map +0 -1
- package/dist/plugins/context-compact/context-compactor.test.d.ts +0 -2
- package/dist/plugins/context-compact/context-compactor.test.d.ts.map +0 -1
- package/dist/plugins/context-compact/context-compactor.test.js +0 -858
- package/dist/plugins/context-compact/context-compactor.test.js.map +0 -1
- package/dist/plugins/context-compact/history-offloader.test.d.ts +0 -2
- package/dist/plugins/context-compact/history-offloader.test.d.ts.map +0 -1
- package/dist/plugins/context-compact/history-offloader.test.js +0 -77
- package/dist/plugins/context-compact/history-offloader.test.js.map +0 -1
- package/dist/plugins/filesystem/filesystem.integration.test.d.ts +0 -2
- package/dist/plugins/filesystem/filesystem.integration.test.d.ts.map +0 -1
- package/dist/plugins/filesystem/filesystem.integration.test.js +0 -447
- package/dist/plugins/filesystem/filesystem.integration.test.js.map +0 -1
- package/dist/plugins/filesystem/schema.d.ts +0 -7
- package/dist/plugins/filesystem/schema.d.ts.map +0 -1
- package/dist/plugins/filesystem/schema.js +0 -2
- package/dist/plugins/filesystem/schema.js.map +0 -1
- package/dist/plugins/limits-guard/limit-guard.test.d.ts +0 -2
- package/dist/plugins/limits-guard/limit-guard.test.d.ts.map +0 -1
- package/dist/plugins/limits-guard/limit-guard.test.js +0 -194
- package/dist/plugins/limits-guard/limit-guard.test.js.map +0 -1
- package/dist/plugins/limits-guard/limits-guard.integration.test.d.ts +0 -2
- package/dist/plugins/limits-guard/limits-guard.integration.test.d.ts.map +0 -1
- package/dist/plugins/limits-guard/limits-guard.integration.test.js +0 -887
- package/dist/plugins/limits-guard/limits-guard.integration.test.js.map +0 -1
- package/dist/plugins/llm-debug/llm-debug.integration.test.d.ts +0 -2
- package/dist/plugins/llm-debug/llm-debug.integration.test.d.ts.map +0 -1
- package/dist/plugins/llm-debug/llm-debug.integration.test.js +0 -157
- package/dist/plugins/llm-debug/llm-debug.integration.test.js.map +0 -1
- package/dist/plugins/mailbox/mailbox.integration.test.d.ts +0 -2
- package/dist/plugins/mailbox/mailbox.integration.test.d.ts.map +0 -1
- package/dist/plugins/mailbox/mailbox.integration.test.js +0 -678
- package/dist/plugins/mailbox/mailbox.integration.test.js.map +0 -1
- package/dist/plugins/resources/resources.integration.test.d.ts +0 -2
- package/dist/plugins/resources/resources.integration.test.d.ts.map +0 -1
- package/dist/plugins/resources/resources.integration.test.js +0 -62
- package/dist/plugins/resources/resources.integration.test.js.map +0 -1
- package/dist/plugins/result-eviction/result-eviction.integration.test.d.ts +0 -2
- package/dist/plugins/result-eviction/result-eviction.integration.test.d.ts.map +0 -1
- package/dist/plugins/result-eviction/result-eviction.integration.test.js +0 -294
- package/dist/plugins/result-eviction/result-eviction.integration.test.js.map +0 -1
- package/dist/plugins/services/pid-registry.test.d.ts +0 -2
- package/dist/plugins/services/pid-registry.test.d.ts.map +0 -1
- package/dist/plugins/services/pid-registry.test.js +0 -161
- package/dist/plugins/services/pid-registry.test.js.map +0 -1
- package/dist/plugins/services/services.integration.test.d.ts +0 -2
- package/dist/plugins/services/services.integration.test.d.ts.map +0 -1
- package/dist/plugins/services/services.integration.test.js +0 -1057
- package/dist/plugins/services/services.integration.test.js.map +0 -1
- package/dist/plugins/session-lifecycle/session-lifecycle.integration.test.d.ts +0 -2
- package/dist/plugins/session-lifecycle/session-lifecycle.integration.test.d.ts.map +0 -1
- package/dist/plugins/session-lifecycle/session-lifecycle.integration.test.js +0 -498
- package/dist/plugins/session-lifecycle/session-lifecycle.integration.test.js.map +0 -1
- package/dist/plugins/session-stats/plugin.test.d.ts +0 -2
- package/dist/plugins/session-stats/plugin.test.d.ts.map +0 -1
- package/dist/plugins/session-stats/plugin.test.js +0 -145
- package/dist/plugins/session-stats/plugin.test.js.map +0 -1
- package/dist/plugins/shell/shell.integration.test.d.ts +0 -2
- package/dist/plugins/shell/shell.integration.test.d.ts.map +0 -1
- package/dist/plugins/shell/shell.integration.test.js +0 -234
- package/dist/plugins/shell/shell.integration.test.js.map +0 -1
- package/dist/plugins/shell/shell.test.d.ts +0 -2
- package/dist/plugins/shell/shell.test.d.ts.map +0 -1
- package/dist/plugins/shell/shell.test.js +0 -236
- package/dist/plugins/shell/shell.test.js.map +0 -1
- package/dist/plugins/skills/discovery.test.d.ts +0 -2
- package/dist/plugins/skills/discovery.test.d.ts.map +0 -1
- package/dist/plugins/skills/discovery.test.js +0 -312
- package/dist/plugins/skills/discovery.test.js.map +0 -1
- package/dist/plugins/skills/skills.integration.test.d.ts +0 -2
- package/dist/plugins/skills/skills.integration.test.d.ts.map +0 -1
- package/dist/plugins/skills/skills.integration.test.js +0 -475
- package/dist/plugins/skills/skills.integration.test.js.map +0 -1
- package/dist/plugins/todo/todo.integration.test.d.ts +0 -2
- package/dist/plugins/todo/todo.integration.test.d.ts.map +0 -1
- package/dist/plugins/todo/todo.integration.test.js +0 -605
- package/dist/plugins/todo/todo.integration.test.js.map +0 -1
- package/dist/plugins/uploads/preprocessors/image-classifier.test.d.ts +0 -2
- package/dist/plugins/uploads/preprocessors/image-classifier.test.d.ts.map +0 -1
- package/dist/plugins/uploads/preprocessors/image-classifier.test.js +0 -113
- package/dist/plugins/uploads/preprocessors/image-classifier.test.js.map +0 -1
- package/dist/plugins/uploads/uploads.integration.test.d.ts +0 -2
- package/dist/plugins/uploads/uploads.integration.test.d.ts.map +0 -1
- package/dist/plugins/uploads/uploads.integration.test.js +0 -639
- package/dist/plugins/uploads/uploads.integration.test.js.map +0 -1
- package/dist/plugins/user-chat/user-chat.integration.test.d.ts +0 -2
- package/dist/plugins/user-chat/user-chat.integration.test.d.ts.map +0 -1
- package/dist/plugins/user-chat/user-chat.integration.test.js +0 -754
- package/dist/plugins/user-chat/user-chat.integration.test.js.map +0 -1
- package/dist/plugins/workers/workers.integration.test.d.ts +0 -2
- package/dist/plugins/workers/workers.integration.test.d.ts.map +0 -1
- package/dist/plugins/workers/workers.integration.test.js +0 -629
- package/dist/plugins/workers/workers.integration.test.js.map +0 -1
- package/dist/prompts/macros.test.d.ts +0 -2
- package/dist/prompts/macros.test.d.ts.map +0 -1
- package/dist/prompts/macros.test.js +0 -80
- package/dist/prompts/macros.test.js.map +0 -1
- package/dist/testing/test-harness.test.d.ts +0 -2
- package/dist/testing/test-harness.test.d.ts.map +0 -1
- package/dist/testing/test-harness.test.js +0 -92
- package/dist/testing/test-harness.test.js.map +0 -1
- package/dist/transport/http/routes/rpc.integration.test.d.ts +0 -2
- package/dist/transport/http/routes/rpc.integration.test.d.ts.map +0 -1
- package/dist/transport/http/routes/rpc.integration.test.js +0 -189
- package/dist/transport/http/routes/rpc.integration.test.js.map +0 -1
- package/dist/transport/http/routes/rpc.test.d.ts +0 -2
- package/dist/transport/http/routes/rpc.test.d.ts.map +0 -1
- package/dist/transport/http/routes/rpc.test.js +0 -316
- package/dist/transport/http/routes/rpc.test.js.map +0 -1
- package/src/config.test.ts +0 -174
- package/src/core/agent-loop.integration.test.ts +0 -503
- package/src/core/agents/agent-config.test.ts +0 -240
- package/src/core/agents/agent-shutdown.test.ts +0 -236
- package/src/core/agents/agent.test.ts +0 -387
- package/src/core/agents/communicator.ts +0 -16
- package/src/core/agents/handler-events.test.ts +0 -167
- package/src/core/agents/response-sanitizer.test.ts +0 -137
- package/src/core/error-recovery.integration.test.ts +0 -343
- package/src/core/event-sourcing.integration.test.ts +0 -191
- package/src/core/events/file.test.ts +0 -436
- package/src/core/events/memory.test.ts +0 -741
- package/src/core/image/image-processor.test.ts +0 -218
- package/src/core/image/vips-resizer.test.ts +0 -388
- package/src/core/llm/anthropic.test.ts +0 -546
- package/src/core/llm/cache-breakpoints.test.ts +0 -85
- package/src/core/llm/cache-live.test.ts +0 -155
- package/src/core/llm/logger.test.ts +0 -270
- package/src/core/llm/message-sanitization.test.ts +0 -217
- package/src/core/llm/mock.test.ts +0 -402
- package/src/core/llm/openrouter-mapping.test.ts +0 -210
- package/src/core/llm/openrouter.test.ts +0 -499
- package/src/core/llm/provider-integration.test.ts +0 -408
- package/src/core/llm/routing-provider.test.ts +0 -113
- package/src/core/llm/snapshot-middleware.test.ts +0 -168
- package/src/core/multi-agent.integration.test.ts +0 -340
- package/src/core/plugin-hooks.integration.test.ts +0 -568
- package/src/core/session-lifecycle.integration.test.ts +0 -202
- package/src/core/sessions/fork-utils.test.ts +0 -158
- package/src/core/sessions/session-overrides.integration.test.ts +0 -210
- package/src/core/sessions/session.test.ts +0 -1736
- package/src/core/tools/executor.test.ts +0 -161
- package/src/lib/logger/console.test.ts +0 -348
- package/src/lib/never.ts +0 -3
- package/src/lib/utils/concurrency.test.ts +0 -169
- package/src/plugins/agent-status/agent-status.test.ts +0 -164
- package/src/plugins/agents/agents.integration.test.ts +0 -976
- package/src/plugins/agents/supervision.integration.test.ts +0 -249
- package/src/plugins/context-compact/compaction-live.test.ts +0 -221
- package/src/plugins/context-compact/context-compact.integration.test.ts +0 -418
- package/src/plugins/context-compact/context-compactor.test.ts +0 -1036
- package/src/plugins/context-compact/history-offloader.test.ts +0 -100
- package/src/plugins/filesystem/filesystem.integration.test.ts +0 -529
- package/src/plugins/filesystem/schema.ts +0 -6
- package/src/plugins/limits-guard/limit-guard.test.ts +0 -253
- package/src/plugins/limits-guard/limits-guard.integration.test.ts +0 -1012
- package/src/plugins/llm-debug/llm-debug.integration.test.ts +0 -192
- package/src/plugins/mailbox/mailbox.integration.test.ts +0 -794
- package/src/plugins/resources/resources.integration.test.ts +0 -68
- package/src/plugins/result-eviction/result-eviction.integration.test.ts +0 -332
- package/src/plugins/services/pid-registry.test.ts +0 -180
- package/src/plugins/services/services.integration.test.ts +0 -1223
- package/src/plugins/session-lifecycle/session-lifecycle.integration.test.ts +0 -639
- package/src/plugins/session-stats/plugin.test.ts +0 -160
- package/src/plugins/shell/shell.integration.test.ts +0 -273
- package/src/plugins/shell/shell.test.ts +0 -314
- package/src/plugins/skills/discovery.test.ts +0 -395
- package/src/plugins/skills/skills.integration.test.ts +0 -580
- package/src/plugins/todo/todo.integration.test.ts +0 -687
- package/src/plugins/uploads/preprocessors/image-classifier.test.ts +0 -142
- package/src/plugins/uploads/uploads.integration.test.ts +0 -831
- package/src/plugins/user-chat/user-chat.integration.test.ts +0 -893
- package/src/plugins/workers/workers.integration.test.ts +0 -778
- package/src/prompts/macros.test.ts +0 -107
- package/src/testing/test-harness.test.ts +0 -114
- package/src/transport/http/routes/rpc.integration.test.ts +0 -243
- package/src/transport/http/routes/rpc.test.ts +0 -372
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
import type { FileStore } from '~/core/file-store/types.js'
|
|
12
|
+
import type { InferenceContext } from '~/core/llm/provider.js'
|
|
13
|
+
import type { ArchiveBudget } from '~/lib/archive/index.js'
|
|
12
14
|
import type { Result } from '~/lib/utils/result.js'
|
|
13
15
|
|
|
14
16
|
// ============================================================================
|
|
@@ -21,6 +23,29 @@ import type { Result } from '~/lib/utils/result.js'
|
|
|
21
23
|
export interface PreprocessorContext {
|
|
22
24
|
/** FileStore scoped to upload directory for writing derived files */
|
|
23
25
|
files: FileStore
|
|
26
|
+
/**
|
|
27
|
+
* Cancels subprocesses, inference calls, and derived-file generation.
|
|
28
|
+
* Implementations should settle promptly; the host stops awaiting after a bounded grace period.
|
|
29
|
+
*/
|
|
30
|
+
signal?: AbortSignal
|
|
31
|
+
/** Optional metadata required to pass cancellation through LLM providers. */
|
|
32
|
+
inferenceContext?: Omit<InferenceContext, 'signal'>
|
|
33
|
+
/** Shared extraction budget for all ZIPs nested within one upload. */
|
|
34
|
+
archiveBudget?: ArchiveBudget
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const NEVER_ABORTED_SIGNAL = new AbortController().signal
|
|
38
|
+
|
|
39
|
+
export function getPreprocessingSignal(ctx: PreprocessorContext): AbortSignal {
|
|
40
|
+
return ctx.signal ?? NEVER_ABORTED_SIGNAL
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export function preprocessingAbortError(signal: AbortSignal): Error {
|
|
44
|
+
return signal.reason instanceof Error ? signal.reason : new Error('Processing cancelled')
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function throwIfPreprocessingAborted(signal: AbortSignal): void {
|
|
48
|
+
if (signal.aborted) throw preprocessingAbortError(signal)
|
|
24
49
|
}
|
|
25
50
|
|
|
26
51
|
// ============================================================================
|
|
@@ -13,7 +13,14 @@ import type { Result } from '~/lib/utils/result.js'
|
|
|
13
13
|
import { Err, Ok } from '~/lib/utils/result.js'
|
|
14
14
|
import type { FileSystem } from '~/platform/fs.js'
|
|
15
15
|
import type { Logger } from '../../../lib/logger/logger.js'
|
|
16
|
-
import
|
|
16
|
+
import {
|
|
17
|
+
getPreprocessingSignal,
|
|
18
|
+
preprocessingAbortError,
|
|
19
|
+
throwIfPreprocessingAborted,
|
|
20
|
+
type Preprocessor,
|
|
21
|
+
type PreprocessorContext,
|
|
22
|
+
type PreprocessorResult,
|
|
23
|
+
} from '../preprocessor.js'
|
|
17
24
|
|
|
18
25
|
/**
|
|
19
26
|
* Anthropic vision API internally downsamples images to ~1568px long side.
|
|
@@ -92,7 +99,9 @@ export class ImageClassifierPreprocessor implements Preprocessor {
|
|
|
92
99
|
ctx: PreprocessorContext,
|
|
93
100
|
): Promise<Result<PreprocessorResult, Error>> {
|
|
94
101
|
const totalStart = Date.now()
|
|
102
|
+
const signal = getPreprocessingSignal(ctx)
|
|
95
103
|
try {
|
|
104
|
+
throwIfPreprocessingAborted(signal)
|
|
96
105
|
// Check + stat image file
|
|
97
106
|
if (!(await this.fs.exists(filePath))) {
|
|
98
107
|
return Err(new Error(`Image file not found: ${filePath}`))
|
|
@@ -110,11 +119,12 @@ export class ImageClassifierPreprocessor implements Preprocessor {
|
|
|
110
119
|
|
|
111
120
|
// Try vision inference
|
|
112
121
|
const inferenceStart = Date.now()
|
|
113
|
-
const description = await this.describeImage(filePath, mimeType)
|
|
122
|
+
const description = await this.describeImage(filePath, mimeType, ctx, signal)
|
|
114
123
|
const inferenceDurationMs = Date.now() - inferenceStart
|
|
115
124
|
|
|
116
125
|
if (description) {
|
|
117
126
|
// Save description to file
|
|
127
|
+
throwIfPreprocessingAborted(signal)
|
|
118
128
|
const writeResult = await ctx.files.write('description.txt', description)
|
|
119
129
|
|
|
120
130
|
this.logger.info('Image described successfully', {
|
|
@@ -143,6 +153,7 @@ export class ImageClassifierPreprocessor implements Preprocessor {
|
|
|
143
153
|
extractedContent: `[Image: ${filename}, ${this.formatSize(size)}, ${mimeType}]`,
|
|
144
154
|
})
|
|
145
155
|
} catch (error) {
|
|
156
|
+
if (signal.aborted) return Err(preprocessingAbortError(signal))
|
|
146
157
|
this.logger.error(
|
|
147
158
|
'Image classification failed',
|
|
148
159
|
error instanceof Error ? error : undefined,
|
|
@@ -164,34 +175,42 @@ export class ImageClassifierPreprocessor implements Preprocessor {
|
|
|
164
175
|
private async describeImage(
|
|
165
176
|
filePath: string,
|
|
166
177
|
mimeType: string,
|
|
178
|
+
ctx: PreprocessorContext,
|
|
179
|
+
signal: AbortSignal,
|
|
167
180
|
): Promise<string | null> {
|
|
168
181
|
try {
|
|
169
|
-
const { url: imageUrl, cleanup } = await this.prepareImageUrl(filePath, mimeType)
|
|
182
|
+
const { url: imageUrl, cleanup } = await this.prepareImageUrl(filePath, mimeType, signal)
|
|
170
183
|
|
|
171
184
|
try {
|
|
172
|
-
const inferenceCall = () =>
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
185
|
+
const inferenceCall = () => {
|
|
186
|
+
throwIfPreprocessingAborted(signal)
|
|
187
|
+
return this.llmProvider.inference({
|
|
188
|
+
model: this.visionModel,
|
|
189
|
+
systemPrompt: 'You are an image description assistant. Describe images concisely in 1-2 sentences.',
|
|
190
|
+
messages: [
|
|
191
|
+
{
|
|
192
|
+
role: 'user',
|
|
193
|
+
content: [
|
|
194
|
+
{
|
|
195
|
+
type: 'text',
|
|
196
|
+
text: 'Please describe this image concisely in 1-2 sentences. Focus on the main subject and any text visible.',
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
type: 'image_url',
|
|
200
|
+
imageUrl: { url: imageUrl },
|
|
201
|
+
},
|
|
202
|
+
],
|
|
203
|
+
},
|
|
204
|
+
],
|
|
205
|
+
maxTokens: 200,
|
|
206
|
+
temperature: 0.3,
|
|
207
|
+
}, ctx.inferenceContext ? {
|
|
208
|
+
...ctx.inferenceContext,
|
|
209
|
+
signal,
|
|
210
|
+
} : undefined)
|
|
211
|
+
}
|
|
193
212
|
|
|
194
|
-
const result = await (this.gate ? this.gate.run(inferenceCall) : inferenceCall())
|
|
213
|
+
const result = await (this.gate ? this.gate.run(inferenceCall, signal) : inferenceCall())
|
|
195
214
|
|
|
196
215
|
if (result.ok && result.value.content) {
|
|
197
216
|
return result.value.content.trim()
|
|
@@ -202,6 +221,7 @@ export class ImageClassifierPreprocessor implements Preprocessor {
|
|
|
202
221
|
await cleanup()
|
|
203
222
|
}
|
|
204
223
|
} catch (error) {
|
|
224
|
+
if (signal.aborted) throw preprocessingAbortError(signal)
|
|
205
225
|
this.logger.warn('Vision inference failed', {
|
|
206
226
|
error: error instanceof Error ? error.message : String(error),
|
|
207
227
|
})
|
|
@@ -221,17 +241,24 @@ export class ImageClassifierPreprocessor implements Preprocessor {
|
|
|
221
241
|
private async prepareImageUrl(
|
|
222
242
|
filePath: string,
|
|
223
243
|
mimeType: string,
|
|
244
|
+
signal: AbortSignal,
|
|
224
245
|
): Promise<{ url: string; cleanup: () => Promise<void> }> {
|
|
246
|
+
throwIfPreprocessingAborted(signal)
|
|
225
247
|
if (!this.imageResizer) {
|
|
226
248
|
return { url: `file://${filePath}`, cleanup: async () => {} }
|
|
227
249
|
}
|
|
228
250
|
|
|
251
|
+
let resizedTempFile: string | undefined
|
|
229
252
|
try {
|
|
230
253
|
const resized = await this.imageResizer.resize(filePath, mimeType, {
|
|
231
254
|
maxDimension: CLASSIFY_MAX_DIMENSION,
|
|
232
255
|
maxFileSizeBytes: CLASSIFY_MAX_FILE_SIZE_BYTES,
|
|
256
|
+
signal,
|
|
233
257
|
})
|
|
258
|
+
resizedTempFile = resized.tempFile
|
|
259
|
+
throwIfPreprocessingAborted(signal)
|
|
234
260
|
const buffer = await this.fs.readFile(resized.path)
|
|
261
|
+
throwIfPreprocessingAborted(signal)
|
|
235
262
|
const base64 = buffer.toString('base64')
|
|
236
263
|
return {
|
|
237
264
|
url: `data:${resized.mimeType};base64,${base64}`,
|
|
@@ -242,6 +269,10 @@ export class ImageClassifierPreprocessor implements Preprocessor {
|
|
|
242
269
|
},
|
|
243
270
|
}
|
|
244
271
|
} catch (error) {
|
|
272
|
+
if (resizedTempFile) {
|
|
273
|
+
await this.fs.unlink(resizedTempFile).catch(() => {})
|
|
274
|
+
}
|
|
275
|
+
if (signal.aborted) throw preprocessingAbortError(signal)
|
|
245
276
|
this.logger.warn('Pre-resize for classification failed, falling back to file:// URL', {
|
|
246
277
|
filePath,
|
|
247
278
|
error: error instanceof Error ? error.message : String(error),
|
|
@@ -23,7 +23,15 @@ import type { FileSystem } from '~/platform/fs.js'
|
|
|
23
23
|
import type { ProcessRunner } from '~/platform/process.js'
|
|
24
24
|
import type { FileStore } from '../../../core/file-store/types.js'
|
|
25
25
|
import type { Logger } from '../../../lib/logger/logger.js'
|
|
26
|
-
import
|
|
26
|
+
import {
|
|
27
|
+
getPreprocessingSignal,
|
|
28
|
+
preprocessingAbortError,
|
|
29
|
+
throwIfPreprocessingAborted,
|
|
30
|
+
type Preprocessor,
|
|
31
|
+
type PreprocessorContext,
|
|
32
|
+
type PreprocessorRegistry,
|
|
33
|
+
type PreprocessorResult,
|
|
34
|
+
} from '../preprocessor.js'
|
|
27
35
|
|
|
28
36
|
const MAX_IMAGES = 20
|
|
29
37
|
const IMAGE_CLASSIFY_CONCURRENCY = 10
|
|
@@ -49,8 +57,8 @@ const MARKITDOWN_TIMEOUT_MS = 60_000
|
|
|
49
57
|
const IMAGE_EXTRACT_TIMEOUT_MS = 5 * 60_000
|
|
50
58
|
|
|
51
59
|
function makeExec(processRunner: ProcessRunner) {
|
|
52
|
-
return (cmd: string, args: string[], timeoutMs: number = MARKITDOWN_TIMEOUT_MS) =>
|
|
53
|
-
processRunner.execFile(cmd, args, { timeout: timeoutMs, maxBuffer: 50 * 1024 * 1024 })
|
|
60
|
+
return (cmd: string, args: string[], timeoutMs: number = MARKITDOWN_TIMEOUT_MS, signal?: AbortSignal) =>
|
|
61
|
+
processRunner.execFile(cmd, args, { timeout: timeoutMs, maxBuffer: 50 * 1024 * 1024, signal })
|
|
54
62
|
}
|
|
55
63
|
|
|
56
64
|
/** MIME types where markitdown converts to markdown (non-ZIP, non-image, non-PDF) */
|
|
@@ -97,7 +105,7 @@ export class MarkitdownPreprocessor implements Preprocessor {
|
|
|
97
105
|
private readonly logger: Logger
|
|
98
106
|
private readonly fs: FileSystem
|
|
99
107
|
private readonly processRunner: ProcessRunner
|
|
100
|
-
private readonly exec: (cmd: string, args: string[], timeoutMs?: number) => Promise<{ stdout: string; stderr: string }>
|
|
108
|
+
private readonly exec: (cmd: string, args: string[], timeoutMs?: number, signal?: AbortSignal) => Promise<{ stdout: string; stderr: string }>
|
|
101
109
|
|
|
102
110
|
constructor(config: MarkitdownPreprocessorConfig) {
|
|
103
111
|
this.registry = config.registry
|
|
@@ -113,10 +121,12 @@ export class MarkitdownPreprocessor implements Preprocessor {
|
|
|
113
121
|
ctx: PreprocessorContext,
|
|
114
122
|
): Promise<Result<PreprocessorResult, Error>> {
|
|
115
123
|
const totalStart = Date.now()
|
|
124
|
+
const signal = getPreprocessingSignal(ctx)
|
|
125
|
+
throwIfPreprocessingAborted(signal)
|
|
116
126
|
|
|
117
127
|
this.logger.info('Markitdown processing started', { filePath, mimeType })
|
|
118
128
|
|
|
119
|
-
const contentPathResult = ctx.files.
|
|
129
|
+
const contentPathResult = await ctx.files.containedPath('content.md')
|
|
120
130
|
if (!contentPathResult.ok) {
|
|
121
131
|
return Err(new Error('Failed to resolve output path'))
|
|
122
132
|
}
|
|
@@ -126,12 +136,13 @@ export class MarkitdownPreprocessor implements Preprocessor {
|
|
|
126
136
|
// independent, so there's no reason to serialize them. For documents
|
|
127
137
|
// where pandoc extraction isn't applicable, the image task resolves
|
|
128
138
|
// immediately.
|
|
129
|
-
const markdownTask = this.runMarkitdown(filePath, mimeType, contentPathResult.value)
|
|
139
|
+
const markdownTask = this.runMarkitdown(filePath, mimeType, contentPathResult.value, signal)
|
|
130
140
|
const imageTask = PANDOC_EXTRACT_MIMES.has(mimeType)
|
|
131
|
-
? this.extractImagesWithPandoc(filePath, mimeType, ctx)
|
|
141
|
+
? this.extractImagesWithPandoc(filePath, mimeType, ctx, signal)
|
|
132
142
|
: Promise.resolve<Array<{ relativePath: string; description: string }>>([])
|
|
133
143
|
|
|
134
144
|
const [markdownResult, images] = await Promise.all([markdownTask, imageTask])
|
|
145
|
+
if (signal.aborted) return Err(preprocessingAbortError(signal))
|
|
135
146
|
|
|
136
147
|
if (!markdownResult.ok) return markdownResult
|
|
137
148
|
|
|
@@ -166,11 +177,13 @@ export class MarkitdownPreprocessor implements Preprocessor {
|
|
|
166
177
|
filePath: string,
|
|
167
178
|
mimeType: string,
|
|
168
179
|
outputPath: string,
|
|
180
|
+
signal: AbortSignal,
|
|
169
181
|
): Promise<Result<string, Error>> {
|
|
170
182
|
const markitdownStart = Date.now()
|
|
171
183
|
try {
|
|
172
|
-
await this.exec('markitdown', [filePath, '-o', outputPath])
|
|
184
|
+
await this.exec('markitdown', [filePath, '-o', outputPath], MARKITDOWN_TIMEOUT_MS, signal)
|
|
173
185
|
} catch (error) {
|
|
186
|
+
if (signal.aborted) return Err(preprocessingAbortError(signal))
|
|
174
187
|
const message = error instanceof Error ? error.message : String(error)
|
|
175
188
|
this.logger.error(
|
|
176
189
|
'markitdown CLI failed',
|
|
@@ -182,6 +195,7 @@ export class MarkitdownPreprocessor implements Preprocessor {
|
|
|
182
195
|
}
|
|
183
196
|
return Err(new Error(`markitdown failed: ${message}`))
|
|
184
197
|
}
|
|
198
|
+
if (signal.aborted) return Err(preprocessingAbortError(signal))
|
|
185
199
|
|
|
186
200
|
let markdown = ''
|
|
187
201
|
try {
|
|
@@ -204,9 +218,11 @@ export class MarkitdownPreprocessor implements Preprocessor {
|
|
|
204
218
|
filePath: string,
|
|
205
219
|
mimeType: string,
|
|
206
220
|
ctx: PreprocessorContext,
|
|
221
|
+
signal: AbortSignal,
|
|
207
222
|
): Promise<Array<{ relativePath: string; description: string }>> {
|
|
223
|
+
if (signal.aborted) return []
|
|
208
224
|
const mediaStore = ctx.files.scoped('media')
|
|
209
|
-
const mediaDirResult = mediaStore.
|
|
225
|
+
const mediaDirResult = await mediaStore.containedPath('')
|
|
210
226
|
if (!mediaDirResult.ok) return []
|
|
211
227
|
|
|
212
228
|
const format = PANDOC_FORMAT_MAP[mimeType]
|
|
@@ -219,8 +235,10 @@ export class MarkitdownPreprocessor implements Preprocessor {
|
|
|
219
235
|
'pandoc',
|
|
220
236
|
['-f', format, '-t', 'gfm', filePath, '-o', '/dev/null', `--extract-media=${mediaDirResult.value}`],
|
|
221
237
|
IMAGE_EXTRACT_TIMEOUT_MS,
|
|
238
|
+
signal,
|
|
222
239
|
)
|
|
223
240
|
} catch (error) {
|
|
241
|
+
if (signal.aborted) return []
|
|
224
242
|
extractSucceeded = false
|
|
225
243
|
this.logger.warn('pandoc --extract-media failed (will classify any partial output)', {
|
|
226
244
|
filePath,
|
|
@@ -228,6 +246,7 @@ export class MarkitdownPreprocessor implements Preprocessor {
|
|
|
228
246
|
error: error instanceof Error ? error.message : String(error),
|
|
229
247
|
})
|
|
230
248
|
}
|
|
249
|
+
if (signal.aborted) return []
|
|
231
250
|
if (extractSucceeded) {
|
|
232
251
|
this.logger.info('pandoc --extract-media complete', {
|
|
233
252
|
filePath,
|
|
@@ -302,12 +321,13 @@ export function shouldClassifyImage(meta: { width: number; height: number; sizeB
|
|
|
302
321
|
export async function getImageDimensions(
|
|
303
322
|
filePath: string,
|
|
304
323
|
processRunner: ProcessRunner,
|
|
324
|
+
signal?: AbortSignal,
|
|
305
325
|
): Promise<{ width: number; height: number } | null> {
|
|
306
326
|
try {
|
|
307
327
|
const { stdout } = await processRunner.execFile(
|
|
308
328
|
'vipsheader',
|
|
309
329
|
['-f', 'width', '-f', 'height', filePath],
|
|
310
|
-
{ timeout: 10_000 },
|
|
330
|
+
{ timeout: 10_000, signal },
|
|
311
331
|
)
|
|
312
332
|
const lines = stdout.trim().split('\n')
|
|
313
333
|
if (lines.length < 2) return null
|
|
@@ -315,7 +335,8 @@ export async function getImageDimensions(
|
|
|
315
335
|
const height = parseInt(lines[1], 10)
|
|
316
336
|
if (!Number.isFinite(width) || !Number.isFinite(height)) return null
|
|
317
337
|
return { width, height }
|
|
318
|
-
} catch {
|
|
338
|
+
} catch (error) {
|
|
339
|
+
if (signal?.aborted) throw error
|
|
319
340
|
return null
|
|
320
341
|
}
|
|
321
342
|
}
|
|
@@ -329,6 +350,8 @@ export async function classifyExtractedImages(
|
|
|
329
350
|
fs: FileSystem,
|
|
330
351
|
processRunner: ProcessRunner,
|
|
331
352
|
): Promise<Array<{ relativePath: string; description: string }>> {
|
|
353
|
+
const signal = getPreprocessingSignal(ctx)
|
|
354
|
+
if (signal.aborted) return []
|
|
332
355
|
const listResult = await imageStore.list('', { maxDepth: 3 })
|
|
333
356
|
if (!listResult.ok) return []
|
|
334
357
|
|
|
@@ -336,7 +359,8 @@ export async function classifyExtractedImages(
|
|
|
336
359
|
|
|
337
360
|
// Stat + density filter, then keep the top MAX_IMAGES by file size.
|
|
338
361
|
const inspected = await mapWithConcurrency(candidates, 8, async (entry) => {
|
|
339
|
-
|
|
362
|
+
if (signal.aborted) return null
|
|
363
|
+
const pathResult = await imageStore.containedPath(entry.name)
|
|
340
364
|
if (!pathResult.ok) return null
|
|
341
365
|
|
|
342
366
|
let sizeBytes = 0
|
|
@@ -346,7 +370,7 @@ export async function classifyExtractedImages(
|
|
|
346
370
|
return null
|
|
347
371
|
}
|
|
348
372
|
|
|
349
|
-
const dims = await getImageDimensions(pathResult.value, processRunner)
|
|
373
|
+
const dims = await getImageDimensions(pathResult.value, processRunner, signal)
|
|
350
374
|
if (!dims) {
|
|
351
375
|
// Unknown dims — include but warn; better to classify than silently drop.
|
|
352
376
|
return { name: entry.name, sizeBytes, width: 0, height: 0, kept: true }
|
|
@@ -357,7 +381,7 @@ export async function classifyExtractedImages(
|
|
|
357
381
|
})
|
|
358
382
|
|
|
359
383
|
const filtered = inspected
|
|
360
|
-
.filter((r): r is NonNullable<typeof r> => r
|
|
384
|
+
.filter((r): r is NonNullable<typeof r> => r?.kept === true)
|
|
361
385
|
.sort((a, b) => b.sizeBytes - a.sizeBytes)
|
|
362
386
|
.slice(0, MAX_IMAGES)
|
|
363
387
|
|
|
@@ -373,7 +397,8 @@ export async function classifyExtractedImages(
|
|
|
373
397
|
}
|
|
374
398
|
|
|
375
399
|
const settled = await mapWithConcurrency(filtered, IMAGE_CLASSIFY_CONCURRENCY, async (imgFile) => {
|
|
376
|
-
|
|
400
|
+
if (signal.aborted) return null
|
|
401
|
+
const imgPathResult = await imageStore.containedPath(imgFile.name)
|
|
377
402
|
if (!imgPathResult.ok) return null
|
|
378
403
|
|
|
379
404
|
const imgMime = guessImageMime(imgFile.name)
|
|
@@ -382,6 +407,7 @@ export async function classifyExtractedImages(
|
|
|
382
407
|
const classifier = registry.getForMimeType(imgMime)
|
|
383
408
|
if (classifier) {
|
|
384
409
|
const classifyResult = await classifier.process(imgPathResult.value, imgMime, {
|
|
410
|
+
...ctx,
|
|
385
411
|
files: ctx.files.scoped(`${relativePrefix}/${imgFile.name}-meta`),
|
|
386
412
|
})
|
|
387
413
|
if (classifyResult.ok && classifyResult.value.extractedContent) {
|
|
@@ -20,13 +20,22 @@
|
|
|
20
20
|
* layers before the vision call.
|
|
21
21
|
*/
|
|
22
22
|
|
|
23
|
+
import { sleep } from '../../../lib/utils/sleep.js'
|
|
23
24
|
import { dirname } from 'node:path'
|
|
24
25
|
import type { Result } from '~/lib/utils/result.js'
|
|
25
26
|
import { Err, Ok } from '~/lib/utils/result.js'
|
|
26
27
|
import type { FileSystem } from '~/platform/fs.js'
|
|
27
28
|
import type { ProcessRunner } from '~/platform/process.js'
|
|
28
29
|
import type { Logger } from '../../../lib/logger/logger.js'
|
|
29
|
-
import
|
|
30
|
+
import {
|
|
31
|
+
getPreprocessingSignal,
|
|
32
|
+
preprocessingAbortError,
|
|
33
|
+
throwIfPreprocessingAborted,
|
|
34
|
+
type Preprocessor,
|
|
35
|
+
type PreprocessorContext,
|
|
36
|
+
type PreprocessorRegistry,
|
|
37
|
+
type PreprocessorResult,
|
|
38
|
+
} from '../preprocessor.js'
|
|
30
39
|
import {
|
|
31
40
|
getImageDimensions,
|
|
32
41
|
guessImageMime,
|
|
@@ -74,12 +83,14 @@ export class PdfPreprocessor implements Preprocessor {
|
|
|
74
83
|
ctx: PreprocessorContext,
|
|
75
84
|
): Promise<Result<PreprocessorResult, Error>> {
|
|
76
85
|
const totalStart = Date.now()
|
|
86
|
+
const signal = getPreprocessingSignal(ctx)
|
|
87
|
+
throwIfPreprocessingAborted(signal)
|
|
77
88
|
this.logger.info('PDF processing started', { filePath })
|
|
78
89
|
|
|
79
|
-
const contentPathResult = ctx.files.
|
|
90
|
+
const contentPathResult = await ctx.files.containedPath('content.md')
|
|
80
91
|
if (!contentPathResult.ok) return Err(new Error('Failed to resolve content output path'))
|
|
81
92
|
|
|
82
|
-
const imagesDirResult = ctx.files.scoped('images').
|
|
93
|
+
const imagesDirResult = await ctx.files.scoped('images').containedPath('')
|
|
83
94
|
if (!imagesDirResult.ok) return Err(new Error('Failed to resolve images output path'))
|
|
84
95
|
|
|
85
96
|
await this.fs.mkdir(dirname(contentPathResult.value), { recursive: true })
|
|
@@ -88,9 +99,10 @@ export class PdfPreprocessor implements Preprocessor {
|
|
|
88
99
|
// Run text extraction and image extraction (with streaming classification)
|
|
89
100
|
// in parallel. They share no state and don't block each other.
|
|
90
101
|
const [textResult, images] = await Promise.all([
|
|
91
|
-
this.extractText(filePath, contentPathResult.value),
|
|
102
|
+
this.extractText(filePath, contentPathResult.value, signal),
|
|
92
103
|
this.extractAndClassifyImages(filePath, imagesDirResult.value, ctx),
|
|
93
104
|
])
|
|
105
|
+
if (signal.aborted) return Err(preprocessingAbortError(signal))
|
|
94
106
|
|
|
95
107
|
const markdown = textResult.ok ? textResult.value : ''
|
|
96
108
|
|
|
@@ -127,19 +139,21 @@ export class PdfPreprocessor implements Preprocessor {
|
|
|
127
139
|
* `-layout` preserves the original visual layout (columns, tables),
|
|
128
140
|
* which is what users typically expect when looking at PDFs.
|
|
129
141
|
*/
|
|
130
|
-
private async extractText(filePath: string, outputPath: string): Promise<Result<string, Error>> {
|
|
142
|
+
private async extractText(filePath: string, outputPath: string, signal: AbortSignal): Promise<Result<string, Error>> {
|
|
131
143
|
const start = Date.now()
|
|
132
144
|
try {
|
|
133
145
|
await this.processRunner.execFile(
|
|
134
146
|
'pdftotext',
|
|
135
147
|
['-layout', filePath, outputPath],
|
|
136
|
-
{ timeout: PDFTOTEXT_TIMEOUT_MS, maxBuffer: 50 * 1024 * 1024 },
|
|
148
|
+
{ timeout: PDFTOTEXT_TIMEOUT_MS, maxBuffer: 50 * 1024 * 1024, signal },
|
|
137
149
|
)
|
|
138
150
|
} catch (error) {
|
|
151
|
+
if (signal.aborted) return Err(preprocessingAbortError(signal))
|
|
139
152
|
const message = error instanceof Error ? error.message : String(error)
|
|
140
153
|
this.logger.warn('pdftotext failed', { filePath, durationMs: Date.now() - start, error: message })
|
|
141
154
|
return Err(new Error(`pdftotext failed: ${message}`))
|
|
142
155
|
}
|
|
156
|
+
if (signal.aborted) return Err(preprocessingAbortError(signal))
|
|
143
157
|
|
|
144
158
|
let text = ''
|
|
145
159
|
try {
|
|
@@ -178,6 +192,7 @@ export class PdfPreprocessor implements Preprocessor {
|
|
|
178
192
|
imagesDir: string,
|
|
179
193
|
ctx: PreprocessorContext,
|
|
180
194
|
): Promise<Array<{ relativePath: string; description: string }>> {
|
|
195
|
+
const signal = getPreprocessingSignal(ctx)
|
|
181
196
|
const extractStart = Date.now()
|
|
182
197
|
const seen = new Set<string>()
|
|
183
198
|
const acceptedQueue: Array<{ name: string; sizeBytes: number; width: number; height: number }> = []
|
|
@@ -202,6 +217,7 @@ export class PdfPreprocessor implements Preprocessor {
|
|
|
202
217
|
const classifyOne = async (name: string): Promise<{ relativePath: string; description: string } | null> => {
|
|
203
218
|
await acquire()
|
|
204
219
|
try {
|
|
220
|
+
if (signal.aborted) return null
|
|
205
221
|
const mime = guessImageMime(name)
|
|
206
222
|
const fullPath = `${imagesDir}/${name}`
|
|
207
223
|
const imageStore = ctx.files.scoped('images')
|
|
@@ -210,6 +226,7 @@ export class PdfPreprocessor implements Preprocessor {
|
|
|
210
226
|
const classifier = this.registry.getForMimeType(mime)
|
|
211
227
|
if (classifier) {
|
|
212
228
|
const result = await classifier.process(fullPath, mime, {
|
|
229
|
+
...ctx,
|
|
213
230
|
files: ctx.files.scoped(`images/${name}-meta`),
|
|
214
231
|
})
|
|
215
232
|
if (result.ok && result.value.extractedContent) {
|
|
@@ -224,7 +241,7 @@ export class PdfPreprocessor implements Preprocessor {
|
|
|
224
241
|
}
|
|
225
242
|
|
|
226
243
|
const inspectAndMaybeClassify = async (name: string) => {
|
|
227
|
-
if (seen.has(name) || stopAccepting) return
|
|
244
|
+
if (signal.aborted || seen.has(name) || stopAccepting) return
|
|
228
245
|
seen.add(name)
|
|
229
246
|
|
|
230
247
|
if (!IMAGE_EXT_RE.test(name)) {
|
|
@@ -240,7 +257,8 @@ export class PdfPreprocessor implements Preprocessor {
|
|
|
240
257
|
return
|
|
241
258
|
}
|
|
242
259
|
|
|
243
|
-
const dims = await getImageDimensions(fullPath, this.processRunner)
|
|
260
|
+
const dims = await getImageDimensions(fullPath, this.processRunner, signal)
|
|
261
|
+
if (signal.aborted) return
|
|
244
262
|
const hasDims = dims !== null
|
|
245
263
|
const passesFilter = hasDims
|
|
246
264
|
? shouldClassifyImage({ width: dims.width, height: dims.height, sizeBytes })
|
|
@@ -272,7 +290,7 @@ export class PdfPreprocessor implements Preprocessor {
|
|
|
272
290
|
const pdfimagesPromise = this.processRunner.execFile(
|
|
273
291
|
'pdfimages',
|
|
274
292
|
['-all', filePath, `${imagesDir}/img`],
|
|
275
|
-
{ timeout: PDFIMAGES_TIMEOUT_MS, maxBuffer: 1024 * 1024 },
|
|
293
|
+
{ timeout: PDFIMAGES_TIMEOUT_MS, maxBuffer: 1024 * 1024, signal },
|
|
276
294
|
).then(() => true).catch((error) => {
|
|
277
295
|
this.logger.warn('pdfimages failed (will classify any partial output)', {
|
|
278
296
|
filePath,
|
|
@@ -284,13 +302,15 @@ export class PdfPreprocessor implements Preprocessor {
|
|
|
284
302
|
|
|
285
303
|
let extractionDone = false
|
|
286
304
|
const poll = async () => {
|
|
287
|
-
while (!extractionDone) {
|
|
305
|
+
while (!extractionDone && !signal.aborted) {
|
|
288
306
|
await this.scanAndDispatch(imagesDir, inspectAndMaybeClassify)
|
|
289
|
-
await sleep(STREAM_POLL_INTERVAL_MS)
|
|
307
|
+
await sleep(STREAM_POLL_INTERVAL_MS, signal)
|
|
290
308
|
}
|
|
291
309
|
// Final sweep — pick up anything that landed between the last poll
|
|
292
310
|
// and pdfimages exiting.
|
|
293
|
-
|
|
311
|
+
if (!signal.aborted) {
|
|
312
|
+
await this.scanAndDispatch(imagesDir, inspectAndMaybeClassify)
|
|
313
|
+
}
|
|
294
314
|
}
|
|
295
315
|
|
|
296
316
|
const pollPromise = poll()
|
|
@@ -336,7 +356,3 @@ export class PdfPreprocessor implements Preprocessor {
|
|
|
336
356
|
await Promise.all(entries.map(handle))
|
|
337
357
|
}
|
|
338
358
|
}
|
|
339
|
-
|
|
340
|
-
function sleep(ms: number): Promise<void> {
|
|
341
|
-
return new Promise(resolve => setTimeout(resolve, ms))
|
|
342
|
-
}
|