@diff-review-system/drs 3.3.1 → 4.0.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/.pi/agents/describe/pr-describer.md +14 -0
- package/.pi/agents/review/unified-reviewer.md +31 -1
- package/.pi/agents/task/agents-md-updater.md +26 -0
- package/.pi/agents/task/changelog-updater.md +29 -0
- package/.pi/agents/task/review-issue-fixer.md +42 -0
- package/.pi/agents/visual/pr-explainer.md +205 -0
- package/.pi/workflows/github-pr-describe.yaml +26 -0
- package/.pi/workflows/github-pr-fix-review-issues-stacked.yaml +148 -0
- package/.pi/workflows/github-pr-post-comment.yaml +19 -0
- package/.pi/workflows/github-pr-review-post.yaml +43 -0
- package/.pi/workflows/github-pr-review.yaml +364 -0
- package/.pi/workflows/github-pr-show-changes.yaml +25 -0
- package/.pi/workflows/github-pr-update-agents-md-stacked.yaml +103 -0
- package/.pi/workflows/github-pr-visual-explain.yaml +35 -0
- package/.pi/workflows/gitlab-mr-describe.yaml +24 -0
- package/.pi/workflows/gitlab-mr-fix-review-issues-stacked.yaml +144 -0
- package/.pi/workflows/gitlab-mr-post-comment.yaml +17 -0
- package/.pi/workflows/gitlab-mr-review.yaml +364 -0
- package/.pi/workflows/gitlab-mr-show-changes.yaml +23 -0
- package/.pi/workflows/gitlab-mr-update-agents-md-stacked.yaml +100 -0
- package/.pi/workflows/gitlab-mr-visual-explain.yaml +33 -0
- package/.pi/workflows/local-changelog-update.yaml +23 -0
- package/.pi/workflows/local-fix-review-issues.yaml +111 -0
- package/.pi/workflows/local-review.yaml +24 -0
- package/.pi/workflows/local-update-agents-md.yaml +24 -0
- package/.pi/workflows/local-visual-explain.yaml +31 -0
- package/.pi/workflows/release-changelog-finalize.yaml +47 -0
- package/.pi/workflows/tag-changelog-update.yaml +26 -0
- package/README.md +281 -104
- package/dist/ci/runner.d.ts.map +1 -1
- package/dist/ci/runner.js +9 -8
- package/dist/ci/runner.js.map +1 -1
- package/dist/cli/index.js +95 -325
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +25 -23
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/run-agent.d.ts +26 -0
- package/dist/cli/run-agent.d.ts.map +1 -0
- package/dist/cli/run-agent.js +143 -0
- package/dist/cli/run-agent.js.map +1 -0
- package/dist/cli/workflow.d.ts +105 -0
- package/dist/cli/workflow.d.ts.map +1 -0
- package/dist/cli/workflow.js +3309 -0
- package/dist/cli/workflow.js.map +1 -0
- package/dist/github/client.d.ts +12 -0
- package/dist/github/client.d.ts.map +1 -1
- package/dist/github/client.js +27 -0
- package/dist/github/client.js.map +1 -1
- package/dist/github/platform-adapter.d.ts +6 -1
- package/dist/github/platform-adapter.d.ts.map +1 -1
- package/dist/github/platform-adapter.js +84 -8
- package/dist/github/platform-adapter.js.map +1 -1
- package/dist/gitlab/client.d.ts +11 -0
- package/dist/gitlab/client.d.ts.map +1 -1
- package/dist/gitlab/client.js +11 -0
- package/dist/gitlab/client.js.map +1 -1
- package/dist/gitlab/platform-adapter.d.ts +3 -1
- package/dist/gitlab/platform-adapter.d.ts.map +1 -1
- package/dist/gitlab/platform-adapter.js +32 -1
- package/dist/gitlab/platform-adapter.js.map +1 -1
- package/dist/lib/agent-id.d.ts +9 -0
- package/dist/lib/agent-id.d.ts.map +1 -0
- package/dist/lib/agent-id.js +32 -0
- package/dist/lib/agent-id.js.map +1 -0
- package/dist/lib/comment-formatter.d.ts +15 -1
- package/dist/lib/comment-formatter.d.ts.map +1 -1
- package/dist/lib/comment-formatter.js +53 -4
- package/dist/lib/comment-formatter.js.map +1 -1
- package/dist/lib/comment-manager.d.ts +4 -0
- package/dist/lib/comment-manager.d.ts.map +1 -1
- package/dist/lib/comment-manager.js +7 -1
- package/dist/lib/comment-manager.js.map +1 -1
- package/dist/lib/comment-poster.d.ts +2 -2
- package/dist/lib/comment-poster.d.ts.map +1 -1
- package/dist/lib/comment-poster.js +31 -4
- package/dist/lib/comment-poster.js.map +1 -1
- package/dist/lib/config.d.ts +160 -44
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +475 -101
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/context-compression.d.ts +10 -0
- package/dist/lib/context-compression.d.ts.map +1 -1
- package/dist/lib/context-compression.js +101 -13
- package/dist/lib/context-compression.js.map +1 -1
- package/dist/lib/context-loader.d.ts +5 -4
- package/dist/lib/context-loader.d.ts.map +1 -1
- package/dist/lib/context-loader.js +79 -7
- package/dist/lib/context-loader.js.map +1 -1
- package/dist/lib/describe-core.d.ts.map +1 -1
- package/dist/lib/describe-core.js +3 -2
- package/dist/lib/describe-core.js.map +1 -1
- package/dist/lib/description-executor.js +1 -1
- package/dist/lib/description-executor.js.map +1 -1
- package/dist/lib/diff-lines.d.ts +18 -0
- package/dist/lib/diff-lines.d.ts.map +1 -0
- package/dist/lib/diff-lines.js +40 -0
- package/dist/lib/diff-lines.js.map +1 -0
- package/dist/lib/exit.js +4 -4
- package/dist/lib/exit.js.map +1 -1
- package/dist/lib/html-artifact.d.ts +14 -0
- package/dist/lib/html-artifact.d.ts.map +1 -0
- package/dist/lib/html-artifact.js +59 -0
- package/dist/lib/html-artifact.js.map +1 -0
- package/dist/lib/issue-parser.js +3 -3
- package/dist/lib/issue-parser.js.map +1 -1
- package/dist/lib/json-output-schema.d.ts +70 -0
- package/dist/lib/json-output-schema.d.ts.map +1 -1
- package/dist/lib/json-output-schema.js +40 -0
- package/dist/lib/json-output-schema.js.map +1 -1
- package/dist/lib/logger.d.ts +1 -1
- package/dist/lib/logger.d.ts.map +1 -1
- package/dist/lib/platform-client.d.ts +26 -0
- package/dist/lib/platform-client.d.ts.map +1 -1
- package/dist/lib/review-artifact.d.ts +69 -0
- package/dist/lib/review-artifact.d.ts.map +1 -0
- package/dist/lib/review-artifact.js +171 -0
- package/dist/lib/review-artifact.js.map +1 -0
- package/dist/lib/review-core.d.ts +6 -4
- package/dist/lib/review-core.d.ts.map +1 -1
- package/dist/lib/review-core.js +88 -173
- package/dist/lib/review-core.js.map +1 -1
- package/dist/lib/review-orchestrator.d.ts +23 -0
- package/dist/lib/review-orchestrator.d.ts.map +1 -1
- package/dist/lib/review-orchestrator.js +31 -21
- package/dist/lib/review-orchestrator.js.map +1 -1
- package/dist/lib/review-usage.d.ts +4 -0
- package/dist/lib/review-usage.d.ts.map +1 -1
- package/dist/lib/review-usage.js +25 -0
- package/dist/lib/review-usage.js.map +1 -1
- package/dist/lib/trace-collector.d.ts +105 -0
- package/dist/lib/trace-collector.d.ts.map +1 -0
- package/dist/lib/trace-collector.js +255 -0
- package/dist/lib/trace-collector.js.map +1 -0
- package/dist/lib/trace-html.d.ts +3 -0
- package/dist/lib/trace-html.d.ts.map +1 -0
- package/dist/lib/trace-html.js +349 -0
- package/dist/lib/trace-html.js.map +1 -0
- package/dist/lib/workflow-artifacts.d.ts +54 -0
- package/dist/lib/workflow-artifacts.d.ts.map +1 -0
- package/dist/lib/workflow-artifacts.js +150 -0
- package/dist/lib/workflow-artifacts.js.map +1 -0
- package/dist/pi/sdk.d.ts.map +1 -1
- package/dist/pi/sdk.js +605 -16
- package/dist/pi/sdk.js.map +1 -1
- package/dist/runtime/agent-loader.d.ts +10 -6
- package/dist/runtime/agent-loader.d.ts.map +1 -1
- package/dist/runtime/agent-loader.js +55 -29
- package/dist/runtime/agent-loader.js.map +1 -1
- package/dist/runtime/built-in-paths.d.ts +1 -0
- package/dist/runtime/built-in-paths.d.ts.map +1 -1
- package/dist/runtime/built-in-paths.js +7 -0
- package/dist/runtime/built-in-paths.js.map +1 -1
- package/dist/runtime/client.d.ts +14 -0
- package/dist/runtime/client.d.ts.map +1 -1
- package/dist/runtime/client.js +87 -56
- package/dist/runtime/client.js.map +1 -1
- package/dist/runtime/path-config.d.ts +2 -2
- package/dist/runtime/path-config.d.ts.map +1 -1
- package/dist/runtime/path-config.js +8 -8
- package/dist/runtime/path-config.js.map +1 -1
- package/package.json +22 -16
- package/.pi/agents/review/documentation.md +0 -56
- package/.pi/agents/review/performance.md +0 -53
- package/.pi/agents/review/quality.md +0 -59
- package/.pi/agents/review/security.md +0 -53
- package/.pi/agents/review/style.md +0 -132
- package/dist/cli/describe-mr.d.ts +0 -11
- package/dist/cli/describe-mr.d.ts.map +0 -1
- package/dist/cli/describe-mr.js +0 -134
- package/dist/cli/describe-mr.js.map +0 -1
- package/dist/cli/describe-pr.d.ts +0 -12
- package/dist/cli/describe-pr.d.ts.map +0 -1
- package/dist/cli/describe-pr.js +0 -135
- package/dist/cli/describe-pr.js.map +0 -1
- package/dist/cli/post-comments.d.ts +0 -20
- package/dist/cli/post-comments.d.ts.map +0 -1
- package/dist/cli/post-comments.js +0 -225
- package/dist/cli/post-comments.js.map +0 -1
- package/dist/cli/review-local.d.ts +0 -13
- package/dist/cli/review-local.d.ts.map +0 -1
- package/dist/cli/review-local.integration.test.d.ts +0 -2
- package/dist/cli/review-local.integration.test.d.ts.map +0 -1
- package/dist/cli/review-local.integration.test.js +0 -343
- package/dist/cli/review-local.integration.test.js.map +0 -1
- package/dist/cli/review-local.js +0 -90
- package/dist/cli/review-local.js.map +0 -1
- package/dist/cli/review-local.live.e2e.test.d.ts +0 -2
- package/dist/cli/review-local.live.e2e.test.d.ts.map +0 -1
- package/dist/cli/review-local.live.e2e.test.js +0 -153
- package/dist/cli/review-local.live.e2e.test.js.map +0 -1
- package/dist/cli/review-local.test.d.ts +0 -2
- package/dist/cli/review-local.test.d.ts.map +0 -1
- package/dist/cli/review-local.test.js +0 -164
- package/dist/cli/review-local.test.js.map +0 -1
- package/dist/cli/review-mr.d.ts +0 -22
- package/dist/cli/review-mr.d.ts.map +0 -1
- package/dist/cli/review-mr.js +0 -181
- package/dist/cli/review-mr.js.map +0 -1
- package/dist/cli/review-mr.test.d.ts +0 -2
- package/dist/cli/review-mr.test.d.ts.map +0 -1
- package/dist/cli/review-mr.test.js +0 -142
- package/dist/cli/review-mr.test.js.map +0 -1
- package/dist/cli/review-pr.d.ts +0 -22
- package/dist/cli/review-pr.d.ts.map +0 -1
- package/dist/cli/review-pr.js +0 -181
- package/dist/cli/review-pr.js.map +0 -1
- package/dist/cli/review-pr.test.d.ts +0 -2
- package/dist/cli/review-pr.test.d.ts.map +0 -1
- package/dist/cli/review-pr.test.js +0 -137
- package/dist/cli/review-pr.test.js.map +0 -1
- package/dist/cli/review-url.d.ts +0 -35
- package/dist/cli/review-url.d.ts.map +0 -1
- package/dist/cli/review-url.js +0 -110
- package/dist/cli/review-url.js.map +0 -1
- package/dist/cli/review-url.test.d.ts +0 -2
- package/dist/cli/review-url.test.d.ts.map +0 -1
- package/dist/cli/review-url.test.js +0 -132
- package/dist/cli/review-url.test.js.map +0 -1
- package/dist/cli/show-changes.d.ts +0 -15
- package/dist/cli/show-changes.d.ts.map +0 -1
- package/dist/cli/show-changes.js +0 -184
- package/dist/cli/show-changes.js.map +0 -1
- package/dist/github/client.test.d.ts +0 -2
- package/dist/github/client.test.d.ts.map +0 -1
- package/dist/github/client.test.js +0 -206
- package/dist/github/client.test.js.map +0 -1
- package/dist/github/platform-adapter.test.d.ts +0 -2
- package/dist/github/platform-adapter.test.d.ts.map +0 -1
- package/dist/github/platform-adapter.test.js +0 -40
- package/dist/github/platform-adapter.test.js.map +0 -1
- package/dist/gitlab/diff-parser.test.d.ts +0 -2
- package/dist/gitlab/diff-parser.test.d.ts.map +0 -1
- package/dist/gitlab/diff-parser.test.js +0 -315
- package/dist/gitlab/diff-parser.test.js.map +0 -1
- package/dist/gitlab/platform-adapter.test.d.ts +0 -2
- package/dist/gitlab/platform-adapter.test.d.ts.map +0 -1
- package/dist/gitlab/platform-adapter.test.js +0 -21
- package/dist/gitlab/platform-adapter.test.js.map +0 -1
- package/dist/index.test.d.ts +0 -2
- package/dist/index.test.d.ts.map +0 -1
- package/dist/index.test.js +0 -7
- package/dist/index.test.js.map +0 -1
- package/dist/lib/code-quality-report.test.d.ts +0 -2
- package/dist/lib/code-quality-report.test.d.ts.map +0 -1
- package/dist/lib/code-quality-report.test.js +0 -327
- package/dist/lib/code-quality-report.test.js.map +0 -1
- package/dist/lib/comment-formatter.test.d.ts +0 -2
- package/dist/lib/comment-formatter.test.d.ts.map +0 -1
- package/dist/lib/comment-formatter.test.js +0 -694
- package/dist/lib/comment-formatter.test.js.map +0 -1
- package/dist/lib/comment-manager.test.d.ts +0 -2
- package/dist/lib/comment-manager.test.d.ts.map +0 -1
- package/dist/lib/comment-manager.test.js +0 -680
- package/dist/lib/comment-manager.test.js.map +0 -1
- package/dist/lib/comment-poster.test.d.ts +0 -5
- package/dist/lib/comment-poster.test.d.ts.map +0 -1
- package/dist/lib/comment-poster.test.js +0 -245
- package/dist/lib/comment-poster.test.js.map +0 -1
- package/dist/lib/config-model-overrides.test.d.ts +0 -12
- package/dist/lib/config-model-overrides.test.d.ts.map +0 -1
- package/dist/lib/config-model-overrides.test.js +0 -254
- package/dist/lib/config-model-overrides.test.js.map +0 -1
- package/dist/lib/config.test.d.ts +0 -2
- package/dist/lib/config.test.d.ts.map +0 -1
- package/dist/lib/config.test.js +0 -73
- package/dist/lib/config.test.js.map +0 -1
- package/dist/lib/context-compression.test.d.ts +0 -2
- package/dist/lib/context-compression.test.d.ts.map +0 -1
- package/dist/lib/context-compression.test.js +0 -337
- package/dist/lib/context-compression.test.js.map +0 -1
- package/dist/lib/context-loader.test.d.ts +0 -2
- package/dist/lib/context-loader.test.d.ts.map +0 -1
- package/dist/lib/context-loader.test.js +0 -207
- package/dist/lib/context-loader.test.js.map +0 -1
- package/dist/lib/cursor-fix-link.test.d.ts +0 -2
- package/dist/lib/cursor-fix-link.test.d.ts.map +0 -1
- package/dist/lib/cursor-fix-link.test.js +0 -70
- package/dist/lib/cursor-fix-link.test.js.map +0 -1
- package/dist/lib/describe-core.test.d.ts +0 -2
- package/dist/lib/describe-core.test.d.ts.map +0 -1
- package/dist/lib/describe-core.test.js +0 -208
- package/dist/lib/describe-core.test.js.map +0 -1
- package/dist/lib/describe-output-path.test.d.ts +0 -2
- package/dist/lib/describe-output-path.test.d.ts.map +0 -1
- package/dist/lib/describe-output-path.test.js +0 -51
- package/dist/lib/describe-output-path.test.js.map +0 -1
- package/dist/lib/describe-parser.test.d.ts +0 -2
- package/dist/lib/describe-parser.test.d.ts.map +0 -1
- package/dist/lib/describe-parser.test.js +0 -282
- package/dist/lib/describe-parser.test.js.map +0 -1
- package/dist/lib/description-executor.test.d.ts +0 -2
- package/dist/lib/description-executor.test.d.ts.map +0 -1
- package/dist/lib/description-executor.test.js +0 -128
- package/dist/lib/description-executor.test.js.map +0 -1
- package/dist/lib/description-formatter.test.d.ts +0 -2
- package/dist/lib/description-formatter.test.d.ts.map +0 -1
- package/dist/lib/description-formatter.test.js +0 -57
- package/dist/lib/description-formatter.test.js.map +0 -1
- package/dist/lib/diff-parser.test.d.ts +0 -2
- package/dist/lib/diff-parser.test.d.ts.map +0 -1
- package/dist/lib/diff-parser.test.js +0 -335
- package/dist/lib/diff-parser.test.js.map +0 -1
- package/dist/lib/error-comment-poster.test.d.ts +0 -2
- package/dist/lib/error-comment-poster.test.d.ts.map +0 -1
- package/dist/lib/error-comment-poster.test.js +0 -128
- package/dist/lib/error-comment-poster.test.js.map +0 -1
- package/dist/lib/exit.test.d.ts +0 -2
- package/dist/lib/exit.test.d.ts.map +0 -1
- package/dist/lib/exit.test.js +0 -120
- package/dist/lib/exit.test.js.map +0 -1
- package/dist/lib/issue-parser.test.d.ts +0 -2
- package/dist/lib/issue-parser.test.d.ts.map +0 -1
- package/dist/lib/issue-parser.test.js +0 -281
- package/dist/lib/issue-parser.test.js.map +0 -1
- package/dist/lib/json-output-schema.test.d.ts +0 -2
- package/dist/lib/json-output-schema.test.d.ts.map +0 -1
- package/dist/lib/json-output-schema.test.js +0 -92
- package/dist/lib/json-output-schema.test.js.map +0 -1
- package/dist/lib/json-output.test.d.ts +0 -2
- package/dist/lib/json-output.test.d.ts.map +0 -1
- package/dist/lib/json-output.test.js +0 -141
- package/dist/lib/json-output.test.js.map +0 -1
- package/dist/lib/logger.test.d.ts +0 -2
- package/dist/lib/logger.test.d.ts.map +0 -1
- package/dist/lib/logger.test.js +0 -324
- package/dist/lib/logger.test.js.map +0 -1
- package/dist/lib/position-validator.test.d.ts +0 -2
- package/dist/lib/position-validator.test.d.ts.map +0 -1
- package/dist/lib/position-validator.test.js +0 -128
- package/dist/lib/position-validator.test.js.map +0 -1
- package/dist/lib/prompt-budget.test.d.ts +0 -2
- package/dist/lib/prompt-budget.test.d.ts.map +0 -1
- package/dist/lib/prompt-budget.test.js +0 -55
- package/dist/lib/prompt-budget.test.js.map +0 -1
- package/dist/lib/repository-validator.test.d.ts +0 -5
- package/dist/lib/repository-validator.test.d.ts.map +0 -1
- package/dist/lib/repository-validator.test.js +0 -341
- package/dist/lib/repository-validator.test.js.map +0 -1
- package/dist/lib/review-core.test.d.ts +0 -2
- package/dist/lib/review-core.test.d.ts.map +0 -1
- package/dist/lib/review-core.test.js +0 -600
- package/dist/lib/review-core.test.js.map +0 -1
- package/dist/lib/review-orchestrator.test.d.ts +0 -2
- package/dist/lib/review-orchestrator.test.d.ts.map +0 -1
- package/dist/lib/review-orchestrator.test.js +0 -531
- package/dist/lib/review-orchestrator.test.js.map +0 -1
- package/dist/lib/review-output-path.test.d.ts +0 -2
- package/dist/lib/review-output-path.test.d.ts.map +0 -1
- package/dist/lib/review-output-path.test.js +0 -83
- package/dist/lib/review-output-path.test.js.map +0 -1
- package/dist/lib/review-parser.test.d.ts +0 -2
- package/dist/lib/review-parser.test.d.ts.map +0 -1
- package/dist/lib/review-parser.test.js +0 -130
- package/dist/lib/review-parser.test.js.map +0 -1
- package/dist/lib/review-usage.test.d.ts +0 -2
- package/dist/lib/review-usage.test.d.ts.map +0 -1
- package/dist/lib/review-usage.test.js +0 -83
- package/dist/lib/review-usage.test.js.map +0 -1
- package/dist/lib/unified-review-executor.d.ts +0 -60
- package/dist/lib/unified-review-executor.d.ts.map +0 -1
- package/dist/lib/unified-review-executor.js +0 -207
- package/dist/lib/unified-review-executor.js.map +0 -1
- package/dist/lib/unified-review-executor.test.d.ts +0 -5
- package/dist/lib/unified-review-executor.test.d.ts.map +0 -1
- package/dist/lib/unified-review-executor.test.js +0 -472
- package/dist/lib/unified-review-executor.test.js.map +0 -1
- package/dist/lib/write-json-output.test.d.ts +0 -2
- package/dist/lib/write-json-output.test.d.ts.map +0 -1
- package/dist/lib/write-json-output.test.js +0 -259
- package/dist/lib/write-json-output.test.js.map +0 -1
- package/dist/pi/sdk.test.d.ts +0 -2
- package/dist/pi/sdk.test.d.ts.map +0 -1
- package/dist/pi/sdk.test.js +0 -449
- package/dist/pi/sdk.test.js.map +0 -1
- package/dist/runtime/agent-loader.test.d.ts +0 -2
- package/dist/runtime/agent-loader.test.d.ts.map +0 -1
- package/dist/runtime/agent-loader.test.js +0 -280
- package/dist/runtime/agent-loader.test.js.map +0 -1
- package/dist/runtime/client.test.d.ts +0 -2
- package/dist/runtime/client.test.d.ts.map +0 -1
- package/dist/runtime/client.test.js +0 -523
- package/dist/runtime/client.test.js.map +0 -1
- package/dist/runtime/path-config.test.d.ts +0 -2
- package/dist/runtime/path-config.test.d.ts.map +0 -1
- package/dist/runtime/path-config.test.js +0 -112
- package/dist/runtime/path-config.test.js.map +0 -1
package/README.md
CHANGED
|
@@ -3,16 +3,17 @@
|
|
|
3
3
|
[](https://www.npmjs.com/package/@diff-review-system/drs)
|
|
4
4
|
[](LICENSE)
|
|
5
5
|
|
|
6
|
-
**
|
|
6
|
+
**Workflow-first AI code maintenance for reviews, changelogs, docs, and repository upkeep.**
|
|
7
7
|
|
|
8
|
-
DRS
|
|
8
|
+
DRS runs agentic workflows for local diffs, GitHub PRs, and GitLab MRs. Review is a first-class packaged workflow, and the same workflow engine can update changelogs, fix review findings, refresh agent guidance, post comments, and compose project-specific maintenance pipelines — all powered by Pi SDK.
|
|
9
9
|
|
|
10
10
|
## Why teams like DRS
|
|
11
11
|
|
|
12
|
-
-
|
|
13
|
-
-
|
|
12
|
+
- 🧭 **Workflow-first automation**: run packaged or project-defined DAG workflows with `drs workflow run`
|
|
13
|
+
- 🎯 **First-class review workflows**: `local-review`, `github-pr-review`, and `gitlab-mr-review` are included out of the box
|
|
14
|
+
- 🧠 **Flexible agent pipelines**: add your own project-specific `review/*` and `task/*` agents
|
|
14
15
|
- 📦 **Pi-native runtime**: in-process execution by default, no separate runtime service required
|
|
15
|
-
- ✍️ **
|
|
16
|
+
- ✍️ **Maintenance workflows**: update changelogs, fix review issues, refresh AGENTS.md-style guidance, and generate PR/MR descriptions
|
|
16
17
|
- 🧾 **Portable outputs**: inline comments, JSON artifacts, and GitLab code quality reports
|
|
17
18
|
- 🎯 **Smart context compression**: dynamic budget sizing with `contextCompression.thresholdPercent`
|
|
18
19
|
|
|
@@ -28,7 +29,7 @@ DRS helps teams catch critical issues earlier with specialized review agents, un
|
|
|
28
29
|
|
|
29
30
|
### 1. Prerequisites
|
|
30
31
|
|
|
31
|
-
- Node.js
|
|
32
|
+
- Node.js 22.19+
|
|
32
33
|
- API key for your chosen model provider (Anthropic/OpenAI/ZhipuAI/etc.)
|
|
33
34
|
|
|
34
35
|
### 2. Install DRS
|
|
@@ -49,8 +50,8 @@ drs init
|
|
|
49
50
|
### 4. Configure Environment
|
|
50
51
|
|
|
51
52
|
```bash
|
|
52
|
-
#
|
|
53
|
-
|
|
53
|
+
# Create a local env file
|
|
54
|
+
touch .env
|
|
54
55
|
|
|
55
56
|
# Edit .env and set:
|
|
56
57
|
# - GITLAB_TOKEN: Your GitLab access token (for GitLab MRs)
|
|
@@ -67,30 +68,63 @@ DRS CLI now loads `.env` automatically from your current working directory.
|
|
|
67
68
|
|
|
68
69
|
**Note**: DRS runs Pi in-process by default and does not require a remote runtime endpoint.
|
|
69
70
|
|
|
70
|
-
### 5.
|
|
71
|
+
### 5. Run Local Workflows
|
|
71
72
|
|
|
72
73
|
```bash
|
|
73
74
|
# Review unstaged changes
|
|
74
|
-
drs review
|
|
75
|
+
drs workflow run local-review
|
|
75
76
|
|
|
76
77
|
# Review staged changes
|
|
77
|
-
drs review
|
|
78
|
+
drs workflow run local-review --input staged=true
|
|
78
79
|
|
|
79
|
-
#
|
|
80
|
-
drs
|
|
80
|
+
# Update CHANGELOG.md from local changes
|
|
81
|
+
drs workflow run local-changelog-update
|
|
82
|
+
|
|
83
|
+
# Update CHANGELOG.md from the previous tag to the current tag, or explicit refs
|
|
84
|
+
drs workflow run tag-changelog-update --input from=v3.3.1 --input to=v4.0.0-rc.1
|
|
85
|
+
|
|
86
|
+
# Fix issues from the latest saved local review artifact
|
|
87
|
+
drs workflow run local-fix-review-issues
|
|
88
|
+
|
|
89
|
+
# Refresh AGENTS.md or equivalent repository guidance
|
|
90
|
+
drs workflow run local-update-agents-md
|
|
91
|
+
|
|
92
|
+
# To use project-specific agents, configure review.agents in .drs/drs.config.yaml
|
|
93
|
+
# then run the same workflow.
|
|
81
94
|
```
|
|
82
95
|
|
|
83
96
|
### Most-Used Commands
|
|
84
97
|
|
|
85
98
|
| Goal | Command |
|
|
86
99
|
|---|---|
|
|
87
|
-
| Review local unstaged changes | `drs review
|
|
88
|
-
| Review local staged changes | `drs review
|
|
89
|
-
|
|
|
90
|
-
|
|
|
91
|
-
|
|
|
92
|
-
|
|
|
93
|
-
|
|
|
100
|
+
| Review local unstaged changes | `drs workflow run local-review` |
|
|
101
|
+
| Review local staged changes | `drs workflow run local-review --input staged=true` |
|
|
102
|
+
| Update changelog from local changes | `drs workflow run local-changelog-update` |
|
|
103
|
+
| Update changelog from tag range | `drs workflow run tag-changelog-update` |
|
|
104
|
+
| Fix issues from latest saved local review artifact | `drs workflow run local-fix-review-issues` |
|
|
105
|
+
| Update AGENTS.md-style guidance | `drs workflow run local-update-agents-md` |
|
|
106
|
+
| Update changelog and review local changes | `drs workflow run local-changelog-review` |
|
|
107
|
+
| Review GitHub PR via workflow | `drs workflow run github-pr-review --input owner=<owner> --input repo=<repo> --input pr=<number>` |
|
|
108
|
+
| Review GitLab MR via workflow | `drs workflow run gitlab-mr-review --input project=<group/repo> --input mr=<number>` |
|
|
109
|
+
| Show GitHub PR review context | `drs workflow run github-pr-show-changes --input owner=<owner> --input repo=<repo> --input pr=<number>` |
|
|
110
|
+
| Show GitLab MR review context | `drs workflow run gitlab-mr-show-changes --input project=<group/repo> --input mr=<number>` |
|
|
111
|
+
| Generate visual PR explainer artifact | `drs workflow run github-pr-visual-explain --input owner=<owner> --input repo=<repo> --input pr=<number>` |
|
|
112
|
+
| Generate visual MR explainer artifact | `drs workflow run gitlab-mr-visual-explain --input project=<group/repo> --input mr=<number>` |
|
|
113
|
+
| Generate visual local diff explainer | `drs workflow run local-visual-explain` |
|
|
114
|
+
| Describe, review, and comment on GitHub PR via workflow | `drs workflow run github-pr-review --input owner=<owner> --input repo=<repo> --input pr=<number> --input describe=true --input post=true` |
|
|
115
|
+
| Describe, review, and comment on GitLab MR via workflow | `drs workflow run gitlab-mr-review --input project=<group/repo> --input mr=<number> --input describe=true --input post=true` |
|
|
116
|
+
| Describe, review, comment, and generate visual PR explainer | `drs workflow run github-pr-review --input owner=<owner> --input repo=<repo> --input pr=<number> --input describe=true --input post=true --input visual=true` |
|
|
117
|
+
| Review GitLab MR and write Code Quality report | `drs workflow run gitlab-mr-review --input project=<group/repo> --input mr=<number> --input codeQuality=true` |
|
|
118
|
+
| Describe/review/comment GitLab MR and write Code Quality report | `drs workflow run gitlab-mr-review --input project=<group/repo> --input mr=<number> --input describe=true --input post=true --input codeQuality=true` |
|
|
119
|
+
| Generate PR description | `drs workflow run github-pr-describe --input owner=<owner> --input repo=<repo> --input pr=<number>` |
|
|
120
|
+
| Generate MR description | `drs workflow run gitlab-mr-describe --input project=<group/repo> --input mr=<number>` |
|
|
121
|
+
| Post or update a PR comment | `drs workflow run github-pr-post-comment --input owner=<owner> --input repo=<repo> --input pr=<number> --input body="..." --input marker=<id>` |
|
|
122
|
+
| Post or update an MR comment | `drs workflow run gitlab-mr-post-comment --input project=<group/repo> --input mr=<number> --input body="..." --input marker=<id>` |
|
|
123
|
+
| Run any configured agent | `drs run-agent task/docs-updater --prompt "Update release notes"` |
|
|
124
|
+
| Run a configured workflow | `drs workflow run release-notes --input-file diff=.drs/diff.md` |
|
|
125
|
+
| Run the default project workflow | `drs workflow run` |
|
|
126
|
+
| List available workflows | `drs workflow list` |
|
|
127
|
+
| Show workflow inputs and steps | `drs workflow show github-pr-review` |
|
|
94
128
|
|
|
95
129
|
## Deployment Modes
|
|
96
130
|
|
|
@@ -100,54 +134,46 @@ Review code locally before pushing:
|
|
|
100
134
|
|
|
101
135
|
```bash
|
|
102
136
|
# Review local changes
|
|
103
|
-
drs review
|
|
137
|
+
drs workflow run local-review
|
|
104
138
|
|
|
105
139
|
# Review specific GitLab MR
|
|
106
|
-
drs
|
|
107
|
-
|
|
108
|
-
# Review GitLab MR and auto-generate a description (optionally post it)
|
|
109
|
-
drs review-mr --project my-org/my-repo --mr 123 --describe
|
|
110
|
-
drs review-mr --project my-org/my-repo --mr 123 --describe --post-description
|
|
111
|
-
|
|
112
|
-
# Review GitLab MR and generate code quality report
|
|
113
|
-
drs review-mr --project my-org/my-repo --mr 123 --code-quality-report gl-code-quality-report.json
|
|
114
|
-
|
|
115
|
-
# Review by PR/MR URL (auto-detect GitHub vs GitLab)
|
|
116
|
-
drs review-url https://github.com/octocat/hello-world/pull/456 --post-comments
|
|
117
|
-
drs review-url https://gitlab.com/my-org/my-repo/-/merge_requests/123 --post-comments
|
|
140
|
+
drs workflow run gitlab-mr-review --input project=my-org/my-repo --input mr=123 --input describe=true --input post=true
|
|
118
141
|
|
|
119
142
|
# Review specific GitHub PR
|
|
120
|
-
drs
|
|
143
|
+
drs workflow run github-pr-review --input owner=octocat --input repo=hello-world --input pr=456 --input describe=true --input post=true
|
|
121
144
|
|
|
122
|
-
# Review
|
|
123
|
-
drs
|
|
124
|
-
drs review-pr --owner octocat --repo hello-world --pr 456 --describe --post-description
|
|
145
|
+
# Review and generate a visual explainer artifact
|
|
146
|
+
drs workflow run github-pr-review --input owner=octocat --input repo=hello-world --input pr=456 --input describe=true --input post=true --input visual=true
|
|
125
147
|
|
|
126
|
-
#
|
|
127
|
-
drs
|
|
128
|
-
drs review-mr --project my-org/my-repo --mr 123 --ultrathink
|
|
148
|
+
# Review local staged changes
|
|
149
|
+
drs workflow run local-review --input staged=true
|
|
129
150
|
|
|
130
|
-
# Override
|
|
131
|
-
drs
|
|
151
|
+
# Override model/agent behavior through config, then run workflows
|
|
152
|
+
drs workflow run github-pr-review --input owner=octocat --input repo=hello-world --input pr=456
|
|
132
153
|
|
|
133
|
-
#
|
|
134
|
-
drs
|
|
135
|
-
drs post-comments --input review.json --owner octocat --repo hello-world --pr 456
|
|
154
|
+
# Use ultrathink with workflows
|
|
155
|
+
drs workflow run github-pr-review --input owner=octocat --input repo=hello-world --input pr=456 --ultrathink
|
|
136
156
|
|
|
137
157
|
# Show the diff context passed to agents
|
|
138
|
-
drs show-changes --owner
|
|
158
|
+
drs workflow run github-pr-show-changes --input owner=octocat --input repo=hello-world --input pr=456
|
|
139
159
|
|
|
140
160
|
# Show diff context for a single file
|
|
141
|
-
drs show-changes --owner
|
|
161
|
+
drs workflow run github-pr-show-changes --input owner=octocat --input repo=hello-world --input pr=456 --input file=src/app.ts
|
|
142
162
|
|
|
143
|
-
#
|
|
144
|
-
drs
|
|
163
|
+
# Generate self-contained HTML visual explainers
|
|
164
|
+
drs workflow run local-visual-explain
|
|
165
|
+
drs workflow run github-pr-visual-explain --input owner=octocat --input repo=hello-world --input pr=456
|
|
166
|
+
drs workflow run gitlab-mr-visual-explain --input project=my-org/my-repo --input mr=123
|
|
145
167
|
|
|
146
168
|
# Generate PR/MR descriptions on demand
|
|
147
|
-
drs
|
|
148
|
-
drs
|
|
149
|
-
drs
|
|
150
|
-
drs
|
|
169
|
+
drs workflow run github-pr-describe --input owner=octocat --input repo=hello-world --input pr=456
|
|
170
|
+
drs workflow run github-pr-describe --input owner=octocat --input repo=hello-world --input pr=456 --input post=true
|
|
171
|
+
drs workflow run gitlab-mr-describe --input project=my-org/my-repo --input mr=123
|
|
172
|
+
drs workflow run gitlab-mr-describe --input project=my-org/my-repo --input mr=123 --input post=true
|
|
173
|
+
|
|
174
|
+
# Post or update a single marked PR/MR comment
|
|
175
|
+
drs workflow run github-pr-post-comment --input owner=octocat --input repo=hello-world --input pr=456 --input body="Release notes are ready." --input marker=release-notes
|
|
176
|
+
drs workflow run gitlab-mr-post-comment --input project=my-org/my-repo --input mr=123 --input body="Release notes are ready." --input marker=release-notes
|
|
151
177
|
```
|
|
152
178
|
|
|
153
179
|
### Mode 2: GitLab CI/CD
|
|
@@ -202,6 +228,51 @@ DRS includes a **secure, pre-configured workflow** at `.github/workflows/pr-revi
|
|
|
202
228
|
- Maintainer workflow
|
|
203
229
|
- Attack prevention strategies
|
|
204
230
|
|
|
231
|
+
### Visual PR Explainer Artifacts
|
|
232
|
+
|
|
233
|
+
DRS includes visual explainer workflows that generate a self-contained HTML page for reviewers:
|
|
234
|
+
|
|
235
|
+
- `github-pr-visual-explain` writes `.drs/visual-pr-explainer.html` by default.
|
|
236
|
+
- `gitlab-mr-visual-explain` writes `.drs/visual-mr-explainer.html` by default.
|
|
237
|
+
- `local-visual-explain` writes `.drs/visual-local-explainer.html` by default.
|
|
238
|
+
|
|
239
|
+
The main review workflows also support visual artifacts:
|
|
240
|
+
|
|
241
|
+
```bash
|
|
242
|
+
drs workflow run github-pr-review \
|
|
243
|
+
--input owner=octocat \
|
|
244
|
+
--input repo=hello-world \
|
|
245
|
+
--input pr=456 \
|
|
246
|
+
--input describe=true \
|
|
247
|
+
--input post=true \
|
|
248
|
+
--input visual=true
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
The built-in `visual/pr-explainer` agent includes DRS-specific HTML generation guidance out of the box. Override `.drs/agents/visual/pr-explainer/agent.md` or configure `agents.overrides.visual/pr-explainer` to tune the output for your project. If you install an external `visual-explainer` skill, add it through `agents.overrides.visual/pr-explainer.skills` so the agent loads those richer templates and design rules.
|
|
252
|
+
|
|
253
|
+
To publish the generated page from GitHub Actions, upload it as an artifact:
|
|
254
|
+
|
|
255
|
+
```yaml
|
|
256
|
+
- name: Generate visual explainer
|
|
257
|
+
env:
|
|
258
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
259
|
+
OPENCODE_API_KEY: ${{ secrets.DRS_PROVIDER_API_KEY }}
|
|
260
|
+
run: |
|
|
261
|
+
node dist/cli/index.js workflow run github-pr-review \
|
|
262
|
+
--input owner="${{ github.event.repository.owner.login }}" \
|
|
263
|
+
--input repo="${{ github.event.repository.name }}" \
|
|
264
|
+
--input pr="${{ github.event.pull_request.number }}" \
|
|
265
|
+
--input describe=true \
|
|
266
|
+
--input post=true \
|
|
267
|
+
--input visual=true \
|
|
268
|
+
--input visualOutputPath=".drs/visual-pr-explainer.html"
|
|
269
|
+
|
|
270
|
+
- uses: actions/upload-artifact@v4
|
|
271
|
+
with:
|
|
272
|
+
name: visual-pr-explainer
|
|
273
|
+
path: .drs/visual-pr-explainer.html
|
|
274
|
+
```
|
|
275
|
+
|
|
205
276
|
## GitLab Code Quality Reports
|
|
206
277
|
|
|
207
278
|
DRS can generate GitLab-compatible code quality reports that integrate seamlessly with GitLab CI/CD. This provides an alternative (or complement) to inline MR comments.
|
|
@@ -216,21 +287,19 @@ DRS can generate GitLab-compatible code quality reports that integrate seamlessl
|
|
|
216
287
|
- **Non-intrusive**: Doesn't create discussion threads
|
|
217
288
|
|
|
218
289
|
**When to Use:**
|
|
219
|
-
- Use
|
|
290
|
+
- Use `describe=true` to update the PR/MR description before review
|
|
291
|
+
- Use `post=true` for review issues requiring discussion
|
|
220
292
|
- Use **code quality reports** (`--code-quality-report`) for comprehensive static analysis
|
|
221
293
|
- Use **both together** for maximum visibility
|
|
222
294
|
|
|
223
295
|
### CLI Usage
|
|
224
296
|
|
|
225
297
|
```bash
|
|
226
|
-
#
|
|
227
|
-
drs
|
|
228
|
-
--code-quality-report gl-code-quality-report.json
|
|
298
|
+
# Use workflow-based MR review with comments
|
|
299
|
+
drs workflow run gitlab-mr-review --input project=my-org/my-repo --input mr=123 --input describe=true --input post=true
|
|
229
300
|
|
|
230
|
-
#
|
|
231
|
-
drs
|
|
232
|
-
--post-comments \
|
|
233
|
-
--code-quality-report gl-code-quality-report.json
|
|
301
|
+
# For code quality artifacts, enable codeQuality
|
|
302
|
+
drs workflow run gitlab-mr-review --input project=my-org/my-repo --input mr=123 --input codeQuality=true
|
|
234
303
|
```
|
|
235
304
|
|
|
236
305
|
### GitLab CI Integration
|
|
@@ -244,12 +313,7 @@ code_review:
|
|
|
244
313
|
before_script:
|
|
245
314
|
- npm install -g @diff-review-system/drs
|
|
246
315
|
script:
|
|
247
|
-
- drs
|
|
248
|
-
--code-quality-report gl-code-quality-report.json
|
|
249
|
-
artifacts:
|
|
250
|
-
reports:
|
|
251
|
-
codequality: gl-code-quality-report.json
|
|
252
|
-
expire_in: 1 week
|
|
316
|
+
- drs workflow run gitlab-mr-review --input project=$CI_PROJECT_PATH --input mr=$CI_MERGE_REQUEST_IID --input describe=true --input post=true
|
|
253
317
|
only:
|
|
254
318
|
- merge_requests
|
|
255
319
|
```
|
|
@@ -295,7 +359,7 @@ DRS runs on Pi SDK as the sole review runtime.
|
|
|
295
359
|
By default, DRS starts Pi runtime in-process:
|
|
296
360
|
|
|
297
361
|
```bash
|
|
298
|
-
drs review
|
|
362
|
+
drs workflow run local-review
|
|
299
363
|
```
|
|
300
364
|
|
|
301
365
|
### Runtime Mode
|
|
@@ -304,17 +368,13 @@ DRS uses Pi in-process runtime only.
|
|
|
304
368
|
|
|
305
369
|
## Architecture
|
|
306
370
|
|
|
307
|
-
DRS uses Pi runtime wiring with markdown-based agent definitions:
|
|
371
|
+
DRS uses Pi runtime wiring with markdown-based agent definitions. Agents are addressed by fully qualified ids: `<namespace>/<name>`.
|
|
308
372
|
|
|
309
373
|
```
|
|
310
374
|
.pi/
|
|
311
375
|
└── agents/
|
|
312
376
|
└── review/
|
|
313
|
-
|
|
314
|
-
├── quality.md # Code quality expert
|
|
315
|
-
├── style.md # Style checker
|
|
316
|
-
├── performance.md # Performance analyzer
|
|
317
|
-
└── documentation.md # Documentation reviewer
|
|
377
|
+
└── unified-reviewer.md # Packaged unified reviewer
|
|
318
378
|
```
|
|
319
379
|
|
|
320
380
|
Built-in agent definitions live under `.pi/agents`.
|
|
@@ -328,15 +388,15 @@ Built-in agent definitions live under `.pi/agents`.
|
|
|
328
388
|
Create custom agents in your project:
|
|
329
389
|
|
|
330
390
|
```bash
|
|
331
|
-
#
|
|
332
|
-
mkdir -p .drs/agents/
|
|
333
|
-
cat > .drs/agents/
|
|
391
|
+
# Override the packaged unified reviewer
|
|
392
|
+
mkdir -p .drs/agents/review/unified-reviewer
|
|
393
|
+
cat > .drs/agents/review/unified-reviewer/agent.md << 'EOF'
|
|
334
394
|
---
|
|
335
|
-
description: Custom
|
|
395
|
+
description: Custom unified reviewer
|
|
336
396
|
model: anthropic/claude-sonnet-4-5-20250929
|
|
337
397
|
---
|
|
338
398
|
|
|
339
|
-
You are a
|
|
399
|
+
You are a reviewer for this specific application.
|
|
340
400
|
|
|
341
401
|
## Project-Specific Rules
|
|
342
402
|
[Add your custom rules here]
|
|
@@ -348,9 +408,9 @@ EOF
|
|
|
348
408
|
Add project-specific guidance to a built-in agent without replacing its prompt:
|
|
349
409
|
|
|
350
410
|
```bash
|
|
351
|
-
mkdir -p .drs/agents/
|
|
352
|
-
cat > .drs/agents/
|
|
353
|
-
#
|
|
411
|
+
mkdir -p .drs/agents/review/unified-reviewer
|
|
412
|
+
cat > .drs/agents/review/unified-reviewer/context.md << 'EOF'
|
|
413
|
+
# Unified Reviewer Context
|
|
354
414
|
- Flag functions over 200 lines as HIGH
|
|
355
415
|
- We use TypeORM — flag raw SQL queries
|
|
356
416
|
EOF
|
|
@@ -368,11 +428,11 @@ Prioritize correctness, safety, and clarity.
|
|
|
368
428
|
|
|
369
429
|
### Create New Custom Agents
|
|
370
430
|
|
|
371
|
-
Add agents that don't exist in the built-in set:
|
|
431
|
+
Add review agents that don't exist in the built-in set:
|
|
372
432
|
|
|
373
433
|
```bash
|
|
374
|
-
mkdir -p .drs/agents/api-reviewer
|
|
375
|
-
cat > .drs/agents/api-reviewer/agent.md << 'EOF'
|
|
434
|
+
mkdir -p .drs/agents/review/api-reviewer
|
|
435
|
+
cat > .drs/agents/review/api-reviewer/agent.md << 'EOF'
|
|
376
436
|
---
|
|
377
437
|
description: REST API contract reviewer
|
|
378
438
|
tools:
|
|
@@ -383,24 +443,111 @@ Review REST API changes for backward compatibility.
|
|
|
383
443
|
EOF
|
|
384
444
|
```
|
|
385
445
|
|
|
386
|
-
Then add to config: `agents: [
|
|
446
|
+
Then add to config: `review.agents: [review/unified-reviewer, review/api-reviewer]`
|
|
447
|
+
|
|
448
|
+
For non-review work, create agents in any namespace and run them directly:
|
|
449
|
+
|
|
450
|
+
```bash
|
|
451
|
+
mkdir -p .drs/agents/task/docs-updater
|
|
452
|
+
cat > .drs/agents/task/docs-updater/agent.md << 'EOF'
|
|
453
|
+
---
|
|
454
|
+
description: Documentation update assistant
|
|
455
|
+
tools:
|
|
456
|
+
Read: true
|
|
457
|
+
Grep: true
|
|
458
|
+
---
|
|
459
|
+
Update documentation based on the user's request.
|
|
460
|
+
EOF
|
|
461
|
+
|
|
462
|
+
drs run-agent task/docs-updater --prompt "Summarize the latest API changes"
|
|
463
|
+
```
|
|
464
|
+
|
|
465
|
+
You can also put the run prompt and output behavior in config, then invoke only the agent id:
|
|
466
|
+
|
|
467
|
+
```yaml
|
|
468
|
+
agents:
|
|
469
|
+
overrides:
|
|
470
|
+
task/docs-updater:
|
|
471
|
+
run:
|
|
472
|
+
prompt: "Summarize the latest API changes"
|
|
473
|
+
output: .drs/docs-summary.json
|
|
474
|
+
json: true
|
|
475
|
+
```
|
|
476
|
+
|
|
477
|
+
```bash
|
|
478
|
+
drs run task/docs-updater
|
|
479
|
+
```
|
|
480
|
+
|
|
481
|
+
### Configure Workflows
|
|
482
|
+
|
|
483
|
+
Workflows compose agents and built-in actions into a dependency graph. They are useful when one agent produces an artifact that another agent or action consumes.
|
|
484
|
+
|
|
485
|
+
Define reusable project workflows in `.drs/workflows/*.yaml`.
|
|
486
|
+
|
|
487
|
+
```yaml
|
|
488
|
+
name: release-notes
|
|
489
|
+
inputs:
|
|
490
|
+
diff:
|
|
491
|
+
file: .drs/diff.md
|
|
492
|
+
nodes:
|
|
493
|
+
summarize:
|
|
494
|
+
agent: task/change-summarizer
|
|
495
|
+
input: |
|
|
496
|
+
Summarize these changes:
|
|
497
|
+
|
|
498
|
+
{{inputs.diff}}
|
|
499
|
+
output: summary
|
|
500
|
+
write-summary:
|
|
501
|
+
action: write
|
|
502
|
+
needs: [summarize]
|
|
503
|
+
input: "{{artifacts.summary}}"
|
|
504
|
+
writes: RELEASE_NOTES.md
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
```bash
|
|
508
|
+
drs workflow run release-notes
|
|
509
|
+
drs workflow run # uses workflow.default from .drs/drs.config.yaml when configured
|
|
510
|
+
drs workflow run release-notes --input-file diff=changes.md --json
|
|
511
|
+
```
|
|
512
|
+
|
|
513
|
+
Select the default workflow in `.drs/drs.config.yaml`:
|
|
514
|
+
|
|
515
|
+
```yaml
|
|
516
|
+
workflow:
|
|
517
|
+
default: local-changelog-review
|
|
518
|
+
```
|
|
519
|
+
|
|
520
|
+
See [docs/WORKFLOWS.md](docs/WORKFLOWS.md) for the full workflow configuration reference.
|
|
387
521
|
|
|
388
522
|
### Configure Review Behavior
|
|
389
523
|
|
|
390
524
|
Edit `.drs/drs.config.yaml`:
|
|
391
525
|
|
|
392
526
|
```yaml
|
|
527
|
+
agents:
|
|
528
|
+
default:
|
|
529
|
+
model: zhipuai/glm-4.7
|
|
530
|
+
skills: []
|
|
531
|
+
namespaces:
|
|
532
|
+
review:
|
|
533
|
+
model: anthropic/claude-sonnet-4-5-20250929
|
|
534
|
+
task:
|
|
535
|
+
model: openai/gpt-4o
|
|
536
|
+
overrides:
|
|
537
|
+
task/docs-updater:
|
|
538
|
+
run:
|
|
539
|
+
promptFile: prompts/docs-update.md
|
|
540
|
+
output: .drs/docs-update.json
|
|
541
|
+
json: true
|
|
542
|
+
|
|
393
543
|
review:
|
|
394
544
|
agents:
|
|
395
|
-
- unified-reviewer
|
|
396
|
-
- security
|
|
397
|
-
- quality
|
|
545
|
+
- review/unified-reviewer
|
|
398
546
|
ignorePatterns:
|
|
399
547
|
- "*.test.ts"
|
|
400
548
|
- "*.md"
|
|
401
549
|
describe:
|
|
402
550
|
enabled: true
|
|
403
|
-
postDescription: false
|
|
404
551
|
cursorFixLinks:
|
|
405
552
|
enabled: false
|
|
406
553
|
# workspace: my-repo
|
|
@@ -419,14 +566,13 @@ describe:
|
|
|
419
566
|
```
|
|
420
567
|
|
|
421
568
|
Notes:
|
|
422
|
-
-
|
|
423
|
-
-
|
|
424
|
-
- `review.cursorFixLinks.enabled` adds opt-in `Fix in Cursor` links to posted review comments via Cursor's web deeplink bridge. CLI flags override config: `--fix-in-cursor` / `--skip-fix-in-cursor`.
|
|
425
|
-
- `describe.model` is used by `describe-mr`/`describe-pr` and by review-driven descriptions.
|
|
569
|
+
- Review orchestration is workflow-first in v4: use `drs workflow run ...` for local/PR/MR review.
|
|
570
|
+
- `describe.model` is used by describe workflows and by review-driven descriptions.
|
|
426
571
|
- `contextCompression.thresholdPercent` sets a context-window-aware budget (e.g. `0.15` means 15%).
|
|
427
572
|
- `contextCompression.maxTokens` is the fallback cap when context window metadata is unavailable.
|
|
428
|
-
- `review.agents`
|
|
429
|
-
-
|
|
573
|
+
- `review.agents` controls exactly which review agents run.
|
|
574
|
+
- Packaged built-in review agent ID: `review/unified-reviewer`.
|
|
575
|
+
- Add project-specific review agents under `.drs/agents/review/<name>/agent.md` and include them in `review.agents`.
|
|
430
576
|
- Unknown agent names fail fast with a validation error before review execution starts.
|
|
431
577
|
|
|
432
578
|
### Model Pricing Overrides (Cost Reporting)
|
|
@@ -504,11 +650,35 @@ contextCompression:
|
|
|
504
650
|
softBufferTokens: 1500
|
|
505
651
|
hardBufferTokens: 1000
|
|
506
652
|
tokenEstimateDivisor: 4
|
|
653
|
+
summaryThresholdMultiplier: 3 # use summary-only context above hard limit * multiplier
|
|
507
654
|
```
|
|
508
655
|
|
|
656
|
+
### Runtime Timeouts and Provider Retry
|
|
657
|
+
|
|
658
|
+
To prevent hung reviews, configure runtime-level call/stream timeouts and provider request retry limits:
|
|
659
|
+
|
|
660
|
+
```yaml
|
|
661
|
+
pi:
|
|
662
|
+
runtime:
|
|
663
|
+
operationTimeoutMs: 300000 # timeout for create/prompt/messages calls
|
|
664
|
+
streamTimeoutMs: 900000 # total timeout while waiting for agent completion
|
|
665
|
+
streamPollIntervalMs: 2000 # polling cadence for session messages
|
|
666
|
+
retry:
|
|
667
|
+
provider:
|
|
668
|
+
timeoutMs: 45000 # provider request timeout passed to Pi SDK
|
|
669
|
+
maxRetries: 2 # provider request retries (Pi SDK)
|
|
670
|
+
maxRetryDelayMs: 15000 # max backoff delay between retries
|
|
671
|
+
```
|
|
672
|
+
|
|
673
|
+
Environment variables override runtime timeout fields:
|
|
674
|
+
|
|
675
|
+
- `DRS_RUNTIME_OPERATION_TIMEOUT_MS`
|
|
676
|
+
- `DRS_RUNTIME_STREAM_TIMEOUT_MS`
|
|
677
|
+
- `DRS_RUNTIME_STREAM_POLL_INTERVAL_MS`
|
|
678
|
+
|
|
509
679
|
### Pi-Native Skill Discovery
|
|
510
680
|
|
|
511
|
-
DRS auto-discovers
|
|
681
|
+
DRS auto-discovers skills from these directories when `agents.paths.skills` is not set:
|
|
512
682
|
|
|
513
683
|
1. `.drs/skills` (project-level overrides)
|
|
514
684
|
2. `.agents/skills` (legacy/shared project skills)
|
|
@@ -528,12 +698,12 @@ Example layout:
|
|
|
528
698
|
db-indexing/SKILL.md # Additional Pi-native skill
|
|
529
699
|
```
|
|
530
700
|
|
|
531
|
-
To force a single custom skills directory, set `
|
|
701
|
+
To force a single custom skills directory, set `agents.paths.skills`:
|
|
532
702
|
|
|
533
703
|
```yaml
|
|
534
|
-
|
|
704
|
+
agents:
|
|
535
705
|
paths:
|
|
536
|
-
skills: config/
|
|
706
|
+
skills: config/agent-skills
|
|
537
707
|
```
|
|
538
708
|
|
|
539
709
|
## Review Domains
|
|
@@ -590,7 +760,10 @@ OPENAI_API_KEY=sk-xxx # For OpenAI models
|
|
|
590
760
|
|
|
591
761
|
# Optional
|
|
592
762
|
GITLAB_URL=https://gitlab.com
|
|
593
|
-
|
|
763
|
+
DRS_DEFAULT_MODEL=anthropic/claude-sonnet-4-5-20250929
|
|
764
|
+
DRS_AGENT_REVIEW_UNIFIED_REVIEWER_MODEL=anthropic/claude-opus-4-5-20251101
|
|
765
|
+
# Configure review agents in .drs/drs.config.yaml via review.agents.
|
|
766
|
+
# Legacy REVIEW_AGENTS is still accepted as a compatibility alias.
|
|
594
767
|
REVIEW_THINKING_LEVEL=medium # Reasoning effort: off, minimal, low, medium, high, xhigh
|
|
595
768
|
```
|
|
596
769
|
|
|
@@ -614,13 +787,16 @@ npm run build
|
|
|
614
787
|
# Run tests
|
|
615
788
|
npm test
|
|
616
789
|
|
|
617
|
-
#
|
|
618
|
-
npm run dev
|
|
790
|
+
# Run the CLI from TypeScript once
|
|
791
|
+
npm run dev:cli -- workflow list
|
|
792
|
+
|
|
793
|
+
# Watch-mode CLI entrypoint
|
|
794
|
+
npm run dev -- workflow list
|
|
619
795
|
```
|
|
620
796
|
|
|
621
797
|
## Requirements
|
|
622
798
|
|
|
623
|
-
- Node.js
|
|
799
|
+
- Node.js 22.19+
|
|
624
800
|
- API key for your selected provider (Anthropic/OpenAI/ZhipuAI/etc.)
|
|
625
801
|
- GitLab access token (for GitLab MR reviews)
|
|
626
802
|
- GitHub access token (for GitHub PR reviews)
|
|
@@ -638,6 +814,7 @@ Apache-2.0
|
|
|
638
814
|
- [GitHub Actions Integration Guide](docs/GITHUB_ACTIONS_INTEGRATION.md) - GitHub Actions workflow setup
|
|
639
815
|
- [External PR Security Guide](docs/EXTERNAL_PR_SECURITY.md) - Security controls for external contributors
|
|
640
816
|
- [Custom Agents & Skills Guide](docs/CUSTOM_AGENTS.md) - Custom agents, context, skills, and per-agent tools
|
|
817
|
+
- [Workflows Guide](docs/WORKFLOWS.md) - Compose agents and actions into dependency graphs
|
|
641
818
|
- [Model Overrides Guide](docs/MODEL_OVERRIDES.md) - Per-agent model configuration
|
|
642
819
|
- [Pi Documentation](https://github.com/badlogic/pi-mono)
|
|
643
820
|
|
package/dist/ci/runner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/ci/runner.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,aAAa,CAgBnD;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/ci/runner.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,aAAa,CAgBnD;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAyDjD;AAED;;GAEG;AACH,wBAAgB,IAAI,IAAI,OAAO,CAE9B"}
|
package/dist/ci/runner.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { loadConfig, validateConfig } from '../lib/config.js';
|
|
2
2
|
import { exitProcess } from '../lib/exit.js';
|
|
3
3
|
import { getLogger } from '../lib/logger.js';
|
|
4
|
-
import {
|
|
4
|
+
import { runWorkflow } from '../cli/workflow.js';
|
|
5
5
|
/**
|
|
6
6
|
* Detect CI environment from environment variables
|
|
7
7
|
*/
|
|
@@ -56,13 +56,14 @@ export async function runCIReview() {
|
|
|
56
56
|
log.info(`Project: ${env.projectId} | MR: !${env.mrIid} | Branch: ${env.sourceBranch} → ${env.targetBranch}`);
|
|
57
57
|
// Run review
|
|
58
58
|
try {
|
|
59
|
-
await
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
59
|
+
await runWorkflow(config, 'gitlab-mr-review', {
|
|
60
|
+
inputs: {
|
|
61
|
+
project: env.projectId,
|
|
62
|
+
mr: String(env.mrIid),
|
|
63
|
+
describe: 'true',
|
|
64
|
+
post: 'true',
|
|
65
|
+
},
|
|
66
|
+
workingDir: projectDir,
|
|
66
67
|
});
|
|
67
68
|
log.info('Review complete');
|
|
68
69
|
}
|
package/dist/ci/runner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/ci/runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/ci/runner.ts"],"names":[],"mappings":"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"}
|