studiograph 1.3.48-next.170 → 1.3.48-next.171
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/dist/agent/prompts/system.md +1 -0
- package/dist/core/commit-messages.d.ts +57 -0
- package/dist/core/commit-messages.js +85 -0
- package/dist/core/commit-messages.js.map +1 -0
- package/dist/core/field-library.d.ts +62 -0
- package/dist/core/field-library.js +129 -0
- package/dist/core/field-library.js.map +1 -0
- package/dist/core/graph.d.ts +34 -0
- package/dist/core/graph.js +118 -22
- package/dist/core/graph.js.map +1 -1
- package/dist/core/history-diff.d.ts +35 -0
- package/dist/core/history-diff.js +114 -0
- package/dist/core/history-diff.js.map +1 -0
- package/dist/core/schema-registry.d.ts +7 -0
- package/dist/core/schema-registry.js +9 -0
- package/dist/core/schema-registry.js.map +1 -1
- package/dist/mcp/tools.js +56 -0
- package/dist/mcp/tools.js.map +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/routes/auth-api.js +2 -2
- package/dist/server/routes/auth-api.js.map +1 -1
- package/dist/server/routes/event-ingest-api.d.ts +2 -2
- package/dist/server/routes/event-ingest-api.js +4 -4
- package/dist/server/routes/event-ingest-api.js.map +1 -1
- package/dist/server/routes/field-library-api.d.ts +28 -0
- package/dist/server/routes/field-library-api.js +126 -0
- package/dist/server/routes/field-library-api.js.map +1 -0
- package/dist/server/routes/graph-api.js +72 -4
- package/dist/server/routes/graph-api.js.map +1 -1
- package/dist/server/session-manager.js +9 -5
- package/dist/server/session-manager.js.map +1 -1
- package/dist/services/event-processor.d.ts +4 -4
- package/dist/services/event-processor.js +2 -2
- package/dist/web/_app/immutable/assets/0.DGQkw-DV.css +2 -0
- package/dist/web/_app/immutable/assets/2.mm3a1OW0.css +1 -0
- package/dist/web/_app/immutable/assets/{3.BdNa1z-b.css → 3.CRpWyOfW.css} +1 -1
- package/dist/web/_app/immutable/assets/4.aABm4N6t.css +1 -0
- package/dist/web/_app/immutable/assets/AgentOverlay.BnqDGRGF.css +1 -0
- package/dist/web/_app/immutable/assets/AssetManagerModal.BKJfPAPk.css +1 -0
- package/dist/web/_app/immutable/assets/CalendarView.bNewSxkH.css +1 -0
- package/dist/web/_app/immutable/assets/FolderMembersPanel.DX1oBeF_.css +1 -0
- package/dist/web/_app/immutable/assets/GalleryView.DgvSjS0I.css +1 -0
- package/dist/web/_app/immutable/assets/{GraphView.BHnGIltS.css → GraphView.BJtGL9py.css} +1 -1
- package/dist/web/_app/immutable/assets/KanbanView.D0QbZFd6.css +1 -0
- package/dist/web/_app/immutable/assets/SettingsDialog.CqPGXSmw.css +1 -0
- package/dist/web/_app/immutable/assets/TimelineView.DA-H6dvv.css +1 -0
- package/dist/web/_app/immutable/assets/WorkspaceView.BS1ildu7.css +1 -0
- package/dist/web/_app/immutable/assets/entity-row.vV0ne105.css +1 -0
- package/dist/web/_app/immutable/assets/{inline-list.DORLo4xF.css → inline-list.cqga56xT.css} +1 -1
- package/dist/web/_app/immutable/assets/list-columns.DCMVmy_Q.css +1 -0
- package/dist/web/_app/immutable/assets/speech-dictation.C5CYFhS1.css +1 -0
- package/dist/web/_app/immutable/chunks/0iDDDyaZ.js +1 -0
- package/dist/web/_app/immutable/chunks/19s92Yak2.js +1 -0
- package/dist/web/_app/immutable/chunks/3UsK_Qzm2.js +1 -0
- package/dist/web/_app/immutable/chunks/4ArXVQe2.js +1 -0
- package/dist/web/_app/immutable/chunks/{DEyd-YQw.js → 7Bu427my2.js} +1 -1
- package/dist/web/_app/immutable/chunks/96h3ktuk.js +1 -0
- package/dist/web/_app/immutable/chunks/B-V5eMSw2.js +1 -0
- package/dist/web/_app/immutable/chunks/B-i9_YVM.js +1 -0
- package/dist/web/_app/immutable/chunks/B15-RpNm2.js +1 -0
- package/dist/web/_app/immutable/chunks/B15-kvCe2.js +1 -0
- package/dist/web/_app/immutable/chunks/B3wOM4jg2.js +1 -0
- package/dist/web/_app/immutable/chunks/B5fFhYtz2.js +1 -0
- package/dist/web/_app/immutable/chunks/B64x3jpX.js +1 -0
- package/dist/web/_app/immutable/chunks/B7EOyBxX2.js +2 -0
- package/dist/web/_app/immutable/chunks/BBxt8lpa.js +1 -0
- package/dist/web/_app/immutable/chunks/{ClfZwNp32.js → BCaRi2AF.js} +1 -1
- package/dist/web/_app/immutable/chunks/BFPzL-aO2.js +2 -0
- package/dist/web/_app/immutable/chunks/BGtFGBgI2.js +1 -0
- package/dist/web/_app/immutable/chunks/BH58LMG2.js +1 -0
- package/dist/web/_app/immutable/chunks/{BY9JAHZa.js → BM_vIwVC.js} +1 -1
- package/dist/web/_app/immutable/chunks/{yfO96jud.js → BOPjB7kN.js} +1 -1
- package/dist/web/_app/immutable/chunks/{DGYUucD9.js → BPv8O4892.js} +1 -1
- package/dist/web/_app/immutable/chunks/{ABFIeViK2.js → BQTIFpuf2.js} +1 -1
- package/dist/web/_app/immutable/chunks/{CI0x_Zvz2.js → BQULA6er.js} +1 -1
- package/dist/web/_app/immutable/chunks/{C24IUqw0.js → BQW-EDgP2.js} +1 -1
- package/dist/web/_app/immutable/chunks/BR6jMpLB.js +1 -0
- package/dist/web/_app/immutable/chunks/BXQQ0GB32.js +1 -0
- package/dist/web/_app/immutable/chunks/BddNmQ8j.js +1 -0
- package/dist/web/_app/immutable/chunks/{D25CpUpa.js → BeuunHPO.js} +1 -1
- package/dist/web/_app/immutable/chunks/{D-qftGmx.js → BlyFGPFV.js} +1 -1
- package/dist/web/_app/immutable/chunks/Bo5dghSu.js +3 -0
- package/dist/web/_app/immutable/chunks/{CQ3GQmfw.js → BqcCizr3.js} +1 -1
- package/dist/web/_app/immutable/chunks/BuAQ4gS42.js +2 -0
- package/dist/web/_app/immutable/chunks/{eJNbcV2s.js → BuKi0vpu2.js} +7 -7
- package/dist/web/_app/immutable/chunks/ByidpUhu.js +1 -0
- package/dist/web/_app/immutable/chunks/C0OB0h1P2.js +1 -0
- package/dist/web/_app/immutable/chunks/C35TIzaB.js +1 -0
- package/dist/web/_app/immutable/chunks/C5kot1lN.js +1 -0
- package/dist/web/_app/immutable/chunks/C6Nx0jpM.js +1 -0
- package/dist/web/_app/immutable/chunks/C94TJqPI.js +1 -0
- package/dist/web/_app/immutable/chunks/CA7ecmeY2.js +2 -0
- package/dist/web/_app/immutable/chunks/CByf8WiN.js +7 -0
- package/dist/web/_app/immutable/chunks/{CdWZV3Mv.js → CCLR-AJL2.js} +1 -1
- package/dist/web/_app/immutable/chunks/{CW-tcm9w.js → CD0X7XPW.js} +1 -1
- package/dist/web/_app/immutable/chunks/CDJ82zlI.js +2 -0
- package/dist/web/_app/immutable/chunks/{BQ7FQO6Y.js → CDTjuBSm.js} +1 -1
- package/dist/web/_app/immutable/chunks/CQyUodsY.js +1 -0
- package/dist/web/_app/immutable/chunks/{BLbv79id.js → CSUrYOis.js} +1 -1
- package/dist/web/_app/immutable/chunks/{CcTkKa7t.js → CUhnIstJ.js} +1 -1
- package/dist/web/_app/immutable/chunks/CWPVSKyY.js +5 -0
- package/dist/web/_app/immutable/chunks/CXTGng1_2.js +1 -0
- package/dist/web/_app/immutable/chunks/CYTTTma0.js +3 -0
- package/dist/web/_app/immutable/chunks/CcZKOs41.js +1 -0
- package/dist/web/_app/immutable/chunks/Ccw1BhrZ.js +2 -0
- package/dist/web/_app/immutable/chunks/CeYA-rQx.js +64 -0
- package/dist/web/_app/immutable/chunks/CfP2aM8d.js +1 -0
- package/dist/web/_app/immutable/chunks/{DDADdPaI.js → CiQvzGjv2.js} +1 -1
- package/dist/web/_app/immutable/chunks/Cj7s8rG9.js +1 -0
- package/dist/web/_app/immutable/chunks/CkLfUXwy.js +1 -0
- package/dist/web/_app/immutable/chunks/CokE4L8B.js +1 -0
- package/dist/web/_app/immutable/chunks/CtyoGOAQ.js +3 -0
- package/dist/web/_app/immutable/chunks/D00MFB9_2.js +1 -0
- package/dist/web/_app/immutable/chunks/D0h08Lty2.js +1 -0
- package/dist/web/_app/immutable/chunks/D41CbXmM.js +1 -0
- package/dist/web/_app/immutable/chunks/D9JLvq532.js +1 -0
- package/dist/web/_app/immutable/chunks/D9nktsjF2.js +2 -0
- package/dist/web/_app/immutable/chunks/DAXW5iLp.js +1 -0
- package/dist/web/_app/immutable/chunks/DBq7LEsG.js +1 -0
- package/dist/web/_app/immutable/chunks/{DVs2iynz.js → DBzQ8LyQ2.js} +1 -1
- package/dist/web/_app/immutable/chunks/DCohXeRP.js +1 -0
- package/dist/web/_app/immutable/chunks/{D0BO6Lbw.js → DOmH4G9o.js} +1 -1
- package/dist/web/_app/immutable/chunks/DQMWa2t72.js +1 -0
- package/dist/web/_app/immutable/chunks/DRZ-it352.js +1 -0
- package/dist/web/_app/immutable/chunks/DTCHhxD5.js +1 -0
- package/dist/web/_app/immutable/chunks/{CfwZNkcR.js → DWygwzcO.js} +1 -1
- package/dist/web/_app/immutable/chunks/{DtX0WmTj.js → DYXDRmoo.js} +1 -1
- package/dist/web/_app/immutable/chunks/Da_yN2Ht.js +1 -0
- package/dist/web/_app/immutable/chunks/{CAnnQJhK.js → DaoOQFPb.js} +1 -1
- package/dist/web/_app/immutable/chunks/DccAGnuK2.js +9 -0
- package/dist/web/_app/immutable/chunks/{BJ1WyX5l.js → DdLkNvPf.js} +1 -1
- package/dist/web/_app/immutable/chunks/DiMQob8p.js +1 -0
- package/dist/web/_app/immutable/chunks/DiQJ9DLy.js +1 -0
- package/dist/web/_app/immutable/chunks/DkHQgD3y2.js +1 -0
- package/dist/web/_app/immutable/chunks/DlZS_4WM2.js +1 -0
- package/dist/web/_app/immutable/chunks/Dng3OcRd2.js +1 -0
- package/dist/web/_app/immutable/chunks/DpzG2mVI.js +1 -0
- package/dist/web/_app/immutable/chunks/Dr3R0gGT.js +1 -0
- package/dist/web/_app/immutable/chunks/{CkX_FgeP.js → DvJSCDuZ2.js} +1 -1
- package/dist/web/_app/immutable/chunks/{sEj1Ztgn.js → DvPuaTCl2.js} +1 -1
- package/dist/web/_app/immutable/chunks/JImE4-DI2.js +1 -0
- package/dist/web/_app/immutable/chunks/MgrdPbGs2.js +1 -0
- package/dist/web/_app/immutable/chunks/{Brnt5OaR.js → O2UFag42.js} +1 -1
- package/dist/web/_app/immutable/chunks/{BFdSOeRg2.js → RmiWpCin2.js} +1 -1
- package/dist/web/_app/immutable/chunks/WiH7OUQr.js +2 -0
- package/dist/web/_app/immutable/chunks/d58PT3PS2.js +1 -0
- package/dist/web/_app/immutable/chunks/{Buq5akT7.js → g09ZrevW.js} +1 -1
- package/dist/web/_app/immutable/chunks/jKb0RD872.js +2692 -0
- package/dist/web/_app/immutable/chunks/tl4AcjN9.js +1 -0
- package/dist/web/_app/immutable/chunks/tnkL7L9G.js +1 -0
- package/dist/web/_app/immutable/chunks/uuFM-ygL.js +1 -0
- package/dist/web/_app/immutable/chunks/v7me-ydg.js +2 -0
- package/dist/web/_app/immutable/chunks/zSUqg_cy.js +1 -0
- package/dist/web/_app/immutable/chunks/zl16E4yc2.js +1 -0
- package/dist/web/_app/immutable/entry/app.DV-zp0tj.js +2 -0
- package/dist/web/_app/immutable/entry/start.DxFMLtA7.js +1 -0
- package/dist/web/_app/immutable/nodes/0.Cz0_hC1-.js +2 -0
- package/dist/web/_app/immutable/nodes/1.DKtZV2-c.js +1 -0
- package/dist/web/_app/immutable/nodes/10.CGio7Net.js +1 -0
- package/dist/web/_app/immutable/nodes/11.CVxC2UVn.js +1 -0
- package/dist/web/_app/immutable/nodes/12.pyWMMkTO.js +1 -0
- package/dist/web/_app/immutable/nodes/13.CRR0TiNW.js +1 -0
- package/dist/web/_app/immutable/nodes/2.CCAD9dnU.js +109 -0
- package/dist/web/_app/immutable/nodes/3.Cg8aMpJq.js +2 -0
- package/dist/web/_app/immutable/nodes/4.DKNbPyas.js +14 -0
- package/dist/web/_app/immutable/nodes/5.GW8XH5v_.js +1 -0
- package/dist/web/_app/immutable/nodes/6.DobndCeQ.js +1 -0
- package/dist/web/_app/immutable/nodes/7.74DM3wDX.js +1 -0
- package/dist/web/_app/immutable/nodes/8.DiaMprhB.js +1 -0
- package/dist/web/_app/immutable/nodes/9.DJIMgMx-.js +1 -0
- package/dist/web/_app/version.json +1 -1
- package/dist/web/index.html +26 -36
- package/package.json +2 -1
- package/dist/agent/tools/message-tools.d.ts +0 -44
- package/dist/agent/tools/message-tools.js +0 -98
- package/dist/agent/tools/message-tools.js.map +0 -1
- package/dist/cli/commands/audit.d.ts +0 -21
- package/dist/cli/commands/audit.js +0 -174
- package/dist/cli/commands/audit.js.map +0 -1
- package/dist/cli/commands/clear.d.ts +0 -10
- package/dist/cli/commands/clear.js +0 -179
- package/dist/cli/commands/clear.js.map +0 -1
- package/dist/cli/commands/folder.d.ts +0 -11
- package/dist/cli/commands/folder.js +0 -186
- package/dist/cli/commands/folder.js.map +0 -1
- package/dist/cli/commands/join.d.ts +0 -9
- package/dist/cli/commands/join.js +0 -267
- package/dist/cli/commands/join.js.map +0 -1
- package/dist/cli/commands/secrets.d.ts +0 -23
- package/dist/cli/commands/secrets.js +0 -256
- package/dist/cli/commands/secrets.js.map +0 -1
- package/dist/cli/commands/settings.d.ts +0 -28
- package/dist/cli/commands/settings.js +0 -284
- package/dist/cli/commands/settings.js.map +0 -1
- package/dist/cli/commands/start.d.ts +0 -7
- package/dist/cli/commands/start.js +0 -653
- package/dist/cli/commands/start.js.map +0 -1
- package/dist/cli/commands/update.d.ts +0 -8
- package/dist/cli/commands/update.js +0 -155
- package/dist/cli/commands/update.js.map +0 -1
- package/dist/cli/commands/user.d.ts +0 -7
- package/dist/cli/commands/user.js +0 -181
- package/dist/cli/commands/user.js.map +0 -1
- package/dist/cli/scaffolding.d.ts +0 -14
- package/dist/cli/scaffolding.js +0 -392
- package/dist/cli/scaffolding.js.map +0 -1
- package/dist/core/feature-flags.d.ts +0 -22
- package/dist/core/feature-flags.js +0 -15
- package/dist/core/feature-flags.js.map +0 -1
- package/dist/core/features.d.ts +0 -16
- package/dist/core/features.js +0 -48
- package/dist/core/features.js.map +0 -1
- package/dist/core/secrets/importer.d.ts +0 -94
- package/dist/core/secrets/importer.js +0 -319
- package/dist/core/secrets/importer.js.map +0 -1
- package/dist/server/routes/features-api.d.ts +0 -19
- package/dist/server/routes/features-api.js +0 -28
- package/dist/server/routes/features-api.js.map +0 -1
- package/dist/server/routes/messages-api.d.ts +0 -15
- package/dist/server/routes/messages-api.js +0 -582
- package/dist/server/routes/messages-api.js.map +0 -1
- package/dist/services/briefing.d.ts +0 -26
- package/dist/services/briefing.js +0 -207
- package/dist/services/briefing.js.map +0 -1
- package/dist/services/heartbeat.d.ts +0 -35
- package/dist/services/heartbeat.js +0 -238
- package/dist/services/heartbeat.js.map +0 -1
- package/dist/services/message-service.d.ts +0 -109
- package/dist/services/message-service.js +0 -337
- package/dist/services/message-service.js.map +0 -1
- package/dist/web/_app/immutable/assets/0.BA9zEqMO.css +0 -2
- package/dist/web/_app/immutable/assets/2.UPfaLUj4.css +0 -1
- package/dist/web/_app/immutable/assets/4.09F-KSoB.css +0 -1
- package/dist/web/_app/immutable/assets/AgentOverlay.C9xf50ov.css +0 -1
- package/dist/web/_app/immutable/assets/AssetManagerModal.ZfasE2L3.css +0 -1
- package/dist/web/_app/immutable/assets/CalendarView.CxdTsBOU.css +0 -1
- package/dist/web/_app/immutable/assets/Filters.BNSqCL2w.css +0 -1
- package/dist/web/_app/immutable/assets/FolderMembersPanel.BTK40ZV-.css +0 -1
- package/dist/web/_app/immutable/assets/GalleryView.CJM0qb0Z.css +0 -1
- package/dist/web/_app/immutable/assets/KanbanView.BykCv6-6.css +0 -1
- package/dist/web/_app/immutable/assets/SettingsDialog.DWIvReSL.css +0 -1
- package/dist/web/_app/immutable/assets/TimelineView.C97Q_R7Q.css +0 -1
- package/dist/web/_app/immutable/assets/WorkspaceView.BZIvO04T.css +0 -1
- package/dist/web/_app/immutable/assets/dialog.BxVal_19.css +0 -1
- package/dist/web/_app/immutable/assets/dist.U57Jb1b6.css +0 -1
- package/dist/web/_app/immutable/assets/dropdown-menu.BSsUUQ3o.css +0 -1
- package/dist/web/_app/immutable/assets/entity-row.Bl5FyNCt.css +0 -1
- package/dist/web/_app/immutable/assets/radio-group.GJJRVPUJ.css +0 -1
- package/dist/web/_app/immutable/assets/select.D_AV992j.css +0 -1
- package/dist/web/_app/immutable/assets/speech-dictation.DOnQxxBP.css +0 -1
- package/dist/web/_app/immutable/chunks/3RiSoUyU.js +0 -1
- package/dist/web/_app/immutable/chunks/3h94PB-X.js +0 -1
- package/dist/web/_app/immutable/chunks/9bCTHkeS.js +0 -1
- package/dist/web/_app/immutable/chunks/B0QlKv_y2.js +0 -1
- package/dist/web/_app/immutable/chunks/B3wplzwT.js +0 -5
- package/dist/web/_app/immutable/chunks/B5Msg8c9.js +0 -1
- package/dist/web/_app/immutable/chunks/B6jmww-W.js +0 -1
- package/dist/web/_app/immutable/chunks/B78yLITZ2.js +0 -1
- package/dist/web/_app/immutable/chunks/BA10-DAl2.js +0 -1
- package/dist/web/_app/immutable/chunks/BBVb0hAs.js +0 -1
- package/dist/web/_app/immutable/chunks/BCVEaBWw.js +0 -1
- package/dist/web/_app/immutable/chunks/BChTKONz.js +0 -41
- package/dist/web/_app/immutable/chunks/BE2ewAd6.js +0 -1
- package/dist/web/_app/immutable/chunks/BHEaUcm-.js +0 -1
- package/dist/web/_app/immutable/chunks/BHdtIHph2.js +0 -1
- package/dist/web/_app/immutable/chunks/BKJxbYlw2.js +0 -1
- package/dist/web/_app/immutable/chunks/BMF2kgRl.js +0 -1
- package/dist/web/_app/immutable/chunks/BNTlsKDJ.js +0 -1
- package/dist/web/_app/immutable/chunks/BOLBnq4S2.js +0 -1
- package/dist/web/_app/immutable/chunks/BPphsWzE2.js +0 -2
- package/dist/web/_app/immutable/chunks/BT3KAag_.js +0 -3
- package/dist/web/_app/immutable/chunks/BZnJ8tbJ.js +0 -1
- package/dist/web/_app/immutable/chunks/BdmrtKYp2.js +0 -1
- package/dist/web/_app/immutable/chunks/BiFpvCJe2.js +0 -1
- package/dist/web/_app/immutable/chunks/BjGNHoI_.js +0 -1
- package/dist/web/_app/immutable/chunks/Bsokmj9K.js +0 -3
- package/dist/web/_app/immutable/chunks/BuzQceOn.js +0 -1
- package/dist/web/_app/immutable/chunks/By52SWFQ.js +0 -1
- package/dist/web/_app/immutable/chunks/C-OaypFN.js +0 -1
- package/dist/web/_app/immutable/chunks/C2pzynAx.js +0 -1
- package/dist/web/_app/immutable/chunks/CA-SSsmA2.js +0 -64
- package/dist/web/_app/immutable/chunks/CCIXvL-4.js +0 -1
- package/dist/web/_app/immutable/chunks/CFFwOnjy2.js +0 -1
- package/dist/web/_app/immutable/chunks/CFMXRG2C.js +0 -1
- package/dist/web/_app/immutable/chunks/CHgG1pyP.js +0 -3
- package/dist/web/_app/immutable/chunks/CJ6d6ePw2.js +0 -2
- package/dist/web/_app/immutable/chunks/COcA3ksE2.js +0 -1
- package/dist/web/_app/immutable/chunks/CSvuCeFa.js +0 -1
- package/dist/web/_app/immutable/chunks/CWJVikgc.js +0 -1
- package/dist/web/_app/immutable/chunks/CWYxmjA9.js +0 -1
- package/dist/web/_app/immutable/chunks/CZXBk6f7.js +0 -1
- package/dist/web/_app/immutable/chunks/C_DPJIiI.js +0 -1
- package/dist/web/_app/immutable/chunks/C_OQGsMP.js +0 -1
- package/dist/web/_app/immutable/chunks/CaWyI47y2.js +0 -1
- package/dist/web/_app/immutable/chunks/CcVuIXb4.js +0 -1
- package/dist/web/_app/immutable/chunks/CdxueNVV2.js +0 -1
- package/dist/web/_app/immutable/chunks/Cdzi5eXS2.js +0 -5
- package/dist/web/_app/immutable/chunks/Ce2BYFn2.js +0 -1
- package/dist/web/_app/immutable/chunks/Cf9Tl9SZ.js +0 -1
- package/dist/web/_app/immutable/chunks/CjrvnLDf.js +0 -1
- package/dist/web/_app/immutable/chunks/CkxWsTxP.js +0 -1
- package/dist/web/_app/immutable/chunks/CmYHsiEp2.js +0 -1
- package/dist/web/_app/immutable/chunks/Cn4uWvXa.js +0 -11
- package/dist/web/_app/immutable/chunks/CnIuUOU82.js +0 -1
- package/dist/web/_app/immutable/chunks/CryKRL4O2.js +0 -1
- package/dist/web/_app/immutable/chunks/Cy7CbwT6.js +0 -1
- package/dist/web/_app/immutable/chunks/D17NMdKc.js +0 -2
- package/dist/web/_app/immutable/chunks/D1ZDlb582.js +0 -1
- package/dist/web/_app/immutable/chunks/D2w4mPEF.js +0 -1
- package/dist/web/_app/immutable/chunks/D7L6XPS4.js +0 -5
- package/dist/web/_app/immutable/chunks/DDrZo1ja.js +0 -1
- package/dist/web/_app/immutable/chunks/DGpZN1Lp2.js +0 -1
- package/dist/web/_app/immutable/chunks/DNLox5BN2.js +0 -3
- package/dist/web/_app/immutable/chunks/DPBBzmNi2.js +0 -1
- package/dist/web/_app/immutable/chunks/DPNVpxC52.js +0 -1
- package/dist/web/_app/immutable/chunks/DPtEUAYV2.js +0 -1
- package/dist/web/_app/immutable/chunks/DQ7LjxZD.js +0 -2
- package/dist/web/_app/immutable/chunks/DRDas3EM2.js +0 -1
- package/dist/web/_app/immutable/chunks/DSC6ch4B.js +0 -2
- package/dist/web/_app/immutable/chunks/DVXrH9Sk.js +0 -1
- package/dist/web/_app/immutable/chunks/DXOmI705.js +0 -1
- package/dist/web/_app/immutable/chunks/DXfqlchZ2.js +0 -1
- package/dist/web/_app/immutable/chunks/DZRz5Jaz.js +0 -1
- package/dist/web/_app/immutable/chunks/DZWSKD4B.js +0 -1
- package/dist/web/_app/immutable/chunks/DZzqmhRV2.js +0 -1
- package/dist/web/_app/immutable/chunks/DcXSx4DX.js +0 -1
- package/dist/web/_app/immutable/chunks/De4vjwu82.js +0 -1
- package/dist/web/_app/immutable/chunks/Dj8qQTtH2.js +0 -1
- package/dist/web/_app/immutable/chunks/Dk-ks0hL.js +0 -1
- package/dist/web/_app/immutable/chunks/DkZkS2e3.js +0 -1
- package/dist/web/_app/immutable/chunks/Dmtw4IHL.js +0 -1
- package/dist/web/_app/immutable/chunks/DoRjlkba.js +0 -1
- package/dist/web/_app/immutable/chunks/DoU_ZN0V2.js +0 -2
- package/dist/web/_app/immutable/chunks/DqZmeWn2.js +0 -1
- package/dist/web/_app/immutable/chunks/Dqujpr2J2.js +0 -1
- package/dist/web/_app/immutable/chunks/DrMTtpP7.js +0 -2
- package/dist/web/_app/immutable/chunks/DrRcjjPn.js +0 -9
- package/dist/web/_app/immutable/chunks/Du5wbcRu.js +0 -1
- package/dist/web/_app/immutable/chunks/Dxq8WNsL.js +0 -1
- package/dist/web/_app/immutable/chunks/Dy0wJ-2i.js +0 -1
- package/dist/web/_app/immutable/chunks/HeIhAG8e2.js +0 -1
- package/dist/web/_app/immutable/chunks/JdxLEXV1.js +0 -1
- package/dist/web/_app/immutable/chunks/LxsXcms32.js +0 -1
- package/dist/web/_app/immutable/chunks/NUWxw3q-.js +0 -1
- package/dist/web/_app/immutable/chunks/NqVTtJWQ2.js +0 -1
- package/dist/web/_app/immutable/chunks/PKJwETHu.js +0 -1
- package/dist/web/_app/immutable/chunks/Qfl7tlUB.js +0 -1
- package/dist/web/_app/immutable/chunks/RSiqYyjk2.js +0 -1
- package/dist/web/_app/immutable/chunks/TK5UsGfg2.js +0 -1
- package/dist/web/_app/immutable/chunks/TNy_tmA22.js +0 -1
- package/dist/web/_app/immutable/chunks/U1-Tn4Xg2.js +0 -2
- package/dist/web/_app/immutable/chunks/YajMQay-2.js +0 -1
- package/dist/web/_app/immutable/chunks/_G6O77q2.js +0 -156
- package/dist/web/_app/immutable/chunks/fpcthsge2.js +0 -1
- package/dist/web/_app/immutable/chunks/ikKa4mia.js +0 -1
- package/dist/web/_app/immutable/chunks/ipYqP0P92.js +0 -1
- package/dist/web/_app/immutable/chunks/jUv7UbKo.js +0 -1
- package/dist/web/_app/immutable/chunks/jb3wXG-M2.js +0 -1
- package/dist/web/_app/immutable/chunks/kC2Bqqp-.js +0 -1
- package/dist/web/_app/immutable/chunks/lfhdjeJB.js +0 -1
- package/dist/web/_app/immutable/chunks/mIAuGNVb.js +0 -1
- package/dist/web/_app/immutable/chunks/osHKvPM1.js +0 -1
- package/dist/web/_app/immutable/chunks/soMdXAIS.js +0 -2487
- package/dist/web/_app/immutable/chunks/vepwPm-7.js +0 -2
- package/dist/web/_app/immutable/chunks/wcGRWqFZ.js +0 -1
- package/dist/web/_app/immutable/chunks/xTCGZyVl2.js +0 -1
- package/dist/web/_app/immutable/entry/app.3rnl6ema.js +0 -2
- package/dist/web/_app/immutable/entry/start.eJznUT0J.js +0 -1
- package/dist/web/_app/immutable/nodes/0.CjpyY_9c.js +0 -2
- package/dist/web/_app/immutable/nodes/1.CFKD033o.js +0 -1
- package/dist/web/_app/immutable/nodes/10.BWzbX_BH.js +0 -1
- package/dist/web/_app/immutable/nodes/11.Dk7hAs7F.js +0 -1
- package/dist/web/_app/immutable/nodes/12.BmDyynW-.js +0 -1
- package/dist/web/_app/immutable/nodes/13.BTnFNmK-.js +0 -1
- package/dist/web/_app/immutable/nodes/2.x3yEhnol.js +0 -109
- package/dist/web/_app/immutable/nodes/3.CkgtaaDz.js +0 -2
- package/dist/web/_app/immutable/nodes/4.BOvkeFYn.js +0 -14
- package/dist/web/_app/immutable/nodes/5.C6BWLpdY.js +0 -1
- package/dist/web/_app/immutable/nodes/6.DOXMfqzx.js +0 -1
- package/dist/web/_app/immutable/nodes/7.CyXZWz_j.js +0 -1
- package/dist/web/_app/immutable/nodes/8.DmOwNPM1.js +0 -1
- package/dist/web/_app/immutable/nodes/9.aXRWDgir.js +0 -1
- /package/dist/web/_app/immutable/assets/{dist.DDCWxn3B.css → scroll-lock.DDCWxn3B.css} +0 -0
- /package/dist/web/_app/immutable/chunks/{1IUi-LlN2.js → B6Lt-qaJ2.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{BRAte_-b.js → B7tbGyiU2.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{uqxmB78b.js → B9RESVsC.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{DgyLeDN4.js → CU98xe6n2.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{C9mSWIDl2.js → DMtXGKK32.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{B9dk7OcQ.js → oBQOivfH2.js} +0 -0
- /package/dist/web/_app/immutable/chunks/{t62M88qj.js → xihTtKlq.js} +0 -0
|
@@ -57,6 +57,7 @@ You can help users with:
|
|
|
57
57
|
- Use plain text only: dashes, bullets, and bold for emphasis
|
|
58
58
|
- Keep language clear, direct, and professional
|
|
59
59
|
- When you create, update, or otherwise reference entries, link to them inline using `[[entry-id]]` wikilinks so the user can click through if they want to. Do not assume the user has been navigated anywhere — they stay on whatever page they were on when they called you.
|
|
60
|
+
- To link to a **folder**, use a wikilink with the repo-qualified path: `[[repo/path/to/folder]]` (e.g. `[[meridian-rebrand/analogous-experiences]]`). The repo prefix disambiguates same-named folders. Do **not** wrap wikilinks in backticks — a backticked `` `[[…]]` `` renders as literal code, not a clickable link.
|
|
60
61
|
|
|
61
62
|
**Respect Structure:**
|
|
62
63
|
- Follow the established entry schemas
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Human-readable commit messages for entity + folder mutations.
|
|
3
|
+
*
|
|
4
|
+
* These strings are display-only — nothing parses them for behavior. Restore
|
|
5
|
+
* keys off the commit hash + the entity from the request, and the audit log
|
|
6
|
+
* only records the string. They surface in `git log`, the audit log, MCP file
|
|
7
|
+
* history, and any future cross-entity history view, where the entity name +
|
|
8
|
+
* type IS the useful context.
|
|
9
|
+
*
|
|
10
|
+
* The per-entity History panel renders its own change summary (computed from
|
|
11
|
+
* the file diff) and does NOT show these messages, so we optimize purely for
|
|
12
|
+
* how they read in a flat log.
|
|
13
|
+
*
|
|
14
|
+
* Format decisions:
|
|
15
|
+
* - Past tense ("Created", "Edited", "Moved") — it's a log of what happened.
|
|
16
|
+
* - `"Display Title" (Type)` — the title in quotes, the friendly type in parens.
|
|
17
|
+
* - Batches enumerate up to 3 names + "(+N more)".
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* Title-case an internal type key for display:
|
|
21
|
+
* "deal" → "Deal", "meeting_note" → "Meeting Note".
|
|
22
|
+
* Built-in types have no stored label, so this is their friendly name.
|
|
23
|
+
*/
|
|
24
|
+
export declare function titleCaseType(type: string): string;
|
|
25
|
+
export interface EntityRef {
|
|
26
|
+
/** Friendly type label, already resolved (e.g. "Deal"). */
|
|
27
|
+
typeLabel: string;
|
|
28
|
+
/** Display title (frontmatter `name`). Falls back to `id` when absent. */
|
|
29
|
+
title?: string | null;
|
|
30
|
+
/** Slug id — the fallback when there's no title. */
|
|
31
|
+
id: string;
|
|
32
|
+
}
|
|
33
|
+
/** `"Acme Corp Redesign" (Deal)` */
|
|
34
|
+
export declare function entityLabel(ref: EntityRef): string;
|
|
35
|
+
export declare const commitMessage: {
|
|
36
|
+
created: (ref: EntityRef) => string;
|
|
37
|
+
edited: (ref: EntityRef) => string;
|
|
38
|
+
editedBatch: (refs: EntityRef[]) => string;
|
|
39
|
+
deleted: (ref: EntityRef) => string;
|
|
40
|
+
deletedBatch: (refs: EntityRef[]) => string;
|
|
41
|
+
/** Rename changes the slug id; the title may be unchanged, so show the ids. */
|
|
42
|
+
renamed: (typeLabel: string, oldId: string, newId: string) => string;
|
|
43
|
+
changedType: (ref: EntityRef, fromLabel: string, toLabel: string) => string;
|
|
44
|
+
/** `folder` is the destination path display, or "(root)" for the repo root. */
|
|
45
|
+
movedTo: (ref: EntityRef, folder: string) => string;
|
|
46
|
+
/** Bulk move: count + destination reads cleaner than enumerate + target. */
|
|
47
|
+
movedBatch: (count: number, where: string) => string;
|
|
48
|
+
receivedBatch: (count: number, fromRepo: string) => string;
|
|
49
|
+
restored: (ref: EntityRef, shortHash: string) => string;
|
|
50
|
+
relinked: (oldId: string, newId: string) => string;
|
|
51
|
+
folderCreated: (path: string) => string;
|
|
52
|
+
folderRenamed: (from: string, to: string) => string;
|
|
53
|
+
folderDisplayRenamed: (path: string) => string;
|
|
54
|
+
folderDeleted: (path: string) => string;
|
|
55
|
+
folderMoved: (from: string, toRepo: string, to: string) => string;
|
|
56
|
+
folderReceived: (fromRepo: string, from: string, to: string) => string;
|
|
57
|
+
};
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Human-readable commit messages for entity + folder mutations.
|
|
3
|
+
*
|
|
4
|
+
* These strings are display-only — nothing parses them for behavior. Restore
|
|
5
|
+
* keys off the commit hash + the entity from the request, and the audit log
|
|
6
|
+
* only records the string. They surface in `git log`, the audit log, MCP file
|
|
7
|
+
* history, and any future cross-entity history view, where the entity name +
|
|
8
|
+
* type IS the useful context.
|
|
9
|
+
*
|
|
10
|
+
* The per-entity History panel renders its own change summary (computed from
|
|
11
|
+
* the file diff) and does NOT show these messages, so we optimize purely for
|
|
12
|
+
* how they read in a flat log.
|
|
13
|
+
*
|
|
14
|
+
* Format decisions:
|
|
15
|
+
* - Past tense ("Created", "Edited", "Moved") — it's a log of what happened.
|
|
16
|
+
* - `"Display Title" (Type)` — the title in quotes, the friendly type in parens.
|
|
17
|
+
* - Batches enumerate up to 3 names + "(+N more)".
|
|
18
|
+
*/
|
|
19
|
+
/** Cap a title so it can't blow out a one-line subject. */
|
|
20
|
+
const MAX_TITLE = 80;
|
|
21
|
+
/**
|
|
22
|
+
* Title-case an internal type key for display:
|
|
23
|
+
* "deal" → "Deal", "meeting_note" → "Meeting Note".
|
|
24
|
+
* Built-in types have no stored label, so this is their friendly name.
|
|
25
|
+
*/
|
|
26
|
+
export function titleCaseType(type) {
|
|
27
|
+
const cased = type
|
|
28
|
+
.split(/[_-]+/)
|
|
29
|
+
.filter(Boolean)
|
|
30
|
+
.map((w) => w.charAt(0).toUpperCase() + w.slice(1))
|
|
31
|
+
.join(' ');
|
|
32
|
+
return cased || type;
|
|
33
|
+
}
|
|
34
|
+
/** Collapse whitespace and cap length so a title is safe in a subject line. */
|
|
35
|
+
function cleanTitle(title) {
|
|
36
|
+
if (!title)
|
|
37
|
+
return '';
|
|
38
|
+
const flat = String(title).replace(/\s+/g, ' ').trim();
|
|
39
|
+
return flat.length > MAX_TITLE ? `${flat.slice(0, MAX_TITLE - 1)}…` : flat;
|
|
40
|
+
}
|
|
41
|
+
/** The user-facing name for an entity: cleaned title, or the slug as fallback. */
|
|
42
|
+
function displayName(ref) {
|
|
43
|
+
return cleanTitle(ref.title) || ref.id;
|
|
44
|
+
}
|
|
45
|
+
/** `"Acme Corp Redesign" (Deal)` */
|
|
46
|
+
export function entityLabel(ref) {
|
|
47
|
+
return `"${displayName(ref)}" (${ref.typeLabel})`;
|
|
48
|
+
}
|
|
49
|
+
/** Just the quoted name (no type) — for batch enumeration. */
|
|
50
|
+
function quotedName(ref) {
|
|
51
|
+
return `"${displayName(ref)}"`;
|
|
52
|
+
}
|
|
53
|
+
/** `"A", "B", "C" (+2 more)` — enumerate up to `max` names. */
|
|
54
|
+
function enumerateNames(refs, max = 3) {
|
|
55
|
+
const names = refs.map(quotedName);
|
|
56
|
+
if (names.length <= max)
|
|
57
|
+
return names.join(', ');
|
|
58
|
+
return `${names.slice(0, max).join(', ')} (+${names.length - max} more)`;
|
|
59
|
+
}
|
|
60
|
+
const plural = (n) => (n === 1 ? 'entry' : 'entries');
|
|
61
|
+
export const commitMessage = {
|
|
62
|
+
created: (ref) => `Created ${entityLabel(ref)}`,
|
|
63
|
+
edited: (ref) => `Edited ${entityLabel(ref)}`,
|
|
64
|
+
editedBatch: (refs) => `Edited ${enumerateNames(refs)}`,
|
|
65
|
+
deleted: (ref) => `Deleted ${entityLabel(ref)}`,
|
|
66
|
+
deletedBatch: (refs) => `Deleted ${enumerateNames(refs)}`,
|
|
67
|
+
/** Rename changes the slug id; the title may be unchanged, so show the ids. */
|
|
68
|
+
renamed: (typeLabel, oldId, newId) => `Renamed "${oldId}" → "${newId}" (${typeLabel})`,
|
|
69
|
+
changedType: (ref, fromLabel, toLabel) => `Changed ${quotedName(ref)} from ${fromLabel} to ${toLabel}`,
|
|
70
|
+
/** `folder` is the destination path display, or "(root)" for the repo root. */
|
|
71
|
+
movedTo: (ref, folder) => `Moved ${entityLabel(ref)} → ${folder}`,
|
|
72
|
+
/** Bulk move: count + destination reads cleaner than enumerate + target. */
|
|
73
|
+
movedBatch: (count, where) => `Moved ${count} ${plural(count)} → ${where}`,
|
|
74
|
+
receivedBatch: (count, fromRepo) => `Received ${count} ${plural(count)} from ${fromRepo}`,
|
|
75
|
+
restored: (ref, shortHash) => `Restored ${entityLabel(ref)} from ${shortHash}`,
|
|
76
|
+
relinked: (oldId, newId) => `Relinked "${oldId}" → "${newId}"`,
|
|
77
|
+
// Folders are path-based (no type/title).
|
|
78
|
+
folderCreated: (path) => `Created folder "${path}"`,
|
|
79
|
+
folderRenamed: (from, to) => `Renamed folder "${from}" → "${to}"`,
|
|
80
|
+
folderDisplayRenamed: (path) => `Renamed folder "${path}"`,
|
|
81
|
+
folderDeleted: (path) => `Deleted folder "${path}"`,
|
|
82
|
+
folderMoved: (from, toRepo, to) => `Moved folder "${from}" → ${toRepo}:${to || '/'}`,
|
|
83
|
+
folderReceived: (fromRepo, from, to) => `Received folder from ${fromRepo}:${from} → ${to || '/'}`,
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=commit-messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commit-messages.js","sourceRoot":"","sources":["../../src/core/commit-messages.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Field library mutation helpers
|
|
3
|
+
*
|
|
4
|
+
* Pure, framework-free functions that add / edit / remove a reusable custom
|
|
5
|
+
* field definition on a WorkspaceConfig. They return a new config object (the
|
|
6
|
+
* input is never mutated) so the HTTP layer can persist the result through
|
|
7
|
+
* `Workspace.writeConfig()`.
|
|
8
|
+
*
|
|
9
|
+
* Deliberately independent of SchemaRegistry / Zod entity validation: the
|
|
10
|
+
* field library is *soft* metadata (it drives the picker + agent awareness),
|
|
11
|
+
* not an enforced schema. Applying a field to an entry is an ordinary
|
|
12
|
+
* frontmatter write elsewhere; nothing here touches entity validation.
|
|
13
|
+
*
|
|
14
|
+
* Identity is `key`, global across the workspace (one `phase` everywhere).
|
|
15
|
+
* Editing options ripples to every entry using the field; existing entry
|
|
16
|
+
* values are never touched (removal is non-destructive — orphaned values stay
|
|
17
|
+
* on disk and simply stop being offered).
|
|
18
|
+
*/
|
|
19
|
+
import { type CustomFieldDef, type WorkspaceConfig } from './types.js';
|
|
20
|
+
/** A mutation that fails a precondition (not found, collision, bad shape). */
|
|
21
|
+
export declare class FieldLibraryError extends Error {
|
|
22
|
+
/** Stable machine code so the route maps to a status without string-matching. */
|
|
23
|
+
code: 'key_exists' | 'key_not_found' | 'invalid_field';
|
|
24
|
+
constructor(message: string,
|
|
25
|
+
/** Stable machine code so the route maps to a status without string-matching. */
|
|
26
|
+
code: 'key_exists' | 'key_not_found' | 'invalid_field');
|
|
27
|
+
}
|
|
28
|
+
/** Current field library (empty when none defined). */
|
|
29
|
+
export declare function getFieldLibrary(config: WorkspaceConfig): CustomFieldDef[];
|
|
30
|
+
/** Look up one definition by key. */
|
|
31
|
+
export declare function getFieldDef(config: WorkspaceConfig, key: string): CustomFieldDef | undefined;
|
|
32
|
+
/**
|
|
33
|
+
* Validate a field definition's shape. Enforces the key shape and, for select
|
|
34
|
+
* fields, a non-empty list of unique, non-empty options. Throws
|
|
35
|
+
* FieldLibraryError on failure. Returns the parsed definition.
|
|
36
|
+
*/
|
|
37
|
+
export declare function validateFieldDef(input: unknown): CustomFieldDef;
|
|
38
|
+
/**
|
|
39
|
+
* Add a new field definition. Returns a new WorkspaceConfig.
|
|
40
|
+
* Rejects a key already used by another definition.
|
|
41
|
+
*/
|
|
42
|
+
export declare function addFieldDef(config: WorkspaceConfig, input: {
|
|
43
|
+
key: string;
|
|
44
|
+
label?: string;
|
|
45
|
+
type?: 'select';
|
|
46
|
+
options: string[];
|
|
47
|
+
created_by?: string;
|
|
48
|
+
}): WorkspaceConfig;
|
|
49
|
+
/**
|
|
50
|
+
* Update an existing definition's options and/or label. The key is the
|
|
51
|
+
* identity and is not changed (renaming a key = add + remove, since it would
|
|
52
|
+
* orphan existing usages). Returns a new WorkspaceConfig.
|
|
53
|
+
*/
|
|
54
|
+
export declare function updateFieldDef(config: WorkspaceConfig, key: string, patch: {
|
|
55
|
+
options?: string[];
|
|
56
|
+
label?: string;
|
|
57
|
+
}): WorkspaceConfig;
|
|
58
|
+
/**
|
|
59
|
+
* Remove a definition from the library. Returns a new WorkspaceConfig.
|
|
60
|
+
* Non-destructive to entries — any stored values stay in their frontmatter.
|
|
61
|
+
*/
|
|
62
|
+
export declare function removeFieldDef(config: WorkspaceConfig, key: string): WorkspaceConfig;
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Field library mutation helpers
|
|
3
|
+
*
|
|
4
|
+
* Pure, framework-free functions that add / edit / remove a reusable custom
|
|
5
|
+
* field definition on a WorkspaceConfig. They return a new config object (the
|
|
6
|
+
* input is never mutated) so the HTTP layer can persist the result through
|
|
7
|
+
* `Workspace.writeConfig()`.
|
|
8
|
+
*
|
|
9
|
+
* Deliberately independent of SchemaRegistry / Zod entity validation: the
|
|
10
|
+
* field library is *soft* metadata (it drives the picker + agent awareness),
|
|
11
|
+
* not an enforced schema. Applying a field to an entry is an ordinary
|
|
12
|
+
* frontmatter write elsewhere; nothing here touches entity validation.
|
|
13
|
+
*
|
|
14
|
+
* Identity is `key`, global across the workspace (one `phase` everywhere).
|
|
15
|
+
* Editing options ripples to every entry using the field; existing entry
|
|
16
|
+
* values are never touched (removal is non-destructive — orphaned values stay
|
|
17
|
+
* on disk and simply stop being offered).
|
|
18
|
+
*/
|
|
19
|
+
import { CustomFieldDefSchema } from './types.js';
|
|
20
|
+
/** A mutation that fails a precondition (not found, collision, bad shape). */
|
|
21
|
+
export class FieldLibraryError extends Error {
|
|
22
|
+
code;
|
|
23
|
+
constructor(message,
|
|
24
|
+
/** Stable machine code so the route maps to a status without string-matching. */
|
|
25
|
+
code) {
|
|
26
|
+
super(message);
|
|
27
|
+
this.code = code;
|
|
28
|
+
this.name = 'FieldLibraryError';
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/** Field key shape: lowercase, snake_case, must start with a letter. Mirrors
|
|
32
|
+
* the client's `normalizedKey` normalization. */
|
|
33
|
+
const KEY_RE = /^[a-z][a-z0-9_]*$/;
|
|
34
|
+
/** Current field library (empty when none defined). */
|
|
35
|
+
export function getFieldLibrary(config) {
|
|
36
|
+
return config.field_library ?? [];
|
|
37
|
+
}
|
|
38
|
+
/** Look up one definition by key. */
|
|
39
|
+
export function getFieldDef(config, key) {
|
|
40
|
+
return getFieldLibrary(config).find(f => f.key === key);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Validate a field definition's shape. Enforces the key shape and, for select
|
|
44
|
+
* fields, a non-empty list of unique, non-empty options. Throws
|
|
45
|
+
* FieldLibraryError on failure. Returns the parsed definition.
|
|
46
|
+
*/
|
|
47
|
+
export function validateFieldDef(input) {
|
|
48
|
+
const parsed = CustomFieldDefSchema.safeParse(input);
|
|
49
|
+
if (!parsed.success) {
|
|
50
|
+
throw new FieldLibraryError(`Invalid field definition: ${parsed.error.issues.map(i => i.message).join('; ')}`, 'invalid_field');
|
|
51
|
+
}
|
|
52
|
+
const def = parsed.data;
|
|
53
|
+
if (!KEY_RE.test(def.key)) {
|
|
54
|
+
throw new FieldLibraryError(`Field key "${def.key}" must be lowercase snake_case and start with a letter`, 'invalid_field');
|
|
55
|
+
}
|
|
56
|
+
validateOptions(def.options);
|
|
57
|
+
return def;
|
|
58
|
+
}
|
|
59
|
+
/** Shared option-list validation (non-empty, no blanks, unique). */
|
|
60
|
+
function validateOptions(options) {
|
|
61
|
+
if (options.length === 0) {
|
|
62
|
+
throw new FieldLibraryError('A Select field needs at least one option', 'invalid_field');
|
|
63
|
+
}
|
|
64
|
+
if (options.some(v => v.trim() === '')) {
|
|
65
|
+
throw new FieldLibraryError('Select options cannot be empty', 'invalid_field');
|
|
66
|
+
}
|
|
67
|
+
if (new Set(options).size !== options.length) {
|
|
68
|
+
throw new FieldLibraryError('Select options must be unique', 'invalid_field');
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/** Deep-clone the library so callers never mutate the live config. */
|
|
72
|
+
function cloneLibrary(config) {
|
|
73
|
+
return structuredClone(config.field_library ?? []);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Add a new field definition. Returns a new WorkspaceConfig.
|
|
77
|
+
* Rejects a key already used by another definition.
|
|
78
|
+
*/
|
|
79
|
+
export function addFieldDef(config, input) {
|
|
80
|
+
const def = validateFieldDef({
|
|
81
|
+
key: input.key,
|
|
82
|
+
type: 'select',
|
|
83
|
+
options: input.options,
|
|
84
|
+
...(input.label !== undefined ? { label: input.label } : {}),
|
|
85
|
+
...(input.created_by !== undefined ? { created_by: input.created_by } : {}),
|
|
86
|
+
created_at: new Date().toISOString(),
|
|
87
|
+
});
|
|
88
|
+
if (getFieldDef(config, def.key)) {
|
|
89
|
+
throw new FieldLibraryError(`A field named "${def.key}" already exists`, 'key_exists');
|
|
90
|
+
}
|
|
91
|
+
const library = [...cloneLibrary(config), def];
|
|
92
|
+
return { ...config, field_library: library };
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Update an existing definition's options and/or label. The key is the
|
|
96
|
+
* identity and is not changed (renaming a key = add + remove, since it would
|
|
97
|
+
* orphan existing usages). Returns a new WorkspaceConfig.
|
|
98
|
+
*/
|
|
99
|
+
export function updateFieldDef(config, key, patch) {
|
|
100
|
+
const current = getFieldDef(config, key);
|
|
101
|
+
if (!current) {
|
|
102
|
+
throw new FieldLibraryError(`No field named "${key}"`, 'key_not_found');
|
|
103
|
+
}
|
|
104
|
+
if (patch.options !== undefined)
|
|
105
|
+
validateOptions(patch.options);
|
|
106
|
+
const next = {
|
|
107
|
+
...current,
|
|
108
|
+
...(patch.options !== undefined ? { options: patch.options } : {}),
|
|
109
|
+
...(patch.label !== undefined ? { label: patch.label } : {}),
|
|
110
|
+
};
|
|
111
|
+
const library = cloneLibrary(config).map(f => (f.key === key ? next : f));
|
|
112
|
+
return { ...config, field_library: library };
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Remove a definition from the library. Returns a new WorkspaceConfig.
|
|
116
|
+
* Non-destructive to entries — any stored values stay in their frontmatter.
|
|
117
|
+
*/
|
|
118
|
+
export function removeFieldDef(config, key) {
|
|
119
|
+
if (!getFieldDef(config, key)) {
|
|
120
|
+
throw new FieldLibraryError(`No field named "${key}"`, 'key_not_found');
|
|
121
|
+
}
|
|
122
|
+
const library = cloneLibrary(config).filter(f => f.key !== key);
|
|
123
|
+
// Drop the array entirely when it empties, to keep workspace.json tidy.
|
|
124
|
+
const next = { ...config, field_library: library };
|
|
125
|
+
if (library.length === 0)
|
|
126
|
+
delete next.field_library;
|
|
127
|
+
return next;
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=field-library.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-library.js","sourceRoot":"","sources":["../../src/core/field-library.ts"],"names":[],"mappings":"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"}
|
package/dist/core/graph.d.ts
CHANGED
|
@@ -12,6 +12,7 @@ import type { AssetIndexService } from '../services/assets/asset-index-service.j
|
|
|
12
12
|
import { EntityType, type EntityData, type DatasetRow } from './validation.js';
|
|
13
13
|
import { SchemaRegistry } from './schema-registry.js';
|
|
14
14
|
import { type DatasetFilter } from '../services/csv-service.js';
|
|
15
|
+
import { type HistoryCommitChange } from './history-diff.js';
|
|
15
16
|
import { type VectorService } from '../services/vector-service.js';
|
|
16
17
|
export interface GraphConfig {
|
|
17
18
|
repoPath: string;
|
|
@@ -219,9 +220,41 @@ export declare class BaseGraphManager {
|
|
|
219
220
|
private vectorService?;
|
|
220
221
|
private schemaRegistry?;
|
|
221
222
|
private workspaceRoot?;
|
|
223
|
+
/** Cache for history-panel change summaries, keyed by `${relPath}@${hash}`.
|
|
224
|
+
* A commit's diff against its parent is immutable, so this never needs
|
|
225
|
+
* invalidation — entries only accumulate as history is viewed. */
|
|
226
|
+
private historyChangeCache;
|
|
222
227
|
private persistenceCallbacks?;
|
|
223
228
|
private bodyWriteCoordinator?;
|
|
224
229
|
constructor(config: GraphConfig);
|
|
230
|
+
/**
|
|
231
|
+
* Friendly display label for an entity type — custom-type label when the
|
|
232
|
+
* workspace defines one, otherwise the title-cased key ("deal" → "Deal").
|
|
233
|
+
* Used to build human-readable commit messages.
|
|
234
|
+
*/
|
|
235
|
+
private typeLabel;
|
|
236
|
+
/** Build an EntityRef for a commit message from a type, id, and optional title. */
|
|
237
|
+
private commitRef;
|
|
238
|
+
/**
|
|
239
|
+
* Build the friendly "Edited …" message for a deferred (batched) commit,
|
|
240
|
+
* given the "type/id" pairs accumulated by the SessionManager. Each title is
|
|
241
|
+
* resolved from the in-memory index at flush time (cheap lookup); an entity
|
|
242
|
+
* deleted before the flush falls back to its slug id.
|
|
243
|
+
*/
|
|
244
|
+
buildEditedBatchMessage(entities: Array<{
|
|
245
|
+
type: string;
|
|
246
|
+
id: string;
|
|
247
|
+
}>): string;
|
|
248
|
+
/**
|
|
249
|
+
* Change summary for one commit in a file's history — which frontmatter
|
|
250
|
+
* fields moved and whether the body changed — by diffing the file at `hash`
|
|
251
|
+
* against its true git parent (`hash^`). Used by the entity History panel.
|
|
252
|
+
*
|
|
253
|
+
* `relPath` is repo-relative. Null parent (root commit, or file absent at the
|
|
254
|
+
* parent) → `created`. Result is immutable per (path, hash), so it's cached.
|
|
255
|
+
* Returns null only when the file isn't present at `hash`.
|
|
256
|
+
*/
|
|
257
|
+
getCommitChange(relPath: string, hash: string): HistoryCommitChange | null;
|
|
225
258
|
/** Expose git service for deferred commit operations (SessionManager). */
|
|
226
259
|
getGitService(): GitService | undefined;
|
|
227
260
|
/** Absolute repo path on disk. Used by callers that need to convert
|
|
@@ -407,6 +440,7 @@ export declare class BaseGraphManager {
|
|
|
407
440
|
entityType: EntityType;
|
|
408
441
|
entityId: string;
|
|
409
442
|
path: string;
|
|
443
|
+
title?: string;
|
|
410
444
|
}>;
|
|
411
445
|
errors: Array<{
|
|
412
446
|
entityType: EntityType;
|