@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,2 +1,2 @@
1
- import { a as denyResponse, c as informResponse, d as toClaudeResponse, i as contextResponse, l as readClaudeInput, n as attachSystemMessage, o as fileSizeGuard, r as blockResponse, s as guard, t as ClaudeHookInput, u as systemMessage } from "../../index-D4C2-IIc.mjs";
1
+ import { a as denyResponse, c as informResponse, d as toClaudeResponse, i as contextResponse, l as readClaudeInput, n as attachSystemMessage, o as fileSizeGuard, r as blockResponse, s as guard, t as ClaudeHookInput, u as systemMessage } from "../../index-SmKYkk2N.mjs";
2
2
  export { ClaudeHookInput, attachSystemMessage, blockResponse, contextResponse, denyResponse, fileSizeGuard, guard, informResponse, readClaudeInput, systemMessage, toClaudeResponse };
@@ -1,2 +1,2 @@
1
- import { a as fileSizeGuard, c as readClaudeInput, i as denyResponse, l as systemMessage, n as blockResponse, o as guard, r as contextResponse, s as informResponse, t as attachSystemMessage, u as toClaudeResponse } from "../../claude-5bC8TDAz.mjs";
1
+ import { a as fileSizeGuard, c as readClaudeInput, i as denyResponse, l as systemMessage, n as blockResponse, o as guard, r as contextResponse, s as informResponse, t as attachSystemMessage, u as toClaudeResponse } from "../../claude-Ckv2_TgP.mjs";
2
2
  export { attachSystemMessage, blockResponse, contextResponse, denyResponse, fileSizeGuard, guard, informResponse, readClaudeInput, systemMessage, toClaudeResponse };
@@ -1,4 +1,4 @@
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
3
  //#region src/adapters/cline/index.ts
4
4
  /**
@@ -1,5 +1,5 @@
1
- import { t as Prompt } from "../../types-C0-igRKr.mjs";
2
- import { a as denyResponse, c as informResponse, i as contextResponse, l as readClaudeInput, t as ClaudeHookInput } from "../../index-D4C2-IIc.mjs";
1
+ import { t as Prompt } from "../../types-Bh0jEF3_.mjs";
2
+ import { a as denyResponse, c as informResponse, i as contextResponse, l as readClaudeInput, t as ClaudeHookInput } from "../../index-SmKYkk2N.mjs";
3
3
  //#region src/adapters/codex/index.d.ts
4
4
  /**
5
5
  * Render a portable {@link Prompt} as a Codex hook response, `ask` → explicit deny.
@@ -1,8 +1,9 @@
1
- import { t as evaluate } from "../../evaluate-C1VSI5pb.mjs";
1
+ import { t as evaluate } from "../../evaluate-CMiIqHeH.mjs";
2
2
  import { f as countLines } from "../../home-state-oUGFB4ds.mjs";
3
3
  import { t as formatPrompt } from "../../types-ernB1Dy3.mjs";
4
- import { n as canonicalizeCodexShellTool, r as parseApplyPatch, t as isBypassPermissions } from "../../permission-mode-B0MUl7FT.mjs";
5
- import { _ as commandToString, c as readClaudeInput, i as denyResponse, r as contextResponse, s as informResponse } from "../../claude-5bC8TDAz.mjs";
4
+ import { i as parseApplyPatch, n as canonicalizeMcpToolName, r as canonicalizeCodexShellTool, t as isBypassPermissions } from "../../permission-mode-B-SFyR0X.mjs";
5
+ import { t as commandToString } from "../../command-string-CALMTnwN.mjs";
6
+ import { c as readClaudeInput, i as denyResponse, r as contextResponse, s as informResponse } from "../../claude-Ckv2_TgP.mjs";
6
7
  //#region src/adapters/codex/index.ts
7
8
  /**
8
9
  * OpenAI Codex CLI adapter (hook-mode). Codex's `PreToolUse` hook (since 2026)
@@ -51,7 +52,7 @@ function applyPatchPrompt(command) {
51
52
  function resolvePrompt(input) {
52
53
  const i = input.tool_input;
53
54
  const r = evaluate({
54
- tool: canonicalizeCodexShellTool("codex", input.tool_name ?? "Write"),
55
+ tool: canonicalizeCodexShellTool("codex", canonicalizeMcpToolName("codex", input.tool_name ?? "Write")),
55
56
  filePath: i?.file_path,
56
57
  content: i?.content ?? i?.new_string,
57
58
  command: commandToString(i?.command),
@@ -3,9 +3,15 @@
3
3
  interface CursorShellPayload {
4
4
  command?: string;
5
5
  cwd?: string;
6
+ sandbox?: boolean;
6
7
  workspace_roots?: string[];
7
8
  hook_event_name?: string;
8
9
  }
10
+ /** `preToolUse` stdin payload subset consumed by the adapter. */
11
+ interface CursorToolPayload {
12
+ tool_name?: string;
13
+ tool_input?: Record<string, unknown>;
14
+ }
9
15
  /** `afterFileEdit` stdin payload (subset). */
