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,381 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Run a Claude Code command/skill headlessly in an ISOLATED subprocess.
|
|
3
|
+
|
|
4
|
+
Follow-up to issue #842. A benchmark harness that shells out to
|
|
5
|
+
`claude -p "/code-review …"` once per case (e.g. the #821 harness) must not
|
|
6
|
+
inherit the parent Claude Code Remote session's identity or tool surface.
|
|
7
|
+
Nested inside a live Remote session, a plain `claude -p` reuses the parent
|
|
8
|
+
`session_id` and sees Remote-injected MCP tools (CronCreate, PushNotification,
|
|
9
|
+
…). This script maximizes isolation:
|
|
10
|
+
|
|
11
|
+
* a fresh temp HOME + CLAUDE_CONFIG_DIR (no shared config/memory/telemetry);
|
|
12
|
+
* a SCRUBBED env with inherited CLAUDE_* session/Remote identity vars removed;
|
|
13
|
+
* a fresh `--session-id <uuid>` per invocation (the key fix for the reused
|
|
14
|
+
session_id) with NO `--resume` by default (see `build_cmd(resume=...)`
|
|
15
|
+
for the harness's opt-in, same-session #999/#1002 retry exception —
|
|
16
|
+
this script's own CLI/`run()` entry point never sets it);
|
|
17
|
+
* `--output-format json` so the caller reads the verified session_id/cost;
|
|
18
|
+
* a hard subprocess timeout.
|
|
19
|
+
|
|
20
|
+
Honest caveat: Remote-injected MCP *tools* cannot be removed via env — that
|
|
21
|
+
inheritance is an upstream Claude Code / Remote-runtime behavior. This script
|
|
22
|
+
gets as close to a clean local run as env + flags allow; the fully-supported
|
|
23
|
+
path for a benchmark harness is still a plain local CLI checkout, not one
|
|
24
|
+
nested inside a Remote session.
|
|
25
|
+
|
|
26
|
+
This mirrors and improves on the isolation precedent in
|
|
27
|
+
`scripts/run_tdd_experiment.py` (make_cell_home / cell_env / dispatch): that
|
|
28
|
+
version does `env = dict(os.environ)` and does NOT scrub identity vars — this
|
|
29
|
+
one does.
|
|
30
|
+
|
|
31
|
+
Stdlib only, (ADR 0014 / 0015). uuid/tempfile/subprocess are fine.
|
|
32
|
+
in a shipped script — the no-random/no-Date restriction applies only to
|
|
33
|
+
Workflow scripts, not shipped Python.
|
|
34
|
+
|
|
35
|
+
Auth (#957): the fresh HOME also wipes Claude Code's login state, so a
|
|
36
|
+
dispatch reports "Not logged in" unless `ANTHROPIC_API_KEY` is set.
|
|
37
|
+
`~/.claude.json` alone is NOT sufficient to fix this (confirmed
|
|
38
|
+
empirically) — something under `~/.claude/` itself gates the login check.
|
|
39
|
+
Pass `--preserve-auth` to copy both into the cell home first (most of
|
|
40
|
+
`~/.claude/`, minus a `_CLAUDE_DIR_EXCLUDE` allowlist-complement of bulky
|
|
41
|
+
conversation/session/telemetry state) — see `copy_auth_state()`'s
|
|
42
|
+
docstring for the full tradeoff. Off by default here; the
|
|
43
|
+
code-review-benchmark harness turns it on unconditionally.
|
|
44
|
+
|
|
45
|
+
Usage:
|
|
46
|
+
isolated_dispatch.py <prompt> [--cwd DIR] [--model MODEL] [--timeout SECS]
|
|
47
|
+
[--preserve-auth]
|
|
48
|
+
|
|
49
|
+
Exits non-zero on dispatch error or timeout.
|
|
50
|
+
"""
|
|
51
|
+
|
|
52
|
+
from __future__ import annotations
|
|
53
|
+
|
|
54
|
+
import argparse
|
|
55
|
+
import json
|
|
56
|
+
import os
|
|
57
|
+
import shutil
|
|
58
|
+
import subprocess
|
|
59
|
+
import sys
|
|
60
|
+
import tempfile
|
|
61
|
+
import uuid
|
|
62
|
+
from pathlib import Path
|
|
63
|
+
|
|
64
|
+
# Inherited env vars that carry the parent session's / Remote runtime's identity.
|
|
65
|
+
# Removing them stops the nested dispatch from re-adopting the parent identity
|
|
66
|
+
# through the environment. (Remote-injected MCP tools are NOT env-carried and
|
|
67
|
+
# cannot be scrubbed here — see the module docstring's upstream caveat.)
|
|
68
|
+
SCRUB_VARS = (
|
|
69
|
+
"CLAUDE_SESSION_ID",
|
|
70
|
+
"CLAUDE_CODE_SESSION_ID",
|
|
71
|
+
"CLAUDE_SESSION",
|
|
72
|
+
"CLAUDE_CODE_SESSION",
|
|
73
|
+
"CLAUDE_PARENT_SESSION_ID",
|
|
74
|
+
"CLAUDE_CODE_PARENT_SESSION_ID",
|
|
75
|
+
"CLAUDE_RESUME",
|
|
76
|
+
"CLAUDE_CODE_RESUME",
|
|
77
|
+
"CLAUDE_CODE_ENTRYPOINT",
|
|
78
|
+
"CLAUDE_CODE_REMOTE",
|
|
79
|
+
"CLAUDE_REMOTE",
|
|
80
|
+
"CLAUDE_REMOTE_SESSION_ID",
|
|
81
|
+
"CLAUDE_CODE_REMOTE_SESSION_ID",
|
|
82
|
+
"CLAUDE_CODE_SSE_PORT",
|
|
83
|
+
)
|
|
84
|
+
|
|
85
|
+
# Keys we always set ourselves — never scrub these even if the heuristic below
|
|
86
|
+
# would otherwise match, because build_env re-assigns them to fresh values.
|
|
87
|
+
_PROTECTED = frozenset({"CLAUDE_CONFIG_DIR"})
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def _should_scrub(name: str) -> bool:
|
|
91
|
+
"""A var leaks parent identity if it's explicitly listed OR it's a CLAUDE_*
|
|
92
|
+
var whose name mentions SESSION/REMOTE (catches Remote-runtime variants we
|
|
93
|
+
have not enumerated by name)."""
|
|
94
|
+
if name in _PROTECTED:
|
|
95
|
+
return False
|
|
96
|
+
if name in SCRUB_VARS:
|
|
97
|
+
return True
|
|
98
|
+
return name.startswith("CLAUDE_") and ("SESSION" in name or "REMOTE" in name)
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def new_session_id() -> str:
|
|
102
|
+
"""A fresh session id for this dispatch. Passed to `--session-id` so the
|
|
103
|
+
nested run cannot reuse the parent session_id."""
|
|
104
|
+
return str(uuid.uuid4())
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
def make_cell_home(root: Path | None = None) -> Path:
|
|
108
|
+
"""Create an isolated throwaway HOME + config dir for one dispatch.
|
|
109
|
+
|
|
110
|
+
Like run_tdd_experiment.make_cell_home, but a self-contained tempdir the
|
|
111
|
+
caller cleans up. A fresh HOME means no shared config, memory/, or telemetry
|
|
112
|
+
state bleeds in from the parent."""
|
|
113
|
+
base = Path(
|
|
114
|
+
tempfile.mkdtemp(prefix="headless-run-", dir=str(root) if root else None)
|
|
115
|
+
)
|
|
116
|
+
(base / ".claude").mkdir(parents=True, exist_ok=True)
|
|
117
|
+
return base
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
# Top-level entries under `~/.claude/` deliberately NOT copied by
|
|
121
|
+
# `copy_auth_state()` — bulky conversation/session/telemetry state that
|
|
122
|
+
# empirically is not needed to satisfy Claude Code's login check (verified
|
|
123
|
+
# live: a dispatch with these excluded still authenticated successfully).
|
|
124
|
+
# Named explicitly, not inferred, so this list stays auditable as the real
|
|
125
|
+
# `~/.claude/` layout evolves.
|
|
126
|
+
_CLAUDE_DIR_EXCLUDE = frozenset(
|
|
127
|
+
{
|
|
128
|
+
"history.jsonl", # full conversation history
|
|
129
|
+
"file-history", # per-edit undo history
|
|
130
|
+
"session-env", # per-session environment captures (can be thousands of entries)
|
|
131
|
+
"paste-cache", # clipboard paste cache
|
|
132
|
+
"shell-snapshots", # shell state snapshots
|
|
133
|
+
"debug", # debug logs
|
|
134
|
+
"telemetry", # usage telemetry
|
|
135
|
+
"downloads", # downloaded artifacts
|
|
136
|
+
}
|
|
137
|
+
)
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
def _make_bulky_state_ignorer(source_root: str):
|
|
141
|
+
"""Build a `shutil.copytree`-compatible `ignore` callback for
|
|
142
|
+
`copy_auth_state()`, bound to `source_root` via closure (not a shared
|
|
143
|
+
mutable attribute — `copy_auth_state()` runs concurrently across the
|
|
144
|
+
benchmark harness's `--workers` thread pool, so shared mutable state
|
|
145
|
+
here would race).
|
|
146
|
+
|
|
147
|
+
Only excludes `_CLAUDE_DIR_EXCLUDE` entries when `root == source_root`
|
|
148
|
+
(the top level of the copy) — not by name against every nested
|
|
149
|
+
directory the walk visits, since a plugin could legitimately have its
|
|
150
|
+
own `cache/`-or-similar-named subdir that must NOT be excluded just
|
|
151
|
+
because the name matches.
|
|
152
|
+
"""
|
|
153
|
+
|
|
154
|
+
def _ignore(root: str, names: list[str]) -> list[str]:
|
|
155
|
+
if root != source_root:
|
|
156
|
+
return []
|
|
157
|
+
return [n for n in names if n in _CLAUDE_DIR_EXCLUDE]
|
|
158
|
+
|
|
159
|
+
return _ignore
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
def copy_auth_state(home: Path, source_home: Path | None = None) -> bool:
|
|
163
|
+
"""Copy `~/.claude.json` + (most of) `~/.claude/` into the fresh cell
|
|
164
|
+
home so the dispatch keeps its Claude Code OAuth login (#957).
|
|
165
|
+
|
|
166
|
+
A fresh `HOME` wipes out both, and — confirmed empirically, twice —
|
|
167
|
+
`~/.claude.json` alone (even including its `oauthAccount` key) is NOT
|
|
168
|
+
sufficient to restore login; something else under `~/.claude/` itself
|
|
169
|
+
gates Claude Code's login check ahead of its actual (Keychain-backed,
|
|
170
|
+
`HOME`-independent) token lookup. Copying the whole `.claude/` tree
|
|
171
|
+
does restore it. `_CLAUDE_DIR_EXCLUDE` skips the clearly bulky,
|
|
172
|
+
clearly-not-auth-related pieces (conversation history, per-session
|
|
173
|
+
captures, telemetry, debug logs) to keep the isolation tradeoff as
|
|
174
|
+
small as it can be while still working — everything else (`settings
|
|
175
|
+
.json`, `projects/`, `sessions/`, `plugins/`, `skills/`, etc.) is
|
|
176
|
+
copied, since we don't have a confirmed narrower answer for which of
|
|
177
|
+
those specifically satisfies the login check.
|
|
178
|
+
|
|
179
|
+
Best-effort: returns `False` (never raises) if neither source exists.
|
|
180
|
+
Broken/dangling symlinks under `.claude/` (e.g. stale plugin
|
|
181
|
+
marketplace paths) are copied as links, not followed/failed on.
|
|
182
|
+
|
|
183
|
+
Opt-in here via `--preserve-auth` (other callers keep today's
|
|
184
|
+
stricter default); the code-review benchmark harness turns it on
|
|
185
|
+
unconditionally (see `runner.py`).
|
|
186
|
+
"""
|
|
187
|
+
source_home = source_home or Path.home()
|
|
188
|
+
source_claude_json = source_home / ".claude.json"
|
|
189
|
+
source_claude_dir = source_home / ".claude"
|
|
190
|
+
if not source_claude_json.is_file() and not source_claude_dir.is_dir():
|
|
191
|
+
return False
|
|
192
|
+
|
|
193
|
+
if source_claude_json.is_file():
|
|
194
|
+
shutil.copy(source_claude_json, Path(home) / ".claude.json")
|
|
195
|
+
|
|
196
|
+
if source_claude_dir.is_dir():
|
|
197
|
+
shutil.copytree(
|
|
198
|
+
source_claude_dir,
|
|
199
|
+
Path(home) / ".claude",
|
|
200
|
+
symlinks=True,
|
|
201
|
+
ignore_dangling_symlinks=True,
|
|
202
|
+
ignore=_make_bulky_state_ignorer(str(source_claude_dir)),
|
|
203
|
+
dirs_exist_ok=True,
|
|
204
|
+
)
|
|
205
|
+
return True
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
def build_env(home: Path, base: dict[str, str] | None = None) -> dict[str, str]:
|
|
209
|
+
"""Return a SCRUBBED environment rooted at a fresh HOME.
|
|
210
|
+
|
|
211
|
+
Starts from `base` (defaults to os.environ), drops every parent
|
|
212
|
+
session/Remote identity var, then sets a fresh HOME + CLAUDE_CONFIG_DIR,
|
|
213
|
+
marks the run a sandbox (so headless --dangerously-skip-permissions is
|
|
214
|
+
allowed off-root), and pins telemetry off."""
|
|
215
|
+
src = dict(os.environ) if base is None else dict(base)
|
|
216
|
+
env = {k: v for k, v in src.items() if not _should_scrub(k)}
|
|
217
|
+
home = Path(home)
|
|
218
|
+
env["HOME"] = str(home)
|
|
219
|
+
env["CLAUDE_CONFIG_DIR"] = str(home / ".claude")
|
|
220
|
+
env["IS_SANDBOX"] = "1"
|
|
221
|
+
env["DEV_TEAM_TELEMETRY"] = "off"
|
|
222
|
+
return env
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
def _is_root() -> bool:
|
|
226
|
+
getuid = getattr(os, "getuid", None)
|
|
227
|
+
return getuid is not None and getuid() == 0
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
def build_cmd(
|
|
231
|
+
prompt: str,
|
|
232
|
+
session_id: str,
|
|
233
|
+
model: str,
|
|
234
|
+
cwd: str | None = None, # accepted for symmetry; cwd is applied at run time
|
|
235
|
+
skip_permissions: bool | None = None,
|
|
236
|
+
resume: bool = False,
|
|
237
|
+
) -> list[str]:
|
|
238
|
+
"""The `claude -p` argv for one isolated dispatch.
|
|
239
|
+
|
|
240
|
+
Default (`resume=False`): always carries `--session-id <uuid>` (the
|
|
241
|
+
reused-session fix) and `--output-format json`; NEVER `--resume`/
|
|
242
|
+
`--fork-session` (those would re-adopt an existing session).
|
|
243
|
+
`--dangerously-skip-permissions` is added only when not running as root
|
|
244
|
+
(the CLI blocks it under root), matching run_tdd_experiment's
|
|
245
|
+
`os.getuid() == 0` guard.
|
|
246
|
+
|
|
247
|
+
`resume=True` (#999/#1002's harness-side retry-once backstop, see
|
|
248
|
+
`evals/code-review-benchmark/runner.py::make_isolated_dispatch_fn`):
|
|
249
|
+
targets an EXISTING session via `--resume <session_id>` instead of
|
|
250
|
+
starting a fresh one — used for a cheap same-session follow-up dispatch
|
|
251
|
+
when the primary dispatch's `/code-review --json` response narrated
|
|
252
|
+
instead of emitting its required JSON payload, so the retry doesn't
|
|
253
|
+
redo the (expensive) review, only asks the same session to re-state its
|
|
254
|
+
already-computed result. Mutually exclusive with `--session-id` by
|
|
255
|
+
construction (the CLI only accepts one or the other)."""
|
|
256
|
+
if skip_permissions is None:
|
|
257
|
+
skip_permissions = not _is_root()
|
|
258
|
+
cmd = ["claude", "-p", prompt]
|
|
259
|
+
if resume:
|
|
260
|
+
cmd += ["--resume", session_id]
|
|
261
|
+
else:
|
|
262
|
+
cmd += ["--session-id", session_id]
|
|
263
|
+
cmd += ["--output-format", "json", "--model", model]
|
|
264
|
+
if skip_permissions:
|
|
265
|
+
cmd.append("--dangerously-skip-permissions")
|
|
266
|
+
return cmd
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
def _normalize_result(stdout: str) -> dict:
|
|
270
|
+
"""Parse the `--output-format json` result into the fields a harness wants."""
|
|
271
|
+
result = {
|
|
272
|
+
"session_id": None,
|
|
273
|
+
"cost_usd": None,
|
|
274
|
+
"input_tokens": None,
|
|
275
|
+
"output_tokens": None,
|
|
276
|
+
"tokens_total": None,
|
|
277
|
+
"num_turns": None,
|
|
278
|
+
"duration_ms": None,
|
|
279
|
+
"is_error": True,
|
|
280
|
+
"parsed": False,
|
|
281
|
+
}
|
|
282
|
+
try:
|
|
283
|
+
d = json.loads(stdout)
|
|
284
|
+
except (json.JSONDecodeError, ValueError, TypeError):
|
|
285
|
+
return result
|
|
286
|
+
usage = d.get("usage", {}) or {}
|
|
287
|
+
inp = (
|
|
288
|
+
int(usage.get("input_tokens", 0) or 0)
|
|
289
|
+
+ int(usage.get("cache_creation_input_tokens", 0) or 0)
|
|
290
|
+
+ int(usage.get("cache_read_input_tokens", 0) or 0)
|
|
291
|
+
)
|
|
292
|
+
out = int(usage.get("output_tokens", 0) or 0)
|
|
293
|
+
result.update(
|
|
294
|
+
session_id=d.get("session_id"),
|
|
295
|
+
cost_usd=d.get("total_cost_usd"),
|
|
296
|
+
input_tokens=inp,
|
|
297
|
+
output_tokens=out,
|
|
298
|
+
tokens_total=inp + out,
|
|
299
|
+
num_turns=d.get("num_turns"),
|
|
300
|
+
duration_ms=d.get("duration_ms"),
|
|
301
|
+
is_error=bool(d.get("is_error")),
|
|
302
|
+
parsed=True,
|
|
303
|
+
)
|
|
304
|
+
return result
|
|
305
|
+
|
|
306
|
+
|
|
307
|
+
def run(
|
|
308
|
+
prompt: str, cwd: str, model: str, timeout: int, preserve_auth: bool = False
|
|
309
|
+
) -> int:
|
|
310
|
+
"""Do one isolated dispatch end-to-end; print the normalized JSON result.
|
|
311
|
+
|
|
312
|
+
Returns a process exit code: 0 on a clean parse with is_error false,
|
|
313
|
+
non-zero on timeout, parse failure, or a dispatch that reported an error.
|
|
314
|
+
`preserve_auth` copies the real `~/.claude.json` into the fresh cell home
|
|
315
|
+
first — see `copy_auth_state()` (#957)."""
|
|
316
|
+
home = make_cell_home()
|
|
317
|
+
if preserve_auth:
|
|
318
|
+
copy_auth_state(home)
|
|
319
|
+
session_id = new_session_id()
|
|
320
|
+
env = build_env(home)
|
|
321
|
+
cmd = build_cmd(prompt, session_id, model, cwd=cwd)
|
|
322
|
+
try:
|
|
323
|
+
proc = subprocess.run(
|
|
324
|
+
cmd,
|
|
325
|
+
cwd=cwd,
|
|
326
|
+
env=env,
|
|
327
|
+
check=False,
|
|
328
|
+
capture_output=True,
|
|
329
|
+
text=True,
|
|
330
|
+
timeout=timeout,
|
|
331
|
+
)
|
|
332
|
+
except subprocess.TimeoutExpired:
|
|
333
|
+
print(
|
|
334
|
+
json.dumps(
|
|
335
|
+
{"is_error": True, "subtype": "timeout", "session_id": session_id}
|
|
336
|
+
)
|
|
337
|
+
)
|
|
338
|
+
return 124
|
|
339
|
+
finally:
|
|
340
|
+
shutil.rmtree(str(home), ignore_errors=True)
|
|
341
|
+
|
|
342
|
+
result = _normalize_result(proc.stdout or "")
|
|
343
|
+
print(json.dumps(result))
|
|
344
|
+
if not result["parsed"]:
|
|
345
|
+
sys.stderr.write((proc.stderr or "").strip() + "\n")
|
|
346
|
+
return 1
|
|
347
|
+
return 1 if result["is_error"] else 0
|
|
348
|
+
|
|
349
|
+
|
|
350
|
+
def main(argv: list[str] | None = None) -> int:
|
|
351
|
+
parser = argparse.ArgumentParser(
|
|
352
|
+
description="Run a Claude Code prompt headlessly in an isolated subprocess."
|
|
353
|
+
)
|
|
354
|
+
parser.add_argument("prompt", help="Prompt or slash command, e.g. '/code-review'.")
|
|
355
|
+
parser.add_argument("--cwd", default=".", help="Working directory for the run.")
|
|
356
|
+
parser.add_argument("--model", default="sonnet", help="Model for the dispatch.")
|
|
357
|
+
parser.add_argument(
|
|
358
|
+
"--timeout", type=int, default=900, help="Subprocess timeout, seconds."
|
|
359
|
+
)
|
|
360
|
+
parser.add_argument(
|
|
361
|
+
"--preserve-auth",
|
|
362
|
+
action="store_true",
|
|
363
|
+
help=(
|
|
364
|
+
"Copy ~/.claude.json into the fresh cell home so the dispatch "
|
|
365
|
+
"keeps its Claude Code OAuth login (#957) instead of requiring "
|
|
366
|
+
"ANTHROPIC_API_KEY. Also carries over mcpServers and other app "
|
|
367
|
+
"state into the dispatch — off by default."
|
|
368
|
+
),
|
|
369
|
+
)
|
|
370
|
+
args = parser.parse_args(argv)
|
|
371
|
+
return run(
|
|
372
|
+
args.prompt,
|
|
373
|
+
args.cwd,
|
|
374
|
+
args.model,
|
|
375
|
+
args.timeout,
|
|
376
|
+
preserve_auth=args.preserve_auth,
|
|
377
|
+
)
|
|
378
|
+
|
|
379
|
+
|
|
380
|
+
if __name__ == "__main__":
|
|
381
|
+
raise SystemExit(main())
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: help
|
|
3
|
+
description: >-
|
|
4
|
+
List the main dev-team workflows, with an option to show every
|
|
5
|
+
user-invocable slash command.
|
|
6
|
+
argument-hint: "[--all]"
|
|
7
|
+
user-invocable: true
|
|
8
|
+
allowed-tools: Glob, Read
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Help
|
|
12
|
+
|
|
13
|
+
Role: worker. This command lists dev-team slash commands.
|
|
14
|
+
|
|
15
|
+
You have been invoked with the `/help` command.
|
|
16
|
+
|
|
17
|
+
Arguments: `[--all]` — omit for the curated main-workflow list; pass `--all` for every user command.
|
|
18
|
+
|
|
19
|
+
## Worker constraints
|
|
20
|
+
|
|
21
|
+
1. List commands only; do not execute any.
|
|
22
|
+
2. Read from the command registry; do not invent commands.
|
|
23
|
+
3. **Be concise.** One line per command, no preamble.
|
|
24
|
+
|
|
25
|
+
## Steps
|
|
26
|
+
|
|
27
|
+
### 1. Choose a mode
|
|
28
|
+
|
|
29
|
+
No arguments → [Main workflows](#2-main-workflows-default). `--all` → [All commands](#3-all-commands---all).
|
|
30
|
+
|
|
31
|
+
### 2. Main workflows (default)
|
|
32
|
+
|
|
33
|
+
Display this fixed, curated table — the primary spec → plan → build → review →
|
|
34
|
+
ship pipeline plus the commands most sessions need. This list is curated, not
|
|
35
|
+
derived from the filesystem; do not add or remove rows without a corresponding
|
|
36
|
+
edit to this file.
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
## Main Workflows
|
|
40
|
+
|
|
41
|
+
| Command | What It Does |
|
|
42
|
+
|---------|-------------|
|
|
43
|
+
| `/ship` | Run the full spec → plan → build → review → PR pipeline in one command |
|
|
44
|
+
| `/specs` | Capture Intent, Architecture Notes, and Acceptance Criteria before planning |
|
|
45
|
+
| `/plan` | Decompose a feature into vertical slices with Gherkin scenarios |
|
|
46
|
+
| `/build` | Implement an approved plan in small, reviewed batches |
|
|
47
|
+
| `/code-review` | Run the review agents against a changeset and auto-fix issues |
|
|
48
|
+
| `/pr` | Run pre-PR quality gates and open a pull request |
|
|
49
|
+
| `/test-improve` | Analyze and raise a repo's test coverage and health |
|
|
50
|
+
| `/triage` | Investigate a bug and write a TDD fix plan |
|
|
51
|
+
| `/fix` | Investigate a bug, prove it, fix it RED/GREEN, then delegate to `/pr` |
|
|
52
|
+
| `/setup` | Provision a repo for the dev-team plugin |
|
|
53
|
+
| `/continue` | Resume work from a prior session |
|
|
54
|
+
| `/help` | Show this list — pass `--all` for every command |
|
|
55
|
+
|
|
56
|
+
Run `/help --all` to see every available command.
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### 3. All commands (`--all`)
|
|
60
|
+
|
|
61
|
+
1. Use `find` to list every `${CLAUDE_PLUGIN_ROOT}/skills/*/SKILL.md` file, plus project skills in `.pi/skills/*/SKILL.md` and `.claude/skills/*/SKILL.md`.
|
|
62
|
+
2. Read each file's YAML frontmatter and extract `name`, `description`, and `user-invocable`.
|
|
63
|
+
3. Keep only files where `user-invocable` is `true` and `name` is present — agent-loaded skills are not user commands and must not appear.
|
|
64
|
+
4. Sort the remaining commands alphabetically by name and display:
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
## Available Commands
|
|
68
|
+
|
|
69
|
+
| Command | Description |
|
|
70
|
+
|---------|-------------|
|
|
71
|
+
| /name | description |
|
|
72
|
+
```
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: hexagonal-architecture
|
|
3
|
+
description: Design with ports and adapters to separate business logic from infrastructure. Use when designing a new service, reviewing structural compliance, or deciding how to introduce a new external dependency without coupling the domain.
|
|
4
|
+
role: worker
|
|
5
|
+
user-invocable: true
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Hexagonal Architecture (Ports & Adapters)
|
|
9
|
+
|
|
10
|
+
## Overview
|
|
11
|
+
Design systems with clear separation between business logic and infrastructure. The domain core has zero dependencies on outer layers; all external interactions flow through explicitly defined ports and adapters.
|
|
12
|
+
|
|
13
|
+
## Core Concepts
|
|
14
|
+
|
|
15
|
+
### Ports
|
|
16
|
+
- Interfaces that express application intent independent of technology
|
|
17
|
+
- **Inbound ports** (driving): define use cases the application exposes (e.g., `CreateOrderUseCase`)
|
|
18
|
+
- **Outbound ports** (driven): define what the application needs from the outside world (e.g., `OrderRepository`, `PaymentGateway`)
|
|
19
|
+
|
|
20
|
+
### Adapters
|
|
21
|
+
- Concrete implementations that connect ports to external systems
|
|
22
|
+
- **Inbound adapters**: REST controllers, CLI handlers, message consumers, GraphQL resolvers
|
|
23
|
+
- **Outbound adapters**: database repositories, HTTP clients, message publishers, file storage
|
|
24
|
+
|
|
25
|
+
### Dependency Rule
|
|
26
|
+
- All dependencies point inward toward the domain core
|
|
27
|
+
- Domain knows nothing about adapters, frameworks, or infrastructure
|
|
28
|
+
- Adapters depend on ports, never the reverse
|
|
29
|
+
|
|
30
|
+
## Project Structure
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
src/
|
|
34
|
+
├── domain/ # Pure business logic, no framework dependencies
|
|
35
|
+
│ ├── model/ # Entities, value objects, aggregates
|
|
36
|
+
│ ├── service/ # Domain services
|
|
37
|
+
│ └── event/ # Domain events
|
|
38
|
+
├── application/ # Use cases / application services
|
|
39
|
+
│ ├── port/
|
|
40
|
+
│ │ ├── inbound/ # Use case interfaces (driving ports)
|
|
41
|
+
│ │ └── outbound/ # Repository/gateway interfaces (driven ports)
|
|
42
|
+
│ └── service/ # Use case implementations
|
|
43
|
+
├── infrastructure/ # Framework and technology concerns
|
|
44
|
+
│ ├── config/ # Dependency injection, app configuration
|
|
45
|
+
│ └── persistence/ # Database migrations, ORM config
|
|
46
|
+
└── adapter/
|
|
47
|
+
├── inbound/ # Controllers, CLI, event consumers
|
|
48
|
+
└── outbound/ # Repository impls, API clients, message publishers
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Steps
|
|
52
|
+
|
|
53
|
+
### 1. Identify Boundaries
|
|
54
|
+
- Enumerate all external dependencies (databases, APIs, message brokers, file systems)
|
|
55
|
+
- Identify each as an inbound or outbound interaction
|
|
56
|
+
- **Graph-assisted discovery.** Prefer CodeGraph/Repowise over raw `Grep` for
|
|
57
|
+
locating adapters, port implementations, and cross-layer imports — see
|
|
58
|
+
[`knowledge/codegraph-vs-graphify.md`](../../knowledge/codegraph-vs-graphify.md)
|
|
59
|
+
for tool selection and the fallback contract.
|
|
60
|
+
|
|
61
|
+
### 2. Define Ports
|
|
62
|
+
- Create an inbound port interface for each use case the application exposes
|
|
63
|
+
- Create an outbound port interface for each external dependency the application needs
|
|
64
|
+
|
|
65
|
+
### 3. Implement Adapters
|
|
66
|
+
- Build an adapter for each port connecting to the concrete technology
|
|
67
|
+
- Verify all dependencies point inward (adapters depend on ports, never the reverse)
|
|
68
|
+
|
|
69
|
+
### 4. Validate Structure
|
|
70
|
+
- Confirm domain layer has zero imports from infrastructure or adapter layers
|
|
71
|
+
- Confirm tests can substitute adapters without touching domain logic
|
|
72
|
+
|
|
73
|
+
## Output
|
|
74
|
+
Report structural compliance as a list of violations (port without adapter, domain importing infrastructure, etc.) or confirm the structure passes all checks. Be concise — violations only; no narration for passing checks.
|
|
75
|
+
|
|
76
|
+
## Constraints
|
|
77
|
+
- Do not embed framework dependencies in the domain layer
|
|
78
|
+
- Do not bypass ports with direct infrastructure access from application services
|
|
79
|
+
|
|
80
|
+
## Guidelines
|
|
81
|
+
- Every external dependency gets its own adapter behind a port
|
|
82
|
+
- Test domain logic by substituting adapters (e.g., in-memory repository for unit tests)
|
|
83
|
+
- Introduce a new port when a new category of external interaction appears
|
|
84
|
+
- Reuse existing ports when the interaction pattern is the same
|
|
85
|
+
- Keep the application layer thin: orchestrate domain objects, don't duplicate domain logic
|