@crewx/sdk 0.8.0-rc.72 → 0.8.0-rc.74
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 +67 -102
- 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,10 @@
|
|
|
1
|
+
import { ToolObserverPlugin } from './observer';
|
|
2
|
+
export function definePlugin(def) {
|
|
3
|
+
return new (class extends ToolObserverPlugin {
|
|
4
|
+
name = def.name;
|
|
5
|
+
version = def.version;
|
|
6
|
+
on = def.on;
|
|
7
|
+
run = def.run;
|
|
8
|
+
})();
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=define.js.map
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { resolve, relative } from 'path';
|
|
2
|
+
const MAX_REASON_LENGTH = 200;
|
|
3
|
+
export function sanitizeDenyReason(reason) {
|
|
4
|
+
const cleaned = reason.replace(/[\x00-\x1f\x7f]/g, '');
|
|
5
|
+
if (cleaned.length <= MAX_REASON_LENGTH) {
|
|
6
|
+
return cleaned;
|
|
7
|
+
}
|
|
8
|
+
return cleaned.slice(0, MAX_REASON_LENGTH - 11) + ' [redacted]';
|
|
9
|
+
}
|
|
10
|
+
export function isPathSafe(pluginPath, projectRoot) {
|
|
11
|
+
const resolved = resolve(pluginPath);
|
|
12
|
+
const root = resolve(projectRoot);
|
|
13
|
+
const rel = relative(root, resolved);
|
|
14
|
+
if (rel.startsWith('..') || resolve(resolved).startsWith('/etc/') || resolve(resolved).startsWith('/usr/')) {
|
|
15
|
+
return false;
|
|
16
|
+
}
|
|
17
|
+
if (resolved.includes('node_modules')) {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
export function buildHookContext(input, cwd) {
|
|
23
|
+
return {
|
|
24
|
+
event: 'beforeTool',
|
|
25
|
+
traceId: input.tool_use_id || '',
|
|
26
|
+
agent: { id: '', role: '', team: '' },
|
|
27
|
+
provider: 'cli/claude',
|
|
28
|
+
thread: { id: '' },
|
|
29
|
+
tool: {
|
|
30
|
+
name: input.tool_name,
|
|
31
|
+
rawName: input.tool_name,
|
|
32
|
+
input: input.tool_input,
|
|
33
|
+
},
|
|
34
|
+
cwd: cwd || input.cwd,
|
|
35
|
+
sessionId: input.session_id,
|
|
36
|
+
pass: () => ({ type: 'pass' }),
|
|
37
|
+
deny: (r) => ({ type: 'deny', reason: r }),
|
|
38
|
+
inject: (m) => ({ type: 'inject', message: m }),
|
|
39
|
+
modify: (p) => ({ type: 'modify', patch: p }),
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
export async function evaluateHook(plugin, input, cwd) {
|
|
43
|
+
const ctx = buildHookContext(input, cwd);
|
|
44
|
+
const result = await plugin.run(ctx);
|
|
45
|
+
const baseOutput = {
|
|
46
|
+
hookSpecificOutput: {
|
|
47
|
+
hookEventName: input.hook_event_name,
|
|
48
|
+
permissionDecision: 'allow',
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
switch (result.type) {
|
|
52
|
+
case 'pass':
|
|
53
|
+
return { exitCode: 0, stdout: baseOutput };
|
|
54
|
+
case 'deny': {
|
|
55
|
+
const sanitizedReason = sanitizeDenyReason(result.reason);
|
|
56
|
+
return {
|
|
57
|
+
exitCode: 2,
|
|
58
|
+
stdout: {
|
|
59
|
+
hookSpecificOutput: {
|
|
60
|
+
hookEventName: input.hook_event_name,
|
|
61
|
+
permissionDecision: 'deny',
|
|
62
|
+
permissionDecisionReason: sanitizedReason,
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
case 'inject':
|
|
68
|
+
case 'modify':
|
|
69
|
+
console.error(`[crewx] Hook result type '${result.type}' is not supported in Phase 0. ` +
|
|
70
|
+
`Plugin: ${plugin.name}. Treating as pass.`);
|
|
71
|
+
return { exitCode: 0, stdout: baseOutput };
|
|
72
|
+
default:
|
|
73
|
+
return { exitCode: 0, stdout: baseOutput };
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=dispatch.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { ToolObserverPlugin } from './observer';
|
|
2
|
+
export { HookPlugin, defineHookPlugin } from './plugin';
|
|
3
|
+
export { definePlugin } from './define';
|
|
4
|
+
export { Tools } from './types';
|
|
5
|
+
export { evaluateHook, sanitizeDenyReason, isPathSafe, buildHookContext, } from './dispatch';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { CrewxPlugin } from '../plugin';
|
|
2
|
+
export class ToolObserverPlugin extends CrewxPlugin {
|
|
3
|
+
unsubs = [];
|
|
4
|
+
attach(crewx) {
|
|
5
|
+
if (this.on.beforeTool) {
|
|
6
|
+
const unsub = crewx.on('tool:observed:before', async (e) => {
|
|
7
|
+
if (!this.matchesTool(this.on.beforeTool, e.tool.name))
|
|
8
|
+
return;
|
|
9
|
+
const ctx = this.buildContext('beforeTool', e);
|
|
10
|
+
await this.run(ctx);
|
|
11
|
+
});
|
|
12
|
+
this.unsubs.push(unsub);
|
|
13
|
+
}
|
|
14
|
+
if (this.on.afterTool) {
|
|
15
|
+
const unsub = crewx.on('tool:observed:after', async (e) => {
|
|
16
|
+
if (!this.matchesTool(this.on.afterTool, e.tool.name))
|
|
17
|
+
return;
|
|
18
|
+
const ctx = this.buildContext('afterTool', e);
|
|
19
|
+
await this.run(ctx);
|
|
20
|
+
});
|
|
21
|
+
this.unsubs.push(unsub);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
async detach(_crewx) {
|
|
25
|
+
for (const unsub of this.unsubs)
|
|
26
|
+
unsub();
|
|
27
|
+
this.unsubs = [];
|
|
28
|
+
}
|
|
29
|
+
matchesTool(filter, toolName) {
|
|
30
|
+
if (filter === true)
|
|
31
|
+
return true;
|
|
32
|
+
return filter.includes(toolName);
|
|
33
|
+
}
|
|
34
|
+
buildContext(event, e) {
|
|
35
|
+
return {
|
|
36
|
+
event,
|
|
37
|
+
traceId: e.traceId,
|
|
38
|
+
agent: {
|
|
39
|
+
id: e.agentId || e.agentRef,
|
|
40
|
+
role: '',
|
|
41
|
+
team: '',
|
|
42
|
+
},
|
|
43
|
+
provider: e.provider,
|
|
44
|
+
thread: { id: e.threadId || '' },
|
|
45
|
+
tool: {
|
|
46
|
+
name: e.tool.name,
|
|
47
|
+
rawName: e.tool.rawName,
|
|
48
|
+
input: 'input' in e.tool ? e.tool.input : undefined,
|
|
49
|
+
},
|
|
50
|
+
cwd: process.cwd(),
|
|
51
|
+
sessionId: e.sessionId || '',
|
|
52
|
+
pass: () => ({ type: 'pass' }),
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=observer.js.map
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export class HookPlugin {
|
|
2
|
+
capabilities = { required: [] };
|
|
3
|
+
}
|
|
4
|
+
export function defineHookPlugin(def) {
|
|
5
|
+
return new (class extends HookPlugin {
|
|
6
|
+
name = def.name;
|
|
7
|
+
version = def.version;
|
|
8
|
+
capabilities = def.capabilities ?? { required: [] };
|
|
9
|
+
run = def.run;
|
|
10
|
+
})();
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @crewx/sdk browser entry point.
|
|
3
|
+
*
|
|
4
|
+
* Exports only browser-safe modules — no Node.js dependencies
|
|
5
|
+
* (child_process, fs, path, crypto, events).
|
|
6
|
+
*/
|
|
7
|
+
// Browser-safe facade
|
|
8
|
+
export { Crewx } from './facade/Crewx.browser.js';
|
|
9
|
+
// Browser-safe provider bridge (registry only, no CLI spawn)
|
|
10
|
+
export { registerProviderFactory, createProvider, ProviderError } from './provider/bridge.browser.js';
|
|
11
|
+
// Config — browser-safe (no fs import)
|
|
12
|
+
export { parseYamlContent, ConfigLoadError } from './config/loader.browser.js';
|
|
13
|
+
// Platform adapters
|
|
14
|
+
export { BrowserFsAdapter } from './platform/BrowserFsAdapter.js';
|
|
15
|
+
//# sourceMappingURL=index.browser.js.map
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @crewx/sdk public API surface.
|
|
3
|
+
*/
|
|
4
|
+
// Main facade
|
|
5
|
+
export { Crewx } from './facade/Crewx';
|
|
6
|
+
// Plugin system
|
|
7
|
+
export { CrewxPlugin } from './plugin';
|
|
8
|
+
// Event system
|
|
9
|
+
export { TypedEventEmitter } from './events/TypedEventEmitter';
|
|
10
|
+
// Layout system
|
|
11
|
+
export { LayoutLoader } from './layout/loader';
|
|
12
|
+
export { LayoutRenderer } from './layout/renderer';
|
|
13
|
+
export { PropsValidator } from './layout/props-validator';
|
|
14
|
+
export { LayoutLoadError, PropsValidationError } from './layout/types';
|
|
15
|
+
// Template engine
|
|
16
|
+
export { TemplateEngine } from './template/engine';
|
|
17
|
+
// Document loader
|
|
18
|
+
export { DocumentLoader } from './template/loader/DocumentLoader';
|
|
19
|
+
export { NodeFsAdapter, defaultFsAdapter } from './platform/NodeFsAdapter';
|
|
20
|
+
export { BrowserFsAdapter } from './platform/BrowserFsAdapter';
|
|
21
|
+
// P1/P2 helpers (exported for direct use if needed)
|
|
22
|
+
export { truncateHelper, lengthHelper, escapeHandlebarsHelper, formatFileSizeHelper, formatTimestampHelper, } from './template/helpers/p1p2';
|
|
23
|
+
// Exec audit log control
|
|
24
|
+
export { setAuditVerbose } from './template/helpers/exec';
|
|
25
|
+
// Config utilities
|
|
26
|
+
export { loadYamlFile, parseYamlContent, ConfigLoadError } from './config/loader';
|
|
27
|
+
// Agent utilities
|
|
28
|
+
export { resolveAgent, AgentNotFoundError } from './agent/resolver';
|
|
29
|
+
// Provider utilities
|
|
30
|
+
export { createProvider, ProviderError, ClientToolCallRequiredError, registerProviderFactory } from './provider/bridge';
|
|
31
|
+
export { VercelProviderRuntime } from './provider/vercel-runtime';
|
|
32
|
+
export { registerApiProviders } from './provider/register-api';
|
|
33
|
+
// Tools
|
|
34
|
+
export { createDelegateTool } from './tools/delegate';
|
|
35
|
+
// Env utilities
|
|
36
|
+
export { resolveCrewxCli, resolveCrewxWorkspace } from './utils/env-defaults';
|
|
37
|
+
// ID utilities (backward-compat for @crewx/* built-in packages)
|
|
38
|
+
export { generateId, generateFingerprint } from './utils/id';
|
|
39
|
+
// Workspace utilities
|
|
40
|
+
export { hashWorkspaceId, normalizeWorkspacePath } from './utils/workspace';
|
|
41
|
+
// Boxing module
|
|
42
|
+
export { SdkBoxService } from './boxing/box.service';
|
|
43
|
+
export { buildContext } from './boxing/context-builder';
|
|
44
|
+
// Parsers
|
|
45
|
+
export { parseStdoutEvent } from './parsers/router';
|
|
46
|
+
// Provider utilities
|
|
47
|
+
export { parseUsage } from './provider/parse-usage';
|
|
48
|
+
// Parallel execution
|
|
49
|
+
export { ParallelRunner, ParallelRunnerTimeoutError } from './parallel/parallel-runner';
|
|
50
|
+
export { runQueriesParallel, runExecutesParallel } from './parallel/helpers';
|
|
51
|
+
export { AgentRuntime } from './parallel/agent-runtime';
|
|
52
|
+
// Plugin provider module
|
|
53
|
+
export { PluginProviderRuntime, createPluginProviderFactory } from './plugin/plugin-provider';
|
|
54
|
+
// Remote agent module
|
|
55
|
+
export { RemoteProviderRuntime, createRemoteProviderFactory } from './remote/remote-provider';
|
|
56
|
+
export { RemoteAgentManager } from './remote/remote-agent-manager';
|
|
57
|
+
export { McpHttpTransport } from './remote/remote-transport';
|
|
58
|
+
// Server module (MCP handler)
|
|
59
|
+
export { createHandler } from './server/handler';
|
|
60
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LayoutLoader — loads layout templates from templates/agents/*.yaml files.
|
|
3
|
+
* Ported 1:1 from packages/sdk-bak/src/services/layout-loader.service.ts.
|
|
4
|
+
* Only import paths and DEFAULT_OPTIONS.templatesPath are changed.
|
|
5
|
+
*/
|
|
6
|
+
import { readFileSync, readdirSync, existsSync } from 'fs';
|
|
7
|
+
import * as path from 'path';
|
|
8
|
+
import { load as loadYaml } from 'js-yaml';
|
|
9
|
+
import { LayoutLoadError, } from './types';
|
|
10
|
+
/**
|
|
11
|
+
* Default loader options — points to SDK's bundled templates directory.
|
|
12
|
+
*/
|
|
13
|
+
const DEFAULT_OPTIONS = {
|
|
14
|
+
templatesPath: path.join(__dirname, '../../../templates/agents'),
|
|
15
|
+
validationMode: 'lenient',
|
|
16
|
+
fallbackLayoutId: 'crewx/default',
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Layout loader service.
|
|
20
|
+
* Loads and caches layout definitions from YAML files.
|
|
21
|
+
* Provides fallback mechanism and prop override support.
|
|
22
|
+
*/
|
|
23
|
+
export class LayoutLoader {
|
|
24
|
+
layouts = new Map();
|
|
25
|
+
options;
|
|
26
|
+
constructor(options) {
|
|
27
|
+
this.options = { ...DEFAULT_OPTIONS, ...options };
|
|
28
|
+
this.loadAllLayouts();
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Load a layout by ID with optional props override.
|
|
32
|
+
*/
|
|
33
|
+
load(layoutId, propsOverride) {
|
|
34
|
+
let layout = this.layouts.get(layoutId);
|
|
35
|
+
if (!layout) {
|
|
36
|
+
const normalizedId = this.normalizeLayoutId(layoutId);
|
|
37
|
+
layout = this.layouts.get(normalizedId);
|
|
38
|
+
}
|
|
39
|
+
if (!layout) {
|
|
40
|
+
console.warn(`Layout not found: ${layoutId}, falling back to ${this.options.fallbackLayoutId}`);
|
|
41
|
+
layout = this.layouts.get(this.options.fallbackLayoutId);
|
|
42
|
+
if (!layout) {
|
|
43
|
+
throw new LayoutLoadError(`Fallback layout not found: ${this.options.fallbackLayoutId}`, this.options.fallbackLayoutId);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
if (propsOverride && Object.keys(propsOverride).length > 0) {
|
|
47
|
+
return {
|
|
48
|
+
...layout,
|
|
49
|
+
defaultProps: { ...layout.defaultProps, ...propsOverride },
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
return layout;
|
|
53
|
+
}
|
|
54
|
+
getLayoutIds() {
|
|
55
|
+
return Array.from(this.layouts.keys());
|
|
56
|
+
}
|
|
57
|
+
hasLayout(layoutId) {
|
|
58
|
+
if (this.layouts.has(layoutId))
|
|
59
|
+
return true;
|
|
60
|
+
const normalizedId = this.normalizeLayoutId(layoutId);
|
|
61
|
+
return this.layouts.has(normalizedId);
|
|
62
|
+
}
|
|
63
|
+
reload() {
|
|
64
|
+
this.layouts.clear();
|
|
65
|
+
this.loadAllLayouts();
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Register or override a layout at runtime.
|
|
69
|
+
*/
|
|
70
|
+
registerLayout(layoutId, layoutConfig) {
|
|
71
|
+
if (!layoutId || typeof layoutId !== 'string') {
|
|
72
|
+
throw new LayoutLoadError('Layout ID must be a non-empty string', layoutId);
|
|
73
|
+
}
|
|
74
|
+
const config = typeof layoutConfig === 'string'
|
|
75
|
+
? { template: layoutConfig }
|
|
76
|
+
: layoutConfig;
|
|
77
|
+
const template = typeof config.template === 'string' ? config.template : '';
|
|
78
|
+
if (!template || template.trim().length === 0) {
|
|
79
|
+
throw new LayoutLoadError(`Custom layout template is empty for ${layoutId}`, layoutId);
|
|
80
|
+
}
|
|
81
|
+
const propsSchemaRaw = config.propsSchema || {};
|
|
82
|
+
const defaultPropsFromSchema = this.extractDefaultProps(propsSchemaRaw);
|
|
83
|
+
const explicitDefaults = config.defaultProps || {};
|
|
84
|
+
const layoutDefinition = {
|
|
85
|
+
id: layoutId,
|
|
86
|
+
version: config.version || '1.0.0',
|
|
87
|
+
description: config.description || `Custom layout ${layoutId}`,
|
|
88
|
+
template,
|
|
89
|
+
propsSchema: this.parsePropsSchema(propsSchemaRaw),
|
|
90
|
+
defaultProps: { ...defaultPropsFromSchema, ...explicitDefaults },
|
|
91
|
+
};
|
|
92
|
+
const existingLayout = this.layouts.get(layoutId);
|
|
93
|
+
const templatesEqual = existingLayout?.template === template &&
|
|
94
|
+
JSON.stringify(existingLayout?.defaultProps ?? {}) === JSON.stringify(layoutDefinition.defaultProps ?? {}) &&
|
|
95
|
+
JSON.stringify(existingLayout?.propsSchema ?? {}) === JSON.stringify(layoutDefinition.propsSchema ?? {});
|
|
96
|
+
this.layouts.set(layoutId, layoutDefinition);
|
|
97
|
+
if (process.env.CREWX_VERBOSE === '1') {
|
|
98
|
+
if (!existingLayout) {
|
|
99
|
+
console.error(`Registered custom layout: ${layoutId}`);
|
|
100
|
+
}
|
|
101
|
+
else if (!templatesEqual) {
|
|
102
|
+
console.error(`Updated custom layout: ${layoutId}`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Register multiple layouts from a map.
|
|
108
|
+
*/
|
|
109
|
+
registerLayouts(layoutsMap) {
|
|
110
|
+
for (const [id, config] of Object.entries(layoutsMap)) {
|
|
111
|
+
try {
|
|
112
|
+
this.registerLayout(id, config);
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
console.warn(`Failed to register custom layout ${id}:`, error instanceof Error ? error.message : error);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
loadAllLayouts() {
|
|
120
|
+
const layoutsDir = this.options.templatesPath;
|
|
121
|
+
if (!existsSync(layoutsDir)) {
|
|
122
|
+
throw new LayoutLoadError(`Templates directory not found: ${layoutsDir}`, undefined, new Error(`Directory does not exist: ${layoutsDir}`));
|
|
123
|
+
}
|
|
124
|
+
try {
|
|
125
|
+
const files = readdirSync(layoutsDir).filter(f => f.endsWith('.yaml') || f.endsWith('.yml'));
|
|
126
|
+
if (files.length === 0) {
|
|
127
|
+
console.warn(`No layout files found in ${layoutsDir}`);
|
|
128
|
+
}
|
|
129
|
+
for (const file of files) {
|
|
130
|
+
const layoutName = file.replace(/\.(yaml|yml)$/, '');
|
|
131
|
+
const layoutPath = path.join(layoutsDir, file);
|
|
132
|
+
try {
|
|
133
|
+
const layout = this.loadLayoutFile(layoutPath, layoutName);
|
|
134
|
+
const layoutId = `crewx/${layoutName}`;
|
|
135
|
+
this.layouts.set(layoutId, layout);
|
|
136
|
+
if (layoutId !== 'crewx/minimal') {
|
|
137
|
+
if (process.env.CREWX_VERBOSE === '1')
|
|
138
|
+
console.error(`Loaded layout: ${layoutId} from ${file}`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
console.error(`Failed to load layout file ${file}:`, error);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
if (process.env.CREWX_VERBOSE === '1')
|
|
146
|
+
console.error(`Loaded ${this.layouts.size} layouts from ${layoutsDir}`);
|
|
147
|
+
}
|
|
148
|
+
catch (error) {
|
|
149
|
+
throw new LayoutLoadError(`Failed to read layouts directory: ${layoutsDir}`, undefined, error instanceof Error ? error : new Error(String(error)));
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
loadLayoutFile(filePath, layoutName) {
|
|
153
|
+
try {
|
|
154
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
155
|
+
if (!content || content.trim().length === 0) {
|
|
156
|
+
console.warn(`Empty YAML file: ${filePath}, will use fallback`);
|
|
157
|
+
throw new LayoutLoadError(`Empty YAML file: ${filePath}`, layoutName, new Error('File content is empty'));
|
|
158
|
+
}
|
|
159
|
+
const parsed = loadYaml(content);
|
|
160
|
+
if (!parsed || typeof parsed !== 'object') {
|
|
161
|
+
console.warn(`Invalid YAML content in ${filePath} (parsed as ${typeof parsed}), will use fallback`);
|
|
162
|
+
throw new LayoutLoadError(`Invalid or empty YAML in ${filePath}`, layoutName, new Error('YAML parsing returned null/undefined or non-object'));
|
|
163
|
+
}
|
|
164
|
+
// Format 2: layouts map (templates/agents/default.yaml format)
|
|
165
|
+
if (parsed.layouts && typeof parsed.layouts === 'object') {
|
|
166
|
+
const entry = this.resolveLayoutEntry(parsed.layouts, layoutName);
|
|
167
|
+
if (!entry || entry.template.trim().length === 0) {
|
|
168
|
+
console.warn(`Empty or missing layout template in ${filePath} for ${layoutName}`);
|
|
169
|
+
throw new LayoutLoadError(`Layout template not found or empty in layouts map: ${layoutName}`, layoutName);
|
|
170
|
+
}
|
|
171
|
+
// propsSchema may be inline in the layout entry object (e.g. default.yaml) or at the top level
|
|
172
|
+
const propsSchemaRaw = entry.propsSchema || parsed.propsSchema || {};
|
|
173
|
+
return {
|
|
174
|
+
id: `crewx/${layoutName}`,
|
|
175
|
+
version: parsed.version || '1.0.0',
|
|
176
|
+
description: parsed.description || `CrewX ${layoutName} layout`,
|
|
177
|
+
template: entry.template,
|
|
178
|
+
propsSchema: this.parsePropsSchema(propsSchemaRaw),
|
|
179
|
+
defaultProps: this.extractDefaultProps(propsSchemaRaw),
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
// Format 1: direct layout definition
|
|
184
|
+
if (!parsed.template || (typeof parsed.template === 'string' && parsed.template.trim().length === 0)) {
|
|
185
|
+
console.warn(`Empty or missing template field in ${filePath}`);
|
|
186
|
+
throw new LayoutLoadError(`Layout template is missing or empty in ${filePath}`, layoutName);
|
|
187
|
+
}
|
|
188
|
+
return {
|
|
189
|
+
id: parsed.id || `crewx/${layoutName}`,
|
|
190
|
+
version: parsed.version || '1.0.0',
|
|
191
|
+
description: parsed.description || '',
|
|
192
|
+
template: parsed.template,
|
|
193
|
+
propsSchema: this.parsePropsSchema(parsed.propsSchema || {}),
|
|
194
|
+
defaultProps: this.extractDefaultProps(parsed.propsSchema || {}),
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
throw new LayoutLoadError(`Failed to load layout file: ${filePath}`, layoutName, error instanceof Error ? error : new Error(String(error)));
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
parsePropsSchema(raw) {
|
|
203
|
+
const schema = {};
|
|
204
|
+
for (const [key, value] of Object.entries(raw)) {
|
|
205
|
+
if (typeof value === 'object' && value !== null) {
|
|
206
|
+
schema[key] = value;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return schema;
|
|
210
|
+
}
|
|
211
|
+
extractDefaultProps(propsSchema) {
|
|
212
|
+
const defaults = {};
|
|
213
|
+
for (const [key, schema] of Object.entries(propsSchema)) {
|
|
214
|
+
if (schema && typeof schema === 'object') {
|
|
215
|
+
if ('defaultValue' in schema) {
|
|
216
|
+
defaults[key] = schema.defaultValue;
|
|
217
|
+
}
|
|
218
|
+
else if ('default' in schema) {
|
|
219
|
+
defaults[key] = schema.default;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return defaults;
|
|
224
|
+
}
|
|
225
|
+
normalizeLayoutId(layoutId) {
|
|
226
|
+
if (!layoutId)
|
|
227
|
+
return this.options.fallbackLayoutId;
|
|
228
|
+
if (layoutId.includes('/'))
|
|
229
|
+
return layoutId;
|
|
230
|
+
return `crewx/${layoutId}`;
|
|
231
|
+
}
|
|
232
|
+
resolveLayoutEntry(layoutsMap, layoutName) {
|
|
233
|
+
const candidates = new Set();
|
|
234
|
+
if (layoutName) {
|
|
235
|
+
candidates.add(layoutName);
|
|
236
|
+
if (layoutName.includes('/')) {
|
|
237
|
+
const parts = layoutName.split('/');
|
|
238
|
+
const last = parts[parts.length - 1];
|
|
239
|
+
if (last)
|
|
240
|
+
candidates.add(last);
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
candidates.add(`crewx/${layoutName}`);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
candidates.add('default');
|
|
247
|
+
for (const key of candidates) {
|
|
248
|
+
const value = layoutsMap[key];
|
|
249
|
+
if (typeof value === 'string' && value.trim().length > 0) {
|
|
250
|
+
return { template: value };
|
|
251
|
+
}
|
|
252
|
+
if (value && typeof value === 'object' && typeof value.template === 'string' && value.template.trim().length > 0) {
|
|
253
|
+
return { template: value.template, propsSchema: value.propsSchema };
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
for (const value of Object.values(layoutsMap)) {
|
|
257
|
+
if (typeof value === 'string' && value.trim().length > 0) {
|
|
258
|
+
return { template: value };
|
|
259
|
+
}
|
|
260
|
+
const v = value;
|
|
261
|
+
if (v && typeof v === 'object' && typeof v.template === 'string' && v.template.trim().length > 0) {
|
|
262
|
+
return { template: v.template, propsSchema: v.propsSchema };
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
return undefined;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
//# sourceMappingURL=loader.js.map
|