@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.
- package/README.md +4 -3
- package/dist/client/assets/LayoutBuilder-MPzkVU2e.js.map +1 -1
- package/dist/client/assets/index-D2dHI6hR.js.map +1 -1
- package/dist/client/assets/shell-TreN_uLs.js.map +1 -1
- package/dist/docs/access-model.md +1 -1
- package/dist/docs/build-and-deploy.md +0 -1
- package/dist/docs/cli.md +1 -1
- package/dist/docs/glossary.md +3 -3
- package/dist/docs/query.md +9 -21
- package/dist/docs/status.md +3 -3
- package/dist/embed/react/chunks/LayoutBuilder-Cbxa_wve.js.map +1 -1
- package/dist/embed/react/chunks/app-0UZ1Re1k.js.map +1 -1
- package/dist/embed/react/chunks/page-Bx4o1kpQ.js.map +1 -1
- package/dist/embed/react/chunks/palette-Bb7Lf6eo.js.map +1 -1
- package/dist/embed/react/chunks/shell-DZRACiB9.js.map +1 -1
- package/dist/embed/react/chunks/write-BQO4CFc9.js.map +1 -1
- package/dist/embed/react/index.js +1 -1
- package/dist/server/build/dockerfile.js +1 -1
- package/dist/server/cli/usage.js +2 -2
- package/dist/ui/index.js +2 -2
- package/dist/ui/page.js +2 -2
- package/dist/ui/{shared-N4Ej8yRD.js → shared-1PD7TOTJ.js} +5 -5
- package/dist/ui/{shared-N4Ej8yRD.js.map → shared-1PD7TOTJ.js.map} +1 -1
- package/dist/ui/{shared-D5m86-4o.js → shared-1gMnOu9J.js} +6 -6
- package/dist/ui/{shared-D5m86-4o.js.map → shared-1gMnOu9J.js.map} +1 -1
- package/dist/ui/{shared-Ctaj8mR2.js → shared-5RQMi4BR.js} +3 -3
- package/dist/ui/{shared-Ctaj8mR2.js.map → shared-5RQMi4BR.js.map} +1 -1
- package/dist/ui/{shared-DpLeIATZ.js → shared-B-BUF9fx.js} +2 -2
- package/dist/ui/{shared-DpLeIATZ.js.map → shared-B-BUF9fx.js.map} +1 -1
- package/dist/ui/{shared-DWYnjItP.js → shared-B-MhiPIN.js} +9 -9
- package/dist/ui/{shared-DWYnjItP.js.map → shared-B-MhiPIN.js.map} +1 -1
- package/dist/ui/{shared-0fNuhSbG.js → shared-B07qIMlE.js} +5 -5
- package/dist/ui/{shared-0fNuhSbG.js.map → shared-B07qIMlE.js.map} +1 -1
- package/dist/ui/{shared-lYtMadRU.js → shared-B1SAS_J-.js} +3 -3
- package/dist/ui/{shared-lYtMadRU.js.map → shared-B1SAS_J-.js.map} +1 -1
- package/dist/ui/{shared-CpI0Y8M5.js → shared-B4jgU8h9.js} +6 -6
- package/dist/ui/{shared-CpI0Y8M5.js.map → shared-B4jgU8h9.js.map} +1 -1
- package/dist/ui/{shared-Cxu1c35l.js → shared-B5aBCUi7.js} +30 -30
- package/dist/ui/{shared-Cxu1c35l.js.map → shared-B5aBCUi7.js.map} +1 -1
- package/dist/ui/{shared-CAe-US1q.js → shared-B9H7_Pji.js} +5 -5
- package/dist/ui/{shared-CAe-US1q.js.map → shared-B9H7_Pji.js.map} +1 -1
- package/dist/ui/{shared-Q2bgBaYo.js → shared-BAXr20S-.js} +4 -4
- package/dist/ui/{shared-Q2bgBaYo.js.map → shared-BAXr20S-.js.map} +1 -1
- package/dist/ui/{shared-CyEefFFb.js → shared-BDDUzH-f.js} +19 -19
- package/dist/ui/{shared-CyEefFFb.js.map → shared-BDDUzH-f.js.map} +1 -1
- package/dist/ui/{shared-BdhPI6dq.js → shared-BGmkeDeW.js} +3 -3
- package/dist/ui/{shared-BdhPI6dq.js.map → shared-BGmkeDeW.js.map} +1 -1
- package/dist/ui/{shared-DONIpq2q.js → shared-BHCQ60yN.js} +2 -2
- package/dist/ui/{shared-DONIpq2q.js.map → shared-BHCQ60yN.js.map} +1 -1
- package/dist/ui/{shared-CNmaAv64.js → shared-BHsjawAG.js} +8 -8
- package/dist/ui/{shared-CNmaAv64.js.map → shared-BHsjawAG.js.map} +1 -1
- package/dist/ui/{shared-DgjU9kOy.js → shared-BIQuK_nq.js} +4 -4
- package/dist/ui/{shared-DgjU9kOy.js.map → shared-BIQuK_nq.js.map} +1 -1
- package/dist/ui/{shared-icSQAj21.js → shared-BOe4W2FI.js} +3 -3
- package/dist/ui/{shared-icSQAj21.js.map → shared-BOe4W2FI.js.map} +1 -1
- package/dist/ui/{shared-BlxoOJSk.js → shared-BPpC08ip.js} +3 -3
- package/dist/ui/{shared-BlxoOJSk.js.map → shared-BPpC08ip.js.map} +1 -1
- package/dist/ui/{shared-BtiFL37J.js → shared-BdA3LPCB.js} +2 -2
- package/dist/ui/{shared-BtiFL37J.js.map → shared-BdA3LPCB.js.map} +1 -1
- package/dist/ui/{shared-CvR94vn4.js → shared-Be3nbWsd.js} +11 -11
- package/dist/ui/{shared-CvR94vn4.js.map → shared-Be3nbWsd.js.map} +1 -1
- package/dist/ui/{shared-Bl_nF_IH.js → shared-Bf30ZLoS.js} +8 -4
- package/dist/ui/shared-Bf30ZLoS.js.map +1 -0
- package/dist/ui/{shared-DijrJ_V-.js → shared-BguP_BaR.js} +7 -7
- package/dist/ui/{shared-DijrJ_V-.js.map → shared-BguP_BaR.js.map} +1 -1
- package/dist/ui/{shared-DPAVoWY0.js → shared-BoLbc2WD.js} +17 -2
- package/dist/ui/{shared-DPAVoWY0.js.map → shared-BoLbc2WD.js.map} +1 -1
- package/dist/ui/{shared-BkdBTYwx.js → shared-BttyOW4W.js} +3 -3
- package/dist/ui/{shared-BkdBTYwx.js.map → shared-BttyOW4W.js.map} +1 -1
- package/dist/ui/{shared-CQWLz8uT.js → shared-BumxsBlA.js} +10 -10
- package/dist/ui/{shared-CQWLz8uT.js.map → shared-BumxsBlA.js.map} +1 -1
- package/dist/ui/{shared-Dzu7tFiC.js → shared-Bw73ktBk.js} +3 -3
- package/dist/ui/{shared-Dzu7tFiC.js.map → shared-Bw73ktBk.js.map} +1 -1
- package/dist/ui/{shared-BhAYErSx.js → shared-C1B0GH0e.js} +4 -4
- package/dist/ui/{shared-BhAYErSx.js.map → shared-C1B0GH0e.js.map} +1 -1
- package/dist/ui/{shared-BQJQcGgj.js → shared-C2FsyYr7.js} +4 -4
- package/dist/ui/{shared-BQJQcGgj.js.map → shared-C2FsyYr7.js.map} +1 -1
- package/dist/ui/{shared-B9lw2Ryh.js → shared-C2RU1qjv.js} +4 -4
- package/dist/ui/{shared-B9lw2Ryh.js.map → shared-C2RU1qjv.js.map} +1 -1
- package/dist/ui/{shared-DQYNI9wO.js → shared-C42f07hJ.js} +5 -5
- package/dist/ui/{shared-DQYNI9wO.js.map → shared-C42f07hJ.js.map} +1 -1
- package/dist/ui/{shared-CqCZ8wMY.js → shared-C4LkPCU4.js} +3 -3
- package/dist/ui/{shared-CqCZ8wMY.js.map → shared-C4LkPCU4.js.map} +1 -1
- package/dist/ui/{shared-BhtpgOpa.js → shared-C4wSfz6k.js} +9 -9
- package/dist/ui/{shared-BhtpgOpa.js.map → shared-C4wSfz6k.js.map} +1 -1
- package/dist/ui/{shared-BHc2Izkj.js → shared-C9DZtSFH.js} +2 -2
- package/dist/ui/{shared-BHc2Izkj.js.map → shared-C9DZtSFH.js.map} +1 -1
- package/dist/ui/{shared-DW1YuiNS.js → shared-CA52ClGo.js} +2 -2
- package/dist/ui/{shared-DW1YuiNS.js.map → shared-CA52ClGo.js.map} +1 -1
- package/dist/ui/{shared-BbSbilkh.js → shared-CBciTwm6.js} +9 -9
- package/dist/ui/{shared-BbSbilkh.js.map → shared-CBciTwm6.js.map} +1 -1
- package/dist/ui/{shared-C-J32eBn.js → shared-CL3RLKDA.js} +16 -16
- package/dist/ui/{shared-C-J32eBn.js.map → shared-CL3RLKDA.js.map} +1 -1
- package/dist/ui/{shared-Ck8S4OxW.js → shared-CLq3-_hW.js} +3 -3
- package/dist/ui/{shared-Ck8S4OxW.js.map → shared-CLq3-_hW.js.map} +1 -1
- package/dist/ui/{shared-Q5WefT7G.js → shared-CMjK-Ucd.js} +3 -3
- package/dist/ui/{shared-Q5WefT7G.js.map → shared-CMjK-Ucd.js.map} +1 -1
- package/dist/ui/{shared-D3MAuEA3.js → shared-CPjpSFGh.js} +2 -2
- package/dist/ui/{shared-D3MAuEA3.js.map → shared-CPjpSFGh.js.map} +1 -1
- package/dist/ui/{shared-VshXGwXP.js → shared-CSPhENq3.js} +2 -2
- package/dist/ui/{shared-VshXGwXP.js.map → shared-CSPhENq3.js.map} +1 -1
- package/dist/ui/{shared-DJrJaE73.js → shared-CZJE4Bmp.js} +3 -3
- package/dist/ui/{shared-DJrJaE73.js.map → shared-CZJE4Bmp.js.map} +1 -1
- package/dist/ui/{shared-D7ONOwI7.js → shared-C_BhUL2I.js} +7 -7
- package/dist/ui/{shared-D7ONOwI7.js.map → shared-C_BhUL2I.js.map} +1 -1
- package/dist/ui/{shared-j-2peBIB.js → shared-CbeujwdU.js} +4 -4
- package/dist/ui/{shared-j-2peBIB.js.map → shared-CbeujwdU.js.map} +1 -1
- package/dist/ui/{shared-D5GrOEa2.js → shared-Cbf-o4Dt.js} +4 -4
- package/dist/ui/{shared-D5GrOEa2.js.map → shared-Cbf-o4Dt.js.map} +1 -1
- package/dist/ui/{shared-HwiPIajr.js → shared-CdNmeNHh.js} +3 -3
- package/dist/ui/{shared-HwiPIajr.js.map → shared-CdNmeNHh.js.map} +1 -1
- package/dist/ui/{shared-ZCFt-CPb.js → shared-CdQOMD8J.js} +3 -3
- package/dist/ui/{shared-ZCFt-CPb.js.map → shared-CdQOMD8J.js.map} +1 -1
- package/dist/ui/{shared-ClhXSGGK.js → shared-CdiPYlTh.js} +2 -2
- package/dist/ui/{shared-ClhXSGGK.js.map → shared-CdiPYlTh.js.map} +1 -1
- package/dist/ui/{shared-DA8_pVRZ.js → shared-CepLAhwm.js} +2 -2
- package/dist/ui/{shared-DA8_pVRZ.js.map → shared-CepLAhwm.js.map} +1 -1
- package/dist/ui/{shared-BrYKjrnM.js → shared-Ch82h_Fu.js} +6 -6
- package/dist/ui/{shared-BrYKjrnM.js.map → shared-Ch82h_Fu.js.map} +1 -1
- package/dist/ui/{shared-C4UrE8Fb.js → shared-Chp88all.js} +3 -3
- package/dist/ui/{shared-C4UrE8Fb.js.map → shared-Chp88all.js.map} +1 -1
- package/dist/ui/{shared-CWa80DTO.js → shared-Ci16s2rN.js} +9 -9
- package/dist/ui/{shared-CWa80DTO.js.map → shared-Ci16s2rN.js.map} +1 -1
- package/dist/ui/{shared-tksTLD6Q.js → shared-CiqNkoE1.js} +5 -5
- package/dist/ui/{shared-tksTLD6Q.js.map → shared-CiqNkoE1.js.map} +1 -1
- package/dist/ui/{shared-yt7DjSrq.js → shared-CpMhOq8F.js} +2 -2
- package/dist/ui/{shared-yt7DjSrq.js.map → shared-CpMhOq8F.js.map} +1 -1
- package/dist/ui/{shared-Dm0z5WUl.js → shared-CrWv5JKH.js} +6 -6
- package/dist/ui/{shared-Dm0z5WUl.js.map → shared-CrWv5JKH.js.map} +1 -1
- package/dist/ui/{shared-CQL3FGHc.js → shared-Csfi3Pti.js} +2 -2
- package/dist/ui/{shared-CQL3FGHc.js.map → shared-Csfi3Pti.js.map} +1 -1
- package/dist/ui/{shared-BKNRbm-V.js → shared-CuZt26rm.js} +2 -2
- package/dist/ui/{shared-BKNRbm-V.js.map → shared-CuZt26rm.js.map} +1 -1
- package/dist/ui/{shared-Guq3upiR.js → shared-Cws_z-TS.js} +2 -2
- package/dist/ui/{shared-Guq3upiR.js.map → shared-Cws_z-TS.js.map} +1 -1
- package/dist/ui/{shared-Bw_qZeIj.js → shared-D1KWuCg6.js} +2 -2
- package/dist/ui/{shared-Bw_qZeIj.js.map → shared-D1KWuCg6.js.map} +1 -1
- package/dist/ui/{shared-CuCZKwXW.js → shared-D66ju_Cb.js} +23 -23
- package/dist/ui/{shared-CuCZKwXW.js.map → shared-D66ju_Cb.js.map} +1 -1
- package/dist/ui/{shared-DYfX7NSM.js → shared-DGaQZXnw.js} +2 -2
- package/dist/ui/{shared-DYfX7NSM.js.map → shared-DGaQZXnw.js.map} +1 -1
- package/dist/ui/{shared-B3Hp8tOv.js → shared-DHy41sET.js} +6 -6
- package/dist/ui/{shared-B3Hp8tOv.js.map → shared-DHy41sET.js.map} +1 -1
- package/dist/ui/{shared-CXyd7IKi.js → shared-DKEOMQ6l.js} +2 -2
- package/dist/ui/{shared-CXyd7IKi.js.map → shared-DKEOMQ6l.js.map} +1 -1
- package/dist/ui/{shared-Ccmc8YO0.js → shared-DSUICuaJ.js} +33 -33
- package/dist/ui/{shared-Ccmc8YO0.js.map → shared-DSUICuaJ.js.map} +1 -1
- package/dist/ui/{shared-CL2iw_js.js → shared-DUPMRoO0.js} +13 -13
- package/dist/ui/{shared-CL2iw_js.js.map → shared-DUPMRoO0.js.map} +1 -1
- package/dist/ui/{shared-Dtp4eRul.js → shared-DVfdm6ah.js} +2 -2
- package/dist/ui/{shared-Dtp4eRul.js.map → shared-DVfdm6ah.js.map} +1 -1
- package/dist/ui/{shared-BJ5Ex32G.js → shared-DXM7d7lJ.js} +3 -3
- package/dist/ui/{shared-BJ5Ex32G.js.map → shared-DXM7d7lJ.js.map} +1 -1
- package/dist/ui/{shared-BFr6ld0e.js → shared-DXbMlcev.js} +2 -2
- package/dist/ui/{shared-BFr6ld0e.js.map → shared-DXbMlcev.js.map} +1 -1
- package/dist/ui/{shared-BUp3jv-N.js → shared-D_SkPtJ9.js} +6 -6
- package/dist/ui/{shared-BUp3jv-N.js.map → shared-D_SkPtJ9.js.map} +1 -1
- package/dist/ui/{shared-CdNomVzH.js → shared-Dd21k2ic.js} +4 -4
- package/dist/ui/{shared-CdNomVzH.js.map → shared-Dd21k2ic.js.map} +1 -1
- package/dist/ui/{shared-gRMbxmpu.js → shared-Dh0nHtLZ.js} +8 -8
- package/dist/ui/{shared-gRMbxmpu.js.map → shared-Dh0nHtLZ.js.map} +1 -1
- package/dist/ui/{shared-BKGJgjog.js → shared-DkOdSpSK.js} +3 -3
- package/dist/ui/{shared-BKGJgjog.js.map → shared-DkOdSpSK.js.map} +1 -1
- package/dist/ui/{shared-BMsh72Uq.js → shared-Dkph5ckT.js} +2 -2
- package/dist/ui/{shared-BMsh72Uq.js.map → shared-Dkph5ckT.js.map} +1 -1
- package/dist/ui/{shared-Be1HpDOB.js → shared-Dl1_Nx--.js} +3 -3
- package/dist/ui/{shared-Be1HpDOB.js.map → shared-Dl1_Nx--.js.map} +1 -1
- package/dist/ui/{shared-BQIZWOoJ.js → shared-Dm0IGbAf.js} +2 -2
- package/dist/ui/{shared-BQIZWOoJ.js.map → shared-Dm0IGbAf.js.map} +1 -1
- package/dist/ui/{shared-DSUtcU5S.js → shared-DnIkTpPr.js} +5 -5
- package/dist/ui/{shared-DSUtcU5S.js.map → shared-DnIkTpPr.js.map} +1 -1
- package/dist/ui/{shared-DsxGbYlV.js → shared-Docl_0tq.js} +3 -3
- package/dist/ui/{shared-DsxGbYlV.js.map → shared-Docl_0tq.js.map} +1 -1
- package/dist/ui/{shared-DZskrV26.js → shared-DprrHC72.js} +2 -2
- package/dist/ui/{shared-DZskrV26.js.map → shared-DprrHC72.js.map} +1 -1
- package/dist/ui/{shared-Bmw43Hwf.js → shared-DyKsJTZs.js} +2 -2
- package/dist/ui/{shared-Bmw43Hwf.js.map → shared-DyKsJTZs.js.map} +1 -1
- package/dist/ui/{shared-BLG88Pya.js → shared-FO7vfI3F.js} +4 -4
- package/dist/ui/{shared-BLG88Pya.js.map → shared-FO7vfI3F.js.map} +1 -1
- package/dist/ui/{shared-DLSd80D1.js → shared-HalAVHjv.js} +3 -3
- package/dist/ui/{shared-DLSd80D1.js.map → shared-HalAVHjv.js.map} +1 -1
- package/dist/ui/{shared-D1mMBLdj.js → shared-JvcI-LWp.js} +15 -15
- package/dist/ui/{shared-D1mMBLdj.js.map → shared-JvcI-LWp.js.map} +1 -1
- package/dist/ui/{shared-C6Hv_4O0.js → shared-K7Ym27yg.js} +2 -2
- package/dist/ui/{shared-C6Hv_4O0.js.map → shared-K7Ym27yg.js.map} +1 -1
- package/dist/ui/{shared-B39ln7oi.js → shared-SzlnwfJO.js} +3 -3
- package/dist/ui/{shared-B39ln7oi.js.map → shared-SzlnwfJO.js.map} +1 -1
- package/dist/ui/{shared-DgPn_Jll.js → shared-TrGbd1FY.js} +3 -3
- package/dist/ui/{shared-DgPn_Jll.js.map → shared-TrGbd1FY.js.map} +1 -1
- package/dist/ui/{shared-DrFb-XtA.js → shared-WhbuObEW.js} +2 -2
- package/dist/ui/{shared-DrFb-XtA.js.map → shared-WhbuObEW.js.map} +1 -1
- package/dist/ui/{shared-DiFQljcq.js → shared-XcSKDp6N.js} +11 -11
- package/dist/ui/{shared-DiFQljcq.js.map → shared-XcSKDp6N.js.map} +1 -1
- package/dist/ui/{shared-CMAg58rY.js → shared-Z4uBJU6I.js} +7 -6
- package/dist/ui/shared-Z4uBJU6I.js.map +1 -0
- package/dist/ui/{shared-BnUptuUp.js → shared-bAgeiRa5.js} +2 -2
- package/dist/ui/{shared-BnUptuUp.js.map → shared-bAgeiRa5.js.map} +1 -1
- package/dist/ui/{shared-BxMvSjey.js → shared-cgXG7OgZ.js} +5 -5
- package/dist/ui/{shared-BxMvSjey.js.map → shared-cgXG7OgZ.js.map} +1 -1
- package/dist/ui/{shared-u4CG2kQJ.js → shared-eZ0SB_zm.js} +2 -2
- package/dist/ui/{shared-u4CG2kQJ.js.map → shared-eZ0SB_zm.js.map} +1 -1
- package/dist/ui/{shared-L90bWW8e.js → shared-frKFb79C.js} +2 -2
- package/dist/ui/{shared-L90bWW8e.js.map → shared-frKFb79C.js.map} +1 -1
- package/dist/ui/{shared-Dd34nhkw.js → shared-hAayNSRA.js} +3 -3
- package/dist/ui/{shared-Dd34nhkw.js.map → shared-hAayNSRA.js.map} +1 -1
- package/dist/ui/{shared-DzC64cpp.js → shared-j_J16p2B.js} +2 -2
- package/dist/ui/{shared-DzC64cpp.js.map → shared-j_J16p2B.js.map} +1 -1
- package/dist/ui/{shared-DX7HRIV-.js → shared-tqpl5N3g.js} +6 -6
- package/dist/ui/{shared-DX7HRIV-.js.map → shared-tqpl5N3g.js.map} +1 -1
- package/dist/ui/{shared-BS5dBMpA.js → shared-y-6_ZDts.js} +2 -2
- package/dist/ui/{shared-BS5dBMpA.js.map → shared-y-6_ZDts.js.map} +1 -1
- package/dist/ui/{shared-Cv5v_MP1.js → shared-zG6e1Rhz.js} +13 -13
- package/dist/ui/{shared-Cv5v_MP1.js.map → shared-zG6e1Rhz.js.map} +1 -1
- package/dist/ui/testing.js +1 -1
- package/package.json +4 -4
- package/dist/docs/cli-browser.md +0 -232
- package/dist/docs/database-browser.md +0 -115
- package/dist/docs/keyboard.md +0 -63
- package/dist/docs/mcp.md +0 -86
- package/dist/ui/shared-Bl_nF_IH.js.map +0 -1
- package/dist/ui/shared-CMAg58rY.js.map +0 -1
package/dist/ui/testing.js
CHANGED
|
@@ -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-
|
|
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.
|
|
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.
|
|
109
|
-
"@mistriwork/kit": "1.0.0-rc.
|
|
110
|
-
"@mistriwork/ui": "1.0.0-rc.
|
|
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",
|
package/dist/docs/cli-browser.md
DELETED
|
@@ -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
|
-

|
|
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.
|
package/dist/docs/keyboard.md
DELETED
|
@@ -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.
|