usesteady 0.1.0-alpha.1

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 (665) hide show
  1. package/LICENSE +186 -0
  2. package/README.md +724 -0
  3. package/bin/use-steady.js +13 -0
  4. package/dist/server-store.d.ts +68 -0
  5. package/dist/server-store.d.ts.map +1 -0
  6. package/dist/server-store.js +133 -0
  7. package/dist/server-store.js.map +1 -0
  8. package/dist/server.d.ts +35 -0
  9. package/dist/server.d.ts.map +1 -0
  10. package/dist/server.js +569 -0
  11. package/dist/server.js.map +1 -0
  12. package/dist/src/claude/adapters/api-adapter.d.ts +99 -0
  13. package/dist/src/claude/adapters/api-adapter.d.ts.map +1 -0
  14. package/dist/src/claude/adapters/api-adapter.js +415 -0
  15. package/dist/src/claude/adapters/api-adapter.js.map +1 -0
  16. package/dist/src/claude/adapters/stub-adapter.d.ts +73 -0
  17. package/dist/src/claude/adapters/stub-adapter.d.ts.map +1 -0
  18. package/dist/src/claude/adapters/stub-adapter.js +114 -0
  19. package/dist/src/claude/adapters/stub-adapter.js.map +1 -0
  20. package/dist/src/claude/artifact-mapper.d.ts +85 -0
  21. package/dist/src/claude/artifact-mapper.d.ts.map +1 -0
  22. package/dist/src/claude/artifact-mapper.js +187 -0
  23. package/dist/src/claude/artifact-mapper.js.map +1 -0
  24. package/dist/src/claude/delivery-gate.d.ts +136 -0
  25. package/dist/src/claude/delivery-gate.d.ts.map +1 -0
  26. package/dist/src/claude/delivery-gate.js +231 -0
  27. package/dist/src/claude/delivery-gate.js.map +1 -0
  28. package/dist/src/claude/index.d.ts +24 -0
  29. package/dist/src/claude/index.d.ts.map +1 -0
  30. package/dist/src/claude/index.js +23 -0
  31. package/dist/src/claude/index.js.map +1 -0
  32. package/dist/src/claude/types.d.ts +223 -0
  33. package/dist/src/claude/types.d.ts.map +1 -0
  34. package/dist/src/claude/types.js +64 -0
  35. package/dist/src/claude/types.js.map +1 -0
  36. package/dist/src/control/compiler.d.ts +125 -0
  37. package/dist/src/control/compiler.d.ts.map +1 -0
  38. package/dist/src/control/compiler.js +179 -0
  39. package/dist/src/control/compiler.js.map +1 -0
  40. package/dist/src/control/constraints.d.ts +42 -0
  41. package/dist/src/control/constraints.d.ts.map +1 -0
  42. package/dist/src/control/constraints.js +116 -0
  43. package/dist/src/control/constraints.js.map +1 -0
  44. package/dist/src/control/drift-detector.d.ts +49 -0
  45. package/dist/src/control/drift-detector.d.ts.map +1 -0
  46. package/dist/src/control/drift-detector.js +115 -0
  47. package/dist/src/control/drift-detector.js.map +1 -0
  48. package/dist/src/control/index.d.ts +44 -0
  49. package/dist/src/control/index.d.ts.map +1 -0
  50. package/dist/src/control/index.js +40 -0
  51. package/dist/src/control/index.js.map +1 -0
  52. package/dist/src/control/types.d.ts +144 -0
  53. package/dist/src/control/types.d.ts.map +1 -0
  54. package/dist/src/control/types.js +57 -0
  55. package/dist/src/control/types.js.map +1 -0
  56. package/dist/src/cursor/adapters/inprocess-adapter.d.ts +78 -0
  57. package/dist/src/cursor/adapters/inprocess-adapter.d.ts.map +1 -0
  58. package/dist/src/cursor/adapters/inprocess-adapter.js +308 -0
  59. package/dist/src/cursor/adapters/inprocess-adapter.js.map +1 -0
  60. package/dist/src/cursor/adapters/stub-adapter.d.ts +75 -0
  61. package/dist/src/cursor/adapters/stub-adapter.d.ts.map +1 -0
  62. package/dist/src/cursor/adapters/stub-adapter.js +120 -0
  63. package/dist/src/cursor/adapters/stub-adapter.js.map +1 -0
  64. package/dist/src/cursor/artifact-mapper.d.ts +81 -0
  65. package/dist/src/cursor/artifact-mapper.d.ts.map +1 -0
  66. package/dist/src/cursor/artifact-mapper.js +203 -0
  67. package/dist/src/cursor/artifact-mapper.js.map +1 -0
  68. package/dist/src/cursor/delivery-gate.d.ts +144 -0
  69. package/dist/src/cursor/delivery-gate.d.ts.map +1 -0
  70. package/dist/src/cursor/delivery-gate.js +208 -0
  71. package/dist/src/cursor/delivery-gate.js.map +1 -0
  72. package/dist/src/cursor/glob-matcher.d.ts +30 -0
  73. package/dist/src/cursor/glob-matcher.d.ts.map +1 -0
  74. package/dist/src/cursor/glob-matcher.js +68 -0
  75. package/dist/src/cursor/glob-matcher.js.map +1 -0
  76. package/dist/src/cursor/index.d.ts +43 -0
  77. package/dist/src/cursor/index.d.ts.map +1 -0
  78. package/dist/src/cursor/index.js +44 -0
  79. package/dist/src/cursor/index.js.map +1 -0
  80. package/dist/src/cursor/ocd-evaluator.d.ts +89 -0
  81. package/dist/src/cursor/ocd-evaluator.d.ts.map +1 -0
  82. package/dist/src/cursor/ocd-evaluator.js +142 -0
  83. package/dist/src/cursor/ocd-evaluator.js.map +1 -0
  84. package/dist/src/cursor/types.d.ts +309 -0
  85. package/dist/src/cursor/types.d.ts.map +1 -0
  86. package/dist/src/cursor/types.js +48 -0
  87. package/dist/src/cursor/types.js.map +1 -0
  88. package/dist/src/execution/claude/claude-execution-coordinator.d.ts +164 -0
  89. package/dist/src/execution/claude/claude-execution-coordinator.d.ts.map +1 -0
  90. package/dist/src/execution/claude/claude-execution-coordinator.js +198 -0
  91. package/dist/src/execution/claude/claude-execution-coordinator.js.map +1 -0
  92. package/dist/src/execution/claude/index.d.ts +13 -0
  93. package/dist/src/execution/claude/index.d.ts.map +1 -0
  94. package/dist/src/execution/claude/index.js +12 -0
  95. package/dist/src/execution/claude/index.js.map +1 -0
  96. package/dist/src/execution/cursor/cursor-execution-coordinator.d.ts +216 -0
  97. package/dist/src/execution/cursor/cursor-execution-coordinator.d.ts.map +1 -0
  98. package/dist/src/execution/cursor/cursor-execution-coordinator.js +233 -0
  99. package/dist/src/execution/cursor/cursor-execution-coordinator.js.map +1 -0
  100. package/dist/src/execution/cursor/index.d.ts +20 -0
  101. package/dist/src/execution/cursor/index.d.ts.map +1 -0
  102. package/dist/src/execution/cursor/index.js +18 -0
  103. package/dist/src/execution/cursor/index.js.map +1 -0
  104. package/dist/src/execution/reminders/index.d.ts +11 -0
  105. package/dist/src/execution/reminders/index.d.ts.map +1 -0
  106. package/dist/src/execution/reminders/index.js +9 -0
  107. package/dist/src/execution/reminders/index.js.map +1 -0
  108. package/dist/src/execution/reminders/reminder-execution-coordinator.d.ts +125 -0
  109. package/dist/src/execution/reminders/reminder-execution-coordinator.d.ts.map +1 -0
  110. package/dist/src/execution/reminders/reminder-execution-coordinator.js +129 -0
  111. package/dist/src/execution/reminders/reminder-execution-coordinator.js.map +1 -0
  112. package/dist/src/execution/reminders/reminder-execution-types.d.ts +161 -0
  113. package/dist/src/execution/reminders/reminder-execution-types.d.ts.map +1 -0
  114. package/dist/src/execution/reminders/reminder-execution-types.js +39 -0
  115. package/dist/src/execution/reminders/reminder-execution-types.js.map +1 -0
  116. package/dist/src/execution/reminders/reminder-execution-validator.d.ts +45 -0
  117. package/dist/src/execution/reminders/reminder-execution-validator.d.ts.map +1 -0
  118. package/dist/src/execution/reminders/reminder-execution-validator.js +92 -0
  119. package/dist/src/execution/reminders/reminder-execution-validator.js.map +1 -0
  120. package/dist/src/execution/reminders/reminder-executor.d.ts +62 -0
  121. package/dist/src/execution/reminders/reminder-executor.d.ts.map +1 -0
  122. package/dist/src/execution/reminders/reminder-executor.js +113 -0
  123. package/dist/src/execution/reminders/reminder-executor.js.map +1 -0
  124. package/dist/src/execution/reminders/reminder-time-parser.d.ts +41 -0
  125. package/dist/src/execution/reminders/reminder-time-parser.d.ts.map +1 -0
  126. package/dist/src/execution/reminders/reminder-time-parser.js +113 -0
  127. package/dist/src/execution/reminders/reminder-time-parser.js.map +1 -0
  128. package/dist/src/friction/auto-capture.d.ts +38 -0
  129. package/dist/src/friction/auto-capture.d.ts.map +1 -0
  130. package/dist/src/friction/auto-capture.js +133 -0
  131. package/dist/src/friction/auto-capture.js.map +1 -0
  132. package/dist/src/friction/client.d.ts +39 -0
  133. package/dist/src/friction/client.d.ts.map +1 -0
  134. package/dist/src/friction/client.js +165 -0
  135. package/dist/src/friction/client.js.map +1 -0
  136. package/dist/src/friction/config.d.ts +16 -0
  137. package/dist/src/friction/config.d.ts.map +1 -0
  138. package/dist/src/friction/config.js +56 -0
  139. package/dist/src/friction/config.js.map +1 -0
  140. package/dist/src/friction/github-auth.d.ts +41 -0
  141. package/dist/src/friction/github-auth.d.ts.map +1 -0
  142. package/dist/src/friction/github-auth.js +155 -0
  143. package/dist/src/friction/github-auth.js.map +1 -0
  144. package/dist/src/friction/github-issues.d.ts +51 -0
  145. package/dist/src/friction/github-issues.d.ts.map +1 -0
  146. package/dist/src/friction/github-issues.js +118 -0
  147. package/dist/src/friction/github-issues.js.map +1 -0
  148. package/dist/src/friction/payout-ledger.d.ts +45 -0
  149. package/dist/src/friction/payout-ledger.d.ts.map +1 -0
  150. package/dist/src/friction/payout-ledger.js +111 -0
  151. package/dist/src/friction/payout-ledger.js.map +1 -0
  152. package/dist/src/friction/queue.d.ts +42 -0
  153. package/dist/src/friction/queue.d.ts.map +1 -0
  154. package/dist/src/friction/queue.js +179 -0
  155. package/dist/src/friction/queue.js.map +1 -0
  156. package/dist/src/friction/reviewer.d.ts +42 -0
  157. package/dist/src/friction/reviewer.d.ts.map +1 -0
  158. package/dist/src/friction/reviewer.js +269 -0
  159. package/dist/src/friction/reviewer.js.map +1 -0
  160. package/dist/src/friction/types.d.ts +63 -0
  161. package/dist/src/friction/types.d.ts.map +1 -0
  162. package/dist/src/friction/types.js +18 -0
  163. package/dist/src/friction/types.js.map +1 -0
  164. package/dist/src/history/index.d.ts +39 -0
  165. package/dist/src/history/index.d.ts.map +1 -0
  166. package/dist/src/history/index.js +41 -0
  167. package/dist/src/history/index.js.map +1 -0
  168. package/dist/src/history/session-chain.d.ts +36 -0
  169. package/dist/src/history/session-chain.d.ts.map +1 -0
  170. package/dist/src/history/session-chain.js +91 -0
  171. package/dist/src/history/session-chain.js.map +1 -0
  172. package/dist/src/history/types.d.ts +130 -0
  173. package/dist/src/history/types.d.ts.map +1 -0
  174. package/dist/src/history/types.js +32 -0
  175. package/dist/src/history/types.js.map +1 -0
  176. package/dist/src/history/workflow-history.d.ts +48 -0
  177. package/dist/src/history/workflow-history.d.ts.map +1 -0
  178. package/dist/src/history/workflow-history.js +116 -0
  179. package/dist/src/history/workflow-history.js.map +1 -0
  180. package/dist/src/index.d.ts +88 -0
  181. package/dist/src/index.d.ts.map +1 -0
  182. package/dist/src/index.js +58 -0
  183. package/dist/src/index.js.map +1 -0
  184. package/dist/src/intake/classify-intent-state.d.ts +20 -0
  185. package/dist/src/intake/classify-intent-state.d.ts.map +1 -0
  186. package/dist/src/intake/classify-intent-state.js +29 -0
  187. package/dist/src/intake/classify-intent-state.js.map +1 -0
  188. package/dist/src/intake/intake-service.d.ts +105 -0
  189. package/dist/src/intake/intake-service.d.ts.map +1 -0
  190. package/dist/src/intake/intake-service.js +407 -0
  191. package/dist/src/intake/intake-service.js.map +1 -0
  192. package/dist/src/intake/response-planner.d.ts +25 -0
  193. package/dist/src/intake/response-planner.d.ts.map +1 -0
  194. package/dist/src/intake/response-planner.js +52 -0
  195. package/dist/src/intake/response-planner.js.map +1 -0
  196. package/dist/src/intake/signal-extractor.d.ts +25 -0
  197. package/dist/src/intake/signal-extractor.d.ts.map +1 -0
  198. package/dist/src/intake/signal-extractor.js +42 -0
  199. package/dist/src/intake/signal-extractor.js.map +1 -0
  200. package/dist/src/intake/trace.d.ts +157 -0
  201. package/dist/src/intake/trace.d.ts.map +1 -0
  202. package/dist/src/intake/trace.js +38 -0
  203. package/dist/src/intake/trace.js.map +1 -0
  204. package/dist/src/intake/types.d.ts +70 -0
  205. package/dist/src/intake/types.d.ts.map +1 -0
  206. package/dist/src/intake/types.js +30 -0
  207. package/dist/src/intake/types.js.map +1 -0
  208. package/dist/src/interaction/defaults.d.ts +12 -0
  209. package/dist/src/interaction/defaults.d.ts.map +1 -0
  210. package/dist/src/interaction/defaults.js +26 -0
  211. package/dist/src/interaction/defaults.js.map +1 -0
  212. package/dist/src/interaction/guidance-order.d.ts +53 -0
  213. package/dist/src/interaction/guidance-order.d.ts.map +1 -0
  214. package/dist/src/interaction/guidance-order.js +131 -0
  215. package/dist/src/interaction/guidance-order.js.map +1 -0
  216. package/dist/src/interaction/observe.d.ts +57 -0
  217. package/dist/src/interaction/observe.d.ts.map +1 -0
  218. package/dist/src/interaction/observe.js +77 -0
  219. package/dist/src/interaction/observe.js.map +1 -0
  220. package/dist/src/interaction/selectors.d.ts +16 -0
  221. package/dist/src/interaction/selectors.d.ts.map +1 -0
  222. package/dist/src/interaction/selectors.js +23 -0
  223. package/dist/src/interaction/selectors.js.map +1 -0
  224. package/dist/src/interaction/types.d.ts +105 -0
  225. package/dist/src/interaction/types.d.ts.map +1 -0
  226. package/dist/src/interaction/types.js +48 -0
  227. package/dist/src/interaction/types.js.map +1 -0
  228. package/dist/src/interaction/updater.d.ts +22 -0
  229. package/dist/src/interaction/updater.d.ts.map +1 -0
  230. package/dist/src/interaction/updater.js +87 -0
  231. package/dist/src/interaction/updater.js.map +1 -0
  232. package/dist/src/present/boundary-explanation/boundary-explanation-detector.d.ts +48 -0
  233. package/dist/src/present/boundary-explanation/boundary-explanation-detector.d.ts.map +1 -0
  234. package/dist/src/present/boundary-explanation/boundary-explanation-detector.js +107 -0
  235. package/dist/src/present/boundary-explanation/boundary-explanation-detector.js.map +1 -0
  236. package/dist/src/present/boundary-explanation/boundary-explanation-types.d.ts +43 -0
  237. package/dist/src/present/boundary-explanation/boundary-explanation-types.d.ts.map +1 -0
  238. package/dist/src/present/boundary-explanation/boundary-explanation-types.js +20 -0
  239. package/dist/src/present/boundary-explanation/boundary-explanation-types.js.map +1 -0
  240. package/dist/src/present/boundary-explanation/index.d.ts +10 -0
  241. package/dist/src/present/boundary-explanation/index.d.ts.map +1 -0
  242. package/dist/src/present/boundary-explanation/index.js +2 -0
  243. package/dist/src/present/boundary-explanation/index.js.map +1 -0
  244. package/dist/src/present/control-visibility/control-visibility-assertions.d.ts +70 -0
  245. package/dist/src/present/control-visibility/control-visibility-assertions.d.ts.map +1 -0
  246. package/dist/src/present/control-visibility/control-visibility-assertions.js +138 -0
  247. package/dist/src/present/control-visibility/control-visibility-assertions.js.map +1 -0
  248. package/dist/src/present/control-visibility/control-visibility-evaluator.d.ts +67 -0
  249. package/dist/src/present/control-visibility/control-visibility-evaluator.d.ts.map +1 -0
  250. package/dist/src/present/control-visibility/control-visibility-evaluator.js +146 -0
  251. package/dist/src/present/control-visibility/control-visibility-evaluator.js.map +1 -0
  252. package/dist/src/present/control-visibility/control-visibility-types.d.ts +113 -0
  253. package/dist/src/present/control-visibility/control-visibility-types.d.ts.map +1 -0
  254. package/dist/src/present/control-visibility/control-visibility-types.js +24 -0
  255. package/dist/src/present/control-visibility/control-visibility-types.js.map +1 -0
  256. package/dist/src/present/control-visibility/index.d.ts +16 -0
  257. package/dist/src/present/control-visibility/index.d.ts.map +1 -0
  258. package/dist/src/present/control-visibility/index.js +15 -0
  259. package/dist/src/present/control-visibility/index.js.map +1 -0
  260. package/dist/src/present/format.d.ts +57 -0
  261. package/dist/src/present/format.d.ts.map +1 -0
  262. package/dist/src/present/format.js +150 -0
  263. package/dist/src/present/format.js.map +1 -0
  264. package/dist/src/present/present-coordinator.d.ts +153 -0
  265. package/dist/src/present/present-coordinator.d.ts.map +1 -0
  266. package/dist/src/present/present-coordinator.js +213 -0
  267. package/dist/src/present/present-coordinator.js.map +1 -0
  268. package/dist/src/present/reminders/index.d.ts +22 -0
  269. package/dist/src/present/reminders/index.d.ts.map +1 -0
  270. package/dist/src/present/reminders/index.js +22 -0
  271. package/dist/src/present/reminders/index.js.map +1 -0
  272. package/dist/src/present/reminders/reminder-presenter.d.ts +76 -0
  273. package/dist/src/present/reminders/reminder-presenter.d.ts.map +1 -0
  274. package/dist/src/present/reminders/reminder-presenter.js +359 -0
  275. package/dist/src/present/reminders/reminder-presenter.js.map +1 -0
  276. package/dist/src/present/reminders/reminder-renderer.d.ts +82 -0
  277. package/dist/src/present/reminders/reminder-renderer.d.ts.map +1 -0
  278. package/dist/src/present/reminders/reminder-renderer.js +136 -0
  279. package/dist/src/present/reminders/reminder-renderer.js.map +1 -0
  280. package/dist/src/present/reminders/reminder-types.d.ts +131 -0
  281. package/dist/src/present/reminders/reminder-types.d.ts.map +1 -0
  282. package/dist/src/present/reminders/reminder-types.js +29 -0
  283. package/dist/src/present/reminders/reminder-types.js.map +1 -0
  284. package/dist/src/present/types.d.ts +114 -0
  285. package/dist/src/present/types.d.ts.map +1 -0
  286. package/dist/src/present/types.js +18 -0
  287. package/dist/src/present/types.js.map +1 -0
  288. package/dist/src/product/claude-product-session.d.ts +146 -0
  289. package/dist/src/product/claude-product-session.d.ts.map +1 -0
  290. package/dist/src/product/claude-product-session.js +362 -0
  291. package/dist/src/product/claude-product-session.js.map +1 -0
  292. package/dist/src/product/cursor-product-session.d.ts +211 -0
  293. package/dist/src/product/cursor-product-session.d.ts.map +1 -0
  294. package/dist/src/product/cursor-product-session.js +390 -0
  295. package/dist/src/product/cursor-product-session.js.map +1 -0
  296. package/dist/src/product/index.d.ts +28 -0
  297. package/dist/src/product/index.d.ts.map +1 -0
  298. package/dist/src/product/index.js +22 -0
  299. package/dist/src/product/index.js.map +1 -0
  300. package/dist/src/product/session-resilience/index.d.ts +17 -0
  301. package/dist/src/product/session-resilience/index.d.ts.map +1 -0
  302. package/dist/src/product/session-resilience/index.js +15 -0
  303. package/dist/src/product/session-resilience/index.js.map +1 -0
  304. package/dist/src/product/session-resilience/session-serializer.d.ts +43 -0
  305. package/dist/src/product/session-resilience/session-serializer.d.ts.map +1 -0
  306. package/dist/src/product/session-resilience/session-serializer.js +84 -0
  307. package/dist/src/product/session-resilience/session-serializer.js.map +1 -0
  308. package/dist/src/product/session-resilience/session-snapshot-types.d.ts +35 -0
  309. package/dist/src/product/session-resilience/session-snapshot-types.d.ts.map +1 -0
  310. package/dist/src/product/session-resilience/session-snapshot-types.js +21 -0
  311. package/dist/src/product/session-resilience/session-snapshot-types.js.map +1 -0
  312. package/dist/src/product/session-resilience/session-staleness.d.ts +54 -0
  313. package/dist/src/product/session-resilience/session-staleness.d.ts.map +1 -0
  314. package/dist/src/product/session-resilience/session-staleness.js +62 -0
  315. package/dist/src/product/session-resilience/session-staleness.js.map +1 -0
  316. package/dist/src/product/session-resilience/session-summary.d.ts +40 -0
  317. package/dist/src/product/session-resilience/session-summary.d.ts.map +1 -0
  318. package/dist/src/product/session-resilience/session-summary.js +72 -0
  319. package/dist/src/product/session-resilience/session-summary.js.map +1 -0
  320. package/dist/src/prv/patterns.d.ts +32 -0
  321. package/dist/src/prv/patterns.d.ts.map +1 -0
  322. package/dist/src/prv/patterns.js +40 -0
  323. package/dist/src/prv/patterns.js.map +1 -0
  324. package/dist/src/prv/prv.d.ts +13 -0
  325. package/dist/src/prv/prv.d.ts.map +1 -0
  326. package/dist/src/prv/prv.js +22 -0
  327. package/dist/src/prv/prv.js.map +1 -0
  328. package/dist/src/prv/types.d.ts +26 -0
  329. package/dist/src/prv/types.d.ts.map +1 -0
  330. package/dist/src/prv/types.js +15 -0
  331. package/dist/src/prv/types.js.map +1 -0
  332. package/dist/src/safety/detectors/arbitrary-exec.detector.d.ts +3 -0
  333. package/dist/src/safety/detectors/arbitrary-exec.detector.d.ts.map +1 -0
  334. package/dist/src/safety/detectors/arbitrary-exec.detector.js +31 -0
  335. package/dist/src/safety/detectors/arbitrary-exec.detector.js.map +1 -0
  336. package/dist/src/safety/detectors/bulk-data-exfil.detector.d.ts +21 -0
  337. package/dist/src/safety/detectors/bulk-data-exfil.detector.d.ts.map +1 -0
  338. package/dist/src/safety/detectors/bulk-data-exfil.detector.js +90 -0
  339. package/dist/src/safety/detectors/bulk-data-exfil.detector.js.map +1 -0
  340. package/dist/src/safety/detectors/destructive.detector.d.ts +3 -0
  341. package/dist/src/safety/detectors/destructive.detector.d.ts.map +1 -0
  342. package/dist/src/safety/detectors/destructive.detector.js +28 -0
  343. package/dist/src/safety/detectors/destructive.detector.js.map +1 -0
  344. package/dist/src/safety/detectors/evasion.detector.d.ts +3 -0
  345. package/dist/src/safety/detectors/evasion.detector.d.ts.map +1 -0
  346. package/dist/src/safety/detectors/evasion.detector.js +28 -0
  347. package/dist/src/safety/detectors/evasion.detector.js.map +1 -0
  348. package/dist/src/safety/detectors/secret-access.detector.d.ts +31 -0
  349. package/dist/src/safety/detectors/secret-access.detector.d.ts.map +1 -0
  350. package/dist/src/safety/detectors/secret-access.detector.js +78 -0
  351. package/dist/src/safety/detectors/secret-access.detector.js.map +1 -0
  352. package/dist/src/safety/registry.d.ts +9 -0
  353. package/dist/src/safety/registry.d.ts.map +1 -0
  354. package/dist/src/safety/registry.js +22 -0
  355. package/dist/src/safety/registry.js.map +1 -0
  356. package/dist/src/safety/safety-gate.d.ts +16 -0
  357. package/dist/src/safety/safety-gate.d.ts.map +1 -0
  358. package/dist/src/safety/safety-gate.js +26 -0
  359. package/dist/src/safety/safety-gate.js.map +1 -0
  360. package/dist/src/safety/types.d.ts +35 -0
  361. package/dist/src/safety/types.d.ts.map +1 -0
  362. package/dist/src/safety/types.js +14 -0
  363. package/dist/src/safety/types.js.map +1 -0
  364. package/dist/src/shell/claude-shell.d.ts +63 -0
  365. package/dist/src/shell/claude-shell.d.ts.map +1 -0
  366. package/dist/src/shell/claude-shell.js +81 -0
  367. package/dist/src/shell/claude-shell.js.map +1 -0
  368. package/dist/src/shell/cli/friction-admin.d.ts +14 -0
  369. package/dist/src/shell/cli/friction-admin.d.ts.map +1 -0
  370. package/dist/src/shell/cli/friction-admin.js +276 -0
  371. package/dist/src/shell/cli/friction-admin.js.map +1 -0
  372. package/dist/src/shell/cli/friction-report.d.ts +16 -0
  373. package/dist/src/shell/cli/friction-report.d.ts.map +1 -0
  374. package/dist/src/shell/cli/friction-report.js +156 -0
  375. package/dist/src/shell/cli/friction-report.js.map +1 -0
  376. package/dist/src/shell/cli/main.d.ts +68 -0
  377. package/dist/src/shell/cli/main.d.ts.map +1 -0
  378. package/dist/src/shell/cli/main.js +488 -0
  379. package/dist/src/shell/cli/main.js.map +1 -0
  380. package/dist/src/shell/cli/use-steady.d.ts +26 -0
  381. package/dist/src/shell/cli/use-steady.d.ts.map +1 -0
  382. package/dist/src/shell/cli/use-steady.js +117 -0
  383. package/dist/src/shell/cli/use-steady.js.map +1 -0
  384. package/dist/src/shell/cursor-shell.d.ts +63 -0
  385. package/dist/src/shell/cursor-shell.d.ts.map +1 -0
  386. package/dist/src/shell/cursor-shell.js +88 -0
  387. package/dist/src/shell/cursor-shell.js.map +1 -0
  388. package/dist/src/shell/defaults.d.ts +51 -0
  389. package/dist/src/shell/defaults.d.ts.map +1 -0
  390. package/dist/src/shell/defaults.js +78 -0
  391. package/dist/src/shell/defaults.js.map +1 -0
  392. package/dist/src/shell/history-render.d.ts +56 -0
  393. package/dist/src/shell/history-render.d.ts.map +1 -0
  394. package/dist/src/shell/history-render.js +166 -0
  395. package/dist/src/shell/history-render.js.map +1 -0
  396. package/dist/src/shell/index.d.ts +43 -0
  397. package/dist/src/shell/index.d.ts.map +1 -0
  398. package/dist/src/shell/index.js +45 -0
  399. package/dist/src/shell/index.js.map +1 -0
  400. package/dist/src/shell/render.d.ts +42 -0
  401. package/dist/src/shell/render.d.ts.map +1 -0
  402. package/dist/src/shell/render.js +122 -0
  403. package/dist/src/shell/render.js.map +1 -0
  404. package/dist/src/shell/types.d.ts +46 -0
  405. package/dist/src/shell/types.d.ts.map +1 -0
  406. package/dist/src/shell/types.js +19 -0
  407. package/dist/src/shell/types.js.map +1 -0
  408. package/dist/src/shell/workflow-defaults.d.ts +23 -0
  409. package/dist/src/shell/workflow-defaults.d.ts.map +1 -0
  410. package/dist/src/shell/workflow-defaults.js +27 -0
  411. package/dist/src/shell/workflow-defaults.js.map +1 -0
  412. package/dist/src/shell/workflow-render.d.ts +54 -0
  413. package/dist/src/shell/workflow-render.d.ts.map +1 -0
  414. package/dist/src/shell/workflow-render.js +319 -0
  415. package/dist/src/shell/workflow-render.js.map +1 -0
  416. package/dist/src/shell/workflow-shell.d.ts +110 -0
  417. package/dist/src/shell/workflow-shell.d.ts.map +1 -0
  418. package/dist/src/shell/workflow-shell.js +180 -0
  419. package/dist/src/shell/workflow-shell.js.map +1 -0
  420. package/dist/src/skills/audit.d.ts +118 -0
  421. package/dist/src/skills/audit.d.ts.map +1 -0
  422. package/dist/src/skills/audit.js +147 -0
  423. package/dist/src/skills/audit.js.map +1 -0
  424. package/dist/src/skills/invocation.d.ts +131 -0
  425. package/dist/src/skills/invocation.d.ts.map +1 -0
  426. package/dist/src/skills/invocation.js +165 -0
  427. package/dist/src/skills/invocation.js.map +1 -0
  428. package/dist/src/skills/loader.d.ts +70 -0
  429. package/dist/src/skills/loader.d.ts.map +1 -0
  430. package/dist/src/skills/loader.js +220 -0
  431. package/dist/src/skills/loader.js.map +1 -0
  432. package/dist/src/skills/local-recovery-adapter.d.ts +49 -0
  433. package/dist/src/skills/local-recovery-adapter.d.ts.map +1 -0
  434. package/dist/src/skills/local-recovery-adapter.js +184 -0
  435. package/dist/src/skills/local-recovery-adapter.js.map +1 -0
  436. package/dist/src/skills/parser.d.ts +53 -0
  437. package/dist/src/skills/parser.d.ts.map +1 -0
  438. package/dist/src/skills/parser.js +336 -0
  439. package/dist/src/skills/parser.js.map +1 -0
  440. package/dist/src/skills/registry.d.ts +123 -0
  441. package/dist/src/skills/registry.d.ts.map +1 -0
  442. package/dist/src/skills/registry.js +144 -0
  443. package/dist/src/skills/registry.js.map +1 -0
  444. package/dist/src/skills/types.d.ts +242 -0
  445. package/dist/src/skills/types.d.ts.map +1 -0
  446. package/dist/src/skills/types.js +50 -0
  447. package/dist/src/skills/types.js.map +1 -0
  448. package/dist/src/skills/validator.d.ts +31 -0
  449. package/dist/src/skills/validator.d.ts.map +1 -0
  450. package/dist/src/skills/validator.js +366 -0
  451. package/dist/src/skills/validator.js.map +1 -0
  452. package/dist/src/ucp/envelope.d.ts +165 -0
  453. package/dist/src/ucp/envelope.d.ts.map +1 -0
  454. package/dist/src/ucp/envelope.js +241 -0
  455. package/dist/src/ucp/envelope.js.map +1 -0
  456. package/dist/src/ucp/hashes.d.ts +36 -0
  457. package/dist/src/ucp/hashes.d.ts.map +1 -0
  458. package/dist/src/ucp/hashes.js +59 -0
  459. package/dist/src/ucp/hashes.js.map +1 -0
  460. package/dist/src/ucp/mappers/map-artifact.d.ts +58 -0
  461. package/dist/src/ucp/mappers/map-artifact.d.ts.map +1 -0
  462. package/dist/src/ucp/mappers/map-artifact.js +51 -0
  463. package/dist/src/ucp/mappers/map-artifact.js.map +1 -0
  464. package/dist/src/ucp/mappers/map-change-interpretation.d.ts +12 -0
  465. package/dist/src/ucp/mappers/map-change-interpretation.d.ts.map +1 -0
  466. package/dist/src/ucp/mappers/map-change-interpretation.js +18 -0
  467. package/dist/src/ucp/mappers/map-change-interpretation.js.map +1 -0
  468. package/dist/src/ucp/mappers/map-completion.d.ts +10 -0
  469. package/dist/src/ucp/mappers/map-completion.d.ts.map +1 -0
  470. package/dist/src/ucp/mappers/map-completion.js +24 -0
  471. package/dist/src/ucp/mappers/map-completion.js.map +1 -0
  472. package/dist/src/ucp/mappers/map-context.d.ts +9 -0
  473. package/dist/src/ucp/mappers/map-context.d.ts.map +1 -0
  474. package/dist/src/ucp/mappers/map-context.js +13 -0
  475. package/dist/src/ucp/mappers/map-context.js.map +1 -0
  476. package/dist/src/ucp/mappers/map-debug-trace.d.ts +10 -0
  477. package/dist/src/ucp/mappers/map-debug-trace.d.ts.map +1 -0
  478. package/dist/src/ucp/mappers/map-debug-trace.js +18 -0
  479. package/dist/src/ucp/mappers/map-debug-trace.js.map +1 -0
  480. package/dist/src/ucp/mappers/map-disambiguation.d.ts +10 -0
  481. package/dist/src/ucp/mappers/map-disambiguation.d.ts.map +1 -0
  482. package/dist/src/ucp/mappers/map-disambiguation.js +21 -0
  483. package/dist/src/ucp/mappers/map-disambiguation.js.map +1 -0
  484. package/dist/src/ucp/mappers/map-execution-trace.d.ts +64 -0
  485. package/dist/src/ucp/mappers/map-execution-trace.d.ts.map +1 -0
  486. package/dist/src/ucp/mappers/map-execution-trace.js +57 -0
  487. package/dist/src/ucp/mappers/map-execution-trace.js.map +1 -0
  488. package/dist/src/ucp/mappers/map-intent-interpretation.d.ts +11 -0
  489. package/dist/src/ucp/mappers/map-intent-interpretation.d.ts.map +1 -0
  490. package/dist/src/ucp/mappers/map-intent-interpretation.js +17 -0
  491. package/dist/src/ucp/mappers/map-intent-interpretation.js.map +1 -0
  492. package/dist/src/ucp/mappers/map-intent.d.ts +9 -0
  493. package/dist/src/ucp/mappers/map-intent.d.ts.map +1 -0
  494. package/dist/src/ucp/mappers/map-intent.js +11 -0
  495. package/dist/src/ucp/mappers/map-intent.js.map +1 -0
  496. package/dist/src/ucp/mappers/map-prv.d.ts +10 -0
  497. package/dist/src/ucp/mappers/map-prv.d.ts.map +1 -0
  498. package/dist/src/ucp/mappers/map-prv.js +14 -0
  499. package/dist/src/ucp/mappers/map-prv.js.map +1 -0
  500. package/dist/src/ucp/mappers/map-reminder-execution.d.ts +57 -0
  501. package/dist/src/ucp/mappers/map-reminder-execution.d.ts.map +1 -0
  502. package/dist/src/ucp/mappers/map-reminder-execution.js +69 -0
  503. package/dist/src/ucp/mappers/map-reminder-execution.js.map +1 -0
  504. package/dist/src/ucp/mappers/map-replay-report.d.ts +81 -0
  505. package/dist/src/ucp/mappers/map-replay-report.d.ts.map +1 -0
  506. package/dist/src/ucp/mappers/map-replay-report.js +76 -0
  507. package/dist/src/ucp/mappers/map-replay-report.js.map +1 -0
  508. package/dist/src/ucp/mappers/map-response.d.ts +13 -0
  509. package/dist/src/ucp/mappers/map-response.d.ts.map +1 -0
  510. package/dist/src/ucp/mappers/map-response.js +25 -0
  511. package/dist/src/ucp/mappers/map-response.js.map +1 -0
  512. package/dist/src/ucp/mappers/map-safety.d.ts +14 -0
  513. package/dist/src/ucp/mappers/map-safety.d.ts.map +1 -0
  514. package/dist/src/ucp/mappers/map-safety.js +22 -0
  515. package/dist/src/ucp/mappers/map-safety.js.map +1 -0
  516. package/dist/src/ucp/persistence/index.d.ts +24 -0
  517. package/dist/src/ucp/persistence/index.d.ts.map +1 -0
  518. package/dist/src/ucp/persistence/index.js +22 -0
  519. package/dist/src/ucp/persistence/index.js.map +1 -0
  520. package/dist/src/ucp/persistence/query.d.ts +164 -0
  521. package/dist/src/ucp/persistence/query.d.ts.map +1 -0
  522. package/dist/src/ucp/persistence/query.js +240 -0
  523. package/dist/src/ucp/persistence/query.js.map +1 -0
  524. package/dist/src/ucp/persistence/reader.d.ts +43 -0
  525. package/dist/src/ucp/persistence/reader.d.ts.map +1 -0
  526. package/dist/src/ucp/persistence/reader.js +104 -0
  527. package/dist/src/ucp/persistence/reader.js.map +1 -0
  528. package/dist/src/ucp/persistence/store.d.ts +77 -0
  529. package/dist/src/ucp/persistence/store.d.ts.map +1 -0
  530. package/dist/src/ucp/persistence/store.js +177 -0
  531. package/dist/src/ucp/persistence/store.js.map +1 -0
  532. package/dist/src/ucp/persistence/write.d.ts +48 -0
  533. package/dist/src/ucp/persistence/write.d.ts.map +1 -0
  534. package/dist/src/ucp/persistence/write.js +59 -0
  535. package/dist/src/ucp/persistence/write.js.map +1 -0
  536. package/dist/src/ucp/projection.d.ts +146 -0
  537. package/dist/src/ucp/projection.d.ts.map +1 -0
  538. package/dist/src/ucp/projection.js +139 -0
  539. package/dist/src/ucp/projection.js.map +1 -0
  540. package/dist/src/ucp/types.d.ts +585 -0
  541. package/dist/src/ucp/types.d.ts.map +1 -0
  542. package/dist/src/ucp/types.js +57 -0
  543. package/dist/src/ucp/types.js.map +1 -0
  544. package/dist/src/understand/completion/completion.d.ts +26 -0
  545. package/dist/src/understand/completion/completion.d.ts.map +1 -0
  546. package/dist/src/understand/completion/completion.js +45 -0
  547. package/dist/src/understand/completion/completion.js.map +1 -0
  548. package/dist/src/understand/completion/rules.d.ts +61 -0
  549. package/dist/src/understand/completion/rules.d.ts.map +1 -0
  550. package/dist/src/understand/completion/rules.js +268 -0
  551. package/dist/src/understand/completion/rules.js.map +1 -0
  552. package/dist/src/understand/completion/types.d.ts +68 -0
  553. package/dist/src/understand/completion/types.d.ts.map +1 -0
  554. package/dist/src/understand/completion/types.js +34 -0
  555. package/dist/src/understand/completion/types.js.map +1 -0
  556. package/dist/src/understand/context/context-alignment.d.ts +18 -0
  557. package/dist/src/understand/context/context-alignment.d.ts.map +1 -0
  558. package/dist/src/understand/context/context-alignment.js +61 -0
  559. package/dist/src/understand/context/context-alignment.js.map +1 -0
  560. package/dist/src/understand/context/types.d.ts +20 -0
  561. package/dist/src/understand/context/types.d.ts.map +1 -0
  562. package/dist/src/understand/context/types.js +13 -0
  563. package/dist/src/understand/context/types.js.map +1 -0
  564. package/dist/src/understand/disambiguation/detectors/missing-context.detector.d.ts +12 -0
  565. package/dist/src/understand/disambiguation/detectors/missing-context.detector.d.ts.map +1 -0
  566. package/dist/src/understand/disambiguation/detectors/missing-context.detector.js +60 -0
  567. package/dist/src/understand/disambiguation/detectors/missing-context.detector.js.map +1 -0
  568. package/dist/src/understand/disambiguation/detectors/overloaded-term.detector.d.ts +13 -0
  569. package/dist/src/understand/disambiguation/detectors/overloaded-term.detector.d.ts.map +1 -0
  570. package/dist/src/understand/disambiguation/detectors/overloaded-term.detector.js +57 -0
  571. package/dist/src/understand/disambiguation/detectors/overloaded-term.detector.js.map +1 -0
  572. package/dist/src/understand/disambiguation/detectors/typo-adjacent.detector.d.ts +16 -0
  573. package/dist/src/understand/disambiguation/detectors/typo-adjacent.detector.d.ts.map +1 -0
  574. package/dist/src/understand/disambiguation/detectors/typo-adjacent.detector.js +56 -0
  575. package/dist/src/understand/disambiguation/detectors/typo-adjacent.detector.js.map +1 -0
  576. package/dist/src/understand/disambiguation/registry.d.ts +14 -0
  577. package/dist/src/understand/disambiguation/registry.d.ts.map +1 -0
  578. package/dist/src/understand/disambiguation/registry.js +27 -0
  579. package/dist/src/understand/disambiguation/registry.js.map +1 -0
  580. package/dist/src/understand/disambiguation/types.d.ts +34 -0
  581. package/dist/src/understand/disambiguation/types.d.ts.map +1 -0
  582. package/dist/src/understand/disambiguation/types.js +15 -0
  583. package/dist/src/understand/disambiguation/types.js.map +1 -0
  584. package/dist/src/understand/intent-interpretation/intent-interpretation.d.ts +86 -0
  585. package/dist/src/understand/intent-interpretation/intent-interpretation.d.ts.map +1 -0
  586. package/dist/src/understand/intent-interpretation/intent-interpretation.js +141 -0
  587. package/dist/src/understand/intent-interpretation/intent-interpretation.js.map +1 -0
  588. package/dist/src/understand/intent-interpretation/interpreters/color-intent.interpreter.d.ts +33 -0
  589. package/dist/src/understand/intent-interpretation/interpreters/color-intent.interpreter.d.ts.map +1 -0
  590. package/dist/src/understand/intent-interpretation/interpreters/color-intent.interpreter.js +66 -0
  591. package/dist/src/understand/intent-interpretation/interpreters/color-intent.interpreter.js.map +1 -0
  592. package/dist/src/understand/intent-interpretation/interpreters/config-intent.interpreter.d.ts +20 -0
  593. package/dist/src/understand/intent-interpretation/interpreters/config-intent.interpreter.d.ts.map +1 -0
  594. package/dist/src/understand/intent-interpretation/interpreters/config-intent.interpreter.js +80 -0
  595. package/dist/src/understand/intent-interpretation/interpreters/config-intent.interpreter.js.map +1 -0
  596. package/dist/src/understand/intent-interpretation/interpreters/text-intent.interpreter.d.ts +25 -0
  597. package/dist/src/understand/intent-interpretation/interpreters/text-intent.interpreter.d.ts.map +1 -0
  598. package/dist/src/understand/intent-interpretation/interpreters/text-intent.interpreter.js +47 -0
  599. package/dist/src/understand/intent-interpretation/interpreters/text-intent.interpreter.js.map +1 -0
  600. package/dist/src/understand/intent-interpretation/interpreters/workflow-intent.interpreter.d.ts +35 -0
  601. package/dist/src/understand/intent-interpretation/interpreters/workflow-intent.interpreter.d.ts.map +1 -0
  602. package/dist/src/understand/intent-interpretation/interpreters/workflow-intent.interpreter.js +89 -0
  603. package/dist/src/understand/intent-interpretation/interpreters/workflow-intent.interpreter.js.map +1 -0
  604. package/dist/src/understand/intent-interpretation/registry.d.ts +18 -0
  605. package/dist/src/understand/intent-interpretation/registry.d.ts.map +1 -0
  606. package/dist/src/understand/intent-interpretation/registry.js +26 -0
  607. package/dist/src/understand/intent-interpretation/registry.js.map +1 -0
  608. package/dist/src/understand/intent-interpretation/types.d.ts +83 -0
  609. package/dist/src/understand/intent-interpretation/types.d.ts.map +1 -0
  610. package/dist/src/understand/intent-interpretation/types.js +40 -0
  611. package/dist/src/understand/intent-interpretation/types.js.map +1 -0
  612. package/dist/src/understand/interpretation/intent.d.ts +72 -0
  613. package/dist/src/understand/interpretation/intent.d.ts.map +1 -0
  614. package/dist/src/understand/interpretation/intent.js +414 -0
  615. package/dist/src/understand/interpretation/intent.js.map +1 -0
  616. package/dist/src/understand/interpretation/interpretation.d.ts +26 -0
  617. package/dist/src/understand/interpretation/interpretation.d.ts.map +1 -0
  618. package/dist/src/understand/interpretation/interpretation.js +43 -0
  619. package/dist/src/understand/interpretation/interpretation.js.map +1 -0
  620. package/dist/src/understand/interpretation/parser.d.ts +20 -0
  621. package/dist/src/understand/interpretation/parser.d.ts.map +1 -0
  622. package/dist/src/understand/interpretation/parser.js +88 -0
  623. package/dist/src/understand/interpretation/parser.js.map +1 -0
  624. package/dist/src/understand/interpretation/rules.d.ts +19 -0
  625. package/dist/src/understand/interpretation/rules.d.ts.map +1 -0
  626. package/dist/src/understand/interpretation/rules.js +222 -0
  627. package/dist/src/understand/interpretation/rules.js.map +1 -0
  628. package/dist/src/understand/interpretation/types.d.ts +90 -0
  629. package/dist/src/understand/interpretation/types.d.ts.map +1 -0
  630. package/dist/src/understand/interpretation/types.js +29 -0
  631. package/dist/src/understand/interpretation/types.js.map +1 -0
  632. package/dist/src/understand/shared/types.d.ts +13 -0
  633. package/dist/src/understand/shared/types.d.ts.map +1 -0
  634. package/dist/src/understand/shared/types.js +9 -0
  635. package/dist/src/understand/shared/types.js.map +1 -0
  636. package/dist/src/understand/silent-guidance/index.d.ts +4 -0
  637. package/dist/src/understand/silent-guidance/index.d.ts.map +1 -0
  638. package/dist/src/understand/silent-guidance/index.js +3 -0
  639. package/dist/src/understand/silent-guidance/index.js.map +1 -0
  640. package/dist/src/understand/silent-guidance/selector.d.ts +44 -0
  641. package/dist/src/understand/silent-guidance/selector.d.ts.map +1 -0
  642. package/dist/src/understand/silent-guidance/selector.js +158 -0
  643. package/dist/src/understand/silent-guidance/selector.js.map +1 -0
  644. package/dist/src/understand/silent-guidance/templates.d.ts +31 -0
  645. package/dist/src/understand/silent-guidance/templates.d.ts.map +1 -0
  646. package/dist/src/understand/silent-guidance/templates.js +109 -0
  647. package/dist/src/understand/silent-guidance/templates.js.map +1 -0
  648. package/dist/src/understand/silent-guidance/types.d.ts +36 -0
  649. package/dist/src/understand/silent-guidance/types.d.ts.map +1 -0
  650. package/dist/src/understand/silent-guidance/types.js +2 -0
  651. package/dist/src/understand/silent-guidance/types.js.map +1 -0
  652. package/dist/src/workflow/coordinator.d.ts +197 -0
  653. package/dist/src/workflow/coordinator.d.ts.map +1 -0
  654. package/dist/src/workflow/coordinator.js +682 -0
  655. package/dist/src/workflow/coordinator.js.map +1 -0
  656. package/dist/src/workflow/index.d.ts +30 -0
  657. package/dist/src/workflow/index.d.ts.map +1 -0
  658. package/dist/src/workflow/index.js +30 -0
  659. package/dist/src/workflow/index.js.map +1 -0
  660. package/dist/src/workflow/types.d.ts +213 -0
  661. package/dist/src/workflow/types.d.ts.map +1 -0
  662. package/dist/src/workflow/types.js +27 -0
  663. package/dist/src/workflow/types.js.map +1 -0
  664. package/package.json +54 -0
  665. package/ui/README.md +73 -0
