@event4u/agent-config 16.1.0 → 16.3.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 +98 -257
- package/README.md +14 -12
- package/dist/agent-src/commands/analyze/inbox.md +1 -1
- package/dist/agent-src/commands/analyze/roadmap-repos.md +1 -1
- package/dist/agent-src/commands/bug/fix.md +17 -2
- package/dist/agent-src/commands/feature/plan.md +1 -1
- package/dist/agent-src/commands/feature/roadmap.md +1 -1
- package/dist/agent-src/commands/fix/ci.md +1 -1
- package/dist/agent-src/commands/implement-ticket.md +1 -1
- package/dist/agent-src/commands/jira-ticket.md +1 -1
- package/dist/agent-src/commands/roadmap/create.md +1 -1
- package/dist/agent-src/commands/roadmap/materialize.md +1 -1
- package/dist/agent-src/commands/roadmap/process-full.md +5 -5
- package/dist/agent-src/commands/roadmap/resolve-blockers.md +361 -0
- package/dist/agent-src/commands/roadmap/triage-parked.md +325 -0
- package/dist/agent-src/commands/roadmap.md +18 -4
- package/dist/agent-src/commands/tests/create.md +17 -3
- package/dist/agent-src/commands/tests/execute.md +22 -5
- package/dist/agent-src/commands/work.md +4 -0
- package/dist/agent-src/contexts/authority/decision-revisit-gate-enforcement.md +43 -0
- package/dist/agent-src/contexts/communication/rules-auto/design-fidelity-enforcement.md +24 -0
- package/dist/agent-src/contexts/execution/auto-dispatch-classification.md +6 -6
- package/dist/agent-src/contexts/execution/autonomy-mechanics.md +4 -8
- package/dist/agent-src/contexts/execution/roadmap-process-loop.md +32 -2
- package/dist/agent-src/contexts/execution/session-canary-enforcement-history.md +67 -0
- package/dist/agent-src/contexts/execution/toolchain-resolver.md +101 -7
- package/dist/agent-src/rules/active-remediation.md +1 -1
- package/dist/agent-src/rules/autonomous-execution.md +1 -0
- package/dist/agent-src/rules/broken-access-control.md +1 -0
- package/dist/agent-src/rules/command-suggestion-policy.md +1 -0
- package/dist/agent-src/rules/context-hygiene.md +1 -1
- package/dist/agent-src/rules/decision-revisit-gate.md +16 -33
- package/dist/agent-src/rules/design-fidelity.md +13 -16
- package/dist/agent-src/rules/doc-screenshot-hygiene.md +1 -0
- package/dist/agent-src/rules/domain-safety-disclaimer.md +1 -0
- package/dist/agent-src/rules/domain-safety-pii.md +1 -0
- package/dist/agent-src/rules/domain-safety-retention.md +1 -0
- package/dist/agent-src/rules/engineering-safety-floor.md +1 -0
- package/dist/agent-src/rules/evaluator-independence.md +3 -2
- package/dist/agent-src/rules/fast-path-marker-visibility.md +1 -0
- package/dist/agent-src/rules/finance-safety-floor.md +1 -0
- package/dist/agent-src/rules/git-history-discipline.md +1 -0
- package/dist/agent-src/rules/image-likeness-and-rights.md +1 -0
- package/dist/agent-src/rules/legal-safety-floor.md +3 -2
- package/dist/agent-src/rules/lethal-trifecta-guard.md +1 -0
- package/dist/agent-src/rules/low-impact-corpus-privacy-floor.md +1 -0
- package/dist/agent-src/rules/media-governance-routing.md +14 -17
- package/dist/agent-src/rules/persona-governance.md +2 -2
- package/dist/agent-src/rules/provider-lifecycle-discipline.md +1 -1
- package/dist/agent-src/rules/question-not-instruction.md +1 -0
- package/dist/agent-src/rules/roadmap-progress-sync.md +1 -1
- package/dist/agent-src/rules/runtime-safety.md +1 -0
- package/dist/agent-src/rules/secret-vcs-guard.md +1 -0
- package/dist/agent-src/rules/security-sensitive-stop.md +3 -2
- package/dist/agent-src/rules/session-canary.md +8 -62
- package/dist/agent-src/rules/settings-ask-protocol.md +1 -0
- package/dist/agent-src/rules/source-confidentiality.md +1 -0
- package/dist/agent-src/rules/strategy-safety-floor.md +1 -0
- package/dist/agent-src/rules/tool-safety.md +1 -0
- package/dist/agent-src/rules/ui-audit-gate.md +1 -2
- package/dist/agent-src/rules/untrusted-input-defense.md +1 -0
- package/dist/agent-src/rules/user-interrupt-priority.md +1 -0
- package/dist/agent-src/scripts/archive_completed_roadmaps.ts +115 -20
- package/dist/agent-src/scripts/deferral_carry.ts +339 -0
- package/dist/agent-src/scripts/update_roadmap_progress.ts +4 -1
- package/dist/agent-src/skills/accessibility-auditor/data/aria-patterns.csv +1 -1
- package/dist/agent-src/skills/accessibility-auditor/data/manifest.json +2 -2
- package/dist/agent-src/skills/api-design/data/manifest.json +2 -2
- package/dist/agent-src/skills/api-testing/SKILL.md +17 -0
- package/dist/agent-src/skills/code-intelligence/SKILL.md +14 -2
- package/dist/agent-src/skills/design-review/SKILL.md +30 -4
- package/dist/agent-src/skills/design-review/references/verification-automation.md +32 -0
- package/dist/agent-src/skills/design-system-capture/references/import-procedure.md +1 -1
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +18 -3
- package/dist/agent-src/skills/existing-ui-audit/references/component-taxonomy-detection.md +56 -0
- package/dist/agent-src/skills/fe-design/SKILL.md +1 -1
- package/dist/agent-src/skills/iconography/SKILL.md +1 -1
- package/dist/agent-src/skills/js-library-packaging/SKILL.md +2 -2
- package/dist/agent-src/skills/markitdown/SKILL.md +4 -0
- package/dist/agent-src/skills/monorepo-workspace/SKILL.md +1 -1
- package/dist/agent-src/skills/playwright-testing/SKILL.md +30 -6
- package/dist/agent-src/skills/quality-tools/SKILL.md +11 -1
- package/dist/agent-src/skills/quality-tools/references/go-tools.md +76 -0
- package/dist/agent-src/skills/quality-tools/references/python-tools.md +104 -0
- package/dist/agent-src/skills/review-routing/SKILL.md +2 -2
- package/dist/agent-src/skills/skill-improvement-pipeline/SKILL.md +1 -1
- package/dist/agent-src/skills/storybook-workshop/SKILL.md +3 -3
- package/dist/agent-src/skills/tailwind-engineer/SKILL.md +1 -1
- package/dist/agent-src/skills/test-case-discovery/SKILL.md +7 -0
- package/dist/agent-src/skills/test-driven-development/SKILL.md +17 -0
- package/dist/agent-src/skills/test-performance/SKILL.md +19 -1
- package/dist/agent-src/skills/ui-component-architect/SKILL.md +25 -2
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/roadmaps.md +30 -0
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/app_spec.ts +10 -4
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +302 -21
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/audit.ts +22 -3
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +6 -1
- package/dist/agent-src/templates/scripts/work_engine/stack/runner.ts +774 -109
- package/dist/agent-src/templates/scripts/work_engine/state.ts +57 -7
- package/dist/agent-src/templates/scripts/work_engine/taxonomy/detect.ts +500 -0
- package/dist/agent-src/templates/scripts/work_engine/taxonomy/place.ts +183 -0
- package/dist/cli/python/knowledge_ingest.js +1 -1
- package/dist/cli/python/workspace_drive.js +1 -1
- package/dist/cli/registry.js +1 -1
- package/dist/cli-delegate/archive_completed_roadmaps.js +92 -12
- package/dist/cli-delegate/check_update_banner.js +12 -1
- package/dist/cli-delegate/chunk-523HCFYO.js +90 -0
- package/dist/cli-delegate/{chunk-M2DPGFZ4.js → chunk-6V6TA25H.js} +22 -152
- package/dist/cli-delegate/chunk-7IQE3D5S.js +191 -0
- package/dist/cli-delegate/{chunk-6KFEC3G7.js → chunk-CQWX336L.js} +1 -1
- package/dist/cli-delegate/chunk-DEIV7XP7.js +108 -0
- package/dist/cli-delegate/chunk-EEHDXSYD.js +2040 -0
- package/dist/cli-delegate/{chunk-P6ZHP5W2.js → chunk-GKE7ZVFA.js} +4 -4
- package/dist/cli-delegate/chunk-JQOM7TTM.js +1201 -0
- package/dist/cli-delegate/{chunk-UNCRJBT3.js → chunk-JQVYKIZA.js} +41 -0
- package/dist/cli-delegate/{chunk-FC75PGJE.js → chunk-JY2I2DXV.js} +12 -1
- package/dist/cli-delegate/chunk-KB5FZ655.js +208 -0
- package/dist/cli-delegate/{chunk-YUM5KURG.js → chunk-KR6EM23A.js} +235 -1455
- package/dist/cli-delegate/{chunk-LTYVIY76.js → chunk-LIYTLH6O.js} +1 -1
- package/dist/cli-delegate/chunk-NQ7WT43P.js +2729 -0
- package/dist/cli-delegate/chunk-NXEILF2K.js +2160 -0
- package/dist/cli-delegate/{chunk-5R7HOLAF.js → chunk-NYX3L2PZ.js} +1 -1
- package/dist/cli-delegate/{chunk-4E2W63DA.js → chunk-OKJUIAPS.js} +62 -1
- package/dist/cli-delegate/{chunk-QAJS5YWY.js → chunk-PHD7OOLE.js} +2 -1
- package/dist/cli-delegate/{chunk-RGNIWTEA.js → chunk-QLDHIPWR.js} +1 -1
- package/dist/cli-delegate/{chunk-HDVVGPQW.js → chunk-RQNNW7IF.js} +1405 -567
- package/dist/cli-delegate/{chunk-S3VFXMTM.js → chunk-S4UMZNES.js} +1 -1
- package/dist/cli-delegate/{chunk-6KM6ORRY.js → chunk-S4YWNRKO.js} +24 -8
- package/dist/cli-delegate/{chunk-GJCBB2UG.js → chunk-TRI6DQZ6.js} +3054 -325
- package/dist/cli-delegate/chunk-ULQRUR23.js +208 -0
- package/dist/cli-delegate/{chunk-NUHLI2RX.js → chunk-YCU3TIXH.js} +2 -0
- package/dist/cli-delegate/chunk-ZBZV2G5R.js +210 -0
- package/dist/cli-delegate/{chunk-WGXTVKCQ.js → chunk-ZUZKZYCN.js} +5 -3
- package/dist/cli-delegate/cmd_analyze_session.js +1 -1
- package/dist/cli-delegate/cmd_brand_status.js +1 -1
- package/dist/cli-delegate/cmd_conformance.js +1862 -809
- package/dist/cli-delegate/cmd_doctor.js +13 -6
- package/dist/cli-delegate/cmd_doctor_neighbours.js +23 -0
- package/dist/cli-delegate/cmd_explain.js +5 -5
- package/dist/cli-delegate/cmd_export.js +11 -8
- package/dist/cli-delegate/cmd_fleet.js +3 -3
- package/dist/cli-delegate/cmd_handoff.js +10 -7
- package/dist/cli-delegate/cmd_mcp_available.js +1 -1
- package/dist/cli-delegate/cmd_memory_get.js +3 -1
- package/dist/cli-delegate/cmd_migrate.js +2 -2
- package/dist/cli-delegate/cmd_packs_active.js +3 -3
- package/dist/cli-delegate/cmd_preflight.js +6 -6
- package/dist/cli-delegate/cmd_prune.js +11 -8
- package/dist/cli-delegate/cmd_refresh.js +2 -1
- package/dist/cli-delegate/cmd_route_audit.js +8 -6
- package/dist/cli-delegate/cmd_route_explain.js +4 -4
- package/dist/cli-delegate/cmd_session_recycle.js +4 -3
- package/dist/cli-delegate/cmd_settings_get.js +1 -1
- package/dist/cli-delegate/cmd_settings_migrate.js +11 -8
- package/dist/cli-delegate/cmd_settings_set.js +4 -4
- package/dist/cli-delegate/cmd_sync.js +11 -8
- package/dist/cli-delegate/cmd_uninstall.js +11 -8
- package/dist/cli-delegate/cmd_update.js +1 -1
- package/dist/cli-delegate/cmd_upgrade.js +3 -2
- package/dist/cli-delegate/cmd_validate.js +11 -8
- package/dist/cli-delegate/cmd_versions.js +1 -1
- package/dist/cli-delegate/deferral_carry.js +16 -0
- package/dist/cli-delegate/gate_execute.js +2 -2
- package/dist/cli-delegate/roadmap_gates.js +5 -5
- package/dist/cli-delegate/update_roadmap_progress.js +1 -1
- package/dist/discovery/deprecation-report.md +1 -1
- package/dist/discovery/discovery-manifest.json +132 -80
- package/dist/discovery/discovery-manifest.json.sha256 +1 -1
- package/dist/discovery/discovery-manifest.summary.md +3 -3
- package/dist/discovery/dormancy-report.md +1 -1
- package/dist/discovery/orphan-report.md +1 -1
- package/dist/discovery/packs.json +7 -5
- package/dist/discovery/trust-report.md +2 -2
- package/dist/discovery/workspaces.json +6 -4
- package/dist/hooks/dispatch.js +7972 -5186
- package/dist/hooks/dispatch.sha256 +1 -0
- package/dist/install/claudePathsPlan.js +47 -6
- package/dist/install/claudeRuleRewrite.js +7 -0
- package/dist/install/emit_host_rules_cli.js +39 -36
- package/dist/install/globalRuleScope.js +87 -0
- package/dist/install/host_rule_ownership.js +160 -0
- package/dist/install/install.mjs +2226 -1055
- package/dist/install/installThinLayer.js +261 -0
- package/dist/install/installedRuleLinks.js +176 -0
- package/dist/install/wizard-plan.js +24 -0
- package/dist/mcp/registry-manifest.json +3 -3
- package/dist/mcp/server.json +2 -2
- package/dist/mcp/server.mjs +40913 -34865
- package/dist/scripts/_lib/agent_settings.js +11 -0
- package/dist/scripts/_lib/claude_settings_hooks.js +10 -8
- package/dist/scripts/_lib/installed_layer.js +378 -0
- package/dist/scripts/_lib/lean_projection_mode.js +218 -15
- package/dist/scripts/_lib/rule_consequence_class.js +45 -0
- package/dist/scripts/_lib/rule_injection.js +67 -10
- package/dist/scripts/_lib/rule_law_section.js +122 -0
- package/dist/scripts/_lib/thin_rules.js +458 -0
- package/dist/scripts/_lib/windsurf_render.js +60 -0
- package/dist/scripts/condense.js +14 -26
- package/dist/scripts/project_thin_rules.js +14 -294
- package/dist/server/schemas/settings.js +29 -0
- package/dist/shared/skillRanking.js +74 -13
- package/dist/ui/assets/index-Cwq4d0hX.js +23 -0
- package/dist/ui/assets/index-Cyjy8bWO.css +1 -0
- package/dist/ui/index.html +2 -2
- package/docs/contracts/settings-classes.md +10 -6
- package/package.json +4 -4
- package/src/agent-src/scripts/archive_completed_roadmaps.ts +115 -20
- package/src/agent-src/scripts/deferral_carry.ts +339 -0
- package/src/agent-src/scripts/update_roadmap_progress.ts +4 -1
- package/src/agent-src/templates/scripts/work_engine/directives/ui/app_spec.ts +10 -4
- package/src/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +302 -21
- package/src/agent-src/templates/scripts/work_engine/directives/ui/audit.ts +22 -3
- package/src/agent-src/templates/scripts/work_engine/directives/ui/scaffold.ts +6 -1
- package/src/agent-src/templates/scripts/work_engine/stack/runner.ts +774 -109
- package/src/agent-src/templates/scripts/work_engine/state.ts +57 -7
- package/src/agent-src/templates/scripts/work_engine/taxonomy/detect.ts +500 -0
- package/src/agent-src/templates/scripts/work_engine/taxonomy/place.ts +183 -0
- package/src/config/agent-settings.template.yml +91 -22
- package/src/config/ci-local-parity.yml +18 -0
- package/src/config/continuity-surface.json +9 -2
- package/src/config/evaluator-budgets.json +4 -4
- package/src/config/gate-coverage.yml +327 -3
- package/src/config/gate-violation-baselines.json +21 -9
- package/src/config/hook-bundle-budget.json +25 -0
- package/src/config/hook-latency-budget.json +21 -0
- package/src/config/hook-token-budget.json +8 -3
- package/src/config/host-instruction-limits.json +33 -0
- package/src/config/metric-registry.yml +114 -0
- package/src/config/placeholder-drift-budget.json +10 -0
- package/src/config/routing-coverage-seed.json +38 -3
- package/src/config/rule-activation-census.json +7 -3
- package/src/config/rule-consequence-class.json +161 -0
- package/src/config/rule-law-ceilings.json +99 -0
- package/src/install/claudePathsPlan.ts +46 -4
- package/src/install/claudeRuleRewrite.ts +10 -1
- package/src/install/emit_host_rules_cli.ts +43 -34
- package/src/install/globalRuleScope.ts +109 -0
- package/src/install/host_rule_ownership.ts +170 -0
- package/src/install/installThinLayer.ts +312 -0
- package/src/install/installedRuleLinks.ts +220 -0
- package/src/install/wizard-plan.ts +24 -0
- package/src/scripts/_cli/cmd_doctor.ts +28 -90
- package/src/scripts/_cli/cmd_doctor_neighbours.ts +293 -0
- package/src/scripts/_cli/doctor_execution.ts +100 -17
- package/src/scripts/_cli/doctor_network_posture.ts +226 -0
- package/src/scripts/_dispatch.bash +16 -2
- package/src/scripts/_lib/agent_settings.ts +11 -0
- package/src/scripts/_lib/body_portable.ts +102 -0
- package/src/scripts/_lib/cc_transcript.ts +132 -1
- package/src/scripts/_lib/claude_settings_hooks.ts +10 -8
- package/src/scripts/_lib/concern_sla_window.ts +200 -0
- package/src/scripts/_lib/estate_offsets.ts +241 -0
- package/src/scripts/_lib/exemption_shape.ts +143 -0
- package/src/scripts/_lib/fnv.ts +23 -0
- package/src/scripts/_lib/foreign_scan.ts +106 -0
- package/src/scripts/_lib/forge_protection.ts +114 -0
- package/src/scripts/_lib/forge_reader.ts +558 -0
- package/src/scripts/_lib/gitignore_block.ts +314 -0
- package/src/scripts/_lib/global_deploy_inventory.ts +32 -0
- package/src/scripts/_lib/graph_feeder_record.ts +214 -0
- package/src/scripts/_lib/hook_settings.ts +73 -0
- package/src/scripts/_lib/host_capability.ts +40 -19
- package/src/scripts/_lib/host_env_write.ts +111 -0
- package/src/scripts/_lib/host_hook_merge.ts +165 -0
- package/src/scripts/_lib/installed_layer.ts +538 -0
- package/src/scripts/_lib/json_merge.ts +82 -0
- package/src/scripts/_lib/json_pointers.ts +93 -11
- package/src/scripts/_lib/lean_projection_mode.ts +275 -15
- package/src/scripts/_lib/llm_proposer_transport.ts +14 -4
- package/src/scripts/_lib/machine_wake.ts +16 -3
- package/src/scripts/_lib/neighbour_census.ts +760 -0
- package/src/scripts/_lib/neighbour_scan.ts +122 -0
- package/src/scripts/_lib/neighbour_tool_use.ts +189 -0
- package/src/scripts/_lib/obligations.ts +119 -8
- package/src/scripts/_lib/probe_inputs.ts +271 -0
- package/src/scripts/_lib/prompt_shape.ts +46 -0
- package/src/scripts/_lib/read_surface_scan.ts +322 -0
- package/src/scripts/_lib/release_highlights.ts +2 -1
- package/src/scripts/_lib/release_migration_gate.ts +19 -3
- package/src/scripts/_lib/reserved_name_sweep.ts +73 -0
- package/src/scripts/_lib/retrieval_sanitize.ts +77 -16
- package/src/scripts/_lib/review_coverage.ts +134 -0
- package/src/scripts/_lib/rule_consequence_class.ts +71 -0
- package/src/scripts/_lib/rule_injection.ts +130 -10
- package/src/scripts/_lib/rule_law_section.ts +147 -0
- package/src/scripts/_lib/rule_layer_overlap.ts +58 -0
- package/src/scripts/_lib/shell_write_shapes.ts +108 -0
- package/src/scripts/_lib/skill_origin.ts +254 -0
- package/src/scripts/_lib/structural_hiding.ts +622 -0
- package/src/scripts/_lib/structured_ask.ts +64 -21
- package/src/scripts/_lib/thin_rules.ts +540 -0
- package/src/scripts/_lib/touched_file_quality.ts +434 -0
- package/src/scripts/_lib/turn_end_refusals.ts +600 -4
- package/src/scripts/_lib/turn_end_transcript.ts +216 -0
- package/src/scripts/_lib/verification_command.ts +324 -0
- package/src/scripts/_lib/verification_evidence.ts +647 -0
- package/src/scripts/_lib/verify_clause.ts +280 -0
- package/src/scripts/_lib/windsurf_render.ts +63 -0
- package/src/scripts/ai_council/cli_call_budget.ts +13 -5
- package/src/scripts/ai_council/clients.ts +26 -57
- package/src/scripts/ai_council/config.ts +1 -1
- package/src/scripts/ai_council/vendor_defaults.ts +45 -0
- package/src/scripts/ai_team/team_dispatch.ts +4 -0
- package/src/scripts/audit_skill_overlap.ts +261 -0
- package/src/scripts/before_complete_hook.ts +573 -25
- package/src/scripts/bench_hook_latency.ts +412 -5
- package/src/scripts/bench_touched_file_quality.ts +238 -0
- package/src/scripts/cache_realization_report.ts +61 -1
- package/src/scripts/check_argument_hint.ts +287 -0
- package/src/scripts/check_claims.ts +125 -1
- package/src/scripts/check_enforcement_coverage.ts +38 -9
- package/src/scripts/check_enforcement_matrix.ts +621 -22
- package/src/scripts/check_estate_count.ts +130 -153
- package/src/scripts/check_finding_dispositions.ts +138 -7
- package/src/scripts/check_generator_sync.ts +71 -0
- package/src/scripts/check_hook_bundle_composition.ts +370 -0
- package/src/scripts/check_host_docs_digest.ts +786 -0
- package/src/scripts/check_host_format_column.ts +559 -0
- package/src/scripts/check_input_references.ts +228 -0
- package/src/scripts/check_inputs_parity.ts +235 -0
- package/src/scripts/check_kernel_edit_ratified.ts +89 -9
- package/src/scripts/check_kill_switch_table.ts +294 -0
- package/src/scripts/check_memory.ts +7 -1
- package/src/scripts/check_placeholder_drift.ts +221 -0
- package/src/scripts/check_read_surface_coverage.ts +515 -0
- package/src/scripts/check_release_highlights.ts +10 -0
- package/src/scripts/check_release_holds.ts +2 -1
- package/src/scripts/check_release_pr_shape.ts +38 -15
- package/src/scripts/check_routing_coverage.ts +378 -11
- package/src/scripts/check_standing_rule_delivery.ts +33 -13
- package/src/scripts/check_static_parity.ts +17 -0
- package/src/scripts/check_verify_expectation_delta.ts +521 -0
- package/src/scripts/ci_settle.ts +145 -19
- package/src/scripts/closure_scan.ts +115 -1
- package/src/scripts/code_graph/detect.ts +127 -7
- package/src/scripts/code_graph/foreign.ts +194 -0
- package/src/scripts/code_graph/query.ts +217 -4
- package/src/scripts/code_graph/types.ts +26 -2
- package/src/scripts/code_graph/validate.ts +3 -1
- package/src/scripts/code_graph/verbs.ts +103 -0
- package/src/scripts/compile_hook_manifest.ts +90 -14
- package/src/scripts/condense.ts +14 -27
- package/src/scripts/estate_exemption_shape.ts +202 -0
- package/src/scripts/external_sources_denylist.json +29 -4
- package/src/scripts/generate_host_cost_table.ts +1 -1
- package/src/scripts/hook_manifest.json +1 -1
- package/src/scripts/hook_manifest.yaml +192 -14
- package/src/scripts/hooks/block_config_weakening.ts +294 -4
- package/src/scripts/hooks/block_kernel_rule_writes.ts +9 -78
- package/src/scripts/hooks/block_plumbing_writes.ts +342 -0
- package/src/scripts/hooks/bundle_integrity.ts +291 -0
- package/src/scripts/hooks/chain_nudge_hook.ts +1 -2
- package/src/scripts/hooks/code_graph_context_hook.ts +253 -25
- package/src/scripts/hooks/comment_discipline_hook.ts +1 -3
- package/src/scripts/hooks/concern_failure_policy.ts +280 -0
- package/src/scripts/hooks/concern_registry.ts +2 -0
- package/src/scripts/hooks/concern_timings.ts +94 -0
- package/src/scripts/hooks/delegation_nudge_hook.ts +1 -2
- package/src/scripts/hooks/design_pass_hook.ts +100 -9
- package/src/scripts/hooks/design_slop_hook.ts +1 -2
- package/src/scripts/hooks/dispatch_hook.ts +77 -71
- package/src/scripts/hooks/edit_shape_hook.ts +1 -2
- package/src/scripts/hooks/end_review_nudge_hook.ts +1 -1
- package/src/scripts/hooks/evidence_independence.ts +1 -2
- package/src/scripts/hooks/exit_codes.ts +129 -0
- package/src/scripts/hooks/host_lowering.json +1 -0
- package/src/scripts/hooks/host_lowering.ts +146 -3
- package/src/scripts/hooks/host_lowering.yaml +262 -46
- package/src/scripts/hooks/host_semantics.ts +30 -2
- package/src/scripts/hooks/injection_budget.ts +9 -2
- package/src/scripts/hooks/interruption_ledger_hook.ts +1 -2
- package/src/scripts/hooks/journal_record_hook.ts +1 -2
- package/src/scripts/hooks/memory_recall_hook.ts +1 -2
- package/src/scripts/hooks/obligation_settle_hook.ts +151 -5
- package/src/scripts/hooks/one_question_per_ask_hook.ts +43 -6
- package/src/scripts/hooks/orchestration_record_hook.ts +1 -2
- package/src/scripts/hooks/payload_stub.ts +10 -1
- package/src/scripts/hooks/permission_gate.ts +1 -2
- package/src/scripts/hooks/push_settle_hook.ts +1 -3
- package/src/scripts/hooks/replay_hook.ts +2 -1
- package/src/scripts/hooks/reread_guard_hook.ts +1 -2
- package/src/scripts/hooks/review_baseline_hook.ts +1 -2
- package/src/scripts/hooks/rtk_wrap_hook.ts +1 -2
- package/src/scripts/hooks/rule_inject_hook.ts +765 -68
- package/src/scripts/hooks/run_continuation_hook.ts +13 -15
- package/src/scripts/hooks/skill_route_hook.ts +1 -2
- package/src/scripts/hooks/source_first_gate_hook.ts +1 -2
- package/src/scripts/hooks/spawn_guard_shadow_hook.ts +1 -2
- package/src/scripts/hooks/subagent_ledger_hook.ts +1 -2
- package/src/scripts/hooks/suggestion_capture_hook.ts +1 -1
- package/src/scripts/hooks/table_fingerprint.ts +70 -0
- package/src/scripts/hooks/telemetry_flush_hook.ts +1 -2
- package/src/scripts/hooks/telemetry_usage_hook.ts +65 -10
- package/src/scripts/hooks/tool_result_bytes_hook.ts +93 -9
- package/src/scripts/hooks/turn_end_gate_hook.ts +421 -324
- package/src/scripts/hooks/ui_route_nudge_hook.ts +1 -2
- package/src/scripts/hooks_status.ts +112 -0
- package/src/scripts/injection_scan_hook.ts +7 -0
- package/src/scripts/install.ts +75 -189
- package/src/scripts/installed_layer_report.ts +103 -0
- package/src/scripts/language_mirror_hook.ts +15 -6
- package/src/scripts/learning_sidecar.ts +119 -8
- package/src/scripts/lint_deny_text.ts +419 -0
- package/src/scripts/lint_exit_codes.ts +262 -0
- package/src/scripts/lint_hook_manifest.ts +108 -0
- package/src/scripts/lint_major_migration_sections.ts +156 -26
- package/src/scripts/lint_pack_boundaries.ts +63 -5
- package/src/scripts/lint_roadmap_blockers.ts +78 -12
- package/src/scripts/lint_rule_law_section.ts +517 -0
- package/src/scripts/lint_skill_descriptions.ts +1 -1
- package/src/scripts/lint_skill_scripts_readonly.ts +1 -1
- package/src/scripts/lint_workflow_security.ts +161 -5
- package/src/scripts/mcp_server/consumer_tool_catalog.json +53 -0
- package/src/scripts/mcp_server/graph_tools.ts +72 -3
- package/src/scripts/mcp_server/prompts.ts +142 -1
- package/src/scripts/measure_routing_signal.ts +54 -16
- package/src/scripts/measure_skill_ranker_baseline.ts +515 -53
- package/src/scripts/measure_turn_end_gate.ts +193 -0
- package/src/scripts/memory_learn_hook.ts +91 -6
- package/src/scripts/memory_lookup.ts +1 -1
- package/src/scripts/model_rule_injection.ts +52 -5
- package/src/scripts/prepack-check.mjs +53 -0
- package/src/scripts/project_thin_rules.ts +34 -327
- package/src/scripts/release_publication.ts +13 -1
- package/src/scripts/report_evidence_temperature.ts +657 -0
- package/src/scripts/report_installed_rule_links.ts +157 -0
- package/src/scripts/report_invocation_surface.ts +383 -0
- package/src/scripts/report_label_agreement.ts +233 -0
- package/src/scripts/report_obligation_carriers.ts +699 -0
- package/src/scripts/report_obligation_mechanism.ts +230 -0
- package/src/scripts/report_obligation_writer_split.ts +236 -0
- package/src/scripts/report_single_token_triggers.ts +277 -0
- package/src/scripts/report_skill_menu_census.ts +208 -0
- package/src/scripts/report_skill_ranker_confusion.ts +442 -0
- package/src/scripts/report_standing_payload_by_host.ts +188 -15
- package/src/scripts/report_verification_record_coverage.ts +306 -0
- package/src/scripts/roadmap_verify_share.ts +213 -0
- package/src/scripts/rule_activation_census.ts +5 -2
- package/src/scripts/rule_trigger_eval.ts +9 -9
- package/src/scripts/schemas/command.schema.json +44 -0
- package/src/scripts/schemas/review-findings.schema.json +7 -2
- package/src/scripts/schemas/rule.schema.json +5 -0
- package/src/scripts/schemas/skill.schema.json +44 -0
- package/src/scripts/self_review_gate.ts +421 -17
- package/src/scripts/semantic_parity_census.ts +314 -0
- package/src/scripts/session_eol_report.ts +54 -1
- package/src/scripts/skill_tools/score_skill_relevance.ts +290 -25
- package/src/scripts/sweep_dead_scan_roots.ts +1 -1
- package/src/scripts/sweep_skill_ranker_signals.ts +129 -0
- package/src/scripts/sync_gitignore.ts +29 -235
- package/src/scripts/trigger_eval_grandfather.json +0 -7
- package/src/scripts/trigger_eval_rotation.ts +122 -27
- package/src/scripts/ui_conformance_probe.ts +156 -4
- package/src/scripts/update_prices.ts +85 -3
- package/src/scripts/write_bundle_digest.mjs +74 -0
- package/src/server/schemas/settings.ts +41 -0
- package/src/shared/skillRanking.ts +117 -11
- package/src/templates/consumer-settings/ONBOARDING.md +1 -0
- package/dist/cli-delegate/chunk-FXYUYU4N.js +0 -4416
- package/dist/cli-delegate/chunk-QJWAUMJW.js +0 -1072
- package/dist/cli-delegate/chunk-YDPILCOL.js +0 -152
- package/dist/ui/assets/index-DH1xc62v.js +0 -29
- package/dist/ui/assets/index-jSfMW8_t.css +0 -1
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
#!/usr/bin/env tsx
|
|
2
|
+
/**
|
|
3
|
+
* The semantic-parity census — which skill frontmatter semantics survive the
|
|
4
|
+
* MCP-lite carrier, and which are dropped on the way to a host.
|
|
5
|
+
*
|
|
6
|
+
* road-to-semantic-parity-before-off-menu, Phase 1.
|
|
7
|
+
*
|
|
8
|
+
* THE CARRIER THIS MEASURES
|
|
9
|
+
*
|
|
10
|
+
* Exactly one: `ContentEntry` in `src/cli/mcp/content.ts`. That scope is in the
|
|
11
|
+
* report header on purpose. A different delivery path drops a different set, so
|
|
12
|
+
* a second carrier is a second report rather than an edit to this one — merging
|
|
13
|
+
* two field sets into one list would leave neither denominator recoverable, and
|
|
14
|
+
* a report whose scope is not stated in the report gets quoted as general.
|
|
15
|
+
*
|
|
16
|
+
* THE CLASSIFICATION
|
|
17
|
+
*
|
|
18
|
+
* Every property the skill frontmatter schema declares falls into exactly one
|
|
19
|
+
* of three columns, decided by what the carrier's builder actually reads rather
|
|
20
|
+
* than by what its field comments say:
|
|
21
|
+
*
|
|
22
|
+
* - `carried` — the builder reads the frontmatter key and the value reaches
|
|
23
|
+
* `ContentEntry` whole.
|
|
24
|
+
* - `partial` — the builder reads the key but transports only part of the
|
|
25
|
+
* value. `triggers` is the only such key: `triggerText()` keeps
|
|
26
|
+
* `INDEXED_TRIGGER_KEYS` (`keyword`, `phrase`) and silently
|
|
27
|
+
* drops `file_pattern`, `path_prefix`, `command` and `reason`.
|
|
28
|
+
* Classing it `carried` would make a path-triggered skill look
|
|
29
|
+
* portable when its routing does not travel at all.
|
|
30
|
+
* - `dropped` — the builder never reads the key, so the semantic does not
|
|
31
|
+
* leave the disk.
|
|
32
|
+
*
|
|
33
|
+
* `carried` and `partial` are derived from the carrier source (the constants in
|
|
34
|
+
* `_lib/body_portable.ts` mirror `buildEntry` and `triggerText`), never from
|
|
35
|
+
* the schema. The
|
|
36
|
+
* `dropped` column is the remainder, so the three are total and disjoint by
|
|
37
|
+
* construction and a new schema property lands in `dropped` until someone
|
|
38
|
+
* teaches the carrier to read it — which is the failure direction this census
|
|
39
|
+
* exists to make visible.
|
|
40
|
+
*
|
|
41
|
+
* NOT IN THE CLASSIFICATION: `body`, `kind`, `mime_type` and `uri` are
|
|
42
|
+
* `ContentEntry` fields with no frontmatter key behind them — the body is the
|
|
43
|
+
* file minus its frontmatter, and the other three are derived from where the
|
|
44
|
+
* file sits. They are carrier fields, not declared semantics, so counting them
|
|
45
|
+
* as `carried` would inflate the numerator with things no skill declares.
|
|
46
|
+
*
|
|
47
|
+
* REPRODUCIBILITY
|
|
48
|
+
*
|
|
49
|
+
* The report pins the commit it was taken at and carries no wall-clock date, so
|
|
50
|
+
* a re-run at the same commit is byte-equal. Nothing machine-dependent is
|
|
51
|
+
* computed into it.
|
|
52
|
+
*/
|
|
53
|
+
|
|
54
|
+
import { execFileSync } from 'node:child_process';
|
|
55
|
+
import fs from 'node:fs';
|
|
56
|
+
import path from 'node:path';
|
|
57
|
+
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
58
|
+
|
|
59
|
+
import { load as yamlLoad } from 'js-yaml';
|
|
60
|
+
|
|
61
|
+
import { CARRIED_KEYS, PARTIAL_KEYS, classifyPortability } from './_lib/body_portable.js';
|
|
62
|
+
|
|
63
|
+
const _HERE = fileURLToPath(import.meta.url);
|
|
64
|
+
export const REPO_ROOT = path.resolve(path.dirname(_HERE), '..', '..');
|
|
65
|
+
|
|
66
|
+
/** Where the schema that declares the semantics lives. */
|
|
67
|
+
const SCHEMA_REL = path.join('src', 'scripts', 'schemas', 'skill.schema.json');
|
|
68
|
+
|
|
69
|
+
/** Where the corpus lives. */
|
|
70
|
+
const SKILLS_REL = path.join('src', 'skills');
|
|
71
|
+
|
|
72
|
+
/** Default report location. */
|
|
73
|
+
const DEFAULT_OUT = path.join('agents', 'evidence', 'analysis', 'semantic-parity-census.md');
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* The carrier constants live with the predicate in `_lib/body_portable.ts` so
|
|
77
|
+
* that the census and the eligibility check cannot drift apart: one source of
|
|
78
|
+
* truth, read here and there.
|
|
79
|
+
*/
|
|
80
|
+
export { CARRIED_KEYS, PARTIAL_KEYS };
|
|
81
|
+
|
|
82
|
+
export type Column = 'carried' | 'partial' | 'dropped';
|
|
83
|
+
|
|
84
|
+
export interface FieldRow {
|
|
85
|
+
readonly field: string;
|
|
86
|
+
readonly column: Column;
|
|
87
|
+
/** For `partial`, the sub-keys that travel. Empty otherwise. */
|
|
88
|
+
readonly travels: readonly string[];
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export interface SkillRow {
|
|
92
|
+
/** Directory name under `src/skills/`. */
|
|
93
|
+
readonly skill: string;
|
|
94
|
+
/** Declared keys that are `dropped`. */
|
|
95
|
+
readonly dropped: readonly string[];
|
|
96
|
+
/** Declared keys that are `partial`. */
|
|
97
|
+
readonly partial: readonly string[];
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export interface Census {
|
|
101
|
+
readonly fields: readonly FieldRow[];
|
|
102
|
+
readonly skills: readonly SkillRow[];
|
|
103
|
+
/** Per dropped-or-partial field: how many skills declare it. */
|
|
104
|
+
readonly perField: Readonly<Record<string, number>>;
|
|
105
|
+
/** Total `SKILL.md` files read. */
|
|
106
|
+
readonly scanned: number;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/** Classify every schema property into exactly one column. */
|
|
110
|
+
export function classify(schemaProperties: readonly string[]): FieldRow[] {
|
|
111
|
+
const rows: FieldRow[] = [];
|
|
112
|
+
for (const field of [...schemaProperties].sort()) {
|
|
113
|
+
if (CARRIED_KEYS.includes(field)) {
|
|
114
|
+
rows.push({ field, column: 'carried', travels: [] });
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
const travels = PARTIAL_KEYS[field];
|
|
118
|
+
if (travels !== undefined) {
|
|
119
|
+
rows.push({ field, column: 'partial', travels });
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
rows.push({ field, column: 'dropped', travels: [] });
|
|
123
|
+
}
|
|
124
|
+
return rows;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/** Parsed top-level frontmatter of one `SKILL.md`, or `{}` when it carries none. */
|
|
128
|
+
export function frontmatterRecord(text: string): Record<string, unknown> {
|
|
129
|
+
const m = /^---\n([\s\S]*?)\n---/.exec(text);
|
|
130
|
+
if (m === null) return {};
|
|
131
|
+
let doc: unknown;
|
|
132
|
+
try {
|
|
133
|
+
doc = yamlLoad(m[1]!);
|
|
134
|
+
} catch {
|
|
135
|
+
return {};
|
|
136
|
+
}
|
|
137
|
+
if (doc === null || typeof doc !== 'object' || Array.isArray(doc)) return {};
|
|
138
|
+
return doc as Record<string, unknown>;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
export function census(root: string): Census {
|
|
142
|
+
const schemaPath = path.join(root, SCHEMA_REL);
|
|
143
|
+
const schema = JSON.parse(fs.readFileSync(schemaPath, 'utf8')) as {
|
|
144
|
+
properties?: Record<string, unknown>;
|
|
145
|
+
};
|
|
146
|
+
const fields = classify(Object.keys(schema.properties ?? {}));
|
|
147
|
+
|
|
148
|
+
const skillsDir = path.join(root, SKILLS_REL);
|
|
149
|
+
const dirs = fs.existsSync(skillsDir)
|
|
150
|
+
? fs
|
|
151
|
+
.readdirSync(skillsDir, { withFileTypes: true })
|
|
152
|
+
.filter((d) => d.isDirectory())
|
|
153
|
+
.map((d) => d.name)
|
|
154
|
+
.sort()
|
|
155
|
+
: [];
|
|
156
|
+
|
|
157
|
+
const skills: SkillRow[] = [];
|
|
158
|
+
const perField: Record<string, number> = {};
|
|
159
|
+
let scanned = 0;
|
|
160
|
+
|
|
161
|
+
for (const dir of dirs) {
|
|
162
|
+
const file = path.join(skillsDir, dir, 'SKILL.md');
|
|
163
|
+
if (!fs.existsSync(file)) continue;
|
|
164
|
+
scanned += 1;
|
|
165
|
+
// The per-skill pass calls the PREDICATE rather than re-deriving the
|
|
166
|
+
// classification from the schema. An earlier version looked the key up
|
|
167
|
+
// in the schema-derived column map and skipped what it did not find,
|
|
168
|
+
// which made the census fail OPEN on an unknown key while the predicate
|
|
169
|
+
// failed CLOSED on the same key — two numbers presented as one
|
|
170
|
+
// measurement, disagreeing on exactly the case the predicate's own
|
|
171
|
+
// documentation calls its most important. Sharing the function removes
|
|
172
|
+
// the divergence class instead of correcting this instance of it.
|
|
173
|
+
const { dropped, partial } = classifyPortability(
|
|
174
|
+
frontmatterRecord(fs.readFileSync(file, 'utf8')),
|
|
175
|
+
);
|
|
176
|
+
for (const key of [...dropped, ...partial]) {
|
|
177
|
+
perField[key] = (perField[key] ?? 0) + 1;
|
|
178
|
+
}
|
|
179
|
+
skills.push({ skill: dir, dropped, partial });
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
return { fields, skills, perField, scanned };
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
function pin(root: string): { sha: string; date: string } {
|
|
186
|
+
const git = (args: string[]): string =>
|
|
187
|
+
execFileSync('git', args, { cwd: root, encoding: 'utf8' }).trim();
|
|
188
|
+
try {
|
|
189
|
+
return { sha: git(['rev-parse', 'HEAD']), date: git(['show', '-s', '--format=%cI', 'HEAD']) };
|
|
190
|
+
} catch {
|
|
191
|
+
return { sha: 'unknown', date: 'unknown' };
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
export function render(c: Census, p: { sha: string; date: string }): string {
|
|
196
|
+
const lines: string[] = [];
|
|
197
|
+
lines.push('<!-- evidence-type: analysis -->');
|
|
198
|
+
lines.push(`<!-- semantic-parity-census: v1 | commit: ${p.sha} | commit-date: ${p.date} -->`);
|
|
199
|
+
lines.push('');
|
|
200
|
+
lines.push('# Semantic-parity census — MCP-lite `ContentEntry`');
|
|
201
|
+
lines.push('');
|
|
202
|
+
lines.push(
|
|
203
|
+
'Emitted by `src/scripts/semantic_parity_census.ts`. **Carrier measured: `ContentEntry`**',
|
|
204
|
+
);
|
|
205
|
+
lines.push(
|
|
206
|
+
'in `src/cli/mcp/content.ts` — one delivery path, MCP-lite. A different path drops a',
|
|
207
|
+
);
|
|
208
|
+
lines.push(
|
|
209
|
+
'different set; a second carrier is a second report, never an edit to this one. Read the',
|
|
210
|
+
);
|
|
211
|
+
lines.push("script's module header for the classification before reading a number here.");
|
|
212
|
+
lines.push('');
|
|
213
|
+
lines.push('This report states coverage only. It marks no skill, excludes none, and is not a');
|
|
214
|
+
lines.push('verdict about which skills matter.');
|
|
215
|
+
lines.push('');
|
|
216
|
+
lines.push(`- **Commit pin:** \`${p.sha}\` (${p.date})`);
|
|
217
|
+
lines.push(`- **Schema:** \`${SCHEMA_REL}\``);
|
|
218
|
+
lines.push(`- **Corpus:** \`${SKILLS_REL}/*/SKILL.md\` — ${String(c.scanned)} file(s)`);
|
|
219
|
+
lines.push('');
|
|
220
|
+
|
|
221
|
+
const counts: Record<Column, number> = { carried: 0, partial: 0, dropped: 0 };
|
|
222
|
+
for (const r of c.fields) counts[r.column] += 1;
|
|
223
|
+
|
|
224
|
+
lines.push('## Field coverage');
|
|
225
|
+
lines.push('');
|
|
226
|
+
lines.push(
|
|
227
|
+
`${String(c.fields.length)} declared propert${c.fields.length === 1 ? 'y' : 'ies'}, each in exactly one column: ` +
|
|
228
|
+
`${String(counts.carried)} carried, ${String(counts.partial)} partial, ${String(counts.dropped)} dropped.`,
|
|
229
|
+
);
|
|
230
|
+
lines.push('');
|
|
231
|
+
lines.push('| field | carried | partial | dropped | travels |');
|
|
232
|
+
lines.push('|---|---|---|---|---|');
|
|
233
|
+
for (const r of c.fields) {
|
|
234
|
+
const mark = (col: Column): string => (r.column === col ? 'x' : '');
|
|
235
|
+
const travels = r.travels.length ? r.travels.map((t) => `\`${t}\``).join(', ') : '';
|
|
236
|
+
lines.push(
|
|
237
|
+
`| \`${r.field}\` | ${mark('carried')} | ${mark('partial')} | ${mark('dropped')} | ${travels} |`,
|
|
238
|
+
);
|
|
239
|
+
}
|
|
240
|
+
lines.push('');
|
|
241
|
+
|
|
242
|
+
lines.push('## Corpus declarations against the uncarried set');
|
|
243
|
+
lines.push('');
|
|
244
|
+
lines.push(
|
|
245
|
+
'How many skills declare each field the carrier drops or truncates. A field absent from',
|
|
246
|
+
);
|
|
247
|
+
lines.push('this table is declared by no skill today — the gap for it is theoretical.');
|
|
248
|
+
lines.push('');
|
|
249
|
+
const declared = c.fields
|
|
250
|
+
.filter((r) => r.column !== 'carried')
|
|
251
|
+
.map((r) => ({ field: r.field, column: r.column, n: c.perField[r.field] ?? 0 }))
|
|
252
|
+
.filter((r) => r.n > 0)
|
|
253
|
+
.sort((a, b) => b.n - a.n || a.field.localeCompare(b.field));
|
|
254
|
+
lines.push('| field | column | skills declaring |');
|
|
255
|
+
lines.push('|---|---|---|');
|
|
256
|
+
for (const r of declared) {
|
|
257
|
+
lines.push(`| \`${r.field}\` | ${r.column} | ${String(r.n)} |`);
|
|
258
|
+
}
|
|
259
|
+
lines.push('');
|
|
260
|
+
|
|
261
|
+
const nonPortable = c.skills.filter((s) => s.dropped.length > 0 || s.partial.length > 0);
|
|
262
|
+
lines.push(
|
|
263
|
+
`**${String(nonPortable.length)} of ${String(c.scanned)} skills declare at least one semantic the carrier does not transport whole.**`,
|
|
264
|
+
);
|
|
265
|
+
lines.push('');
|
|
266
|
+
|
|
267
|
+
lines.push('## Per skill');
|
|
268
|
+
lines.push('');
|
|
269
|
+
lines.push('| skill | dropped | partial |');
|
|
270
|
+
lines.push('|---|---|---|');
|
|
271
|
+
for (const s of c.skills) {
|
|
272
|
+
const d = s.dropped.length ? s.dropped.map((k) => `\`${k}\``).join(', ') : '—';
|
|
273
|
+
const pa = s.partial.length ? s.partial.map((k) => `\`${k}\``).join(', ') : '—';
|
|
274
|
+
lines.push(`| \`${s.skill}\` | ${d} | ${pa} |`);
|
|
275
|
+
}
|
|
276
|
+
lines.push('');
|
|
277
|
+
return lines.join('\n');
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
export function main(argv: readonly string[]): number {
|
|
281
|
+
const write = argv.includes('--write');
|
|
282
|
+
const json = argv.includes('--json');
|
|
283
|
+
const outIdx = argv.indexOf('--out');
|
|
284
|
+
const out = outIdx >= 0 ? argv[outIdx + 1] : undefined;
|
|
285
|
+
|
|
286
|
+
const c = census(REPO_ROOT);
|
|
287
|
+
|
|
288
|
+
if (json) {
|
|
289
|
+
process.stdout.write(`${JSON.stringify(c, null, 2)}\n`);
|
|
290
|
+
return 0;
|
|
291
|
+
}
|
|
292
|
+
if (write) {
|
|
293
|
+
const target = path.resolve(REPO_ROOT, out ?? DEFAULT_OUT);
|
|
294
|
+
fs.mkdirSync(path.dirname(target), { recursive: true });
|
|
295
|
+
fs.writeFileSync(target, render(c, pin(REPO_ROOT)), 'utf8');
|
|
296
|
+
process.stdout.write(
|
|
297
|
+
`semantic_parity_census: wrote ${path.relative(REPO_ROOT, target)}\n`,
|
|
298
|
+
);
|
|
299
|
+
return 0;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
const counts: Record<Column, number> = { carried: 0, partial: 0, dropped: 0 };
|
|
303
|
+
for (const r of c.fields) counts[r.column] += 1;
|
|
304
|
+
process.stdout.write(
|
|
305
|
+
`semantic_parity_census · ${String(c.fields.length)} schema field(s): ` +
|
|
306
|
+
`${String(counts.carried)} carried, ${String(counts.partial)} partial, ${String(counts.dropped)} dropped\n`,
|
|
307
|
+
);
|
|
308
|
+
process.stdout.write(` corpus: ${String(c.scanned)} SKILL.md file(s)\n`);
|
|
309
|
+
return 0;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
if (process.argv[1] && import.meta.url === pathToFileURL(path.resolve(process.argv[1])).href) {
|
|
313
|
+
process.exit(main(process.argv.slice(2)));
|
|
314
|
+
}
|
|
@@ -31,7 +31,15 @@ import process from 'node:process';
|
|
|
31
31
|
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
32
32
|
import * as path from 'node:path';
|
|
33
33
|
|
|
34
|
-
import {
|
|
34
|
+
import {
|
|
35
|
+
DEFAULT_PROJECTS_ROOT,
|
|
36
|
+
derivedBytes,
|
|
37
|
+
listTranscriptFiles,
|
|
38
|
+
measureBytesPerToken,
|
|
39
|
+
scanTranscripts,
|
|
40
|
+
type BytesPerToken,
|
|
41
|
+
type DerivedBytes,
|
|
42
|
+
} from './_lib/cc_transcript.js';
|
|
35
43
|
import { emptyCounters, scanEolSlice, type EolCounters } from './_lib/session_eol.js';
|
|
36
44
|
|
|
37
45
|
export interface SessionSummary {
|
|
@@ -90,6 +98,28 @@ export interface EolReport {
|
|
|
90
98
|
};
|
|
91
99
|
/** Pearson r of file bytes vs final context tokens over the readable set. */
|
|
92
100
|
bytes_tokens_pearson_r: number | null;
|
|
101
|
+
/**
|
|
102
|
+
* The median session's final context expressed in bytes - DERIVED, and
|
|
103
|
+
* labelled so (`road-to-a-bytes-row-that-exists` Phase 2, metric
|
|
104
|
+
* `provider-bytes-per-call`).
|
|
105
|
+
*
|
|
106
|
+
* Do NOT confuse this with `SessionSummary.bytes` or with the Pearson r
|
|
107
|
+
* above: those are the transcript FILE's size on this disk, a local
|
|
108
|
+
* artefact. This is an estimate of the context volume a round re-sends,
|
|
109
|
+
* obtained by multiplying a token count by a ratio measured on this same
|
|
110
|
+
* store. `null` whenever either input is missing - there is no fallback
|
|
111
|
+
* ratio anywhere in this path, deliberately.
|
|
112
|
+
*
|
|
113
|
+
* COST, named rather than discovered: producing it costs a second pass
|
|
114
|
+
* over the store (`scanTranscripts`), because the end-of-life counters are
|
|
115
|
+
* accumulated by `_lib/session_eol.ts`, whose shape is PERSISTED in state
|
|
116
|
+
* files and whose fields therefore carry a migration obligation this
|
|
117
|
+
* report does not need to take on for a derived column.
|
|
118
|
+
*/
|
|
119
|
+
provider_bytes: {
|
|
120
|
+
factor: BytesPerToken | null;
|
|
121
|
+
median_final_context: DerivedBytes | null;
|
|
122
|
+
};
|
|
93
123
|
threshold_crossings: Record<string, number>;
|
|
94
124
|
}
|
|
95
125
|
|
|
@@ -220,6 +250,11 @@ export function buildReport(root: string, now: Date = new Date()): EolReport {
|
|
|
220
250
|
const post = allEvents.map((e) => e.post_tokens).filter((v): v is number => v !== null);
|
|
221
251
|
const summaryRecords = sessions.reduce((s, x) => s + x.counters.compact_summaries, 0);
|
|
222
252
|
|
|
253
|
+
// Byte factor, measured on this same store. Separate pass - see the
|
|
254
|
+
// `provider_bytes` doc comment for why it is not folded into EolCounters.
|
|
255
|
+
const byteScan = scanTranscripts({ root, measureBytes: true });
|
|
256
|
+
const bytesFactor = measureBytesPerToken(byteScan.records);
|
|
257
|
+
|
|
223
258
|
const crossings: Record<string, number> = {};
|
|
224
259
|
for (const thr of [200_000, 400_000, 600_000, 800_000]) {
|
|
225
260
|
crossings[`>=${thr / 1000}k`] = finals.filter((c) => c >= thr).length;
|
|
@@ -250,6 +285,10 @@ export function buildReport(root: string, now: Date = new Date()): EolReport {
|
|
|
250
285
|
.filter((s) => (s.counters.final_context_tokens as number) > 1_000)
|
|
251
286
|
.map((s) => [s.bytes, s.counters.final_context_tokens as number]),
|
|
252
287
|
),
|
|
288
|
+
provider_bytes: {
|
|
289
|
+
factor: bytesFactor,
|
|
290
|
+
median_final_context: derivedBytes(percentiles(finals)?.median ?? 0, finals.length > 0 ? bytesFactor : null),
|
|
291
|
+
},
|
|
253
292
|
threshold_crossings: crossings,
|
|
254
293
|
};
|
|
255
294
|
}
|
|
@@ -274,6 +313,20 @@ export function renderText(r: EolReport): string {
|
|
|
274
313
|
if (r.turns) {
|
|
275
314
|
lines.push(`turns per session: median=${fmt(r.turns.median)} p90=${fmt(r.turns.p90)} max=${fmt(r.turns.max)}`);
|
|
276
315
|
}
|
|
316
|
+
const pb = r.provider_bytes;
|
|
317
|
+
if (pb.factor === null || pb.median_final_context === null) {
|
|
318
|
+
lines.push('provider bytes: basis unavailable - this store supplied no bytes-per-token factor');
|
|
319
|
+
} else {
|
|
320
|
+
lines.push(
|
|
321
|
+
`provider bytes (basis: ${pb.median_final_context.basis}): median final context`
|
|
322
|
+
+ ` ~= ${fmt(pb.median_final_context.bytes)} bytes`,
|
|
323
|
+
);
|
|
324
|
+
lines.push(
|
|
325
|
+
` factor ${pb.factor.bytes_per_token.toFixed(4)} bytes/token (basis: ${pb.factor.basis},`
|
|
326
|
+
+ ` ${fmt(pb.factor.content_bytes)} content bytes / ${fmt(pb.factor.output_tokens)} output tokens,`
|
|
327
|
+
+ ` n=${pb.factor.records}) - measured on assistant output, applied to an input token count`,
|
|
328
|
+
);
|
|
329
|
+
}
|
|
277
330
|
const c = r.compaction;
|
|
278
331
|
lines.push(
|
|
279
332
|
`compaction: ${c.sessions_with_compaction} sessions, ${c.events_total} events (${Object.entries(c.events_by_trigger)
|