@crewx/sdk 0.8.0-rc.73 → 0.8.0-rc.75
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/README.md +380 -818
- package/dist/adapter/context-builder.d.ts +35 -0
- package/dist/adapter/context-builder.js +87 -0
- package/dist/adapter/index.d.ts +5 -0
- package/dist/{core/remote → adapter}/index.js +3 -2
- package/dist/adapter/plugin-helper.d.ts +19 -0
- package/dist/adapter/plugin-helper.js +45 -0
- package/dist/adapter/scoped-store.d.ts +12 -0
- package/dist/adapter/scoped-store.js +43 -0
- package/dist/adapter/types.d.ts +264 -0
- package/dist/adapter/types.js +23 -0
- package/dist/agent/resolver.d.ts +18 -0
- package/dist/agent/resolver.js +46 -0
- package/dist/boxing/box-storage.interface.d.ts +12 -0
- package/dist/boxing/box-storage.interface.js +3 -0
- package/dist/boxing/box.service.d.ts +4 -0
- package/dist/boxing/box.service.js +5 -1
- package/dist/boxing/box.types.d.ts +4 -0
- package/dist/boxing/box.types.js +3 -0
- package/dist/boxing/context-builder.d.ts +6 -7
- package/dist/boxing/context-builder.js +3 -0
- package/dist/client/CrewxClient.d.ts +65 -0
- package/dist/client/CrewxClient.js +86 -0
- package/dist/client/index.d.ts +3 -0
- package/dist/client/index.js +6 -0
- package/dist/config/loader.browser.d.ts +14 -0
- package/dist/config/loader.browser.js +59 -0
- package/dist/config/loader.d.ts +19 -0
- package/dist/config/loader.js +95 -0
- package/dist/conversation/index.d.ts +5 -3
- package/dist/conversation/index.js +8 -3
- package/dist/conversation/sqlite-provider.d.ts +21 -0
- package/dist/conversation/sqlite-provider.js +178 -0
- package/dist/conversation/to-task-reader.d.ts +14 -0
- package/dist/conversation/to-task-reader.js +28 -0
- package/dist/conversation/to-template-messages.d.ts +15 -0
- package/dist/conversation/to-template-messages.js +34 -0
- package/dist/conversation/types.d.ts +101 -0
- package/dist/conversation/types.js +10 -0
- package/dist/esm/agent/resolver.js +41 -0
- package/dist/esm/boxing/box-storage.interface.js +5 -0
- package/dist/esm/boxing/box.service.js +69 -0
- package/dist/esm/boxing/box.types.js +5 -0
- package/dist/esm/boxing/context-builder.js +76 -0
- package/dist/esm/client/CrewxClient.js +82 -0
- package/dist/esm/client/index.js +2 -0
- package/dist/esm/config/loader.browser.js +54 -0
- package/dist/esm/config/loader.js +77 -0
- package/dist/esm/events/TypedEventEmitter.js +61 -0
- package/dist/esm/events/types.js +8 -0
- package/dist/esm/facade/Crewx.browser.js +310 -0
- package/dist/esm/facade/Crewx.js +941 -0
- package/dist/esm/hooks/define.js +10 -0
- package/dist/esm/hooks/dispatch.js +76 -0
- package/dist/esm/hooks/index.js +6 -0
- package/dist/esm/hooks/observer.js +56 -0
- package/dist/esm/hooks/plugin.js +12 -0
- package/dist/esm/hooks/types.js +9 -0
- package/dist/esm/index.browser.js +15 -0
- package/dist/esm/index.js +60 -0
- package/dist/esm/layout/loader.js +268 -0
- package/dist/esm/layout/props-validator.js +297 -0
- package/dist/esm/layout/renderer.js +180 -0
- package/dist/esm/layout/types.js +31 -0
- package/dist/esm/parallel/agent-runtime.js +21 -0
- package/dist/esm/parallel/helpers.js +214 -0
- package/dist/esm/parallel/index.js +5 -0
- package/dist/esm/parallel/parallel-runner.js +221 -0
- package/dist/esm/parallel/types.js +5 -0
- package/dist/esm/parsers/agent-call.util.js +15 -0
- package/dist/esm/parsers/claude.parser.js +64 -0
- package/dist/esm/parsers/codex.parser.js +97 -0
- package/dist/esm/parsers/copilot.parser.js +63 -0
- package/dist/esm/parsers/gemini.parser.js +43 -0
- package/dist/esm/parsers/opencode.parser.js +73 -0
- package/dist/esm/parsers/router.js +53 -0
- package/dist/esm/platform/BrowserFsAdapter.js +80 -0
- package/dist/esm/platform/IFsAdapter.js +2 -0
- package/dist/esm/platform/NodeFsAdapter.js +34 -0
- package/dist/esm/plugin/plugin-provider.js +202 -0
- package/dist/esm/plugin/types.js +8 -0
- package/dist/esm/plugin.js +25 -0
- package/dist/esm/provider/bridge.browser.js +43 -0
- package/dist/esm/provider/bridge.js +373 -0
- package/dist/esm/provider/parse-usage.js +80 -0
- package/dist/esm/provider/register-api.js +21 -0
- package/dist/esm/provider/vercel-runtime.js +310 -0
- package/dist/esm/remote/index.js +10 -0
- package/dist/esm/remote/remote-agent-manager.js +194 -0
- package/dist/esm/remote/remote-provider.js +98 -0
- package/dist/esm/remote/remote-transport.js +79 -0
- package/dist/esm/remote/types.js +8 -0
- package/dist/esm/server/auth.js +31 -0
- package/dist/esm/server/handler.js +72 -0
- package/dist/esm/server/index.js +5 -0
- package/dist/esm/server/tool-adapter.js +92 -0
- package/dist/esm/template/engine.js +100 -0
- package/dist/esm/template/helpers/exec.browser.js +31 -0
- package/dist/esm/template/helpers/exec.js +220 -0
- package/dist/esm/template/helpers/fenced_code.js +17 -0
- package/dist/esm/template/helpers/include.js +20 -0
- package/dist/esm/template/helpers/p1p2.js +83 -0
- package/dist/esm/template/loader/DocumentLoader.js +124 -0
- package/dist/esm/template/types.js +5 -0
- package/dist/esm/tools/delegate.js +57 -0
- package/dist/esm/tools/index.js +5 -0
- package/dist/esm/tools/node/builtin.js +541 -0
- package/dist/esm/tools/node/index.js +54 -0
- package/dist/esm/types/index.js +27 -0
- package/dist/esm/types/task-log.types.js +5 -0
- package/dist/esm/utils/env-defaults.js +23 -0
- package/dist/esm/utils/glob-match.js +38 -0
- package/dist/esm/utils/id.js +46 -0
- package/dist/esm/utils/workspace.js +21 -0
- package/dist/events/TypedEventEmitter.d.ts +31 -0
- package/dist/events/TypedEventEmitter.js +65 -0
- package/dist/events/types.d.ts +139 -0
- package/dist/events/types.js +9 -0
- package/dist/facade/Crewx.browser.d.ts +73 -0
- package/dist/facade/Crewx.browser.js +314 -0
- package/dist/facade/Crewx.d.ts +267 -0
- package/dist/facade/Crewx.js +1299 -0
- package/dist/hooks/define.d.ts +10 -0
- package/dist/hooks/define.js +13 -0
- package/dist/hooks/dispatch.d.ts +61 -0
- package/dist/hooks/dispatch.js +147 -0
- package/dist/hooks/index.d.ts +13 -0
- package/dist/hooks/index.js +24 -0
- package/dist/hooks/observer.d.ts +20 -0
- package/dist/hooks/observer.js +60 -0
- package/dist/hooks/plugin.d.ts +19 -0
- package/dist/hooks/plugin.js +17 -0
- package/dist/hooks/tool-normalize.d.ts +29 -0
- package/dist/hooks/tool-normalize.js +110 -0
- package/dist/hooks/types.d.ts +79 -0
- package/dist/hooks/types.js +12 -0
- package/dist/hooks/yaml-plugin.d.ts +29 -0
- package/dist/hooks/yaml-plugin.js +356 -0
- package/dist/index.browser.d.ts +15 -0
- package/dist/index.browser.js +25 -0
- package/dist/index.d.ts +70 -58
- package/dist/index.js +144 -133
- package/dist/{services/layout-loader.service.d.ts → layout/loader.d.ts} +24 -4
- package/dist/{services/layout-loader.service.js → layout/loader.js} +103 -73
- package/dist/{services/props-validator.service.d.ts → layout/props-validator.d.ts} +7 -1
- package/dist/{services/props-validator.service.js → layout/props-validator.js} +28 -59
- package/dist/{services/layout-renderer.service.d.ts → layout/renderer.d.ts} +28 -14
- package/dist/layout/renderer.js +193 -0
- package/dist/{types/layout.types.d.ts → layout/types.d.ts} +47 -1
- package/dist/{types/layout.types.js → layout/types.js} +15 -1
- package/dist/parallel/agent-runtime.d.ts +31 -0
- package/dist/parallel/agent-runtime.js +25 -0
- package/dist/{core/parallel → parallel}/helpers.d.ts +2 -1
- package/dist/{core/parallel → parallel}/helpers.js +55 -88
- package/dist/parallel/index.d.ts +8 -0
- package/dist/{core/parallel → parallel}/index.js +5 -3
- package/dist/{core/parallel → parallel}/parallel-runner.d.ts +8 -1
- package/dist/{core/parallel → parallel}/parallel-runner.js +53 -57
- package/dist/parallel/types.d.ts +65 -0
- package/dist/parallel/types.js +6 -0
- package/dist/parsers/agent-call.util.d.ts +3 -0
- package/dist/parsers/agent-call.util.js +2 -0
- package/dist/parsers/api.parser.d.ts +10 -0
- package/dist/parsers/api.parser.js +26 -0
- package/dist/parsers/claude.parser.d.ts +8 -0
- package/dist/parsers/claude.parser.js +22 -1
- package/dist/parsers/codex.parser.d.ts +8 -0
- package/dist/parsers/codex.parser.js +11 -0
- package/dist/parsers/copilot.parser.d.ts +9 -0
- package/dist/parsers/copilot.parser.js +8 -0
- package/dist/parsers/gemini.parser.d.ts +10 -0
- package/dist/parsers/gemini.parser.js +10 -0
- package/dist/parsers/opencode.parser.d.ts +12 -0
- package/dist/parsers/opencode.parser.js +76 -0
- package/dist/parsers/router.d.ts +7 -0
- package/dist/parsers/router.js +56 -0
- package/dist/platform/BrowserFsAdapter.d.ts +37 -0
- package/dist/platform/BrowserFsAdapter.js +84 -0
- package/dist/platform/IFsAdapter.d.ts +29 -0
- package/dist/{core/remote/types.js → platform/IFsAdapter.js} +1 -1
- package/dist/platform/NodeFsAdapter.d.ts +16 -0
- package/dist/platform/NodeFsAdapter.js +38 -0
- package/dist/plugin/plugin-provider.d.ts +33 -0
- package/dist/plugin/plugin-provider.js +207 -0
- package/dist/plugin/types.d.ts +53 -0
- package/dist/plugin/types.js +9 -0
- package/dist/plugin.d.ts +33 -0
- package/dist/plugin.js +29 -0
- package/dist/plugins/conversation.d.ts +18 -0
- package/dist/plugins/conversation.js +59 -0
- package/dist/plugins/file-logger.d.ts +29 -0
- package/dist/plugins/file-logger.js +87 -0
- package/dist/plugins/index.d.ts +16 -0
- package/dist/plugins/index.js +19 -0
- package/dist/plugins/sqlite-tracing.d.ts +29 -0
- package/dist/plugins/sqlite-tracing.js +112 -0
- package/dist/provider/bridge.browser.d.ts +49 -0
- package/dist/provider/bridge.browser.js +49 -0
- package/dist/provider/bridge.d.ts +106 -0
- package/dist/provider/bridge.js +380 -0
- package/dist/provider/mastra-runtime.d.ts +45 -0
- package/dist/provider/mastra-runtime.js +208 -0
- package/dist/provider/parse-usage.d.ts +20 -0
- package/dist/provider/parse-usage.js +83 -0
- package/dist/provider/register-api.d.ts +14 -0
- package/dist/provider/register-api.js +24 -0
- package/dist/provider/vercel-runtime.d.ts +54 -0
- package/dist/provider/vercel-runtime.js +347 -0
- package/dist/remote/index.d.ts +13 -0
- package/dist/remote/index.js +32 -0
- package/dist/remote/remote-agent-manager.d.ts +54 -0
- package/dist/{core/remote → remote}/remote-agent-manager.js +100 -97
- package/dist/remote/remote-provider.d.ts +47 -0
- package/dist/remote/remote-provider.js +141 -0
- package/dist/remote/remote-transport.d.ts +32 -0
- package/dist/remote/remote-transport.js +83 -0
- package/dist/remote/types.d.ts +147 -0
- package/dist/remote/types.js +9 -0
- package/dist/server/auth.d.ts +21 -0
- package/dist/server/auth.js +35 -0
- package/dist/server/handler.d.ts +24 -0
- package/dist/server/handler.js +75 -0
- package/dist/server/index.d.ts +7 -0
- package/dist/server/index.js +9 -0
- package/dist/server/tool-adapter.d.ts +19 -0
- package/dist/server/tool-adapter.js +95 -0
- package/dist/template/engine.d.ts +28 -0
- package/dist/template/engine.js +137 -0
- package/dist/template/helpers/exec.browser.d.ts +22 -0
- package/dist/template/helpers/exec.browser.js +41 -0
- package/dist/template/helpers/exec.d.ts +60 -0
- package/dist/template/helpers/exec.js +230 -0
- package/dist/template/helpers/fenced_code.d.ts +22 -0
- package/dist/template/helpers/fenced_code.js +20 -0
- package/dist/template/helpers/format-conversation.d.ts +30 -0
- package/dist/template/helpers/format-conversation.js +53 -0
- package/dist/template/helpers/include.d.ts +16 -0
- package/dist/template/helpers/include.js +23 -0
- package/dist/template/helpers/p1p2.d.ts +37 -0
- package/dist/template/helpers/p1p2.js +90 -0
- package/dist/template/loader/DocumentLoader.d.ts +48 -0
- package/dist/template/loader/DocumentLoader.js +128 -0
- package/dist/template/types.d.ts +51 -0
- package/dist/template/types.js +6 -0
- package/dist/testing/index.d.ts +12 -0
- package/dist/testing/index.js +16 -0
- package/dist/testing/mock-audit.d.ts +10 -0
- package/dist/testing/mock-audit.js +13 -0
- package/dist/testing/mock-context.d.ts +27 -0
- package/dist/testing/mock-context.js +68 -0
- package/dist/testing/mock-logger.d.ts +15 -0
- package/dist/testing/mock-logger.js +27 -0
- package/dist/testing/mock-router.d.ts +16 -0
- package/dist/testing/mock-router.js +67 -0
- package/dist/testing/mock-storage.d.ts +9 -0
- package/dist/testing/mock-storage.js +21 -0
- package/dist/testing/mock-store.d.ts +3 -0
- package/dist/testing/mock-store.js +8 -0
- package/dist/tools/delegate.d.ts +10 -0
- package/dist/tools/delegate.js +60 -0
- package/dist/tools/index.d.ts +5 -12
- package/dist/tools/index.js +6 -37
- package/dist/tools/node/builtin.d.ts +23 -0
- package/dist/tools/node/builtin.js +547 -0
- package/dist/tools/node/index.d.ts +23 -0
- package/dist/tools/node/index.js +59 -0
- package/dist/types/index.d.ts +804 -6
- package/dist/types/index.js +29 -20
- package/dist/types/task-log.types.d.ts +4 -0
- package/dist/types/task-log.types.js +3 -0
- package/dist/utils/env-defaults.d.ts +18 -0
- package/dist/utils/env-defaults.js +27 -0
- package/dist/utils/glob-match.d.ts +18 -0
- package/dist/utils/glob-match.js +42 -0
- package/dist/{core → utils}/id.d.ts +15 -0
- package/dist/utils/id.js +50 -0
- package/dist/utils/timestamp.d.ts +2 -0
- package/dist/utils/timestamp.js +13 -0
- package/dist/{core → utils}/workspace.d.ts +4 -0
- package/dist/{core → utils}/workspace.js +3 -0
- package/package.json +68 -103
- package/src/schemas/hooks.schema.json +59 -0
- package/templates/agents/default.yaml +490 -0
- package/templates/agents/minimal.yaml +16 -0
- package/LICENSE +0 -201
- package/dist/adapters/MastraToolAdapter.d.ts +0 -9
- package/dist/adapters/MastraToolAdapter.js +0 -66
- package/dist/adapters/MastraToolAdapter.js.map +0 -1
- package/dist/api/index.d.ts +0 -2
- package/dist/api/index.js +0 -8
- package/dist/api/index.js.map +0 -1
- package/dist/boxing/box-storage.interface.js.map +0 -1
- package/dist/boxing/box.service.js.map +0 -1
- package/dist/boxing/box.types.js.map +0 -1
- package/dist/boxing/context-builder.js.map +0 -1
- package/dist/boxing/index.d.ts +0 -6
- package/dist/boxing/index.js +0 -11
- package/dist/boxing/index.js.map +0 -1
- package/dist/boxing/tokenizer.d.ts +0 -3
- package/dist/boxing/tokenizer.js +0 -11
- package/dist/boxing/tokenizer.js.map +0 -1
- package/dist/config/api-provider-parser.d.ts +0 -58
- package/dist/config/api-provider-parser.js +0 -212
- package/dist/config/api-provider-parser.js.map +0 -1
- package/dist/config/index.d.ts +0 -3
- package/dist/config/index.js +0 -20
- package/dist/config/index.js.map +0 -1
- package/dist/config/log.config.d.ts +0 -7
- package/dist/config/log.config.js +0 -20
- package/dist/config/log.config.js.map +0 -1
- package/dist/config/pricing.d.ts +0 -11
- package/dist/config/pricing.js +0 -53
- package/dist/config/pricing.js.map +0 -1
- package/dist/config/timeout.config.d.ts +0 -14
- package/dist/config/timeout.config.js +0 -34
- package/dist/config/timeout.config.js.map +0 -1
- package/dist/config/yaml-loader.d.ts +0 -8
- package/dist/config/yaml-loader.js +0 -155
- package/dist/config/yaml-loader.js.map +0 -1
- package/dist/constants/index.d.ts +0 -4
- package/dist/constants/index.js +0 -8
- package/dist/constants/index.js.map +0 -1
- package/dist/constants.d.ts +0 -1
- package/dist/constants.js +0 -18
- package/dist/constants.js.map +0 -1
- package/dist/conversation/conversation-config.d.ts +0 -9
- package/dist/conversation/conversation-config.js +0 -22
- package/dist/conversation/conversation-config.js.map +0 -1
- package/dist/conversation/conversation-history.interface.d.ts +0 -36
- package/dist/conversation/conversation-history.interface.js +0 -3
- package/dist/conversation/conversation-history.interface.js.map +0 -1
- package/dist/conversation/conversation-storage.service.d.ts +0 -16
- package/dist/conversation/conversation-storage.service.js +0 -213
- package/dist/conversation/conversation-storage.service.js.map +0 -1
- package/dist/conversation/index.js.map +0 -1
- package/dist/core/__tests__/id.test.d.ts +0 -1
- package/dist/core/__tests__/id.test.js +0 -115
- package/dist/core/__tests__/id.test.js.map +0 -1
- package/dist/core/agent/agent-factory.d.ts +0 -37
- package/dist/core/agent/agent-factory.js +0 -68
- package/dist/core/agent/agent-factory.js.map +0 -1
- package/dist/core/agent/agent-runtime.d.ts +0 -52
- package/dist/core/agent/agent-runtime.js +0 -206
- package/dist/core/agent/agent-runtime.js.map +0 -1
- package/dist/core/agent/event-bus.d.ts +0 -44
- package/dist/core/agent/event-bus.js +0 -43
- package/dist/core/agent/event-bus.js.map +0 -1
- package/dist/core/agent/index.d.ts +0 -3
- package/dist/core/agent/index.js +0 -13
- package/dist/core/agent/index.js.map +0 -1
- package/dist/core/env-defaults.d.ts +0 -1
- package/dist/core/env-defaults.js +0 -7
- package/dist/core/env-defaults.js.map +0 -1
- package/dist/core/id.js +0 -27
- package/dist/core/id.js.map +0 -1
- package/dist/core/parallel/helpers.js.map +0 -1
- package/dist/core/parallel/index.d.ts +0 -4
- package/dist/core/parallel/index.js.map +0 -1
- package/dist/core/parallel/parallel-runner.js.map +0 -1
- package/dist/core/parallel/types.d.ts +0 -41
- package/dist/core/parallel/types.js +0 -3
- package/dist/core/parallel/types.js.map +0 -1
- package/dist/core/providers/MastraAPIProvider.d.ts +0 -31
- package/dist/core/providers/MastraAPIProvider.js +0 -365
- package/dist/core/providers/MastraAPIProvider.js.map +0 -1
- package/dist/core/providers/ai-provider.interface.d.ts +0 -79
- package/dist/core/providers/ai-provider.interface.js +0 -23
- package/dist/core/providers/ai-provider.interface.js.map +0 -1
- package/dist/core/providers/base-ai.provider.d.ts +0 -84
- package/dist/core/providers/base-ai.provider.js +0 -1237
- package/dist/core/providers/base-ai.provider.js.map +0 -1
- package/dist/core/providers/base-ai.types.d.ts +0 -26
- package/dist/core/providers/base-ai.types.js +0 -3
- package/dist/core/providers/base-ai.types.js.map +0 -1
- package/dist/core/providers/claude.provider.d.ts +0 -19
- package/dist/core/providers/claude.provider.js +0 -170
- package/dist/core/providers/claude.provider.js.map +0 -1
- package/dist/core/providers/codex.provider.d.ts +0 -21
- package/dist/core/providers/codex.provider.js +0 -134
- package/dist/core/providers/codex.provider.js.map +0 -1
- package/dist/core/providers/copilot.provider.d.ts +0 -25
- package/dist/core/providers/copilot.provider.js +0 -146
- package/dist/core/providers/copilot.provider.js.map +0 -1
- package/dist/core/providers/dynamic-provider.factory.d.ts +0 -74
- package/dist/core/providers/dynamic-provider.factory.js +0 -645
- package/dist/core/providers/dynamic-provider.factory.js.map +0 -1
- package/dist/core/providers/gemini.provider.d.ts +0 -16
- package/dist/core/providers/gemini.provider.js +0 -101
- package/dist/core/providers/gemini.provider.js.map +0 -1
- package/dist/core/providers/index.d.ts +0 -8
- package/dist/core/providers/index.js +0 -20
- package/dist/core/providers/index.js.map +0 -1
- package/dist/core/providers/mock.provider.d.ts +0 -13
- package/dist/core/providers/mock.provider.js +0 -55
- package/dist/core/providers/mock.provider.js.map +0 -1
- package/dist/core/providers/provider-factory.d.ts +0 -3
- package/dist/core/providers/provider-factory.js +0 -65
- package/dist/core/providers/provider-factory.js.map +0 -1
- package/dist/core/providers/tool-call.types.d.ts +0 -39
- package/dist/core/providers/tool-call.types.js +0 -3
- package/dist/core/providers/tool-call.types.js.map +0 -1
- package/dist/core/remote/index.d.ts +0 -3
- package/dist/core/remote/index.js.map +0 -1
- package/dist/core/remote/remote-agent-manager.d.ts +0 -24
- package/dist/core/remote/remote-agent-manager.js.map +0 -1
- package/dist/core/remote/remote-transport.d.ts +0 -15
- package/dist/core/remote/remote-transport.js +0 -70
- package/dist/core/remote/remote-transport.js.map +0 -1
- package/dist/core/remote/types.d.ts +0 -79
- package/dist/core/remote/types.js.map +0 -1
- package/dist/core/workspace.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/internal/index.d.ts +0 -1
- package/dist/internal/index.js +0 -6
- package/dist/internal/index.js.map +0 -1
- package/dist/knowledge/DocumentManager.d.ts +0 -4
- package/dist/knowledge/DocumentManager.js +0 -119
- package/dist/knowledge/DocumentManager.js.map +0 -1
- package/dist/knowledge/index.d.ts +0 -1
- package/dist/knowledge/index.js +0 -18
- package/dist/knowledge/index.js.map +0 -1
- package/dist/parsers/agent-call.util.js.map +0 -1
- package/dist/parsers/claude.parser.js.map +0 -1
- package/dist/parsers/codex.parser.js.map +0 -1
- package/dist/parsers/copilot.parser.js.map +0 -1
- package/dist/parsers/gemini.parser.js.map +0 -1
- package/dist/parsers/index.d.ts +0 -7
- package/dist/parsers/index.js +0 -45
- package/dist/parsers/index.js.map +0 -1
- package/dist/schema/skills-parser.d.ts +0 -8
- package/dist/schema/skills-parser.js +0 -438
- package/dist/schema/skills-parser.js.map +0 -1
- package/dist/schema/skills.types.d.ts +0 -158
- package/dist/schema/skills.types.js +0 -41
- package/dist/schema/skills.types.js.map +0 -1
- package/dist/schemas/api-provider.schema.d.ts +0 -432
- package/dist/schemas/api-provider.schema.js +0 -50
- package/dist/schemas/api-provider.schema.js.map +0 -1
- package/dist/services/index.d.ts +0 -2
- package/dist/services/index.js +0 -19
- package/dist/services/index.js.map +0 -1
- package/dist/services/layout-loader.service.js.map +0 -1
- package/dist/services/layout-renderer.service.js +0 -325
- package/dist/services/layout-renderer.service.js.map +0 -1
- package/dist/services/props-validator.service.js.map +0 -1
- package/dist/skills/adapter/claude-skill-adapter.d.ts +0 -11
- package/dist/skills/adapter/claude-skill-adapter.js +0 -222
- package/dist/skills/adapter/claude-skill-adapter.js.map +0 -1
- package/dist/skills/index.d.ts +0 -6
- package/dist/skills/index.js +0 -31
- package/dist/skills/index.js.map +0 -1
- package/dist/skills/runtime/progressive-loader.d.ts +0 -27
- package/dist/skills/runtime/progressive-loader.js +0 -186
- package/dist/skills/runtime/progressive-loader.js.map +0 -1
- package/dist/skills/runtime/runtime-requirements-validator.d.ts +0 -23
- package/dist/skills/runtime/runtime-requirements-validator.js +0 -248
- package/dist/skills/runtime/runtime-requirements-validator.js.map +0 -1
- package/dist/skills/runtime/skill-runtime.service.d.ts +0 -42
- package/dist/skills/runtime/skill-runtime.service.js +0 -434
- package/dist/skills/runtime/skill-runtime.service.js.map +0 -1
- package/dist/tools/file-system.service.d.ts +0 -10
- package/dist/tools/file-system.service.js +0 -33
- package/dist/tools/file-system.service.js.map +0 -1
- package/dist/tools/find.tool.d.ts +0 -21
- package/dist/tools/find.tool.js +0 -139
- package/dist/tools/find.tool.js.map +0 -1
- package/dist/tools/glob.tool.d.ts +0 -24
- package/dist/tools/glob.tool.js +0 -153
- package/dist/tools/glob.tool.js.map +0 -1
- package/dist/tools/grep.tool.d.ts +0 -1
- package/dist/tools/grep.tool.js +0 -137
- package/dist/tools/grep.tool.js.map +0 -1
- package/dist/tools/index.js.map +0 -1
- package/dist/tools/ls.tool.d.ts +0 -1
- package/dist/tools/ls.tool.js +0 -94
- package/dist/tools/ls.tool.js.map +0 -1
- package/dist/tools/read-file.tool.d.ts +0 -1
- package/dist/tools/read-file.tool.js +0 -69
- package/dist/tools/read-file.tool.js.map +0 -1
- package/dist/tools/replace.tool.d.ts +0 -1
- package/dist/tools/replace.tool.js +0 -68
- package/dist/tools/replace.tool.js.map +0 -1
- package/dist/tools/run-shell-command.tool.d.ts +0 -1
- package/dist/tools/run-shell-command.tool.js +0 -64
- package/dist/tools/run-shell-command.tool.js.map +0 -1
- package/dist/tools/tree.tool.d.ts +0 -1
- package/dist/tools/tree.tool.js +0 -109
- package/dist/tools/tree.tool.js.map +0 -1
- package/dist/tools/types.d.ts +0 -42
- package/dist/tools/types.js +0 -13
- package/dist/tools/types.js.map +0 -1
- package/dist/tools/utils/file-utils.d.ts +0 -5
- package/dist/tools/utils/file-utils.js +0 -221
- package/dist/tools/utils/file-utils.js.map +0 -1
- package/dist/tools/write-file.tool.d.ts +0 -1
- package/dist/tools/write-file.tool.js +0 -55
- package/dist/tools/write-file.tool.js.map +0 -1
- package/dist/types/agent.types.d.ts +0 -134
- package/dist/types/agent.types.js +0 -16
- package/dist/types/agent.types.js.map +0 -1
- package/dist/types/api-provider.types.d.ts +0 -85
- package/dist/types/api-provider.types.js +0 -65
- package/dist/types/api-provider.types.js.map +0 -1
- package/dist/types/index.js.map +0 -1
- package/dist/types/layout.types.js.map +0 -1
- package/dist/types/provider.types.d.ts +0 -12
- package/dist/types/provider.types.js +0 -3
- package/dist/types/provider.types.js.map +0 -1
- package/dist/types/skill-runtime.types.d.ts +0 -244
- package/dist/types/skill-runtime.types.js +0 -44
- package/dist/types/skill-runtime.types.js.map +0 -1
- package/dist/types/structured-payload.types.d.ts +0 -46
- package/dist/types/structured-payload.types.js +0 -65
- package/dist/types/structured-payload.types.js.map +0 -1
- package/dist/types/task-log.types.js.map +0 -1
- package/dist/types/template.types.d.ts +0 -38
- package/dist/types/template.types.js +0 -3
- package/dist/types/template.types.js.map +0 -1
- package/dist/types.d.ts +0 -1
- package/dist/types.js +0 -18
- package/dist/types.js.map +0 -1
- package/dist/utils/api-provider-normalizer.d.ts +0 -16
- package/dist/utils/api-provider-normalizer.js +0 -135
- package/dist/utils/api-provider-normalizer.js.map +0 -1
- package/dist/utils/base-message-formatter.d.ts +0 -32
- package/dist/utils/base-message-formatter.js +0 -170
- package/dist/utils/base-message-formatter.js.map +0 -1
- package/dist/utils/error-utils.d.ts +0 -3
- package/dist/utils/error-utils.js +0 -27
- package/dist/utils/error-utils.js.map +0 -1
- package/dist/utils/index.d.ts +0 -4
- package/dist/utils/index.js +0 -21
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/math-utils.d.ts +0 -3
- package/dist/utils/math-utils.js +0 -10
- package/dist/utils/math-utils.js.map +0 -1
- package/dist/utils/mention-parser.d.ts +0 -18
- package/dist/utils/mention-parser.js +0 -136
- package/dist/utils/mention-parser.js.map +0 -1
- package/dist/utils/string-utils.d.ts +0 -1
- package/dist/utils/string-utils.js +0 -10
- package/dist/utils/string-utils.js.map +0 -1
- package/dist/utils.d.ts +0 -3
- package/dist/utils.js +0 -20
- package/dist/utils.js.map +0 -1
- package/schema/api-provider-config.json +0 -138
- package/schema/crewx-config.json +0 -224
- package/schema/skills-config.json +0 -306
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Pure function to extract token usage from provider CLI stdout.
|
|
4
|
+
* Supports Claude / Codex / Gemini / Copilot / OpenCode JSONL formats.
|
|
5
|
+
* Uses last-match semantics: if multiple usage events are found, the last one wins.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.parseUsage = parseUsage;
|
|
9
|
+
function extractFromFlat(obj) {
|
|
10
|
+
// Pattern: { type: "usage", input_tokens, output_tokens, [cache_read_input_tokens], [cached_input_tokens] }
|
|
11
|
+
if (obj['type'] !== 'usage' || !('input_tokens' in obj))
|
|
12
|
+
return null;
|
|
13
|
+
const inputRaw = Number(obj['input_tokens'] ?? 0);
|
|
14
|
+
const outputTokens = Number(obj['output_tokens'] ?? 0);
|
|
15
|
+
// cache_read_input_tokens takes precedence over cached_input_tokens
|
|
16
|
+
const hasCacheRead = 'cache_read_input_tokens' in obj;
|
|
17
|
+
const cacheRead = hasCacheRead ? Number(obj['cache_read_input_tokens']) : undefined;
|
|
18
|
+
const cachedInput = 'cached_input_tokens' in obj ? Number(obj['cached_input_tokens']) : undefined;
|
|
19
|
+
const cachedInputTokens = cacheRead !== undefined ? cacheRead : (cachedInput ?? 0);
|
|
20
|
+
// For cache_read_input_tokens: normalize — input_tokens represents fresh-only, total = input + cache_read
|
|
21
|
+
const inputTokens = cacheRead !== undefined ? inputRaw + cacheRead : inputRaw;
|
|
22
|
+
return { inputTokens, outputTokens, cachedInputTokens };
|
|
23
|
+
}
|
|
24
|
+
function extractFromNested(obj) {
|
|
25
|
+
// Pattern: { usage: { input_tokens, output_tokens, [cache_read_input_tokens], [cached_input_tokens] } }
|
|
26
|
+
const usageRaw = obj['usage'];
|
|
27
|
+
if (!usageRaw || typeof usageRaw !== 'object' || Array.isArray(usageRaw))
|
|
28
|
+
return null;
|
|
29
|
+
const usage = usageRaw;
|
|
30
|
+
if (!('input_tokens' in usage))
|
|
31
|
+
return null;
|
|
32
|
+
const inputRaw = Number(usage['input_tokens'] ?? 0);
|
|
33
|
+
const outputTokens = Number(usage['output_tokens'] ?? 0);
|
|
34
|
+
const hasCacheRead = 'cache_read_input_tokens' in usage;
|
|
35
|
+
const cacheRead = hasCacheRead ? Number(usage['cache_read_input_tokens']) : undefined;
|
|
36
|
+
const cachedInput = 'cached_input_tokens' in usage ? Number(usage['cached_input_tokens']) : undefined;
|
|
37
|
+
const cachedInputTokens = cacheRead !== undefined ? cacheRead : (cachedInput ?? 0);
|
|
38
|
+
const inputTokens = cacheRead !== undefined ? inputRaw + cacheRead : inputRaw;
|
|
39
|
+
return { inputTokens, outputTokens, cachedInputTokens };
|
|
40
|
+
}
|
|
41
|
+
function extractFromOpencode(obj) {
|
|
42
|
+
// Pattern: { type: "step_finish", part: { tokens: { input, output, cache: { read, write } } } }
|
|
43
|
+
if (obj['type'] !== 'step_finish')
|
|
44
|
+
return null;
|
|
45
|
+
const part = obj['part'];
|
|
46
|
+
const tokens = part?.['tokens'];
|
|
47
|
+
if (!tokens)
|
|
48
|
+
return null;
|
|
49
|
+
const inputRaw = Number(tokens['input'] ?? 0);
|
|
50
|
+
const outputTokens = Number(tokens['output'] ?? 0);
|
|
51
|
+
const cache = tokens['cache'];
|
|
52
|
+
const cacheRead = cache ? Number(cache['read'] ?? 0) : 0;
|
|
53
|
+
// normalize: cached tokens are included in input total (same as claude cache_read handling)
|
|
54
|
+
const inputTokens = inputRaw + cacheRead;
|
|
55
|
+
return { inputTokens, outputTokens, cachedInputTokens: cacheRead };
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Parse token usage from a provider CLI stdout string.
|
|
59
|
+
*
|
|
60
|
+
* Accepts JSONL (one JSON object per line) or a single JSON document.
|
|
61
|
+
* Returns the **last** usage found (last-match semantics).
|
|
62
|
+
* Returns `undefined` if no usage data is present.
|
|
63
|
+
*/
|
|
64
|
+
function parseUsage(stdout) {
|
|
65
|
+
if (!stdout || !stdout.trim())
|
|
66
|
+
return undefined;
|
|
67
|
+
let last = null;
|
|
68
|
+
for (const line of stdout.split('\n')) {
|
|
69
|
+
if (!line.trim())
|
|
70
|
+
continue;
|
|
71
|
+
try {
|
|
72
|
+
const obj = JSON.parse(line);
|
|
73
|
+
const result = extractFromFlat(obj) ?? extractFromNested(obj) ?? extractFromOpencode(obj);
|
|
74
|
+
if (result)
|
|
75
|
+
last = result;
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
// non-JSON line — skip
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return last ?? undefined;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=parse-usage.js.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* api/* namespace를 provider registry에 등록.
|
|
3
|
+
*
|
|
4
|
+
* crewx.yaml에서 provider: api/openrouter 등을 쓰면
|
|
5
|
+
* createProvider('api/openrouter') → VercelProviderRuntime 반환.
|
|
6
|
+
*/
|
|
7
|
+
export declare function registerApiProviders(globalConfig?: {
|
|
8
|
+
apiKeys?: Record<string, string>;
|
|
9
|
+
defaults?: {
|
|
10
|
+
maxSteps?: number;
|
|
11
|
+
temperature?: number;
|
|
12
|
+
};
|
|
13
|
+
}): void;
|
|
14
|
+
//# sourceMappingURL=register-api.d.ts.map
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* api/* namespace를 provider registry에 등록.
|
|
4
|
+
*
|
|
5
|
+
* crewx.yaml에서 provider: api/openrouter 등을 쓰면
|
|
6
|
+
* createProvider('api/openrouter') → VercelProviderRuntime 반환.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.registerApiProviders = registerApiProviders;
|
|
10
|
+
const bridge_1 = require("./bridge");
|
|
11
|
+
const vercel_runtime_1 = require("./vercel-runtime");
|
|
12
|
+
function registerApiProviders(globalConfig) {
|
|
13
|
+
(0, bridge_1.registerProviderFactory)('api', (id, providerStr) => {
|
|
14
|
+
const apiKey = globalConfig?.apiKeys?.[id];
|
|
15
|
+
return new vercel_runtime_1.VercelProviderRuntime({
|
|
16
|
+
provider: providerStr,
|
|
17
|
+
model: '', // query() 호출 시 options.model로 override
|
|
18
|
+
apiKey,
|
|
19
|
+
maxSteps: globalConfig?.defaults?.maxSteps,
|
|
20
|
+
temperature: globalConfig?.defaults?.temperature,
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=register-api.js.map
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VercelProviderRuntime — API 프로바이더를 위한 ProviderRuntime 구현.
|
|
3
|
+
*
|
|
4
|
+
* Vercel AI SDK의 generateText() + tool()을 직접 사용하여 tool calling loop를 처리한다.
|
|
5
|
+
* @ai-sdk/* 기반 모델 인스턴스를 생성하여 OpenRouter, OpenAI, Anthropic, Google 지원.
|
|
6
|
+
*/
|
|
7
|
+
import type { ProviderRuntime, ProviderQueryOptions, ContinuationState } from './bridge';
|
|
8
|
+
export interface VercelProviderConfig {
|
|
9
|
+
/** Provider string (e.g. 'api/openrouter', 'api/anthropic'). */
|
|
10
|
+
provider: string;
|
|
11
|
+
/** Model identifier (e.g. 'anthropic/claude-sonnet-4-20250514'). */
|
|
12
|
+
model: string;
|
|
13
|
+
/** API key — falls back to environment variable if not set. */
|
|
14
|
+
apiKey?: string;
|
|
15
|
+
/** Custom base URL (e.g. OpenRouter endpoint). */
|
|
16
|
+
baseURL?: string;
|
|
17
|
+
/** Sampling temperature. */
|
|
18
|
+
temperature?: number;
|
|
19
|
+
/** Max output tokens. */
|
|
20
|
+
maxTokens?: number;
|
|
21
|
+
/** Default max steps for tool loop. */
|
|
22
|
+
maxSteps?: number;
|
|
23
|
+
}
|
|
24
|
+
export declare class VercelProviderRuntime implements ProviderRuntime {
|
|
25
|
+
private config;
|
|
26
|
+
constructor(config: VercelProviderConfig);
|
|
27
|
+
query(message: string, options?: ProviderQueryOptions): Promise<string>;
|
|
28
|
+
execute(message: string, options?: ProviderQueryOptions): Promise<string>;
|
|
29
|
+
private _run;
|
|
30
|
+
/**
|
|
31
|
+
* Resume a conversation after client-side tool results are provided.
|
|
32
|
+
* Reconstructs the message history and calls generateText() again.
|
|
33
|
+
*/
|
|
34
|
+
continueWithToolResults(state: ContinuationState, toolResults: Array<{
|
|
35
|
+
toolCallId: string;
|
|
36
|
+
toolName: string;
|
|
37
|
+
result: unknown;
|
|
38
|
+
}>, options?: ProviderQueryOptions): Promise<string>;
|
|
39
|
+
/**
|
|
40
|
+
* CrewX ToolDefinition[] → Vercel AI SDK tool Record 변환.
|
|
41
|
+
* execute가 없는 tool은 client tool로 처리 (Vercel AI SDK 네이티브 지원).
|
|
42
|
+
*/
|
|
43
|
+
private convertTools;
|
|
44
|
+
/**
|
|
45
|
+
* JSON Schema → Zod 간이 변환.
|
|
46
|
+
*/
|
|
47
|
+
private jsonSchemaToZod;
|
|
48
|
+
/**
|
|
49
|
+
* Vercel AI SDK model 인스턴스 생성.
|
|
50
|
+
* provider string에 따라 적절한 SDK 팩토리 사용.
|
|
51
|
+
*/
|
|
52
|
+
private createModel;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=vercel-runtime.d.ts.map
|
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* VercelProviderRuntime — API 프로바이더를 위한 ProviderRuntime 구현.
|
|
4
|
+
*
|
|
5
|
+
* Vercel AI SDK의 generateText() + tool()을 직접 사용하여 tool calling loop를 처리한다.
|
|
6
|
+
* @ai-sdk/* 기반 모델 인스턴스를 생성하여 OpenRouter, OpenAI, Anthropic, Google 지원.
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.VercelProviderRuntime = void 0;
|
|
43
|
+
const bridge_1 = require("./bridge");
|
|
44
|
+
const DEFAULT_MAX_STEPS = 10;
|
|
45
|
+
const MAX_STEPS_LIMIT = 50;
|
|
46
|
+
class VercelProviderRuntime {
|
|
47
|
+
config;
|
|
48
|
+
constructor(config) {
|
|
49
|
+
this.config = config;
|
|
50
|
+
}
|
|
51
|
+
async query(message, options) {
|
|
52
|
+
return this._run(message, 'query', options);
|
|
53
|
+
}
|
|
54
|
+
async execute(message, options) {
|
|
55
|
+
return this._run(message, 'execute', options);
|
|
56
|
+
}
|
|
57
|
+
async _run(message, _mode, options) {
|
|
58
|
+
const { generateText, tool } = await Promise.resolve().then(() => __importStar(require('ai')));
|
|
59
|
+
// 1. Vercel AI SDK tools 변환
|
|
60
|
+
const vercelTools = this.convertTools(options?.tools ?? [], tool);
|
|
61
|
+
// 2. Model 인스턴스 생성 (Vercel AI SDK)
|
|
62
|
+
const model = this.createModel(options?.model);
|
|
63
|
+
// 3. maxSteps 계산
|
|
64
|
+
const maxSteps = Math.min(options?.maxSteps ?? this.config.maxSteps ?? DEFAULT_MAX_STEPS, MAX_STEPS_LIMIT);
|
|
65
|
+
try {
|
|
66
|
+
// 4. generateText() — tool loop 자동 실행
|
|
67
|
+
let stepIndex = 0;
|
|
68
|
+
const result = await generateText({
|
|
69
|
+
model,
|
|
70
|
+
system: options?.systemPrompt ?? undefined,
|
|
71
|
+
prompt: message,
|
|
72
|
+
tools: vercelTools,
|
|
73
|
+
maxSteps,
|
|
74
|
+
...(this.config.temperature !== undefined && { temperature: this.config.temperature }),
|
|
75
|
+
...(this.config.maxTokens !== undefined && { maxTokens: this.config.maxTokens }),
|
|
76
|
+
onStepFinish: (event) => {
|
|
77
|
+
stepIndex++;
|
|
78
|
+
if (!options?.onOutput)
|
|
79
|
+
return;
|
|
80
|
+
// tool call 기록 — Claude stream-json 호환 포맷
|
|
81
|
+
if (event.toolCalls && event.toolCalls.length > 0) {
|
|
82
|
+
for (const tc of event.toolCalls) {
|
|
83
|
+
options.onOutput(JSON.stringify({
|
|
84
|
+
type: 'assistant',
|
|
85
|
+
message: {
|
|
86
|
+
content: [{ type: 'tool_use', id: tc.toolCallId, name: tc.toolName, input: tc.args }],
|
|
87
|
+
},
|
|
88
|
+
}), 'stdout');
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// tool result 기록 — Claude stream-json 호환 포맷
|
|
92
|
+
if (event.toolResults && event.toolResults.length > 0) {
|
|
93
|
+
for (const tr of event.toolResults) {
|
|
94
|
+
const output = typeof tr.result === 'string'
|
|
95
|
+
? tr.result
|
|
96
|
+
: JSON.stringify(tr.result);
|
|
97
|
+
options.onOutput(JSON.stringify({
|
|
98
|
+
type: 'user',
|
|
99
|
+
message: {
|
|
100
|
+
content: [{ type: 'tool_result', tool_use_id: tr.toolCallId, output, is_error: false }],
|
|
101
|
+
},
|
|
102
|
+
}), 'stdout');
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
});
|
|
107
|
+
// 5. Client tool detection — if generateText stopped because of a tool without execute
|
|
108
|
+
const clientToolNames = new Set((options?.tools ?? []).filter(t => !t.execute).map(t => t.name));
|
|
109
|
+
if (result.finishReason === 'tool-calls' &&
|
|
110
|
+
Array.isArray(result.toolCalls) &&
|
|
111
|
+
result.toolCalls.length > 0) {
|
|
112
|
+
const pendingCalls = result.toolCalls
|
|
113
|
+
.filter(tc => clientToolNames.has(tc.toolName));
|
|
114
|
+
if (pendingCalls.length > 0) {
|
|
115
|
+
const tc = pendingCalls[0];
|
|
116
|
+
throw new bridge_1.ClientToolCallRequiredError({ toolCallId: tc.toolCallId, toolName: tc.toolName, args: tc.args }, {
|
|
117
|
+
userMessage: message,
|
|
118
|
+
responseMessages: result.response?.messages ?? [],
|
|
119
|
+
toolDefinitions: options?.tools ?? [],
|
|
120
|
+
maxSteps,
|
|
121
|
+
systemPrompt: options?.systemPrompt,
|
|
122
|
+
modelOverride: options?.model,
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
// 6. Usage 콜백
|
|
127
|
+
if (options?.onUsage && result.usage) {
|
|
128
|
+
const usage = {
|
|
129
|
+
inputTokens: result.usage.promptTokens ?? 0,
|
|
130
|
+
outputTokens: result.usage.completionTokens ?? 0,
|
|
131
|
+
cachedInputTokens: 0,
|
|
132
|
+
costUsd: 0,
|
|
133
|
+
};
|
|
134
|
+
options.onUsage(usage);
|
|
135
|
+
}
|
|
136
|
+
// 7. Model 콜백
|
|
137
|
+
if (options?.onModel) {
|
|
138
|
+
options.onModel(options.model ?? this.config.model);
|
|
139
|
+
}
|
|
140
|
+
return result.text ?? '';
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
// Re-throw ClientToolCallRequiredError as-is (not a provider error)
|
|
144
|
+
if (error instanceof bridge_1.ClientToolCallRequiredError)
|
|
145
|
+
throw error;
|
|
146
|
+
if (error.status === 401) {
|
|
147
|
+
throw new bridge_1.ProviderError(`Authentication failed for ${this.config.provider}. Check your API key.`, this.config.provider);
|
|
148
|
+
}
|
|
149
|
+
if (error.status === 429) {
|
|
150
|
+
throw new bridge_1.ProviderError(`Rate limit exceeded for ${this.config.provider}.`, this.config.provider);
|
|
151
|
+
}
|
|
152
|
+
throw new bridge_1.ProviderError(`Provider error: ${error.message}`, this.config.provider);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Resume a conversation after client-side tool results are provided.
|
|
157
|
+
* Reconstructs the message history and calls generateText() again.
|
|
158
|
+
*/
|
|
159
|
+
async continueWithToolResults(state, toolResults, options) {
|
|
160
|
+
const { generateText, tool: toolFn } = await Promise.resolve().then(() => __importStar(require('ai')));
|
|
161
|
+
const vercelTools = this.convertTools(state.toolDefinitions, toolFn);
|
|
162
|
+
const model = this.createModel(state.modelOverride);
|
|
163
|
+
const maxSteps = Math.min(state.maxSteps ?? this.config.maxSteps ?? DEFAULT_MAX_STEPS, MAX_STEPS_LIMIT);
|
|
164
|
+
// Build messages: original user message + previous response + new tool results
|
|
165
|
+
const messages = [
|
|
166
|
+
{ role: 'user', content: state.userMessage },
|
|
167
|
+
...state.responseMessages,
|
|
168
|
+
{
|
|
169
|
+
role: 'tool',
|
|
170
|
+
content: toolResults.map(tr => ({
|
|
171
|
+
type: 'tool-result',
|
|
172
|
+
toolCallId: tr.toolCallId,
|
|
173
|
+
toolName: tr.toolName,
|
|
174
|
+
result: typeof tr.result === 'string' ? tr.result : JSON.stringify(tr.result),
|
|
175
|
+
})),
|
|
176
|
+
},
|
|
177
|
+
];
|
|
178
|
+
try {
|
|
179
|
+
const result = await generateText({
|
|
180
|
+
model,
|
|
181
|
+
system: state.systemPrompt ?? undefined,
|
|
182
|
+
messages: messages,
|
|
183
|
+
tools: vercelTools,
|
|
184
|
+
maxSteps,
|
|
185
|
+
...(this.config.temperature !== undefined && { temperature: this.config.temperature }),
|
|
186
|
+
...(this.config.maxTokens !== undefined && { maxTokens: this.config.maxTokens }),
|
|
187
|
+
});
|
|
188
|
+
// Check again for client tool calls
|
|
189
|
+
const clientToolNames = new Set(state.toolDefinitions.filter(t => !t.execute).map(t => t.name));
|
|
190
|
+
if (result.finishReason === 'tool-calls' &&
|
|
191
|
+
Array.isArray(result.toolCalls) &&
|
|
192
|
+
result.toolCalls.length > 0) {
|
|
193
|
+
const pendingCalls = result.toolCalls
|
|
194
|
+
.filter(tc => clientToolNames.has(tc.toolName));
|
|
195
|
+
if (pendingCalls.length > 0) {
|
|
196
|
+
const tc = pendingCalls[0];
|
|
197
|
+
// Update continuation state with new messages
|
|
198
|
+
throw new bridge_1.ClientToolCallRequiredError({ toolCallId: tc.toolCallId, toolName: tc.toolName, args: tc.args }, {
|
|
199
|
+
userMessage: state.userMessage,
|
|
200
|
+
responseMessages: [
|
|
201
|
+
...state.responseMessages,
|
|
202
|
+
{
|
|
203
|
+
role: 'tool',
|
|
204
|
+
content: toolResults.map(tr => ({
|
|
205
|
+
type: 'tool-result',
|
|
206
|
+
toolCallId: tr.toolCallId,
|
|
207
|
+
toolName: tr.toolName,
|
|
208
|
+
result: typeof tr.result === 'string' ? tr.result : JSON.stringify(tr.result),
|
|
209
|
+
})),
|
|
210
|
+
},
|
|
211
|
+
...(result.response?.messages ?? []),
|
|
212
|
+
],
|
|
213
|
+
toolDefinitions: state.toolDefinitions,
|
|
214
|
+
maxSteps: state.maxSteps,
|
|
215
|
+
systemPrompt: state.systemPrompt,
|
|
216
|
+
modelOverride: state.modelOverride,
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
// Usage/model callbacks
|
|
221
|
+
if (options?.onUsage && result.usage) {
|
|
222
|
+
options.onUsage({
|
|
223
|
+
inputTokens: result.usage.promptTokens ?? 0,
|
|
224
|
+
outputTokens: result.usage.completionTokens ?? 0,
|
|
225
|
+
cachedInputTokens: 0,
|
|
226
|
+
costUsd: 0,
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
if (options?.onModel) {
|
|
230
|
+
options.onModel(state.modelOverride ?? this.config.model);
|
|
231
|
+
}
|
|
232
|
+
return result.text ?? '';
|
|
233
|
+
}
|
|
234
|
+
catch (error) {
|
|
235
|
+
if (error instanceof bridge_1.ClientToolCallRequiredError)
|
|
236
|
+
throw error;
|
|
237
|
+
throw new bridge_1.ProviderError(`Provider error: ${error.message}`, this.config.provider);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* CrewX ToolDefinition[] → Vercel AI SDK tool Record 변환.
|
|
242
|
+
* execute가 없는 tool은 client tool로 처리 (Vercel AI SDK 네이티브 지원).
|
|
243
|
+
*/
|
|
244
|
+
convertTools(tools, toolFn) {
|
|
245
|
+
const { z } = require('zod');
|
|
246
|
+
const vercelTools = {};
|
|
247
|
+
for (const td of tools) {
|
|
248
|
+
const parameters = this.jsonSchemaToZod(td.parameters ?? {}, z);
|
|
249
|
+
if (td.execute) {
|
|
250
|
+
// Server tool — execute 함수 있음
|
|
251
|
+
vercelTools[td.name] = toolFn({
|
|
252
|
+
description: td.description,
|
|
253
|
+
parameters,
|
|
254
|
+
execute: async (args) => {
|
|
255
|
+
return td.execute(args);
|
|
256
|
+
},
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
else {
|
|
260
|
+
// Client tool — execute 없음 (Vercel AI SDK가 tool_result를 기다림)
|
|
261
|
+
vercelTools[td.name] = toolFn({
|
|
262
|
+
description: td.description,
|
|
263
|
+
parameters,
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
return vercelTools;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* JSON Schema → Zod 간이 변환.
|
|
271
|
+
*/
|
|
272
|
+
jsonSchemaToZod(schema, z) {
|
|
273
|
+
if (!schema || !schema.properties)
|
|
274
|
+
return z.object({});
|
|
275
|
+
const shape = {};
|
|
276
|
+
const props = schema.properties;
|
|
277
|
+
const required = schema.required ?? [];
|
|
278
|
+
for (const [key, prop] of Object.entries(props)) {
|
|
279
|
+
let field;
|
|
280
|
+
switch (prop.type) {
|
|
281
|
+
case 'string':
|
|
282
|
+
field = z.string();
|
|
283
|
+
break;
|
|
284
|
+
case 'number':
|
|
285
|
+
field = z.number();
|
|
286
|
+
break;
|
|
287
|
+
case 'integer':
|
|
288
|
+
field = z.number().int();
|
|
289
|
+
break;
|
|
290
|
+
case 'boolean':
|
|
291
|
+
field = z.boolean();
|
|
292
|
+
break;
|
|
293
|
+
case 'array':
|
|
294
|
+
field = z.array(z.any());
|
|
295
|
+
break;
|
|
296
|
+
default: field = z.any();
|
|
297
|
+
}
|
|
298
|
+
if (prop.description)
|
|
299
|
+
field = field.describe(prop.description);
|
|
300
|
+
if (!required.includes(key))
|
|
301
|
+
field = field.optional();
|
|
302
|
+
shape[key] = field;
|
|
303
|
+
}
|
|
304
|
+
return z.object(shape);
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Vercel AI SDK model 인스턴스 생성.
|
|
308
|
+
* provider string에 따라 적절한 SDK 팩토리 사용.
|
|
309
|
+
*/
|
|
310
|
+
createModel(modelOverride) {
|
|
311
|
+
const { provider, apiKey, baseURL } = this.config;
|
|
312
|
+
const model = modelOverride || this.config.model;
|
|
313
|
+
switch (provider) {
|
|
314
|
+
case 'api/openrouter': {
|
|
315
|
+
const { createOpenAI } = require('@ai-sdk/openai');
|
|
316
|
+
return createOpenAI({
|
|
317
|
+
apiKey: apiKey || process.env.OPENROUTER_API_KEY,
|
|
318
|
+
baseURL: baseURL || 'https://openrouter.ai/api/v1',
|
|
319
|
+
})(model);
|
|
320
|
+
}
|
|
321
|
+
case 'api/openai': {
|
|
322
|
+
const { createOpenAI } = require('@ai-sdk/openai');
|
|
323
|
+
return createOpenAI({
|
|
324
|
+
apiKey: apiKey || process.env.OPENAI_API_KEY,
|
|
325
|
+
...(baseURL && { baseURL }),
|
|
326
|
+
})(model);
|
|
327
|
+
}
|
|
328
|
+
case 'api/anthropic': {
|
|
329
|
+
const { createAnthropic } = require('@ai-sdk/anthropic');
|
|
330
|
+
return createAnthropic({
|
|
331
|
+
apiKey: apiKey || process.env.ANTHROPIC_API_KEY,
|
|
332
|
+
...(baseURL && { baseURL }),
|
|
333
|
+
})(model);
|
|
334
|
+
}
|
|
335
|
+
case 'api/google': {
|
|
336
|
+
const { createGoogleGenerativeAI } = require('@ai-sdk/google');
|
|
337
|
+
return createGoogleGenerativeAI({
|
|
338
|
+
apiKey: apiKey || process.env.GOOGLE_API_KEY,
|
|
339
|
+
})(model);
|
|
340
|
+
}
|
|
341
|
+
default:
|
|
342
|
+
throw new bridge_1.ProviderError(`Unsupported API provider: ${provider}`, provider);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
exports.VercelProviderRuntime = VercelProviderRuntime;
|
|
347
|
+
//# sourceMappingURL=vercel-runtime.js.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remote Agent Module
|
|
3
|
+
*
|
|
4
|
+
* SDK core module for remote agent communication via MCP protocol.
|
|
5
|
+
*/
|
|
6
|
+
export * from './types.js';
|
|
7
|
+
export { McpHttpTransport } from './remote-transport.js';
|
|
8
|
+
export type { McpHttpTransportOptions } from './remote-transport.js';
|
|
9
|
+
export { RemoteAgentManager } from './remote-agent-manager.js';
|
|
10
|
+
export type { RemoteAgentManagerOptions } from './remote-agent-manager.js';
|
|
11
|
+
export { RemoteProviderRuntime, createRemoteProviderFactory, resolveFileRemoteAgent } from './remote-provider.js';
|
|
12
|
+
export type { ProviderFactoryFn, FileRemoteResolution, FileRemoteResolver } from './remote-provider.js';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Remote Agent Module
|
|
4
|
+
*
|
|
5
|
+
* SDK core module for remote agent communication via MCP protocol.
|
|
6
|
+
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
19
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
20
|
+
};
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.resolveFileRemoteAgent = exports.createRemoteProviderFactory = exports.RemoteProviderRuntime = exports.RemoteAgentManager = exports.McpHttpTransport = void 0;
|
|
23
|
+
__exportStar(require("./types.js"), exports);
|
|
24
|
+
var remote_transport_js_1 = require("./remote-transport.js");
|
|
25
|
+
Object.defineProperty(exports, "McpHttpTransport", { enumerable: true, get: function () { return remote_transport_js_1.McpHttpTransport; } });
|
|
26
|
+
var remote_agent_manager_js_1 = require("./remote-agent-manager.js");
|
|
27
|
+
Object.defineProperty(exports, "RemoteAgentManager", { enumerable: true, get: function () { return remote_agent_manager_js_1.RemoteAgentManager; } });
|
|
28
|
+
var remote_provider_js_1 = require("./remote-provider.js");
|
|
29
|
+
Object.defineProperty(exports, "RemoteProviderRuntime", { enumerable: true, get: function () { return remote_provider_js_1.RemoteProviderRuntime; } });
|
|
30
|
+
Object.defineProperty(exports, "createRemoteProviderFactory", { enumerable: true, get: function () { return remote_provider_js_1.createRemoteProviderFactory; } });
|
|
31
|
+
Object.defineProperty(exports, "resolveFileRemoteAgent", { enumerable: true, get: function () { return remote_provider_js_1.resolveFileRemoteAgent; } });
|
|
32
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remote Agent Manager
|
|
3
|
+
*
|
|
4
|
+
* Manages communication with remote MCP agents.
|
|
5
|
+
* Migrated from sdk-bak/src/core/remote/remote-agent-manager.ts
|
|
6
|
+
* and adapted to use the new RemoteTransport interface.
|
|
7
|
+
*/
|
|
8
|
+
import type { RemoteAgentConfig, RemoteTransport, RemoteAgentQueryRequest, RemoteAgentExecuteRequest, RemoteAgentResponse, ToolNameMapping } from './types.js';
|
|
9
|
+
/** Options for creating a RemoteAgentManager. */
|
|
10
|
+
export interface RemoteAgentManagerOptions {
|
|
11
|
+
/** Optional logger function. */
|
|
12
|
+
logger?: (message: string, level?: 'debug' | 'info' | 'warn' | 'error') => void;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Remote Agent Manager
|
|
16
|
+
*
|
|
17
|
+
* Manages communication with remote MCP agents.
|
|
18
|
+
* Each loaded agent config creates its own transport instance.
|
|
19
|
+
*/
|
|
20
|
+
export declare class RemoteAgentManager {
|
|
21
|
+
private readonly logger;
|
|
22
|
+
private readonly configs;
|
|
23
|
+
private readonly transports;
|
|
24
|
+
constructor(options?: RemoteAgentManagerOptions);
|
|
25
|
+
/**
|
|
26
|
+
* Load configuration for a remote agent.
|
|
27
|
+
* Creates a transport instance for the agent.
|
|
28
|
+
*/
|
|
29
|
+
loadConfig(agentId: string, config: RemoteAgentConfig): void;
|
|
30
|
+
/**
|
|
31
|
+
* Load configuration with a custom transport (e.g. for testing).
|
|
32
|
+
*/
|
|
33
|
+
loadConfigWithTransport(agentId: string, config: RemoteAgentConfig, transport: RemoteTransport): void;
|
|
34
|
+
/** Get configuration for a remote agent. */
|
|
35
|
+
getConfig(agentId: string): RemoteAgentConfig | undefined;
|
|
36
|
+
/** Check if an agent is configured as remote. */
|
|
37
|
+
isRemoteAgent(agentId: string): boolean;
|
|
38
|
+
/** Get all configured remote agent IDs. */
|
|
39
|
+
getRemoteAgentIds(): string[];
|
|
40
|
+
/** Query a remote agent. */
|
|
41
|
+
query(agentId: string, request: RemoteAgentQueryRequest): Promise<RemoteAgentResponse>;
|
|
42
|
+
/** Execute a task on a remote agent. */
|
|
43
|
+
execute(agentId: string, request: RemoteAgentExecuteRequest): Promise<RemoteAgentResponse>;
|
|
44
|
+
/** Map tool names for a remote agent. */
|
|
45
|
+
mapToolNames(agentId: string, mapping: Partial<ToolNameMapping>): void;
|
|
46
|
+
/** Clear all configurations and close transports. */
|
|
47
|
+
clearConfigs(): Promise<void>;
|
|
48
|
+
private requireConfig;
|
|
49
|
+
private callRemoteTool;
|
|
50
|
+
/** Normalize remote agent response to consistent format. */
|
|
51
|
+
normalizeResponse(result: unknown): RemoteAgentResponse;
|
|
52
|
+
private validateConfig;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=remote-agent-manager.d.ts.map
|