@mutates/cli 2.1.0

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 (515) hide show
  1. package/README.md +105 -0
  2. package/bin/mutates.d.ts +1 -0
  3. package/bin/mutates.js +37 -0
  4. package/bin/mutates.js.map +1 -0
  5. package/package.json +46 -0
  6. package/src/client/format-snapshot.d.ts +13 -0
  7. package/src/client/format-snapshot.js +38 -0
  8. package/src/client/format-snapshot.js.map +1 -0
  9. package/src/client/output.d.ts +25 -0
  10. package/src/client/output.js +76 -0
  11. package/src/client/output.js.map +1 -0
  12. package/src/client/rpc-client-testing.d.ts +12 -0
  13. package/src/client/rpc-client-testing.js +21 -0
  14. package/src/client/rpc-client-testing.js.map +1 -0
  15. package/src/client/rpc-client.d.ts +35 -0
  16. package/src/client/rpc-client.js +172 -0
  17. package/src/client/rpc-client.js.map +1 -0
  18. package/src/commands/core/close.d.ts +28 -0
  19. package/src/commands/core/close.js +74 -0
  20. package/src/commands/core/close.js.map +1 -0
  21. package/src/commands/core/diff.d.ts +25 -0
  22. package/src/commands/core/diff.js +71 -0
  23. package/src/commands/core/diff.js.map +1 -0
  24. package/src/commands/core/find.d.ts +30 -0
  25. package/src/commands/core/find.js +80 -0
  26. package/src/commands/core/find.js.map +1 -0
  27. package/src/commands/core/list-files.d.ts +24 -0
  28. package/src/commands/core/list-files.js +62 -0
  29. package/src/commands/core/list-files.js.map +1 -0
  30. package/src/commands/core/open.d.ts +19 -0
  31. package/src/commands/core/open.js +49 -0
  32. package/src/commands/core/open.js.map +1 -0
  33. package/src/commands/core/reload.d.ts +26 -0
  34. package/src/commands/core/reload.js +64 -0
  35. package/src/commands/core/reload.js.map +1 -0
  36. package/src/commands/core/save.d.ts +29 -0
  37. package/src/commands/core/save.js +69 -0
  38. package/src/commands/core/save.js.map +1 -0
  39. package/src/commands/core/schema.d.ts +26 -0
  40. package/src/commands/core/schema.js +53 -0
  41. package/src/commands/core/schema.js.map +1 -0
  42. package/src/commands/core/sessions.d.ts +2 -0
  43. package/src/commands/core/sessions.js +79 -0
  44. package/src/commands/core/sessions.js.map +1 -0
  45. package/src/commands/core/skills.d.ts +2 -0
  46. package/src/commands/core/skills.js +72 -0
  47. package/src/commands/core/skills.js.map +1 -0
  48. package/src/commands/core/snapshot.d.ts +31 -0
  49. package/src/commands/core/snapshot.js +73 -0
  50. package/src/commands/core/snapshot.js.map +1 -0
  51. package/src/commands/generated/accessors/add.d.ts +28 -0
  52. package/src/commands/generated/accessors/add.js +70 -0
  53. package/src/commands/generated/accessors/add.js.map +1 -0
  54. package/src/commands/generated/accessors/edit.d.ts +28 -0
  55. package/src/commands/generated/accessors/edit.js +70 -0
  56. package/src/commands/generated/accessors/edit.js.map +1 -0
  57. package/src/commands/generated/accessors/get.d.ts +28 -0
  58. package/src/commands/generated/accessors/get.js +70 -0
  59. package/src/commands/generated/accessors/get.js.map +1 -0
  60. package/src/commands/generated/accessors/remove.d.ts +28 -0
  61. package/src/commands/generated/accessors/remove.js +70 -0
  62. package/src/commands/generated/accessors/remove.js.map +1 -0
  63. package/src/commands/generated/all-decorators/get.d.ts +27 -0
  64. package/src/commands/generated/all-decorators/get.js +70 -0
  65. package/src/commands/generated/all-decorators/get.js.map +1 -0
  66. package/src/commands/generated/class-accessors/get.d.ts +28 -0
  67. package/src/commands/generated/class-accessors/get.js +70 -0
  68. package/src/commands/generated/class-accessors/get.js.map +1 -0
  69. package/src/commands/generated/class-methods/get.d.ts +28 -0
  70. package/src/commands/generated/class-methods/get.js +70 -0
  71. package/src/commands/generated/class-methods/get.js.map +1 -0
  72. package/src/commands/generated/class-properties/add.d.ts +28 -0
  73. package/src/commands/generated/class-properties/add.js +70 -0
  74. package/src/commands/generated/class-properties/add.js.map +1 -0
  75. package/src/commands/generated/class-properties/edit.d.ts +28 -0
  76. package/src/commands/generated/class-properties/edit.js +70 -0
  77. package/src/commands/generated/class-properties/edit.js.map +1 -0
  78. package/src/commands/generated/class-properties/get.d.ts +27 -0
  79. package/src/commands/generated/class-properties/get.js +70 -0
  80. package/src/commands/generated/class-properties/get.js.map +1 -0
  81. package/src/commands/generated/class-properties/remove.d.ts +28 -0
  82. package/src/commands/generated/class-properties/remove.js +70 -0
  83. package/src/commands/generated/class-properties/remove.js.map +1 -0
  84. package/src/commands/generated/classes/add.d.ts +29 -0
  85. package/src/commands/generated/classes/add.js +70 -0
  86. package/src/commands/generated/classes/add.js.map +1 -0
  87. package/src/commands/generated/classes/edit.d.ts +28 -0
  88. package/src/commands/generated/classes/edit.js +70 -0
  89. package/src/commands/generated/classes/edit.js.map +1 -0
  90. package/src/commands/generated/classes/get.d.ts +27 -0
  91. package/src/commands/generated/classes/get.js +70 -0
  92. package/src/commands/generated/classes/get.js.map +1 -0
  93. package/src/commands/generated/classes/remove.d.ts +28 -0
  94. package/src/commands/generated/classes/remove.js +70 -0
  95. package/src/commands/generated/classes/remove.js.map +1 -0
  96. package/src/commands/generated/constructors/add.d.ts +28 -0
  97. package/src/commands/generated/constructors/add.js +70 -0
  98. package/src/commands/generated/constructors/add.js.map +1 -0
  99. package/src/commands/generated/constructors/edit.d.ts +28 -0
  100. package/src/commands/generated/constructors/edit.js +70 -0
  101. package/src/commands/generated/constructors/edit.js.map +1 -0
  102. package/src/commands/generated/constructors/get.d.ts +28 -0
  103. package/src/commands/generated/constructors/get.js +70 -0
  104. package/src/commands/generated/constructors/get.js.map +1 -0
  105. package/src/commands/generated/constructors/remove.d.ts +28 -0
  106. package/src/commands/generated/constructors/remove.js +70 -0
  107. package/src/commands/generated/constructors/remove.js.map +1 -0
  108. package/src/commands/generated/decorators/add.d.ts +28 -0
  109. package/src/commands/generated/decorators/add.js +70 -0
  110. package/src/commands/generated/decorators/add.js.map +1 -0
  111. package/src/commands/generated/decorators/edit.d.ts +28 -0
  112. package/src/commands/generated/decorators/edit.js +70 -0
  113. package/src/commands/generated/decorators/edit.js.map +1 -0
  114. package/src/commands/generated/decorators/get.d.ts +28 -0
  115. package/src/commands/generated/decorators/get.js +70 -0
  116. package/src/commands/generated/decorators/get.js.map +1 -0
  117. package/src/commands/generated/decorators/remove.d.ts +28 -0
  118. package/src/commands/generated/decorators/remove.js +70 -0
  119. package/src/commands/generated/decorators/remove.js.map +1 -0
  120. package/src/commands/generated/enums/add.d.ts +29 -0
  121. package/src/commands/generated/enums/add.js +70 -0
  122. package/src/commands/generated/enums/add.js.map +1 -0
  123. package/src/commands/generated/enums/edit.d.ts +28 -0
  124. package/src/commands/generated/enums/edit.js +70 -0
  125. package/src/commands/generated/enums/edit.js.map +1 -0
  126. package/src/commands/generated/enums/get.d.ts +27 -0
  127. package/src/commands/generated/enums/get.js +70 -0
  128. package/src/commands/generated/enums/get.js.map +1 -0
  129. package/src/commands/generated/enums/remove.d.ts +28 -0
  130. package/src/commands/generated/enums/remove.js +70 -0
  131. package/src/commands/generated/enums/remove.js.map +1 -0
  132. package/src/commands/generated/exports/add.d.ts +29 -0
  133. package/src/commands/generated/exports/add.js +70 -0
  134. package/src/commands/generated/exports/add.js.map +1 -0
  135. package/src/commands/generated/exports/edit.d.ts +28 -0
  136. package/src/commands/generated/exports/edit.js +70 -0
  137. package/src/commands/generated/exports/edit.js.map +1 -0
  138. package/src/commands/generated/exports/get.d.ts +27 -0
  139. package/src/commands/generated/exports/get.js +70 -0
  140. package/src/commands/generated/exports/get.js.map +1 -0
  141. package/src/commands/generated/exports/remove.d.ts +28 -0
  142. package/src/commands/generated/exports/remove.js +70 -0
  143. package/src/commands/generated/exports/remove.js.map +1 -0
  144. package/src/commands/generated/functions/add.d.ts +29 -0
  145. package/src/commands/generated/functions/add.js +70 -0
  146. package/src/commands/generated/functions/add.js.map +1 -0
  147. package/src/commands/generated/functions/edit.d.ts +28 -0
  148. package/src/commands/generated/functions/edit.js +70 -0
  149. package/src/commands/generated/functions/edit.js.map +1 -0
  150. package/src/commands/generated/functions/get.d.ts +27 -0
  151. package/src/commands/generated/functions/get.js +70 -0
  152. package/src/commands/generated/functions/get.js.map +1 -0
  153. package/src/commands/generated/functions/remove.d.ts +28 -0
  154. package/src/commands/generated/functions/remove.js +70 -0
  155. package/src/commands/generated/functions/remove.js.map +1 -0
  156. package/src/commands/generated/import-refs/get.d.ts +28 -0
  157. package/src/commands/generated/import-refs/get.js +70 -0
  158. package/src/commands/generated/import-refs/get.js.map +1 -0
  159. package/src/commands/generated/imports/add.d.ts +29 -0
  160. package/src/commands/generated/imports/add.js +70 -0
  161. package/src/commands/generated/imports/add.js.map +1 -0
  162. package/src/commands/generated/imports/edit.d.ts +28 -0
  163. package/src/commands/generated/imports/edit.js +70 -0
  164. package/src/commands/generated/imports/edit.js.map +1 -0
  165. package/src/commands/generated/imports/get.d.ts +27 -0
  166. package/src/commands/generated/imports/get.js +70 -0
  167. package/src/commands/generated/imports/get.js.map +1 -0
  168. package/src/commands/generated/imports/remove.d.ts +28 -0
  169. package/src/commands/generated/imports/remove.js +70 -0
  170. package/src/commands/generated/imports/remove.js.map +1 -0
  171. package/src/commands/generated/index.d.ts +2 -0
  172. package/src/commands/generated/index.js +106 -0
  173. package/src/commands/generated/index.js.map +1 -0
  174. package/src/commands/generated/interfaces/add.d.ts +29 -0
  175. package/src/commands/generated/interfaces/add.js +70 -0
  176. package/src/commands/generated/interfaces/add.js.map +1 -0
  177. package/src/commands/generated/interfaces/edit.d.ts +28 -0
  178. package/src/commands/generated/interfaces/edit.js +70 -0
  179. package/src/commands/generated/interfaces/edit.js.map +1 -0
  180. package/src/commands/generated/interfaces/get.d.ts +27 -0
  181. package/src/commands/generated/interfaces/get.js +70 -0
  182. package/src/commands/generated/interfaces/get.js.map +1 -0
  183. package/src/commands/generated/interfaces/remove.d.ts +28 -0
  184. package/src/commands/generated/interfaces/remove.js +70 -0
  185. package/src/commands/generated/interfaces/remove.js.map +1 -0
  186. package/src/commands/generated/methods/add.d.ts +28 -0
  187. package/src/commands/generated/methods/add.js +70 -0
  188. package/src/commands/generated/methods/add.js.map +1 -0
  189. package/src/commands/generated/methods/edit.d.ts +28 -0
  190. package/src/commands/generated/methods/edit.js +70 -0
  191. package/src/commands/generated/methods/edit.js.map +1 -0
  192. package/src/commands/generated/methods/get.d.ts +28 -0
  193. package/src/commands/generated/methods/get.js +70 -0
  194. package/src/commands/generated/methods/get.js.map +1 -0
  195. package/src/commands/generated/methods/remove.d.ts +28 -0
  196. package/src/commands/generated/methods/remove.js +70 -0
  197. package/src/commands/generated/methods/remove.js.map +1 -0
  198. package/src/commands/generated/named-imports/get.d.ts +28 -0
  199. package/src/commands/generated/named-imports/get.js +70 -0
  200. package/src/commands/generated/named-imports/get.js.map +1 -0
  201. package/src/commands/generated/object-accessors/get.d.ts +28 -0
  202. package/src/commands/generated/object-accessors/get.js +70 -0
  203. package/src/commands/generated/object-accessors/get.js.map +1 -0
  204. package/src/commands/generated/object-methods/get.d.ts +28 -0
  205. package/src/commands/generated/object-methods/get.js +70 -0
  206. package/src/commands/generated/object-methods/get.js.map +1 -0
  207. package/src/commands/generated/object-properties/edit.d.ts +28 -0
  208. package/src/commands/generated/object-properties/edit.js +70 -0
  209. package/src/commands/generated/object-properties/edit.js.map +1 -0
  210. package/src/commands/generated/object-properties/get.d.ts +27 -0
  211. package/src/commands/generated/object-properties/get.js +70 -0
  212. package/src/commands/generated/object-properties/get.js.map +1 -0
  213. package/src/commands/generated/object-properties/remove.d.ts +28 -0
  214. package/src/commands/generated/object-properties/remove.js +70 -0
  215. package/src/commands/generated/object-properties/remove.js.map +1 -0
  216. package/src/commands/generated/object-property/add.d.ts +28 -0
  217. package/src/commands/generated/object-property/add.js +70 -0
  218. package/src/commands/generated/object-property/add.js.map +1 -0
  219. package/src/commands/generated/params/add.d.ts +28 -0
  220. package/src/commands/generated/params/add.js +70 -0
  221. package/src/commands/generated/params/add.js.map +1 -0
  222. package/src/commands/generated/params/edit.d.ts +28 -0
  223. package/src/commands/generated/params/edit.js +70 -0
  224. package/src/commands/generated/params/edit.js.map +1 -0
  225. package/src/commands/generated/params/get.d.ts +28 -0
  226. package/src/commands/generated/params/get.js +70 -0
  227. package/src/commands/generated/params/get.js.map +1 -0
  228. package/src/commands/generated/params/remove.d.ts +28 -0
  229. package/src/commands/generated/params/remove.js +70 -0
  230. package/src/commands/generated/params/remove.js.map +1 -0
  231. package/src/commands/generated/source-file/get.d.ts +29 -0
  232. package/src/commands/generated/source-file/get.js +70 -0
  233. package/src/commands/generated/source-file/get.js.map +1 -0
  234. package/src/commands/generated/source-files/add.d.ts +29 -0
  235. package/src/commands/generated/source-files/add.js +70 -0
  236. package/src/commands/generated/source-files/add.js.map +1 -0
  237. package/src/commands/generated/source-files/get.d.ts +29 -0
  238. package/src/commands/generated/source-files/get.js +70 -0
  239. package/src/commands/generated/source-files/get.js.map +1 -0
  240. package/src/commands/generated/variables/add.d.ts +29 -0
  241. package/src/commands/generated/variables/add.js +70 -0
  242. package/src/commands/generated/variables/add.js.map +1 -0
  243. package/src/commands/generated/variables/edit.d.ts +28 -0
  244. package/src/commands/generated/variables/edit.js +70 -0
  245. package/src/commands/generated/variables/edit.js.map +1 -0
  246. package/src/commands/generated/variables/get.d.ts +27 -0
  247. package/src/commands/generated/variables/get.js +70 -0
  248. package/src/commands/generated/variables/get.js.map +1 -0
  249. package/src/commands/generated/variables/remove.d.ts +28 -0
  250. package/src/commands/generated/variables/remove.js +70 -0
  251. package/src/commands/generated/variables/remove.js.map +1 -0
  252. package/src/daemon/dispatcher.d.ts +34 -0
  253. package/src/daemon/dispatcher.js +122 -0
  254. package/src/daemon/dispatcher.js.map +1 -0
  255. package/src/daemon/entry.d.ts +39 -0
  256. package/src/daemon/entry.js +153 -0
  257. package/src/daemon/entry.js.map +1 -0
  258. package/src/daemon/handlers/diff.d.ts +7 -0
  259. package/src/daemon/handlers/diff.js +42 -0
  260. package/src/daemon/handlers/diff.js.map +1 -0
  261. package/src/daemon/handlers/find.d.ts +7 -0
  262. package/src/daemon/handlers/find.js +73 -0
  263. package/src/daemon/handlers/find.js.map +1 -0
  264. package/src/daemon/handlers/generated/_runtime.d.ts +23 -0
  265. package/src/daemon/handlers/generated/_runtime.js +87 -0
  266. package/src/daemon/handlers/generated/_runtime.js.map +1 -0
  267. package/src/daemon/handlers/generated/accessors/add.d.ts +2 -0
  268. package/src/daemon/handlers/generated/accessors/add.js +22 -0
  269. package/src/daemon/handlers/generated/accessors/add.js.map +1 -0
  270. package/src/daemon/handlers/generated/accessors/edit.d.ts +2 -0
  271. package/src/daemon/handlers/generated/accessors/edit.js +24 -0
  272. package/src/daemon/handlers/generated/accessors/edit.js.map +1 -0
  273. package/src/daemon/handlers/generated/accessors/get.d.ts +2 -0
  274. package/src/daemon/handlers/generated/accessors/get.js +22 -0
  275. package/src/daemon/handlers/generated/accessors/get.js.map +1 -0
  276. package/src/daemon/handlers/generated/accessors/remove.d.ts +2 -0
  277. package/src/daemon/handlers/generated/accessors/remove.js +22 -0
  278. package/src/daemon/handlers/generated/accessors/remove.js.map +1 -0
  279. package/src/daemon/handlers/generated/all-decorators/get.d.ts +2 -0
  280. package/src/daemon/handlers/generated/all-decorators/get.js +22 -0
  281. package/src/daemon/handlers/generated/all-decorators/get.js.map +1 -0
  282. package/src/daemon/handlers/generated/class-accessors/get.d.ts +2 -0
  283. package/src/daemon/handlers/generated/class-accessors/get.js +22 -0
  284. package/src/daemon/handlers/generated/class-accessors/get.js.map +1 -0
  285. package/src/daemon/handlers/generated/class-methods/get.d.ts +2 -0
  286. package/src/daemon/handlers/generated/class-methods/get.js +22 -0
  287. package/src/daemon/handlers/generated/class-methods/get.js.map +1 -0
  288. package/src/daemon/handlers/generated/class-properties/add.d.ts +2 -0
  289. package/src/daemon/handlers/generated/class-properties/add.js +22 -0
  290. package/src/daemon/handlers/generated/class-properties/add.js.map +1 -0
  291. package/src/daemon/handlers/generated/class-properties/edit.d.ts +2 -0
  292. package/src/daemon/handlers/generated/class-properties/edit.js +24 -0
  293. package/src/daemon/handlers/generated/class-properties/edit.js.map +1 -0
  294. package/src/daemon/handlers/generated/class-properties/get.d.ts +2 -0
  295. package/src/daemon/handlers/generated/class-properties/get.js +22 -0
  296. package/src/daemon/handlers/generated/class-properties/get.js.map +1 -0
  297. package/src/daemon/handlers/generated/class-properties/remove.d.ts +2 -0
  298. package/src/daemon/handlers/generated/class-properties/remove.js +22 -0
  299. package/src/daemon/handlers/generated/class-properties/remove.js.map +1 -0
  300. package/src/daemon/handlers/generated/classes/add.d.ts +2 -0
  301. package/src/daemon/handlers/generated/classes/add.js +24 -0
  302. package/src/daemon/handlers/generated/classes/add.js.map +1 -0
  303. package/src/daemon/handlers/generated/classes/edit.d.ts +2 -0
  304. package/src/daemon/handlers/generated/classes/edit.js +24 -0
  305. package/src/daemon/handlers/generated/classes/edit.js.map +1 -0
  306. package/src/daemon/handlers/generated/classes/get.d.ts +2 -0
  307. package/src/daemon/handlers/generated/classes/get.js +22 -0
  308. package/src/daemon/handlers/generated/classes/get.js.map +1 -0
  309. package/src/daemon/handlers/generated/classes/remove.d.ts +2 -0
  310. package/src/daemon/handlers/generated/classes/remove.js +22 -0
  311. package/src/daemon/handlers/generated/classes/remove.js.map +1 -0
  312. package/src/daemon/handlers/generated/constructors/add.d.ts +2 -0
  313. package/src/daemon/handlers/generated/constructors/add.js +22 -0
  314. package/src/daemon/handlers/generated/constructors/add.js.map +1 -0
  315. package/src/daemon/handlers/generated/constructors/edit.d.ts +2 -0
  316. package/src/daemon/handlers/generated/constructors/edit.js +24 -0
  317. package/src/daemon/handlers/generated/constructors/edit.js.map +1 -0
  318. package/src/daemon/handlers/generated/constructors/get.d.ts +2 -0
  319. package/src/daemon/handlers/generated/constructors/get.js +22 -0
  320. package/src/daemon/handlers/generated/constructors/get.js.map +1 -0
  321. package/src/daemon/handlers/generated/constructors/remove.d.ts +2 -0
  322. package/src/daemon/handlers/generated/constructors/remove.js +22 -0
  323. package/src/daemon/handlers/generated/constructors/remove.js.map +1 -0
  324. package/src/daemon/handlers/generated/decorators/add.d.ts +2 -0
  325. package/src/daemon/handlers/generated/decorators/add.js +22 -0
  326. package/src/daemon/handlers/generated/decorators/add.js.map +1 -0
  327. package/src/daemon/handlers/generated/decorators/edit.d.ts +2 -0
  328. package/src/daemon/handlers/generated/decorators/edit.js +24 -0
  329. package/src/daemon/handlers/generated/decorators/edit.js.map +1 -0
  330. package/src/daemon/handlers/generated/decorators/get.d.ts +2 -0
  331. package/src/daemon/handlers/generated/decorators/get.js +22 -0
  332. package/src/daemon/handlers/generated/decorators/get.js.map +1 -0
  333. package/src/daemon/handlers/generated/decorators/remove.d.ts +2 -0
  334. package/src/daemon/handlers/generated/decorators/remove.js +22 -0
  335. package/src/daemon/handlers/generated/decorators/remove.js.map +1 -0
  336. package/src/daemon/handlers/generated/enums/add.d.ts +2 -0
  337. package/src/daemon/handlers/generated/enums/add.js +24 -0
  338. package/src/daemon/handlers/generated/enums/add.js.map +1 -0
  339. package/src/daemon/handlers/generated/enums/edit.d.ts +2 -0
  340. package/src/daemon/handlers/generated/enums/edit.js +24 -0
  341. package/src/daemon/handlers/generated/enums/edit.js.map +1 -0
  342. package/src/daemon/handlers/generated/enums/get.d.ts +2 -0
  343. package/src/daemon/handlers/generated/enums/get.js +22 -0
  344. package/src/daemon/handlers/generated/enums/get.js.map +1 -0
  345. package/src/daemon/handlers/generated/enums/remove.d.ts +2 -0
  346. package/src/daemon/handlers/generated/enums/remove.js +22 -0
  347. package/src/daemon/handlers/generated/enums/remove.js.map +1 -0
  348. package/src/daemon/handlers/generated/exports/add.d.ts +2 -0
  349. package/src/daemon/handlers/generated/exports/add.js +24 -0
  350. package/src/daemon/handlers/generated/exports/add.js.map +1 -0
  351. package/src/daemon/handlers/generated/exports/edit.d.ts +2 -0
  352. package/src/daemon/handlers/generated/exports/edit.js +24 -0
  353. package/src/daemon/handlers/generated/exports/edit.js.map +1 -0
  354. package/src/daemon/handlers/generated/exports/get.d.ts +2 -0
  355. package/src/daemon/handlers/generated/exports/get.js +22 -0
  356. package/src/daemon/handlers/generated/exports/get.js.map +1 -0
  357. package/src/daemon/handlers/generated/exports/remove.d.ts +2 -0
  358. package/src/daemon/handlers/generated/exports/remove.js +22 -0
  359. package/src/daemon/handlers/generated/exports/remove.js.map +1 -0
  360. package/src/daemon/handlers/generated/functions/add.d.ts +2 -0
  361. package/src/daemon/handlers/generated/functions/add.js +24 -0
  362. package/src/daemon/handlers/generated/functions/add.js.map +1 -0
  363. package/src/daemon/handlers/generated/functions/edit.d.ts +2 -0
  364. package/src/daemon/handlers/generated/functions/edit.js +24 -0
  365. package/src/daemon/handlers/generated/functions/edit.js.map +1 -0
  366. package/src/daemon/handlers/generated/functions/get.d.ts +2 -0
  367. package/src/daemon/handlers/generated/functions/get.js +22 -0
  368. package/src/daemon/handlers/generated/functions/get.js.map +1 -0
  369. package/src/daemon/handlers/generated/functions/remove.d.ts +2 -0
  370. package/src/daemon/handlers/generated/functions/remove.js +22 -0
  371. package/src/daemon/handlers/generated/functions/remove.js.map +1 -0
  372. package/src/daemon/handlers/generated/import-refs/get.d.ts +2 -0
  373. package/src/daemon/handlers/generated/import-refs/get.js +22 -0
  374. package/src/daemon/handlers/generated/import-refs/get.js.map +1 -0
  375. package/src/daemon/handlers/generated/imports/add.d.ts +2 -0
  376. package/src/daemon/handlers/generated/imports/add.js +24 -0
  377. package/src/daemon/handlers/generated/imports/add.js.map +1 -0
  378. package/src/daemon/handlers/generated/imports/edit.d.ts +2 -0
  379. package/src/daemon/handlers/generated/imports/edit.js +24 -0
  380. package/src/daemon/handlers/generated/imports/edit.js.map +1 -0
  381. package/src/daemon/handlers/generated/imports/get.d.ts +2 -0
  382. package/src/daemon/handlers/generated/imports/get.js +22 -0
  383. package/src/daemon/handlers/generated/imports/get.js.map +1 -0
  384. package/src/daemon/handlers/generated/imports/remove.d.ts +2 -0
  385. package/src/daemon/handlers/generated/imports/remove.js +22 -0
  386. package/src/daemon/handlers/generated/imports/remove.js.map +1 -0
  387. package/src/daemon/handlers/generated/index.d.ts +2 -0
  388. package/src/daemon/handlers/generated/index.js +138 -0
  389. package/src/daemon/handlers/generated/index.js.map +1 -0
  390. package/src/daemon/handlers/generated/interfaces/add.d.ts +2 -0
  391. package/src/daemon/handlers/generated/interfaces/add.js +24 -0
  392. package/src/daemon/handlers/generated/interfaces/add.js.map +1 -0
  393. package/src/daemon/handlers/generated/interfaces/edit.d.ts +2 -0
  394. package/src/daemon/handlers/generated/interfaces/edit.js +24 -0
  395. package/src/daemon/handlers/generated/interfaces/edit.js.map +1 -0
  396. package/src/daemon/handlers/generated/interfaces/get.d.ts +2 -0
  397. package/src/daemon/handlers/generated/interfaces/get.js +22 -0
  398. package/src/daemon/handlers/generated/interfaces/get.js.map +1 -0
  399. package/src/daemon/handlers/generated/interfaces/remove.d.ts +2 -0
  400. package/src/daemon/handlers/generated/interfaces/remove.js +22 -0
  401. package/src/daemon/handlers/generated/interfaces/remove.js.map +1 -0
  402. package/src/daemon/handlers/generated/methods/add.d.ts +2 -0
  403. package/src/daemon/handlers/generated/methods/add.js +22 -0
  404. package/src/daemon/handlers/generated/methods/add.js.map +1 -0
  405. package/src/daemon/handlers/generated/methods/edit.d.ts +2 -0
  406. package/src/daemon/handlers/generated/methods/edit.js +24 -0
  407. package/src/daemon/handlers/generated/methods/edit.js.map +1 -0
  408. package/src/daemon/handlers/generated/methods/get.d.ts +2 -0
  409. package/src/daemon/handlers/generated/methods/get.js +22 -0
  410. package/src/daemon/handlers/generated/methods/get.js.map +1 -0
  411. package/src/daemon/handlers/generated/methods/remove.d.ts +2 -0
  412. package/src/daemon/handlers/generated/methods/remove.js +22 -0
  413. package/src/daemon/handlers/generated/methods/remove.js.map +1 -0
  414. package/src/daemon/handlers/generated/named-imports/get.d.ts +2 -0
  415. package/src/daemon/handlers/generated/named-imports/get.js +22 -0
  416. package/src/daemon/handlers/generated/named-imports/get.js.map +1 -0
  417. package/src/daemon/handlers/generated/object-accessors/get.d.ts +2 -0
  418. package/src/daemon/handlers/generated/object-accessors/get.js +22 -0
  419. package/src/daemon/handlers/generated/object-accessors/get.js.map +1 -0
  420. package/src/daemon/handlers/generated/object-methods/get.d.ts +2 -0
  421. package/src/daemon/handlers/generated/object-methods/get.js +22 -0
  422. package/src/daemon/handlers/generated/object-methods/get.js.map +1 -0
  423. package/src/daemon/handlers/generated/object-properties/edit.d.ts +2 -0
  424. package/src/daemon/handlers/generated/object-properties/edit.js +24 -0
  425. package/src/daemon/handlers/generated/object-properties/edit.js.map +1 -0
  426. package/src/daemon/handlers/generated/object-properties/get.d.ts +2 -0
  427. package/src/daemon/handlers/generated/object-properties/get.js +22 -0
  428. package/src/daemon/handlers/generated/object-properties/get.js.map +1 -0
  429. package/src/daemon/handlers/generated/object-properties/remove.d.ts +2 -0
  430. package/src/daemon/handlers/generated/object-properties/remove.js +22 -0
  431. package/src/daemon/handlers/generated/object-properties/remove.js.map +1 -0
  432. package/src/daemon/handlers/generated/object-property/add.d.ts +2 -0
  433. package/src/daemon/handlers/generated/object-property/add.js +22 -0
  434. package/src/daemon/handlers/generated/object-property/add.js.map +1 -0
  435. package/src/daemon/handlers/generated/params/add.d.ts +2 -0
  436. package/src/daemon/handlers/generated/params/add.js +22 -0
  437. package/src/daemon/handlers/generated/params/add.js.map +1 -0
  438. package/src/daemon/handlers/generated/params/edit.d.ts +2 -0
  439. package/src/daemon/handlers/generated/params/edit.js +24 -0
  440. package/src/daemon/handlers/generated/params/edit.js.map +1 -0
  441. package/src/daemon/handlers/generated/params/get.d.ts +2 -0
  442. package/src/daemon/handlers/generated/params/get.js +22 -0
  443. package/src/daemon/handlers/generated/params/get.js.map +1 -0
  444. package/src/daemon/handlers/generated/params/remove.d.ts +2 -0
  445. package/src/daemon/handlers/generated/params/remove.js +22 -0
  446. package/src/daemon/handlers/generated/params/remove.js.map +1 -0
  447. package/src/daemon/handlers/generated/source-file/get.d.ts +2 -0
  448. package/src/daemon/handlers/generated/source-file/get.js +24 -0
  449. package/src/daemon/handlers/generated/source-file/get.js.map +1 -0
  450. package/src/daemon/handlers/generated/source-files/add.d.ts +2 -0
  451. package/src/daemon/handlers/generated/source-files/add.js +24 -0
  452. package/src/daemon/handlers/generated/source-files/add.js.map +1 -0
  453. package/src/daemon/handlers/generated/source-files/get.d.ts +2 -0
  454. package/src/daemon/handlers/generated/source-files/get.js +24 -0
  455. package/src/daemon/handlers/generated/source-files/get.js.map +1 -0
  456. package/src/daemon/handlers/generated/variables/add.d.ts +2 -0
  457. package/src/daemon/handlers/generated/variables/add.js +24 -0
  458. package/src/daemon/handlers/generated/variables/add.js.map +1 -0
  459. package/src/daemon/handlers/generated/variables/edit.d.ts +2 -0
  460. package/src/daemon/handlers/generated/variables/edit.js +24 -0
  461. package/src/daemon/handlers/generated/variables/edit.js.map +1 -0
  462. package/src/daemon/handlers/generated/variables/get.d.ts +2 -0
  463. package/src/daemon/handlers/generated/variables/get.js +22 -0
  464. package/src/daemon/handlers/generated/variables/get.js.map +1 -0
  465. package/src/daemon/handlers/generated/variables/remove.d.ts +2 -0
  466. package/src/daemon/handlers/generated/variables/remove.js +22 -0
  467. package/src/daemon/handlers/generated/variables/remove.js.map +1 -0
  468. package/src/daemon/handlers/list-files.d.ts +7 -0
  469. package/src/daemon/handlers/list-files.js +66 -0
  470. package/src/daemon/handlers/list-files.js.map +1 -0
  471. package/src/daemon/handlers/op.d.ts +14 -0
  472. package/src/daemon/handlers/op.js +71 -0
  473. package/src/daemon/handlers/op.js.map +1 -0
  474. package/src/daemon/handlers/reload.d.ts +10 -0
  475. package/src/daemon/handlers/reload.js +46 -0
  476. package/src/daemon/handlers/reload.js.map +1 -0
  477. package/src/daemon/handlers/save.d.ts +14 -0
  478. package/src/daemon/handlers/save.js +67 -0
  479. package/src/daemon/handlers/save.js.map +1 -0
  480. package/src/daemon/handlers/snapshot.d.ts +10 -0
  481. package/src/daemon/handlers/snapshot.js +35 -0
  482. package/src/daemon/handlers/snapshot.js.map +1 -0
  483. package/src/daemon/session-manager.d.ts +37 -0
  484. package/src/daemon/session-manager.js +70 -0
  485. package/src/daemon/session-manager.js.map +1 -0
  486. package/src/discovery/lockfile.d.ts +47 -0
  487. package/src/discovery/lockfile.js +181 -0
  488. package/src/discovery/lockfile.js.map +1 -0
  489. package/src/generated/op-schemas.d.ts +8 -0
  490. package/src/generated/op-schemas.js +3213 -0
  491. package/src/generated/op-schemas.js.map +1 -0
  492. package/src/generated/skills.d.ts +9 -0
  493. package/src/generated/skills.js +11 -0
  494. package/src/generated/skills.js.map +1 -0
  495. package/src/index.d.ts +1 -0
  496. package/src/index.js +3 -0
  497. package/src/index.js.map +1 -0
  498. package/src/proto/error-codes.d.ts +26 -0
  499. package/src/proto/error-codes.js +55 -0
  500. package/src/proto/error-codes.js.map +1 -0
  501. package/src/proto/jsonrpc.d.ts +57 -0
  502. package/src/proto/jsonrpc.js +87 -0
  503. package/src/proto/jsonrpc.js.map +1 -0
  504. package/src/session/file-stat-cache.d.ts +43 -0
  505. package/src/session/file-stat-cache.js +95 -0
  506. package/src/session/file-stat-cache.js.map +1 -0
  507. package/src/session/ref-table.d.ts +42 -0
  508. package/src/session/ref-table.js +98 -0
  509. package/src/session/ref-table.js.map +1 -0
  510. package/src/session/session.d.ts +51 -0
  511. package/src/session/session.js +109 -0
  512. package/src/session/session.js.map +1 -0
  513. package/src/session/snapshot.d.ts +26 -0
  514. package/src/session/snapshot.js +164 -0
  515. package/src/session/snapshot.js.map +1 -0
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.opHandler = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const _2020_1 = tslib_1.__importDefault(require("ajv/dist/2020"));
6
+ const op_schemas_1 = require("../../generated/op-schemas");
7
+ const error_codes_1 = require("../../proto/error-codes");
8
+ const jsonrpc_1 = require("../../proto/jsonrpc");
9
+ const generated_1 = require("./generated");
10
+ /**
11
+ * Lazily compile JSON Schemas once per process — every op has a fixed
12
+ * schema, so compiling per-request would waste milliseconds in a hot
13
+ * agent loop. Ajv with strict mode off because our generated schemas
14
+ * include vendor extensions (description on free-form objects) we want
15
+ * to allow.
16
+ */
17
+ const ajv = new _2020_1.default({ allErrors: true, strict: false });
18
+ const validators = new Map();
19
+ function getValidator(op) {
20
+ const entry = op_schemas_1.OP_SCHEMAS[op];
21
+ if (!entry)
22
+ return null;
23
+ let v = validators.get(op);
24
+ if (!v) {
25
+ v = ajv.compile(entry.schema);
26
+ validators.set(op, v);
27
+ }
28
+ return v;
29
+ }
30
+ /**
31
+ * `op` dispatcher handler.
32
+ *
33
+ * Single entry-point for every generated mutate/query op. Validates the
34
+ * `{ target, data }` payload against the op's JSON Schema, delegates to
35
+ * the generated per-op handler via {@link GENERATED_HANDLERS}, and (for
36
+ * mutating ops) invalidates refs on every dirty file before returning
37
+ * `{ ok: true, mutated: [...] }`.
38
+ *
39
+ * Missing op name → `InvalidInput`. Unknown op → `NotFound`. Schema
40
+ * failure → `InvalidInput` with the Ajv error array as `data`.
41
+ */
42
+ const opHandler = async (ctx, params) => {
43
+ const { session } = ctx;
44
+ if (!session) {
45
+ throw new jsonrpc_1.RpcError(error_codes_1.ErrorCode.SessionNotFound, 'op: session not found');
46
+ }
47
+ const p = (params ?? {});
48
+ const op = p.op;
49
+ if (typeof op !== 'string' || op.length === 0) {
50
+ throw new jsonrpc_1.RpcError(error_codes_1.ErrorCode.InvalidInput, 'op: missing or invalid op name');
51
+ }
52
+ const handler = generated_1.GENERATED_HANDLERS[op];
53
+ if (!handler) {
54
+ throw new jsonrpc_1.RpcError(error_codes_1.ErrorCode.NotFound, `op: unknown op "${op}"`, { op });
55
+ }
56
+ const validator = getValidator(op);
57
+ if (validator) {
58
+ const payload = { target: p.target, data: p.data };
59
+ if (!validator(payload)) {
60
+ throw new jsonrpc_1.RpcError(error_codes_1.ErrorCode.InvalidInput, `op: payload failed schema validation for "${op}"`, { op, errors: validator.errors ?? [] });
61
+ }
62
+ }
63
+ const result = await session.withActiveProject(() => handler(ctx, { ...p }));
64
+ const mutated = session.dirtyFiles();
65
+ for (const file of mutated) {
66
+ session.refs.invalidateFile(file);
67
+ }
68
+ return { ok: true, result, mutated };
69
+ };
70
+ exports.opHandler = opHandler;
71
+ //# sourceMappingURL=op.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"op.js","sourceRoot":"","sources":["../../../../../../packages/cli/src/daemon/handlers/op.ts"],"names":[],"mappings":";;;;AAAA,kEAA+D;AAE/D,2DAAwD;AACxD,yDAAoD;AACpD,iDAA+C;AAE/C,2CAAiD;AAEjD;;;;;;GAMG;AACH,MAAM,GAAG,GAAG,IAAI,eAAO,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;AAC5D,MAAM,UAAU,GAAG,IAAI,GAAG,EAA4B,CAAC;AAEvD,SAAS,YAAY,CAAC,EAAU;IAC9B,MAAM,KAAK,GAAG,uBAAU,CAAC,EAAE,CAAC,CAAC;IAC7B,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,IAAI,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3B,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC9B,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AASD;;;;;;;;;;;GAWG;AACI,MAAM,SAAS,GAAY,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;IACtD,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC;IACxB,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,kBAAQ,CAAC,uBAAS,CAAC,eAAe,EAAE,uBAAuB,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAa,CAAC;IACrC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;IAChB,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,kBAAQ,CAAC,uBAAS,CAAC,YAAY,EAAE,gCAAgC,CAAC,CAAC;IAC/E,CAAC;IAED,MAAM,OAAO,GAAG,8BAAkB,CAAC,EAAE,CAAC,CAAC;IACvC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,kBAAQ,CAAC,uBAAS,CAAC,QAAQ,EAAE,mBAAmB,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,SAAS,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;IACnC,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,OAAO,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACnD,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,kBAAQ,CAChB,uBAAS,CAAC,YAAY,EACtB,6CAA6C,EAAE,GAAG,EAClD,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,EAAE,EAAE,CACvC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAE7E,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IACrC,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AACvC,CAAC,CAAC;AAnCW,QAAA,SAAS,aAmCpB"}
@@ -0,0 +1,10 @@
1
+ import type { Handler } from '../dispatcher';
2
+ /**
3
+ * `reload` handler — agent-driven re-read of `file` from disk.
4
+ *
5
+ * Per Req 7.3 this is only invoked when the agent asks; no other
6
+ * handler calls reload implicitly. Maps the ts-morph
7
+ * `FileSystemRefreshResult` enum to the `{ result: "..." }` shape from
8
+ * the design table.
9
+ */
10
+ export declare const reloadHandler: Handler;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.reloadHandler = void 0;
4
+ const promises_1 = require("node:fs/promises");
5
+ const error_codes_1 = require("../../proto/error-codes");
6
+ const jsonrpc_1 = require("../../proto/jsonrpc");
7
+ /**
8
+ * `reload` handler — agent-driven re-read of `file` from disk.
9
+ *
10
+ * Per Req 7.3 this is only invoked when the agent asks; no other
11
+ * handler calls reload implicitly. Maps the ts-morph
12
+ * `FileSystemRefreshResult` enum to the `{ result: "..." }` shape from
13
+ * the design table.
14
+ */
15
+ const reloadHandler = async ({ session }, params) => {
16
+ if (!session) {
17
+ throw new jsonrpc_1.RpcError(error_codes_1.ErrorCode.SessionNotFound, 'reload: session not found');
18
+ }
19
+ const { file } = (params ?? {});
20
+ if (typeof file !== 'string' || file.length === 0) {
21
+ throw new jsonrpc_1.RpcError(error_codes_1.ErrorCode.InvalidParams, 'reload: missing file');
22
+ }
23
+ const sourceFile = session.project.getSourceFile(file);
24
+ if (!sourceFile) {
25
+ throw new jsonrpc_1.RpcError(error_codes_1.ErrorCode.NotFound, `reload: file not in session: ${file}`, { file });
26
+ }
27
+ const result = await sourceFile.refreshFromFileSystem();
28
+ // FileSystemRefreshResult is a numeric enum: 0 NoChange, 1 Updated, 2 Deleted.
29
+ const mapping = ['noChange', 'updated', 'deleted'];
30
+ const symbolic = mapping[result] ?? 'noChange';
31
+ // Invalidate refs into this file and refresh the fingerprint, since
32
+ // the in-memory text may have just been replaced.
33
+ session.refs.invalidateFile(file);
34
+ if (symbolic !== 'deleted') {
35
+ try {
36
+ const s = await (0, promises_1.stat)(file);
37
+ session.rebaseline(sourceFile, { mtimeMs: s.mtimeMs, size: s.size });
38
+ }
39
+ catch {
40
+ // File may have vanished between refresh and stat — fall through.
41
+ }
42
+ }
43
+ return { result: symbolic };
44
+ };
45
+ exports.reloadHandler = reloadHandler;
46
+ //# sourceMappingURL=reload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reload.js","sourceRoot":"","sources":["../../../../../../packages/cli/src/daemon/handlers/reload.ts"],"names":[],"mappings":";;;AAAA,+CAAwC;AAExC,yDAAoD;AACpD,iDAA+C;AAG/C;;;;;;;GAOG;AACI,MAAM,aAAa,GAAY,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE;IAClE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,kBAAQ,CAAC,uBAAS,CAAC,eAAe,EAAE,2BAA2B,CAAC,CAAC;IAC7E,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE,CAAsB,CAAC;IACrD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,kBAAQ,CAAC,uBAAS,CAAC,aAAa,EAAE,sBAAsB,CAAC,CAAC;IACtE,CAAC;IACD,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACvD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,kBAAQ,CAAC,uBAAS,CAAC,QAAQ,EAAE,gCAAgC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3F,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,qBAAqB,EAAE,CAAC;IACxD,+EAA+E;IAC/E,MAAM,OAAO,GAAG,CAAC,UAAU,EAAE,SAAS,EAAE,SAAS,CAAU,CAAC;IAC5D,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC;IAE/C,oEAAoE;IACpE,kDAAkD;IAClD,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,IAAA,eAAI,EAAC,IAAI,CAAC,CAAC;YAC3B,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACvE,CAAC;QAAC,MAAM,CAAC;YACP,kEAAkE;QACpE,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAC9B,CAAC,CAAC;AA/BW,QAAA,aAAa,iBA+BxB"}
@@ -0,0 +1,14 @@
1
+ import type { Handler } from '../dispatcher';
2
+ /**
3
+ * `save` handler.
4
+ *
5
+ * Preflight: for every dirty file, verify the FileStatCache says the
6
+ * on-disk state still matches the recorded fingerprint. If any file
7
+ * reports `StaleFile`, throw `RpcError(StaleFile)` with the offending
8
+ * file names — nothing is written.
9
+ *
10
+ * Dry-run path: return `{ wouldWrite: [{ file, bytes }] }`.
11
+ * Real path: write each dirty file via `sourceFile.save()`, refresh the
12
+ * recorded fingerprint, and return `{ written: [...] }`.
13
+ */
14
+ export declare const saveHandler: Handler;
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.saveHandler = void 0;
4
+ const promises_1 = require("node:fs/promises");
5
+ const error_codes_1 = require("../../proto/error-codes");
6
+ const jsonrpc_1 = require("../../proto/jsonrpc");
7
+ /**
8
+ * `save` handler.
9
+ *
10
+ * Preflight: for every dirty file, verify the FileStatCache says the
11
+ * on-disk state still matches the recorded fingerprint. If any file
12
+ * reports `StaleFile`, throw `RpcError(StaleFile)` with the offending
13
+ * file names — nothing is written.
14
+ *
15
+ * Dry-run path: return `{ wouldWrite: [{ file, bytes }] }`.
16
+ * Real path: write each dirty file via `sourceFile.save()`, refresh the
17
+ * recorded fingerprint, and return `{ written: [...] }`.
18
+ */
19
+ const saveHandler = async ({ session }, params) => {
20
+ if (!session) {
21
+ throw new jsonrpc_1.RpcError(error_codes_1.ErrorCode.SessionNotFound, 'save: session not found');
22
+ }
23
+ const { file, dryRun } = (params ?? {});
24
+ const dirty = typeof file === 'string' && file.length > 0
25
+ ? session.dirtyFiles().filter((f) => f === file)
26
+ : session.dirtyFiles();
27
+ // Preflight every dirty file before mutating disk.
28
+ const stale = [];
29
+ for (const f of dirty) {
30
+ const sf = session.project.getSourceFile(f);
31
+ if (!sf)
32
+ continue;
33
+ const verify = await session.stats.verify(f, sf.getFullText());
34
+ if (!verify.ok)
35
+ stale.push(f);
36
+ }
37
+ if (stale.length > 0) {
38
+ throw new jsonrpc_1.RpcError(error_codes_1.ErrorCode.StaleFile, `save: on-disk content diverged for ${stale.join(', ')}`, { files: stale });
39
+ }
40
+ if (dryRun) {
41
+ const wouldWrite = dirty.map((f) => {
42
+ const sf = session.project.getSourceFile(f);
43
+ const text = sf?.getFullText() ?? '';
44
+ return { file: f, bytes: Buffer.byteLength(text, 'utf8') };
45
+ });
46
+ return { wouldWrite };
47
+ }
48
+ const written = [];
49
+ for (const f of dirty) {
50
+ const sf = session.project.getSourceFile(f);
51
+ if (!sf)
52
+ continue;
53
+ await sf.save();
54
+ try {
55
+ const s = await (0, promises_1.stat)(f);
56
+ session.rebaseline(sf, { mtimeMs: s.mtimeMs, size: s.size });
57
+ }
58
+ catch {
59
+ // Stat right after save fails — leave the fingerprint stale; the
60
+ // next verify will escalate to a content hash.
61
+ }
62
+ written.push(f);
63
+ }
64
+ return { written };
65
+ };
66
+ exports.saveHandler = saveHandler;
67
+ //# sourceMappingURL=save.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save.js","sourceRoot":"","sources":["../../../../../../packages/cli/src/daemon/handlers/save.ts"],"names":[],"mappings":";;;AAAA,+CAAwC;AAExC,yDAAoD;AACpD,iDAA+C;AAG/C;;;;;;;;;;;GAWG;AACI,MAAM,WAAW,GAAY,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE;IAChE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,kBAAQ,CAAC,uBAAS,CAAC,eAAe,EAAE,yBAAyB,CAAC,CAAC;IAC3E,CAAC;IACD,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE,CAAwC,CAAC;IAE/E,MAAM,KAAK,GACT,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QACzC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC;QAChD,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;IAE3B,mDAAmD;IACnD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAC5C,IAAI,CAAC,EAAE;YAAE,SAAS;QAClB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,kBAAQ,CAChB,uBAAS,CAAC,SAAS,EACnB,sCAAsC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EACxD,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACjC,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YAC5C,MAAM,IAAI,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;YACrC,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;QAC7D,CAAC,CAAC,CAAC;QACH,OAAO,EAAE,UAAU,EAAE,CAAC;IACxB,CAAC;IAED,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAC5C,IAAI,CAAC,EAAE;YAAE,SAAS;QAClB,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;QAChB,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,IAAA,eAAI,EAAC,CAAC,CAAC,CAAC;YACxB,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/D,CAAC;QAAC,MAAM,CAAC;YACP,iEAAiE;YACjE,+CAA+C;QACjD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,CAAC;AACrB,CAAC,CAAC;AAnDW,QAAA,WAAW,eAmDtB"}
@@ -0,0 +1,10 @@
1
+ import type { Handler } from '../dispatcher';
2
+ /**
3
+ * `snapshot` handler.
4
+ *
5
+ * Accepts either `{ target: { file } }` for a top-level walk or
6
+ * `{ target: { ref } }` for a drill-down. `mode` is reserved for future
7
+ * use; the spec calls out `"top" | "drill"` but the target shape is
8
+ * already unambiguous.
9
+ */
10
+ export declare const snapshotHandler: Handler;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.snapshotHandler = void 0;
4
+ const error_codes_1 = require("../../proto/error-codes");
5
+ const jsonrpc_1 = require("../../proto/jsonrpc");
6
+ const snapshot_1 = require("../../session/snapshot");
7
+ /**
8
+ * `snapshot` handler.
9
+ *
10
+ * Accepts either `{ target: { file } }` for a top-level walk or
11
+ * `{ target: { ref } }` for a drill-down. `mode` is reserved for future
12
+ * use; the spec calls out `"top" | "drill"` but the target shape is
13
+ * already unambiguous.
14
+ */
15
+ const snapshotHandler = ({ session }, params) => {
16
+ if (!session) {
17
+ throw new jsonrpc_1.RpcError(error_codes_1.ErrorCode.SessionNotFound, 'snapshot: session not found');
18
+ }
19
+ if (params === null || typeof params !== 'object') {
20
+ throw new jsonrpc_1.RpcError(error_codes_1.ErrorCode.InvalidParams, 'snapshot: missing params');
21
+ }
22
+ const { target } = params;
23
+ if (!target || typeof target !== 'object') {
24
+ throw new jsonrpc_1.RpcError(error_codes_1.ErrorCode.InvalidParams, 'snapshot: missing target');
25
+ }
26
+ if (typeof target.file === 'string' && target.file.length > 0) {
27
+ return session.withActiveProject(() => (0, snapshot_1.snapshotFile)(session, target.file));
28
+ }
29
+ if (typeof target.ref === 'string' && target.ref.length > 0) {
30
+ return session.withActiveProject(() => (0, snapshot_1.snapshotChildren)(session, target.ref));
31
+ }
32
+ throw new jsonrpc_1.RpcError(error_codes_1.ErrorCode.InvalidParams, 'snapshot: target must provide file or ref');
33
+ };
34
+ exports.snapshotHandler = snapshotHandler;
35
+ //# sourceMappingURL=snapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../../../../../packages/cli/src/daemon/handlers/snapshot.ts"],"names":[],"mappings":";;;AAAA,yDAAoD;AACpD,iDAA+C;AAC/C,qDAAwE;AAGxE;;;;;;;GAOG;AACI,MAAM,eAAe,GAAY,CAAC,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE;IAC9D,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,kBAAQ,CAAC,uBAAS,CAAC,eAAe,EAAE,6BAA6B,CAAC,CAAC;IAC/E,CAAC;IACD,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAClD,MAAM,IAAI,kBAAQ,CAAC,uBAAS,CAAC,aAAa,EAAE,0BAA0B,CAAC,CAAC;IAC1E,CAAC;IACD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAsD,CAAC;IAC1E,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC1C,MAAM,IAAI,kBAAQ,CAAC,uBAAS,CAAC,aAAa,EAAE,0BAA0B,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9D,OAAO,OAAO,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC,IAAA,uBAAY,EAAC,OAAO,EAAE,MAAM,CAAC,IAAc,CAAC,CAAC,CAAC;IACvF,CAAC;IACD,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5D,OAAO,OAAO,CAAC,iBAAiB,CAAC,GAAG,EAAE,CAAC,IAAA,2BAAgB,EAAC,OAAO,EAAE,MAAM,CAAC,GAAa,CAAC,CAAC,CAAC;IAC1F,CAAC;IACD,MAAM,IAAI,kBAAQ,CAAC,uBAAS,CAAC,aAAa,EAAE,2CAA2C,CAAC,CAAC;AAC3F,CAAC,CAAC;AAlBW,QAAA,eAAe,mBAkB1B"}
@@ -0,0 +1,37 @@
1
+ import { Session } from '../session/session';
2
+ export declare const DEFAULT_IDLE_TIMEOUT_MS = 600000;
3
+ export { Session };
4
+ export interface SessionManagerOptions {
5
+ /**
6
+ * Idle timeout in ms. Defaults to {@link DEFAULT_IDLE_TIMEOUT_MS}; a
7
+ * caller passing `0` disables the timer.
8
+ */
9
+ idleTimeoutMs?: number;
10
+ /**
11
+ * Callback invoked when the idle timer fires. The daemon entry wires
12
+ * this to graceful shutdown (drain + lockfile unlink + exit).
13
+ */
14
+ onIdle?: () => void;
15
+ }
16
+ /**
17
+ * Per-daemon session bookkeeping.
18
+ *
19
+ * The daemon process owns at most one Session at a time (one project
20
+ * root per daemon — Req 10.1); we keep a Map keyed by sessionId
21
+ * regardless so the API remains forward-compatible.
22
+ */
23
+ export declare class SessionManager {
24
+ readonly idleTimeoutMs: number;
25
+ private readonly onIdle;
26
+ private readonly sessions;
27
+ private idleTimer;
28
+ constructor(opts?: SessionManagerOptions);
29
+ open(root: string): Session;
30
+ close(id: string): void;
31
+ get(id: string): Session | null;
32
+ list(): Session[];
33
+ /** Reset the idle timer. Called on every dispatched RPC. */
34
+ touch(): void;
35
+ /** Stop the idle timer; used by the daemon during shutdown. */
36
+ stop(): void;
37
+ }
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SessionManager = exports.Session = exports.DEFAULT_IDLE_TIMEOUT_MS = void 0;
4
+ const session_1 = require("../session/session");
5
+ Object.defineProperty(exports, "Session", { enumerable: true, get: function () { return session_1.Session; } });
6
+ exports.DEFAULT_IDLE_TIMEOUT_MS = 600_000;
7
+ /**
8
+ * Per-daemon session bookkeeping.
9
+ *
10
+ * The daemon process owns at most one Session at a time (one project
11
+ * root per daemon — Req 10.1); we keep a Map keyed by sessionId
12
+ * regardless so the API remains forward-compatible.
13
+ */
14
+ class SessionManager {
15
+ idleTimeoutMs;
16
+ onIdle;
17
+ sessions = new Map();
18
+ idleTimer = null;
19
+ constructor(opts = {}) {
20
+ this.idleTimeoutMs = opts.idleTimeoutMs ?? readEnvTimeout() ?? exports.DEFAULT_IDLE_TIMEOUT_MS;
21
+ this.onIdle = opts.onIdle ?? (() => undefined);
22
+ }
23
+ open(root) {
24
+ const session = new session_1.Session({ root });
25
+ this.sessions.set(session.id, session);
26
+ this.touch();
27
+ return session;
28
+ }
29
+ close(id) {
30
+ this.sessions.delete(id);
31
+ this.touch();
32
+ }
33
+ get(id) {
34
+ return this.sessions.get(id) ?? null;
35
+ }
36
+ list() {
37
+ return [...this.sessions.values()];
38
+ }
39
+ /** Reset the idle timer. Called on every dispatched RPC. */
40
+ touch() {
41
+ if (this.idleTimeoutMs <= 0)
42
+ return;
43
+ if (this.idleTimer)
44
+ clearTimeout(this.idleTimer);
45
+ this.idleTimer = setTimeout(() => {
46
+ this.idleTimer = null;
47
+ this.onIdle();
48
+ }, this.idleTimeoutMs);
49
+ // Don't keep the event loop alive solely for the idle timer.
50
+ this.idleTimer.unref?.();
51
+ }
52
+ /** Stop the idle timer; used by the daemon during shutdown. */
53
+ stop() {
54
+ if (this.idleTimer) {
55
+ clearTimeout(this.idleTimer);
56
+ this.idleTimer = null;
57
+ }
58
+ }
59
+ }
60
+ exports.SessionManager = SessionManager;
61
+ function readEnvTimeout() {
62
+ const raw = process.env['MUTATES_IDLE_TIMEOUT'];
63
+ if (!raw)
64
+ return null;
65
+ const parsed = Number(raw);
66
+ if (!Number.isFinite(parsed) || parsed < 0)
67
+ return null;
68
+ return parsed;
69
+ }
70
+ //# sourceMappingURL=session-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../../../../packages/cli/src/daemon/session-manager.ts"],"names":[],"mappings":";;;AAAA,gDAA6C;AAIpC,wFAJA,iBAAO,OAIA;AAFH,QAAA,uBAAuB,GAAG,OAAO,CAAC;AAiB/C;;;;;;GAMG;AACH,MAAa,cAAc;IAChB,aAAa,CAAS;IACd,MAAM,CAAa;IACnB,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAC;IAC/C,SAAS,GAA0B,IAAI,CAAC;IAEhD,YAAY,OAA8B,EAAE;QAC1C,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,cAAc,EAAE,IAAI,+BAAuB,CAAC;QACvF,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,CAAC,IAAY;QACf,MAAM,OAAO,GAAG,IAAI,iBAAO,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,EAAU;QACd,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACzB,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED,GAAG,CAAC,EAAU;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC;IACvC,CAAC;IAED,IAAI;QACF,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,4DAA4D;IAC5D,KAAK;QACH,IAAI,IAAI,CAAC,aAAa,IAAI,CAAC;YAAE,OAAO;QACpC,IAAI,IAAI,CAAC,SAAS;YAAE,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjD,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAC/B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QACvB,6DAA6D;QAC7D,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;IAC3B,CAAC;IAED,+DAA+D;IAC/D,IAAI;QACF,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC7B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,CAAC;IACH,CAAC;CACF;AAlDD,wCAkDC;AAED,SAAS,cAAc;IACrB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IAChD,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACxD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Lockfile shape written by the daemon and read by the client per
3
+ * `design.md` §"Lockfile". The `version` field is reserved for future
4
+ * envelope changes; readers should treat unknown versions as stale.
5
+ */
6
+ export interface SessionLockfile {
7
+ version: 1;
8
+ pid: number;
9
+ sock: string;
10
+ root: string;
11
+ sessionId: string;
12
+ startedAt: number;
13
+ cliVersion: string;
14
+ }
15
+ /**
16
+ * Stable lockfile path for the given project root. The root is resolved
17
+ * to an absolute path and hashed (sha256, first 16 hex chars) so that
18
+ * two paths only collide if they refer to the same project.
19
+ */
20
+ export declare function lockfilePath(root: string): string;
21
+ /**
22
+ * Write the lockfile atomically using `O_EXCL | O_CREAT`. Throws with
23
+ * `code === 'EEXIST'` if another writer won the race; callers should
24
+ * fall back to reading the existing file.
25
+ */
26
+ export declare function write(lock: SessionLockfile): string;
27
+ /**
28
+ * Read the lockfile for `root`. Returns `null` when:
29
+ * - the file does not exist
30
+ * - the JSON is malformed or version unknown
31
+ * - the recorded pid is no longer alive
32
+ *
33
+ * Stale lockfiles are NOT removed here (avoiding TOCTOU surprises in
34
+ * concurrent invocations); callers that want to reclaim the slot should
35
+ * call {@link unlink}.
36
+ */
37
+ export declare function read(root: string): SessionLockfile | null;
38
+ /**
39
+ * Enumerate every live lockfile across the runtime dir. Used by
40
+ * `mutates sessions list --all` to surface every daemon irrespective of
41
+ * the caller's `--root`. Stale or malformed entries are dropped
42
+ * silently (mirroring {@link read}); we never delete here so two
43
+ * concurrent listers do not race each other into removing valid files.
44
+ */
45
+ export declare function listAll(): SessionLockfile[];
46
+ /** Remove the lockfile for `root`. Silent on ENOENT. */
47
+ export declare function unlink(root: string): void;
@@ -0,0 +1,181 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.lockfilePath = lockfilePath;
4
+ exports.write = write;
5
+ exports.read = read;
6
+ exports.listAll = listAll;
7
+ exports.unlink = unlink;
8
+ const node_crypto_1 = require("node:crypto");
9
+ const node_fs_1 = require("node:fs");
10
+ const node_os_1 = require("node:os");
11
+ const node_path_1 = require("node:path");
12
+ /**
13
+ * Return the runtime base dir under which session lockfiles live.
14
+ * Prefers `$XDG_RUNTIME_DIR/mutates/sessions/` on Unix (so the dir
15
+ * survives across logins of the same user but not across reboots),
16
+ * falling back to `os.tmpdir()/mutates/sessions/`. Allows `MUTATES_RUNTIME_DIR`
17
+ * to win for tests.
18
+ */
19
+ function lockfileDir() {
20
+ const override = process.env['MUTATES_RUNTIME_DIR'];
21
+ if (override)
22
+ return (0, node_path_1.join)(override, 'mutates', 'sessions');
23
+ const xdg = process.env['XDG_RUNTIME_DIR'];
24
+ if (xdg)
25
+ return (0, node_path_1.join)(xdg, 'mutates', 'sessions');
26
+ return (0, node_path_1.join)((0, node_os_1.tmpdir)(), 'mutates', 'sessions');
27
+ }
28
+ /**
29
+ * Stable lockfile path for the given project root. The root is resolved
30
+ * to an absolute path and hashed (sha256, first 16 hex chars) so that
31
+ * two paths only collide if they refer to the same project.
32
+ */
33
+ function lockfilePath(root) {
34
+ const abs = (0, node_path_1.resolve)(root);
35
+ const hash = (0, node_crypto_1.createHash)('sha256').update(abs).digest('hex').slice(0, 16);
36
+ return (0, node_path_1.join)(lockfileDir(), `${hash}.json`);
37
+ }
38
+ /**
39
+ * Detect whether a pid points to a live process. We use
40
+ * `process.kill(pid, 0)` as a signal-zero probe; the docs guarantee it
41
+ * does not deliver a signal but does perform the permission/existence
42
+ * check. `ESRCH` → process gone; `EPERM` → process exists but owned by
43
+ * someone else (still alive for our purposes).
44
+ */
45
+ function isAlive(pid) {
46
+ if (!Number.isFinite(pid) || pid <= 0)
47
+ return false;
48
+ try {
49
+ process.kill(pid, 0);
50
+ return true;
51
+ }
52
+ catch (err) {
53
+ const code = err.code;
54
+ if (code === 'ESRCH')
55
+ return false;
56
+ // EPERM means the process exists but we cannot signal it — still alive.
57
+ return code === 'EPERM';
58
+ }
59
+ }
60
+ /**
61
+ * Write the lockfile atomically using `O_EXCL | O_CREAT`. Throws with
62
+ * `code === 'EEXIST'` if another writer won the race; callers should
63
+ * fall back to reading the existing file.
64
+ */
65
+ function write(lock) {
66
+ const path = lockfilePath(lock.root);
67
+ (0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(path), { recursive: true, mode: 0o700 });
68
+ // O_WRONLY | O_CREAT | O_EXCL — fail if file exists.
69
+ // Numeric flags: O_WRONLY=1, O_CREAT=64, O_EXCL=128 on Linux but vary.
70
+ // Use Node's `fs.constants` via string flag `'wx'` which maps to the same.
71
+ const fd = (0, node_fs_1.openSync)(path, 'wx', 0o600);
72
+ try {
73
+ (0, node_fs_1.writeFileSync)(fd, JSON.stringify(lock));
74
+ }
75
+ finally {
76
+ (0, node_fs_1.closeSync)(fd);
77
+ }
78
+ return path;
79
+ }
80
+ /**
81
+ * Read the lockfile for `root`. Returns `null` when:
82
+ * - the file does not exist
83
+ * - the JSON is malformed or version unknown
84
+ * - the recorded pid is no longer alive
85
+ *
86
+ * Stale lockfiles are NOT removed here (avoiding TOCTOU surprises in
87
+ * concurrent invocations); callers that want to reclaim the slot should
88
+ * call {@link unlink}.
89
+ */
90
+ function read(root) {
91
+ const path = lockfilePath(root);
92
+ let raw;
93
+ try {
94
+ raw = (0, node_fs_1.readFileSync)(path, 'utf8');
95
+ }
96
+ catch (err) {
97
+ if (err.code === 'ENOENT')
98
+ return null;
99
+ throw err;
100
+ }
101
+ let parsed;
102
+ try {
103
+ parsed = JSON.parse(raw);
104
+ }
105
+ catch {
106
+ return null;
107
+ }
108
+ if (!isSessionLockfile(parsed))
109
+ return null;
110
+ if (!isAlive(parsed.pid))
111
+ return null;
112
+ return parsed;
113
+ }
114
+ /**
115
+ * Enumerate every live lockfile across the runtime dir. Used by
116
+ * `mutates sessions list --all` to surface every daemon irrespective of
117
+ * the caller's `--root`. Stale or malformed entries are dropped
118
+ * silently (mirroring {@link read}); we never delete here so two
119
+ * concurrent listers do not race each other into removing valid files.
120
+ */
121
+ function listAll() {
122
+ const dir = lockfileDir();
123
+ let names;
124
+ try {
125
+ names = (0, node_fs_1.readdirSync)(dir);
126
+ }
127
+ catch (err) {
128
+ if (err.code === 'ENOENT')
129
+ return [];
130
+ throw err;
131
+ }
132
+ const out = [];
133
+ for (const name of names) {
134
+ if (!name.endsWith('.json'))
135
+ continue;
136
+ let raw;
137
+ try {
138
+ raw = (0, node_fs_1.readFileSync)((0, node_path_1.join)(dir, name), 'utf8');
139
+ }
140
+ catch {
141
+ continue;
142
+ }
143
+ let parsed;
144
+ try {
145
+ parsed = JSON.parse(raw);
146
+ }
147
+ catch {
148
+ continue;
149
+ }
150
+ if (!isSessionLockfile(parsed))
151
+ continue;
152
+ if (!isAlive(parsed.pid))
153
+ continue;
154
+ out.push(parsed);
155
+ }
156
+ return out;
157
+ }
158
+ /** Remove the lockfile for `root`. Silent on ENOENT. */
159
+ function unlink(root) {
160
+ const path = lockfilePath(root);
161
+ try {
162
+ (0, node_fs_1.unlinkSync)(path);
163
+ }
164
+ catch (err) {
165
+ if (err.code !== 'ENOENT')
166
+ throw err;
167
+ }
168
+ }
169
+ function isSessionLockfile(value) {
170
+ if (value === null || typeof value !== 'object')
171
+ return false;
172
+ const v = value;
173
+ return (v['version'] === 1 &&
174
+ typeof v['pid'] === 'number' &&
175
+ typeof v['sock'] === 'string' &&
176
+ typeof v['root'] === 'string' &&
177
+ typeof v['sessionId'] === 'string' &&
178
+ typeof v['startedAt'] === 'number' &&
179
+ typeof v['cliVersion'] === 'string');
180
+ }
181
+ //# sourceMappingURL=lockfile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lockfile.js","sourceRoot":"","sources":["../../../../../packages/cli/src/discovery/lockfile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export interface OpSchema {
2
+ op: string;
3
+ verb: string;
4
+ category: string;
5
+ targetShape: string;
6
+ schema: Record<string, unknown>;
7
+ }
8
+ export declare const OP_SCHEMAS: Record<string, OpSchema>;