@qodo/sdk 0.13.4 → 2.0.0-next.1
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 +1139 -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 +893 -0
- package/dist/client/connection.d.ts.map +1 -0
- package/dist/client/connection.js +2189 -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 -105
- package/dist/api/agent.d.ts.map +0 -1
- package/dist/api/agent.js +0 -963
- 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,471 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-source-type discovery walkers.
|
|
3
|
+
*
|
|
4
|
+
* Each walker takes a `SkillSource` config entry and resolves the list of
|
|
5
|
+
* skill directories that source contributes. The manager then parses +
|
|
6
|
+
* validates each directory and assembles the catalog with shadowing
|
|
7
|
+
* and FQN namespacing.
|
|
8
|
+
*
|
|
9
|
+
* Walkers do NOT parse `SKILL.md` content — they only locate directories.
|
|
10
|
+
* Per-source error handling is best-effort: a missing source resolves to
|
|
11
|
+
* an empty list with no error; an unreadable source surfaces an
|
|
12
|
+
* `sdk.skill.error` event with `severity: 'error'` so the manager can
|
|
13
|
+
* include it in telemetry without poisoning other sources' contributions.
|
|
14
|
+
*/
|
|
15
|
+
import { promises as fs } from 'node:fs';
|
|
16
|
+
import * as os from 'node:os';
|
|
17
|
+
import * as path from 'node:path';
|
|
18
|
+
import { findSkillDirectories, findSkillDirectoriesWithLegacyPluginLayout, safeRealPath, walkAncestors, } from './walk.js';
|
|
19
|
+
export function defaultWalkerEnv() {
|
|
20
|
+
return {
|
|
21
|
+
cwd: process.cwd(),
|
|
22
|
+
homedir: os.homedir(),
|
|
23
|
+
env: process.env,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Dispatch by source `type`. Unknown types are rejected; the caller is
|
|
28
|
+
* expected to validate `SkillsConfig.sources` at construction time.
|
|
29
|
+
*/
|
|
30
|
+
export async function walkSource(source, env) {
|
|
31
|
+
switch (source.type) {
|
|
32
|
+
case 'project':
|
|
33
|
+
return walkProject(source, env);
|
|
34
|
+
case 'config':
|
|
35
|
+
return walkConfig(source, env);
|
|
36
|
+
case 'user':
|
|
37
|
+
return walkUser(source, env);
|
|
38
|
+
case 'package':
|
|
39
|
+
return walkPackage(source, env);
|
|
40
|
+
case 'cli-fetched':
|
|
41
|
+
return walkCliFetched(source, env);
|
|
42
|
+
case 'bundled':
|
|
43
|
+
return walkBundled(source, env);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// ---------------------------------------------------------------------------
|
|
47
|
+
// project — walks CWD upward for `.qodo/skills/` directories
|
|
48
|
+
// ---------------------------------------------------------------------------
|
|
49
|
+
async function walkProject(source, env) {
|
|
50
|
+
const errors = [];
|
|
51
|
+
// Explicit `path` short-circuits the ancestor walk.
|
|
52
|
+
if (source.path !== undefined) {
|
|
53
|
+
const resolved = await safeRealPath(path.resolve(env.cwd, source.path));
|
|
54
|
+
if (resolved === null) {
|
|
55
|
+
return { source, skills: [], errors };
|
|
56
|
+
}
|
|
57
|
+
try {
|
|
58
|
+
const skills = await findSkillDirectories(resolved);
|
|
59
|
+
return { source, skills, errors };
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
errors.push({ path: resolved, message: errorMessage(err) });
|
|
63
|
+
return { source, skills: [], errors };
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// Default: walk ancestors for `.qodo/skills/`.
|
|
67
|
+
const ancestors = await walkAncestors(env.cwd, path.join('.qodo', 'skills'));
|
|
68
|
+
// Inclusive: every ancestor's `.qodo/skills` contributes; closer ones win
|
|
69
|
+
// ties at the manager's shadowing step (the manager processes the list
|
|
70
|
+
// in array order so the first entry has precedence).
|
|
71
|
+
const all = [];
|
|
72
|
+
for (const ancestor of ancestors) {
|
|
73
|
+
try {
|
|
74
|
+
const skills = await findSkillDirectories(ancestor);
|
|
75
|
+
all.push(...skills);
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
errors.push({ path: ancestor, message: errorMessage(err) });
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return { source, skills: all, errors };
|
|
82
|
+
}
|
|
83
|
+
// ---------------------------------------------------------------------------
|
|
84
|
+
// config — single explicit path (no glob expansion in this surface)
|
|
85
|
+
// ---------------------------------------------------------------------------
|
|
86
|
+
async function walkConfig(source, env) {
|
|
87
|
+
const errors = [];
|
|
88
|
+
const resolved = await safeRealPath(path.resolve(env.cwd, source.path));
|
|
89
|
+
if (resolved === null) {
|
|
90
|
+
// Per skills-edge-cases.md §1.1 — empty source is silent, not an error.
|
|
91
|
+
return { source, skills: [], errors };
|
|
92
|
+
}
|
|
93
|
+
try {
|
|
94
|
+
const skills = await findSkillDirectoriesWithLegacyPluginLayout(resolved);
|
|
95
|
+
return { source, skills, errors };
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
98
|
+
errors.push({ path: resolved, message: errorMessage(err) });
|
|
99
|
+
return { source, skills: [], errors };
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// ---------------------------------------------------------------------------
|
|
103
|
+
// user — `~/.qodo/skills/` (or `$XDG_CONFIG_HOME/qodo/skills/`)
|
|
104
|
+
// ---------------------------------------------------------------------------
|
|
105
|
+
async function walkUser(source, env) {
|
|
106
|
+
const errors = [];
|
|
107
|
+
let basePath;
|
|
108
|
+
if (source.path !== undefined) {
|
|
109
|
+
basePath = path.isAbsolute(source.path)
|
|
110
|
+
? source.path
|
|
111
|
+
: path.resolve(env.cwd, source.path);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
const xdg = env.env['XDG_CONFIG_HOME'];
|
|
115
|
+
if (xdg !== undefined && xdg.length > 0) {
|
|
116
|
+
basePath = path.join(xdg, 'qodo', 'skills');
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
basePath = path.join(env.homedir, '.qodo', 'skills');
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
const resolved = await safeRealPath(basePath);
|
|
123
|
+
if (resolved === null) {
|
|
124
|
+
return { source, skills: [], errors };
|
|
125
|
+
}
|
|
126
|
+
try {
|
|
127
|
+
const skills = await findSkillDirectories(resolved);
|
|
128
|
+
return { source, skills, errors };
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
errors.push({ path: resolved, message: errorMessage(err) });
|
|
132
|
+
return { source, skills: [], errors };
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
// ---------------------------------------------------------------------------
|
|
136
|
+
// package — npm package declaring `qodoSkills` in `package.json`
|
|
137
|
+
// ---------------------------------------------------------------------------
|
|
138
|
+
async function walkPackage(source, env) {
|
|
139
|
+
const errors = [];
|
|
140
|
+
// F6: validate `packageName` before any `path.join`. A value containing
|
|
141
|
+
// path separators, `..`, `.`, drive prefixes, or empty segments can
|
|
142
|
+
// make the resolved package root land outside `node_modules` —
|
|
143
|
+
// adjacent to the (already-fixed) qodoSkills containment escape.
|
|
144
|
+
if (!isValidPackageName(source.packageName)) {
|
|
145
|
+
errors.push({
|
|
146
|
+
message: `package source "${source.packageName}" is not a valid npm package name`,
|
|
147
|
+
});
|
|
148
|
+
return { source, skills: [], errors, resolvedVendor: source.packageName };
|
|
149
|
+
}
|
|
150
|
+
// Walk upward looking for `node_modules/<packageName>/` so monorepos and
|
|
151
|
+
// hoisted installs both work.
|
|
152
|
+
const candidateRoots = nodeModulesCandidateRoots(env.cwd);
|
|
153
|
+
let pkgRoot = null;
|
|
154
|
+
for (const root of candidateRoots) {
|
|
155
|
+
const candidate = path.join(root, source.packageName);
|
|
156
|
+
const real = await safeRealPath(candidate);
|
|
157
|
+
if (real !== null) {
|
|
158
|
+
pkgRoot = real;
|
|
159
|
+
break;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
if (pkgRoot === null) {
|
|
163
|
+
return { source, skills: [], errors, resolvedVendor: source.packageName };
|
|
164
|
+
}
|
|
165
|
+
let pkgJson = {};
|
|
166
|
+
try {
|
|
167
|
+
const raw = await fs.readFile(path.join(pkgRoot, 'package.json'), 'utf-8');
|
|
168
|
+
pkgJson = JSON.parse(raw);
|
|
169
|
+
}
|
|
170
|
+
catch (err) {
|
|
171
|
+
errors.push({ path: pkgRoot, message: `package.json unreadable: ${errorMessage(err)}` });
|
|
172
|
+
return { source, skills: [], errors, resolvedVendor: source.packageName };
|
|
173
|
+
}
|
|
174
|
+
const skillsField = pkgJson.qodoSkills;
|
|
175
|
+
const skillsPaths = [];
|
|
176
|
+
if (source.path !== undefined) {
|
|
177
|
+
skillsPaths.push(source.path);
|
|
178
|
+
}
|
|
179
|
+
else if (typeof skillsField === 'string') {
|
|
180
|
+
skillsPaths.push(skillsField);
|
|
181
|
+
}
|
|
182
|
+
else if (Array.isArray(skillsField)) {
|
|
183
|
+
for (const entry of skillsField) {
|
|
184
|
+
if (typeof entry === 'string')
|
|
185
|
+
skillsPaths.push(entry);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
// Resolve the canonical package root once so the containment check
|
|
189
|
+
// below has a stable anchor — `pkgRoot` was already canonicalised
|
|
190
|
+
// upstream via `safeRealPath`, but recompute to be defensive
|
|
191
|
+
// against symlinked node_modules trees.
|
|
192
|
+
const pkgRootReal = await safeRealPath(pkgRoot);
|
|
193
|
+
if (pkgRootReal === null) {
|
|
194
|
+
return { source, skills: [], errors, resolvedVendor: source.packageName };
|
|
195
|
+
}
|
|
196
|
+
const all = [];
|
|
197
|
+
for (const relative of skillsPaths) {
|
|
198
|
+
const root = path.resolve(pkgRoot, relative);
|
|
199
|
+
const real = await safeRealPath(root);
|
|
200
|
+
if (real === null)
|
|
201
|
+
continue;
|
|
202
|
+
// Containment: the resolved canonical directory must stay within
|
|
203
|
+
// the package root. A malicious or buggy package can set
|
|
204
|
+
// `qodoSkills: "../../.."` to redirect discovery.
|
|
205
|
+
const rel = path.relative(pkgRootReal, real);
|
|
206
|
+
if (rel.startsWith('..') || path.isAbsolute(rel)) {
|
|
207
|
+
errors.push({
|
|
208
|
+
path: real,
|
|
209
|
+
message: `package "${source.packageName}" qodoSkills entry "${relative}" escapes the package root`,
|
|
210
|
+
});
|
|
211
|
+
continue;
|
|
212
|
+
}
|
|
213
|
+
try {
|
|
214
|
+
const skills = await findSkillDirectoriesWithLegacyPluginLayout(real);
|
|
215
|
+
all.push(...skills);
|
|
216
|
+
}
|
|
217
|
+
catch (err) {
|
|
218
|
+
errors.push({ path: real, message: errorMessage(err) });
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return { source, skills: all, errors, resolvedVendor: source.packageName };
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Validate an npm package name before it gets `path.join`-ed onto a
|
|
225
|
+
* `node_modules` root. This is *not* the canonical npm name regex
|
|
226
|
+
* (that allows things we don't need), it's an allowlist of:
|
|
227
|
+
*
|
|
228
|
+
* - unscoped: `name` — one-to-many of `[a-z0-9._-]`, must start with
|
|
229
|
+
* `[a-z0-9_]` (npm allows leading `-` but it's rarely used and
|
|
230
|
+
* creates argv parsing ambiguity; reject for our purposes).
|
|
231
|
+
* - scoped: `@scope/name` where both segments match the unscoped rule.
|
|
232
|
+
*
|
|
233
|
+
* Rejects: empty input, leading `.`, path separators (`/` outside the
|
|
234
|
+
* exactly-one scoped separator, any `\\`), `..`, absolute paths, drive
|
|
235
|
+
* prefixes (`C:`), and any character outside the allowlist.
|
|
236
|
+
*/
|
|
237
|
+
export function isValidPackageName(name) {
|
|
238
|
+
if (typeof name !== 'string' || name.length === 0 || name.length > 214) {
|
|
239
|
+
return false;
|
|
240
|
+
}
|
|
241
|
+
// Reject windows-style drive prefixes and any backslash.
|
|
242
|
+
if (name.includes('\\'))
|
|
243
|
+
return false;
|
|
244
|
+
// Reject absolute paths outright.
|
|
245
|
+
if (path.isAbsolute(name))
|
|
246
|
+
return false;
|
|
247
|
+
const segmentPattern = /^[a-z0-9_][a-z0-9._-]*$/;
|
|
248
|
+
if (name.startsWith('@')) {
|
|
249
|
+
const slash = name.indexOf('/');
|
|
250
|
+
if (slash < 0)
|
|
251
|
+
return false;
|
|
252
|
+
const scope = name.slice(1, slash);
|
|
253
|
+
const rest = name.slice(slash + 1);
|
|
254
|
+
if (!segmentPattern.test(scope))
|
|
255
|
+
return false;
|
|
256
|
+
// The "rest" must contain no further `/` and pass the segment check.
|
|
257
|
+
if (rest.includes('/'))
|
|
258
|
+
return false;
|
|
259
|
+
return segmentPattern.test(rest);
|
|
260
|
+
}
|
|
261
|
+
// Unscoped — must match the segment pattern exactly and contain no `/`.
|
|
262
|
+
if (name.includes('/'))
|
|
263
|
+
return false;
|
|
264
|
+
return segmentPattern.test(name);
|
|
265
|
+
}
|
|
266
|
+
/** All `node_modules/` ancestors above `cwd`, near-first. */
|
|
267
|
+
function nodeModulesCandidateRoots(cwd) {
|
|
268
|
+
const out = [];
|
|
269
|
+
let current = path.resolve(cwd);
|
|
270
|
+
const root = path.parse(current).root;
|
|
271
|
+
for (let i = 0; i < 64; i += 1) {
|
|
272
|
+
out.push(path.join(current, 'node_modules'));
|
|
273
|
+
if (current === root)
|
|
274
|
+
break;
|
|
275
|
+
const next = path.dirname(current);
|
|
276
|
+
if (next === current)
|
|
277
|
+
break;
|
|
278
|
+
current = next;
|
|
279
|
+
}
|
|
280
|
+
return out;
|
|
281
|
+
}
|
|
282
|
+
// ---------------------------------------------------------------------------
|
|
283
|
+
// cli-fetched — `~/.qodo/installed-skills/<vendor>/<name>/` (or all of them)
|
|
284
|
+
// ---------------------------------------------------------------------------
|
|
285
|
+
async function walkCliFetched(source, env) {
|
|
286
|
+
const errors = [];
|
|
287
|
+
const baseDir = path.join(env.homedir, '.qodo', 'installed-skills');
|
|
288
|
+
if (source.ref !== undefined) {
|
|
289
|
+
const segments = source.ref.split('/');
|
|
290
|
+
// Reject `..`, `.`, empty, and separator-bearing segments so a
|
|
291
|
+
// malicious or buggy consumer config can't redirect discovery
|
|
292
|
+
// outside `installed-skills`.
|
|
293
|
+
for (const segment of segments) {
|
|
294
|
+
if (segment.length === 0 ||
|
|
295
|
+
segment === '.' ||
|
|
296
|
+
segment === '..' ||
|
|
297
|
+
segment.includes('\\') ||
|
|
298
|
+
path.isAbsolute(segment)) {
|
|
299
|
+
errors.push({
|
|
300
|
+
message: `cli-fetched ref "${source.ref}" contains an invalid segment ${JSON.stringify(segment)}`,
|
|
301
|
+
});
|
|
302
|
+
return { source, skills: [], errors };
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
const refPath = path.join(baseDir, ...segments);
|
|
306
|
+
const real = await safeRealPath(refPath);
|
|
307
|
+
if (real === null)
|
|
308
|
+
return { source, skills: [], errors };
|
|
309
|
+
// Containment: re-canonicalise the base and verify the resolved
|
|
310
|
+
// ref path stays within it. Catches symlink redirection that
|
|
311
|
+
// segment validation alone would miss.
|
|
312
|
+
const baseReal = await safeRealPath(baseDir);
|
|
313
|
+
if (baseReal !== null) {
|
|
314
|
+
const rel = path.relative(baseReal, real);
|
|
315
|
+
if (rel.startsWith('..') || path.isAbsolute(rel)) {
|
|
316
|
+
errors.push({
|
|
317
|
+
path: real,
|
|
318
|
+
message: `cli-fetched ref "${source.ref}" escapes ${baseDir}`,
|
|
319
|
+
});
|
|
320
|
+
return { source, skills: [], errors };
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
try {
|
|
324
|
+
const skills = await findSkillDirectories(real);
|
|
325
|
+
return { source, skills, errors, resolvedVendor: segments[0] };
|
|
326
|
+
}
|
|
327
|
+
catch (err) {
|
|
328
|
+
errors.push({ path: real, message: errorMessage(err) });
|
|
329
|
+
return { source, skills: [], errors, resolvedVendor: segments[0] };
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
// No ref → walk every `<vendor>/<name>` under installed-skills.
|
|
333
|
+
const real = await safeRealPath(baseDir);
|
|
334
|
+
if (real === null)
|
|
335
|
+
return { source, skills: [], errors };
|
|
336
|
+
let entries;
|
|
337
|
+
try {
|
|
338
|
+
entries = await fs.readdir(real, { withFileTypes: true });
|
|
339
|
+
}
|
|
340
|
+
catch (err) {
|
|
341
|
+
errors.push({ path: real, message: errorMessage(err) });
|
|
342
|
+
return { source, skills: [], errors };
|
|
343
|
+
}
|
|
344
|
+
const all = [];
|
|
345
|
+
for (const vendorEntry of entries) {
|
|
346
|
+
if (!vendorEntry.isDirectory() || vendorEntry.name.startsWith('.'))
|
|
347
|
+
continue;
|
|
348
|
+
const vendorDir = path.join(real, vendorEntry.name);
|
|
349
|
+
try {
|
|
350
|
+
const skills = await findSkillDirectories(vendorDir);
|
|
351
|
+
all.push(...skills);
|
|
352
|
+
}
|
|
353
|
+
catch (err) {
|
|
354
|
+
errors.push({ path: vendorDir, message: errorMessage(err) });
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
return { source, skills: all, errors };
|
|
358
|
+
}
|
|
359
|
+
// ---------------------------------------------------------------------------
|
|
360
|
+
// bundled — `<sdk-package>/skills/` next to `dist/`
|
|
361
|
+
// ---------------------------------------------------------------------------
|
|
362
|
+
async function walkBundled(source, env) {
|
|
363
|
+
const errors = [];
|
|
364
|
+
// The bundled source ships first-party skills authored under the SDK
|
|
365
|
+
// repo root in `bundled-skills/`. Two layouts are accepted:
|
|
366
|
+
//
|
|
367
|
+
// - Source-tree layout — `<sdk-root>/bundled-skills/<name>/SKILL.md`.
|
|
368
|
+
// Used when the package is consumed via `file:` / linked workspace
|
|
369
|
+
// or when tests run against the unbuilt repo.
|
|
370
|
+
// - Built-tree layout — `<sdk-root>/dist/skills/<name>/SKILL.md` or
|
|
371
|
+
// `<sdk-root>/skills/<name>/SKILL.md`. Used when the package is
|
|
372
|
+
// consumed from a published tarball or any environment that doesn't
|
|
373
|
+
// ship the `bundled-skills/` source directory.
|
|
374
|
+
//
|
|
375
|
+
// Test fixtures override the auto-discovery with an explicit `path`;
|
|
376
|
+
// the first walkable layout wins (no merging, so duplicate skill names
|
|
377
|
+
// across layouts don't shadow each other).
|
|
378
|
+
// Explicit `path` short-circuits the auto-discovery — test fixtures
|
|
379
|
+
// use this to point at a specific bundled root.
|
|
380
|
+
if (source.path !== undefined) {
|
|
381
|
+
const explicit = path.isAbsolute(source.path)
|
|
382
|
+
? source.path
|
|
383
|
+
: path.resolve(env.cwd, source.path);
|
|
384
|
+
return walkBundledCandidate(source, explicit, errors);
|
|
385
|
+
}
|
|
386
|
+
const here = path.dirname(new URL(import.meta.url).pathname);
|
|
387
|
+
const root = await findSdkPackageRoot(here);
|
|
388
|
+
if (root === null) {
|
|
389
|
+
return { source, skills: [], errors };
|
|
390
|
+
}
|
|
391
|
+
const candidates = [
|
|
392
|
+
path.join(root, 'bundled-skills'),
|
|
393
|
+
path.join(root, 'dist', 'skills'),
|
|
394
|
+
path.join(root, 'skills'),
|
|
395
|
+
];
|
|
396
|
+
// Walk every candidate in priority order and return the first one
|
|
397
|
+
// that actually surfaces skills; if every candidate is empty, fall
|
|
398
|
+
// back to the last walkable candidate (so the errors / empty-skills
|
|
399
|
+
// payload still carries a meaningful path for telemetry).
|
|
400
|
+
// A naive "first existing path wins" would lock onto an empty
|
|
401
|
+
// candidate and never consult later fallbacks.
|
|
402
|
+
let firstWalkable = null;
|
|
403
|
+
for (const candidate of candidates) {
|
|
404
|
+
const result = await walkBundledCandidate(source, candidate, []);
|
|
405
|
+
if (result.skills.length > 0) {
|
|
406
|
+
// Merge accumulated walker errors from earlier (unused) candidates
|
|
407
|
+
// — none yet here, but the shape is uniform with the explicit
|
|
408
|
+
// path branch above.
|
|
409
|
+
return { ...result, errors };
|
|
410
|
+
}
|
|
411
|
+
if (firstWalkable === null && result.errors.length === 0) {
|
|
412
|
+
// Walkable (path resolved) but empty — remember as fallback.
|
|
413
|
+
firstWalkable = result;
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
if (firstWalkable !== null) {
|
|
417
|
+
return { ...firstWalkable, errors };
|
|
418
|
+
}
|
|
419
|
+
return { source, skills: [], errors };
|
|
420
|
+
}
|
|
421
|
+
/**
|
|
422
|
+
* Walk a single candidate bundled root. Returns an empty `skills` list
|
|
423
|
+
* (no errors) when the path doesn't resolve; returns a populated
|
|
424
|
+
* `errors` list when readdir/stat actually fail. The caller (single
|
|
425
|
+
* top-level `walkBundled`) decides whether to try the next fallback
|
|
426
|
+
* based on the empty-skills outcome.
|
|
427
|
+
*/
|
|
428
|
+
async function walkBundledCandidate(source, candidate, errors) {
|
|
429
|
+
const real = await safeRealPath(candidate);
|
|
430
|
+
if (real === null) {
|
|
431
|
+
return { source, skills: [], errors };
|
|
432
|
+
}
|
|
433
|
+
try {
|
|
434
|
+
const skills = await findSkillDirectories(real);
|
|
435
|
+
return { source, skills, errors };
|
|
436
|
+
}
|
|
437
|
+
catch (err) {
|
|
438
|
+
return {
|
|
439
|
+
source,
|
|
440
|
+
skills: [],
|
|
441
|
+
errors: [...errors, { path: real, message: errorMessage(err) }],
|
|
442
|
+
};
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
async function findSdkPackageRoot(start) {
|
|
446
|
+
let current = start;
|
|
447
|
+
for (let i = 0; i < 16; i += 1) {
|
|
448
|
+
const candidate = path.join(current, 'package.json');
|
|
449
|
+
try {
|
|
450
|
+
const raw = await fs.readFile(candidate, 'utf-8');
|
|
451
|
+
const parsed = JSON.parse(raw);
|
|
452
|
+
if (typeof parsed.name === 'string' && parsed.name === '@qodo/sdk') {
|
|
453
|
+
return current;
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
catch {
|
|
457
|
+
// ignore — keep walking up
|
|
458
|
+
}
|
|
459
|
+
const next = path.dirname(current);
|
|
460
|
+
if (next === current)
|
|
461
|
+
break;
|
|
462
|
+
current = next;
|
|
463
|
+
}
|
|
464
|
+
return null;
|
|
465
|
+
}
|
|
466
|
+
function errorMessage(err) {
|
|
467
|
+
if (err instanceof Error)
|
|
468
|
+
return err.message;
|
|
469
|
+
return String(err);
|
|
470
|
+
}
|
|
471
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/skills/sources/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filesystem walker — browser stub. The Node version uses `node:fs` to
|
|
3
|
+
* enumerate skill directories; the browser stub returns empty results
|
|
4
|
+
* for every call. See `../manager.browser.ts` for the rationale.
|
|
5
|
+
*/
|
|
6
|
+
export declare const SYMLINK_HOP_CAP = 8;
|
|
7
|
+
export interface WalkedSkill {
|
|
8
|
+
readonly dirPath: string;
|
|
9
|
+
readonly skillFilePath: string;
|
|
10
|
+
readonly mtimeMs: number;
|
|
11
|
+
readonly size: number;
|
|
12
|
+
}
|
|
13
|
+
export declare function findSkillDirectories(_root: string): Promise<WalkedSkill[]>;
|
|
14
|
+
export declare function findSkillDirectoriesWithLegacyPluginLayout(_root: string): Promise<WalkedSkill[]>;
|
|
15
|
+
export declare function safeRealPath(_p: string): Promise<string | null>;
|
|
16
|
+
export declare function walkAncestors(_cwd: string, _segment: string): Promise<string[]>;
|
|
17
|
+
//# sourceMappingURL=walk.browser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walk.browser.d.ts","sourceRoot":"","sources":["../../../src/skills/sources/walk.browser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,eAAe,IAAI,CAAC;AAEjC,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAE1E;AAED,wBAAgB,0CAA0C,CACxD,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,WAAW,EAAE,CAAC,CAExB;AAED,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAE/D;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAE/E"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filesystem walker — browser stub. The Node version uses `node:fs` to
|
|
3
|
+
* enumerate skill directories; the browser stub returns empty results
|
|
4
|
+
* for every call. See `../manager.browser.ts` for the rationale.
|
|
5
|
+
*/
|
|
6
|
+
export const SYMLINK_HOP_CAP = 8;
|
|
7
|
+
export function findSkillDirectories(_root) {
|
|
8
|
+
return Promise.resolve([]);
|
|
9
|
+
}
|
|
10
|
+
export function findSkillDirectoriesWithLegacyPluginLayout(_root) {
|
|
11
|
+
return Promise.resolve([]);
|
|
12
|
+
}
|
|
13
|
+
export function safeRealPath(_p) {
|
|
14
|
+
return Promise.resolve(null);
|
|
15
|
+
}
|
|
16
|
+
export function walkAncestors(_cwd, _segment) {
|
|
17
|
+
return Promise.resolve([]);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=walk.browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walk.browser.js","sourceRoot":"","sources":["../../../src/skills/sources/walk.browser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC;AASjC,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,0CAA0C,CACxD,KAAa;IAEb,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,EAAU;IACrC,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,QAAgB;IAC1D,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAC7B,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared filesystem walker for skill sources.
|
|
3
|
+
*
|
|
4
|
+
* Sits below the per-source-type walkers in `./project.ts`, `./user.ts`,
|
|
5
|
+
* etc. Each `SKILL.md` discovered yields a `WalkedSkill` carrying:
|
|
6
|
+
*
|
|
7
|
+
* - `dirPath` — absolute path to the skill's directory.
|
|
8
|
+
* - `skillFilePath` — absolute path to the `SKILL.md`.
|
|
9
|
+
* - `mtimeMs` — modification time of `SKILL.md` for slim-index ordering.
|
|
10
|
+
*
|
|
11
|
+
* Per `skills-edge-cases.md` §1.9 / §1.10 symlinks are bounded:
|
|
12
|
+
*
|
|
13
|
+
* - Symlink resolution count per skill is capped at `SYMLINK_HOP_CAP`.
|
|
14
|
+
* - A symlink resolving outside the skill directory's tree is rejected
|
|
15
|
+
* before any read.
|
|
16
|
+
*
|
|
17
|
+
* The walker never reads `SKILL.md` body content — it surfaces existence
|
|
18
|
+
* + mtime only. The parser (`../parser.ts`) handles the actual read.
|
|
19
|
+
*/
|
|
20
|
+
/** Per-skill symlink-resolution cap. Mirrors POSIX `O_NOFOLLOW`-style behavior. */
|
|
21
|
+
export declare const SYMLINK_HOP_CAP = 8;
|
|
22
|
+
export interface WalkedSkill {
|
|
23
|
+
readonly dirPath: string;
|
|
24
|
+
readonly skillFilePath: string;
|
|
25
|
+
readonly mtimeMs: number;
|
|
26
|
+
/**
|
|
27
|
+
* File size in bytes from `fs.stat`. The manager enforces the
|
|
28
|
+
* `SKILL_FILE_HARD_BYTES` cap before `fs.readFile` to defend against
|
|
29
|
+
* unbounded reads of third-party SKILL.md files.
|
|
30
|
+
*/
|
|
31
|
+
readonly size: number;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Walk a single directory non-recursively and return every immediate
|
|
35
|
+
* sub-directory that contains a `SKILL.md` (or `skill.md`) file. The
|
|
36
|
+
* walker treats each subdirectory as one skill — supporting files
|
|
37
|
+
* (`reference.md`, `scripts/`, `assets/`) ride along but aren't surfaced
|
|
38
|
+
* by this walker.
|
|
39
|
+
*
|
|
40
|
+
* Errors thrown by the underlying `readdir` are propagated to the caller
|
|
41
|
+
* so the source-type walker can attach `sdk.skill.error` events with the
|
|
42
|
+
* source identity.
|
|
43
|
+
*/
|
|
44
|
+
export declare function findSkillDirectories(root: string): Promise<WalkedSkill[]>;
|
|
45
|
+
/**
|
|
46
|
+
* Variant for sources whose root layout is "directory contains many
|
|
47
|
+
* subdirectories AND each subdirectory may itself contain skill
|
|
48
|
+
* subdirectories" — e.g. a glob expansion like `plugins/*\/skills`. The
|
|
49
|
+
* walker does NOT recurse arbitrarily deep; it probes exactly one level
|
|
50
|
+
* down from each immediate child.
|
|
51
|
+
*
|
|
52
|
+
* Pragmatically: if `root/foo/SKILL.md` exists, `foo` is a skill;
|
|
53
|
+
* otherwise the walker checks `root/foo/skills/` (legacy plugin layout).
|
|
54
|
+
*/
|
|
55
|
+
export declare function findSkillDirectoriesWithLegacyPluginLayout(root: string): Promise<WalkedSkill[]>;
|
|
56
|
+
/**
|
|
57
|
+
* Walk a path with symlink-resolution and return its canonical absolute
|
|
58
|
+
* form, or `null` if the path doesn't exist or cannot be canonicalised.
|
|
59
|
+
*/
|
|
60
|
+
export declare function safeRealPath(p: string): Promise<string | null>;
|
|
61
|
+
/**
|
|
62
|
+
* Walk upward from `cwd` looking for ancestor directories that contain a
|
|
63
|
+
* `<segment>` directory (typically `.qodo/skills` for the project source).
|
|
64
|
+
* Returns the matching ancestor paths in nearest-first order. Caller
|
|
65
|
+
* applies the precedence rule for ties.
|
|
66
|
+
*/
|
|
67
|
+
export declare function walkAncestors(cwd: string, segment: string): Promise<string[]>;
|
|
68
|
+
//# sourceMappingURL=walk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walk.d.ts","sourceRoot":"","sources":["../../../src/skills/sources/walk.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAOH,mFAAmF;AACnF,eAAO,MAAM,eAAe,IAAI,CAAC;AAcjC,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAgC/E;AAED;;;;;;;;;GASG;AACH,wBAAsB,0CAA0C,CAC9D,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,WAAW,EAAE,CAAC,CAyBxB;AA8ED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAMpE;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,EAAE,CAAC,CAuBnB"}
|