@jinion/core 0.2.1 → 0.4.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 (490) hide show
  1. package/dist/agent/agent.d.ts +6 -0
  2. package/dist/agent/agent.d.ts.map +1 -1
  3. package/dist/agent/agent.js +16 -1
  4. package/dist/agent/agent.js.map +1 -1
  5. package/dist/agent/claude/backend.d.ts +8 -0
  6. package/dist/agent/claude/backend.d.ts.map +1 -1
  7. package/dist/agent/claude/backend.js +19 -5
  8. package/dist/agent/claude/backend.js.map +1 -1
  9. package/dist/agent/claude/commands.d.ts +2 -0
  10. package/dist/agent/claude/commands.d.ts.map +1 -1
  11. package/dist/agent/claude/events.js +1 -1
  12. package/dist/agent/claude/events.js.map +1 -1
  13. package/dist/agent/claude/guard.d.ts.map +1 -1
  14. package/dist/agent/claude/guard.js +2 -1
  15. package/dist/agent/claude/guard.js.map +1 -1
  16. package/dist/agent/claude/jinion-tools.d.ts +9 -1
  17. package/dist/agent/claude/jinion-tools.d.ts.map +1 -1
  18. package/dist/agent/claude/jinion-tools.js +14 -2
  19. package/dist/agent/claude/jinion-tools.js.map +1 -1
  20. package/dist/agent/claude/mcp.d.ts +2 -1
  21. package/dist/agent/claude/mcp.d.ts.map +1 -1
  22. package/dist/agent/claude/mcp.js +38 -1
  23. package/dist/agent/claude/mcp.js.map +1 -1
  24. package/dist/agent/claude/options.d.ts +9 -1
  25. package/dist/agent/claude/options.d.ts.map +1 -1
  26. package/dist/agent/claude/options.js +5 -3
  27. package/dist/agent/claude/options.js.map +1 -1
  28. package/dist/agent/claude/paths.d.ts +0 -3
  29. package/dist/agent/claude/paths.d.ts.map +1 -1
  30. package/dist/agent/claude/paths.js +1 -7
  31. package/dist/agent/claude/paths.js.map +1 -1
  32. package/dist/agent/claude/permissions.js +1 -1
  33. package/dist/agent/claude/permissions.js.map +1 -1
  34. package/dist/agent/claude/plugins.d.ts +6 -0
  35. package/dist/agent/claude/plugins.d.ts.map +1 -1
  36. package/dist/agent/claude/plugins.js +11 -5
  37. package/dist/agent/claude/plugins.js.map +1 -1
  38. package/dist/agent/claude/prompt.d.ts +2 -1
  39. package/dist/agent/claude/prompt.d.ts.map +1 -1
  40. package/dist/agent/claude/prompt.js +10 -5
  41. package/dist/agent/claude/prompt.js.map +1 -1
  42. package/dist/agent/claude/review.d.ts +4 -1
  43. package/dist/agent/claude/review.d.ts.map +1 -1
  44. package/dist/agent/claude/review.js +5 -2
  45. package/dist/agent/claude/review.js.map +1 -1
  46. package/dist/agent/claude/session.d.ts +7 -0
  47. package/dist/agent/claude/session.d.ts.map +1 -1
  48. package/dist/agent/claude/session.js +6 -1
  49. package/dist/agent/claude/session.js.map +1 -1
  50. package/dist/agent/claude/setup-info.d.ts +21 -0
  51. package/dist/agent/claude/setup-info.d.ts.map +1 -0
  52. package/dist/agent/claude/setup-info.js +18 -0
  53. package/dist/agent/claude/setup-info.js.map +1 -0
  54. package/dist/agent/claude/setup.d.ts +12 -0
  55. package/dist/agent/claude/setup.d.ts.map +1 -0
  56. package/dist/agent/claude/setup.js +37 -0
  57. package/dist/agent/claude/setup.js.map +1 -0
  58. package/dist/agent/claude/shell.d.ts +0 -1
  59. package/dist/agent/claude/shell.d.ts.map +1 -1
  60. package/dist/agent/claude/shell.js +1 -59
  61. package/dist/agent/claude/shell.js.map +1 -1
  62. package/dist/agent/claude/skills.d.ts +8 -0
  63. package/dist/agent/claude/skills.d.ts.map +1 -0
  64. package/dist/agent/claude/skills.js +32 -0
  65. package/dist/agent/claude/skills.js.map +1 -0
  66. package/dist/agent/claude/tool-calls.d.ts.map +1 -1
  67. package/dist/agent/claude/tool-calls.js +11 -2
  68. package/dist/agent/claude/tool-calls.js.map +1 -1
  69. package/dist/agent/codex/backend.d.ts +7 -1
  70. package/dist/agent/codex/backend.d.ts.map +1 -1
  71. package/dist/agent/codex/backend.js +16 -3
  72. package/dist/agent/codex/backend.js.map +1 -1
  73. package/dist/agent/codex/events.d.ts.map +1 -1
  74. package/dist/agent/codex/events.js +15 -1
  75. package/dist/agent/codex/events.js.map +1 -1
  76. package/dist/agent/codex/jinion-tools.d.ts +38 -4
  77. package/dist/agent/codex/jinion-tools.d.ts.map +1 -1
  78. package/dist/agent/codex/jinion-tools.js +57 -10
  79. package/dist/agent/codex/jinion-tools.js.map +1 -1
  80. package/dist/agent/codex/mcp.d.ts.map +1 -1
  81. package/dist/agent/codex/mcp.js +4 -0
  82. package/dist/agent/codex/mcp.js.map +1 -1
  83. package/dist/agent/codex/rewind.js +1 -47
  84. package/dist/agent/codex/rewind.js.map +1 -1
  85. package/dist/agent/codex/session.d.ts +9 -2
  86. package/dist/agent/codex/session.d.ts.map +1 -1
  87. package/dist/agent/codex/session.js +21 -7
  88. package/dist/agent/codex/session.js.map +1 -1
  89. package/dist/agent/demo/agent.d.ts +6 -0
  90. package/dist/agent/demo/agent.d.ts.map +1 -1
  91. package/dist/agent/demo/agent.js +7 -1
  92. package/dist/agent/demo/agent.js.map +1 -1
  93. package/dist/agent/demo/mcp.d.ts +17 -0
  94. package/dist/agent/demo/mcp.d.ts.map +1 -0
  95. package/dist/agent/demo/mcp.js +155 -0
  96. package/dist/agent/demo/mcp.js.map +1 -0
  97. package/dist/agent/demo/scenarios/pricing-card.d.ts +3 -0
  98. package/dist/agent/demo/scenarios/pricing-card.d.ts.map +1 -0
  99. package/dist/agent/demo/scenarios/pricing-card.js +43 -0
  100. package/dist/agent/demo/scenarios/pricing-card.js.map +1 -0
  101. package/dist/agent/demo/script.d.ts +10 -0
  102. package/dist/agent/demo/script.d.ts.map +1 -1
  103. package/dist/agent/demo/skills.d.ts +29 -0
  104. package/dist/agent/demo/skills.d.ts.map +1 -0
  105. package/dist/agent/demo/skills.js +85 -0
  106. package/dist/agent/demo/skills.js.map +1 -0
  107. package/dist/agent/demo/tasks.d.ts +5 -0
  108. package/dist/agent/demo/tasks.d.ts.map +1 -1
  109. package/dist/agent/events.d.ts +5 -0
  110. package/dist/agent/events.d.ts.map +1 -1
  111. package/dist/agent/events.js +2 -0
  112. package/dist/agent/events.js.map +1 -1
  113. package/dist/agent/mcp.d.ts +11 -0
  114. package/dist/agent/mcp.d.ts.map +1 -1
  115. package/dist/agent/mcp.js +4 -0
  116. package/dist/agent/mcp.js.map +1 -1
  117. package/dist/agent/patches.d.ts +5 -0
  118. package/dist/agent/patches.d.ts.map +1 -1
  119. package/dist/agent/patches.js +49 -0
  120. package/dist/agent/patches.js.map +1 -1
  121. package/dist/agent/review-tools.d.ts +15 -0
  122. package/dist/agent/review-tools.d.ts.map +1 -0
  123. package/dist/agent/review-tools.js +13 -0
  124. package/dist/agent/review-tools.js.map +1 -0
  125. package/dist/agent/review.d.ts +18 -6
  126. package/dist/agent/review.d.ts.map +1 -1
  127. package/dist/agent/review.js +52 -17
  128. package/dist/agent/review.js.map +1 -1
  129. package/dist/agent/skills.d.ts +36 -0
  130. package/dist/agent/skills.d.ts.map +1 -0
  131. package/dist/agent/skills.js +18 -0
  132. package/dist/agent/skills.js.map +1 -0
  133. package/dist/api/client.d.ts +25 -1
  134. package/dist/api/client.d.ts.map +1 -1
  135. package/dist/api/client.js +14 -3
  136. package/dist/api/client.js.map +1 -1
  137. package/dist/api/connection.d.ts +5 -0
  138. package/dist/api/connection.d.ts.map +1 -1
  139. package/dist/api/connection.js +10 -0
  140. package/dist/api/connection.js.map +1 -1
  141. package/dist/api/fields.d.ts +12 -1
  142. package/dist/api/fields.d.ts.map +1 -1
  143. package/dist/api/fields.js +4 -2
  144. package/dist/api/fields.js.map +1 -1
  145. package/dist/api/json-schema.d.ts +729 -86
  146. package/dist/api/json-schema.d.ts.map +1 -1
  147. package/dist/api/json-schema.js +2 -1
  148. package/dist/api/json-schema.js.map +1 -1
  149. package/dist/api/methods/accounts.d.ts.map +1 -1
  150. package/dist/api/methods/accounts.js +1 -2
  151. package/dist/api/methods/accounts.js.map +1 -1
  152. package/dist/api/methods/app.d.ts.map +1 -1
  153. package/dist/api/methods/app.js +19 -5
  154. package/dist/api/methods/app.js.map +1 -1
  155. package/dist/api/methods/files.d.ts +3 -1
  156. package/dist/api/methods/files.d.ts.map +1 -1
  157. package/dist/api/methods/files.js +75 -2
  158. package/dist/api/methods/files.js.map +1 -1
  159. package/dist/api/methods/git.d.ts.map +1 -1
  160. package/dist/api/methods/git.js +54 -6
  161. package/dist/api/methods/git.js.map +1 -1
  162. package/dist/api/methods/lsp.d.ts +7 -0
  163. package/dist/api/methods/lsp.d.ts.map +1 -0
  164. package/dist/api/methods/lsp.js +68 -0
  165. package/dist/api/methods/lsp.js.map +1 -0
  166. package/dist/api/methods/map.d.ts +4 -0
  167. package/dist/api/methods/map.d.ts.map +1 -0
  168. package/dist/api/methods/map.js +13 -0
  169. package/dist/api/methods/map.js.map +1 -0
  170. package/dist/api/methods/preview.d.ts +4 -1
  171. package/dist/api/methods/preview.d.ts.map +1 -1
  172. package/dist/api/methods/preview.js +19 -3
  173. package/dist/api/methods/preview.js.map +1 -1
  174. package/dist/api/methods/skills.d.ts +4 -0
  175. package/dist/api/methods/skills.d.ts.map +1 -0
  176. package/dist/api/methods/skills.js +21 -0
  177. package/dist/api/methods/skills.js.map +1 -0
  178. package/dist/api/methods/terminals.d.ts.map +1 -1
  179. package/dist/api/methods/terminals.js +7 -1
  180. package/dist/api/methods/terminals.js.map +1 -1
  181. package/dist/api/protocol.d.ts +963 -7
  182. package/dist/api/protocol.d.ts.map +1 -1
  183. package/dist/api/protocol.js +155 -8
  184. package/dist/api/protocol.js.map +1 -1
  185. package/dist/api/schemas.d.ts +27 -0
  186. package/dist/api/schemas.d.ts.map +1 -1
  187. package/dist/api/schemas.js +6 -0
  188. package/dist/api/schemas.js.map +1 -1
  189. package/dist/api/screen.d.ts +2 -0
  190. package/dist/api/screen.d.ts.map +1 -1
  191. package/dist/api/screen.js +3 -0
  192. package/dist/api/screen.js.map +1 -1
  193. package/dist/api/server.d.ts +2 -0
  194. package/dist/api/server.d.ts.map +1 -1
  195. package/dist/api/server.js +13 -0
  196. package/dist/api/server.js.map +1 -1
  197. package/dist/commands/builtin.d.ts.map +1 -1
  198. package/dist/commands/builtin.js +5 -1
  199. package/dist/commands/builtin.js.map +1 -1
  200. package/dist/commands/conversation.d.ts.map +1 -1
  201. package/dist/commands/conversation.js +2 -0
  202. package/dist/commands/conversation.js.map +1 -1
  203. package/dist/commands/feedback.d.ts.map +1 -1
  204. package/dist/commands/feedback.js +1 -0
  205. package/dist/commands/feedback.js.map +1 -1
  206. package/dist/commands/notifications.d.ts.map +1 -1
  207. package/dist/commands/notifications.js +5 -3
  208. package/dist/commands/notifications.js.map +1 -1
  209. package/dist/commands/registry.d.ts +3 -0
  210. package/dist/commands/registry.d.ts.map +1 -1
  211. package/dist/commands/registry.js +14 -0
  212. package/dist/commands/registry.js.map +1 -1
  213. package/dist/commands/skill.d.ts +5 -0
  214. package/dist/commands/skill.d.ts.map +1 -0
  215. package/dist/commands/skill.js +30 -0
  216. package/dist/commands/skill.js.map +1 -0
  217. package/dist/commands/views.d.ts +2 -0
  218. package/dist/commands/views.d.ts.map +1 -1
  219. package/dist/commands/views.js +15 -1
  220. package/dist/commands/views.js.map +1 -1
  221. package/dist/controllers/accounts.d.ts +5 -2
  222. package/dist/controllers/accounts.d.ts.map +1 -1
  223. package/dist/controllers/accounts.js +11 -8
  224. package/dist/controllers/accounts.js.map +1 -1
  225. package/dist/controllers/context.d.ts +6 -0
  226. package/dist/controllers/context.d.ts.map +1 -1
  227. package/dist/controllers/context.js +3 -0
  228. package/dist/controllers/context.js.map +1 -1
  229. package/dist/controllers/feedback.d.ts +1 -1
  230. package/dist/controllers/feedback.d.ts.map +1 -1
  231. package/dist/controllers/feedback.js +4 -1
  232. package/dist/controllers/feedback.js.map +1 -1
  233. package/dist/controllers/input.d.ts.map +1 -1
  234. package/dist/controllers/input.js +2 -0
  235. package/dist/controllers/input.js.map +1 -1
  236. package/dist/controllers/jinion.d.ts +9 -1
  237. package/dist/controllers/jinion.d.ts.map +1 -1
  238. package/dist/controllers/jinion.js +9 -1
  239. package/dist/controllers/jinion.js.map +1 -1
  240. package/dist/controllers/mcp.d.ts +11 -2
  241. package/dist/controllers/mcp.d.ts.map +1 -1
  242. package/dist/controllers/mcp.js +42 -7
  243. package/dist/controllers/mcp.js.map +1 -1
  244. package/dist/controllers/session.d.ts.map +1 -1
  245. package/dist/controllers/session.js +4 -0
  246. package/dist/controllers/session.js.map +1 -1
  247. package/dist/conversation/activity.d.ts +5 -0
  248. package/dist/conversation/activity.d.ts.map +1 -0
  249. package/dist/conversation/activity.js +41 -0
  250. package/dist/conversation/activity.js.map +1 -0
  251. package/dist/conversation/apply-event.d.ts.map +1 -1
  252. package/dist/conversation/apply-event.js +2 -1
  253. package/dist/conversation/apply-event.js.map +1 -1
  254. package/dist/conversation/edits.d.ts +5 -0
  255. package/dist/conversation/edits.d.ts.map +1 -1
  256. package/dist/conversation/edits.js +10 -0
  257. package/dist/conversation/edits.js.map +1 -1
  258. package/dist/conversation/reducer.d.ts +15 -0
  259. package/dist/conversation/reducer.d.ts.map +1 -1
  260. package/dist/design/guides.d.ts +78 -5
  261. package/dist/design/guides.d.ts.map +1 -1
  262. package/dist/design/guides.js +78 -5
  263. package/dist/design/guides.js.map +1 -1
  264. package/dist/design/prompt.d.ts +1 -1
  265. package/dist/design/prompt.d.ts.map +1 -1
  266. package/dist/design/prompt.js +2 -2
  267. package/dist/design/prompt.js.map +1 -1
  268. package/dist/design/tools.d.ts +2 -0
  269. package/dist/design/tools.d.ts.map +1 -1
  270. package/dist/design/tools.js +6 -2
  271. package/dist/design/tools.js.map +1 -1
  272. package/dist/directions/directions.d.ts +42 -0
  273. package/dist/directions/directions.d.ts.map +1 -0
  274. package/dist/directions/directions.js +120 -0
  275. package/dist/directions/directions.js.map +1 -0
  276. package/dist/directions/store.d.ts +34 -0
  277. package/dist/directions/store.d.ts.map +1 -0
  278. package/dist/directions/store.js +61 -0
  279. package/dist/directions/store.js.map +1 -0
  280. package/dist/directions/tools.d.ts +29 -0
  281. package/dist/directions/tools.d.ts.map +1 -0
  282. package/dist/directions/tools.js +57 -0
  283. package/dist/directions/tools.js.map +1 -0
  284. package/dist/directions/viewer.d.ts +6 -0
  285. package/dist/directions/viewer.d.ts.map +1 -0
  286. package/dist/directions/viewer.js +266 -0
  287. package/dist/directions/viewer.js.map +1 -0
  288. package/dist/files/names.d.ts +6 -0
  289. package/dist/files/names.d.ts.map +1 -0
  290. package/dist/files/names.js +18 -0
  291. package/dist/files/names.js.map +1 -0
  292. package/dist/files/operations.d.ts +54 -0
  293. package/dist/files/operations.d.ts.map +1 -0
  294. package/dist/files/operations.js +173 -0
  295. package/dist/files/operations.js.map +1 -0
  296. package/dist/files/search.d.ts +11 -0
  297. package/dist/files/search.d.ts.map +1 -0
  298. package/dist/files/search.js +112 -0
  299. package/dist/files/search.js.map +1 -0
  300. package/dist/files/trash.d.ts +11 -0
  301. package/dist/files/trash.d.ts.map +1 -0
  302. package/dist/files/trash.js +64 -0
  303. package/dist/files/trash.js.map +1 -0
  304. package/dist/files/types.d.ts +112 -0
  305. package/dist/files/types.d.ts.map +1 -0
  306. package/dist/files/types.js +47 -0
  307. package/dist/files/types.js.map +1 -0
  308. package/dist/files/watch.d.ts +26 -0
  309. package/dist/files/watch.d.ts.map +1 -0
  310. package/dist/files/watch.js +107 -0
  311. package/dist/files/watch.js.map +1 -0
  312. package/dist/git/blame.d.ts +10 -0
  313. package/dist/git/blame.d.ts.map +1 -0
  314. package/dist/git/blame.js +91 -0
  315. package/dist/git/blame.js.map +1 -0
  316. package/dist/git/repos.d.ts +5 -0
  317. package/dist/git/repos.d.ts.map +1 -1
  318. package/dist/git/repos.js +13 -0
  319. package/dist/git/repos.js.map +1 -1
  320. package/dist/git/staging.d.ts +10 -1
  321. package/dist/git/staging.d.ts.map +1 -1
  322. package/dist/git/staging.js +21 -0
  323. package/dist/git/staging.js.map +1 -1
  324. package/dist/git/types.d.ts +48 -0
  325. package/dist/git/types.d.ts.map +1 -1
  326. package/dist/git/types.js +25 -0
  327. package/dist/git/types.js.map +1 -1
  328. package/dist/host.d.ts +2 -0
  329. package/dist/host.d.ts.map +1 -1
  330. package/dist/host.js +8 -1
  331. package/dist/host.js.map +1 -1
  332. package/dist/lib/changelog.d.ts +12 -0
  333. package/dist/lib/changelog.d.ts.map +1 -0
  334. package/dist/lib/changelog.js +52 -0
  335. package/dist/lib/changelog.js.map +1 -0
  336. package/dist/lib/glob.d.ts +6 -0
  337. package/dist/lib/glob.d.ts.map +1 -0
  338. package/dist/lib/glob.js +49 -0
  339. package/dist/lib/glob.js.map +1 -0
  340. package/dist/lib/paths.d.ts +3 -0
  341. package/dist/lib/paths.d.ts.map +1 -1
  342. package/dist/lib/paths.js +9 -1
  343. package/dist/lib/paths.js.map +1 -1
  344. package/dist/lib/shell-words.d.ts +2 -0
  345. package/dist/lib/shell-words.d.ts.map +1 -0
  346. package/dist/lib/shell-words.js +60 -0
  347. package/dist/lib/shell-words.js.map +1 -0
  348. package/dist/look/tools.d.ts +7 -1
  349. package/dist/look/tools.d.ts.map +1 -1
  350. package/dist/look/tools.js +19 -4
  351. package/dist/look/tools.js.map +1 -1
  352. package/dist/lsp/code-intelligence.d.ts +87 -0
  353. package/dist/lsp/code-intelligence.d.ts.map +1 -0
  354. package/dist/lsp/code-intelligence.js +343 -0
  355. package/dist/lsp/code-intelligence.js.map +1 -0
  356. package/dist/lsp/edits.d.ts +4 -0
  357. package/dist/lsp/edits.d.ts.map +1 -0
  358. package/dist/lsp/edits.js +14 -0
  359. package/dist/lsp/edits.js.map +1 -0
  360. package/dist/lsp/project-check.d.ts +8 -0
  361. package/dist/lsp/project-check.d.ts.map +1 -0
  362. package/dist/lsp/project-check.js +71 -0
  363. package/dist/lsp/project-check.js.map +1 -0
  364. package/dist/lsp/results.d.ts +95 -0
  365. package/dist/lsp/results.d.ts.map +1 -0
  366. package/dist/lsp/results.js +116 -0
  367. package/dist/lsp/results.js.map +1 -0
  368. package/dist/lsp/server.d.ts +22 -0
  369. package/dist/lsp/server.d.ts.map +1 -0
  370. package/dist/lsp/server.js +123 -0
  371. package/dist/lsp/server.js.map +1 -0
  372. package/dist/lsp/servers.d.ts +21 -0
  373. package/dist/lsp/servers.d.ts.map +1 -0
  374. package/dist/lsp/servers.js +57 -0
  375. package/dist/lsp/servers.js.map +1 -0
  376. package/dist/lsp/transport.d.ts +9 -0
  377. package/dist/lsp/transport.d.ts.map +1 -0
  378. package/dist/lsp/transport.js +64 -0
  379. package/dist/lsp/transport.js.map +1 -0
  380. package/dist/lsp/types.d.ts +262 -0
  381. package/dist/lsp/types.d.ts.map +1 -0
  382. package/dist/lsp/types.js +64 -0
  383. package/dist/lsp/types.js.map +1 -0
  384. package/dist/map/conventions.d.ts +18 -2
  385. package/dist/map/conventions.d.ts.map +1 -1
  386. package/dist/map/conventions.js +17 -7
  387. package/dist/map/conventions.js.map +1 -1
  388. package/dist/map/look.d.ts +23 -0
  389. package/dist/map/look.d.ts.map +1 -1
  390. package/dist/map/look.js +26 -16
  391. package/dist/map/look.js.map +1 -1
  392. package/dist/map/overview.d.ts +54 -0
  393. package/dist/map/overview.d.ts.map +1 -0
  394. package/dist/map/overview.js +32 -0
  395. package/dist/map/overview.js.map +1 -0
  396. package/dist/map/project-overview.d.ts +5 -0
  397. package/dist/map/project-overview.d.ts.map +1 -0
  398. package/dist/map/project-overview.js +35 -0
  399. package/dist/map/project-overview.js.map +1 -0
  400. package/dist/map/prompt.d.ts.map +1 -1
  401. package/dist/map/prompt.js +17 -38
  402. package/dist/map/prompt.js.map +1 -1
  403. package/dist/map/review.d.ts +29 -9
  404. package/dist/map/review.d.ts.map +1 -1
  405. package/dist/map/review.js +105 -25
  406. package/dist/map/review.js.map +1 -1
  407. package/dist/map/rules-request.d.ts +4 -0
  408. package/dist/map/rules-request.d.ts.map +1 -0
  409. package/dist/map/rules-request.js +6 -0
  410. package/dist/map/rules-request.js.map +1 -0
  411. package/dist/mcp/config.d.ts +3 -10
  412. package/dist/mcp/config.d.ts.map +1 -1
  413. package/dist/mcp/config.js +5 -0
  414. package/dist/mcp/config.js.map +1 -1
  415. package/dist/mcp/login.d.ts +2 -0
  416. package/dist/mcp/login.d.ts.map +1 -1
  417. package/dist/mcp/login.js +5 -0
  418. package/dist/mcp/login.js.map +1 -1
  419. package/dist/mcp/transport.d.ts +16 -0
  420. package/dist/mcp/transport.d.ts.map +1 -0
  421. package/dist/mcp/transport.js +11 -0
  422. package/dist/mcp/transport.js.map +1 -0
  423. package/dist/memory/import.d.ts +10 -1
  424. package/dist/memory/import.d.ts.map +1 -1
  425. package/dist/memory/import.js +14 -6
  426. package/dist/memory/import.js.map +1 -1
  427. package/dist/preview/pages.d.ts +17 -0
  428. package/dist/preview/pages.d.ts.map +1 -0
  429. package/dist/preview/pages.js +92 -0
  430. package/dist/preview/pages.js.map +1 -0
  431. package/dist/preview/previews.d.ts +22 -0
  432. package/dist/preview/previews.d.ts.map +1 -0
  433. package/dist/preview/previews.js +28 -0
  434. package/dist/preview/previews.js.map +1 -0
  435. package/dist/preview/prompt.d.ts +3 -0
  436. package/dist/preview/prompt.d.ts.map +1 -0
  437. package/dist/preview/prompt.js +5 -0
  438. package/dist/preview/prompt.js.map +1 -0
  439. package/dist/preview/tools.d.ts +21 -0
  440. package/dist/preview/tools.d.ts.map +1 -0
  441. package/dist/preview/tools.js +34 -0
  442. package/dist/preview/tools.js.map +1 -0
  443. package/dist/preview/types.d.ts +7 -0
  444. package/dist/preview/types.d.ts.map +1 -1
  445. package/dist/preview/types.js +2 -0
  446. package/dist/preview/types.js.map +1 -1
  447. package/dist/prompt/files.d.ts +4 -1
  448. package/dist/prompt/files.d.ts.map +1 -1
  449. package/dist/prompt/files.js +23 -8
  450. package/dist/prompt/files.js.map +1 -1
  451. package/dist/prompt/skills.d.ts +2 -0
  452. package/dist/prompt/skills.d.ts.map +1 -1
  453. package/dist/settings/project.d.ts +2 -0
  454. package/dist/settings/project.d.ts.map +1 -1
  455. package/dist/settings/project.js.map +1 -1
  456. package/dist/settings/user.d.ts +2 -0
  457. package/dist/settings/user.d.ts.map +1 -1
  458. package/dist/settings/user.js.map +1 -1
  459. package/dist/skills/folders.d.ts +30 -0
  460. package/dist/skills/folders.d.ts.map +1 -0
  461. package/dist/skills/folders.js +70 -0
  462. package/dist/skills/folders.js.map +1 -0
  463. package/dist/skills/skill-file.d.ts +10 -0
  464. package/dist/skills/skill-file.d.ts.map +1 -0
  465. package/dist/skills/skill-file.js +68 -0
  466. package/dist/skills/skill-file.js.map +1 -0
  467. package/dist/skills/tools.d.ts +26 -0
  468. package/dist/skills/tools.d.ts.map +1 -0
  469. package/dist/skills/tools.js +34 -0
  470. package/dist/skills/tools.js.map +1 -0
  471. package/dist/state/agent.d.ts +8 -0
  472. package/dist/state/agent.d.ts.map +1 -1
  473. package/dist/state/preferences.d.ts +2 -0
  474. package/dist/state/preferences.d.ts.map +1 -1
  475. package/dist/state/preferences.js +3 -1
  476. package/dist/state/preferences.js.map +1 -1
  477. package/dist/state/session.d.ts +6 -0
  478. package/dist/state/session.d.ts.map +1 -1
  479. package/dist/state/session.js +1 -0
  480. package/dist/state/session.js.map +1 -1
  481. package/package.json +3 -1
  482. package/schema/api.json +3872 -146
  483. package/vendor/darwin-arm64/build.json +62 -0
  484. package/vendor/darwin-arm64/ffmpeg +0 -0
  485. package/vendor/darwin-arm64/ffprobe +0 -0
  486. package/vendor/darwin-arm64/licenses/README.md +13 -0
  487. package/vendor/darwin-arm64/licenses/ffmpeg-LGPL-2.1.txt +502 -0
  488. package/vendor/darwin-arm64/licenses/whisper.cpp-MIT.txt +21 -0
  489. package/vendor/darwin-arm64/voices.bin +0 -0
  490. package/vendor/darwin-arm64/whisper-cli +0 -0
