@fusengine/harness 0.1.90 → 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 (417) 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 +3 -2
  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-CBaOcFZq.mjs → handle-C43gA-Pr.mjs} +701 -134
  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/policy/index.d.mts +1 -1
  29. package/dist/policy/index.mjs +2 -2
  30. package/dist/prompt/index.d.mts +1 -1
  31. package/dist/{run-CdIlUtjv.mjs → run-DkrzC0gb.mjs} +1 -1
  32. package/dist/{run-TAXNRSpD.mjs → run-GHAMqcOn.mjs} +26 -3
  33. package/dist/runtime/index.d.mts +27 -16
  34. package/dist/runtime/index.mjs +2 -2
  35. package/dist/{types-C0-igRKr.d.mts → types-Bh0jEF3_.d.mts} +2 -0
  36. package/dist/{validate-DZFtAbLP.mjs → validate-KjZ1X9tH.mjs} +1 -1
  37. package/package.json +3 -2
  38. package/src/adapters/claude/index.ts +92 -0
  39. package/src/adapters/cline/index.ts +36 -0
  40. package/src/adapters/codex/apply-patch.ts +94 -0
  41. package/src/adapters/codex/index.ts +84 -0
  42. package/src/adapters/codex/permission-mode.ts +16 -0
  43. package/src/adapters/cursor/context.ts +46 -0
  44. package/src/adapters/cursor/events.ts +38 -0
  45. package/src/adapters/cursor/index.ts +43 -0
  46. package/src/adapters/cursor/interfaces/types.ts +88 -0
  47. package/src/adapters/cursor/native-response.ts +158 -0
  48. package/src/adapters/cursor/normalize.ts +123 -0
  49. package/src/adapters/cursor/respond.ts +123 -0
  50. package/src/adapters/gemini/index.ts +36 -0
  51. package/src/adapters/hermes/index.ts +55 -0
  52. package/src/adapters/hermes/interfaces/types.ts +26 -0
  53. package/src/adapters/kimi/index.ts +96 -0
  54. package/src/adapters/kimi/interfaces/types.ts +55 -0
  55. package/src/cache/compact.ts +55 -0
  56. package/src/cache/index.ts +5 -0
  57. package/src/cache/io.ts +38 -0
  58. package/src/cache/mcp-response.ts +39 -0
  59. package/src/cache/mcp-store.ts +70 -0
  60. package/src/cache/store.ts +93 -0
  61. package/src/changelog/fetch.ts +79 -0
  62. package/src/cli/bin.ts +100 -0
  63. package/src/cli/cursor-event-scanner.ts +175 -0
  64. package/src/cli/cursor-stdin-reader.ts +65 -0
  65. package/src/cli/doctor.ts +96 -0
  66. package/src/cli/hook-io.ts +130 -0
  67. package/src/cli/hook-sound.ts +49 -0
  68. package/src/cli/index.ts +1 -0
  69. package/src/cli/json-primitive-scanner.ts +83 -0
  70. package/src/cli/run.ts +36 -0
  71. package/src/cli/scope.ts +31 -0
  72. package/src/codex-rules/build.ts +63 -0
  73. package/src/codex-rules/index.ts +8 -0
  74. package/src/codex-rules/mapping.ts +42 -0
  75. package/src/codex-rules/rules/absolute-paths.ts +52 -0
  76. package/src/codex-rules/rules/ask.ts +44 -0
  77. package/src/codex-rules/rules/chmod-ask.ts +57 -0
  78. package/src/codex-rules/rules/dd.ts +23 -0
  79. package/src/codex-rules/rules/diskutil.ts +33 -0
  80. package/src/codex-rules/rules/mkfs.ts +42 -0
  81. package/src/codex-rules/rules/privilege.ts +49 -0
  82. package/src/codex-rules/rules/remote-fetch.ts +31 -0
  83. package/src/codex-rules/rules/rm-variants.ts +58 -0
  84. package/src/codex-rules/rules/single-commands.ts +57 -0
  85. package/src/codex-rules/skip-list.ts +25 -0
  86. package/src/codex-rules/starlark.ts +46 -0
  87. package/src/codex-rules/types.ts +36 -0
  88. package/src/config/dotenv.ts +55 -0
  89. package/src/config/env.ts +10 -0
  90. package/src/config/home-dir.ts +36 -0
  91. package/src/config/index.ts +5 -0
  92. package/src/config/layout.ts +52 -0
  93. package/src/config/limits.ts +56 -0
  94. package/src/config/ttl.ts +30 -0
  95. package/src/detect/harness.ts +73 -0
  96. package/src/detect/index.ts +1 -0
  97. package/src/detect/interfaces/types.ts +18 -0
  98. package/src/freshness/agent-evidence-record.ts +95 -0
  99. package/src/freshness/agent-evidence.ts +95 -0
  100. package/src/freshness/codex-spawn-evidence.ts +91 -0
  101. package/src/freshness/doc-helpers.ts +90 -0
  102. package/src/freshness/evidence-harvest-io.ts +72 -0
  103. package/src/freshness/evidence-harvest.ts +61 -0
  104. package/src/freshness/explore-tools.ts +95 -0
  105. package/src/freshness/index.ts +2 -0
  106. package/src/freshness/query-framework.ts +73 -0
  107. package/src/freshness/ref-evidence.ts +49 -0
  108. package/src/freshness/ref-journal.ts +98 -0
  109. package/src/freshness/trivial-edit-counter.ts +30 -0
  110. package/src/index.ts +11 -0
  111. package/src/init/index.ts +2 -0
  112. package/src/init/run.ts +32 -0
  113. package/src/init/templates.ts +75 -0
  114. package/src/memory/gitignore.ts +14 -0
  115. package/src/memory/index.ts +3 -0
  116. package/src/memory/registry.ts +39 -0
  117. package/src/memory/session-roots.ts +99 -0
  118. package/src/memory/state.ts +58 -0
  119. package/src/policy/apex-authorization.ts +100 -0
  120. package/src/policy/apex-gates.ts +91 -0
  121. package/src/policy/apex-target-steps.ts +73 -0
  122. package/src/policy/apex-target.ts +49 -0
  123. package/src/policy/apex-task-context.ts +81 -0
  124. package/src/policy/apex.ts +94 -0
  125. package/src/policy/cartographer/build-tree.ts +69 -0
  126. package/src/policy/cartographer/describe.ts +53 -0
  127. package/src/policy/cartographer/entry.ts +38 -0
  128. package/src/policy/cartographer/frontmatter.ts +48 -0
  129. package/src/policy/cartographer/indicators.ts +34 -0
  130. package/src/policy/claude-md-context.ts +66 -0
  131. package/src/policy/conventions/index.ts +11 -0
  132. package/src/policy/conventions/interfaces.ts +71 -0
  133. package/src/policy/conventions/langs.ts +53 -0
  134. package/src/policy/conventions/query.ts +49 -0
  135. package/src/policy/conventions/react-hooks.ts +18 -0
  136. package/src/policy/conventions/store-or-query.ts +21 -0
  137. package/src/policy/conventions/stores.ts +56 -0
  138. package/src/policy/conventions/strip.ts +87 -0
  139. package/src/policy/conventions/verdict.ts +38 -0
  140. package/src/policy/creation-intent.ts +11 -0
  141. package/src/policy/deny-loop.ts +88 -0
  142. package/src/policy/design/allowed-write.ts +28 -0
  143. package/src/policy/design/content-checks.ts +45 -0
  144. package/src/policy/design/corpus-fs.ts +21 -0
  145. package/src/policy/design/corpus-resolve-cache.ts +49 -0
  146. package/src/policy/design/corpus-resolve.ts +99 -0
  147. package/src/policy/design/corpus.ts +92 -0
  148. package/src/policy/design/design-system-rules.ts +45 -0
  149. package/src/policy/design/flag.ts +30 -0
  150. package/src/policy/design/gates-pipeline.ts +105 -0
  151. package/src/policy/design/gates.ts +87 -0
  152. package/src/policy/design/screenshot-tools.ts +24 -0
  153. package/src/policy/design/skill-evidence.ts +34 -0
  154. package/src/policy/design/skill-gate.ts +81 -0
  155. package/src/policy/design/skill-triggers.ts +51 -0
  156. package/src/policy/design/state.ts +92 -0
  157. package/src/policy/design/template-urls.ts +54 -0
  158. package/src/policy/design/transitions.ts +68 -0
  159. package/src/policy/detect-claude-md-project-type.ts +32 -0
  160. package/src/policy/detect-framework.ts +99 -0
  161. package/src/policy/detect-primitive-checks.ts +100 -0
  162. package/src/policy/detect-primitive-lib.ts +55 -0
  163. package/src/policy/detect-project.ts +99 -0
  164. package/src/policy/edit-outcome.ts +53 -0
  165. package/src/policy/evaluate.ts +81 -0
  166. package/src/policy/expert-agents.ts +60 -0
  167. package/src/policy/file-size-scope.ts +32 -0
  168. package/src/policy/file-size.ts +99 -0
  169. package/src/policy/framework-solid-exclude.ts +52 -0
  170. package/src/policy/framework-solid-extended.ts +93 -0
  171. package/src/policy/framework-solid-gates-systems.ts +99 -0
  172. package/src/policy/framework-solid-gates.ts +98 -0
  173. package/src/policy/framework-solid.ts +88 -0
  174. package/src/policy/gemini-mcp-gate.ts +83 -0
  175. package/src/policy/git-gates.ts +40 -0
  176. package/src/policy/guards/bash-command-anchor.ts +40 -0
  177. package/src/policy/guards/bash-write-patterns.ts +140 -0
  178. package/src/policy/guards/bash-write-redirects.ts +201 -0
  179. package/src/policy/guards/bash-write-safe-paths.ts +62 -0
  180. package/src/policy/guards/bash-write.ts +76 -0
  181. package/src/policy/guards/context.ts +12 -0
  182. package/src/policy/guards/index.ts +61 -0
  183. package/src/policy/guards/install.ts +22 -0
  184. package/src/policy/guards/interface-separation-ext.ts +41 -0
  185. package/src/policy/guards/interface-separation.ts +100 -0
  186. package/src/policy/guards/protected-path.ts +100 -0
  187. package/src/policy/guards/security.ts +97 -0
  188. package/src/policy/index.ts +19 -0
  189. package/src/policy/interfaces/types.ts +46 -0
  190. package/src/policy/js-gate-route.ts +51 -0
  191. package/src/policy/lessons/lesson-gate.ts +0 -0
  192. package/src/policy/lessons/trigger-index.ts +84 -0
  193. package/src/policy/lessons/types.ts +31 -0
  194. package/src/policy/module-layout.ts +31 -0
  195. package/src/policy/nearest-manifest.ts +75 -0
  196. package/src/policy/never-approval.ts +95 -0
  197. package/src/policy/patterns.ts +80 -0
  198. package/src/policy/seo/validate.ts +51 -0
  199. package/src/policy/shadcn-project.ts +22 -0
  200. package/src/policy/shadcn-skill-gate.ts +97 -0
  201. package/src/policy/shell-read-refs.ts +96 -0
  202. package/src/policy/skill-path.ts +46 -0
  203. package/src/policy/skill-patterns/laravel.ts +40 -0
  204. package/src/policy/skill-patterns/nextjs.ts +29 -0
  205. package/src/policy/skill-patterns/react.ts +27 -0
  206. package/src/policy/skill-patterns/shadcn-subskills.ts +33 -0
  207. package/src/policy/skill-patterns/shadcn.ts +66 -0
  208. package/src/policy/skill-patterns/swift.ts +30 -0
  209. package/src/policy/skill-patterns/tailwind.ts +40 -0
  210. package/src/policy/skill-source.ts +52 -0
  211. package/src/policy/skill-trigger-patterns.ts +33 -0
  212. package/src/policy/skill-triggers.ts +108 -0
  213. package/src/policy/tailwind-skill-gate.ts +63 -0
  214. package/src/policy/trivial-edits.ts +52 -0
  215. package/src/policy/verbosity.ts +39 -0
  216. package/src/prompt/index.ts +1 -0
  217. package/src/prompt/types.ts +36 -0
  218. package/src/refs/discover.ts +69 -0
  219. package/src/refs/frontmatter.ts +24 -0
  220. package/src/refs/index.ts +4 -0
  221. package/src/refs/loader.ts +59 -0
  222. package/src/refs/ref-key.ts +41 -0
  223. package/src/refs/router.ts +63 -0
  224. package/src/refs/types.ts +25 -0
  225. package/src/runtime/activity.ts +99 -0
  226. package/src/runtime/apply-patch-gate.ts +41 -0
  227. package/src/runtime/burst-window.ts +21 -0
  228. package/src/runtime/codex-shell-tool.ts +37 -0
  229. package/src/runtime/command-string.ts +37 -0
  230. package/src/runtime/confirm/codex-confirm.ts +126 -0
  231. package/src/runtime/confirm/codex-prompt-origin.ts +16 -0
  232. package/src/runtime/confirm/confirm-code.ts +33 -0
  233. package/src/runtime/confirm/confirm-gate.ts +65 -0
  234. package/src/runtime/confirm/confirm-irreversible.ts +32 -0
  235. package/src/runtime/confirm/confirm-pending.ts +34 -0
  236. package/src/runtime/confirm/confirm-state.ts +56 -0
  237. package/src/runtime/confirm/confirm-subagent.ts +112 -0
  238. package/src/runtime/confirm/confirm-submit.ts +38 -0
  239. package/src/runtime/core-guards-active.ts +84 -0
  240. package/src/runtime/core-guards-wired.ts +47 -0
  241. package/src/runtime/deny-loop-store.ts +94 -0
  242. package/src/runtime/deny-notice.ts +52 -0
  243. package/src/runtime/design-cache-resolve.ts +51 -0
  244. package/src/runtime/design-content-gate.ts +95 -0
  245. package/src/runtime/design-files-gate.ts +114 -0
  246. package/src/runtime/design-helpers.ts +93 -0
  247. package/src/runtime/design-lifecycle.ts +39 -0
  248. package/src/runtime/design-read-credit.ts +28 -0
  249. package/src/runtime/design.ts +116 -0
  250. package/src/runtime/dev-context.ts +43 -0
  251. package/src/runtime/dry-patterns.ts +32 -0
  252. package/src/runtime/dry.ts +96 -0
  253. package/src/runtime/fragment-registry.ts +33 -0
  254. package/src/runtime/framework-skill-gate.ts +79 -0
  255. package/src/runtime/fs-cleanup.ts +71 -0
  256. package/src/runtime/gate-apex.ts +81 -0
  257. package/src/runtime/gate-helpers.ts +52 -0
  258. package/src/runtime/gate-input.ts +26 -0
  259. package/src/runtime/gate.ts +128 -0
  260. package/src/runtime/handle-post.ts +104 -0
  261. package/src/runtime/handle-pre.ts +137 -0
  262. package/src/runtime/handle-scope-async.ts +29 -0
  263. package/src/runtime/handle-types.ts +27 -0
  264. package/src/runtime/handle.ts +116 -0
  265. package/src/runtime/home-state.ts +55 -0
  266. package/src/runtime/index.ts +18 -0
  267. package/src/runtime/inform.ts +28 -0
  268. package/src/runtime/inject-budget-recap.ts +47 -0
  269. package/src/runtime/inject-budget.ts +81 -0
  270. package/src/runtime/inject-context.ts +85 -0
  271. package/src/runtime/inject-dedup-exclusive.ts +98 -0
  272. package/src/runtime/inject-dedup.ts +89 -0
  273. package/src/runtime/is-agent-tool.ts +19 -0
  274. package/src/runtime/lifecycle/agent-files.ts +49 -0
  275. package/src/runtime/lifecycle/agent-memory.ts +82 -0
  276. package/src/runtime/lifecycle/agent-transcript.ts +80 -0
  277. package/src/runtime/lifecycle/aipilot/analytics.ts +99 -0
  278. package/src/runtime/lifecycle/aipilot/apex-task-store.ts +61 -0
  279. package/src/runtime/lifecycle/aipilot/cache-base.ts +48 -0
  280. package/src/runtime/lifecycle/aipilot/cache-doc.ts +100 -0
  281. package/src/runtime/lifecycle/aipilot/cache-lessons.ts +58 -0
  282. package/src/runtime/lifecycle/aipilot/cache-test.ts +70 -0
  283. package/src/runtime/lifecycle/aipilot/curate-lessons.ts +64 -0
  284. package/src/runtime/lifecycle/aipilot/dispatch-aipilot.ts +100 -0
  285. package/src/runtime/lifecycle/aipilot/doc-cache-gate.ts +69 -0
  286. package/src/runtime/lifecycle/aipilot/inject-apex.ts +98 -0
  287. package/src/runtime/lifecycle/aipilot/inject-doc.ts +62 -0
  288. package/src/runtime/lifecycle/aipilot/inject-explore.ts +64 -0
  289. package/src/runtime/lifecycle/aipilot/inject-lessons.ts +61 -0
  290. package/src/runtime/lifecycle/aipilot/inject-test.ts +48 -0
  291. package/src/runtime/lifecycle/aipilot/lesson-archive.ts +60 -0
  292. package/src/runtime/lifecycle/aipilot/lesson-inject.ts +98 -0
  293. package/src/runtime/lifecycle/aipilot/lesson-parse.ts +74 -0
  294. package/src/runtime/lifecycle/aipilot/lessons.ts +72 -0
  295. package/src/runtime/lifecycle/aipilot/promote-global-lessons.ts +92 -0
  296. package/src/runtime/lifecycle/aipilot/solid-compliance.ts +69 -0
  297. package/src/runtime/lifecycle/aipilot/solid-notice.ts +47 -0
  298. package/src/runtime/lifecycle/aipilot/solid-transcript.ts +60 -0
  299. package/src/runtime/lifecycle/aipilot/source-scan.ts +56 -0
  300. package/src/runtime/lifecycle/aipilot/sync-task.ts +75 -0
  301. package/src/runtime/lifecycle/aipilot/transcript.ts +88 -0
  302. package/src/runtime/lifecycle/aipilot/types.ts +72 -0
  303. package/src/runtime/lifecycle/auto-document-reads.ts +73 -0
  304. package/src/runtime/lifecycle/cartographer/detect.ts +57 -0
  305. package/src/runtime/lifecycle/cartographer/ecosystem-map.ts +56 -0
  306. package/src/runtime/lifecycle/cartographer/fs-util.ts +64 -0
  307. package/src/runtime/lifecycle/cartographer/merge.ts +51 -0
  308. package/src/runtime/lifecycle/cartographer/project-map.ts +49 -0
  309. package/src/runtime/lifecycle/cartographer/scan-hooks.ts +48 -0
  310. package/src/runtime/lifecycle/cartographer/scan.ts +81 -0
  311. package/src/runtime/lifecycle/cartographer/session-start.ts +33 -0
  312. package/src/runtime/lifecycle/cartographer/track-enrichment.ts +45 -0
  313. package/src/runtime/lifecycle/cartographer/write-plugin-map.ts +43 -0
  314. package/src/runtime/lifecycle/cartographer/write-tree.ts +44 -0
  315. package/src/runtime/lifecycle/changelog-research.ts +43 -0
  316. package/src/runtime/lifecycle/check-file-size.ts +61 -0
  317. package/src/runtime/lifecycle/codex-resync/fingerprint.ts +63 -0
  318. package/src/runtime/lifecycle/codex-resync/lock.ts +46 -0
  319. package/src/runtime/lifecycle/codex-resync/managed-destination.ts +39 -0
  320. package/src/runtime/lifecycle/codex-resync/materialize-agents.ts +57 -0
  321. package/src/runtime/lifecycle/codex-resync/plugin-files.ts +65 -0
  322. package/src/runtime/lifecycle/codex-resync/plugin-roots.ts +62 -0
  323. package/src/runtime/lifecycle/codex-resync/resync.ts +45 -0
  324. package/src/runtime/lifecycle/codex-resync/symlink-commands.ts +25 -0
  325. package/src/runtime/lifecycle/dispatch.ts +109 -0
  326. package/src/runtime/lifecycle/failure-lesson.ts +51 -0
  327. package/src/runtime/lifecycle/index.ts +34 -0
  328. package/src/runtime/lifecycle/inject-rules.ts +50 -0
  329. package/src/runtime/lifecycle/instructions-loaded.ts +22 -0
  330. package/src/runtime/lifecycle/kimi-rules-native.ts +44 -0
  331. package/src/runtime/lifecycle/lessons/dispatch.ts +88 -0
  332. package/src/runtime/lifecycle/lessons/reminder.ts +89 -0
  333. package/src/runtime/lifecycle/lessons/state.ts +23 -0
  334. package/src/runtime/lifecycle/memory/agent-lesson.ts +35 -0
  335. package/src/runtime/lifecycle/memory/capture-error.ts +41 -0
  336. package/src/runtime/lifecycle/memory/client.ts +65 -0
  337. package/src/runtime/lifecycle/memory/dispatch.ts +42 -0
  338. package/src/runtime/lifecycle/memory/recall.ts +30 -0
  339. package/src/runtime/lifecycle/memory/salience.ts +31 -0
  340. package/src/runtime/lifecycle/memory/state.ts +49 -0
  341. package/src/runtime/lifecycle/memory/track-ops.ts +15 -0
  342. package/src/runtime/lifecycle/post-compact.ts +38 -0
  343. package/src/runtime/lifecycle/post-edit-ts.ts +49 -0
  344. package/src/runtime/lifecycle/post-tracking.ts +40 -0
  345. package/src/runtime/lifecycle/pre-compact.ts +38 -0
  346. package/src/runtime/lifecycle/rules-root.ts +83 -0
  347. package/src/runtime/lifecycle/security/check-skill.ts +63 -0
  348. package/src/runtime/lifecycle/security/scan-patterns.ts +53 -0
  349. package/src/runtime/lifecycle/security/scan.ts +76 -0
  350. package/src/runtime/lifecycle/security/skill-state.ts +47 -0
  351. package/src/runtime/lifecycle/security/track-mcp.ts +29 -0
  352. package/src/runtime/lifecycle/security/track-skill-read.ts +31 -0
  353. package/src/runtime/lifecycle/seo/post-tool-use.ts +45 -0
  354. package/src/runtime/lifecycle/session-end.ts +17 -0
  355. package/src/runtime/lifecycle/session-start.ts +57 -0
  356. package/src/runtime/lifecycle/snapshot/board.ts +27 -0
  357. package/src/runtime/lifecycle/snapshot/format.ts +60 -0
  358. package/src/runtime/lifecycle/snapshot/git.ts +71 -0
  359. package/src/runtime/lifecycle/snapshot/index.ts +52 -0
  360. package/src/runtime/lifecycle/snapshot/version.ts +34 -0
  361. package/src/runtime/lifecycle/solid-detect.ts +56 -0
  362. package/src/runtime/lifecycle/stop-core.ts +35 -0
  363. package/src/runtime/lifecycle/subagent-cache.ts +61 -0
  364. package/src/runtime/lifecycle/task-completed.ts +94 -0
  365. package/src/runtime/lifecycle/teammate-idle-check.ts +63 -0
  366. package/src/runtime/lifecycle/teammate-idle.ts +28 -0
  367. package/src/runtime/lifecycle/tool-failure.ts +24 -0
  368. package/src/runtime/lifecycle/track-changes.ts +61 -0
  369. package/src/runtime/lifecycle/validate-solid.ts +70 -0
  370. package/src/runtime/lifecycle/validate-tailwind.ts +80 -0
  371. package/src/runtime/lifecycle-bridge.ts +74 -0
  372. package/src/runtime/mcp-key.ts +44 -0
  373. package/src/runtime/mcp-tool-name.ts +92 -0
  374. package/src/runtime/mcp.ts +91 -0
  375. package/src/runtime/modular.ts +77 -0
  376. package/src/runtime/normalize.ts +107 -0
  377. package/src/runtime/notices.ts +91 -0
  378. package/src/runtime/notification-sound.ts +49 -0
  379. package/src/runtime/notifications.ts +77 -0
  380. package/src/runtime/paths.ts +59 -0
  381. package/src/runtime/post-fanout.ts +41 -0
  382. package/src/runtime/post-outcome.ts +61 -0
  383. package/src/runtime/pre-allow.ts +97 -0
  384. package/src/runtime/precommit.ts +60 -0
  385. package/src/runtime/prompt-text.ts +38 -0
  386. package/src/runtime/receipt-capture.ts +34 -0
  387. package/src/runtime/record.ts +26 -0
  388. package/src/runtime/respond.ts +92 -0
  389. package/src/runtime/solid-file-size-gate.ts +58 -0
  390. package/src/runtime/solid-pre.ts +53 -0
  391. package/src/runtime/storage.ts +9 -0
  392. package/src/statusline/colors.ts +31 -0
  393. package/src/statusline/constants.ts +17 -0
  394. package/src/statusline/formatters.ts +54 -0
  395. package/src/statusline/index.ts +4 -0
  396. package/src/statusline/progress-bar.ts +46 -0
  397. package/src/tracking/codex-post-failure.ts +73 -0
  398. package/src/tracking/index.ts +2 -0
  399. package/src/tracking/integrity.ts +99 -0
  400. package/src/tracking/one-shot-dedup.ts +34 -0
  401. package/src/tracking/one-shot-failure.ts +42 -0
  402. package/src/tracking/one-shot-store.ts +95 -0
  403. package/src/tracking/one-shot.ts +93 -0
  404. package/src/tracking/receipts.ts +95 -0
  405. package/src/tracking/session-state.ts +94 -0
  406. package/src/tracking/store.ts +96 -0
  407. package/src/tracking/track-compact.ts +100 -0
  408. package/src/tracking/track-diff.ts +50 -0
  409. package/src/tracking/track-journal.ts +97 -0
  410. package/src/tracking/track-lock-sync.ts +83 -0
  411. package/src/tracking/track-lock.ts +67 -0
  412. package/src/util/compact-json.ts +23 -0
  413. package/src/util/index.ts +2 -0
  414. package/src/util/json-io.ts +47 -0
  415. package/src/util/project-root.ts +41 -0
  416. package/src/util/runtime-io.ts +85 -0
  417. package/src/util/semver.ts +30 -0