10
16
  interface CursorEditPayload {
11
17
  file_path?: string;
@@ -15,18 +21,10 @@ interface CursorEditPayload {
15
21
  }[];
16
22
  }
17
23
  /**
18
- * `afterFileEdit` stdout response. Its schema (cursor.com/docs/hooks#afterFileEdit)
19
- * is DELIBERATELY narrower than the "before" hooks: `permission` + `user_message`
20
- * only — there is NO `agent_message` and NO `updated_input`. Since the edit is
21
- * already on disk when this "after" hook fires, `deny` cannot revert it and the
22
- * correction reaches only the HUMAN (`user_message`), never the model — so this
23
- * path is strictly ADVISORY, not an enforceable gate.
24
+ * Empty afterFileEdit callback. Cursor documents no output fields for this
25
+ * post hook, so pre-execution permission fields are intentionally impossible.
24
26
  */
25
- interface CursorEditResponse {
26
- permission: "allow" | "deny";
27
- /** User-visible correction — snake_case (#141516); the only channel afterFileEdit exposes. */
28
- user_message?: string;
29
- }
27
+ type CursorEditResponse = Record<string, never>;
30
28
  /**
31
29
  * `beforeShellExecution` stdout response. Message keys are snake_case:
32
30
  * Cursor silently ignores camelCase `userMessage`/`agentMessage` (#141516,
@@ -35,7 +33,6 @@ interface CursorEditResponse {
35
33
  */