@@ -0,0 +1,173 @@
1
+ import { cp, lstat, mkdir, realpath, writeFile } from 'node:fs/promises';
2
+ import { basename, dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';
3
+ import { within } from '../lib/paths.js';
4
+ import { freeName } from './names.js';
5
+ import { fromTrash, moveAcross, restorable, toTrash } from './trash.js';
6
+ /** Why an operation was refused, for the API to tell as its own error. */
7
+ export class FileProblem extends Error {
8
+ kind;
9
+ path;
10
+ constructor(kind, message, path) {
11
+ super(message);
12
+ this.kind = kind;
13
+ this.path = path;
14
+ }
15
+ }
16
+ /**
17
+ * What can change which files a folder holds: each keeps to the folder, by real paths, so neither `..` nor a link
18
+ * leads out of it, and a name already taken is refused unless `replace` says to move what holds it to the Trash.
19
+ */
20
+ export class FolderFiles {
21
+ root;
22
+ constructor(root) {
23
+ this.root = root;
24
+ }
25
+ static async of(folder) {
26
+ return new FolderFiles(await realpath(folder));
27
+ }
28
+ /** A file, empty or with `content`, or a folder; the folders it is in are made as needed. */
29
+ async create(path, { folder = false, content, replace = false }) {
30
+ const target = await this.target(path);
31
+ const replaced = await this.clear(target, replace);
32
+ await mkdir(dirname(target), { recursive: true });
33
+ if (folder)
34
+ await mkdir(target);
35
+ else
36
+ await writeFile(target, content ?? '', { flag: 'wx' });
37
+ return { path: this.named(target), replaced };
38
+ }
39
+ /** Gives a file or folder another name where it is. */
40
+ async rename(path, name, replace = false) {
41
+ if (!name || name === '.' || name === '..' || name.includes('/') || name.includes(sep)) {
42
+ throw new FileProblem('invalid', `“${name}” can't be a file's name.`);
43
+ }
44
+ const source = await this.existing(path);
45
+ return this.relocate([[source, join(dirname(source), name)]], replace);
46
+ }
47
+ /**
48
+ * Moves files and folders into a folder of the session's, each keeping its name; with `keepBoth`, one whose name is
49
+ * taken there takes the next free one, as the Finder's Keep Both names it, `box 2.tsx`.
50
+ */
51
+ async move(paths, into, replace = false, keepBoth = false) {
52
+ const folder = await this.folderAt(into);
53
+ const sources = await Promise.all(paths.map((path) => this.existing(path)));
54
+ const pairs = [];
55
+ for (const source of sources)
56
+ pairs.push([source, join(folder, keepBoth && dirname(source) !== folder ? await freeName(folder, basename(source), '') : basename(source))]);
57
+ return this.relocate(pairs, replace);
58
+ }
59
+ /**
60
+ * Copies files and folders into a folder of the session's: ones of the folder by their paths in it, others, as files
61
+ * dropped from the Finder, by their whole paths. Copied into the folder it is in, a copy takes a name of its own, as
62
+ * one whose name is taken does with `keepBoth`.
63
+ */
64
+ async copy(paths, into, replace = false, keepBoth = false) {
65
+ const folder = await this.folderAt(into);
66
+ const copied = [];
67
+ const replaced = [];
68
+ for (const path of paths) {
69
+ const source = isAbsolute(path) && within(path, this.root) === undefined ? await this.outside(path) : await this.existing(path);
70
+ const own = dirname(source) === folder;
71
+ const name = own ? await freeName(folder, basename(source), 'copy') : keepBoth ? await freeName(folder, basename(source), '') : basename(source);
72
+ const target = join(folder, name);
73
+ this.notInto(source, target);
74
+ replaced.push(...(await this.clear(target, replace)));
75
+ await cp(source, target, { recursive: true, verbatimSymlinks: true, errorOnExist: true, force: false });
76
+ copied.push({ from: within(source, this.root) === undefined ? source : this.named(source), to: this.named(target) });
77
+ }
78
+ return { copied, replaced };
79
+ }
80
+ /** Moves files and folders to the Trash. */
81
+ async delete(paths) {
82
+ const sources = await Promise.all(paths.map((path) => this.existing(path)));
83
+ const trashed = [];
84
+ for (const source of sources)
85
+ trashed.push({ path: this.named(source), trash: await toTrash(source) });
86
+ return trashed;
87
+ }
88
+ /** Puts back what `delete` or a replace sent to the Trash, at the path it had. */
89
+ async restore(items, replace = false) {
90
+ const restored = [];
91
+ const replaced = [];
92
+ for (const { path, trash } of items) {
93
+ const target = await this.target(path);
94
+ if (!(await restorable(trash)))
95
+ throw new FileProblem('missing', `${path} isn't in the Trash any more.`, path);
96
+ replaced.push(...(await this.clear(target, replace)));
97
+ await fromTrash(trash, target);
98
+ restored.push(this.named(target));
99
+ }
100
+ return { restored, replaced };
101
+ }
102
+ /** A folder of the session's by its path there, `''` for the folder itself, as a whole path. */
103
+ async folderAt(path) {
104
+ const folder = path === '' || path === '.' ? this.root : await this.existing(path).then((each) => realpath(each));
105
+ const info = await lstat(folder);
106
+ if (!info.isDirectory() || within(folder, this.root) === undefined)
107
+ throw new FileProblem('missing', `${path} isn't a folder in this session's folder.`, path);
108
+ return folder;
109
+ }
110
+ async relocate(pairs, replace) {
111
+ const moved = [];
112
+ const replaced = [];
113
+ for (const [source, target] of pairs) {
114
+ if (source === target)
115
+ continue;
116
+ this.notInto(source, target);
117
+ // A name that differs only in case is the same file on a disk that ignores case, which is no clash.
118
+ if (!(await sameFile(source, target)))
119
+ replaced.push(...(await this.clear(target, replace)));
120
+ await moveAcross(source, target);
121
+ moved.push({ from: this.named(source), to: this.named(target) });
122
+ }
123
+ return { moved, replaced };
124
+ }
125
+ notInto(source, target) {
126
+ if (target.startsWith(`${source}${sep}`))
127
+ throw new FileProblem('invalid', `${this.named(source)} can't go into itself.`, this.named(source));
128
+ }
129
+ /** What holds `target`, to the Trash when `replace` says so. */
130
+ async clear(target, replace) {
131
+ if (!(await lstat(target).catch(() => undefined)))
132
+ return [];
133
+ if (!replace)
134
+ throw new FileProblem('taken', `${this.named(target)} is already there.`, this.named(target));
135
+ return [{ path: this.named(target), trash: await toTrash(target) }];
136
+ }
137
+ // A path that is there, its last part not followed, so a link is moved itself rather than what it points at.
138
+ async existing(path) {
139
+ const absolute = resolve(this.root, path);
140
+ const parent = within(absolute, this.root) === undefined ? undefined : await realpath(dirname(absolute)).catch(() => undefined);
141
+ const file = parent && join(parent, basename(absolute));
142
+ const there = file && file !== this.root && within(file, this.root) !== undefined && (await lstat(file).catch(() => undefined));
143
+ if (!file || !there)
144
+ throw new FileProblem('missing', `${path} isn't in this session's folder.`, path);
145
+ return file;
146
+ }
147
+ async outside(path) {
148
+ if (!(await lstat(path).catch(() => undefined)))
149
+ throw new FileProblem('missing', `${path} isn't there.`, path);
150
+ return path;
151
+ }
152
+ /** Where something new goes: under the deepest folder of its path that is there, which has to be in the folder. */
153
+ async target(path) {
154
+ const absolute = resolve(this.root, path);
155
+ if (within(absolute, this.root) === undefined || absolute === this.root)
156
+ throw new FileProblem('missing', `${path} isn't in this session's folder.`, path);
157
+ let base = dirname(absolute);
158
+ while (!(await lstat(base).catch(() => undefined)))
159
+ base = dirname(base);
160
+ const real = await realpath(base);
161
+ if (within(real, this.root) === undefined)
162
+ throw new FileProblem('missing', `${path} isn't in this session's folder.`, path);
163
+ return join(real, relative(base, absolute));
164
+ }
165
+ named(file) {
166
+ return relative(this.root, file);
167
+ }
168
+ }
169
+ async function sameFile(one, other) {
170
+ const [a, b] = await Promise.all([lstat(one), lstat(other).catch(() => undefined)]);
171
+ return b !== undefined && a.dev === b.dev && a.ino === b.ino;
172
+ }
173
+ //# sourceMappingURL=operations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operations.js","sourceRoot":"","sources":["../../src/files/operations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { Replaced, SearchQuery, SearchResults } from './types.js';
2
+ /** What `query` asks for as a regular expression; throws one that isn't valid. */
3
+ export declare function patternOf({ query, caseSensitive, wholeWord, regex }: SearchQuery): RegExp;
4
+ /** Every line of the folder's files the query finds, file by file in the order git lists them, up to a limit. */
5
+ export declare function searchFiles(folder: string, search: SearchQuery): Promise<SearchResults>;
6
+ /**
7
+ * Replaces what the query finds with `replacement` in the folder's files, or in `paths` of them only, and writes those
8
+ * it changed. In a regular expression `$1` and the like stand for what it caught; otherwise the text goes in as it is.
9
+ */
10
+ export declare function replaceInFiles(folder: string, search: SearchQuery, replacement: string, paths?: string[]): Promise<Replaced>;
11
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/files/search.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,QAAQ,EAAe,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AASpF,kFAAkF;AAClF,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,WAAW,UAIhF;AAED,iHAAiH;AACjH,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CAqB7F;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC,CAsBlI"}
@@ -0,0 +1,112 @@
1
+ import { readFile, stat, writeFile } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import { matchesGlob } from '../lib/glob.js';
4
+ import { listProjectFiles } from '../prompt/files.js';
5
+ // Large enough for any source file; a bigger one is data, a bundle or a log, and would slow every search down.
6
+ const MAX_BYTES = 1024 * 1024;
7
+ const MAX_MATCHES = 5000;
8
+ const MAX_LINE = 500;
9
+ // Files read at once: enough to keep the disk busy, few enough not to run out of handles in a large project.
10
+ const AT_ONCE = 32;
11
+ /** What `query` asks for as a regular expression; throws one that isn't valid. */
12
+ export function patternOf({ query, caseSensitive, wholeWord, regex }) {
13
+ const source = regex ? query : query.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
14
+ return new RegExp(wholeWord ? `\\b(?:${source})\\b` : source, caseSensitive ? 'g' : 'gi');
15
+ }
16
+ /** Every line of the folder's files the query finds, file by file in the order git lists them, up to a limit. */
17
+ export async function searchFiles(folder, search) {
18
+ const pattern = patternOf(search);
19
+ const files = [];
20
+ let found = 0;
21
+ await eachText(folder, await candidates(folder, search), (path, text) => {
22
+ if (found >= MAX_MATCHES)
23
+ return false;
24
+ const matches = matchesIn(text, pattern, MAX_MATCHES - found);
25
+ if (matches.length > 0) {
26
+ files.push({ path, matches });
27
+ found += matches.reduce((sum, match) => sum + match.ranges.length, 0);
28
+ }
29
+ return true;
30
+ });
31
+ files.sort((a, b) => a.path.localeCompare(b.path));
32
+ return { files, truncated: found >= MAX_MATCHES };
33
+ }
34
+ /**
35
+ * Replaces what the query finds with `replacement` in the folder's files, or in `paths` of them only, and writes those
36
+ * it changed. In a regular expression `$1` and the like stand for what it caught; otherwise the text goes in as it is.
37
+ */
38
+ export async function replaceInFiles(folder, search, replacement, paths) {
39
+ // Line by line, as the search found them: `^` and `$` stand for a line's start and end.
40
+ const pattern = new RegExp(patternOf(search).source, `${patternOf(search).flags}m`);
41
+ const text = search.regex ? replacement : replacement.replaceAll('$', '$$$$');
42
+ const chosen = (await candidates(folder, search)).filter((path) => !paths || paths.includes(path));
43
+ const changed = [];
44
+ let replacements = 0;
45
+ await eachText(folder, chosen, (path, content) => {
46
+ const count = [...content.matchAll(pattern)].filter((found) => found[0] !== '').length;
47
+ if (count > 0) {
48
+ changed.push({ path, text: content.replace(pattern, text) });
49
+ replacements += count;
50
+ }
51
+ return true;
52
+ });
53
+ await Promise.all(changed.map(({ path, text: next }) => writeFile(join(folder, path), next)));
54
+ return { files: changed.length, replacements };
55
+ }
56
+ /** The folder's files the search's globs let in, as git lists them, so ignored ones stay out. */
57
+ async function candidates(folder, { include, exclude }) {
58
+ const included = globsOf(include);
59
+ const excluded = globsOf(exclude);
60
+ return (await listProjectFiles(folder)).filter((path) => !path.endsWith('/') && (included.length === 0 || included.some((glob) => fits(glob, path))) && !excluded.some((glob) => fits(glob, path)));
61
+ }
62
+ /** Each file's text, a few at a time, till `each` says to stop; one too large or not text is passed. */
63
+ async function eachText(folder, paths, each) {
64
+ for (let start = 0; start < paths.length; start += AT_ONCE) {
65
+ const read = await Promise.all(paths.slice(start, start + AT_ONCE).map(async (path) => {
66
+ const file = join(folder, path);
67
+ const info = await stat(file).catch(() => undefined);
68
+ if (!info?.isFile() || info.size > MAX_BYTES)
69
+ return undefined;
70
+ const text = await readFile(file, 'utf8').catch(() => undefined);
71
+ return text === undefined || text.includes('\u0000') ? undefined : { path, text };
72
+ }));
73
+ for (const file of read)
74
+ if (file && !each(file.path, file.text))
75
+ return;
76
+ }
77
+ }
78
+ function matchesIn(text, pattern, room) {
79
+ const matches = [];
80
+ const lines = text.split(/\r?\n/);
81
+ let left = room;
82
+ for (let index = 0; index < lines.length && left > 0; index++) {
83
+ const line = lines[index];
84
+ const ranges = [];
85
+ pattern.lastIndex = 0;
86
+ for (let found = pattern.exec(line); found && left > 0; found = pattern.exec(line)) {
87
+ // One that finds nothing, as `^`, would find it again at the same place for ever.
88
+ if (found[0] === '') {
89
+ pattern.lastIndex++;
90
+ continue;
91
+ }
92
+ if (found.index < MAX_LINE)
93
+ ranges.push([found.index, Math.min(found.index + found[0].length, MAX_LINE)]);
94
+ left--;
95
+ }
96
+ if (ranges.length > 0)
97
+ matches.push({ line: index + 1, text: line.slice(0, MAX_LINE), ranges });
98
+ }
99
+ return matches;
100
+ }
101
+ function globsOf(list) {
102
+ return (list ?? '')
103
+ .split(',')
104
+ .map((glob) => glob.trim())
105
+ .filter(Boolean);
106
+ }
107
+ /** A glob fits a file itself, or a folder it is in, as `src` lets in everything under it. */
108
+ function fits(glob, path) {
109
+ const parts = path.split('/');
110
+ return parts.some((_, index) => matchesGlob(glob, parts.slice(0, index + 1).join('/')));
111
+ }
112
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/files/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,+GAA+G;AAC/G,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC;AAC9B,MAAM,WAAW,GAAG,IAAI,CAAC;AACzB,MAAM,QAAQ,GAAG,GAAG,CAAC;AACrB,6GAA6G;AAC7G,MAAM,OAAO,GAAG,EAAE,CAAC;AAEnB,kFAAkF;AAClF,MAAM,UAAU,SAAS,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,EAAe;IAC/E,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;IAE5E,OAAO,IAAI,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,MAAM,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC5F,CAAC;AAED,iHAAiH;AACjH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAc,EAAE,MAAmB;IACnE,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IAClC,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,MAAM,QAAQ,CAAC,MAAM,EAAE,MAAM,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE;QACtE,IAAI,KAAK,IAAI,WAAW;YAAE,OAAO,KAAK,CAAC;QAEvC,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,GAAG,KAAK,CAAC,CAAC;QAE9D,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;YAC9B,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACxE,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAEnD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,IAAI,WAAW,EAAE,CAAC;AACpD,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAc,EAAE,MAAmB,EAAE,WAAmB,EAAE,KAAgB;IAC7G,wFAAwF;IACxF,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;IACpF,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAC9E,MAAM,MAAM,GAAG,CAAC,MAAM,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IACnG,MAAM,OAAO,GAAqC,EAAE,CAAC;IACrD,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,MAAM,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE;QAC/C,MAAM,KAAK,GAAG,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QAEvF,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7D,YAAY,IAAI,KAAK,CAAC;QACxB,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAE9F,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,CAAC;AACjD,CAAC;AAED,iGAAiG;AACjG,KAAK,UAAU,UAAU,CAAC,MAAc,EAAE,EAAE,OAAO,EAAE,OAAO,EAAe;IACzE,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAElC,OAAO,CAAC,MAAM,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAC5C,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CACpJ,CAAC;AACJ,CAAC;AAED,wGAAwG;AACxG,KAAK,UAAU,QAAQ,CAAC,MAAc,EAAE,KAAe,EAAE,IAA6C;IACpG,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,OAAO,EAAE,CAAC;QAC3D,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAC5B,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YACrD,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAChC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YACrD,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,IAAI,CAAC,IAAI,GAAG,SAAS;gBAAE,OAAO,SAAS,CAAC;YAE/D,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAEjE,OAAO,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;QACpF,CAAC,CAAC,CACH,CAAC;QAEF,KAAK,MAAM,IAAI,IAAI,IAAI;YAAE,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC;gBAAE,OAAO;IAC3E,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,IAAY,EAAE,OAAe,EAAE,IAAY;IAC5D,MAAM,OAAO,GAAkB,EAAE,CAAC;IAClC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAClC,IAAI,IAAI,GAAG,IAAI,CAAC;IAEhB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,IAAI,IAAI,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;QAC9D,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAE,CAAC;QAC3B,MAAM,MAAM,GAAuB,EAAE,CAAC;QAEtC,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;QAEtB,KAAK,IAAI,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACnF,kFAAkF;YAClF,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;gBACpB,OAAO,CAAC,SAAS,EAAE,CAAC;gBACpB,SAAS;YACX,CAAC;YAED,IAAI,KAAK,CAAC,KAAK,GAAG,QAAQ;gBAAE,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC1G,IAAI,EAAE,CAAC;QACT,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAClG,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,OAAO,CAAC,IAAwB;IACvC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;SAChB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC;AAED,6FAA6F;AAC7F,SAAS,IAAI,CAAC,IAAY,EAAE,IAAY;IACtC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE9B,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1F,CAAC"}
@@ -0,0 +1,11 @@
1
+ export declare class TrashUnsupported extends Error {
2
+ }
3
+ /** Moves a file or folder to the Trash, as the Finder would, under a name free there; where it went. */
4
+ export declare function toTrash(path: string): Promise<string>;
5
+ /** Whether `fromTrash` can put it back: `toTrash` moved it there, and it is still there. */
6
+ export declare function restorable(trash: string): Promise<boolean>;
7
+ /** Puts what `toTrash` moved back at `path`, once `restorable` said it can. */
8
+ export declare function fromTrash(trash: string, path: string): Promise<void>;
9
+ /** A rename, or a copy and a removal where the two are on different disks, as a project on another volume is. */
10
+ export declare function moveAcross(from: string, to: string): Promise<void>;
11
+ //# sourceMappingURL=trash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trash.d.ts","sourceRoot":"","sources":["../../src/files/trash.ts"],"names":[],"mappings":"AAQA,qBAAa,gBAAiB,SAAQ,KAAK;CAAG;AAE9C,wGAAwG;AACxG,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,mBAiBzC;AAED,4FAA4F;AAC5F,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,oBAE7C;AAED,+EAA+E;AAC/E,wBAAsB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,iBAO1D;AAED,iHAAiH;AACjH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,iBASxD"}
@@ -0,0 +1,64 @@
1
+ import { cp, lstat, mkdir, rename, rm, writeFile } from 'node:fs/promises';
2
+ import { homedir } from 'node:os';
3
+ import { basename, dirname, join } from 'node:path';
4
+ import { freeName } from './names.js';
5
+ /** What this process put in the Trash, so only that can be taken back out through it. */
6
+ const trashed = new Set();
7
+ export class TrashUnsupported extends Error {
8
+ }
9
+ /** Moves a file or folder to the Trash, as the Finder would, under a name free there; where it went. */
10
+ export async function toTrash(path) {
11
+ const { files, info } = trashFolders();
12
+ await mkdir(files, { recursive: true });
13
+ const name = await freeName(files, basename(path), '');
14
+ const trash = join(files, name);
15
+ if (info) {
16
+ await mkdir(info, { recursive: true });
17
+ await writeFile(join(info, `${name}.trashinfo`), `[Trash Info]\nPath=${encodeURI(path)}\nDeletionDate=${localDate(new Date())}\n`);
18
+ }
19
+ await moveAcross(path, trash);
20
+ trashed.add(trash);
21
+ return trash;
22
+ }
23
+ /** Whether `fromTrash` can put it back: `toTrash` moved it there, and it is still there. */
24
+ export async function restorable(trash) {
25
+ return trashed.has(trash) && (await lstat(trash).then(() => true, () => false));
26
+ }
27
+ /** Puts what `toTrash` moved back at `path`, once `restorable` said it can. */
28
+ export async function fromTrash(trash, path) {
29
+ const { info } = trashFolders();
30
+ await mkdir(dirname(path), { recursive: true });
31
+ await moveAcross(trash, path);
32
+ trashed.delete(trash);
33
+ if (info)
34
+ await rm(join(info, `${basename(trash)}.trashinfo`), { force: true });
35
+ }
36
+ /** A rename, or a copy and a removal where the two are on different disks, as a project on another volume is. */
37
+ export async function moveAcross(from, to) {
38
+ try {
39
+ await rename(from, to);
40
+ }
41
+ catch (error) {
42
+ if (error.code !== 'EXDEV')
43
+ throw error;
44
+ await cp(from, to, { recursive: true, verbatimSymlinks: true, errorOnExist: true, force: false });
45
+ await rm(from, { recursive: true, force: true });
46
+ }
47
+ }
48
+ // The Finder's Trash takes what is moved into it without the record its own Put Back reads, which only the Finder
49
+ // writes; Jinion puts back what it trashed itself. Elsewhere, the trash freedesktop.org describes, record and all.
50
+ function trashFolders() {
51
+ if (process.env.JINION_TRASH)
52
+ return { files: process.env.JINION_TRASH };
53
+ if (process.platform === 'darwin')
54
+ return { files: join(homedir(), '.Trash') };
55
+ if (process.platform === 'win32')
56
+ throw new TrashUnsupported("Moving to the Recycle Bin isn't supported on Windows yet.");
57
+ const trash = join(process.env.XDG_DATA_HOME ?? join(homedir(), '.local', 'share'), 'Trash');
58
+ return { files: join(trash, 'files'), info: join(trash, 'info') };
59
+ }
60
+ function localDate(date) {
61
+ const two = (value) => String(value).padStart(2, '0');
62
+ return `${date.getFullYear()}-${two(date.getMonth() + 1)}-${two(date.getDate())}T${two(date.getHours())}:${two(date.getMinutes())}:${two(date.getSeconds())}`;
63
+ }
64
+ //# sourceMappingURL=trash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trash.js","sourceRoot":"","sources":["../../src/files/trash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,yFAAyF;AACzF,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;AAElC,MAAM,OAAO,gBAAiB,SAAQ,KAAK;CAAG;AAE9C,wGAAwG;AACxG,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAY;IACxC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,YAAY,EAAE,CAAC;IAEvC,MAAM,KAAK,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAExC,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAEhC,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACvC,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,IAAI,YAAY,CAAC,EAAE,sBAAsB,SAAS,CAAC,IAAI,CAAC,kBAAkB,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC;IACrI,CAAC;IAED,MAAM,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAEnB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,4FAA4F;AAC5F,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,KAAa;IAC5C,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AAClF,CAAC;AAED,+EAA+E;AAC/E,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAAa,EAAE,IAAY;IACzD,MAAM,EAAE,IAAI,EAAE,GAAG,YAAY,EAAE,CAAC;IAEhC,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,MAAM,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtB,IAAI,IAAI;QAAE,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAClF,CAAC;AAED,iHAAiH;AACjH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY,EAAE,EAAU;IACvD,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,OAAO;YAAE,MAAM,KAAK,CAAC;QAEnE,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAClG,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED,kHAAkH;AAClH,mHAAmH;AACnH,SAAS,YAAY;IACnB,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY;QAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;IACzE,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC;IAC/E,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,MAAM,IAAI,gBAAgB,CAAC,2DAA2D,CAAC,CAAC;IAE1H,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;IAE7F,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC;AACpE,CAAC;AAED,SAAS,SAAS,CAAC,IAAU;IAC3B,MAAM,GAAG,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAE9D,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC;AAChK,CAAC"}
@@ -0,0 +1,112 @@
1
+ import { z } from 'zod';
2
+ /** What to find in the folder's files, and in which of them. */
3
+ export declare const SearchQuery: z.ZodObject<{
4
+ query: z.ZodString;
5
+ caseSensitive: z.ZodOptional<z.ZodBoolean>;
6
+ wholeWord: z.ZodOptional<z.ZodBoolean>;
7
+ regex: z.ZodOptional<z.ZodBoolean>;
8
+ include: z.ZodOptional<z.ZodString>;
9
+ exclude: z.ZodOptional<z.ZodString>;
10
+ }, z.core.$strip>;
11
+ export type SearchQuery = z.infer<typeof SearchQuery>;
12
+ /** A line with what was found in it, as `[start, end)` places in `text`, counted from 0. */
13
+ export declare const SearchMatch: z.ZodObject<{
14
+ line: z.ZodNumber;
15
+ text: z.ZodString;
16
+ ranges: z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
17
+ }, z.core.$strip>;
18
+ export type SearchMatch = z.infer<typeof SearchMatch>;
19
+ export declare const FileMatches: z.ZodObject<{
20
+ path: z.ZodString;
21
+ matches: z.ZodArray<z.ZodObject<{
22
+ line: z.ZodNumber;
23
+ text: z.ZodString;
24
+ ranges: z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
25
+ }, z.core.$strip>>;
26
+ }, z.core.$strip>;
27
+ export type FileMatches = z.infer<typeof FileMatches>;
28
+ /** `truncated` when there were more than are given. */
29
+ export declare const SearchResults: z.ZodObject<{
30
+ files: z.ZodArray<z.ZodObject<{
31
+ path: z.ZodString;
32
+ matches: z.ZodArray<z.ZodObject<{
33
+ line: z.ZodNumber;
34
+ text: z.ZodString;
35
+ ranges: z.ZodArray<z.ZodTuple<[z.ZodNumber, z.ZodNumber], null>>;
36
+ }, z.core.$strip>>;
37
+ }, z.core.$strip>>;
38
+ truncated: z.ZodBoolean;
39
+ }, z.core.$strip>;
40
+ export type SearchResults = z.infer<typeof SearchResults>;
41
+ export declare const Replaced: z.ZodObject<{
42
+ files: z.ZodNumber;
43
+ replacements: z.ZodNumber;
44
+ }, z.core.$strip>;
45
+ export type Replaced = z.infer<typeof Replaced>;
46
+ /**
47
+ * A file a client watches changed on disk: its time now, none once it is gone. Moved or renamed through the API, with
48
+ * `movedTo`, its path now, which is watched from then on in its place.
49
+ */
50
+ export declare const FileChanged: z.ZodObject<{
51
+ session: z.ZodString;
52
+ path: z.ZodString;
53
+ modified: z.ZodOptional<z.ZodNumber>;
54
+ movedTo: z.ZodOptional<z.ZodString>;
55
+ by: z.ZodOptional<z.ZodEnum<{
56
+ agent: "agent";
57
+ other: "other";
58
+ }>>;
59
+ }, z.core.$strip>;
60
+ export type FileChanged = z.infer<typeof FileChanged>;
61
+ /** A file or folder moved, renamed or copied, by its paths in the session's folder; a copy from outside it, by its whole path. */
62
+ export declare const Moved: z.ZodObject<{
63
+ from: z.ZodString;
64
+ to: z.ZodString;
65
+ }, z.core.$strip>;
66
+ export type Moved = z.infer<typeof Moved>;
67
+ /** What went to the Trash: its path in the session's folder, and its whole path in the Trash, by which it is put back. */
68
+ export declare const Trashed: z.ZodObject<{
69
+ path: z.ZodString;
70
+ trash: z.ZodString;
71
+ }, z.core.$strip>;
72
+ export type Trashed = z.infer<typeof Trashed>;
73
+ /** What a call did, so a client can undo it; `replaced`, what was in the way and went to the Trash for it. */
74
+ export declare const FilesMoved: z.ZodObject<{
75
+ moved: z.ZodArray<z.ZodObject<{
76
+ from: z.ZodString;
77
+ to: z.ZodString;
78
+ }, z.core.$strip>>;
79
+ replaced: z.ZodArray<z.ZodObject<{
80
+ path: z.ZodString;
81
+ trash: z.ZodString;
82
+ }, z.core.$strip>>;
83
+ }, z.core.$strip>;
84
+ export type FilesMoved = z.infer<typeof FilesMoved>;
85
+ export declare const FilesCopied: z.ZodObject<{
86
+ copied: z.ZodArray<z.ZodObject<{
87
+ from: z.ZodString;
88
+ to: z.ZodString;
89
+ }, z.core.$strip>>;
90
+ replaced: z.ZodArray<z.ZodObject<{
91
+ path: z.ZodString;
92
+ trash: z.ZodString;
93
+ }, z.core.$strip>>;
94
+ }, z.core.$strip>;
95
+ export type FilesCopied = z.infer<typeof FilesCopied>;
96
+ export declare const FileCreated: z.ZodObject<{
97
+ path: z.ZodString;
98
+ replaced: z.ZodArray<z.ZodObject<{
99
+ path: z.ZodString;
100
+ trash: z.ZodString;
101
+ }, z.core.$strip>>;
102
+ }, z.core.$strip>;
103
+ export type FileCreated = z.infer<typeof FileCreated>;
104
+ export declare const FilesRestored: z.ZodObject<{
105
+ restored: z.ZodArray<z.ZodString>;
106
+ replaced: z.ZodArray<z.ZodObject<{
107
+ path: z.ZodString;
108
+ trash: z.ZodString;
109
+ }, z.core.$strip>>;
110
+ }, z.core.$strip>;
111
+ export type FilesRestored = z.infer<typeof FilesRestored>;
112
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/files/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,gEAAgE;AAChE,eAAO,MAAM,WAAW;;;;;;;iBAWtB,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEtD,4FAA4F;AAC5F,eAAO,MAAM,WAAW;;;;iBAKtB,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEtD,eAAO,MAAM,WAAW;;;;;;;iBAAgE,CAAC;AAEzF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEtD,uDAAuD;AACvD,eAAO,MAAM,aAAa;;;;;;;;;;iBAAoE,CAAC;AAE/F,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAE1D,eAAO,MAAM,QAAQ;;;iBAAwE,CAAC;AAE9F,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAC;AAEhD;;;GAGG;AACH,eAAO,MAAM,WAAW;;;;;;;;;iBAOtB,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEtD,kIAAkI;AAClI,eAAO,MAAM,KAAK;;;iBAAiD,CAAC;AAEpE,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,CAAC;AAE1C,0HAA0H;AAC1H,eAAO,MAAM,OAAO;;;iBAAoD,CAAC;AAEzE,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;AAE9C,8GAA8G;AAC9G,eAAO,MAAM,UAAU;;;;;;;;;iBAAkE,CAAC;AAE1F,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAEpD,eAAO,MAAM,WAAW;;;;;;;;;iBAAmE,CAAC;AAE5F,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEtD,eAAO,MAAM,WAAW;;;;;;iBAA6D,CAAC;AAEtF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEtD,eAAO,MAAM,aAAa;;;;;;iBAA0E,CAAC;AAErG,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC"}
@@ -0,0 +1,47 @@
1
+ import { z } from 'zod';
2
+ /** What to find in the folder's files, and in which of them. */
3
+ export const SearchQuery = z.object({
4
+ query: z.string().min(1),
5
+ caseSensitive: z.boolean().optional(),
6
+ /** Only where it stands as a word of its own. */
7
+ wholeWord: z.boolean().optional(),
8
+ /** `query` is a regular expression, as JavaScript reads one. */
9
+ regex: z.boolean().optional(),
10
+ /** Globs, by commas, as `src, *.ts`: only the files one fits, or a folder of them. */
11
+ include: z.string().optional(),
12
+ /** Globs the same way, for files left out. */
13
+ exclude: z.string().optional(),
14
+ });
15
+ /** A line with what was found in it, as `[start, end)` places in `text`, counted from 0. */
16
+ export const SearchMatch = z.object({
17
+ /** Counted from 1. */
18
+ line: z.number().int(),
19
+ text: z.string(),
20
+ ranges: z.array(z.tuple([z.number().int(), z.number().int()])),
21
+ });
22
+ export const FileMatches = z.object({ path: z.string(), matches: z.array(SearchMatch) });
23
+ /** `truncated` when there were more than are given. */
24
+ export const SearchResults = z.object({ files: z.array(FileMatches), truncated: z.boolean() });
25
+ export const Replaced = z.object({ files: z.number().int(), replacements: z.number().int() });
26
+ /**
27
+ * A file a client watches changed on disk: its time now, none once it is gone. Moved or renamed through the API, with
28
+ * `movedTo`, its path now, which is watched from then on in its place.
29
+ */
30
+ export const FileChanged = z.object({
31
+ session: z.string(),
32
+ path: z.string(),
33
+ modified: z.number().optional(),
34
+ movedTo: z.string().optional(),
35
+ /** `agent` when the session's running turn edits it, `other` when no turn runs; neither when a turn runs but names it in no edit, as a command of the agent's may change it. */
36
+ by: z.enum(['agent', 'other']).optional(),
37
+ });
38
+ /** A file or folder moved, renamed or copied, by its paths in the session's folder; a copy from outside it, by its whole path. */
39
+ export const Moved = z.object({ from: z.string(), to: z.string() });
40
+ /** What went to the Trash: its path in the session's folder, and its whole path in the Trash, by which it is put back. */
41
+ export const Trashed = z.object({ path: z.string(), trash: z.string() });
42
+ /** What a call did, so a client can undo it; `replaced`, what was in the way and went to the Trash for it. */
43
+ export const FilesMoved = z.object({ moved: z.array(Moved), replaced: z.array(Trashed) });
44
+ export const FilesCopied = z.object({ copied: z.array(Moved), replaced: z.array(Trashed) });
45
+ export const FileCreated = z.object({ path: z.string(), replaced: z.array(Trashed) });
46
+ export const FilesRestored = z.object({ restored: z.array(z.string()), replaced: z.array(Trashed) });
47
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/files/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { FileChanged, Moved } from './types.js';
2
+ /**
3
+ * The files one client has open, watched on disk: each folder holding one is watched, as many editors write a file by
4
+ * putting a new one in its place, which a watch on the file itself would lose.
5
+ */
6
+ export declare class FileWatcher {
7
+ private readonly changed;
8
+ private readonly wanted;
9
+ private readonly folders;
10
+ private files;
11
+ private readonly settling;
12
+ constructor(changed: (change: FileChanged) => void);
13
+ /**
14
+ * Files and folders of `folder` moved or renamed through the API, by their paths there: each open file in them is told
15
+ * of with its path now, and watched there from then on.
16
+ */
17
+ static moved(folder: string, moves: Moved[]): void;
18
+ /** The files of the session's folder it now has open, by their paths there; the ones before are let go. */
19
+ set(session: string, folder: string, paths: string[]): void;
20
+ close(): void;
21
+ private follow;
22
+ private rebuild;
23
+ private touched;
24
+ private tell;
25
+ }
26
+ //# sourceMappingURL=watch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/files/watch.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAQrD;;;GAGG;AACH,qBAAa,WAAW;IAMV,OAAO,CAAC,QAAQ,CAAC,OAAO;IALpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0D;IACjF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgC;IACxD,OAAO,CAAC,KAAK,CAA0D;IACvE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoD;IAE7E,YAA6B,OAAO,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,EAElE;IAED;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAE1C;IAED,2GAA2G;IAC3G,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAGnD;IAED,KAAK,SAOJ;IAED,OAAO,CAAC,MAAM;IAwBd,OAAO,CAAC,OAAO;IAoCf,OAAO,CAAC,OAAO;IAkBf,OAAO,CAAC,IAAI;CAGb"}