pi-dev-team 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/PORTING.md +134 -0
- package/README.md +207 -0
- package/UPSTREAM.json +64 -0
- package/agents/Explore.md +15 -0
- package/agents/a11y-review.md +118 -0
- package/agents/adr-author.md +70 -0
- package/agents/ai-provenance-review.md +120 -0
- package/agents/angular-reactivity-review.md +95 -0
- package/agents/arch-review.md +135 -0
- package/agents/architect.md +78 -0
- package/agents/autoship-batch-proposer.md +69 -0
- package/agents/claude-setup-review.md +136 -0
- package/agents/codebase-recon.md +184 -0
- package/agents/component-architecture-review.md +119 -0
- package/agents/concurrency-review.md +109 -0
- package/agents/correctness-review.md +290 -0
- package/agents/data-flow-tracer.md +120 -0
- package/agents/doc-review.md +165 -0
- package/agents/domain-review.md +136 -0
- package/agents/general-purpose.md +10 -0
- package/agents/gherkin-quality-critic.md +113 -0
- package/agents/js-fp-review.md +114 -0
- package/agents/mutation-kill.md +684 -0
- package/agents/naming-review.md +142 -0
- package/agents/orchestrator.md +339 -0
- package/agents/performance-review.md +105 -0
- package/agents/plan-review-acceptance.md +115 -0
- package/agents/plan-review-design.md +90 -0
- package/agents/plan-review-parallelization.md +84 -0
- package/agents/plan-review-strategic.md +96 -0
- package/agents/plan-review-ux.md +110 -0
- package/agents/platform-engineer.md +64 -0
- package/agents/product-manager.md +68 -0
- package/agents/progress-guardian.md +79 -0
- package/agents/qa-engineer.md +289 -0
- package/agents/quality-reviewer.md +132 -0
- package/agents/react-reactivity-review.md +102 -0
- package/agents/refactor-opportunity-review.md +128 -0
- package/agents/security-engineer.md +60 -0
- package/agents/security-review.md +218 -0
- package/agents/session-analysis.md +95 -0
- package/agents/software-engineer.md +105 -0
- package/agents/spec-compliance-review.md +100 -0
- package/agents/spec-reviewer.md +114 -0
- package/agents/structure-review.md +146 -0
- package/agents/tech-writer.md +84 -0
- package/agents/test-review.md +246 -0
- package/agents/test-smell-review.md +188 -0
- package/agents/token-efficiency-review.md +139 -0
- package/agents/ui-ux-designer.md +54 -0
- package/agents/vue-reactivity-review.md +95 -0
- package/bin/__pycache__/claudecpython-314.pyc +0 -0
- package/bin/claude +258 -0
- package/docs/upstream/.pages +1 -0
- package/docs/upstream/CHANGELOG.md +2586 -0
- package/docs/upstream/README.md +155 -0
- package/docs/upstream/agent-architecture.md +214 -0
- package/docs/upstream/agent_info.md +187 -0
- package/docs/upstream/artifact-migration.md +124 -0
- package/docs/upstream/code-intelligence-nudge.md +149 -0
- package/docs/upstream/code-review-process.md +294 -0
- package/docs/upstream/concurrent-use.md +73 -0
- package/docs/upstream/context-management.md +111 -0
- package/docs/upstream/developer-notes.md +280 -0
- package/docs/upstream/diagrams/architecture-overview.svg +101 -0
- package/docs/upstream/diagrams/review-dispatch.svg +139 -0
- package/docs/upstream/diagrams/team-agents.svg +128 -0
- package/docs/upstream/diagrams/test-improve-flow.svg +166 -0
- package/docs/upstream/diagrams/workflow-linear.svg +66 -0
- package/docs/upstream/diagrams/workflow-three-phase.svg +200 -0
- package/docs/upstream/eval-maintenance.md +95 -0
- package/docs/upstream/eval-running-guide.md +147 -0
- package/docs/upstream/eval-system.md +291 -0
- package/docs/upstream/session-review-oss-complements.md +75 -0
- package/docs/upstream/session-review.md +212 -0
- package/docs/upstream/skills.md +188 -0
- package/docs/upstream/team-structure.md +21 -0
- package/docs/upstream/telemetry-ci-access.md +129 -0
- package/docs/upstream/telemetry-repo-security.md +120 -0
- package/docs/upstream/test-evaluation.md +277 -0
- package/docs/upstream/test-improve.md +154 -0
- package/docs/upstream/triage-workflow.md +282 -0
- package/docs/upstream/workflows.md +289 -0
- package/extensions/dev-team/index.ts +539 -0
- package/extensions/dev-team/lib/agents.ts +272 -0
- package/extensions/dev-team/lib/ai-credits.ts +92 -0
- package/extensions/dev-team/lib/autocompact.ts +81 -0
- package/extensions/dev-team/lib/child-run.ts +102 -0
- package/extensions/dev-team/lib/config.ts +236 -0
- package/extensions/dev-team/lib/gh-command.ts +103 -0
- package/extensions/dev-team/lib/github-style.ts +307 -0
- package/extensions/dev-team/lib/hooks.ts +350 -0
- package/extensions/dev-team/lib/metrics.ts +115 -0
- package/extensions/dev-team/lib/safe-read.ts +49 -0
- package/extensions/dev-team/lib/session-files.ts +57 -0
- package/extensions/dev-team/lib/session-spend.ts +123 -0
- package/extensions/dev-team/lib/shell-scan.ts +205 -0
- package/extensions/dev-team/lib/skills.ts +213 -0
- package/extensions/dev-team/lib/subagent-render.ts +245 -0
- package/extensions/dev-team/lib/subagent-types.ts +164 -0
- package/extensions/dev-team/lib/subagent.ts +596 -0
- package/extensions/dev-team/lib/terminal-text.ts +54 -0
- package/extensions/dev-team/lib/tools-misc.ts +152 -0
- package/extensions/dev-team/lib/transcript.ts +110 -0
- package/extensions/dev-team/lib/trust.ts +52 -0
- package/extensions/dev-team/lib/usage-breakdown.ts +176 -0
- package/extensions/dev-team/lib/usage-chart.ts +153 -0
- package/extensions/dev-team/lib/usage-command.ts +107 -0
- package/extensions/dev-team/lib/usage-history.ts +203 -0
- package/extensions/dev-team/lib/usage-render.ts +225 -0
- package/extensions/dev-team/lib/usage-split-bar.ts +127 -0
- package/extensions/dev-team/lib/usage-state.ts +116 -0
- package/extensions/dev-team/lib/usage-text.ts +159 -0
- package/extensions/dev-team/lib/usage-view.ts +109 -0
- package/hooks/__pycache__/refactor_test_freeze_guard.cpython-314.pyc +0 -0
- package/hooks/agent_dispatch_ledger.py +190 -0
- package/hooks/autocompact_setup_nudge.py +99 -0
- package/hooks/bash_retry_guard.py +228 -0
- package/hooks/boundary_events_write_guard.py +352 -0
- package/hooks/code_intelligence_nudge.py +293 -0
- package/hooks/code_intelligence_turn_mark.py +317 -0
- package/hooks/codegraph_bootstrap.py +139 -0
- package/hooks/contract_version_guard.py +362 -0
- package/hooks/cost_meter.py +106 -0
- package/hooks/destructive-commands.json +62 -0
- package/hooks/destructive_guard.py +477 -0
- package/hooks/eval_compliance_check.py +440 -0
- package/hooks/guards.json +17 -0
- package/hooks/hooks.json +323 -0
- package/hooks/internal_double_gate.py +296 -0
- package/hooks/js_fp_review.py +212 -0
- package/hooks/knowledge_index.py +119 -0
- package/hooks/lib/__pycache__/artifact_paths.cpython-314.pyc +0 -0
- package/hooks/lib/__pycache__/atomic_state.cpython-314.pyc +0 -0
- package/hooks/lib/__pycache__/autocompact_config.cpython-314.pyc +0 -0
- package/hooks/lib/__pycache__/boundary_events.cpython-314.pyc +0 -0
- package/hooks/lib/__pycache__/doc_classification.cpython-314.pyc +0 -0
- package/hooks/lib/__pycache__/gh_pr_create_detect.cpython-314.pyc +0 -0
- package/hooks/lib/__pycache__/git_safe_diff.cpython-314.pyc +0 -0
- package/hooks/lib/__pycache__/instrument_log.cpython-314.pyc +0 -0
- package/hooks/lib/__pycache__/metrics_query.cpython-314.pyc +0 -0
- package/hooks/lib/__pycache__/plugin_version.cpython-314.pyc +0 -0
- package/hooks/lib/__pycache__/pre_commit_doc_classifier.cpython-314.pyc +0 -0
- package/hooks/lib/__pycache__/review_agent_registry.cpython-314.pyc +0 -0
- package/hooks/lib/__pycache__/review_gate_corroboration.cpython-314.pyc +0 -0
- package/hooks/lib/__pycache__/review_gate_hash.cpython-314.pyc +0 -0
- package/hooks/lib/__pycache__/review_verdicts.cpython-314.pyc +0 -0
- package/hooks/lib/__pycache__/stdin_json.cpython-314.pyc +0 -0
- package/hooks/lib/__pycache__/stryker_invocation.cpython-314.pyc +0 -0
- package/hooks/lib/__pycache__/telemetry_consent.cpython-314.pyc +0 -0
- package/hooks/lib/__pycache__/test_file_classify.cpython-314.pyc +0 -0
- package/hooks/lib/__pycache__/token_efficiency_limits.cpython-314.pyc +0 -0
- package/hooks/lib/__pycache__/verify_guard_state.cpython-314.pyc +0 -0
- package/hooks/lib/__pycache__/xunit_v3_operator_gate.cpython-314.pyc +0 -0
- package/hooks/lib/agent_skill_hints.py +74 -0
- package/hooks/lib/artifact_paths.py +263 -0
- package/hooks/lib/atomic_state.py +557 -0
- package/hooks/lib/autocompact_config.py +103 -0
- package/hooks/lib/autoship_log.py +106 -0
- package/hooks/lib/banned_scripts_policy.py +51 -0
- package/hooks/lib/boundary_events.py +436 -0
- package/hooks/lib/build_knowledge_index.py +504 -0
- package/hooks/lib/build_skills_index.py +361 -0
- package/hooks/lib/build_state.py +116 -0
- package/hooks/lib/classify_ship_outcome.py +126 -0
- package/hooks/lib/config_changelog_schema.py +115 -0
- package/hooks/lib/cost_meter.py +955 -0
- package/hooks/lib/doc_classification.py +116 -0
- package/hooks/lib/gh_pr_create_detect.py +136 -0
- package/hooks/lib/git_safe_diff.py +123 -0
- package/hooks/lib/instrument_log.py +66 -0
- package/hooks/lib/iteration_journal_gate.py +197 -0
- package/hooks/lib/knowledge_index_paths.py +88 -0
- package/hooks/lib/mcp_json_repowise.py +177 -0
- package/hooks/lib/metrics_query.py +202 -0
- package/hooks/lib/minimal_yaml.py +434 -0
- package/hooks/lib/plugin_version.py +142 -0
- package/hooks/lib/pre_commit_detect.py +537 -0
- package/hooks/lib/pre_commit_doc_classifier.py +126 -0
- package/hooks/lib/pricing.py +118 -0
- package/hooks/lib/report_pdf.py +371 -0
- package/hooks/lib/review_agent_registry.py +142 -0
- package/hooks/lib/review_dispatch_ledger.py +101 -0
- package/hooks/lib/review_gate_corroboration.py +521 -0
- package/hooks/lib/review_gate_hash.py +252 -0
- package/hooks/lib/review_gate_normalized_hash.py +1115 -0
- package/hooks/lib/review_verdicts.py +301 -0
- package/hooks/lib/run_report.py +160 -0
- package/hooks/lib/skill_categories.yaml +125 -0
- package/hooks/lib/stdin_json.py +57 -0
- package/hooks/lib/stryker_invocation.py +102 -0
- package/hooks/lib/telemetry_consent.py +41 -0
- package/hooks/lib/telemetry_report.py +108 -0
- package/hooks/lib/test_file_classify.py +160 -0
- package/hooks/lib/token_efficiency_limits.py +51 -0
- package/hooks/lib/turn_identity.py +77 -0
- package/hooks/lib/verify_guard_state.py +110 -0
- package/hooks/lib/workflow_state.py +206 -0
- package/hooks/lib/xunit_v3_operator_gate.py +596 -0
- package/hooks/mcp_json_repowise_nudge.py +74 -0
- package/hooks/mutation_adapters/__init__.py +7 -0
- package/hooks/mutation_adapters/__pycache__/__init__.cpython-314.pyc +0 -0
- package/hooks/mutation_adapters/__pycache__/lib.cpython-314.pyc +0 -0
- package/hooks/mutation_adapters/__pycache__/mutmut.cpython-314.pyc +0 -0
- package/hooks/mutation_adapters/__pycache__/pitest.cpython-314.pyc +0 -0
- package/hooks/mutation_adapters/__pycache__/stryker.cpython-314.pyc +0 -0
- package/hooks/mutation_adapters/__pycache__/stryker_net.cpython-314.pyc +0 -0
- package/hooks/mutation_adapters/lib.py +478 -0
- package/hooks/mutation_adapters/mutmut.py +188 -0
- package/hooks/mutation_adapters/pitest.py +266 -0
- package/hooks/mutation_adapters/stryker.py +157 -0
- package/hooks/mutation_adapters/stryker_net.py +264 -0
- package/hooks/mutation_gate.py +193 -0
- package/hooks/mutation_testing_smoke_gate.py +371 -0
- package/hooks/pending_review_notify.py +121 -0
- package/hooks/phase_marker.py +138 -0
- package/hooks/post_compact_state_reinject.py +180 -0
- package/hooks/post_format.py +115 -0
- package/hooks/pre_commit_knowledge_index.py +128 -0
- package/hooks/pre_commit_review.py +66 -0
- package/hooks/pre_pr_review.py +694 -0
- package/hooks/pre_tool_guard.py +405 -0
- package/hooks/py.sh +73 -0
- package/hooks/refactor-bash-write-patterns.json +29 -0
- package/hooks/refactor_test_bash_guard.py +253 -0
- package/hooks/refactor_test_freeze_guard.py +139 -0
- package/hooks/refactor_test_revert_guard.py +186 -0
- package/hooks/repo_review_nudge.py +287 -0
- package/hooks/review_verdict_recorder.py +464 -0
- package/hooks/scan_bash_command_for_banned_scripts.py +428 -0
- package/hooks/scan_worktree_for_banned_scripts.py +238 -0
- package/hooks/session_learning_trigger.py +248 -0
- package/hooks/skills_index.py +126 -0
- package/hooks/stryker_xunit_shim_guard.py +571 -0
- package/hooks/subagent_completion_guard.py +309 -0
- package/hooks/subagent_skill_context.py +139 -0
- package/hooks/task_completion_metrics.py +216 -0
- package/hooks/tdd_guard.py +229 -0
- package/hooks/telemetry.py +341 -0
- package/hooks/token_efficiency_review.py +194 -0
- package/hooks/verify_guard.py +183 -0
- package/hooks/verify_guard_edit_marker.py +73 -0
- package/hooks/version_check.py +173 -0
- package/knowledge/accepted-risks-schema.md +98 -0
- package/knowledge/adr-decision-criteria.md +64 -0
- package/knowledge/adversarial-review-protocol.md +139 -0
- package/knowledge/agent-registry.md +228 -0
- package/knowledge/agent-review-methodology.md +80 -0
- package/knowledge/ai-friendly-repo-guidelines.md +67 -0
- package/knowledge/architecture-assessment.md +96 -0
- package/knowledge/artifact-lifecycle.md +57 -0
- package/knowledge/cd-maturity-model.md +82 -0
- package/knowledge/cd-test-architecture.md +190 -0
- package/knowledge/ci-cd-file-scope.md +24 -0
- package/knowledge/codegraph-vs-graphify.md +192 -0
- package/knowledge/component-test-patterns.md +139 -0
- package/knowledge/database-change-management.md +80 -0
- package/knowledge/database-test-patterns.md +79 -0
- package/knowledge/decision-defaults.md +88 -0
- package/knowledge/dependency-breaking-techniques.md +116 -0
- package/knowledge/deployment-pipeline.md +86 -0
- package/knowledge/design-smells.md +122 -0
- package/knowledge/directory-enumeration.md +38 -0
- package/knowledge/domain-modeling.md +123 -0
- package/knowledge/evidence-bundle.md +90 -0
- package/knowledge/exploratory-testing-field-guide.md +122 -0
- package/knowledge/failure-routing.md +28 -0
- package/knowledge/fixture-construction.md +56 -0
- package/knowledge/frontend-component-architecture.md +139 -0
- package/knowledge/gherkin-quality-review-dispatch.md +135 -0
- package/knowledge/index.json +6766 -0
- package/knowledge/internal-collaborator-doubling.md +101 -0
- package/knowledge/legacy-test-strategy.md +71 -0
- package/knowledge/long-run-waiting.md +66 -0
- package/knowledge/microservice-testing.md +71 -0
- package/knowledge/model-pricing.json +23 -0
- package/knowledge/mutation-score-formulas.md +60 -0
- package/knowledge/object-calisthenics.md +147 -0
- package/knowledge/oracle-provenance.md +94 -0
- package/knowledge/orchestrator-script-implementation.md +185 -0
- package/knowledge/owasp-detection.md +148 -0
- package/knowledge/plan-review-rubric.md +56 -0
- package/knowledge/proxy-connectivity.md +62 -0
- package/knowledge/reactive-effect-patterns.md +73 -0
- package/knowledge/recon-inventory-excludes.txt +32 -0
- package/knowledge/references/bdd-value-guide.md +61 -0
- package/knowledge/references/csharp-http-client-testing.md +264 -0
- package/knowledge/release-strategies.md +74 -0
- package/knowledge/report-output-location.md +117 -0
- package/knowledge/report-pdf-integration.md +63 -0
- package/knowledge/report-print.css +129 -0
- package/knowledge/report-template.md +114 -0
- package/knowledge/report-to-pdf.md +69 -0
- package/knowledge/request-processing-flow.md +63 -0
- package/knowledge/result-verification.md +52 -0
- package/knowledge/review-agent-output-contract.md +121 -0
- package/knowledge/review-lens-classification.md +113 -0
- package/knowledge/review-rubric.md +62 -0
- package/knowledge/review-template.md +104 -0
- package/knowledge/rule-fixtures/A02.insecure-random-js/negative.js +1 -0
- package/knowledge/rule-fixtures/A02.insecure-random-js/positive.js +1 -0
- package/knowledge/rule-fixtures/A02.weak-hashing-md5/negative.py +1 -0
- package/knowledge/rule-fixtures/A02.weak-hashing-md5/positive.py +1 -0
- package/knowledge/rule-fixtures/A03.command-injection/negative.js +1 -0
- package/knowledge/rule-fixtures/A03.command-injection/positive.js +1 -0
- package/knowledge/rule-fixtures/A03.sql-injection/negative.js +1 -0
- package/knowledge/rule-fixtures/A03.sql-injection/positive.js +1 -0
- package/knowledge/rule-fixtures/A03.xss-innerhtml/negative.js +1 -0
- package/knowledge/rule-fixtures/A03.xss-innerhtml/positive.js +1 -0
- package/knowledge/rule-fixtures/A05.cors-wildcard/negative.js +1 -0
- package/knowledge/rule-fixtures/A05.cors-wildcard/positive.js +1 -0
- package/knowledge/rule-fixtures/A05.default-credentials/negative.js +1 -0
- package/knowledge/rule-fixtures/A05.default-credentials/positive.js +1 -0
- package/knowledge/rule-fixtures/A07.jwt-alg-none/negative.js +1 -0
- package/knowledge/rule-fixtures/A07.jwt-alg-none/positive.js +1 -0
- package/knowledge/rule-fixtures/A08.binary-formatter/negative.cs +1 -0
- package/knowledge/rule-fixtures/A08.binary-formatter/positive.cs +1 -0
- package/knowledge/rule-fixtures/A08.js-eval/negative.js +1 -0
- package/knowledge/rule-fixtures/A08.js-eval/positive.js +1 -0
- package/knowledge/rule-fixtures/A08.object-input-stream/negative.java +1 -0
- package/knowledge/rule-fixtures/A08.object-input-stream/positive.java +1 -0
- package/knowledge/schemas/disposition-register-v1.json +65 -0
- package/knowledge/schemas/recon-envelope-v1.json +198 -0
- package/knowledge/schemas/unified-finding-v1.json +72 -0
- package/knowledge/security-primitives-contract.md +301 -0
- package/knowledge/security-review-rule-map.yaml +107 -0
- package/knowledge/skills-registry.md +72 -0
- package/knowledge/task-size-classifier.md +103 -0
- package/knowledge/telemetry-schema.md +881 -0
- package/knowledge/test-automation-maturity.md +56 -0
- package/knowledge/test-automation-principles.md +71 -0
- package/knowledge/test-cadence-tradeoffs.md +68 -0
- package/knowledge/test-doubles.md +105 -0
- package/knowledge/test-file-indicators.md +22 -0
- package/knowledge/test-layer-gates.md +35 -0
- package/knowledge/test-matrix-examples/django-batch.md +24 -0
- package/knowledge/test-matrix-examples/dotnet-grpc-fronting-api.md +90 -0
- package/knowledge/test-matrix-examples/dotnet-http-consumer.md +131 -0
- package/knowledge/test-matrix-examples/react-node-spa.md +24 -0
- package/knowledge/test-matrix-examples/spring-boot-service.md +25 -0
- package/knowledge/test-matrix-examples/ssr-htmx.md +24 -0
- package/knowledge/test-organization.md +70 -0
- package/knowledge/test-pyramid.md +84 -0
- package/knowledge/test-refactoring.md +67 -0
- package/knowledge/test-review-division-of-labor.md +85 -0
- package/knowledge/test-smells.md +80 -0
- package/knowledge/test-stack-profiles/bdd-frameworks.md +235 -0
- package/knowledge/test-stack-profiles/django.md +13 -0
- package/knowledge/test-stack-profiles/dotnet.md +18 -0
- package/knowledge/test-stack-profiles/go.md +16 -0
- package/knowledge/test-stack-profiles/node.md +16 -0
- package/knowledge/test-stack-profiles/react.md +12 -0
- package/knowledge/test-stack-profiles/spring-boot.md +16 -0
- package/knowledge/test-stack-profiles/ssr-htmx.md +14 -0
- package/knowledge/test-stack-profiles/vue.md +12 -0
- package/knowledge/test-strategy.md +70 -0
- package/knowledge/testability-patterns.md +240 -0
- package/knowledge/testing-quadrants.md +44 -0
- package/knowledge/testing-techniques/approval.md +15 -0
- package/knowledge/testing-techniques/chaos.md +17 -0
- package/knowledge/testing-techniques/fuzz.md +15 -0
- package/knowledge/testing-techniques/property-based.md +15 -0
- package/knowledge/testing-techniques/schema-validation.md +15 -0
- package/knowledge/testing-techniques/screenshot.md +15 -0
- package/knowledge/three-phase-workflow.md +198 -0
- package/knowledge/value-patterns.md +55 -0
- package/knowledge/verification-mode.md +116 -0
- package/knowledge/virtual-service-libraries.md +75 -0
- package/knowledge/wave-consolidation-guidance.md +21 -0
- package/overrides/agents/Explore.md +15 -0
- package/overrides/agents/general-purpose.md +10 -0
- package/overrides/notes/autoship.md +6 -0
- package/overrides/notes/issues-from-assessment.md +3 -0
- package/overrides/notes/issues-from-plan.md +3 -0
- package/overrides/notes/mutation-night-watch.md +3 -0
- package/overrides/notes/mutation-testing.md +3 -0
- package/overrides/notes/pr.md +7 -0
- package/overrides/notes/project-init.md +6 -0
- package/overrides/notes/setup.md +13 -0
- package/overrides/notes/specs.md +3 -0
- package/overrides/skills/headless-run/SKILL.md +45 -0
- package/overrides/skills/upgrade/SKILL.md +30 -0
- package/overrides/skills/version/SKILL.md +25 -0
- package/package.json +36 -0
- package/scripts/authoring_digest.py +93 -0
- package/scripts/autoship_discover.py +121 -0
- package/scripts/autoship_group.py +409 -0
- package/scripts/autoship_proposals.py +494 -0
- package/scripts/autoship_queue.py +291 -0
- package/scripts/autoship_reclaim.py +495 -0
- package/scripts/build_jobs.py +108 -0
- package/scripts/build_rollback_point.py +240 -0
- package/scripts/build_slice_scope.py +157 -0
- package/scripts/build_wave.py +109 -0
- package/scripts/build_wave_reconcile.py +252 -0
- package/scripts/build_worktree_baseref.py +113 -0
- package/scripts/check_agent_scope.py +117 -0
- package/scripts/check_agent_tool_mapping.py +213 -0
- package/scripts/check_review_agent_mcp_tools.py +317 -0
- package/scripts/check_security_assessment_mcp_tools.py +165 -0
- package/scripts/checkpoint_abort.py +502 -0
- package/scripts/claude_setup_review.py +438 -0
- package/scripts/codebase_recon.py +556 -0
- package/scripts/coverage_config.py +623 -0
- package/scripts/coverage_delta_steering.py +330 -0
- package/scripts/coverage_discovery_dotnet.py +315 -0
- package/scripts/coverage_discovery_java.py +742 -0
- package/scripts/coverage_discovery_js.py +546 -0
- package/scripts/coverage_gap_ranking.py +556 -0
- package/scripts/coverage_readiness.py +455 -0
- package/scripts/coverage_report_parse.py +521 -0
- package/scripts/detect_bdd_convention.py +252 -0
- package/scripts/eval_ablation.py +376 -0
- package/scripts/gherkin_analysis_coverage_gate.py +306 -0
- package/scripts/gherkin_cross_feature_duplicate_titles_gate.py +173 -0
- package/scripts/gherkin_effectiveness_rollup.py +238 -0
- package/scripts/gherkin_failure_path_gate.py +206 -0
- package/scripts/gherkin_feature_merge.py +720 -0
- package/scripts/gherkin_stub_gate.py +163 -0
- package/scripts/gherkin_stub_merge.py +479 -0
- package/scripts/git_origin_host.py +88 -0
- package/scripts/install-java-static-analysis.py +110 -0
- package/scripts/issue_deps.py +74 -0
- package/scripts/lib/_bdd_markers.py +28 -0
- package/scripts/lib/_gherkin_text.py +93 -0
- package/scripts/lib/_vendored_tree.py +70 -0
- package/scripts/lib/autoship_state.py +397 -0
- package/scripts/lib/claude_md_guard.py +226 -0
- package/scripts/lib/deterministic_recon.py +446 -0
- package/scripts/lib/mcp_tool_grants.py +211 -0
- package/scripts/lib/plan_parse.py +386 -0
- package/scripts/lib/review_result.py +84 -0
- package/scripts/lib/review_roster.py +86 -0
- package/scripts/lib/session_log/__init__.py +34 -0
- package/scripts/lib/session_log/__pycache__/__init__.cpython-314.pyc +0 -0
- package/scripts/lib/session_log/__pycache__/records.cpython-314.pyc +0 -0
- package/scripts/lib/session_log/classify.py +231 -0
- package/scripts/lib/session_log/corrections.py +194 -0
- package/scripts/lib/session_log/discovery.py +108 -0
- package/scripts/lib/session_log/records.py +218 -0
- package/scripts/lib/session_log/redact.py +76 -0
- package/scripts/lib/session_log/signals.py +373 -0
- package/scripts/lib/session_report_downstream.py +614 -0
- package/scripts/lib/session_report_maintainer.py +1273 -0
- package/scripts/lib/session_report_shared.py +262 -0
- package/scripts/lib/settings_hook_guard.py +157 -0
- package/scripts/lib/slug.py +33 -0
- package/scripts/lib/stub_extractors/__init__.py +82 -0
- package/scripts/lib/stub_extractors/_common.py +328 -0
- package/scripts/lib/stub_extractors/csharp.py +19 -0
- package/scripts/lib/stub_extractors/go.py +173 -0
- package/scripts/lib/stub_extractors/java.py +18 -0
- package/scripts/lib/stub_extractors/jsts.py +126 -0
- package/scripts/mutation_stack_sections.py +149 -0
- package/scripts/mutation_yield_steering.py +345 -0
- package/scripts/orchestrator.py +895 -0
- package/scripts/plan_gherkin_export.py +227 -0
- package/scripts/plan_waves.py +208 -0
- package/scripts/pr_close_keyword_lint.py +108 -0
- package/scripts/progress_guardian.py +888 -0
- package/scripts/recon_inventory.py +273 -0
- package/scripts/review_findings_log.py +93 -0
- package/scripts/run_invariants.py +124 -0
- package/scripts/select_lenses.py +640 -0
- package/scripts/session_report.py +486 -0
- package/scripts/set_autocompact_env.py +221 -0
- package/scripts/ship_resume_guard.py +135 -0
- package/scripts/ship_review_gate.py +63 -0
- package/scripts/specs_convention_marker.py +103 -0
- package/scripts/test_improve_resume.py +277 -0
- package/scripts/test_review_mechanics.py +958 -0
- package/scripts/token_efficiency_review.py +322 -0
- package/scripts/verdict_scope.py +285 -0
- package/scripts/verify_gherkin_quality_critic_isolation.py +296 -0
- package/scripts/verify_tier.py +157 -0
- package/skills/adr-tools/SKILL.md +118 -0
- package/skills/agent-readiness/SKILL.md +105 -0
- package/skills/agent-readiness/ai_friendly_analyzers.py +326 -0
- package/skills/agent-readiness/scanner.py +441 -0
- package/skills/agent-readiness/scorecard.yaml +88 -0
- package/skills/api-design/SKILL.md +115 -0
- package/skills/apply-fixes/SKILL.md +171 -0
- package/skills/apply-test-doubles/SKILL.md +321 -0
- package/skills/artifact-lifecycle/SKILL.md +127 -0
- package/skills/autoship/SKILL.md +1124 -0
- package/skills/benchmark/SKILL.md +105 -0
- package/skills/branch-workflow/SKILL.md +89 -0
- package/skills/browse/SKILL.md +184 -0
- package/skills/browser-testing/SKILL.md +62 -0
- package/skills/browser-testing/references/playwright-patterns.md +216 -0
- package/skills/build/SKILL.md +422 -0
- package/skills/build/references/static-self-heal.md +245 -0
- package/skills/careful/SKILL.md +72 -0
- package/skills/cd-test-architecture/SKILL.md +371 -0
- package/skills/ci-debugging/SKILL.md +105 -0
- package/skills/co-evolution-audit/SKILL.md +269 -0
- package/skills/code-review/SKILL.md +1015 -0
- package/skills/code-review/examples/aggregated-sample.json +56 -0
- package/skills/code-review/examples/sample-report.md +41 -0
- package/skills/code-review/output-format.md +478 -0
- package/skills/code-review/scripts/activation.py +86 -0
- package/skills/code-review/scripts/change_impact.py +357 -0
- package/skills/code-review/scripts/change_shape.py +372 -0
- package/skills/code-review/scripts/change_size.py +212 -0
- package/skills/code-review/scripts/changed_file_list.py +141 -0
- package/skills/code-review/scripts/closing_pass.py +187 -0
- package/skills/code-review/scripts/consolidate.py +277 -0
- package/skills/code-review/scripts/contract_failure_report.py +185 -0
- package/skills/code-review/scripts/dispatch_reconcile.py +66 -0
- package/skills/code-review/scripts/dispatch_waves.py +164 -0
- package/skills/code-review/scripts/finding_signature.py +446 -0
- package/skills/code-review/scripts/ledger.py +283 -0
- package/skills/code-review/scripts/partition.py +169 -0
- package/skills/code-review/scripts/render_tiered_findings.py +274 -0
- package/skills/code-review/scripts/repo_invariants.py +1066 -0
- package/skills/code-review/scripts/review_context_pack.py +306 -0
- package/skills/code-review/scripts/review_round_log.py +345 -0
- package/skills/code-review/scripts/review_value_coverage.py +297 -0
- package/skills/code-review/scripts/validate_review_output.py +467 -0
- package/skills/code-review/sliced-mode.md +205 -0
- package/skills/competitive-analysis/SKILL.md +191 -0
- package/skills/context-loading-protocol/SKILL.md +157 -0
- package/skills/continue/SKILL.md +90 -0
- package/skills/cost-report/SKILL.md +178 -0
- package/skills/coverage-baseline/SKILL.md +335 -0
- package/skills/coverage-baseline/references/multi-project-discovery.md +202 -0
- package/skills/coverage-delta/SKILL.md +181 -0
- package/skills/coverage-delta/references/mutation-gate.md +70 -0
- package/skills/design-doc/SKILL.md +95 -0
- package/skills/design-interrogation/SKILL.md +89 -0
- package/skills/design-it-twice/SKILL.md +91 -0
- package/skills/docker-image-audit/SKILL.md +108 -0
- package/skills/docker-image-audit/references/install-guide.md +64 -0
- package/skills/docker-image-audit/references/report-template.md +73 -0
- package/skills/docker-image-create/SKILL.md +185 -0
- package/skills/domain-analysis/SKILL.md +183 -0
- package/skills/domain-driven-design/SKILL.md +194 -0
- package/skills/exploratory-testing/SKILL.md +108 -0
- package/skills/explore/SKILL.md +51 -0
- package/skills/farley-score/SKILL.md +165 -0
- package/skills/feature-file-validation/SKILL.md +78 -0
- package/skills/feature-file-validation/references/validation-rules.md +115 -0
- package/skills/feedback-learning/SKILL.md +414 -0
- package/skills/fix/SKILL.md +450 -0
- package/skills/freeze/SKILL.md +68 -0
- package/skills/frontend-architecture/SKILL.md +113 -0
- package/skills/gherkin-derive/SKILL.md +630 -0
- package/skills/gherkin-public/SKILL.md +266 -0
- package/skills/governance-compliance/SKILL.md +150 -0
- package/skills/guard/SKILL.md +75 -0
- package/skills/handoff/SKILL.md +139 -0
- package/skills/handoff/references/summary-templates.md +242 -0
- package/skills/harness-audit/SKILL.md +751 -0
- package/skills/harness-audit/scripts/lesson_validate.py +386 -0
- package/skills/harness-audit/scripts/redundancy_criterion.py +188 -0
- package/skills/headless-run/SKILL.md +45 -0
- package/skills/headless-run/scripts/isolated_dispatch.py +381 -0
- package/skills/help/SKILL.md +72 -0
- package/skills/hexagonal-architecture/SKILL.md +85 -0
- package/skills/human-oversight-protocol/SKILL.md +224 -0
- package/skills/issues-from-assessment/SKILL.md +223 -0
- package/skills/issues-from-plan/SKILL.md +133 -0
- package/skills/legacy-code/SKILL.md +132 -0
- package/skills/mermaid-diagramming/SKILL.md +120 -0
- package/skills/mutation-night-watch/SKILL.md +154 -0
- package/skills/mutation-night-watch/references/scheduling.md +135 -0
- package/skills/mutation-testing/SKILL.md +396 -0
- package/skills/mutation-testing/references/languages/csharp-stryker-net.md +676 -0
- package/skills/mutation-testing/references/languages/go-go-mutesting.md +95 -0
- package/skills/mutation-testing/references/languages/java-pitest.md +77 -0
- package/skills/mutation-testing/references/languages/javascript-stryker.md +188 -0
- package/skills/mutation-testing/references/languages/python-mutmut.md +97 -0
- package/skills/mutation-testing/references/time-estimation.md +34 -0
- package/skills/mutation-testing/references/tool-detection.md +15 -0
- package/skills/mutation-testing/references/workflow-callers.md +23 -0
- package/skills/mutation-testing/scripts/__pycache__/xunit_v3_feature_detector.cpython-314.pyc +0 -0
- package/skills/mutation-testing/scripts/csharp_stryker_net_slice_runner.py +635 -0
- package/skills/mutation-testing/scripts/csharp_stryker_net_status_loop.py +525 -0
- package/skills/mutation-testing/scripts/csharp_stryker_net_wrapper.py +681 -0
- package/skills/mutation-testing/scripts/mutation_baseline_reuse.py +292 -0
- package/skills/mutation-testing/scripts/mutation_exclude_policy.py +268 -0
- package/skills/mutation-testing/scripts/mutation_feasibility_gate.py +463 -0
- package/skills/mutation-testing/scripts/mutation_kill_headless.py +331 -0
- package/skills/mutation-testing/scripts/mutation_kill_insert.py +199 -0
- package/skills/mutation-testing/scripts/mutation_kill_insert_python.py +150 -0
- package/skills/mutation-testing/scripts/mutation_kill_loop.py +869 -0
- package/skills/mutation-testing/scripts/mutation_kill_loop_python.py +949 -0
- package/skills/mutation-testing/scripts/mutation_kill_retry.py +592 -0
- package/skills/mutation-testing/scripts/mutation_kill_shared.py +620 -0
- package/skills/mutation-testing/scripts/mutation_nightwatch.py +462 -0
- package/skills/mutation-testing/scripts/mutation_nightwatch_stacks.py +425 -0
- package/skills/mutation-testing/scripts/mutation_report.py +743 -0
- package/skills/mutation-testing/scripts/mutation_report_cli.py +175 -0
- package/skills/mutation-testing/scripts/mutation_safety_gate.py +69 -0
- package/skills/mutation-testing/scripts/stryker_shard_pipeline.py +847 -0
- package/skills/mutation-testing/scripts/stryker_shard_setup.py +440 -0
- package/skills/mutation-testing/scripts/stryker_timeout_retry.py +142 -0
- package/skills/mutation-testing/scripts/xunit_v3_feature_detector.py +341 -0
- package/skills/performance-benchmark/SKILL.md +174 -0
- package/skills/performance-benchmark/examples/report-format.md +43 -0
- package/skills/performance-benchmark/references/benchmark-script.md +169 -0
- package/skills/performance-metrics/SKILL.md +265 -0
- package/skills/plan/SKILL.md +199 -0
- package/skills/plan/references/gherkin-persistence.md +43 -0
- package/skills/plan/references/plan-template.md +182 -0
- package/skills/pr/SKILL.md +289 -0
- package/skills/pr/scripts/gate_retry_state.py +368 -0
- package/skills/project-init/README.md +141 -0
- package/skills/project-init/SKILL.md +1197 -0
- package/skills/project-init/evals/evals.json +200 -0
- package/skills/project-init/references/capability-tools.md +55 -0
- package/skills/project-init/references/configs.md +221 -0
- package/skills/property-based-testing/SKILL.md +121 -0
- package/skills/property-based-testing/fixtures/invariant_fixture.py +15 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/README.md +42 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/LICENSE +21 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/README.md +263 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/lib/cjs/fast-check.d.ts +5165 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/lib/cjs/fast-check.js +12147 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/lib/cjs/package.json +3 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/lib/cjs/types57/fast-check.d.ts +5165 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/lib/fast-check.d.ts +5165 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/lib/fast-check.js +12011 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/lib/rolldown-runtime-D7D4PA-g.js +13 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/lib/types57/fast-check.d.ts +5165 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/fast-check/package.json +94 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/LICENSE +21 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/README.md +168 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/RandomGenerator-DcXj09Ch.d.ts +14 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/distribution/uniformBigInt.d.ts +15 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/distribution/uniformBigInt.js +38 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/distribution/uniformFloat32.d.ts +15 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/distribution/uniformFloat32.js +18 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/distribution/uniformFloat64.d.ts +15 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/distribution/uniformFloat64.js +22 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/distribution/uniformInt.d.ts +15 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/distribution/uniformInt.js +134 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/RandomGenerator-DcXj09Ch.d.ts +14 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/distribution/uniformBigInt.d.ts +15 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/distribution/uniformBigInt.js +37 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/distribution/uniformFloat32.d.ts +15 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/distribution/uniformFloat32.js +17 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/distribution/uniformFloat64.d.ts +15 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/distribution/uniformFloat64.js +21 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/distribution/uniformInt.d.ts +15 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/distribution/uniformInt.js +133 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/generator/congruential32.d.ts +7 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/generator/congruential32.js +44 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/generator/mersenne.d.ts +7 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/generator/mersenne.js +90 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/generator/xoroshiro128plus.d.ts +7 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/generator/xoroshiro128plus.js +80 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/generator/xorshift128plus.d.ts +7 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/generator/xorshift128plus.js +78 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/package.json +3 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/types/JumpableRandomGenerator.d.ts +16 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/types/JumpableRandomGenerator.js +0 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/types/RandomGenerator.d.ts +2 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/types/RandomGenerator.js +0 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/utils/generateN.d.ts +6 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/utils/generateN.js +8 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/utils/purify.d.ts +12 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/utils/purify.js +9 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/utils/skipN.d.ts +6 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/esm/utils/skipN.js +6 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/generator/congruential32.d.ts +7 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/generator/congruential32.js +46 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/generator/mersenne.d.ts +7 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/generator/mersenne.js +92 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/generator/xoroshiro128plus.d.ts +7 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/generator/xoroshiro128plus.js +82 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/generator/xorshift128plus.d.ts +7 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/generator/xorshift128plus.js +80 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/types/JumpableRandomGenerator.d.ts +16 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/types/JumpableRandomGenerator.js +0 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/types/RandomGenerator.d.ts +2 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/types/RandomGenerator.js +0 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/utils/generateN.d.ts +6 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/utils/generateN.js +9 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/utils/purify.d.ts +12 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/utils/purify.js +10 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/utils/skipN.d.ts +6 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/lib/utils/skipN.js +7 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/node_modules/pure-rand/package.json +133 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/package-lock.json +1179 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/package.json +14 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/roundtrip.js +29 -0
- package/skills/property-based-testing/fixtures/js-roundtrip/roundtrip.properties.test.js +16 -0
- package/skills/property-based-testing/fixtures/no_property_fixture.py +10 -0
- package/skills/property-based-testing/fixtures/roundtrip_fixture.py +16 -0
- package/skills/property-based-testing/references/languages/javascript.md +54 -0
- package/skills/property-based-testing/scripts/detect_and_dispatch.py +80 -0
- package/skills/property-based-testing/scripts/hypothesis_scaffold.py +276 -0
- package/skills/proxy-resilience/SKILL.md +84 -0
- package/skills/quality-gate-pipeline/SKILL.md +184 -0
- package/skills/quality-targets-converge/SKILL.md +254 -0
- package/skills/repo-review/SKILL.md +159 -0
- package/skills/report-pdf/SKILL.md +66 -0
- package/skills/review/SKILL.md +47 -0
- package/skills/review-agent/SKILL.md +152 -0
- package/skills/review-summary/SKILL.md +73 -0
- package/skills/run-report/SKILL.md +70 -0
- package/skills/semantic-duplication-scan/SKILL.md +337 -0
- package/skills/semantic-scan/SKILL.md +53 -0
- package/skills/semgrep-analyze/SKILL.md +139 -0
- package/skills/setup/SKILL.md +1122 -0
- package/skills/ship/SKILL.md +240 -0
- package/skills/source-verification/SKILL.md +210 -0
- package/skills/source-verification/scripts/claim_extractor.py +155 -0
- package/skills/specs/.size-baseline.json +4 -0
- package/skills/specs/SKILL.md +243 -0
- package/skills/specs/references/completeness-checklist.md +83 -0
- package/skills/specs/references/extraction.md +58 -0
- package/skills/specs/references/glossary.md +59 -0
- package/skills/specs/references/persistence.md +115 -0
- package/skills/specs/references/predictability-check.md +77 -0
- package/skills/static-analysis-integration/SKILL.md +235 -0
- package/skills/static-analysis-integration/adapters/_envelope.py +26 -0
- package/skills/static-analysis-integration/adapters/jscpd-adapter.py +66 -0
- package/skills/static-analysis-integration/adapters/lizard-adapter.py +81 -0
- package/skills/static-analysis-integration/adapters/mypy-adapter.py +50 -0
- package/skills/static-analysis-integration/adapters/mypy-src-layout.py +93 -0
- package/skills/static-analysis-integration/adapters/security-review-adapter.py +212 -0
- package/skills/static-analysis-integration/maintenance.md +23 -0
- package/skills/static-analysis-integration/references/language-setup.md +228 -0
- package/skills/static-analysis-integration/references/sarif-parser.md +124 -0
- package/skills/static-analysis-integration/references/security-review-adapter.md +118 -0
- package/skills/static-analysis-integration/references/tool-configs.md +617 -0
- package/skills/static-analysis-integration/rulesets/pmd-quickstart.xml +24 -0
- package/skills/stryker-xunit-v2-shim/SKILL.md +274 -0
- package/skills/stryker-xunit-v2-shim/references/shim-howto.md +256 -0
- package/skills/stryker-xunit-v2-shim/scripts/generate_shim.py +143 -0
- package/skills/systematic-debugging/SKILL.md +130 -0
- package/skills/telemetry/SKILL.md +75 -0
- package/skills/test-audit-disable/SKILL.md +129 -0
- package/skills/test-design/SKILL.md +177 -0
- package/skills/test-design/scripts/__pycache__/internal_double_detector.cpython-314.pyc +0 -0
- package/skills/test-design/scripts/internal_double_detector.py +631 -0
- package/skills/test-design-advisor/SKILL.md +166 -0
- package/skills/test-driven-development/SKILL.md +169 -0
- package/skills/test-health/SKILL.md +262 -0
- package/skills/test-improve/SKILL.md +239 -0
- package/skills/test-improve/references/phase-0-approach-contract.md +228 -0
- package/skills/test-improve/references/phase-1-analyze.md +131 -0
- package/skills/test-improve/references/phase-2-baseline.md +121 -0
- package/skills/test-improve/references/phase-3-derive-gherkin.md +53 -0
- package/skills/test-improve/references/phase-4-plan-fixes.md +34 -0
- package/skills/test-improve/references/phase-5-improve.md +215 -0
- package/skills/test-improve/references/phase-6-refactor-decision.md +45 -0
- package/skills/test-improve/references/phase-7-refactor.md +44 -0
- package/skills/test-improve/references/phase-8-validate.md +66 -0
- package/skills/test-improve/references/phase-9-close-out-prompt.md +11 -0
- package/skills/test-improve/references/phase-9-report.md +62 -0
- package/skills/test-improve/references/review-loop.md +92 -0
- package/skills/test-improve/templates/executive-summary.md +123 -0
- package/skills/threat-modeling/SKILL.md +108 -0
- package/skills/triage/SKILL.md +211 -0
- package/skills/ubiquitous-language/SKILL.md +192 -0
- package/skills/ubiquitous-language/scripts/collect_domain_signals.py +300 -0
- package/skills/unfreeze/SKILL.md +37 -0
- package/skills/upgrade/SKILL.md +31 -0
- package/skills/upgrade/scripts/check_version_drift.py +113 -0
- package/skills/upgrade/scripts/enable_autoupdate.py +149 -0
- package/skills/version/SKILL.md +25 -0
- package/sync/__pycache__/sync_upstream.cpython-314.pyc +0 -0
- package/sync/sync_upstream.py +293 -0
- package/templates/ACCEPTED-RISKS.md.tmpl +46 -0
- package/templates/agents/agent-template.md +151 -0
- package/templates/agents/angular-testing.md +66 -0
- package/templates/agents/csharp-quality.md +63 -0
- package/templates/agents/esm-enforcer.md +52 -0
- package/templates/agents/front-end-testing.md +65 -0
- package/templates/agents/go-quality.md +65 -0
- package/templates/agents/python-quality.md +62 -0
- package/templates/agents/react-testing.md +61 -0
- package/templates/agents/ts-enforcer.md +60 -0
- package/templates/agents/twelve-factor-audit.md +49 -0
- package/tools/entropy-check.py +250 -0
- package/tools/model-hash-verify.py +213 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Value Patterns (Test Data Sourcing)
|
|
2
|
+
|
|
3
|
+
Reference file for the `test-design-advisor` skill and the `test-review` / `test-smell-review` agents. Where `fixture-construction.md` decides *how the fixture object is built* and `test-doubles.md` decides *what stands in for a collaborator*, this file decides the **scalar values** that go into them: the literals, computed values, and generated values a test feeds the SUT and asserts against. Choosing the wrong value source is a common, quiet cause of Obscure Test, Fragile Test, and Erratic Test.
|
|
4
|
+
|
|
5
|
+
Source: Gerard Meszaros, *xUnit Test Patterns* (xunitpatterns.com) — Ch. 27 *Value Patterns*. Language- and framework-agnostic.
|
|
6
|
+
|
|
7
|
+
Core principle: **every value in a test should reveal its intent.** A reader should see *why* a value is what it is — whether it's significant, derived from another value, or simply "some unique thing that doesn't matter." A magic literal whose meaning is lost is the Hard-Coded Values smell.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## The four value sources
|
|
12
|
+
|
|
13
|
+
| Pattern | What it is | Use when | Risk if misused |
|
|
14
|
+
|---------|-----------|----------|-----------------|
|
|
15
|
+
| **Literal Value** | A constant written directly in the test (`42`, `"ACTIVE"`) | The exact value *is* the point — a boundary, a known-pathological case, a spec example | Unexplained → Hard-Coded Values smell; reused across tests → fragile coupling |
|
|
16
|
+
| **Derived Value** | Computed in the test from other values via a visible expression | A value relates to another by a rule (`total = price * (1 + TAX_RATE)`); the relationship documents the requirement | Same math bug can hide in both test and SUT — pin a few cases with Literals |
|
|
17
|
+
| **Generated Value** | Produced at run time (sequence, UUID, faker) | The value must be **unique** (DB keys, idempotency tokens) or genuinely **doesn't affect** the outcome | Random generation → Erratic/Nondeterministic Test; only generate when uniqueness is required |
|
|
18
|
+
| **Dummy Object** | A do-nothing placeholder passed only to satisfy a signature | An argument is required by a method but **never used** on the path under test | If the SUT actually touches it, you need a Stub/Fake instead |
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Choosing a value source (decision flow)
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
Does the SUT's behavior depend on this specific value?
|
|
26
|
+
├─ YES → is it computed from another value by a documented rule?
|
|
27
|
+
│ ├─ YES → Derived Value (show the expression; name the constant, e.g. MAX_RETRIES)
|
|
28
|
+
│ └─ NO → Literal Value (name it for its meaning; it's a boundary or spec example)
|
|
29
|
+
│
|
|
30
|
+
└─ NO → is the value required to be unique (DB key, token, filename)?
|
|
31
|
+
├─ YES → Generated Value — prefer a *Distinct* (sequence) generator over random
|
|
32
|
+
└─ NO → is it an object only present to fill a parameter slot?
|
|
33
|
+
├─ YES → Dummy Object
|
|
34
|
+
└─ NO → a named Literal with an Intent-Revealing Name ("irrelevant" made explicit)
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## Notes that matter when evaluating tests
|
|
40
|
+
|
|
41
|
+
- **Derived vs. Literal trade-off.** Derived Values make a requirement's *relationship* explicit and survive legitimate change (raise the tax rate, the test follows). But a shared arithmetic error can appear in both the test and the SUT — so cover a few pathological cases with hand-computed **Literal** Values as a cross-check.
|
|
42
|
+
- **Distinct over Random.** A *Distinct Generated Value* (an incrementing sequence, reset per run) gives uniqueness **and** repeatability — the same values appear each run, so failures reproduce. A *Random Generated Value* trades reproducibility for coverage and usually creates an Erratic Test; if you must use one, log the seed/value on failure so the case can be replayed. Default to Distinct.
|
|
43
|
+
- **Generate only for uniqueness.** Don't reach for a generator just to avoid choosing a number. Unnecessary generation introduces nondeterminism (different values can expose different bugs — single- vs. multi-digit formatting, etc.). Prefer a named Literal when the value doesn't need to be unique.
|
|
44
|
+
- **Dummy ≠ Stub.** A Dummy is *never used*; if any method on it is called, the test should blow up (that's the signal you actually needed a Stub or Fake). Using a Dummy keeps Obscure Test away by stating "this argument is irrelevant" instead of constructing a real, distracting object. (Choosing between Dummy/Stub/Fake/Mock lives in `test-doubles.md`.)
|
|
45
|
+
- **Anonymous vs. significant.** Make the *significant* values prominent and push *irrelevant* ones behind builder defaults or a clearly-named "anonymous" helper, so the cause-and-effect the test proves isn't buried in noise (`fixture-construction.md`).
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## How this connects to the rest of the toolkit
|
|
50
|
+
|
|
51
|
+
- **`test-smells.md`** — Hard-Coded Values, Irrelevant Information, Erratic Test (from random values) are the smells these patterns prevent or, misused, cause.
|
|
52
|
+
- **`fixture-construction.md`** — Test Data Builders carry sensible defaults so only the *significant* values surface in a test; value patterns choose those values.
|
|
53
|
+
- **`test-doubles.md`** — Dummy Object sits at the boundary between value patterns and doubles; the Stub/Fake/Mock decision is there.
|
|
54
|
+
- **`result-verification.md`** — Derived Values are the basis of a *Derived Expectation*; Generated Values often pair with a *Delta Assertion* against a shared fixture.
|
|
55
|
+
- **`test-automation-principles.md`** — *Communicate Intent* (no unexplained literals) and *Repeatable Test* (Distinct over Random) are the principles at stake.
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# Verification-mode re-dispatch (#1628)
|
|
2
|
+
|
|
3
|
+
The single definition of what a **fix-verification** re-dispatch sends and
|
|
4
|
+
what it may cost. Referenced by [`skills/code-review/SKILL.md`](../skills/code-review/SKILL.md)
|
|
5
|
+
step 6a and [`skills/build/SKILL.md`](../skills/build/SKILL.md)'s inline
|
|
6
|
+
checkpoint loops — stated once here, never restated in either caller.
|
|
7
|
+
|
|
8
|
+
## The problem
|
|
9
|
+
|
|
10
|
+
When a fix loop re-dispatches an agent to confirm a fix, that dispatch is
|
|
11
|
+
indistinguishable from discovery: same tier, same full context payload. But
|
|
12
|
+
the task is far narrower — *here is the finding, here is the fix diff:
|
|
13
|
+
resolved or not?* `correctness-review` (opus/`effort: high`, the most
|
|
14
|
+
dispatched review agent in the project's logged history at 24) pays full
|
|
15
|
+
discovery cost for every confirmation.
|
|
16
|
+
|
|
17
|
+
`/code-review` step 6a's deterministic-first triage (#1610) already removes
|
|
18
|
+
the mechanically-checkable confirmations. This contract cheapens the ones
|
|
19
|
+
that genuinely need semantic judgment.
|
|
20
|
+
|
|
21
|
+
## Stage 1 — context narrowing (no routing change)
|
|
22
|
+
|
|
23
|
+
A verification re-dispatch passes **only**:
|
|
24
|
+
|
|
25
|
+
1. The finding: its signature (#1625), original message, severity, and
|
|
26
|
+
confidence.
|
|
27
|
+
2. The fix diff hunks, ± ~20 lines of surrounding context.
|
|
28
|
+
3. The agent's own lens definition.
|
|
29
|
+
|
|
30
|
+
It does **not** pass the full target file set. Token cost of a confirmation
|
|
31
|
+
drops roughly with context size regardless of tier, and #1611/#1618 measured
|
|
32
|
+
full-file payloads as the dominant input cost.
|
|
33
|
+
|
|
34
|
+
**The `insufficient-context` escape is mandatory.** The dispatch prompt must
|
|
35
|
+
state the narrowed contract explicitly and grant the agent this exit:
|
|
36
|
+
|
|
37
|
+
> If the fix's correctness cannot be judged from this context, reply
|
|
38
|
+
> `insufficient-context` — do not guess.
|
|
39
|
+
|
|
40
|
+
An `insufficient-context` reply escalates to a **full-context re-dispatch of
|
|
41
|
+
that same agent**, at its discovery tier. Narrowing must never become a quiet
|
|
42
|
+
downgrade in review quality: an agent that says it cannot judge is answered
|
|
43
|
+
with more context, not with a shrug. A verification-mode prompt that omits
|
|
44
|
+
this escape is malformed.
|
|
45
|
+
|
|
46
|
+
## Stage 2 — tier-down, declared per agent, never inferred
|
|
47
|
+
|
|
48
|
+
An agent may opt in to a cheaper tier **for verification dispatches only** by
|
|
49
|
+
declaring these in its **body** (not frontmatter — see below):
|
|
50
|
+
|
|
51
|
+
```
|
|
52
|
+
Verify-model: haiku
|
|
53
|
+
Verify-effort: medium
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
**Default when absent: unchanged** — verification runs at the same tier as
|
|
57
|
+
discovery. This default is deliberate, not conservatism for its own sake:
|
|
58
|
+
#1619 showed some confirmations genuinely need top-tier judgment. The
|
|
59
|
+
`Intl.NumberFormat.prototype.format` call — determining that a spec-bound
|
|
60
|
+
getter does not lose its receiver when unbound, per ECMA-402 — was a
|
|
61
|
+
verification-shaped question that a cheap tier would plausibly have gotten
|
|
62
|
+
wrong, and getting it wrong would have shipped a fixture that didn't test
|
|
63
|
+
what it claimed.
|
|
64
|
+
|
|
65
|
+
Resolve the pair with the shared helper, never by reading frontmatter
|
|
66
|
+
directly:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
python3 "$CLAUDE_PLUGIN_ROOT/scripts/verify_tier.py" --agent <name>
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
It prints `{"agent", "model", "effort", "opted_in"}` — the tier to dispatch
|
|
73
|
+
this agent at in verification mode, already falling back to the discovery
|
|
74
|
+
tier when no opt-in is declared.
|
|
75
|
+
|
|
76
|
+
### Why a body declaration, not frontmatter
|
|
77
|
+
|
|
78
|
+
Issue #1333 established that this plugin's own tooling metadata lives in the
|
|
79
|
+
agent **body**, because frontmatter is reserved for the official Claude Code
|
|
80
|
+
sub-agent contract recorded in
|
|
81
|
+
`plugins/marketplace-dev/knowledge/agent-contract.json` — a dated snapshot of
|
|
82
|
+
upstream documentation, not a schema this plugin may extend. `Scope:`,
|
|
83
|
+
`Cites:`, and `Enforcement:` all follow that rule; these two join them.
|
|
84
|
+
(Claude Code silently ignores unknown frontmatter keys, so putting them in
|
|
85
|
+
frontmatter would also have made a typo invisible.) See
|
|
86
|
+
[`docs/agent_info.md`](../docs/agent_info.md) § Non-standard body
|
|
87
|
+
declarations.
|
|
88
|
+
|
|
89
|
+
### Initial opt-ins
|
|
90
|
+
|
|
91
|
+
| Agent | Verify tier | Why |
|
|
92
|
+
| --- | --- | --- |
|
|
93
|
+
| `structure-review` | haiku | Confirming an extracted function or a flattened nesting level is a structural read, not a judgment call |
|
|
94
|
+
| `naming-review` | haiku | Confirming a rename landed consistently is near-mechanical once the rename itself is applied |
|
|
95
|
+
| `doc-review` | haiku | Confirming a doc line now matches the code it describes is a comparison, not an inference |
|
|
96
|
+
|
|
97
|
+
`correctness-review` and `security-review` deliberately do **not** opt in.
|
|
98
|
+
They are the two most expensive lenses and the two most obvious candidates —
|
|
99
|
+
and that is exactly why the decision waits for #1624's per-agent
|
|
100
|
+
discovery-vs-verification data to show their verification dispatches are
|
|
101
|
+
low-yield. Tiering them down on intuition is the mistake this table exists to
|
|
102
|
+
avoid.
|
|
103
|
+
|
|
104
|
+
## Recording
|
|
105
|
+
|
|
106
|
+
Every verification dispatch is recorded with `dispatch_purpose: "verification"`
|
|
107
|
+
(#1624), so per-agent cost splits by purpose. The dispatch ledger still records
|
|
108
|
+
it as a genuine dispatch of that agent (`subagent_type` unchanged), so gate
|
|
109
|
+
corroboration semantics are untouched — a tiered-down verification dispatch
|
|
110
|
+
corroborates the commit gate exactly as a discovery dispatch does.
|
|
111
|
+
|
|
112
|
+
## Out of scope
|
|
113
|
+
|
|
114
|
+
- Auto-inferring the tier from a finding's severity or confidence. Needs
|
|
115
|
+
#1624's data first.
|
|
116
|
+
- Changing discovery-dispatch tiers. This contract governs verification only.
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Virtual-Service Libraries — Record-and-Replay Catalog
|
|
2
|
+
|
|
3
|
+
Reference file for the `cd-test-architecture` skill's Downstream-service
|
|
4
|
+
branch (`Build (Fake)` bullet — see `skills/cd-test-architecture/SKILL.md`).
|
|
5
|
+
Catalogs the record-and-replay virtual-service library preferred for each
|
|
6
|
+
profiled backend stack, with a hand-rolled Fake as backup. These are
|
|
7
|
+
recommended starting points, not mandates: drop items that don't apply,
|
|
8
|
+
add what a component clearly needs.
|
|
9
|
+
|
|
10
|
+
## Preferred vs. backup
|
|
11
|
+
|
|
12
|
+
A record-and-replay virtual-service library is the **preferred** pre-merge
|
|
13
|
+
double for outbound HTTP; a hand-rolled Fake is the **backup** — used when
|
|
14
|
+
the operator declines the library, or when no protocol-appropriate library
|
|
15
|
+
exists for the component's adapter kind. See `skills/cd-test-architecture/SKILL.md`'s
|
|
16
|
+
Downstream-service branch (`Build (Fake)` bullet) for the full
|
|
17
|
+
accept/name-a-different-library/decline interaction — not restated here.
|
|
18
|
+
|
|
19
|
+
## Catalog
|
|
20
|
+
|
|
21
|
+
| Stack | Library | Protocol scope |
|
|
22
|
+
|---|---|---|
|
|
23
|
+
| `dotnet` | WireMock.Net | HTTP |
|
|
24
|
+
| `node` | Nock | HTTP |
|
|
25
|
+
| `spring-boot` | WireMock | HTTP |
|
|
26
|
+
| `go` | `go-vcr` | HTTP |
|
|
27
|
+
| `django` | VCR.py (`vcrpy`) | HTTP |
|
|
28
|
+
|
|
29
|
+
All five catalog entries above are HTTP-focused. Message-broker
|
|
30
|
+
virtualization for Event Consumer/Producer components has no equally
|
|
31
|
+
mature per-stack tool — Mountebank is the closest general-purpose fallback — via its generic TCP
|
|
32
|
+
protocol support, though it has no native AMQP/Kafka/MQTT protocol — and it
|
|
33
|
+
is itself thinner coverage than the HTTP-focused tools above, not an
|
|
34
|
+
equivalent substitute.
|
|
35
|
+
|
|
36
|
+
## Resolution order
|
|
37
|
+
|
|
38
|
+
Three-valued precedence for selecting the tool a `Build (Fake)` row
|
|
39
|
+
recommends:
|
|
40
|
+
|
|
41
|
+
1. **Existing tool detected** — the target repo already depends on (or
|
|
42
|
+
already uses in its tests) a virtual-service/record-replay library.
|
|
43
|
+
That tool becomes the default; no switch is suggested.
|
|
44
|
+
2. **Catalog default** — when no existing tool is detected, the stack's
|
|
45
|
+
entry from the table above.
|
|
46
|
+
3. **Operator override or decline** — the operator names a different
|
|
47
|
+
library (used instead of 1 or 2), or declines (hand-rolled Fake, the
|
|
48
|
+
backup).
|
|
49
|
+
|
|
50
|
+
## Recorded artifacts contain real traffic — scrub before commit
|
|
51
|
+
|
|
52
|
+
A recorded cassette or stub mapping (VCR.py/go-vcr cassettes, Nock recorder
|
|
53
|
+
output, WireMock/WireMock.Net stub mappings) captures a real
|
|
54
|
+
request/response exchange — including `Authorization`/`Cookie` headers, API
|
|
55
|
+
keys, and PII in the body — and, by design, gets committed to version
|
|
56
|
+
control alongside the test. Treat every recorded artifact as potentially
|
|
57
|
+
secret-bearing until reviewed, per `knowledge/deployment-pipeline.md`'s
|
|
58
|
+
**Secrets are not in version control** rule (Configuration management
|
|
59
|
+
table) — a recorded artifact heading into version control is exactly the
|
|
60
|
+
case that rule guards against; it just arrives via a test tool instead of a
|
|
61
|
+
config file.
|
|
62
|
+
|
|
63
|
+
Configure each tool's credential-filtering hook **before the first
|
|
64
|
+
recording** — not after:
|
|
65
|
+
|
|
66
|
+
| Tool | Filtering hook |
|
|
67
|
+
|---|---|
|
|
68
|
+
| VCR.py (`vcrpy`) | `filter_headers` / `filter_query_parameters` / `before_record_response` |
|
|
69
|
+
| go-vcr | its before-save hook |
|
|
70
|
+
| Nock | no built-in filter — manually redact the recorder's output before committing |
|
|
71
|
+
| WireMock / WireMock.Net | response transformers / body-capture limits |
|
|
72
|
+
|
|
73
|
+
Record against a non-prod instance of the dependency, using non-prod
|
|
74
|
+
credentials — scrubbing after the fact is a second line of defense, not the
|
|
75
|
+
first.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Wave / Review-Agent Fan-Out Consolidation
|
|
2
|
+
|
|
3
|
+
Soft guidance for keeping a single review wave's agent count within a coordination budget. Advisory only — it never blocks dispatch and adds no new gate.
|
|
4
|
+
|
|
5
|
+
## When it applies
|
|
6
|
+
|
|
7
|
+
When a single wave's agent-selection would dispatch **5 or more** review agents in one wave — whether the Inline Review Checkpoint dispatch table in `${CLAUDE_PLUGIN_ROOT}/knowledge/three-phase-workflow.md#inline-review-checkpoint` or Step 2 of `agents/quality-reviewer.md` selected them — note it in the phase/review output as a coordination-cost signal, not a hard block. Each agent already returns a small structured result, so the context-pollution risk is mitigated; what remains unmeasured is the coordination cost of aggregating many independent verdicts and driving one fix loop across potentially-overlapping finding sets.
|
|
8
|
+
|
|
9
|
+
## Why five
|
|
10
|
+
|
|
11
|
+
Martin Fowler's ["The Orchestrator's Tax"](https://martinfowler.com/articles/orchestrator-tax.html) recommends 2–4 concurrent agents per wave as a default and consolidating rather than scaling past ~5. `DEV_TEAM_MAX_PARALLEL_BUILDS` already bounds *hardware* concurrency (`min(16, cores-2)`, `scripts/build_jobs.py`); this guideline adds the missing *cognitive*/coordination ceiling. A single commit touching JS/TS + tests + API surface + domain logic + UI routinely selects 7–8 agents (`naming-review`, `js-fp-review`, `test-review`, `security-review`, `domain-review`, `a11y-review`, `structure-review`, `component-architecture-review`) — well past the budget.
|
|
12
|
+
|
|
13
|
+
## What to do
|
|
14
|
+
|
|
15
|
+
- **Surface, don't block.** Emit a one-line note in the phase/review output — e.g. `wave fan-out: 8 agents selected (>5 coordination-cost threshold)`. Dispatch proceeds unchanged.
|
|
16
|
+
- **Batch high-overlap agents.** Where two agents' scopes already overlap on the same lines, run them as a single combined pass instead of two. `structure-review` (baseline, every change) and `naming-review` frequently flag the same lines — `structure-review` already absorbed its other high-overlap case (`complexity-review`'s nesting and function-size charter, folded in #2093). Combining an overlapping pass cuts verdict-aggregation and fix-loop overhead without losing coverage.
|
|
17
|
+
- **Prefer the higher-altitude rollup.** Strategic and test-design requests already consolidate into a `qa-engineer` / `/test-design` rollup rather than firing many per-file agents (see `agents/orchestrator.md` § Test-review request routing). Apply the same instinct wherever a rollup skill already exists.
|
|
18
|
+
|
|
19
|
+
## What this is not
|
|
20
|
+
|
|
21
|
+
Not a gate. It changes no dispatch behavior, blocks nothing, and adds no new metric or hook. It is a documented instinct for the orchestrator and quality-reviewer to weigh coordination cost when a wave's agent count is high — the cognitive analogue of the hardware ceiling `DEV_TEAM_MAX_PARALLEL_BUILDS` already provides.
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Explore
|
|
3
|
+
description: Fast read-only codebase exploration agent (pi port of Claude Code's built-in Explore agent). Use to search broadly and return a compressed, factual summary with file:line references.
|
|
4
|
+
tools: Read, Grep, Glob, Bash
|
|
5
|
+
model: haiku
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
You are a read-only exploration agent. Investigate the codebase to answer the
|
|
9
|
+
task you are given.
|
|
10
|
+
|
|
11
|
+
- Never modify files. Bash is for read-only commands only (git log/show/diff,
|
|
12
|
+
ls, test runners in dry/list mode).
|
|
13
|
+
- Search broadly first (grep/find), then read only the relevant sections.
|
|
14
|
+
- Return a compressed, factual report: what you found, with `path:line`
|
|
15
|
+
references, and what you could not determine. No speculation presented as fact.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: general-purpose
|
|
3
|
+
description: General-purpose agent with the full tool set (pi port of Claude Code's built-in general-purpose agent). Use for multi-step research or implementation tasks that no specialist agent covers.
|
|
4
|
+
tools: Read, Grep, Glob, Bash, Edit, Write
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
You are a general-purpose engineering agent working on a delegated task.
|
|
8
|
+
Complete the task end to end, verify your work (run the relevant tests or
|
|
9
|
+
commands), and finish with a concise report of what you did, what changed
|
|
10
|
+
(`path:line`), and anything left open.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
## pi port notes (read first)
|
|
2
|
+
|
|
3
|
+
- Run each unit's `/ship` in an isolated child so `DEV_TEAM_AUTO_APPROVE=1` and its cost stay scoped to that unit: use the `headless-run` skill (`DEV_TEAM_AUTO_APPROVE=1 pi --mode json -p --no-session "/ship ..."`) rather than invoking `/ship` in this conversation.
|
|
4
|
+
- `$CLAUDE_SESSION_ID` is set by the pi extension to the pi session id.
|
|
5
|
+
- The GitHub MCP fallback (`mcp__github__*`) only exists if the user configured a GitHub MCP server in `.pi/mcp.json`; otherwise `gh` is required.
|
|
6
|
+
- Issue and comment text follows the "GitHub text style" from the system prompt. Keep every heading, section and marker that this skill's template requires, because later steps read them. Write the prose inside them plainly and briefly. If the template itself breaks a rule (for example a required list that is longer than the limit), send the same `gh` command again unchanged: the extension blocks it only once.
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
## pi port notes (read first)
|
|
2
|
+
|
|
3
|
+
- Issue and comment text follows the "GitHub text style" from the system prompt. Keep every heading, section and marker that this skill's template requires, because later steps read them. Write the prose inside them plainly and briefly. If the template itself breaks a rule (for example a required list that is longer than the limit), send the same `gh` command again unchanged: the extension blocks it only once.
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
## pi port notes (read first)
|
|
2
|
+
|
|
3
|
+
- Issue and comment text follows the "GitHub text style" from the system prompt. Keep every heading, section and marker that this skill's template requires, because later steps read them. Write the prose inside them plainly and briefly. If the template itself breaks a rule (for example a required list that is longer than the limit), send the same `gh` command again unchanged: the extension blocks it only once.
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
## pi port notes
|
|
2
|
+
|
|
3
|
+
- Scripts in this skill that shell out to `claude --print` / `claude -p` run through the pi port's `claude` CLI shim (on `PATH` inside pi), which executes `pi --mode json -p --no-session` and returns a Claude-style result envelope. `CLAUDE_BIN` / `CLAUDE_CLI` may point at it explicitly.
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
## pi port notes (read first)
|
|
2
|
+
|
|
3
|
+
- Write the title and body in the "GitHub text style" from the system prompt. The extension blocks a `gh pr create` whose title or body breaks it, once.
|
|
4
|
+
- Body order: one sentence that says what changes and why, then `## Summary` (at most 3 bullets), then `## Test Plan`, then `## Quality Gate` with its results on one line (`Tests 42 passed · types clean · lint clean · review clean`).
|
|
5
|
+
- Put `## Decisions & Assumptions` and the four Evidence Bundle headers at the end, inside one `<details><summary>Decisions and evidence</summary>` block. Keep all of their content. Only the place changes.
|
|
6
|
+
- If the repository has `.github/PULL_REQUEST_TEMPLATE.md`, its sections come first and the same `<details>` block goes at the end.
|
|
7
|
+
- End the visible part with one next step for the reviewer, for example "Review: start at `src/auth.ts:42`."
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
## pi port notes (read first — these override the steps below)
|
|
2
|
+
|
|
3
|
+
- **MCP servers (Step 4c):** pi reads project MCP servers from `.pi/mcp.json` (user level: `~/.pi/agent/mcp.json`), not `.mcp.json`. Register CodeGraph/Repowise there, or with `pi mcp add -l <name> -- <command>`. Tell the user to run `/reload`.
|
|
4
|
+
- **Settings/hook guards (Step 4c, #1367):** there is no `.claude/settings.json` hook registration in pi; the settings.json guard reports `n/a (pi)`.
|
|
5
|
+
- **`CLAUDE.md` guard around `graphify install`:** apply the same guard to `AGENTS.md`.
|
|
6
|
+
- The `claude` CLI is not required; ignore checks for it.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
## pi port notes (read first — these override the steps below)
|
|
2
|
+
|
|
3
|
+
This is the pi port of `/setup`. Follow the steps below with these substitutions:
|
|
4
|
+
|
|
5
|
+
- **Hard dependencies (Step 3):** the `claude` CLI is not required. `pi`, `python3`, `jq`, `git` and `gh` are.
|
|
6
|
+
- **Step 4:** run the `project-init` skill with the `skill` tool (`dev-team:project-init` and `project-init` are the same).
|
|
7
|
+
- **Step 7 (agent templates):** activate templates into `.claude/agents/` exactly as written. The pi `dev_team_subagent` tool loads project agents from `.pi/agents/` and `.claude/agents/`, and they take precedence over the package agents.
|
|
8
|
+
- **Step 8 / 8a (project CLAUDE.md):** pi loads context files from the project root and its ancestors (`AGENTS.md`, or `CLAUDE.md`), **not** from `.claude/CLAUDE.md`. Everywhere these steps say `.claude/CLAUDE.md`, use `AGENTS.md` at the repository root instead (if the repo already has a root `CLAUDE.md` and no `AGENTS.md`, use that `CLAUDE.md`). Same merge/skip and marker rules.
|
|
9
|
+
- **Step 9 (formatting hook):** do not write `.claude/settings.json`. Instead set `"autoFormat": true` in `.pi/dev-team.json` (create the file if missing, keep other keys). The pi extension then runs `hooks/post_format.py` (prettier / ruff / black, auto-detected) after every `write`/`edit`.
|
|
10
|
+
- **Step 9b (autocompact):** run `scripts/set_autocompact_env.py` exactly as written. It only merges `env.CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` into `.claude/settings.json` (the one write to that file this port allows); the pi extension reads that value and compacts the session at that percentage of the model's window. pi's own threshold is `contextWindow - reserveTokens`, so the "values above ~83% have no effect" caveat becomes "values above pi's own threshold have no effect".
|
|
11
|
+
- **Step 10 (/pr):** write the generated project command to `.claude/skills/pr/SKILL.md` as written. The pi port resolves project skills in `.pi/skills/` and `.claude/skills/` before the package's own.
|
|
12
|
+
- **Step 11:** also add `.pi/dev-team.local.json` to the `.gitignore` block.
|
|
13
|
+
- **Step 12 (report):** list `AGENTS.md` and `.pi/dev-team.json` instead of `.claude/CLAUDE.md`, and list `.claude/settings.json` only for the Step 9b `env.CLAUDE_AUTOCOMPACT_PCT_OVERRIDE` key. Add a line recommending `/dev-team models` to map the opus/sonnet/haiku agent tiers to this user's models.
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
## pi port notes (read first)
|
|
2
|
+
|
|
3
|
+
- Issue and comment text follows the "GitHub text style" from the system prompt. Keep every heading, section and marker that this skill's template requires, because later steps read them. Write the prose inside them plainly and briefly. If the template itself breaks a rule (for example a required list that is longer than the limit), send the same `gh` command again unchanged: the extension blocks it only once.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: headless-run
|
|
3
|
+
description: >-
|
|
4
|
+
Run a dev-team skill or prompt headlessly in an isolated pi subprocess
|
|
5
|
+
(fresh session, JSON result, timeout). Use for scripted one-shot invocations
|
|
6
|
+
and benchmark-harness cases, e.g. running /code-review once per case.
|
|
7
|
+
argument-hint: "<prompt-or-slash-command> [--cwd DIR] [--model MODEL] [--timeout SECS]"
|
|
8
|
+
user-invocable: true
|
|
9
|
+
allowed-tools: Read, Bash
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Headless Run
|
|
13
|
+
|
|
14
|
+
Role: worker. Runs one prompt in a separate, non-interactive pi process and
|
|
15
|
+
returns its JSON result. It does not review, plan or edit by itself.
|
|
16
|
+
|
|
17
|
+
Arguments: `$ARGUMENTS`
|
|
18
|
+
|
|
19
|
+
## Isolation
|
|
20
|
+
|
|
21
|
+
- New process, `--no-session` (nothing is written to the session store and the
|
|
22
|
+
parent's session id is not reused).
|
|
23
|
+
- Non-interactive: `DEV_TEAM_INTERACTIVE` is unset, so every human gate takes
|
|
24
|
+
its documented non-interactive default.
|
|
25
|
+
- Same packages and credentials as the parent (pi's auth store is read from
|
|
26
|
+
`~/.pi/agent`), so the run uses the same providers.
|
|
27
|
+
|
|
28
|
+
## Steps
|
|
29
|
+
|
|
30
|
+
1. Parse `--cwd` (default: current directory), `--model` (default: the
|
|
31
|
+
current `PI_PROVIDER/PI_MODEL`), `--timeout` (default 1800 seconds). The rest
|
|
32
|
+
is the prompt. A leading `/name` is a dev-team command; pass it through
|
|
33
|
+
unchanged, pi expands it in the child.
|
|
34
|
+
2. Run:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
cd "<cwd>" && timeout <secs> env -u DEV_TEAM_INTERACTIVE \
|
|
38
|
+
pi --mode json -p --no-session --model "<model>" "<prompt>" > "$TMPDIR/headless-run-$$.jsonl"
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
3. Extract the result: the last `agent_end` event's final assistant text, its
|
|
42
|
+
`stopReason`, and the summed `usage` of all `message_end` assistant events.
|
|
43
|
+
Print one JSON object:
|
|
44
|
+
`{"is_error": <bool>, "result": "<text>", "stop_reason": "...", "usage": {...}, "total_cost_usd": <n>, "log": "<path>"}`.
|
|
45
|
+
Exit status 124 from `timeout` → `is_error: true, "result": "timeout"`.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: upgrade
|
|
3
|
+
description: >-
|
|
4
|
+
Check for and apply pi-dev-team package updates using pi's package manager.
|
|
5
|
+
user-invocable: true
|
|
6
|
+
allowed-tools: Read, Bash
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Upgrade
|
|
10
|
+
|
|
11
|
+
Role: worker. Updates the pi-dev-team package through pi's own package
|
|
12
|
+
mechanism. Never hand-edit installed package files.
|
|
13
|
+
|
|
14
|
+
You have been invoked with the `/upgrade` command. Arguments: none.
|
|
15
|
+
|
|
16
|
+
## Steps
|
|
17
|
+
|
|
18
|
+
1. Report the current version: run the `/version` command's script
|
|
19
|
+
(`${CLAUDE_PLUGIN_ROOT}/package.json` and `UPSTREAM.json`).
|
|
20
|
+
2. Find how the package is installed: `pi list` (look for `pi-dev-team`).
|
|
21
|
+
- **git or npm source** → run `pi update` (add `--local` if it is listed under
|
|
22
|
+
project settings). Report the version delta afterwards.
|
|
23
|
+
- **local path** (e.g. `./pi-dev-team`) → pi does not update local packages.
|
|
24
|
+
Tell the user to pull the package directory (`git -C <path> pull`) or, when
|
|
25
|
+
it is a sync of upstream, to run
|
|
26
|
+
`python3 <path>/sync/sync_upstream.py --upstream <agentic-dev-team checkout>`.
|
|
27
|
+
3. Tell the user to run `/reload` (or restart pi) so the new extension code,
|
|
28
|
+
skills and agents load.
|
|
29
|
+
|
|
30
|
+
**Be concise.** Report version deltas only.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: version
|
|
3
|
+
description: >-
|
|
4
|
+
Report the installed version of the pi-dev-team package and the upstream
|
|
5
|
+
dev-team release it was synced from.
|
|
6
|
+
user-invocable: true
|
|
7
|
+
allowed-tools: Bash
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Version
|
|
11
|
+
|
|
12
|
+
Role: worker. Purely mechanical lookup.
|
|
13
|
+
|
|
14
|
+
You have been invoked with the `/version` command. Arguments: none.
|
|
15
|
+
|
|
16
|
+
Run and report the single output line verbatim:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
node -e 'const p=require(process.env.CLAUDE_PLUGIN_ROOT+"/package.json");const u=require(process.env.CLAUDE_PLUGIN_ROOT+"/UPSTREAM.json");console.log(`${p.name} v${p.version} (upstream dev-team v${u.version} @ ${String(u.commit).slice(0,10)})`)'
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
If `CLAUDE_PLUGIN_ROOT` is unset, report exactly:
|
|
23
|
+
`pi-dev-team extension is not loaded in this session.`
|
|
24
|
+
|
|
25
|
+
Do not add commentary beyond the single result line.
|
package/package.json
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "pi-dev-team",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "pi port of Bryan Finster's dev-team (bdfinst/agentic-dev-team): persona-driven dev team, reviewer swarm, TDD-gated /specs -> /plan -> /build -> /pr workflow, guard hooks. Works with any pi model provider, including GitHub Copilot.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "Sanjit Roopra (https://github.com/sanjit-roopra)",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/sanjit-roopra/pi-dev-team.git"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://github.com/sanjit-roopra/pi-dev-team#readme",
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/sanjit-roopra/pi-dev-team/issues"
|
|
14
|
+
},
|
|
15
|
+
"keywords": ["pi-package", "agents", "code-review", "tdd", "dev-team"],
|
|
16
|
+
"type": "module",
|
|
17
|
+
"pi": {
|
|
18
|
+
"extensions": ["./extensions/dev-team/index.ts"],
|
|
19
|
+
"skills": [],
|
|
20
|
+
"prompts": [],
|
|
21
|
+
"themes": []
|
|
22
|
+
},
|
|
23
|
+
"peerDependencies": {
|
|
24
|
+
"@earendil-works/pi-agent-core": "*",
|
|
25
|
+
"@earendil-works/pi-ai": "*",
|
|
26
|
+
"@earendil-works/pi-coding-agent": "*",
|
|
27
|
+
"@earendil-works/pi-tui": "*",
|
|
28
|
+
"typebox": "*"
|
|
29
|
+
},
|
|
30
|
+
"scripts": {
|
|
31
|
+
"sync": "python3 sync/sync_upstream.py --upstream ../agentic-dev-team",
|
|
32
|
+
"test": "node --test test/unit/*.test.ts && python3 -m unittest discover -s test/py -p 'test_*.py'",
|
|
33
|
+
"e2e": "node test/e2e/run.mjs"
|
|
34
|
+
},
|
|
35
|
+
"files": ["extensions", "agents", "skills", "hooks", "scripts", "knowledge", "templates", "tools", "bin", "docs", "sync", "overrides", "UPSTREAM.json", "PORTING.md", "README.md", "LICENSE"]
|
|
36
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Build a per-diff authoring digest for the software-engineer (prototype).
|
|
3
|
+
|
|
4
|
+
Each review lens may carry a ``## Authoring checklist`` section: terse,
|
|
5
|
+
write-time reflexes distilled from its ``Detect`` rules. Given the files a step
|
|
6
|
+
will touch, this resolves the applicable lenses with ``select_lenses`` (same
|
|
7
|
+
``Scope:`` rules ``/build`` already uses) and prints only those lenses'
|
|
8
|
+
checklists, so the engineer pays tokens only for lenses that can fire.
|
|
9
|
+
|
|
10
|
+
The lens files stay the single source of truth; nothing is copied by hand.
|
|
11
|
+
|
|
12
|
+
Lenses deliberately WITHOUT a checklist (#2208 triage) — each needs a reviewer's
|
|
13
|
+
independence or whole-change view, not a write-time reflex: ``arch-review`` and
|
|
14
|
+
``domain-review`` (cross-module/ADR/boundary judgement), ``spec-compliance-review``
|
|
15
|
+
(verifies against the step's scenarios, which ``/build`` already hands the
|
|
16
|
+
engineer), ``doc-review`` (whole-repo drift), and the on-demand repo-wide lenses.
|
|
17
|
+
Framework lenses (React/Vue/Angular/a11y) are excluded by scope for other diffs.
|
|
18
|
+
|
|
19
|
+
Stdlib-only. See docs/python-hook-contract.md.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
from __future__ import annotations
|
|
23
|
+
|
|
24
|
+
import argparse
|
|
25
|
+
import re
|
|
26
|
+
import sys
|
|
27
|
+
from pathlib import Path
|
|
28
|
+
|
|
29
|
+
_HERE = Path(__file__).resolve().parent
|
|
30
|
+
sys.path.insert(0, str(_HERE))
|
|
31
|
+
|
|
32
|
+
import select_lenses
|
|
33
|
+
|
|
34
|
+
HEADING = "## Authoring checklist"
|
|
35
|
+
_H2_RE = re.compile(r"^## ")
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def extract_checklist(text: str) -> list[str]:
|
|
39
|
+
"""Bullet lines under the ``## Authoring checklist`` heading, else ``[]``."""
|
|
40
|
+
bullets: list[str] = []
|
|
41
|
+
active = False
|
|
42
|
+
for line in text.splitlines():
|
|
43
|
+
if line.startswith(HEADING):
|
|
44
|
+
active = True
|
|
45
|
+
continue
|
|
46
|
+
if active and _H2_RE.match(line):
|
|
47
|
+
break
|
|
48
|
+
if active and line.lstrip().startswith("- "):
|
|
49
|
+
bullets.append(line.rstrip())
|
|
50
|
+
return bullets
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def build_digest(files, agents_dir: Path, registry: Path):
|
|
54
|
+
"""Return ``(digest_text, lenses_with_checklist, warnings)``."""
|
|
55
|
+
roster, warnings = select_lenses.build_review_roster(agents_dir, registry)
|
|
56
|
+
lenses, more = select_lenses.applicable_lenses(
|
|
57
|
+
list(files), roster, test_files=select_lenses.test_file_subset(list(files))
|
|
58
|
+
)
|
|
59
|
+
warnings = warnings + more
|
|
60
|
+
sections: list[str] = []
|
|
61
|
+
used: list[str] = []
|
|
62
|
+
for name in lenses:
|
|
63
|
+
try:
|
|
64
|
+
text = (agents_dir / f"{name}.md").read_text(encoding="utf-8")
|
|
65
|
+
except OSError:
|
|
66
|
+
warnings.append(f"unreadable-agent:{name}")
|
|
67
|
+
continue
|
|
68
|
+
bullets = extract_checklist(text)
|
|
69
|
+
if bullets:
|
|
70
|
+
used.append(name)
|
|
71
|
+
sections.append(f"### {name}\n" + "\n".join(bullets))
|
|
72
|
+
if not sections:
|
|
73
|
+
return "", used, warnings
|
|
74
|
+
return "## Authoring checklist (write-time)\n\n" + "\n\n".join(sections) + "\n", used, warnings
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def main(argv=None) -> int:
|
|
78
|
+
p = argparse.ArgumentParser(description=__doc__.splitlines()[0])
|
|
79
|
+
p.add_argument("--files", nargs="*", default=[], help="Files the step will touch")
|
|
80
|
+
p.add_argument("--agents-dir", type=Path, default=_HERE.parent / "agents")
|
|
81
|
+
p.add_argument(
|
|
82
|
+
"--registry", type=Path, default=_HERE.parent / "knowledge" / "agent-registry.md"
|
|
83
|
+
)
|
|
84
|
+
args = p.parse_args(argv)
|
|
85
|
+
digest, _used, warnings = build_digest(args.files, args.agents_dir, args.registry)
|
|
86
|
+
for w in warnings:
|
|
87
|
+
print(f"warning: {w}", file=sys.stderr)
|
|
88
|
+
sys.stdout.write(digest)
|
|
89
|
+
return 0
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
if __name__ == "__main__":
|
|
93
|
+
raise SystemExit(main())
|