@qodo/sdk 0.13.3 → 2.0.0-next.0
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/LICENSE +31 -118
- package/README.md +133 -121
- package/bin/qodo-skills.mjs +13 -0
- package/bundled-skills/code-review/SKILL.md +41 -0
- package/bundled-skills/pr-summary/SKILL.md +59 -0
- package/bundled-skills/test-gen/SKILL.md +47 -0
- package/dist/auth/index.browser.d.ts +38 -0
- package/dist/auth/index.browser.d.ts.map +1 -0
- package/dist/auth/index.browser.js +62 -0
- package/dist/auth/index.browser.js.map +1 -0
- package/dist/auth/index.d.ts +44 -30
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +57 -110
- package/dist/auth/index.js.map +1 -1
- package/dist/client/AgentsClient.d.ts +33 -0
- package/dist/client/AgentsClient.d.ts.map +1 -0
- package/dist/client/AgentsClient.js +40 -0
- package/dist/client/AgentsClient.js.map +1 -0
- package/dist/client/ArtifactsClient.d.ts +43 -0
- package/dist/client/ArtifactsClient.d.ts.map +1 -0
- package/dist/client/ArtifactsClient.js +54 -0
- package/dist/client/ArtifactsClient.js.map +1 -0
- package/dist/client/BulletinClient.d.ts +45 -0
- package/dist/client/BulletinClient.d.ts.map +1 -0
- package/dist/client/BulletinClient.js +51 -0
- package/dist/client/BulletinClient.js.map +1 -0
- package/dist/client/InfoClient.d.ts +58 -0
- package/dist/client/InfoClient.d.ts.map +1 -0
- package/dist/client/InfoClient.js +135 -0
- package/dist/client/InfoClient.js.map +1 -0
- package/dist/client/PipelineClient.d.ts +162 -0
- package/dist/client/PipelineClient.d.ts.map +1 -0
- package/dist/client/PipelineClient.js +340 -0
- package/dist/client/PipelineClient.js.map +1 -0
- package/dist/client/QarRegistryClient.d.ts +396 -0
- package/dist/client/QarRegistryClient.d.ts.map +1 -0
- package/dist/client/QarRegistryClient.js +536 -0
- package/dist/client/QarRegistryClient.js.map +1 -0
- package/dist/client/QodoClient.d.ts +296 -0
- package/dist/client/QodoClient.d.ts.map +1 -0
- package/dist/client/QodoClient.js +803 -0
- package/dist/client/QodoClient.js.map +1 -0
- package/dist/client/SpecsClient.d.ts +121 -0
- package/dist/client/SpecsClient.d.ts.map +1 -0
- package/dist/client/SpecsClient.js +252 -0
- package/dist/client/SpecsClient.js.map +1 -0
- package/dist/client/StateClient.d.ts +35 -0
- package/dist/client/StateClient.d.ts.map +1 -0
- package/dist/client/StateClient.js +36 -0
- package/dist/client/StateClient.js.map +1 -0
- package/dist/client/TaskClient.d.ts +706 -0
- package/dist/client/TaskClient.d.ts.map +1 -0
- package/dist/client/TaskClient.js +2522 -0
- package/dist/client/TaskClient.js.map +1 -0
- package/dist/client/ToolClient.d.ts +278 -0
- package/dist/client/ToolClient.d.ts.map +1 -0
- package/dist/client/ToolClient.js +1115 -0
- package/dist/client/ToolClient.js.map +1 -0
- package/dist/client/a2a/index.d.ts +10 -0
- package/dist/client/a2a/index.d.ts.map +1 -0
- package/dist/client/a2a/index.js +9 -0
- package/dist/client/a2a/index.js.map +1 -0
- package/dist/client/a2a/registerA2A.d.ts +170 -0
- package/dist/client/a2a/registerA2A.d.ts.map +1 -0
- package/dist/client/a2a/registerA2A.js +85 -0
- package/dist/client/a2a/registerA2A.js.map +1 -0
- package/dist/client/connection.d.ts +800 -0
- package/dist/client/connection.d.ts.map +1 -0
- package/dist/client/connection.js +2020 -0
- package/dist/client/connection.js.map +1 -0
- package/dist/client/errors.d.ts +735 -0
- package/dist/client/errors.d.ts.map +1 -0
- package/dist/client/errors.js +921 -0
- package/dist/client/errors.js.map +1 -0
- package/dist/client/index.d.ts +26 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +20 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/inlineGraph.d.ts +66 -0
- package/dist/client/inlineGraph.d.ts.map +1 -0
- package/dist/client/inlineGraph.js +500 -0
- package/dist/client/inlineGraph.js.map +1 -0
- package/dist/client/internal/thenable.d.ts +27 -0
- package/dist/client/internal/thenable.d.ts.map +1 -0
- package/dist/client/internal/thenable.js +31 -0
- package/dist/client/internal/thenable.js.map +1 -0
- package/dist/client/iterator.d.ts +32 -0
- package/dist/client/iterator.d.ts.map +1 -0
- package/dist/client/iterator.js +73 -0
- package/dist/client/iterator.js.map +1 -0
- package/dist/client/mcp/McpClientPool.browser.d.ts +76 -0
- package/dist/client/mcp/McpClientPool.browser.d.ts.map +1 -0
- package/dist/client/mcp/McpClientPool.browser.js +78 -0
- package/dist/client/mcp/McpClientPool.browser.js.map +1 -0
- package/dist/client/mcp/McpClientPool.d.ts +236 -0
- package/dist/client/mcp/McpClientPool.d.ts.map +1 -0
- package/dist/client/mcp/McpClientPool.js +585 -0
- package/dist/client/mcp/McpClientPool.js.map +1 -0
- package/dist/client/mcp/projection.d.ts +109 -0
- package/dist/client/mcp/projection.d.ts.map +1 -0
- package/dist/client/mcp/projection.js +446 -0
- package/dist/client/mcp/projection.js.map +1 -0
- package/dist/client/mcp/substituteEnv.browser.d.ts +18 -0
- package/dist/client/mcp/substituteEnv.browser.d.ts.map +1 -0
- package/dist/client/mcp/substituteEnv.browser.js +20 -0
- package/dist/client/mcp/substituteEnv.browser.js.map +1 -0
- package/dist/client/mcp/substituteEnv.d.ts +45 -0
- package/dist/client/mcp/substituteEnv.d.ts.map +1 -0
- package/dist/client/mcp/substituteEnv.js +63 -0
- package/dist/client/mcp/substituteEnv.js.map +1 -0
- package/dist/client/observers.d.ts +57 -0
- package/dist/client/observers.d.ts.map +1 -0
- package/dist/client/observers.js +203 -0
- package/dist/client/observers.js.map +1 -0
- package/dist/client/options.d.ts +269 -0
- package/dist/client/options.d.ts.map +1 -0
- package/dist/client/options.js +9 -0
- package/dist/client/options.js.map +1 -0
- package/dist/client/tools/_readlineApprovalPrompt.browser.d.ts +17 -0
- package/dist/client/tools/_readlineApprovalPrompt.browser.d.ts.map +1 -0
- package/dist/client/tools/_readlineApprovalPrompt.browser.js +24 -0
- package/dist/client/tools/_readlineApprovalPrompt.browser.js.map +1 -0
- package/dist/client/tools/_readlineApprovalPrompt.d.ts +33 -0
- package/dist/client/tools/_readlineApprovalPrompt.d.ts.map +1 -0
- package/dist/client/tools/_readlineApprovalPrompt.js +90 -0
- package/dist/client/tools/_readlineApprovalPrompt.js.map +1 -0
- package/dist/client/tools/approval.d.ts +280 -0
- package/dist/client/tools/approval.d.ts.map +1 -0
- package/dist/client/tools/approval.js +229 -0
- package/dist/client/tools/approval.js.map +1 -0
- package/dist/client/tools/bindFunctionToolDefs.d.ts +156 -0
- package/dist/client/tools/bindFunctionToolDefs.d.ts.map +1 -0
- package/dist/client/tools/bindFunctionToolDefs.js +360 -0
- package/dist/client/tools/bindFunctionToolDefs.js.map +1 -0
- package/dist/client/tools/defineFunctionTool.d.ts +277 -0
- package/dist/client/tools/defineFunctionTool.d.ts.map +1 -0
- package/dist/client/tools/defineFunctionTool.js +190 -0
- package/dist/client/tools/defineFunctionTool.js.map +1 -0
- package/dist/client/transport.browser.d.ts +20 -0
- package/dist/client/transport.browser.d.ts.map +1 -0
- package/dist/client/transport.browser.js +29 -0
- package/dist/client/transport.browser.js.map +1 -0
- package/dist/client/transport.d.ts +47 -0
- package/dist/client/transport.d.ts.map +1 -0
- package/dist/client/transport.js +102 -0
- package/dist/client/transport.js.map +1 -0
- package/dist/client/transport.shared.d.ts +30 -0
- package/dist/client/transport.shared.d.ts.map +1 -0
- package/dist/client/transport.shared.js +40 -0
- package/dist/client/transport.shared.js.map +1 -0
- package/dist/client/uuid.d.ts +32 -0
- package/dist/client/uuid.d.ts.map +1 -0
- package/dist/client/uuid.js +65 -0
- package/dist/client/uuid.js.map +1 -0
- package/dist/index.d.ts +88 -39
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +166 -43
- package/dist/index.js.map +1 -1
- package/dist/observability/attributes.d.ts +136 -0
- package/dist/observability/attributes.d.ts.map +1 -0
- package/dist/observability/attributes.js +184 -0
- package/dist/observability/attributes.js.map +1 -0
- package/dist/observability/index.d.ts +14 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +11 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/resolveOTel.browser.d.ts +13 -0
- package/dist/observability/resolveOTel.browser.d.ts.map +1 -0
- package/dist/observability/resolveOTel.browser.js +14 -0
- package/dist/observability/resolveOTel.browser.js.map +1 -0
- package/dist/observability/resolveOTel.d.ts +28 -0
- package/dist/observability/resolveOTel.d.ts.map +1 -0
- package/dist/observability/resolveOTel.js +74 -0
- package/dist/observability/resolveOTel.js.map +1 -0
- package/dist/observability/spans.d.ts +198 -0
- package/dist/observability/spans.d.ts.map +1 -0
- package/dist/observability/spans.js +300 -0
- package/dist/observability/spans.js.map +1 -0
- package/dist/observability/traceContext.d.ts +51 -0
- package/dist/observability/traceContext.d.ts.map +1 -0
- package/dist/observability/traceContext.js +151 -0
- package/dist/observability/traceContext.js.map +1 -0
- package/dist/observability/transportMetrics.d.ts +58 -0
- package/dist/observability/transportMetrics.d.ts.map +1 -0
- package/dist/observability/transportMetrics.js +55 -0
- package/dist/observability/transportMetrics.js.map +1 -0
- package/dist/qar/agentSpec.d.ts +93 -0
- package/dist/qar/agentSpec.d.ts.map +1 -0
- package/dist/qar/agentSpec.js +184 -0
- package/dist/qar/agentSpec.js.map +1 -0
- package/dist/qar/clientEvents.d.ts +86 -0
- package/dist/qar/clientEvents.d.ts.map +1 -0
- package/dist/qar/clientEvents.js +36 -0
- package/dist/qar/clientEvents.js.map +1 -0
- package/dist/qar/envelopes.d.ts +227 -0
- package/dist/qar/envelopes.d.ts.map +1 -0
- package/dist/qar/envelopes.js +67 -0
- package/dist/qar/envelopes.js.map +1 -0
- package/dist/qar/generated/envelope.d.ts +332 -0
- package/dist/qar/generated/envelope.d.ts.map +1 -0
- package/dist/qar/generated/envelope.js +15 -0
- package/dist/qar/generated/envelope.js.map +1 -0
- package/dist/qar/generated/qar-info.d.ts +76 -0
- package/dist/qar/generated/qar-info.d.ts.map +1 -0
- package/dist/qar/generated/qar-info.js +15 -0
- package/dist/qar/generated/qar-info.js.map +1 -0
- package/dist/qar/generated/qodo-task-start-payload.d.ts +54 -0
- package/dist/qar/generated/qodo-task-start-payload.d.ts.map +1 -0
- package/dist/qar/generated/qodo-task-start-payload.js +15 -0
- package/dist/qar/generated/qodo-task-start-payload.js.map +1 -0
- package/dist/qar/ids.d.ts +19 -0
- package/dist/qar/ids.d.ts.map +1 -0
- package/dist/qar/ids.js +11 -0
- package/dist/qar/ids.js.map +1 -0
- package/dist/qar/index.d.ts +24 -0
- package/dist/qar/index.d.ts.map +1 -0
- package/dist/qar/index.js +16 -0
- package/dist/qar/index.js.map +1 -0
- package/dist/qar/info.d.ts +37 -0
- package/dist/qar/info.d.ts.map +1 -0
- package/dist/qar/info.js +17 -0
- package/dist/qar/info.js.map +1 -0
- package/dist/qar/json.d.ts +14 -0
- package/dist/qar/json.d.ts.map +1 -0
- package/dist/qar/json.js +9 -0
- package/dist/qar/json.js.map +1 -0
- package/dist/qar/payloads.d.ts +480 -0
- package/dist/qar/payloads.d.ts.map +1 -0
- package/dist/qar/payloads.js +37 -0
- package/dist/qar/payloads.js.map +1 -0
- package/dist/qar/specs.d.ts +604 -0
- package/dist/qar/specs.d.ts.map +1 -0
- package/dist/qar/specs.js +29 -0
- package/dist/qar/specs.js.map +1 -0
- package/dist/qar/taskEvents.d.ts +25 -0
- package/dist/qar/taskEvents.d.ts.map +1 -0
- package/dist/qar/taskEvents.js +22 -0
- package/dist/qar/taskEvents.js.map +1 -0
- package/dist/qar/trace.d.ts +12 -0
- package/dist/qar/trace.d.ts.map +1 -0
- package/dist/qar/trace.js +12 -0
- package/dist/qar/trace.js.map +1 -0
- package/dist/skills/activation.d.ts +177 -0
- package/dist/skills/activation.d.ts.map +1 -0
- package/dist/skills/activation.js +428 -0
- package/dist/skills/activation.js.map +1 -0
- package/dist/skills/cli/index.browser.d.ts +18 -0
- package/dist/skills/cli/index.browser.d.ts.map +1 -0
- package/dist/skills/cli/index.browser.js +27 -0
- package/dist/skills/cli/index.browser.js.map +1 -0
- package/dist/skills/cli/index.d.ts +37 -0
- package/dist/skills/cli/index.d.ts.map +1 -0
- package/dist/skills/cli/index.js +494 -0
- package/dist/skills/cli/index.js.map +1 -0
- package/dist/skills/events.d.ts +255 -0
- package/dist/skills/events.d.ts.map +1 -0
- package/dist/skills/events.js +224 -0
- package/dist/skills/events.js.map +1 -0
- package/dist/skills/index.d.ts +45 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +34 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/inject.d.ts +57 -0
- package/dist/skills/inject.d.ts.map +1 -0
- package/dist/skills/inject.js +162 -0
- package/dist/skills/inject.js.map +1 -0
- package/dist/skills/lockfile.browser.d.ts +56 -0
- package/dist/skills/lockfile.browser.d.ts.map +1 -0
- package/dist/skills/lockfile.browser.js +55 -0
- package/dist/skills/lockfile.browser.js.map +1 -0
- package/dist/skills/lockfile.d.ts +137 -0
- package/dist/skills/lockfile.d.ts.map +1 -0
- package/dist/skills/lockfile.js +423 -0
- package/dist/skills/lockfile.js.map +1 -0
- package/dist/skills/manager.browser.d.ts +94 -0
- package/dist/skills/manager.browser.d.ts.map +1 -0
- package/dist/skills/manager.browser.js +159 -0
- package/dist/skills/manager.browser.js.map +1 -0
- package/dist/skills/manager.d.ts +362 -0
- package/dist/skills/manager.d.ts.map +1 -0
- package/dist/skills/manager.js +1386 -0
- package/dist/skills/manager.js.map +1 -0
- package/dist/skills/mcp/index.d.ts +15 -0
- package/dist/skills/mcp/index.d.ts.map +1 -0
- package/dist/skills/mcp/index.js +12 -0
- package/dist/skills/mcp/index.js.map +1 -0
- package/dist/skills/mcp/path.browser.d.ts +27 -0
- package/dist/skills/mcp/path.browser.d.ts.map +1 -0
- package/dist/skills/mcp/path.browser.js +33 -0
- package/dist/skills/mcp/path.browser.js.map +1 -0
- package/dist/skills/mcp/path.d.ts +57 -0
- package/dist/skills/mcp/path.d.ts.map +1 -0
- package/dist/skills/mcp/path.js +150 -0
- package/dist/skills/mcp/path.js.map +1 -0
- package/dist/skills/mcp/server.browser.d.ts +32 -0
- package/dist/skills/mcp/server.browser.d.ts.map +1 -0
- package/dist/skills/mcp/server.browser.js +53 -0
- package/dist/skills/mcp/server.browser.js.map +1 -0
- package/dist/skills/mcp/server.d.ts +144 -0
- package/dist/skills/mcp/server.d.ts.map +1 -0
- package/dist/skills/mcp/server.js +841 -0
- package/dist/skills/mcp/server.js.map +1 -0
- package/dist/skills/mcp/types.d.ts +72 -0
- package/dist/skills/mcp/types.d.ts.map +1 -0
- package/dist/skills/mcp/types.js +20 -0
- package/dist/skills/mcp/types.js.map +1 -0
- package/dist/skills/mcp/wireDefs.d.ts +58 -0
- package/dist/skills/mcp/wireDefs.d.ts.map +1 -0
- package/dist/skills/mcp/wireDefs.js +141 -0
- package/dist/skills/mcp/wireDefs.js.map +1 -0
- package/dist/skills/parser.d.ts +63 -0
- package/dist/skills/parser.d.ts.map +1 -0
- package/dist/skills/parser.js +755 -0
- package/dist/skills/parser.js.map +1 -0
- package/dist/skills/prefilter.d.ts +104 -0
- package/dist/skills/prefilter.d.ts.map +1 -0
- package/dist/skills/prefilter.js +398 -0
- package/dist/skills/prefilter.js.map +1 -0
- package/dist/skills/preprocess.d.ts +169 -0
- package/dist/skills/preprocess.d.ts.map +1 -0
- package/dist/skills/preprocess.js +535 -0
- package/dist/skills/preprocess.js.map +1 -0
- package/dist/skills/render.d.ts +83 -0
- package/dist/skills/render.d.ts.map +1 -0
- package/dist/skills/render.js +397 -0
- package/dist/skills/render.js.map +1 -0
- package/dist/skills/sources/index.browser.d.ts +29 -0
- package/dist/skills/sources/index.browser.d.ts.map +1 -0
- package/dist/skills/sources/index.browser.js +16 -0
- package/dist/skills/sources/index.browser.js.map +1 -0
- package/dist/skills/sources/index.d.ts +59 -0
- package/dist/skills/sources/index.d.ts.map +1 -0
- package/dist/skills/sources/index.js +471 -0
- package/dist/skills/sources/index.js.map +1 -0
- package/dist/skills/sources/walk.browser.d.ts +17 -0
- package/dist/skills/sources/walk.browser.d.ts.map +1 -0
- package/dist/skills/sources/walk.browser.js +19 -0
- package/dist/skills/sources/walk.browser.js.map +1 -0
- package/dist/skills/sources/walk.d.ts +68 -0
- package/dist/skills/sources/walk.d.ts.map +1 -0
- package/dist/skills/sources/walk.js +264 -0
- package/dist/skills/sources/walk.js.map +1 -0
- package/dist/skills/substitute.d.ts +87 -0
- package/dist/skills/substitute.d.ts.map +1 -0
- package/dist/skills/substitute.js +322 -0
- package/dist/skills/substitute.js.map +1 -0
- package/dist/skills/testing/SkillKit.browser.d.ts +62 -0
- package/dist/skills/testing/SkillKit.browser.d.ts.map +1 -0
- package/dist/skills/testing/SkillKit.browser.js +41 -0
- package/dist/skills/testing/SkillKit.browser.js.map +1 -0
- package/dist/skills/testing/SkillKit.d.ts +130 -0
- package/dist/skills/testing/SkillKit.d.ts.map +1 -0
- package/dist/skills/testing/SkillKit.js +316 -0
- package/dist/skills/testing/SkillKit.js.map +1 -0
- package/dist/skills/testing/index.d.ts +9 -0
- package/dist/skills/testing/index.d.ts.map +1 -0
- package/dist/skills/testing/index.js +8 -0
- package/dist/skills/testing/index.js.map +1 -0
- package/dist/skills/trust.d.ts +72 -0
- package/dist/skills/trust.d.ts.map +1 -0
- package/dist/skills/trust.js +183 -0
- package/dist/skills/trust.js.map +1 -0
- package/dist/skills/types.d.ts +627 -0
- package/dist/skills/types.d.ts.map +1 -0
- package/dist/skills/types.js +85 -0
- package/dist/skills/types.js.map +1 -0
- package/dist/skills/validator.d.ts +95 -0
- package/dist/skills/validator.d.ts.map +1 -0
- package/dist/skills/validator.js +486 -0
- package/dist/skills/validator.js.map +1 -0
- package/dist/tracing/PipelineTracer.d.ts +35 -22
- package/dist/tracing/PipelineTracer.d.ts.map +1 -1
- package/dist/tracing/PipelineTracer.js +106 -61
- package/dist/tracing/PipelineTracer.js.map +1 -1
- package/dist/tracing/SdkTracer.d.ts +63 -61
- package/dist/tracing/SdkTracer.d.ts.map +1 -1
- package/dist/tracing/SdkTracer.js +185 -177
- package/dist/tracing/SdkTracer.js.map +1 -1
- package/dist/tracing/index.d.ts +10 -1
- package/dist/tracing/index.d.ts.map +1 -1
- package/dist/tracing/index.js +9 -0
- package/dist/tracing/index.js.map +1 -1
- package/dist/tracing/types.d.ts +89 -16
- package/dist/tracing/types.d.ts.map +1 -1
- package/dist/tracing/types.js +17 -4
- package/dist/tracing/types.js.map +1 -1
- package/dist/types.d.ts +6 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -1
- package/dist/version.d.ts.map +1 -1
- package/dist/version.js +10 -20
- package/dist/version.js.map +1 -1
- package/package.json +53 -39
- package/.claude/skills/qodo-agent/SKILL.md +0 -974
- package/.claude/skills/qodo-agent/assets/programmatic-agent.ts +0 -407
- package/.claude/skills/qodo-agent/references/builtin-tools.md +0 -342
- package/.claude/skills/qodo-agent/references/common-issues.md +0 -537
- package/bin/rg +0 -0
- package/dist/api/agent.d.ts +0 -104
- package/dist/api/agent.d.ts.map +0 -1
- package/dist/api/agent.js +0 -939
- package/dist/api/agent.js.map +0 -1
- package/dist/api/analytics.d.ts +0 -43
- package/dist/api/analytics.d.ts.map +0 -1
- package/dist/api/analytics.js +0 -163
- package/dist/api/analytics.js.map +0 -1
- package/dist/api/http.d.ts +0 -5
- package/dist/api/http.d.ts.map +0 -1
- package/dist/api/http.js +0 -62
- package/dist/api/http.js.map +0 -1
- package/dist/api/index.d.ts +0 -12
- package/dist/api/index.d.ts.map +0 -1
- package/dist/api/index.js +0 -17
- package/dist/api/index.js.map +0 -1
- package/dist/api/taskTracking.d.ts +0 -54
- package/dist/api/taskTracking.d.ts.map +0 -1
- package/dist/api/taskTracking.js +0 -208
- package/dist/api/taskTracking.js.map +0 -1
- package/dist/api/types.d.ts +0 -93
- package/dist/api/types.d.ts.map +0 -1
- package/dist/api/types.js +0 -2
- package/dist/api/types.js.map +0 -1
- package/dist/api/utils.d.ts +0 -8
- package/dist/api/utils.d.ts.map +0 -1
- package/dist/api/utils.js +0 -63
- package/dist/api/utils.js.map +0 -1
- package/dist/api/websocket.d.ts +0 -203
- package/dist/api/websocket.d.ts.map +0 -1
- package/dist/api/websocket.js +0 -1166
- package/dist/api/websocket.js.map +0 -1
- package/dist/bin/install-skill.d.ts +0 -14
- package/dist/bin/install-skill.d.ts.map +0 -1
- package/dist/bin/install-skill.js +0 -125
- package/dist/bin/install-skill.js.map +0 -1
- package/dist/bin/run-helpers.d.ts +0 -34
- package/dist/bin/run-helpers.d.ts.map +0 -1
- package/dist/bin/run-helpers.js +0 -186
- package/dist/bin/run-helpers.js.map +0 -1
- package/dist/bin/run.d.ts +0 -13
- package/dist/bin/run.d.ts.map +0 -1
- package/dist/bin/run.js +0 -57
- package/dist/bin/run.js.map +0 -1
- package/dist/clients/index.d.ts +0 -10
- package/dist/clients/index.d.ts.map +0 -1
- package/dist/clients/index.js +0 -8
- package/dist/clients/index.js.map +0 -1
- package/dist/clients/info/InfoClient.d.ts +0 -37
- package/dist/clients/info/InfoClient.d.ts.map +0 -1
- package/dist/clients/info/InfoClient.js +0 -69
- package/dist/clients/info/InfoClient.js.map +0 -1
- package/dist/clients/info/index.d.ts +0 -4
- package/dist/clients/info/index.d.ts.map +0 -1
- package/dist/clients/info/index.js +0 -2
- package/dist/clients/info/index.js.map +0 -1
- package/dist/clients/info/types.d.ts +0 -21
- package/dist/clients/info/types.d.ts.map +0 -1
- package/dist/clients/info/types.js +0 -2
- package/dist/clients/info/types.js.map +0 -1
- package/dist/clients/sessions/SessionsClient.d.ts +0 -34
- package/dist/clients/sessions/SessionsClient.d.ts.map +0 -1
- package/dist/clients/sessions/SessionsClient.js +0 -71
- package/dist/clients/sessions/SessionsClient.js.map +0 -1
- package/dist/clients/sessions/index.d.ts +0 -4
- package/dist/clients/sessions/index.d.ts.map +0 -1
- package/dist/clients/sessions/index.js +0 -2
- package/dist/clients/sessions/index.js.map +0 -1
- package/dist/clients/sessions/types.d.ts +0 -20
- package/dist/clients/sessions/types.d.ts.map +0 -1
- package/dist/clients/sessions/types.js +0 -2
- package/dist/clients/sessions/types.js.map +0 -1
- package/dist/clients/tools/ToolsClient.d.ts +0 -39
- package/dist/clients/tools/ToolsClient.d.ts.map +0 -1
- package/dist/clients/tools/ToolsClient.js +0 -95
- package/dist/clients/tools/ToolsClient.js.map +0 -1
- package/dist/clients/tools/index.d.ts +0 -4
- package/dist/clients/tools/index.d.ts.map +0 -1
- package/dist/clients/tools/index.js +0 -2
- package/dist/clients/tools/index.js.map +0 -1
- package/dist/clients/tools/types.d.ts +0 -14
- package/dist/clients/tools/types.d.ts.map +0 -1
- package/dist/clients/tools/types.js +0 -2
- package/dist/clients/tools/types.js.map +0 -1
- package/dist/config/ConfigManager.d.ts +0 -43
- package/dist/config/ConfigManager.d.ts.map +0 -1
- package/dist/config/ConfigManager.js +0 -472
- package/dist/config/ConfigManager.js.map +0 -1
- package/dist/config/index.d.ts +0 -6
- package/dist/config/index.d.ts.map +0 -1
- package/dist/config/index.js +0 -7
- package/dist/config/index.js.map +0 -1
- package/dist/config/urlConfig.d.ts +0 -15
- package/dist/config/urlConfig.d.ts.map +0 -1
- package/dist/config/urlConfig.js +0 -75
- package/dist/config/urlConfig.js.map +0 -1
- package/dist/constants/errors.d.ts +0 -2
- package/dist/constants/errors.d.ts.map +0 -1
- package/dist/constants/errors.js +0 -2
- package/dist/constants/errors.js.map +0 -1
- package/dist/constants/index.d.ts +0 -7
- package/dist/constants/index.d.ts.map +0 -1
- package/dist/constants/index.js +0 -11
- package/dist/constants/index.js.map +0 -1
- package/dist/constants/tools.d.ts +0 -4
- package/dist/constants/tools.d.ts.map +0 -1
- package/dist/constants/tools.js +0 -4
- package/dist/constants/tools.js.map +0 -1
- package/dist/constants/versions.d.ts +0 -2
- package/dist/constants/versions.d.ts.map +0 -1
- package/dist/constants/versions.js +0 -2
- package/dist/constants/versions.js.map +0 -1
- package/dist/context/buildUserContext.d.ts +0 -18
- package/dist/context/buildUserContext.d.ts.map +0 -1
- package/dist/context/buildUserContext.js +0 -34
- package/dist/context/buildUserContext.js.map +0 -1
- package/dist/context/index.d.ts +0 -9
- package/dist/context/index.d.ts.map +0 -1
- package/dist/context/index.js +0 -9
- package/dist/context/index.js.map +0 -1
- package/dist/context/messageManager.d.ts +0 -42
- package/dist/context/messageManager.d.ts.map +0 -1
- package/dist/context/messageManager.js +0 -322
- package/dist/context/messageManager.js.map +0 -1
- package/dist/context/taskFocus.d.ts +0 -2
- package/dist/context/taskFocus.d.ts.map +0 -1
- package/dist/context/taskFocus.js +0 -26
- package/dist/context/taskFocus.js.map +0 -1
- package/dist/context/userInput.d.ts +0 -3
- package/dist/context/userInput.d.ts.map +0 -1
- package/dist/context/userInput.js +0 -20
- package/dist/context/userInput.js.map +0 -1
- package/dist/mcp/MCPManager.d.ts +0 -109
- package/dist/mcp/MCPManager.d.ts.map +0 -1
- package/dist/mcp/MCPManager.js +0 -592
- package/dist/mcp/MCPManager.js.map +0 -1
- package/dist/mcp/approvedTools.d.ts +0 -4
- package/dist/mcp/approvedTools.d.ts.map +0 -1
- package/dist/mcp/approvedTools.js +0 -19
- package/dist/mcp/approvedTools.js.map +0 -1
- package/dist/mcp/baseServer.d.ts +0 -75
- package/dist/mcp/baseServer.d.ts.map +0 -1
- package/dist/mcp/baseServer.js +0 -107
- package/dist/mcp/baseServer.js.map +0 -1
- package/dist/mcp/builtinServers.d.ts +0 -15
- package/dist/mcp/builtinServers.d.ts.map +0 -1
- package/dist/mcp/builtinServers.js +0 -141
- package/dist/mcp/builtinServers.js.map +0 -1
- package/dist/mcp/dynamicBEServer.d.ts +0 -20
- package/dist/mcp/dynamicBEServer.d.ts.map +0 -1
- package/dist/mcp/dynamicBEServer.js +0 -52
- package/dist/mcp/dynamicBEServer.js.map +0 -1
- package/dist/mcp/index.d.ts +0 -18
- package/dist/mcp/index.d.ts.map +0 -1
- package/dist/mcp/index.js +0 -23
- package/dist/mcp/index.js.map +0 -1
- package/dist/mcp/mcpInitialization.d.ts +0 -2
- package/dist/mcp/mcpInitialization.d.ts.map +0 -1
- package/dist/mcp/mcpInitialization.js +0 -56
- package/dist/mcp/mcpInitialization.js.map +0 -1
- package/dist/mcp/servers/filesystem.d.ts +0 -44
- package/dist/mcp/servers/filesystem.d.ts.map +0 -1
- package/dist/mcp/servers/filesystem.js +0 -776
- package/dist/mcp/servers/filesystem.js.map +0 -1
- package/dist/mcp/servers/git.d.ts +0 -18
- package/dist/mcp/servers/git.d.ts.map +0 -1
- package/dist/mcp/servers/git.js +0 -441
- package/dist/mcp/servers/git.js.map +0 -1
- package/dist/mcp/servers/ripgrep.d.ts +0 -39
- package/dist/mcp/servers/ripgrep.d.ts.map +0 -1
- package/dist/mcp/servers/ripgrep.js +0 -550
- package/dist/mcp/servers/ripgrep.js.map +0 -1
- package/dist/mcp/servers/shell.d.ts +0 -20
- package/dist/mcp/servers/shell.d.ts.map +0 -1
- package/dist/mcp/servers/shell.js +0 -519
- package/dist/mcp/servers/shell.js.map +0 -1
- package/dist/mcp/serversRegistry.d.ts +0 -55
- package/dist/mcp/serversRegistry.d.ts.map +0 -1
- package/dist/mcp/serversRegistry.js +0 -416
- package/dist/mcp/serversRegistry.js.map +0 -1
- package/dist/mcp/toolProcessor.d.ts +0 -82
- package/dist/mcp/toolProcessor.d.ts.map +0 -1
- package/dist/mcp/toolProcessor.js +0 -392
- package/dist/mcp/toolProcessor.js.map +0 -1
- package/dist/mcp/types.d.ts +0 -29
- package/dist/mcp/types.d.ts.map +0 -1
- package/dist/mcp/types.js +0 -2
- package/dist/mcp/types.js.map +0 -1
- package/dist/messages/index.d.ts +0 -8
- package/dist/messages/index.d.ts.map +0 -1
- package/dist/messages/index.js +0 -7
- package/dist/messages/index.js.map +0 -1
- package/dist/messages/openai.d.ts +0 -26
- package/dist/messages/openai.d.ts.map +0 -1
- package/dist/messages/openai.js +0 -55
- package/dist/messages/openai.js.map +0 -1
- package/dist/messages/types.d.ts +0 -73
- package/dist/messages/types.d.ts.map +0 -1
- package/dist/messages/types.js +0 -78
- package/dist/messages/types.js.map +0 -1
- package/dist/parser/index.d.ts +0 -72
- package/dist/parser/index.d.ts.map +0 -1
- package/dist/parser/index.js +0 -967
- package/dist/parser/index.js.map +0 -1
- package/dist/parser/types.d.ts +0 -153
- package/dist/parser/types.d.ts.map +0 -1
- package/dist/parser/types.js +0 -6
- package/dist/parser/types.js.map +0 -1
- package/dist/parser/utils.d.ts +0 -18
- package/dist/parser/utils.d.ts.map +0 -1
- package/dist/parser/utils.js +0 -64
- package/dist/parser/utils.js.map +0 -1
- package/dist/sdk/QodoSDK.d.ts +0 -218
- package/dist/sdk/QodoSDK.d.ts.map +0 -1
- package/dist/sdk/QodoSDK.js +0 -1115
- package/dist/sdk/QodoSDK.js.map +0 -1
- package/dist/sdk/artifacts.d.ts +0 -156
- package/dist/sdk/artifacts.d.ts.map +0 -1
- package/dist/sdk/artifacts.js +0 -166
- package/dist/sdk/artifacts.js.map +0 -1
- package/dist/sdk/bootstrap.d.ts +0 -16
- package/dist/sdk/bootstrap.d.ts.map +0 -1
- package/dist/sdk/bootstrap.js +0 -28
- package/dist/sdk/bootstrap.js.map +0 -1
- package/dist/sdk/builders.d.ts +0 -54
- package/dist/sdk/builders.d.ts.map +0 -1
- package/dist/sdk/builders.js +0 -117
- package/dist/sdk/builders.js.map +0 -1
- package/dist/sdk/defaults.d.ts +0 -11
- package/dist/sdk/defaults.d.ts.map +0 -1
- package/dist/sdk/defaults.js +0 -39
- package/dist/sdk/defaults.js.map +0 -1
- package/dist/sdk/discovery.d.ts +0 -2
- package/dist/sdk/discovery.d.ts.map +0 -1
- package/dist/sdk/discovery.js +0 -25
- package/dist/sdk/discovery.js.map +0 -1
- package/dist/sdk/events.d.ts +0 -269
- package/dist/sdk/events.d.ts.map +0 -1
- package/dist/sdk/events.js +0 -69
- package/dist/sdk/events.js.map +0 -1
- package/dist/sdk/exit-expression.d.ts +0 -13
- package/dist/sdk/exit-expression.d.ts.map +0 -1
- package/dist/sdk/exit-expression.js +0 -35
- package/dist/sdk/exit-expression.js.map +0 -1
- package/dist/sdk/index.d.ts +0 -17
- package/dist/sdk/index.d.ts.map +0 -1
- package/dist/sdk/index.js +0 -17
- package/dist/sdk/index.js.map +0 -1
- package/dist/sdk/middleware.d.ts +0 -59
- package/dist/sdk/middleware.d.ts.map +0 -1
- package/dist/sdk/middleware.js +0 -69
- package/dist/sdk/middleware.js.map +0 -1
- package/dist/sdk/pipeline/PipelineBuilder.d.ts +0 -79
- package/dist/sdk/pipeline/PipelineBuilder.d.ts.map +0 -1
- package/dist/sdk/pipeline/PipelineBuilder.js +0 -129
- package/dist/sdk/pipeline/PipelineBuilder.js.map +0 -1
- package/dist/sdk/pipeline/PipelineRunner.d.ts +0 -28
- package/dist/sdk/pipeline/PipelineRunner.d.ts.map +0 -1
- package/dist/sdk/pipeline/PipelineRunner.js +0 -326
- package/dist/sdk/pipeline/PipelineRunner.js.map +0 -1
- package/dist/sdk/pipeline/compiler.d.ts +0 -24
- package/dist/sdk/pipeline/compiler.d.ts.map +0 -1
- package/dist/sdk/pipeline/compiler.js +0 -199
- package/dist/sdk/pipeline/compiler.js.map +0 -1
- package/dist/sdk/pipeline/declarative.d.ts +0 -34
- package/dist/sdk/pipeline/declarative.d.ts.map +0 -1
- package/dist/sdk/pipeline/declarative.js +0 -9
- package/dist/sdk/pipeline/declarative.js.map +0 -1
- package/dist/sdk/pipeline/index.d.ts +0 -20
- package/dist/sdk/pipeline/index.d.ts.map +0 -1
- package/dist/sdk/pipeline/index.js +0 -19
- package/dist/sdk/pipeline/index.js.map +0 -1
- package/dist/sdk/pipeline/types.d.ts +0 -93
- package/dist/sdk/pipeline/types.d.ts.map +0 -1
- package/dist/sdk/pipeline/types.js +0 -10
- package/dist/sdk/pipeline/types.js.map +0 -1
- package/dist/sdk/policies.d.ts +0 -163
- package/dist/sdk/policies.d.ts.map +0 -1
- package/dist/sdk/policies.js +0 -243
- package/dist/sdk/policies.js.map +0 -1
- package/dist/sdk/runner/AgentRunner.d.ts +0 -22
- package/dist/sdk/runner/AgentRunner.d.ts.map +0 -1
- package/dist/sdk/runner/AgentRunner.js +0 -222
- package/dist/sdk/runner/AgentRunner.js.map +0 -1
- package/dist/sdk/runner/finalize.d.ts +0 -56
- package/dist/sdk/runner/finalize.d.ts.map +0 -1
- package/dist/sdk/runner/finalize.js +0 -155
- package/dist/sdk/runner/finalize.js.map +0 -1
- package/dist/sdk/runner/formats.d.ts +0 -7
- package/dist/sdk/runner/formats.d.ts.map +0 -1
- package/dist/sdk/runner/formats.js +0 -76
- package/dist/sdk/runner/formats.js.map +0 -1
- package/dist/sdk/runner/index.d.ts +0 -9
- package/dist/sdk/runner/index.d.ts.map +0 -1
- package/dist/sdk/runner/index.js +0 -9
- package/dist/sdk/runner/index.js.map +0 -1
- package/dist/sdk/runner/progress.d.ts +0 -3
- package/dist/sdk/runner/progress.d.ts.map +0 -1
- package/dist/sdk/runner/progress.js +0 -16
- package/dist/sdk/runner/progress.js.map +0 -1
- package/dist/sdk/schemas.d.ts +0 -72
- package/dist/sdk/schemas.d.ts.map +0 -1
- package/dist/sdk/schemas.js +0 -282
- package/dist/sdk/schemas.js.map +0 -1
- package/dist/sdk/trigger-context.d.ts +0 -24
- package/dist/sdk/trigger-context.d.ts.map +0 -1
- package/dist/sdk/trigger-context.js +0 -136
- package/dist/sdk/trigger-context.js.map +0 -1
- package/dist/session/SessionContext.d.ts +0 -89
- package/dist/session/SessionContext.d.ts.map +0 -1
- package/dist/session/SessionContext.js +0 -410
- package/dist/session/SessionContext.js.map +0 -1
- package/dist/session/environment.d.ts +0 -52
- package/dist/session/environment.d.ts.map +0 -1
- package/dist/session/environment.js +0 -27
- package/dist/session/environment.js.map +0 -1
- package/dist/session/history.d.ts +0 -18
- package/dist/session/history.d.ts.map +0 -1
- package/dist/session/history.js +0 -68
- package/dist/session/history.js.map +0 -1
- package/dist/session/index.d.ts +0 -10
- package/dist/session/index.d.ts.map +0 -1
- package/dist/session/index.js +0 -9
- package/dist/session/index.js.map +0 -1
- package/dist/session/serverData.d.ts +0 -38
- package/dist/session/serverData.d.ts.map +0 -1
- package/dist/session/serverData.js +0 -261
- package/dist/session/serverData.js.map +0 -1
- package/dist/tracing/pipelineHelpers.d.ts +0 -29
- package/dist/tracing/pipelineHelpers.d.ts.map +0 -1
- package/dist/tracing/pipelineHelpers.js +0 -224
- package/dist/tracing/pipelineHelpers.js.map +0 -1
- package/dist/tracking/Tracker.d.ts +0 -55
- package/dist/tracking/Tracker.d.ts.map +0 -1
- package/dist/tracking/Tracker.js +0 -217
- package/dist/tracking/Tracker.js.map +0 -1
- package/dist/tracking/index.d.ts +0 -8
- package/dist/tracking/index.d.ts.map +0 -1
- package/dist/tracking/index.js +0 -8
- package/dist/tracking/index.js.map +0 -1
- package/dist/tracking/schemas.d.ts +0 -292
- package/dist/tracking/schemas.d.ts.map +0 -1
- package/dist/tracking/schemas.js +0 -91
- package/dist/tracking/schemas.js.map +0 -1
- package/dist/utils/extractSetFlags.d.ts +0 -6
- package/dist/utils/extractSetFlags.d.ts.map +0 -1
- package/dist/utils/extractSetFlags.js +0 -16
- package/dist/utils/extractSetFlags.js.map +0 -1
- package/dist/utils/formatTimeAgo.d.ts +0 -2
- package/dist/utils/formatTimeAgo.d.ts.map +0 -1
- package/dist/utils/formatTimeAgo.js +0 -20
- package/dist/utils/formatTimeAgo.js.map +0 -1
- package/dist/utils/index.d.ts +0 -12
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -12
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/machineId.d.ts +0 -14
- package/dist/utils/machineId.d.ts.map +0 -1
- package/dist/utils/machineId.js +0 -66
- package/dist/utils/machineId.js.map +0 -1
- package/dist/utils/pathUtils.d.ts +0 -22
- package/dist/utils/pathUtils.d.ts.map +0 -1
- package/dist/utils/pathUtils.js +0 -54
- package/dist/utils/pathUtils.js.map +0 -1
- package/scripts/download-ripgrep.js +0 -269
|
@@ -0,0 +1,535 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `!command` body preprocessing.
|
|
3
|
+
*
|
|
4
|
+
* Skills may embed shell-command blocks that the SDK runs at body-load
|
|
5
|
+
* time and splices the output into the rendered body before the model
|
|
6
|
+
* sees it. The feature is **disabled by default** because the OSS skill
|
|
7
|
+
* survey (29 real skills, 0 used `!command`) suggests it's a rarely-
|
|
8
|
+
* needed compatibility shim, not a hot-path tool.
|
|
9
|
+
*
|
|
10
|
+
* Two block forms are recognised, mirroring Claude Code's surface:
|
|
11
|
+
*
|
|
12
|
+
* - Inline: a single-backticked command line whose body starts with
|
|
13
|
+
* `!`, e.g. `` `!git log --oneline -5` ``.
|
|
14
|
+
* - Fenced: a triple-backtick block tagged with `!`, e.g.
|
|
15
|
+
* ```` ```!\nbash -c 'pwd'\n``` ````.
|
|
16
|
+
*
|
|
17
|
+
* Three modes, gated through {@link SkillsPreprocessingConfig.mode}:
|
|
18
|
+
*
|
|
19
|
+
* - `'disabled'` (default) — every block is left literal. No execution,
|
|
20
|
+
* no telemetry. Cheapest path; ships zero attack surface.
|
|
21
|
+
* - `'allowlisted'` — every block's first shell-tokenised argv must
|
|
22
|
+
* match one of {@link SkillsPreprocessingConfig.allow}. Non-matches
|
|
23
|
+
* are replaced with a disable marker + `preprocess_blocked` event.
|
|
24
|
+
* Matches execute through the consumer's bash (or powershell, gated
|
|
25
|
+
* by env-var).
|
|
26
|
+
* - `'full'` — every block executes. Reserved for trusted environments;
|
|
27
|
+
* third-party skills always bypass this mode regardless of opt-in.
|
|
28
|
+
*
|
|
29
|
+
* Tier gate runs *before* the mode gate: third-party skills never
|
|
30
|
+
* execute, ever, regardless of `mode`. The trust derivation is the same
|
|
31
|
+
* value `SkillsManager.isTrusted` returns.
|
|
32
|
+
*
|
|
33
|
+
* Substitution order (per `skills-trust.md` §4):
|
|
34
|
+
*
|
|
35
|
+
* 1. `${QODO_SKILL_DIR}` substituted in the entire body text before
|
|
36
|
+
* block detection. Authors compose commands like
|
|
37
|
+
* `` `!cat ${QODO_SKILL_DIR}/references/style.md` `` so the
|
|
38
|
+
* command's `cwd` (and any path arguments) resolve correctly even
|
|
39
|
+
* when the skill is loaded from a non-default source.
|
|
40
|
+
* 2. `!command` blocks executed; output spliced in place.
|
|
41
|
+
* 3. `$ARGUMENTS` substitution (separate path) runs after
|
|
42
|
+
* preprocessing — output is treated as inert text, so a command
|
|
43
|
+
* whose stdout contains `$ARGUMENTS` will see it substituted on
|
|
44
|
+
* the final pass.
|
|
45
|
+
*
|
|
46
|
+
* Threat model:
|
|
47
|
+
*
|
|
48
|
+
* - Skill body content is untrusted even from a `trusted` tier — a
|
|
49
|
+
* skill author may have copied a recipe from the wider OSS
|
|
50
|
+
* ecosystem without realising it embeds a `!command`. The
|
|
51
|
+
* allowlist is the only mechanism that can be safely relied on for
|
|
52
|
+
* blast-radius control; `full` mode means "I trust every skill in
|
|
53
|
+
* this catalog".
|
|
54
|
+
* - `!command` blocks run through the consumer's shell, which gives
|
|
55
|
+
* them pipes / redirects / shell builtins. The allowlist gates the
|
|
56
|
+
* first command name only; downstream pipe tokens are not screened.
|
|
57
|
+
* Operators wiring `mode: 'full'` accept that trade-off. The right
|
|
58
|
+
* answer is to either disallow shell metacharacters in the command
|
|
59
|
+
* line entirely (rejected) or trust the operator's allowlist
|
|
60
|
+
* (accepted, with this caveat documented).
|
|
61
|
+
* - Hard kill via `setTimeout` + `SIGKILL`. Output capped during
|
|
62
|
+
* buffering — a multi-gigabyte stream is truncated as it arrives,
|
|
63
|
+
* not after the process completes.
|
|
64
|
+
* - `cwd` defaults to the skill's directory; we don't enforce
|
|
65
|
+
* containment because the shell can `cd` freely. Operators wiring
|
|
66
|
+
* `full` mode accept that.
|
|
67
|
+
*
|
|
68
|
+
* The module is async (subprocess spawn) but pure-ish: it takes a body,
|
|
69
|
+
* returns a transformed body + telemetry events. Caller (typically the
|
|
70
|
+
* MCP server's `get_skill` handler) forwards the events to the
|
|
71
|
+
* configured sink.
|
|
72
|
+
*/
|
|
73
|
+
import { spawn } from 'node:child_process';
|
|
74
|
+
import * as os from 'node:os';
|
|
75
|
+
import * as path from 'node:path';
|
|
76
|
+
import { PREPROCESS_DEFAULT_MAX_OUTPUT_BYTES, PREPROCESS_DEFAULT_TIMEOUT_MS, } from './types.js';
|
|
77
|
+
/**
|
|
78
|
+
* Environment-variable gate matching Claude Code's
|
|
79
|
+
* `CLAUDE_CODE_USE_POWERSHELL_TOOL`. When unset, skills declaring
|
|
80
|
+
* `shell: powershell` get their `!command` blocks blocked with a
|
|
81
|
+
* `powershell_disabled` event regardless of mode.
|
|
82
|
+
*/
|
|
83
|
+
export const POWERSHELL_GATE_ENV_VAR = 'QODO_SKILLS_ENABLE_POWERSHELL';
|
|
84
|
+
/** Placeholder substituted in place of a non-executing `!command` block. */
|
|
85
|
+
const DISABLE_MARKER = '[shell command execution disabled by policy]';
|
|
86
|
+
/**
|
|
87
|
+
* Preprocess a skill body. Returns the transformed body + telemetry.
|
|
88
|
+
*
|
|
89
|
+
* Calling with `mode: 'disabled'` is a no-op fast-path: the body is
|
|
90
|
+
* returned unchanged and no events are emitted. Operators who never
|
|
91
|
+
* configure preprocessing pay zero overhead.
|
|
92
|
+
*/
|
|
93
|
+
export async function preprocessBody(rawBody, ctx, config) {
|
|
94
|
+
const mode = config?.mode ?? 'disabled';
|
|
95
|
+
if (mode === 'disabled') {
|
|
96
|
+
return { body: rawBody, events: [] };
|
|
97
|
+
}
|
|
98
|
+
const substituted = substituteQodoVars(rawBody, ctx.skill);
|
|
99
|
+
const blocks = findCommandBlocks(substituted);
|
|
100
|
+
if (blocks.length === 0) {
|
|
101
|
+
return { body: substituted, events: [] };
|
|
102
|
+
}
|
|
103
|
+
const events = [];
|
|
104
|
+
const replacements = [];
|
|
105
|
+
for (const block of blocks) {
|
|
106
|
+
if (!ctx.isTrusted) {
|
|
107
|
+
events.push({
|
|
108
|
+
kind: 'sdk.skill.preprocess_blocked',
|
|
109
|
+
skill: ctx.skill.fqn,
|
|
110
|
+
command: scrubCommandForTelemetry(block.command, ctx.skill.path),
|
|
111
|
+
reason: 'tier_third_party',
|
|
112
|
+
});
|
|
113
|
+
replacements.push({ block, output: DISABLE_MARKER });
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
if (ctx.skill.frontmatter.shell === 'powershell' && !powershellAllowed(ctx.env)) {
|
|
117
|
+
events.push({
|
|
118
|
+
kind: 'sdk.skill.preprocess_blocked',
|
|
119
|
+
skill: ctx.skill.fqn,
|
|
120
|
+
command: scrubCommandForTelemetry(block.command, ctx.skill.path),
|
|
121
|
+
reason: 'powershell_disabled',
|
|
122
|
+
});
|
|
123
|
+
replacements.push({ block, output: DISABLE_MARKER });
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
if (mode === 'allowlisted') {
|
|
127
|
+
const allowed = config?.allow ?? [];
|
|
128
|
+
// block.command may contain newlines (the fenced
|
|
129
|
+
// form joins every interior line into one shell-piped string).
|
|
130
|
+
// The first-token check would allow `git status` to slip
|
|
131
|
+
// `\nrm -rf /` past the gate. In allowlisted mode the only safe
|
|
132
|
+
// policy is to evaluate every non-blank line independently: each
|
|
133
|
+
// line's first token must match the allowlist, OR the whole
|
|
134
|
+
// command is blocked.
|
|
135
|
+
const linesAllowed = block.command.split('\n').every((line) => {
|
|
136
|
+
const trimmed = line.trim();
|
|
137
|
+
if (trimmed.length === 0 || trimmed.startsWith('#'))
|
|
138
|
+
return true;
|
|
139
|
+
const first = parseFirstToken(trimmed);
|
|
140
|
+
return first !== null && isAllowlisted(first, allowed);
|
|
141
|
+
});
|
|
142
|
+
if (!linesAllowed) {
|
|
143
|
+
events.push({
|
|
144
|
+
kind: 'sdk.skill.preprocess_blocked',
|
|
145
|
+
skill: ctx.skill.fqn,
|
|
146
|
+
command: scrubCommandForTelemetry(block.command, ctx.skill.path),
|
|
147
|
+
reason: 'not_allowlisted',
|
|
148
|
+
});
|
|
149
|
+
replacements.push({ block, output: DISABLE_MARKER });
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
const exec = await runCommand(ctx, config, block.command);
|
|
154
|
+
events.push({
|
|
155
|
+
kind: 'sdk.skill.preprocess_executed',
|
|
156
|
+
skill: ctx.skill.fqn,
|
|
157
|
+
command: scrubCommandForTelemetry(block.command, ctx.skill.path),
|
|
158
|
+
mode,
|
|
159
|
+
durationMs: exec.durationMs,
|
|
160
|
+
exitCode: exec.exitCode,
|
|
161
|
+
outputBytes: exec.outputBytes,
|
|
162
|
+
truncated: exec.truncated,
|
|
163
|
+
timedOut: exec.timedOut,
|
|
164
|
+
});
|
|
165
|
+
replacements.push({ block, output: exec.output });
|
|
166
|
+
}
|
|
167
|
+
return { body: applyReplacements(substituted, replacements), events };
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Sanitise a command line before emitting it in telemetry. The
|
|
171
|
+
* substituted absolute `${QODO_SKILL_DIR}` value leaks the operator's
|
|
172
|
+
* filesystem layout when it lands in `sdk.skill.preprocess_*` events;
|
|
173
|
+
* `scrubEvent` on `SkillsManager` runs after the event is built, so we
|
|
174
|
+
* collapse the substituted path back to the literal `${QODO_SKILL_DIR}`
|
|
175
|
+
* token here.
|
|
176
|
+
*/
|
|
177
|
+
function scrubCommandForTelemetry(command, skillPath) {
|
|
178
|
+
if (skillPath.length === 0)
|
|
179
|
+
return command;
|
|
180
|
+
return command.split(skillPath).join('${QODO_SKILL_DIR}');
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Find all `!command` blocks in a body. The scanner walks the body once
|
|
184
|
+
* and emits matches in source order so the replacement step can stitch
|
|
185
|
+
* the output back together with a single pass.
|
|
186
|
+
*
|
|
187
|
+
* The scanner ignores `!`-prefixed commands inside non-`!` fenced
|
|
188
|
+
* blocks — those are narrative code samples, not commands. Conversely,
|
|
189
|
+
* a `!`-tagged fenced block hides any inner backticks from the inline
|
|
190
|
+
* regex.
|
|
191
|
+
*/
|
|
192
|
+
export function findCommandBlocks(body) {
|
|
193
|
+
const out = [];
|
|
194
|
+
let i = 0;
|
|
195
|
+
while (i < body.length) {
|
|
196
|
+
if (body.startsWith('```!', i) &&
|
|
197
|
+
(i === 0 || body[i - 1] === '\n')) {
|
|
198
|
+
const blockStart = i;
|
|
199
|
+
let cursor = i + 4;
|
|
200
|
+
while (cursor < body.length && (body[cursor] === ' ' || body[cursor] === '\t'))
|
|
201
|
+
cursor += 1;
|
|
202
|
+
if (body[cursor] === '\n')
|
|
203
|
+
cursor += 1;
|
|
204
|
+
const contentStart = cursor;
|
|
205
|
+
const closeIdx = findFenceClose(body, cursor);
|
|
206
|
+
if (closeIdx === -1) {
|
|
207
|
+
i = blockStart + 4;
|
|
208
|
+
continue;
|
|
209
|
+
}
|
|
210
|
+
const command = body.slice(contentStart, closeIdx).trim();
|
|
211
|
+
let end = closeIdx + 3;
|
|
212
|
+
if (body[end] === '\n')
|
|
213
|
+
end += 1;
|
|
214
|
+
out.push({
|
|
215
|
+
raw: body.slice(blockStart, end),
|
|
216
|
+
command,
|
|
217
|
+
start: blockStart,
|
|
218
|
+
end,
|
|
219
|
+
});
|
|
220
|
+
i = end;
|
|
221
|
+
continue;
|
|
222
|
+
}
|
|
223
|
+
if (body.startsWith('```', i) &&
|
|
224
|
+
(i === 0 || body[i - 1] === '\n')) {
|
|
225
|
+
const close = findFenceClose(body, i + 3);
|
|
226
|
+
if (close === -1) {
|
|
227
|
+
i += 3;
|
|
228
|
+
continue;
|
|
229
|
+
}
|
|
230
|
+
i = close + 3;
|
|
231
|
+
continue;
|
|
232
|
+
}
|
|
233
|
+
if (body[i] === '`' && body[i + 1] === '!' && (i === 0 || body[i - 1] !== '\\')) {
|
|
234
|
+
const close = body.indexOf('`', i + 2);
|
|
235
|
+
if (close === -1 || body.slice(i + 2, close).includes('\n')) {
|
|
236
|
+
i += 1;
|
|
237
|
+
continue;
|
|
238
|
+
}
|
|
239
|
+
const command = body.slice(i + 2, close).trim();
|
|
240
|
+
if (command.length === 0) {
|
|
241
|
+
i = close + 1;
|
|
242
|
+
continue;
|
|
243
|
+
}
|
|
244
|
+
out.push({
|
|
245
|
+
raw: body.slice(i, close + 1),
|
|
246
|
+
command,
|
|
247
|
+
start: i,
|
|
248
|
+
end: close + 1,
|
|
249
|
+
});
|
|
250
|
+
i = close + 1;
|
|
251
|
+
continue;
|
|
252
|
+
}
|
|
253
|
+
i += 1;
|
|
254
|
+
}
|
|
255
|
+
return out;
|
|
256
|
+
}
|
|
257
|
+
function findFenceClose(body, from) {
|
|
258
|
+
let pos = from;
|
|
259
|
+
while (pos < body.length) {
|
|
260
|
+
const newline = body.indexOf('\n', pos);
|
|
261
|
+
if (newline === -1)
|
|
262
|
+
return -1;
|
|
263
|
+
pos = newline + 1;
|
|
264
|
+
if (body.startsWith('```', pos)) {
|
|
265
|
+
let tail = pos + 3;
|
|
266
|
+
while (tail < body.length && (body[tail] === ' ' || body[tail] === '\t'))
|
|
267
|
+
tail += 1;
|
|
268
|
+
if (tail === body.length || body[tail] === '\n')
|
|
269
|
+
return pos;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
return -1;
|
|
273
|
+
}
|
|
274
|
+
// ---------------------------------------------------------------------------
|
|
275
|
+
// Substitution
|
|
276
|
+
// ---------------------------------------------------------------------------
|
|
277
|
+
/**
|
|
278
|
+
* Replace `${QODO_SKILL_DIR}` (and any future `${QODO_*}` vars) in the
|
|
279
|
+
* body. The substitution is global — every occurrence is replaced.
|
|
280
|
+
*
|
|
281
|
+
* Only `QODO_SKILL_DIR` is supported in this wave; unknown `${QODO_*}`
|
|
282
|
+
* references pass through literal so a typo doesn't disappear silently.
|
|
283
|
+
*/
|
|
284
|
+
export function substituteQodoVars(body, skill) {
|
|
285
|
+
return body.replace(/\$\{QODO_([A-Z_]+)\}/g, (match, name) => {
|
|
286
|
+
if (name === 'SKILL_DIR')
|
|
287
|
+
return skill.path;
|
|
288
|
+
return match;
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
// ---------------------------------------------------------------------------
|
|
292
|
+
// Allowlist
|
|
293
|
+
// ---------------------------------------------------------------------------
|
|
294
|
+
/**
|
|
295
|
+
* Extract the first shell-tokenised argv from a command line. Matches
|
|
296
|
+
* `cmd args` and `cmd "with spaces"`; returns the bare command name
|
|
297
|
+
* with no quotes. `null` if the line is empty after tokenisation.
|
|
298
|
+
*
|
|
299
|
+
* Deliberately incomplete — we only need to know the first command
|
|
300
|
+
* name for allowlist gating. Pipes, env assignment, here-docs, and
|
|
301
|
+
* other shell features fall through to the shell itself (`bash -c`).
|
|
302
|
+
*
|
|
303
|
+
* `FOO=bar cmd` is peeled — env-assign prefixes don't change the
|
|
304
|
+
* command identity for allowlist purposes, and an attacker shouldn't
|
|
305
|
+
* be able to dodge an allowlist that whitelists `cmd` by prepending
|
|
306
|
+
* `PATH=/evil cmd`.
|
|
307
|
+
*/
|
|
308
|
+
export function parseFirstToken(line) {
|
|
309
|
+
let i = 0;
|
|
310
|
+
while (i < line.length && (line[i] === ' ' || line[i] === '\t'))
|
|
311
|
+
i += 1;
|
|
312
|
+
while (true) {
|
|
313
|
+
const assignMatch = /^([A-Za-z_][A-Za-z0-9_]*)=([^\s'"`]*|'[^']*'|"[^"]*")\s+/.exec(line.slice(i));
|
|
314
|
+
if (assignMatch === null)
|
|
315
|
+
break;
|
|
316
|
+
i += assignMatch[0].length;
|
|
317
|
+
}
|
|
318
|
+
if (i >= line.length)
|
|
319
|
+
return null;
|
|
320
|
+
const ch = line[i];
|
|
321
|
+
if (ch === '"' || ch === "'") {
|
|
322
|
+
const close = line.indexOf(ch, i + 1);
|
|
323
|
+
if (close === -1)
|
|
324
|
+
return null;
|
|
325
|
+
return line.slice(i + 1, close);
|
|
326
|
+
}
|
|
327
|
+
let j = i;
|
|
328
|
+
while (j < line.length && !/[\s|;&<>(){}]/.test(line[j]))
|
|
329
|
+
j += 1;
|
|
330
|
+
if (j === i)
|
|
331
|
+
return null;
|
|
332
|
+
return line.slice(i, j);
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Check whether `cmd` matches one of the allowlist entries. Match is
|
|
336
|
+
* left-anchored:
|
|
337
|
+
*
|
|
338
|
+
* - Bare names (`git`) match the basename of `cmd` (so `git` matches
|
|
339
|
+
* both `git` and `/usr/bin/git`).
|
|
340
|
+
* - Path-bearing entries (`/usr/bin/jq`, `./bin/foo`) must match
|
|
341
|
+
* verbatim.
|
|
342
|
+
*/
|
|
343
|
+
export function isAllowlisted(cmd, allow) {
|
|
344
|
+
if (allow.length === 0)
|
|
345
|
+
return false;
|
|
346
|
+
const cmdBase = path.basename(cmd);
|
|
347
|
+
for (const entry of allow) {
|
|
348
|
+
if (entry.length === 0)
|
|
349
|
+
continue;
|
|
350
|
+
if (entry === cmd)
|
|
351
|
+
return true;
|
|
352
|
+
if (!entry.includes('/') && !entry.includes('\\') && entry === cmdBase)
|
|
353
|
+
return true;
|
|
354
|
+
}
|
|
355
|
+
return false;
|
|
356
|
+
}
|
|
357
|
+
function powershellAllowed(env) {
|
|
358
|
+
const flag = env[POWERSHELL_GATE_ENV_VAR];
|
|
359
|
+
if (flag === undefined)
|
|
360
|
+
return false;
|
|
361
|
+
return flag === '1' || flag.toLowerCase() === 'true' || flag.toLowerCase() === 'yes';
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* Run a single `!command` line. The command is passed verbatim to the
|
|
365
|
+
* consumer's shell (`/bin/bash -c '<cmd>'` on Unix, PowerShell when the
|
|
366
|
+
* env-var gate is on). Output (stdout + stderr) is buffered up to
|
|
367
|
+
* `maxOutputBytes` and the process is hard-killed after `timeoutMs`.
|
|
368
|
+
*
|
|
369
|
+
* Output framing:
|
|
370
|
+
*
|
|
371
|
+
* - Successful exit: stdout, trimmed of trailing newline.
|
|
372
|
+
* - Non-zero exit: `[error: <stderr or "exit N">]`. The skill loads
|
|
373
|
+
* anyway — preprocessing failures are not fatal to the skill body.
|
|
374
|
+
* - Timeout: `[error: timeout after Xms]`.
|
|
375
|
+
* - Truncation: appended `[truncated at <bytes>]` marker.
|
|
376
|
+
*/
|
|
377
|
+
async function runCommand(ctx, config, command) {
|
|
378
|
+
const timeoutMs = config?.timeoutMs ?? PREPROCESS_DEFAULT_TIMEOUT_MS;
|
|
379
|
+
const maxOutputBytes = config?.maxOutputBytes ?? PREPROCESS_DEFAULT_MAX_OUTPUT_BYTES;
|
|
380
|
+
const cwd = config?.cwd ?? ctx.skill.path;
|
|
381
|
+
const useShell = ctx.skill.frontmatter.shell === 'powershell' ? 'powershell' : 'bash';
|
|
382
|
+
const now = ctx.now ?? Date.now;
|
|
383
|
+
const start = now();
|
|
384
|
+
return new Promise((resolve) => {
|
|
385
|
+
let bytes = 0;
|
|
386
|
+
let truncated = false;
|
|
387
|
+
const stdoutChunks = [];
|
|
388
|
+
const stderrChunks = [];
|
|
389
|
+
let timedOut = false;
|
|
390
|
+
const args = useShell === 'powershell'
|
|
391
|
+
? ['-NoProfile', '-NonInteractive', '-Command', command]
|
|
392
|
+
: ['-c', command];
|
|
393
|
+
const cmdPath = useShell === 'powershell' ? resolvePowershellPath(ctx.env) : resolveBashPath(ctx.env);
|
|
394
|
+
const child = spawn(cmdPath, args, {
|
|
395
|
+
cwd,
|
|
396
|
+
env: {
|
|
397
|
+
...ctx.env,
|
|
398
|
+
QODO_SKILL_DIR: ctx.skill.path,
|
|
399
|
+
},
|
|
400
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
401
|
+
});
|
|
402
|
+
const onData = (chunks, chunk) => {
|
|
403
|
+
if (truncated)
|
|
404
|
+
return;
|
|
405
|
+
const remaining = maxOutputBytes - bytes;
|
|
406
|
+
if (remaining <= 0) {
|
|
407
|
+
truncated = true;
|
|
408
|
+
child.kill('SIGKILL');
|
|
409
|
+
return;
|
|
410
|
+
}
|
|
411
|
+
if (chunk.length > remaining) {
|
|
412
|
+
chunks.push(chunk.subarray(0, remaining));
|
|
413
|
+
bytes += remaining;
|
|
414
|
+
truncated = true;
|
|
415
|
+
child.kill('SIGKILL');
|
|
416
|
+
return;
|
|
417
|
+
}
|
|
418
|
+
chunks.push(chunk);
|
|
419
|
+
bytes += chunk.length;
|
|
420
|
+
};
|
|
421
|
+
child.stdout.on('data', (chunk) => onData(stdoutChunks, chunk));
|
|
422
|
+
child.stderr.on('data', (chunk) => onData(stderrChunks, chunk));
|
|
423
|
+
const killTimer = setTimeout(() => {
|
|
424
|
+
timedOut = true;
|
|
425
|
+
child.kill('SIGKILL');
|
|
426
|
+
}, timeoutMs);
|
|
427
|
+
child.on('error', (err) => {
|
|
428
|
+
clearTimeout(killTimer);
|
|
429
|
+
resolve({
|
|
430
|
+
output: `[error: ${err.message}]`,
|
|
431
|
+
outputBytes: 0,
|
|
432
|
+
exitCode: null,
|
|
433
|
+
truncated: false,
|
|
434
|
+
timedOut: false,
|
|
435
|
+
durationMs: now() - start,
|
|
436
|
+
});
|
|
437
|
+
});
|
|
438
|
+
child.on('close', (code, signal) => {
|
|
439
|
+
clearTimeout(killTimer);
|
|
440
|
+
const stdout = Buffer.concat(stdoutChunks).toString('utf-8');
|
|
441
|
+
const stderr = Buffer.concat(stderrChunks).toString('utf-8');
|
|
442
|
+
const durationMs = now() - start;
|
|
443
|
+
if (timedOut) {
|
|
444
|
+
resolve({
|
|
445
|
+
output: `[error: timeout after ${timeoutMs}ms]`,
|
|
446
|
+
outputBytes: 0,
|
|
447
|
+
exitCode: null,
|
|
448
|
+
truncated: false,
|
|
449
|
+
timedOut: true,
|
|
450
|
+
durationMs,
|
|
451
|
+
});
|
|
452
|
+
return;
|
|
453
|
+
}
|
|
454
|
+
// When output exceeds `maxOutputBytes` we
|
|
455
|
+
// SIGKILL the child, which surfaces here as `signal !== null`
|
|
456
|
+
// even though there's useful buffered output. Treat the
|
|
457
|
+
// truncation kill as success-with-truncation rather than as a
|
|
458
|
+
// killed-by-signal error so the operator still gets the partial
|
|
459
|
+
// stdout. Errors from the regular non-zero-exit path are
|
|
460
|
+
// unchanged.
|
|
461
|
+
let output;
|
|
462
|
+
if (truncated) {
|
|
463
|
+
output = stripTrailingNewline(stdout);
|
|
464
|
+
output += `\n[truncated at ${bytes} bytes]`;
|
|
465
|
+
}
|
|
466
|
+
else if (code !== null && code !== 0) {
|
|
467
|
+
const reason = stderr.trim().length > 0 ? stderr.trim() : `exit ${code}`;
|
|
468
|
+
output = `[error: ${reason}]`;
|
|
469
|
+
}
|
|
470
|
+
else if (signal !== null) {
|
|
471
|
+
output = `[error: killed by ${signal}]`;
|
|
472
|
+
}
|
|
473
|
+
else {
|
|
474
|
+
output = stripTrailingNewline(stdout);
|
|
475
|
+
}
|
|
476
|
+
resolve({
|
|
477
|
+
output,
|
|
478
|
+
outputBytes: bytes,
|
|
479
|
+
exitCode: code,
|
|
480
|
+
truncated,
|
|
481
|
+
timedOut: false,
|
|
482
|
+
durationMs,
|
|
483
|
+
});
|
|
484
|
+
});
|
|
485
|
+
});
|
|
486
|
+
}
|
|
487
|
+
function resolvePowershellPath(env) {
|
|
488
|
+
const override = env['QODO_SKILLS_POWERSHELL_PATH'];
|
|
489
|
+
if (override !== undefined && override.length > 0)
|
|
490
|
+
return override;
|
|
491
|
+
if (os.platform() === 'win32')
|
|
492
|
+
return 'powershell.exe';
|
|
493
|
+
return 'pwsh';
|
|
494
|
+
}
|
|
495
|
+
/**
|
|
496
|
+
* Resolve the bash executable to invoke. A hardcoded `/bin/bash` would
|
|
497
|
+
* fail on Windows-host operators and on Nix / NixOS systems where bash
|
|
498
|
+
* lives under `/run/current-system/sw/bin/` instead of `/bin/`. Resolution
|
|
499
|
+
* order:
|
|
500
|
+
*
|
|
501
|
+
* 1. `QODO_SKILLS_BASH_PATH` env override — explicit operator
|
|
502
|
+
* control, takes precedence over everything.
|
|
503
|
+
* 2. `SHELL` env when it's a bash variant — covers the common Unix
|
|
504
|
+
* case where the operator's preferred shell is already on PATH.
|
|
505
|
+
* 3. `bash` (rely on PATH lookup) — works on macOS, most Linux
|
|
506
|
+
* distros, and Windows when bash is on PATH (e.g. Git Bash).
|
|
507
|
+
*/
|
|
508
|
+
function resolveBashPath(env) {
|
|
509
|
+
const override = env['QODO_SKILLS_BASH_PATH'];
|
|
510
|
+
if (override !== undefined && override.length > 0)
|
|
511
|
+
return override;
|
|
512
|
+
const shell = env['SHELL'];
|
|
513
|
+
if (shell !== undefined && shell.length > 0 && /\bbash$/.test(shell))
|
|
514
|
+
return shell;
|
|
515
|
+
return 'bash';
|
|
516
|
+
}
|
|
517
|
+
function stripTrailingNewline(s) {
|
|
518
|
+
if (s.endsWith('\n'))
|
|
519
|
+
return s.slice(0, -1);
|
|
520
|
+
return s;
|
|
521
|
+
}
|
|
522
|
+
function applyReplacements(body, replacements) {
|
|
523
|
+
if (replacements.length === 0)
|
|
524
|
+
return body;
|
|
525
|
+
let out = '';
|
|
526
|
+
let cursor = 0;
|
|
527
|
+
for (const r of replacements) {
|
|
528
|
+
out += body.slice(cursor, r.block.start);
|
|
529
|
+
out += r.output;
|
|
530
|
+
cursor = r.block.end;
|
|
531
|
+
}
|
|
532
|
+
out += body.slice(cursor);
|
|
533
|
+
return out;
|
|
534
|
+
}
|
|
535
|
+
//# sourceMappingURL=preprocess.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preprocess.js","sourceRoot":"","sources":["../../src/skills/preprocess.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slim-index renderer.
|
|
3
|
+
*
|
|
4
|
+
* Renders the `<available_skills>` block injected into the SDK's wire
|
|
5
|
+
* `instructions` field. The renderer is pure: input = catalog +
|
|
6
|
+
* options, output = `{ text, included, truncated, telemetry }`.
|
|
7
|
+
*
|
|
8
|
+
* Per `skills.md` §5 and `skills-activation.md` §3:
|
|
9
|
+
*
|
|
10
|
+
* - Per-entry combined `description + when_to_use` capped at 1,536 chars.
|
|
11
|
+
* - Total block capped at `min(8000, ceil(0.01 * contextWindow))`,
|
|
12
|
+
* configurable via `SkillsConfig.indexCharBudget`.
|
|
13
|
+
* - When the catalog fits: include every latest-version skill that is
|
|
14
|
+
* not `disable-model-invocation: true` and matches the optional
|
|
15
|
+
* `paths:` filter context.
|
|
16
|
+
* - When the catalog exceeds budget AND no embedder is configured:
|
|
17
|
+
* truncate by `mtime` descending, then alphabetical; emit
|
|
18
|
+
* `sdk.skill.index_truncated`.
|
|
19
|
+
* - Caller-pinned skills are always included. If a pinned skill's
|
|
20
|
+
* entry doesn't fit, the budget is exceeded — emit
|
|
21
|
+
* `sdk.skill.index_overflow_pinned` and proceed.
|
|
22
|
+
* - `disable-model-invocation: true` skills are **filtered out** of
|
|
23
|
+
* the model-visible slim index unless caller-pinned. Pinning is the
|
|
24
|
+
* explicit human-in-the-loop waiver (`skills-activation.md` §2.85).
|
|
25
|
+
* Pinned user-only skills are still rendered with the `[loaded]`
|
|
26
|
+
* marker.
|
|
27
|
+
* - Caller-pinned + already-loaded entries marked `[loaded]`.
|
|
28
|
+
*/
|
|
29
|
+
import type { ParsedSkill, SkillEvent } from './types.js';
|
|
30
|
+
/**
|
|
31
|
+
* Per-call rendering options. Each field has a sensible default — the
|
|
32
|
+
* minimum input is `{ skills }`.
|
|
33
|
+
*/
|
|
34
|
+
export interface RenderOptions {
|
|
35
|
+
/** Total block char budget. Defaults to `DEFAULT_INDEX_CHAR_BUDGET` (8000). */
|
|
36
|
+
readonly charBudget?: number;
|
|
37
|
+
/**
|
|
38
|
+
* Caller-pinned skills (FQNs or bare names). The renderer includes
|
|
39
|
+
* these unconditionally and decorates them with the `[loaded]` marker
|
|
40
|
+
* since pinning means the body is already in conversation.
|
|
41
|
+
*/
|
|
42
|
+
readonly pinned?: readonly string[];
|
|
43
|
+
/**
|
|
44
|
+
* "Current file" context for `paths:` filtering. Consumers without a
|
|
45
|
+
* current-file concept omit this; the renderer treats `paths:` as a
|
|
46
|
+
* no-op for those skills.
|
|
47
|
+
*/
|
|
48
|
+
readonly currentFilePath?: string;
|
|
49
|
+
/**
|
|
50
|
+
* Whether the renderer is rendering in `paths`-aware mode. Defaults to
|
|
51
|
+
* `true` iff `currentFilePath` is set; consumers can force-disable
|
|
52
|
+
* by passing `false` so a skill carrying `paths:` is always shown
|
|
53
|
+
* regardless of context (useful for Slack-bot-style consumers).
|
|
54
|
+
*/
|
|
55
|
+
readonly enablePathsFilter?: boolean;
|
|
56
|
+
}
|
|
57
|
+
export interface RenderResult {
|
|
58
|
+
/** The rendered `<available_skills>...</available_skills>` block. Empty string when no skills land. */
|
|
59
|
+
readonly text: string;
|
|
60
|
+
/** Skills that made it into the rendered block, in render order. */
|
|
61
|
+
readonly included: readonly ParsedSkill[];
|
|
62
|
+
/** `true` iff one or more skills were dropped by budget pressure. */
|
|
63
|
+
readonly truncated: boolean;
|
|
64
|
+
/** Total char count of `text`. */
|
|
65
|
+
readonly charsUsed: number;
|
|
66
|
+
/** Telemetry events the renderer would emit. Caller dispatches to the configured sink. */
|
|
67
|
+
readonly events: readonly SkillEvent[];
|
|
68
|
+
/**
|
|
69
|
+
* Pinned skills that were dropped because rendering them would have
|
|
70
|
+
* pushed the block past the renderer's hard cap (F5 — `2 ×
|
|
71
|
+
* charBudget`, floored at `charBudget + 4096`). Empty in the common
|
|
72
|
+
* case. `TaskClient` throws `SkillsBudgetExceededError` when this is
|
|
73
|
+
* non-empty so a buggy caller-pin list surfaces as a loud failure
|
|
74
|
+
* instead of a silently truncated wire payload.
|
|
75
|
+
*/
|
|
76
|
+
readonly omittedPinned: readonly ParsedSkill[];
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Render the slim index. Pure function — no IO, no state mutation; the
|
|
80
|
+
* caller routes the returned `events` to the configured telemetry sink.
|
|
81
|
+
*/
|
|
82
|
+
export declare function renderSlimIndex(skills: readonly ParsedSkill[], opts?: RenderOptions): RenderResult;
|
|
83
|
+
//# sourceMappingURL=render.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/skills/render.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG1D;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,+EAA+E;IAC/E,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC;;;;OAIG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC;;;;;OAKG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CACtC;AAED,MAAM,WAAW,YAAY;IAC3B,uGAAuG;IACvG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,oEAAoE;IACpE,QAAQ,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,CAAC;IAC1C,qEAAqE;IACrE,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,kCAAkC;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,0FAA0F;IAC1F,QAAQ,CAAC,MAAM,EAAE,SAAS,UAAU,EAAE,CAAC;IACvC;;;;;;;OAOG;IACH,QAAQ,CAAC,aAAa,EAAE,SAAS,WAAW,EAAE,CAAC;CAChD;AAsBD;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,SAAS,WAAW,EAAE,EAC9B,IAAI,GAAE,aAAkB,GACvB,YAAY,CAmJd"}
|