36
34
  interface CursorResponse {
37
35
  permission: "allow" | "deny" | "ask";
38
- continue?: boolean;
39
36
  /** User-visible message — snake_case required (#141516, #142589). */
40
37
  user_message?: string;
41
38
  /** Agent-visible message — snake_case required (#141516, #142589). */
@@ -45,24 +42,14 @@ interface CursorResponse {
45
42
  //#region src/adapters/cursor/index.d.ts
46
43
  /** Guard a shell command (git/install policies). */
47
44
  declare function beforeShellExecution(payload: CursorShellPayload): CursorResponse;
45
+ /** Guard a generic Cursor tool call using the same extraction as the runtime. */
46
+ declare function preToolUse(payload: CursorToolPayload): CursorResponse;
48
47
  /**
49
- * Advise on a file edit AFTER Cursor has written it — a HUMAN-VISIBLE audit note,
50
- * never a gate. This is an "after" hook: the edit is already on disk. On a
51
- * SOLID/DRY violation we surface the correction through `user_message` (the only
52
- * channel afterFileEdit exposes — no `agent_message`, so the model is never
53
- * re-informed) while ALWAYS returning `permission: "allow"`.
54
- *
55
- * We deliberately never emit `permission: "deny"` here, for two distinct reasons:
56
- * (1) structural — afterFileEdit was "informational only" at launch (Chacon,
57
- * Cursor hooks beta 1.7, 2025-09: no channel to stop the agent), and a post-write
58
- * deny has no documented rollback; (2) empirical — Cursor staff confirm the
59
- * deny-enforcement path is broken for file operations (forum.cursor.com/t/154377,
60
- * v2.6.18, 2026-03, open) — proven for file READS, plausibly the same for writes.
61
- * So a `deny` would be a false blocking signal; `allow` + `user_message` is the
62
- * only proven-safe shape.
48
+ * Complete an observed file edit without emitting pre-execution permission
49
+ * fields. Cursor does not define a callback schema for this post hook.
63
50
  * @param payload - The `afterFileEdit` stdin payload.
64
- * @returns Always an allow; carries the user-visible correction on a violation.
51
+ * @returns An empty successful response.
65
52
  */
66
53
  declare function afterFileEdit(payload: CursorEditPayload): CursorEditResponse;
67
54
  //#endregion
68
- export { type CursorEditPayload, type CursorEditResponse, type CursorResponse, type CursorShellPayload, afterFileEdit, beforeShellExecution };
55
+ export { type CursorEditPayload, type CursorEditResponse, type CursorResponse, type CursorShellPayload, type CursorToolPayload, afterFileEdit, beforeShellExecution, preToolUse };
@@ -1,58 +1,47 @@
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 { t as extractCursorEvent } from "../../normalize-BjG6unTj.mjs";
3
4
  //#region src/adapters/cursor/index.ts
4
- /**
5
- * Cursor adapter (hook-mode). Schemas per cursor.com/docs/hooks (2026):
6
- * `beforeShellExecution` can block; `afterFileEdit` is observe-only.
7
- */
8
- function toPermission(kind) {
9
- return kind === "block" ? "deny" : kind === "ask" ? "ask" : "allow";
10
- }
11
- /** Guard a shell command (git/install policies). */
12
- function beforeShellExecution(payload) {
13
- const r = evaluate({
14
- tool: "Bash",
15
- command: payload.command
5
+ /** Cursor hook adapter; post-edit handling remains observe-only. */
6
+ function guardCursor(payload) {
7
+ const event = extractCursorEvent(payload);
8
+ const result = evaluate({
9
+ tool: event.tool,
10
+ filePath: event.filePath,
11
+ content: event.content,
12
+ oldString: event.oldString,
13
+ command: event.command
16
14
  });
17
- if (r.decision === "allow" || !r.prompt) return { permission: "allow" };
18
- const msg = formatPrompt(r.prompt);
15
+ if (result.decision === "allow" || !result.prompt) return { permission: "allow" };
16
+ const message = formatPrompt(result.prompt);
19
17
  return {
20
- permission: toPermission(r.prompt.kind),
21
- continue: false,
22
- user_message: msg,
23
- agent_message: msg
18
+ permission: "deny",
19
+ user_message: result.prompt.kind === "ask" ? `[downgraded from ask — Cursor preToolUse does not reliably enforce ask]\n${message}` : message,
20
+ agent_message: message
21
+ };
22
+ }
23
+ function namedPayload(payload, eventName) {
24
+ return Object.hasOwn(payload, "hook_event_name") ? payload : {
25
+ ...payload,
26
+ hook_event_name: eventName
24
27
  };
25
28
  }
29
+ /** Guard a shell command (git/install policies). */
30
+ function beforeShellExecution(payload) {
31
+ return guardCursor(namedPayload(payload, "beforeShellExecution"));
32
+ }
33
+ /** Guard a generic Cursor tool call using the same extraction as the runtime. */
34
+ function preToolUse(payload) {
35
+ return guardCursor(namedPayload(payload, "preToolUse"));
36
+ }
26
37
  /**
27
- * Advise on a file edit AFTER Cursor has written it — a HUMAN-VISIBLE audit note,
28
- * never a gate. This is an "after" hook: the edit is already on disk. On a
29
- * SOLID/DRY violation we surface the correction through `user_message` (the only
30
- * channel afterFileEdit exposes — no `agent_message`, so the model is never
31
- * re-informed) while ALWAYS returning `permission: "allow"`.
32
- *
33
- * We deliberately never emit `permission: "deny"` here, for two distinct reasons:
34
- * (1) structural — afterFileEdit was "informational only" at launch (Chacon,
35
- * Cursor hooks beta 1.7, 2025-09: no channel to stop the agent), and a post-write
36
- * deny has no documented rollback; (2) empirical — Cursor staff confirm the
37
- * deny-enforcement path is broken for file operations (forum.cursor.com/t/154377,
38
- * v2.6.18, 2026-03, open) — proven for file READS, plausibly the same for writes.
39
- * So a `deny` would be a false blocking signal; `allow` + `user_message` is the
40
- * only proven-safe shape.
38
+ * Complete an observed file edit without emitting pre-execution permission
39
+ * fields. Cursor does not define a callback schema for this post hook.
41
40
  * @param payload - The `afterFileEdit` stdin payload.
42
- * @returns Always an allow; carries the user-visible correction on a violation.
41
+ * @returns An empty successful response.
43
42
  */
44
43
  function afterFileEdit(payload) {
45
- const content = payload.edits?.map((e) => e.new_string).join("\n") ?? "";
46
- const r = evaluate({
47
- tool: "Edit",
48
- filePath: payload.file_path,
49
- content
50
- });
51
- if (r.decision !== "deny" || !r.prompt) return { permission: "allow" };
52
- return {
53
- permission: "allow",
54
- user_message: formatPrompt(r.prompt)
55
- };
44
+ return {};
56
45
  }
57
46
  //#endregion
58
- export { afterFileEdit, beforeShellExecution };
47
+ export { afterFileEdit, beforeShellExecution, preToolUse };
@@ -1,4 +1,4 @@
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
3
  //#region src/adapters/gemini/index.ts
4
4
  /**
@@ -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/hermes/interfaces/types.d.ts
3
3
  /**
4
4
  * Hermes Agent (NousResearch/hermes-agent) shell-hook wire types. Verified 2026
@@ -1,2 +1,2 @@
1
- import { n as readHermesInput, r as toHermesResponse, t as guard } from "../../hermes-kP6NUQlG.mjs";
1
+ import { n as readHermesInput, r as toHermesResponse, t as guard } from "../../hermes-B9-p_3IF.mjs";
2
2
  export { guard, readHermesInput, toHermesResponse };
@@ -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/kimi/interfaces/types.d.ts
3
3
  /**
4
4
  * Kimi Code CLI shell-hook wire types. Verified 2026 against
@@ -1,2 +1,2 @@
1
- import { i as toKimiResponse, n as kimiDenyResponse, r as readKimiInput, t as guard } from "../../kimi-D6X7b8wF.mjs";
1
+ import { i as toKimiResponse, n as kimiDenyResponse, r as readKimiInput, t as guard } from "../../kimi-G2wcSh5-.mjs";
2
2
  export { guard, kimiDenyResponse, readKimiInput, toKimiResponse };
@@ -1,49 +1,9 @@
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 { t as commandToString } from "./command-string-CALMTnwN.mjs";
3
4
  import { dirname, join } from "node:path";
4
5
  import { existsSync, mkdirSync, readFileSync, readdirSync, writeFileSync } from "node:fs";
5
6
  import { spawnSync } from "node:child_process";
6
- //#region src/runtime/command-string.ts
7
- /** Shell basenames whose `-c`-style argv carries the real script in argv[2]. */
8
- const SHELLS = /* @__PURE__ */ new Set([
9
- "bash",
10
- "sh",
11
- "zsh",
12
- "dash"
13
- ]);
14
- /** True when `arg` is (a path to) a POSIX shell we know wraps a `-c` script. */
15
- function isShell(arg) {
16
- if (arg === void 0) return false;
17
- const base = arg.slice(arg.lastIndexOf("/") + 1);
18
- return SHELLS.has(base);
19
- }
20
- /** True for a shell command flag (`-c`, `-lc`, `-ic`, …) — anything ending in `c`. */
21
- function isCommandFlag(arg) {
22
- return arg !== void 0 && /^-[a-z]*c$/.test(arg);
23
- }
24
- /**
25
- * Coerce a hook payload's `command` field to the shell string the guard chain
26
- * expects. Harnesses disagree on the wire shape: Claude Code, Cursor, and Hermes
27
- * send a plain string, but Codex CLI sends an argv ARRAY
28
- * (`["bash", "-lc", "git commit -m x"]`). A naive `typeof === "string"` check
29
- * dropped the array to `undefined`, blinding every `ctx.command` guard
30
- * (destructive-git, mutators, install…) into a silent fail-open. This restores
31
- * the script so the array and string payloads reach an identical verdict.
32
- *
33
- * @param v - Raw `command` value off the payload (string, argv array, or other).
34
- * @returns A string as-is; a `[shell, -c|-lc, script]` argv reduced to its
35
- * script; any other all-string array joined with spaces; and `undefined` for
36
- * empty arrays, arrays holding non-strings, or any other type.
37
- */
38
- function commandToString(v) {
39
- if (typeof v === "string") return v;
40
- if (!Array.isArray(v)) return void 0;
41
- if (v.length === 0 || !v.every((e) => typeof e === "string")) return void 0;
42
- const argv = v;
43
- if (argv.length >= 3 && isShell(argv[0]) && isCommandFlag(argv[1])) return argv[2];
44
- return argv.join(" ");
45
- }
46
- //#endregion
47
7
  //#region src/util/runtime-io.ts
48
8
  /**
49
9
  * Cross-runtime I/O helpers (Node + Bun). The published CLI ships a `node`
@@ -216,4 +176,4 @@ function guard(input) {
216
176
  /** @deprecated use {@link guard}. Kept for back-compat. */
217
177
  const fileSizeGuard = guard;
218
178
  //#endregion
219
- export { commandToString as _, fileSizeGuard as a, readClaudeInput as c, collectFiles as d, pathExists as f, writeText as g, spawnCapture as h, denyResponse as i, systemMessage as l, sleep as m, blockResponse as n, guard as o, readText as p, contextResponse as r, informResponse as s, attachSystemMessage as t, toClaudeResponse as u };
179
+ export { fileSizeGuard as a, readClaudeInput as c, collectFiles as d, pathExists as f, writeText as g, spawnCapture as h, denyResponse as i, systemMessage as l, sleep as m, blockResponse as n, guard as o, readText as p, contextResponse as r, informResponse as s, attachSystemMessage as t, toClaudeResponse as u };