@@ -0,0 +1,203 @@
1
+ /**
2
+ * Cursor artifact mapper — builds the initial CursorHandoffArtifact.
3
+ *
4
+ * ── Role ───────────────────────────────────────────────────────────────────────
5
+ *
6
+ * Translates an IntakeResult (mode === "execute") into a CursorHandoffArtifact
7
+ * with eligibility: "pending_confirmation" and an initial scopeConstraint.
8
+ *
9
+ * This is the ONLY place that proposes allowedFiles. Specifically, it reads
10
+ * parsedChange.filePath when present. When absent, allowedFiles starts empty.
11
+ *
12
+ * ── What this mapper does ──────────────────────────────────────────────────────
13
+ *
14
+ * 1. Extracts changeSpec from InterpretationResult (execute + structured) or
15
+ * IntentInterpretation (execute + vague).
16
+ * 2. Sets initial allowedFiles = [parsedChange.filePath] or [].
17
+ * 3. Sets initial prohibitedPatterns from OCD policy (defensive defaults).
18
+ * 4. Sets eligibility = "pending_confirmation".
19
+ * 5. Sets ocdClearance = { status: "cleared", rulesFired: [], conflictsDetected: [] }
20
+ * (OCD evaluator updates this separately — see ocd-evaluator.ts).
21
+ *
22
+ * ── What this mapper does NOT do ──────────────────────────────────────────────
23
+ *
24
+ * - Does not read the filesystem (no path resolution)
25
+ * - Does not call OCD (that is a separate step)
26
+ * - Does not set eligibility to "approved_for_cursor" (only H does that)
27
+ * - Does not validate H-provided paths (that is the delivery gate's job)
28
+ * - Does not invent file paths from intent category
29
+ *
30
+ * ── CONSTRUCTION RULE: undefined-free payloads ────────────────────────────────
31
+ *
32
+ * All payload objects must be undefined-free per UCP protocol invariant.
33
+ * Optional fields are omitted entirely when absent. Never assigned undefined.
34
+ *
35
+ * See: docs/cursor-allowedfiles-policy.md — population source hierarchy
36
+ * docs/cursor-integration-architecture.md — authority model
37
+ */
38
+ import { hashObject } from "../ucp/hashes.js";
39
+ // ─── Public API ───────────────────────────────────────────────────────────────
40
+ /**
41
+ * Build the initial CursorHandoffArtifact from an IntakeResult.
42
+ *
43
+ * PRECONDITION: intake.mode === "execute". Callers must verify this before calling.
44
+ * Passing a non-execute IntakeResult is a caller contract violation.
45
+ *
46
+ * @param intake The completed intake result (mode must be "execute").
47
+ * @param intentId The ucp.intent.v1 envelope id — links back to the root intent.
48
+ * @param responseId The ucp.response.v1 envelope id — links back to the mode decision.
49
+ * @param policy The OCD policy config (for defensive prohibitedPatterns).
50
+ * @returns A CursorHandoffArtifact with eligibility: "pending_confirmation".
51
+ */
52
+ export function buildCursorHandoffArtifact(intake, intentId, responseId, policy, parsedChange) {
53
+ const changeSpec = buildChangeSpec(intake, parsedChange);
54
+ const scopeConstraint = buildInitialScopeConstraint(changeSpec, policy);
55
+ const ocdClearance = buildInitialOCDClearance();
56
+ // id is content-addressed: same inputs → same id.
57
+ // ts is excluded (per UCP protocol). eligibility and approvedAt are NOT included
58
+ // in the id input — they are mutable fields that change as the flow progresses.
59
+ // The content identity is determined by what the edit IS, not its current state.
60
+ const idInput = {
61
+ intentId,
62
+ mode: "execute",
63
+ changeSpec,
64
+ responseId,
65
+ scopeConstraint,
66
+ };
67
+ const id = hashObject(idInput);
68
+ return {
69
+ id,
70
+ intentId,
71
+ responseId,
72
+ mode: "execute",
73
+ changeSpec,
74
+ ocdClearance,
75
+ eligibility: "pending_confirmation",
76
+ scopeConstraint,
77
+ };
78
+ }
79
+ /**
80
+ * Rebuild a CursorHandoffArtifact with a narrowed scopeConstraint.
81
+ *
82
+ * Called when H narrows the scope at ready_for_confirmation, or when a scope
83
+ * clarification answer updates allowedFiles. Produces a new artifact with a
84
+ * new content address (different scopeConstraint → different id).
85
+ *
86
+ * The new artifact retains the same intentId, responseId, and changeSpec.
87
+ * eligibility is reset to "pending_confirmation" — H must re-confirm.
88
+ *
89
+ * PRECONDITION: newAllowedFiles ⊆ current artifact.scopeConstraint.allowedFiles
90
+ * OR current artifact.scopeConstraint.allowedFiles is empty (H setting from empty).
91
+ * Callers must enforce the non-widening rule before calling.
92
+ */
93
+ export function narrowArtifactScope(artifact, newAllowedFiles, newAllowedScopes) {
94
+ const newScopeConstraint = {
95
+ allowedFiles: newAllowedFiles,
96
+ allowedScopes: newAllowedScopes ?? artifact.scopeConstraint.allowedScopes,
97
+ prohibitedPatterns: artifact.scopeConstraint.prohibitedPatterns,
98
+ };
99
+ const idInput = {
100
+ intentId: artifact.intentId,
101
+ mode: "execute",
102
+ changeSpec: artifact.changeSpec,
103
+ responseId: artifact.responseId,
104
+ scopeConstraint: newScopeConstraint,
105
+ };
106
+ const id = hashObject(idInput);
107
+ return {
108
+ id,
109
+ intentId: artifact.intentId,
110
+ responseId: artifact.responseId,
111
+ mode: "execute",
112
+ changeSpec: artifact.changeSpec,
113
+ ocdClearance: artifact.ocdClearance,
114
+ eligibility: "pending_confirmation",
115
+ scopeConstraint: newScopeConstraint,
116
+ };
117
+ }
118
+ /**
119
+ * Approve a CursorHandoffArtifact — set eligibility to "approved_for_cursor".
120
+ *
121
+ * This is the ONLY place that sets eligibility to "approved_for_cursor".
122
+ * Callers must verify that H has explicitly confirmed before calling.
123
+ *
124
+ * Returns a new artifact reference. The id does NOT change (eligibility and
125
+ * approvedAt are not part of the content-addressed id input).
126
+ */
127
+ export function approveArtifact(artifact, confirmedAt) {
128
+ return {
129
+ ...artifact,
130
+ eligibility: "approved_for_cursor",
131
+ approvedAt: confirmedAt,
132
+ };
133
+ }
134
+ // ─── Internal builders ────────────────────────────────────────────────────────
135
+ function buildChangeSpec(intake, parsedChange) {
136
+ const interp = intake.interpretation;
137
+ const intent = intake.guidance?.interpretation;
138
+ if (interp !== undefined) {
139
+ return buildChangeSpecFromInterpretation(interp, parsedChange);
140
+ }
141
+ if (intent !== undefined) {
142
+ return buildChangeSpecFromIntentInterpretation(intent);
143
+ }
144
+ // No interpretation of either kind — vague execute with no classification.
145
+ // certaintyLevel will be "unknown". changeSpec carries what we know.
146
+ return {
147
+ category: "unknown",
148
+ summary: intake.reason,
149
+ impact: [],
150
+ confidence: "low",
151
+ basis: [],
152
+ };
153
+ }
154
+ function buildChangeSpecFromInterpretation(interp, parsedChange) {
155
+ // InterpretationResult carries summary/impact/confidence/category.
156
+ // ParsedChange (oldValue, newValue, filePath) is threaded in separately by the
157
+ // coordinator, which has access to both simultaneously (e.g. from parseChange(input)).
158
+ return {
159
+ category: interp.category,
160
+ summary: interp.summary,
161
+ impact: interp.impact,
162
+ confidence: interp.confidence,
163
+ basis: [],
164
+ ...(parsedChange !== undefined ? { parsedChange } : {}),
165
+ };
166
+ }
167
+ function buildChangeSpecFromIntentInterpretation(intent) {
168
+ return {
169
+ category: intent.category,
170
+ summary: intent.summary,
171
+ impact: [],
172
+ confidence: intent.confidence,
173
+ basis: [...intent.basis],
174
+ };
175
+ }
176
+ function buildInitialScopeConstraint(changeSpec, policy) {
177
+ // PROPOSE: from parsedChange.filePath only.
178
+ const allowedFiles = changeSpec.parsedChange?.filePath != null
179
+ ? [changeSpec.parsedChange.filePath]
180
+ : [];
181
+ // CONSTRAIN: defensive prohibitions always applied.
182
+ const prohibitedPatterns = [
183
+ ...policy.alwaysProhibitedGlobs,
184
+ ...(allowedFiles.length === 0
185
+ ? policy.emptyAllowedFilesAdditionalProhibitions
186
+ : []),
187
+ ];
188
+ return {
189
+ allowedFiles,
190
+ allowedScopes: [],
191
+ prohibitedPatterns,
192
+ };
193
+ }
194
+ function buildInitialOCDClearance() {
195
+ // OCD clearance starts as "cleared" with no rules evaluated.
196
+ // The OCD evaluator (ocd-evaluator.ts) runs next and updates this.
197
+ return {
198
+ status: "cleared",
199
+ rulesFired: [],
200
+ conflictsDetected: [],
201
+ };
202
+ }
203
+ //# sourceMappingURL=artifact-mapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifact-mapper.js","sourceRoot":"","sources":["../../../src/cursor/artifact-mapper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Cursor Delivery Gate — the boundary between UseSteady's authority system and Cursor.
3
+ *
4
+ * ── Role ───────────────────────────────────────────────────────────────────────
5
+ *
6
+ * The delivery gate is the ONLY path through which a CursorHandoffArtifact
7
+ * reaches Cursor. It enforces three invariants before any delivery occurs:
8
+ *
9
+ * 1. Eligibility check: artifact.eligibility === "approved_for_cursor"
10
+ * 2. Persistence: ucp.cursor_handoff.v1 persisted before Cursor is called
11
+ * 3. Immutability: artifact delivered === artifact persisted (same id)
12
+ *
13
+ * After delivery, it persists either ucp.cursor_receipt.v1 (accepted) or
14
+ * ucp.cursor_refused.v1 (refused) based on Cursor's response.
15
+ *
16
+ * ── Delivery mechanism ─────────────────────────────────────────────────────────
17
+ *
18
+ * Currently: function call via injected CursorEditorPlugin.
19
+ * This is the mechanism-agnostic contract: the same shapes apply regardless
20
+ * of transport (function call, IPC, file drop, CLI pipe).
21
+ *
22
+ * The plugin is injected at construction time so that:
23
+ * - Tests can inject a stub plugin without coupling to Cursor internals
24
+ * - The transport can be replaced without changing this module
25
+ *
26
+ * ── Three delivery paths ───────────────────────────────────────────────────────
27
+ *
28
+ * Path A (happy): persist handoff → call Cursor → accepted → persist receipt
29
+ * Path B (scope): persist handoff → call Cursor → refused_due_to_scope
30
+ * → persist refused → surface scope question
31
+ * Path C (error): persist handoff → call Cursor → refused_due_to_execution_error
32
+ * → persist refused → rejected
33
+ *
34
+ * ── Cursor plugin contract ─────────────────────────────────────────────────────
35
+ *
36
+ * CursorEditorPlugin.receive() is the only call the gate makes into Cursor.
37
+ * The plugin must:
38
+ * - Accept only CursorDeliveryRequest
39
+ * - Return only CursorResponse (one of three kinds)
40
+ * - NOT reach back into the intake pipeline
41
+ * - NOT call persistEnvelope (the gate owns all persistence)
42
+ *
43
+ * ── deliveryId semantics ───────────────────────────────────────────────────────
44
+ *
45
+ * deliveryId is a delivery-attempt identifier, NOT a content identifier.
46
+ * It is unique per attempt. Never use it for provenance chain links —
47
+ * use artifact.id for those. See cursor-delivery-contract.md section 8.
48
+ *
49
+ * See: docs/cursor-delivery-contract.md — full delivery contract
50
+ * docs/cursor-integration-architecture.md — boundary rules R1–R9
51
+ */
52
+ import type { UCPEnvelope } from "../ucp/types.js";
53
+ import type { CursorHandoffArtifact, CursorDeliveryRequest, CursorResponse, CursorRefusedDueToScope, CursorRefusedDueToExecutionError } from "./types.js";
54
+ /**
55
+ * The interface the delivery gate uses to communicate with Cursor.
56
+ *
57
+ * This is the mechanism-agnostic seam. Implementations may use:
58
+ * - Direct function calls (same process / module boundary)
59
+ * - Local IPC (separate process)
60
+ * - File drop (audit/debug path)
61
+ *
62
+ * The plugin is responsible for:
63
+ * - Receiving the CursorDeliveryRequest
64
+ * - Applying the edit within the artifact's scopeConstraint
65
+ * - Returning exactly one CursorResponse kind
66
+ * - Emitting ucp.execution_trace.v1 on completion (after accepted)
67
+ *
68
+ * The plugin must NOT:
69
+ * - Re-derive intent from context
70
+ * - Reach back to the intake pipeline
71
+ * - Write files outside allowedFiles (when non-empty)
72
+ * - Call persistEnvelope (the gate owns all persistence)
73
+ */
74
+ export interface CursorEditorPlugin {
75
+ receive(request: CursorDeliveryRequest): Promise<CursorResponse>;
76
+ }
77
+ export type DeliveryGateResult = {
78
+ readonly outcome: "accepted";
79
+ readonly deliveryId: string;
80
+ readonly handoffEnvelopeId: string;
81
+ readonly receiptEnvelopeId: string;
82
+ } | {
83
+ readonly outcome: "refused_due_to_scope";
84
+ readonly deliveryId: string;
85
+ readonly handoffEnvelopeId: string;
86
+ readonly refusedEnvelopeId: string;
87
+ readonly scopeQuestion: CursorRefusedDueToScope["scopeQuestion"];
88
+ } | {
89
+ readonly outcome: "refused_due_to_execution_error";
90
+ readonly deliveryId: string;
91
+ readonly handoffEnvelopeId: string;
92
+ readonly refusedEnvelopeId: string;
93
+ readonly errorCode: CursorRefusedDueToExecutionError["errorCode"];
94
+ readonly detail: string;
95
+ } | {
96
+ readonly outcome: "blocked_ineligible";
97
+ readonly reason: string;
98
+ } | {
99
+ readonly outcome: "blocked_persistence_failure";
100
+ readonly reason: string;
101
+ };
102
+ export type CursorGateDeps = {
103
+ /**
104
+ * Persistence function for the critical handoff envelope.
105
+ * MUST throw on failure — a failure blocks delivery entirely.
106
+ * Default: persistEnvelopeOrThrow(storeDir, envelope)
107
+ */
108
+ persistStrict?: (envelope: UCPEnvelope<unknown>) => void;
109
+ /**
110
+ * Persistence function for non-critical envelopes (receipt, refused).
111
+ * Must NOT throw — errors are swallowed and logged.
112
+ * Default: persistEnvelope(storeDir, envelope)
113
+ */
114
+ persistBestEffort?: (envelope: UCPEnvelope<unknown>) => void;
115
+ };
116
+ export declare class CursorDeliveryGate {
117
+ private readonly plugin;
118
+ private readonly storeDir;
119
+ private readonly persistStrict;
120
+ private readonly persistBestEffort;
121
+ constructor(plugin: CursorEditorPlugin, storeDir: string, deps?: CursorGateDeps);
122
+ /**
123
+ * Deliver a CursorHandoffArtifact to Cursor.
124
+ *
125
+ * CONTRACT — callers must ensure:
126
+ * - artifact.eligibility === "approved_for_cursor" (gate re-checks and blocks if not)
127
+ * - artifact.ocdClearance.status is "cleared" or "conflict_accepted"
128
+ * - artifact.approvedAt is set (H has confirmed)
129
+ *
130
+ * CONTRACT — this function guarantees:
131
+ * - ucp.cursor_handoff.v1 is persisted BEFORE Cursor is called
132
+ * - If persistence fails, Cursor is NOT called (blocked_persistence_failure)
133
+ * - ucp.cursor_receipt.v1 is persisted when Cursor returns "accepted"
134
+ * - ucp.cursor_refused.v1 is persisted when Cursor returns either refusal
135
+ * - Receipt/refusal persistence failures are logged but do not block state transitions
136
+ * (Cursor has already taken a position; the gate cannot undo that)
137
+ *
138
+ * @param artifact The approved CursorHandoffArtifact to deliver.
139
+ * @returns DeliveryGateResult describing the delivery outcome.
140
+ */
141
+ deliver(artifact: CursorHandoffArtifact): Promise<DeliveryGateResult>;
142
+ private tryPersistBestEffort;
143
+ }
144
+ //# sourceMappingURL=delivery-gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery-gate.d.ts","sourceRoot":"","sources":["../../../src/cursor/delivery-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAA2B,iBAAiB,CAAC;AAQxE,OAAO,KAAK,EACV,qBAAqB,EACrB,qBAAqB,EACrB,cAAc,EACd,uBAAuB,EACvB,gCAAgC,EACjC,MAAM,YAAY,CAAC;AAIpB;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CAClE;AAID,MAAM,MAAM,kBAAkB,GAC1B;IACE,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC,GACD;IACE,QAAQ,CAAC,OAAO,EAAE,sBAAsB,CAAC;IACzC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,aAAa,EAAE,uBAAuB,CAAC,eAAe,CAAC,CAAC;CAClE,GACD;IACE,QAAQ,CAAC,OAAO,EAAE,gCAAgC,CAAC;IACnD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,gCAAgC,CAAC,WAAW,CAAC,CAAC;IAClE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,GACD;IACE,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,GACD;IACE,QAAQ,CAAC,OAAO,EAAE,6BAA6B,CAAC;IAChD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAIN,MAAM,MAAM,cAAc,GAAG;IAC3B;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;IAEzD;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;CAC9D,CAAC;AAIF,qBAAa,kBAAkB;IAK3B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAL3B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA2C;IACzE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA2C;gBAG1D,MAAM,EAAI,kBAAkB,EAC5B,QAAQ,EAAE,MAAM,EACjC,IAAI,GAAE,cAAmB;IAQ3B;;;;;;;;;;;;;;;;;;OAkBG;IACG,OAAO,CAAC,QAAQ,EAAE,qBAAqB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAiH3E,OAAO,CAAC,oBAAoB;CAS7B"}
@@ -0,0 +1,208 @@
1
+ /**
2
+ * Cursor Delivery Gate — the boundary between UseSteady's authority system and Cursor.
3
+ *
4
+ * ── Role ───────────────────────────────────────────────────────────────────────
5
+ *
6
+ * The delivery gate is the ONLY path through which a CursorHandoffArtifact
7
+ * reaches Cursor. It enforces three invariants before any delivery occurs:
8
+ *
9
+ * 1. Eligibility check: artifact.eligibility === "approved_for_cursor"
10
+ * 2. Persistence: ucp.cursor_handoff.v1 persisted before Cursor is called
11
+ * 3. Immutability: artifact delivered === artifact persisted (same id)
12
+ *
13
+ * After delivery, it persists either ucp.cursor_receipt.v1 (accepted) or
14
+ * ucp.cursor_refused.v1 (refused) based on Cursor's response.
15
+ *
16
+ * ── Delivery mechanism ─────────────────────────────────────────────────────────
17
+ *
18
+ * Currently: function call via injected CursorEditorPlugin.
19
+ * This is the mechanism-agnostic contract: the same shapes apply regardless
20
+ * of transport (function call, IPC, file drop, CLI pipe).
21
+ *
22
+ * The plugin is injected at construction time so that:
23
+ * - Tests can inject a stub plugin without coupling to Cursor internals
24
+ * - The transport can be replaced without changing this module
25
+ *
26
+ * ── Three delivery paths ───────────────────────────────────────────────────────
27
+ *
28
+ * Path A (happy): persist handoff → call Cursor → accepted → persist receipt
29
+ * Path B (scope): persist handoff → call Cursor → refused_due_to_scope
30
+ * → persist refused → surface scope question
31
+ * Path C (error): persist handoff → call Cursor → refused_due_to_execution_error
32
+ * → persist refused → rejected
33
+ *
34
+ * ── Cursor plugin contract ─────────────────────────────────────────────────────
35
+ *
36
+ * CursorEditorPlugin.receive() is the only call the gate makes into Cursor.
37
+ * The plugin must:
38
+ * - Accept only CursorDeliveryRequest
39
+ * - Return only CursorResponse (one of three kinds)
40
+ * - NOT reach back into the intake pipeline
41
+ * - NOT call persistEnvelope (the gate owns all persistence)
42
+ *
43
+ * ── deliveryId semantics ───────────────────────────────────────────────────────
44
+ *
45
+ * deliveryId is a delivery-attempt identifier, NOT a content identifier.
46
+ * It is unique per attempt. Never use it for provenance chain links —
47
+ * use artifact.id for those. See cursor-delivery-contract.md section 8.
48
+ *
49
+ * See: docs/cursor-delivery-contract.md — full delivery contract
50
+ * docs/cursor-integration-architecture.md — boundary rules R1–R9
51
+ */
52
+ import { hashObject } from "../ucp/hashes.js";
53
+ import { persistEnvelope, persistEnvelopeOrThrow } from "../ucp/persistence/write.js";
54
+ import { createCursorHandoffEnvelope, createCursorReceiptEnvelope, createCursorRefusedEnvelope, } from "../ucp/envelope.js";
55
+ // ─── Delivery gate ────────────────────────────────────────────────────────────
56
+ export class CursorDeliveryGate {
57
+ plugin;
58
+ storeDir;
59
+ persistStrict;
60
+ persistBestEffort;
61
+ constructor(plugin, storeDir, deps = {}) {
62
+ this.plugin = plugin;
63
+ this.storeDir = storeDir;
64
+ this.persistStrict = deps.persistStrict
65
+ ?? ((e) => persistEnvelopeOrThrow(storeDir, e));
66
+ this.persistBestEffort = deps.persistBestEffort
67
+ ?? ((e) => persistEnvelope(storeDir, e));
68
+ }
69
+ /**
70
+ * Deliver a CursorHandoffArtifact to Cursor.
71
+ *
72
+ * CONTRACT — callers must ensure:
73
+ * - artifact.eligibility === "approved_for_cursor" (gate re-checks and blocks if not)
74
+ * - artifact.ocdClearance.status is "cleared" or "conflict_accepted"
75
+ * - artifact.approvedAt is set (H has confirmed)
76
+ *
77
+ * CONTRACT — this function guarantees:
78
+ * - ucp.cursor_handoff.v1 is persisted BEFORE Cursor is called
79
+ * - If persistence fails, Cursor is NOT called (blocked_persistence_failure)
80
+ * - ucp.cursor_receipt.v1 is persisted when Cursor returns "accepted"
81
+ * - ucp.cursor_refused.v1 is persisted when Cursor returns either refusal
82
+ * - Receipt/refusal persistence failures are logged but do not block state transitions
83
+ * (Cursor has already taken a position; the gate cannot undo that)
84
+ *
85
+ * @param artifact The approved CursorHandoffArtifact to deliver.
86
+ * @returns DeliveryGateResult describing the delivery outcome.
87
+ */
88
+ async deliver(artifact) {
89
+ // ── Eligibility check (R2 — Boundary Rule 2) ─────────────────────────────
90
+ if (artifact.eligibility !== "approved_for_cursor") {
91
+ return {
92
+ outcome: "blocked_ineligible",
93
+ reason: `Artifact eligibility is "${artifact.eligibility}", not "approved_for_cursor".`,
94
+ };
95
+ }
96
+ const sentAt = Date.now();
97
+ const deliveryId = computeDeliveryId(artifact.id, sentAt);
98
+ // ── Point 1: Persist handoff BEFORE calling Cursor ───────────────────────
99
+ const handoffEnvelope = createCursorHandoffEnvelope({
100
+ intentId: artifact.intentId,
101
+ responseId: artifact.responseId,
102
+ eligibility: "approved_for_cursor",
103
+ ocdStatus: artifact.ocdClearance.status,
104
+ rulesFired: [...artifact.ocdClearance.rulesFired],
105
+ changeCategory: artifact.changeSpec.category,
106
+ scopeAllowedFiles: [...artifact.scopeConstraint.allowedFiles],
107
+ confirmedByHuman: true,
108
+ confirmedAt: artifact.approvedAt ?? sentAt,
109
+ }, { parentId: artifact.responseId, rootId: artifact.intentId });
110
+ try {
111
+ this.persistStrict(handoffEnvelope);
112
+ }
113
+ catch (err) {
114
+ return {
115
+ outcome: "blocked_persistence_failure",
116
+ reason: `Failed to persist ucp.cursor_handoff.v1 before delivery: ${String(err)}`,
117
+ };
118
+ }
119
+ // ── Call Cursor ───────────────────────────────────────────────────────────
120
+ const request = { deliveryId, sentAt, artifact };
121
+ const response = await this.plugin.receive(request);
122
+ // ── Point 2a/2b: Persist based on Cursor's response ──────────────────────
123
+ if (response.kind === "accepted") {
124
+ const receiptEnvelope = createCursorReceiptEnvelope({
125
+ deliveryId: response.deliveryId,
126
+ handoffId: handoffEnvelope.id,
127
+ artifactId: response.artifactId,
128
+ receivedAt: response.receivedAt,
129
+ }, { parentId: handoffEnvelope.id, rootId: artifact.intentId });
130
+ this.tryPersistBestEffort(receiptEnvelope);
131
+ return {
132
+ outcome: "accepted",
133
+ deliveryId,
134
+ handoffEnvelopeId: handoffEnvelope.id,
135
+ receiptEnvelopeId: receiptEnvelope.id,
136
+ };
137
+ }
138
+ if (response.kind === "refused_due_to_scope") {
139
+ const refusedEnvelope = createCursorRefusedEnvelope(buildRefusedPayloadFromScope(response, handoffEnvelope.id, deliveryId), { parentId: handoffEnvelope.id, rootId: artifact.intentId });
140
+ this.tryPersistBestEffort(refusedEnvelope);
141
+ return {
142
+ outcome: "refused_due_to_scope",
143
+ deliveryId,
144
+ handoffEnvelopeId: handoffEnvelope.id,
145
+ refusedEnvelopeId: refusedEnvelope.id,
146
+ scopeQuestion: response.scopeQuestion,
147
+ };
148
+ }
149
+ // refused_due_to_execution_error (or unknown kind — treated as execution error)
150
+ const executionErrorResponse = response.kind === "refused_due_to_execution_error"
151
+ ? response
152
+ : null;
153
+ const refusedEnvelope = createCursorRefusedEnvelope({
154
+ deliveryId: deliveryId,
155
+ handoffId: handoffEnvelope.id,
156
+ artifactId: artifact.id,
157
+ receivedAt: Date.now(),
158
+ refusalKind: "refused_due_to_execution_error",
159
+ ...(executionErrorResponse !== null
160
+ ? { errorCode: executionErrorResponse.errorCode }
161
+ : { errorCode: "delivery_timeout" }),
162
+ }, { parentId: handoffEnvelope.id, rootId: artifact.intentId });
163
+ this.tryPersistBestEffort(refusedEnvelope);
164
+ return {
165
+ outcome: "refused_due_to_execution_error",
166
+ deliveryId,
167
+ handoffEnvelopeId: handoffEnvelope.id,
168
+ refusedEnvelopeId: refusedEnvelope.id,
169
+ errorCode: executionErrorResponse?.errorCode ?? "delivery_timeout",
170
+ detail: executionErrorResponse?.detail ?? "Cursor did not respond.",
171
+ };
172
+ }
173
+ // ── Internal ────────────────────────────────────────────────────────────────
174
+ tryPersistBestEffort(envelope) {
175
+ try {
176
+ this.persistBestEffort(envelope);
177
+ }
178
+ catch {
179
+ console.warn(`[cursor-delivery-gate] Non-critical persistence failed for envelope id=${envelope.id.slice(0, 8)}… type=${envelope.type}`);
180
+ }
181
+ }
182
+ }
183
+ // ─── Helpers ─────────────────────────────────────────────────────────────────
184
+ /**
185
+ * Compute a delivery-attempt identifier.
186
+ *
187
+ * IMPORTANT: deliveryId is an ATTEMPT identity, not a content identity.
188
+ * It is unique per delivery attempt, not per artifact.
189
+ * Use artifact.id for provenance chain links and content deduplication.
190
+ * Use deliveryId for transport-level correlation only.
191
+ */
192
+ function computeDeliveryId(artifactId, sentAt) {
193
+ return hashObject({ artifactId, sentAt });
194
+ }
195
+ function buildRefusedPayloadFromScope(response, handoffId, deliveryId) {
196
+ const { scopeQuestion } = response;
197
+ return {
198
+ deliveryId,
199
+ handoffId,
200
+ artifactId: response.artifactId,
201
+ receivedAt: response.receivedAt,
202
+ refusalKind: "refused_due_to_scope",
203
+ scopeQuestionKind: scopeQuestion.questionKind,
204
+ scopeCandidates: [...scopeQuestion.candidates],
205
+ scopeSearchedFor: scopeQuestion.searchedFor,
206
+ };
207
+ }
208
+ //# sourceMappingURL=delivery-gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delivery-gate.js","sourceRoot":"","sources":["../../../src/cursor/delivery-gate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Minimal glob matcher for OCD policy checks.
3
+ *
4
+ * Supports the glob features required for cursor integration:
5
+ * double-star - matches any sequence including path separators
6
+ * single-star - matches any sequence NOT including path separators
7
+ * question - matches exactly one non-separator character
8
+ *
9
+ * Matching rules:
10
+ * Paths are normalized to forward slashes before matching.
11
+ * Patterns are anchored (full match required, not substring).
12
+ * Matching is case-insensitive.
13
+ *
14
+ * See: docs/cursor-allowedfiles-policy.md
15
+ */
16
+ /**
17
+ * Return true if filePath matches the given glob pattern.
18
+ *
19
+ * @param filePath File path to test. Backslashes are normalized to forward slashes.
20
+ * @param pattern Glob pattern. Supports double-star, single-star, and question-mark.
21
+ */
22
+ export declare function matchesGlob(filePath: string, pattern: string): boolean;
23
+ /**
24
+ * Convert a glob pattern to an anchored, case-insensitive RegExp.
25
+ *
26
+ * Uses a character-by-character scan to avoid string placeholders that
27
+ * could introduce control characters or confuse source parsers.
28
+ */
29
+ export declare function globToRegex(glob: string): RegExp;
30
+ //# sourceMappingURL=glob-matcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glob-matcher.d.ts","sourceRoot":"","sources":["../../../src/cursor/glob-matcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAItE;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAkChD"}