@mistriwork/mistri 1.0.0-rc.12 → 1.0.0-rc.13

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 (221) hide show
  1. package/README.md +4 -3
  2. package/dist/client/assets/LayoutBuilder-MPzkVU2e.js.map +1 -1
  3. package/dist/client/assets/index-D2dHI6hR.js.map +1 -1
  4. package/dist/client/assets/shell-TreN_uLs.js.map +1 -1
  5. package/dist/docs/access-model.md +1 -1
  6. package/dist/docs/build-and-deploy.md +0 -1
  7. package/dist/docs/cli.md +1 -1
  8. package/dist/docs/glossary.md +3 -3
  9. package/dist/docs/query.md +9 -21
  10. package/dist/docs/status.md +3 -3
  11. package/dist/embed/react/chunks/LayoutBuilder-Cbxa_wve.js.map +1 -1
  12. package/dist/embed/react/chunks/app-0UZ1Re1k.js.map +1 -1
  13. package/dist/embed/react/chunks/page-Bx4o1kpQ.js.map +1 -1
  14. package/dist/embed/react/chunks/palette-Bb7Lf6eo.js.map +1 -1
  15. package/dist/embed/react/chunks/shell-DZRACiB9.js.map +1 -1
  16. package/dist/embed/react/chunks/write-BQO4CFc9.js.map +1 -1
  17. package/dist/embed/react/index.js +1 -1
  18. package/dist/server/build/dockerfile.js +1 -1
  19. package/dist/server/cli/usage.js +2 -2
  20. package/dist/ui/index.js +2 -2
  21. package/dist/ui/page.js +2 -2
  22. package/dist/ui/{shared-N4Ej8yRD.js → shared-1PD7TOTJ.js} +5 -5
  23. package/dist/ui/{shared-N4Ej8yRD.js.map → shared-1PD7TOTJ.js.map} +1 -1
  24. package/dist/ui/{shared-D5m86-4o.js → shared-1gMnOu9J.js} +6 -6
  25. package/dist/ui/{shared-D5m86-4o.js.map → shared-1gMnOu9J.js.map} +1 -1
  26. package/dist/ui/{shared-Ctaj8mR2.js → shared-5RQMi4BR.js} +3 -3
  27. package/dist/ui/{shared-Ctaj8mR2.js.map → shared-5RQMi4BR.js.map} +1 -1
  28. package/dist/ui/{shared-DpLeIATZ.js → shared-B-BUF9fx.js} +2 -2
  29. package/dist/ui/{shared-DpLeIATZ.js.map → shared-B-BUF9fx.js.map} +1 -1
  30. package/dist/ui/{shared-DWYnjItP.js → shared-B-MhiPIN.js} +9 -9
  31. package/dist/ui/{shared-DWYnjItP.js.map → shared-B-MhiPIN.js.map} +1 -1
  32. package/dist/ui/{shared-0fNuhSbG.js → shared-B07qIMlE.js} +5 -5
  33. package/dist/ui/{shared-0fNuhSbG.js.map → shared-B07qIMlE.js.map} +1 -1
  34. package/dist/ui/{shared-lYtMadRU.js → shared-B1SAS_J-.js} +3 -3
  35. package/dist/ui/{shared-lYtMadRU.js.map → shared-B1SAS_J-.js.map} +1 -1
  36. package/dist/ui/{shared-CpI0Y8M5.js → shared-B4jgU8h9.js} +6 -6
  37. package/dist/ui/{shared-CpI0Y8M5.js.map → shared-B4jgU8h9.js.map} +1 -1
  38. package/dist/ui/{shared-Cxu1c35l.js → shared-B5aBCUi7.js} +30 -30
  39. package/dist/ui/{shared-Cxu1c35l.js.map → shared-B5aBCUi7.js.map} +1 -1
  40. package/dist/ui/{shared-CAe-US1q.js → shared-B9H7_Pji.js} +5 -5
  41. package/dist/ui/{shared-CAe-US1q.js.map → shared-B9H7_Pji.js.map} +1 -1
  42. package/dist/ui/{shared-Q2bgBaYo.js → shared-BAXr20S-.js} +4 -4
  43. package/dist/ui/{shared-Q2bgBaYo.js.map → shared-BAXr20S-.js.map} +1 -1
  44. package/dist/ui/{shared-CyEefFFb.js → shared-BDDUzH-f.js} +19 -19
  45. package/dist/ui/{shared-CyEefFFb.js.map → shared-BDDUzH-f.js.map} +1 -1
  46. package/dist/ui/{shared-BdhPI6dq.js → shared-BGmkeDeW.js} +3 -3
  47. package/dist/ui/{shared-BdhPI6dq.js.map → shared-BGmkeDeW.js.map} +1 -1
  48. package/dist/ui/{shared-DONIpq2q.js → shared-BHCQ60yN.js} +2 -2
  49. package/dist/ui/{shared-DONIpq2q.js.map → shared-BHCQ60yN.js.map} +1 -1
  50. package/dist/ui/{shared-CNmaAv64.js → shared-BHsjawAG.js} +8 -8
  51. package/dist/ui/{shared-CNmaAv64.js.map → shared-BHsjawAG.js.map} +1 -1
  52. package/dist/ui/{shared-DgjU9kOy.js → shared-BIQuK_nq.js} +4 -4
  53. package/dist/ui/{shared-DgjU9kOy.js.map → shared-BIQuK_nq.js.map} +1 -1
  54. package/dist/ui/{shared-icSQAj21.js → shared-BOe4W2FI.js} +3 -3
  55. package/dist/ui/{shared-icSQAj21.js.map → shared-BOe4W2FI.js.map} +1 -1
  56. package/dist/ui/{shared-BlxoOJSk.js → shared-BPpC08ip.js} +3 -3
  57. package/dist/ui/{shared-BlxoOJSk.js.map → shared-BPpC08ip.js.map} +1 -1
  58. package/dist/ui/{shared-BtiFL37J.js → shared-BdA3LPCB.js} +2 -2
  59. package/dist/ui/{shared-BtiFL37J.js.map → shared-BdA3LPCB.js.map} +1 -1
  60. package/dist/ui/{shared-CvR94vn4.js → shared-Be3nbWsd.js} +11 -11
  61. package/dist/ui/{shared-CvR94vn4.js.map → shared-Be3nbWsd.js.map} +1 -1
  62. package/dist/ui/{shared-Bl_nF_IH.js → shared-Bf30ZLoS.js} +8 -4
  63. package/dist/ui/shared-Bf30ZLoS.js.map +1 -0
  64. package/dist/ui/{shared-DijrJ_V-.js → shared-BguP_BaR.js} +7 -7
  65. package/dist/ui/{shared-DijrJ_V-.js.map → shared-BguP_BaR.js.map} +1 -1
  66. package/dist/ui/{shared-DPAVoWY0.js → shared-BoLbc2WD.js} +17 -2
  67. package/dist/ui/{shared-DPAVoWY0.js.map → shared-BoLbc2WD.js.map} +1 -1
  68. package/dist/ui/{shared-BkdBTYwx.js → shared-BttyOW4W.js} +3 -3
  69. package/dist/ui/{shared-BkdBTYwx.js.map → shared-BttyOW4W.js.map} +1 -1
  70. package/dist/ui/{shared-CQWLz8uT.js → shared-BumxsBlA.js} +10 -10
  71. package/dist/ui/{shared-CQWLz8uT.js.map → shared-BumxsBlA.js.map} +1 -1
  72. package/dist/ui/{shared-Dzu7tFiC.js → shared-Bw73ktBk.js} +3 -3
  73. package/dist/ui/{shared-Dzu7tFiC.js.map → shared-Bw73ktBk.js.map} +1 -1
  74. package/dist/ui/{shared-BhAYErSx.js → shared-C1B0GH0e.js} +4 -4
  75. package/dist/ui/{shared-BhAYErSx.js.map → shared-C1B0GH0e.js.map} +1 -1
  76. package/dist/ui/{shared-BQJQcGgj.js → shared-C2FsyYr7.js} +4 -4
  77. package/dist/ui/{shared-BQJQcGgj.js.map → shared-C2FsyYr7.js.map} +1 -1
  78. package/dist/ui/{shared-B9lw2Ryh.js → shared-C2RU1qjv.js} +4 -4
  79. package/dist/ui/{shared-B9lw2Ryh.js.map → shared-C2RU1qjv.js.map} +1 -1
  80. package/dist/ui/{shared-DQYNI9wO.js → shared-C42f07hJ.js} +5 -5
  81. package/dist/ui/{shared-DQYNI9wO.js.map → shared-C42f07hJ.js.map} +1 -1
  82. package/dist/ui/{shared-CqCZ8wMY.js → shared-C4LkPCU4.js} +3 -3
  83. package/dist/ui/{shared-CqCZ8wMY.js.map → shared-C4LkPCU4.js.map} +1 -1
  84. package/dist/ui/{shared-BhtpgOpa.js → shared-C4wSfz6k.js} +9 -9
  85. package/dist/ui/{shared-BhtpgOpa.js.map → shared-C4wSfz6k.js.map} +1 -1
  86. package/dist/ui/{shared-BHc2Izkj.js → shared-C9DZtSFH.js} +2 -2
  87. package/dist/ui/{shared-BHc2Izkj.js.map → shared-C9DZtSFH.js.map} +1 -1
  88. package/dist/ui/{shared-DW1YuiNS.js → shared-CA52ClGo.js} +2 -2
  89. package/dist/ui/{shared-DW1YuiNS.js.map → shared-CA52ClGo.js.map} +1 -1
  90. package/dist/ui/{shared-BbSbilkh.js → shared-CBciTwm6.js} +9 -9
  91. package/dist/ui/{shared-BbSbilkh.js.map → shared-CBciTwm6.js.map} +1 -1
  92. package/dist/ui/{shared-C-J32eBn.js → shared-CL3RLKDA.js} +16 -16
  93. package/dist/ui/{shared-C-J32eBn.js.map → shared-CL3RLKDA.js.map} +1 -1
  94. package/dist/ui/{shared-Ck8S4OxW.js → shared-CLq3-_hW.js} +3 -3
  95. package/dist/ui/{shared-Ck8S4OxW.js.map → shared-CLq3-_hW.js.map} +1 -1
  96. package/dist/ui/{shared-Q5WefT7G.js → shared-CMjK-Ucd.js} +3 -3
  97. package/dist/ui/{shared-Q5WefT7G.js.map → shared-CMjK-Ucd.js.map} +1 -1
  98. package/dist/ui/{shared-D3MAuEA3.js → shared-CPjpSFGh.js} +2 -2
  99. package/dist/ui/{shared-D3MAuEA3.js.map → shared-CPjpSFGh.js.map} +1 -1
  100. package/dist/ui/{shared-VshXGwXP.js → shared-CSPhENq3.js} +2 -2
  101. package/dist/ui/{shared-VshXGwXP.js.map → shared-CSPhENq3.js.map} +1 -1
  102. package/dist/ui/{shared-DJrJaE73.js → shared-CZJE4Bmp.js} +3 -3
  103. package/dist/ui/{shared-DJrJaE73.js.map → shared-CZJE4Bmp.js.map} +1 -1
  104. package/dist/ui/{shared-D7ONOwI7.js → shared-C_BhUL2I.js} +7 -7
  105. package/dist/ui/{shared-D7ONOwI7.js.map → shared-C_BhUL2I.js.map} +1 -1
  106. package/dist/ui/{shared-j-2peBIB.js → shared-CbeujwdU.js} +4 -4
  107. package/dist/ui/{shared-j-2peBIB.js.map → shared-CbeujwdU.js.map} +1 -1
  108. package/dist/ui/{shared-D5GrOEa2.js → shared-Cbf-o4Dt.js} +4 -4
  109. package/dist/ui/{shared-D5GrOEa2.js.map → shared-Cbf-o4Dt.js.map} +1 -1
  110. package/dist/ui/{shared-HwiPIajr.js → shared-CdNmeNHh.js} +3 -3
  111. package/dist/ui/{shared-HwiPIajr.js.map → shared-CdNmeNHh.js.map} +1 -1
  112. package/dist/ui/{shared-ZCFt-CPb.js → shared-CdQOMD8J.js} +3 -3
  113. package/dist/ui/{shared-ZCFt-CPb.js.map → shared-CdQOMD8J.js.map} +1 -1
  114. package/dist/ui/{shared-ClhXSGGK.js → shared-CdiPYlTh.js} +2 -2
  115. package/dist/ui/{shared-ClhXSGGK.js.map → shared-CdiPYlTh.js.map} +1 -1
  116. package/dist/ui/{shared-DA8_pVRZ.js → shared-CepLAhwm.js} +2 -2
  117. package/dist/ui/{shared-DA8_pVRZ.js.map → shared-CepLAhwm.js.map} +1 -1
  118. package/dist/ui/{shared-BrYKjrnM.js → shared-Ch82h_Fu.js} +6 -6
  119. package/dist/ui/{shared-BrYKjrnM.js.map → shared-Ch82h_Fu.js.map} +1 -1
  120. package/dist/ui/{shared-C4UrE8Fb.js → shared-Chp88all.js} +3 -3
  121. package/dist/ui/{shared-C4UrE8Fb.js.map → shared-Chp88all.js.map} +1 -1
  122. package/dist/ui/{shared-CWa80DTO.js → shared-Ci16s2rN.js} +9 -9
  123. package/dist/ui/{shared-CWa80DTO.js.map → shared-Ci16s2rN.js.map} +1 -1
  124. package/dist/ui/{shared-tksTLD6Q.js → shared-CiqNkoE1.js} +5 -5
  125. package/dist/ui/{shared-tksTLD6Q.js.map → shared-CiqNkoE1.js.map} +1 -1
  126. package/dist/ui/{shared-yt7DjSrq.js → shared-CpMhOq8F.js} +2 -2
  127. package/dist/ui/{shared-yt7DjSrq.js.map → shared-CpMhOq8F.js.map} +1 -1
  128. package/dist/ui/{shared-Dm0z5WUl.js → shared-CrWv5JKH.js} +6 -6
  129. package/dist/ui/{shared-Dm0z5WUl.js.map → shared-CrWv5JKH.js.map} +1 -1
  130. package/dist/ui/{shared-CQL3FGHc.js → shared-Csfi3Pti.js} +2 -2
  131. package/dist/ui/{shared-CQL3FGHc.js.map → shared-Csfi3Pti.js.map} +1 -1
  132. package/dist/ui/{shared-BKNRbm-V.js → shared-CuZt26rm.js} +2 -2
  133. package/dist/ui/{shared-BKNRbm-V.js.map → shared-CuZt26rm.js.map} +1 -1
  134. package/dist/ui/{shared-Guq3upiR.js → shared-Cws_z-TS.js} +2 -2
  135. package/dist/ui/{shared-Guq3upiR.js.map → shared-Cws_z-TS.js.map} +1 -1
  136. package/dist/ui/{shared-Bw_qZeIj.js → shared-D1KWuCg6.js} +2 -2
  137. package/dist/ui/{shared-Bw_qZeIj.js.map → shared-D1KWuCg6.js.map} +1 -1
  138. package/dist/ui/{shared-CuCZKwXW.js → shared-D66ju_Cb.js} +23 -23
  139. package/dist/ui/{shared-CuCZKwXW.js.map → shared-D66ju_Cb.js.map} +1 -1
  140. package/dist/ui/{shared-DYfX7NSM.js → shared-DGaQZXnw.js} +2 -2
  141. package/dist/ui/{shared-DYfX7NSM.js.map → shared-DGaQZXnw.js.map} +1 -1
  142. package/dist/ui/{shared-B3Hp8tOv.js → shared-DHy41sET.js} +6 -6
  143. package/dist/ui/{shared-B3Hp8tOv.js.map → shared-DHy41sET.js.map} +1 -1
  144. package/dist/ui/{shared-CXyd7IKi.js → shared-DKEOMQ6l.js} +2 -2
  145. package/dist/ui/{shared-CXyd7IKi.js.map → shared-DKEOMQ6l.js.map} +1 -1
  146. package/dist/ui/{shared-Ccmc8YO0.js → shared-DSUICuaJ.js} +33 -33
  147. package/dist/ui/{shared-Ccmc8YO0.js.map → shared-DSUICuaJ.js.map} +1 -1
  148. package/dist/ui/{shared-CL2iw_js.js → shared-DUPMRoO0.js} +13 -13
  149. package/dist/ui/{shared-CL2iw_js.js.map → shared-DUPMRoO0.js.map} +1 -1
  150. package/dist/ui/{shared-Dtp4eRul.js → shared-DVfdm6ah.js} +2 -2
  151. package/dist/ui/{shared-Dtp4eRul.js.map → shared-DVfdm6ah.js.map} +1 -1
  152. package/dist/ui/{shared-BJ5Ex32G.js → shared-DXM7d7lJ.js} +3 -3
  153. package/dist/ui/{shared-BJ5Ex32G.js.map → shared-DXM7d7lJ.js.map} +1 -1
  154. package/dist/ui/{shared-BFr6ld0e.js → shared-DXbMlcev.js} +2 -2
  155. package/dist/ui/{shared-BFr6ld0e.js.map → shared-DXbMlcev.js.map} +1 -1
  156. package/dist/ui/{shared-BUp3jv-N.js → shared-D_SkPtJ9.js} +6 -6
  157. package/dist/ui/{shared-BUp3jv-N.js.map → shared-D_SkPtJ9.js.map} +1 -1
  158. package/dist/ui/{shared-CdNomVzH.js → shared-Dd21k2ic.js} +4 -4
  159. package/dist/ui/{shared-CdNomVzH.js.map → shared-Dd21k2ic.js.map} +1 -1
  160. package/dist/ui/{shared-gRMbxmpu.js → shared-Dh0nHtLZ.js} +8 -8
  161. package/dist/ui/{shared-gRMbxmpu.js.map → shared-Dh0nHtLZ.js.map} +1 -1
  162. package/dist/ui/{shared-BKGJgjog.js → shared-DkOdSpSK.js} +3 -3
  163. package/dist/ui/{shared-BKGJgjog.js.map → shared-DkOdSpSK.js.map} +1 -1
  164. package/dist/ui/{shared-BMsh72Uq.js → shared-Dkph5ckT.js} +2 -2
  165. package/dist/ui/{shared-BMsh72Uq.js.map → shared-Dkph5ckT.js.map} +1 -1
  166. package/dist/ui/{shared-Be1HpDOB.js → shared-Dl1_Nx--.js} +3 -3
  167. package/dist/ui/{shared-Be1HpDOB.js.map → shared-Dl1_Nx--.js.map} +1 -1
  168. package/dist/ui/{shared-BQIZWOoJ.js → shared-Dm0IGbAf.js} +2 -2
  169. package/dist/ui/{shared-BQIZWOoJ.js.map → shared-Dm0IGbAf.js.map} +1 -1
  170. package/dist/ui/{shared-DSUtcU5S.js → shared-DnIkTpPr.js} +5 -5
  171. package/dist/ui/{shared-DSUtcU5S.js.map → shared-DnIkTpPr.js.map} +1 -1
  172. package/dist/ui/{shared-DsxGbYlV.js → shared-Docl_0tq.js} +3 -3
  173. package/dist/ui/{shared-DsxGbYlV.js.map → shared-Docl_0tq.js.map} +1 -1
  174. package/dist/ui/{shared-DZskrV26.js → shared-DprrHC72.js} +2 -2
  175. package/dist/ui/{shared-DZskrV26.js.map → shared-DprrHC72.js.map} +1 -1
  176. package/dist/ui/{shared-Bmw43Hwf.js → shared-DyKsJTZs.js} +2 -2
  177. package/dist/ui/{shared-Bmw43Hwf.js.map → shared-DyKsJTZs.js.map} +1 -1
  178. package/dist/ui/{shared-BLG88Pya.js → shared-FO7vfI3F.js} +4 -4
  179. package/dist/ui/{shared-BLG88Pya.js.map → shared-FO7vfI3F.js.map} +1 -1
  180. package/dist/ui/{shared-DLSd80D1.js → shared-HalAVHjv.js} +3 -3
  181. package/dist/ui/{shared-DLSd80D1.js.map → shared-HalAVHjv.js.map} +1 -1
  182. package/dist/ui/{shared-D1mMBLdj.js → shared-JvcI-LWp.js} +15 -15
  183. package/dist/ui/{shared-D1mMBLdj.js.map → shared-JvcI-LWp.js.map} +1 -1
  184. package/dist/ui/{shared-C6Hv_4O0.js → shared-K7Ym27yg.js} +2 -2
  185. package/dist/ui/{shared-C6Hv_4O0.js.map → shared-K7Ym27yg.js.map} +1 -1
  186. package/dist/ui/{shared-B39ln7oi.js → shared-SzlnwfJO.js} +3 -3
  187. package/dist/ui/{shared-B39ln7oi.js.map → shared-SzlnwfJO.js.map} +1 -1
  188. package/dist/ui/{shared-DgPn_Jll.js → shared-TrGbd1FY.js} +3 -3
  189. package/dist/ui/{shared-DgPn_Jll.js.map → shared-TrGbd1FY.js.map} +1 -1
  190. package/dist/ui/{shared-DrFb-XtA.js → shared-WhbuObEW.js} +2 -2
  191. package/dist/ui/{shared-DrFb-XtA.js.map → shared-WhbuObEW.js.map} +1 -1
  192. package/dist/ui/{shared-DiFQljcq.js → shared-XcSKDp6N.js} +11 -11
  193. package/dist/ui/{shared-DiFQljcq.js.map → shared-XcSKDp6N.js.map} +1 -1
  194. package/dist/ui/{shared-CMAg58rY.js → shared-Z4uBJU6I.js} +7 -6
  195. package/dist/ui/shared-Z4uBJU6I.js.map +1 -0
  196. package/dist/ui/{shared-BnUptuUp.js → shared-bAgeiRa5.js} +2 -2
  197. package/dist/ui/{shared-BnUptuUp.js.map → shared-bAgeiRa5.js.map} +1 -1
  198. package/dist/ui/{shared-BxMvSjey.js → shared-cgXG7OgZ.js} +5 -5
  199. package/dist/ui/{shared-BxMvSjey.js.map → shared-cgXG7OgZ.js.map} +1 -1
  200. package/dist/ui/{shared-u4CG2kQJ.js → shared-eZ0SB_zm.js} +2 -2
  201. package/dist/ui/{shared-u4CG2kQJ.js.map → shared-eZ0SB_zm.js.map} +1 -1
  202. package/dist/ui/{shared-L90bWW8e.js → shared-frKFb79C.js} +2 -2
  203. package/dist/ui/{shared-L90bWW8e.js.map → shared-frKFb79C.js.map} +1 -1
  204. package/dist/ui/{shared-Dd34nhkw.js → shared-hAayNSRA.js} +3 -3
  205. package/dist/ui/{shared-Dd34nhkw.js.map → shared-hAayNSRA.js.map} +1 -1
  206. package/dist/ui/{shared-DzC64cpp.js → shared-j_J16p2B.js} +2 -2
  207. package/dist/ui/{shared-DzC64cpp.js.map → shared-j_J16p2B.js.map} +1 -1
  208. package/dist/ui/{shared-DX7HRIV-.js → shared-tqpl5N3g.js} +6 -6
  209. package/dist/ui/{shared-DX7HRIV-.js.map → shared-tqpl5N3g.js.map} +1 -1
  210. package/dist/ui/{shared-BS5dBMpA.js → shared-y-6_ZDts.js} +2 -2
  211. package/dist/ui/{shared-BS5dBMpA.js.map → shared-y-6_ZDts.js.map} +1 -1
  212. package/dist/ui/{shared-Cv5v_MP1.js → shared-zG6e1Rhz.js} +13 -13
  213. package/dist/ui/{shared-Cv5v_MP1.js.map → shared-zG6e1Rhz.js.map} +1 -1
  214. package/dist/ui/testing.js +1 -1
  215. package/package.json +4 -4
  216. package/dist/docs/cli-browser.md +0 -232
  217. package/dist/docs/database-browser.md +0 -115
  218. package/dist/docs/keyboard.md +0 -63
  219. package/dist/docs/mcp.md +0 -86
  220. package/dist/ui/shared-Bl_nF_IH.js.map +0 -1
  221. package/dist/ui/shared-CMAg58rY.js.map +0 -1
