studiograph 1.3.48-next.141 → 1.3.48-next.142
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 +13 -9
- package/dist/agent/skills/interview/skill.md +0 -15
- package/dist/agent/tools/ops-tools.js +30 -23
- package/dist/agent/tools/ops-tools.js.map +1 -1
- package/dist/cli/commands/admin/audit-workspace.d.ts +23 -0
- package/dist/cli/commands/admin/audit-workspace.js +133 -0
- package/dist/cli/commands/admin/audit-workspace.js.map +1 -0
- package/dist/cli/commands/admin/audit.d.ts +21 -0
- package/dist/cli/commands/admin/audit.js +174 -0
- package/dist/cli/commands/admin/audit.js.map +1 -0
- package/dist/cli/commands/admin/backup.d.ts +54 -0
- package/dist/cli/commands/admin/backup.js +207 -0
- package/dist/cli/commands/admin/backup.js.map +1 -0
- package/dist/cli/commands/admin/folder.d.ts +11 -0
- package/dist/cli/commands/admin/folder.js +186 -0
- package/dist/cli/commands/admin/folder.js.map +1 -0
- package/dist/cli/commands/admin/index.d.ts +16 -0
- package/dist/cli/commands/admin/index.js +44 -0
- package/dist/cli/commands/admin/index.js.map +1 -0
- package/dist/cli/commands/admin/migrate.d.ts +56 -0
- package/dist/cli/commands/admin/migrate.js +263 -0
- package/dist/cli/commands/admin/migrate.js.map +1 -0
- package/dist/cli/commands/admin/restore.d.ts +24 -0
- package/dist/cli/commands/admin/restore.js +228 -0
- package/dist/cli/commands/admin/restore.js.map +1 -0
- package/dist/cli/commands/admin/secrets.d.ts +23 -0
- package/dist/cli/commands/admin/secrets.js +256 -0
- package/dist/cli/commands/admin/secrets.js.map +1 -0
- package/dist/cli/commands/admin/settings.d.ts +28 -0
- package/dist/cli/commands/admin/settings.js +284 -0
- package/dist/cli/commands/admin/settings.js.map +1 -0
- package/dist/cli/commands/admin/token.d.ts +42 -0
- package/dist/cli/commands/admin/token.js +126 -0
- package/dist/cli/commands/admin/token.js.map +1 -0
- package/dist/cli/commands/admin/transfer-ownership.d.ts +15 -0
- package/dist/cli/commands/admin/transfer-ownership.js +106 -0
- package/dist/cli/commands/admin/transfer-ownership.js.map +1 -0
- package/dist/cli/commands/admin/user.d.ts +11 -0
- package/dist/cli/commands/admin/user.js +187 -0
- package/dist/cli/commands/admin/user.js.map +1 -0
- package/dist/cli/commands/clone.js +22 -3
- package/dist/cli/commands/clone.js.map +1 -1
- package/dist/cli/commands/config.d.ts +23 -107
- package/dist/cli/commands/config.js +52 -260
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/connector.d.ts +10 -13
- package/dist/cli/commands/connector.js +16 -58
- package/dist/cli/commands/connector.js.map +1 -1
- package/dist/cli/commands/deploy.js +17 -17
- package/dist/cli/commands/deploy.js.map +1 -1
- package/dist/cli/commands/init.js +3 -25
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/redeploy.js +23 -10
- package/dist/cli/commands/redeploy.js.map +1 -1
- package/dist/cli/commands/reset.d.ts +22 -6
- package/dist/cli/commands/reset.js +132 -34
- package/dist/cli/commands/reset.js.map +1 -1
- package/dist/cli/commands/serve.js +20 -0
- package/dist/cli/commands/serve.js.map +1 -1
- package/dist/cli/commands/sync.js +66 -297
- package/dist/cli/commands/sync.js.map +1 -1
- package/dist/cli/crypto-bundle.d.ts +39 -0
- package/dist/cli/crypto-bundle.js +94 -0
- package/dist/cli/crypto-bundle.js.map +1 -0
- package/dist/cli/index.js +22 -30
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/railway-pin.d.ts +68 -0
- package/dist/cli/railway-pin.js +96 -0
- package/dist/cli/railway-pin.js.map +1 -0
- package/dist/cli/setup-wizard.js +4 -2
- package/dist/cli/setup-wizard.js.map +1 -1
- package/dist/core/graph.d.ts +18 -0
- package/dist/core/graph.js +41 -5
- package/dist/core/graph.js.map +1 -1
- package/dist/core/secrets/registry.js +15 -0
- package/dist/core/secrets/registry.js.map +1 -1
- package/dist/core/user-config.d.ts +23 -0
- package/dist/core/user-config.js +36 -0
- package/dist/core/user-config.js.map +1 -1
- package/dist/core/workspace-manager.d.ts +3 -0
- package/dist/core/workspace-manager.js +10 -1
- package/dist/core/workspace-manager.js.map +1 -1
- package/dist/server/routes/auth-api.js +33 -10
- package/dist/server/routes/auth-api.js.map +1 -1
- package/dist/server/routes/git-http.js +4 -4
- package/dist/server/routes/git-http.js.map +1 -1
- package/dist/server/routes/graph-api.js +23 -1
- package/dist/server/routes/graph-api.js.map +1 -1
- package/dist/server/routes/insights-api.js +8 -41
- package/dist/server/routes/insights-api.js.map +1 -1
- package/dist/services/vector-service.d.ts +61 -2
- package/dist/services/vector-service.js +137 -3
- package/dist/services/vector-service.js.map +1 -1
- package/dist/utils/version-checker.d.ts +12 -22
- package/dist/utils/version-checker.js +14 -104
- package/dist/utils/version-checker.js.map +1 -1
- package/dist/web/_app/immutable/assets/{0.m6KHz5Ct.css → 0.rk06bb50.css} +1 -1
- package/dist/web/_app/immutable/assets/CalendarView.2_5KwEnm.css +1 -0
- package/dist/web/_app/immutable/assets/{Filters.DtCty8E-.css → Filters.DW9xqrSh.css} +1 -1
- package/dist/web/_app/immutable/assets/{KanbanView.G3NZ0uHb.css → KanbanView.BykCv6-6.css} +1 -1
- package/dist/web/_app/immutable/assets/{TimelineView.CTJIfMlQ.css → TimelineView.D5Vr4f4p.css} +1 -1
- package/dist/web/_app/immutable/chunks/{DrKGybIx.js → -6gQBbFR.js} +1 -1
- package/dist/web/_app/immutable/chunks/{hkz4tVDj.js → 0DopuZap.js} +1 -1
- package/dist/web/_app/immutable/chunks/{C6VKh19i2.js → 1-LQKXfZ2.js} +1 -1
- package/dist/web/_app/immutable/chunks/25df8L_v2.js +1 -0
- package/dist/web/_app/immutable/chunks/7DYGAJq32.js +1 -0
- package/dist/web/_app/immutable/chunks/{DoqF9D6X.js → B49iyw-B.js} +1 -1
- package/dist/web/_app/immutable/chunks/B8WVxDoi.js +1 -0
- package/dist/web/_app/immutable/chunks/{CMTVWAWD2.js → B8ern2gu2.js} +1 -1
- package/dist/web/_app/immutable/chunks/BL_MJFAi2.js +1 -0
- package/dist/web/_app/immutable/chunks/{BPLOxwd9.js → BQkTMTc1.js} +1 -1
- package/dist/web/_app/immutable/chunks/BRYgZsoN.js +1 -0
- package/dist/web/_app/immutable/chunks/{Brmm2B1F.js → Ba4GBqJu.js} +3 -3
- package/dist/web/_app/immutable/chunks/BbvKJFF_.js +1 -0
- package/dist/web/_app/immutable/chunks/{DFI49Ojd.js → Beinnj2F.js} +1 -1
- package/dist/web/_app/immutable/chunks/{3dvegJyw.js → BfYCB5cu.js} +4 -4
- package/dist/web/_app/immutable/chunks/{Bx_sUbFW2.js → Bgd45X5W2.js} +1 -1
- package/dist/web/_app/immutable/chunks/{B0sOCB6J2.js → Bn5UWofR2.js} +2 -2
- package/dist/web/_app/immutable/chunks/BnRO5LhI.js +1 -0
- package/dist/web/_app/immutable/chunks/Bq0v_R5r.js +2 -0
- package/dist/web/_app/immutable/chunks/{uYkLLAve.js → BrVXfxYL.js} +1 -1
- package/dist/web/_app/immutable/chunks/{BNMvG3vo.js → BzHJlS8U.js} +1 -1
- package/dist/web/_app/immutable/chunks/{D_x_Qx4b.js → C0r3tbe6.js} +1 -1
- package/dist/web/_app/immutable/chunks/{DWAwVvou2.js → C2rrtlqJ2.js} +1 -1
- package/dist/web/_app/immutable/chunks/{Cpzw6IR0.js → C6wTxDUN.js} +1 -1
- package/dist/web/_app/immutable/chunks/{DFa-r0hK2.js → C758laSC2.js} +1 -1
- package/dist/web/_app/immutable/chunks/{BsRJ3k1d.js → C7dZPzrF.js} +1 -1
- package/dist/web/_app/immutable/chunks/C7ehUIgK.js +1 -0
- package/dist/web/_app/immutable/chunks/{DimvZ1rk.js → CDdrTEPh.js} +1 -1
- package/dist/web/_app/immutable/chunks/{1lBMH6iW2.js → CDjqTDPq.js} +1 -1
- package/dist/web/_app/immutable/chunks/{H2kmhAjb2.js → CEzdXAzx.js} +1 -1
- package/dist/web/_app/immutable/chunks/CKyVp7pa.js +1 -0
- package/dist/web/_app/immutable/chunks/{CZl1ot9W.js → CNDUnAll.js} +1 -1
- package/dist/web/_app/immutable/chunks/{CQmPiyUp.js → CQZjBhsQ.js} +1 -1
- package/dist/web/_app/immutable/chunks/{BL1oxZiW2.js → CQpwu0Rw.js} +1 -1
- package/dist/web/_app/immutable/chunks/Ca4KscMv2.js +1 -0
- package/dist/web/_app/immutable/chunks/{DnvUa5lw2.js → CeH-DnOb2.js} +1 -1
- package/dist/web/_app/immutable/chunks/{DGzcahbp.js → Cl7sUEPM.js} +1 -1
- package/dist/web/_app/immutable/chunks/{D3fuCoSW2.js → ClZaQQEO2.js} +1 -1
- package/dist/web/_app/immutable/chunks/CqpDNs5Z.js +1 -0
- package/dist/web/_app/immutable/chunks/{Ds-56rNC.js → Cspt7VYo.js} +1 -1
- package/dist/web/_app/immutable/chunks/{C_SyfpYe.js → CvnXl5Rr.js} +1 -1
- package/dist/web/_app/immutable/chunks/{D5hsPE8N.js → Cw3xz8bO.js} +1 -1
- package/dist/web/_app/immutable/chunks/{Dz1qECzz.js → Cx1nIj6x.js} +1 -1
- package/dist/web/_app/immutable/chunks/{DuZvkPqs2.js → CyiNWqN72.js} +1 -1
- package/dist/web/_app/immutable/chunks/Cz2FjHF6.js +1 -0
- package/dist/web/_app/immutable/chunks/{DfLl5AcG2.js → Czwjp7ip2.js} +1 -1
- package/dist/web/_app/immutable/chunks/{DKVEBJ-32.js → D5YwRLyY2.js} +1 -1
- package/dist/web/_app/immutable/chunks/D5ydJQMZ.js +1 -0
- package/dist/web/_app/immutable/chunks/{iyvdeKmj.js → D9FQivYK.js} +1 -1
- package/dist/web/_app/immutable/chunks/{DOEenJe1.js → DARmfkV3.js} +1 -1
- package/dist/web/_app/immutable/chunks/DBANz5d9.js +1 -0
- package/dist/web/_app/immutable/chunks/DEsRD0Kx.js +1 -0
- package/dist/web/_app/immutable/chunks/{BqbXE992.js → DFGbrpeM.js} +3 -3
- package/dist/web/_app/immutable/chunks/DFKfEAag2.js +1 -0
- package/dist/web/_app/immutable/chunks/DGBLBaQ_.js +1 -0
- package/dist/web/_app/immutable/chunks/{CQ-2yccd.js → DJpbNaAK.js} +1 -1
- package/dist/web/_app/immutable/chunks/{yvIeeb_42.js → DNgAQxDP.js} +1 -1
- package/dist/web/_app/immutable/chunks/DPD8EOKr2.js +2 -0
- package/dist/web/_app/immutable/chunks/{DjuziFSq.js → DPYXG0kj.js} +1 -1
- package/dist/web/_app/immutable/chunks/{4pIH0_tT.js → DRPw0stG.js} +1 -1
- package/dist/web/_app/immutable/chunks/{BLhU-GJf.js → DR_cAG4D.js} +1 -1
- package/dist/web/_app/immutable/chunks/{xaGl2eMs.js → DTBwqHgG.js} +1 -1
- package/dist/web/_app/immutable/chunks/{CfK1GcGP2.js → DYvLXLU62.js} +1 -1
- package/dist/web/_app/immutable/chunks/{Qqt3Iwci2.js → DZHwUnTK.js} +1 -1
- package/dist/web/_app/immutable/chunks/{Byqqksev.js → DZV_JkdQ2.js} +1 -1
- package/dist/web/_app/immutable/chunks/{C83yuW3m2.js → Dha-MiFJ2.js} +1 -1
- package/dist/web/_app/immutable/chunks/DnawuswL2.js +1 -0
- package/dist/web/_app/immutable/chunks/{BdDPs-DM.js → Dux-JxEb.js} +1 -1
- package/dist/web/_app/immutable/chunks/F4YWa-kI.js +1 -0
- package/dist/web/_app/immutable/chunks/{Ci3J2iwp2.js → GbgQ0w_p2.js} +1 -1
- package/dist/web/_app/immutable/chunks/L1BSvKbu2.js +1 -0
- package/dist/web/_app/immutable/chunks/kW0emxZs.js +1 -0
- package/dist/web/_app/immutable/chunks/{DEcbx4K4.js → u2YWWW0D.js} +1 -1
- package/dist/web/_app/immutable/chunks/{CqX-MwhK.js → ud-80bN1.js} +1 -1
- package/dist/web/_app/immutable/chunks/wQ835Iqq2.js +83 -0
- package/dist/web/_app/immutable/entry/app.DcFury20.js +2 -0
- package/dist/web/_app/immutable/entry/start.31Egd-4X.js +1 -0
- package/dist/web/_app/immutable/nodes/{0.CITPEjbR.js → 0.C15TiBjR.js} +2 -2
- package/dist/web/_app/immutable/nodes/{1.DduJECtM.js → 1.DBqnCp5N.js} +1 -1
- package/dist/web/_app/immutable/nodes/{10.Cui_JZxb.js → 10.BoogCEfh.js} +1 -1
- package/dist/web/_app/immutable/nodes/{11.UeCoxbD-.js → 11.B5C95aiY.js} +1 -1
- package/dist/web/_app/immutable/nodes/{12.B9WJ7c9l.js → 12.Bo39gio2.js} +1 -1
- package/dist/web/_app/immutable/nodes/{13.DqgCQkJL.js → 13.DEPiNgiO.js} +1 -1
- package/dist/web/_app/immutable/nodes/2.Dqhur93F.js +106 -0
- package/dist/web/_app/immutable/nodes/{3.DZhsdFdZ.js → 3.DXrb2xtu.js} +1 -1
- package/dist/web/_app/immutable/nodes/4.BR9ghNP-.js +2 -0
- package/dist/web/_app/immutable/nodes/{5.CMsuIqT6.js → 5.B-uwmPkj.js} +1 -1
- package/dist/web/_app/immutable/nodes/{6.CkWVXmyL.js → 6.CtKXZ-rA.js} +1 -1
- package/dist/web/_app/immutable/nodes/{7.BkYENY24.js → 7.CQ40ZEvw.js} +1 -1
- package/dist/web/_app/immutable/nodes/{8.DwdTJOgA.js → 8.DHbQ0NZN.js} +1 -1
- package/dist/web/_app/immutable/nodes/{9.DKZ3Sgx1.js → 9.5fODFcxN.js} +1 -1
- package/dist/web/_app/version.json +1 -1
- package/dist/web/index.html +14 -14
- package/package.json +1 -1
- package/dist/web/_app/immutable/assets/CalendarView.B_hbOAbM.css +0 -1
- package/dist/web/_app/immutable/chunks/-ioccU5s.js +0 -2
- package/dist/web/_app/immutable/chunks/BK0ggYL62.js +0 -1
- package/dist/web/_app/immutable/chunks/CA4g7cjE2.js +0 -1
- package/dist/web/_app/immutable/chunks/CF8PYvJA.js +0 -1
- package/dist/web/_app/immutable/chunks/CGKzi17I2.js +0 -1
- package/dist/web/_app/immutable/chunks/ConbjvYQ2.js +0 -1
- package/dist/web/_app/immutable/chunks/D0e8PVhd2.js +0 -1
- package/dist/web/_app/immutable/chunks/D8tqcUuZ.js +0 -1
- package/dist/web/_app/immutable/chunks/D9PNm1z6.js +0 -1
- package/dist/web/_app/immutable/chunks/DO51xrVU.js +0 -1
- package/dist/web/_app/immutable/chunks/DT8BrRgZ.js +0 -1
- package/dist/web/_app/immutable/chunks/DU5E-t7g.js +0 -1
- package/dist/web/_app/immutable/chunks/DYdnKpvC2.js +0 -2
- package/dist/web/_app/immutable/chunks/DfGc2Vbl.js +0 -1
- package/dist/web/_app/immutable/chunks/Dvmab3aw2.js +0 -1
- package/dist/web/_app/immutable/chunks/JKJTTpmw.js +0 -1
- package/dist/web/_app/immutable/chunks/LB81VOAq.js +0 -1
- package/dist/web/_app/immutable/chunks/SRjhqDO_.js +0 -1
- package/dist/web/_app/immutable/chunks/YyBqtYe3.js +0 -1
- package/dist/web/_app/immutable/chunks/gULFBDXq2.js +0 -83
- package/dist/web/_app/immutable/entry/app.Bx-aFaCy.js +0 -2
- package/dist/web/_app/immutable/entry/start.B58d5Pp4.js +0 -1
- package/dist/web/_app/immutable/nodes/2.CuIyeEFg.js +0 -106
- package/dist/web/_app/immutable/nodes/4.BOsIV0oS.js +0 -2
- /package/dist/web/_app/immutable/chunks/{ByqcwQIl.js → 0y07qhHv.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{C0Prwfom.js → 3Ddap93k.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{CU3SD7Uz.js → BAQqEuSW.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{CQzfplZr.js → BAwCCELm.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{C50qCxM2.js → BBVt71H0.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{BY2QDF2w2.js → BJDI0CVm2.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{Cd727XFk.js → BLZ_gUXk.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{DuxlyVaW.js → BM8OckeF.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{BRcFsc6v.js → BNjJ851o.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{DTsh-rY8.js → BQAzQWNc.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{BSz-Rs6A.js → BaRWyZJp.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{XMWvwY0B2.js → BdEEvMm72.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{Dpq3LnpX.js → BzdIirhc.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{BzeVNab0.js → C4ezn1Zj.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{Mj7EytRp.js → C4q5lyFs.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{C4_lca3x.js → C4qg8l0L2.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{DQKRvmzW.js → C4wPmO56.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{DxAl1xVd.js → CBNzpT1u.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{C9bebE2N.js → CBb1eVhA.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{_3ZPFErk.js → CCvrA-Jl.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{DllsEP8T.js → CLHWE-_g.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{C2A9kXuc.js → CQ-uDjOs.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{A6bT_qFs.js → CgE_evqe2.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{DazIzF5w.js → ChSBCyG-.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{Ct9eObjX2.js → ChdqjvhH2.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{Br5pOq3s2.js → CjiKtAHC2.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{DihOyosf2.js → CltHJTT32.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{UkaYCElu.js → CnXnpq3_.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{c-GqbtBN.js → Cw58x-kY.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{DW4yjnj8.js → D1f8I7Vy.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{BgGI_ZrC.js → D6KPkxcJ.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{DZZTHHPW.js → DP3v2upT.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{BuHDhb_3.js → Dsmkh2We.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{NKbVWJ8w.js → DzMSiHnE.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{Dwtqnses.js → E1QJ8qxh.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{DhF8zQQ3.js → EW0uyMSW.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{DPqDmSD4.js → YrKPpvrI2.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{DLG3I4qA.js → hEijmR6g.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{CsmcxOCI2.js → wR_dFW8K2.js} +0 -0
package/README.md
CHANGED
|
@@ -31,22 +31,27 @@ To create repos on GitHub during init:
|
|
|
31
31
|
studiograph init "My Studio" --github --github-org my-org
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
-
###
|
|
34
|
+
### Clone an Existing Workspace
|
|
35
35
|
|
|
36
36
|
```bash
|
|
37
|
-
studiograph
|
|
37
|
+
studiograph clone https://studiograph.example.com /path/to/local/copy
|
|
38
38
|
```
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
Authenticates as the workspace owner against a running Studiograph server,
|
|
41
|
+
mints a per-machine API token, persists it to `~/.studiograph/user.json`, and
|
|
42
|
+
clones every accessible repo. Subsequent `pull`/`push` runs are non-interactive
|
|
43
|
+
via the stored token.
|
|
41
44
|
|
|
42
|
-
###
|
|
45
|
+
### Boot the Workspace
|
|
43
46
|
|
|
44
47
|
```bash
|
|
45
48
|
cd my-studio
|
|
46
|
-
studiograph
|
|
49
|
+
studiograph serve
|
|
47
50
|
```
|
|
48
51
|
|
|
49
|
-
|
|
52
|
+
This starts the local HTTP server + opens the web UI. The web chat panel is the canonical agent surface: a richer chat UX, real-time graph view, and inline editor. On first boot you'll be prompted to set up an AI provider and model.
|
|
53
|
+
|
|
54
|
+
If you want a terminal-side agent (Claude Desktop / Cursor integration), run `studiograph mcp` — it exposes the same toolset over MCP.
|
|
50
55
|
|
|
51
56
|
## How It Works
|
|
52
57
|
|
|
@@ -118,14 +123,13 @@ There are 17 built-in entity types (project, meeting, person, organization, deci
|
|
|
118
123
|
| Command | Description |
|
|
119
124
|
|---------|-------------|
|
|
120
125
|
| `studiograph init <team-name> [dir]` | Initialize a new workspace |
|
|
121
|
-
| `studiograph
|
|
122
|
-
| `studiograph auth` | Manage GitHub authentication |
|
|
126
|
+
| `studiograph clone <url> [dir]` | Clone an existing workspace from a running server |
|
|
123
127
|
|
|
124
128
|
### Daily Workflow
|
|
125
129
|
|
|
126
130
|
| Command | Description |
|
|
127
131
|
|---------|-------------|
|
|
128
|
-
| `studiograph
|
|
132
|
+
| `studiograph serve` | Boot the local HTTP server + open the web UI |
|
|
129
133
|
| `studiograph pull` | Pull latest changes from remote |
|
|
130
134
|
| `studiograph push` | Push local commits to remote |
|
|
131
135
|
|
|
@@ -13,7 +13,6 @@ You are an interviewer. Your primary job is to build the user's organizational k
|
|
|
13
13
|
**At the start of every conversation**, assess the graph state by calling `list_entities` across all folders. Then:
|
|
14
14
|
|
|
15
15
|
- **If the workspace has no folders (or no entries):** This is a brand-new workspace. Introduce yourself as their knowledge graph assistant and begin the interview script. Start by asking for their website and organization name. Create the first folder as you go (see "Folder Structure" below).
|
|
16
|
-
- **If the only folder is `meridian-rebrand` (or the graph contains *only* the starter scaffold below):** Treat the workspace as empty. The scaffold is template data created by `studiograph init --demo`, not real user content. Introduce yourself, explain that the workspace currently has example data you'll help replace, and begin the interview by asking for their website and organization name. Offer to delete the `meridian-rebrand` folder once they've added real entries.
|
|
17
16
|
- **If the graph has baseline coverage but gaps remain:** Pick up where the gaps are. Ask the next most valuable question based on what's missing.
|
|
18
17
|
- **If the user asks something unrelated:** Handle their request, then return to the interview with your next question.
|
|
19
18
|
|
|
@@ -29,20 +28,6 @@ These two are often different — many workspaces are personal projects, side ve
|
|
|
29
28
|
|
|
30
29
|
Never derive organization facts from the email domain alone — the model may know about the firm and pattern-match plausible sentences ("strategic design firm doing data visualization"), but plausible isn't the same as accurate.
|
|
31
30
|
|
|
32
|
-
### Recognizing the starter scaffold (`--demo` workspaces only)
|
|
33
|
-
|
|
34
|
-
The default `studiograph init` creates a bare workspace with no scaffolded content — the interview is the primary onboarding surface. Developers and QA sometimes use `studiograph init --demo` to get a populated example project. If you see one folder named `meridian-rebrand` containing exactly these 8 entries:
|
|
35
|
-
|
|
36
|
-
- `meridian-health` (organization, client)
|
|
37
|
-
- `sarah-chen`, `alex-rivera` (people)
|
|
38
|
-
- `meridian-rebrand` (project)
|
|
39
|
-
- `2026-02-10-kickoff` (meeting)
|
|
40
|
-
- `dec-2026-001` (decision)
|
|
41
|
-
- `discovery-workshop` (process)
|
|
42
|
-
- `brand-deliverables-checklist` (guideline)
|
|
43
|
-
|
|
44
|
-
…do **not** treat it as the user's real graph. It's a template demonstrating how entries connect. Acknowledge it briefly when relevant ("your workspace has a sample folder showing how things connect — we'll build your real one alongside it") and focus the interview on the user's actual organization. Never ask them to elaborate on Meridian Health, Sarah Chen, or the rebrand project — those aren't theirs.
|
|
45
|
-
|
|
46
31
|
**Always end your response with the next interview question.** The interview is always running. You don't wait for the user to ask you to continue — you proactively drive the conversation forward.
|
|
47
32
|
|
|
48
33
|
The only time you don't ask a follow-up question is if the user explicitly says "stop", "that's enough", or "no more questions."
|
|
@@ -12,6 +12,7 @@ import { homedir } from 'os';
|
|
|
12
12
|
import { randomBytes } from 'crypto';
|
|
13
13
|
import { wrapToolResult } from './graph-tools.js';
|
|
14
14
|
import { provisionRequiredRailwaySecrets, } from '../../cli/railway-provisioning.js';
|
|
15
|
+
import { pinStartCommand, readOwnVersion } from '../../cli/railway-pin.js';
|
|
15
16
|
const RAILWAY_API = 'https://backboard.railway.com/graphql/v2';
|
|
16
17
|
async function railwayQuery(token, query, variables = {}) {
|
|
17
18
|
const res = await fetch(RAILWAY_API, {
|
|
@@ -61,12 +62,13 @@ export function createOpsTools(_workspacePath, workspaceConfig) {
|
|
|
61
62
|
const apiKey = randomBytes(24).toString('base64url');
|
|
62
63
|
const projectName = params.projectName
|
|
63
64
|
|| (workspaceConfig.team_name ? `${workspaceConfig.team_name} — Studiograph` : 'Studiograph');
|
|
64
|
-
//
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
65
|
+
// Pin to the exact CLI version, prerelease or not. The pre-A7
|
|
66
|
+
// non-prerelease branch used unpinned `npx studiograph`, which
|
|
67
|
+
// resolves to whatever @latest is at Railway boot — the same
|
|
68
|
+
// version-drift footgun the CLI deploy path had.
|
|
69
|
+
// See cli-owner-audit §6.2 + codex review appendix.
|
|
70
|
+
const pkgVersion = readOwnVersion();
|
|
71
|
+
const startCommand = `cd /workspace && npx --yes studiograph@${pkgVersion} serve`;
|
|
70
72
|
const query = (q, variables = {}) => railwayQuery(railwayToken, q, variables);
|
|
71
73
|
// Create project
|
|
72
74
|
const projectData = await query(`
|
|
@@ -83,12 +85,10 @@ export function createOpsTools(_workspacePath, workspaceConfig) {
|
|
|
83
85
|
mutation($input: ServiceCreateInput!) { serviceCreate(input: $input) { id name } }
|
|
84
86
|
`, { input: { projectId, name: 'studiograph' } });
|
|
85
87
|
const serviceId = serviceData.serviceCreate.id;
|
|
86
|
-
// Set start command
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
}
|
|
91
|
-
`, { serviceId, environmentId: envId, input: { startCommand } });
|
|
88
|
+
// Set start command via the shared pin helper. Throws on Railway
|
|
89
|
+
// API errors — failing fast keeps a half-built service from
|
|
90
|
+
// booting with no/wrong start command.
|
|
91
|
+
await pinStartCommand((q, v) => query(q, v ?? {}), { serviceId, environmentId: envId }, pkgVersion, { startCommand });
|
|
92
92
|
// Create volume
|
|
93
93
|
await query(`
|
|
94
94
|
mutation($input: VolumeCreateInput!) { volumeCreate(input: $input) { id } }
|
|
@@ -184,19 +184,26 @@ export function createOpsTools(_workspacePath, workspaceConfig) {
|
|
|
184
184
|
if (!environmentId) {
|
|
185
185
|
return wrapToolResult({ success: false, error: 'Could not determine Railway environment.' });
|
|
186
186
|
}
|
|
187
|
-
|
|
188
|
-
|
|
187
|
+
if (!serviceId) {
|
|
188
|
+
return wrapToolResult({ success: false, error: 'Could not determine Railway service.' });
|
|
189
|
+
}
|
|
190
|
+
// Update start command via the shared pin helper. Fatal on
|
|
191
|
+
// failure — the pre-A7 path swallowed errors, which left Railway
|
|
192
|
+
// running the old broken start command while the tool reported
|
|
193
|
+
// success. See cli-owner-audit §6.2 + codex review appendix.
|
|
194
|
+
const pkgVersion = readOwnVersion();
|
|
195
|
+
let startCommand;
|
|
189
196
|
try {
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
197
|
+
startCommand = await pinStartCommand((q, v) => railwayQuery(token, q, v), { serviceId, environmentId }, pkgVersion);
|
|
198
|
+
}
|
|
199
|
+
catch (err) {
|
|
200
|
+
return wrapToolResult({
|
|
201
|
+
success: false,
|
|
202
|
+
error: `Could not pin Railway start command to studiograph@${pkgVersion}: ` +
|
|
203
|
+
(err instanceof Error ? err.message : String(err)) +
|
|
204
|
+
'. Aborting redeploy so the service keeps running its prior version.',
|
|
205
|
+
});
|
|
198
206
|
}
|
|
199
|
-
catch { /* non-fatal — continue with redeploy */ }
|
|
200
207
|
// Find latest deployment and redeploy
|
|
201
208
|
const deployData = await railwayQuery(token, `
|
|
202
209
|
query($projectId: String!, $serviceId: String!, $environmentId: String!) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ops-tools.js","sourceRoot":"","sources":["../../../src/agent/tools/ops-tools.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ops-tools.js","sourceRoot":"","sources":["../../../src/agent/tools/ops-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* studiograph admin audit-workspace — read-only health aggregator.
|
|
3
|
+
*
|
|
4
|
+
* Wraps `analyzeGraphHealth()` from src/services/graph-maintenance.ts —
|
|
5
|
+
* the same service that powers the dashboard's health digest — and
|
|
6
|
+
* emits a markdown report. The point isn't to surface anything new; it's
|
|
7
|
+
* to give the owner a single command for the periodic sweep, instead of
|
|
8
|
+
* running `studiograph lint`, `studiograph orphans`, and chasing broken
|
|
9
|
+
* wikilinks by hand.
|
|
10
|
+
*
|
|
11
|
+
* Output is stdout by default (so it can be piped to `pbcopy`, `glow`,
|
|
12
|
+
* or `tee somewhere.md`). `--out <path>` writes to disk and prints just
|
|
13
|
+
* the summary table.
|
|
14
|
+
*/
|
|
15
|
+
import { Command } from 'commander';
|
|
16
|
+
import { type GraphHealthReport } from '../../../services/graph-maintenance.js';
|
|
17
|
+
export declare const adminAuditWorkspaceCommand: Command;
|
|
18
|
+
/**
|
|
19
|
+
* Render the report as a markdown document. Sections are emitted only
|
|
20
|
+
* when they have content — an empty workspace produces a tight one-page
|
|
21
|
+
* doc, a full audit produces a long one.
|
|
22
|
+
*/
|
|
23
|
+
export declare function renderMarkdown(report: GraphHealthReport, workspaceName: string): string;
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* studiograph admin audit-workspace — read-only health aggregator.
|
|
3
|
+
*
|
|
4
|
+
* Wraps `analyzeGraphHealth()` from src/services/graph-maintenance.ts —
|
|
5
|
+
* the same service that powers the dashboard's health digest — and
|
|
6
|
+
* emits a markdown report. The point isn't to surface anything new; it's
|
|
7
|
+
* to give the owner a single command for the periodic sweep, instead of
|
|
8
|
+
* running `studiograph lint`, `studiograph orphans`, and chasing broken
|
|
9
|
+
* wikilinks by hand.
|
|
10
|
+
*
|
|
11
|
+
* Output is stdout by default (so it can be piped to `pbcopy`, `glow`,
|
|
12
|
+
* or `tee somewhere.md`). `--out <path>` writes to disk and prints just
|
|
13
|
+
* the summary table.
|
|
14
|
+
*/
|
|
15
|
+
import { Command } from 'commander';
|
|
16
|
+
import { intro, outro, log, spinner } from '@clack/prompts';
|
|
17
|
+
import { writeFileSync } from 'fs';
|
|
18
|
+
import { resolve } from 'path';
|
|
19
|
+
import { Workspace } from '../../../core/workspace.js';
|
|
20
|
+
import { WorkspaceManager } from '../../../core/workspace-manager.js';
|
|
21
|
+
import { analyzeGraphHealth, } from '../../../services/graph-maintenance.js';
|
|
22
|
+
export const adminAuditWorkspaceCommand = new Command('audit-workspace')
|
|
23
|
+
.description('Read-only workspace health report (lint + orphans + stale + broken wikilinks)')
|
|
24
|
+
.option('--out <path>', 'Write the markdown report to <path> instead of stdout')
|
|
25
|
+
.option('--quiet', 'Suppress the intro/outro decorations (useful in pipes)')
|
|
26
|
+
.action(async (opts) => {
|
|
27
|
+
if (!opts.quiet)
|
|
28
|
+
intro('Studiograph workspace audit');
|
|
29
|
+
const workspace = new Workspace();
|
|
30
|
+
if (!workspace.isWorkspace()) {
|
|
31
|
+
if (!opts.quiet)
|
|
32
|
+
outro('Not a Studiograph workspace. Run from your workspace root.');
|
|
33
|
+
else
|
|
34
|
+
console.error('Not a Studiograph workspace.');
|
|
35
|
+
process.exit(1);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const config = await workspace.loadConfig();
|
|
39
|
+
const gitUser = { id: 'system', name: 'system', email: 'system@local' };
|
|
40
|
+
const manager = new WorkspaceManager(process.cwd(), config, gitUser);
|
|
41
|
+
const spin = opts.quiet ? null : spinner();
|
|
42
|
+
spin?.start('Aggregating health metrics');
|
|
43
|
+
const report = await analyzeGraphHealth(manager);
|
|
44
|
+
spin?.stop('Done');
|
|
45
|
+
const markdown = renderMarkdown(report, config.team_name ?? 'workspace');
|
|
46
|
+
if (opts.out) {
|
|
47
|
+
const path = resolve(opts.out);
|
|
48
|
+
writeFileSync(path, markdown, 'utf-8');
|
|
49
|
+
if (!opts.quiet)
|
|
50
|
+
log.success(`Wrote ${path}`);
|
|
51
|
+
printSummary(report);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
// Stdout path. clack's log helpers add prefixes that fight pipes, so
|
|
55
|
+
// use plain console.log for the report and reserve clack for the
|
|
56
|
+
// intro/outro framing (skipped under --quiet).
|
|
57
|
+
console.log(markdown);
|
|
58
|
+
}
|
|
59
|
+
if (!opts.quiet)
|
|
60
|
+
outro(`${report.summary.totalIssues} issue(s) across ${report.summary.totalEntities} entities.`);
|
|
61
|
+
});
|
|
62
|
+
function printSummary(report) {
|
|
63
|
+
const s = report.summary;
|
|
64
|
+
log.message(`Summary:\n` +
|
|
65
|
+
` entities: ${s.totalEntities}\n` +
|
|
66
|
+
` missing fields: ${s.missingFields}\n` +
|
|
67
|
+
` orphans: ${s.orphanEntities}\n` +
|
|
68
|
+
` stale: ${s.staleEntities}\n` +
|
|
69
|
+
` broken wikilinks: ${s.brokenWikilinks}\n` +
|
|
70
|
+
` total issues: ${s.totalIssues}`);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Render the report as a markdown document. Sections are emitted only
|
|
74
|
+
* when they have content — an empty workspace produces a tight one-page
|
|
75
|
+
* doc, a full audit produces a long one.
|
|
76
|
+
*/
|
|
77
|
+
export function renderMarkdown(report, workspaceName) {
|
|
78
|
+
const s = report.summary;
|
|
79
|
+
const lines = [];
|
|
80
|
+
lines.push(`# Workspace audit — ${workspaceName}`);
|
|
81
|
+
lines.push('');
|
|
82
|
+
lines.push(`_Generated ${report.generatedAt}_`);
|
|
83
|
+
lines.push('');
|
|
84
|
+
lines.push('## Summary');
|
|
85
|
+
lines.push('');
|
|
86
|
+
lines.push('| Metric | Count |');
|
|
87
|
+
lines.push('| --- | ---: |');
|
|
88
|
+
lines.push(`| Entities | ${s.totalEntities} |`);
|
|
89
|
+
lines.push(`| Total issues | ${s.totalIssues} |`);
|
|
90
|
+
lines.push(`| Missing-field issues | ${s.missingFields} |`);
|
|
91
|
+
lines.push(`| Orphan entities | ${s.orphanEntities} |`);
|
|
92
|
+
lines.push(`| Stale entities (>30d) | ${s.staleEntities} |`);
|
|
93
|
+
lines.push(`| Broken wikilinks | ${s.brokenWikilinks} |`);
|
|
94
|
+
lines.push('');
|
|
95
|
+
if (s.totalIssues === 0) {
|
|
96
|
+
lines.push('No issues found.');
|
|
97
|
+
return lines.join('\n') + '\n';
|
|
98
|
+
}
|
|
99
|
+
if (report.missingFields.length > 0) {
|
|
100
|
+
lines.push('## Missing fields');
|
|
101
|
+
lines.push('');
|
|
102
|
+
for (const issue of report.missingFields) {
|
|
103
|
+
lines.push(`- **${issue.entityType}** \`${issue.entityId}\` (${issue.repo}) — ${issue.missingFields.join(', ')}`);
|
|
104
|
+
}
|
|
105
|
+
lines.push('');
|
|
106
|
+
}
|
|
107
|
+
if (report.orphans.length > 0) {
|
|
108
|
+
lines.push('## Orphans (zero inbound references)');
|
|
109
|
+
lines.push('');
|
|
110
|
+
for (const o of report.orphans) {
|
|
111
|
+
lines.push(`- **${o.entityType}** \`${o.entityId}\` (${o.repo}) — ${o.name}`);
|
|
112
|
+
}
|
|
113
|
+
lines.push('');
|
|
114
|
+
}
|
|
115
|
+
if (report.stale.length > 0) {
|
|
116
|
+
lines.push('## Stale entities (no edits in >30 days)');
|
|
117
|
+
lines.push('');
|
|
118
|
+
for (const st of report.stale) {
|
|
119
|
+
lines.push(`- **${st.entityType}** \`${st.entityId}\` (${st.repo}) — ${st.name}, last touched ${st.lastUpdated} (${st.daysSinceUpdate}d ago)`);
|
|
120
|
+
}
|
|
121
|
+
lines.push('');
|
|
122
|
+
}
|
|
123
|
+
if (report.brokenLinks.length > 0) {
|
|
124
|
+
lines.push('## Broken wikilinks');
|
|
125
|
+
lines.push('');
|
|
126
|
+
for (const bl of report.brokenLinks) {
|
|
127
|
+
lines.push(`- **${bl.entityType}** \`${bl.entityId}\` (${bl.repo}) — ${bl.name} → \`[[${bl.brokenLink}]]\``);
|
|
128
|
+
}
|
|
129
|
+
lines.push('');
|
|
130
|
+
}
|
|
131
|
+
return lines.join('\n') + '\n';
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=audit-workspace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-workspace.js","sourceRoot":"","sources":["../../../../src/cli/commands/admin/audit-workspace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EACL,kBAAkB,GAEnB,MAAM,wCAAwC,CAAC;AAOhD,MAAM,CAAC,MAAM,0BAA0B,GAAG,IAAI,OAAO,CAAC,iBAAiB,CAAC;KACrE,WAAW,CAAC,+EAA+E,CAAC;KAC5F,MAAM,CAAC,cAAc,EAAE,uDAAuD,CAAC;KAC/E,MAAM,CAAC,SAAS,EAAE,wDAAwD,CAAC;KAC3E,MAAM,CAAC,KAAK,EAAE,IAAe,EAAE,EAAE;IAChC,IAAI,CAAC,IAAI,CAAC,KAAK;QAAE,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAEtD,MAAM,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;IAClC,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,KAAK,CAAC,4DAA4D,CAAC,CAAC;;YAChF,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,OAAO;IACT,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,UAAU,EAAE,CAAC;IAC5C,MAAM,OAAO,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IACxE,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAErE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IAC3C,IAAI,EAAE,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACjD,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAEnB,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,IAAI,WAAW,CAAC,CAAC;IAEzE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC/B,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;QAC9C,YAAY,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;SAAM,CAAC;QACN,qEAAqE;QACrE,iEAAiE;QACjE,+CAA+C;QAC/C,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACxB,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,KAAK;QAAE,KAAK,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,WAAW,oBAAoB,MAAM,CAAC,OAAO,CAAC,aAAa,YAAY,CAAC,CAAC;AACpH,CAAC,CAAC,CAAC;AAEL,SAAS,YAAY,CAAC,MAAyB;IAC7C,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;IACzB,GAAG,CAAC,OAAO,CACT,YAAY;QACV,sBAAsB,CAAC,CAAC,aAAa,IAAI;QACzC,sBAAsB,CAAC,CAAC,aAAa,IAAI;QACzC,sBAAsB,CAAC,CAAC,cAAc,IAAI;QAC1C,sBAAsB,CAAC,CAAC,aAAa,IAAI;QACzC,uBAAuB,CAAC,CAAC,eAAe,IAAI;QAC5C,sBAAsB,CAAC,CAAC,WAAW,EAAE,CACxC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,MAAyB,EAAE,aAAqB;IAC7E,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;IACzB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,uBAAuB,aAAa,EAAE,CAAC,CAAC;IACnD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC;IAChD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACjC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC7B,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC;IAChD,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC;IAClD,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC;IAC5D,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC;IACxD,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC;IAC7D,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC;IAC1D,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,IAAI,CAAC,CAAC,WAAW,KAAK,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC/B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACjC,CAAC;IAED,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACzC,KAAK,CAAC,IAAI,CACR,OAAO,KAAK,CAAC,UAAU,QAAQ,KAAK,CAAC,QAAQ,OAAO,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACtG,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,UAAU,QAAQ,CAAC,CAAC,QAAQ,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAChF,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;QACvD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,QAAQ,OAAO,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC,IAAI,kBAAkB,EAAE,CAAC,WAAW,KAAK,EAAE,CAAC,eAAe,QAAQ,CAAC,CAAC;QACjJ,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,UAAU,QAAQ,EAAE,CAAC,QAAQ,OAAO,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC,UAAU,MAAM,CAAC,CAAC;QAC/G,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* studiograph audit — read-only operator view of the append-only audit log.
|
|
3
|
+
*
|
|
4
|
+
* studiograph audit list [filters]
|
|
5
|
+
* --key <pattern> Filter by key name (exact match)
|
|
6
|
+
* --actor <user-id> Filter by actor user-id
|
|
7
|
+
* --action <action> Filter by action type
|
|
8
|
+
* (set|delete|test|describe|migrate|...)
|
|
9
|
+
* --since <iso-date> Only events at-or-after this time
|
|
10
|
+
* --until <iso-date> Only events at-or-before this time
|
|
11
|
+
* --limit <n> Page size (default 50, max 500)
|
|
12
|
+
* --offset <n> Pagination offset
|
|
13
|
+
* --format <table|json> Output format (default table)
|
|
14
|
+
*
|
|
15
|
+
* Audit reads aren't audited themselves (append-only log; reading
|
|
16
|
+
* doesn't change state). The UI used to surface this as a Settings →
|
|
17
|
+
* Audit Log tab; removed because filtering and exporting are much
|
|
18
|
+
* better in a terminal.
|
|
19
|
+
*/
|
|
20
|
+
import { Command } from 'commander';
|
|
21
|
+
export declare const auditCommand: Command;
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* studiograph audit — read-only operator view of the append-only audit log.
|
|
3
|
+
*
|
|
4
|
+
* studiograph audit list [filters]
|
|
5
|
+
* --key <pattern> Filter by key name (exact match)
|
|
6
|
+
* --actor <user-id> Filter by actor user-id
|
|
7
|
+
* --action <action> Filter by action type
|
|
8
|
+
* (set|delete|test|describe|migrate|...)
|
|
9
|
+
* --since <iso-date> Only events at-or-after this time
|
|
10
|
+
* --until <iso-date> Only events at-or-before this time
|
|
11
|
+
* --limit <n> Page size (default 50, max 500)
|
|
12
|
+
* --offset <n> Pagination offset
|
|
13
|
+
* --format <table|json> Output format (default table)
|
|
14
|
+
*
|
|
15
|
+
* Audit reads aren't audited themselves (append-only log; reading
|
|
16
|
+
* doesn't change state). The UI used to surface this as a Settings →
|
|
17
|
+
* Audit Log tab; removed because filtering and exporting are much
|
|
18
|
+
* better in a terminal.
|
|
19
|
+
*/
|
|
20
|
+
import { Command } from 'commander';
|
|
21
|
+
import { log } from '@clack/prompts';
|
|
22
|
+
import { homedir } from 'os';
|
|
23
|
+
import { existsSync } from 'fs';
|
|
24
|
+
import { join } from 'path';
|
|
25
|
+
import { SqliteEncryptedStore, loadMasterKey, loadPreviousMasterKey, setSecretStore, } from '../../../core/secrets/index.js';
|
|
26
|
+
function openStore() {
|
|
27
|
+
const loaded = loadMasterKey();
|
|
28
|
+
const previous = loadPreviousMasterKey();
|
|
29
|
+
const sgRoot = process.env.RAILWAY_ENVIRONMENT && existsSync('/workspace')
|
|
30
|
+
? '/workspace'
|
|
31
|
+
: join(homedir(), '.studiograph');
|
|
32
|
+
const dbPath = join(sgRoot, 'secrets.db');
|
|
33
|
+
if (!existsSync(dbPath)) {
|
|
34
|
+
log.error(`Secrets store not found at ${dbPath}`);
|
|
35
|
+
log.info('Run `studiograph init` first, or start `studiograph serve` to initialize the store.');
|
|
36
|
+
process.exit(1);
|
|
37
|
+
}
|
|
38
|
+
const store = new SqliteEncryptedStore({
|
|
39
|
+
dbPath,
|
|
40
|
+
masterKey: loaded.key,
|
|
41
|
+
previousMasterKey: previous,
|
|
42
|
+
});
|
|
43
|
+
setSecretStore(store);
|
|
44
|
+
return store;
|
|
45
|
+
}
|
|
46
|
+
function parseTs(v) {
|
|
47
|
+
if (!v)
|
|
48
|
+
return undefined;
|
|
49
|
+
const n = Number(v);
|
|
50
|
+
if (Number.isFinite(n) && n > 0)
|
|
51
|
+
return n;
|
|
52
|
+
const d = Date.parse(v);
|
|
53
|
+
return Number.isFinite(d) ? d : undefined;
|
|
54
|
+
}
|
|
55
|
+
function fmtTs(ms) {
|
|
56
|
+
return new Date(ms).toISOString();
|
|
57
|
+
}
|
|
58
|
+
function fmtActor(row) {
|
|
59
|
+
return row.actor_type === 'user'
|
|
60
|
+
? `user:${row.actor_user_id ?? '?'}`
|
|
61
|
+
: `system:${row.actor_system_id ?? '?'}`;
|
|
62
|
+
}
|
|
63
|
+
function fmtTable(rows) {
|
|
64
|
+
if (rows.length === 0)
|
|
65
|
+
return '';
|
|
66
|
+
const cols = Object.keys(rows[0]);
|
|
67
|
+
const widths = cols.map((c) => Math.max(c.length, ...rows.map((r) => r[c]?.length ?? 0)));
|
|
68
|
+
const header = cols.map((c, i) => c.padEnd(widths[i])).join(' ');
|
|
69
|
+
const sep = widths.map((w) => '─'.repeat(w)).join(' ');
|
|
70
|
+
const body = rows.map((r) => cols.map((c, i) => (r[c] ?? '').padEnd(widths[i])).join(' ')).join('\n');
|
|
71
|
+
return `${header}\n${sep}\n${body}`;
|
|
72
|
+
}
|
|
73
|
+
export const auditCommand = new Command('audit')
|
|
74
|
+
.description('Read the append-only audit log (formerly the Settings → Audit Log tab)');
|
|
75
|
+
auditCommand
|
|
76
|
+
.command('list')
|
|
77
|
+
.description('List recent audit events, newest first. Filters compose with AND.')
|
|
78
|
+
.option('--key <key>', 'Filter by key name (exact match)')
|
|
79
|
+
.option('--actor <user-id>', 'Filter by actor user-id')
|
|
80
|
+
.option('--actor-type <type>', 'Filter by actor type: user or system')
|
|
81
|
+
.option('--action <action>', 'Filter by action (set, delete, test, describe, migrate, decrypt_fail, rotate_master, bundle_export, bundle_import)')
|
|
82
|
+
.option('--since <iso-date>', 'Only events at-or-after this time (ISO date or epoch ms)')
|
|
83
|
+
.option('--until <iso-date>', 'Only events at-or-before this time (ISO date or epoch ms)')
|
|
84
|
+
.option('--limit <n>', 'Page size, default 50, max 500', '50')
|
|
85
|
+
.option('--offset <n>', 'Pagination offset', '0')
|
|
86
|
+
.option('--format <format>', 'Output format: table (default) or json', 'table')
|
|
87
|
+
.action(async (opts) => {
|
|
88
|
+
const store = openStore();
|
|
89
|
+
try {
|
|
90
|
+
const where = [];
|
|
91
|
+
const params = [];
|
|
92
|
+
if (opts.key) {
|
|
93
|
+
where.push('key = ?');
|
|
94
|
+
params.push(opts.key);
|
|
95
|
+
}
|
|
96
|
+
if (opts.actor) {
|
|
97
|
+
where.push('actor_user_id = ?');
|
|
98
|
+
params.push(opts.actor);
|
|
99
|
+
}
|
|
100
|
+
if (opts.actorType) {
|
|
101
|
+
where.push('actor_type = ?');
|
|
102
|
+
params.push(opts.actorType);
|
|
103
|
+
}
|
|
104
|
+
if (opts.action) {
|
|
105
|
+
where.push('action = ?');
|
|
106
|
+
params.push(opts.action);
|
|
107
|
+
}
|
|
108
|
+
const since = parseTs(opts.since);
|
|
109
|
+
const until = parseTs(opts.until);
|
|
110
|
+
if (since !== undefined) {
|
|
111
|
+
where.push('ts >= ?');
|
|
112
|
+
params.push(since);
|
|
113
|
+
}
|
|
114
|
+
if (until !== undefined) {
|
|
115
|
+
where.push('ts <= ?');
|
|
116
|
+
params.push(until);
|
|
117
|
+
}
|
|
118
|
+
const limit = Math.min(Math.max(parseInt(opts.limit, 10) || 50, 1), 500);
|
|
119
|
+
const offset = Math.max(parseInt(opts.offset, 10) || 0, 0);
|
|
120
|
+
const sql = `SELECT id, ts, actor_type, actor_user_id, actor_system_id, action,
|
|
121
|
+
key, success, ip, user_agent, detail_json
|
|
122
|
+
FROM audit_log
|
|
123
|
+
${where.length ? `WHERE ${where.join(' AND ')}` : ''}
|
|
124
|
+
ORDER BY ts DESC
|
|
125
|
+
LIMIT ? OFFSET ?`;
|
|
126
|
+
// `store.db` is private; the route code already reaches in via `(store as any).db`
|
|
127
|
+
// and we follow the same pattern. Refactoring the store to expose a public
|
|
128
|
+
// query helper is out of scope for this CLI.
|
|
129
|
+
const rows = (store.db
|
|
130
|
+
.prepare(sql)
|
|
131
|
+
.all(...params, limit, offset));
|
|
132
|
+
const totalRow = (store.db
|
|
133
|
+
.prepare(`SELECT COUNT(*) AS n FROM audit_log ${where.length ? `WHERE ${where.join(' AND ')}` : ''}`)
|
|
134
|
+
.get(...params));
|
|
135
|
+
if (opts.format === 'json') {
|
|
136
|
+
console.log(JSON.stringify({
|
|
137
|
+
total: totalRow.n,
|
|
138
|
+
limit,
|
|
139
|
+
offset,
|
|
140
|
+
items: rows.map((r) => ({
|
|
141
|
+
id: r.id,
|
|
142
|
+
ts: r.ts,
|
|
143
|
+
actor_type: r.actor_type,
|
|
144
|
+
actor_user_id: r.actor_user_id,
|
|
145
|
+
actor_system_id: r.actor_system_id,
|
|
146
|
+
action: r.action,
|
|
147
|
+
key: r.key,
|
|
148
|
+
success: !!r.success,
|
|
149
|
+
ip: r.ip,
|
|
150
|
+
user_agent: r.user_agent,
|
|
151
|
+
detail: r.detail_json ? JSON.parse(r.detail_json) : null,
|
|
152
|
+
})),
|
|
153
|
+
}, null, 2));
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
if (rows.length === 0) {
|
|
157
|
+
log.info(`No audit events found${where.length ? ' for the given filters' : ''}.`);
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
const tableRows = rows.map((r) => ({
|
|
161
|
+
time: fmtTs(r.ts),
|
|
162
|
+
actor: fmtActor(r),
|
|
163
|
+
action: r.action,
|
|
164
|
+
key: r.key ?? '—',
|
|
165
|
+
result: r.success ? 'ok' : 'fail',
|
|
166
|
+
}));
|
|
167
|
+
console.log(fmtTable(tableRows));
|
|
168
|
+
console.log(`\nShowing ${rows.length} of ${totalRow.n} events (offset=${offset}, limit=${limit})`);
|
|
169
|
+
}
|
|
170
|
+
finally {
|
|
171
|
+
store.close();
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
//# sourceMappingURL=audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../../../src/cli/commands/admin/audit.ts"],"names":[],"mappings":"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"}
|