@event4u/agent-config 16.2.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 +89 -237
- 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 +4 -4
- 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/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/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/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/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-system-capture/references/import-procedure.md +1 -1
- package/dist/agent-src/skills/existing-ui-audit/SKILL.md +2 -2
- 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/monorepo-workspace/SKILL.md +1 -1
- 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 +2 -2
- package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
- package/dist/agent-src/templates/scripts/work_engine/directives/ui/apply.ts +48 -6
- package/dist/agent-src/templates/scripts/work_engine/stack/runner.ts +774 -109
- 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-IGD6ERX6.js → chunk-JQVYKIZA.js} +10 -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-7RQP4UDH.js → chunk-KR6EM23A.js} +235 -1455
- package/dist/cli-delegate/{chunk-LTYVIY76.js → chunk-LIYTLH6O.js} +1 -1
- package/dist/cli-delegate/{chunk-YJ72UIAK.js → chunk-NQ7WT43P.js} +1186 -244
- 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-7XGBX6ZH.js → chunk-RQNNW7IF.js} +1314 -560
- package/dist/cli-delegate/{chunk-4XFP2Y3E.js → chunk-S4UMZNES.js} +1 -1
- package/dist/cli-delegate/{chunk-6KM6ORRY.js → chunk-S4YWNRKO.js} +24 -8
- package/dist/cli-delegate/{chunk-FP36SWJD.js → chunk-TRI6DQZ6.js} +2781 -340
- 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 +1167 -234
- 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 +127 -75
- 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 +5357 -6656
- package/dist/hooks/dispatch.sha256 +1 -1
- 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 +2080 -1024
- 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 +31965 -27154
- 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 +6 -0
- package/dist/shared/skillRanking.js +74 -13
- package/docs/contracts/settings-classes.md +7 -5
- package/package.json +1 -1
- 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/apply.ts +48 -6
- package/src/agent-src/templates/scripts/work_engine/stack/runner.ts +774 -109
- package/src/config/agent-settings.template.yml +62 -22
- package/src/config/continuity-surface.json +7 -0
- package/src/config/evaluator-budgets.json +4 -4
- package/src/config/gate-coverage.yml +96 -3
- package/src/config/gate-violation-baselines.json +17 -9
- package/src/config/hook-bundle-budget.json +25 -0
- package/src/config/hook-token-budget.json +6 -1
- package/src/config/host-instruction-limits.json +33 -0
- package/src/config/routing-coverage-seed.json +24 -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 +23 -71
- package/src/scripts/_cli/cmd_doctor_neighbours.ts +293 -0
- package/src/scripts/_dispatch.bash +16 -2
- package/src/scripts/_lib/agent_settings.ts +11 -0
- package/src/scripts/_lib/claude_settings_hooks.ts +10 -8
- 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/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_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/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/prompt_shape.ts +46 -0
- package/src/scripts/_lib/release_migration_gate.ts +19 -3
- package/src/scripts/_lib/reserved_name_sweep.ts +73 -0
- 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/skill_origin.ts +254 -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 +77 -2
- 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/audit_skill_overlap.ts +261 -0
- package/src/scripts/before_complete_hook.ts +243 -12
- package/src/scripts/bench_touched_file_quality.ts +238 -0
- package/src/scripts/check_enforcement_matrix.ts +377 -20
- package/src/scripts/check_estate_count.ts +130 -153
- package/src/scripts/check_finding_dispositions.ts +116 -4
- package/src/scripts/check_hook_bundle_composition.ts +370 -0
- package/src/scripts/check_kernel_edit_ratified.ts +49 -11
- package/src/scripts/check_memory.ts +7 -1
- package/src/scripts/check_release_highlights.ts +10 -0
- package/src/scripts/check_release_pr_shape.ts +38 -15
- package/src/scripts/check_standing_rule_delivery.ts +33 -13
- package/src/scripts/check_verify_expectation_delta.ts +521 -0
- 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 +33 -1
- package/src/scripts/condense.ts +14 -27
- package/src/scripts/estate_exemption_shape.ts +202 -0
- package/src/scripts/generate_host_cost_table.ts +1 -1
- package/src/scripts/hook_manifest.json +1 -1
- package/src/scripts/hook_manifest.yaml +150 -9
- package/src/scripts/hooks/block_config_weakening.ts +67 -2
- package/src/scripts/hooks/block_plumbing_writes.ts +29 -1
- package/src/scripts/hooks/code_graph_context_hook.ts +252 -23
- package/src/scripts/hooks/concern_failure_policy.ts +280 -0
- package/src/scripts/hooks/dispatch_hook.ts +52 -52
- package/src/scripts/hooks/exit_codes.ts +2 -1
- package/src/scripts/hooks/host_lowering.json +1 -1
- package/src/scripts/hooks/host_lowering.ts +19 -1
- package/src/scripts/hooks/one_question_per_ask_hook.ts +41 -25
- package/src/scripts/hooks/payload_stub.ts +10 -1
- package/src/scripts/hooks/rule_inject_hook.ts +757 -63
- package/src/scripts/hooks/table_fingerprint.ts +21 -0
- package/src/scripts/hooks/telemetry_usage_hook.ts +64 -8
- package/src/scripts/hooks/turn_end_gate_hook.ts +84 -0
- package/src/scripts/hooks_status.ts +112 -0
- package/src/scripts/injection_scan_hook.ts +7 -0
- package/src/scripts/install.ts +72 -185
- 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_hook_manifest.ts +53 -0
- package/src/scripts/lint_major_migration_sections.ts +156 -26
- package/src/scripts/lint_pack_boundaries.ts +63 -5
- package/src/scripts/lint_rule_law_section.ts +517 -0
- 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/measure_routing_signal.ts +54 -16
- package/src/scripts/measure_skill_ranker_baseline.ts +216 -8
- package/src/scripts/memory_learn_hook.ts +91 -6
- package/src/scripts/model_rule_injection.ts +52 -5
- package/src/scripts/project_thin_rules.ts +34 -327
- package/src/scripts/report_evidence_temperature.ts +657 -0
- package/src/scripts/report_installed_rule_links.ts +157 -0
- package/src/scripts/report_label_agreement.ts +233 -0
- package/src/scripts/report_obligation_mechanism.ts +230 -0
- package/src/scripts/report_single_token_triggers.ts +277 -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/rule_activation_census.ts +5 -2
- package/src/scripts/rule_trigger_eval.ts +9 -9
- package/src/scripts/schemas/review-findings.schema.json +3 -2
- package/src/scripts/schemas/rule.schema.json +5 -0
- package/src/scripts/self_review_gate.ts +62 -7
- package/src/scripts/skill_tools/score_skill_relevance.ts +290 -25
- 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 -5
- package/src/server/schemas/settings.ts +10 -0
- package/src/shared/skillRanking.ts +117 -11
- package/dist/cli-delegate/chunk-JNMVLWLR.js +0 -4457
- package/dist/cli-delegate/chunk-YDPILCOL.js +0 -152
|
@@ -4336,6 +4336,11 @@ var settingsSchema = external_exports.object({
|
|
|
4336
4336
|
fidelity_mode: "strict",
|
|
4337
4337
|
approximation: { enabled: false, tolerance: { color: null, length: null } }
|
|
4338
4338
|
}),
|
|
4339
|
+
code_graph: external_exports.object({
|
|
4340
|
+
consumer_index_paths: external_exports.array(external_exports.string()).default([]).describe(
|
|
4341
|
+
"Extra project-relative paths where THIS project keeps a code-graph index another tool wrote. The built-in list is deliberately vendor-neutral (graph.json, code-graph.json, .code-graph/graph.json) and names no tool, so a tool that writes its index elsewhere is named here rather than waited for. A graph found this way LOADS and answers query and explain with every edge tagged read-from-elsewhere; the gate verbs (impact, untested, dead) refuse a graph made only of such edges and say so, because an empty answer from a gate must not read as 'nothing found' when it means 'nothing trusted'. Absolute paths and paths escaping the project root are ignored."
|
|
4342
|
+
)
|
|
4343
|
+
}).default({}),
|
|
4339
4344
|
consistency: external_exports.object({
|
|
4340
4345
|
cross_source: crossSourceMode.default("on").describe(
|
|
4341
4346
|
"Consumed by the cross-source-consistency rule. When the agent works from multiple sources (ticket text, an attached image/mockup, the spec, the codebase) it checks them against each other and asks before proceeding on a discrepancy \u2014 instead of silently guessing. on (default) = surface every real cross-source contradiction / silent-scope-expansion as one question; auto = surface only high-confidence contradictions, state low-confidence as an assumption; off = no cross-source checking."
|
|
@@ -4603,6 +4608,11 @@ var settingsSchema = external_exports.object({
|
|
|
4603
4608
|
"When a hook exceeds hooks.concern_budget.max_per_event, fail the run (true) instead of warning and continuing (false, default). Turn on in CI when you want hook quality to gate merges."
|
|
4604
4609
|
)
|
|
4605
4610
|
}),
|
|
4611
|
+
verify_before_complete: external_exports.object({
|
|
4612
|
+
touched_file_quality: external_exports.enum(["off", "shadow", "warn"]).default("off").describe(
|
|
4613
|
+
"Stop-slot pass that runs the project's OWN quality commands \u2014 the ones resolve_toolchain() already reports \u2014 over the files this turn edited. Default off. `shadow` records a per-run result and emits nothing; `warn` adds ONE advisory line of at most 200 bytes. Never blocks and never counts as verification: a command recorded here never reaches _lib/verification_command.ts, so a clean eslint run cannot let a turn claim it verified anything. A writing command runs only in its check form (pint --test) or not at all, and a command with no per-file form is skipped rather than run project-wide at every stop."
|
|
4614
|
+
)
|
|
4615
|
+
}).default({}),
|
|
4606
4616
|
injection_scan: external_exports.object({
|
|
4607
4617
|
enabled: external_exports.boolean().default(false).describe(
|
|
4608
4618
|
"PostToolUse prompt-injection scanner (road-to-security-pillar.md P3.2). Default off. When on, scans tool output (file reads, web fetches, MCP responses) for injection signatures and WARNS in context (never blocks). Runtime backstop on top of the always-on untrusted-input-defense rule; detection is probabilistic."
|
|
@@ -221,7 +221,18 @@ var MERGEABLE_KEYS = [
|
|
|
221
221
|
// be followed. Class C, so a user still sets it by hand or through the
|
|
222
222
|
// GUI; whitelisting decides only whether the value SURVIVES the merge
|
|
223
223
|
// (ADR-271, road-to-design-intent-conformance 2.3).
|
|
224
|
-
"design.fidelity_mode"
|
|
224
|
+
"design.fidelity_mode",
|
|
225
|
+
// `lean_projection.*` is a per-MACHINE setting and the install it governs is
|
|
226
|
+
// a user-scope one: the layer being thinned is `~/.claude/rules`, which
|
|
227
|
+
// belongs to the machine and not to any checkout. Without these two rows a
|
|
228
|
+
// consumer who wrote the opt-in into the user-global file got no error, no
|
|
229
|
+
// warning and no effect — the same silent-filter defect the two entries
|
|
230
|
+
// above repair, reaching a third key, and unsatisfiable-by-construction on
|
|
231
|
+
// an ADR-020 global-only install, where no project layer exists to carry it.
|
|
232
|
+
// Whitelisting decides only whether a value SURVIVES the merge: it sets
|
|
233
|
+
// nothing, and `installerThinsHost` still refuses a template-only value.
|
|
234
|
+
"lean_projection.mode",
|
|
235
|
+
"lean_projection.hosts"
|
|
225
236
|
];
|
|
226
237
|
var TEMPLATE_RELATIVE = path.join("src", "config", "agent-settings.template.yml");
|
|
227
238
|
var _PACKAGE_ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..", "..", "..");
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { createRequire as __acCreateRequire } from 'node:module'; const require = globalThis.require ?? __acCreateRequire(import.meta.url);
|
|
2
|
+
|
|
3
|
+
// src/scripts/_lib/secret_detector.ts
|
|
4
|
+
var ENTROPY_MIN_TOKEN_LENGTH = 20;
|
|
5
|
+
var BASE64_ENTROPY_THRESHOLD = 4.5;
|
|
6
|
+
var HEX_ENTROPY_THRESHOLD = 3;
|
|
7
|
+
var RULES = [
|
|
8
|
+
{ rule: "anthropic-api-key", kind: "anthropic-api-key", regex: /sk-ant-[A-Za-z0-9_-]{20,}/g },
|
|
9
|
+
{ rule: "anthropic-project-key", kind: "anthropic-api-key", regex: /sk-proj-[A-Za-z0-9_-]{20,}/g },
|
|
10
|
+
{ rule: "aws-access-key", kind: "aws-access-key", regex: /AKIA[0-9A-Z]{16}/g },
|
|
11
|
+
{ rule: "google-api-key", kind: "google-api-key", regex: /AIza[0-9A-Za-z_-]{35}/g },
|
|
12
|
+
{ rule: "github-pat", kind: "github-pat", regex: /ghp_[0-9A-Za-z]{36}/g },
|
|
13
|
+
// Fine-grained PATs (github_pat_…) were a measured detector gap: the
|
|
14
|
+
// 2026-07-28 adversarial corpus pass flagged them as missed positives.
|
|
15
|
+
{ rule: "github-fine-grained-pat", kind: "github-pat", regex: /github_pat_[0-9A-Za-z_]{22,}/g },
|
|
16
|
+
{
|
|
17
|
+
rule: "jwt",
|
|
18
|
+
kind: "jwt",
|
|
19
|
+
regex: /eyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}/g
|
|
20
|
+
},
|
|
21
|
+
// Extensions.
|
|
22
|
+
{ rule: "stripe-secret-key", kind: "stripe-secret-key", regex: /sk_(?:live|test)_[0-9A-Za-z]{16,}/g },
|
|
23
|
+
{ rule: "slack-token", kind: "slack-token", regex: /xox[baprs]-[0-9A-Za-z-]{10,}/g },
|
|
24
|
+
{ rule: "pem-private-key", kind: "pem-private-key", regex: /-----BEGIN [A-Z ]*PRIVATE KEY-----/g },
|
|
25
|
+
{
|
|
26
|
+
rule: "db-connection-uri",
|
|
27
|
+
kind: "db-connection-uri",
|
|
28
|
+
regex: /\b[a-z][a-z0-9+.-]*:\/\/[^\s:/@]+:[^\s:/@]+@/g
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
rule: "generic-assignment",
|
|
32
|
+
kind: "generic-assignment",
|
|
33
|
+
regex: /(?:password|passwd|pwd|secret|api[_-]?key|access[_-]?token|auth[_-]?token)\s*[:=]\s*['"]?([^'"\s]{8,})['"]?/gi,
|
|
34
|
+
valueGroup: 1
|
|
35
|
+
}
|
|
36
|
+
];
|
|
37
|
+
var SECRET_ALLOW = /secret-allow/;
|
|
38
|
+
var PLACEHOLDER_PATTERNS = [
|
|
39
|
+
/x{4,}/i,
|
|
40
|
+
/example/i,
|
|
41
|
+
/changeme/i,
|
|
42
|
+
/your[_-].*here/i,
|
|
43
|
+
/<[^>]+>/,
|
|
44
|
+
/\.\.\./,
|
|
45
|
+
/^your[_-]/i,
|
|
46
|
+
/placeholder/i
|
|
47
|
+
];
|
|
48
|
+
var DATA_URI = /data:[\w.+-]+\/[\w.+-]+;base64,/i;
|
|
49
|
+
var UUID = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;
|
|
50
|
+
var KEYWORD_CONTEXT = /password|secret|token|api[_-]?key|credential/i;
|
|
51
|
+
var ENTROPY_TOKEN = /[A-Za-z0-9+=_-]{20,}/g;
|
|
52
|
+
var IS_HEX = /^[0-9a-fA-F]+$/;
|
|
53
|
+
var HASH_HEX_LENGTHS = /* @__PURE__ */ new Set([32, 40, 64]);
|
|
54
|
+
function isAllSameChar(value) {
|
|
55
|
+
return value.length > 0 && /^(.)\1*$/.test(value);
|
|
56
|
+
}
|
|
57
|
+
var GENERIC_MIN_LENGTH = 16;
|
|
58
|
+
var GENERIC_MIN_ENTROPY = 3.3;
|
|
59
|
+
var CODE_EXPR = /[()$`{}<>[\];,]|->|=>|\.\w/;
|
|
60
|
+
function looksLikeSecretValue(value) {
|
|
61
|
+
if (value.length < GENERIC_MIN_LENGTH) {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
if (CODE_EXPR.test(value)) {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
const hasDigit = /[0-9]/.test(value);
|
|
68
|
+
const mixedCase = /[a-z]/.test(value) && /[A-Z]/.test(value);
|
|
69
|
+
if (!hasDigit && !mixedCase) {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
return shannonEntropy(value) >= GENERIC_MIN_ENTROPY;
|
|
73
|
+
}
|
|
74
|
+
function isPlaceholderValue(value, pathHint) {
|
|
75
|
+
if (pathHint !== void 0) {
|
|
76
|
+
if (pathHint.endsWith(".example") || pathHint.endsWith(".sample") || pathHint.includes(".env.example")) {
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
if (isAllSameChar(value)) {
|
|
81
|
+
return true;
|
|
82
|
+
}
|
|
83
|
+
return PLACEHOLDER_PATTERNS.some((p) => p.test(value));
|
|
84
|
+
}
|
|
85
|
+
function maskSecret(value) {
|
|
86
|
+
const front = value.slice(0, 4);
|
|
87
|
+
const back = value.length > 6 ? value.slice(-2) : "";
|
|
88
|
+
if (front.length + back.length >= value.length) {
|
|
89
|
+
return `${value.slice(0, 1)}\u2026`;
|
|
90
|
+
}
|
|
91
|
+
return `${front}\u2026${back}`;
|
|
92
|
+
}
|
|
93
|
+
function shannonEntropy(value) {
|
|
94
|
+
const freq = /* @__PURE__ */ new Map();
|
|
95
|
+
for (const ch of value) {
|
|
96
|
+
freq.set(ch, (freq.get(ch) ?? 0) + 1);
|
|
97
|
+
}
|
|
98
|
+
const n = value.length;
|
|
99
|
+
let entropy = 0;
|
|
100
|
+
for (const count of freq.values()) {
|
|
101
|
+
const p = count / n;
|
|
102
|
+
entropy -= p * Math.log2(p);
|
|
103
|
+
}
|
|
104
|
+
return entropy;
|
|
105
|
+
}
|
|
106
|
+
function overlaps(spans, start, end) {
|
|
107
|
+
return spans.some(([s, e]) => start < e && s < end);
|
|
108
|
+
}
|
|
109
|
+
function scanText(text, opts = {}) {
|
|
110
|
+
const pathHint = opts.path;
|
|
111
|
+
const findings = [];
|
|
112
|
+
const lines = text.split(/\r\n|\r|\n/);
|
|
113
|
+
for (let i = 0; i < lines.length; i++) {
|
|
114
|
+
const line = lines[i];
|
|
115
|
+
const lineNo = i + 1;
|
|
116
|
+
if (SECRET_ALLOW.test(line)) {
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
const covered = [];
|
|
120
|
+
for (const rule of RULES) {
|
|
121
|
+
rule.regex.lastIndex = 0;
|
|
122
|
+
let m;
|
|
123
|
+
while ((m = rule.regex.exec(line)) !== null) {
|
|
124
|
+
const value = rule.valueGroup !== void 0 ? m[rule.valueGroup] : m[0];
|
|
125
|
+
if (value === void 0) {
|
|
126
|
+
if (m.index === rule.regex.lastIndex) {
|
|
127
|
+
rule.regex.lastIndex += 1;
|
|
128
|
+
}
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
if (rule.rule === "generic-assignment" && !looksLikeSecretValue(value)) {
|
|
132
|
+
if (m.index === rule.regex.lastIndex) {
|
|
133
|
+
rule.regex.lastIndex += 1;
|
|
134
|
+
}
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
const valueStart = m.index + m[0].indexOf(value);
|
|
138
|
+
const confidence = isPlaceholderValue(value, pathHint) ? "low" : "high";
|
|
139
|
+
findings.push({
|
|
140
|
+
rule: rule.rule,
|
|
141
|
+
kind: rule.kind,
|
|
142
|
+
line: lineNo,
|
|
143
|
+
column: valueStart + 1,
|
|
144
|
+
masked: maskSecret(value),
|
|
145
|
+
confidence
|
|
146
|
+
});
|
|
147
|
+
covered.push([valueStart, valueStart + value.length]);
|
|
148
|
+
if (m.index === rule.regex.lastIndex) {
|
|
149
|
+
rule.regex.lastIndex += 1;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
if (!DATA_URI.test(line)) {
|
|
154
|
+
const hasKeyword = KEYWORD_CONTEXT.test(line);
|
|
155
|
+
ENTROPY_TOKEN.lastIndex = 0;
|
|
156
|
+
let tm;
|
|
157
|
+
while ((tm = ENTROPY_TOKEN.exec(line)) !== null) {
|
|
158
|
+
const token = tm[0];
|
|
159
|
+
const start = tm.index;
|
|
160
|
+
const end = start + token.length;
|
|
161
|
+
if (token.length < ENTROPY_MIN_TOKEN_LENGTH) {
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
if (overlaps(covered, start, end)) {
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
if (UUID.test(token)) {
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
if (/^sha(?:256|384|512)-/.test(token)) {
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
const entropy = shannonEntropy(token);
|
|
174
|
+
const isHex = IS_HEX.test(token);
|
|
175
|
+
if (isHex && HASH_HEX_LENGTHS.has(token.length)) {
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
let confidence = null;
|
|
179
|
+
if (isHex) {
|
|
180
|
+
if (entropy >= HEX_ENTROPY_THRESHOLD && hasKeyword) {
|
|
181
|
+
confidence = "high";
|
|
182
|
+
}
|
|
183
|
+
} else if (entropy >= BASE64_ENTROPY_THRESHOLD) {
|
|
184
|
+
confidence = hasKeyword ? "high" : "medium";
|
|
185
|
+
}
|
|
186
|
+
if (confidence === null) {
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
189
|
+
if (isPlaceholderValue(token, pathHint)) {
|
|
190
|
+
confidence = "low";
|
|
191
|
+
}
|
|
192
|
+
findings.push({
|
|
193
|
+
rule: "entropy",
|
|
194
|
+
kind: "high-entropy-string",
|
|
195
|
+
line: lineNo,
|
|
196
|
+
column: start + 1,
|
|
197
|
+
masked: maskSecret(token),
|
|
198
|
+
confidence
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return findings;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
export {
|
|
207
|
+
scanText
|
|
208
|
+
};
|