@nocobase/app-plugin-agents 1.0.0-beta.20 → 1.0.0-beta.22
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/CHANGELOG.md +46 -0
- package/README.md +72 -12
- package/dist/cli/runner-token.js +1 -1
- package/dist/cli/runner-token.js.map +1 -1
- package/dist/client/chat/agent-mode.d.ts +47 -0
- package/dist/client/chat/agent-mode.d.ts.map +1 -0
- package/dist/client/chat/agent-mode.js +78 -0
- package/dist/client/chat/agent-mode.js.map +1 -0
- package/dist/client/chat/api.d.ts +2 -1
- package/dist/client/chat/api.d.ts.map +1 -1
- package/dist/client/chat/api.js +21 -5
- package/dist/client/chat/api.js.map +1 -1
- package/dist/client/chat/controller.d.ts +26 -0
- package/dist/client/chat/controller.d.ts.map +1 -1
- package/dist/client/chat/controller.js +328 -7
- package/dist/client/chat/controller.js.map +1 -1
- package/dist/client/chat/message-model.d.ts +10 -3
- package/dist/client/chat/message-model.d.ts.map +1 -1
- package/dist/client/chat/message-model.js +32 -4
- package/dist/client/chat/message-model.js.map +1 -1
- package/dist/client/chat/panel-state.d.ts +3 -0
- package/dist/client/chat/panel-state.d.ts.map +1 -1
- package/dist/client/chat/panel-state.js +4 -6
- package/dist/client/chat/panel-state.js.map +1 -1
- package/dist/client/chat/provider.d.ts +13 -2
- package/dist/client/chat/provider.d.ts.map +1 -1
- package/dist/client/chat/provider.js +25 -2
- package/dist/client/chat/provider.js.map +1 -1
- package/dist/client/chat/use-chat.d.ts +8 -1
- package/dist/client/chat/use-chat.d.ts.map +1 -1
- package/dist/client/chat/use-chat.js +28 -4
- package/dist/client/chat/use-chat.js.map +1 -1
- package/dist/client/chat/use-conversation-model.d.ts +4 -1
- package/dist/client/chat/use-conversation-model.d.ts.map +1 -1
- package/dist/client/chat/use-conversation-model.js +4 -3
- package/dist/client/chat/use-conversation-model.js.map +1 -1
- package/dist/client/chat.d.ts +6 -0
- package/dist/client/chat.d.ts.map +1 -1
- package/dist/client/chat.js +2 -0
- package/dist/client/chat.js.map +1 -1
- package/dist/client/components/command-line.d.ts +2 -1
- package/dist/client/components/command-line.d.ts.map +1 -1
- package/dist/client/components/command-line.js +2 -2
- package/dist/client/components/command-line.js.map +1 -1
- package/dist/client/components/variables/variable-dialogs.js +2 -2
- package/dist/client/components/variables/variable-dialogs.js.map +1 -1
- package/dist/client/lib/install.d.ts +3 -3
- package/dist/client/lib/install.d.ts.map +1 -1
- package/dist/client/lib/install.js +3 -5
- package/dist/client/lib/install.js.map +1 -1
- package/dist/client/lib/runner-tools.d.ts +4 -0
- package/dist/client/lib/runner-tools.d.ts.map +1 -0
- package/dist/client/lib/runner-tools.js +5 -0
- package/dist/client/lib/runner-tools.js.map +1 -0
- package/dist/client/locales/chat.en-US.d.ts +17 -0
- package/dist/client/locales/chat.en-US.d.ts.map +1 -1
- package/dist/client/locales/chat.en-US.js +17 -0
- package/dist/client/locales/chat.en-US.js.map +1 -1
- package/dist/client/locales/chat.zh-CN.d.ts.map +1 -1
- package/dist/client/locales/chat.zh-CN.js +17 -0
- package/dist/client/locales/chat.zh-CN.js.map +1 -1
- package/dist/client/locales/de-DE.d.ts.map +1 -1
- package/dist/client/locales/de-DE.js +8 -1
- package/dist/client/locales/de-DE.js.map +1 -1
- package/dist/client/locales/en-US.js +9 -9
- package/dist/client/locales/en-US.js.map +1 -1
- package/dist/client/locales/es-ES.d.ts.map +1 -1
- package/dist/client/locales/es-ES.js +8 -1
- package/dist/client/locales/es-ES.js.map +1 -1
- package/dist/client/locales/fr-FR.d.ts.map +1 -1
- package/dist/client/locales/fr-FR.js +8 -1
- package/dist/client/locales/fr-FR.js.map +1 -1
- package/dist/client/locales/id-ID.d.ts.map +1 -1
- package/dist/client/locales/id-ID.js +8 -1
- package/dist/client/locales/id-ID.js.map +1 -1
- package/dist/client/locales/ja-JP.d.ts.map +1 -1
- package/dist/client/locales/ja-JP.js +8 -1
- package/dist/client/locales/ja-JP.js.map +1 -1
- package/dist/client/locales/pt-BR.d.ts.map +1 -1
- package/dist/client/locales/pt-BR.js +8 -1
- package/dist/client/locales/pt-BR.js.map +1 -1
- package/dist/client/locales/runWait.en-US.js +1 -1
- package/dist/client/locales/runWait.en-US.js.map +1 -1
- package/dist/client/locales/runWait.zh-CN.js +1 -1
- package/dist/client/locales/runtimes.en-US.d.ts +10 -1
- package/dist/client/locales/runtimes.en-US.d.ts.map +1 -1
- package/dist/client/locales/runtimes.en-US.js +18 -9
- package/dist/client/locales/runtimes.en-US.js.map +1 -1
- package/dist/client/locales/runtimes.zh-CN.d.ts.map +1 -1
- package/dist/client/locales/runtimes.zh-CN.js +18 -9
- package/dist/client/locales/runtimes.zh-CN.js.map +1 -1
- package/dist/client/locales/vi-VN.d.ts.map +1 -1
- package/dist/client/locales/vi-VN.js +8 -1
- package/dist/client/locales/vi-VN.js.map +1 -1
- package/dist/client/locales/zh-CN.js +9 -9
- package/dist/client/locales/zh-CN.js.map +1 -1
- package/dist/client/locales/zh-TW.d.ts.map +1 -1
- package/dist/client/locales/zh-TW.js +8 -1
- package/dist/client/locales/zh-TW.js.map +1 -1
- package/dist/client/online/service-editor.js +6 -1
- package/dist/client/online/service-editor.js.map +1 -1
- package/dist/client/pages/runtimes/connect.js +18 -8
- package/dist/client/pages/runtimes/connect.js.map +1 -1
- package/dist/client/pages/runtimes/index.js +1 -1
- package/dist/client/pages/runtimes/runner-overview.d.ts.map +1 -1
- package/dist/client/pages/runtimes/runner-overview.js +3 -2
- package/dist/client/pages/runtimes/runner-overview.js.map +1 -1
- package/dist/client/pages/usage/prices/model.d.ts +1 -1
- package/dist/client/pages/usage/prices/model.js +1 -1
- package/dist/client/plugin.js +1 -1
- package/dist/client/plugin.js.map +1 -1
- package/dist/client/routes.d.ts +1 -1
- package/dist/database/migrations/.manifest.json +4 -0
- package/dist/database/migrations/202610290001_ag_repair_runner_agents.d.ts +5 -0
- package/dist/database/migrations/202610290001_ag_repair_runner_agents.d.ts.map +1 -0
- package/dist/database/migrations/202610290001_ag_repair_runner_agents.js +72 -0
- package/dist/database/migrations/202610290001_ag_repair_runner_agents.js.map +1 -0
- package/dist/package.json +18 -1
- package/dist/server/composition.d.ts +2 -0
- package/dist/server/composition.d.ts.map +1 -1
- package/dist/server/composition.js +13 -3
- package/dist/server/composition.js.map +1 -1
- package/dist/server/core/agents/agent.store.d.ts +5 -3
- package/dist/server/core/agents/agent.store.d.ts.map +1 -1
- package/dist/server/core/agents/agent.store.js +25 -6
- package/dist/server/core/agents/agent.store.js.map +1 -1
- package/dist/server/core/conversations/attachments.d.ts +1 -1
- package/dist/server/core/conversations/attachments.d.ts.map +1 -1
- package/dist/server/core/conversations/attachments.js +2 -2
- package/dist/server/core/conversations/attachments.js.map +1 -1
- package/dist/server/core/conversations/availability.d.ts +1 -1
- package/dist/server/core/conversations/conversation.service.d.ts.map +1 -1
- package/dist/server/core/conversations/conversation.service.js +7 -0
- package/dist/server/core/conversations/conversation.service.js.map +1 -1
- package/dist/server/core/runs/claim.js +6 -6
- package/dist/server/core/runs/claim.js.map +1 -1
- package/dist/server/core/runs/eligibility.d.ts +3 -3
- package/dist/server/core/runs/eligibility.d.ts.map +1 -1
- package/dist/server/core/runs/run-requests.js +1 -1
- package/dist/server/core/runs/run-requests.js.map +1 -1
- package/dist/server/core/runs/run.service.d.ts +1 -1
- package/dist/server/core/runs/run.store.d.ts +1 -1
- package/dist/server/core/runs/run.store.d.ts.map +1 -1
- package/dist/server/core/runs/workload.js +1 -1
- package/dist/server/core/runs/workload.js.map +1 -1
- package/dist/server/core/variables/variable.service.d.ts +2 -2
- package/dist/server/core/variables/variable.service.js +1 -1
- package/dist/server/core/variables/variable.service.js.map +1 -1
- package/dist/server/index.d.ts +3 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/jobs/job.service.d.ts +1 -1
- package/dist/server/jobs/job.service.js +1 -1
- package/dist/server/jobs/spec.d.ts +1 -1
- package/dist/server/jobs/spec.d.ts.map +1 -1
- package/dist/server/jobs/spec.js +2 -2
- package/dist/server/jobs/spec.js.map +1 -1
- package/dist/server/kernel/events.d.ts +9 -0
- package/dist/server/kernel/events.d.ts.map +1 -1
- package/dist/server/kernel/events.js.map +1 -1
- package/dist/server/online/agent/configuration.d.ts +2 -0
- package/dist/server/online/agent/configuration.d.ts.map +1 -1
- package/dist/server/online/agent/configuration.js +21 -2
- package/dist/server/online/agent/configuration.js.map +1 -1
- package/dist/server/online/agent/contracts.d.ts +5 -3
- package/dist/server/online/agent/contracts.d.ts.map +1 -1
- package/dist/server/online/agent/index.d.ts +1 -0
- package/dist/server/online/agent/index.d.ts.map +1 -1
- package/dist/server/online/agent/index.js.map +1 -1
- package/dist/server/online/agent/messages/projection.d.ts.map +1 -1
- package/dist/server/online/agent/messages/projection.js +3 -0
- package/dist/server/online/agent/messages/projection.js.map +1 -1
- package/dist/server/online/agent/messages/resend.d.ts +7 -0
- package/dist/server/online/agent/messages/resend.d.ts.map +1 -0
- package/dist/server/online/agent/messages/resend.js +58 -0
- package/dist/server/online/agent/messages/resend.js.map +1 -0
- package/dist/server/online/agent/native/backend.d.ts +6 -0
- package/dist/server/online/agent/native/backend.d.ts.map +1 -1
- package/dist/server/online/agent/native/backend.js +17 -24
- package/dist/server/online/agent/native/backend.js.map +1 -1
- package/dist/server/online/agent/native/execution.d.ts +8 -12
- package/dist/server/online/agent/native/execution.d.ts.map +1 -1
- package/dist/server/online/agent/native/execution.js +89 -17
- package/dist/server/online/agent/native/execution.js.map +1 -1
- package/dist/server/online/agent/native/session.d.ts +2 -0
- package/dist/server/online/agent/native/session.d.ts.map +1 -1
- package/dist/server/online/agent/native/session.js +11 -0
- package/dist/server/online/agent/native/session.js.map +1 -1
- package/dist/server/online/agent/native/types.d.ts +20 -0
- package/dist/server/online/agent/native/types.d.ts.map +1 -1
- package/dist/server/online/agent/persistence/manager.d.ts +1 -2
- package/dist/server/online/agent/persistence/manager.d.ts.map +1 -1
- package/dist/server/online/agent/persistence/manager.js +0 -7
- package/dist/server/online/agent/persistence/manager.js.map +1 -1
- package/dist/server/online/agent/persistence/store.d.ts +25 -7
- package/dist/server/online/agent/persistence/store.d.ts.map +1 -1
- package/dist/server/online/agent/persistence/store.js +165 -47
- package/dist/server/online/agent/persistence/store.js.map +1 -1
- package/dist/server/online/agent/runner/backend.d.ts +1 -0
- package/dist/server/online/agent/runner/backend.d.ts.map +1 -1
- package/dist/server/online/agent/runner/backend.js +3 -0
- package/dist/server/online/agent/runner/backend.js.map +1 -1
- package/dist/server/online/agent/service.d.ts +4 -0
- package/dist/server/online/agent/service.d.ts.map +1 -1
- package/dist/server/online/agent/service.js +2 -0
- package/dist/server/online/agent/service.js.map +1 -1
- package/dist/server/online/agent/types.d.ts +5 -0
- package/dist/server/online/agent/types.d.ts.map +1 -1
- package/dist/server/online/agent/web-search.d.ts +13 -0
- package/dist/server/online/agent/web-search.d.ts.map +1 -0
- package/dist/server/online/agent/web-search.js +65 -0
- package/dist/server/online/agent/web-search.js.map +1 -0
- package/dist/server/online/files/cache.d.ts +19 -0
- package/dist/server/online/files/cache.d.ts.map +1 -0
- package/dist/server/online/files/cache.js +52 -0
- package/dist/server/online/files/cache.js.map +1 -0
- package/dist/server/online/files/errors.d.ts +8 -0
- package/dist/server/online/files/errors.d.ts.map +1 -0
- package/dist/server/online/files/errors.js +14 -0
- package/dist/server/online/files/errors.js.map +1 -0
- package/dist/server/online/files/input.d.ts +23 -0
- package/dist/server/online/files/input.d.ts.map +1 -0
- package/dist/server/online/files/input.js +129 -0
- package/dist/server/online/files/input.js.map +1 -0
- package/dist/server/online/files/kimi.d.ts +11 -0
- package/dist/server/online/files/kimi.d.ts.map +1 -0
- package/dist/server/online/files/kimi.js +177 -0
- package/dist/server/online/files/kimi.js.map +1 -0
- package/dist/server/online/files/profiles.d.ts +13 -0
- package/dist/server/online/files/profiles.d.ts.map +1 -0
- package/dist/server/online/files/profiles.js +124 -0
- package/dist/server/online/files/profiles.js.map +1 -0
- package/dist/server/online/files/service.d.ts +35 -0
- package/dist/server/online/files/service.d.ts.map +1 -0
- package/dist/server/online/files/service.js +174 -0
- package/dist/server/online/files/service.js.map +1 -0
- package/dist/server/online/files/types.d.ts +32 -0
- package/dist/server/online/files/types.d.ts.map +1 -0
- package/dist/server/online/files/types.js +2 -0
- package/dist/server/online/files/types.js.map +1 -0
- package/dist/server/online/gateway.d.ts +13 -0
- package/dist/server/online/gateway.d.ts.map +1 -1
- package/dist/server/online/gateway.js +116 -2
- package/dist/server/online/gateway.js.map +1 -1
- package/dist/server/online/index.d.ts +1 -1
- package/dist/server/online/index.d.ts.map +1 -1
- package/dist/server/online/index.js.map +1 -1
- package/dist/server/online/providers.d.ts +6 -0
- package/dist/server/online/providers.d.ts.map +1 -1
- package/dist/server/online/providers.js +29 -1
- package/dist/server/online/providers.js.map +1 -1
- package/dist/server/online/search/alibaba.d.ts +10 -0
- package/dist/server/online/search/alibaba.d.ts.map +1 -0
- package/dist/server/online/search/alibaba.js +34 -0
- package/dist/server/online/search/alibaba.js.map +1 -0
- package/dist/server/online/search/anthropic.d.ts +12 -0
- package/dist/server/online/search/anthropic.d.ts.map +1 -0
- package/dist/server/online/search/anthropic.js +62 -0
- package/dist/server/online/search/anthropic.js.map +1 -0
- package/dist/server/online/search/budget.d.ts +13 -0
- package/dist/server/online/search/budget.d.ts.map +1 -0
- package/dist/server/online/search/budget.js +63 -0
- package/dist/server/online/search/budget.js.map +1 -0
- package/dist/server/online/search/capabilities.d.ts +7 -0
- package/dist/server/online/search/capabilities.d.ts.map +1 -0
- package/dist/server/online/search/capabilities.js +90 -0
- package/dist/server/online/search/capabilities.js.map +1 -0
- package/dist/server/online/search/contracts.d.ts +20 -0
- package/dist/server/online/search/contracts.d.ts.map +1 -0
- package/dist/server/online/search/contracts.js +2 -0
- package/dist/server/online/search/contracts.js.map +1 -0
- package/dist/server/online/search/google.d.ts +12 -0
- package/dist/server/online/search/google.d.ts.map +1 -0
- package/dist/server/online/search/google.js +51 -0
- package/dist/server/online/search/google.js.map +1 -0
- package/dist/server/online/search/openai.d.ts +18 -0
- package/dist/server/online/search/openai.d.ts.map +1 -0
- package/dist/server/online/search/openai.js +51 -0
- package/dist/server/online/search/openai.js.map +1 -0
- package/dist/server/online/search/prompts.d.ts +5 -0
- package/dist/server/online/search/prompts.d.ts.map +1 -0
- package/dist/server/online/search/prompts.js +28 -0
- package/dist/server/online/search/prompts.js.map +1 -0
- package/dist/server/online/search/results.d.ts +2 -0
- package/dist/server/online/search/results.d.ts.map +1 -0
- package/dist/server/online/search/results.js +2 -0
- package/dist/server/online/search/results.js.map +1 -0
- package/dist/server/online/services.d.ts +2 -0
- package/dist/server/online/services.d.ts.map +1 -1
- package/dist/server/online/services.js +17 -2
- package/dist/server/online/services.js.map +1 -1
- package/dist/server/providers/agents.d.ts +1 -0
- package/dist/server/providers/agents.d.ts.map +1 -1
- package/dist/server/providers/agents.js +12 -0
- package/dist/server/providers/agents.js.map +1 -1
- package/dist/server/providers/authorization.d.ts +2 -2
- package/dist/server/providers/authorization.js +2 -2
- package/dist/server/routes/admin.js +3 -3
- package/dist/server/routes/admin.js.map +1 -1
- package/dist/server/routes/chat.d.ts.map +1 -1
- package/dist/server/routes/chat.js +34 -1
- package/dist/server/routes/chat.js.map +1 -1
- package/dist/server/routes/run-requests.js +1 -1
- package/dist/server/routes/run-requests.js.map +1 -1
- package/dist/server/routes/runners/admin.js +6 -6
- package/dist/server/routes/runners/admin.js.map +1 -1
- package/dist/server/routes/runners/install.js +1 -1
- package/dist/server/routes/schemas.d.ts +3 -0
- package/dist/server/routes/schemas.d.ts.map +1 -1
- package/dist/server/routes/schemas.js +25 -6
- package/dist/server/routes/schemas.js.map +1 -1
- package/dist/server/runners/runner.service.js +1 -1
- package/dist/server/vendor/just-bash.js +117 -117
- package/dist/shared/access.d.ts +2 -2
- package/dist/shared/access.js +2 -2
- package/dist/shared/agents.d.ts +2 -2
- package/dist/shared/agents.d.ts.map +1 -1
- package/dist/shared/conversations.d.ts +13 -1
- package/dist/shared/conversations.d.ts.map +1 -1
- package/dist/shared/conversations.js.map +1 -1
- package/dist/shared/file-input-failures.d.ts +5 -0
- package/dist/shared/file-input-failures.d.ts.map +1 -0
- package/dist/shared/file-input-failures.js +20 -0
- package/dist/shared/file-input-failures.js.map +1 -0
- package/dist/shared/locales/access.en-US.js +3 -3
- package/dist/shared/locales/access.en-US.js.map +1 -1
- package/dist/shared/locales/access.zh-CN.js +3 -3
- package/dist/shared/locales/access.zh-CN.js.map +1 -1
- package/dist/shared/models.d.ts +11 -0
- package/dist/shared/models.d.ts.map +1 -1
- package/dist/shared/models.js.map +1 -1
- package/dist/shared/resend.d.ts +10 -0
- package/dist/shared/resend.d.ts.map +1 -0
- package/dist/shared/resend.js +2 -0
- package/dist/shared/resend.js.map +1 -0
- package/dist/shared/runners.d.ts +4 -4
- package/dist/shared/runners.d.ts.map +1 -1
- package/dist/shared/runners.js +2 -2
- package/dist/shared/runs.d.ts +5 -5
- package/dist/shared/runs.d.ts.map +1 -1
- package/dist/shared/runs.js +1 -1
- package/dist/shared/variables.d.ts +3 -3
- package/dist/shared/variables.d.ts.map +1 -1
- package/dist/shared/variables.js +1 -1
- package/dist/shared/web-search-results.d.ts +16 -0
- package/dist/shared/web-search-results.d.ts.map +1 -0
- package/dist/shared/web-search-results.js +103 -0
- package/dist/shared/web-search-results.js.map +1 -0
- package/dist/shared/web-search.d.ts +40 -0
- package/dist/shared/web-search.d.ts.map +1 -0
- package/dist/shared/web-search.js +15 -0
- package/dist/shared/web-search.js.map +1 -0
- package/docs/execution-history.md +1 -1
- package/docs/message-resend.md +39 -0
- package/docs/native-web-search.md +76 -0
- package/docs/runner-agents.md +3 -3
- package/docs/ui-message-clients.md +7 -1
- package/package.json +11 -2
- package/skills/nocobase-app-plugin-agents/SKILL.md +9 -2
- package/skills/nocobase-app-plugin-agents/references/extension-points.md +1 -1
- package/skills/nocobase-app-plugin-agents/references/online-agent.md +9 -1
- package/skills/nocobase-app-plugin-agents/references/runners.md +7 -3
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { WebSearchBudget } from '../search/budget.js';
|
|
1
2
|
import type { OnlineAgentSandbox } from '../sandbox/types.js';
|
|
2
3
|
import type { Tool, ModelMessage, UIMessage, UIMessageChunk } from 'ai';
|
|
3
4
|
import type { AuthorizationContext } from '@nocobase/authorization/core';
|
|
@@ -31,6 +32,8 @@ export type OnlineAgentToolContext = OnlineAgentContext & {
|
|
|
31
32
|
/** The executing session, supplied by the runtime rather than model or page input. */
|
|
32
33
|
readonly sessionId: string;
|
|
33
34
|
readonly signal: AbortSignal;
|
|
35
|
+
readonly selectedModel?: Readonly<ModelRef>;
|
|
36
|
+
readonly webSearchBudget?: WebSearchBudget;
|
|
34
37
|
readonly execution: OnlineAgentToolExecution;
|
|
35
38
|
};
|
|
36
39
|
export type OnlineAgentScope = {
|
|
@@ -47,6 +50,7 @@ export type OnlineAgentScope = {
|
|
|
47
50
|
skill?: string[];
|
|
48
51
|
model?: string[];
|
|
49
52
|
thinking?: string;
|
|
53
|
+
webSearch?: boolean;
|
|
50
54
|
permissions?: never;
|
|
51
55
|
};
|
|
52
56
|
export type OnlineAgentScopeProvider = (context: OnlineAgentContext) => OnlineAgentScope | Promise<OnlineAgentScope>;
|
|
@@ -64,6 +68,7 @@ export type OnlineAgentConfig = {
|
|
|
64
68
|
/** Missing and empty lists are unrestricted; preserve their distinct shapes. */
|
|
65
69
|
model?: string[];
|
|
66
70
|
thinking?: string;
|
|
71
|
+
webSearch?: boolean;
|
|
67
72
|
};
|
|
68
73
|
export type OnlineAgentToolDefinition<I, O extends OnlineAgentJson, C = OnlineAgentToolContext> = Tool<I, O, C> & {
|
|
69
74
|
execute: NonNullable<Tool<I, O, C>['execute']>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../server/online/agent/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../server/online/agent/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ModelCapabilities, ModelRef } from '../../../shared/models.js';
|
|
2
|
+
import type { WebSearchResult } from '../../../shared/web-search.js';
|
|
3
|
+
import type { WebSearchRequest } from '../gateway.js';
|
|
4
|
+
import type { OnlineAgentConfigurator } from './configuration.js';
|
|
5
|
+
import type { OnlineAgentConfig } from './types.js';
|
|
6
|
+
export interface OnlineAgentWebSearch {
|
|
7
|
+
capabilities(model: ModelRef): Promise<ModelCapabilities>;
|
|
8
|
+
search(request: WebSearchRequest): Promise<WebSearchResult>;
|
|
9
|
+
}
|
|
10
|
+
/** Validate before admission; an inherited preference may be cleared only during an explicit model switch. */
|
|
11
|
+
export declare function validateWebSearch(config: OnlineAgentConfig, model: ModelRef, dependency: OnlineAgentWebSearch | undefined, clearInherited?: boolean): Promise<void>;
|
|
12
|
+
export declare function registerWebSearchTool(configurator: OnlineAgentConfigurator, dependency: OnlineAgentWebSearch | undefined): void;
|
|
13
|
+
//# sourceMappingURL=web-search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-search.d.ts","sourceRoot":"","sources":["../../../../server/online/agent/web-search.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAE7E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGtD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,MAAM,WAAW,oBAAoB;IACnC,YAAY,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC1D,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;CAC7D;AAED,8GAA8G;AAC9G,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,iBAAiB,EACzB,KAAK,EAAE,QAAQ,EACf,UAAU,EAAE,oBAAoB,GAAG,SAAS,EAC5C,cAAc,GAAE,OAAe,GAC9B,OAAO,CAAC,IAAI,CAAC,CAYf;AAMD,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,uBAAuB,EACrC,UAAU,EAAE,oBAAoB,GAAG,SAAS,GAC3C,IAAI,CA+CN"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { WEB_SEARCH_TOOL_DESCRIPTION } from '../search/prompts.js';
|
|
2
|
+
import { WEB_SEARCH_TOOL } from '../../../shared/web-search.js';
|
|
3
|
+
import { publicSearchResult, WebSearchInputSchema } from '../search/results.js';
|
|
4
|
+
import { invalid } from '../../kernel/errors.js';
|
|
5
|
+
/** Validate before admission; an inherited preference may be cleared only during an explicit model switch. */
|
|
6
|
+
export async function validateWebSearch(config, model, dependency, clearInherited = false) {
|
|
7
|
+
if (!config.webSearch)
|
|
8
|
+
return;
|
|
9
|
+
if (!dependency)
|
|
10
|
+
throw invalid('Native web search is unavailable.');
|
|
11
|
+
if ((await dependency.capabilities(model)).webSearch)
|
|
12
|
+
return;
|
|
13
|
+
if (clearInherited) {
|
|
14
|
+
config.webSearch = false;
|
|
15
|
+
delete config.toolVersions[WEB_SEARCH_TOOL];
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
throw invalid('Web search is unavailable for the selected model. Refresh model configuration.');
|
|
19
|
+
}
|
|
20
|
+
const registrations = new WeakMap();
|
|
21
|
+
export function registerWebSearchTool(configurator, dependency) {
|
|
22
|
+
if (registrations.has(configurator)) {
|
|
23
|
+
if (dependency !== undefined &&
|
|
24
|
+
dependency !== registrations.get(configurator))
|
|
25
|
+
throw invalid('This configurator already owns a different web search dependency.');
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
configurator.registerTool(WEB_SEARCH_TOOL, {
|
|
29
|
+
version: '1',
|
|
30
|
+
definition: {
|
|
31
|
+
description: WEB_SEARCH_TOOL_DESCRIPTION,
|
|
32
|
+
inputSchema: WebSearchInputSchema,
|
|
33
|
+
public: {
|
|
34
|
+
input: (input) => WebSearchInputSchema.parse(input),
|
|
35
|
+
output: (output) => publicSearchResult(output),
|
|
36
|
+
},
|
|
37
|
+
toModelOutput: ({ output }) => ({
|
|
38
|
+
type: 'text',
|
|
39
|
+
value: `Untrusted search output (unverified results do not establish search execution, freshness or sources):\n${JSON.stringify(publicSearchResult(output))}`,
|
|
40
|
+
}),
|
|
41
|
+
execute: async (input, { context, abortSignal, toolCallId }) => {
|
|
42
|
+
context.signal.throwIfAborted();
|
|
43
|
+
if (!dependency || !context.selectedModel || !context.webSearchBudget)
|
|
44
|
+
throw invalid('Native web search is unavailable.');
|
|
45
|
+
const signal = abortSignal
|
|
46
|
+
? AbortSignal.any([context.signal, abortSignal])
|
|
47
|
+
: context.signal;
|
|
48
|
+
signal.throwIfAborted();
|
|
49
|
+
context.webSearchBudget.reserve(toolCallId, input.queries);
|
|
50
|
+
const result = await dependency.search({
|
|
51
|
+
model: context.selectedModel,
|
|
52
|
+
queries: input.queries,
|
|
53
|
+
sessionId: context.sessionId,
|
|
54
|
+
signal,
|
|
55
|
+
budget: context.webSearchBudget,
|
|
56
|
+
source: 'agents.webSearch',
|
|
57
|
+
});
|
|
58
|
+
signal.throwIfAborted();
|
|
59
|
+
return publicSearchResult(result);
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
registrations.set(configurator, dependency);
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=web-search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web-search.js","sourceRoot":"","sources":["../../../../server/online/agent/web-search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** Completed local results only; neither permissions nor in-flight executions are shared. */
|
|
2
|
+
export declare class ExtractedDocumentCache {
|
|
3
|
+
private readonly entries;
|
|
4
|
+
private bytes;
|
|
5
|
+
private readonly ttlMs;
|
|
6
|
+
private readonly maxEntries;
|
|
7
|
+
private readonly maxBytes;
|
|
8
|
+
private readonly now;
|
|
9
|
+
constructor(options?: {
|
|
10
|
+
ttlMs?: number;
|
|
11
|
+
maxEntries?: number;
|
|
12
|
+
maxBytes?: number;
|
|
13
|
+
now?: () => number;
|
|
14
|
+
});
|
|
15
|
+
get(key: string): string | undefined;
|
|
16
|
+
set(key: string, text: string): void;
|
|
17
|
+
private remove;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../../../server/online/files/cache.ts"],"names":[],"mappings":"AAMA,6FAA6F;AAC7F,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IACzD,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;gBAGjC,OAAO,GAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;KACf;IAaR,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAYpC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAgBpC,OAAO,CAAC,MAAM;CAKf"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/** Completed local results only; neither permissions nor in-flight executions are shared. */
|
|
2
|
+
export class ExtractedDocumentCache {
|
|
3
|
+
entries = new Map();
|
|
4
|
+
bytes = 0;
|
|
5
|
+
ttlMs;
|
|
6
|
+
maxEntries;
|
|
7
|
+
maxBytes;
|
|
8
|
+
now;
|
|
9
|
+
constructor(options = {}) {
|
|
10
|
+
this.ttlMs = options.ttlMs ?? 30 * 60_000;
|
|
11
|
+
this.maxEntries = options.maxEntries ?? 128;
|
|
12
|
+
this.maxBytes = options.maxBytes ?? 32 * 1024 * 1024;
|
|
13
|
+
this.now = options.now ?? Date.now;
|
|
14
|
+
for (const value of [this.ttlMs, this.maxEntries, this.maxBytes])
|
|
15
|
+
if (!Number.isSafeInteger(value) || value < 0)
|
|
16
|
+
throw new RangeError('Cache limits must be non-negative safe integers.');
|
|
17
|
+
}
|
|
18
|
+
get(key) {
|
|
19
|
+
const entry = this.entries.get(key);
|
|
20
|
+
if (!entry)
|
|
21
|
+
return undefined;
|
|
22
|
+
if (entry.expiresAt <= this.now()) {
|
|
23
|
+
this.remove(key);
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
this.entries.delete(key);
|
|
27
|
+
this.entries.set(key, entry);
|
|
28
|
+
return entry.text;
|
|
29
|
+
}
|
|
30
|
+
set(key, text) {
|
|
31
|
+
this.remove(key);
|
|
32
|
+
const bytes = Buffer.byteLength(text);
|
|
33
|
+
if (!this.ttlMs || !this.maxEntries || bytes > this.maxBytes)
|
|
34
|
+
return;
|
|
35
|
+
const now = this.now();
|
|
36
|
+
for (const [id, entry] of this.entries)
|
|
37
|
+
if (entry.expiresAt <= now)
|
|
38
|
+
this.remove(id);
|
|
39
|
+
while (this.entries.size >= this.maxEntries ||
|
|
40
|
+
this.bytes + bytes > this.maxBytes)
|
|
41
|
+
this.remove(this.entries.keys().next().value);
|
|
42
|
+
this.entries.set(key, { text, bytes, expiresAt: now + this.ttlMs });
|
|
43
|
+
this.bytes += bytes;
|
|
44
|
+
}
|
|
45
|
+
remove(key) {
|
|
46
|
+
const entry = this.entries.get(key);
|
|
47
|
+
if (entry)
|
|
48
|
+
this.bytes -= entry.bytes;
|
|
49
|
+
this.entries.delete(key);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../../../server/online/files/cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ProtocolError } from '../../kernel/errors.js';
|
|
2
|
+
import { type FileInputFailureReason } from '../../../shared/file-input-failures.js';
|
|
3
|
+
/** A controlled preparation failure, distinct from arbitrary extractor or Provider errors. */
|
|
4
|
+
export declare class FileInputError extends ProtocolError {
|
|
5
|
+
readonly fileInputReason: FileInputFailureReason;
|
|
6
|
+
constructor(reason: FileInputFailureReason);
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../../server/online/files/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAGL,KAAK,sBAAsB,EAC5B,MAAM,wCAAwC,CAAC;AAEhD,8FAA8F;AAC9F,qBAAa,cAAe,SAAQ,aAAa;IAC/C,QAAQ,CAAC,eAAe,EAAE,sBAAsB,CAAC;gBACrC,MAAM,EAAE,sBAAsB;CAO3C"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ProtocolError } from '../../kernel/errors.js';
|
|
2
|
+
import { fileInputFailureTitles, isFileInputFailureReason, } from '../../../shared/file-input-failures.js';
|
|
3
|
+
/** A controlled preparation failure, distinct from arbitrary extractor or Provider errors. */
|
|
4
|
+
export class FileInputError extends ProtocolError {
|
|
5
|
+
fileInputReason;
|
|
6
|
+
constructor(reason) {
|
|
7
|
+
const safe = isFileInputFailureReason(reason)
|
|
8
|
+
? reason
|
|
9
|
+
: 'preparationFailed';
|
|
10
|
+
super('INVALID_REQUEST', fileInputFailureTitles[safe]);
|
|
11
|
+
this.fileInputReason = safe;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../../server/online/files/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EACL,sBAAsB,EACtB,wBAAwB,GAEzB,MAAM,wCAAwC,CAAC;AAEhD,8FAA8F;AAC9F,MAAM,OAAO,cAAe,SAAQ,aAAa;IACtC,eAAe,CAAyB;IACjD,YAAY,MAA8B;QACxC,MAAM,IAAI,GAAG,wBAAwB,CAAC,MAAM,CAAC;YAC3C,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,mBAAmB,CAAC;QACxB,KAAK,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC;QACvD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;IAC9B,CAAC;CACF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export declare function characters(text: string): number;
|
|
2
|
+
export declare function localExtension(filename: string, mediaType: string, storedExt?: string): string;
|
|
3
|
+
export declare function inlineBytes(url: string, mediaType: string): Uint8Array;
|
|
4
|
+
export declare class ByteLimitError extends Error {
|
|
5
|
+
}
|
|
6
|
+
export declare function readBytes(body: ReadableStream<Uint8Array>, signal: AbortSignal): Promise<Uint8Array>;
|
|
7
|
+
/** One bounded reader for authorized files and Provider responses, sharing the original cancellation. */
|
|
8
|
+
export declare function readBoundedBytes(body: ReadableStream<Uint8Array>, signal: AbortSignal, maxBytes: number): Promise<Uint8Array>;
|
|
9
|
+
/** Every occurrence counts as context, but repeated copies of one source count bytes once. */
|
|
10
|
+
export declare class FileInputBudget {
|
|
11
|
+
private readonly maxNativeFiles;
|
|
12
|
+
static readonly maxOutputChars: number;
|
|
13
|
+
private readonly sources;
|
|
14
|
+
private bytes;
|
|
15
|
+
private textChars;
|
|
16
|
+
private nativeFiles;
|
|
17
|
+
constructor(fileCount: number, maxNativeFiles: number);
|
|
18
|
+
native(): void;
|
|
19
|
+
source(key: string, bytes: number): void;
|
|
20
|
+
document(text: string): void;
|
|
21
|
+
context(text: string): void;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=input.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../../server/online/files/input.ts"],"names":[],"mappings":"AAoBA,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI/C;AAED,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM,CAmBR;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,UAAU,CAgBtE;AAED,qBAAa,cAAe,SAAQ,KAAK;CAAG;AAE5C,wBAAsB,SAAS,CAC7B,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,EAChC,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,UAAU,CAAC,CAQrB;AACD,yGAAyG;AACzG,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,cAAc,CAAC,UAAU,CAAC,EAChC,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,UAAU,CAAC,CA4BrB;AAED,8FAA8F;AAC9F,qBAAa,eAAe;IASxB,OAAO,CAAC,QAAQ,CAAC,cAAc;IARjC,MAAM,CAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAW;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAC7C,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,WAAW,CAAK;gBAGtB,SAAS,EAAE,MAAM,EACA,cAAc,EAAE,MAAM;IAKzC,MAAM,IAAI,IAAI;IAKd,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IASxC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAK5B,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;CAI5B"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { FileInputError } from './errors.js';
|
|
2
|
+
import { isParsed } from '@nocobase/document-extractor';
|
|
3
|
+
import { CHAT_ATTACHMENT_SIZE_MAX } from '../../../shared/conversations.js';
|
|
4
|
+
const mimeExtensions = {
|
|
5
|
+
'application/pdf': 'pdf',
|
|
6
|
+
'application/msword': 'doc',
|
|
7
|
+
'application/vnd.openxmlformats-officedocument.wordprocessingml.document': 'docx',
|
|
8
|
+
'application/vnd.ms-excel': 'xls',
|
|
9
|
+
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': 'xlsx',
|
|
10
|
+
'application/vnd.ms-excel.sheet.macroenabled.12': 'xlsm',
|
|
11
|
+
'application/vnd.openxmlformats-officedocument.presentationml.presentation': 'pptx',
|
|
12
|
+
'text/plain': 'txt',
|
|
13
|
+
'text/markdown': 'md',
|
|
14
|
+
'text/csv': 'csv',
|
|
15
|
+
'application/json': 'json',
|
|
16
|
+
};
|
|
17
|
+
export function characters(text) {
|
|
18
|
+
let count = 0;
|
|
19
|
+
for (const _ of text)
|
|
20
|
+
count += 1;
|
|
21
|
+
return count;
|
|
22
|
+
}
|
|
23
|
+
export function localExtension(filename, mediaType, storedExt) {
|
|
24
|
+
const named = filename.includes('.')
|
|
25
|
+
? filename.split('.').at(-1).toLowerCase()
|
|
26
|
+
: undefined;
|
|
27
|
+
const mime = mimeExtensions[mediaType];
|
|
28
|
+
const ext = storedExt?.toLowerCase() || named || mime;
|
|
29
|
+
if (!ext ||
|
|
30
|
+
!isParsed(ext) ||
|
|
31
|
+
(!mime && mediaType !== 'application/octet-stream'))
|
|
32
|
+
throw new FileInputError(mediaType.startsWith('image/') ? 'imageCapability' : 'unsupportedFormat');
|
|
33
|
+
const plainTextAlias = mime === 'txt' && ['txt', 'md', 'json', 'csv'].includes(ext);
|
|
34
|
+
if (mime && mime !== ext && !plainTextAlias)
|
|
35
|
+
throw new FileInputError('formatMismatch');
|
|
36
|
+
return ext;
|
|
37
|
+
}
|
|
38
|
+
export function inlineBytes(url, mediaType) {
|
|
39
|
+
const match = /^data:([^;,]+);base64,([A-Za-z0-9+/]*={0,2})$/u.exec(url);
|
|
40
|
+
if (!match ||
|
|
41
|
+
match[1] !== mediaType ||
|
|
42
|
+
match[2].length > Math.ceil(CHAT_ATTACHMENT_SIZE_MAX / 3) * 4)
|
|
43
|
+
throw new FileInputError('invalidInline');
|
|
44
|
+
const bytes = Buffer.from(match[2], 'base64');
|
|
45
|
+
if (bytes.byteLength > CHAT_ATTACHMENT_SIZE_MAX ||
|
|
46
|
+
bytes.toString('base64').replace(/=+$/u, '') !==
|
|
47
|
+
match[2].replace(/=+$/u, ''))
|
|
48
|
+
throw new FileInputError('invalidInline');
|
|
49
|
+
return bytes;
|
|
50
|
+
}
|
|
51
|
+
export class ByteLimitError extends Error {
|
|
52
|
+
}
|
|
53
|
+
export async function readBytes(body, signal) {
|
|
54
|
+
try {
|
|
55
|
+
return await readBoundedBytes(body, signal, CHAT_ATTACHMENT_SIZE_MAX);
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
if (error instanceof ByteLimitError)
|
|
59
|
+
throw new FileInputError('fileTooLarge');
|
|
60
|
+
throw error;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/** One bounded reader for authorized files and Provider responses, sharing the original cancellation. */
|
|
64
|
+
export async function readBoundedBytes(body, signal, maxBytes) {
|
|
65
|
+
const reader = body.getReader();
|
|
66
|
+
let cancellation;
|
|
67
|
+
const cancel = () => (cancellation ??= reader.cancel().catch(() => undefined));
|
|
68
|
+
const abort = () => {
|
|
69
|
+
void cancel();
|
|
70
|
+
};
|
|
71
|
+
signal.addEventListener('abort', abort, { once: true });
|
|
72
|
+
const chunks = [];
|
|
73
|
+
let size = 0;
|
|
74
|
+
try {
|
|
75
|
+
signal.throwIfAborted();
|
|
76
|
+
while (true) {
|
|
77
|
+
const { done, value } = await reader.read();
|
|
78
|
+
signal.throwIfAborted();
|
|
79
|
+
if (done)
|
|
80
|
+
break;
|
|
81
|
+
size += value.byteLength;
|
|
82
|
+
if (size > maxBytes)
|
|
83
|
+
throw new ByteLimitError('The input exceeds its byte budget.');
|
|
84
|
+
chunks.push(value);
|
|
85
|
+
}
|
|
86
|
+
return Buffer.concat(chunks, size);
|
|
87
|
+
}
|
|
88
|
+
finally {
|
|
89
|
+
await cancel();
|
|
90
|
+
reader.releaseLock();
|
|
91
|
+
signal.removeEventListener('abort', abort);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/** Every occurrence counts as context, but repeated copies of one source count bytes once. */
|
|
95
|
+
export class FileInputBudget {
|
|
96
|
+
maxNativeFiles;
|
|
97
|
+
static maxOutputChars = 100_000;
|
|
98
|
+
sources = new Set();
|
|
99
|
+
bytes = 0;
|
|
100
|
+
textChars = 0;
|
|
101
|
+
nativeFiles = 0;
|
|
102
|
+
constructor(fileCount, maxNativeFiles) {
|
|
103
|
+
this.maxNativeFiles = maxNativeFiles;
|
|
104
|
+
if (fileCount > 100)
|
|
105
|
+
throw new FileInputError('fileCount');
|
|
106
|
+
}
|
|
107
|
+
native() {
|
|
108
|
+
if (++this.nativeFiles > this.maxNativeFiles)
|
|
109
|
+
throw new FileInputError('nativeFileCount');
|
|
110
|
+
}
|
|
111
|
+
source(key, bytes) {
|
|
112
|
+
if (!this.sources.has(key)) {
|
|
113
|
+
this.sources.add(key);
|
|
114
|
+
this.bytes += bytes;
|
|
115
|
+
}
|
|
116
|
+
if (this.bytes > 64 * 1024 * 1024)
|
|
117
|
+
throw new FileInputError('inputTooLarge');
|
|
118
|
+
}
|
|
119
|
+
document(text) {
|
|
120
|
+
if (characters(text) > FileInputBudget.maxOutputChars)
|
|
121
|
+
throw new FileInputError('documentTooLarge');
|
|
122
|
+
}
|
|
123
|
+
context(text) {
|
|
124
|
+
this.textChars += characters(text);
|
|
125
|
+
if (this.textChars > 200_000)
|
|
126
|
+
throw new FileInputError('contextTooLarge');
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input.js","sourceRoot":"","sources":["../../../../server/online/files/input.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { TextExtractor } from '@nocobase/document-extractor';
|
|
2
|
+
import { type ModelConnection } from '../providers.js';
|
|
3
|
+
interface KimiOptions {
|
|
4
|
+
readonly timeoutMs?: number;
|
|
5
|
+
readonly cleanupTimeoutMs?: number;
|
|
6
|
+
readonly onWarning?: (message: string) => void;
|
|
7
|
+
}
|
|
8
|
+
/** Credentials and endpoint remain in this private execution-bound closure, never in messages or cache keys. */
|
|
9
|
+
export declare function kimiExtractor(connection: ModelConnection, sessionId: string, options?: KimiOptions): TextExtractor;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=kimi.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kimi.d.ts","sourceRoot":"","sources":["../../../../server/online/files/kimi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,aAAa,EACd,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,iBAAiB,CAAC;AAQzB,UAAU,WAAW;IACnB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAChD;AAoOD,gHAAgH;AAChH,wBAAgB,aAAa,CAC3B,UAAU,EAAE,eAAe,EAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,WAAgB,GACxB,aAAa,CAIf"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { CHAT_ATTACHMENT_SIZE_MAX } from '../../../shared/conversations.js';
|
|
2
|
+
import { baseUrlOf, headersOf, modelFetch, } from '../providers.js';
|
|
3
|
+
import { ByteLimitError, characters, FileInputBudget, readBoundedBytes, } from './input.js';
|
|
4
|
+
/** A single connection-bound protocol adapter, with no retries or cross-execution results. */
|
|
5
|
+
class KimiExtractor {
|
|
6
|
+
filesUrl;
|
|
7
|
+
headers;
|
|
8
|
+
timeoutMs;
|
|
9
|
+
cleanupTimeoutMs;
|
|
10
|
+
warn;
|
|
11
|
+
constructor(connection, sessionId, options) {
|
|
12
|
+
const base = baseUrlOf(connection);
|
|
13
|
+
if (!base || !connection.apiKey)
|
|
14
|
+
throw new Error('Kimi file extraction requires a valid service endpoint and explicit API key.');
|
|
15
|
+
const url = new URL(base);
|
|
16
|
+
if (!['https:', 'http:'].includes(url.protocol) ||
|
|
17
|
+
url.username ||
|
|
18
|
+
url.password ||
|
|
19
|
+
url.search ||
|
|
20
|
+
url.hash)
|
|
21
|
+
throw new Error('Invalid Kimi file extraction service endpoint.');
|
|
22
|
+
this.filesUrl = `${base.replace(/\/+$/u, '')}/files`;
|
|
23
|
+
this.headers = new Headers({
|
|
24
|
+
...headersOf(connection, sessionId),
|
|
25
|
+
Authorization: `Bearer ${connection.apiKey}`,
|
|
26
|
+
});
|
|
27
|
+
this.timeoutMs = options.timeoutMs ?? 300_000;
|
|
28
|
+
this.cleanupTimeoutMs = options.cleanupTimeoutMs ?? 5_000;
|
|
29
|
+
if (!Number.isSafeInteger(this.timeoutMs) ||
|
|
30
|
+
this.timeoutMs < 1 ||
|
|
31
|
+
this.timeoutMs > 300_000 ||
|
|
32
|
+
!Number.isSafeInteger(this.cleanupTimeoutMs) ||
|
|
33
|
+
this.cleanupTimeoutMs < 1 ||
|
|
34
|
+
this.cleanupTimeoutMs > 5_000)
|
|
35
|
+
throw new RangeError('Invalid Kimi extraction deadline.');
|
|
36
|
+
this.warn = options.onWarning ?? ((message) => console.warn(message));
|
|
37
|
+
}
|
|
38
|
+
async extract(request, options = {}) {
|
|
39
|
+
const deadline = AbortSignal.timeout(this.timeoutMs);
|
|
40
|
+
const signal = options.signal
|
|
41
|
+
? AbortSignal.any([options.signal, deadline])
|
|
42
|
+
: deadline;
|
|
43
|
+
const maxChars = options.maxOutputChars ?? FileInputBudget.maxOutputChars;
|
|
44
|
+
let id;
|
|
45
|
+
let attempted = false;
|
|
46
|
+
let result;
|
|
47
|
+
try {
|
|
48
|
+
signal.throwIfAborted();
|
|
49
|
+
if (request.bytes.byteLength > CHAT_ATTACHMENT_SIZE_MAX)
|
|
50
|
+
throw new ByteLimitError();
|
|
51
|
+
if (!Number.isSafeInteger(maxChars) ||
|
|
52
|
+
maxChars < 0 ||
|
|
53
|
+
maxChars > FileInputBudget.maxOutputChars)
|
|
54
|
+
throw new ByteLimitError();
|
|
55
|
+
attempted = true;
|
|
56
|
+
id = await this.upload(request, signal);
|
|
57
|
+
const markdown = await this.content(id, signal, maxChars);
|
|
58
|
+
signal.throwIfAborted();
|
|
59
|
+
result = { status: 'ready', markdown, hasText: Boolean(markdown.trim()) };
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
const code = options.signal?.aborted
|
|
63
|
+
? 'aborted'
|
|
64
|
+
: deadline.aborted
|
|
65
|
+
? 'timeout'
|
|
66
|
+
: error instanceof ByteLimitError
|
|
67
|
+
? 'too-large'
|
|
68
|
+
: 'invalid-document';
|
|
69
|
+
result = {
|
|
70
|
+
status: 'failed',
|
|
71
|
+
code,
|
|
72
|
+
error: 'Remote file extraction failed.',
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
finally {
|
|
76
|
+
if (id)
|
|
77
|
+
await this.cleanup(id);
|
|
78
|
+
else if (attempted)
|
|
79
|
+
this.warning('Remote file cleanup could not be confirmed: no usable file identifier was received.');
|
|
80
|
+
}
|
|
81
|
+
return options.signal?.aborted
|
|
82
|
+
? {
|
|
83
|
+
status: 'failed',
|
|
84
|
+
code: 'aborted',
|
|
85
|
+
error: 'File extraction was cancelled.',
|
|
86
|
+
}
|
|
87
|
+
: result;
|
|
88
|
+
}
|
|
89
|
+
async upload(request, signal) {
|
|
90
|
+
const form = new FormData();
|
|
91
|
+
form.set('purpose', 'file-extract');
|
|
92
|
+
form.set('file', new Blob([new Uint8Array(request.bytes)], {
|
|
93
|
+
type: request.mediaType ?? 'application/octet-stream',
|
|
94
|
+
}), request.filename ?? `document.${request.ext}`);
|
|
95
|
+
const response = await this.request('POST', this.filesUrl, signal, form);
|
|
96
|
+
const metadata = JSON.parse(await this.text(response, signal, 64 * 1024));
|
|
97
|
+
if (typeof metadata !== 'object' ||
|
|
98
|
+
metadata === null ||
|
|
99
|
+
!('id' in metadata) ||
|
|
100
|
+
typeof metadata.id !== 'string' ||
|
|
101
|
+
!/^[a-zA-Z0-9_-]{1,256}$/u.test(metadata.id))
|
|
102
|
+
throw new Error('Invalid remote file identifier.');
|
|
103
|
+
return metadata.id;
|
|
104
|
+
}
|
|
105
|
+
async content(id, signal, maxChars) {
|
|
106
|
+
const response = await this.request('GET', `${this.filesUrl}/${encodeURIComponent(id)}/content`, signal);
|
|
107
|
+
const mediaType = response.headers
|
|
108
|
+
.get('content-type')
|
|
109
|
+
?.split(';')[0]
|
|
110
|
+
?.trim()
|
|
111
|
+
.toLowerCase();
|
|
112
|
+
if (mediaType !== 'text/plain' && mediaType !== 'application/json') {
|
|
113
|
+
await response.body?.cancel();
|
|
114
|
+
throw new Error('Unsupported remote extraction response.');
|
|
115
|
+
}
|
|
116
|
+
const text = await this.text(response, signal, maxChars * (mediaType === 'application/json' ? 12 : 4) + 64 * 1024);
|
|
117
|
+
let markdown;
|
|
118
|
+
if (mediaType === 'text/plain')
|
|
119
|
+
markdown = text;
|
|
120
|
+
else {
|
|
121
|
+
const content = JSON.parse(text);
|
|
122
|
+
if (typeof content !== 'object' ||
|
|
123
|
+
content === null ||
|
|
124
|
+
!('content' in content) ||
|
|
125
|
+
typeof content.content !== 'string')
|
|
126
|
+
throw new Error('Unsupported remote extraction response.');
|
|
127
|
+
markdown = content.content;
|
|
128
|
+
}
|
|
129
|
+
signal.throwIfAborted();
|
|
130
|
+
if (characters(markdown) > maxChars)
|
|
131
|
+
throw new ByteLimitError();
|
|
132
|
+
return markdown;
|
|
133
|
+
}
|
|
134
|
+
async request(method, url, signal, body) {
|
|
135
|
+
const response = await modelFetch(url, {
|
|
136
|
+
method,
|
|
137
|
+
headers: this.headers,
|
|
138
|
+
signal,
|
|
139
|
+
body,
|
|
140
|
+
redirect: 'error',
|
|
141
|
+
});
|
|
142
|
+
if (!response.ok) {
|
|
143
|
+
await response.body?.cancel();
|
|
144
|
+
throw new Error('Remote file request failed.');
|
|
145
|
+
}
|
|
146
|
+
return response;
|
|
147
|
+
}
|
|
148
|
+
async text(response, signal, maxBytes) {
|
|
149
|
+
if (!response.body)
|
|
150
|
+
throw new Error('Missing remote file response.');
|
|
151
|
+
const bytes = await readBoundedBytes(response.body, signal, maxBytes);
|
|
152
|
+
return new TextDecoder('utf-8', { fatal: true }).decode(bytes);
|
|
153
|
+
}
|
|
154
|
+
async cleanup(id) {
|
|
155
|
+
try {
|
|
156
|
+
const response = await this.request('DELETE', `${this.filesUrl}/${encodeURIComponent(id)}`, AbortSignal.timeout(this.cleanupTimeoutMs));
|
|
157
|
+
await response.body?.cancel();
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
this.warning('Remote file cleanup failed; a temporary file may remain at the configured service.');
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
warning(message) {
|
|
164
|
+
try {
|
|
165
|
+
this.warn(message);
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
/* Diagnostics must not replace the extraction outcome. */
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/** Credentials and endpoint remain in this private execution-bound closure, never in messages or cache keys. */
|
|
173
|
+
export function kimiExtractor(connection, sessionId, options = {}) {
|
|
174
|
+
const extractor = new KimiExtractor(connection, sessionId, options);
|
|
175
|
+
return (request, extractOptions) => extractor.extract(request, extractOptions);
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=kimi.js.map
|