@event4u/agent-config 14.18.0 → 14.19.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.
Files changed (146) hide show
  1. package/.augment-plugin/marketplace.json +3 -3
  2. package/.augment-plugin/plugin.json +1 -1
  3. package/.claude-plugin/marketplace.json +1 -1
  4. package/CHANGELOG.md +169 -130
  5. package/README.md +71 -149
  6. package/dist/agent-src/README.md +1 -1
  7. package/dist/agent-src/commands/agent-handoff.md +2 -2
  8. package/dist/agent-src/commands/review/changes.md +19 -19
  9. package/dist/agent-src/commands/review.md +2 -2
  10. package/dist/agent-src/contexts/execution/host-capability-manifest.md +30 -3
  11. package/dist/agent-src/rules/autonomous-execution.md +1 -1
  12. package/dist/agent-src/rules/git-history-discipline.md +2 -2
  13. package/dist/agent-src/rules/guidelines.md +1 -1
  14. package/dist/agent-src/rules/session-canary.md +2 -2
  15. package/dist/agent-src/rules/token-efficiency.md +1 -1
  16. package/dist/agent-src/skills/adversarial-review/SKILL.md +0 -8
  17. package/dist/agent-src/skills/canvas-design/SKILL.md +1 -1
  18. package/dist/agent-src/skills/design-intelligence/SKILL.md +1 -1
  19. package/dist/agent-src/skills/design-intelligence/data/app-interface.csv +1 -1
  20. package/dist/agent-src/skills/design-intelligence/data/motion.csv +17 -17
  21. package/dist/agent-src/skills/design-intelligence/data/ux-guidelines.csv +2 -2
  22. package/dist/agent-src/skills/design-intelligence/references/context-and-registers.md +17 -0
  23. package/dist/agent-src/skills/design-intelligence/references/design-rules-checklist.md +4 -4
  24. package/dist/agent-src/skills/design-review/SKILL.md +1 -1
  25. package/dist/agent-src/skills/design-variations/SKILL.md +1 -1
  26. package/dist/agent-src/skills/existing-ui-audit/SKILL.md +1 -1
  27. package/dist/agent-src/skills/fe-design/SKILL.md +32 -5
  28. package/dist/agent-src/skills/fe-design/references/craft-floor.md +7 -0
  29. package/dist/agent-src/skills/fe-design/references/design-patterns.md +47 -2
  30. package/dist/agent-src/skills/laravel-scheduling/SKILL.md +3 -1
  31. package/dist/agent-src/skills/project-analyzer/SKILL.md +0 -6
  32. package/dist/agent-src/skills/react-native-setup/SKILL.md +3 -3
  33. package/dist/agent-src/skills/react-shadcn-ui/SKILL.md +1 -1
  34. package/dist/agent-src/skills/sequential-thinking/SKILL.md +18 -8
  35. package/dist/agent-src/skills/tailwind-engineer/SKILL.md +1 -1
  36. package/dist/agent-src/skills/ui-apply-generic/SKILL.md +1 -1
  37. package/dist/agent-src/skills/ui-component-architect/SKILL.md +1 -1
  38. package/dist/agent-src/skills/using-git-worktrees/SKILL.md +17 -2
  39. package/dist/agent-src/templates/agents/agent-project-settings.example.yml +1 -1
  40. package/dist/cli/commands/recordTriggerEval.js +2 -2
  41. package/dist/cli/main.js +1 -1
  42. package/dist/cli-delegate/{chunk-AKJGUQNO.js → chunk-GZTMRYCN.js} +405 -341
  43. package/dist/cli-delegate/{chunk-7RXIKF62.js → chunk-IDHUQIXP.js} +283 -132
  44. package/dist/cli-delegate/cmd_adr_effective.js +318 -81
  45. package/dist/cli-delegate/cmd_conformance.js +420 -16
  46. package/dist/cli-delegate/cmd_doctor.js +1 -1
  47. package/dist/cli-delegate/cmd_export.js +1 -1
  48. package/dist/cli-delegate/cmd_handoff.js +1 -1
  49. package/dist/cli-delegate/cmd_prune.js +1 -1
  50. package/dist/cli-delegate/cmd_route_audit.js +1 -1
  51. package/dist/cli-delegate/cmd_settings_migrate.js +1 -1
  52. package/dist/cli-delegate/cmd_sync.js +1 -1
  53. package/dist/cli-delegate/cmd_uninstall.js +1 -1
  54. package/dist/cli-delegate/cmd_validate.js +1 -1
  55. package/dist/discovery/deprecation-report.md +1 -1
  56. package/dist/discovery/discovery-manifest.json +28 -27
  57. package/dist/discovery/discovery-manifest.json.sha256 +1 -1
  58. package/dist/discovery/discovery-manifest.summary.md +1 -1
  59. package/dist/discovery/dormancy-report.md +1 -1
  60. package/dist/discovery/orphan-report.md +1 -1
  61. package/dist/discovery/packs.json +2 -2
  62. package/dist/discovery/trust-report.md +1 -1
  63. package/dist/discovery/workspaces.json +2 -2
  64. package/dist/hooks/dispatch.js +2132 -1462
  65. package/dist/install/install.mjs +588 -527
  66. package/dist/mcp/registry-manifest.json +1 -1
  67. package/dist/mcp/server.json +2 -2
  68. package/dist/mcp/server.mjs +1619 -1045
  69. package/dist/scripts/_lib/model_tier.js +1 -1
  70. package/docs/guidelines/agent-infra/evaluator-independence-mechanics.md +1 -1
  71. package/docs/guidelines/agent-infra/roadmap-progress-mechanics.md +1 -1
  72. package/docs/guidelines/design-antipatterns.md +87 -64
  73. package/package.json +1 -1
  74. package/src/agent-src/README.md +1 -1
  75. package/src/config/ci-local-parity.yml +6 -0
  76. package/src/config/gate-coverage.yml +170 -0
  77. package/src/config/gate-violation-baselines.json +3 -3
  78. package/src/config/release-gate-locality.yml +12 -0
  79. package/src/scripts/_cli/cmd_doctor.ts +2 -2
  80. package/src/scripts/_cli/cmd_handoff.ts +1 -1
  81. package/src/scripts/_cli/cmd_update.ts +1 -1
  82. package/src/scripts/_cli/cmd_versions.ts +1 -1
  83. package/src/scripts/_lib/adr_frontmatter.ts +44 -0
  84. package/src/scripts/_lib/consequence_objects.ts +152 -0
  85. package/src/scripts/_lib/exec_evidence.ts +7 -0
  86. package/src/scripts/_lib/global_deploy_inventory.ts +2 -2
  87. package/src/scripts/_lib/host_permission_checks.ts +251 -0
  88. package/src/scripts/_lib/model_tier.ts +1 -1
  89. package/src/scripts/_lib/obligation_frequency.ts +2 -2
  90. package/src/scripts/_lib/release_highlights.ts +93 -0
  91. package/src/scripts/_lib/release_material.ts +64 -1
  92. package/src/scripts/_lib/runtime_journal.ts +26 -3
  93. package/src/scripts/_lib/runtime_wiring_checks.ts +12 -1
  94. package/src/scripts/_lib/session_register.ts +11 -6
  95. package/src/scripts/_lib/sqlite_schema.ts +22 -0
  96. package/src/scripts/_lib/surface.ts +86 -0
  97. package/src/scripts/_lib/ui_authority.ts +116 -0
  98. package/src/scripts/adr/regenerate_index.ts +54 -1
  99. package/src/scripts/adr_cite_check.ts +71 -15
  100. package/src/scripts/ai_council/clients.ts +1 -1
  101. package/src/scripts/autonomy_friction_corpus.ts +229 -0
  102. package/src/scripts/build_proof.ts +15 -2
  103. package/src/scripts/check_beta_review_markers.ts +141 -17
  104. package/src/scripts/check_enforcement_coverage.ts +1 -1
  105. package/src/scripts/check_enforcement_denominator.ts +121 -11
  106. package/src/scripts/check_finding_dispositions.ts +66 -9
  107. package/src/scripts/check_gate_coverage.ts +96 -0
  108. package/src/scripts/check_release_highlights.ts +74 -1
  109. package/src/scripts/check_skill_activation_claim.ts +179 -0
  110. package/src/scripts/check_trigger_evals.ts +1 -1
  111. package/src/scripts/conformance_scan.ts +44 -3
  112. package/src/scripts/explain_run.ts +1 -1
  113. package/src/scripts/generate_capability_matrix.ts +1 -1
  114. package/src/scripts/git_authorization_hook.ts +75 -1
  115. package/src/scripts/hook_manifest.json +1 -1
  116. package/src/scripts/hook_manifest.yaml +14 -11
  117. package/src/scripts/hooks/augment-dispatcher.sh +1 -1
  118. package/src/scripts/hooks/category_a.ts +291 -0
  119. package/src/scripts/hooks/cline-dispatcher.sh +1 -1
  120. package/src/scripts/hooks/cursor-dispatcher.sh +11 -5
  121. package/src/scripts/hooks/dispatch_hook.ts +17 -22
  122. package/src/scripts/hooks/git_command_classifier.ts +156 -1
  123. package/src/scripts/hooks/host_lowering.ts +215 -0
  124. package/src/scripts/hooks/host_lowering.yaml +185 -0
  125. package/src/scripts/hooks/host_semantics.ts +105 -37
  126. package/src/scripts/hooks/journal_record_hook.ts +10 -0
  127. package/src/scripts/hooks/permission_gate.ts +117 -0
  128. package/src/scripts/hooks_status.ts +12 -10
  129. package/src/scripts/install.ts +53 -82
  130. package/src/scripts/install_anthropic_key.sh +2 -2
  131. package/src/scripts/lint_design_antipattern_parity.ts +80 -0
  132. package/src/scripts/lint_evidence_artifacts.ts +45 -1
  133. package/src/scripts/lint_hook_manifest.ts +87 -3
  134. package/src/scripts/lint_motion_authority_drift.ts +731 -0
  135. package/src/scripts/lint_readme_size.ts +158 -12
  136. package/src/scripts/lint_reasoning_fixtures.ts +216 -0
  137. package/src/scripts/lint_skill_trigger_contradiction.ts +161 -0
  138. package/src/scripts/measure_sibling_naming.ts +150 -0
  139. package/src/scripts/redact_hook_capture.ts +1 -1
  140. package/src/scripts/report_skill_activation.ts +319 -7
  141. package/src/scripts/schemas/review-findings.schema.json +5 -0
  142. package/src/scripts/schemas/skill.schema.json +2 -2
  143. package/src/scripts/session_canary_hook.ts +1 -1
  144. package/src/scripts/session_register_hook.ts +4 -3
  145. package/src/scripts/trigger_eval_grandfather.json +5 -1
  146. package/src/scripts/validate_agent_settings.ts +1 -1
