@abraca/mcp 1.6.0 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -20149,6 +20149,17 @@ var AbracadabraMCPServer = class {
20149
20149
  getTrashMap() {
20150
20150
  return this._activeConnection?.doc.getMap("doc-trash") ?? null;
20151
20151
  }
20152
+ /** Get plugin names enabled in the active space via space-plugins Y.Map. */
20153
+ getEnabledPluginNames() {
20154
+ const doc = this._activeConnection?.doc;
20155
+ if (!doc) return [];
20156
+ const pluginsMap = doc.getMap("space-plugins");
20157
+ const names = [];
20158
+ pluginsMap.forEach((value, key) => {
20159
+ if ((value?.toJSON ? value.toJSON() : value)?.enabled) names.push(key);
20160
+ });
20161
+ return names;
20162
+ }
20152
20163
  /**
20153
20164
  * Get or create a child provider for a given document ID.
20154
20165
  * Caches providers and waits for sync before returning.
@@ -20435,6 +20446,724 @@ function docToSpaceMeta(doc) {
20435
20446
  };
20436
20447
  }
20437
20448
 
20449
+ //#endregion
20450
+ //#region packages/mcp/src/converters/page-types.ts
20451
+ const PAGE_TYPES = {
20452
+ doc: {
20453
+ key: "doc",
20454
+ label: "Document",
20455
+ icon: "file-text",
20456
+ description: "Rich text document with real-time collaboration",
20457
+ core: true,
20458
+ supportsChildren: true
20459
+ },
20460
+ kanban: {
20461
+ key: "kanban",
20462
+ label: "Kanban",
20463
+ icon: "kanban",
20464
+ description: "Drag-and-drop task board with columns and cards",
20465
+ core: true,
20466
+ supportsChildren: true,
20467
+ childLabel: "Column",
20468
+ grandchildLabel: "Card",
20469
+ defaultMetaFields: [{
20470
+ type: "select",
20471
+ key: "kanbanColumnWidth",
20472
+ options: [
20473
+ "narrow",
20474
+ "default",
20475
+ "wide"
20476
+ ],
20477
+ label: "Column Width"
20478
+ }]
20479
+ },
20480
+ gallery: {
20481
+ key: "gallery",
20482
+ label: "Gallery",
20483
+ icon: "images",
20484
+ description: "Visual grid of items with rich content",
20485
+ core: true,
20486
+ supportsChildren: true,
20487
+ childLabel: "Item",
20488
+ metaSchema: [
20489
+ {
20490
+ type: "location",
20491
+ latKey: "geoLat",
20492
+ lngKey: "geoLng",
20493
+ label: "Location"
20494
+ },
20495
+ {
20496
+ type: "datetime",
20497
+ key: "datetimeStart",
20498
+ label: "Date"
20499
+ },
20500
+ {
20501
+ type: "tags",
20502
+ key: "tags",
20503
+ label: "Tags"
20504
+ },
20505
+ {
20506
+ type: "rating",
20507
+ key: "rating",
20508
+ max: 5,
20509
+ label: "Rating"
20510
+ },
20511
+ {
20512
+ type: "icon",
20513
+ key: "icon",
20514
+ label: "Icon"
20515
+ },
20516
+ {
20517
+ type: "colorPreset",
20518
+ key: "color",
20519
+ presets: [
20520
+ "#6366f1",
20521
+ "#ec4899",
20522
+ "#f97316",
20523
+ "#22c55e",
20524
+ "#3b82f6",
20525
+ "#a855f7"
20526
+ ],
20527
+ label: "Color"
20528
+ }
20529
+ ],
20530
+ defaultMetaFields: [
20531
+ {
20532
+ type: "number",
20533
+ key: "galleryColumns",
20534
+ min: 1,
20535
+ max: 6,
20536
+ step: 1,
20537
+ label: "Columns"
20538
+ },
20539
+ {
20540
+ type: "select",
20541
+ key: "galleryAspect",
20542
+ options: [
20543
+ "square",
20544
+ "4:3",
20545
+ "3:2",
20546
+ "16:9",
20547
+ "free"
20548
+ ],
20549
+ label: "Aspect Ratio"
20550
+ },
20551
+ {
20552
+ type: "select",
20553
+ key: "galleryCardStyle",
20554
+ options: [
20555
+ "default",
20556
+ "compact",
20557
+ "detailed"
20558
+ ],
20559
+ label: "Card Style"
20560
+ },
20561
+ {
20562
+ type: "toggle",
20563
+ key: "galleryShowLabels",
20564
+ label: "Show Labels"
20565
+ },
20566
+ {
20567
+ type: "select",
20568
+ key: "gallerySortBy",
20569
+ options: [
20570
+ "manual",
20571
+ "date",
20572
+ "name",
20573
+ "rating"
20574
+ ],
20575
+ label: "Sort"
20576
+ }
20577
+ ]
20578
+ },
20579
+ table: {
20580
+ key: "table",
20581
+ label: "Table",
20582
+ icon: "table",
20583
+ description: "Collaborative spreadsheet with custom fields",
20584
+ core: true,
20585
+ supportsChildren: true,
20586
+ childLabel: "Column",
20587
+ grandchildLabel: "Row",
20588
+ defaultMetaFields: [{
20589
+ type: "select",
20590
+ key: "tableMode",
20591
+ options: ["hierarchy", "flat"],
20592
+ label: "Mode"
20593
+ }, {
20594
+ type: "select",
20595
+ key: "tableSortDir",
20596
+ options: ["asc", "desc"],
20597
+ label: "Sort Direction"
20598
+ }]
20599
+ },
20600
+ outline: {
20601
+ key: "outline",
20602
+ label: "Outline",
20603
+ icon: "list-tree",
20604
+ description: "Hierarchical outline with keyboard navigation",
20605
+ core: true,
20606
+ supportsChildren: true,
20607
+ childLabel: "Item",
20608
+ defaultDepth: -1
20609
+ },
20610
+ checklist: {
20611
+ key: "checklist",
20612
+ label: "Checklist",
20613
+ icon: "check-square",
20614
+ description: "Collaborative checklist with sub-tasks, drag-and-drop, and due dates",
20615
+ core: true,
20616
+ supportsChildren: true,
20617
+ childLabel: "Task",
20618
+ defaultDepth: -1,
20619
+ metaSchema: [
20620
+ {
20621
+ type: "toggle",
20622
+ key: "checked",
20623
+ label: "Done"
20624
+ },
20625
+ {
20626
+ type: "select",
20627
+ key: "priority",
20628
+ options: [
20629
+ "none",
20630
+ "low",
20631
+ "medium",
20632
+ "high"
20633
+ ],
20634
+ label: "Priority"
20635
+ },
20636
+ {
20637
+ type: "date",
20638
+ key: "dateEnd",
20639
+ label: "Due date"
20640
+ }
20641
+ ],
20642
+ defaultMetaFields: [{
20643
+ type: "select",
20644
+ key: "checklistFilter",
20645
+ options: [
20646
+ "all",
20647
+ "active",
20648
+ "completed"
20649
+ ],
20650
+ label: "Filter"
20651
+ }, {
20652
+ type: "select",
20653
+ key: "checklistSort",
20654
+ options: [
20655
+ "manual",
20656
+ "priority",
20657
+ "due"
20658
+ ],
20659
+ label: "Sort"
20660
+ }]
20661
+ },
20662
+ graph: {
20663
+ key: "graph",
20664
+ label: "Graph",
20665
+ icon: "git-fork",
20666
+ description: "Force-directed knowledge graph — full document tree as nodes & edges",
20667
+ core: true,
20668
+ supportsChildren: true,
20669
+ childLabel: "Node",
20670
+ defaultMetaFields: [{
20671
+ type: "toggle",
20672
+ key: "showRefEdges",
20673
+ label: "Show Ref Edges",
20674
+ default: true
20675
+ }]
20676
+ },
20677
+ timeline: {
20678
+ key: "timeline",
20679
+ label: "Timeline",
20680
+ icon: "gantt-chart",
20681
+ description: "Gantt-style project timeline with epics and tasks",
20682
+ core: true,
20683
+ supportsChildren: true,
20684
+ childLabel: "Epic",
20685
+ grandchildLabel: "Task",
20686
+ metaSchema: [
20687
+ {
20688
+ type: "daterange",
20689
+ startKey: "dateStart",
20690
+ endKey: "dateEnd"
20691
+ },
20692
+ {
20693
+ type: "slider",
20694
+ key: "taskProgress",
20695
+ min: 0,
20696
+ max: 100,
20697
+ label: "Progress"
20698
+ },
20699
+ {
20700
+ type: "colorPreset",
20701
+ key: "color",
20702
+ presets: [
20703
+ "#6366f1",
20704
+ "#818cf8",
20705
+ "#f97316",
20706
+ "#22c55e",
20707
+ "#3b82f6",
20708
+ "#a855f7"
20709
+ ],
20710
+ label: "Color"
20711
+ }
20712
+ ]
20713
+ },
20714
+ calendar: {
20715
+ key: "calendar",
20716
+ label: "Calendar",
20717
+ icon: "calendar",
20718
+ description: "Event calendar with month, week, and day views",
20719
+ core: true,
20720
+ supportsChildren: true,
20721
+ childLabel: "Event",
20722
+ metaSchema: [
20723
+ {
20724
+ type: "datetimerange",
20725
+ startKey: "datetimeStart",
20726
+ endKey: "datetimeEnd",
20727
+ allDayKey: "allDay"
20728
+ },
20729
+ {
20730
+ type: "colorPreset",
20731
+ key: "color",
20732
+ presets: [
20733
+ "#6366f1",
20734
+ "#ec4899",
20735
+ "#f97316",
20736
+ "#22c55e",
20737
+ "#3b82f6",
20738
+ "#a855f7"
20739
+ ],
20740
+ label: "Color"
20741
+ },
20742
+ {
20743
+ type: "icon",
20744
+ key: "icon",
20745
+ label: "Icon"
20746
+ }
20747
+ ],
20748
+ defaultMetaFields: [
20749
+ {
20750
+ type: "select",
20751
+ key: "calendarWeekStart",
20752
+ options: ["sun", "mon"],
20753
+ label: "Week Starts"
20754
+ },
20755
+ {
20756
+ type: "select",
20757
+ key: "calendarView",
20758
+ options: [
20759
+ "month",
20760
+ "week",
20761
+ "day"
20762
+ ],
20763
+ label: "Default View"
20764
+ },
20765
+ {
20766
+ type: "toggle",
20767
+ key: "calendarShowWeekNumbers",
20768
+ label: "Show Week Numbers"
20769
+ }
20770
+ ]
20771
+ },
20772
+ map: {
20773
+ key: "map",
20774
+ label: "Map",
20775
+ icon: "map",
20776
+ description: "Collaborative world map with shared markers",
20777
+ core: true,
20778
+ supportsChildren: true,
20779
+ childLabel: "Location",
20780
+ defaultMetaFields: [{
20781
+ type: "toggle",
20782
+ key: "mapShowLabels",
20783
+ label: "Show Labels",
20784
+ default: true
20785
+ }]
20786
+ },
20787
+ dashboard: {
20788
+ key: "dashboard",
20789
+ label: "Dashboard",
20790
+ icon: "layout-dashboard",
20791
+ description: "Arrange documents as draggable icons with optional widget views",
20792
+ core: true,
20793
+ supportsChildren: true,
20794
+ childLabel: "Item"
20795
+ },
20796
+ call: {
20797
+ key: "call",
20798
+ label: "Call",
20799
+ icon: "phone",
20800
+ description: "Video call room with live audio and screen sharing",
20801
+ core: true,
20802
+ supportsChildren: false
20803
+ },
20804
+ chart: {
20805
+ key: "chart",
20806
+ label: "Chart",
20807
+ icon: "bar-chart-3",
20808
+ description: "Charts — manual data points or aggregation over document trees",
20809
+ core: true,
20810
+ supportsChildren: true,
20811
+ childLabel: "Data Point",
20812
+ grandchildLabel: "Data Point",
20813
+ metaSchema: [
20814
+ {
20815
+ type: "number",
20816
+ key: "number",
20817
+ step: .01,
20818
+ label: "Value"
20819
+ },
20820
+ {
20821
+ type: "colorPreset",
20822
+ key: "color",
20823
+ presets: [
20824
+ "#6366f1",
20825
+ "#ec4899",
20826
+ "#f97316",
20827
+ "#22c55e",
20828
+ "#3b82f6",
20829
+ "#a855f7",
20830
+ "#14b8a6",
20831
+ "#eab308"
20832
+ ],
20833
+ label: "Color"
20834
+ },
20835
+ {
20836
+ type: "tags",
20837
+ key: "tags",
20838
+ label: "Tags"
20839
+ }
20840
+ ],
20841
+ defaultMetaFields: [
20842
+ {
20843
+ type: "select",
20844
+ key: "chartType",
20845
+ options: [
20846
+ "bar",
20847
+ "stacked bar",
20848
+ "line",
20849
+ "donut",
20850
+ "treemap"
20851
+ ],
20852
+ label: "Chart Type"
20853
+ },
20854
+ {
20855
+ type: "select",
20856
+ key: "chartMetric",
20857
+ options: [
20858
+ "value",
20859
+ "type",
20860
+ "tag",
20861
+ "status",
20862
+ "priority",
20863
+ "activity",
20864
+ "completion"
20865
+ ],
20866
+ label: "Metric"
20867
+ },
20868
+ {
20869
+ type: "select",
20870
+ key: "chartColorScheme",
20871
+ options: [
20872
+ "default",
20873
+ "warm",
20874
+ "cool",
20875
+ "mono"
20876
+ ],
20877
+ label: "Colors"
20878
+ },
20879
+ {
20880
+ type: "number",
20881
+ key: "chartLimit",
20882
+ min: 3,
20883
+ max: 30,
20884
+ step: 1,
20885
+ label: "Max Items"
20886
+ },
20887
+ {
20888
+ type: "toggle",
20889
+ key: "chartShowLegend",
20890
+ label: "Show Legend",
20891
+ default: true
20892
+ },
20893
+ {
20894
+ type: "toggle",
20895
+ key: "chartShowValues",
20896
+ label: "Show Values"
20897
+ }
20898
+ ]
20899
+ },
20900
+ sheets: {
20901
+ key: "sheets",
20902
+ label: "Sheets",
20903
+ icon: "grid-3x3",
20904
+ description: "Spreadsheet — cells, formulas, and formatting in a collaborative grid",
20905
+ core: true,
20906
+ supportsChildren: true,
20907
+ childLabel: "Column",
20908
+ grandchildLabel: "Cell",
20909
+ defaultMetaFields: [
20910
+ {
20911
+ type: "number",
20912
+ key: "sheetsDefaultColWidth",
20913
+ min: 40,
20914
+ max: 500,
20915
+ step: 10,
20916
+ label: "Column Width"
20917
+ },
20918
+ {
20919
+ type: "number",
20920
+ key: "sheetsDefaultRowHeight",
20921
+ min: 20,
20922
+ max: 100,
20923
+ step: 2,
20924
+ label: "Row Height"
20925
+ },
20926
+ {
20927
+ type: "toggle",
20928
+ key: "sheetsShowGridlines",
20929
+ label: "Gridlines"
20930
+ }
20931
+ ]
20932
+ },
20933
+ slides: {
20934
+ key: "slides",
20935
+ label: "Slides",
20936
+ icon: "presentation",
20937
+ description: "Presentation slides with two-axis navigation",
20938
+ core: true,
20939
+ supportsChildren: true,
20940
+ childLabel: "Slide",
20941
+ grandchildLabel: "Sub-slide",
20942
+ metaSchema: [{
20943
+ type: "select",
20944
+ key: "slidesTransition",
20945
+ options: [
20946
+ "none",
20947
+ "fade",
20948
+ "slide"
20949
+ ],
20950
+ label: "Transition"
20951
+ }, {
20952
+ type: "colorPreset",
20953
+ key: "color",
20954
+ presets: [
20955
+ "#6366f1",
20956
+ "#ec4899",
20957
+ "#f97316",
20958
+ "#22c55e",
20959
+ "#3b82f6",
20960
+ "#a855f7"
20961
+ ],
20962
+ label: "Accent"
20963
+ }],
20964
+ defaultMetaFields: [{
20965
+ type: "select",
20966
+ key: "slidesTheme",
20967
+ options: ["dark", "light"],
20968
+ label: "Theme"
20969
+ }]
20970
+ },
20971
+ overview: {
20972
+ key: "overview",
20973
+ label: "Overview",
20974
+ icon: "radar",
20975
+ description: "Space home — activity, people, stats, and health at a glance",
20976
+ core: true,
20977
+ supportsChildren: true,
20978
+ childLabel: "Page"
20979
+ },
20980
+ spatial: {
20981
+ key: "spatial",
20982
+ label: "Spatial",
20983
+ icon: "box",
20984
+ description: "3D scene with collaborative objects and real-time presence",
20985
+ core: false,
20986
+ plugin: "spatial",
20987
+ supportsChildren: true,
20988
+ childLabel: "Object",
20989
+ grandchildLabel: "Part",
20990
+ defaultDepth: -1,
20991
+ metaSchema: [
20992
+ {
20993
+ type: "select",
20994
+ key: "spShape",
20995
+ options: [
20996
+ "box",
20997
+ "sphere",
20998
+ "cylinder",
20999
+ "cone",
21000
+ "plane",
21001
+ "torus",
21002
+ "glb"
21003
+ ],
21004
+ label: "Shape"
21005
+ },
21006
+ {
21007
+ type: "colorPreset",
21008
+ key: "color",
21009
+ presets: [
21010
+ "#6366f1",
21011
+ "#ef4444",
21012
+ "#22c55e",
21013
+ "#3b82f6",
21014
+ "#f97316",
21015
+ "#a855f7",
21016
+ "#ec4899",
21017
+ "#14b8a6"
21018
+ ],
21019
+ label: "Color"
21020
+ },
21021
+ {
21022
+ type: "slider",
21023
+ key: "spOpacity",
21024
+ min: 0,
21025
+ max: 100,
21026
+ label: "Opacity"
21027
+ },
21028
+ {
21029
+ type: "number",
21030
+ key: "spX",
21031
+ step: .1,
21032
+ label: "X"
21033
+ },
21034
+ {
21035
+ type: "number",
21036
+ key: "spY",
21037
+ step: .1,
21038
+ label: "Y"
21039
+ },
21040
+ {
21041
+ type: "number",
21042
+ key: "spZ",
21043
+ step: .1,
21044
+ label: "Z"
21045
+ },
21046
+ {
21047
+ type: "number",
21048
+ key: "spRX",
21049
+ min: -180,
21050
+ max: 180,
21051
+ step: 1,
21052
+ label: "Rot X"
21053
+ },
21054
+ {
21055
+ type: "number",
21056
+ key: "spRY",
21057
+ min: -180,
21058
+ max: 180,
21059
+ step: 1,
21060
+ label: "Rot Y"
21061
+ },
21062
+ {
21063
+ type: "number",
21064
+ key: "spRZ",
21065
+ min: -180,
21066
+ max: 180,
21067
+ step: 1,
21068
+ label: "Rot Z"
21069
+ },
21070
+ {
21071
+ type: "number",
21072
+ key: "spSX",
21073
+ min: .01,
21074
+ max: 100,
21075
+ step: .1,
21076
+ label: "Scale X"
21077
+ },
21078
+ {
21079
+ type: "number",
21080
+ key: "spSY",
21081
+ min: .01,
21082
+ max: 100,
21083
+ step: .1,
21084
+ label: "Scale Y"
21085
+ },
21086
+ {
21087
+ type: "number",
21088
+ key: "spSZ",
21089
+ min: .01,
21090
+ max: 100,
21091
+ step: .1,
21092
+ label: "Scale Z"
21093
+ }
21094
+ ],
21095
+ defaultMetaFields: [{
21096
+ type: "toggle",
21097
+ key: "spatialGridVisible",
21098
+ label: "Show Grid",
21099
+ default: true
21100
+ }]
21101
+ },
21102
+ media: {
21103
+ key: "media",
21104
+ label: "Media",
21105
+ icon: "disc-3",
21106
+ description: "Media player with synced listening and playlists",
21107
+ core: false,
21108
+ plugin: "media",
21109
+ supportsChildren: true,
21110
+ childLabel: "Track",
21111
+ defaultDepth: -1,
21112
+ metaSchema: [{
21113
+ type: "tags",
21114
+ key: "tags",
21115
+ label: "Tags"
21116
+ }],
21117
+ defaultMetaFields: [{
21118
+ type: "select",
21119
+ key: "mediaRepeat",
21120
+ options: [
21121
+ "off",
21122
+ "all",
21123
+ "one"
21124
+ ],
21125
+ label: "Repeat"
21126
+ }, {
21127
+ type: "toggle",
21128
+ key: "mediaShuffle",
21129
+ label: "Shuffle"
21130
+ }]
21131
+ },
21132
+ coder: {
21133
+ key: "coder",
21134
+ label: "Coder",
21135
+ icon: "code-2",
21136
+ description: "Collaborative multi-file coding environment",
21137
+ core: false,
21138
+ plugin: "coder",
21139
+ supportsChildren: true,
21140
+ childLabel: "File",
21141
+ defaultDepth: -1,
21142
+ metaSchema: [{
21143
+ type: "select",
21144
+ key: "fileType",
21145
+ options: [
21146
+ "vue",
21147
+ "ts",
21148
+ "js",
21149
+ "css",
21150
+ "json",
21151
+ "folder"
21152
+ ],
21153
+ label: "Type"
21154
+ }, {
21155
+ type: "toggle",
21156
+ key: "entry",
21157
+ label: "Entry Point"
21158
+ }]
21159
+ }
21160
+ };
21161
+ const TYPE_ALIASES = { desktop: "dashboard" };
21162
+ function resolvePageType(key) {
21163
+ if (!key) return void 0;
21164
+ return PAGE_TYPES[TYPE_ALIASES[key] ?? key];
21165
+ }
21166
+
20438
21167
  //#endregion
20439
21168
  //#region packages/mcp/src/tools/tree.ts
20440
21169
  /**
@@ -20600,7 +21329,7 @@ function registerTreeTools(mcp, server) {
20600
21329
  mcp.tool("create_document", "Create a new document in the tree. Returns the new document ID.", {
20601
21330
  parentId: zod.z.string().optional().describe("Parent document ID. Omit for top-level pages. Use a document ID for nested/child pages."),
20602
21331
  label: zod.z.string().describe("Display name / title for the document."),
20603
- type: zod.z.string().optional().describe("Page type — sets how this document renders. \"doc\" (rich text), \"kanban\" (columns → cards), \"table\" (columns → rows with custom fields), \"calendar\" (events with datetimeStart/End), \"timeline\" (epics → tasks with dateStart/End + taskProgress), \"checklist\" (tasks with checked/priority, unlimited nesting), \"outline\" (nested items, unlimited depth), \"gallery\" (visual grid with covers/ratings), \"map\" (markers/lines with geoLat/geoLng), \"graph\" (force-directed knowledge graph), \"dashboard\" (positioned widgets with deskX/deskY/deskMode), \"spatial\" (3D scene with spShape/spX/spY/spZ), \"media\" (audio/video player with playlists), \"slides\" (presentation with transitions), \"chart\" (bar/line/donut/treemap from data points or aggregation), \"sheets\" (spreadsheet with formulas and formatting), \"overview\" (space home — activity and stats), \"call\" (video call room, no children). Omit to inherit parent view. Only set on the parent page, NEVER on child items."),
21332
+ type: zod.z.string().optional().describe("Page type — sets how this document renders. Core types (always available): \"doc\" (rich text), \"kanban\" (columns → cards), \"table\" (columns → rows, positional), \"calendar\" (events with datetimeStart/End), \"timeline\" (epics → tasks with dateStart/End + taskProgress), \"checklist\" (tasks with checked/priority, unlimited nesting), \"outline\" (nested items, unlimited depth), \"gallery\" (visual grid with covers/ratings), \"map\" (markers/lines with geoLat/geoLng), \"graph\" (force-directed knowledge graph), \"dashboard\" (positioned widgets with deskX/deskY/deskMode), \"slides\" (slides sub-slides with transitions), \"chart\" (bar/stacked bar/line/donut/treemap from data points or aggregation), \"sheets\" (spreadsheet with formulas and formatting), \"overview\" (space home — activity and stats), \"call\" (video call room, no children). Plugin types (require plugin enabled on the server): \"spatial\" (3D scene with spShape/spX/spY/spZ + universal color, plugin: spatial), \"media\" (audio/video player with playlists, plugin: media), \"coder\" (collaborative multi-file coding env with fileType/entry, plugin: coder). Alias: \"desktop\" → \"dashboard\". Omit to inherit parent view. Only set on the parent page, NEVER on child items."),
20604
21333
  meta: zod.z.record(zod.z.unknown()).optional().describe("Initial metadata (PageMeta fields: color as hex string, icon as Lucide kebab-case name like \"star\"/\"code-2\"/\"users\" — never emoji, dateStart, dateEnd, priority 0-4, tags array, etc). Omit icon entirely to use page type default.")
20605
21334
  }, async ({ parentId, label, type, meta }) => {
20606
21335
  server.setAutoStatus("creating");
@@ -20761,7 +21490,7 @@ function registerTreeTools(mcp, server) {
20761
21490
  });
20762
21491
  mcp.tool("change_document_type", "Change the page type view of a document (data is preserved).", {
20763
21492
  id: zod.z.string().describe("Document ID."),
20764
- type: zod.z.string().describe("New page type: \"doc\", \"kanban\", \"table\", \"calendar\", \"timeline\", \"checklist\", \"outline\", \"gallery\", \"map\", \"graph\", \"dashboard\", \"spatial\", \"media\", \"slides\", \"chart\", \"sheets\", \"overview\", \"call\".")
21493
+ type: zod.z.string().describe("New page type. Core: \"doc\", \"kanban\", \"table\", \"calendar\", \"timeline\", \"checklist\", \"outline\", \"gallery\", \"map\", \"graph\", \"dashboard\", \"slides\", \"chart\", \"sheets\", \"overview\", \"call\". Plugin (require plugin enabled): \"spatial\", \"media\", \"coder\". Switching preserves the tree — children, labels, and meta are all retained; only the view changes.")
20765
21494
  }, async ({ id, type }) => {
20766
21495
  server.setAutoStatus("writing");
20767
21496
  server.setActiveToolCall({
@@ -20846,6 +21575,27 @@ function registerTreeTools(mcp, server) {
20846
21575
  }, null, 2)
20847
21576
  }] };
20848
21577
  });
21578
+ mcp.tool("list_page_types", "Enumerate all known Abracadabra page types with their metadata schemas. Returns an array of { key, label, icon, description, core, plugin, supportsChildren, childLabel, grandchildLabel, defaultDepth, metaSchema, defaultMetaFields }. `metaSchema` describes fields that apply to DESCENDANTS (children, grandchildren, ...) of a page of this type. `defaultMetaFields` are view-config fields on the page doc itself. Plugin types (core: false) require the named plugin to be enabled on the server. Use this to discover what meta keys a given renderer supports instead of guessing.", { key: zod.z.string().optional().describe("Filter to a single type by key (e.g. \"kanban\", \"calendar\"). Aliases are resolved (e.g. \"desktop\" → \"dashboard\"). Omit to list all types.") }, async ({ key }) => {
21579
+ if (key) {
21580
+ const resolved = resolvePageType(key);
21581
+ if (!resolved) return { content: [{
21582
+ type: "text",
21583
+ text: `Unknown page type "${key}". Call list_page_types with no args to see all types.`
21584
+ }] };
21585
+ return { content: [{
21586
+ type: "text",
21587
+ text: JSON.stringify(resolved, null, 2)
21588
+ }] };
21589
+ }
21590
+ const all = Object.values(PAGE_TYPES);
21591
+ return { content: [{
21592
+ type: "text",
21593
+ text: JSON.stringify({
21594
+ types: all,
21595
+ aliases: TYPE_ALIASES
21596
+ }, null, 2)
21597
+ }] };
21598
+ });
20849
21599
  }
20850
21600
 
20851
21601
  //#endregion
@@ -22144,7 +22894,7 @@ function registerMetaTools(mcp, server) {
22144
22894
  });
22145
22895
  mcp.tool("update_metadata", "Update metadata fields on a document. Merges the provided fields into existing metadata.", {
22146
22896
  docId: zod.z.string().describe("Document ID."),
22147
- meta: zod.z.record(zod.z.unknown()).describe("Metadata fields to update (merged with existing). Universal keys: color (hex), icon (Lucide kebab-case — NEVER emoji), dateStart/dateEnd, datetimeStart/datetimeEnd, allDay, tags (string[]), checked (bool), priority (0=none,1=low,2=med,3=high,4=urgent), status, rating (0-5), url, email, phone, number, unit, subtitle, note, taskProgress (0-100), members ({id,label}[]), coverUploadId. Geo/Map: geoType (\"marker\"|\"line\"|\"measure\"), geoLat, geoLng, geoDescription. Spatial 3D: spShape (\"box\"|\"sphere\"|\"cylinder\"|\"cone\"|\"plane\"|\"torus\"|\"glb\"), spX/spY/spZ, spRX/spRY/spRZ, spSX/spSY/spSZ, spColor, spOpacity (0-100). Dashboard: deskX, deskY, deskZ, deskMode (\"icon\"|\"widget-sm\"|\"widget-lg\"). Slides: slidesTransition (\"none\"|\"fade\"|\"slide\"), slidesTheme (\"dark\"|\"light\"). Chart: chartType (\"bar\"|\"stacked bar\"|\"line\"|\"donut\"|\"treemap\"), chartMetric, chartColorScheme, chartLimit, chartShowLegend, chartShowValues. Sheets: sheetsDefaultColWidth, sheetsDefaultRowHeight, sheetsShowGridlines, sheetsFreezeRows, sheetsFreezeCols. Cell formatting: bold, italic, textColor, bgColor, align, formula. Renderer config (on the page doc itself): kanbanColumnWidth, galleryColumns, galleryAspect, galleryCardStyle, galleryShowLabels, gallerySortBy, calendarView, calendarWeekStart, calendarShowWeekNumbers, tableMode, tableSortDir, checklistFilter, checklistSort, mapShowLabels, spatialGridVisible, showRefEdges, mediaRepeat, mediaShuffle. Set a key to null to clear it.")
22897
+ meta: zod.z.record(zod.z.unknown()).describe("Metadata fields to update (merged with existing). Universal keys: color (hex), icon (Lucide kebab-case — NEVER emoji), dateStart/dateEnd, datetimeStart/datetimeEnd, allDay, timeStart/timeEnd, tags (string[]), checked (bool), priority (0=none,1=low,2=med,3=high,4=urgent), status, rating (0-5), url, email, phone, number, unit, subtitle, note, taskProgress (0-100), members ({id,label}[]), coverUploadId, coverDocId, dateTaken. Geo/Map (children): geoType (\"marker\"|\"line\"|\"measure\"), geoLat, geoLng, geoDescription. Spatial 3D (children, plugin: spatial): spShape (\"box\"|\"sphere\"|\"cylinder\"|\"cone\"|\"plane\"|\"torus\"|\"glb\"), spX/spY/spZ, spRX/spRY/spRZ (deg), spSX/spSY/spSZ (scale), spOpacity (0-100), spModelUploadId, spModelDocId — spatial uses the universal `color` key, NOT spColor. Dashboard (children): deskX, deskY, deskZ, deskMode (\"icon\"|\"widget-sm\"|\"widget-lg\"). Mindmap-layout (children): mmX, mmY. Graph-layout (children): graphX, graphY, graphPinned. Slides (children): slidesTransition (\"none\"|\"fade\"|\"slide\"). Coder (children, plugin: coder): fileType (\"vue\"|\"ts\"|\"js\"|\"css\"|\"json\"|\"folder\"), entry (bool). Cell formatting (sheets cells): bold, italic, textColor, bgColor, align (\"left\"|\"center\"|\"right\"), formula. Renderer config (on the PAGE doc itself, not children): kanbanColumnWidth (\"narrow\"|\"default\"|\"wide\"), galleryColumns (1-6), galleryAspect (\"square\"|\"4:3\"|\"3:2\"|\"16:9\"|\"free\"), galleryCardStyle (\"default\"|\"compact\"|\"detailed\"), galleryShowLabels, gallerySortBy (\"manual\"|\"date\"|\"name\"|\"rating\"), calendarView (\"month\"|\"week\"|\"day\"), calendarWeekStart (\"sun\"|\"mon\"), calendarShowWeekNumbers, tableMode (\"hierarchy\"|\"flat\"), tableSortKey, tableSortDir (\"asc\"|\"desc\"), timelineZoom (\"week\"|\"month\"|\"quarter\"), timelinePixelsPerDay, timelineCenterDate (ISO date), checklistFilter (\"all\"|\"active\"|\"completed\"), checklistSort (\"manual\"|\"priority\"|\"due\"), mapShowLabels, graphSpacing (\"compact\"|\"default\"|\"spacious\"), graphShowLabels, graphEdgeThickness (\"thin\"|\"normal\"|\"thick\"), showRefEdges, mmSpacing, spatialGridVisible, slidesTheme (\"dark\"|\"light\"), chartType (\"bar\"|\"stacked bar\"|\"line\"|\"donut\"|\"treemap\"), chartMetric (\"value\"|\"type\"|\"tag\"|\"status\"|\"priority\"|\"activity\"|\"completion\"), chartColorScheme (\"default\"|\"warm\"|\"cool\"|\"mono\"), chartLimit (3-30), chartShowLegend, chartShowValues, sheetsDefaultColWidth (40-500), sheetsDefaultRowHeight (20-100), sheetsShowGridlines, sheetsFreezeRows, sheetsFreezeCols, mediaRepeat (\"off\"|\"all\"|\"one\"), mediaShuffle. Set a key to null to clear it.")
22148
22898
  }, async ({ docId, meta }) => {
22149
22899
  server.setAutoStatus("writing", docId);
22150
22900
  server.setActiveToolCall({
@@ -22711,24 +23461,38 @@ If you are adding content to an existing space, call \`get_document_tree(rootId:
22711
23461
 
22712
23462
  ## Page Types Reference
22713
23463
 
23464
+ ### Core Types (always available)
23465
+
22714
23466
  | Type | Children Are | Grandchildren Are | Depth | Key Meta on Children |
22715
23467
  |------|-------------|-------------------|-------|---------------------|
22716
23468
  | **doc** | Sub-documents | Sub-sub-documents | ∞ | — |
22717
23469
  | **kanban** | Columns | Cards | 2 | color, icon on cards |
22718
23470
  | **table** | Columns | Cells (positional rows) | 2 | — |
22719
- | **calendar** | Events | — | 1 | datetimeStart, datetimeEnd, allDay, color |
23471
+ | **calendar** | Events | — | 1 | datetimeStart, datetimeEnd, allDay, color, icon |
22720
23472
  | **timeline** | Epics | Tasks | 2 | dateStart, dateEnd, taskProgress, color |
22721
23473
  | **checklist** | Tasks | Sub-tasks | ∞ | checked, priority, dateEnd |
22722
23474
  | **outline** | Items | Sub-items | ∞ | — |
22723
- | **mindmap** | Central nodes | Branches | ∞ | mmX, mmY |
22724
23475
  | **graph** | Nodes | — | 1 | graphX, graphY, graphPinned, color |
22725
- | **gallery** | Items | — | 1 | geoLat, geoLng, datetimeStart, tags |
23476
+ | **gallery** | Items | — | 1 | geoLat, geoLng, datetimeStart, tags, rating, icon, color |
22726
23477
  | **map** | Markers/Lines | Points (for lines) | 2 | geoType, geoLat, geoLng, icon, color |
22727
- | **dashboard** | Items | | 1 | deskX, deskY, deskMode |
22728
- | **spatial** | Objects | Sub-parts | | spShape, spX/Y/Z, spColor, spOpacity |
22729
- | **media** | Tracks | | 1 | tags |
22730
- | **slides** | Slides | | 1 | |
22731
- | **whiteboard** | Objects | — | 1 | wbX, wbY, wbW, wbH |
23478
+ | **slides** | Slides | Sub-slides | 2 | slidesTransition, color |
23479
+ | **dashboard** | Items | | 1 | deskX, deskY, deskZ, deskMode |
23480
+ | **chart** | Data points | Data points | 2 | number (value), color, tags |
23481
+ | **sheets** | Columns | Cells | 2 | formula, bold, italic, textColor, bgColor, align |
23482
+ | **overview** | Pages | — | 1 | |
23483
+ | **call** | — (no children) | — | 0 | — |
23484
+
23485
+ Alias: \`desktop\` → \`dashboard\`.
23486
+
23487
+ ### Plugin Types (require plugin enabled on the server)
23488
+
23489
+ | Type | Plugin | Children Are | Grandchildren Are | Depth | Key Meta on Children |
23490
+ |------|--------|-------------|-------------------|-------|---------------------|
23491
+ | **spatial** | spatial | Objects | Sub-parts | ∞ | spShape, spX/Y/Z, spRX/RY/RZ, spSX/SY/SZ, color, spOpacity |
23492
+ | **media** | media | Tracks | — | ∞ | tags |
23493
+ | **coder** | coder | Files/Folders | — | ∞ | fileType, entry |
23494
+
23495
+ > Spatial uses the universal \`color\` key for object color — there is no \`spColor\`.
22732
23496
 
22733
23497
  ---
22734
23498
 
@@ -22801,18 +23565,65 @@ If you are adding content to an existing space, call \`get_document_tree(rootId:
22801
23565
  4. Modes: \`"icon"\` (small), \`"widget-sm"\` (240×180), \`"widget-lg"\` (400×320)
22802
23566
  5. Grid uses 80px cells
22803
23567
 
22804
- **Spatial (3D scene):**
23568
+ **Spatial (3D scene)** *(requires spatial plugin):*
22805
23569
  1. \`create_document(parentId, "3D Scene", "spatial")\`
22806
23570
  2. Create objects: \`create_document(sceneId, "Red Cube")\`
22807
- 3. Set 3D properties: \`update_metadata(objId, { spShape: "box", spColor: "#ef4444", spX: 0, spY: 1, spZ: 0, spSX: 2, spSY: 2, spSZ: 2 })\`
22808
- 4. Shapes: \`"box"\`, \`"sphere"\`, \`"cylinder"\`, \`"cone"\`, \`"plane"\`, \`"torus"\`, \`"glb"\` (uploaded 3D model)
23571
+ 3. Set 3D properties: \`update_metadata(objId, { spShape: "box", color: "#ef4444", spX: 0, spY: 1, spZ: 0, spSX: 2, spSY: 2, spSZ: 2 })\`
23572
+ 4. Shapes: \`"box"\`, \`"sphere"\`, \`"cylinder"\`, \`"cone"\`, \`"plane"\`, \`"torus"\`, \`"glb"\` (uploaded 3D model — set \`spModelUploadId\` and \`spModelDocId\`)
22809
23573
  5. Rotation (degrees): \`spRX\`, \`spRY\`, \`spRZ\`. Scale: \`spSX\`, \`spSY\`, \`spSZ\` (default 1). Opacity: \`spOpacity\` (0–100)
23574
+ 6. Use the universal \`color\` key — **never \`spColor\`**
22810
23575
 
22811
23576
  **Outline (nested items):**
22812
23577
  1. \`create_document(parentId, "Meeting Notes", "outline")\`
22813
23578
  2. Create items: \`create_document(outlineId, "Agenda Item 1")\`
22814
23579
  3. Create sub-items (unlimited depth): \`create_document(itemId, "Sub-point")\`
22815
23580
 
23581
+ **Slides (presentation with two-axis nav):**
23582
+ 1. \`create_document(parentId, "Q1 Review", "slides")\`
23583
+ 2. Create slides as direct children: \`create_document(deckId, "Intro")\`
23584
+ 3. Create sub-slides (vertical navigation) as grandchildren: \`create_document(slideId, "Deep dive")\`
23585
+ 4. Per-slide transition: \`update_metadata(slideId, { slidesTransition: "fade", color: "#6366f1" })\`
23586
+ 5. Deck-level theme: \`update_metadata(deckId, { slidesTheme: "dark" })\`
23587
+
23588
+ **Chart (data viz — manual or aggregation):**
23589
+ 1. \`create_document(parentId, "Sales", "chart")\`
23590
+ 2. Configure: \`update_metadata(chartId, { chartType: "bar", chartMetric: "value", chartShowLegend: true, chartLimit: 10 })\`
23591
+ 3. Modes:
23592
+ - **Manual data points**: create children with \`number\` (value) and optional \`tags\`/\`color\`
23593
+ \`create_document(chartId, "Q1")\` then \`update_metadata(dpId, { number: 42500, color: "#6366f1" })\`
23594
+ - **Aggregation**: set \`chartMetric\` to \`"type"\`/\`"tag"\`/\`"status"\`/\`"priority"\`/\`"activity"\`/\`"completion"\` and point the chart at a subtree — it aggregates the descendants' meta automatically
23595
+ 4. Chart types: \`"bar"\`, \`"stacked bar"\`, \`"line"\`, \`"donut"\`, \`"treemap"\`
23596
+ 5. Color schemes: \`"default"\`, \`"warm"\`, \`"cool"\`, \`"mono"\`
23597
+
23598
+ **Sheets (spreadsheet with formulas):**
23599
+ 1. \`create_document(parentId, "Budget", "sheets")\`
23600
+ 2. Create columns: \`create_document(sheetId, "A")\`, \`create_document(sheetId, "B")\`
23601
+ 3. Create cells under columns (positional rows, like \`table\`)
23602
+ 4. Formulas on cells: \`update_metadata(cellId, { formula: "=A1+B1" })\`
23603
+ 5. Cell formatting: \`update_metadata(cellId, { bold: true, bgColor: "#fef3c7", align: "right" })\`
23604
+ 6. Deck config: \`update_metadata(sheetId, { sheetsDefaultColWidth: 120, sheetsDefaultRowHeight: 28, sheetsShowGridlines: true, sheetsFreezeRows: 1, sheetsFreezeCols: 1 })\`
23605
+
23606
+ **Overview (space home):**
23607
+ 1. \`create_document(parentId, "Home", "overview")\`
23608
+ 2. No children required — renders activity, people, stats from the surrounding space
23609
+ 3. Children (if any) show as linked pages
23610
+
23611
+ **Call (video room):**
23612
+ 1. \`create_document(parentId, "Daily Standup", "call")\`
23613
+ 2. Video rooms have **no children** — do not add documents underneath
23614
+
23615
+ **Coder (multi-file collaborative editor)** *(requires coder plugin):*
23616
+ 1. \`create_document(parentId, "My App", "coder")\`
23617
+ 2. Create files/folders: \`create_document(projectId, "App.vue")\`, \`create_document(projectId, "src")\`
23618
+ 3. Set file type: \`update_metadata(fileId, { fileType: "vue", entry: true })\`
23619
+ 4. \`fileType\` options: \`"vue"\`, \`"ts"\`, \`"js"\`, \`"css"\`, \`"json"\`, \`"folder"\`
23620
+ 5. Mark the entry file with \`entry: true\` — the renderer uses it as the preview root
23621
+
23622
+ **Media (audio/video playlist)** *(requires media plugin):*
23623
+ 1. \`create_document(parentId, "Focus Mix", "media")\`
23624
+ 2. Create tracks: \`create_document(playlistId, "Track 1")\` — attach audio/video file via upload tool
23625
+ 3. Playlist config: \`update_metadata(playlistId, { mediaRepeat: "all", mediaShuffle: false })\`
23626
+
22816
23627
  ---
22817
23628
 
22818
23629
  ## Document References
@@ -22887,22 +23698,55 @@ In the **graph** page type, document references (embeds and links) create visibl
22887
23698
  |-----|------|-----------|--------|
22888
23699
  | \`kanbanColumnWidth\` | string | kanban | "narrow", "default", "wide" |
22889
23700
  | \`galleryColumns\` | number | gallery | 1–6 |
22890
- | \`galleryAspect\` | string | gallery | "square", "4:3", "16:9" |
23701
+ | \`galleryAspect\` | string | gallery | "square", "4:3", "3:2", "16:9", "free" |
23702
+ | \`galleryCardStyle\` | string | gallery | "default", "compact", "detailed" |
23703
+ | \`galleryShowLabels\` | boolean | gallery | show item labels |
23704
+ | \`gallerySortBy\` | string | gallery | "manual", "date", "name", "rating" |
22891
23705
  | \`calendarView\` | string | calendar | "month", "week", "day" |
22892
23706
  | \`calendarWeekStart\` | string | calendar | "sun", "mon" |
23707
+ | \`calendarShowWeekNumbers\` | boolean | calendar | — |
22893
23708
  | \`tableMode\` | string | table | "hierarchy", "flat" |
23709
+ | \`tableSortKey\` | string | table | meta key to sort by |
23710
+ | \`tableSortDir\` | string | table | "asc", "desc" |
23711
+ | \`timelineZoom\` | string | timeline | "week", "month", "quarter" |
23712
+ | \`timelinePixelsPerDay\` | number | timeline | zoom granularity |
23713
+ | \`timelineCenterDate\` | string | timeline | ISO date to center view |
23714
+ | \`checklistFilter\` | string | checklist | "all", "active", "completed" |
23715
+ | \`checklistSort\` | string | checklist | "manual", "priority", "due" |
23716
+ | \`mapShowLabels\` | boolean | map | — |
23717
+ | \`graphSpacing\` | string | graph | "compact", "default", "spacious" |
23718
+ | \`graphShowLabels\` | boolean | graph | — |
23719
+ | \`graphEdgeThickness\` | string | graph | "thin", "normal", "thick" |
22894
23720
  | \`showRefEdges\` | boolean | graph | show doc-reference edges |
22895
-
22896
- ### Spatial 3D Keys (for spatial children)
23721
+ | \`mmSpacing\` | string | mindmap-layout | spacing between branches |
23722
+ | \`spatialGridVisible\` | boolean | spatial | show ground grid |
23723
+ | \`slidesTheme\` | string | slides | "dark", "light" |
23724
+ | \`chartType\` | string | chart | "bar", "stacked bar", "line", "donut", "treemap" |
23725
+ | \`chartMetric\` | string | chart | "value", "type", "tag", "status", "priority", "activity", "completion" |
23726
+ | \`chartColorScheme\` | string | chart | "default", "warm", "cool", "mono" |
23727
+ | \`chartLimit\` | number | chart | 3–30 (max items) |
23728
+ | \`chartShowLegend\` | boolean | chart | — |
23729
+ | \`chartShowValues\` | boolean | chart | — |
23730
+ | \`sheetsDefaultColWidth\` | number | sheets | 40–500 |
23731
+ | \`sheetsDefaultRowHeight\` | number | sheets | 20–100 |
23732
+ | \`sheetsShowGridlines\` | boolean | sheets | — |
23733
+ | \`sheetsFreezeRows\` | number | sheets | frozen rows count |
23734
+ | \`sheetsFreezeCols\` | number | sheets | frozen cols count |
23735
+ | \`mediaRepeat\` | string | media | "off", "all", "one" (plugin) |
23736
+ | \`mediaShuffle\` | boolean | media | plugin |
23737
+
23738
+ ### Spatial 3D Keys (for spatial children — requires spatial plugin)
22897
23739
 
22898
23740
  | Key | Type | Default | Meaning |
22899
23741
  |-----|------|---------|---------|
22900
23742
  | \`spShape\` | string | — | "box", "sphere", "cylinder", "cone", "plane", "torus", "glb" |
22901
- | \`spColor\` | string | — | CSS color |
23743
+ | \`color\` | string | — | CSS color — universal key, **not** \`spColor\` |
22902
23744
  | \`spOpacity\` | number | 100 | 0–100 |
22903
23745
  | \`spX\`, \`spY\`, \`spZ\` | number | 0 | Position |
22904
23746
  | \`spRX\`, \`spRY\`, \`spRZ\` | number | 0 | Rotation (degrees) |
22905
23747
  | \`spSX\`, \`spSY\`, \`spSZ\` | number | 1 | Scale |
23748
+ | \`spModelUploadId\` | string | — | GLB upload ID (when \`spShape: "glb"\`) |
23749
+ | \`spModelDocId\` | string | — | Doc ID that owns the GLB upload |
22906
23750
 
22907
23751
  ### Dashboard Keys (for dashboard children)
22908
23752
 
@@ -22912,6 +23756,28 @@ In the **graph** page type, document references (embeds and links) create visibl
22912
23756
  | \`deskZ\` | number | Z-index (layering) |
22913
23757
  | \`deskMode\` | string | "icon", "widget-sm" (240×180), "widget-lg" (400×320) |
22914
23758
 
23759
+ ### Sheets Cell Formatting (per-cell meta)
23760
+
23761
+ | Key | Type | Meaning |
23762
+ |-----|------|---------|
23763
+ | \`formula\` | string | Cell formula (e.g. "=A1+B1") |
23764
+ | \`bold\` | boolean | — |
23765
+ | \`italic\` | boolean | — |
23766
+ | \`textColor\` | string | CSS color |
23767
+ | \`bgColor\` | string | CSS color |
23768
+ | \`align\` | string | "left", "center", "right" |
23769
+
23770
+ ### Coder Keys (for coder children — plugin)
23771
+
23772
+ | Key | Type | Meaning |
23773
+ |-----|------|---------|
23774
+ | \`fileType\` | string | "vue", "ts", "js", "css", "json", "folder" |
23775
+ | \`entry\` | boolean | Mark this file as the preview entry point |
23776
+
23777
+ ### Discovering What Metadata Applies
23778
+
23779
+ Use the \`list_page_types\` tool to enumerate all known page types and their declared \`metaSchema\` (fields that apply to children/descendants) and \`defaultMetaFields\` (renderer config fields on the page itself). It's the authoritative list of what meta keys make sense for any given page type.
23780
+
22915
23781
  ---
22916
23782
 
22917
23783
  ## Content Structure
@@ -22994,8 +23860,11 @@ Always clear fields when done by setting them to \`null\`.
22994
23860
  | **Outline** | \`outline:editing\` | nodeId | Editing an outline node |
22995
23861
  | **Gallery** | \`gallery:focused\` | itemId | Item hovered/selected |
22996
23862
  | **Timeline** | \`timeline:focused\` | taskId | Task selected |
22997
- | **Mindmap** | \`mindmap:focused\` | nodeId | Node selected/edited |
22998
23863
  | **Graph** | \`graph:focused\` | nodeId | Node hovered/selected |
23864
+ | **Slides** | \`slides:current\` | slideId | Slide being presented |
23865
+ | **Spatial** | \`spatial:selected\`, \`spatial:camera\` | objectId / camera state | plugin |
23866
+ | **Media** | \`media:playing\`, \`media:position\` | trackId / 0–1 | plugin |
23867
+ | **Coder** | \`coder:activeFile\` | fileId | plugin |
22999
23868
  | **Map** | \`map:focused\` | markerId | Marker hovered/selected |
23000
23869
  | **Doc** | \`doc:scroll\` | 0–1 number | Scroll position in document |
23001
23870