@@ -29,7 +29,7 @@ var say = defineMessages({
29
29
  * would have asked for; the query is the server's to judge, so the rows a
30
30
  * fixture gives are the rows it answered.
31
31
  */
32
- registerPageBlocks(() => import("./shared-C-J32eBn.js").then((n) => n.t));
32
+ registerPageBlocks(() => import("./shared-CL3RLKDA.js").then((n) => n.t));
33
33
  /** Typed fixture rows — `fixtures<Rows>({ pay_run: [{ id: 1, title: 'Aug 1–15', … }] })` — and, by `resource.column`, the display rules the App would dress them with. */
34
34
  function fixtures(tables, options = {}) {
35
35
  return {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mistriwork/mistri",
3
- "version": "1.0.0-rc.12",
3
+ "version": "1.0.0-rc.13",
4
4
  "description": "The App framework: a few lines of TypeScript, a complete App, served from your own database.",
5
5
  "homepage": "https://mistriwork.dev",
6
6
  "bugs": {
@@ -105,9 +105,9 @@
105
105
  "./package.json": "./package.json"
106
106
  },
107
107
  "dependencies": {
108
- "@mistriwork/engine": "1.0.0-rc.12",
109
- "@mistriwork/kit": "1.0.0-rc.12",
110
- "@mistriwork/ui": "1.0.0-rc.12",
108
+ "@mistriwork/engine": "1.0.0-rc.13",
109
+ "@mistriwork/kit": "1.0.0-rc.13",
110
+ "@mistriwork/ui": "1.0.0-rc.13",
111
111
  "intl-messageformat": "12.1.2",
112
112
  "marked": "^18.1.0",
113
113
  "sanitize-html": "^2.18.0",
@@ -1,232 +0,0 @@
1
- ---
2
- title: "Command line: database browser"
3
- description: "Every tablewalk command and flag, the database browser's, laid out from the help text the command prints: what each does, and where its section is."
4
- ---
5
-
6
- <!-- Generated by scripts/cli-reference.mjs from USAGE in packages/tablewalk/src/server/cli/usage.ts. Do not edit by hand. -->
7
-
8
- Every tablewalk command and flag — the database browser's — laid out from the help text the command
9
- prints: what each does, and where its section is. `npx tablewalk --help all`
10
- prints the same text, `npx tablewalk --help` the commands and common options
11
- on one screen, and `npx tablewalk <command> --help` one command's.
12
- An App is the App framework's: [its command line](/docs/cli/).
13
-
14
- The first line of the help says it: *tablewalk — browse a relational database as a graph you walk.*
15
-
16
- ## Commands
17
-
18
- | Command | What it does |
19
- | --- | --- |
20
- | `tablewalk` | start with nothing; the page asks for a connection |
21
- | `tablewalk <sqlite-file>` | Open it in the database browser. |
22
- | `tablewalk postgres://user:pass@host/db` | Open it in the database browser. |
23
- | `tablewalk --db postgres://… --schema public --port 4111` | Open it in the database browser. |
24
- | `tablewalk --demo` | a throwaway sample database, opened |
25
- | `tablewalk <db> --mcp` | the database's tools for a coding agent, on stdio |
26
- | `tablewalk <db> --export md` | the schema in words; mermaid or json too |
27
- | `tablewalk migrate <command>` | change the schema with versioned SQL files (see below) |
28
- | `tablewalk seed [<db>]` | believable rows in a writable database (see below) |
29
-
30
- ## Options
31
-
32
- The server's flags: where the data is, and how it is served.
33
-
34
- | Flag | What it does |
35
- | --- | --- |
36
- | `-d, --db <target>` | SQLite file path, or a postgres:// URL (or set DATABASE_URL, used when no config names connections) |
37
- | `-p, --port <n>` | Port to listen on (default 4111) |
38
- | `--host <addr>` | Interface to bind (default 127.0.0.1, loopback only) |
39
- | `--allowed-host <name>` | Also answer for this Host header; repeatable. Needed behind a proxy or in a container reached by name. Or set TABLEWALK_ALLOWED_HOSTS=a.example,b.example |
40
- | `--trust-proxy <address|CIDR>` | A proxy whose X-Forwarded-For the rate limit may believe: 172.17.0.1 or a range like fd00::/8. Repeatable or comma-separated; loopback is always trusted. Client address only: it never lets a proxy set --auth-proxy-header (that is --auth-proxy-from). Or set TABLEWALK_TRUST_PROXY=172.17.0.1 |
41
- | `--trust-proxy-hops <n>` | Behind a managed front end with no address to name (Cloud Run, a cloud load balancer): how many proxies append to X-Forwarded-For. The client is the address n places from the right; anything the visitor wrote left of it is ignored. Rate limiting only. Or set TABLEWALK_TRUST_PROXY_HOPS=1 |
42
- | `--trust-proxy-cloudflare` | Read CF-Connecting-IP as the client. Only when the server is reachable through Cloudflare alone (a tunnel or its address ranges): anyone else can write the header. Not with --trust-proxy-hops. Or set TABLEWALK_TRUST_PROXY_CLOUDFLARE=1 |
43
- | `--auth-proxy-header <name>` | Behind a proxy that signs people in: the header it sets with the user (X-Forwarded-User). Requests from beyond loopback must carry it; it is believed only from loopback and --auth-proxy-from peers. Every write is journaled with it. Or set TABLEWALK_AUTH_PROXY_HEADER. |
44
- | `--auth-proxy-from <address|CIDR>` | A peer, beside loopback, whose --auth-proxy-header value is believed: the proxy's own address (10.0.0.7). Same syntax as --trust-proxy, but a separate list; a range lets every peer in it name the signed-in user. Or set TABLEWALK_AUTH_PROXY_FROM=10.0.0.7 |
45
- | `--schema <name>` | Postgres only; repeatable. Defaults to all user schemas. |
46
- | `--read-pool <n>` | PostgreSQL connections that may read at once, per database (default 4, at most 64). A connection's "pool": { "read": n } in tablewalk.json wins. Or set TABLEWALK_READ_POOL. |
47
- | `--lock-timeout <s>` | Seconds a write waits for a row or table another transaction holds before it is refused (default 5, 0.1 to 30). Or set TABLEWALK_LOCK_TIMEOUT. |
48
- | `--pooler <mode>` | session (the default): PostgreSQL is reached directly, or through a pooler that keeps a client on one server connection. transaction: through PgBouncer in transaction mode or RDS Proxy; the read-only guard and the statement cap are then set per transaction. Or set TABLEWALK_POOLER. |
49
- | `--drain-delay <s>` | Seconds /readyz answers 503 before the listener closes on SIGTERM, so a balancer that probes takes this instance out first (default 0, up to 120). Or set TABLEWALK_DRAIN_DELAY. |
50
- | `--shutdown-grace <s>` | Seconds a response still unfinished after the drain may keep the process before it is cut (default 10, 1 to 300). Hold the drain and this inside the platform's stop timeout. Or set TABLEWALK_SHUTDOWN_GRACE. |
51
- | `--config <path>` | Read connections from this file; the paths in it are relative to its folder. A file that lists Apps is mistri's to serve, and is refused here. |
52
- | `--no-config` | Ignore any config file |
53
- | `--base-path <path>` | The path a reverse proxy serves this server under, like /tools: every address, asset, API call, cookie and link carries it. Or "basePath" in the config, or set TABLEWALK_BASE_PATH. |
54
- | `--openapi <spec.json|url>` | Serve the API a spec describes, with no config: the description is drafted in memory and the base URL is the spec's server. Plain http only to this machine. |
55
- | `--api-url <url>` | With --openapi: the API's base URL, when the spec's servers do not give a usable one. |
56
- | `--api-token-env <name>` | With --openapi: send $name as a bearer token. |
57
- | `--demo` | Build a throwaway sample database and open it. Nothing of yours is touched; it lives in the temp directory. |
58
- | `--open` | Open a browser once the server is up |
59
- | `--mcp` | Speak MCP on stdio for coding agents, instead of HTTP: the database browser's tools, which serve no App |
60
- | `--tools <name>` | Offer one job's worth of tools instead of all of them: explore, migrate, seed, or full (the default). |
61
- | `--output-schema` | Advertise each tool's output shape in tools/list. Off by default: it is half the listing's size, and most agents never read it. Answers carry the same fields either way. |
62
- | `--export <fmt>` | Print the schema as md, mermaid or json, then exit. |
63
- | `--lint [fmt]` | Report what the shape will cost — missing keys, unindexed references, naive timestamps — as text or json, then exit. |
64
- | `--fail-on <sev>` | With --lint, exit non-zero when a finding is at least this severe: high, medium or low. For CI. |
65
- | `--diff <conn>` | Compare the active connection's shape with this one, print the differences, then exit. Exit code 1 when they differ, the way diff(1) does. |
66
- | `-h, --help` | Print the short help and stop; --help all prints this |
67
- | `-v, --version` | Print the version and stop |
68
-
69
- ## Changing the schema
70
-
71
- Versioned SQL files in Flyway's format, forward only.
72
-
73
- ```text
74
- tablewalk migrate new <name> [--repeatable]
75
- tablewalk migrate status | up | validate | baseline | repair
76
- tablewalk migrate diff <name> | check | squash
77
- [<db> | --db <target> | --config <path>]
78
- [--connection <name>] [--schema <name>] [--migrations <dir>]
79
- [--history-table <name>] [--dry-run] [--tool flyway]
80
- [--schema-file <path>] [--dev-url <url>]
81
-
82
- V3__add_payoff_quote.sql runs once, in version order, in its own
83
- transaction (a failure is recorded as failed); R__views.sql runs again whenever it changes.
84
- up applies what is pending. status lists what is applied and pending, and
85
- the changes made outside migrations (drift). validate fails on a changed, missing or failed file, a pending
86
- one, or drift. baseline records a database that already has tables as
87
- version 0, touching nothing, and writes its schema beside the migrations
88
- (baseline.schema.json, never run). repair removes failed entries, accepts
89
- changed files and marks missing ones deleted.
90
-
91
- diff, check and squash read the schema you want from schema.sql beside the
92
- migrations (db/migrations -> db/schema.sql). diff writes the next V file
93
- holding what the migrations still lack to build it, for review: a rename
94
- comes out as a drop and an add. The first is schema.sql itself, written
95
- with no download. check fails (exit 2) when the migrations,
96
- applied to a scratch database, do not build schema.sql. squash folds the V
97
- files into one V1__baseline.sql, before a database worth keeping exists.
98
- tablewalk's own __mistri_* tables are left out. The comparison is Atlas's
99
- community build, pinned and checked by sha256, fetched on first use into
100
- .tablewalk/bin with its update check off (TABLEWALK_ATLAS names your own);
101
- serving never fetches it. PostgreSQL and SQLite.
102
- --migrations <dir>
103
- where the files are (default: the connection's
104
- "migrations": { "dir": … } in tablewalk.json, relative
105
- to that file, else migrations/)
106
- --history-table <name>
107
- the history table: Flyway's layout, named
108
- __mistri_schema_history unless this or the
109
- connection's "migrations": { "table" } says otherwise
110
- (flyway_schema_history, to take over from Flyway)
111
- --connection <name>
112
- with several connections: which one
113
- --dry-run with up, baseline or repair: print what would run
114
- (the SQL, for up) and change nothing
115
- --tool flyway run the command with an installed Flyway instead (on the
116
- PATH, or TABLEWALK_FLYWAY), over the same files and history
117
- --repeatable with new: an R__ file
118
- --schema-file <path>
119
- with diff, check or squash: the schema you want (default
120
- schema.sql beside the migrations directory)
121
- --dev-url <url> with diff, check or squash on PostgreSQL: the server
122
- where two scratch databases are made and dropped
123
- (default: the connection's; needs CREATEDB)
124
- A run holds a lock — PostgreSQL: the advisory lock Flyway takes for the same
125
- table; SQLite: its write lock — so two deploys never migrate
126
- at once. Scoped to the connection's schemas, or --schema.
127
- Exit codes: 1 could not run, 2 files and history disagree, 3 a migration
128
- failed. An App's migrate (its types regenerated and checked after up, its
129
- stores and files) is mistri's: npx @mistriwork/mistri migrate --app <dir>.
130
- ```
131
-
132
- ## Rows to look at
133
-
134
- A draft judged on believable data, with no seed script.
135
-
136
- ```text
137
- tablewalk seed [<db> | --db <target> | --config <path>]
138
- [--connection <name>] [--rows <n>] [--seed <n>] [--append]
139
-
140
- Fills every table through its adapter, parents before children: CHECK
141
- vocabularies, keys, NOT NULL and unique columns hold. A status read off
142
- its vocabulary is spread over its states — most work open, about a third
143
- done, a little called off — each record with the stamps of the states it
144
- passed through. Dates fall across the last 90
145
- days, and some open work is due today or overdue. Names, emails
146
- (example.com) and phone numbers (555-01xx) come from a small word list.
147
- Writes only to a connection whose config says "writable": true.
148
- --rows <n> rows per main table (default 40); staff and lookups
149
- get fewer, lines more
150
- --seed <n> the same rows again, on the same day (default: one
151
- chosen and printed)
152
- --append add to tables that already hold rows; without it, a
153
- table with rows is refused before anything is written
154
- Exit codes: 1 could not run, 2 refused (read-only, or rows already there).
155
- An App's seed, each status the way its machine moves it, is mistri's:
156
- npx @mistriwork/mistri seed --app <dir>.
157
- ```
158
-
159
- ## Connections can also come from a tablewalk.json
160
-
161
- ```text
162
- { "connections": [ { "name": "app", "url": "postgres://localhost/app" } ] }
163
-
164
- Looked for in ./tablewalk.json, ./.tablewalk.json, then
165
- $XDG_CONFIG_HOME/tablewalk/connections.json.
166
-
167
- OpenTelemetry is on when the standard variables say so: set
168
- OTEL_EXPORTER_OTLP_ENDPOINT (and OTEL_EXPORTER_OTLP_HEADERS, OTEL_SERVICE_NAME,
169
- OTEL_RESOURCE_ATTRIBUTES, OTEL_TRACES_SAMPLER as your collector, Datadog or
170
- Dynatrace asks) and traces, metrics and logs are sent over OTLP/HTTP. Nothing
171
- private is in them: no bodies, row values, SQL parameters, emails or tokens.
172
- GET /healthz and /readyz answer an orchestrator (under --base-path, as every
173
- route is).
174
-
175
- Set TABLEWALK_DIAGNOSTICS=1 for best-effort HTTP JSONL diagnostics on stderr
176
- and generated X-Request-ID response headers. Disabled by default. These records
177
- omit URLs, bodies, identities, SQL and error messages; existing human CLI logs
178
- are separate.
179
-
180
- Browsing is read-only, held by the adapter: a read runs one statement in a
181
- read-only transaction. Editing is off by default, per connection: its
182
- "writable": true in tablewalk.json, checked by the server, not the UI.
183
- ```
184
-
185
- ## Every flag, and where it is
186
-
187
- | Flag | Said in |
188
- | --- | --- |
189
- | `--allowed-host` | [Options](#options) |
190
- | `--api-token-env` | [Options](#options) |
191
- | `--api-url` | [Options](#options) |
192
- | `--app` | [Changing the schema](#changing-the-schema), [Rows to look at](#rows-to-look-at) |
193
- | `--append` | [Rows to look at](#rows-to-look-at) |
194
- | `--auth-proxy-from` | [Options](#options) |
195
- | `--auth-proxy-header` | [Options](#options) |
196
- | `--base-path` | [Options](#options), [Connections can also come from a tablewalk.json](#connections-can-also-come-from-a-tablewalkjson) |
197
- | `--config` | [Options](#options), [Changing the schema](#changing-the-schema), [Rows to look at](#rows-to-look-at) |
198
- | `--connection` | [Changing the schema](#changing-the-schema), [Rows to look at](#rows-to-look-at) |
199
- | `--db` | [Options](#options), [Commands](#commands), [Changing the schema](#changing-the-schema), [Rows to look at](#rows-to-look-at) |
200
- | `--demo` | [Options](#options), [Commands](#commands) |
201
- | `--dev-url` | [Changing the schema](#changing-the-schema) |
202
- | `--diff` | [Options](#options) |
203
- | `--drain-delay` | [Options](#options) |
204
- | `--dry-run` | [Changing the schema](#changing-the-schema) |
205
- | `--export` | [Options](#options), [Commands](#commands) |
206
- | `--fail-on` | [Options](#options) |
207
- | `--help` | [Options](#options) |
208
- | `--history-table` | [Changing the schema](#changing-the-schema) |
209
- | `--host` | [Options](#options) |
210
- | `--lint` | [Options](#options) |
211
- | `--lock-timeout` | [Options](#options) |
212
- | `--mcp` | [Options](#options), [Commands](#commands) |
213
- | `--migrations` | [Changing the schema](#changing-the-schema) |
214
- | `--no-config` | [Options](#options) |
215
- | `--open` | [Options](#options) |
216
- | `--openapi` | [Options](#options) |
217
- | `--output-schema` | [Options](#options) |
218
- | `--pooler` | [Options](#options) |
219
- | `--port` | [Options](#options), [Commands](#commands) |
220
- | `--read-pool` | [Options](#options) |
221
- | `--repeatable` | [Changing the schema](#changing-the-schema) |
222
- | `--rows` | [Rows to look at](#rows-to-look-at) |
223
- | `--schema` | [Options](#options), [Commands](#commands), [Changing the schema](#changing-the-schema) |
224
- | `--schema-file` | [Changing the schema](#changing-the-schema) |
225
- | `--seed` | [Rows to look at](#rows-to-look-at) |
226
- | `--shutdown-grace` | [Options](#options) |
227
- | `--tool` | [Changing the schema](#changing-the-schema) |
228
- | `--tools` | [Options](#options) |
229
- | `--trust-proxy` | [Options](#options) |
230
- | `--trust-proxy-cloudflare` | [Options](#options) |
231
- | `--trust-proxy-hops` | [Options](#options) |
232
- | `--version` | [Options](#options) |
@@ -1,115 +0,0 @@
1
- ---
2
- title: "tablewalk, the database browser"
3
- description: Open a PostgreSQL or SQLite database in the browser, follow its foreign keys both ways, and keep it read-only.
4
- keywords: [database browser, tablewalk, browse, walk, foreign key, read-only, sqlite, postgres, workbench]
5
- ---
6
-
7
- Open a PostgreSQL or SQLite database in the browser, follow its foreign keys both ways, and keep it read-only.
8
-
9
- ```sh
10
- npx tablewalk postgres://reader@localhost/crm # PostgreSQL
11
- npx tablewalk ./crm.sqlite # a SQLite file
12
- npx tablewalk --demo # no database yet: a throwaway sample
13
- ```
14
-
15
- ![A customer record in the database browser: its fields, the invoices that point at it, and a rail of every table that refers to it.](../../../assets/screens/browser-record.webp)
16
-
17
- tablewalk is a product of its own, from the same repository as mistri: a
18
- foreign key is a place you can go. It needs Node 24.22.1 or newer, no build step
19
- and no config; `npx tablewalk --version` says which one you have. It serves no
20
- App: `npx tablewalk --app …` is refused and names the `npx @mistriwork/mistri` command
21
- that runs it, and mistri, in turn, serves no database browser. Apps run on
22
- PostgreSQL and SQLite, like the browser; MySQL and MariaDB are not supported.
23
-
24
- ## What you'll see
25
-
26
- - `Listening on http://localhost:4111`, then the database's tables. `--port`
27
- picks another port, `--open` opens the browser for you.
28
- - A record shows its fields, then every table that points at it, each with a
29
- count. A reference such as an invoice's `customer_id` is a link to that
30
- customer; a table in the rail opens the rows that point here.
31
- - The address changes at each step (`/crm/customer/~42`), so Back, a bookmark
32
- and a pasted link return to the same place.
33
-
34
- ## Ask, don't click
35
-
36
- Type a question into the bar above a table, in the
37
- [query language](/docs/query/) Apps use too:
38
-
39
- ```text
40
- invoice total > 500 sort total desc
41
- ```
42
-
43
- The condition is written into the address. Every one of these is a link you
44
- can type, paste or send:
45
-
46
- | Address | Opens |
47
- | --- | --- |
48
- | `/demo/customer` | A table. Any query works here, URL-encoded: `/demo/invoice%20total%20%3E%20500` |
49
- | `/demo/customer/~42` | The customer whose key is 42 |
50
- | `/demo/customer/~42/~invoice:9` | Invoice 9, reached from customer 42 |
51
- | `/demo/customer!diagram` | A table's tab: `!rows`, `!ddl` or `!diagram` |
52
- | `/demo/@customer~42` | A composed page, rooted at a record |
53
-
54
- A `json` or `jsonb` column (SQLite `JSON` too) is laid out by its shape:
55
- objects as fields, arrays of records as tables. Documents are read-only here.
56
-
57
- ## Read-only, and meant
58
-
59
- Every read runs in a read-only transaction. Writing is an opt-in for each
60
- connection (`"writable": true` in a config file), checked by the server in
61
- every route and tool that writes, not by the UI. The database role is the
62
- limit that always holds, so connect as one that can only read:
63
-
64
- ```sql
65
- CREATE ROLE tablewalk_reader LOGIN PASSWORD '…';
66
- GRANT USAGE ON SCHEMA public TO tablewalk_reader;
67
- GRANT SELECT ON ALL TABLES IN SCHEMA public TO tablewalk_reader;
68
- ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO tablewalk_reader;
69
- ```
70
-
71
- tablewalk warns at startup when the role it connects as could do more than
72
- read. To keep several databases, or a password out of your shell history,
73
- name them in a config file:
74
-
75
- ```json title="tablewalk.json"
76
- {
77
- "connections": [
78
- { "name": "crm", "url": "${DATABASE_URL}" },
79
- { "name": "local", "url": "sqlite:./crm.sqlite" }
80
- ]
81
- }
82
- ```
83
-
84
- ```sh
85
- DATABASE_URL=postgres://reader@localhost/crm npx tablewalk --config ./tablewalk.json
86
- ```
87
-
88
- `${VAR}` reads the environment, and an unset variable is an error.
89
-
90
- ## For a coding agent
91
-
92
- `npx tablewalk --mcp` gives an agent the same database as
93
- up to twenty-three tools: seventeen that only read, and six writes listed only
94
- for a writable connection. Every answer carries a link to the same rows in the browser.
95
- [MCP for coding agents](/docs/mcp/)
96
-
97
- ## Common mistakes
98
-
99
- - `Cannot find module 'pg'` → install the driver beside
100
- tablewalk: `npm install pg`.
101
- - A reference shows as a plain value and leads nowhere → the database has no
102
- foreign key for it, and the walk follows only declared ones; add the
103
- constraint.
104
- - The address answers nothing → another process holds port 4111; pass
105
- `--port 4112`.
106
- - An old `#/…` link lands on the home page → the hash is not read; drop the
107
- `#` and the rest is the path.
108
-
109
- ## Related
110
-
111
- - [Query language](/docs/query/): the bar's whole grammar, grouping and counting.
112
- - [MCP for coding agents](/docs/mcp/): the tools, and how to wire them into an agent.
113
- - [Keyboard](/docs/keyboard/): step through records with `j` and `k`.
114
- - [Command line: database browser](/docs/cli-browser/): every flag.
115
- - [an App from your database](/docs/quickstart-app/): turn the same database into a workspace for a team, with mistri.
@@ -1,63 +0,0 @@
1
- ---
2
- title: Keyboard
3
- description: Move through tables, records and the query bar without the mouse; press `?` anywhere for the keys of the room you are in.
4
- ---
5
-
6
- Move through tables, records and the query bar without the mouse; press `?` anywhere for the keys of the room you are in.
7
-
8
- ```text
9
- / invoice total > 500 Enter Tab ↓ ↓ Enter j j Backspace
10
- ```
11
-
12
- That is: focus the bar, ask, step into the grid, open the third row, step
13
- to the next two records in that list, and walk back.
14
-
15
- <!-- no picture: the ? panel lists these same keys in the running browser. -->
16
-
17
- ## Anywhere on the page
18
-
19
- Single keys work when the caret is not in a text field, and never through a
20
- dialog.
21
-
22
- | Key | Does |
23
- | --- | --- |
24
- | `/` | Focus the query bar |
25
- | `⌘/` | The query bar as a panel, with room to write in |
26
- | `⌘K` | The command palette: tables, pages, actions, recent queries |
27
- | `h` | Home: the schema, your work, the diagram |
28
- | `t` | The table filter in the sidebar |
29
- | `⌘B` | Show or hide the table list |
30
- | `Backspace`, `⌘[` | Back one step along the trail |
31
- | `?` | The keys for this room, and the query language |
32
- | `Esc` | Leave the field, or close what is open |
33
-
34
- ## In a grid
35
-
36
- Tab into the table; the arrow keys then move a cell cursor.
37
-
38
- | Key | Does |
39
- | --- | --- |
40
- | `↑ ↓ ← →` | Move one cell (hold `⌘` to jump to the end of a row or column) |
41
- | `Home`, `End` | First and last column |
42
- | `Enter` | Open the record for that row, or the document in a JSON cell |
43
- | `Space` | Glance at that row's record without leaving the list |
44
- | `⌘C` | Copy the cell under the cursor |
45
- | `Esc` | Back to the query bar |
46
-
47
- ## In a record
48
-
49
- A record opened from a list (its page, a glance or a dialog) steps through
50
- that list, in its order and filter, and past its page.
51
-
52
- | Key | Does |
53
- | --- | --- |
54
- | `j` | The next record in the list |
55
- | `k` | The previous record |
56
- | `←`, `→` | The same, with the arrows beside the record's name |
57
-
58
- An App's reader gets the grid and record keys too; `?` there lists only those.
59
-
60
- ## Related
61
-
62
- - [tablewalk, the database browser](/docs/database-browser/): what `Enter` and `Backspace` move between.
63
- - [Query language](/docs/query/): what to type after `/`.
package/dist/docs/mcp.md DELETED
@@ -1,86 +0,0 @@
1
- ---
2
- title: MCP for coding agents
3
- description: Give a coding agent your database's schema, rows and relationships as MCP tools, read-only unless a connection says otherwise.
4
- ---
5
-
6
- Give a coding agent your database's schema, rows and relationships as MCP
7
- tools, read-only unless a connection says otherwise.
8
-
9
- ```json title=".mcp.json"
10
- {
11
- "mcpServers": {
12
- "tablewalk": {
13
- "command": "npx",
14
- "args": ["tablewalk", "--mcp", "--config", "/absolute/path/tablewalk.json"]
15
- }
16
- }
17
- }
18
- ```
19
-
20
- The config file is the same one the browser reads
21
- ([connections](/docs/services/#connections)); `npx tablewalk --mcp <url or file>`
22
- works for one database.
23
-
24
- <!-- no picture: the agent's side is text; each answer carries a link a person opens in the browser. -->
25
-
26
- ## What you'll see
27
-
28
- - The agent calls `schema_summary` first, then `table`, `query` and `record`
29
- as it needs them.
30
- - Every answer carries a `link`: open it and you are on the same rows in the
31
- browser.
32
- - 23 tools: 17 that only read, and 6 writes listed only when a connection is
33
- `"writable": true`.
34
-
35
- ## When to use it
36
-
37
- - Use database MCP when an agent should read your schema and data: to write a
38
- migration, a query, a fixture or a first App.
39
- - Use [App MCP](/docs/app-api/) instead when the agent should act through an
40
- App's grants and commands, as a signed-in role would.
41
- - Use the [agent skill](/docs/build-with-an-agent/) beside either one when the
42
- agent is building an App: the skill says how; MCP shows what is there.
43
-
44
- ## The tools
45
-
46
- | Task | Tools |
47
- | --- | --- |
48
- | Orient | `connections`, `schema_summary`, `tables`, `table` |
49
- | Locate and inspect | `find`, `query`, `record`, `profile` |
50
- | Summarize | `breakdown` |
51
- | Diagnose | `sql`, `explain`, `lint`, `change_impact`, `diff` |
52
- | Prepare fixtures | `order`, `fixture` |
53
- | Refresh | `refresh` |
54
- | Write (writable only) | `insert`, `update`, `delete`, `insert_graph`, `delete_graph`, `revert` |
55
-
56
- A destructive tool (`delete`, `delete_graph`) shows its impact first and, in a client that supports elicitation, asks the person every time; a `confirm: true` the model supplies does not stand in for the answer. The graph tools are not journaled: they return no `undoId`, and `revert` cannot undo them.
57
-
58
- `query` and `breakdown` take the [query language](/docs/query/) verbatim.
59
-
60
- ## Options
61
-
62
- | Flag | Does | Default |
63
- | --- | --- | --- |
64
- | `--tools <profile>` | Offers one job's worth: `explore`, `migrate` or `seed`. A profile never grants writes. | `full` |
65
- | `--output-schema` | Advertises each tool's output shape in `tools/list`. | off |
66
- | `--config <path>` | The connections, each read-only unless `"writable": true`. | `tablewalk.json` in the working directory, then `~/.config/tablewalk/connections.json` |
67
-
68
- Every statement stops at 30 seconds (`sql` takes a lower `timeout_ms`) and
69
- when the client cancels. Counts stop at 10,000 and say so. `sql` and
70
- `explain` refuse the runtime's own tables (`__mistri_`) and, on PostgreSQL, the `mistri` schema.
71
-
72
- ## Common mistakes
73
-
74
- - The agent sees no `insert` or `update` → the connection is read-only; add
75
- `"writable": true` to it, and connect as a database role that may write.
76
- - `No config file at …` → a relative `--config` path resolved against the
77
- agent's working directory, not yours; give an absolute path.
78
- - An App that signs people in, or names its sources, is refused → database
79
- MCP serves no App; use [App MCP](/docs/app-api/) (`--app-mcp`) under a token.
80
-
81
- ## Related
82
-
83
- - [Query language](/docs/query/): what `query` and `breakdown` accept.
84
- - [Build with a coding agent](/docs/build-with-an-agent/): the skill, the loop and the prompt.
85
- - [App API](/docs/app-api/): an App's reads and commands as MCP tools, under a token.
86
- - [tablewalk, the database browser](/docs/database-browser/): where a tool's `link` lands.