ctxr-cli 0.33.0 → 0.35.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 (378) hide show
  1. package/README.md +40 -6
  2. package/dist/commands/archive.d.ts +5 -4
  3. package/dist/commands/archive.d.ts.map +1 -1
  4. package/dist/commands/archive.js +7 -7
  5. package/dist/commands/archive.js.map +1 -1
  6. package/dist/commands/catalog-show.d.ts +8 -0
  7. package/dist/commands/catalog-show.d.ts.map +1 -1
  8. package/dist/commands/catalog-show.js +29 -2
  9. package/dist/commands/catalog-show.js.map +1 -1
  10. package/dist/commands/context-gather.d.ts.map +1 -1
  11. package/dist/commands/context-gather.js +3 -2
  12. package/dist/commands/context-gather.js.map +1 -1
  13. package/dist/commands/doctor.d.ts +5 -1
  14. package/dist/commands/doctor.d.ts.map +1 -1
  15. package/dist/commands/doctor.js +4 -0
  16. package/dist/commands/doctor.js.map +1 -1
  17. package/dist/commands/graph-build.d.ts +4 -1
  18. package/dist/commands/graph-build.d.ts.map +1 -1
  19. package/dist/commands/graph-build.js +14 -5
  20. package/dist/commands/graph-build.js.map +1 -1
  21. package/dist/commands/land.d.ts +27 -7
  22. package/dist/commands/land.d.ts.map +1 -1
  23. package/dist/commands/land.js +307 -32
  24. package/dist/commands/land.js.map +1 -1
  25. package/dist/commands/plugin-build.d.ts +33 -0
  26. package/dist/commands/plugin-build.d.ts.map +1 -0
  27. package/dist/commands/plugin-build.js +51 -0
  28. package/dist/commands/plugin-build.js.map +1 -0
  29. package/dist/commands/publish-check.d.ts.map +1 -1
  30. package/dist/commands/publish-check.js +35 -4
  31. package/dist/commands/publish-check.js.map +1 -1
  32. package/dist/commands/publish-gather.d.ts.map +1 -1
  33. package/dist/commands/publish-gather.js +2 -3
  34. package/dist/commands/publish-gather.js.map +1 -1
  35. package/dist/commands/review-list.d.ts +19 -5
  36. package/dist/commands/review-list.d.ts.map +1 -1
  37. package/dist/commands/review-list.js +55 -6
  38. package/dist/commands/review-list.js.map +1 -1
  39. package/dist/commands/rollup-gather.d.ts.map +1 -1
  40. package/dist/commands/rollup-gather.js +2 -3
  41. package/dist/commands/rollup-gather.js.map +1 -1
  42. package/dist/commands/second-opinion.d.ts +33 -0
  43. package/dist/commands/second-opinion.d.ts.map +1 -0
  44. package/dist/commands/second-opinion.js +56 -0
  45. package/dist/commands/second-opinion.js.map +1 -0
  46. package/dist/commands/serve.d.ts.map +1 -1
  47. package/dist/commands/serve.js +14 -2
  48. package/dist/commands/serve.js.map +1 -1
  49. package/dist/commands/session-discard.d.ts +18 -0
  50. package/dist/commands/session-discard.d.ts.map +1 -0
  51. package/dist/commands/session-discard.js +31 -0
  52. package/dist/commands/session-discard.js.map +1 -0
  53. package/dist/commands/session-list.d.ts +17 -6
  54. package/dist/commands/session-list.d.ts.map +1 -1
  55. package/dist/commands/session-list.js +31 -11
  56. package/dist/commands/session-list.js.map +1 -1
  57. package/dist/commands/session-rebase.d.ts +18 -0
  58. package/dist/commands/session-rebase.d.ts.map +1 -0
  59. package/dist/commands/session-rebase.js +43 -0
  60. package/dist/commands/session-rebase.js.map +1 -0
  61. package/dist/commands/session-start.d.ts +8 -0
  62. package/dist/commands/session-start.d.ts.map +1 -1
  63. package/dist/commands/session-start.js +52 -38
  64. package/dist/commands/session-start.js.map +1 -1
  65. package/dist/commands/session-status.d.ts +17 -0
  66. package/dist/commands/session-status.d.ts.map +1 -0
  67. package/dist/commands/session-status.js +38 -0
  68. package/dist/commands/session-status.js.map +1 -0
  69. package/dist/commands/session-submit.d.ts +23 -0
  70. package/dist/commands/session-submit.d.ts.map +1 -0
  71. package/dist/commands/session-submit.js +42 -0
  72. package/dist/commands/session-submit.js.map +1 -0
  73. package/dist/commands/shared-stores-status.d.ts +24 -0
  74. package/dist/commands/shared-stores-status.d.ts.map +1 -0
  75. package/dist/commands/shared-stores-status.js +51 -0
  76. package/dist/commands/shared-stores-status.js.map +1 -0
  77. package/dist/commands/shared-stores-sync.d.ts +27 -0
  78. package/dist/commands/shared-stores-sync.d.ts.map +1 -0
  79. package/dist/commands/shared-stores-sync.js +115 -0
  80. package/dist/commands/shared-stores-sync.js.map +1 -0
  81. package/dist/commands/verify.d.ts.map +1 -1
  82. package/dist/commands/verify.js +2 -4
  83. package/dist/commands/verify.js.map +1 -1
  84. package/dist/config/schema.d.ts +16 -0
  85. package/dist/config/schema.d.ts.map +1 -1
  86. package/dist/config/schema.js +32 -0
  87. package/dist/config/schema.js.map +1 -1
  88. package/dist/core/agents-doc.d.ts +10 -0
  89. package/dist/core/agents-doc.d.ts.map +1 -1
  90. package/dist/core/agents-doc.js +26 -1
  91. package/dist/core/agents-doc.js.map +1 -1
  92. package/dist/core/approval/decision.d.ts +39 -1
  93. package/dist/core/approval/decision.d.ts.map +1 -1
  94. package/dist/core/approval/decision.js +53 -6
  95. package/dist/core/approval/decision.js.map +1 -1
  96. package/dist/core/approval/session-group.d.ts +156 -0
  97. package/dist/core/approval/session-group.d.ts.map +1 -0
  98. package/dist/core/approval/session-group.js +359 -0
  99. package/dist/core/approval/session-group.js.map +1 -0
  100. package/dist/core/approval/session-marker.d.ts +79 -0
  101. package/dist/core/approval/session-marker.d.ts.map +1 -0
  102. package/dist/core/approval/session-marker.js +146 -0
  103. package/dist/core/approval/session-marker.js.map +1 -0
  104. package/dist/core/approval/store-forges.d.ts +15 -0
  105. package/dist/core/approval/store-forges.d.ts.map +1 -0
  106. package/dist/core/approval/store-forges.js +33 -0
  107. package/dist/core/approval/store-forges.js.map +1 -0
  108. package/dist/core/browse/approve.d.ts +8 -0
  109. package/dist/core/browse/approve.d.ts.map +1 -1
  110. package/dist/core/browse/approve.js +366 -48
  111. package/dist/core/browse/approve.js.map +1 -1
  112. package/dist/core/browse/link-resolver.d.ts +9 -4
  113. package/dist/core/browse/link-resolver.d.ts.map +1 -1
  114. package/dist/core/browse/link-resolver.js +12 -7
  115. package/dist/core/browse/link-resolver.js.map +1 -1
  116. package/dist/core/browse/review.d.ts +5 -0
  117. package/dist/core/browse/review.d.ts.map +1 -1
  118. package/dist/core/browse/review.js +8 -0
  119. package/dist/core/browse/review.js.map +1 -1
  120. package/dist/core/checks/integrity-checks.d.ts.map +1 -1
  121. package/dist/core/checks/integrity-checks.js +7 -1
  122. package/dist/core/checks/integrity-checks.js.map +1 -1
  123. package/dist/core/checks/manifest.d.ts.map +1 -1
  124. package/dist/core/checks/manifest.js +2 -0
  125. package/dist/core/checks/manifest.js.map +1 -1
  126. package/dist/core/checks/shared-stores-checks.d.ts +17 -0
  127. package/dist/core/checks/shared-stores-checks.d.ts.map +1 -0
  128. package/dist/core/checks/shared-stores-checks.js +84 -0
  129. package/dist/core/checks/shared-stores-checks.js.map +1 -0
  130. package/dist/core/errors.d.ts +17 -0
  131. package/dist/core/errors.d.ts.map +1 -1
  132. package/dist/core/errors.js +21 -0
  133. package/dist/core/errors.js.map +1 -1
  134. package/dist/core/forge/github.d.ts +14 -0
  135. package/dist/core/forge/github.d.ts.map +1 -1
  136. package/dist/core/forge/github.js +17 -0
  137. package/dist/core/forge/github.js.map +1 -1
  138. package/dist/core/fs/atomic.d.ts +3 -2
  139. package/dist/core/fs/atomic.d.ts.map +1 -1
  140. package/dist/core/fs/atomic.js +3 -2
  141. package/dist/core/fs/atomic.js.map +1 -1
  142. package/dist/core/git/fast-forward.d.ts +23 -0
  143. package/dist/core/git/fast-forward.d.ts.map +1 -0
  144. package/dist/core/git/fast-forward.js +38 -0
  145. package/dist/core/git/fast-forward.js.map +1 -0
  146. package/dist/core/git/repo.d.ts +11 -0
  147. package/dist/core/git/repo.d.ts.map +1 -1
  148. package/dist/core/git/repo.js +25 -0
  149. package/dist/core/git/repo.js.map +1 -1
  150. package/dist/core/graph/model.d.ts +27 -0
  151. package/dist/core/graph/model.d.ts.map +1 -1
  152. package/dist/core/graph/model.js +68 -2
  153. package/dist/core/graph/model.js.map +1 -1
  154. package/dist/core/graph/persist.d.ts.map +1 -1
  155. package/dist/core/graph/persist.js +3 -2
  156. package/dist/core/graph/persist.js.map +1 -1
  157. package/dist/core/mcp/cli-runner.d.ts +41 -0
  158. package/dist/core/mcp/cli-runner.d.ts.map +1 -0
  159. package/dist/core/mcp/cli-runner.js +81 -0
  160. package/dist/core/mcp/cli-runner.js.map +1 -0
  161. package/dist/core/mcp/jsonrpc.d.ts +13 -1
  162. package/dist/core/mcp/jsonrpc.d.ts.map +1 -1
  163. package/dist/core/mcp/jsonrpc.js +1 -1
  164. package/dist/core/mcp/jsonrpc.js.map +1 -1
  165. package/dist/core/mcp/member-sessions.d.ts +48 -0
  166. package/dist/core/mcp/member-sessions.d.ts.map +1 -0
  167. package/dist/core/mcp/member-sessions.js +85 -0
  168. package/dist/core/mcp/member-sessions.js.map +1 -0
  169. package/dist/core/mcp/ownership.d.ts +51 -0
  170. package/dist/core/mcp/ownership.d.ts.map +1 -0
  171. package/dist/core/mcp/ownership.js +101 -0
  172. package/dist/core/mcp/ownership.js.map +1 -0
  173. package/dist/core/mcp/paths.d.ts +48 -0
  174. package/dist/core/mcp/paths.d.ts.map +1 -0
  175. package/dist/core/mcp/paths.js +111 -0
  176. package/dist/core/mcp/paths.js.map +1 -0
  177. package/dist/core/mcp/sessions.d.ts +25 -50
  178. package/dist/core/mcp/sessions.d.ts.map +1 -1
  179. package/dist/core/mcp/sessions.js +31 -123
  180. package/dist/core/mcp/sessions.js.map +1 -1
  181. package/dist/core/mcp/tool-map.d.ts +94 -0
  182. package/dist/core/mcp/tool-map.d.ts.map +1 -0
  183. package/dist/core/mcp/tool-map.js +211 -0
  184. package/dist/core/mcp/tool-map.js.map +1 -0
  185. package/dist/core/mcp/tools/capture.d.ts +7 -2
  186. package/dist/core/mcp/tools/capture.d.ts.map +1 -1
  187. package/dist/core/mcp/tools/capture.js +69 -18
  188. package/dist/core/mcp/tools/capture.js.map +1 -1
  189. package/dist/core/mcp/tools/cli.d.ts +97 -0
  190. package/dist/core/mcp/tools/cli.d.ts.map +1 -0
  191. package/dist/core/mcp/tools/cli.js +271 -0
  192. package/dist/core/mcp/tools/cli.js.map +1 -0
  193. package/dist/core/mcp/tools/edit.d.ts +62 -28
  194. package/dist/core/mcp/tools/edit.d.ts.map +1 -1
  195. package/dist/core/mcp/tools/edit.js +182 -153
  196. package/dist/core/mcp/tools/edit.js.map +1 -1
  197. package/dist/core/mcp/tools/files.d.ts +37 -11
  198. package/dist/core/mcp/tools/files.d.ts.map +1 -1
  199. package/dist/core/mcp/tools/files.js +122 -100
  200. package/dist/core/mcp/tools/files.js.map +1 -1
  201. package/dist/core/mcp/tools/index.d.ts +12 -3
  202. package/dist/core/mcp/tools/index.d.ts.map +1 -1
  203. package/dist/core/mcp/tools/index.js +161 -58
  204. package/dist/core/mcp/tools/index.js.map +1 -1
  205. package/dist/core/mcp/tools/sessions.d.ts +145 -0
  206. package/dist/core/mcp/tools/sessions.d.ts.map +1 -0
  207. package/dist/core/mcp/tools/sessions.js +226 -0
  208. package/dist/core/mcp/tools/sessions.js.map +1 -0
  209. package/dist/core/notes/list.d.ts.map +1 -1
  210. package/dist/core/notes/list.js +5 -0
  211. package/dist/core/notes/list.js.map +1 -1
  212. package/dist/core/plugin/build.d.ts +70 -0
  213. package/dist/core/plugin/build.d.ts.map +1 -0
  214. package/dist/core/plugin/build.js +159 -0
  215. package/dist/core/plugin/build.js.map +1 -0
  216. package/dist/core/plugin/routes.d.ts +35 -0
  217. package/dist/core/plugin/routes.d.ts.map +1 -0
  218. package/dist/core/plugin/routes.js +77 -0
  219. package/dist/core/plugin/routes.js.map +1 -0
  220. package/dist/core/plugin/zip.d.ts +17 -0
  221. package/dist/core/plugin/zip.d.ts.map +1 -0
  222. package/dist/core/plugin/zip.js +75 -0
  223. package/dist/core/plugin/zip.js.map +1 -0
  224. package/dist/core/reconcile.d.ts.map +1 -1
  225. package/dist/core/reconcile.js +2 -1
  226. package/dist/core/reconcile.js.map +1 -1
  227. package/dist/core/retrieval/pass.d.ts.map +1 -1
  228. package/dist/core/retrieval/pass.js +5 -4
  229. package/dist/core/retrieval/pass.js.map +1 -1
  230. package/dist/core/rollup.d.ts.map +1 -1
  231. package/dist/core/rollup.js +2 -3
  232. package/dist/core/rollup.js.map +1 -1
  233. package/dist/core/root.d.ts.map +1 -1
  234. package/dist/core/root.js +33 -2
  235. package/dist/core/root.js.map +1 -1
  236. package/dist/core/second-opinion/environment.d.ts +21 -0
  237. package/dist/core/second-opinion/environment.d.ts.map +1 -0
  238. package/dist/core/second-opinion/environment.js +70 -0
  239. package/dist/core/second-opinion/environment.js.map +1 -0
  240. package/dist/core/second-opinion/judge.d.ts +29 -0
  241. package/dist/core/second-opinion/judge.d.ts.map +1 -0
  242. package/dist/core/second-opinion/judge.js +55 -0
  243. package/dist/core/second-opinion/judge.js.map +1 -0
  244. package/dist/core/second-opinion/launch.d.ts +16 -0
  245. package/dist/core/second-opinion/launch.d.ts.map +1 -0
  246. package/dist/core/second-opinion/launch.js +75 -0
  247. package/dist/core/second-opinion/launch.js.map +1 -0
  248. package/dist/core/second-opinion/lineup.d.ts +82 -0
  249. package/dist/core/second-opinion/lineup.d.ts.map +1 -0
  250. package/dist/core/second-opinion/lineup.js +113 -0
  251. package/dist/core/second-opinion/lineup.js.map +1 -0
  252. package/dist/core/second-opinion/modes.d.ts +98 -0
  253. package/dist/core/second-opinion/modes.d.ts.map +1 -0
  254. package/dist/core/second-opinion/modes.js +224 -0
  255. package/dist/core/second-opinion/modes.js.map +1 -0
  256. package/dist/core/second-opinion/prompts.d.ts +18 -0
  257. package/dist/core/second-opinion/prompts.d.ts.map +1 -0
  258. package/dist/core/second-opinion/prompts.js +65 -0
  259. package/dist/core/second-opinion/prompts.js.map +1 -0
  260. package/dist/core/session/commit.d.ts +29 -0
  261. package/dist/core/session/commit.d.ts.map +1 -0
  262. package/dist/core/session/commit.js +22 -0
  263. package/dist/core/session/commit.js.map +1 -0
  264. package/dist/core/session/discard.d.ts +24 -0
  265. package/dist/core/session/discard.d.ts.map +1 -0
  266. package/dist/core/session/discard.js +68 -0
  267. package/dist/core/session/discard.js.map +1 -0
  268. package/dist/core/session/list.d.ts +48 -0
  269. package/dist/core/session/list.d.ts.map +1 -0
  270. package/dist/core/session/list.js +55 -0
  271. package/dist/core/session/list.js.map +1 -0
  272. package/dist/core/session/rebase.d.ts +34 -0
  273. package/dist/core/session/rebase.d.ts.map +1 -0
  274. package/dist/core/session/rebase.js +87 -0
  275. package/dist/core/session/rebase.js.map +1 -0
  276. package/dist/core/session/remote.d.ts +80 -0
  277. package/dist/core/session/remote.d.ts.map +1 -0
  278. package/dist/core/session/remote.js +102 -0
  279. package/dist/core/session/remote.js.map +1 -0
  280. package/dist/core/session/resolve.d.ts +41 -0
  281. package/dist/core/session/resolve.d.ts.map +1 -0
  282. package/dist/core/session/resolve.js +109 -0
  283. package/dist/core/session/resolve.js.map +1 -0
  284. package/dist/core/session/start.d.ts +46 -0
  285. package/dist/core/session/start.d.ts.map +1 -0
  286. package/dist/core/session/start.js +33 -0
  287. package/dist/core/session/start.js.map +1 -0
  288. package/dist/core/session/status.d.ts +47 -0
  289. package/dist/core/session/status.d.ts.map +1 -0
  290. package/dist/core/session/status.js +55 -0
  291. package/dist/core/session/status.js.map +1 -0
  292. package/dist/core/session/submit.d.ts +67 -0
  293. package/dist/core/session/submit.d.ts.map +1 -0
  294. package/dist/core/session/submit.js +254 -0
  295. package/dist/core/session/submit.js.map +1 -0
  296. package/dist/core/shared-stores-location.d.ts +17 -0
  297. package/dist/core/shared-stores-location.d.ts.map +1 -0
  298. package/dist/core/shared-stores-location.js +22 -0
  299. package/dist/core/shared-stores-location.js.map +1 -0
  300. package/dist/core/shared-stores.d.ts +69 -0
  301. package/dist/core/shared-stores.d.ts.map +1 -0
  302. package/dist/core/shared-stores.js +100 -0
  303. package/dist/core/shared-stores.js.map +1 -0
  304. package/dist/core/skills.d.ts +20 -2
  305. package/dist/core/skills.d.ts.map +1 -1
  306. package/dist/core/skills.js +70 -13
  307. package/dist/core/skills.js.map +1 -1
  308. package/dist/run.d.ts +12 -0
  309. package/dist/run.d.ts.map +1 -1
  310. package/dist/run.js +194 -55
  311. package/dist/run.js.map +1 -1
  312. package/dist/version.d.ts +1 -1
  313. package/dist/version.js +1 -1
  314. package/package.json +1 -1
  315. package/templates/agents/shared-stores.md +11 -0
  316. package/templates/approve/copies-missing.md +1 -0
  317. package/templates/approve/elsewhere-heading.md +1 -0
  318. package/templates/approve/elsewhere-intro.md +1 -0
  319. package/templates/approve/homed-elsewhere.md +1 -0
  320. package/templates/approve/not-decider.md +1 -0
  321. package/templates/approve/part-heading.md +1 -0
  322. package/templates/approve/parts-changed.md +1 -0
  323. package/templates/approve/session-decision-note.md +1 -0
  324. package/templates/approve/session-intro.md +1 -0
  325. package/templates/approve/session-no-decision.md +1 -0
  326. package/templates/approve/store-unreachable.md +1 -0
  327. package/templates/land/resolver.md +2 -0
  328. package/templates/mcp/Delete.md +6 -0
  329. package/templates/mcp/Edit.md +6 -5
  330. package/templates/mcp/Glob.md +2 -2
  331. package/templates/mcp/Grep.md +2 -1
  332. package/templates/mcp/Move.md +7 -0
  333. package/templates/mcp/Read.md +4 -4
  334. package/templates/mcp/Write.md +4 -4
  335. package/templates/mcp/ctxr.md +7 -0
  336. package/templates/mcp/ctxr_write.md +8 -0
  337. package/templates/mcp/server-instructions.md +11 -3
  338. package/templates/mcp/session_discard.md +4 -0
  339. package/templates/mcp/session_list.md +7 -0
  340. package/templates/mcp/session_rebase.md +5 -0
  341. package/templates/mcp/session_start.md +7 -0
  342. package/templates/mcp/session_status.md +3 -0
  343. package/templates/mcp/session_submit.md +8 -0
  344. package/templates/plugin/README.md +13 -0
  345. package/templates/plugin/chatgpt-mcp.json +19 -0
  346. package/templates/plugin/chatgpt-plugin.json +13 -0
  347. package/templates/plugin/claude-mcp.json +8 -0
  348. package/templates/plugin/claude-plugin.json +6 -0
  349. package/templates/plugin/page.html +47 -0
  350. package/templates/second-opinion/poll-answer.md +7 -0
  351. package/templates/second-opinion/taste-panel.md +14 -0
  352. package/templates/session/pages/bare-route.md +2 -0
  353. package/templates/session/pages/block.md +8 -0
  354. package/templates/session/pages/condition-preview.md +1 -0
  355. package/templates/session/pages/condition.md +1 -0
  356. package/templates/session/pages/moved.md +1 -0
  357. package/templates/session/pages/stops-working.md +1 -0
  358. package/templates/session/pages/table-head-preview.md +2 -0
  359. package/templates/session/pages/table-head.md +2 -0
  360. package/templates/skills/ctxr-connection-finding.md +4 -1
  361. package/templates/skills/ctxr-land.md +26 -7
  362. package/templates/skills/ctxr-placement.md +10 -0
  363. package/templates/skills/ctxr-publish.md +2 -1
  364. package/templates/skills/ctxr-rollup.md +3 -0
  365. package/templates/skills/ctxr-second-opinion.md +52 -36
  366. package/templates/skills/ctxr-session-lifecycle.md +60 -33
  367. package/templates/skills/ctxr-submit.md +65 -56
  368. package/templates/skills/mcp/_preamble.md +44 -0
  369. package/dist/core/mcp/drafts.d.ts +0 -30
  370. package/dist/core/mcp/drafts.d.ts.map +0 -1
  371. package/dist/core/mcp/drafts.js +0 -52
  372. package/dist/core/mcp/drafts.js.map +0 -1
  373. package/templates/skills/ctxr-second-opinion/run.mjs +0 -542
  374. /package/templates/{skills/ctxr-second-opinion → second-opinion}/critic-contract.md +0 -0
  375. /package/templates/{skills/ctxr-second-opinion → second-opinion}/lenses.md +0 -0
  376. /package/templates/{skills/ctxr-second-opinion → second-opinion}/personas/architect.md +0 -0
  377. /package/templates/{skills/ctxr-second-opinion → second-opinion}/personas/pragmatist.md +0 -0
  378. /package/templates/{skills/ctxr-second-opinion → second-opinion}/personas/skeptic.md +0 -0
