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