@event4u/agent-config 14.12.0 → 14.13.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/.augment-plugin/marketplace.json +3 -3
- package/.augment-plugin/plugin.json +1 -1
- package/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +234 -0
- package/CONTRIBUTING.md +38 -0
- package/CREDITS.md +135 -0
- package/NOTICE +13 -0
- package/README.md +8 -6
- package/dist/agent-src/commands/analyze/inbox.md +109 -2
- package/dist/agent-src/commands/feature/dev.md +7 -2
- package/dist/agent-src/commands/ghostwriter/write.md +5 -1
- package/dist/agent-src/commands/implement-ticket.md +1 -1
- package/dist/agent-src/commands/mission/upgrade.md +1 -1
- package/dist/agent-src/commands/orchestrate.md +2 -2
- package/dist/agent-src/commands/post-as/me.md +5 -1
- package/dist/agent-src/commands/pr/merge.md +19 -6
- package/dist/agent-src/commands/roadmap/process-full.md +19 -5
- package/dist/agent-src/commands/tdd/red.md +12 -2
- package/dist/agent-src/commands/work.md +1 -1
- package/dist/agent-src/contexts/communication/rules-auto/token-efficiency-mechanics.md +40 -0
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +5 -2
- package/dist/agent-src/contexts/execution/autonomy-mechanics.md +21 -0
- package/dist/agent-src/contexts/execution/orchestration-telemetry.md +1 -0
- package/dist/agent-src/contexts/execution/subagent-response-contract.md +40 -0
- package/dist/agent-src/contexts/execution/subagent-steering.md +13 -1
- package/dist/agent-src/contexts/execution/terminal-states.md +96 -0
- package/dist/agent-src/rules/artifact-drafting-protocol.md +1 -1
- package/dist/agent-src/rules/broken-access-control.md +4 -0
- package/dist/agent-src/rules/code-provenance.md +4 -0
- package/dist/agent-src/rules/design-fidelity.md +1 -1
- package/dist/agent-src/rules/domain-safety-pii.md +4 -0
- package/dist/agent-src/rules/domain-safety-retention.md +4 -0
- package/dist/agent-src/rules/engineering-safety-floor.md +2 -0
- package/dist/agent-src/rules/external-code-graph-interop.md +14 -12
- package/dist/agent-src/rules/improve-before-implement.md +6 -8
- package/dist/agent-src/rules/laravel-routing.md +1 -1
- package/dist/agent-src/rules/lethal-trifecta-guard.md +4 -0
- package/dist/agent-src/rules/secret-vcs-guard.md +2 -0
- package/dist/agent-src/rules/security-sensitive-stop.md +2 -0
- package/dist/agent-src/rules/source-confidentiality.md +12 -34
- package/dist/agent-src/rules/symfony-routing.md +1 -1
- package/dist/agent-src/rules/token-efficiency.md +14 -0
- package/dist/agent-src/rules/tool-safety.md +4 -0
- package/dist/agent-src/rules/untrusted-input-defense.md +4 -0
- package/dist/agent-src/scripts/archive_completed_roadmaps.ts +247 -3
- package/dist/agent-src/scripts/guarded_baseline.ts +328 -0
- package/dist/agent-src/scripts/roadmap_set_step.ts +253 -0
- package/dist/agent-src/scripts/stub_queue.ts +82 -0
- package/dist/agent-src/scripts/stubs_due.ts +400 -0
- package/dist/agent-src/scripts/ticket_bundles.ts +84 -0
- package/dist/agent-src/scripts/update_roadmap_progress.ts +8 -4
- package/dist/agent-src/skills/brand-asset-generation/SKILL.md +17 -4
- package/dist/agent-src/skills/brand-audit/SKILL.md +33 -0
- package/dist/agent-src/skills/code-intelligence/SKILL.md +57 -0
- package/dist/agent-src/skills/database/SKILL.md +8 -0
- package/dist/agent-src/skills/dependency-upgrade/SKILL.md +27 -0
- package/dist/agent-src/skills/design-review/SKILL.md +1 -1
- package/dist/agent-src/skills/doc-coauthoring/SKILL.md +1 -1
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +17 -1
- package/dist/agent-src/skills/feature-planning/SKILL.md +9 -2
- package/dist/agent-src/skills/frontend-render-security/SKILL.md +44 -0
- package/dist/agent-src/skills/git-workflow/SKILL.md +1 -1
- package/dist/agent-src/skills/js-library-packaging/scripts/check_package_surface.ts +38 -4
- package/dist/agent-src/skills/judge-artifact-completeness/rubrics/ticket-quality-score.json +2 -2
- package/dist/agent-src/skills/laravel/SKILL.md +35 -0
- package/dist/agent-src/skills/laravel-migration/SKILL.md +57 -3
- package/dist/agent-src/skills/monorepo-workspace/SKILL.md +26 -0
- package/dist/agent-src/skills/playbook-authoring/SKILL.md +28 -1
- package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +1 -1
- package/dist/agent-src/skills/skill-writing/references/procedure.md +5 -5
- package/dist/agent-src/skills/sql-writing/SKILL.md +7 -1
- package/dist/agent-src/skills/standards-from-config/SKILL.md +27 -4
- package/dist/agent-src/skills/supply-chain-intake/SKILL.md +11 -4
- package/dist/agent-src/skills/symfony-workflow/SKILL.md +35 -0
- package/dist/agent-src/skills/test-case-discovery/SKILL.md +85 -0
- package/dist/agent-src/skills/test-driven-development/SKILL.md +33 -9
- package/dist/agent-src/skills/testing-anti-patterns/SKILL.md +1 -1
- package/dist/agent-src/skills/testing-anti-patterns/process-anti-patterns.md +37 -0
- package/dist/agent-src/skills/ui-component-architect/SKILL.md +45 -2
- package/dist/agent-src/skills/upstream-contribute/SKILL.md +38 -1
- package/dist/agent-src/skills/verify-repair-loop/SKILL.md +9 -4
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/roadmaps.md +97 -3
- package/dist/agent-src/templates/scripts/check_memory.ts +258 -17
- package/dist/agent-src/templates/scripts/check_memory_proposal.ts +9 -3
- package/dist/agent-src/templates/scripts/memory_lookup.ts +86 -0
- package/dist/agent-src/templates/scripts/memory_signal.ts +44 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/implement.ts +90 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/index.ts +11 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/test.ts +23 -1
- package/dist/agent-src/templates/scripts/work_engine/directives/backend/verify.ts +10 -1
- package/dist/agent-src/templates/scripts/work_engine/directives/mixed/stitch.ts +5 -1
- package/dist/agent-src/templates/scripts/work_engine/stack/runner.ts +102 -14
- package/dist/cli/commands/uiAudit.js +124 -5
- package/dist/cli/registry.js +2 -0
- package/dist/cli-delegate/{chunk-HYWSRNUX.js → chunk-2DK2VJWG.js} +3 -3
- package/dist/cli-delegate/{chunk-JCW7ZLHK.js → chunk-4FS4WRXP.js} +5 -0
- package/dist/cli-delegate/{chunk-OMIVVCG2.js → chunk-A4QJ6ENT.js} +24 -0
- package/dist/cli-delegate/{chunk-JJA2QEWA.js → chunk-AKJGUQNO.js} +466 -285
- package/dist/cli-delegate/{chunk-E46KPN6K.js → chunk-BTWUYDGN.js} +424 -363
- package/dist/cli-delegate/{chunk-K4FFODTS.js → chunk-ILMUPLGW.js} +1227 -316
- package/dist/cli-delegate/{chunk-FF7WAFMR.js → chunk-KPBWFOPZ.js} +5 -1
- package/dist/cli-delegate/cmd_adr_effective.js +102 -0
- package/dist/cli-delegate/cmd_conformance.js +42 -10
- package/dist/cli-delegate/cmd_doctor.js +3 -3
- package/dist/cli-delegate/cmd_export.js +3 -2
- package/dist/cli-delegate/cmd_fleet.js +2 -2
- package/dist/cli-delegate/cmd_handoff.js +1 -1
- package/dist/cli-delegate/cmd_preflight.js +2 -2
- package/dist/cli-delegate/cmd_prune.js +3 -2
- package/dist/cli-delegate/cmd_settings_get.js +1 -1
- package/dist/cli-delegate/cmd_settings_migrate.js +3 -2
- package/dist/cli-delegate/cmd_settings_set.js +2 -2
- package/dist/cli-delegate/cmd_sync.js +3 -2
- package/dist/cli-delegate/cmd_uninstall.js +3 -2
- package/dist/cli-delegate/cmd_validate.js +3 -2
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +57 -57
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +1 -1
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +2 -2
- package/dist/discovery/trust-report.md +1 -1
- package/dist/discovery/workspaces.json +2 -2
- package/dist/hooks/dispatch.js +1836 -712
- package/dist/install/claudeRuleRewrite.js +254 -0
- package/dist/install/detect.js +29 -16
- package/dist/install/detect_php_shape.js +159 -0
- package/dist/install/install.mjs +634 -428
- package/dist/mcp/awesome-mcp-servers.row.md +1 -1
- package/dist/mcp/mcp-cloudflare-catalogue.json +1 -1
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/mcp/server.json +3 -3
- package/dist/mcp/server.mjs +4818 -2645
- package/dist/server/schemas/settings.js +3 -0
- package/dist/ui/assets/index-D0jaCRPM.js +29 -0
- package/dist/ui/index.html +1 -1
- package/docs/MIGRATION.md +1 -1
- package/docs/THIRD-PARTY-NOTICES.md +25 -0
- package/docs/contracts/provider-lifecycle.md +1 -1
- package/docs/contracts/settings-classes.md +10 -4
- package/docs/guidelines/agent-infra/5w2h-analysis.md +3 -3
- package/docs/guidelines/agent-infra/agent-interaction-and-decision-quality.md +1 -0
- package/docs/guidelines/agent-infra/artifact-drafting-protocol-mechanics.md +58 -3
- package/docs/guidelines/agent-infra/ask-when-uncertain-demos.md +2 -2
- package/docs/guidelines/agent-infra/asking-and-brevity-examples.md +3 -3
- package/docs/guidelines/agent-infra/break-glass-usage.md +7 -7
- package/docs/guidelines/agent-infra/carve-out-predicates.md +3 -3
- package/docs/guidelines/agent-infra/comparison-matrix.md +1 -1
- package/docs/guidelines/agent-infra/critical-thinking.md +4 -4
- package/docs/guidelines/agent-infra/direct-answers-demos.md +2 -2
- package/docs/guidelines/agent-infra/domain-eval-anti-pattern.md +1 -1
- package/docs/guidelines/agent-infra/engineering-memory-data-format.md +3 -3
- package/docs/guidelines/agent-infra/existence-question-verdicts.md +80 -0
- package/docs/guidelines/agent-infra/first-principles.md +2 -2
- package/docs/guidelines/agent-infra/framework-neutrality-patterns.md +2 -2
- package/docs/guidelines/agent-infra/guarded-baseline.md +39 -0
- package/docs/guidelines/agent-infra/inversion-thinking.md +5 -5
- package/docs/guidelines/agent-infra/language-and-tone-examples.md +1 -1
- package/docs/guidelines/agent-infra/layered-settings.md +10 -10
- package/docs/guidelines/agent-infra/memory-access.md +1 -1
- package/docs/guidelines/agent-infra/mental-models.md +3 -3
- package/docs/guidelines/agent-infra/reuse-verdict-mechanics.md +71 -0
- package/docs/guidelines/agent-infra/review-routing-data-format.md +7 -7
- package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +13 -7
- package/docs/guidelines/agent-infra/role-contracts.md +2 -2
- package/docs/guidelines/agent-infra/role-mode-router.md +3 -3
- package/docs/guidelines/agent-infra/rule-type-governance.md +2 -2
- package/docs/guidelines/agent-infra/scqa-framework.md +5 -5
- package/docs/guidelines/agent-infra/self-improvement-pipeline.md +6 -6
- package/docs/guidelines/agent-infra/simplicity-and-goal-demos.md +2 -2
- package/docs/guidelines/agent-infra/six-hats.md +3 -3
- package/docs/guidelines/agent-infra/skill-quality-checklist.md +6 -6
- package/docs/guidelines/agent-infra/source-confidentiality-mechanics.md +109 -0
- package/docs/guidelines/agent-infra/systems-thinking.md +1 -1
- package/docs/guidelines/agent-infra/verify-before-complete-demos.md +2 -2
- package/docs/guidelines/augment-portability-patterns.md +6 -4
- package/docs/guidelines/component-oriented-and-oop-development.md +3 -2
- package/docs/guidelines/cross-role-handoff.md +2 -2
- package/docs/guidelines/design-fidelity-mechanics.md +1 -1
- package/docs/guidelines/docs/readme-size-and-splitting.md +3 -3
- package/docs/guidelines/php/database.md +90 -7
- package/docs/guidelines/prompt-templates.md +7 -7
- package/llms.txt +2 -2
- package/package.json +5 -2
- package/src/agent-src/scripts/archive_completed_roadmaps.ts +247 -3
- package/src/agent-src/scripts/guarded_baseline.ts +328 -0
- package/src/agent-src/scripts/roadmap_set_step.ts +253 -0
- package/src/agent-src/scripts/stub_queue.ts +82 -0
- package/src/agent-src/scripts/stubs_due.ts +400 -0
- package/src/agent-src/scripts/ticket_bundles.ts +84 -0
- package/src/agent-src/scripts/update_roadmap_progress.ts +8 -4
- package/src/agent-src/templates/scripts/check_memory.ts +258 -17
- package/src/agent-src/templates/scripts/check_memory_proposal.ts +9 -3
- package/src/agent-src/templates/scripts/memory_lookup.ts +86 -0
- package/src/agent-src/templates/scripts/memory_signal.ts +44 -0
- package/src/agent-src/templates/scripts/work_engine/directives/backend/implement.ts +90 -0
- package/src/agent-src/templates/scripts/work_engine/directives/backend/index.ts +11 -0
- package/src/agent-src/templates/scripts/work_engine/directives/backend/test.ts +23 -1
- package/src/agent-src/templates/scripts/work_engine/directives/backend/verify.ts +10 -1
- package/src/agent-src/templates/scripts/work_engine/directives/mixed/stitch.ts +5 -1
- package/src/agent-src/templates/scripts/work_engine/stack/runner.ts +102 -14
- package/src/config/agent-settings.template.yml +32 -3
- package/src/config/assurance-capability-registry.json +21 -9
- package/src/config/canonical-terms.yml +119 -0
- package/src/config/capability-native-outcome-bars.json +81 -0
- package/src/config/ci-local-parity.yml +80 -0
- package/src/config/drafting-channels.yml +43 -0
- package/src/config/estate-count-budget.json +38 -36
- package/src/config/evaluator-budgets.json +14 -14
- package/src/config/gate-coverage.yml +579 -63
- package/src/config/gate-reachability-exemptions.json +21 -0
- package/src/config/gate-violation-baselines.json +37 -19
- package/src/config/harness-evolution-budget.json +25 -0
- package/src/config/lapsed-beta-baseline.json +96 -0
- package/src/config/memory-twin-verdicts.yml +129 -0
- package/src/config/metric-registry.yml +124 -0
- package/src/config/pack-size-budget.json +16 -15
- package/src/config/preamble-payload-budget.json +8 -8
- package/src/config/profiles/balanced.ini +27 -0
- package/src/config/profiles/full.ini +27 -0
- package/src/config/profiles/minimal.ini +27 -0
- package/src/config/publish-surface.json +9 -2
- package/src/config/routing-coverage-seed.json +16 -2
- package/src/config/rule-stub-ceilings.json +126 -112
- package/src/config/turnaround-budget.json +66 -0
- package/src/install/claudeRuleRewrite.ts +288 -0
- package/src/install/detect.ts +60 -17
- package/src/install/detect_php_shape.ts +191 -0
- package/src/scripts/_cli/cmd_doctor.ts +27 -112
- package/src/scripts/_dispatch.bash +27 -0
- package/src/scripts/_lib/activation_ladder.ts +211 -0
- package/src/scripts/_lib/activation_states.ts +88 -0
- package/src/scripts/_lib/adherence_detectors.ts +143 -0
- package/src/scripts/_lib/arith_claims.ts +181 -0
- package/src/scripts/_lib/arm_ranking.ts +62 -0
- package/src/scripts/_lib/asset_delivery_ledger.ts +303 -0
- package/src/scripts/_lib/audit_field_provenance.ts +54 -0
- package/src/scripts/_lib/auto_dispatch.ts +32 -3
- package/src/scripts/_lib/bench_ab_size_claim.ts +98 -4
- package/src/scripts/_lib/benchmark_cache_fields.ts +158 -0
- package/src/scripts/_lib/candidate_proposer.ts +402 -0
- package/src/scripts/_lib/candidate_record.ts +601 -0
- package/src/scripts/_lib/capture_rate.ts +319 -0
- package/src/scripts/_lib/collector_denominator.ts +771 -0
- package/src/scripts/_lib/collector_record.ts +340 -0
- package/src/scripts/_lib/collector_store.ts +664 -0
- package/src/scripts/_lib/collector_supervision.ts +827 -0
- package/src/scripts/_lib/concern_estate.ts +77 -0
- package/src/scripts/_lib/config_chain.ts +477 -0
- package/src/scripts/_lib/config_cost.ts +209 -0
- package/src/scripts/_lib/council_settings_block.ts +6 -0
- package/src/scripts/_lib/curator_ops.ts +172 -0
- package/src/scripts/_lib/delivery_arm_experiment.ts +266 -0
- package/src/scripts/_lib/delivery_criticality.ts +126 -0
- package/src/scripts/_lib/doctor_runtime_checks.ts +70 -0
- package/src/scripts/_lib/empty_cycles.ts +88 -0
- package/src/scripts/_lib/eval_publication.ts +354 -0
- package/src/scripts/_lib/evaluation_vector.ts +283 -0
- package/src/scripts/_lib/evaluator_promotion.ts +225 -0
- package/src/scripts/_lib/evidence_basis.ts +118 -0
- package/src/scripts/_lib/exec_evidence.ts +8 -0
- package/src/scripts/_lib/experience_card.ts +272 -0
- package/src/scripts/_lib/experience_report.ts +151 -0
- package/src/scripts/_lib/experiment_freeze.ts +112 -0
- package/src/scripts/_lib/generated_by.ts +66 -0
- package/src/scripts/_lib/harness_evolution_guards.ts +229 -0
- package/src/scripts/_lib/hook_effect_probe.ts +141 -0
- package/src/scripts/_lib/host_denominator.ts +687 -0
- package/src/scripts/_lib/host_projection_reach.ts +157 -0
- package/src/scripts/_lib/ignored_blocker.ts +148 -0
- package/src/scripts/_lib/install_reach_checks.ts +495 -0
- package/src/scripts/_lib/json_duplicate_keys.ts +150 -0
- package/src/scripts/_lib/judge_hygiene.ts +228 -0
- package/src/scripts/_lib/legacy_boundary_map.ts +228 -0
- package/src/scripts/_lib/loop_guards.ts +299 -0
- package/src/scripts/_lib/loss_class.ts +129 -0
- package/src/scripts/_lib/machine_wake.ts +51 -0
- package/src/scripts/_lib/md_prose_lines.ts +177 -0
- package/src/scripts/_lib/minimality_tiebreak.ts +168 -0
- package/src/scripts/_lib/one_resolver_invariant.ts +449 -0
- package/src/scripts/_lib/orchestration_record.ts +253 -5
- package/src/scripts/_lib/outcome_envelope.ts +227 -0
- package/src/scripts/_lib/outcome_vocabularies.ts +125 -0
- package/src/scripts/_lib/paired_stats.ts +245 -0
- package/src/scripts/_lib/paired_verdict.ts +226 -0
- package/src/scripts/_lib/prefix_stable_surfaces.ts +123 -0
- package/src/scripts/_lib/privacy_class.ts +47 -0
- package/src/scripts/_lib/regression_neighbourhood.ts +259 -0
- package/src/scripts/_lib/repeated_failure.ts +105 -0
- package/src/scripts/_lib/repo_root.ts +111 -0
- package/src/scripts/_lib/review_skipped_record.ts +37 -0
- package/src/scripts/_lib/role_split.ts +338 -0
- package/src/scripts/_lib/runtime_journal.ts +1499 -0
- package/src/scripts/_lib/runtime_wiring_checks.ts +430 -0
- package/src/scripts/_lib/skill_catalogue.ts +11 -1
- package/src/scripts/_lib/source_digest.ts +200 -0
- package/src/scripts/_lib/source_redact.ts +260 -0
- package/src/scripts/_lib/source_shape.ts +502 -0
- package/src/scripts/_lib/source_snapshot_dedup.ts +199 -0
- package/src/scripts/_lib/strip_comments.d.mts +8 -0
- package/src/scripts/_lib/strip_comments.mjs +65 -0
- package/src/scripts/_lib/test_red_state.ts +154 -0
- package/src/scripts/_lib/trigger_shift.ts +144 -0
- package/src/scripts/_lib/untrusted_content.ts +82 -7
- package/src/scripts/adoption_report.ts +1 -1
- package/src/scripts/adr/evidence_census.ts +1 -1
- package/src/scripts/adr/regenerate_index.ts +26 -2
- package/src/scripts/adr_cite_check.ts +164 -1
- package/src/scripts/ai_council/blind_review.ts +11 -1
- package/src/scripts/ai_council/clients.ts +4 -0
- package/src/scripts/ai_council/config.ts +3 -0
- package/src/scripts/ai_council/consensus.ts +28 -8
- package/src/scripts/ai_council/consensus_round.ts +226 -0
- package/src/scripts/ai_council/disagreement_signal.ts +338 -0
- package/src/scripts/ai_council/inline_findings.ts +340 -0
- package/src/scripts/ai_council/judge_position_bias.ts +197 -0
- package/src/scripts/ai_council/orchestrator.ts +16 -203
- package/src/scripts/ai_council/orchestrator_results.ts +23 -3
- package/src/scripts/ai_council/pricing.ts +106 -0
- package/src/scripts/ai_council/prompts.ts +74 -7
- package/src/scripts/ai_council/provider_leakage_bench.ts +327 -0
- package/src/scripts/ai_council/py_format.ts +14 -3
- package/src/scripts/ai_council/recouncil_guard.ts +293 -0
- package/src/scripts/ai_council/response_record.ts +50 -0
- package/src/scripts/ai_council/topology_bench_manifest.ts +860 -0
- package/src/scripts/ai_council/topology_vocabulary.ts +175 -0
- package/src/scripts/asset_delivery_ledger.ts +157 -0
- package/src/scripts/attest_artifact.ts +193 -0
- package/src/scripts/audit_auto_rules.ts +2 -1
- package/src/scripts/audit_command_surface.ts +1 -1
- package/src/scripts/audit_mcp_tools.ts +2 -2
- package/src/scripts/audit_skill_overlap_allowlist.json +6 -1
- package/src/scripts/audit_user_type_axis.ts +2 -1
- package/src/scripts/bench_ab_clone.ts +215 -10
- package/src/scripts/bench_ab_integrity.ts +119 -5
- package/src/scripts/bench_ab_v2_stats.ts +40 -213
- package/src/scripts/build_archive_index.ts +1 -1
- package/src/scripts/build_linear_digest.ts +1 -1
- package/src/scripts/build_proof.ts +11 -4
- package/src/scripts/build_rule_trigger_matrix.ts +1 -1
- package/src/scripts/build_source_digests.ts +157 -0
- package/src/scripts/cache_realization_report.ts +103 -0
- package/src/scripts/check_adr_frontmatter.ts +126 -0
- package/src/scripts/check_benchmark_report_fields.ts +207 -0
- package/src/scripts/check_beta_review_markers.ts +235 -6
- package/src/scripts/check_bundle_path_leakage.ts +34 -1
- package/src/scripts/check_claims.ts +576 -6
- package/src/scripts/check_composite_arming.ts +35 -0
- package/src/scripts/check_concern_admissions.ts +365 -0
- package/src/scripts/check_enforcement_coverage.ts +28 -0
- package/src/scripts/check_estate_count.ts +142 -1
- package/src/scripts/check_gate_reachability.ts +383 -0
- package/src/scripts/check_host_loadability.ts +104 -0
- package/src/scripts/check_loss_class_declared.ts +308 -0
- package/src/scripts/check_md_language.ts +15 -98
- package/src/scripts/check_memory_proposal.ts +18 -11
- package/src/scripts/check_no_currency_in_cost_surfaces.ts +225 -0
- package/src/scripts/check_no_external_sources.ts +281 -6
- package/src/scripts/check_pack_conformance_fixture.ts +11 -1
- package/src/scripts/check_pack_size.ts +59 -2
- package/src/scripts/check_preamble_payload_budget.ts +114 -3
- package/src/scripts/check_prefix_stable_mutation.ts +372 -0
- package/src/scripts/check_publish_surface.ts +10 -1
- package/src/scripts/check_references.ts +24 -1
- package/src/scripts/check_rule_evidence_declaration.ts +316 -0
- package/src/scripts/check_rule_projection_integrity.ts +14 -4
- package/src/scripts/check_score_contract.ts +26 -3
- package/src/scripts/check_static_parity.ts +285 -0
- package/src/scripts/check_supervision_claim_atomicity.ts +498 -0
- package/src/scripts/check_suppression_hygiene.ts +15 -0
- package/src/scripts/ci_settle.ts +39 -2
- package/src/scripts/code_graph/build.ts +60 -3
- package/src/scripts/code_graph/extract.ts +44 -0
- package/src/scripts/code_graph/types.ts +24 -0
- package/src/scripts/collector_daemon.ts +714 -0
- package/src/scripts/config_cost_report.ts +302 -0
- package/src/scripts/consumer_matrix.ts +74 -1
- package/src/scripts/cost/budget.mjs +10 -3
- package/src/scripts/cost/track.mjs +10 -3
- package/src/scripts/council_cli.ts +37 -54
- package/src/scripts/dispatch_r2_reviewer.ts +46 -5
- package/src/scripts/evolution_lab.ts +980 -0
- package/src/scripts/external_sources_denylist.json +5 -18
- package/src/scripts/extract_audit_patterns.ts +21 -0
- package/src/scripts/fold_intake.ts +12 -1
- package/src/scripts/gen_discovery_baseline.ts +1 -1
- package/src/scripts/generate_capabilities_index.ts +12 -5
- package/src/scripts/generate_capability_matrix.ts +3 -3
- package/src/scripts/generate_command_flows.ts +2 -2
- package/src/scripts/generate_cookbook.ts +2 -2
- package/src/scripts/generate_index.ts +8 -1
- package/src/scripts/generate_knowledge_index.ts +2 -1
- package/src/scripts/generate_ownership_matrix.ts +2 -1
- package/src/scripts/generate_pack_manifests.ts +10 -2
- package/src/scripts/generate_role_experiences_catalog.ts +2 -2
- package/src/scripts/generate_settings_reference.ts +1 -1
- package/src/scripts/git_authorization_hook.ts +22 -1
- package/src/scripts/grade_target_readiness.ts +48 -5
- package/src/scripts/hook_effect_doctor.ts +261 -0
- package/src/scripts/hook_manifest.json +1 -1
- package/src/scripts/hook_manifest.yaml +98 -11
- package/src/scripts/hooks/block_speaking_inbox_dir.ts +271 -0
- package/src/scripts/hooks/block_unauthorized_git.ts +18 -0
- package/src/scripts/hooks/concern_registry.ts +4 -0
- package/src/scripts/hooks/dispatch_hook.ts +32 -0
- package/src/scripts/hooks/journal_record_hook.ts +345 -0
- package/src/scripts/hooks/prepush_metadata_sources.sh +110 -0
- package/src/scripts/hooks/run_continuation_hook.ts +44 -9
- package/src/scripts/hooks/shims/install.sh +61 -0
- package/src/scripts/hooks/shims/php +101 -0
- package/src/scripts/hooks/suggestion_capture_hook.ts +10 -0
- package/src/scripts/hot_context_hook.ts +16 -0
- package/src/scripts/install-hooks.sh +20 -5
- package/src/scripts/install.ts +17 -35
- package/src/scripts/inventory_frontmatter.ts +2 -1
- package/src/scripts/lint_adr_sweep_routing.ts +12 -0
- package/src/scripts/lint_canonical_terms.ts +604 -0
- package/src/scripts/lint_composition_review.ts +619 -0
- package/src/scripts/lint_consolidation_lineage.ts +666 -0
- package/src/scripts/lint_eval_specs.ts +593 -0
- package/src/scripts/lint_hook_manifest.ts +19 -0
- package/src/scripts/lint_host_portability.ts +373 -0
- package/src/scripts/lint_judge_prompt_expectation.ts +27 -1
- package/src/scripts/lint_memory_twin_parity.ts +335 -0
- package/src/scripts/lint_metric_consumers.ts +355 -0
- package/src/scripts/lint_skill_descriptions.ts +18 -1
- package/src/scripts/lint_skill_frontmatter_safety.ts +58 -0
- package/src/scripts/lint_skill_link_reach.ts +252 -0
- package/src/scripts/lint_skill_trigger_corpus.ts +426 -23
- package/src/scripts/lint_ticket_buildable.ts +17 -1
- package/src/scripts/mcp_server/consumer_tool_catalog.json +1 -1
- package/src/scripts/mcp_server/tool_catalog_source.ts +1 -1
- package/src/scripts/measure_docs_dead_links.ts +348 -0
- package/src/scripts/measure_host_capture.ts +461 -0
- package/src/scripts/migration_status.ts +3 -3
- package/src/scripts/model_rule_injection.ts +60 -0
- package/src/scripts/orchestration_record.ts +14 -0
- package/src/scripts/preamble_byte_census.ts +139 -10
- package/src/scripts/prepack-check.mjs +4 -1
- package/src/scripts/probe_turnaround.ts +384 -0
- package/src/scripts/probe_unblocked_ask.ts +279 -0
- package/src/scripts/render_benchmark_md.ts +1 -1
- package/src/scripts/rule_activation_census.ts +70 -9
- package/src/scripts/rule_backlinks.ts +1 -1
- package/src/scripts/run_lifecycle_suite.ts +208 -0
- package/src/scripts/run_skill_evals.ts +40 -0
- package/src/scripts/schemas/delivery-manifest.schema.json +43 -0
- package/src/scripts/schemas/drafting-channels.schema.json +43 -0
- package/src/scripts/schemas/evals.schema.json +24 -1
- package/src/scripts/schemas/rule.schema.json +52 -1
- package/src/scripts/schemas/skill.schema.json +17 -2
- package/src/scripts/skill_overlap.ts +7 -1
- package/src/scripts/skill_tools/run_block_d_eval.ts +8 -1
- package/src/scripts/skill_tools/score_skill_relevance.ts +84 -3
- package/src/scripts/skill_tools/suggest_skill_for_task.ts +8 -1
- package/src/scripts/skill_usage_report.ts +2 -1
- package/src/scripts/stubs_due.ts +211 -0
- package/src/scripts/sweep_source_surfaces.ts +678 -0
- package/src/scripts/sync_pr_branch.ts +3 -3
- package/src/scripts/trigger_eval_grandfather.json +202 -222
- package/src/scripts/utilization_report.ts +22 -2
- package/src/server/schemas/settings.ts +5 -0
- package/src/templates/marketing-copy.yml +1 -1
- package/dist/ui/assets/index-Cxgy63kz.js +0 -26
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The re-council guard — warn before paying twice for one deliberation.
|
|
3
|
+
*
|
|
4
|
+
* `road-to-inbox-harvest-2026-08-e-council-topology-evidence` Phase 1A. The
|
|
5
|
+
* phase's own framing is the design constraint: *"the cheapest quality
|
|
6
|
+
* improvement is not paying twice for the same deliberation"*, and it sits
|
|
7
|
+
* before any sophisticated routing on purpose.
|
|
8
|
+
*
|
|
9
|
+
* FOUR CONSTRAINTS FROM THE STEPS, EACH LOAD-BEARING:
|
|
10
|
+
*
|
|
11
|
+
* 1A.1 Reuse the EXISTING question hash. `_sha256_hex` is imported from
|
|
12
|
+
* `blind_review.ts`, not reimplemented — two hashes of one question are
|
|
13
|
+
* two answers to "is this the same question", and the second is the one
|
|
14
|
+
* nobody updates.
|
|
15
|
+
* 1A.2 WARN, NEVER PROHIBIT. {@link RecouncilVerdict} carries no field a
|
|
16
|
+
* caller could read as a block, which is stronger than a documented
|
|
17
|
+
* promise not to block: there is nothing to misread.
|
|
18
|
+
* 1A.3 Near-duplicate detection on the ALREADY-IMPORTED similarity
|
|
19
|
+
* mechanism — `trigrams` from `_lib/lexical_index.ts`, the BM25 core
|
|
20
|
+
* ADR-061 already sanctions. No embeddings, no new infrastructure. The
|
|
21
|
+
* threshold is PRE-REGISTERED below, before any tuning on the retained
|
|
22
|
+
* corpus.
|
|
23
|
+
* 1A.4 Three states, distinguishable: exact + same config, exact + stale
|
|
24
|
+
* config, near-duplicate.
|
|
25
|
+
*/
|
|
26
|
+
import * as fs from 'node:fs';
|
|
27
|
+
import * as path from 'node:path';
|
|
28
|
+
|
|
29
|
+
import { jaccardSimilarity, MERGE_THRESHOLD } from '../_lib/text_similarity.js';
|
|
30
|
+
import { _sha256_hex } from './blind_review.js';
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* The near-duplicate threshold — and it is REUSED, not chosen.
|
|
34
|
+
*
|
|
35
|
+
* Step 1A.3 asks for the threshold to be pre-registered before any tuning on
|
|
36
|
+
* the retained local corpus. `MERGE_THRESHOLD` in `_lib/text_similarity.ts` is
|
|
37
|
+
* already that: fixed by an AI-council verdict of 2026-07-05 as the point at
|
|
38
|
+
* which two texts are treated as duplicates, long before this guard existed and
|
|
39
|
+
* with no knowledge of the council-question corpus it is now applied to. A
|
|
40
|
+
* number nobody could have tuned against this corpus is the strongest form of
|
|
41
|
+
* pre-registration available, and re-declaring `0.8` here would fork it — the
|
|
42
|
+
* same defect 1A.1 forbids for the hash.
|
|
43
|
+
*
|
|
44
|
+
* `revisit-if`: the retained corpus produces a false positive at this value
|
|
45
|
+
* (two questions a human calls different, scored at or above it), or a
|
|
46
|
+
* one-sentence rewrite of a real question scores below it. Either falsifies the
|
|
47
|
+
* number, and the fix then belongs in `text_similarity.ts` where its other
|
|
48
|
+
* consumers can see it move.
|
|
49
|
+
*/
|
|
50
|
+
export const NEAR_DUPLICATE_THRESHOLD = MERGE_THRESHOLD;
|
|
51
|
+
|
|
52
|
+
/** The three states step 1A.4 requires the warning to distinguish. */
|
|
53
|
+
export type RepeatState =
|
|
54
|
+
/** Same question text, and the configuration that would run it is unchanged. */
|
|
55
|
+
| 'exact-same-config'
|
|
56
|
+
/** Same question text, but the members or round count have moved since. */
|
|
57
|
+
| 'exact-stale-config'
|
|
58
|
+
/** Not the same text, but above the pre-registered similarity threshold. */
|
|
59
|
+
| 'near-duplicate';
|
|
60
|
+
|
|
61
|
+
/** One prior run, as read from a retained response artefact. */
|
|
62
|
+
export interface PriorRun {
|
|
63
|
+
/** Path of the retained artefact. */
|
|
64
|
+
readonly artifactPath: string;
|
|
65
|
+
/** The question file it ran over, as the artefact recorded it. */
|
|
66
|
+
readonly questionPath: string;
|
|
67
|
+
/** ISO date of the artefact, for the warning's "prior run date". */
|
|
68
|
+
readonly ranAt: string;
|
|
69
|
+
/** Sorted member ids + round count — the "relevant configuration". */
|
|
70
|
+
readonly configFingerprint: string;
|
|
71
|
+
/** `_sha256_hex` of the question text, when the question file still exists. */
|
|
72
|
+
readonly questionHash: string | null;
|
|
73
|
+
/** The question text, for the near-duplicate pass. `null` when the file is gone. */
|
|
74
|
+
readonly questionText: string | null;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* A finding. There is DELIBERATELY no `block`, `refuse` or `severity` field:
|
|
79
|
+
* step 1A.2 requires that no code path can turn this into an unconditional
|
|
80
|
+
* block, and a type that cannot express one is the strongest available form of
|
|
81
|
+
* that guarantee.
|
|
82
|
+
*/
|
|
83
|
+
export interface RecouncilVerdict {
|
|
84
|
+
readonly state: RepeatState;
|
|
85
|
+
readonly prior: PriorRun;
|
|
86
|
+
/** Token Jaccard against the prior question, 0..1. Exactly 1 on an exact repeat. */
|
|
87
|
+
readonly similarity: number;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/** Sorted members plus rounds — what 1A.4 calls the relevant configuration. */
|
|
91
|
+
export function configFingerprint(members: readonly string[], rounds: number): string {
|
|
92
|
+
return `${[...members].sort().join(',')}|rounds=${String(rounds)}`;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Read the retained response artefacts into prior runs.
|
|
97
|
+
*
|
|
98
|
+
* Tolerant of every read failure by design: a malformed or half-written
|
|
99
|
+
* artefact must not break a council run. The guard is an advisory, and an
|
|
100
|
+
* advisory that can throw is worse than one that stays quiet.
|
|
101
|
+
*/
|
|
102
|
+
export function readPriorRuns(responsesDir: string, repoRoot: string): PriorRun[] {
|
|
103
|
+
let names: string[];
|
|
104
|
+
try {
|
|
105
|
+
names = fs.readdirSync(responsesDir).filter((f) => f.endsWith('.md'));
|
|
106
|
+
} catch {
|
|
107
|
+
return [];
|
|
108
|
+
}
|
|
109
|
+
const out: PriorRun[] = [];
|
|
110
|
+
for (const name of names) {
|
|
111
|
+
const abs = path.join(responsesDir, name);
|
|
112
|
+
let head: Record<string, unknown>;
|
|
113
|
+
let stat: fs.Stats;
|
|
114
|
+
try {
|
|
115
|
+
stat = fs.statSync(abs);
|
|
116
|
+
const text = fs.readFileSync(abs, 'utf8');
|
|
117
|
+
const json = _leadingJson(text);
|
|
118
|
+
// A file with no leading object is not a council artefact at all —
|
|
119
|
+
// skipped rather than admitted as a prior run with empty fields,
|
|
120
|
+
// which would put noise in a warning whose whole value is that it
|
|
121
|
+
// is rare enough to read.
|
|
122
|
+
if (json === null) continue;
|
|
123
|
+
head = JSON.parse(json) as Record<string, unknown>;
|
|
124
|
+
} catch {
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
const questionPath = typeof head['artefact'] === 'string' ? head['artefact'] : '';
|
|
128
|
+
const members = Array.isArray(head['members']) ? (head['members'] as string[]) : [];
|
|
129
|
+
const rounds = typeof head['rounds'] === 'number' ? head['rounds'] : 0;
|
|
130
|
+
let questionHash: string | null = null;
|
|
131
|
+
let questionText: string | null = null;
|
|
132
|
+
if (questionPath !== '') {
|
|
133
|
+
try {
|
|
134
|
+
const q = fs.readFileSync(path.join(repoRoot, questionPath), 'utf8');
|
|
135
|
+
questionHash = _sha256_hex(q);
|
|
136
|
+
questionText = q;
|
|
137
|
+
} catch {
|
|
138
|
+
// The question file was moved or pruned. The run is still a
|
|
139
|
+
// prior run; it simply cannot be compared by text, and saying
|
|
140
|
+
// that is better than dropping the record.
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
out.push({
|
|
144
|
+
artifactPath: abs,
|
|
145
|
+
questionPath,
|
|
146
|
+
ranAt: stat.mtime.toISOString().slice(0, 10),
|
|
147
|
+
configFingerprint: configFingerprint(members, rounds),
|
|
148
|
+
questionHash,
|
|
149
|
+
questionText,
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
return out;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/** The leading `{...}` object of an artefact, brace-balanced, or `null`. */
|
|
156
|
+
function _leadingJson(text: string): string | null {
|
|
157
|
+
const start = text.indexOf('{');
|
|
158
|
+
if (start === -1) return null;
|
|
159
|
+
let depth = 0;
|
|
160
|
+
let inStr = false;
|
|
161
|
+
let esc = false;
|
|
162
|
+
for (let i = start; i < text.length; i++) {
|
|
163
|
+
const c = text[i] as string;
|
|
164
|
+
if (inStr) {
|
|
165
|
+
if (esc) esc = false;
|
|
166
|
+
else if (c === '\\') esc = true;
|
|
167
|
+
else if (c === '"') inStr = false;
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
if (c === '"') inStr = true;
|
|
171
|
+
else if (c === '{') depth += 1;
|
|
172
|
+
else if (c === '}') {
|
|
173
|
+
depth -= 1;
|
|
174
|
+
if (depth === 0) return text.slice(start, i + 1);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return null;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Is this question already deliberated?
|
|
182
|
+
*
|
|
183
|
+
* Returns the STRONGEST finding, or `null`. Exact beats near-duplicate, and a
|
|
184
|
+
* stale-config exact beats a near-duplicate: a caller shown two findings reads
|
|
185
|
+
* neither, and the exact one carries more information.
|
|
186
|
+
*/
|
|
187
|
+
export function checkRecouncil(
|
|
188
|
+
questionText: string,
|
|
189
|
+
currentConfig: string,
|
|
190
|
+
priors: readonly PriorRun[],
|
|
191
|
+
threshold: number = NEAR_DUPLICATE_THRESHOLD,
|
|
192
|
+
): RecouncilVerdict | null {
|
|
193
|
+
const hash = _sha256_hex(questionText);
|
|
194
|
+
|
|
195
|
+
for (const p of priors) {
|
|
196
|
+
if (p.questionHash === hash) {
|
|
197
|
+
return {
|
|
198
|
+
state: p.configFingerprint === currentConfig ? 'exact-same-config' : 'exact-stale-config',
|
|
199
|
+
prior: p,
|
|
200
|
+
similarity: 1,
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
let best: RecouncilVerdict | null = null;
|
|
205
|
+
for (const p of priors) {
|
|
206
|
+
if (p.questionText === null) continue;
|
|
207
|
+
const s = jaccardSimilarity(questionText, p.questionText);
|
|
208
|
+
if (s >= threshold && (best === null || s > best.similarity)) {
|
|
209
|
+
best = { state: 'near-duplicate', prior: p, similarity: s };
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return best;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* The warning text.
|
|
217
|
+
*
|
|
218
|
+
* Every line step 1A.2 names is present — prior run date, prior artifact path,
|
|
219
|
+
* the fact that the question appears already deliberated, and the path to
|
|
220
|
+
* re-run — and 1A.3 requires the SCORE to be printed, so it is, on every state
|
|
221
|
+
* rather than only the near-duplicate one. A score of 1.00 on an exact repeat
|
|
222
|
+
* tells the reader which comparison fired.
|
|
223
|
+
*/
|
|
224
|
+
export function renderRecouncilWarning(v: RecouncilVerdict): string {
|
|
225
|
+
const what: Record<RepeatState, string> = {
|
|
226
|
+
'exact-same-config':
|
|
227
|
+
'this exact question has already been deliberated, and the configuration that would run it is unchanged',
|
|
228
|
+
'exact-stale-config':
|
|
229
|
+
'this exact question has already been deliberated, but the members or round count have moved since — the prior verdict may rest on evidence this configuration would not produce',
|
|
230
|
+
'near-duplicate':
|
|
231
|
+
'a question above the pre-registered similarity threshold has already been deliberated',
|
|
232
|
+
};
|
|
233
|
+
return [
|
|
234
|
+
`⚠️ council:re-council — ${what[v.state]}.`,
|
|
235
|
+
` prior run ${v.prior.ranAt}`,
|
|
236
|
+
` prior answer ${v.prior.artifactPath}`,
|
|
237
|
+
` question ${v.prior.questionPath || '(not recorded)'}`,
|
|
238
|
+
` similarity ${v.similarity.toFixed(2)} (threshold ${String(NEAR_DUPLICATE_THRESHOLD)}, pre-registered)`,
|
|
239
|
+
' This is a WARNING, never a refusal. Re-run with --confirm to deliberate again.',
|
|
240
|
+
'',
|
|
241
|
+
].join('\n');
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* The whole call site, in one function.
|
|
246
|
+
*
|
|
247
|
+
* Lives here rather than in `council_cli.ts` for a reason the source-size
|
|
248
|
+
* ratchet made concrete: that file is already 2,525 lines over the 1,500-line
|
|
249
|
+
* ceiling, so every line added to it is a line the ratchet counts, and a
|
|
250
|
+
* twenty-line comment explaining a guard belongs beside the guard anyway.
|
|
251
|
+
*
|
|
252
|
+
* IT CANNOT REFUSE, and the signature is where that is guaranteed: it returns
|
|
253
|
+
* `void`. Step 1A.2 requires that no code path turn the warning into an
|
|
254
|
+
* unconditional block, and a function with nothing to return gives a caller
|
|
255
|
+
* nothing to branch on.
|
|
256
|
+
*
|
|
257
|
+
* Every read is wrapped: an advisory that throws is worse than one that stays
|
|
258
|
+
* quiet, because the guard exists to save a duplicate run and never to prevent
|
|
259
|
+
* a legitimate one.
|
|
260
|
+
*
|
|
261
|
+
* `questionFile` is the RAW question file, not the built prompt. Measured on
|
|
262
|
+
* the first live run: the built prompt hashes differently from the file the
|
|
263
|
+
* prior artefact recorded, so the exact-repeat states were unreachable in
|
|
264
|
+
* production and every true repeat reported as a near-duplicate at similarity
|
|
265
|
+
* 1.00. `fallbackText` covers a question that arrived on stdin and has no file.
|
|
266
|
+
*/
|
|
267
|
+
export function warnIfRecounciled(
|
|
268
|
+
repoRoot: string,
|
|
269
|
+
questionFile: string,
|
|
270
|
+
fallbackText: string,
|
|
271
|
+
members: readonly { name: string; model: string }[],
|
|
272
|
+
rounds: number,
|
|
273
|
+
write: (s: string) => void,
|
|
274
|
+
): void {
|
|
275
|
+
try {
|
|
276
|
+
let text = fallbackText;
|
|
277
|
+
try {
|
|
278
|
+
text = fs.readFileSync(path.resolve(repoRoot, questionFile), 'utf8');
|
|
279
|
+
} catch {
|
|
280
|
+
// No file behind this question; the built prompt is the best text
|
|
281
|
+
// available, and a near-duplicate finding is still useful.
|
|
282
|
+
}
|
|
283
|
+
const v = checkRecouncil(
|
|
284
|
+
text,
|
|
285
|
+
// `name/model` — the SAME shape the artefact writer records.
|
|
286
|
+
configFingerprint(members.map((m) => `${m.name}/${m.model}`), rounds),
|
|
287
|
+
readPriorRuns(path.join(repoRoot, 'agents/runtime/council/responses'), repoRoot),
|
|
288
|
+
);
|
|
289
|
+
if (v !== null) write(renderRecouncilWarning(v));
|
|
290
|
+
} catch {
|
|
291
|
+
// See the docstring: quiet beats loud-and-broken for an advisory.
|
|
292
|
+
}
|
|
293
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How a `CouncilResponse` is shaped for the persisted session record.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from `council_cli.ts` on 2026-08-30. It belongs here on its own
|
|
5
|
+
* merits — it is a pure data-shaping function over a type this directory owns,
|
|
6
|
+
* with no CLI concern in it — and it pays for the lines the same change spent
|
|
7
|
+
* in files that are thousands past `check_source_size_budget`'s ceiling. That
|
|
8
|
+
* gate's own convention is that the total falls through extraction and never
|
|
9
|
+
* rises through a baseline edit.
|
|
10
|
+
*
|
|
11
|
+
* `metadata` values are stringified deliberately, and two consumers depend on
|
|
12
|
+
* it: `ai_council/pricing.ts` coerces them back, and `billable_cost.test.ts`
|
|
13
|
+
* pins the behavior.
|
|
14
|
+
*
|
|
15
|
+
* Side-effect-free, no CLI entry, no `process.exit`.
|
|
16
|
+
*/
|
|
17
|
+
import type { CouncilResponse } from './clients.js';
|
|
18
|
+
|
|
19
|
+
type Dict = Record<string, unknown>;
|
|
20
|
+
|
|
21
|
+
export function serializeResponses(responses: CouncilResponse[]): Dict[] {
|
|
22
|
+
const out: Dict[] = [];
|
|
23
|
+
for (const r of responses) {
|
|
24
|
+
const metadata: Dict = {};
|
|
25
|
+
for (const [k, v] of Object.entries(r.metadata || {})) {
|
|
26
|
+
metadata[k] = String(v);
|
|
27
|
+
}
|
|
28
|
+
out.push({
|
|
29
|
+
provider: r.provider,
|
|
30
|
+
model: r.model,
|
|
31
|
+
text: r.text,
|
|
32
|
+
// Present ONLY when something rewrote `text` in place — today that
|
|
33
|
+
// is the inline-findings harvest, whose emitted marker promises
|
|
34
|
+
// exactly this retention. Omitted otherwise rather than written as
|
|
35
|
+
// a copy of `text`, so an unmodified reply does not carry a
|
|
36
|
+
// duplicate of itself into every session record. The full account
|
|
37
|
+
// of why the field exists is at its single write site in
|
|
38
|
+
// `inline_findings.ts`.
|
|
39
|
+
...(r.raw_text === null ? {} : { raw_text: r.raw_text }),
|
|
40
|
+
input_tokens: r.input_tokens,
|
|
41
|
+
output_tokens: r.output_tokens,
|
|
42
|
+
cache_creation_input_tokens: r.cache_creation_input_tokens,
|
|
43
|
+
cache_read_input_tokens: r.cache_read_input_tokens,
|
|
44
|
+
latency_ms: r.latency_ms,
|
|
45
|
+
error: r.error,
|
|
46
|
+
metadata,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
return out;
|
|
50
|
+
}
|