@@ -1,19 +1,17 @@
1
- import { mkdir, readFile, stat, writeFile } from 'node:fs/promises';
1
+ import { lstat, mkdir, readFile, realpath, rename, unlink, writeFile } from 'node:fs/promises';
2
2
  import path from 'node:path';
3
- import { readConfig } from '../../../config/load.js';
4
- import { MIGRATION_STEPS } from '../../../config/migrations.js';
5
- import { buildCatalog } from '../../catalog/build.js';
6
3
  import { InvalidNoteFrontmatterError } from '../../errors.js';
7
4
  import { admitsNotePath } from '../../notes/list.js';
8
5
  import { parseNoteText } from '../../notes/parse.js';
9
- import { draftLabel, findDraft } from '../drafts.js';
6
+ import { rebaseInProgress } from '../../session/resolve.js';
10
7
  import { ToolRefusal } from '../jsonrpc.js';
11
- import { approvalUrl, commitAs, publish, removeSession, repoPathOf, startSession } from '../sessions.js';
12
- import { resolveStorePath } from './files.js';
8
+ import { locatePath, memberSessions, noSessionRefusal, repoPrefixOf } from '../member-sessions.js';
9
+ import { normalizeStorePath, protectedReason, protectedRefusal } from '../paths.js';
10
+ const PATH_HINT = 'under the session root session_start returned, e.g. "<root>projects/kestrel.md"';
13
11
  export const EDIT_INPUT_SCHEMA = {
14
12
  type: 'object',
15
13
  properties: {
16
- file_path: { type: 'string', description: 'The note to modify, relative to the store root, e.g. "projects/kestrel.md".' },
14
+ file_path: { type: 'string', description: `The file to modify, ${PATH_HINT}.` },
17
15
  old_string: { type: 'string', description: 'The text to replace' },
18
16
  new_string: { type: 'string', description: 'The text to replace it with (must be different from old_string)' },
19
17
  replace_all: { type: 'boolean', description: 'Replace all occurrences of old_string (default false)' },
@@ -23,16 +21,37 @@ export const EDIT_INPUT_SCHEMA = {
23
21
  export const WRITE_INPUT_SCHEMA = {
24
22
  type: 'object',
25
23
  properties: {
26
- file_path: { type: 'string', description: 'The new note to create, relative to the store root, e.g. "projects/kestrel-launch.md".' },
27
- content: { type: 'string', description: 'The content to write to the note' },
24
+ file_path: { type: 'string', description: `The new file to create, ${PATH_HINT}.` },
25
+ content: { type: 'string', description: 'The content to write to the file' },
28
26
  },
29
27
  required: ['file_path', 'content'],
30
28
  };
31
- const MAX_CONTENT_BYTES = 256 * 1024;
29
+ export const MOVE_INPUT_SCHEMA = {
30
+ type: 'object',
31
+ properties: {
32
+ source_path: { type: 'string', description: `The file to move, ${PATH_HINT}.` },
33
+ destination_path: { type: 'string', description: 'Where it goes, under the same session root. Must not exist yet.' },
34
+ },
35
+ required: ['source_path', 'destination_path'],
36
+ };
37
+ export const DELETE_INPUT_SCHEMA = {
38
+ type: 'object',
39
+ properties: {
40
+ file_path: { type: 'string', description: `The file to delete, ${PATH_HINT}.` },
41
+ },
42
+ required: ['file_path'],
43
+ };
44
+ /** D5: `Edit` and `Write` stay text only, with this cap. */
45
+ export const MAX_CONTENT_BYTES = 256 * 1024;
46
+ const invalid = (message) => new ToolRefusal('mcp.invalid_arguments', message);
47
+ function requiredPath(args, key) {
48
+ const value = args[key];
49
+ if (typeof value !== 'string' || value.trim() === '')
50
+ throw invalid(`"${key}" is required.`);
51
+ return value;
52
+ }
32
53
  export function parseEditArgs(args) {
33
- const invalid = (message) => new ToolRefusal('mcp.invalid_arguments', message);
34
- if (typeof args.file_path !== 'string' || args.file_path.trim() === '')
35
- throw invalid('"file_path" is required.');
54
+ const file_path = requiredPath(args, 'file_path');
36
55
  if (typeof args.old_string !== 'string' || args.old_string === '')
37
56
  throw invalid('"old_string" is required and cannot be empty.');
38
57
  if (typeof args.new_string !== 'string')
@@ -41,172 +60,182 @@ export function parseEditArgs(args) {
41
60
  throw invalid('"new_string" must be different from "old_string".');
42
61
  if (args.replace_all !== undefined && args.replace_all !== null && typeof args.replace_all !== 'boolean')
43
62
  throw invalid('"replace_all" must be true or false.');
44
- return { file_path: args.file_path, old_string: args.old_string, new_string: args.new_string, replace_all: args.replace_all === true };
63
+ return { file_path, old_string: args.old_string, new_string: args.new_string, replace_all: args.replace_all === true };
45
64
  }
46
65
  export function parseWriteArgs(args) {
47
- const invalid = (message) => new ToolRefusal('mcp.invalid_arguments', message);
48
- if (typeof args.file_path !== 'string' || args.file_path.trim() === '')
49
- throw invalid('"file_path" is required.');
66
+ const file_path = requiredPath(args, 'file_path');
50
67
  if (typeof args.content !== 'string' || args.content.trim() === '')
51
68
  throw invalid('"content" is required.');
52
69
  if (Buffer.byteLength(args.content, 'utf8') > MAX_CONTENT_BYTES)
53
70
  throw invalid(`"content" is at most ${MAX_CONTENT_BYTES} bytes.`);
54
- return { file_path: args.file_path, content: args.content };
71
+ return { file_path, content: args.content };
55
72
  }
56
- /** design.md D13: editable means the note enumeration would admit it — markdown, outside the capture tier and every tool-owned path. */
57
- function editablePath(input, config) {
58
- const rel = resolveStorePath(input, config);
59
- if (!admitsNotePath(rel, config)) {
60
- throw new ToolRefusal('mcp.path_not_editable', `"${rel}" is not a note that can be edited here: only markdown notes are, never configuration, captures, the entry document or tool-owned files.`);
61
- }
62
- return rel;
73
+ export function parseMoveArgs(args) {
74
+ return { source_path: requiredPath(args, 'source_path'), destination_path: requiredPath(args, 'destination_path') };
63
75
  }
64
- function pullText(email) {
65
- return {
66
- title: `Edits by ${email}`,
67
- body: [
68
- `Edits made through the store's MCP connector by ${email}.`,
69
- '',
70
- 'Each commit is one Edit or Write. Changes made after an approval need approving again.',
71
- ].join('\n'),
72
- };
76
+ export function parseDeleteArgs(args) {
77
+ return { file_path: requiredPath(args, 'file_path') };
73
78
  }
74
- async function existing(file) {
75
- try {
76
- return await readFile(file, 'utf8');
77
- }
78
- catch (err) {
79
- if (err.code === 'ENOENT')
80
- return null;
81
- throw err;
79
+ async function target(write, email, input) {
80
+ const normalized = normalizeStorePath(input);
81
+ const located = await locatePath(write, email, normalized);
82
+ if (located.kind !== 'session') {
83
+ throw noSessionRefusal(`"${normalized}" is not under the root of one of your sessions, so nothing was changed.`, await memberSessions(write, email));
82
84
  }
83
- }
84
- async function pathExists(file) {
85
- return stat(file).then(() => true, () => false);
85
+ if (located.rel === '')
86
+ throw invalid(`"${normalized}" is a session root, not a file in it.`);
87
+ const reason = protectedReason(located.rel, write.config);
88
+ if (reason !== null)
89
+ throw protectedRefusal(normalized, reason);
90
+ return { session: located.session, rel: located.rel, shown: normalized, absolute: path.join(located.session.ref.storeRoot, located.rel) };
86
91
  }
87
92
  /**
88
- * The member's draft as it stands, publishing anything it left unpublished; null when there is none to extend.
89
- * A draft with no commit of its own (left behind by a crash between starting it and committing) is removed: the
90
- * forge would refuse a pull request for it, and every later call would be refused with it.
93
+ * The nearest existing ancestor of the target, resolved, must sit inside the
94
+ * session's worktree, and the target itself must not be a link: a committed
95
+ * symlinked folder would otherwise carry a write anywhere the server can.
91
96
  */
92
- async function currentDraft(ctx, email) {
93
- const draft = await findDraft(ctx.write, email);
94
- if (draft === null)
95
- return null;
96
- if (draft.state.kind === 'closed-unmerged' || draft.state.kind === 'merged') {
97
- await removeSession(ctx.write, draft.session);
98
- return null;
99
- }
100
- const ahead = (await ctx.write.git.run(['rev-list', '--count', `refs/remotes/origin/${ctx.write.config.git.default_branch}..HEAD`], { cwd: draft.session.path, allowFailure: true })).stdout.trim();
101
- if (ahead === '0' && draft.state.kind === 'none') {
102
- await removeSession(ctx.write, draft.session);
103
- return null;
97
+ async function confined(t) {
98
+ const top = await realpath(t.session.ref.path);
99
+ let probe = path.dirname(t.absolute);
100
+ for (;;) {
101
+ const found = await realpath(probe).catch(() => null);
102
+ if (found !== null) {
103
+ if (found !== top && !found.startsWith(`${top}${path.sep}`))
104
+ throw new ToolRefusal('mcp.path_outside_store', `"${t.shown}" resolves outside its session.`);
105
+ break;
106
+ }
107
+ const parent = path.dirname(probe);
108
+ if (parent === probe)
109
+ break;
110
+ probe = parent;
104
111
  }
105
- await publish(ctx.write, draft.session, pullText(email));
106
- return draft.session;
112
+ const info = await lstat(t.absolute).catch(() => null);
113
+ if (info?.isSymbolicLink())
114
+ throw new ToolRefusal('mcp.path_not_editable', `"${t.shown}" is a symbolic link, which these tools do not follow.`);
107
115
  }
108
- async function finish(ctx, email, session, rel, commit, alreadyApplied) {
109
- const pull = await publish(ctx.write, session, pullText(email));
110
- const approval = approvalUrl(ctx.write, session);
111
- return {
112
- file_path: rel,
113
- changed: !alreadyApplied,
114
- already_applied: alreadyApplied,
115
- commit,
116
- pull_request: { number: pull.number, url: pull.url },
117
- approval_url: approval,
118
- message: alreadyApplied
119
- ? `That change is already in your draft (pull request #${pull.number}); nothing new was committed.`
120
- : `Saved to your draft, pull request #${pull.number}. It lands once someone approves it at ${approval}.`,
121
- };
116
+ function rebaseRefusal(session, what) {
117
+ return new ToolRefusal('mcp.rebase_in_progress', `A rebase is in progress in ${session.name}, so ${what}. Resolve the conflicting files with Edit, then call session_rebase with continue: true, or undo it with abort: true.`, { session: session.name });
122
118
  }
123
- /** Applies a computed change to `rel` in the draft (starting one if needed), rebuilds the catalog, commits as the member. Under the write mutex. */
124
- async function applyToDraft(ctx, email, rel, verb, compute) {
125
- await ctx.view.refresh(ctx.syncDeps);
126
- // Read under the view's lock, so a sync started by another call cannot move the view mid-read.
127
- const fromView = (await ctx.view.read(ctx.syncDeps, async (snapshot) => ({ text: await existing(path.join(snapshot.store.root, rel)) }))).text;
128
- let session = await currentDraft(ctx, email);
129
- const fresh = session === null;
130
- const repoPath = await repoPathOf(ctx.write, rel);
131
- // Decide against what the member is editing: the draft's copy when there is a draft, else the served commit.
132
- const basis = { current: session === null ? fromView : await existing(path.join(session.path, repoPath)) };
133
- if (session !== null) {
134
- const subject = (await ctx.write.git.run(['log', '-1', '--format=%s'], { cwd: session.path, allowFailure: true })).stdout.trim();
135
- if (subject === `${verb} ${rel}`) {
136
- const parent = await ctx.write.git.run(['show', `HEAD~1:${repoPath}`], { cwd: session.path, allowFailure: true });
137
- basis.beforeTip = parent.exitCode === 0 ? parent.stdout : null;
138
- }
139
- }
140
- const outcome = compute(basis);
141
- if ('alreadyApplied' in outcome) {
142
- const tip = (await ctx.write.git.run(['rev-parse', 'HEAD'], { cwd: session.path })).stdout.trim();
143
- return finish(ctx, email, session, rel, tip, true);
119
+ /** D2 risks: during a rebase only `Edit` and `Write` on a conflicting path go through. */
120
+ async function checkRebase(write, t, allowConflicting) {
121
+ if (!(await rebaseInProgress(write.git, t.session.ref.path)))
122
+ return;
123
+ if (allowConflicting) {
124
+ const conflicted = (await write.git.run(['diff', '--name-only', '--diff-filter=U', '-z'], { cwd: t.session.ref.path, allowFailure: true })).stdout.split('\0');
125
+ if (conflicted.includes(`${await repoPrefixOf(write)}${t.rel}`))
126
+ return;
144
127
  }
128
+ throw rebaseRefusal(t.session, `"${t.shown}" cannot be changed until it finishes`);
129
+ }
130
+ /** D5: a path the note enumeration admits must still parse as a note; templates, the log and other files are not notes. */
131
+ function checkNote(write, t, text) {
132
+ if (!admitsNotePath(t.rel, write.config))
133
+ return;
145
134
  try {
146
- parseNoteText(outcome.text, rel);
135
+ parseNoteText(text, t.rel);
147
136
  }
148
137
  catch (err) {
149
138
  const reason = err instanceof InvalidNoteFrontmatterError ? err.finding.message : err instanceof Error ? err.message : String(err);
150
- throw new ToolRefusal('mcp.not_a_note', `The result would not be a valid note, so nothing was saved: ${reason}`);
151
- }
152
- session ??= await startSession(ctx.write, draftLabel(email));
153
- try {
154
- const absolute = path.join(session.path, repoPath);
155
- await mkdir(path.dirname(absolute), { recursive: true });
156
- await writeFile(absolute, outcome.text);
157
- // The catalog follows the change, as it would in an agent's session (design.md D13).
158
- const draftStoreRoot = path.join(session.path, await repoPathOf(ctx.write, ''));
159
- const draftConfig = await readConfig(draftStoreRoot, MIGRATION_STEPS);
160
- await buildCatalog({ root: draftStoreRoot, config: draftConfig });
161
- const catalogPath = await repoPathOf(ctx.write, draftConfig.catalog.path);
162
- const paths = (await pathExists(path.join(session.path, catalogPath))) ? [repoPath, catalogPath] : [repoPath];
163
- const commit = await commitAs(ctx.write, session, email, paths, `${verb} ${rel}`, 'Edited-by');
164
- return await finish(ctx, email, session, rel, commit, false);
165
- }
166
- catch (err) {
167
- if (fresh) {
168
- const commits = (await ctx.write.git.run(['rev-list', '--count', `refs/remotes/origin/${ctx.write.config.git.default_branch}..HEAD`], { cwd: session.path, allowFailure: true })).stdout.trim();
169
- if (commits === '0')
170
- await removeSession(ctx.write, session);
171
- }
172
- throw err;
139
+ throw new ToolRefusal('mcp.not_a_note', `The result would not be a valid note, so nothing was changed: ${reason}`);
173
140
  }
174
141
  }
142
+ async function existing(t) {
143
+ const info = await lstat(t.absolute).catch(() => null);
144
+ if (info === null)
145
+ return null;
146
+ if (!info.isFile())
147
+ throw new ToolRefusal('mcp.path_not_editable', `"${t.shown}" is not a regular file.`);
148
+ return readFile(t.absolute, 'utf8');
149
+ }
150
+ function changed(t, verb, extra = {}) {
151
+ return {
152
+ file_path: t.shown,
153
+ session: t.session.name,
154
+ committed: false,
155
+ ...extra,
156
+ message: `${verb} in your session ${t.session.name}. Nothing is committed or published until you call session_submit.`,
157
+ };
158
+ }
175
159
  function replace(text, args) {
176
160
  return args.replace_all === true ? text.split(args.old_string).join(args.new_string) : text.replace(args.old_string, () => args.new_string);
177
161
  }
178
- export async function editTool(ctx, email, args) {
179
- const rel = editablePath(args.file_path, ctx.syncDeps.config);
180
- return applyToDraft(ctx, email, rel, 'Edit', ({ current, beforeTip }) => {
181
- if (current === null)
182
- throw new ToolRefusal('mcp.file_not_found', `"${rel}" does not exist. Use Write to create a new note.`);
183
- const count = current.split(args.old_string).length - 1;
184
- if (count === 0) {
185
- // A retry: the draft's last commit was this very replacement on this very file (design.md D13). Exact, so an
186
- // empty or common new_string can never pass for an edit that was never made.
187
- if (typeof beforeTip === 'string' && beforeTip.includes(args.old_string) && replace(beforeTip, args) === current)
188
- return { alreadyApplied: true };
189
- throw new ToolRefusal('mcp.edit_failed', `old_string was not found in "${rel}". Read the note again and copy the text exactly.`);
190
- }
191
- if (count > 1 && args.replace_all !== true) {
192
- throw new ToolRefusal('mcp.edit_failed', `old_string occurs ${count} times in "${rel}". Include more surrounding text to make it unique, or set replace_all.`, { occurrences: count });
193
- }
194
- return { text: replace(current, args) };
195
- });
196
- }
197
- export async function writeTool(ctx, email, args) {
198
- const rel = editablePath(args.file_path, ctx.syncDeps.config);
199
- const inView = (await ctx.view.read(ctx.syncDeps, async (snapshot) => ({ text: await existing(path.join(snapshot.store.root, rel)) }))).text;
200
- if (inView !== null) {
201
- throw new ToolRefusal('mcp.file_exists', `"${rel}" already exists. Write only creates new notes; use Edit to change it.`);
162
+ /** Under the write mutex. */
163
+ export async function editTool(write, email, args) {
164
+ const t = await target(write, email, args.file_path);
165
+ await checkRebase(write, t, true);
166
+ await confined(t);
167
+ const current = await existing(t);
168
+ if (current === null)
169
+ throw new ToolRefusal('mcp.file_not_found', `"${t.shown}" does not exist. Use Write to create a new file.`);
170
+ const count = current.split(args.old_string).length - 1;
171
+ if (count === 0)
172
+ throw new ToolRefusal('mcp.edit_failed', `old_string was not found in "${t.shown}". Read the file again and copy the text exactly.`);
173
+ if (count > 1 && args.replace_all !== true) {
174
+ throw new ToolRefusal('mcp.edit_failed', `old_string occurs ${count} times in "${t.shown}". Include more surrounding text to make it unique, or set replace_all.`, { occurrences: count });
175
+ }
176
+ const text = replace(current, args);
177
+ if (Buffer.byteLength(text, 'utf8') > MAX_CONTENT_BYTES)
178
+ throw invalid(`The result would be over ${MAX_CONTENT_BYTES} bytes; nothing was changed.`);
179
+ checkNote(write, t, text);
180
+ await writeFile(t.absolute, text);
181
+ return changed(t, `Edited "${t.shown}"`);
182
+ }
183
+ /** Under the write mutex. Never overwrites. */
184
+ export async function writeTool(write, email, args) {
185
+ const t = await target(write, email, args.file_path);
186
+ await checkRebase(write, t, true);
187
+ await confined(t);
188
+ if ((await lstat(t.absolute).catch(() => null)) !== null) {
189
+ throw new ToolRefusal('mcp.file_exists', `"${t.shown}" already exists. Write only creates new files; use Edit to change it.`);
202
190
  }
203
191
  const text = args.content.endsWith('\n') ? args.content : `${args.content}\n`;
204
- return applyToDraft(ctx, email, rel, 'Write', ({ current, beforeTip }) => {
205
- if (current === null)
206
- return { text };
207
- if (current === text && beforeTip === null)
208
- return { alreadyApplied: true };
209
- throw new ToolRefusal('mcp.file_exists', `"${rel}" already exists in your draft. Write only creates new notes; use Edit to change it.`);
210
- });
192
+ checkNote(write, t, text);
193
+ await mkdir(path.dirname(t.absolute), { recursive: true });
194
+ await writeFile(t.absolute, text, { flag: 'wx' });
195
+ return changed(t, `Created "${t.shown}"`);
196
+ }
197
+ async function tracked(write, t) {
198
+ return (await write.git.run(['ls-files', '--error-unmatch', '--', t.absolute], { cwd: t.session.ref.path, allowFailure: true })).exitCode === 0;
199
+ }
200
+ /** Under the write mutex. A tracked file moves as `git mv` moves it, so the session shows a rename. */
201
+ export async function moveTool(write, email, args) {
202
+ const from = await target(write, email, args.source_path);
203
+ const to = await target(write, email, args.destination_path);
204
+ if (from.session.name !== to.session.name)
205
+ throw invalid('"source_path" and "destination_path" must be under the same session root.');
206
+ await checkRebase(write, from, false);
207
+ await confined(from);
208
+ await confined(to);
209
+ if ((await existing(from)) === null)
210
+ throw new ToolRefusal('mcp.file_not_found', `"${from.shown}" does not exist.`);
211
+ if ((await lstat(to.absolute).catch(() => null)) !== null)
212
+ throw new ToolRefusal('mcp.file_exists', `"${to.shown}" already exists; Move never overwrites.`);
213
+ await mkdir(path.dirname(to.absolute), { recursive: true });
214
+ if (await tracked(write, from)) {
215
+ const moved = await write.git.run(['mv', '--', from.absolute, to.absolute], { cwd: from.session.ref.path, allowFailure: true });
216
+ if (moved.exitCode !== 0)
217
+ throw new ToolRefusal('mcp.move_failed', `"${from.shown}" could not be moved: ${moved.stderr.trim()}`);
218
+ }
219
+ else {
220
+ await rename(from.absolute, to.absolute);
221
+ }
222
+ return changed(from, `Moved "${from.shown}" to "${to.shown}"`, { destination_path: to.shown });
223
+ }
224
+ /** Under the write mutex. Destructive: the working-tree copy is gone, though a committed version stays in history. */
225
+ export async function deleteTool(write, email, args) {
226
+ const t = await target(write, email, args.file_path);
227
+ await checkRebase(write, t, false);
228
+ await confined(t);
229
+ if ((await existing(t)) === null)
230
+ throw new ToolRefusal('mcp.file_not_found', `"${t.shown}" does not exist.`);
231
+ if (await tracked(write, t)) {
232
+ const removed = await write.git.run(['rm', '-q', '-f', '--', t.absolute], { cwd: t.session.ref.path, allowFailure: true });
233
+ if (removed.exitCode !== 0)
234
+ throw new ToolRefusal('mcp.delete_failed', `"${t.shown}" could not be deleted: ${removed.stderr.trim()}`);
235
+ }
236
+ else {
237
+ await unlink(t.absolute);
238
+ }
239
+ return changed(t, `Deleted "${t.shown}"`);
211
240
  }
212
241
  //# sourceMappingURL=edit.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"edit.js","sourceRoot":"","sources":["../../../../src/core/mcp/tools/edit.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"edit.js","sourceRoot":"","sources":["../../../../src/core/mcp/tools/edit.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  import type { StoreConfig } from '../../../config/schema.js';
2
+ import { type MemberSession } from '../member-sessions.js';
2
3
  import { type GrepParams } from '../ripgrep.js';
3
4
  import type { WriteDeps } from '../sessions.js';
4
- import type { Snapshot } from '../sync.js';
5
+ import type { McpView, SyncDeps } from '../sync.js';
5
6
  /**
6
7
  * serve-the-store-over-mcp design.md D12 (remote-access spec, *`Read`,
7
8
  * `Grep` and `Glob` give file-shaped access with Claude Code's parameters*):
@@ -9,14 +10,35 @@ import type { Snapshot } from '../sync.js';
9
10
  * commit being served. Paths are store-relative (a leading `/` names the
10
11
  * store root). What these tools may never read or return is one list, used
11
12
  * both to refuse a named path and as ripgrep's exclusions.
13
+ *
14
+ * serve-the-session-lifecycle-to-chat-apps D1, D5 (remote-access spec,
15
+ * *`Read`, `Grep` and `Glob` read the served commit or a member's own
16
+ * session*): a path under the root of one of the caller's sessions reads that
17
+ * session's working tree, uncommitted work included; any other path reads the
18
+ * served commit. The readable set widens to the templates, house conventions,
19
+ * log and skills the owned skills read (`paths.ts`).
12
20
  */
13
21
  export declare const READ_DEFAULT_LIMIT = 2000;
14
- /** Everything these tools hide: the retrieval exclusions except the capture tier, plus configuration and `.git`. */
15
- export declare function hiddenPrefixes(config: StoreConfig): string[];
22
+ export { readablePath } from '../paths.js';
16
23
  /** A caller's path as a store-relative one; refused when it leaves the store or is hidden. `''` is the store root. */
17
24
  export declare function resolveStorePath(input: string, config: StoreConfig): string;
18
- /** What `Read` answers for, as one predicate: a note, a markdown capture, or the entry document. Grep and Glob return nothing else. */
19
- export declare function readablePath(rel: string, config: StoreConfig): boolean;
25
+ /** Where a read is answered from: the served commit's view, or one of the caller's sessions. */
26
+ export type ReadTarget = {
27
+ kind: 'view';
28
+ rel: string;
29
+ } | {
30
+ kind: 'session';
31
+ session: MemberSession;
32
+ rel: string;
33
+ };
34
+ /** The read target for a caller's path; a path under another member's (or no) session is hidden like the worktrees path. */
35
+ export declare function readTarget(write: WriteDeps, email: string, input: string, config: StoreConfig): Promise<ReadTarget>;
36
+ /** What the file tools need for a read: the view, and the write side that knows the caller's sessions. */
37
+ export interface FileContext {
38
+ view: McpView;
39
+ syncDeps: SyncDeps;
40
+ write: WriteDeps;
41
+ }
20
42
  export interface ReadArgs {
21
43
  file_path: string;
22
44
  offset?: number;
@@ -48,12 +70,13 @@ export interface ReadResult {
48
70
  total_lines: number;
49
71
  first_line: number;
50
72
  last_line: number;
51
- draft: boolean;
73
+ /** The session whose working tree was read; null for the served commit. */
74
+ session: string | null;
52
75
  capture: boolean;
53
- /** The note's page on the browsing surface, for citing; null for a capture or the entry document. */
76
+ /** The note's page on the browsing surface, for citing; null for a capture, a session's copy, or anything not a note. */
54
77
  url: string | null;
55
78
  }
56
- export declare function readTool(snapshot: Snapshot, write: WriteDeps, email: string, args: ReadArgs): Promise<ReadResult>;
79
+ export declare function readTool(ctx: FileContext, email: string, args: ReadArgs): Promise<ReadResult>;
57
80
  export declare function renderRead(data: unknown): string;
58
81
  export interface GrepArgs extends GrepParams {
59
82
  head_limit?: number;
@@ -127,14 +150,16 @@ export interface GrepResult {
127
150
  output_mode: string;
128
151
  lines: string[];
129
152
  omitted: number;
130
- /** Inbox files on session branches with an open pull request that match: captures awaiting approval. */
153
+ /** The session searched; null for the served commit. */
154
+ session: string | null;
155
+ /** Inbox files on session branches with an open pull request that match: captures awaiting approval. Served commit only. */
131
156
  awaiting_approval: {
132
157
  path: string;
133
158
  branch: string;
134
159
  lines: string[];
135
160
  }[];
136
161
  }
137
- export declare function grepTool(snapshot: Snapshot, args: GrepArgs): Promise<GrepResult>;
162
+ export declare function grepTool(ctx: FileContext, email: string, args: GrepArgs): Promise<GrepResult>;
138
163
  export declare function renderGrep(data: unknown): string;
139
164
  export interface GlobArgs {
140
165
  pattern: string;
@@ -155,9 +180,10 @@ export declare const GLOB_INPUT_SCHEMA: {
155
180
  readonly required: readonly ['pattern'];
156
181
  };
157
182
  export declare function parseGlobArgs(args: Record<string, unknown>): GlobArgs;
158
- export declare function globTool(snapshot: Snapshot, args: GlobArgs): Promise<{
183
+ export declare function globTool(ctx: FileContext, email: string, args: GlobArgs): Promise<{
159
184
  files: string[];
160
185
  omitted: number;
186
+ session: string | null;
161
187
  }>;
162
188
  export declare function renderGlob(data: unknown): string;
163
189
  //# sourceMappingURL=files.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../../../src/core/mcp/tools/files.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../../../src/core/mcp/tools/files.ts"],"names":[],"mappings":"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"}