@crewx/sdk 0.8.0-rc.73 → 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,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Browser stub for the exec helper.
|
|
4
|
+
*
|
|
5
|
+
* Replaces the Node.js exec helper in browser bundles (via package.json "browser" field).
|
|
6
|
+
* All functions are no-ops or return safe defaults — child_process is not available in browsers.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.getSanitizedEnv = getSanitizedEnv;
|
|
10
|
+
exports.validateCommand = validateCommand;
|
|
11
|
+
exports.isBuiltinAllowed = isBuiltinAllowed;
|
|
12
|
+
exports.validateAllowPattern = validateAllowPattern;
|
|
13
|
+
exports.isAllowed = isAllowed;
|
|
14
|
+
exports.setAuditVerbose = setAuditVerbose;
|
|
15
|
+
exports.logExecAudit = logExecAudit;
|
|
16
|
+
exports.executeCommand = executeCommand;
|
|
17
|
+
function getSanitizedEnv() {
|
|
18
|
+
return {};
|
|
19
|
+
}
|
|
20
|
+
function validateCommand(_command) {
|
|
21
|
+
// noop in browser
|
|
22
|
+
}
|
|
23
|
+
function isBuiltinAllowed(_command) {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
function validateAllowPattern(_pattern) {
|
|
27
|
+
// noop in browser
|
|
28
|
+
}
|
|
29
|
+
function isAllowed(_command, _policy) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
function setAuditVerbose(_enabled) {
|
|
33
|
+
// noop in browser
|
|
34
|
+
}
|
|
35
|
+
function logExecAudit(_entry) {
|
|
36
|
+
// noop in browser
|
|
37
|
+
}
|
|
38
|
+
function executeCommand(_command, _policy) {
|
|
39
|
+
return '(exec disabled: browser environment)';
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=exec.browser.js.map
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* exec Handlebars helper — 5-stage security implementation.
|
|
3
|
+
*
|
|
4
|
+
* Ports the security logic from packages/cli-bak/src/utils/template-processor.ts
|
|
5
|
+
* without using shell-quote or minimatch (not in allowed library list).
|
|
6
|
+
*
|
|
7
|
+
* Stages:
|
|
8
|
+
* 1. Recursion depth check (fail-closed on NaN)
|
|
9
|
+
* 2. Shell metacharacter validation
|
|
10
|
+
* 3. Allow-list enforcement (deny > builtin > allow > reject)
|
|
11
|
+
* 4. Environment isolation (strip sensitive keys)
|
|
12
|
+
* 5. Result capture (execFileSync with timeout + maxBuffer, wrapped in tags)
|
|
13
|
+
*/
|
|
14
|
+
import type { ExecPolicy } from '../types';
|
|
15
|
+
/**
|
|
16
|
+
* Returns a copy of process.env with all sensitive keys removed.
|
|
17
|
+
*/
|
|
18
|
+
export declare function getSanitizedEnv(): Record<string, string>;
|
|
19
|
+
/**
|
|
20
|
+
* Validates a command string for shell metacharacter injection.
|
|
21
|
+
* @throws Error if shell metacharacters are detected.
|
|
22
|
+
*/
|
|
23
|
+
export declare function validateCommand(command: string): void;
|
|
24
|
+
/**
|
|
25
|
+
* Checks if a command matches the builtin allowed pattern.
|
|
26
|
+
* Only npx @crewx/<package> scope is allowed by default.
|
|
27
|
+
*/
|
|
28
|
+
export declare function isBuiltinAllowed(command: string): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Validates allow/deny patterns — rejects overly broad wildcards.
|
|
31
|
+
* @throws Error if pattern is too broad or malformed.
|
|
32
|
+
*/
|
|
33
|
+
export declare function validateAllowPattern(pattern: string): void;
|
|
34
|
+
/**
|
|
35
|
+
* Checks if a command is allowed by the exec policy.
|
|
36
|
+
* Priority: deny > builtin(@crewx) > allow > reject
|
|
37
|
+
*/
|
|
38
|
+
export declare function isAllowed(command: string, policy: ExecPolicy): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Enable or disable exec audit log output to stderr.
|
|
41
|
+
* Call with true to show span JSON (verbose mode); false to suppress (default).
|
|
42
|
+
*/
|
|
43
|
+
export declare function setAuditVerbose(enabled: boolean): void;
|
|
44
|
+
/**
|
|
45
|
+
* Emits a structured audit log entry to stderr.
|
|
46
|
+
* Only writes when verbose audit mode is enabled via setAuditVerbose(true).
|
|
47
|
+
*/
|
|
48
|
+
export declare function logExecAudit(entry: {
|
|
49
|
+
command: string;
|
|
50
|
+
status: 'allowed' | 'denied' | 'error';
|
|
51
|
+
allowed_by?: string;
|
|
52
|
+
reason?: string;
|
|
53
|
+
duration_ms?: number;
|
|
54
|
+
}): void;
|
|
55
|
+
/**
|
|
56
|
+
* Executes a command and returns the output wrapped in exec-output tags.
|
|
57
|
+
* Implements all 5 security stages.
|
|
58
|
+
*/
|
|
59
|
+
export declare function executeCommand(command: string, policy: ExecPolicy): string;
|
|
60
|
+
//# sourceMappingURL=exec.d.ts.map
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* exec Handlebars helper — 5-stage security implementation.
|
|
4
|
+
*
|
|
5
|
+
* Ports the security logic from packages/cli-bak/src/utils/template-processor.ts
|
|
6
|
+
* without using shell-quote or minimatch (not in allowed library list).
|
|
7
|
+
*
|
|
8
|
+
* Stages:
|
|
9
|
+
* 1. Recursion depth check (fail-closed on NaN)
|
|
10
|
+
* 2. Shell metacharacter validation
|
|
11
|
+
* 3. Allow-list enforcement (deny > builtin > allow > reject)
|
|
12
|
+
* 4. Environment isolation (strip sensitive keys)
|
|
13
|
+
* 5. Result capture (execFileSync with timeout + maxBuffer, wrapped in tags)
|
|
14
|
+
*/
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.getSanitizedEnv = getSanitizedEnv;
|
|
17
|
+
exports.validateCommand = validateCommand;
|
|
18
|
+
exports.isBuiltinAllowed = isBuiltinAllowed;
|
|
19
|
+
exports.validateAllowPattern = validateAllowPattern;
|
|
20
|
+
exports.isAllowed = isAllowed;
|
|
21
|
+
exports.setAuditVerbose = setAuditVerbose;
|
|
22
|
+
exports.logExecAudit = logExecAudit;
|
|
23
|
+
exports.executeCommand = executeCommand;
|
|
24
|
+
const child_process_1 = require("child_process");
|
|
25
|
+
const glob_match_1 = require("../../utils/glob-match");
|
|
26
|
+
// Sensitive env key patterns — removed from exec child processes
|
|
27
|
+
const SENSITIVE_ENV_PATTERNS = [
|
|
28
|
+
/^ANTHROPIC_/i, /^OPENAI_/i, /^AWS_SECRET/i, /^SLACK_/i,
|
|
29
|
+
/^GITHUB_TOKEN$/i, /^CREWX_MCP_KEY$/i, /^DATABASE_/i,
|
|
30
|
+
/^AWS_ACCESS_KEY/i, /^AWS_SESSION_TOKEN$/i,
|
|
31
|
+
/^GH_TOKEN$/i, /^GH_APP_/i,
|
|
32
|
+
/^NPM_TOKEN$/i, /^NPM_AUTH/i,
|
|
33
|
+
/^GOOGLE_APPLICATION/i, /^GCLOUD_/i,
|
|
34
|
+
/^AZURE_/i, /^ARM_/i,
|
|
35
|
+
/^DOCKER_PASSWORD$/i, /^DOCKER_AUTH/i,
|
|
36
|
+
/^SSH_PRIVATE/i, /^SSH_AUTH_SOCK$/i,
|
|
37
|
+
/^CI_JOB_TOKEN$/i, /^ACTIONS_RUNTIME_TOKEN$/i,
|
|
38
|
+
/^VAULT_TOKEN$/i, /^SONAR_TOKEN$/i, /^CODECOV_TOKEN$/i,
|
|
39
|
+
/TOKEN$/i, /SECRET$/i, /PASSWORD$/i, /API_KEY$/i,
|
|
40
|
+
];
|
|
41
|
+
// Shell metacharacter pattern — blocks command injection
|
|
42
|
+
const SHELL_METACHAR = /[;|&`$(){}!><\n\r]/;
|
|
43
|
+
// Max recursion depth for exec helper
|
|
44
|
+
const MAX_EXEC_DEPTH = 2;
|
|
45
|
+
// Overly broad patterns that must be rejected in allow/deny lists
|
|
46
|
+
const DANGEROUS_PATTERNS = ['*', '**', '*:*', '* *', '**/*'];
|
|
47
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
48
|
+
// Stage 4: Environment isolation
|
|
49
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
50
|
+
/**
|
|
51
|
+
* Returns a copy of process.env with all sensitive keys removed.
|
|
52
|
+
*/
|
|
53
|
+
function getSanitizedEnv() {
|
|
54
|
+
const env = {};
|
|
55
|
+
for (const [key, value] of Object.entries(process.env)) {
|
|
56
|
+
if (value === undefined)
|
|
57
|
+
continue;
|
|
58
|
+
if (SENSITIVE_ENV_PATTERNS.some(p => p.test(key)))
|
|
59
|
+
continue;
|
|
60
|
+
env[key] = value;
|
|
61
|
+
}
|
|
62
|
+
return env;
|
|
63
|
+
}
|
|
64
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
65
|
+
// Stage 1: Shell metacharacter validation
|
|
66
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
67
|
+
/**
|
|
68
|
+
* Validates a command string for shell metacharacter injection.
|
|
69
|
+
* @throws Error if shell metacharacters are detected.
|
|
70
|
+
*/
|
|
71
|
+
function validateCommand(command) {
|
|
72
|
+
if (SHELL_METACHAR.test(command)) {
|
|
73
|
+
throw new Error(`exec blocked: shell metacharacter detected in "${command}"`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
77
|
+
// Stage 2: Allow-list enforcement
|
|
78
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
79
|
+
/**
|
|
80
|
+
* Checks if a command matches the builtin allowed pattern.
|
|
81
|
+
* Only npx @crewx/<package> scope is allowed by default.
|
|
82
|
+
*/
|
|
83
|
+
function isBuiltinAllowed(command) {
|
|
84
|
+
return /^npx\s+@crewx\/[\w-]+/.test(command);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Validates allow/deny patterns — rejects overly broad wildcards.
|
|
88
|
+
* @throws Error if pattern is too broad or malformed.
|
|
89
|
+
*/
|
|
90
|
+
function validateAllowPattern(pattern) {
|
|
91
|
+
// Trim only for dangerous-pattern check (exact match list)
|
|
92
|
+
if (DANGEROUS_PATTERNS.includes(pattern.trim())) {
|
|
93
|
+
throw new Error(`exec config error: overly broad pattern "${pattern}" is not allowed`);
|
|
94
|
+
}
|
|
95
|
+
// Start-character check uses original pattern (space prefix → rejected)
|
|
96
|
+
if (!/^[\w./@-]/.test(pattern)) {
|
|
97
|
+
throw new Error(`exec config error: pattern must start with a command name`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Checks if a command is allowed by the exec policy.
|
|
102
|
+
* Priority: deny > builtin(@crewx) > allow > reject
|
|
103
|
+
*/
|
|
104
|
+
function isAllowed(command, policy) {
|
|
105
|
+
const allow = policy.allow ?? [];
|
|
106
|
+
const deny = policy.deny ?? [];
|
|
107
|
+
// Validate patterns
|
|
108
|
+
for (const p of [...allow, ...deny]) {
|
|
109
|
+
validateAllowPattern(p);
|
|
110
|
+
}
|
|
111
|
+
// Step 1: deny takes highest priority
|
|
112
|
+
if (deny.some(pattern => (0, glob_match_1.matchesPattern)(command, pattern)))
|
|
113
|
+
return false;
|
|
114
|
+
// Step 2: builtin allowed (@crewx/* scope only)
|
|
115
|
+
if (isBuiltinAllowed(command))
|
|
116
|
+
return true;
|
|
117
|
+
// Step 3: explicit allow patterns
|
|
118
|
+
return allow.some(pattern => (0, glob_match_1.matchesPattern)(command, pattern));
|
|
119
|
+
}
|
|
120
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
121
|
+
// Audit log
|
|
122
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
123
|
+
/** When false (default), audit logs are suppressed. Set true via setAuditVerbose(). */
|
|
124
|
+
let _verboseAudit = false;
|
|
125
|
+
/**
|
|
126
|
+
* Enable or disable exec audit log output to stderr.
|
|
127
|
+
* Call with true to show span JSON (verbose mode); false to suppress (default).
|
|
128
|
+
*/
|
|
129
|
+
function setAuditVerbose(enabled) {
|
|
130
|
+
_verboseAudit = enabled;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Emits a structured audit log entry to stderr.
|
|
134
|
+
* Only writes when verbose audit mode is enabled via setAuditVerbose(true).
|
|
135
|
+
*/
|
|
136
|
+
function logExecAudit(entry) {
|
|
137
|
+
if (!_verboseAudit)
|
|
138
|
+
return;
|
|
139
|
+
const log = JSON.stringify({ span: 'template_exec', ...entry, timestamp: new Date().toISOString() });
|
|
140
|
+
console.error(log);
|
|
141
|
+
}
|
|
142
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
143
|
+
// Simple shell argument parser (replaces shell-quote)
|
|
144
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
145
|
+
/**
|
|
146
|
+
* Parses a command string into an array of arguments.
|
|
147
|
+
* Handles single and double quoted strings.
|
|
148
|
+
*/
|
|
149
|
+
function parseShellArgs(command) {
|
|
150
|
+
const tokens = [];
|
|
151
|
+
let current = '';
|
|
152
|
+
let inSingle = false;
|
|
153
|
+
let inDouble = false;
|
|
154
|
+
for (let i = 0; i < command.length; i++) {
|
|
155
|
+
const ch = command[i];
|
|
156
|
+
if (ch === "'" && !inDouble) {
|
|
157
|
+
inSingle = !inSingle;
|
|
158
|
+
}
|
|
159
|
+
else if (ch === '"' && !inSingle) {
|
|
160
|
+
inDouble = !inDouble;
|
|
161
|
+
}
|
|
162
|
+
else if (ch === ' ' && !inSingle && !inDouble) {
|
|
163
|
+
if (current.length > 0) {
|
|
164
|
+
tokens.push(current);
|
|
165
|
+
current = '';
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
current += ch;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
if (current.length > 0)
|
|
173
|
+
tokens.push(current);
|
|
174
|
+
return tokens;
|
|
175
|
+
}
|
|
176
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
177
|
+
// Stage 3 + 5: Execute command with timeout and result capture
|
|
178
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
179
|
+
/**
|
|
180
|
+
* Executes a command and returns the output wrapped in exec-output tags.
|
|
181
|
+
* Implements all 5 security stages.
|
|
182
|
+
*/
|
|
183
|
+
function executeCommand(command, policy) {
|
|
184
|
+
const startMs = Date.now();
|
|
185
|
+
// Stage 1: Recursion depth check (NaN fail-closed)
|
|
186
|
+
const execDepth = parseInt(process.env.CREWX_EXEC_DEPTH ?? '0', 10);
|
|
187
|
+
if (isNaN(execDepth) || execDepth >= MAX_EXEC_DEPTH) {
|
|
188
|
+
logExecAudit({ command, status: 'denied', reason: 'invalid or max recursion depth' });
|
|
189
|
+
return '(exec blocked: max recursion depth reached)';
|
|
190
|
+
}
|
|
191
|
+
// Stage 2a: Shell metacharacter validation
|
|
192
|
+
try {
|
|
193
|
+
validateCommand(command);
|
|
194
|
+
}
|
|
195
|
+
catch {
|
|
196
|
+
logExecAudit({ command, status: 'denied', reason: 'shell metacharacter detected' });
|
|
197
|
+
return `(exec blocked: shell metacharacter detected in "${command}")`;
|
|
198
|
+
}
|
|
199
|
+
// Stage 2b/c: Allow-list enforcement (deny > builtin > allow > reject)
|
|
200
|
+
if (!isAllowed(command, policy)) {
|
|
201
|
+
logExecAudit({ command, status: 'denied', reason: 'not in allow list' });
|
|
202
|
+
return `(exec blocked: ${command})`;
|
|
203
|
+
}
|
|
204
|
+
// Stage 3 + 4 + 5: Execute with timeout, env isolation, and result capture
|
|
205
|
+
try {
|
|
206
|
+
const parsed = parseShellArgs(command);
|
|
207
|
+
const [bin, ...args] = parsed;
|
|
208
|
+
if (!bin)
|
|
209
|
+
return `(exec failed: ${command})`;
|
|
210
|
+
// Stage 4: Environment isolation
|
|
211
|
+
const sanitizedEnv = getSanitizedEnv();
|
|
212
|
+
// Stage 3: Timeout + Stage 5: Result capture
|
|
213
|
+
const result = (0, child_process_1.execFileSync)(bin, args, {
|
|
214
|
+
timeout: policy.timeout ?? 5000,
|
|
215
|
+
maxBuffer: 64 * 1024, // 64KB — OOM prevention
|
|
216
|
+
encoding: 'utf-8',
|
|
217
|
+
env: { ...sanitizedEnv, CREWX_EXEC_DEPTH: String(execDepth + 1) },
|
|
218
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
219
|
+
});
|
|
220
|
+
const durationMs = Date.now() - startMs;
|
|
221
|
+
logExecAudit({ command, status: 'allowed', allowed_by: 'policy', duration_ms: durationMs });
|
|
222
|
+
// Stage 5: Wrap result in structured tags
|
|
223
|
+
return `<exec-output cmd="${command}">\n${result.trim()}\n</exec-output>`;
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
logExecAudit({ command, status: 'error', reason: 'execution failed' });
|
|
227
|
+
return `(exec failed: ${command})`;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=exec.js.map
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* fenced_code Handlebars helper — wraps content in a Markdown fenced code block.
|
|
3
|
+
*
|
|
4
|
+
* Usage in templates:
|
|
5
|
+
* {{fenced_code myCode lang="typescript"}}
|
|
6
|
+
* {{fenced_code myCode}} ← no language specified
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Options hash passed by Handlebars for the fenced_code helper.
|
|
10
|
+
*/
|
|
11
|
+
export interface FencedCodeOptions {
|
|
12
|
+
hash?: {
|
|
13
|
+
lang?: string;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Wraps content in a Markdown fenced code block.
|
|
18
|
+
* @param content - The code content to wrap.
|
|
19
|
+
* @param options - Handlebars options object (may contain hash.lang).
|
|
20
|
+
*/
|
|
21
|
+
export declare function fencedCodeHelper(content: string, options: FencedCodeOptions): string;
|
|
22
|
+
//# sourceMappingURL=fenced_code.d.ts.map
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* fenced_code Handlebars helper — wraps content in a Markdown fenced code block.
|
|
4
|
+
*
|
|
5
|
+
* Usage in templates:
|
|
6
|
+
* {{fenced_code myCode lang="typescript"}}
|
|
7
|
+
* {{fenced_code myCode}} ← no language specified
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.fencedCodeHelper = fencedCodeHelper;
|
|
11
|
+
/**
|
|
12
|
+
* Wraps content in a Markdown fenced code block.
|
|
13
|
+
* @param content - The code content to wrap.
|
|
14
|
+
* @param options - Handlebars options object (may contain hash.lang).
|
|
15
|
+
*/
|
|
16
|
+
function fencedCodeHelper(content, options) {
|
|
17
|
+
const lang = options?.hash?.lang ?? '';
|
|
18
|
+
return `\`\`\`${lang}\n${content ?? ''}\n\`\`\``;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=fenced_code.js.map
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* formatConversation Handlebars block helper.
|
|
3
|
+
*
|
|
4
|
+
* Ported from packages/sdk-bak/src/services/layout-renderer.service.ts:230~297.
|
|
5
|
+
* Block mode only — the default.yaml template uses block mode exclusively.
|
|
6
|
+
* Inline/fallback template file read is excluded (environment-independence concern).
|
|
7
|
+
*
|
|
8
|
+
* Unlike exec/shell-quote (which were excluded for RCE risk), formatConversation
|
|
9
|
+
* is pure string manipulation with no code execution — RCE is not a concern.
|
|
10
|
+
*/
|
|
11
|
+
export interface FormatConversationBlockContext {
|
|
12
|
+
messages: any[];
|
|
13
|
+
platform: string;
|
|
14
|
+
messagesCount: number;
|
|
15
|
+
agentIds: string[];
|
|
16
|
+
primaryAgentId: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Handlebars block helper for conversation history formatting.
|
|
20
|
+
*
|
|
21
|
+
* Usage in template:
|
|
22
|
+
* {{#formatConversation messages platform}}
|
|
23
|
+
* ...block content with {{messages}}, {{platform}}, {{messagesCount}},
|
|
24
|
+
* {{agentIds}}, {{primaryAgentId}}...
|
|
25
|
+
* {{/formatConversation}}
|
|
26
|
+
*
|
|
27
|
+
* Returns '' for empty/non-array messages.
|
|
28
|
+
*/
|
|
29
|
+
export declare function formatConversationHelper(this: any, messages: any, platform: any, options?: any): string;
|
|
30
|
+
//# sourceMappingURL=format-conversation.d.ts.map
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* formatConversation Handlebars block helper.
|
|
4
|
+
*
|
|
5
|
+
* Ported from packages/sdk-bak/src/services/layout-renderer.service.ts:230~297.
|
|
6
|
+
* Block mode only — the default.yaml template uses block mode exclusively.
|
|
7
|
+
* Inline/fallback template file read is excluded (environment-independence concern).
|
|
8
|
+
*
|
|
9
|
+
* Unlike exec/shell-quote (which were excluded for RCE risk), formatConversation
|
|
10
|
+
* is pure string manipulation with no code execution — RCE is not a concern.
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.formatConversationHelper = formatConversationHelper;
|
|
14
|
+
/**
|
|
15
|
+
* Extract unique assistant agent IDs from messages.
|
|
16
|
+
* An assistant message with metadata.agent_id is considered an agent turn.
|
|
17
|
+
*/
|
|
18
|
+
function extractAgentIds(messages) {
|
|
19
|
+
return Array.from(new Set(messages
|
|
20
|
+
.filter((msg) => msg?.isAssistant && msg?.metadata?.agent_id)
|
|
21
|
+
.map((msg) => String(msg.metadata.agent_id))));
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Handlebars block helper for conversation history formatting.
|
|
25
|
+
*
|
|
26
|
+
* Usage in template:
|
|
27
|
+
* {{#formatConversation messages platform}}
|
|
28
|
+
* ...block content with {{messages}}, {{platform}}, {{messagesCount}},
|
|
29
|
+
* {{agentIds}}, {{primaryAgentId}}...
|
|
30
|
+
* {{/formatConversation}}
|
|
31
|
+
*
|
|
32
|
+
* Returns '' for empty/non-array messages.
|
|
33
|
+
*/
|
|
34
|
+
function formatConversationHelper(messages, platform, options) {
|
|
35
|
+
if (!Array.isArray(messages) || messages.length === 0) {
|
|
36
|
+
return '';
|
|
37
|
+
}
|
|
38
|
+
const isBlockHelper = options && typeof options.fn === 'function';
|
|
39
|
+
if (!isBlockHelper) {
|
|
40
|
+
return '';
|
|
41
|
+
}
|
|
42
|
+
const assistantAgentIds = extractAgentIds(messages);
|
|
43
|
+
const primaryAgentId = assistantAgentIds.length > 0 ? assistantAgentIds[0] : '';
|
|
44
|
+
const context = {
|
|
45
|
+
messages,
|
|
46
|
+
platform: typeof platform === 'string' ? platform : '',
|
|
47
|
+
messagesCount: messages.length,
|
|
48
|
+
agentIds: assistantAgentIds,
|
|
49
|
+
primaryAgentId,
|
|
50
|
+
};
|
|
51
|
+
return options.fn(context);
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=format-conversation.js.map
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* include Handlebars helper — returns inline string content as-is.
|
|
3
|
+
*
|
|
4
|
+
* Usage in templates:
|
|
5
|
+
* {{{include someVariable}}}
|
|
6
|
+
* {{{include "literal string"}}}
|
|
7
|
+
*
|
|
8
|
+
* Note: File-path based document loading is handled in SDK-006 (DocumentLoader).
|
|
9
|
+
* This helper supports only inline string content (already in context).
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Returns the given string content unchanged.
|
|
13
|
+
* Returns empty string for null/undefined.
|
|
14
|
+
*/
|
|
15
|
+
export declare function includeHelper(content: string): string;
|
|
16
|
+
//# sourceMappingURL=include.d.ts.map
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* include Handlebars helper — returns inline string content as-is.
|
|
4
|
+
*
|
|
5
|
+
* Usage in templates:
|
|
6
|
+
* {{{include someVariable}}}
|
|
7
|
+
* {{{include "literal string"}}}
|
|
8
|
+
*
|
|
9
|
+
* Note: File-path based document loading is handled in SDK-006 (DocumentLoader).
|
|
10
|
+
* This helper supports only inline string content (already in context).
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.includeHelper = includeHelper;
|
|
14
|
+
/**
|
|
15
|
+
* Returns the given string content unchanged.
|
|
16
|
+
* Returns empty string for null/undefined.
|
|
17
|
+
*/
|
|
18
|
+
function includeHelper(content) {
|
|
19
|
+
if (content === null || content === undefined)
|
|
20
|
+
return '';
|
|
21
|
+
return String(content);
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=include.js.map
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* P1/P2 Handlebars helper implementations.
|
|
3
|
+
*
|
|
4
|
+
* P1: truncate, length, escapeHandlebars
|
|
5
|
+
* P2: formatFileSize, formatTimestamp
|
|
6
|
+
*
|
|
7
|
+
* Ported from packages/cli-bak/src/utils/template-processor.ts.
|
|
8
|
+
* formatConversation is intentionally excluded (user confirmed).
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Truncate text to maxLength, appending remaining char count if truncated.
|
|
12
|
+
* {{truncate text 500}} or {{{truncate text 500}}}
|
|
13
|
+
*/
|
|
14
|
+
export declare function truncateHelper(text: string, maxLength: number): string;
|
|
15
|
+
/**
|
|
16
|
+
* Return the length of an array or string.
|
|
17
|
+
* {{length array}} / {{length string}}
|
|
18
|
+
*/
|
|
19
|
+
export declare function lengthHelper(value: unknown): number;
|
|
20
|
+
/**
|
|
21
|
+
* Escape Handlebars delimiters in user-provided content.
|
|
22
|
+
* Prevents secondary template compilation of user content.
|
|
23
|
+
* {{{escapeHandlebars text}}}
|
|
24
|
+
*/
|
|
25
|
+
export declare function escapeHandlebarsHelper(text: string): string;
|
|
26
|
+
/**
|
|
27
|
+
* Format a byte count as a human-readable file size string.
|
|
28
|
+
* {{formatFileSize bytes}}
|
|
29
|
+
*/
|
|
30
|
+
export declare function formatFileSizeHelper(bytes: number): string;
|
|
31
|
+
/**
|
|
32
|
+
* Format a Date or ISO timestamp string into a locale-aware display string.
|
|
33
|
+
* Returns empty string for invalid or falsy input.
|
|
34
|
+
* {{formatTimestamp timestamp}}
|
|
35
|
+
*/
|
|
36
|
+
export declare function formatTimestampHelper(timestamp: Date | string | null | undefined): string;
|
|
37
|
+
//# sourceMappingURL=p1p2.d.ts.map
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* P1/P2 Handlebars helper implementations.
|
|
4
|
+
*
|
|
5
|
+
* P1: truncate, length, escapeHandlebars
|
|
6
|
+
* P2: formatFileSize, formatTimestamp
|
|
7
|
+
*
|
|
8
|
+
* Ported from packages/cli-bak/src/utils/template-processor.ts.
|
|
9
|
+
* formatConversation is intentionally excluded (user confirmed).
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.truncateHelper = truncateHelper;
|
|
13
|
+
exports.lengthHelper = lengthHelper;
|
|
14
|
+
exports.escapeHandlebarsHelper = escapeHandlebarsHelper;
|
|
15
|
+
exports.formatFileSizeHelper = formatFileSizeHelper;
|
|
16
|
+
exports.formatTimestampHelper = formatTimestampHelper;
|
|
17
|
+
// ── P1 Helpers ────────────────────────────────────────────────────────────────
|
|
18
|
+
/**
|
|
19
|
+
* Truncate text to maxLength, appending remaining char count if truncated.
|
|
20
|
+
* {{truncate text 500}} or {{{truncate text 500}}}
|
|
21
|
+
*/
|
|
22
|
+
function truncateHelper(text, maxLength) {
|
|
23
|
+
if (!text)
|
|
24
|
+
return '';
|
|
25
|
+
if (text.length <= maxLength)
|
|
26
|
+
return text;
|
|
27
|
+
const remaining = text.length - maxLength;
|
|
28
|
+
return `${text.substring(0, maxLength)} (...+${remaining} chars)`;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Return the length of an array or string.
|
|
32
|
+
* {{length array}} / {{length string}}
|
|
33
|
+
*/
|
|
34
|
+
function lengthHelper(value) {
|
|
35
|
+
if (Array.isArray(value))
|
|
36
|
+
return value.length;
|
|
37
|
+
if (typeof value === 'string')
|
|
38
|
+
return value.length;
|
|
39
|
+
return 0;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Escape Handlebars delimiters in user-provided content.
|
|
43
|
+
* Prevents secondary template compilation of user content.
|
|
44
|
+
* {{{escapeHandlebars text}}}
|
|
45
|
+
*/
|
|
46
|
+
function escapeHandlebarsHelper(text) {
|
|
47
|
+
if (typeof text !== 'string')
|
|
48
|
+
return '';
|
|
49
|
+
return text.replace(/\{\{/g, '{{').replace(/\}\}/g, '}}');
|
|
50
|
+
}
|
|
51
|
+
// ── P2 Helpers ────────────────────────────────────────────────────────────────
|
|
52
|
+
const FILE_SIZE_UNITS = ['B', 'KB', 'MB', 'GB'];
|
|
53
|
+
/**
|
|
54
|
+
* Format a byte count as a human-readable file size string.
|
|
55
|
+
* {{formatFileSize bytes}}
|
|
56
|
+
*/
|
|
57
|
+
function formatFileSizeHelper(bytes) {
|
|
58
|
+
if (bytes === 0)
|
|
59
|
+
return '0 B';
|
|
60
|
+
const i = Math.min(Math.floor(Math.log(bytes) / Math.log(1024)), FILE_SIZE_UNITS.length - 1);
|
|
61
|
+
const value = Math.round((bytes / Math.pow(1024, i)) * 100) / 100;
|
|
62
|
+
return `${value} ${FILE_SIZE_UNITS[i]}`;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Format a Date or ISO timestamp string into a locale-aware display string.
|
|
66
|
+
* Returns empty string for invalid or falsy input.
|
|
67
|
+
* {{formatTimestamp timestamp}}
|
|
68
|
+
*/
|
|
69
|
+
function formatTimestampHelper(timestamp) {
|
|
70
|
+
if (!timestamp)
|
|
71
|
+
return '';
|
|
72
|
+
try {
|
|
73
|
+
const date = timestamp instanceof Date ? timestamp : new Date(timestamp);
|
|
74
|
+
if (isNaN(date.getTime()))
|
|
75
|
+
return '';
|
|
76
|
+
return date.toLocaleString('ko-KR', {
|
|
77
|
+
year: 'numeric',
|
|
78
|
+
month: '2-digit',
|
|
79
|
+
day: '2-digit',
|
|
80
|
+
hour: '2-digit',
|
|
81
|
+
minute: '2-digit',
|
|
82
|
+
second: '2-digit',
|
|
83
|
+
hour12: false,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return '';
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=p1p2.js.map
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DocumentLoader — loads documents from crewx.yaml `documents:` section.
|
|
3
|
+
*
|
|
4
|
+
* Supports:
|
|
5
|
+
* - Inline string: `notice: "Some text"`
|
|
6
|
+
* - Inline object: `notice: { content: "Some text" }`
|
|
7
|
+
* - File path (relative): `guide: { path: "docs/guide.md" }`
|
|
8
|
+
* - File path (absolute): `guide: { path: "/abs/docs/guide.md" }`
|
|
9
|
+
*
|
|
10
|
+
* File I/O is delegated to IFsAdapter for testability and future WEB compat.
|
|
11
|
+
*/
|
|
12
|
+
import type { IFsAdapter } from '../../platform/IFsAdapter';
|
|
13
|
+
export declare class DocumentLoader {
|
|
14
|
+
private readonly docs;
|
|
15
|
+
private readonly fs;
|
|
16
|
+
constructor(fsAdapter?: IFsAdapter);
|
|
17
|
+
/**
|
|
18
|
+
* Load all documents from the `documents:` section of crewx.yaml.
|
|
19
|
+
*
|
|
20
|
+
* @param sources - Record of document name → source (string, {path}, or {content})
|
|
21
|
+
* @param projectRoot - Base directory for resolving relative file paths
|
|
22
|
+
*/
|
|
23
|
+
load(sources?: Record<string, unknown>, projectRoot?: string): Promise<void>;
|
|
24
|
+
/** Get document text content by name. Returns undefined if not loaded. */
|
|
25
|
+
getContent(name: string): Promise<string | undefined>;
|
|
26
|
+
/**
|
|
27
|
+
* Get a simple TOC (table of contents) for a markdown document.
|
|
28
|
+
* Extracts headings (lines starting with `#`) and returns them as an indented list.
|
|
29
|
+
* Returns undefined if there are no headings.
|
|
30
|
+
*/
|
|
31
|
+
getToc(name: string): Promise<string | undefined>;
|
|
32
|
+
/** Get the resolved absolute file path for a file-based document. */
|
|
33
|
+
getPath(name: string): string | undefined;
|
|
34
|
+
/** Get all loaded document names. */
|
|
35
|
+
getNames(): string[];
|
|
36
|
+
/**
|
|
37
|
+
* Build a documents context object suitable for Handlebars template rendering.
|
|
38
|
+
* Returns `{ docName: { content, toc, path? }, ... }`.
|
|
39
|
+
*/
|
|
40
|
+
buildContext(): Promise<Record<string, {
|
|
41
|
+
content: string;
|
|
42
|
+
toc?: string;
|
|
43
|
+
path?: string;
|
|
44
|
+
}>>;
|
|
45
|
+
private loadFromFile;
|
|
46
|
+
private resolve;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=DocumentLoader.d.ts.map
|