@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
|
@@ -1,974 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: qodo-agent
|
|
3
|
-
description: Development companion for building AI-powered agents with @qodo/sdk. Use when working with QodoSDK, sdkAgent(), sdkCommand(), agent.toml, or any Qodo agent development tasks.
|
|
4
|
-
compatibility: Requires Node.js >= 18, npm, and zod package for schema definitions.
|
|
5
|
-
metadata:
|
|
6
|
-
author: qodo
|
|
7
|
-
version: "1.0"
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
# Qodo SDK Development Companion
|
|
11
|
-
|
|
12
|
-
Use this skill when working with `@qodo/sdk` to build AI-powered agents. This skill helps you:
|
|
13
|
-
|
|
14
|
-
- **Create** agent configurations (TypeScript and TOML)
|
|
15
|
-
- **Scaffold** Zod schemas with proper patterns and descriptions
|
|
16
|
-
- **Extend** existing agents with new commands, tools, and capabilities
|
|
17
|
-
- **Debug** streaming events, schema validation, and tool execution issues
|
|
18
|
-
- **Refactor** between config formats and improve type safety
|
|
19
|
-
|
|
20
|
-
## Quick Reference
|
|
21
|
-
|
|
22
|
-
### Core Exports
|
|
23
|
-
|
|
24
|
-
| Export | Purpose |
|
|
25
|
-
|--------|---------|
|
|
26
|
-
| `QodoSDK` | Main SDK class - initialize and run agents |
|
|
27
|
-
| `sdkAgent()` | Build agent config programmatically |
|
|
28
|
-
| `sdkCommand()` | Build command config with Zod schemas |
|
|
29
|
-
| `sdkArgs()` | Convenience wrapper for `z.object()` |
|
|
30
|
-
|
|
31
|
-
### Schema Helpers
|
|
32
|
-
|
|
33
|
-
| Export | Purpose |
|
|
34
|
-
|--------|---------|
|
|
35
|
-
| `zodOutputSchema()` | Convert Zod to JSON Schema for output |
|
|
36
|
-
| `zJsonValue()` | Flexible primitive type (string \| number \| boolean \| null) |
|
|
37
|
-
| `zJsonAny()` | Flexible any type (primitives + arrays + objects) |
|
|
38
|
-
| `zCoerce` | CLI-style input coercion (boolean, number, jsonArray, jsonObject) |
|
|
39
|
-
| `parseArgsWithSchema()` | Validate args with Zod, get typed result |
|
|
40
|
-
| `QodoSchemaError` | Schema validation error class |
|
|
41
|
-
|
|
42
|
-
### Pipeline DSL
|
|
43
|
-
|
|
44
|
-
| Export | Purpose |
|
|
45
|
-
|--------|---------|
|
|
46
|
-
| `sdkPipeline()` | Build multi-step agent workflows |
|
|
47
|
-
| `runPipeline()` | Execute a pipeline with an SDK instance |
|
|
48
|
-
| `PipelineExecutionError` | Pipeline step failure error |
|
|
49
|
-
| `.step()` | Add a sequential step with typed state threading |
|
|
50
|
-
| `.parallel()` | Add a group of steps that execute concurrently |
|
|
51
|
-
| `.gate()` | Pipeline-level barrier — halts subsequent entries when false |
|
|
52
|
-
| `.branch()` | Pipeline-level if/else fork with sub-pipeline paths |
|
|
53
|
-
|
|
54
|
-
### Tool Middleware
|
|
55
|
-
|
|
56
|
-
| Export | Purpose |
|
|
57
|
-
|--------|---------|
|
|
58
|
-
| `ToolMiddleware` (type) | Pre/post execution hook interface |
|
|
59
|
-
| `ToolMiddlewareError` | Middleware failure error |
|
|
60
|
-
| `MIDDLEWARE_TIMEOUT_MS` | Default hook timeout (10s) |
|
|
61
|
-
| `PROTECTED_TOOL_FIELDS` | Fields middleware cannot overwrite |
|
|
62
|
-
|
|
63
|
-
### Tool Approval Policies
|
|
64
|
-
|
|
65
|
-
| Export | Purpose |
|
|
66
|
-
|--------|---------|
|
|
67
|
-
| `sdkPolicy()` | Fluent builder for declarative tool approval rules |
|
|
68
|
-
| `policyFromRules()` | Build a policy from a rule array |
|
|
69
|
-
| `globMatch()` | Glob pattern matching utility |
|
|
70
|
-
|
|
71
|
-
### Artifacts
|
|
72
|
-
|
|
73
|
-
| Export | Purpose |
|
|
74
|
-
|--------|---------|
|
|
75
|
-
| `ArtifactStore` | Store/persist intermediate pipeline results |
|
|
76
|
-
| `withArtifacts()` | Wrap a pipeline step to auto-store output |
|
|
77
|
-
| `jsonSerializer` | Default JSON serializer |
|
|
78
|
-
|
|
79
|
-
### OpenTelemetry Tracing
|
|
80
|
-
|
|
81
|
-
| Export | Purpose |
|
|
82
|
-
|--------|---------|
|
|
83
|
-
| `createSdkTracer()` | Create event-to-span tracer (duck-typed OTel API) |
|
|
84
|
-
| `tracePipeline()` | Trace pipeline execution with nested spans |
|
|
85
|
-
| `SdkTracer` | Tracer class for manual usage |
|
|
86
|
-
|
|
87
|
-
### Event Handling
|
|
88
|
-
|
|
89
|
-
| Export | Purpose |
|
|
90
|
-
|--------|---------|
|
|
91
|
-
| `SdkEventType` | Event type constants (Init, MessageDelta, Final, etc.) |
|
|
92
|
-
| `matchSdkEvent()` | Type-safe event router |
|
|
93
|
-
|
|
94
|
-
### Clients
|
|
95
|
-
|
|
96
|
-
| Export | Purpose |
|
|
97
|
-
|--------|---------|
|
|
98
|
-
| `QodoInfoClient` | Backend info (models, capabilities, rate limits) |
|
|
99
|
-
| `QodoSessionsClient` | Session history management |
|
|
100
|
-
| `QodoToolsClient` | Tool discovery (built-in + backend tools) |
|
|
101
|
-
|
|
102
|
-
### Errors
|
|
103
|
-
|
|
104
|
-
| Export | Purpose |
|
|
105
|
-
|--------|---------|
|
|
106
|
-
| `QodoSchemaError` | Schema validation failures |
|
|
107
|
-
| `QodoAuthError` | Authentication failures |
|
|
108
|
-
| `QodoBackendBootstrapError` | Backend initialization failures |
|
|
109
|
-
| `QodoOutputValidationError` | Structured output didn't match Zod schema |
|
|
110
|
-
| `ToolMiddlewareError` | Tool middleware hook failure |
|
|
111
|
-
| `PipelineExecutionError` | Pipeline step failure |
|
|
112
|
-
|
|
113
|
-
### Built-in Tools
|
|
114
|
-
|
|
115
|
-
Use these in `available_tools` to give your agent capabilities:
|
|
116
|
-
|
|
117
|
-
| Tool | Purpose | Common Use Cases |
|
|
118
|
-
|------|---------|------------------|
|
|
119
|
-
| `filesystem` | File operations | Read/write files, navigate directories, edit code |
|
|
120
|
-
| `git` | Version control | Check status, view diffs, commit changes |
|
|
121
|
-
| `ripgrep` | Code search | Find patterns, locate definitions, search codebase |
|
|
122
|
-
| `shell` | Run commands | Build tools, scripts, system commands |
|
|
123
|
-
|
|
124
|
-
**Example:**
|
|
125
|
-
```typescript
|
|
126
|
-
sdkCommand({
|
|
127
|
-
name: 'analyze',
|
|
128
|
-
available_tools: ['filesystem', 'ripgrep'], // Read files + search
|
|
129
|
-
// ...
|
|
130
|
-
});
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
**Common Combinations:**
|
|
134
|
-
- **Code analysis**: `['filesystem', 'ripgrep']`
|
|
135
|
-
- **Code review**: `['git', 'filesystem']`
|
|
136
|
-
- **Full development**: `['filesystem', 'git', 'ripgrep', 'shell']`
|
|
137
|
-
|
|
138
|
-
See [references/builtin-tools.md](references/builtin-tools.md) for detailed documentation on each tool.
|
|
139
|
-
|
|
140
|
-
---
|
|
141
|
-
|
|
142
|
-
## Critical Rules
|
|
143
|
-
|
|
144
|
-
### For SDK Users (Building Apps)
|
|
145
|
-
|
|
146
|
-
1. **Every output property needs `.describe()`**
|
|
147
|
-
```typescript
|
|
148
|
-
// WRONG - will throw QodoSchemaError
|
|
149
|
-
const output = z.object({
|
|
150
|
-
summary: z.string(),
|
|
151
|
-
score: z.number(),
|
|
152
|
-
});
|
|
153
|
-
|
|
154
|
-
// CORRECT
|
|
155
|
-
const output = z.object({
|
|
156
|
-
summary: z.string().describe('Brief summary of the analysis'),
|
|
157
|
-
score: z.number().describe('Quality score from 0-100'),
|
|
158
|
-
});
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
2. **Never use `z.any()` in output schemas**
|
|
162
|
-
```typescript
|
|
163
|
-
// WRONG - produces invalid JSON Schema
|
|
164
|
-
const output = z.object({
|
|
165
|
-
data: z.any().describe('The data'),
|
|
166
|
-
});
|
|
167
|
-
|
|
168
|
-
// CORRECT - use zJsonValue() or zJsonAny()
|
|
169
|
-
import { zJsonValue, zJsonAny } from '@qodo/sdk';
|
|
170
|
-
|
|
171
|
-
const output = z.object({
|
|
172
|
-
// For primitives only:
|
|
173
|
-
value: zJsonValue().describe('A primitive value'),
|
|
174
|
-
// For any JSON (including objects/arrays):
|
|
175
|
-
data: zJsonAny().describe('Any JSON data'),
|
|
176
|
-
});
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
3. **Always call `sdk.dispose()`**
|
|
180
|
-
```typescript
|
|
181
|
-
const sdk = new QodoSDK({ ... });
|
|
182
|
-
try {
|
|
183
|
-
const result = await sdk.run('analyze', { args: { path: './src' } });
|
|
184
|
-
console.log(result.structured_output);
|
|
185
|
-
} finally {
|
|
186
|
-
await sdk.dispose(); // Cleanup MCP servers and connections
|
|
187
|
-
}
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
4. **Handle errors appropriately**
|
|
191
|
-
```typescript
|
|
192
|
-
import { QodoSchemaError, QodoAuthError } from '@qodo/sdk';
|
|
193
|
-
|
|
194
|
-
try {
|
|
195
|
-
const result = await sdk.run('analyze');
|
|
196
|
-
} catch (e) {
|
|
197
|
-
if (e instanceof QodoSchemaError) {
|
|
198
|
-
console.error('Schema validation failed:', e.message);
|
|
199
|
-
} else if (e instanceof QodoAuthError) {
|
|
200
|
-
console.error('Authentication failed:', e.message);
|
|
201
|
-
} else {
|
|
202
|
-
throw e;
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
### For SDK Contributors (Modifying @qodo/sdk)
|
|
208
|
-
|
|
209
|
-
1. **Never use `process.exit()`** - throw errors instead (library code)
|
|
210
|
-
2. **Use `.js` extensions** in imports - ESM requirement
|
|
211
|
-
3. **Export types separately** - TypeScript best practice
|
|
212
|
-
|
|
213
|
-
---
|
|
214
|
-
|
|
215
|
-
## Usage Patterns
|
|
216
|
-
|
|
217
|
-
### Pattern 1: Simple Prompt (No Config)
|
|
218
|
-
|
|
219
|
-
```typescript
|
|
220
|
-
import { QodoSDK } from '@qodo/sdk';
|
|
221
|
-
|
|
222
|
-
const sdk = new QodoSDK();
|
|
223
|
-
try {
|
|
224
|
-
const result = await sdk.prompt('Explain how async/await works in JavaScript');
|
|
225
|
-
console.log(result.final_output);
|
|
226
|
-
} finally {
|
|
227
|
-
await sdk.dispose();
|
|
228
|
-
}
|
|
229
|
-
```
|
|
230
|
-
|
|
231
|
-
### Pattern 2: Programmatic Agent with Zod
|
|
232
|
-
|
|
233
|
-
```typescript
|
|
234
|
-
import { QodoSDK, sdkAgent, sdkCommand, sdkArgs, z } from '@qodo/sdk';
|
|
235
|
-
// Note: Import `z` from '@qodo/sdk' for guaranteed compatibility with SDK schema functions
|
|
236
|
-
// Alternatively, Zod 3 users can use: import { z } from 'zod';
|
|
237
|
-
// Zod 4 users should use: import { z } from 'zod/v3';
|
|
238
|
-
|
|
239
|
-
const agent = sdkAgent({
|
|
240
|
-
instructions: 'You are a code analysis assistant.',
|
|
241
|
-
commands: {
|
|
242
|
-
analyze: sdkCommand({
|
|
243
|
-
name: 'analyze',
|
|
244
|
-
description: 'Analyze code quality',
|
|
245
|
-
instructions: 'Analyze the code and provide a quality assessment.',
|
|
246
|
-
available_tools: ['filesystem', 'ripgrep'],
|
|
247
|
-
args: sdkArgs({
|
|
248
|
-
path: z.string().describe('Path to analyze'),
|
|
249
|
-
depth: z.number().optional().default(3).describe('Max directory depth'),
|
|
250
|
-
}),
|
|
251
|
-
output: z.object({
|
|
252
|
-
summary: z.string().describe('Overall assessment'),
|
|
253
|
-
issues: z.array(z.object({
|
|
254
|
-
file: z.string().describe('File path'),
|
|
255
|
-
line: z.number().describe('Line number'),
|
|
256
|
-
severity: z.enum(['low', 'medium', 'high']).describe('Issue severity'),
|
|
257
|
-
message: z.string().describe('Issue description'),
|
|
258
|
-
})).describe('List of issues found'),
|
|
259
|
-
score: z.number().describe('Quality score 0-100'),
|
|
260
|
-
}),
|
|
261
|
-
}),
|
|
262
|
-
},
|
|
263
|
-
});
|
|
264
|
-
|
|
265
|
-
const sdk = QodoSDK.fromAgent(agent);
|
|
266
|
-
try {
|
|
267
|
-
const result = await sdk.run('analyze', {
|
|
268
|
-
args: { path: './src', depth: 5 },
|
|
269
|
-
});
|
|
270
|
-
console.log('Score:', result.structured_output?.score);
|
|
271
|
-
console.log('Issues:', result.structured_output?.issues);
|
|
272
|
-
} finally {
|
|
273
|
-
await sdk.dispose();
|
|
274
|
-
}
|
|
275
|
-
```
|
|
276
|
-
|
|
277
|
-
### Pattern 3: TOML Configuration
|
|
278
|
-
|
|
279
|
-
Create `agent.toml`:
|
|
280
|
-
```toml
|
|
281
|
-
version = "1.0"
|
|
282
|
-
instructions = "You are a helpful coding assistant."
|
|
283
|
-
|
|
284
|
-
[commands.review]
|
|
285
|
-
name = "review"
|
|
286
|
-
description = "Review code changes"
|
|
287
|
-
instructions = "Review the provided code changes and suggest improvements."
|
|
288
|
-
available_tools = ["filesystem", "git", "ripgrep"]
|
|
289
|
-
|
|
290
|
-
[commands.review.output_schema]
|
|
291
|
-
type = "json_schema"
|
|
292
|
-
|
|
293
|
-
[commands.review.output_schema.json_schema]
|
|
294
|
-
name = "review_output"
|
|
295
|
-
strict = true
|
|
296
|
-
|
|
297
|
-
[commands.review.output_schema.json_schema.schema]
|
|
298
|
-
type = "object"
|
|
299
|
-
required = ["summary", "suggestions"]
|
|
300
|
-
|
|
301
|
-
[commands.review.output_schema.json_schema.schema.properties.summary]
|
|
302
|
-
type = "string"
|
|
303
|
-
description = "Overall review summary"
|
|
304
|
-
|
|
305
|
-
[commands.review.output_schema.json_schema.schema.properties.suggestions]
|
|
306
|
-
type = "array"
|
|
307
|
-
description = "List of improvement suggestions"
|
|
308
|
-
|
|
309
|
-
[commands.review.output_schema.json_schema.schema.properties.suggestions.items]
|
|
310
|
-
type = "object"
|
|
311
|
-
required = ["file", "suggestion"]
|
|
312
|
-
|
|
313
|
-
[commands.review.output_schema.json_schema.schema.properties.suggestions.items.properties.file]
|
|
314
|
-
type = "string"
|
|
315
|
-
description = "File path"
|
|
316
|
-
|
|
317
|
-
[commands.review.output_schema.json_schema.schema.properties.suggestions.items.properties.suggestion]
|
|
318
|
-
type = "string"
|
|
319
|
-
description = "The suggestion"
|
|
320
|
-
```
|
|
321
|
-
|
|
322
|
-
Then use it:
|
|
323
|
-
```typescript
|
|
324
|
-
import { QodoSDK } from '@qodo/sdk';
|
|
325
|
-
|
|
326
|
-
const sdk = new QodoSDK({
|
|
327
|
-
agentFile: './agent.toml',
|
|
328
|
-
});
|
|
329
|
-
try {
|
|
330
|
-
const result = await sdk.run('review');
|
|
331
|
-
console.log(result.structured_output);
|
|
332
|
-
} finally {
|
|
333
|
-
await sdk.dispose();
|
|
334
|
-
}
|
|
335
|
-
```
|
|
336
|
-
|
|
337
|
-
### Pattern 4: Streaming Events
|
|
338
|
-
|
|
339
|
-
```typescript
|
|
340
|
-
import { QodoSDK, SdkEventType, matchSdkEvent } from '@qodo/sdk';
|
|
341
|
-
|
|
342
|
-
const sdk = new QodoSDK();
|
|
343
|
-
try {
|
|
344
|
-
for await (const event of sdk.streamPrompt('Write a haiku about coding')) {
|
|
345
|
-
matchSdkEvent(event, {
|
|
346
|
-
[SdkEventType.MessageDelta]: (e) => {
|
|
347
|
-
process.stdout.write(e.data.delta);
|
|
348
|
-
},
|
|
349
|
-
[SdkEventType.ToolRequested]: (e) => {
|
|
350
|
-
console.log(`\nTool: ${e.data.server_name}.${e.data.tool_name}`);
|
|
351
|
-
},
|
|
352
|
-
[SdkEventType.ToolExecuted]: (e) => {
|
|
353
|
-
console.log(`Tool result: ${e.data.result.isError ? 'error' : 'success'}`);
|
|
354
|
-
},
|
|
355
|
-
[SdkEventType.Error]: (e) => {
|
|
356
|
-
console.error('Error:', e.data.message);
|
|
357
|
-
},
|
|
358
|
-
[SdkEventType.Final]: (e) => {
|
|
359
|
-
console.log('\n\nDone! Success:', e.data.success);
|
|
360
|
-
},
|
|
361
|
-
default: () => {}, // Ignore other events
|
|
362
|
-
});
|
|
363
|
-
}
|
|
364
|
-
} finally {
|
|
365
|
-
await sdk.dispose();
|
|
366
|
-
}
|
|
367
|
-
```
|
|
368
|
-
|
|
369
|
-
### Pattern 5: Custom Tool Approval
|
|
370
|
-
|
|
371
|
-
```typescript
|
|
372
|
-
import { QodoSDK } from '@qodo/sdk';
|
|
373
|
-
import * as readline from 'readline';
|
|
374
|
-
|
|
375
|
-
const sdk = new QodoSDK({
|
|
376
|
-
autoApproveTools: false,
|
|
377
|
-
toolApproval: async ({ tool_name, server_name, tool_args }) => {
|
|
378
|
-
const rl = readline.createInterface({
|
|
379
|
-
input: process.stdin,
|
|
380
|
-
output: process.stdout,
|
|
381
|
-
});
|
|
382
|
-
|
|
383
|
-
return new Promise((resolve) => {
|
|
384
|
-
rl.question(
|
|
385
|
-
`Allow ${server_name}.${tool_name}(${JSON.stringify(tool_args)})? [y/N] `,
|
|
386
|
-
(answer) => {
|
|
387
|
-
rl.close();
|
|
388
|
-
resolve(answer.toLowerCase() === 'y');
|
|
389
|
-
}
|
|
390
|
-
);
|
|
391
|
-
});
|
|
392
|
-
},
|
|
393
|
-
});
|
|
394
|
-
|
|
395
|
-
try {
|
|
396
|
-
const result = await sdk.prompt('List files in current directory');
|
|
397
|
-
console.log(result.final_output);
|
|
398
|
-
} finally {
|
|
399
|
-
await sdk.dispose();
|
|
400
|
-
}
|
|
401
|
-
```
|
|
402
|
-
|
|
403
|
-
### Pattern 6: Session Continuity
|
|
404
|
-
|
|
405
|
-
```typescript
|
|
406
|
-
import { QodoSDK } from '@qodo/sdk';
|
|
407
|
-
|
|
408
|
-
// First conversation
|
|
409
|
-
const sdk1 = new QodoSDK();
|
|
410
|
-
let sessionId: string;
|
|
411
|
-
|
|
412
|
-
try {
|
|
413
|
-
for await (const event of sdk1.streamPrompt('Remember: my favorite color is blue')) {
|
|
414
|
-
if (event.type === 'sdk.run.started') {
|
|
415
|
-
sessionId = event.data.session_id;
|
|
416
|
-
}
|
|
417
|
-
}
|
|
418
|
-
} finally {
|
|
419
|
-
await sdk1.dispose();
|
|
420
|
-
}
|
|
421
|
-
|
|
422
|
-
// Continue the conversation
|
|
423
|
-
const sdk2 = new QodoSDK().withSession(sessionId!);
|
|
424
|
-
try {
|
|
425
|
-
const result = await sdk2.prompt('What is my favorite color?');
|
|
426
|
-
console.log(result.final_output); // Should mention "blue"
|
|
427
|
-
} finally {
|
|
428
|
-
await sdk2.dispose();
|
|
429
|
-
}
|
|
430
|
-
```
|
|
431
|
-
|
|
432
|
-
### Pattern 7: Multi-Agent Orchestration
|
|
433
|
-
|
|
434
|
-
```typescript
|
|
435
|
-
import { QodoSDK, sdkAgent, sdkCommand, sdkArgs, z } from '@qodo/sdk';
|
|
436
|
-
|
|
437
|
-
// Agent 1: Code analyzer
|
|
438
|
-
const analyzerAgent = sdkAgent({
|
|
439
|
-
instructions: 'You analyze code and identify issues.',
|
|
440
|
-
commands: {
|
|
441
|
-
analyze: sdkCommand({
|
|
442
|
-
name: 'analyze',
|
|
443
|
-
description: 'Analyze code',
|
|
444
|
-
available_tools: ['filesystem', 'ripgrep'],
|
|
445
|
-
output: z.object({
|
|
446
|
-
issues: z.array(z.string().describe('Issue description')).describe('Issues found'),
|
|
447
|
-
}),
|
|
448
|
-
}),
|
|
449
|
-
},
|
|
450
|
-
});
|
|
451
|
-
|
|
452
|
-
// Agent 2: Code fixer
|
|
453
|
-
const fixerAgent = sdkAgent({
|
|
454
|
-
instructions: 'You fix code issues.',
|
|
455
|
-
commands: {
|
|
456
|
-
fix: sdkCommand({
|
|
457
|
-
name: 'fix',
|
|
458
|
-
description: 'Fix code issues',
|
|
459
|
-
available_tools: ['filesystem'],
|
|
460
|
-
args: sdkArgs({
|
|
461
|
-
issues: z.array(z.string()).describe('Issues to fix'),
|
|
462
|
-
}),
|
|
463
|
-
output: z.object({
|
|
464
|
-
fixed: z.array(z.string().describe('Fixed issue')).describe('Issues that were fixed'),
|
|
465
|
-
}),
|
|
466
|
-
}),
|
|
467
|
-
},
|
|
468
|
-
});
|
|
469
|
-
|
|
470
|
-
// Orchestrate
|
|
471
|
-
const analyzer = QodoSDK.fromAgent(analyzerAgent);
|
|
472
|
-
const fixer = QodoSDK.fromAgent(fixerAgent);
|
|
473
|
-
|
|
474
|
-
try {
|
|
475
|
-
// Step 1: Analyze
|
|
476
|
-
const analysis = await analyzer.run('analyze');
|
|
477
|
-
const issues = analysis.structured_output?.issues || [];
|
|
478
|
-
|
|
479
|
-
// Step 2: Fix
|
|
480
|
-
if (issues.length > 0) {
|
|
481
|
-
const fixes = await fixer.run('fix', { args: { issues } });
|
|
482
|
-
console.log('Fixed:', fixes.structured_output?.fixed);
|
|
483
|
-
}
|
|
484
|
-
} finally {
|
|
485
|
-
await Promise.all([analyzer.dispose(), fixer.dispose()]);
|
|
486
|
-
}
|
|
487
|
-
```
|
|
488
|
-
|
|
489
|
-
### Pattern 8: Pipeline DSL (Multi-Step Workflows)
|
|
490
|
-
|
|
491
|
-
```typescript
|
|
492
|
-
import { QodoSDK, sdkPipeline, runPipeline } from '@qodo/sdk';
|
|
493
|
-
|
|
494
|
-
const sdk = new QodoSDK({ autoApproveTools: true });
|
|
495
|
-
|
|
496
|
-
const pipeline = sdkPipeline<{ repo: string }>()
|
|
497
|
-
.step('lint', async ({ state, run }) => {
|
|
498
|
-
const r = await run('lint', { args: { path: state.repo } });
|
|
499
|
-
return { lintOutput: r.result.final_output };
|
|
500
|
-
})
|
|
501
|
-
// Gate: only continue review if lint produced output
|
|
502
|
-
.gate((state) => !!state.lintOutput)
|
|
503
|
-
.step('review', async ({ state, run }) => {
|
|
504
|
-
const r = await run('review', {
|
|
505
|
-
extraInstructions: `Lint results:\n${state.lintOutput}`,
|
|
506
|
-
});
|
|
507
|
-
return { reviewOutput: r.result.final_output };
|
|
508
|
-
})
|
|
509
|
-
.build();
|
|
510
|
-
|
|
511
|
-
const result = await runPipeline(sdk, pipeline, { repo: './src' });
|
|
512
|
-
console.log(result.state.reviewOutput);
|
|
513
|
-
console.log(result.steps); // Step logs with timing
|
|
514
|
-
|
|
515
|
-
await sdk.dispose();
|
|
516
|
-
```
|
|
517
|
-
|
|
518
|
-
Features: typed state threading, `.parallel([...])`, `.gate()` (pipeline barriers), `.branch()` (if/else forks), error strategies (`'skip'`, `'throw'`, custom recovery).
|
|
519
|
-
|
|
520
|
-
### Pattern 8b: Pipeline Branches
|
|
521
|
-
|
|
522
|
-
```typescript
|
|
523
|
-
import { QodoSDK, sdkPipeline, runPipeline } from '@qodo/sdk';
|
|
524
|
-
|
|
525
|
-
const sdk = new QodoSDK({ autoApproveTools: true });
|
|
526
|
-
|
|
527
|
-
const pipeline = sdkPipeline<{ fileCount: number }>()
|
|
528
|
-
.branch(
|
|
529
|
-
(state) => state.fileCount > 20,
|
|
530
|
-
{
|
|
531
|
-
true: (b) => b.step('deep', async ({ run }) => {
|
|
532
|
-
const r = await run('analyze-deep');
|
|
533
|
-
return { analysis: r.result.final_output };
|
|
534
|
-
}),
|
|
535
|
-
false: (b) => b.step('quick', async ({ run }) => {
|
|
536
|
-
const r = await run('summarize');
|
|
537
|
-
return { analysis: r.result.final_output };
|
|
538
|
-
}),
|
|
539
|
-
},
|
|
540
|
-
{ name: 'size-check' },
|
|
541
|
-
)
|
|
542
|
-
.step('report', async ({ state }) => ({
|
|
543
|
-
report: `${state.fileCount} files: ${state.analysis}`,
|
|
544
|
-
}))
|
|
545
|
-
.build();
|
|
546
|
-
|
|
547
|
-
await sdk.dispose();
|
|
548
|
-
```
|
|
549
|
-
|
|
550
|
-
### Pattern 9: Dry Run Mode
|
|
551
|
-
|
|
552
|
-
```typescript
|
|
553
|
-
import { QodoSDK } from '@qodo/sdk';
|
|
554
|
-
|
|
555
|
-
const sdk = new QodoSDK({ autoApproveTools: true });
|
|
556
|
-
|
|
557
|
-
// Preview what the agent would do without executing tools
|
|
558
|
-
const result = await sdk.run('review', {
|
|
559
|
-
args: { path: './src' },
|
|
560
|
-
dryRun: true,
|
|
561
|
-
});
|
|
562
|
-
|
|
563
|
-
console.log(result.result.final_output); // Agent describes planned actions
|
|
564
|
-
console.log(result.meta.dry_run); // true
|
|
565
|
-
|
|
566
|
-
await sdk.dispose();
|
|
567
|
-
```
|
|
568
|
-
|
|
569
|
-
### Pattern 10: Tool Middleware (Auditing & Control)
|
|
570
|
-
|
|
571
|
-
```typescript
|
|
572
|
-
import { QodoSDK, type ToolMiddleware } from '@qodo/sdk';
|
|
573
|
-
|
|
574
|
-
const auditLogger: ToolMiddleware = {
|
|
575
|
-
name: 'audit-logger',
|
|
576
|
-
preExecute(toolData) {
|
|
577
|
-
console.log(`[AUDIT] ${toolData.server_name}.${toolData.tool_name}`);
|
|
578
|
-
},
|
|
579
|
-
postExecute(toolData, result) {
|
|
580
|
-
console.log(`[AUDIT] Result: ${result.isError ? 'ERROR' : 'OK'}`);
|
|
581
|
-
},
|
|
582
|
-
};
|
|
583
|
-
|
|
584
|
-
const readOnly: ToolMiddleware = {
|
|
585
|
-
name: 'read-only',
|
|
586
|
-
preExecute(toolData) {
|
|
587
|
-
if (['write_file', 'edit_file', 'delete_files'].includes(toolData.tool_name)) {
|
|
588
|
-
throw new Error(`Blocked: ${toolData.tool_name}`);
|
|
589
|
-
}
|
|
590
|
-
},
|
|
591
|
-
};
|
|
592
|
-
|
|
593
|
-
const sdk = new QodoSDK({
|
|
594
|
-
autoApproveTools: true,
|
|
595
|
-
toolMiddleware: [auditLogger, readOnly],
|
|
596
|
-
});
|
|
597
|
-
```
|
|
598
|
-
|
|
599
|
-
### Pattern 11: Tool Approval Policy DSL
|
|
600
|
-
|
|
601
|
-
```typescript
|
|
602
|
-
import { QodoSDK, sdkPolicy } from '@qodo/sdk';
|
|
603
|
-
|
|
604
|
-
const policy = sdkPolicy()
|
|
605
|
-
.approve({ tools: ['read_*', 'list_*', 'git_status', 'git_log'] }, 'allow-reads')
|
|
606
|
-
.deny({ servers: ['shell'] }, 'block-shell')
|
|
607
|
-
.deny({ tools: ['write_file', 'edit_file', 'delete_files'] }, 'block-writes')
|
|
608
|
-
.requireHuman({ tools: ['git_commit'] }, 'review-commits')
|
|
609
|
-
.default('deny')
|
|
610
|
-
.build();
|
|
611
|
-
|
|
612
|
-
const sdk = new QodoSDK({
|
|
613
|
-
autoApproveTools: false,
|
|
614
|
-
toolApproval: policy.evaluate,
|
|
615
|
-
});
|
|
616
|
-
|
|
617
|
-
// Inspect policy decisions:
|
|
618
|
-
const result = policy.evaluateDetailed({
|
|
619
|
-
tool_name: 'read_files', server_name: 'filesystem', tool_args: {},
|
|
620
|
-
});
|
|
621
|
-
console.log(result.decision, result.matchedRule?.name); // 'approve', 'allow-reads'
|
|
622
|
-
```
|
|
623
|
-
|
|
624
|
-
### Pattern 12: Execution Timeouts and Retries
|
|
625
|
-
|
|
626
|
-
```typescript
|
|
627
|
-
import { QodoSDK } from '@qodo/sdk';
|
|
628
|
-
|
|
629
|
-
const sdk = new QodoSDK({ autoApproveTools: true });
|
|
630
|
-
|
|
631
|
-
const result = await sdk.run('review', {
|
|
632
|
-
args: { path: './src' },
|
|
633
|
-
timeout: 30000, // 30 second limit per attempt
|
|
634
|
-
maxRetries: 2, // Retry up to 2 times on failure
|
|
635
|
-
});
|
|
636
|
-
|
|
637
|
-
if (result.meta.timed_out) {
|
|
638
|
-
console.warn('Run timed out');
|
|
639
|
-
}
|
|
640
|
-
|
|
641
|
-
await sdk.dispose();
|
|
642
|
-
```
|
|
643
|
-
|
|
644
|
-
### Pattern 13: Artifacts (Pipeline Intermediate Results)
|
|
645
|
-
|
|
646
|
-
```typescript
|
|
647
|
-
import { QodoSDK, sdkPipeline, runPipeline, ArtifactStore, withArtifacts } from '@qodo/sdk';
|
|
648
|
-
import fs from 'fs/promises';
|
|
649
|
-
|
|
650
|
-
const store = new ArtifactStore({
|
|
651
|
-
onPersist: async (artifact) => {
|
|
652
|
-
await fs.writeFile(`./out/${artifact.stepName}.json`, artifact.serialized);
|
|
653
|
-
},
|
|
654
|
-
});
|
|
655
|
-
|
|
656
|
-
const pipeline = sdkPipeline<{ repo: string }>()
|
|
657
|
-
.step('lint', withArtifacts(store, async ({ state, run }) => {
|
|
658
|
-
const r = await run('lint', { args: { path: state.repo } });
|
|
659
|
-
return { lintOutput: r.result.final_output };
|
|
660
|
-
}))
|
|
661
|
-
.build();
|
|
662
|
-
|
|
663
|
-
const result = await runPipeline(sdk, pipeline, { repo: './src' });
|
|
664
|
-
console.log(store.all()); // All artifacts
|
|
665
|
-
console.log(store.getErrors()); // Persistence failures (non-fatal)
|
|
666
|
-
```
|
|
667
|
-
|
|
668
|
-
### Pattern 14: OpenTelemetry Tracing
|
|
669
|
-
|
|
670
|
-
```typescript
|
|
671
|
-
import * as otel from '@opentelemetry/api';
|
|
672
|
-
import { QodoSDK, createSdkTracer, SdkEventType, matchSdkEvent } from '@qodo/sdk';
|
|
673
|
-
|
|
674
|
-
const sdk = new QodoSDK({ autoApproveTools: true });
|
|
675
|
-
const tracer = createSdkTracer(otel, { tracerName: 'my-service' });
|
|
676
|
-
|
|
677
|
-
// Events flow through unchanged, spans created automatically
|
|
678
|
-
for await (const ev of tracer.wrapStream(sdk.stream('review'))) {
|
|
679
|
-
matchSdkEvent(ev, {
|
|
680
|
-
[SdkEventType.MessageDelta]: (e) => process.stdout.write(e.data.delta),
|
|
681
|
-
[SdkEventType.Final]: (e) => console.log('Done:', e.data.success),
|
|
682
|
-
default: () => {},
|
|
683
|
-
});
|
|
684
|
-
}
|
|
685
|
-
|
|
686
|
-
tracer.flush();
|
|
687
|
-
await sdk.dispose();
|
|
688
|
-
```
|
|
689
|
-
|
|
690
|
-
No compile-time OTel dependency — install `@opentelemetry/api` as optional peer dep.
|
|
691
|
-
|
|
692
|
-
### Pattern 15: Backend Info Client (Standalone)
|
|
693
|
-
|
|
694
|
-
```typescript
|
|
695
|
-
import { QodoInfoClient } from '@qodo/sdk';
|
|
696
|
-
|
|
697
|
-
// Standalone — no run/stream needed
|
|
698
|
-
const info = new QodoInfoClient();
|
|
699
|
-
const things = await info.getThings();
|
|
700
|
-
console.log(things.available_models); // ['gpt-4', 'gpt-4o', ...]
|
|
701
|
-
console.log(things.default_model); // 'gpt-4o'
|
|
702
|
-
console.log(things.session_id); // new backend session ID
|
|
703
|
-
console.log(things.rate_limit); // { remaining, reset, limit }
|
|
704
|
-
|
|
705
|
-
// Convenience
|
|
706
|
-
const models = await info.getAvailableModels();
|
|
707
|
-
|
|
708
|
-
// Via SDK instance
|
|
709
|
-
const sdk = new QodoSDK();
|
|
710
|
-
const defaultModel = await sdk.info.getDefaultModel();
|
|
711
|
-
```
|
|
712
|
-
|
|
713
|
-
### Pattern 16: Tool Discovery Client (Standalone)
|
|
714
|
-
|
|
715
|
-
```typescript
|
|
716
|
-
import { QodoToolsClient } from '@qodo/sdk';
|
|
717
|
-
|
|
718
|
-
// Standalone — no run/stream needed
|
|
719
|
-
const client = new QodoToolsClient();
|
|
720
|
-
|
|
721
|
-
// List all tools (built-in + backend)
|
|
722
|
-
const tools = await client.getTools();
|
|
723
|
-
for (const tool of tools) {
|
|
724
|
-
console.log(`${tool.server}.${tool.name} (${tool.serverType})`);
|
|
725
|
-
// e.g. "filesystem.read_files (builtin)"
|
|
726
|
-
// e.g. "sequential_thinking.sequential_thinking (backend)"
|
|
727
|
-
}
|
|
728
|
-
|
|
729
|
-
// Group by server
|
|
730
|
-
const byServer = await client.getToolsByServer();
|
|
731
|
-
console.log(Object.keys(byServer));
|
|
732
|
-
// ['filesystem', 'git', 'ripgrep', 'shell', 'sequential_thinking', ...]
|
|
733
|
-
|
|
734
|
-
// Filter by type
|
|
735
|
-
const backendOnly = tools.filter(t => t.serverType === 'backend');
|
|
736
|
-
const builtinOnly = tools.filter(t => t.serverType === 'builtin');
|
|
737
|
-
|
|
738
|
-
// Via SDK instance
|
|
739
|
-
const sdk = new QodoSDK();
|
|
740
|
-
const allTools = await sdk.tools.getTools();
|
|
741
|
-
```
|
|
742
|
-
|
|
743
|
-
---
|
|
744
|
-
|
|
745
|
-
## Zod Schema Patterns
|
|
746
|
-
|
|
747
|
-
### Basic Types with Descriptions
|
|
748
|
-
|
|
749
|
-
```typescript
|
|
750
|
-
import { z } from '@qodo/sdk'; // Recommended for type compatibility
|
|
751
|
-
|
|
752
|
-
const output = z.object({
|
|
753
|
-
// Primitives
|
|
754
|
-
name: z.string().describe('The name'),
|
|
755
|
-
count: z.number().describe('Total count'),
|
|
756
|
-
enabled: z.boolean().describe('Whether enabled'),
|
|
757
|
-
|
|
758
|
-
// Optional fields
|
|
759
|
-
notes: z.string().optional().describe('Optional notes'),
|
|
760
|
-
|
|
761
|
-
// With defaults
|
|
762
|
-
priority: z.number().default(5).describe('Priority level 1-10'),
|
|
763
|
-
|
|
764
|
-
// Enums
|
|
765
|
-
status: z.enum(['pending', 'done', 'failed']).describe('Current status'),
|
|
766
|
-
|
|
767
|
-
// Arrays
|
|
768
|
-
tags: z.array(z.string().describe('Tag name')).describe('List of tags'),
|
|
769
|
-
|
|
770
|
-
// Nested objects
|
|
771
|
-
metadata: z.object({
|
|
772
|
-
created: z.string().describe('Creation date'),
|
|
773
|
-
author: z.string().describe('Author name'),
|
|
774
|
-
}).describe('Metadata information'),
|
|
775
|
-
});
|
|
776
|
-
```
|
|
777
|
-
|
|
778
|
-
### Flexible Types with zJsonValue and zJsonAny
|
|
779
|
-
|
|
780
|
-
```typescript
|
|
781
|
-
import { z, zJsonValue, zJsonAny } from '@qodo/sdk';
|
|
782
|
-
|
|
783
|
-
const output = z.object({
|
|
784
|
-
// When you need a primitive but don't know which type
|
|
785
|
-
// Allows: string | number | boolean | null
|
|
786
|
-
dynamicValue: zJsonValue().describe('A dynamic primitive value'),
|
|
787
|
-
|
|
788
|
-
// When you need truly flexible data (including objects/arrays)
|
|
789
|
-
// Allows: primitives + arrays of primitives + objects with primitive values
|
|
790
|
-
rawData: zJsonAny().describe('Raw data in any JSON format'),
|
|
791
|
-
|
|
792
|
-
// Array of mixed primitives
|
|
793
|
-
mixedArray: z.array(zJsonValue()).describe('Array of mixed primitive values'),
|
|
794
|
-
});
|
|
795
|
-
```
|
|
796
|
-
|
|
797
|
-
### Coerced Input Types
|
|
798
|
-
|
|
799
|
-
```typescript
|
|
800
|
-
import { z, zCoerce } from '@qodo/sdk';
|
|
801
|
-
|
|
802
|
-
// For CLI-style string inputs that need type conversion
|
|
803
|
-
const args = z.object({
|
|
804
|
-
// "true"/"false" strings -> boolean
|
|
805
|
-
verbose: zCoerce.boolean().describe('Enable verbose output'),
|
|
806
|
-
|
|
807
|
-
// "123" string -> number
|
|
808
|
-
limit: zCoerce.number().describe('Result limit'),
|
|
809
|
-
|
|
810
|
-
// '["a","b"]' string -> string[]
|
|
811
|
-
files: zCoerce.jsonArray(z.string()).describe('Files to process'),
|
|
812
|
-
|
|
813
|
-
// '{"key":"value"}' string -> object
|
|
814
|
-
config: zCoerce.jsonObject({ key: z.string() }).describe('Configuration'),
|
|
815
|
-
});
|
|
816
|
-
```
|
|
817
|
-
|
|
818
|
-
---
|
|
819
|
-
|
|
820
|
-
## Event Types Reference
|
|
821
|
-
|
|
822
|
-
| Event Type | When Emitted | Key Data Fields |
|
|
823
|
-
|------------|--------------|-----------------|
|
|
824
|
-
| `sdk.init` | SDK initialized | `sdk_version`, `backend.base_url`, `model` |
|
|
825
|
-
| `sdk.run.started` | Run begins | `session_id`, `command`, `prompt_mode`, `cwd`, `dry_run?` |
|
|
826
|
-
| `sdk.message.delta` | Streaming text | `delta`, `message_id`, `role` |
|
|
827
|
-
| `sdk.message.full` | Full message update | `messages.langchain`, `messages.openai` |
|
|
828
|
-
| `sdk.progress` | Progress update | `title`, `status`, `percent` |
|
|
829
|
-
| `sdk.tool.requested` | Tool call requested | `tool_call_id`, `server_name`, `tool_name`, `tool_args`, `pending_approval` |
|
|
830
|
-
| `sdk.tool.approved` | Tool approved/denied | `tool_call_id`, `approved`, `reason` |
|
|
831
|
-
| `sdk.tool.executed` | Tool finished | `tool_call_id`, `result.isError`, `result.content`, `dry_run?` |
|
|
832
|
-
| `sdk.error` | Error occurred | `message`, `cause` |
|
|
833
|
-
| `sdk.final` | Run completed | `success`, `result.structured_output`, `result.final_output`, `meta.dry_run?`, `meta.timed_out?` |
|
|
834
|
-
|
|
835
|
-
---
|
|
836
|
-
|
|
837
|
-
## QodoSDK Options Reference
|
|
838
|
-
|
|
839
|
-
```typescript
|
|
840
|
-
interface QodoSDKOptions {
|
|
841
|
-
// Agent configuration (mutually exclusive)
|
|
842
|
-
agentFile?: string; // Path to agent.toml/yaml
|
|
843
|
-
agentContent?: string; // Raw TOML/YAML content
|
|
844
|
-
agentObject?: AIAssistantConfig; // Programmatic config
|
|
845
|
-
|
|
846
|
-
// MCP servers
|
|
847
|
-
mcpFile?: string; // Path to mcp.json
|
|
848
|
-
mcpServers?: Record<string, MCPConfig>; // Inline server configs
|
|
849
|
-
|
|
850
|
-
// Execution settings
|
|
851
|
-
model?: string; // Model override
|
|
852
|
-
projectPath?: string; // Working directory
|
|
853
|
-
additionalPaths?: string[]; // Extra accessible paths
|
|
854
|
-
|
|
855
|
-
// Tool handling
|
|
856
|
-
autoApproveTools?: boolean; // Auto-approve tools (default: true)
|
|
857
|
-
toolApproval?: (req) => Promise<boolean> | boolean; // Custom approval
|
|
858
|
-
toolMiddleware?: ToolMiddleware[]; // Pre/post execution hooks
|
|
859
|
-
|
|
860
|
-
// Session
|
|
861
|
-
contextSessionIds?: string[]; // Previous sessions for context
|
|
862
|
-
|
|
863
|
-
// Backend
|
|
864
|
-
backend?: { baseUrl?: string }; // Backend URL override
|
|
865
|
-
|
|
866
|
-
// Debugging
|
|
867
|
-
debug?: boolean; // Enable debug logging
|
|
868
|
-
logger?: QodoSDKLogger; // Custom logger
|
|
869
|
-
|
|
870
|
-
// Mode
|
|
871
|
-
interactiveMode?: boolean; // Enable interactive clarifications
|
|
872
|
-
}
|
|
873
|
-
```
|
|
874
|
-
|
|
875
|
-
---
|
|
876
|
-
|
|
877
|
-
## Common Tasks
|
|
878
|
-
|
|
879
|
-
### Adding a New Command to an Existing Agent
|
|
880
|
-
|
|
881
|
-
1. Define the command with `sdkCommand()`:
|
|
882
|
-
```typescript
|
|
883
|
-
const newCommand = sdkCommand({
|
|
884
|
-
name: 'newCommand',
|
|
885
|
-
description: 'What this command does',
|
|
886
|
-
instructions: 'Detailed instructions for the AI',
|
|
887
|
-
available_tools: ['filesystem', 'ripgrep'],
|
|
888
|
-
args: sdkArgs({
|
|
889
|
-
// Define your args
|
|
890
|
-
}),
|
|
891
|
-
output: z.object({
|
|
892
|
-
// Define your output with .describe() on every field
|
|
893
|
-
}),
|
|
894
|
-
});
|
|
895
|
-
```
|
|
896
|
-
|
|
897
|
-
2. Add to agent's commands:
|
|
898
|
-
```typescript
|
|
899
|
-
const agent = sdkAgent({
|
|
900
|
-
commands: {
|
|
901
|
-
existingCommand,
|
|
902
|
-
newCommand, // Add here
|
|
903
|
-
},
|
|
904
|
-
});
|
|
905
|
-
```
|
|
906
|
-
|
|
907
|
-
### Converting TOML to Programmatic TypeScript
|
|
908
|
-
|
|
909
|
-
Read the TOML and translate each section:
|
|
910
|
-
|
|
911
|
-
```typescript
|
|
912
|
-
// From TOML:
|
|
913
|
-
// [commands.analyze]
|
|
914
|
-
// name = "analyze"
|
|
915
|
-
// description = "Analyze code"
|
|
916
|
-
// available_tools = ["filesystem"]
|
|
917
|
-
|
|
918
|
-
// To TypeScript:
|
|
919
|
-
import { sdkCommand, sdkArgs, z } from '@qodo/sdk';
|
|
920
|
-
|
|
921
|
-
const analyze = sdkCommand({
|
|
922
|
-
name: 'analyze',
|
|
923
|
-
description: 'Analyze code',
|
|
924
|
-
available_tools: ['filesystem'],
|
|
925
|
-
args: sdkArgs({ /* from [commands.analyze.arguments] */ }),
|
|
926
|
-
output: z.object({ /* from [commands.analyze.output_schema] */ }),
|
|
927
|
-
});
|
|
928
|
-
```
|
|
929
|
-
|
|
930
|
-
### Debugging Schema Validation Errors
|
|
931
|
-
|
|
932
|
-
When you see `QodoSchemaError: output schema is missing description for: fieldName`:
|
|
933
|
-
|
|
934
|
-
1. Find the field in your Zod schema
|
|
935
|
-
2. Add `.describe('...')` to it
|
|
936
|
-
3. Check nested objects - all properties need descriptions
|
|
937
|
-
|
|
938
|
-
```typescript
|
|
939
|
-
// Before (error)
|
|
940
|
-
z.object({
|
|
941
|
-
items: z.array(z.object({
|
|
942
|
-
name: z.string(), // Missing description!
|
|
943
|
-
})),
|
|
944
|
-
})
|
|
945
|
-
|
|
946
|
-
// After (fixed)
|
|
947
|
-
z.object({
|
|
948
|
-
items: z.array(z.object({
|
|
949
|
-
name: z.string().describe('Item name'),
|
|
950
|
-
})).describe('List of items'),
|
|
951
|
-
})
|
|
952
|
-
```
|
|
953
|
-
|
|
954
|
-
---
|
|
955
|
-
|
|
956
|
-
## Additional Resources
|
|
957
|
-
|
|
958
|
-
- [assets/programmatic-agent.ts](assets/programmatic-agent.ts) - Complete working TypeScript agent template
|
|
959
|
-
- [references/builtin-tools.md](references/builtin-tools.md) - Detailed guide to filesystem, git, ripgrep, and shell tools
|
|
960
|
-
- [references/common-issues.md](references/common-issues.md) - Troubleshooting guide for common problems
|
|
961
|
-
|
|
962
|
-
### Documentation (in `docs/`)
|
|
963
|
-
|
|
964
|
-
| Feature | Doc |
|
|
965
|
-
|---------|-----|
|
|
966
|
-
| API Reference (Clients, Options, Types) | [docs/api-reference.md](../../../docs/api-reference.md) |
|
|
967
|
-
| Pipeline DSL | [docs/pipeline.md](../../../docs/pipeline.md) |
|
|
968
|
-
| Dry Run Mode | [docs/dry-run.md](../../../docs/dry-run.md) |
|
|
969
|
-
| Tool Middleware | [docs/tool-middleware.md](../../../docs/tool-middleware.md) |
|
|
970
|
-
| Structured Output | [docs/structured-output.md](../../../docs/structured-output.md) |
|
|
971
|
-
| Execution Timeouts | [docs/execution-timeouts.md](../../../docs/execution-timeouts.md) |
|
|
972
|
-
| OpenTelemetry | [docs/opentelemetry.md](../../../docs/opentelemetry.md) |
|
|
973
|
-
| Approval Policies | [docs/approval-policies.md](../../../docs/approval-policies.md) |
|
|
974
|
-
| Artifacts | [docs/artifacts.md](../../../docs/artifacts.md) |
|