@fusengine/harness 0.1.89 → 0.1.91

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 (419) hide show
  1. package/dist/adapters/claude/index.d.mts +1 -1
  2. package/dist/adapters/claude/index.mjs +1 -1
  3. package/dist/adapters/cline/index.mjs +1 -1
  4. package/dist/adapters/codex/index.d.mts +2 -2
  5. package/dist/adapters/codex/index.mjs +5 -4
  6. package/dist/adapters/cursor/index.d.mts +15 -28
  7. package/dist/adapters/cursor/index.mjs +35 -46
  8. package/dist/adapters/gemini/index.mjs +1 -1
  9. package/dist/adapters/hermes/index.d.mts +1 -1
  10. package/dist/adapters/hermes/index.mjs +1 -1
  11. package/dist/adapters/kimi/index.d.mts +1 -1
  12. package/dist/adapters/kimi/index.mjs +1 -1
  13. package/dist/{claude-5bC8TDAz.mjs → claude-Ckv2_TgP.mjs} +3 -43
  14. package/dist/cli/bin.mjs +429 -16
  15. package/dist/cli/index.mjs +1 -1
  16. package/dist/command-string-CALMTnwN.mjs +42 -0
  17. package/dist/{evaluate-C1VSI5pb.mjs → evaluate-CMiIqHeH.mjs} +261 -13
  18. package/dist/{handle-DHhukRdh.mjs → handle-C43gA-Pr.mjs} +737 -150
  19. package/dist/{hermes-kP6NUQlG.mjs → hermes-B9-p_3IF.mjs} +3 -2
  20. package/dist/{index-DBgnIZn9.d.mts → index-B8PG82su.d.mts} +1 -1
  21. package/dist/{index-D4C2-IIc.d.mts → index-SmKYkk2N.d.mts} +1 -1
  22. package/dist/index.d.mts +2 -2
  23. package/dist/index.mjs +2 -2
  24. package/dist/init/index.d.mts +1 -1
  25. package/dist/init/index.mjs +1 -1
  26. package/dist/{kimi-D6X7b8wF.mjs → kimi-G2wcSh5-.mjs} +3 -2
  27. package/dist/normalize-BjG6unTj.mjs +317 -0
  28. package/dist/permission-mode-B-SFyR0X.mjs +226 -0
  29. package/dist/policy/index.d.mts +1 -1
  30. package/dist/policy/index.mjs +2 -2
  31. package/dist/prompt/index.d.mts +1 -1
  32. package/dist/{run-CdIlUtjv.mjs → run-DkrzC0gb.mjs} +1 -1
  33. package/dist/{run-TAXNRSpD.mjs → run-GHAMqcOn.mjs} +26 -3
  34. package/dist/runtime/index.d.mts +27 -16
  35. package/dist/runtime/index.mjs +2 -2
  36. package/dist/{types-C0-igRKr.d.mts → types-Bh0jEF3_.d.mts} +2 -0
  37. package/dist/{validate-DZFtAbLP.mjs → validate-KjZ1X9tH.mjs} +1 -1
  38. package/package.json +3 -2
  39. package/src/adapters/claude/index.ts +92 -0
  40. package/src/adapters/cline/index.ts +36 -0
  41. package/src/adapters/codex/apply-patch.ts +94 -0
  42. package/src/adapters/codex/index.ts +84 -0
  43. package/src/adapters/codex/permission-mode.ts +16 -0
  44. package/src/adapters/cursor/context.ts +46 -0
  45. package/src/adapters/cursor/events.ts +38 -0
  46. package/src/adapters/cursor/index.ts +43 -0
  47. package/src/adapters/cursor/interfaces/types.ts +88 -0
  48. package/src/adapters/cursor/native-response.ts +158 -0
  49. package/src/adapters/cursor/normalize.ts +123 -0
  50. package/src/adapters/cursor/respond.ts +123 -0
  51. package/src/adapters/gemini/index.ts +36 -0
  52. package/src/adapters/hermes/index.ts +55 -0
  53. package/src/adapters/hermes/interfaces/types.ts +26 -0
  54. package/src/adapters/kimi/index.ts +96 -0
  55. package/src/adapters/kimi/interfaces/types.ts +55 -0
  56. package/src/cache/compact.ts +55 -0
  57. package/src/cache/index.ts +5 -0
  58. package/src/cache/io.ts +38 -0
  59. package/src/cache/mcp-response.ts +39 -0
  60. package/src/cache/mcp-store.ts +70 -0
  61. package/src/cache/store.ts +93 -0
  62. package/src/changelog/fetch.ts +79 -0
  63. package/src/cli/bin.ts +100 -0
  64. package/src/cli/cursor-event-scanner.ts +175 -0
  65. package/src/cli/cursor-stdin-reader.ts +65 -0
  66. package/src/cli/doctor.ts +96 -0
  67. package/src/cli/hook-io.ts +130 -0
  68. package/src/cli/hook-sound.ts +49 -0
  69. package/src/cli/index.ts +1 -0
  70. package/src/cli/json-primitive-scanner.ts +83 -0
  71. package/src/cli/run.ts +36 -0
  72. package/src/cli/scope.ts +31 -0
  73. package/src/codex-rules/build.ts +63 -0
  74. package/src/codex-rules/index.ts +8 -0
  75. package/src/codex-rules/mapping.ts +42 -0
  76. package/src/codex-rules/rules/absolute-paths.ts +52 -0
  77. package/src/codex-rules/rules/ask.ts +44 -0
  78. package/src/codex-rules/rules/chmod-ask.ts +57 -0
  79. package/src/codex-rules/rules/dd.ts +23 -0
  80. package/src/codex-rules/rules/diskutil.ts +33 -0
  81. package/src/codex-rules/rules/mkfs.ts +42 -0
  82. package/src/codex-rules/rules/privilege.ts +49 -0
  83. package/src/codex-rules/rules/remote-fetch.ts +31 -0
  84. package/src/codex-rules/rules/rm-variants.ts +58 -0
  85. package/src/codex-rules/rules/single-commands.ts +57 -0
  86. package/src/codex-rules/skip-list.ts +25 -0
  87. package/src/codex-rules/starlark.ts +46 -0
  88. package/src/codex-rules/types.ts +36 -0
  89. package/src/config/dotenv.ts +55 -0
  90. package/src/config/env.ts +10 -0
  91. package/src/config/home-dir.ts +36 -0
  92. package/src/config/index.ts +5 -0
  93. package/src/config/layout.ts +52 -0
  94. package/src/config/limits.ts +56 -0
  95. package/src/config/ttl.ts +30 -0
  96. package/src/detect/harness.ts +73 -0
  97. package/src/detect/index.ts +1 -0
  98. package/src/detect/interfaces/types.ts +18 -0
  99. package/src/freshness/agent-evidence-record.ts +95 -0
  100. package/src/freshness/agent-evidence.ts +95 -0
  101. package/src/freshness/codex-spawn-evidence.ts +91 -0
  102. package/src/freshness/doc-helpers.ts +90 -0
  103. package/src/freshness/evidence-harvest-io.ts +72 -0
  104. package/src/freshness/evidence-harvest.ts +61 -0
  105. package/src/freshness/explore-tools.ts +95 -0
  106. package/src/freshness/index.ts +2 -0
  107. package/src/freshness/query-framework.ts +73 -0
  108. package/src/freshness/ref-evidence.ts +49 -0
  109. package/src/freshness/ref-journal.ts +98 -0
  110. package/src/freshness/trivial-edit-counter.ts +30 -0
  111. package/src/index.ts +11 -0
  112. package/src/init/index.ts +2 -0
  113. package/src/init/run.ts +32 -0
  114. package/src/init/templates.ts +75 -0
  115. package/src/memory/gitignore.ts +14 -0
  116. package/src/memory/index.ts +3 -0
  117. package/src/memory/registry.ts +39 -0
  118. package/src/memory/session-roots.ts +99 -0
  119. package/src/memory/state.ts +58 -0
  120. package/src/policy/apex-authorization.ts +100 -0
  121. package/src/policy/apex-gates.ts +91 -0
  122. package/src/policy/apex-target-steps.ts +73 -0
  123. package/src/policy/apex-target.ts +49 -0
  124. package/src/policy/apex-task-context.ts +81 -0
  125. package/src/policy/apex.ts +94 -0
  126. package/src/policy/cartographer/build-tree.ts +69 -0
  127. package/src/policy/cartographer/describe.ts +53 -0
  128. package/src/policy/cartographer/entry.ts +38 -0
  129. package/src/policy/cartographer/frontmatter.ts +48 -0
  130. package/src/policy/cartographer/indicators.ts +34 -0
  131. package/src/policy/claude-md-context.ts +66 -0
  132. package/src/policy/conventions/index.ts +11 -0
  133. package/src/policy/conventions/interfaces.ts +71 -0
  134. package/src/policy/conventions/langs.ts +53 -0
  135. package/src/policy/conventions/query.ts +49 -0
  136. package/src/policy/conventions/react-hooks.ts +18 -0
  137. package/src/policy/conventions/store-or-query.ts +21 -0
  138. package/src/policy/conventions/stores.ts +56 -0
  139. package/src/policy/conventions/strip.ts +87 -0
  140. package/src/policy/conventions/verdict.ts +38 -0
  141. package/src/policy/creation-intent.ts +11 -0
  142. package/src/policy/deny-loop.ts +88 -0
  143. package/src/policy/design/allowed-write.ts +28 -0
  144. package/src/policy/design/content-checks.ts +45 -0
  145. package/src/policy/design/corpus-fs.ts +21 -0
  146. package/src/policy/design/corpus-resolve-cache.ts +49 -0
  147. package/src/policy/design/corpus-resolve.ts +99 -0
  148. package/src/policy/design/corpus.ts +92 -0
  149. package/src/policy/design/design-system-rules.ts +45 -0
  150. package/src/policy/design/flag.ts +30 -0
  151. package/src/policy/design/gates-pipeline.ts +105 -0
  152. package/src/policy/design/gates.ts +87 -0
  153. package/src/policy/design/screenshot-tools.ts +24 -0
  154. package/src/policy/design/skill-evidence.ts +34 -0
  155. package/src/policy/design/skill-gate.ts +81 -0
  156. package/src/policy/design/skill-triggers.ts +51 -0
  157. package/src/policy/design/state.ts +92 -0
  158. package/src/policy/design/template-urls.ts +54 -0
  159. package/src/policy/design/transitions.ts +68 -0
  160. package/src/policy/detect-claude-md-project-type.ts +32 -0
  161. package/src/policy/detect-framework.ts +99 -0
  162. package/src/policy/detect-primitive-checks.ts +100 -0
  163. package/src/policy/detect-primitive-lib.ts +55 -0
  164. package/src/policy/detect-project.ts +99 -0
  165. package/src/policy/edit-outcome.ts +53 -0
  166. package/src/policy/evaluate.ts +81 -0
  167. package/src/policy/expert-agents.ts +60 -0
  168. package/src/policy/file-size-scope.ts +32 -0
  169. package/src/policy/file-size.ts +99 -0
  170. package/src/policy/framework-solid-exclude.ts +52 -0
  171. package/src/policy/framework-solid-extended.ts +93 -0
  172. package/src/policy/framework-solid-gates-systems.ts +99 -0
  173. package/src/policy/framework-solid-gates.ts +98 -0
  174. package/src/policy/framework-solid.ts +88 -0
  175. package/src/policy/gemini-mcp-gate.ts +83 -0
  176. package/src/policy/git-gates.ts +40 -0
  177. package/src/policy/guards/bash-command-anchor.ts +40 -0
  178. package/src/policy/guards/bash-write-patterns.ts +140 -0
  179. package/src/policy/guards/bash-write-redirects.ts +201 -0
  180. package/src/policy/guards/bash-write-safe-paths.ts +62 -0
  181. package/src/policy/guards/bash-write.ts +76 -0
  182. package/src/policy/guards/context.ts +12 -0
  183. package/src/policy/guards/index.ts +61 -0
  184. package/src/policy/guards/install.ts +22 -0
  185. package/src/policy/guards/interface-separation-ext.ts +41 -0
  186. package/src/policy/guards/interface-separation.ts +100 -0
  187. package/src/policy/guards/protected-path.ts +100 -0
  188. package/src/policy/guards/security.ts +97 -0
  189. package/src/policy/index.ts +19 -0
  190. package/src/policy/interfaces/types.ts +46 -0
  191. package/src/policy/js-gate-route.ts +51 -0
  192. package/src/policy/lessons/lesson-gate.ts +0 -0
  193. package/src/policy/lessons/trigger-index.ts +84 -0
  194. package/src/policy/lessons/types.ts +31 -0
  195. package/src/policy/module-layout.ts +31 -0
  196. package/src/policy/nearest-manifest.ts +75 -0
  197. package/src/policy/never-approval.ts +95 -0
  198. package/src/policy/patterns.ts +80 -0
  199. package/src/policy/seo/validate.ts +51 -0
  200. package/src/policy/shadcn-project.ts +22 -0
  201. package/src/policy/shadcn-skill-gate.ts +97 -0
  202. package/src/policy/shell-read-refs.ts +96 -0
  203. package/src/policy/skill-path.ts +46 -0
  204. package/src/policy/skill-patterns/laravel.ts +40 -0
  205. package/src/policy/skill-patterns/nextjs.ts +29 -0
  206. package/src/policy/skill-patterns/react.ts +27 -0
  207. package/src/policy/skill-patterns/shadcn-subskills.ts +33 -0
  208. package/src/policy/skill-patterns/shadcn.ts +66 -0
  209. package/src/policy/skill-patterns/swift.ts +30 -0
  210. package/src/policy/skill-patterns/tailwind.ts +40 -0
  211. package/src/policy/skill-source.ts +52 -0
  212. package/src/policy/skill-trigger-patterns.ts +33 -0
  213. package/src/policy/skill-triggers.ts +108 -0
  214. package/src/policy/tailwind-skill-gate.ts +63 -0
  215. package/src/policy/trivial-edits.ts +52 -0
  216. package/src/policy/verbosity.ts +39 -0
  217. package/src/prompt/index.ts +1 -0
  218. package/src/prompt/types.ts +36 -0
  219. package/src/refs/discover.ts +69 -0
  220. package/src/refs/frontmatter.ts +24 -0
  221. package/src/refs/index.ts +4 -0
  222. package/src/refs/loader.ts +59 -0
  223. package/src/refs/ref-key.ts +41 -0
  224. package/src/refs/router.ts +63 -0
  225. package/src/refs/types.ts +25 -0
  226. package/src/runtime/activity.ts +99 -0
  227. package/src/runtime/apply-patch-gate.ts +41 -0
  228. package/src/runtime/burst-window.ts +21 -0
  229. package/src/runtime/codex-shell-tool.ts +37 -0
  230. package/src/runtime/command-string.ts +37 -0
  231. package/src/runtime/confirm/codex-confirm.ts +126 -0
  232. package/src/runtime/confirm/codex-prompt-origin.ts +16 -0
  233. package/src/runtime/confirm/confirm-code.ts +33 -0
  234. package/src/runtime/confirm/confirm-gate.ts +65 -0
  235. package/src/runtime/confirm/confirm-irreversible.ts +32 -0
  236. package/src/runtime/confirm/confirm-pending.ts +34 -0
  237. package/src/runtime/confirm/confirm-state.ts +56 -0
  238. package/src/runtime/confirm/confirm-subagent.ts +112 -0
  239. package/src/runtime/confirm/confirm-submit.ts +38 -0
  240. package/src/runtime/core-guards-active.ts +84 -0
  241. package/src/runtime/core-guards-wired.ts +47 -0
  242. package/src/runtime/deny-loop-store.ts +94 -0
  243. package/src/runtime/deny-notice.ts +52 -0
  244. package/src/runtime/design-cache-resolve.ts +51 -0
  245. package/src/runtime/design-content-gate.ts +95 -0
  246. package/src/runtime/design-files-gate.ts +114 -0
  247. package/src/runtime/design-helpers.ts +93 -0
  248. package/src/runtime/design-lifecycle.ts +39 -0
  249. package/src/runtime/design-read-credit.ts +28 -0
  250. package/src/runtime/design.ts +116 -0
  251. package/src/runtime/dev-context.ts +43 -0
  252. package/src/runtime/dry-patterns.ts +32 -0
  253. package/src/runtime/dry.ts +96 -0
  254. package/src/runtime/fragment-registry.ts +33 -0
  255. package/src/runtime/framework-skill-gate.ts +79 -0
  256. package/src/runtime/fs-cleanup.ts +71 -0
  257. package/src/runtime/gate-apex.ts +81 -0
  258. package/src/runtime/gate-helpers.ts +52 -0
  259. package/src/runtime/gate-input.ts +26 -0
  260. package/src/runtime/gate.ts +128 -0
  261. package/src/runtime/handle-post.ts +104 -0
  262. package/src/runtime/handle-pre.ts +137 -0
  263. package/src/runtime/handle-scope-async.ts +29 -0
  264. package/src/runtime/handle-types.ts +27 -0
  265. package/src/runtime/handle.ts +116 -0
  266. package/src/runtime/home-state.ts +55 -0
  267. package/src/runtime/index.ts +18 -0
  268. package/src/runtime/inform.ts +28 -0
  269. package/src/runtime/inject-budget-recap.ts +47 -0
  270. package/src/runtime/inject-budget.ts +81 -0
  271. package/src/runtime/inject-context.ts +85 -0
  272. package/src/runtime/inject-dedup-exclusive.ts +98 -0
  273. package/src/runtime/inject-dedup.ts +89 -0
  274. package/src/runtime/is-agent-tool.ts +19 -0
  275. package/src/runtime/lifecycle/agent-files.ts +49 -0
  276. package/src/runtime/lifecycle/agent-memory.ts +82 -0
  277. package/src/runtime/lifecycle/agent-transcript.ts +80 -0
  278. package/src/runtime/lifecycle/aipilot/analytics.ts +99 -0
  279. package/src/runtime/lifecycle/aipilot/apex-task-store.ts +61 -0
  280. package/src/runtime/lifecycle/aipilot/cache-base.ts +48 -0
  281. package/src/runtime/lifecycle/aipilot/cache-doc.ts +100 -0
  282. package/src/runtime/lifecycle/aipilot/cache-lessons.ts +58 -0
  283. package/src/runtime/lifecycle/aipilot/cache-test.ts +70 -0
  284. package/src/runtime/lifecycle/aipilot/curate-lessons.ts +64 -0
  285. package/src/runtime/lifecycle/aipilot/dispatch-aipilot.ts +100 -0
  286. package/src/runtime/lifecycle/aipilot/doc-cache-gate.ts +69 -0
  287. package/src/runtime/lifecycle/aipilot/inject-apex.ts +98 -0
  288. package/src/runtime/lifecycle/aipilot/inject-doc.ts +62 -0
  289. package/src/runtime/lifecycle/aipilot/inject-explore.ts +64 -0
  290. package/src/runtime/lifecycle/aipilot/inject-lessons.ts +61 -0
  291. package/src/runtime/lifecycle/aipilot/inject-test.ts +48 -0
  292. package/src/runtime/lifecycle/aipilot/lesson-archive.ts +60 -0
  293. package/src/runtime/lifecycle/aipilot/lesson-inject.ts +98 -0
  294. package/src/runtime/lifecycle/aipilot/lesson-parse.ts +74 -0
  295. package/src/runtime/lifecycle/aipilot/lessons.ts +72 -0
  296. package/src/runtime/lifecycle/aipilot/promote-global-lessons.ts +92 -0
  297. package/src/runtime/lifecycle/aipilot/solid-compliance.ts +69 -0
  298. package/src/runtime/lifecycle/aipilot/solid-notice.ts +47 -0
  299. package/src/runtime/lifecycle/aipilot/solid-transcript.ts +60 -0
  300. package/src/runtime/lifecycle/aipilot/source-scan.ts +56 -0
  301. package/src/runtime/lifecycle/aipilot/sync-task.ts +75 -0
  302. package/src/runtime/lifecycle/aipilot/transcript.ts +88 -0
  303. package/src/runtime/lifecycle/aipilot/types.ts +72 -0
  304. package/src/runtime/lifecycle/auto-document-reads.ts +73 -0
  305. package/src/runtime/lifecycle/cartographer/detect.ts +57 -0
  306. package/src/runtime/lifecycle/cartographer/ecosystem-map.ts +56 -0
  307. package/src/runtime/lifecycle/cartographer/fs-util.ts +64 -0
  308. package/src/runtime/lifecycle/cartographer/merge.ts +51 -0
  309. package/src/runtime/lifecycle/cartographer/project-map.ts +49 -0
  310. package/src/runtime/lifecycle/cartographer/scan-hooks.ts +48 -0
  311. package/src/runtime/lifecycle/cartographer/scan.ts +81 -0
  312. package/src/runtime/lifecycle/cartographer/session-start.ts +33 -0
  313. package/src/runtime/lifecycle/cartographer/track-enrichment.ts +45 -0
  314. package/src/runtime/lifecycle/cartographer/write-plugin-map.ts +43 -0
  315. package/src/runtime/lifecycle/cartographer/write-tree.ts +44 -0
  316. package/src/runtime/lifecycle/changelog-research.ts +43 -0
  317. package/src/runtime/lifecycle/check-file-size.ts +61 -0
  318. package/src/runtime/lifecycle/codex-resync/fingerprint.ts +63 -0
  319. package/src/runtime/lifecycle/codex-resync/lock.ts +46 -0
  320. package/src/runtime/lifecycle/codex-resync/managed-destination.ts +39 -0
  321. package/src/runtime/lifecycle/codex-resync/materialize-agents.ts +57 -0
  322. package/src/runtime/lifecycle/codex-resync/plugin-files.ts +65 -0
  323. package/src/runtime/lifecycle/codex-resync/plugin-roots.ts +62 -0
  324. package/src/runtime/lifecycle/codex-resync/resync.ts +45 -0
  325. package/src/runtime/lifecycle/codex-resync/symlink-commands.ts +25 -0
  326. package/src/runtime/lifecycle/dispatch.ts +109 -0
  327. package/src/runtime/lifecycle/failure-lesson.ts +51 -0
  328. package/src/runtime/lifecycle/index.ts +34 -0
  329. package/src/runtime/lifecycle/inject-rules.ts +50 -0
  330. package/src/runtime/lifecycle/instructions-loaded.ts +22 -0
  331. package/src/runtime/lifecycle/kimi-rules-native.ts +44 -0
  332. package/src/runtime/lifecycle/lessons/dispatch.ts +88 -0
  333. package/src/runtime/lifecycle/lessons/reminder.ts +89 -0
  334. package/src/runtime/lifecycle/lessons/state.ts +23 -0
  335. package/src/runtime/lifecycle/memory/agent-lesson.ts +35 -0
  336. package/src/runtime/lifecycle/memory/capture-error.ts +41 -0
  337. package/src/runtime/lifecycle/memory/client.ts +65 -0
  338. package/src/runtime/lifecycle/memory/dispatch.ts +42 -0
  339. package/src/runtime/lifecycle/memory/recall.ts +30 -0
  340. package/src/runtime/lifecycle/memory/salience.ts +31 -0
  341. package/src/runtime/lifecycle/memory/state.ts +49 -0
  342. package/src/runtime/lifecycle/memory/track-ops.ts +15 -0
  343. package/src/runtime/lifecycle/post-compact.ts +38 -0
  344. package/src/runtime/lifecycle/post-edit-ts.ts +49 -0
  345. package/src/runtime/lifecycle/post-tracking.ts +40 -0
  346. package/src/runtime/lifecycle/pre-compact.ts +38 -0
  347. package/src/runtime/lifecycle/rules-root.ts +83 -0
  348. package/src/runtime/lifecycle/security/check-skill.ts +63 -0
  349. package/src/runtime/lifecycle/security/scan-patterns.ts +53 -0
  350. package/src/runtime/lifecycle/security/scan.ts +76 -0
  351. package/src/runtime/lifecycle/security/skill-state.ts +47 -0
  352. package/src/runtime/lifecycle/security/track-mcp.ts +29 -0
  353. package/src/runtime/lifecycle/security/track-skill-read.ts +31 -0
  354. package/src/runtime/lifecycle/seo/post-tool-use.ts +45 -0
  355. package/src/runtime/lifecycle/session-end.ts +17 -0
  356. package/src/runtime/lifecycle/session-start.ts +57 -0
  357. package/src/runtime/lifecycle/snapshot/board.ts +27 -0
  358. package/src/runtime/lifecycle/snapshot/format.ts +60 -0
  359. package/src/runtime/lifecycle/snapshot/git.ts +71 -0
  360. package/src/runtime/lifecycle/snapshot/index.ts +52 -0
  361. package/src/runtime/lifecycle/snapshot/version.ts +34 -0
  362. package/src/runtime/lifecycle/solid-detect.ts +56 -0
  363. package/src/runtime/lifecycle/stop-core.ts +35 -0
  364. package/src/runtime/lifecycle/subagent-cache.ts +61 -0
  365. package/src/runtime/lifecycle/task-completed.ts +94 -0
  366. package/src/runtime/lifecycle/teammate-idle-check.ts +63 -0
  367. package/src/runtime/lifecycle/teammate-idle.ts +28 -0
  368. package/src/runtime/lifecycle/tool-failure.ts +24 -0
  369. package/src/runtime/lifecycle/track-changes.ts +61 -0
  370. package/src/runtime/lifecycle/validate-solid.ts +70 -0
  371. package/src/runtime/lifecycle/validate-tailwind.ts +80 -0
  372. package/src/runtime/lifecycle-bridge.ts +74 -0
  373. package/src/runtime/mcp-key.ts +44 -0
  374. package/src/runtime/mcp-tool-name.ts +92 -0
  375. package/src/runtime/mcp.ts +91 -0
  376. package/src/runtime/modular.ts +77 -0
  377. package/src/runtime/normalize.ts +107 -0
  378. package/src/runtime/notices.ts +91 -0
  379. package/src/runtime/notification-sound.ts +49 -0
  380. package/src/runtime/notifications.ts +77 -0
  381. package/src/runtime/paths.ts +59 -0
  382. package/src/runtime/post-fanout.ts +41 -0
  383. package/src/runtime/post-outcome.ts +61 -0
  384. package/src/runtime/pre-allow.ts +97 -0
  385. package/src/runtime/precommit.ts +60 -0
  386. package/src/runtime/prompt-text.ts +38 -0
  387. package/src/runtime/receipt-capture.ts +34 -0
  388. package/src/runtime/record.ts +26 -0
  389. package/src/runtime/respond.ts +92 -0
  390. package/src/runtime/solid-file-size-gate.ts +58 -0
  391. package/src/runtime/solid-pre.ts +53 -0
  392. package/src/runtime/storage.ts +9 -0
  393. package/src/statusline/colors.ts +31 -0
  394. package/src/statusline/constants.ts +17 -0
  395. package/src/statusline/formatters.ts +54 -0
  396. package/src/statusline/index.ts +4 -0
  397. package/src/statusline/progress-bar.ts +46 -0
  398. package/src/tracking/codex-post-failure.ts +73 -0
  399. package/src/tracking/index.ts +2 -0
  400. package/src/tracking/integrity.ts +99 -0
  401. package/src/tracking/one-shot-dedup.ts +34 -0
  402. package/src/tracking/one-shot-failure.ts +42 -0
  403. package/src/tracking/one-shot-store.ts +95 -0
  404. package/src/tracking/one-shot.ts +93 -0
  405. package/src/tracking/receipts.ts +95 -0
  406. package/src/tracking/session-state.ts +94 -0
  407. package/src/tracking/store.ts +96 -0
  408. package/src/tracking/track-compact.ts +100 -0
  409. package/src/tracking/track-diff.ts +50 -0
  410. package/src/tracking/track-journal.ts +97 -0
  411. package/src/tracking/track-lock-sync.ts +83 -0
  412. package/src/tracking/track-lock.ts +67 -0
  413. package/src/util/compact-json.ts +23 -0
  414. package/src/util/index.ts +2 -0
  415. package/src/util/json-io.ts +47 -0
  416. package/src/util/project-root.ts +41 -0
  417. package/src/util/runtime-io.ts +85 -0
  418. package/src/util/semver.ts +30 -0
  419. package/dist/permission-mode-B0MUl7FT.mjs +0 -136
