@diff-review-system/drs 4.0.0-rc.4 → 4.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.pi/agents/describe/pr-describer.md +14 -0
- package/.pi/agents/review/unified-reviewer.md +33 -7
- package/.pi/agents/task/agents-md-updater.md +3 -1
- package/.pi/agents/task/review-assistant.md +22 -0
- package/.pi/agents/task/review-issue-fixer.md +18 -1
- package/.pi/agents/visual/pr-explainer.md +205 -0
- package/.pi/workflows/github-pr-describe.yaml +10 -7
- package/.pi/workflows/github-pr-fix-review-issues-stacked.yaml +154 -0
- package/.pi/workflows/github-pr-post-comment.yaml +10 -10
- package/.pi/workflows/github-pr-review-post.yaml +18 -8
- package/.pi/workflows/github-pr-review.yaml +354 -7
- package/.pi/workflows/github-pr-show-changes.yaml +8 -8
- package/.pi/workflows/github-pr-update-agents-md-stacked.yaml +103 -0
- package/.pi/workflows/github-pr-visual-explain.yaml +80 -0
- package/.pi/workflows/gitlab-mr-describe.yaml +8 -5
- package/.pi/workflows/gitlab-mr-fix-review-issues-stacked.yaml +150 -0
- package/.pi/workflows/gitlab-mr-post-comment.yaml +8 -8
- package/.pi/workflows/gitlab-mr-review.yaml +354 -5
- package/.pi/workflows/gitlab-mr-show-changes.yaml +6 -6
- package/.pi/workflows/gitlab-mr-update-agents-md-stacked.yaml +100 -0
- package/.pi/workflows/gitlab-mr-visual-explain.yaml +78 -0
- package/.pi/workflows/local-fix-review-issues.yaml +89 -13
- package/.pi/workflows/local-review.yaml +15 -2
- package/.pi/workflows/local-update-agents-md.yaml +1 -1
- package/.pi/workflows/local-visual-explain.yaml +76 -0
- package/.pi/workflows/release-changelog-finalize.yaml +47 -0
- package/.pi/workflows/tag-changelog-update.yaml +4 -4
- package/.pi/workflows/temporal-control-smoke.yaml +63 -0
- package/README.md +130 -27
- package/dist/ci/runner.d.ts.map +1 -1
- package/dist/ci/runner.js +3 -1
- package/dist/ci/runner.js.map +1 -1
- package/dist/cli/index.js +258 -9
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init.d.ts +6 -1
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +29 -10
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/run-agent.d.ts +4 -7
- package/dist/cli/run-agent.d.ts.map +1 -1
- package/dist/cli/run-agent.js +4 -0
- package/dist/cli/run-agent.js.map +1 -1
- package/dist/cli/workflow-executor-selection.d.ts +3 -0
- package/dist/cli/workflow-executor-selection.d.ts.map +1 -0
- package/dist/cli/workflow-executor-selection.js +15 -0
- package/dist/cli/workflow-executor-selection.js.map +1 -0
- package/dist/cli/workflow.d.ts +76 -26
- package/dist/cli/workflow.d.ts.map +1 -1
- package/dist/cli/workflow.js +1624 -192
- package/dist/cli/workflow.js.map +1 -1
- 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-result.d.ts +8 -0
- package/dist/lib/agent-result.d.ts.map +1 -0
- package/dist/lib/agent-result.js +2 -0
- package/dist/lib/agent-result.js.map +1 -0
- package/dist/lib/comment-formatter.d.ts +8 -0
- package/dist/lib/comment-formatter.d.ts.map +1 -1
- package/dist/lib/comment-formatter.js +12 -4
- package/dist/lib/comment-formatter.js.map +1 -1
- package/dist/lib/comment-poster.d.ts.map +1 -1
- package/dist/lib/comment-poster.js +28 -1
- package/dist/lib/comment-poster.js.map +1 -1
- package/dist/lib/config.d.ts +71 -11
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +163 -28
- 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 +2 -1
- package/dist/lib/context-loader.d.ts.map +1 -1
- package/dist/lib/context-loader.js +70 -1
- 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/diff-lines.d.ts +9 -0
- package/dist/lib/diff-lines.d.ts.map +1 -1
- package/dist/lib/diff-lines.js +17 -9
- package/dist/lib/diff-lines.js.map +1 -1
- 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/output-paths.d.ts +0 -1
- package/dist/lib/output-paths.d.ts.map +1 -1
- package/dist/lib/output-paths.js +0 -1
- package/dist/lib/output-paths.js.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/project-setup.d.ts +10 -0
- package/dist/lib/project-setup.d.ts.map +1 -0
- package/dist/lib/project-setup.js +25 -0
- package/dist/lib/project-setup.js.map +1 -0
- package/dist/lib/review-artifact-store.d.ts +16 -0
- package/dist/lib/review-artifact-store.d.ts.map +1 -0
- package/dist/lib/review-artifact-store.js +84 -0
- package/dist/lib/review-artifact-store.js.map +1 -0
- 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 +172 -0
- package/dist/lib/review-artifact.js.map +1 -0
- package/dist/lib/review-core.d.ts +7 -4
- package/dist/lib/review-core.d.ts.map +1 -1
- package/dist/lib/review-core.js +82 -165
- 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 +20 -13
- package/dist/lib/review-orchestrator.js.map +1 -1
- package/dist/lib/review-parser.d.ts.map +1 -1
- package/dist/lib/review-parser.js +15 -12
- package/dist/lib/review-parser.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/skills.d.ts +16 -0
- package/dist/lib/skills.d.ts.map +1 -0
- package/dist/lib/skills.js +140 -0
- package/dist/lib/skills.js.map +1 -0
- 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/artifact-store.d.ts +71 -0
- package/dist/lib/workflow/artifact-store.d.ts.map +1 -0
- package/dist/lib/workflow/artifact-store.js +121 -0
- package/dist/lib/workflow/artifact-store.js.map +1 -0
- package/dist/lib/workflow/compiled-plan.d.ts +87 -0
- package/dist/lib/workflow/compiled-plan.d.ts.map +1 -0
- package/dist/lib/workflow/compiled-plan.js +62 -0
- package/dist/lib/workflow/compiled-plan.js.map +1 -0
- package/dist/lib/workflow/executor.d.ts +18 -0
- package/dist/lib/workflow/executor.d.ts.map +1 -0
- package/dist/lib/workflow/executor.js +2 -0
- package/dist/lib/workflow/executor.js.map +1 -0
- package/dist/lib/workflow/graph.d.ts +30 -0
- package/dist/lib/workflow/graph.d.ts.map +1 -0
- package/dist/lib/workflow/graph.js +139 -0
- package/dist/lib/workflow/graph.js.map +1 -0
- package/dist/lib/workflow/input.d.ts +4 -0
- package/dist/lib/workflow/input.d.ts.map +1 -0
- package/dist/lib/workflow/input.js +4 -0
- package/dist/lib/workflow/input.js.map +1 -0
- package/dist/lib/workflow/node-executor.d.ts +19 -0
- package/dist/lib/workflow/node-executor.d.ts.map +1 -0
- package/dist/lib/workflow/node-executor.js +2 -0
- package/dist/lib/workflow/node-executor.js.map +1 -0
- package/dist/lib/workflow/planning.d.ts +51 -0
- package/dist/lib/workflow/planning.d.ts.map +1 -0
- package/dist/lib/workflow/planning.js +814 -0
- package/dist/lib/workflow/planning.js.map +1 -0
- package/dist/lib/workflow/types.d.ts +66 -0
- package/dist/lib/workflow/types.d.ts.map +1 -0
- package/dist/lib/workflow/types.js +2 -0
- package/dist/lib/workflow/types.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/lib/write-json-output.d.ts.map +1 -1
- package/dist/lib/write-json-output.js +3 -8
- package/dist/lib/write-json-output.js.map +1 -1
- package/dist/pi/sdk.d.ts.map +1 -1
- package/dist/pi/sdk.js +576 -8
- package/dist/pi/sdk.js.map +1 -1
- package/dist/runtime/agent-loader.js +2 -2
- 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 +2 -0
- package/dist/runtime/client.d.ts.map +1 -1
- package/dist/runtime/client.js +11 -5
- package/dist/runtime/client.js.map +1 -1
- package/dist/temporal/activities.d.ts +26 -0
- package/dist/temporal/activities.d.ts.map +1 -0
- package/dist/temporal/activities.js +219 -0
- package/dist/temporal/activities.js.map +1 -0
- package/dist/temporal/config.d.ts +4 -0
- package/dist/temporal/config.d.ts.map +1 -0
- package/dist/temporal/config.js +36 -0
- package/dist/temporal/config.js.map +1 -0
- package/dist/temporal/executor.d.ts +7 -0
- package/dist/temporal/executor.d.ts.map +1 -0
- package/dist/temporal/executor.js +233 -0
- package/dist/temporal/executor.js.map +1 -0
- package/dist/temporal/retry-policy.d.ts +28 -0
- package/dist/temporal/retry-policy.d.ts.map +1 -0
- package/dist/temporal/retry-policy.js +56 -0
- package/dist/temporal/retry-policy.js.map +1 -0
- package/dist/temporal/types.d.ts +86 -0
- package/dist/temporal/types.d.ts.map +1 -0
- package/dist/temporal/types.js +2 -0
- package/dist/temporal/types.js.map +1 -0
- package/dist/temporal/worker.d.ts +3 -0
- package/dist/temporal/worker.d.ts.map +1 -0
- package/dist/temporal/worker.js +18 -0
- package/dist/temporal/worker.js.map +1 -0
- package/dist/temporal/workflow-id.d.ts +27 -0
- package/dist/temporal/workflow-id.d.ts.map +1 -0
- package/dist/temporal/workflow-id.js +53 -0
- package/dist/temporal/workflow-id.js.map +1 -0
- package/dist/temporal/workflows.d.ts +6 -0
- package/dist/temporal/workflows.d.ts.map +1 -0
- package/dist/temporal/workflows.js +342 -0
- package/dist/temporal/workflows.js.map +1 -0
- package/package.json +26 -15
- package/.pi/workflows/github-pr-describe-post.yaml +0 -24
- package/.pi/workflows/gitlab-mr-describe-post.yaml +0 -22
- package/.pi/workflows/gitlab-mr-review-code-quality.yaml +0 -31
- package/.pi/workflows/gitlab-mr-review-post-code-quality.yaml +0 -40
- package/.pi/workflows/gitlab-mr-review-post.yaml +0 -30
- package/.pi/workflows/local-staged-review.yaml +0 -17
- package/dist/cli/run-agent.test.d.ts +0 -2
- package/dist/cli/run-agent.test.d.ts.map +0 -1
- package/dist/cli/run-agent.test.js +0 -204
- package/dist/cli/run-agent.test.js.map +0 -1
- package/dist/cli/workflow.test.d.ts +0 -2
- package/dist/cli/workflow.test.d.ts.map +0 -1
- package/dist/cli/workflow.test.js +0 -1410
- package/dist/cli/workflow.test.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 -727
- 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 -255
- package/dist/lib/comment-poster.test.js.map +0 -1
- package/dist/lib/config-model-overrides.test.d.ts +0 -2
- package/dist/lib/config-model-overrides.test.d.ts.map +0 -1
- package/dist/lib/config-model-overrides.test.js +0 -218
- 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 -353
- 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 -212
- 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 -135
- 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-lines.test.d.ts +0 -2
- package/dist/lib/diff-lines.test.d.ts.map +0 -1
- package/dist/lib/diff-lines.test.js +0 -13
- package/dist/lib/diff-lines.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 -614
- 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 -552
- 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 -58
- package/dist/lib/unified-review-executor.d.ts.map +0 -1
- package/dist/lib/unified-review-executor.js +0 -201
- 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 -488
- 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 -277
- 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 -772
- 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
|
@@ -29,7 +29,7 @@ DRS runs agentic workflows for local diffs, GitHub PRs, and GitLab MRs. Review i
|
|
|
29
29
|
|
|
30
30
|
### 1. Prerequisites
|
|
31
31
|
|
|
32
|
-
- Node.js
|
|
32
|
+
- Node.js 22.19+
|
|
33
33
|
- API key for your chosen model provider (Anthropic/OpenAI/ZhipuAI/etc.)
|
|
34
34
|
|
|
35
35
|
### 2. Install DRS
|
|
@@ -50,8 +50,8 @@ drs init
|
|
|
50
50
|
### 4. Configure Environment
|
|
51
51
|
|
|
52
52
|
```bash
|
|
53
|
-
#
|
|
54
|
-
|
|
53
|
+
# Create a local env file
|
|
54
|
+
touch .env
|
|
55
55
|
|
|
56
56
|
# Edit .env and set:
|
|
57
57
|
# - GITLAB_TOKEN: Your GitLab access token (for GitLab MRs)
|
|
@@ -75,7 +75,7 @@ DRS CLI now loads `.env` automatically from your current working directory.
|
|
|
75
75
|
drs workflow run local-review
|
|
76
76
|
|
|
77
77
|
# Review staged changes
|
|
78
|
-
drs workflow run local-staged
|
|
78
|
+
drs workflow run local-review --input staged=true
|
|
79
79
|
|
|
80
80
|
# Update CHANGELOG.md from local changes
|
|
81
81
|
drs workflow run local-changelog-update
|
|
@@ -83,8 +83,8 @@ drs workflow run local-changelog-update
|
|
|
83
83
|
# Update CHANGELOG.md from the previous tag to the current tag, or explicit refs
|
|
84
84
|
drs workflow run tag-changelog-update --input from=v3.3.1 --input to=v4.0.0-rc.1
|
|
85
85
|
|
|
86
|
-
# Fix issues from
|
|
87
|
-
drs workflow run local-fix-review-issues
|
|
86
|
+
# Fix issues from the latest saved local review artifact
|
|
87
|
+
drs workflow run local-fix-review-issues
|
|
88
88
|
|
|
89
89
|
# Refresh AGENTS.md or equivalent repository guidance
|
|
90
90
|
drs workflow run local-update-agents-md
|
|
@@ -98,20 +98,24 @@ drs workflow run local-update-agents-md
|
|
|
98
98
|
| Goal | Command |
|
|
99
99
|
|---|---|
|
|
100
100
|
| Review local unstaged changes | `drs workflow run local-review` |
|
|
101
|
-
| Review local staged changes | `drs workflow run local-staged
|
|
101
|
+
| Review local staged changes | `drs workflow run local-review --input staged=true` |
|
|
102
102
|
| Update changelog from local changes | `drs workflow run local-changelog-update` |
|
|
103
103
|
| Update changelog from tag range | `drs workflow run tag-changelog-update` |
|
|
104
|
-
| Fix issues from saved review
|
|
104
|
+
| Fix issues from latest saved local review artifact | `drs workflow run local-fix-review-issues` |
|
|
105
105
|
| Update AGENTS.md-style guidance | `drs workflow run local-update-agents-md` |
|
|
106
106
|
| Update changelog and review local changes | `drs workflow run local-changelog-review` |
|
|
107
107
|
| Review GitHub PR via workflow | `drs workflow run github-pr-review --input owner=<owner> --input repo=<repo> --input pr=<number>` |
|
|
108
108
|
| Review GitLab MR via workflow | `drs workflow run gitlab-mr-review --input project=<group/repo> --input mr=<number>` |
|
|
109
109
|
| Show GitHub PR review context | `drs workflow run github-pr-show-changes --input owner=<owner> --input repo=<repo> --input pr=<number>` |
|
|
110
110
|
| Show GitLab MR review context | `drs workflow run gitlab-mr-show-changes --input project=<group/repo> --input mr=<number>` |
|
|
111
|
-
|
|
|
112
|
-
|
|
|
113
|
-
|
|
|
114
|
-
|
|
|
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` |
|
|
115
119
|
| Generate PR description | `drs workflow run github-pr-describe --input owner=<owner> --input repo=<repo> --input pr=<number>` |
|
|
116
120
|
| Generate MR description | `drs workflow run gitlab-mr-describe --input project=<group/repo> --input mr=<number>` |
|
|
117
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>` |
|
|
@@ -120,6 +124,7 @@ drs workflow run local-update-agents-md
|
|
|
120
124
|
| Run a configured workflow | `drs workflow run release-notes --input-file diff=.drs/diff.md` |
|
|
121
125
|
| Run the default project workflow | `drs workflow run` |
|
|
122
126
|
| List available workflows | `drs workflow list` |
|
|
127
|
+
| Show workflow inputs and steps | `drs workflow show github-pr-review` |
|
|
123
128
|
|
|
124
129
|
## Deployment Modes
|
|
125
130
|
|
|
@@ -132,13 +137,16 @@ Review code locally before pushing:
|
|
|
132
137
|
drs workflow run local-review
|
|
133
138
|
|
|
134
139
|
# Review specific GitLab MR
|
|
135
|
-
drs workflow run gitlab-mr-review
|
|
140
|
+
drs workflow run gitlab-mr-review --input project=my-org/my-repo --input mr=123 --input describe=true --input post=true
|
|
136
141
|
|
|
137
142
|
# Review specific GitHub PR
|
|
138
|
-
drs workflow run github-pr-review
|
|
143
|
+
drs workflow run github-pr-review --input owner=octocat --input repo=hello-world --input pr=456 --input describe=true --input post=true
|
|
144
|
+
|
|
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
|
|
139
147
|
|
|
140
148
|
# Review local staged changes
|
|
141
|
-
drs workflow run local-staged
|
|
149
|
+
drs workflow run local-review --input staged=true
|
|
142
150
|
|
|
143
151
|
# Override model/agent behavior through config, then run workflows
|
|
144
152
|
drs workflow run github-pr-review --input owner=octocat --input repo=hello-world --input pr=456
|
|
@@ -152,11 +160,16 @@ drs workflow run github-pr-show-changes --input owner=octocat --input repo=hello
|
|
|
152
160
|
# Show diff context for a single file
|
|
153
161
|
drs workflow run github-pr-show-changes --input owner=octocat --input repo=hello-world --input pr=456 --input file=src/app.ts
|
|
154
162
|
|
|
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
|
|
167
|
+
|
|
155
168
|
# Generate PR/MR descriptions on demand
|
|
156
169
|
drs workflow run github-pr-describe --input owner=octocat --input repo=hello-world --input pr=456
|
|
157
|
-
drs workflow run github-pr-describe
|
|
170
|
+
drs workflow run github-pr-describe --input owner=octocat --input repo=hello-world --input pr=456 --input post=true
|
|
158
171
|
drs workflow run gitlab-mr-describe --input project=my-org/my-repo --input mr=123
|
|
159
|
-
drs workflow run gitlab-mr-describe
|
|
172
|
+
drs workflow run gitlab-mr-describe --input project=my-org/my-repo --input mr=123 --input post=true
|
|
160
173
|
|
|
161
174
|
# Post or update a single marked PR/MR comment
|
|
162
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
|
|
@@ -215,6 +228,51 @@ DRS includes a **secure, pre-configured workflow** at `.github/workflows/pr-revi
|
|
|
215
228
|
- Maintainer workflow
|
|
216
229
|
- Attack prevention strategies
|
|
217
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
|
+
|
|
218
276
|
## GitLab Code Quality Reports
|
|
219
277
|
|
|
220
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.
|
|
@@ -229,7 +287,8 @@ DRS can generate GitLab-compatible code quality reports that integrate seamlessl
|
|
|
229
287
|
- **Non-intrusive**: Doesn't create discussion threads
|
|
230
288
|
|
|
231
289
|
**When to Use:**
|
|
232
|
-
- Use
|
|
290
|
+
- Use `describe=true` to update the PR/MR description before review
|
|
291
|
+
- Use `post=true` for review issues requiring discussion
|
|
233
292
|
- Use **code quality reports** (`--code-quality-report`) for comprehensive static analysis
|
|
234
293
|
- Use **both together** for maximum visibility
|
|
235
294
|
|
|
@@ -237,10 +296,10 @@ DRS can generate GitLab-compatible code quality reports that integrate seamlessl
|
|
|
237
296
|
|
|
238
297
|
```bash
|
|
239
298
|
# Use workflow-based MR review with comments
|
|
240
|
-
drs workflow run gitlab-mr-review
|
|
299
|
+
drs workflow run gitlab-mr-review --input project=my-org/my-repo --input mr=123 --input describe=true --input post=true
|
|
241
300
|
|
|
242
|
-
# For code quality artifacts,
|
|
243
|
-
drs workflow run gitlab-mr-review
|
|
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
|
|
244
303
|
```
|
|
245
304
|
|
|
246
305
|
### GitLab CI Integration
|
|
@@ -254,7 +313,7 @@ code_review:
|
|
|
254
313
|
before_script:
|
|
255
314
|
- npm install -g @diff-review-system/drs
|
|
256
315
|
script:
|
|
257
|
-
- drs workflow run gitlab-mr-review
|
|
316
|
+
- drs workflow run gitlab-mr-review --input project=$CI_PROJECT_PATH --input mr=$CI_MERGE_REQUEST_IID --input describe=true --input post=true
|
|
258
317
|
only:
|
|
259
318
|
- merge_requests
|
|
260
319
|
```
|
|
@@ -460,6 +519,45 @@ workflow:
|
|
|
460
519
|
|
|
461
520
|
See [docs/WORKFLOWS.md](docs/WORKFLOWS.md) for the full workflow configuration reference.
|
|
462
521
|
|
|
522
|
+
### Temporal Execution (Experimental)
|
|
523
|
+
|
|
524
|
+
DRS can dispatch workflows through Temporal. The workflow YAML remains the source of truth; DRS compiles it to a JSON plan, runs deterministic scheduling in a generic Temporal workflow, and executes workflow nodes as Temporal activities.
|
|
525
|
+
|
|
526
|
+
Configure Temporal in `.drs/drs.config.yaml` when the defaults do not match your environment:
|
|
527
|
+
|
|
528
|
+
```yaml
|
|
529
|
+
temporal:
|
|
530
|
+
address: localhost:7233
|
|
531
|
+
namespace: default
|
|
532
|
+
taskQueue: drs-workflows
|
|
533
|
+
workflowIdPrefix: drs
|
|
534
|
+
```
|
|
535
|
+
|
|
536
|
+
Start a worker in the repository where node activities should execute:
|
|
537
|
+
|
|
538
|
+
```bash
|
|
539
|
+
drs temporal worker
|
|
540
|
+
```
|
|
541
|
+
|
|
542
|
+
Run a supported workflow through Temporal:
|
|
543
|
+
|
|
544
|
+
```bash
|
|
545
|
+
drs workflow run local-review --executor temporal
|
|
546
|
+
drs workflow run github-pr-show-changes --executor temporal --input owner=octocat --input repo=hello-world --input pr=456
|
|
547
|
+
drs workflow run local-review --executor temporal --no-wait
|
|
548
|
+
drs workflow run local-review --executor temporal --trace
|
|
549
|
+
```
|
|
550
|
+
|
|
551
|
+
For a safe local smoke test that does not require model or platform credentials, run the packaged control-flow workflow:
|
|
552
|
+
|
|
553
|
+
```bash
|
|
554
|
+
drs workflow run temporal-control-smoke --executor temporal --input mode=loop
|
|
555
|
+
drs workflow run temporal-control-smoke --executor temporal --input mode=pass
|
|
556
|
+
drs workflow run temporal-control-smoke --executor temporal --input mode=end
|
|
557
|
+
```
|
|
558
|
+
|
|
559
|
+
Temporal mode is experimental. It supports DAG workflows and DRS control-flow nodes (`loop`, `switch`, `passThrough`, `end`), structured logs, workflow queries, cancellation state, trace artifacts, and side-effect retry safeguards. See [docs/TEMPORAL.md](docs/TEMPORAL.md) for worker deployment, Temporal UI troubleshooting, and opt-in smoke coverage. See [TEMPORAL_EXECUTION_PLAN.md](TEMPORAL_EXECUTION_PLAN.md) for the rollout plan.
|
|
560
|
+
|
|
463
561
|
### Configure Review Behavior
|
|
464
562
|
|
|
465
563
|
Edit `.drs/drs.config.yaml`:
|
|
@@ -591,6 +689,7 @@ contextCompression:
|
|
|
591
689
|
softBufferTokens: 1500
|
|
592
690
|
hardBufferTokens: 1000
|
|
593
691
|
tokenEstimateDivisor: 4
|
|
692
|
+
summaryThresholdMultiplier: 3 # use summary-only context above hard limit * multiplier
|
|
594
693
|
```
|
|
595
694
|
|
|
596
695
|
### Runtime Timeouts and Provider Retry
|
|
@@ -701,8 +800,9 @@ OPENAI_API_KEY=sk-xxx # For OpenAI models
|
|
|
701
800
|
# Optional
|
|
702
801
|
GITLAB_URL=https://gitlab.com
|
|
703
802
|
DRS_DEFAULT_MODEL=anthropic/claude-sonnet-4-5-20250929
|
|
704
|
-
|
|
705
|
-
|
|
803
|
+
DRS_AGENT_REVIEW_UNIFIED_REVIEWER_MODEL=anthropic/claude-opus-4-5-20251101
|
|
804
|
+
# Configure review agents in .drs/drs.config.yaml via review.agents.
|
|
805
|
+
# Legacy REVIEW_AGENTS is still accepted as a compatibility alias.
|
|
706
806
|
REVIEW_THINKING_LEVEL=medium # Reasoning effort: off, minimal, low, medium, high, xhigh
|
|
707
807
|
```
|
|
708
808
|
|
|
@@ -726,13 +826,16 @@ npm run build
|
|
|
726
826
|
# Run tests
|
|
727
827
|
npm test
|
|
728
828
|
|
|
729
|
-
#
|
|
730
|
-
npm run dev
|
|
829
|
+
# Run the CLI from TypeScript once
|
|
830
|
+
npm run dev:cli -- workflow list
|
|
831
|
+
|
|
832
|
+
# Watch-mode CLI entrypoint
|
|
833
|
+
npm run dev -- workflow list
|
|
731
834
|
```
|
|
732
835
|
|
|
733
836
|
## Requirements
|
|
734
837
|
|
|
735
|
-
- Node.js
|
|
838
|
+
- Node.js 22.19+
|
|
736
839
|
- API key for your selected provider (Anthropic/OpenAI/ZhipuAI/etc.)
|
|
737
840
|
- GitLab access token (for GitLab MR reviews)
|
|
738
841
|
- GitHub access token (for GitHub PR reviews)
|
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
|
@@ -56,10 +56,12 @@ 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 runWorkflow(config, 'gitlab-mr-review
|
|
59
|
+
await runWorkflow(config, 'gitlab-mr-review', {
|
|
60
60
|
inputs: {
|
|
61
61
|
project: env.projectId,
|
|
62
62
|
mr: String(env.mrIid),
|
|
63
|
+
describe: 'true',
|
|
64
|
+
post: 'true',
|
|
63
65
|
},
|
|
64
66
|
workingDir: projectDir,
|
|
65
67
|
});
|
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,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAWjD;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,sBAAsB;IACtB,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;QACrC,OAAO;YACL,QAAQ,EAAE,QAAQ;YAClB,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;YACpC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB;gBACrC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,EAAE,CAAC;gBAChD,CAAC,CAAC,SAAS;YACb,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,mCAAmC;YAC7D,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,mCAAmC;YAC7D,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa;SACrC,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;IACxB,GAAG,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IAE/C,qBAAqB;IACrB,MAAM,GAAG,GAAG,mBAAmB,EAAE,CAAC;IAElC,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC/B,GAAG,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAC;QACpE,WAAW,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,GAAG,CAAC,IAAI,CAAC,yBAAyB,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IAElD,0CAA0C;IAC1C,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC;QACnB,GAAG,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;QACrC,WAAW,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,KAAK,CAAC,4EAA4E,CAAC,CAAC;QACxF,WAAW,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,qBAAqB;IACrB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAC/D,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IAEtC,IAAI,CAAC;QACH,cAAc,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,KAAK,CAAC,wBAAwB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC5F,WAAW,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,GAAG,CAAC,IAAI,CACN,YAAY,GAAG,CAAC,SAAS,WAAW,GAAG,CAAC,KAAK,cAAc,GAAG,CAAC,YAAY,MAAM,GAAG,CAAC,YAAY,EAAE,CACpG,CAAC;IAEF,aAAa;IACb,IAAI,CAAC;QACH,MAAM,WAAW,CAAC,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/ci/runner.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -5,10 +5,14 @@ import { readFileSync } from 'fs';
|
|
|
5
5
|
import { fileURLToPath } from 'url';
|
|
6
6
|
import { dirname, join } from 'path';
|
|
7
7
|
import { runAgent } from './run-agent.js';
|
|
8
|
-
import {
|
|
8
|
+
import { listWorkflows, showWorkflow, showWorkflowGraph, validateWorkflows } from './workflow.js';
|
|
9
9
|
import { loadConfig } from '../lib/config.js';
|
|
10
10
|
import { configureLogger } from '../lib/logger.js';
|
|
11
|
+
import { runTemporalWorker } from '../temporal/worker.js';
|
|
12
|
+
import { createWorkflowExecutor } from './workflow-executor-selection.js';
|
|
11
13
|
import { config as loadDotenv } from 'dotenv';
|
|
14
|
+
import { getSkillStatuses, installBundledSkill, listBundledSkills, syncBundledSkills, } from '../lib/skills.js';
|
|
15
|
+
import { getProjectSetupStatus, syncProjectSetup } from '../lib/project-setup.js';
|
|
12
16
|
// Load environment variables from .env in current working directory (if present)
|
|
13
17
|
loadDotenv();
|
|
14
18
|
const __filename = fileURLToPath(import.meta.url);
|
|
@@ -44,6 +48,22 @@ function parseKeyValueOptions(values, optionName) {
|
|
|
44
48
|
}
|
|
45
49
|
return parsed;
|
|
46
50
|
}
|
|
51
|
+
function printSkillStatuses(statuses) {
|
|
52
|
+
if (statuses.length === 0) {
|
|
53
|
+
console.log('No bundled skills found.');
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
for (const status of statuses) {
|
|
57
|
+
const state = !status.installed
|
|
58
|
+
? 'missing'
|
|
59
|
+
: status.modified
|
|
60
|
+
? 'modified'
|
|
61
|
+
: status.outdated
|
|
62
|
+
? 'outdated'
|
|
63
|
+
: 'installed';
|
|
64
|
+
console.log(`${status.name.padEnd(24)} ${state.padEnd(10)} ${status.installedPath}`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
47
67
|
const program = new Command();
|
|
48
68
|
program
|
|
49
69
|
.name('drs')
|
|
@@ -67,7 +87,7 @@ program
|
|
|
67
87
|
try {
|
|
68
88
|
configureLogger({
|
|
69
89
|
level: options.debug ? 'debug' : 'error',
|
|
70
|
-
format: options.logFormat
|
|
90
|
+
format: options.logFormat ?? 'human',
|
|
71
91
|
timestamps: options.logFormat === 'json',
|
|
72
92
|
});
|
|
73
93
|
const config = loadConfig(process.cwd());
|
|
@@ -79,7 +99,7 @@ program
|
|
|
79
99
|
model: options.model,
|
|
80
100
|
outputPath: options.output,
|
|
81
101
|
jsonOutput: options.json,
|
|
82
|
-
debug: options.debug
|
|
102
|
+
debug: options.debug ?? false,
|
|
83
103
|
thinkingLevel,
|
|
84
104
|
workingDir: process.cwd(),
|
|
85
105
|
});
|
|
@@ -98,7 +118,10 @@ workflowCommand
|
|
|
98
118
|
.option('--input-file <key=path>', 'Read workflow input value from a file', collectOption, [])
|
|
99
119
|
.option('-o, --output <path>', 'Write workflow result JSON to a file')
|
|
100
120
|
.option('--json', 'Output workflow result as JSON to console')
|
|
121
|
+
.option('--executor <executor>', 'Workflow executor: local or temporal', 'local')
|
|
122
|
+
.option('--no-wait', 'Dispatch Temporal workflow and return immediately')
|
|
101
123
|
.option('--debug', 'Print Pi runtime configuration for debugging')
|
|
124
|
+
.option('--trace', 'Collect agent traces and save as trace artifact + HTML viewer')
|
|
102
125
|
.option('--log-format <format>', 'Log output format: human (default) or json', 'human')
|
|
103
126
|
.option('--reasoning-effort <level>', 'Reasoning effort level: off, minimal, low, medium, high, xhigh')
|
|
104
127
|
.option('--ultrathink', 'Enable maximum reasoning effort (alias for --reasoning-effort high)')
|
|
@@ -106,7 +129,7 @@ workflowCommand
|
|
|
106
129
|
try {
|
|
107
130
|
configureLogger({
|
|
108
131
|
level: options.debug ? 'debug' : 'error',
|
|
109
|
-
format: options.logFormat
|
|
132
|
+
format: options.logFormat ?? 'human',
|
|
110
133
|
timestamps: options.logFormat === 'json',
|
|
111
134
|
});
|
|
112
135
|
const config = loadConfig(process.cwd());
|
|
@@ -115,13 +138,16 @@ workflowCommand
|
|
|
115
138
|
if (!workflowName) {
|
|
116
139
|
throw new Error('Provide a workflow name or set workflow.default in .drs/drs.config.yaml.');
|
|
117
140
|
}
|
|
118
|
-
|
|
141
|
+
const executor = createWorkflowExecutor(String(options.executor ?? 'local'), options.wait !== false);
|
|
142
|
+
await executor.run(config, workflowName, {
|
|
119
143
|
inputs: parseKeyValueOptions(options.input, '--input'),
|
|
120
144
|
inputFiles: parseKeyValueOptions(options.inputFile, '--input-file'),
|
|
121
145
|
outputPath: options.output,
|
|
122
146
|
jsonOutput: options.json,
|
|
123
|
-
debug: options.debug
|
|
147
|
+
debug: options.debug ?? false,
|
|
148
|
+
trace: options.trace ?? false,
|
|
124
149
|
thinkingLevel,
|
|
150
|
+
wait: options.wait !== false,
|
|
125
151
|
workingDir: process.cwd(),
|
|
126
152
|
});
|
|
127
153
|
process.exit(0);
|
|
@@ -139,9 +165,71 @@ workflowCommand
|
|
|
139
165
|
try {
|
|
140
166
|
const config = loadConfig(process.cwd());
|
|
141
167
|
listWorkflows(config, {
|
|
142
|
-
json: options.json
|
|
168
|
+
json: options.json ?? false,
|
|
169
|
+
workingDir: process.cwd(),
|
|
170
|
+
});
|
|
171
|
+
process.exit(0);
|
|
172
|
+
}
|
|
173
|
+
catch (error) {
|
|
174
|
+
console.error(chalk.red('Error:'), error instanceof Error ? error.message : String(error));
|
|
175
|
+
process.exit(1);
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
workflowCommand
|
|
179
|
+
.command('show <name>')
|
|
180
|
+
.alias('get')
|
|
181
|
+
.description('Show workflow details, including inputs and nodes')
|
|
182
|
+
.option('--json', 'Output as JSON')
|
|
183
|
+
.action((name, options) => {
|
|
184
|
+
try {
|
|
185
|
+
const config = loadConfig(process.cwd());
|
|
186
|
+
showWorkflow(config, name, {
|
|
187
|
+
json: options.json ?? false,
|
|
188
|
+
workingDir: process.cwd(),
|
|
189
|
+
});
|
|
190
|
+
process.exit(0);
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
console.error(chalk.red('Error:'), error instanceof Error ? error.message : String(error));
|
|
194
|
+
process.exit(1);
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
workflowCommand
|
|
198
|
+
.command('graph <name>')
|
|
199
|
+
.description('Show workflow graph edges as text, JSON, or Mermaid')
|
|
200
|
+
.option('--format <format>', 'Output format: text, json, or mermaid', 'text')
|
|
201
|
+
.action((name, options) => {
|
|
202
|
+
try {
|
|
203
|
+
const format = String(options.format ?? 'text');
|
|
204
|
+
if (!['text', 'json', 'mermaid'].includes(format)) {
|
|
205
|
+
throw new Error('Invalid graph format. Expected one of: text, json, mermaid.');
|
|
206
|
+
}
|
|
207
|
+
const config = loadConfig(process.cwd());
|
|
208
|
+
showWorkflowGraph(config, name, {
|
|
209
|
+
format: format,
|
|
210
|
+
workingDir: process.cwd(),
|
|
211
|
+
});
|
|
212
|
+
process.exit(0);
|
|
213
|
+
}
|
|
214
|
+
catch (error) {
|
|
215
|
+
console.error(chalk.red('Error:'), error instanceof Error ? error.message : String(error));
|
|
216
|
+
process.exit(1);
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
workflowCommand
|
|
220
|
+
.command('validate [name]')
|
|
221
|
+
.description('Validate workflow definitions without running them')
|
|
222
|
+
.option('--json', 'Output as JSON')
|
|
223
|
+
.action((name, options) => {
|
|
224
|
+
try {
|
|
225
|
+
const config = loadConfig(process.cwd());
|
|
226
|
+
const results = validateWorkflows(config, name, {
|
|
227
|
+
json: options.json ?? false,
|
|
143
228
|
workingDir: process.cwd(),
|
|
144
229
|
});
|
|
230
|
+
if (results.some((result) => !result.valid)) {
|
|
231
|
+
process.exit(1);
|
|
232
|
+
}
|
|
145
233
|
process.exit(0);
|
|
146
234
|
}
|
|
147
235
|
catch (error) {
|
|
@@ -149,7 +237,115 @@ workflowCommand
|
|
|
149
237
|
process.exit(1);
|
|
150
238
|
}
|
|
151
239
|
});
|
|
240
|
+
const temporalCommand = new Command('temporal').description('Run Temporal workflow workers');
|
|
241
|
+
temporalCommand
|
|
242
|
+
.command('worker')
|
|
243
|
+
.description('Run a Temporal worker for DRS workflows')
|
|
244
|
+
.option('--debug', 'Print debug logs')
|
|
245
|
+
.option('--log-format <format>', 'Log output format: human (default) or json', 'human')
|
|
246
|
+
.action(async (options) => {
|
|
247
|
+
try {
|
|
248
|
+
configureLogger({
|
|
249
|
+
level: options.debug ? 'debug' : 'error',
|
|
250
|
+
format: options.logFormat ?? 'human',
|
|
251
|
+
timestamps: options.logFormat === 'json',
|
|
252
|
+
});
|
|
253
|
+
const config = loadConfig(process.cwd());
|
|
254
|
+
await runTemporalWorker(config);
|
|
255
|
+
}
|
|
256
|
+
catch (error) {
|
|
257
|
+
console.error(chalk.red('Error:'), error instanceof Error ? error.message : String(error));
|
|
258
|
+
process.exit(1);
|
|
259
|
+
}
|
|
260
|
+
});
|
|
152
261
|
program.addCommand(workflowCommand);
|
|
262
|
+
program.addCommand(temporalCommand);
|
|
263
|
+
const skillsCommand = new Command('skills').description('Manage project-installed DRS skills');
|
|
264
|
+
skillsCommand
|
|
265
|
+
.command('list')
|
|
266
|
+
.description('List bundled DRS skills')
|
|
267
|
+
.option('--json', 'Output as JSON')
|
|
268
|
+
.action((options) => {
|
|
269
|
+
try {
|
|
270
|
+
const skills = listBundledSkills();
|
|
271
|
+
if (options.json)
|
|
272
|
+
console.log(JSON.stringify({ skills }, null, 2));
|
|
273
|
+
else
|
|
274
|
+
for (const skill of skills)
|
|
275
|
+
console.log(skill);
|
|
276
|
+
process.exit(0);
|
|
277
|
+
}
|
|
278
|
+
catch (error) {
|
|
279
|
+
console.error(chalk.red('Error:'), error instanceof Error ? error.message : String(error));
|
|
280
|
+
process.exit(1);
|
|
281
|
+
}
|
|
282
|
+
});
|
|
283
|
+
skillsCommand
|
|
284
|
+
.command('status')
|
|
285
|
+
.description('Show installed status for bundled DRS skills')
|
|
286
|
+
.option('--json', 'Output as JSON')
|
|
287
|
+
.action((options) => {
|
|
288
|
+
try {
|
|
289
|
+
const statuses = getSkillStatuses(process.cwd());
|
|
290
|
+
if (options.json)
|
|
291
|
+
console.log(JSON.stringify({ skills: statuses }, null, 2));
|
|
292
|
+
else
|
|
293
|
+
printSkillStatuses(statuses);
|
|
294
|
+
process.exit(0);
|
|
295
|
+
}
|
|
296
|
+
catch (error) {
|
|
297
|
+
console.error(chalk.red('Error:'), error instanceof Error ? error.message : String(error));
|
|
298
|
+
process.exit(1);
|
|
299
|
+
}
|
|
300
|
+
});
|
|
301
|
+
skillsCommand
|
|
302
|
+
.command('install [name]')
|
|
303
|
+
.description('Install a bundled DRS skill into .agents/skills')
|
|
304
|
+
.option('--all', 'Install all bundled skills')
|
|
305
|
+
.option('--force', 'Overwrite existing skill files')
|
|
306
|
+
.option('--json', 'Output as JSON')
|
|
307
|
+
.action((name, options) => {
|
|
308
|
+
try {
|
|
309
|
+
let statuses;
|
|
310
|
+
if (options.all) {
|
|
311
|
+
statuses = listBundledSkills().map((skill) => installBundledSkill(process.cwd(), skill, { force: options.force ?? false }));
|
|
312
|
+
}
|
|
313
|
+
else if (name) {
|
|
314
|
+
statuses = [installBundledSkill(process.cwd(), name, { force: options.force ?? false })];
|
|
315
|
+
}
|
|
316
|
+
else {
|
|
317
|
+
throw new Error('Provide a skill name or --all.');
|
|
318
|
+
}
|
|
319
|
+
if (options.json)
|
|
320
|
+
console.log(JSON.stringify({ skills: statuses }, null, 2));
|
|
321
|
+
else
|
|
322
|
+
printSkillStatuses(statuses);
|
|
323
|
+
process.exit(0);
|
|
324
|
+
}
|
|
325
|
+
catch (error) {
|
|
326
|
+
console.error(chalk.red('Error:'), error instanceof Error ? error.message : String(error));
|
|
327
|
+
process.exit(1);
|
|
328
|
+
}
|
|
329
|
+
});
|
|
330
|
+
skillsCommand
|
|
331
|
+
.command('sync')
|
|
332
|
+
.description('Update DRS-managed installed skills when they have no local changes')
|
|
333
|
+
.option('--json', 'Output as JSON')
|
|
334
|
+
.action((options) => {
|
|
335
|
+
try {
|
|
336
|
+
const statuses = syncBundledSkills(process.cwd());
|
|
337
|
+
if (options.json)
|
|
338
|
+
console.log(JSON.stringify({ skills: statuses }, null, 2));
|
|
339
|
+
else
|
|
340
|
+
printSkillStatuses(statuses);
|
|
341
|
+
process.exit(0);
|
|
342
|
+
}
|
|
343
|
+
catch (error) {
|
|
344
|
+
console.error(chalk.red('Error:'), error instanceof Error ? error.message : String(error));
|
|
345
|
+
process.exit(1);
|
|
346
|
+
}
|
|
347
|
+
});
|
|
348
|
+
program.addCommand(skillsCommand);
|
|
153
349
|
program
|
|
154
350
|
.command('list-agents')
|
|
155
351
|
.description('List available agents')
|
|
@@ -172,10 +368,63 @@ program
|
|
|
172
368
|
program
|
|
173
369
|
.command('init')
|
|
174
370
|
.description('Initialize DRS configuration in current project')
|
|
175
|
-
.
|
|
371
|
+
.option('-y, --yes', 'Use non-interactive defaults')
|
|
372
|
+
.option('--force', 'Overwrite existing project config')
|
|
373
|
+
.action(async (options) => {
|
|
176
374
|
try {
|
|
177
375
|
const { initProject } = await import('./init.js');
|
|
178
|
-
await initProject(process.cwd()
|
|
376
|
+
await initProject(process.cwd(), {
|
|
377
|
+
yes: options.yes ?? false,
|
|
378
|
+
force: options.force ?? false,
|
|
379
|
+
});
|
|
380
|
+
}
|
|
381
|
+
catch (error) {
|
|
382
|
+
console.error(chalk.red('Error:'), error instanceof Error ? error.message : String(error));
|
|
383
|
+
process.exit(1);
|
|
384
|
+
}
|
|
385
|
+
});
|
|
386
|
+
program
|
|
387
|
+
.command('doctor')
|
|
388
|
+
.description('Check DRS project setup without modifying files')
|
|
389
|
+
.option('--json', 'Output as JSON')
|
|
390
|
+
.action((options) => {
|
|
391
|
+
try {
|
|
392
|
+
const status = getProjectSetupStatus(process.cwd());
|
|
393
|
+
if (options.json)
|
|
394
|
+
console.log(JSON.stringify(status, null, 2));
|
|
395
|
+
else {
|
|
396
|
+
console.log(`Config: ${status.initialized ? 'present' : 'missing'} (${status.configPath})`);
|
|
397
|
+
printSkillStatuses(status.skills);
|
|
398
|
+
if (status.issues.length > 0) {
|
|
399
|
+
console.log(`Issues: ${status.issues.join(', ')}`);
|
|
400
|
+
}
|
|
401
|
+
else {
|
|
402
|
+
console.log('DRS project setup looks good.');
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
process.exit(status.initialized ? 0 : 1);
|
|
406
|
+
}
|
|
407
|
+
catch (error) {
|
|
408
|
+
console.error(chalk.red('Error:'), error instanceof Error ? error.message : String(error));
|
|
409
|
+
process.exit(1);
|
|
410
|
+
}
|
|
411
|
+
});
|
|
412
|
+
program
|
|
413
|
+
.command('sync')
|
|
414
|
+
.description('Safely sync DRS-managed project assets')
|
|
415
|
+
.option('--json', 'Output as JSON')
|
|
416
|
+
.action((options) => {
|
|
417
|
+
try {
|
|
418
|
+
const status = syncProjectSetup(process.cwd());
|
|
419
|
+
if (options.json)
|
|
420
|
+
console.log(JSON.stringify(status, null, 2));
|
|
421
|
+
else {
|
|
422
|
+
console.log(`Config: ${status.initialized ? 'present' : 'missing'} (${status.configPath})`);
|
|
423
|
+
printSkillStatuses(status.skills);
|
|
424
|
+
if (status.issues.length > 0)
|
|
425
|
+
console.log(`Issues: ${status.issues.join(', ')}`);
|
|
426
|
+
}
|
|
427
|
+
process.exit(status.initialized ? 0 : 1);
|
|
179
428
|
}
|
|
180
429
|
catch (error) {
|
|
181
430
|
console.error(chalk.red('Error:'), error instanceof Error ? error.message : String(error));
|