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,161 @@
1
+ /**
2
+ * Reminder Execution Types — Phase 6, Execution Layer.
3
+ *
4
+ * ── Purpose ───────────────────────────────────────────────────────────────────
5
+ *
6
+ * These types represent the execution pipeline for a reminder-shaped request.
7
+ * They are distinct from the presentation types (Phase 5) and operate at a
8
+ * different layer of the system.
9
+ *
10
+ * ── Layer boundaries ──────────────────────────────────────────────────────────
11
+ *
12
+ * Present Layer (Phase 5) → describes what to show
13
+ * Execution Layer (Phase 6) → validates and produces a verified execution record
14
+ *
15
+ * The Execution Layer does NOT trust the Present Layer blindly.
16
+ * It re-validates independently before producing any artifact.
17
+ *
18
+ * ── What this layer does NOT do ───────────────────────────────────────────────
19
+ *
20
+ * NOT scheduling — no OS/calendar scheduling
21
+ * NOT persisting — no reminder storage
22
+ * NOT delivering — no notification sending
23
+ * NOT resolving tz — no timezone handling
24
+ * NOT date math — "tomorrow" stays "tomorrow", never becomes a Date
25
+ *
26
+ * ── Artifact is the product ───────────────────────────────────────────────────
27
+ *
28
+ * ReminderExecutionArtifact is what downstream scheduling integrations consume.
29
+ * It is the verified, structured record of intent-to-schedule.
30
+ * An artifact is always produced — even on rejection — for complete provenance.
31
+ *
32
+ * ── Parse-once rule ───────────────────────────────────────────────────────────
33
+ *
34
+ * parseTimeText() is called exactly once inside executeReminder().
35
+ * The ParsedTime result is passed into validateExecutionRequest(req, parsedTime).
36
+ * This prevents duplicate parsing and drift between validation and artifact.
37
+ */
38
+ import type { ReminderConfidence } from "../../present/reminders/reminder-types.js";
39
+ /**
40
+ * Input to the execution layer.
41
+ *
42
+ * Built from a ReminderPresentation by buildExecutionRequest().
43
+ * Only created when presentation.state === "ready_to_confirm".
44
+ *
45
+ * source_confidence is preserved from the presentation — it influences
46
+ * validation and is included in the artifact for provenance.
47
+ */
48
+ export type ReminderExecutionRequest = {
49
+ readonly subject: string;
50
+ readonly time_text: string;
51
+ readonly recurrence_text: string | null;
52
+ readonly source_confidence: ReminderConfidence;
53
+ };
54
+ /**
55
+ * Structured intermediate from parseTimeText().
56
+ *
57
+ * ── Determinism contract ─────────────────────────────────────────────────────
58
+ *
59
+ * ParsedTime contains ONLY the structural parse result.
60
+ * It does NOT contain resolved timestamps or Date objects.
61
+ * "tomorrow" stays "tomorrow" — downstream schedulers resolve relative
62
+ * qualifiers against their own time context.
63
+ *
64
+ * ── Kinds ────────────────────────────────────────────────────────────────────
65
+ *
66
+ * time_of_day "at 3pm", "at 09:30 am"
67
+ * relative_offset "in 30 minutes", "in 2 hours"
68
+ * day_with_time "tomorrow at 9am", "next monday at 2pm"
69
+ * day is textual — never normalised to a weekday number or Date
70
+ * unresolvable anything else, or a day qualifier with no time phrase
71
+ */
72
+ export type ParsedTime = {
73
+ readonly kind: "time_of_day";
74
+ readonly hour: number;
75
+ readonly minute: number;
76
+ /** "24h" when no am/pm suffix was present. */
77
+ readonly period: "am" | "pm" | "24h";
78
+ } | {
79
+ readonly kind: "relative_offset";
80
+ readonly offset_minutes: number;
81
+ /** The original phrase for provenance, e.g. "in 30 minutes". */
82
+ readonly basis: string;
83
+ } | {
84
+ readonly kind: "day_with_time";
85
+ /**
86
+ * Textual day qualifier as it appeared in the input, lowercased.
87
+ * Examples: "tomorrow", "today", "next monday", "next friday".
88
+ * Never normalised to a date or weekday number.
89
+ */
90
+ readonly day: string;
91
+ readonly hour: number;
92
+ readonly minute: number;
93
+ readonly period: "am" | "pm" | "24h";
94
+ } | {
95
+ readonly kind: "unresolvable";
96
+ /** Human-readable reason why the time could not be parsed. */
97
+ readonly reason: string;
98
+ };
99
+ /**
100
+ * The four rejection codes for this slice.
101
+ *
102
+ * presentation_incomplete is intentionally absent:
103
+ * buildExecutionRequest() returns null for incomplete presentations,
104
+ * so executeReminder() is never called with one.
105
+ */
106
+ export type ExecutionRejectionCode = "subject_empty" | "subject_unsafe" | "time_unresolvable" | "confidence_too_low";
107
+ export type ExecutionValidation = {
108
+ readonly valid: true;
109
+ } | {
110
+ readonly valid: false;
111
+ readonly reason: string;
112
+ readonly code: ExecutionRejectionCode;
113
+ };
114
+ /**
115
+ * ReminderExecutionArtifact — the verified, structured record of intent-to-schedule.
116
+ *
117
+ * ── What it is ───────────────────────────────────────────────────────────────
118
+ *
119
+ * The product of the execution layer. Downstream schedulers consume this
120
+ * to actually create a reminder. The execution layer itself does not schedule.
121
+ *
122
+ * ── Always produced ──────────────────────────────────────────────────────────
123
+ *
124
+ * An artifact is produced even on rejection. This gives callers a complete
125
+ * provenance record regardless of outcome.
126
+ *
127
+ * ── Field contracts ──────────────────────────────────────────────────────────
128
+ *
129
+ * time_text — the original phrase from the request (preserved for mapper)
130
+ * parsed_time — the full structural parse result (for downstream schedulers)
131
+ * source_confidence — from the presentation; part of why accepted/rejected
132
+ * rejection_reason — present when verdict === "rejected"; for unresolvable time,
133
+ * this carries ParsedTime.reason for full context
134
+ * produced_at_ts — epoch ms; injectable via _now parameter for deterministic tests
135
+ */
136
+ export type ReminderExecutionArtifact = {
137
+ readonly kind: "reminder_execution";
138
+ readonly subject: string;
139
+ readonly time_text: string;
140
+ readonly parsed_time: ParsedTime;
141
+ readonly recurrence_text: string | null;
142
+ readonly source_confidence: ReminderConfidence;
143
+ readonly verdict: "accepted" | "rejected";
144
+ readonly rejection_reason?: string;
145
+ readonly produced_at_ts: number;
146
+ };
147
+ /**
148
+ * ReminderExecutionResult — the discriminated result of executeReminder().
149
+ *
150
+ * Both arms carry the artifact for complete provenance.
151
+ */
152
+ export type ReminderExecutionResult = {
153
+ readonly ok: true;
154
+ readonly artifact: ReminderExecutionArtifact;
155
+ } | {
156
+ readonly ok: false;
157
+ readonly reason: string;
158
+ readonly code: ExecutionRejectionCode;
159
+ readonly artifact: ReminderExecutionArtifact;
160
+ };
161
+ //# sourceMappingURL=reminder-execution-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reminder-execution-types.d.ts","sourceRoot":"","sources":["../../../../src/execution/reminders/reminder-execution-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAIpF;;;;;;;;GAQG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,CAAC,OAAO,EAAY,MAAM,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAU,MAAM,CAAC;IACnC,QAAQ,CAAC,eAAe,EAAI,MAAM,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;CAChD,CAAC;AAIF;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,MAAM,UAAU,GAClB;IACE,QAAQ,CAAC,IAAI,EAAK,aAAa,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAK,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAG,MAAM,CAAC;IACzB,8CAA8C;IAC9C,QAAQ,CAAC,MAAM,EAAG,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;CACvC,GACD;IACE,QAAQ,CAAC,IAAI,EAAa,iBAAiB,CAAC;IAC5C,QAAQ,CAAC,cAAc,EAAG,MAAM,CAAC;IACjC,gEAAgE;IAChE,QAAQ,CAAC,KAAK,EAAY,MAAM,CAAC;CAClC,GACD;IACE,QAAQ,CAAC,IAAI,EAAK,eAAe,CAAC;IAClC;;;;OAIG;IACH,QAAQ,CAAC,GAAG,EAAM,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAK,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAG,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAG,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;CACvC,GACD;IACE,QAAQ,CAAC,IAAI,EAAK,cAAc,CAAC;IACjC,8DAA8D;IAC9D,QAAQ,CAAC,MAAM,EAAG,MAAM,CAAC;CAC1B,CAAC;AAIN;;;;;;GAMG;AACH,MAAM,MAAM,sBAAsB,GAC9B,eAAe,GACf,gBAAgB,GAChB,mBAAmB,GACnB,oBAAoB,CAAC;AAEzB,MAAM,MAAM,mBAAmB,GAC3B;IAAE,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAA;CAAE,GACxB;IAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAA;CAAE,CAAC;AAI9F;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,CAAC,IAAI,EAAgB,oBAAoB,CAAC;IAClD,QAAQ,CAAC,OAAO,EAAa,MAAM,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAW,MAAM,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAS,UAAU,CAAC;IACxC,QAAQ,CAAC,eAAe,EAAK,MAAM,GAAG,IAAI,CAAC;IAC3C,QAAQ,CAAC,iBAAiB,EAAG,kBAAkB,CAAC;IAChD,QAAQ,CAAC,OAAO,EAAa,UAAU,GAAG,UAAU,CAAC;IACrD,QAAQ,CAAC,gBAAgB,CAAC,EAAG,MAAM,CAAC;IACpC,QAAQ,CAAC,cAAc,EAAM,MAAM,CAAC;CACrC,CAAC;AAIF;;;;GAIG;AACH,MAAM,MAAM,uBAAuB,GAC/B;IACE,QAAQ,CAAC,EAAE,EAAQ,IAAI,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,yBAAyB,CAAC;CAC9C,GACD;IACE,QAAQ,CAAC,EAAE,EAAQ,KAAK,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAI,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAM,sBAAsB,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,yBAAyB,CAAC;CAC9C,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Reminder Execution Types — Phase 6, Execution Layer.
3
+ *
4
+ * ── Purpose ───────────────────────────────────────────────────────────────────
5
+ *
6
+ * These types represent the execution pipeline for a reminder-shaped request.
7
+ * They are distinct from the presentation types (Phase 5) and operate at a
8
+ * different layer of the system.
9
+ *
10
+ * ── Layer boundaries ──────────────────────────────────────────────────────────
11
+ *
12
+ * Present Layer (Phase 5) → describes what to show
13
+ * Execution Layer (Phase 6) → validates and produces a verified execution record
14
+ *
15
+ * The Execution Layer does NOT trust the Present Layer blindly.
16
+ * It re-validates independently before producing any artifact.
17
+ *
18
+ * ── What this layer does NOT do ───────────────────────────────────────────────
19
+ *
20
+ * NOT scheduling — no OS/calendar scheduling
21
+ * NOT persisting — no reminder storage
22
+ * NOT delivering — no notification sending
23
+ * NOT resolving tz — no timezone handling
24
+ * NOT date math — "tomorrow" stays "tomorrow", never becomes a Date
25
+ *
26
+ * ── Artifact is the product ───────────────────────────────────────────────────
27
+ *
28
+ * ReminderExecutionArtifact is what downstream scheduling integrations consume.
29
+ * It is the verified, structured record of intent-to-schedule.
30
+ * An artifact is always produced — even on rejection — for complete provenance.
31
+ *
32
+ * ── Parse-once rule ───────────────────────────────────────────────────────────
33
+ *
34
+ * parseTimeText() is called exactly once inside executeReminder().
35
+ * The ParsedTime result is passed into validateExecutionRequest(req, parsedTime).
36
+ * This prevents duplicate parsing and drift between validation and artifact.
37
+ */
38
+ export {};
39
+ //# sourceMappingURL=reminder-execution-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reminder-execution-types.js","sourceRoot":"","sources":["../../../../src/execution/reminders/reminder-execution-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Reminder execution validator — Phase 6, Execution Layer.
3
+ *
4
+ * ── Purpose ───────────────────────────────────────────────────────────────────
5
+ *
6
+ * Re-validates a ReminderExecutionRequest independently of the presentation.
7
+ * A ready_to_confirm presentation does NOT equal "safe to execute."
8
+ * Every execution request must pass validation before an artifact is produced.
9
+ *
10
+ * ── Parse-once contract ───────────────────────────────────────────────────────
11
+ *
12
+ * validateExecutionRequest(req, parsedTime) accepts the already-parsed ParsedTime.
13
+ * Callers (executeReminder) parse once and pass the result here.
14
+ * This prevents duplicate parsing and drift between validation and artifact.
15
+ *
16
+ * ── subject_unsafe scope ─────────────────────────────────────────────────────
17
+ *
18
+ * The unsafe pattern is intentionally narrow: only obvious destructive/system
19
+ * vocabulary that cannot appear in legitimate reminder subjects.
20
+ *
21
+ * It does NOT match broad "scary" language — words like "cancel", "delete",
22
+ * "remove", or "clear" appear legitimately in reminders:
23
+ * "remind me to cancel the meeting"
24
+ * "remind me to delete the temp files"
25
+ *
26
+ * Only multi-word or highly unambiguous destructive patterns are blocked.
27
+ * This mirrors the vocabulary of the existing safety gate, not intent inference.
28
+ */
29
+ import type { ReminderExecutionRequest, ExecutionValidation, ParsedTime } from "./reminder-execution-types.js";
30
+ /**
31
+ * Validate a ReminderExecutionRequest against the already-parsed ParsedTime.
32
+ *
33
+ * Returns { valid: true } or { valid: false, reason, code }.
34
+ *
35
+ * Checks in order:
36
+ * 1. subject_empty — blank or whitespace-only subject
37
+ * 2. subject_unsafe — subject matches narrow destructive pattern list
38
+ * 3. confidence_too_low — source_confidence === "ambiguous"
39
+ * 4. time_unresolvable — parsedTime.kind === "unresolvable"
40
+ *
41
+ * @param req The execution request.
42
+ * @param parsedTime The result of parseTimeText(req.time_text), parsed once by caller.
43
+ */
44
+ export declare function validateExecutionRequest(req: ReminderExecutionRequest, parsedTime: ParsedTime): ExecutionValidation;
45
+ //# sourceMappingURL=reminder-execution-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reminder-execution-validator.d.ts","sourceRoot":"","sources":["../../../../src/execution/reminders/reminder-execution-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EACV,wBAAwB,EACxB,mBAAmB,EACnB,UAAU,EACX,MAAM,+BAA+B,CAAC;AAoBvC;;;;;;;;;;;;;GAaG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAS,wBAAwB,EACpC,UAAU,EAAE,UAAU,GACrB,mBAAmB,CAsCrB"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Reminder execution validator — Phase 6, Execution Layer.
3
+ *
4
+ * ── Purpose ───────────────────────────────────────────────────────────────────
5
+ *
6
+ * Re-validates a ReminderExecutionRequest independently of the presentation.
7
+ * A ready_to_confirm presentation does NOT equal "safe to execute."
8
+ * Every execution request must pass validation before an artifact is produced.
9
+ *
10
+ * ── Parse-once contract ───────────────────────────────────────────────────────
11
+ *
12
+ * validateExecutionRequest(req, parsedTime) accepts the already-parsed ParsedTime.
13
+ * Callers (executeReminder) parse once and pass the result here.
14
+ * This prevents duplicate parsing and drift between validation and artifact.
15
+ *
16
+ * ── subject_unsafe scope ─────────────────────────────────────────────────────
17
+ *
18
+ * The unsafe pattern is intentionally narrow: only obvious destructive/system
19
+ * vocabulary that cannot appear in legitimate reminder subjects.
20
+ *
21
+ * It does NOT match broad "scary" language — words like "cancel", "delete",
22
+ * "remove", or "clear" appear legitimately in reminders:
23
+ * "remind me to cancel the meeting"
24
+ * "remind me to delete the temp files"
25
+ *
26
+ * Only multi-word or highly unambiguous destructive patterns are blocked.
27
+ * This mirrors the vocabulary of the existing safety gate, not intent inference.
28
+ */
29
+ // ─── Patterns ─────────────────────────────────────────────────────────────────
30
+ /**
31
+ * Narrow list of destructive patterns that should not appear in reminder subjects.
32
+ * Same vocabulary style as the safety gate — no broad "scary language" matching.
33
+ *
34
+ * Examples that ARE blocked:
35
+ * "rm -rf everything", "delete all files", "wipe the database",
36
+ * "purge all records", "drop table users"
37
+ *
38
+ * Examples that are NOT blocked (legitimate reminder text):
39
+ * "cancel the meeting", "delete temp files", "clear the whiteboard"
40
+ */
41
+ const UNSAFE_SUBJECT_RE = /\b(?:rm\s+-rf|delete\s+all|wipe\b|purge\s+all|drop\s+table|format\s+(?:disk|drive|c:|\/dev))\b/i;
42
+ // ─── Public API ───────────────────────────────────────────────────────────────
43
+ /**
44
+ * Validate a ReminderExecutionRequest against the already-parsed ParsedTime.
45
+ *
46
+ * Returns { valid: true } or { valid: false, reason, code }.
47
+ *
48
+ * Checks in order:
49
+ * 1. subject_empty — blank or whitespace-only subject
50
+ * 2. subject_unsafe — subject matches narrow destructive pattern list
51
+ * 3. confidence_too_low — source_confidence === "ambiguous"
52
+ * 4. time_unresolvable — parsedTime.kind === "unresolvable"
53
+ *
54
+ * @param req The execution request.
55
+ * @param parsedTime The result of parseTimeText(req.time_text), parsed once by caller.
56
+ */
57
+ export function validateExecutionRequest(req, parsedTime) {
58
+ // 1. Subject must not be empty or whitespace
59
+ if (!req.subject || req.subject.trim().length === 0) {
60
+ return {
61
+ valid: false,
62
+ reason: "subject is empty or whitespace",
63
+ code: "subject_empty",
64
+ };
65
+ }
66
+ // 2. Subject must not contain obvious destructive patterns
67
+ if (UNSAFE_SUBJECT_RE.test(req.subject)) {
68
+ return {
69
+ valid: false,
70
+ reason: "subject contains unsafe content",
71
+ code: "subject_unsafe",
72
+ };
73
+ }
74
+ // 3. Confidence must not be ambiguous
75
+ if (req.source_confidence === "ambiguous") {
76
+ return {
77
+ valid: false,
78
+ reason: "source confidence is ambiguous — cannot execute safely",
79
+ code: "confidence_too_low",
80
+ };
81
+ }
82
+ // 4. Time must have been parseable
83
+ if (parsedTime.kind === "unresolvable") {
84
+ return {
85
+ valid: false,
86
+ reason: `time_text could not be resolved: ${parsedTime.reason}`,
87
+ code: "time_unresolvable",
88
+ };
89
+ }
90
+ return { valid: true };
91
+ }
92
+ //# sourceMappingURL=reminder-execution-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reminder-execution-validator.js","sourceRoot":"","sources":["../../../../src/execution/reminders/reminder-execution-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAQH,iFAAiF;AAEjF;;;;;;;;;;GAUG;AACH,MAAM,iBAAiB,GACrB,iGAAiG,CAAC;AAEpG,iFAAiF;AAEjF;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,wBAAwB,CACtC,GAAoC,EACpC,UAAsB;IAEtB,6CAA6C;IAC7C,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpD,OAAO;YACL,KAAK,EAAG,KAAK;YACb,MAAM,EAAE,gCAAgC;YACxC,IAAI,EAAI,eAAe;SACxB,CAAC;IACJ,CAAC;IAED,2DAA2D;IAC3D,IAAI,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QACxC,OAAO;YACL,KAAK,EAAG,KAAK;YACb,MAAM,EAAE,iCAAiC;YACzC,IAAI,EAAI,gBAAgB;SACzB,CAAC;IACJ,CAAC;IAED,sCAAsC;IACtC,IAAI,GAAG,CAAC,iBAAiB,KAAK,WAAW,EAAE,CAAC;QAC1C,OAAO;YACL,KAAK,EAAG,KAAK;YACb,MAAM,EAAE,wDAAwD;YAChE,IAAI,EAAI,oBAAoB;SAC7B,CAAC;IACJ,CAAC;IAED,mCAAmC;IACnC,IAAI,UAAU,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QACvC,OAAO;YACL,KAAK,EAAG,KAAK;YACb,MAAM,EAAE,oCAAoC,UAAU,CAAC,MAAM,EAAE;YAC/D,IAAI,EAAI,mBAAmB;SAC5B,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Reminder executor — Phase 6, Execution Layer.
3
+ *
4
+ * ── Purpose ───────────────────────────────────────────────────────────────────
5
+ *
6
+ * Orchestrates the execution pipeline for a reminder-shaped request:
7
+ * buildExecutionRequest — one-way Present→Execution adapter
8
+ * executeReminder — parses, validates, produces artifact
9
+ *
10
+ * ── Dependency direction ──────────────────────────────────────────────────────
11
+ *
12
+ * Execution imports from Present (ReminderPresentation type).
13
+ * Present NEVER imports from Execution.
14
+ * This is a one-way dependency — the Present Layer remains zero-authority.
15
+ *
16
+ * ── Artifact contract ─────────────────────────────────────────────────────────
17
+ *
18
+ * An artifact is always produced — even when validation fails.
19
+ * This gives callers a complete, inspectable provenance record.
20
+ * Downstream schedulers only consume artifacts where verdict === "accepted".
21
+ *
22
+ * ── Parse-once contract ───────────────────────────────────────────────────────
23
+ *
24
+ * parseTimeText is called exactly once inside executeReminder.
25
+ * The ParsedTime result is passed to validateExecutionRequest(req, parsedTime).
26
+ * No duplicate parsing. No drift between validation and artifact construction.
27
+ */
28
+ import type { ReminderPresentation } from "../../present/reminders/reminder-types.js";
29
+ import type { ReminderExecutionRequest, ReminderExecutionResult } from "./reminder-execution-types.js";
30
+ /**
31
+ * One-way adapter: ReminderPresentation → ReminderExecutionRequest | null.
32
+ *
33
+ * Returns null when the presentation is not ready to execute:
34
+ * - state !== "ready_to_confirm"
35
+ * - subject or time_text are missing (null)
36
+ *
37
+ * This is the gating function that prevents executeReminder from ever
38
+ * receiving an incomplete or ambiguous presentation.
39
+ *
40
+ * Note: null here does NOT mean "reject with an artifact". It means the
41
+ * presentation has not reached the execution layer yet — the consumer should
42
+ * prompt the user for the missing field(s) instead.
43
+ *
44
+ * @param presentation A ReminderPresentation from presentFromInput().
45
+ */
46
+ export declare function buildExecutionRequest(presentation: ReminderPresentation): ReminderExecutionRequest | null;
47
+ /**
48
+ * Execute a validated reminder request.
49
+ *
50
+ * Produces a ReminderExecutionArtifact — the verified, structured record
51
+ * of intent-to-schedule. Does NOT schedule, persist, or notify.
52
+ *
53
+ * Pipeline:
54
+ * 1. parseTimeText(req.time_text) → ParsedTime (once)
55
+ * 2. validateExecutionRequest(req, parsedTime) → ExecutionValidation
56
+ * 3. Build artifact (accepted or rejected)
57
+ *
58
+ * @param req The execution request (from buildExecutionRequest).
59
+ * @param _now Epoch ms timestamp; defaults to Date.now(). Injectable for tests.
60
+ */
61
+ export declare function executeReminder(req: ReminderExecutionRequest, _now?: number): ReminderExecutionResult;
62
+ //# sourceMappingURL=reminder-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reminder-executor.d.ts","sourceRoot":"","sources":["../../../../src/execution/reminders/reminder-executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACtF,OAAO,KAAK,EACV,wBAAwB,EAExB,uBAAuB,EACxB,MAAM,+BAA+B,CAAC;AAMvC;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,oBAAoB,GACjC,wBAAwB,GAAG,IAAI,CAWjC;AAID;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAI,wBAAwB,EAC/B,IAAI,GAAG,MAAmB,GACzB,uBAAuB,CAyCzB"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Reminder executor — Phase 6, Execution Layer.
3
+ *
4
+ * ── Purpose ───────────────────────────────────────────────────────────────────
5
+ *
6
+ * Orchestrates the execution pipeline for a reminder-shaped request:
7
+ * buildExecutionRequest — one-way Present→Execution adapter
8
+ * executeReminder — parses, validates, produces artifact
9
+ *
10
+ * ── Dependency direction ──────────────────────────────────────────────────────
11
+ *
12
+ * Execution imports from Present (ReminderPresentation type).
13
+ * Present NEVER imports from Execution.
14
+ * This is a one-way dependency — the Present Layer remains zero-authority.
15
+ *
16
+ * ── Artifact contract ─────────────────────────────────────────────────────────
17
+ *
18
+ * An artifact is always produced — even when validation fails.
19
+ * This gives callers a complete, inspectable provenance record.
20
+ * Downstream schedulers only consume artifacts where verdict === "accepted".
21
+ *
22
+ * ── Parse-once contract ───────────────────────────────────────────────────────
23
+ *
24
+ * parseTimeText is called exactly once inside executeReminder.
25
+ * The ParsedTime result is passed to validateExecutionRequest(req, parsedTime).
26
+ * No duplicate parsing. No drift between validation and artifact construction.
27
+ */
28
+ import { parseTimeText } from "./reminder-time-parser.js";
29
+ import { validateExecutionRequest } from "./reminder-execution-validator.js";
30
+ // ─── buildExecutionRequest ────────────────────────────────────────────────────
31
+ /**
32
+ * One-way adapter: ReminderPresentation → ReminderExecutionRequest | null.
33
+ *
34
+ * Returns null when the presentation is not ready to execute:
35
+ * - state !== "ready_to_confirm"
36
+ * - subject or time_text are missing (null)
37
+ *
38
+ * This is the gating function that prevents executeReminder from ever
39
+ * receiving an incomplete or ambiguous presentation.
40
+ *
41
+ * Note: null here does NOT mean "reject with an artifact". It means the
42
+ * presentation has not reached the execution layer yet — the consumer should
43
+ * prompt the user for the missing field(s) instead.
44
+ *
45
+ * @param presentation A ReminderPresentation from presentFromInput().
46
+ */
47
+ export function buildExecutionRequest(presentation) {
48
+ if (presentation.state !== "ready_to_confirm")
49
+ return null;
50
+ if (presentation.subject === null)
51
+ return null;
52
+ if (presentation.time_text === null)
53
+ return null;
54
+ return {
55
+ subject: presentation.subject,
56
+ time_text: presentation.time_text,
57
+ recurrence_text: presentation.recurrence_text,
58
+ source_confidence: presentation.confidence,
59
+ };
60
+ }
61
+ // ─── executeReminder ──────────────────────────────────────────────────────────
62
+ /**
63
+ * Execute a validated reminder request.
64
+ *
65
+ * Produces a ReminderExecutionArtifact — the verified, structured record
66
+ * of intent-to-schedule. Does NOT schedule, persist, or notify.
67
+ *
68
+ * Pipeline:
69
+ * 1. parseTimeText(req.time_text) → ParsedTime (once)
70
+ * 2. validateExecutionRequest(req, parsedTime) → ExecutionValidation
71
+ * 3. Build artifact (accepted or rejected)
72
+ *
73
+ * @param req The execution request (from buildExecutionRequest).
74
+ * @param _now Epoch ms timestamp; defaults to Date.now(). Injectable for tests.
75
+ */
76
+ export function executeReminder(req, _now = Date.now()) {
77
+ // ── Parse once ────────────────────────────────────────────────────────────
78
+ const parsedTime = parseTimeText(req.time_text);
79
+ // ── Validate ──────────────────────────────────────────────────────────────
80
+ const validation = validateExecutionRequest(req, parsedTime);
81
+ // ── Build artifact ────────────────────────────────────────────────────────
82
+ if (!validation.valid) {
83
+ // For time_unresolvable, the ParsedTime.reason is the most specific
84
+ // explanation — carry it forward in rejection_reason.
85
+ const rejection_reason = validation.code === "time_unresolvable" && parsedTime.kind === "unresolvable"
86
+ ? `${validation.reason} (parse detail: ${parsedTime.reason})`
87
+ : validation.reason;
88
+ const artifact = {
89
+ kind: "reminder_execution",
90
+ subject: req.subject,
91
+ time_text: req.time_text,
92
+ parsed_time: parsedTime,
93
+ recurrence_text: req.recurrence_text,
94
+ source_confidence: req.source_confidence,
95
+ verdict: "rejected",
96
+ rejection_reason,
97
+ produced_at_ts: _now,
98
+ };
99
+ return { ok: false, reason: validation.reason, code: validation.code, artifact };
100
+ }
101
+ const artifact = {
102
+ kind: "reminder_execution",
103
+ subject: req.subject,
104
+ time_text: req.time_text,
105
+ parsed_time: parsedTime,
106
+ recurrence_text: req.recurrence_text,
107
+ source_confidence: req.source_confidence,
108
+ verdict: "accepted",
109
+ produced_at_ts: _now,
110
+ };
111
+ return { ok: true, artifact };
112
+ }
113
+ //# sourceMappingURL=reminder-executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reminder-executor.js","sourceRoot":"","sources":["../../../../src/execution/reminders/reminder-executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAQH,OAAO,EAAE,aAAa,EAAE,MAAkB,2BAA2B,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,MAAO,mCAAmC,CAAC;AAE9E,iFAAiF;AAEjF;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,qBAAqB,CACnC,YAAkC;IAElC,IAAI,YAAY,CAAC,KAAK,KAAK,kBAAkB;QAAE,OAAO,IAAI,CAAC;IAC3D,IAAI,YAAY,CAAC,OAAO,KAAK,IAAI;QAAc,OAAO,IAAI,CAAC;IAC3D,IAAI,YAAY,CAAC,SAAS,KAAK,IAAI;QAAY,OAAO,IAAI,CAAC;IAE3D,OAAO;QACL,OAAO,EAAY,YAAY,CAAC,OAAO;QACvC,SAAS,EAAU,YAAY,CAAC,SAAS;QACzC,eAAe,EAAI,YAAY,CAAC,eAAe;QAC/C,iBAAiB,EAAE,YAAY,CAAC,UAAU;KAC3C,CAAC;AACJ,CAAC;AAED,iFAAiF;AAEjF;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,eAAe,CAC7B,GAA+B,EAC/B,OAAgB,IAAI,CAAC,GAAG,EAAE;IAE1B,6EAA6E;IAC7E,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAEhD,6EAA6E;IAC7E,MAAM,UAAU,GAAG,wBAAwB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAE7D,6EAA6E;IAC7E,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACtB,oEAAoE;QACpE,sDAAsD;QACtD,MAAM,gBAAgB,GACpB,UAAU,CAAC,IAAI,KAAK,mBAAmB,IAAI,UAAU,CAAC,IAAI,KAAK,cAAc;YAC3E,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,mBAAmB,UAAU,CAAC,MAAM,GAAG;YAC7D,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;QAExB,MAAM,QAAQ,GAA8B;YAC1C,IAAI,EAAgB,oBAAoB;YACxC,OAAO,EAAa,GAAG,CAAC,OAAO;YAC/B,SAAS,EAAW,GAAG,CAAC,SAAS;YACjC,WAAW,EAAS,UAAU;YAC9B,eAAe,EAAK,GAAG,CAAC,eAAe;YACvC,iBAAiB,EAAG,GAAG,CAAC,iBAAiB;YACzC,OAAO,EAAa,UAAU;YAC9B,gBAAgB;YAChB,cAAc,EAAM,IAAI;SACzB,CAAC;QACF,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC;IACnF,CAAC;IAED,MAAM,QAAQ,GAA8B;QAC1C,IAAI,EAAe,oBAAoB;QACvC,OAAO,EAAY,GAAG,CAAC,OAAO;QAC9B,SAAS,EAAU,GAAG,CAAC,SAAS;QAChC,WAAW,EAAQ,UAAU;QAC7B,eAAe,EAAI,GAAG,CAAC,eAAe;QACtC,iBAAiB,EAAE,GAAG,CAAC,iBAAiB;QACxC,OAAO,EAAY,UAAU;QAC7B,cAAc,EAAK,IAAI;KACxB,CAAC;IACF,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAChC,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Reminder time parser — Phase 6, Execution Layer.
3
+ *
4
+ * ── Purpose ───────────────────────────────────────────────────────────────────
5
+ *
6
+ * Converts a time_text phrase into a structured ParsedTime.
7
+ * Conservative, regex-only, fully deterministic.
8
+ *
9
+ * ── What it does NOT do ───────────────────────────────────────────────────────
10
+ *
11
+ * Does NOT produce Date objects or resolved timestamps.
12
+ * Does NOT assume a default time for day-only phrases.
13
+ * Does NOT handle timezones.
14
+ * Does NOT do fuzzy matching or ML-based inference.
15
+ *
16
+ * ── Pattern priority (first match wins) ──────────────────────────────────────
17
+ *
18
+ * 1. relative_offset — "in N minutes" / "in N hours"
19
+ * 2. day_with_time — day qualifier + explicit time phrase
20
+ * 3. time_of_day — explicit time with no day qualifier
21
+ * 4. unresolvable — anything else (including day qualifier without time)
22
+ *
23
+ * ── Day qualifier without time → unresolvable ────────────────────────────────
24
+ *
25
+ * "remind me tomorrow" has no time → unresolvable.
26
+ * The execution layer does not guess a default time.
27
+ * The caller must surface the missing time to the user.
28
+ */
29
+ import type { ParsedTime } from "./reminder-execution-types.js";
30
+ /**
31
+ * Parse a time_text phrase into a structured ParsedTime.
32
+ *
33
+ * Pure function — same input always produces the same output.
34
+ * Called once inside executeReminder(); the result is passed to
35
+ * validateExecutionRequest(req, parsedTime) to avoid duplicate parsing.
36
+ *
37
+ * @param time_text The time phrase extracted by the Present Layer, e.g.
38
+ * "tomorrow at 9am", "in 30 minutes", "at 3pm".
39
+ */
40
+ export declare function parseTimeText(time_text: string): ParsedTime;
41
+ //# sourceMappingURL=reminder-time-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reminder-time-parser.d.ts","sourceRoot":"","sources":["../../../../src/execution/reminders/reminder-time-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AA0ChE;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,CA6D3D"}