@@ -1,6 +1,7 @@
1
- import { t as evaluate } from "./evaluate-C1VSI5pb.mjs";
1
+ import { t as evaluate } from "./evaluate-CMiIqHeH.mjs";
2
2
  import { t as formatPrompt } from "./types-ernB1Dy3.mjs";
3
- import { _ as commandToString, c as readClaudeInput } from "./claude-5bC8TDAz.mjs";
3
+ import { t as commandToString } from "./command-string-CALMTnwN.mjs";
4
+ import { c as readClaudeInput } from "./claude-Ckv2_TgP.mjs";
4
5
  //#region src/adapters/hermes/index.ts
5
6
  /**
6
7
  * Hermes Agent adapter (hook-mode). Nous Research's hermes-agent (2026) pipes a
@@ -1,4 +1,4 @@
1
- import { t as Prompt } from "./types-C0-igRKr.mjs";
1
+ import { t as Prompt } from "./types-Bh0jEF3_.mjs";
2
2
  import { t as AuthEntry } from "./doc-helpers-BGCzP9VF.mjs";
3
3
  import { t as RefMeta } from "./types-CY5qT2X1.mjs";
4
4
  //#region src/policy/detect-project.d.ts
@@ -1,4 +1,4 @@
1
- import { t as Prompt } from "./types-C0-igRKr.mjs";
1
+ import { t as Prompt } from "./types-Bh0jEF3_.mjs";
2
2
  //#region src/adapters/claude/index.d.ts
3
3
  /** Subset of the Claude Code hook stdin payload we consume. */