@@ -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 };
@@ -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 };
@@ -1,5 +1,5 @@
1
- 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";
1
+ 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";
2
2
  import { d as countFrameworkCodeLines, f as countLines, l as PLUGINS_DIR, p as evaluateFileSize, u as SOLID_REF } from "../home-state-oUGFB4ds.mjs";
3
- 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";
3
+ 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";
4
4
  import "../policy-la_KkjCS.mjs";
5
5
  export { APEX_GATES, ASK_PATTERNS, ASK_WRITERS, CODE_MUTATORS, CODE_REDIRECT, CRITICAL_PATTERNS, DEV_KEYWORDS, DEV_VERBS, EXCLUDE_DIRS, FAIL_CLOSED, FILE_REDIRECT, GIT_ASK, GIT_BLOCKED, GO_DECL_RE, GUARDS, JAVA_DECL_RE, MAX_EXA_RESULTS, MAX_TOKENS, PHP_DECL_RE, PLUGINS_DIR, POST_AUTH_GATES, PRE_AUTH_GATES, PROJECT_INDICATORS, PROJECT_INSTALL, PROTECTED_FRAGMENTS, PROTECTED_GIT_RE, PY_MODEL_RE, RALPH_SAFE, RUST_DECL_RE, SAFE_PREFIXES, SESSION_STATE_FRAGMENT, SKILL_TRIGGERS, SOLID_REF, SWIFT_PROTO_RE, SYSTEM_INSTALL, TS_DECL_RE, 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 };