@@ -16,6 +16,9 @@ import {
16
16
  import {
17
17
  readHookStdin
18
18
  } from "./chunk-F7DQWYR5.js";
19
+ import {
20
+ reportScanned
21
+ } from "./chunk-I3EIN2YG.js";
19
22
  import {
20
23
  ArgparseExit,
21
24
  STATUS_SYMBOLS,
@@ -33,7 +36,7 @@ import {
33
36
  frontmatterPaths,
34
37
  proseEqual,
35
38
  splitFrontmatter
36
- } from "./chunk-7RXIKF62.js";
39
+ } from "./chunk-IDHUQIXP.js";
37
40
  import "./chunk-FTAISGDQ.js";
38
41
  import "./chunk-M2DPGFZ4.js";
39
42
  import "./chunk-BTWUYDGN.js";
@@ -739,6 +742,128 @@ function humanTypedThisTurn(prompt) {
739
742
  return true;
740
743
  }
741
744
 
745
+ // src/scripts/_lib/consequence_objects.ts
746
+ var CONSEQUENCE_PHRASES = [
747
+ {
748
+ op: "prod-deploy",
749
+ re: /(?<![A-Za-z0-9_À-ɏ])(deploy(e|en|t|st)?|ausroll(e|en)?|ship(pe|pen)?|live\s*schalt(e|en)?|rollout)\b[^.\n]{0,30}\b(produktion|production|prod|live|prod-umgebung)\b|\b(produktion|production|prod|live)\b[^.\n]{0,30}\b(deploy(e|en)?|ausrollen|ausroll(e|en)?|live\s*schalten|rollout)\b/i
750
+ },
751
+ {
752
+ op: "prod-data-destroy",
753
+ re: /(?<![A-Za-z0-9_À-ɏ])(l(ö|oe)sch(e|en)?|entfern(e|en)?|leer(e|en)?|verwerf(e|en)?|drop|truncate|delete|wipe|purge|zerst(ö|oe)r(e|en)?)\b[^.\n]{0,40}\b(tabelle|tabellen|datenbank|daten|bucket|collection|zeilen|rows|table|database|dataset)\b|\b(tabelle|tabellen|datenbank|daten|bucket|collection|table|database)\b[^.\n]{0,40}\b(l(ö|oe)schen|leeren|verwerfen|droppen|truncaten|entfernen|drop|truncate|delete|wipe|purge)\b/i
754
+ },
755
+ {
756
+ op: "prod-infra-change",
757
+ re: /(?<![A-Za-z0-9_À-ɏ])((ver)?(ä|ae)nder(e|n)?|anpass(e|en)?|umbau(e|en)?|apply|destroy|(neu\s*)?provisionier(e|en)?)\b[^.\n]{0,40}\b(infrastruktur|infrastructure|cluster|terraform|iam|dns|netzwerk|network|firewall|policy|policies|security[-\s]group)\b|\b(infrastruktur|infrastructure|cluster|terraform|iam|dns|netzwerk|firewall)\b[^.\n]{0,40}\b((ver)?(ä|ae)ndern|anpassen|umbauen|zerst(ö|oe)ren|apply|destroy)\b/i
758
+ },
759
+ {
760
+ op: "external-send",
761
+ re: /(?<![A-Za-z0-9_À-ɏ])(schick(e|en)?|verschick(e|en)?|send(e|en|et)?|mail(e|en)?|raussend(e|en)?|versend(e|en)?|post|publish)\b[^.\n]{0,40}\b(mail|mails|email|e-mail|nachricht|nachrichten|newsletter|webhook|kunden|kundin|kunde|empf(ä|ae)nger|customers?|recipients?|message)\b|\b(mail|email|e-mail|nachricht|newsletter|kunden|customers?)\b[^.\n]{0,40}\b(schicken|verschicken|senden|versenden|rausschicken|send|deliver)\b/i
762
+ },
763
+ {
764
+ op: "money-movement",
765
+ re: /(?<![A-Za-z0-9_À-ɏ])(erstatt(e|en)?|r(ü|ue)ckerstatt(e|en)?|zahl(e|en)?|(ü|ue)berweis(e|en)?|abbuch(e|en)?|belast(e|en)?|refund|charge|payout|transfer|bill)\b[^.\n]{0,40}\b(betrag|geld|rechnung|zahlung|euro|dollar|kunde|kunden|karte|konto|invoice|payment|customer|card|account)\b|\b(betrag|geld|rechnung|zahlung|invoice|payment)\b[^.\n]{0,40}\b(erstatten|zur(ü|ue)ckzahlen|(ü|ue)berweisen|abbuchen|belasten|refund|charge|transfer)\b/i
766
+ },
767
+ {
768
+ op: "trunk-force-push",
769
+ re: /(?<![A-Za-z0-9_À-ɏ])(force[-\s]?push(e|en|t)?|force[-\s]?pushen|(ü|ue)berschreib(e|en)?)\b[^.\n]{0,40}\b(main|master|trunk|produktions?[-\s]?branch|production|release[-\s]?branch)\b|\b(main|master|trunk|production)\b[^.\n]{0,40}\b(force[-\s]?pushen|force[-\s]?push|(ü|ue)berschreiben)\b/i
770
+ },
771
+ {
772
+ op: "out-of-scope-destruction",
773
+ re: /(?<![A-Za-z0-9_À-ɏ])(l(ö|oe)sch(e|en)?|entfern(e|en)?|r(ä|ae)um(e|en)?\s*auf|aufr(ä|ae)um(e|en)?|delete|remove|wipe)\b[^.\n]{0,40}\b(au(ß|ss)erhalb|ausserhalb|unabh(ä|ae)ngig|nicht\s+zur\s+aufgabe|outside\s+(the\s+)?(task|scope)|unrelated|everything\s+else|alles\s+andere)\b|\b(au(ß|ss)erhalb|outside\s+(the\s+)?(task|scope)|unrelated)\b[^.\n]{0,40}\b(l(ö|oe)schen|entfernen|aufr(ä|ae)umen|delete|remove|wipe)\b/i
774
+ }
775
+ ];
776
+ var OBJECT_REQUIRED_OPS = /* @__PURE__ */ new Set([
777
+ "prod-data-destroy",
778
+ "external-send",
779
+ "money-movement"
780
+ ]);
781
+ var OBJECT_STOP_WORDS = /* @__PURE__ */ new Set([
782
+ "bitte",
783
+ "doch",
784
+ "mal",
785
+ "nicht",
786
+ "jetzt",
787
+ "gleich",
788
+ "auch",
789
+ "noch",
790
+ "wieder",
791
+ "in",
792
+ "im",
793
+ "aus",
794
+ "von",
795
+ "vom",
796
+ ": ",
797
+ "der",
798
+ "die",
799
+ "das",
800
+ "den",
801
+ "dem",
802
+ "und",
803
+ "oder",
804
+ "mit",
805
+ "auf",
806
+ "zu",
807
+ "komplett",
808
+ "ganz",
809
+ "alle",
810
+ "allen",
811
+ "please",
812
+ "now",
813
+ "again",
814
+ "too",
815
+ "also",
816
+ "from",
817
+ "and",
818
+ "or",
819
+ "the",
820
+ "a",
821
+ "an",
822
+ "there",
823
+ "here",
824
+ "completely",
825
+ "all",
826
+ "with",
827
+ "on",
828
+ "to",
829
+ "in"
830
+ ]);
831
+ function _normalizeObject(raw) {
832
+ return raw.trim().replace(/^["'`]+|["'`]+$/g, "").replace(/[.,;:]+$/, "").toLowerCase();
833
+ }
834
+ var OBJECT_PATTERNS = {
835
+ "prod-data-destroy": [
836
+ /\b(?:tabelle|table|datenbank|database|schema|collection|index)\s+["'`]?([A-Za-z_][\w.$-]*)/gi,
837
+ /\bs3:\/\/([\w.-]+)/gi,
838
+ /\b(?:bucket)\s+["'`]?([A-Za-z_][\w.-]*)/gi
839
+ ],
840
+ "external-send": [
841
+ /([A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,})/g,
842
+ /\bhttps?:\/\/([^\s/"'`]+)/gi,
843
+ /\b(?:an\s+(?:die|den|alle)|to\s+(?:the|all))\s+([A-Za-z][\w-]*)/gi
844
+ ],
845
+ "money-movement": [
846
+ /(\d[\d.,]*)\s*(?:€|eur\b|euro\b|\$|usd\b)/gi,
847
+ /(?:€|\$)\s*(\d[\d.,]*)/g,
848
+ /\b(?:kunde|kunden|customer|account|konto)\s+["'`]?([A-Za-z0-9][\w.-]*)/gi
849
+ ]
850
+ };
851
+ function extractObjects(op, text) {
852
+ const patterns = OBJECT_PATTERNS[op];
853
+ if (!patterns) return [];
854
+ const out = [];
855
+ for (const re of patterns) {
856
+ const local = new RegExp(re.source, re.flags.includes("g") ? re.flags : `${re.flags}g`);
857
+ let m;
858
+ while ((m = local.exec(text)) !== null) {
859
+ const value = _normalizeObject(m[1] ?? "");
860
+ if (value && !OBJECT_STOP_WORDS.has(value) && !out.includes(value)) out.push(value);
861
+ if (m.index === local.lastIndex) local.lastIndex++;
862
+ }
863
+ }
864
+ return out;
865
+ }
866
+
742
867
  // src/scripts/git_authorization_hook.ts
743
868
  var EXIT_ALLOW2 = 0;
744
869
  var STATE_FILE2 = path2.join("agents", "state", "git-authorization.json");
@@ -790,7 +915,14 @@ var ALL_OPS = [
790
915
  "clean",
791
916
  "stash-drop",
792
917
  "branch-delete",
793
- "close"
918
+ "close",
919
+ "prod-deploy",
920
+ "prod-data-destroy",
921
+ "prod-infra-change",
922
+ "external-send",
923
+ "money-movement",
924
+ "trunk-force-push",
925
+ "out-of-scope-destruction"
794
926
  ];
795
927
  var PHRASES = [
796
928
  { op: "commit", re: /\b(commit(e|et|te|ten)?|committe|einchecken)\b/i },
@@ -948,7 +1080,8 @@ var PHRASES = [
948
1080
  {
949
1081
  op: "pr-merge-auto",
950
1082
  re: /\bauto[-\s]?merge\b|\bmerge\b[^.\n]{0,20}\bautomatisch\b|\bautomatisch\b[^.\n]{0,20}\bmerg(e|en)\b/i
951
- }
1083
+ },
1084
+ ...CONSEQUENCE_PHRASES
952
1085
  ];
953
1086
  var OUTPUT_LINE = /^\s*(To\s+\S+|remote:|error:|fatal:|hint:|warning:|!\s|\?\?\s|\s*\^|[-+]{3}\s|@@\s|\$\s|>\s|\d+\s+(pass|fail)|npm ERR!|Error:|Traceback|at\s+\S+:\d+)/i;
954
1087
  function isInterrogative(prose) {
@@ -1317,6 +1450,11 @@ function run2(stdin_text, options) {
1317
1450
  authorized.push(pending.op);
1318
1451
  evidence[pending.op] = `confirmation of the refused \`${pending.op}\` (refused ${pending.refused_at}): "${prompt.trim().slice(0, 40)}"`;
1319
1452
  }
1453
+ const objects = {};
1454
+ for (const op of authorized) {
1455
+ const named = extractObjects(op, prompt);
1456
+ if (named.length > 0) objects[op] = named;
1457
+ }
1320
1458
  const now = /* @__PURE__ */ new Date();
1321
1459
  const ledger = {
1322
1460
  session_id: typeof envelope["session_id"] === "string" ? envelope["session_id"] : "",
@@ -1324,6 +1462,7 @@ function run2(stdin_text, options) {
1324
1462
  authorized,
1325
1463
  evidence,
1326
1464
  prompt_chars: prompt.length,
1465
+ objects,
1327
1466
  // Grants survive this write; `authorized` does not. That asymmetry IS the
1328
1467
  // decision. A bare operation name stays one-shot exactly as `commit-policy`
1329
1468
  // requires, and only an authorization that also froze its objects earns a
@@ -1415,10 +1554,26 @@ var BLOCK_OPS = /* @__PURE__ */ new Set([
1415
1554
  /** Destroys uncommitted work belonging to a session this one cannot see. */
1416
1555
  "worktree-remove",
1417
1556
  /** `-x` is the flag that takes `.env` and local certificates. */
1418
- "clean-ignored"
1557
+ "clean-ignored",
1558
+ // ── The consequence vocabulary, added 2026-09-06. Every one is already
1559
+ // never-autonomous in the `non-destructive-by-default` prose.
1560
+ //
1561
+ // MEMBERSHIP HERE IS A COUNTING DECISION, NOT A REFUSAL. The set's name
1562
+ // predates ADR-254, which deleted the reader that blocked: the one consumer
1563
+ // that acts on it now is `conformance_scan`'s after-the-fact tally, so
1564
+ // "blocked" describes what the Hard Floor requires of the model, never what
1565
+ // this package does at tool-call time.
1566
+ "prod-deploy",
1567
+ "prod-data-destroy",
1568
+ "prod-infra-change",
1569
+ "external-send",
1570
+ "money-movement",
1571
+ "trunk-force-push",
1572
+ "out-of-scope-destruction"
1419
1573
  ]);
1420
1574
  var G = "(?:-[A-Za-z-]+(?:=\\S+)?(?:\\s+\\S+)?\\s+)*";
1421
1575
  var P = "^(?:\\S*\\/)?";
1576
+ var CONSEQUENCE_TOOL_HEAD = /^(?:\S*\/)?(terraform|pulumi|kubectl|helm|aws|gcloud|az|vercel|netlify|flyctl|fly|wrangler|serverless|sls|eb|heroku|cap|psql|mysql|mariadb|sqlite3|mongosh|mongo|redis-cli|sendmail|msmtp|mail|mailx|curl|stripe|braintree|paypal|rm)\b/i;
1422
1577
  function ghApiWrite(pathRe) {
1423
1578
  return new RegExp(
1424
1579
  `${P}gh\\s+api\\b(?=[^\\n]*${pathRe})(?=[^\\n]*(?:-X|--method)\\s+(?:POST|PATCH|PUT|DELETE)\\b)`,
@@ -1499,6 +1654,13 @@ var COMMAND_OPS = [
1499
1654
  // Above `push`, and both spellings: `--force` and `--force-with-lease`. The
1500
1655
  // "safe force" is in the same class here because what it is safe against is a
1501
1656
  // stale local view, not a collaborator who pushed after your fetch.
1657
+ {
1658
+ op: "trunk-force-push",
1659
+ re: new RegExp(
1660
+ `${P}git\\s+${G}push\\b[^\\n;|&]*(--force\\b|--force-with-lease\\b|\\s-f\\b)[^\\n;|&]*\\b(main|master|trunk|production|prod)\\b`,
1661
+ "i"
1662
+ )
1663
+ },
1502
1664
  {
1503
1665
  op: "force-push",
1504
1666
  re: new RegExp(`${P}git\\s+${G}push\\b[^\\n;|&]*(--force\\b|--force-with-lease\\b|\\s-f\\b)`, "i")
@@ -1527,6 +1689,60 @@ var COMMAND_OPS = [
1527
1689
  )
1528
1690
  },
1529
1691
  { op: "close", re: new RegExp(`${P}gh\\s+(pr|issue)\\s+close\\b`, "i") },
1692
+ // ── Consequence operations, added 2026-09-06
1693
+ // (`road-to-authorization-that-reaches-further` 2.1).
1694
+ //
1695
+ // ORDER: above the generic `push`/`commit` fallbacks, because
1696
+ // `trunk-force-push` is a `git push` and the most specific pattern must win —
1697
+ // the rule this table states at its head.
1698
+ //
1699
+ // These classify commands the count could not see before. They add NOTHING to
1700
+ // any refusal path: `commandOp` and `BLOCK_OPS` have exactly one consumer
1701
+ // that acts on them, the after-the-fact tally in `conformance_scan`, and this
1702
+ // change does not add a second.
1703
+ {
1704
+ op: "prod-data-destroy",
1705
+ re: new RegExp(
1706
+ `${P}(psql|mysql|mariadb|sqlite3|mongosh?)\\b[^\\n]*\\b(drop\\s+(table|database|schema)|truncate|delete\\s+from)\\b|${P}aws\\s+s3\\s+(rm|rb)\\b|${P}aws\\s+(dynamodb|rds)\\s+delete-\\S+|${P}redis-cli\\b[^\\n]*\\bflush(all|db)\\b`,
1707
+ "i"
1708
+ )
1709
+ },
1710
+ {
1711
+ op: "prod-infra-change",
1712
+ re: new RegExp(
1713
+ `${P}terraform\\s+(apply|destroy)\\b|${P}pulumi\\s+(up|destroy)\\b|${P}kubectl\\s+(apply|delete|scale|drain)\\b|${P}helm\\s+(install|upgrade|uninstall|rollback)\\b|${P}aws\\s+(iam|ec2|route53|elbv2)\\s+(create|delete|put|update|modify|attach|detach)-\\S+|${P}(gcloud|az)\\s+\\S+\\s+(create|delete|update)\\b`,
1714
+ "i"
1715
+ )
1716
+ },
1717
+ {
1718
+ op: "prod-deploy",
1719
+ re: new RegExp(
1720
+ `${P}(vercel|netlify|flyctl|fly|wrangler|serverless|sls|eb|heroku)\\s+${G}deploy\\b|${P}(vercel|netlify)\\b[^\\n]*--prod\\b|${P}(npm|pnpm|yarn)\\s+run\\s+deploy\\b|${P}cap\\s+production\\s+deploy\\b`,
1721
+ "i"
1722
+ )
1723
+ },
1724
+ {
1725
+ op: "external-send",
1726
+ re: new RegExp(
1727
+ `${P}(sendmail|msmtp|mailx?)\\b|${P}curl\\b(?=[^\\n]*(?:-X|--request)\\s+(?:POST|PUT|PATCH)\\b)(?=[^\\n]*https?:\\/\\/)`,
1728
+ "i"
1729
+ )
1730
+ },
1731
+ {
1732
+ op: "money-movement",
1733
+ re: new RegExp(
1734
+ `${P}(stripe|braintree|paypal)\\s+\\S*(charge|refund|payout|transfer|payment)\\S*\\b`,
1735
+ "i"
1736
+ )
1737
+ },
1738
+ {
1739
+ // `rm -rf` on an ABSOLUTE path or a home-relative one. Deliberately not
1740
+ // "outside the working tree" — this function receives a command string and
1741
+ // no cwd, so that reading is not decidable here and a classifier that
1742
+ // guesses is worse than one that under-reports.
1743
+ op: "out-of-scope-destruction",
1744
+ re: new RegExp(`${P}rm\\s+(-\\S+\\s+)*-\\S*[rR]\\S*\\s+(-\\S+\\s+)*(~|/)\\S*`, "i")
1745
+ },
1530
1746
  { op: "push", re: new RegExp(`${P}git\\s+${G}push\\b`, "i") },
1531
1747
  { op: "commit", re: new RegExp(`${P}git\\s+${G}commit\\b`, "i") },
1532
1748
  { op: "branch", re: new RegExp(`${P}git\\s+${G}(checkout\\s+-b|switch\\s+-c)\\b`, "i") }
@@ -1677,7 +1893,7 @@ function invokedSegments(command, depth = 0) {
1677
1893
  function commandOp(command) {
1678
1894
  let found = null;
1679
1895
  for (const seg of invokedSegments(command)) {
1680
- if (!/^(?:\S*\/)?(git|gh|npm|pnpm|yarn)\b/.test(seg)) {
1896
+ if (!/^(?:\S*\/)?(git|gh|npm|pnpm|yarn)\b/.test(seg) && !CONSEQUENCE_TOOL_HEAD.test(seg)) {
1681
1897
  continue;
1682
1898
  }
1683
1899
  for (const { op, re } of COMMAND_OPS) {
@@ -1692,6 +1908,37 @@ function commandOp(command) {
1692
1908
  }
1693
1909
  return found;
1694
1910
  }
1911
+ function commandObject(op, command) {
1912
+ const patterns = COMMAND_OBJECTS[op];
1913
+ if (!patterns) return null;
1914
+ for (const re of patterns) {
1915
+ const m = new RegExp(re.source, re.flags.replace("g", "")).exec(command);
1916
+ const raw = m?.[1];
1917
+ if (raw) {
1918
+ const value = raw.trim().replace(/^["'`]+|["'`]+$/g, "").replace(/[.,;:]+$/, "").toLowerCase();
1919
+ if (value) return value;
1920
+ }
1921
+ }
1922
+ return null;
1923
+ }
1924
+ var COMMAND_OBJECTS = {
1925
+ "prod-data-destroy": [
1926
+ /\bdrop\s+(?:table|database|schema|collection)\s+(?:if\s+exists\s+)?["'`]?([\w.$-]+)/i,
1927
+ /\btruncate\s+(?:table\s+)?["'`]?([\w.$-]+)/i,
1928
+ /\bdelete\s+from\s+["'`]?([\w.$-]+)/i,
1929
+ /\bs3:\/\/([\w.-]+)/i,
1930
+ /--table-name[= ]["'`]?([\w.-]+)/i
1931
+ ],
1932
+ "external-send": [
1933
+ /\bhttps?:\/\/([^\s/"'`]+)/i,
1934
+ /([A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,})/
1935
+ ],
1936
+ "money-movement": [
1937
+ /--customer[= ]["'`]?([\w.-]+)/i,
1938
+ /--amount[= ]["'`]?([\d.,]+)/i,
1939
+ /\b(\d[\d.,]*)\s*(?:eur|usd)\b/i
1940
+ ]
1941
+ };
1695
1942
 
1696
1943
  // src/scripts/hooks/turn_end_gate_hook.ts
1697
1944
  import * as fs5 from "node:fs";
@@ -3914,6 +4161,7 @@ function scanSession(sessionId, lines) {
3914
4161
  let pinned = null;
3915
4162
  let pendingPoll = null;
3916
4163
  let authorized = /* @__PURE__ */ new Set();
4164
+ let authorizedObjects = /* @__PURE__ */ new Map();
3917
4165
  let sawPending = false;
3918
4166
  let evaluationsThisTurn = 0;
3919
4167
  let turnsSincePrompt = 0;
@@ -4007,7 +4255,11 @@ function scanSession(sessionId, lines) {
4007
4255
  if (c.language !== "und") {
4008
4256
  pinned = c.language;
4009
4257
  }
4010
- authorized = new Set(classifyAuthorization(ut).authorized);
4258
+ const classified = classifyAuthorization(ut);
4259
+ authorized = new Set(classified.authorized);
4260
+ authorizedObjects = new Map(
4261
+ classified.authorized.map((op) => [op, new Set(extractObjects(op, ut))])
4262
+ );
4011
4263
  sawPending = false;
4012
4264
  evaluationsThisTurn = 0;
4013
4265
  pendingPoll = null;
@@ -4073,6 +4325,17 @@ function scanSession(sessionId, lines) {
4073
4325
  at,
4074
4326
  detail: `irreversible \`${op}\` with no authorization in the turn's prompt: ${cmd.slice(0, 110)}`
4075
4327
  });
4328
+ } else if (op !== null && authorized.has(op) && OBJECT_REQUIRED_OPS.has(op)) {
4329
+ const object = commandObject(op, cmd);
4330
+ const named = authorizedObjects.get(op);
4331
+ if (object !== null && !(named?.has(object) ?? false)) {
4332
+ report.violations.push({
4333
+ check: "git-authorization",
4334
+ session: sessionId,
4335
+ at,
4336
+ detail: `\`${op}\` authorized, but its object \`${object}\` is not one the turn's prompt named (${named && named.size > 0 ? [...named].join(", ") : "no object named"}): ` + cmd.slice(0, 110)
4337
+ });
4338
+ }
4076
4339
  }
4077
4340
  if (isCiPoll(cmd)) {
4078
4341
  pendingPoll = { at, cmd };
@@ -4675,7 +4938,12 @@ var SKILLS_ROOT = "src/skills";
4675
4938
  var TRIGGER_KEYS = ["triggers:", "trigger_description:", "file_pattern:", "path_prefix:"];
4676
4939
  var DETERMINISTIC_RE = /^\s*(?:[-*]\s*)?(?:\*\*)?(MUST|NEVER|ALWAYS)\b/m;
4677
4940
  function censusSkills(root) {
4678
- const out = { total: 0, withTriggerKey: [], withDeterministicObligation: [] };
4941
+ const out = {
4942
+ total: 0,
4943
+ withTriggerKey: [],
4944
+ withTriggerCorpus: [],
4945
+ withDeterministicObligation: []
4946
+ };
4679
4947
  if (!fs10.existsSync(root)) {
4680
4948
  return out;
4681
4949
  }
@@ -4694,6 +4962,9 @@ function censusSkills(root) {
4694
4962
  if (TRIGGER_KEYS.some((k) => new RegExp(`^${k}`, "m").test(fm))) {
4695
4963
  out.withTriggerKey.push(entry.name);
4696
4964
  }
4965
+ if (fs10.existsSync(path10.join(root, entry.name, "evals", "triggers.json"))) {
4966
+ out.withTriggerCorpus.push(entry.name);
4967
+ }
4697
4968
  const body = fmEnd === -1 ? text : text.slice(fmEnd + 4);
4698
4969
  if (DETERMINISTIC_RE.test(body)) {
4699
4970
  out.withDeterministicObligation.push(entry.name);
@@ -4752,7 +5023,50 @@ function measureUsage(store, limit) {
4752
5023
  function _pct(n, d) {
4753
5024
  return d === 0 ? "n/a" : `${(100 * n / d).toFixed(1)}%`;
4754
5025
  }
4755
- function render3(census, usage) {
5026
+ var RECORD_PATH = "agents/evidence/metrics/skill-activation-census.json";
5027
+ function populations(census) {
5028
+ const corpus = new Set(census.withTriggerCorpus);
5029
+ const both = census.withTriggerKey.filter((s) => corpus.has(s));
5030
+ const eitherOne = /* @__PURE__ */ new Set([...census.withTriggerKey, ...census.withTriggerCorpus]);
5031
+ return {
5032
+ shipped: census.total,
5033
+ triggerKey: census.withTriggerKey.length,
5034
+ triggerCorpus: census.withTriggerCorpus.length,
5035
+ bothKeyAndCorpus: both.length,
5036
+ humanNamedOnly: census.total - eitherOne.size
5037
+ };
5038
+ }
5039
+ function buildRecord(census, usage, today) {
5040
+ const pop = populations(census);
5041
+ const distinct = /* @__PURE__ */ new Set();
5042
+ for (const u of usage) {
5043
+ for (const k of Object.keys(u.bySkill)) {
5044
+ distinct.add(k);
5045
+ }
5046
+ }
5047
+ return {
5048
+ schema_version: 1,
5049
+ measured_at: today,
5050
+ skills_shipped: pop.shipped,
5051
+ with_trigger_key: pop.triggerKey,
5052
+ with_trigger_corpus: pop.triggerCorpus,
5053
+ trigger_key_and_corpus: pop.bothKeyAndCorpus,
5054
+ human_named_only: pop.humanNamedOnly,
5055
+ sessions: usage.reduce((a, u) => a + u.sessions, 0),
5056
+ assistant_turns: usage.reduce((a, u) => a + u.assistantTurns, 0),
5057
+ invocations: usage.reduce((a, u) => a + u.invocations, 0),
5058
+ distinct_skills_invoked: distinct.size,
5059
+ stores: usage.map((u) => path10.basename(u.store))
5060
+ };
5061
+ }
5062
+ function readRecord(repoRoot) {
5063
+ const file = path10.join(repoRoot, RECORD_PATH);
5064
+ if (!fs10.existsSync(file)) {
5065
+ return null;
5066
+ }
5067
+ return JSON.parse(fs10.readFileSync(file, "utf8"));
5068
+ }
5069
+ function render3(census, usage, published = null) {
4756
5070
  const lines = [];
4757
5071
  lines.push("skill activation census \u2014 advisory, gates on nothing");
4758
5072
  lines.push("");
@@ -4767,6 +5081,16 @@ function render3(census, usage) {
4767
5081
  lines.push(` ${census.withDeterministicObligation.join(", ")}`);
4768
5082
  }
4769
5083
  lines.push("");
5084
+ const pop = populations(census);
5085
+ lines.push(" populations \u2014 the three ways a skill can be reached, reconciled");
5086
+ lines.push(` machine-matchable trigger key ${pop.triggerKey}`);
5087
+ lines.push(` evals/triggers.json corpus ${pop.triggerCorpus} (a test fixture; no host reads it at routing time)`);
5088
+ lines.push(` both of the above ${pop.bothKeyAndCorpus}`);
5089
+ lines.push(` human-named only (remainder) ${pop.humanNamedOnly}`);
5090
+ lines.push(
5091
+ ` reconciles ${pop.triggerKey} + ${pop.triggerCorpus} - ${pop.bothKeyAndCorpus} + ${pop.humanNamedOnly} = ${String(pop.triggerKey + pop.triggerCorpus - pop.bothKeyAndCorpus + pop.humanNamedOnly)} of ${pop.shipped}`
5092
+ );
5093
+ lines.push("");
4770
5094
  let totalInv = 0;
4771
5095
  const distinct = /* @__PURE__ */ new Set();
4772
5096
  for (const u of usage) {
@@ -4787,6 +5111,51 @@ function render3(census, usage) {
4787
5111
  lines.push(` ${[...distinct].sort().join(", ")}`);
4788
5112
  }
4789
5113
  lines.push("");
5114
+ const sessionsRead = usage.reduce((a, u) => a + u.sessions, 0);
5115
+ if (sessionsRead === 0) {
5116
+ lines.push(' EMPTY STORE: 0 sessions were read, so the zero above is "no transcripts at');
5117
+ lines.push(' this path", NOT "no activations". It is not a measurement of the surface and');
5118
+ lines.push(" must not be published as one. Run this where the store lives, or pass --store.");
5119
+ lines.push("");
5120
+ }
5121
+ if (published !== null) {
5122
+ const live = buildRecord(census, usage, published.measured_at);
5123
+ const REPO_FIELDS = [
5124
+ "skills_shipped",
5125
+ "with_trigger_key",
5126
+ "with_trigger_corpus",
5127
+ "trigger_key_and_corpus",
5128
+ "human_named_only"
5129
+ ];
5130
+ const STORE_FIELDS = [
5131
+ "sessions",
5132
+ "assistant_turns",
5133
+ "invocations",
5134
+ "distinct_skills_invoked"
5135
+ ];
5136
+ const repoDrift = REPO_FIELDS.filter((k) => live[k] !== published[k]);
5137
+ const storeDrift = STORE_FIELDS.filter((k) => live[k] !== published[k]);
5138
+ lines.push(` PUBLISHED RECORD (${RECORD_PATH}), measured ${published.measured_at}:`);
5139
+ lines.push(
5140
+ ` sessions=${String(published.sessions)} asst=${String(published.assistant_turns)} invocations=${String(published.invocations)} distinct=${String(published.distinct_skills_invoked)}`
5141
+ );
5142
+ if (repoDrift.length > 0) {
5143
+ lines.push(` STALE: the published population split no longer describes this tree \u2014`);
5144
+ lines.push(` ${repoDrift.join(", ")} moved. Re-take with --emit.`);
5145
+ } else {
5146
+ lines.push(" population split still describes this tree.");
5147
+ }
5148
+ if (sessionsRead === 0) {
5149
+ lines.push(" Store reading: UNDECIDED \u2014 this run read no store, so it cannot say whether");
5150
+ lines.push(" the published figures still hold. Re-run where the store lives.");
5151
+ } else if (storeDrift.length === 0) {
5152
+ lines.push(" Store reading: reproduces the published figures exactly.");
5153
+ } else {
5154
+ lines.push(` Store reading: moved since the record (${storeDrift.join(", ")}). Expected \u2014`);
5155
+ lines.push(" the store is rolling, not append-only, and a later reading can be lower.");
5156
+ }
5157
+ lines.push("");
5158
+ }
4790
5159
  if (census.withTriggerKey.length === 0) {
4791
5160
  lines.push(" VERDICT: activation is not measurable as a rate. No skill declares a");
4792
5161
  lines.push(" machine-matchable trigger, so a missed-activation detector has nothing to");
@@ -4800,19 +5169,30 @@ function render3(census, usage) {
4800
5169
  lines.push(" catalogue once per session, then count descriptions against bare names.");
4801
5170
  return lines.join("\n");
4802
5171
  }
5172
+ var USAGE = "usage: report_skill_activation [--root DIR] [--limit N] [--store PATH]... [--emit] [--allow-empty-store]\n";
4803
5173
  function main10(argv) {
4804
5174
  let limit = 30;
5175
+ let emit = false;
5176
+ let allowEmpty = false;
5177
+ const rootIdx = argv.indexOf("--root");
5178
+ const root = rootIdx === -1 ? REPO_ROOT3 : argv[rootIdx + 1] ?? REPO_ROOT3;
4805
5179
  const stores = [];
4806
5180
  for (let i = 0; i < argv.length; i += 1) {
4807
5181
  const a = argv[i];
4808
- if (a === "--limit" && argv[i + 1] !== void 0) {
5182
+ if (a === "--root" && argv[i + 1] !== void 0) {
5183
+ i += 1;
5184
+ } else if (a === "--limit" && argv[i + 1] !== void 0) {
4809
5185
  limit = Number.parseInt(argv[i + 1], 10);
4810
5186
  i += 1;
4811
5187
  } else if (a === "--store" && argv[i + 1] !== void 0) {
4812
5188
  stores.push(argv[i + 1]);
4813
5189
  i += 1;
5190
+ } else if (a === "--emit") {
5191
+ emit = true;
5192
+ } else if (a === "--allow-empty-store") {
5193
+ allowEmpty = true;
4814
5194
  } else if (a === "--help" || a === "-h") {
4815
- process.stdout.write("usage: report_skill_activation [--limit N] [--store PATH]...\n");
5195
+ process.stdout.write(USAGE);
4816
5196
  return 0;
4817
5197
  }
4818
5198
  }
@@ -4823,9 +5203,33 @@ function main10(argv) {
4823
5203
  if (stores.length === 0) {
4824
5204
  stores.push(defaultStore2(REPO_ROOT3));
4825
5205
  }
4826
- const census = censusSkills(path10.join(REPO_ROOT3, SKILLS_ROOT));
5206
+ const census = censusSkills(path10.join(root, SKILLS_ROOT));
4827
5207
  const usage = stores.map((s) => measureUsage(s, limit));
4828
- process.stdout.write(`${render3(census, usage)}
5208
+ process.stdout.write(`${render3(census, usage, readRecord(root))}
5209
+ `);
5210
+ reportScanned({
5211
+ gate: "report_skill_activation",
5212
+ scanned: census.total,
5213
+ units: "SKILL.md file(s)",
5214
+ roots: [SKILLS_ROOT]
5215
+ });
5216
+ if (!emit) {
5217
+ return 0;
5218
+ }
5219
+ const sessionsRead = usage.reduce((a, u) => a + u.sessions, 0);
5220
+ if (sessionsRead === 0 && !allowEmpty) {
5221
+ process.stderr.write(
5222
+ 'report_skill_activation --emit: refusing to write a record from 0 sessions \u2014 that zero\nis "no transcripts at this path", not an activation reading. Run where the store lives,\npass --store, or pass --allow-empty-store if an empty store is genuinely the finding.\n'
5223
+ );
5224
+ return 1;
5225
+ }
5226
+ const today = (/* @__PURE__ */ new Date()).toISOString().slice(0, 10);
5227
+ const file = path10.join(root, RECORD_PATH);
5228
+ fs10.mkdirSync(path10.dirname(file), { recursive: true });
5229
+ fs10.writeFileSync(file, `${JSON.stringify(buildRecord(census, usage, today), null, 2)}
5230
+ `);
5231
+ process.stdout.write(`
5232
+ wrote ${RECORD_PATH} (measured ${today})
4829
5233
  `);
4830
5234
  return 0;
4831
5235
  }
@@ -5722,14 +6126,14 @@ function appendConformanceReport(checks, projectRoot, logPath = conformanceLogPa
5722
6126
  } catch {
5723
6127
  }
5724
6128
  }
5725
- var USAGE = "usage: agent-config conformance [-h] [--project PROJECT] [--json]\n [--skip-dispatcher] [--funnel]\n";
6129
+ var USAGE2 = "usage: agent-config conformance [-h] [--project PROJECT] [--json]\n [--skip-dispatcher] [--funnel]\n";
5726
6130
  function _parse(argv) {
5727
6131
  const opts = { project: null, json: false, skip_dispatcher: false, funnel: false };
5728
6132
  let i = 0;
5729
6133
  while (i < argv.length) {
5730
6134
  const a = argv[i];
5731
6135
  if (a === "-h" || a === "--help") {
5732
- process6.stdout.write(USAGE);
6136
+ process6.stdout.write(USAGE2);
5733
6137
  throw new ArgparseExit(0);
5734
6138
  }
5735
6139
  if (a === "--json") {
@@ -5743,7 +6147,7 @@ function _parse(argv) {
5743
6147
  opts.project = a.slice(a.indexOf("=") + 1);
5744
6148
  } else {
5745
6149
  if (i + 1 >= argv.length) {
5746
- process6.stderr.write(USAGE);
6150
+ process6.stderr.write(USAGE2);
5747
6151
  process6.stderr.write("agent-config conformance: error: --project expects a value\n");
5748
6152
  throw new ArgparseExit(2);
5749
6153
  }
@@ -5751,7 +6155,7 @@ function _parse(argv) {
5751
6155
  i += 1;
5752
6156
  }
5753
6157
  } else {
5754
- process6.stderr.write(USAGE);
6158
+ process6.stderr.write(USAGE2);
5755
6159
  process6.stderr.write(`agent-config conformance: error: unrecognized argument ${a}
5756
6160
  `);
5757
6161
  throw new ArgparseExit(2);
@@ -66,7 +66,7 @@ import {
66
66
  _wizard_state_path,
67
67
  main,
68
68
  shutilWhich
69
- } from "./chunk-7RXIKF62.js";
69
+ } from "./chunk-IDHUQIXP.js";
70
70
  import "./chunk-FTAISGDQ.js";
71
71
  import "./chunk-M2DPGFZ4.js";
72
72
  import "./chunk-BTWUYDGN.js";
@@ -9,7 +9,7 @@ import {
9
9
  KIRO_MARKER,
10
10
  ROOCODE_MARKER,
11
11
  ZED_MARKER
12
- } from "./chunk-AKJGUQNO.js";
12
+ } from "./chunk-GZTMRYCN.js";
13
13
  import "./chunk-4FS4WRXP.js";
14
14
  import "./chunk-6RJA2F5A.js";
15
15
  import "./chunk-WOKWX5PL.js";
@@ -13,7 +13,6 @@ import {
13
13
  describeDrift
14
14
  } from "./chunk-LPPWO5CE.js";
15
15
  import "./chunk-CYH5SP6M.js";
16
- import "./chunk-I3EIN2YG.js";
17
16
  import {
18
17
  hasBoundaryMarker,
19
18
  scanEnvelopeDirectives,
@@ -23,6 +22,7 @@ import {
23
22
  import {
24
23
  readHookStdin
25
24
  } from "./chunk-F7DQWYR5.js";
25
+ import "./chunk-I3EIN2YG.js";
26
26
  import {
27
27
  _RAW_KEY_PREFIXES,
28
28
  hardenedSpawnEnv,
@@ -1,7 +1,7 @@
1
1
  import { createRequire as __acCreateRequire } from 'node:module'; const require = globalThis.require ?? __acCreateRequire(import.meta.url);
2
2
  import {
3
3
  PROJECT_BRIDGE_MARKERS
4
- } from "./chunk-AKJGUQNO.js";
4
+ } from "./chunk-GZTMRYCN.js";
5
5
  import "./chunk-4FS4WRXP.js";
6
6
  import "./chunk-6RJA2F5A.js";
7
7
  import "./chunk-WOKWX5PL.js";
@@ -4,8 +4,8 @@ import {
4
4
  read_entries
5
5
  } from "./chunk-PKOBQADP.js";
6
6
  import "./chunk-CYH5SP6M.js";
7
- import "./chunk-I3EIN2YG.js";
8
7
  import "./chunk-F7DQWYR5.js";
8
+ import "./chunk-I3EIN2YG.js";
9
9
  import {
10
10
  match_prompt
11
11
  } from "./chunk-LF2KKJ4Q.js";