4
4
  interface ClaudeHookInput {
package/dist/index.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { n as PromptKind, r as formatPrompt, t as Prompt } from "./types-C0-igRKr.mjs";
1
+ import { n as PromptKind, r as formatPrompt, t as Prompt } from "./types-Bh0jEF3_.mjs";
2
2
  import { _ as queryHash, a as cacheLookupSubstringMeta, c as mcpCacheKey, d as extractText, f as IndexSummary, g as jaccardSimilar, h as compactMarkdown, i as cacheLookupSubstring, l as mcpCacheWrite, m as summarizeIndex, n as cacheLookup, o as cachePath, p as loadIndex, r as cacheLookupMeta, s as cacheStore, t as CacheHit, u as webfetchCacheWrite } from "./index-DhmV2MPh.mjs";
3
3
  import { _ as DEFAULT_TTL_SEC, a as ProjectLayout, b as ttlLabel, c as projectLayout, d as MAX_LINES_ENV_KEY, f as hookBudget, g as storeBudget, h as splitTarget, i as parseEnvFile, l as DEFAULT_MAX_LINES, m as resolveStdinMaxBytes, n as envCandidates, o as STATE_GITIGNORE, p as resolveMaxLines, r as loadDotenv, s as STATE_ROOT, t as HOME_DIR, u as DEFAULT_STDIN_MAX_BYTES, v as TTL_ENV_KEY, x as parseEnvInt, y as resolveTtlSec } from "./index-oXXPs2xl.mjs";
4
4
  import { i as HarnessVia, n as HarnessInfo, r as HarnessMode, t as HarnessId } from "./types-DvXTI71X.mjs";
@@ -6,7 +6,7 @@ import { n as detectMode, r as modeFor, t as detectHarness } from "./index-CigBu
6
6
  import { a as isDocConsulted, i as formatDocSatisfactionStatus, n as DocSatisfactionStatus, o as resolveSessions, r as formatDocDeny, t as AuthEntry } from "./doc-helpers-BGCzP9VF.mjs";
7
7
  import { t as incrementTrivialEditCounter } from "./index-84heAAm_.mjs";
8
8
  import { a as compactJson, i as walkUpFor, n as projectRoot, r as projectRootOrNull, t as isCodeFile } from "./index-p9fLrSOD.mjs";
9
- import { $ as detectCreationIntent, $t as countFrameworkCodeLines, A as TreeEntry, At as APEX_GATES, B as loadApexTaskState, Bt as evaluate, C as maskCommentsAndStrings, Ct as protectedPathGuard, D as descFromText, Dt as securityGuard, E as missingSeoElements, Et as LabeledPattern, F as EXCLUDE_DIRS, Ft as brainstormGate, G as detectRequiredSkills, Gt as PROJECT_INSTALL, H as buildApexInstruction, Ht as PolicyResult, I as PROJECT_INDICATORS, It as docConsultedGate, J as SKILL_TRIGGERS, Jt as isRalphMode, K as skillTriggerGate, Kt as RALPH_SAFE, L as ApexTaskState, Lt as evaluateApex, M as parseEntry, Mt as ApexGate, N as parseBodyDesc, Nt as POST_AUTH_GATES, O as firstComment, Ot as Guard, P as parseField, Pt as PRE_AUTH_GATES, Q as capVerbosity, Qt as SOLID_REF, R as buildApexTaskContext, Rt as freshnessGate, S as LexProfile, St as PROTECTED_GIT_RE, T as isHtmlLike, Tt as CRITICAL_PATTERNS, U as buildClaudeMdContext, Ut as GIT_ASK, V as DEV_VERBS, Vt as PolicyContext, W as detectClaudeMdProjectType, Wt as GIT_BLOCKED, X as MAX_EXA_RESULTS, Xt as FileSizeVerdict, Y as frameworkSolidGate, Yt as matchPatterns, Z as MAX_TOKENS, Zt as PLUGINS_DIR, _ as isStoresPath, _t as CODE_REDIRECT, a as countStores, an as ProjectType, at as installGuard, b as langOfPath, bt as SESSION_STATE_FRAGMENT, c as InterfaceDeclLevel, cn as isApexCommand, ct as PHP_DECL_RE, d as interfaceDeclLevel, dt as SWIFT_PROTO_RE, en as countLines, et as FAIL_CLOSED, f as LangFamily, ft as TS_DECL_RE, g as isQueryPath, gt as CODE_MUTATORS, h as isInterfacesPath, ht as ASK_WRITERS, i as StoreLib, in as ModularArchitecture, it as runGuards, j as parseEnrichment, jt as ApexContext, k as firstHeading, kt as GuardContext, l as declaresExportedTypeAlias, ln as requiredArchSkill, lt as PY_MODEL_RE, m as isHooksPath, mt as bashWriteGuard, n as importsTanstackQuery, nn as detectFramework, nt as clearUserGuards, o as declaresStore, on as detectModularArchitecture, ot as GO_DECL_RE, p as isComponentsPath, pt as interfaceSeparationGuard, q as usesTailwindUtilities, qt as SYSTEM_INSTALL, r as queryCapActive, rn as DEV_KEYWORDS, rt as registerGuard, s as declaresCustomHook, sn as detectProjectType, st as JAVA_DECL_RE, t as declaresQueryHook, tn as evaluateFileSize, tt as GUARDS, u as declaresInterface, ut as RUST_DECL_RE, v as isTypesPath, vt as FILE_REDIRECT, w as maskCommentsOnly, wt as ASK_PATTERNS, x as lexProfileOf, xt as PROTECTED_FRAGMENTS, y as isVendorPath, yt as SAFE_PREFIXES, z as buildApexTaskInjection, zt as solidReadGate } from "./index-DBgnIZn9.mjs";
9
+ import { $ as detectCreationIntent, $t as countFrameworkCodeLines, A as TreeEntry, At as APEX_GATES, B as loadApexTaskState, Bt as evaluate, C as maskCommentsAndStrings, Ct as protectedPathGuard, D as descFromText, Dt as securityGuard, E as missingSeoElements, Et as LabeledPattern, F as EXCLUDE_DIRS, Ft as brainstormGate, G as detectRequiredSkills, Gt as PROJECT_INSTALL, H as buildApexInstruction, Ht as PolicyResult, I as PROJECT_INDICATORS, It as docConsultedGate, J as SKILL_TRIGGERS, Jt as isRalphMode, K as skillTriggerGate, Kt as RALPH_SAFE, L as ApexTaskState, Lt as evaluateApex, M as parseEntry, Mt as ApexGate, N as parseBodyDesc, Nt as POST_AUTH_GATES, O as firstComment, Ot as Guard, P as parseField, Pt as PRE_AUTH_GATES, Q as capVerbosity, Qt as SOLID_REF, R as buildApexTaskContext, Rt as freshnessGate, S as LexProfile, St as PROTECTED_GIT_RE, T as isHtmlLike, Tt as CRITICAL_PATTERNS, U as buildClaudeMdContext, Ut as GIT_ASK, V as DEV_VERBS, Vt as PolicyContext, W as detectClaudeMdProjectType, Wt as GIT_BLOCKED, X as MAX_EXA_RESULTS, Xt as FileSizeVerdict, Y as frameworkSolidGate, Yt as matchPatterns, Z as MAX_TOKENS, Zt as PLUGINS_DIR, _ as isStoresPath, _t as CODE_REDIRECT, a as countStores, an as ProjectType, at as installGuard, b as langOfPath, bt as SESSION_STATE_FRAGMENT, c as InterfaceDeclLevel, cn as isApexCommand, ct as PHP_DECL_RE, d as interfaceDeclLevel, dt as SWIFT_PROTO_RE, en as countLines, et as FAIL_CLOSED, f as LangFamily, ft as TS_DECL_RE, g as isQueryPath, gt as CODE_MUTATORS, h as isInterfacesPath, ht as ASK_WRITERS, i as StoreLib, in as ModularArchitecture, it as runGuards, j as parseEnrichment, jt as ApexContext, k as firstHeading, kt as GuardContext, l as declaresExportedTypeAlias, ln as requiredArchSkill, lt as PY_MODEL_RE, m as isHooksPath, mt as bashWriteGuard, n as importsTanstackQuery, nn as detectFramework, nt as clearUserGuards, o as declaresStore, on as detectModularArchitecture, ot as GO_DECL_RE, p as isComponentsPath, pt as interfaceSeparationGuard, q as usesTailwindUtilities, qt as SYSTEM_INSTALL, r as queryCapActive, rn as DEV_KEYWORDS, rt as registerGuard, s as declaresCustomHook, sn as detectProjectType, st as JAVA_DECL_RE, t as declaresQueryHook, tn as evaluateFileSize, tt as GUARDS, u as declaresInterface, ut as RUST_DECL_RE, v as isTypesPath, vt as FILE_REDIRECT, w as maskCommentsOnly, wt as ASK_PATTERNS, x as lexProfileOf, xt as PROTECTED_FRAGMENTS, y as isVendorPath, yt as SAFE_PREFIXES, z as buildApexTaskInjection, zt as solidReadGate } from "./index-B8PG82su.mjs";
10
10
  import { n as RouteResult, r as ScoredRef, t as RefMeta } from "./types-CY5qT2X1.mjs";
11
11
  import { a as ReminderState, c as readState, d as throttleMs, i as registryFile, l as setStateField, n as addRoot, o as lessonsFileFor, r as readRoots, s as nowStamp, t as ensureMemoryGitignore, u as stateFileFor } from "./index-DLYhervv.mjs";
12
12
  import { a as globToRe, i as scoreReferences, n as toRefMeta, o as parseFrontmatter, r as routeReferences, t as loadRefs } from "./index-DEfz82BP.mjs";
package/dist/index.mjs CHANGED
@@ -4,11 +4,11 @@ import { n as STATE_ROOT, r as projectLayout, t as STATE_GITIGNORE } from "./lay
4
4
  import { t as compactJson } from "./compact-json-DK2nX-MK.mjs";
5
5
  import { i as walkUpFor, n as projectRoot, r as projectRootOrNull, t as isCodeFile } from "./project-root-3kk7gCOp.mjs";
6
6
  import { n as detectMode, r as modeFor, t as detectHarness } from "./harness-BMuLJ9lm.mjs";
7
- import { $ as matchPatterns, B as protectedPathGuard, C as isInterfacesPath, D as isVendorPath, E as isTypesPath, F as FILE_REDIRECT, H as CRITICAL_PATTERNS, I as SAFE_PREFIXES, J as GIT_BLOCKED, L as SESSION_STATE_FRAGMENT, M as ASK_WRITERS, N as CODE_MUTATORS, O as langOfPath, P as CODE_REDIRECT, Q as isRalphMode, R as PROTECTED_FRAGMENTS, S as isHooksPath, T as isStoresPath, U as securityGuard, V as ASK_PATTERNS, X as RALPH_SAFE, Y as PROJECT_INSTALL, Z as SYSTEM_INSTALL, a as registerGuard, at as DEV_KEYWORDS, b as interfaceDeclLevel, c as GO_DECL_RE, ct as isApexCommand, d as PY_MODEL_RE, et as detectFramework, f as RUST_DECL_RE, h as interfaceSeparationGuard, i as clearUserGuards, it as maskCommentsOnly, j as bashWriteGuard, k as lexProfileOf, l as JAVA_DECL_RE, lt as requiredArchSkill, m as TS_DECL_RE, n as FAIL_CLOSED, o as runGuards, ot as detectModularArchitecture, p as SWIFT_PROTO_RE, q as GIT_ASK, r as GUARDS, rt as maskCommentsAndStrings, s as installGuard, st as detectProjectType, t as evaluate, u as PHP_DECL_RE, v as declaresExportedTypeAlias, w as isQueryPath, x as isComponentsPath, y as declaresInterface, z as PROTECTED_GIT_RE } from "./evaluate-C1VSI5pb.mjs";
7
+ import { $ as isRalphMode, B as protectedPathGuard, C as isInterfacesPath, D as isVendorPath, E as isTypesPath, F as FILE_REDIRECT, H as ASK_PATTERNS, I as SAFE_PREFIXES, J as GIT_ASK, L as SESSION_STATE_FRAGMENT, M as ASK_WRITERS, N as CODE_MUTATORS, O as langOfPath, P as CODE_REDIRECT, Q as SYSTEM_INSTALL, R as PROTECTED_FRAGMENTS, S as isHooksPath, T as isStoresPath, U as CRITICAL_PATTERNS, W as securityGuard, X as PROJECT_INSTALL, Y as GIT_BLOCKED, Z as RALPH_SAFE, a as registerGuard, at as maskCommentsOnly, b as interfaceDeclLevel, c as GO_DECL_RE, ct as detectProjectType, d as PY_MODEL_RE, et as matchPatterns, f as RUST_DECL_RE, h as interfaceSeparationGuard, i as clearUserGuards, it as maskCommentsAndStrings, j as bashWriteGuard, k as lexProfileOf, l as JAVA_DECL_RE, lt as isApexCommand, m as TS_DECL_RE, n as FAIL_CLOSED, o as runGuards, ot as DEV_KEYWORDS, p as SWIFT_PROTO_RE, r as GUARDS, s as installGuard, st as detectModularArchitecture, t as evaluate, tt as detectFramework, u as PHP_DECL_RE, ut as requiredArchSkill, v as declaresExportedTypeAlias, w as isQueryPath, x as isComponentsPath, y as declaresInterface, z as PROTECTED_GIT_RE } from "./evaluate-CMiIqHeH.mjs";
8
8
  import { d as countFrameworkCodeLines, f as countLines, l as PLUGINS_DIR, p as evaluateFileSize, u as SOLID_REF } from "./home-state-oUGFB4ds.mjs";
9
9
  import { i as resolveSessions, n as formatDocSatisfactionStatus, r as isDocConsulted, t as formatDocDeny } from "./doc-helpers-CWZegVdR.mjs";
10
10
  import { i as parseFrontmatter, n as scoreReferences, r as globToRe, t as routeReferences } from "./router-PKVNBHge.mjs";
11
- import { A as importsTanstackQuery, B as APEX_GATES, C as detectRequiredSkills, D as frameworkSolidGate, E as SKILL_TRIGGERS, G as evaluateApex, H as PRE_AUTH_GATES, I as MAX_EXA_RESULTS, K as freshnessGate, L as MAX_TOKENS, M as countStores, N as declaresStore, O as declaresCustomHook, R as capVerbosity, S as parseField, T as usesTailwindUtilities, U as brainstormGate, V as POST_AUTH_GATES, W as docConsultedGate, _ as detectClaudeMdProjectType, a as firstHeading, c as EXCLUDE_DIRS, d as buildApexTaskInjection, f as loadApexTaskState, g as buildClaudeMdContext, h as buildApexInstruction, i as firstComment, j as queryCapActive, k as declaresQueryHook, l as PROJECT_INDICATORS, m as DEV_VERBS, n as missingSeoElements, o as parseEnrichment, q as solidReadGate, r as descFromText, s as parseEntry, t as isHtmlLike, u as buildApexTaskContext, w as skillTriggerGate, x as parseBodyDesc, z as detectCreationIntent } from "./validate-DZFtAbLP.mjs";
11
+ import { A as importsTanstackQuery, B as APEX_GATES, C as detectRequiredSkills, D as frameworkSolidGate, E as SKILL_TRIGGERS, G as evaluateApex, H as PRE_AUTH_GATES, I as MAX_EXA_RESULTS, K as freshnessGate, L as MAX_TOKENS, M as countStores, N as declaresStore, O as declaresCustomHook, R as capVerbosity, S as parseField, T as usesTailwindUtilities, U as brainstormGate, V as POST_AUTH_GATES, W as docConsultedGate, _ as detectClaudeMdProjectType, a as firstHeading, c as EXCLUDE_DIRS, d as buildApexTaskInjection, f as loadApexTaskState, g as buildClaudeMdContext, h as buildApexInstruction, i as firstComment, j as queryCapActive, k as declaresQueryHook, l as PROJECT_INDICATORS, m as DEV_VERBS, n as missingSeoElements, o as parseEnrichment, q as solidReadGate, r as descFromText, s as parseEntry, t as isHtmlLike, u as buildApexTaskContext, w as skillTriggerGate, x as parseBodyDesc, z as detectCreationIntent } from "./validate-KjZ1X9tH.mjs";
12
12
  import { t as formatPrompt } from "./types-ernB1Dy3.mjs";
13
13
  import { a as nowStamp, c as stateFileFor, i as lessonsFileFor, l as throttleMs, n as readRoots, o as readState, r as registryFile, s as setStateField, t as addRoot, u as ensureMemoryGitignore } from "./registry-IhHk2KlT.mjs";
14
14
  import { a as cacheLookupSubstring, c as cacheStore, d as loadIndex, f as summarizeIndex, h as queryHash, i as cacheLookupMeta, l as mcpCacheKey, m as jaccardSimilar, n as webfetchCacheWrite, o as cacheLookupSubstringMeta, p as compactMarkdown, r as cacheLookup, s as cachePath, t as mcpCacheWrite, u as extractText } from "./mcp-store-BkBDmuxN.mjs";
@@ -15,7 +15,7 @@ interface InitFile {
15
15
  declare function claudeInit(command: string): InitFile[];
16
16
  /** Codex CLI: `.codex/hooks.json` (Claude-compatible shape). */
17
17
  declare function codexInit(command: string): InitFile[];
18
- /** Cursor: `.cursor/hooks.json` (version 1) — shell + tool gate + file-edit observe. */
18
+ /** Cursor: `.cursor/hooks.json` (version 1) — supported pre gates and post observers. */
19
19
  declare function cursorInit(command: string): InitFile[];
20
20
  /** Gemini CLI: `.gemini/settings.json` — BeforeTool(edits) + AfterTool(all, regex). */
21
21
  declare function geminiInit(command: string): InitFile[];
@@ -1,2 +1,2 @@
1
- import { a as codexInit, i as clineInit, n as writeInitFile, o as cursorInit, r as claudeInit, s as geminiInit, t as initFor } from "../run-TAXNRSpD.mjs";
1
+ import { a as codexInit, i as clineInit, n as writeInitFile, o as cursorInit, r as claudeInit, s as geminiInit, t as initFor } from "../run-GHAMqcOn.mjs";
2
2
  export { claudeInit, clineInit, codexInit, cursorInit, geminiInit, initFor, writeInitFile };
@@ -1,6 +1,7 @@
1
- import { t as evaluate } from "./evaluate-C1VSI5pb.mjs";
1
+ import { t as evaluate } from "./evaluate-CMiIqHeH.mjs";
2
2
  import { t as formatPrompt } from "./types-ernB1Dy3.mjs";
3
- import { _ as commandToString, c as readClaudeInput } from "./claude-5bC8TDAz.mjs";
3
+ import { t as commandToString } from "./command-string-CALMTnwN.mjs";
4
+ import { c as readClaudeInput } from "./claude-Ckv2_TgP.mjs";
4
5
  //#region src/adapters/kimi/index.ts
5
6
  /**
6
7
  * Kimi Code CLI adapter (hook-mode). Moonshot AI's Kimi Code CLI (v0.27.0,
@@ -0,0 +1,317 @@
1
+ import { t as commandToString } from "./command-string-CALMTnwN.mjs";
2
+ import { isAbsolute, normalize, relative } from "node:path";
3
+ import { realpathSync } from "node:fs";
4
+ //#region src/adapters/cursor/events.ts
5
+ const EVENT_CONTRACTS = {
6
+ sessionStart: {
7
+ phase: "pre",
8
+ lifecycle: "SessionStart",
9
+ response: "session-context",
10
+ blockable: false,
11
+ known: true
12
+ },
13
+ sessionEnd: {
14
+ phase: "post",
15
+ lifecycle: "SessionEnd",
16
+ response: "neutral",
17
+ blockable: false,
18
+ known: true
19
+ },
20
+ beforeSubmitPrompt: {
21
+ phase: "pre",
22
+ lifecycle: "UserPromptSubmit",
23
+ response: "submit-control",
24
+ blockable: true,
25
+ known: true
26
+ },
27
+ preCompact: {
28
+ phase: "pre",
29
+ lifecycle: "PreCompact",
30
+ response: "compact-notice",
31
+ blockable: false,
32
+ known: true
33
+ },
34
+ subagentStart: {
35
+ phase: "pre",
36
+ lifecycle: "SubagentStart",
37
+ response: "permission",
38
+ blockable: true,
39
+ known: true
40
+ },
41
+ subagentStop: {
42
+ phase: "post",
43
+ lifecycle: "SubagentStop",
44
+ response: "followup",
45
+ blockable: false,
46
+ known: true
47
+ },
48
+ preToolUse: {
49
+ phase: "pre",
50
+ lifecycle: "PreToolUse",
51
+ response: "permission",
52
+ blockable: true,
53
+ known: true
54
+ },
55
+ postToolUse: {
56
+ phase: "post",
57
+ lifecycle: "PostToolUse",
58
+ response: "post-context",
59
+ blockable: false,
60
+ known: true
61
+ },
62
+ postToolUseFailure: {
63
+ phase: "post",
64
+ lifecycle: "PostToolUseFailure",
65
+ response: "neutral",
66
+ blockable: false,
67
+ known: true
68
+ },
69
+ beforeShellExecution: {
70
+ phase: "pre",
71
+ lifecycle: "BeforeShellExecution",
72
+ response: "permission",
73
+ blockable: true,
74
+ known: true
75
+ },
76
+ afterShellExecution: {
77
+ phase: "post",
78
+ lifecycle: "AfterShellExecution",
79
+ response: "neutral",
80
+ blockable: false,
81
+ known: true
82
+ },
83
+ beforeMCPExecution: {
84
+ phase: "pre",
85
+ lifecycle: "BeforeMCPExecution",
86
+ response: "permission",
87
+ blockable: true,
88
+ known: true
89
+ },
90
+ afterMCPExecution: {
91
+ phase: "post",
92
+ lifecycle: "AfterMCPExecution",
93
+ response: "neutral",
94
+ blockable: false,
95
+ known: true
96
+ },
97
+ beforeReadFile: {
98
+ phase: "pre",
99
+ lifecycle: "BeforeReadFile",
100
+ response: "permission",
101
+ blockable: true,
102
+ known: true
103
+ },
104
+ afterFileEdit: {
105
+ phase: "post",
106
+ lifecycle: "AfterFileEdit",
107
+ response: "neutral",
108
+ blockable: false,
109
+ known: true
110
+ },
111
+ beforeTabFileRead: {
112
+ phase: "pre",
113
+ lifecycle: "BeforeTabFileRead",
114
+ response: "permission",
115
+ blockable: true,
116
+ known: true
117
+ },
118
+ afterTabFileEdit: {
119
+ phase: "post",
120
+ lifecycle: "AfterTabFileEdit",
121
+ response: "neutral",
122
+ blockable: false,
123
+ known: true
124
+ },
125
+ afterAgentResponse: {
126
+ phase: "post",
127
+ lifecycle: "AfterAgentResponse",
128
+ response: "neutral",
129
+ blockable: false,
130
+ known: true
131
+ },
132
+ afterAgentThought: {
133
+ phase: "post",
134
+ lifecycle: "AfterAgentThought",
135
+ response: "neutral",
136
+ blockable: false,
137
+ known: true
138
+ },
139
+ stop: {
140
+ phase: "post",
141
+ lifecycle: "Stop",
142
+ response: "followup",
143
+ blockable: false,
144
+ known: true
145
+ },
146
+ workspaceOpen: {
147
+ phase: "pre",
148
+ lifecycle: "WorkspaceOpen",
149
+ response: "plugin-paths",
150
+ blockable: false,
151
+ known: true
152
+ }
153
+ };
154
+ const UNKNOWN_EVENT = {
155
+ phase: "post",
156
+ lifecycle: null,
157
+ response: "neutral",
158
+ blockable: false,
159
+ known: false
160
+ };
161
+ /** Return explicit routing and response metadata for a Cursor event name. */
162
+ function cursorEventContract(eventName) {
163
+ return EVENT_CONTRACTS[eventName] ?? UNKNOWN_EVENT;
164
+ }
165
+ //#endregion
166
+ //#region src/adapters/cursor/context.ts
167
+ /** Preserve a Cursor path value only when it is non-empty and NUL-free. */
168
+ function cursorPath(value) {
169
+ return typeof value === "string" && value.length > 0 && !value.includes("\0") ? value : void 0;
170
+ }
171
+ /** Validate and normalize an absolute path supplied by Cursor. */
172
+ function cursorAbsolutePath(value) {
173
+ const candidate = cursorPath(value);
174
+ if (!candidate || !isAbsolute(candidate)) return void 0;
175
+ const path = normalize(candidate);
176
+ try {
177
+ return realpathSync.native(path);
178
+ } catch {
179
+ return path;
180
+ }
181
+ }
182
+ /** Preserve distinct, validated Cursor workspace roots in wire order. */
183
+ function cursorWorkspaceRoots(value) {
184
+ if (!Array.isArray(value)) return [];
185
+ const roots = value.map(cursorAbsolutePath).filter((root) => root !== void 0);
186
+ return [...new Set(roots)];
187
+ }
188
+ function contains(root, filePath) {
189
+ const rel = relative(root, filePath);
190
+ return rel === "" || !rel.startsWith("..") && !isAbsolute(rel);
191
+ }
192
+ /** Select Cursor's project scope without replacing a valid payload cwd. */
193
+ function cursorProjectCwd(cwd, workspaceRoots, filePath, fallback) {
194
+ if (cwd) return cwd;
195
+ if (filePath) {
196
+ const matches = workspaceRoots.filter((root) => contains(root, filePath));
197
+ if (matches.length > 0) return matches.sort((a, b) => b.length - a.length)[0];
198
+ }
199
+ return workspaceRoots[0] ?? fallback;
200
+ }
201
+ //#endregion
202
+ //#region src/adapters/cursor/normalize.ts
203
+ function record(value) {
204
+ return typeof value === "object" && value !== null && !Array.isArray(value) ? value : void 0;
205
+ }
206
+ function str(value) {
207
+ return typeof value === "string" ? value : void 0;
208
+ }
209
+ function inputRecord(value) {
210
+ const direct = record(value);
211
+ if (direct || typeof value !== "string") return direct;
212
+ try {
213
+ return record(JSON.parse(value));
214
+ } catch {
215
+ return;
216
+ }
217
+ }
218
+ const MCP_ROOT_FIELDS = [
219
+ "mcp_server_name",
220
+ "mcp_server_url",
221
+ "url",
222
+ "result_json",
223
+ "duration"
224
+ ];
225
+ function cursorMcpInput(raw, input) {
226
+ const merged = { ...input };
227
+ for (const field of MCP_ROOT_FIELDS) if (Object.hasOwn(raw, field)) merged[field] = raw[field];
228
+ return merged;
229
+ }
230
+ function sanitizedCursorInput(input) {
231
+ const safe = { ...input };
232
+ if (typeof safe.file_path === "string" && cursorPath(safe.file_path) === void 0) delete safe.file_path;
233
+ if (typeof safe.path === "string" && cursorPath(safe.path) === void 0) delete safe.path;
234
+ if (Object.hasOwn(safe, "cwd")) {
235
+ const cwd = cursorAbsolutePath(safe.cwd);
236
+ if (cwd) safe.cwd = cwd;
237
+ else delete safe.cwd;
238
+ }
239
+ if (Object.hasOwn(safe, "workspace_roots")) if (Array.isArray(safe.workspace_roots)) safe.workspace_roots = cursorWorkspaceRoots(safe.workspace_roots);
240
+ else delete safe.workspace_roots;
241
+ return safe;
242
+ }
243
+ function cursorToolName(raw, event, tool, hasCommand) {
244
+ if (hasCommand) return "Bash";
245
+ const server = str(raw.mcp_server_name)?.trim().replace(/[^A-Za-z0-9_-]+/g, "_");
246
+ if (/^(before|after)MCPExecution$/i.test(event) && server && tool && !tool.startsWith("mcp__")) return `mcp__${server}__${tool}`;
247
+ if (tool === "Write") return "Edit";
248
+ return tool ?? "";
249
+ }
250
+ function cursorCommands(raw, input) {
251
+ const candidates = [commandToString(raw.command), commandToString(input.command)].filter((candidate) => candidate !== void 0);
252
+ return [...new Set(candidates)];
253
+ }
254
+ /**
255
+ * Extract one Cursor hook payload into the shared runtime shape.
256
+ *
257
+ * @param payload - Cursor hook stdin payload.
258
+ * @returns Cursor-specific phase, tool, command, and edit fields.
259
+ */
260
+ function extractCursorEvent(payload) {
261
+ const raw = payload;
262
+ const hookEvent = str(raw.hook_event_name) ?? "";
263
+ const parsedInput = inputRecord(raw.tool_input);
264
+ const input = sanitizedCursorInput((parsedInput && /^(before|after)MCPExecution$/i.test(hookEvent) ? cursorMcpInput(raw, parsedInput) : parsedInput) ?? raw);
265
+ const contract = cursorEventContract(hookEvent);
266
+ const metadata = {
267
+ eventName: hookEvent,
268
+ lifecycleEvent: contract.lifecycle,
269
+ responseKind: contract.response,
270
+ blockable: contract.blockable,
271
+ cwd: cursorAbsolutePath(raw.cwd),
272
+ workspaceRoots: cursorWorkspaceRoots(raw.workspace_roots)
273
+ };
274
+ if (!contract.known) return {
275
+ ...metadata,
276
+ phase: contract.phase,
277
+ tool: "",
278
+ input
279
+ };
280
+ const afterFileEdit = /^afterFileEdit$/i.test(hookEvent);
281
+ const beforeReadFile = /^beforeReadFile$/i.test(hookEvent);
282
+ const beforeTabFileRead = /^beforeTabFileRead$/i.test(hookEvent);
283
+ const edits = Array.isArray(raw.edits) ? raw.edits.map(record).filter((edit) => edit !== void 0) : [];
284
+ const filePath = cursorPath(raw.file_path);
285
+ if (filePath && edits.length > 0) {
286
+ const files = edits.map((edit) => ({
287
+ filePath,
288
+ oldString: str(edit.old_string),
289
+ content: str(edit.new_string) ?? "",
290
+ op: "update"
291
+ }));
292
+ return {
293
+ ...metadata,
294
+ phase: contract.phase,
295
+ tool: "Edit",
296
+ input,
297
+ filePath,
298
+ content: files.map((file) => file.content).join("\n"),
299
+ files
300
+ };
301
+ }
302
+ const commands = cursorCommands(raw, input);
303
+ const command = commands[0];
304
+ return {
305
+ ...metadata,
306
+ phase: contract.phase,
307
+ tool: afterFileEdit ? "Edit" : beforeReadFile || beforeTabFileRead ? "Read" : cursorToolName(raw, hookEvent, str(raw.tool_name), command !== void 0),
308
+ input,
309
+ filePath: cursorPath(input.file_path) ?? cursorPath(input.path),
310
+ content: str(input.content) ?? str(input.new_string),
311
+ oldString: str(input.old_string),
312
+ command,
313
+ commandCandidates: /^beforeMCPExecution$/i.test(hookEvent) && commands.length > 0 ? commands : void 0
314
+ };
315
+ }
316
+ //#endregion
317
+ export { cursorProjectCwd as n, cursorEventContract as r, extractCursorEvent as t };
@@ -0,0 +1,226 @@
1
+ //#region src/adapters/codex/apply-patch.ts
2
+ const BEGIN = "*** Begin Patch";
3
+ const END = "*** End Patch";
4
+ const ADD = "*** Add File: ";
5
+ const DEL = "*** Delete File: ";
6
+ const UPD = "*** Update File: ";
7
+ const MOVE = "*** Move to: ";
8
+ const EOF = "*** End of File";
9
+ const ENV = "*** Environment ID: ";
10
+ /**
11
+ * Parse a Codex freeform patch into its per-file changes. Lenient on whitespace
12
+ * around structural markers (as Codex's own parser is); returns `[]` when no
13
+ * recognizable hunk is present (malformed input fails open, not closed).
14
+ * @param text - Raw patch body from `tool_input.command`.
15
+ * @returns One {@link PatchedFile} per Add/Update/Delete hunk, in order.
16
+ */
17
+ function parseApplyPatch(text) {
18
+ const files = [];
19
+ let cur = null;
20
+ let buf = [];
21
+ const flush = () => {
22
+ if (cur) {
23
+ cur.content = buf.join("\n");
24
+ files.push(cur);
25
+ }
26
+ cur = null;
27
+ buf = [];
28
+ };
29
+ for (const line of text.split("\n")) {
30
+ const marker = line.trimStart();
31
+ if (marker === BEGIN || marker.startsWith(ENV)) continue;
32
+ if (marker === END) {
33
+ flush();
34
+ continue;
35
+ }
36
+ if (marker.startsWith(ADD)) {
37
+ flush();
38
+ cur = {
39
+ path: marker.slice(14).trim(),
40
+ content: "",
41
+ op: "add"
42
+ };
43
+ continue;
44
+ }
45
+ if (marker.startsWith(DEL)) {
46
+ flush();
47
+ files.push({
48
+ path: marker.slice(17).trim(),
49
+ content: "",
50
+ op: "delete"
51
+ });
52
+ continue;
53
+ }
54
+ if (marker.startsWith(UPD)) {
55
+ flush();
56
+ cur = {
57
+ path: marker.slice(17).trim(),
58
+ content: "",
59
+ op: "update"
60
+ };
61
+ continue;
62
+ }
63
+ if (marker.startsWith(MOVE)) {
64
+ if (cur) cur.path = marker.slice(13).trim();
65
+ continue;
66
+ }
67
+ if (marker === EOF || !cur) continue;
68
+ if (cur.op === "add") {
69
+ if (line.startsWith("+")) buf.push(line.slice(1));
70
+ continue;
71
+ }
72
+ if (line.startsWith("@@")) continue;
73
+ if (line.startsWith("+")) buf.push(line.slice(1));
74
+ else if (line.startsWith("-")) continue;
75
+ else buf.push(line.startsWith(" ") ? line.slice(1) : line);
76
+ }
77
+ flush();
78
+ return files;
79
+ }
80
+ //#endregion
81
+ //#region src/runtime/codex-shell-tool.ts
82
+ /**
83
+ * @module codex-shell-tool
84
+ * Canonicalizes a Codex-only shell `tool_name` alias to `"Bash"`, so every
85
+ * existing `tool === "Bash"` consumer (activity credit, explore-tools
86
+ * classification, the protected-path guard, the design corpus read gate, …)
87
+ * treats a Code Mode exec dispatch exactly like a native Bash call — no
88
+ * per-consumer change needed.
89
+ *
90
+ * A Code Mode-wrapped call (`functions.exec` -> `tools.exec_command(...)`)
91
+ * surfaces via the generic `CoreToolRuntime` hook default (openai/codex#23757,
92
+ * commit 5c20513), which keeps the raw function-tool name `"exec_command"`
93
+ * verbatim — unlike a DIRECT `exec_command` dispatch, which
94
+ * `ExecCommandHandler`'s own `pre_tool_use_payload` override re-labels
95
+ * `"Bash"` (`tool_name: HookToolName::bash()`). This is the exact call chain
96
+ * a real Codex CLI 0.146.0 session was observed emitting for a `sed -n` skill
97
+ * read. Only ONE alias is confirmed here — `ToolName::plain("exec_command")`
98
+ * in `core/src/tools/handlers/unified_exec/exec_command.rs`; `shell`,
99
+ * `unified_exec`, `local_shell`, and `shell_command` were audited but not
100
+ * evidenced as a distinct hook `tool_name` value, so they are deliberately
101
+ * left out rather than guessed.
102
+ * @packageDocumentation
103
+ */
104
+ /** Codex `tool_name` values that are a shell execution but not literally `"Bash"`. */
105
+ const CODEX_SHELL_TOOL_ALIASES = /* @__PURE__ */ new Set(["exec_command"]);
106
+ /**
107
+ * Canonicalize a Codex-only shell tool alias to `"Bash"`. Scoped to
108
+ * `id === "codex"` — every other harness id, and every non-aliased tool
109
+ * name, passes through unchanged (see `test/codex-shell-read-credit.test.ts`
110
+ * for the non-regression proof).
111
+ * @param id - Harness adapter id (e.g. "codex", "claude-code", "kimi").
112
+ * @param tool - Raw `tool_name` from the hook payload.
113
+ */
114
+ function canonicalizeCodexShellTool(id, tool) {
115
+ return id === "codex" && CODEX_SHELL_TOOL_ALIASES.has(tool) ? "Bash" : tool;
116
+ }
117
+ //#endregion
118
+ //#region src/runtime/mcp-tool-name.ts
119
+ /**
120
+ * @module mcp-tool-name
121
+ * Canonicalizes a Codex-only MCP `tool_name` alias back to its original
122
+ * hyphenated form, so every existing dash-keyed consumer (`SHOT_TOOLS`,
123
+ * `RESEARCH_TOOLS`/`classifyExplore`, `docSourceOf`, the design-pipeline
124
+ * `NAV`/`SCROLL`/`GEMINI` constants, …) recognizes a Codex MCP call exactly
125
+ * like the same call on Claude/Kimi/Cursor/Cline/Gemini — no per-consumer
126
+ * change needed.
127
+ *
128
+ * Codex CLI globally rewrites every `-` to `_` across the FULL qualified MCP
129
+ * tool identifier before it ever reaches a hook, in `sanitize_responses_api_tool_name()`
130
+ * (`codex-rs/core/src/mcp_connection_manager.rs`, introduced by
131
+ * openai/codex#14605 — "Normalize MCP tool names to code-mode safe form",
132
+ * code-mode forbids `-` in identifiers). openai/codex#18385's own
133
+ * `SCENARIO_DASH_TOOL` test proves the REWRITTEN form is what reaches hooks:
134
+ * the `echo-tool` tool of server `rmcp` is delivered to hooks as
135
+ * `mcp__rmcp__echo_tool`. Confirmed independently in THIS repo's terrain:
136
+ * `~/.codex/config.toml` declares `[mcp_servers.fuse-browser]` (dash) while
137
+ * Codex session logs and this harness's own dual-marketplace hook payloads
138
+ * (`~/.codex/plugins/.../hooks.json` matchers) observe `mcp__fuse_browser__*`
139
+ * (underscore) — Claude never emits that form (0 occurrences across its
140
+ * transcripts vs 137x the dash form).
141
+ *
142
+ * The rewrite is deliberately NOT undone with a generic `_` -> `-` regex:
143
+ * openai/codex#15832 and #15565 document it as NON-INVERSIBLE — a server
144
+ * literally named `autok_local` collides with a dash-named `autok-local`
145
+ * once both pass through the same rewrite, and OpenAI's own fix was a closed
146
+ * canonical table, never a general regex. The SAME ambiguity exists on our
147
+ * side: a generic reversal would corrupt tool segments that legitimately
148
+ * contain an underscore already (`browser_screenshot`, `node_repl`,
149
+ * `build_sim`, …). So this module only reverses the FOUR entries proven
150
+ * above to matter to this repo's gates — every other segment passes through
151
+ * untouched.
152
+ * @packageDocumentation
153
+ */
154
+ /**
155
+ * Codex-mangled MCP server segment -> its real (dash) server name. Closed set
156
+ * — see module doc. `Object.create(null)` (never a `{}` literal): `serverKey`
157
+ * is an attacker-influenced string (an MCP server can register itself as
158
+ * `"__proto__"`/`"constructor"`/`"toString"`), and a `{}`-literal lookup by
159
+ * such a key returns the INHERITED `Object.prototype` member instead of
160
+ * `undefined` — an object/function, so `?? serverKey` never falls back and
161
+ * the result silently corrupts to `"mcp__[object Object]__…"` (proven in
162
+ * `test/mcp-tool-name.test.ts`, prototype-pollution-read case). A null-
163
+ * prototype object has no inherited members, so every lookup outside the two
164
+ * literal keys below is a clean miss.
165
+ */
166
+ const SERVER_ALIASES = Object.assign(Object.create(null), {
167
+ fuse_browser: "fuse-browser",
168
+ gemini_design: "gemini-design"
169
+ });
170
+ /**
171
+ * Codex-mangled MCP tool segment -> its real (dash) tool name. Both entries
172
+ * are `context7`-exclusive tool names — applied ONLY when the canonical
173
+ * server is `"context7"` (see the explicit guard in
174
+ * {@link canonicalizeMcpToolName}), never globally. A same-named tool on any
175
+ * other server (e.g. a hypothetical `exa__query_docs`) passes through
176
+ * untouched: openai/codex#15832 documents exactly this class of collision as
177
+ * the reason the rewrite must stay a closed, scoped table, never a blanket
178
+ * one. Closed set, same null-prototype rationale as {@link SERVER_ALIASES}.
179
+ */
180
+ const TOOL_ALIASES = Object.assign(Object.create(null), {
181
+ query_docs: "query-docs",
182
+ resolve_library_id: "resolve-library-id"
183
+ });
184
+ /**
185
+ * Canonicalize a Codex-only MCP tool-name alias to its dash form. Scoped to
186
+ * `id === "codex"` — every other harness id passes through unchanged. The
187
+ * server segment is rewritten via the closed {@link SERVER_ALIASES} table;
188
+ * the tool segment is rewritten via {@link TOOL_ALIASES} ONLY when the
189
+ * (already-resolved) canonical server is `"context7"` — every other server's
190
+ * tool segment is left untouched even if it happens to share a name with a
191
+ * context7 tool. Every other `mcp__<server>__<tool>` segment (or non-MCP
192
+ * tool name) is returned byte-identical (see `test/mcp-tool-name.test.ts`
193
+ * for the non-regression proof across ids, trap tool names, and the
194
+ * server-scoping cases).
195
+ * @param id - Harness adapter id (e.g. "codex", "claude-code", "kimi").
196
+ * @param tool - Raw `tool_name` from the hook payload.
197
+ */
198
+ function canonicalizeMcpToolName(id, tool) {
199
+ if (id !== "codex") return tool;
200
+ const parts = tool.split("__");
201
+ if (parts.length < 3 || parts[0] !== "mcp") return tool;
202
+ const serverKey = parts[1] ?? "";
203
+ const toolKey = parts.slice(2).join("__");
204
+ const server = SERVER_ALIASES[serverKey] ?? serverKey;
205
+ return `mcp__${server}__${server === "context7" ? TOOL_ALIASES[toolKey] ?? toolKey : toolKey}`;
206
+ }
207
+ //#endregion
208
+ //#region src/adapters/codex/permission-mode.ts
209
+ /**
210
+ * Codex maps `AskForApproval::Never` -> `permission_mode: "bypassPermissions"`
211
+ * in its hook payload (codex-rs/core/src/hook_runtime.rs::hook_permission_mode)
212
+ * — the only value that isolates `never`; the other three approval policies
213
+ * (`untrusted`, `on-failure`, `on-request`) all collapse to `"default"`.
214
+ * Verified at openai/codex@342e4d4b, hook_runtime.rs run_pre_tool_use_hooks +
215
+ * pre_tool_use.rs PreToolUseRequest. Undocumented implementation detail, not
216
+ * a public contract — see the mapping-regression test that pins this string.
217
+ * @param permissionMode - The payload's `permission_mode` field, if present.
218
+ * @returns True only on an EXACT match — fail-closed. A near-miss
219
+ * (`"BypassPermissions"`, `"bypassPermissions "`, or a substring match) must
220
+ * never accidentally grant the neverApproval exemption.
221
+ */
222
+ function isBypassPermissions(permissionMode) {
223
+ return permissionMode === "bypassPermissions";
224
+ }
225
+ //#endregion
226
+ export { parseApplyPatch as i, canonicalizeMcpToolName as n, canonicalizeCodexShellTool as r, isBypassPermissions as t };
@@ -1,2 +1,2 @@
1
- import { $ as detectCreationIntent, $t as countFrameworkCodeLines, A as TreeEntry, At as APEX_GATES, B as loadApexTaskState, Bt as evaluate, C as maskCommentsAndStrings, Ct as protectedPathGuard, D as descFromText, Dt as securityGuard, E as missingSeoElements, Et as LabeledPattern, F as EXCLUDE_DIRS, Ft as brainstormGate, G as detectRequiredSkills, Gt as PROJECT_INSTALL, H as buildApexInstruction, Ht as PolicyResult, I as PROJECT_INDICATORS, It as docConsultedGate, J as SKILL_TRIGGERS, Jt as isRalphMode, K as skillTriggerGate, Kt as RALPH_SAFE, L as ApexTaskState, Lt as evaluateApex, M as parseEntry, Mt as ApexGate, N as parseBodyDesc, Nt as POST_AUTH_GATES, O as firstComment, Ot as Guard, P as parseField, Pt as PRE_AUTH_GATES, Q as capVerbosity, Qt as SOLID_REF, R as buildApexTaskContext, Rt as freshnessGate, S as LexProfile, St as PROTECTED_GIT_RE, T as isHtmlLike, Tt as CRITICAL_PATTERNS, U as buildClaudeMdContext, Ut as GIT_ASK, V as DEV_VERBS, Vt as PolicyContext, W as detectClaudeMdProjectType, Wt as GIT_BLOCKED, X as MAX_EXA_RESULTS, Xt as FileSizeVerdict, Y as frameworkSolidGate, Yt as matchPatterns, Z as MAX_TOKENS, Zt as PLUGINS_DIR, _ as isStoresPath, _t as CODE_REDIRECT, a as countStores, an as ProjectType, at as installGuard, b as langOfPath, bt as SESSION_STATE_FRAGMENT, c as InterfaceDeclLevel, cn as isApexCommand, ct as PHP_DECL_RE, d as interfaceDeclLevel, dt as SWIFT_PROTO_RE, en as countLines, et as FAIL_CLOSED, f as LangFamily, ft as TS_DECL_RE, g as isQueryPath, gt as CODE_MUTATORS, h as isInterfacesPath, ht as ASK_WRITERS, i as StoreLib, in as ModularArchitecture, it as runGuards, j as parseEnrichment, jt as ApexContext, k as firstHeading, kt as GuardContext, l as declaresExportedTypeAlias, ln as requiredArchSkill, lt as PY_MODEL_RE, m as isHooksPath, mt as bashWriteGuard, n as importsTanstackQuery, nn as detectFramework, nt as clearUserGuards, o as declaresStore, on as detectModularArchitecture, ot as GO_DECL_RE, p as isComponentsPath, pt as interfaceSeparationGuard, q as usesTailwindUtilities, qt as SYSTEM_INSTALL, r as queryCapActive, rn as DEV_KEYWORDS, rt as registerGuard, s as declaresCustomHook, sn as detectProjectType, st as JAVA_DECL_RE, t as declaresQueryHook, tn as evaluateFileSize, tt as GUARDS, u as declaresInterface, ut as RUST_DECL_RE, v as isTypesPath, vt as FILE_REDIRECT, w as maskCommentsOnly, wt as ASK_PATTERNS, x as lexProfileOf, xt as PROTECTED_FRAGMENTS, y as isVendorPath, yt as SAFE_PREFIXES, z as buildApexTaskInjection, zt as solidReadGate } from "../index-DBgnIZn9.mjs";
1
+ import { $ as detectCreationIntent, $t as countFrameworkCodeLines, A as TreeEntry, At as APEX_GATES, B as loadApexTaskState, Bt as evaluate, C as maskCommentsAndStrings, Ct as protectedPathGuard, D as descFromText, Dt as securityGuard, E as missingSeoElements, Et as LabeledPattern, F as EXCLUDE_DIRS, Ft as brainstormGate, G as detectRequiredSkills, Gt as PROJECT_INSTALL, H as buildApexInstruction, Ht as PolicyResult, I as PROJECT_INDICATORS, It as docConsultedGate, J as SKILL_TRIGGERS, Jt as isRalphMode, K as skillTriggerGate, Kt as RALPH_SAFE, L as ApexTaskState, Lt as evaluateApex, M as parseEntry, Mt as ApexGate, N as parseBodyDesc, Nt as POST_AUTH_GATES, O as firstComment, Ot as Guard, P as parseField, Pt as PRE_AUTH_GATES, Q as capVerbosity, Qt as SOLID_REF, R as buildApexTaskContext, Rt as freshnessGate, S as LexProfile, St as PROTECTED_GIT_RE, T as isHtmlLike, Tt as CRITICAL_PATTERNS, U as buildClaudeMdContext, Ut as GIT_ASK, V as DEV_VERBS, Vt as PolicyContext, W as detectClaudeMdProjectType, Wt as GIT_BLOCKED, X as MAX_EXA_RESULTS, Xt as FileSizeVerdict, Y as frameworkSolidGate, Yt as matchPatterns, Z as MAX_TOKENS, Zt as PLUGINS_DIR, _ as isStoresPath, _t as CODE_REDIRECT, a as countStores, an as ProjectType, at as installGuard, b as langOfPath, bt as SESSION_STATE_FRAGMENT, c as InterfaceDeclLevel, cn as isApexCommand, ct as PHP_DECL_RE, d as interfaceDeclLevel, dt as SWIFT_PROTO_RE, en as countLines, et as FAIL_CLOSED, f as LangFamily, ft as TS_DECL_RE, g as isQueryPath, gt as CODE_MUTATORS, h as isInterfacesPath, ht as ASK_WRITERS, i as StoreLib, in as ModularArchitecture, it as runGuards, j as parseEnrichment, jt as ApexContext, k as firstHeading, kt as GuardContext, l as declaresExportedTypeAlias, ln as requiredArchSkill, lt as PY_MODEL_RE, m as isHooksPath, mt as bashWriteGuard, n as importsTanstackQuery, nn as detectFramework, nt as clearUserGuards, o as declaresStore, on as detectModularArchitecture, ot as GO_DECL_RE, p as isComponentsPath, pt as interfaceSeparationGuard, q as usesTailwindUtilities, qt as SYSTEM_INSTALL, r as queryCapActive, rn as DEV_KEYWORDS, rt as registerGuard, s as declaresCustomHook, sn as detectProjectType, st as JAVA_DECL_RE, t as declaresQueryHook, tn as evaluateFileSize, tt as GUARDS, u as declaresInterface, ut as RUST_DECL_RE, v as isTypesPath, vt as FILE_REDIRECT, w as maskCommentsOnly, wt as ASK_PATTERNS, x as lexProfileOf, xt as PROTECTED_FRAGMENTS, y as isVendorPath, yt as SAFE_PREFIXES, z as buildApexTaskInjection, zt as solidReadGate } from "../index-B8PG82su.mjs";
2
2
  export { APEX_GATES, ASK_PATTERNS, ASK_WRITERS, ApexContext, ApexGate, ApexTaskState, CODE_MUTATORS, CODE_REDIRECT, CRITICAL_PATTERNS, DEV_KEYWORDS, DEV_VERBS, EXCLUDE_DIRS, FAIL_CLOSED, FILE_REDIRECT, FileSizeVerdict, GIT_ASK, GIT_BLOCKED, GO_DECL_RE, GUARDS, Guard, GuardContext, InterfaceDeclLevel, JAVA_DECL_RE, LabeledPattern, LangFamily, LexProfile, MAX_EXA_RESULTS, MAX_TOKENS, ModularArchitecture, PHP_DECL_RE, PLUGINS_DIR, POST_AUTH_GATES, PRE_AUTH_GATES, PROJECT_INDICATORS, PROJECT_INSTALL, PROTECTED_FRAGMENTS, PROTECTED_GIT_RE, PY_MODEL_RE, type PolicyContext, type PolicyResult, ProjectType, RALPH_SAFE, RUST_DECL_RE, SAFE_PREFIXES, SESSION_STATE_FRAGMENT, SKILL_TRIGGERS, SOLID_REF, SWIFT_PROTO_RE, SYSTEM_INSTALL, StoreLib, TS_DECL_RE, TreeEntry, bashWriteGuard, brainstormGate, buildApexInstruction, buildApexTaskContext, buildApexTaskInjection, buildClaudeMdContext, capVerbosity, clearUserGuards, countFrameworkCodeLines, countLines, countStores, declaresCustomHook, declaresExportedTypeAlias, declaresInterface, declaresQueryHook, declaresStore, descFromText, detectClaudeMdProjectType, detectCreationIntent, detectFramework, detectModularArchitecture, detectProjectType, detectRequiredSkills, docConsultedGate, evaluate, evaluateApex, evaluateFileSize, firstComment, firstHeading, frameworkSolidGate, freshnessGate, importsTanstackQuery, installGuard, interfaceDeclLevel, interfaceSeparationGuard, isApexCommand, isComponentsPath, isHooksPath, isHtmlLike, isInterfacesPath, isQueryPath, isRalphMode, isStoresPath, isTypesPath, isVendorPath, langOfPath, lexProfileOf, loadApexTaskState, maskCommentsAndStrings, maskCommentsOnly, matchPatterns, missingSeoElements, parseBodyDesc, parseEnrichment, parseEntry, parseField, protectedPathGuard, queryCapActive, registerGuard, requiredArchSkill, runGuards, securityGuard, skillTriggerGate, solidReadGate, usesTailwindUtilities };