@@ -1,3 +1,3 @@
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 "../index-CaxrMD1A.mjs";
3
3
  export { Prompt, PromptKind, formatPrompt };
@@ -1,5 +1,5 @@
1
1
  import { t as isCodeFile } from "./project-root-3kk7gCOp.mjs";
2
- import { t as evaluate } from "./evaluate-C1VSI5pb.mjs";
2
+ import { t as evaluate } from "./evaluate-CMiIqHeH.mjs";
3
3
  import { t as formatPrompt } from "./types-ernB1Dy3.mjs";
4
4
  import { execFileSync } from "node:child_process";
5
5
  //#region src/cli/run.ts
@@ -45,19 +45,42 @@ function codexInit(command) {
45
45
  type: "command",
46
46
  command
47
47
  }]
48
+ }],
49
+ UserPromptSubmit: [{
50
+ matcher: "",
51
+ hooks: [{
52
+ type: "command",
53
+ command
54
+ }]
48
55
  }]
49
56
  } })
50
57
  }];
51
58
  }
52
- /** Cursor: `.cursor/hooks.json` (version 1) — shell + tool gate + file-edit observe. */
59
+ /** Cursor: `.cursor/hooks.json` (version 1) — supported pre gates and post observers. */
53
60
  function cursorInit(command) {
54
61
  return [{
55
62
  path: ".cursor/hooks.json",
56
63
  content: json({
57
64
  version: 1,
58
65
  hooks: {
59
- beforeShellExecution: [{ command }],
60
- preToolUse: [{ command }],
66
+ beforeShellExecution: [{
67
+ command,
68
+ failClosed: true
69
+ }],
70
+ preToolUse: [{
71
+ command,
72
+ failClosed: true
73
+ }],
74
+ beforeMCPExecution: [{
75
+ command,
76
+ failClosed: true
77
+ }],
78
+ beforeReadFile: [{
79
+ command,
80
+ failClosed: true
81
+ }],
82
+ afterShellExecution: [{ command }],
83
+ postToolUse: [{ command }],
61
84
  afterFileEdit: [{ command }]
62
85
  }
63
86
  })
@@ -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 RefMeta } from "../types-CY5qT2X1.mjs";
3
3
  import { t as AgentQuality } from "../session-state-D5gLr66m.mjs";
4
4
  //#region src/runtime/paths.d.ts
@@ -124,6 +124,12 @@ declare const TRIVIAL_BUDGET = 4;
124
124
  * {@link withDenyLoop} rewrite an identical retried deny (decision unchanged).
125
125
  */
126
126
  declare function gate(input: GateInput): Promise<Prompt | null>;
127
+ /**
128
+ * Gate independent Cursor command candidates without merging their shell syntax.
129
+ * Stateful outcome bookkeeping runs once, against the command that decided the
130
+ * aggregate result. A single distinct candidate follows {@link gate} verbatim.
131
+ */
132
+ declare function gateCommandCandidates(input: GateInput, candidates: readonly string[]): Promise<Prompt | null>;
127
133
  //#endregion
128
134
  //#region src/runtime/dry.d.ts
129
135
  /** Extract long (>12 char) declared symbol names from new file content. */
@@ -153,14 +159,17 @@ declare function dryGate(tool: string, filePath: string, content: string | undef
153
159
  declare function preCommitGate(tool: string, command: string | undefined, cwd: string | undefined): Prompt | null;
154
160
  //#endregion
155
161
  //#region src/runtime/normalize.d.ts
156
- /** One file fanned out of a multi-file edit primitive (Codex `apply_patch`). */
162
+ /** One file/edit fanned out from Codex `apply_patch` or Cursor `afterFileEdit`. */
157
163
  interface NormalizedFile {
158
164
  filePath: string;
159
165
  content: string;
166
+ oldString?: string;
160
167
  op: "add" | "update" | "delete";
161
168
  }
162
169
  /** A hook event normalized across harnesses. */
163
170
  interface NormalizedEvent {
171
+ /** Native event name when the adapter exposes one explicitly (Cursor). */
172
+ eventName?: string;
164
173
  phase: "pre" | "post";
165
174
  tool: string;
166
175
  input: Record<string, unknown>;
@@ -170,22 +179,26 @@ interface NormalizedEvent {
170
179
  /** Edit only: the tool_input.old_string being replaced — lets the file-size gate (policy/evaluate.ts + policy/edit-outcome.ts) compute the post-edit outcome instead of judging the stale on-disk count alone. Undefined for Write (no such field) and for cline/apply_patch (parsed separately, no equivalent field). */
171
180
  oldString?: string;
172
181
  command?: string;
182
+ /** Cursor-only independent command candidates from beforeMCPExecution. */
183
+ commandCandidates?: string[];
173
184
  /** Subagent type, if the tool-use came from one (Explore/Plan are file-size-exempt). */
174
185
  agentType?: string;
175
186
  /** Harness-resolved permission mode (Claude emits it natively; Codex maps `AskForApproval::Never` to the same "bypassPermissions" string — see adapters/codex/permission-mode.ts). Generic field, Codex-only consumer today. */
176
187
  permissionMode?: string;
188
+ /** Codex logical tool-use identity, shared by sibling hook callbacks. */
189
+ toolUseId?: string;
190
+ /** Harness-reported working directory used to scope Codex authorization. */
191
+ cwd?: string;
192
+ /** Validated Cursor multi-root workspace paths in wire order. */
193
+ workspaceRoots?: string[];
177
194
  /**
178
- * Per-file changes when the tool is a multi-file edit primitive (Codex
179
- * `apply_patch`). Present ONLY for `apply_patch`; the file gates OR each
180
- * entry's verdict so one violating hunk blocks the whole envelope. Left
181
- * undefined for every other tool/harness (single-file `filePath`/`content`).
195
+ * Per-file changes for Codex `apply_patch` and per-edit changes for Cursor
196
+ * `afterFileEdit`; undefined for single-file events.
182
197
  */
183
198
  files?: NormalizedFile[];
184
199
  }
185
200
  /**
186
- * Normalize a harness hook payload into a uniform event. Handles Cline's nested
187
- * `preToolUse`/`postToolUse` shape and the top-level `tool_name`/`tool_input`
188
- * shape used by Claude, Codex, Gemini, and Cursor.
201
+ * Normalize a hook payload, including Cline nesting and native Cursor events.
189
202
  */
190
203
  declare function normalizeEvent(id: string, payload: Record<string, unknown>): NormalizedEvent;
191
204
  //#endregion
@@ -201,8 +214,8 @@ declare function normalizeEvent(id: string, payload: Record<string, unknown>): N
201
214
  * - gemini-cli/cline: their real hook schemas have no interactive "ask"
202
215
  * state (deny is the only blocking outcome), so `ask` and `inform` already
203
216
  * both resolve to non-blocking context injection — unchanged.
204
- * - cursor: `ask` keeps its current best-effort `permission:"ask"` shape;
205
- * only `inform` is fixed to a non-blocking `permission:"allow"` note.
217
+ * - cursor: `ask` degrades to a native `permission:"deny"` because Cursor does
218
+ * not reliably apply `ask` on `preToolUse`; `inform` stays non-blocking.
206
219
  * - hermes: delegated to the adapter's `toHermesResponse` — `block` ->
207
220
  * `{decision:"block",reason}`; `ask`/`inform` degrade to non-blocking
208
221
  * `{context}` (Hermes has no interactive "ask" state).
@@ -891,10 +904,8 @@ interface HandleOutcome {
891
904
  //#endregion
892
905
  //#region src/runtime/handle.d.ts
893
906
  /**
894
- * The full hook handler: on a PRE event it gates the tool-use (stateless guards
895
- * then APEX gates from the session track) and returns the native response; on a
896
- * POST event it records the activity into the track. The loop that makes the
897
- * package behave like the Claude plugin, on any harness.
907
+ * Run one hook and adapt every Cursor scope outcome at the common runtime exit.
908
+ * Other harnesses retain the core handler's stdout and exit status unchanged.
898
909
  */
899
910
  declare function handleHook(id: string, payload: Record<string, unknown>, opts: HandleOptions): Promise<HandleOutcome>;
900
911
  //#endregion
@@ -923,4 +934,4 @@ interface PreContext {
923
934
  */
924
935
  declare function handlePre(ctx: PreContext): Promise<HandleOutcome>;
925
936
  //#endregion
926
- export { Activity, DEFAULT_WINDOW_MS, DuplicationVerdict, type GateInput, type HandleOptions, type HandleOutcome, LifecycleInput, MCP_TTL_MS, McpIntercept, NormalizedEvent, NormalizedFile, PluginScope, PreContext, REQUIRED_AGENTS, SolidProfile, TRIVIAL_BUDGET, ToolEvent, WEBFETCH_TTL_MS, activityFor, aipilotPostToolUse, cacheQueryOf, cartoSessionStart, checkFileSize, claudeHome, claudeMdKey, cleanupSession, countFiles, countLoc, defaultStateDir, detectDuplication, detectSolidProfile, devContext, dispatchAipilot, dispatchLessons, dispatchLifecycle, dispatchMemory, dryGate, extractSymbols, fuseHarnessHome, fusengineCache, gate, generateEcosystemMap, generateProjectMap, getFileDesc, gitContext, handleHook, handlePre, harnessStateDir, injectRules, isMcpTool, isProject, isoUtc, lessonsArchiveFileFor, lessonsFileFor, lessonsStateFileFor, lifecycleStdout, listChildren, loadEnriched, loadSecurityState, loadSessionState, logToolFailure, mcpPostStore, mcpPreIntercept, mergeLines, normalizeEvent, postEditContext, postEditTypescript, postTrackingSideEffects, preCommitGate, projectContext, projectHash, promptSubmitContext, pruneEmptyDirs, purgeTtlTree, queryOf, readRules, recordActivity, removeOldFiles, respond, runSessionStartCleanups, sanitizeSessionId, saveApexState, saveSecurityState, saveSessionState, securityAdvisory, securityAdvisoryForPatch, securityStateDir, securityStatePath, seoPostToolUse, seoPostToolUseResponse, sessionStartCore, sessionStatePath, sessionsDir, solidDetectStart, subagentCacheContext, taskContext, todayUtc, trackAgentMemory, trackEnrichment, trackFile, trackMcpResearch, trackSessionChanges, trackSkillRead, trackWatchResearch, trimLogFile, validateRulesLoaded, validateSolidGate, validateTailwind, validateTeammateOutput, writePluginMap, writeTree };
937
+ export { Activity, DEFAULT_WINDOW_MS, DuplicationVerdict, type GateInput, type HandleOptions, type HandleOutcome, LifecycleInput, MCP_TTL_MS, McpIntercept, NormalizedEvent, NormalizedFile, PluginScope, PreContext, REQUIRED_AGENTS, SolidProfile, TRIVIAL_BUDGET, ToolEvent, WEBFETCH_TTL_MS, activityFor, aipilotPostToolUse, cacheQueryOf, cartoSessionStart, checkFileSize, claudeHome, claudeMdKey, cleanupSession, countFiles, countLoc, defaultStateDir, detectDuplication, detectSolidProfile, devContext, dispatchAipilot, dispatchLessons, dispatchLifecycle, dispatchMemory, dryGate, extractSymbols, fuseHarnessHome, fusengineCache, gate, gateCommandCandidates, generateEcosystemMap, generateProjectMap, getFileDesc, gitContext, handleHook, handlePre, harnessStateDir, injectRules, isMcpTool, isProject, isoUtc, lessonsArchiveFileFor, lessonsFileFor, lessonsStateFileFor, lifecycleStdout, listChildren, loadEnriched, loadSecurityState, loadSessionState, logToolFailure, mcpPostStore, mcpPreIntercept, mergeLines, normalizeEvent, postEditContext, postEditTypescript, postTrackingSideEffects, preCommitGate, projectContext, projectHash, promptSubmitContext, pruneEmptyDirs, purgeTtlTree, queryOf, readRules, recordActivity, removeOldFiles, respond, runSessionStartCleanups, sanitizeSessionId, saveApexState, saveSecurityState, saveSessionState, securityAdvisory, securityAdvisoryForPatch, securityStateDir, securityStatePath, seoPostToolUse, seoPostToolUseResponse, sessionStartCore, sessionStatePath, sessionsDir, solidDetectStart, subagentCacheContext, taskContext, todayUtc, trackAgentMemory, trackEnrichment, trackFile, trackMcpResearch, trackSessionChanges, trackSkillRead, trackWatchResearch, trimLogFile, validateRulesLoaded, validateSolidGate, validateTailwind, validateTeammateOutput, writePluginMap, writeTree };