Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 9 additions & 3 deletions .cursor/rules/we-schema.mdc
Original file line number Diff line number Diff line change
Expand Up @@ -703,7 +703,7 @@ when `relative` is enabled.
- we-tooltip (LayoutElement)
Props: open: boolean = false, title: string = '', placement: 'top' | 'bottom' | 'left' | 'right' | 'top-start' | 'top-end' | 'bottom-start' | 'bottom-end' | 'left-start' | 'left-end' | 'right-start' | 'right-end' = 'top', tooltipEl: HTMLElement, triggerEl: HTMLElement, arrowEl: HTMLElement
- we-video (LayoutVisualElement)
Props: src: string = '', poster?: string | undefined, controls: boolean = false, preload: 'none' | 'metadata' | 'auto' = 'metadata', autoplay: boolean = false, loop: boolean = false, muted: boolean = false
Props: src: string = '', poster?: string | undefined, controls: boolean = false, preload: 'none' | 'metadata' | 'auto' = 'metadata', autoplay: boolean = false, loop: boolean = false, muted: boolean = false, playsinline: boolean = false, stream?: MediaStream | null | undefined

@we/components:
- AudioDisplay
Expand Down Expand Up @@ -829,8 +829,8 @@ when `relative` is enabled.
@we/widgets:
- CesiumGlobe — 3D globe widget using CesiumJS with a modular layer system.
Layers are injected via factory functions (planet surface + background).
Requires a layer factory registry mapping string names to factory functions.
Not schema-renderable — used directly in application code.
Registered in the app's component registry, which injects `layerFactoryRegistry` — so templates
place it as `CesiumGlobe` without supplying that prop themselves.
Props: ionAccessToken?: string, planetLayers?: LayerConfig<unknown>[], backgroundLayers?: LayerConfig<unknown>[], layerFactoryRegistry: Record<string, LayerFactory<any>>
- CollapsibleSidebar
Props: header?: JSX.Element, footer?: JSX.Element, items: CollapsibleSidebarItem[], footerItems?: CollapsibleSidebarItem[], side?: "left" | "right", position?: "static" | "absolute" | "fixed", zIndex?: number, collapsedWidth?: string, expandedWidth?: string, defaultExpanded?: boolean, expandOnHover?: boolean, transitionDuration?: number, bg?: string, border?: string, padding?: string, gap?: string, centerItems?: boolean, itemColor?: string, itemColorHover?: string, itemColorActive?: string, itemBg?: string, itemBgHover?: string, itemBgActive?: string, itemPadding?: string, itemGap?: string, badgeBg?: string, badgeColor?: string, iconSize?: IconSize, onItemClick?: ((item: CollapsibleSidebarItem) => void), onExpandedChange?: ((expanded: boolean) => void)
Expand Down Expand Up @@ -1191,6 +1191,7 @@ Space extends WeNode:
- coverImage: string [we://thumbnail]
- defaultTemplateId: string [we://default_template_id]
- defaultThemeId: string [we://default_theme_id]
- enabledModules: string [we://enabled_modules]
Relations:
- location: HasOne [we://location]

Expand Down Expand Up @@ -1368,6 +1369,9 @@ SpaceStore:
- foreignSpacePrefill: { name, description, avatar } | null — detected from a foreign app's own model (e.g. Flux's Community) for prefilling the "Initialize as WE space" gate; null once the perspective is a WE space or no recognized foreign model is found
- signalTypes: array of SignalType objects (community-created reaction/vote types)
- signalTypesBySlug: Record<slug, SignalType> — computed map; access via { $store: "spaceStore.signalTypesBySlug.<slug>" }; use .id for the UUID
- enabledModules: string[] — ids of the feature modules this space has turned on. An unset value means "not decided", not "none": it falls back to every registered module, so spaces predating the setting keep the chrome they had
- moduleSettings: { id, name, description, icon, enabled }[] — every registered module paired with whether this space has it on; the shape the settings list renders
- moduleLaunchers: { id, icon, label, active }[] — launchers for the modules enabled here and available in this space; what the host module rail renders. Pair with { $action: "spaceStore.launchModule", args: ["$mod.id"] }
- Actions:
- createPost(editorState: unknown): creates a new post
- updatePost(postId: string, editorState: unknown): reconciles an edited post against its existing blocks — updates/reuses blocks whose id survived the edit, creates new ones, deletes ones no longer present
Expand All @@ -1376,6 +1380,8 @@ SpaceStore:
- createSignalType(config: Partial<SignalType>): creates a new signal type in the community; slug auto-derived from name if blank
- upsertSignal(nodeId: string, signalTypeId: string, value: number): adds or updates a signal on a node; value=0 deletes it
- navigateToSpace(spaceId: string, view?: string): navigates to a space — accepts a perspective UUID or a neighbourhood CID (sharedUrl without the neighbourhood:// prefix); pre-loads space templates before switching so the template and data arrive together
- setModuleEnabled(moduleId: string, enabled: boolean): turns a feature module on or off for the current space; writes the resolved list, so the first toggle also pins whatever was on by fallback
- launchModule(moduleId: string): invokes that module's declared launcher action. Takes an id rather than a path because $action resolves a literal string, so a rail iterating over modules cannot build modules.<id>.<method> itself

AiStore:
- State:
Expand Down
12 changes: 9 additions & 3 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -703,7 +703,7 @@ when `relative` is enabled.
- we-tooltip (LayoutElement)
Props: open: boolean = false, title: string = '', placement: 'top' | 'bottom' | 'left' | 'right' | 'top-start' | 'top-end' | 'bottom-start' | 'bottom-end' | 'left-start' | 'left-end' | 'right-start' | 'right-end' = 'top', tooltipEl: HTMLElement, triggerEl: HTMLElement, arrowEl: HTMLElement
- we-video (LayoutVisualElement)
Props: src: string = '', poster?: string | undefined, controls: boolean = false, preload: 'none' | 'metadata' | 'auto' = 'metadata', autoplay: boolean = false, loop: boolean = false, muted: boolean = false
Props: src: string = '', poster?: string | undefined, controls: boolean = false, preload: 'none' | 'metadata' | 'auto' = 'metadata', autoplay: boolean = false, loop: boolean = false, muted: boolean = false, playsinline: boolean = false, stream?: MediaStream | null | undefined

@we/components:
- AudioDisplay
Expand Down Expand Up @@ -829,8 +829,8 @@ when `relative` is enabled.
@we/widgets:
- CesiumGlobe — 3D globe widget using CesiumJS with a modular layer system.
Layers are injected via factory functions (planet surface + background).
Requires a layer factory registry mapping string names to factory functions.
Not schema-renderable — used directly in application code.
Registered in the app's component registry, which injects `layerFactoryRegistry` — so templates
place it as `CesiumGlobe` without supplying that prop themselves.
Props: ionAccessToken?: string, planetLayers?: LayerConfig<unknown>[], backgroundLayers?: LayerConfig<unknown>[], layerFactoryRegistry: Record<string, LayerFactory<any>>
- CollapsibleSidebar
Props: header?: JSX.Element, footer?: JSX.Element, items: CollapsibleSidebarItem[], footerItems?: CollapsibleSidebarItem[], side?: "left" | "right", position?: "static" | "absolute" | "fixed", zIndex?: number, collapsedWidth?: string, expandedWidth?: string, defaultExpanded?: boolean, expandOnHover?: boolean, transitionDuration?: number, bg?: string, border?: string, padding?: string, gap?: string, centerItems?: boolean, itemColor?: string, itemColorHover?: string, itemColorActive?: string, itemBg?: string, itemBgHover?: string, itemBgActive?: string, itemPadding?: string, itemGap?: string, badgeBg?: string, badgeColor?: string, iconSize?: IconSize, onItemClick?: ((item: CollapsibleSidebarItem) => void), onExpandedChange?: ((expanded: boolean) => void)
Expand Down Expand Up @@ -1191,6 +1191,7 @@ Space extends WeNode:
- coverImage: string [we://thumbnail]
- defaultTemplateId: string [we://default_template_id]
- defaultThemeId: string [we://default_theme_id]
- enabledModules: string [we://enabled_modules]
Relations:
- location: HasOne [we://location]

Expand Down Expand Up @@ -1368,6 +1369,9 @@ SpaceStore:
- foreignSpacePrefill: { name, description, avatar } | null — detected from a foreign app's own model (e.g. Flux's Community) for prefilling the "Initialize as WE space" gate; null once the perspective is a WE space or no recognized foreign model is found
- signalTypes: array of SignalType objects (community-created reaction/vote types)
- signalTypesBySlug: Record<slug, SignalType> — computed map; access via { $store: "spaceStore.signalTypesBySlug.<slug>" }; use .id for the UUID
- enabledModules: string[] — ids of the feature modules this space has turned on. An unset value means "not decided", not "none": it falls back to every registered module, so spaces predating the setting keep the chrome they had
- moduleSettings: { id, name, description, icon, enabled }[] — every registered module paired with whether this space has it on; the shape the settings list renders
- moduleLaunchers: { id, icon, label, active }[] — launchers for the modules enabled here and available in this space; what the host module rail renders. Pair with { $action: "spaceStore.launchModule", args: ["$mod.id"] }
- Actions:
- createPost(editorState: unknown): creates a new post
- updatePost(postId: string, editorState: unknown): reconciles an edited post against its existing blocks — updates/reuses blocks whose id survived the edit, creates new ones, deletes ones no longer present
Expand All @@ -1376,6 +1380,8 @@ SpaceStore:
- createSignalType(config: Partial<SignalType>): creates a new signal type in the community; slug auto-derived from name if blank
- upsertSignal(nodeId: string, signalTypeId: string, value: number): adds or updates a signal on a node; value=0 deletes it
- navigateToSpace(spaceId: string, view?: string): navigates to a space — accepts a perspective UUID or a neighbourhood CID (sharedUrl without the neighbourhood:// prefix); pre-loads space templates before switching so the template and data arrive together
- setModuleEnabled(moduleId: string, enabled: boolean): turns a feature module on or off for the current space; writes the resolved list, so the first toggle also pins whatever was on by fallback
- launchModule(moduleId: string): invokes that module's declared launcher action. Takes an id rather than a path because $action resolves a literal string, so a rail iterating over modules cannot build modules.<id>.<method> itself

AiStore:
- State:
Expand Down
12 changes: 9 additions & 3 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -703,7 +703,7 @@ when `relative` is enabled.
- we-tooltip (LayoutElement)
Props: open: boolean = false, title: string = '', placement: 'top' | 'bottom' | 'left' | 'right' | 'top-start' | 'top-end' | 'bottom-start' | 'bottom-end' | 'left-start' | 'left-end' | 'right-start' | 'right-end' = 'top', tooltipEl: HTMLElement, triggerEl: HTMLElement, arrowEl: HTMLElement
- we-video (LayoutVisualElement)
Props: src: string = '', poster?: string | undefined, controls: boolean = false, preload: 'none' | 'metadata' | 'auto' = 'metadata', autoplay: boolean = false, loop: boolean = false, muted: boolean = false
Props: src: string = '', poster?: string | undefined, controls: boolean = false, preload: 'none' | 'metadata' | 'auto' = 'metadata', autoplay: boolean = false, loop: boolean = false, muted: boolean = false, playsinline: boolean = false, stream?: MediaStream | null | undefined

@we/components:
- AudioDisplay
Expand Down Expand Up @@ -829,8 +829,8 @@ when `relative` is enabled.
@we/widgets:
- CesiumGlobe — 3D globe widget using CesiumJS with a modular layer system.
Layers are injected via factory functions (planet surface + background).
Requires a layer factory registry mapping string names to factory functions.
Not schema-renderable — used directly in application code.
Registered in the app's component registry, which injects `layerFactoryRegistry` — so templates
place it as `CesiumGlobe` without supplying that prop themselves.
Props: ionAccessToken?: string, planetLayers?: LayerConfig<unknown>[], backgroundLayers?: LayerConfig<unknown>[], layerFactoryRegistry: Record<string, LayerFactory<any>>
- CollapsibleSidebar
Props: header?: JSX.Element, footer?: JSX.Element, items: CollapsibleSidebarItem[], footerItems?: CollapsibleSidebarItem[], side?: "left" | "right", position?: "static" | "absolute" | "fixed", zIndex?: number, collapsedWidth?: string, expandedWidth?: string, defaultExpanded?: boolean, expandOnHover?: boolean, transitionDuration?: number, bg?: string, border?: string, padding?: string, gap?: string, centerItems?: boolean, itemColor?: string, itemColorHover?: string, itemColorActive?: string, itemBg?: string, itemBgHover?: string, itemBgActive?: string, itemPadding?: string, itemGap?: string, badgeBg?: string, badgeColor?: string, iconSize?: IconSize, onItemClick?: ((item: CollapsibleSidebarItem) => void), onExpandedChange?: ((expanded: boolean) => void)
Expand Down Expand Up @@ -1191,6 +1191,7 @@ Space extends WeNode:
- coverImage: string [we://thumbnail]
- defaultTemplateId: string [we://default_template_id]
- defaultThemeId: string [we://default_theme_id]
- enabledModules: string [we://enabled_modules]
Relations:
- location: HasOne [we://location]

Expand Down Expand Up @@ -1368,6 +1369,9 @@ SpaceStore:
- foreignSpacePrefill: { name, description, avatar } | null — detected from a foreign app's own model (e.g. Flux's Community) for prefilling the "Initialize as WE space" gate; null once the perspective is a WE space or no recognized foreign model is found
- signalTypes: array of SignalType objects (community-created reaction/vote types)
- signalTypesBySlug: Record<slug, SignalType> — computed map; access via { $store: "spaceStore.signalTypesBySlug.<slug>" }; use .id for the UUID
- enabledModules: string[] — ids of the feature modules this space has turned on. An unset value means "not decided", not "none": it falls back to every registered module, so spaces predating the setting keep the chrome they had
- moduleSettings: { id, name, description, icon, enabled }[] — every registered module paired with whether this space has it on; the shape the settings list renders
- moduleLaunchers: { id, icon, label, active }[] — launchers for the modules enabled here and available in this space; what the host module rail renders. Pair with { $action: "spaceStore.launchModule", args: ["$mod.id"] }
- Actions:
- createPost(editorState: unknown): creates a new post
- updatePost(postId: string, editorState: unknown): reconciles an edited post against its existing blocks — updates/reuses blocks whose id survived the edit, creates new ones, deletes ones no longer present
Expand All @@ -1376,6 +1380,8 @@ SpaceStore:
- createSignalType(config: Partial<SignalType>): creates a new signal type in the community; slug auto-derived from name if blank
- upsertSignal(nodeId: string, signalTypeId: string, value: number): adds or updates a signal on a node; value=0 deletes it
- navigateToSpace(spaceId: string, view?: string): navigates to a space — accepts a perspective UUID or a neighbourhood CID (sharedUrl without the neighbourhood:// prefix); pre-loads space templates before switching so the template and data arrive together
- setModuleEnabled(moduleId: string, enabled: boolean): turns a feature module on or off for the current space; writes the resolved list, so the first toggle also pins whatever was on by fallback
- launchModule(moduleId: string): invokes that module's declared launcher action. Takes an id rather than a path because $action resolves a literal string, so a rail iterating over modules cannot build modules.<id>.<method> itself

AiStore:
- State:
Expand Down
34 changes: 32 additions & 2 deletions packages/ai-context/context.json
Original file line number Diff line number Diff line change
Expand Up @@ -1739,6 +1739,17 @@
"type": "boolean",
"optional": false,
"default": "false"
},
{
"name": "playsinline",
"type": "boolean",
"optional": false,
"default": "false"
},
{
"name": "stream",
"type": "MediaStream | null | undefined",
"optional": true
}
]
}
Expand Down Expand Up @@ -3620,7 +3631,7 @@
},
{
"name": "CesiumGlobe",
"description": "3D globe widget using CesiumJS with a modular layer system.\nLayers are injected via factory functions (planet surface + background).\nRequires a layer factory registry mapping string names to factory functions.\nNot schema-renderable — used directly in application code.",
"description": "3D globe widget using CesiumJS with a modular layer system.\nLayers are injected via factory functions (planet surface + background).\nRegistered in the app's component registry, which injects `layerFactoryRegistry` — so templates\nplace it as `CesiumGlobe` without supplying that prop themselves.",
"props": [
{
"name": "ionAccessToken",
Expand Down Expand Up @@ -4662,6 +4673,12 @@
"type": "string",
"predicate": "we://default_theme_id",
"required": false
},
{
"name": "enabledModules",
"type": "string",
"predicate": "we://enabled_modules",
"required": false
}
],
"relations": [
Expand Down Expand Up @@ -5536,6 +5553,17 @@
},
"signalTypesBySlug": {
"type": "object"
},
"enabledModules": {
"type": "array"
},
"moduleSettings": {
"type": "array",
"properties": ["id", "name", "description", "icon", "enabled"]
},
"moduleLaunchers": {
"type": "array",
"properties": ["id", "icon", "label", "active"]
}
},
"actions": [
Expand All @@ -5545,7 +5573,9 @@
"updateSpaceImage",
"createSignalType",
"upsertSignal",
"navigateToSpace"
"navigateToSpace",
"setModuleEnabled",
"launchModule"
]
},
{
Expand Down
10 changes: 9 additions & 1 deletion packages/ai-context/src/contextData.ts
Original file line number Diff line number Diff line change
Expand Up @@ -647,6 +647,8 @@ export const contextData: ContextData = {
{ name: 'autoplay', type: 'boolean', optional: false, default: 'false' },
{ name: 'loop', type: 'boolean', optional: false, default: 'false' },
{ name: 'muted', type: 'boolean', optional: false, default: 'false' },
{ name: 'playsinline', type: 'boolean', optional: false, default: 'false' },
{ name: 'stream', type: 'MediaStream | null | undefined', optional: true },
],
},
],
Expand Down Expand Up @@ -1342,7 +1344,7 @@ export const contextData: ContextData = {
{
name: 'CesiumGlobe',
description:
'3D globe widget using CesiumJS with a modular layer system.\nLayers are injected via factory functions (planet surface + background).\nRequires a layer factory registry mapping string names to factory functions.\nNot schema-renderable — used directly in application code.',
"3D globe widget using CesiumJS with a modular layer system.\nLayers are injected via factory functions (planet surface + background).\nRegistered in the app's component registry, which injects `layerFactoryRegistry` — so templates\nplace it as `CesiumGlobe` without supplying that prop themselves.",
props: [
{ name: 'ionAccessToken', type: 'string', optional: true },
{ name: 'planetLayers', type: 'LayerConfig<unknown>[]', optional: true },
Expand Down Expand Up @@ -1705,6 +1707,7 @@ export const contextData: ContextData = {
{ name: 'coverImage', type: 'string', predicate: 'we://thumbnail', required: false },
{ name: 'defaultTemplateId', type: 'string', predicate: 'we://default_template_id', required: false },
{ name: 'defaultThemeId', type: 'string', predicate: 'we://default_theme_id', required: false },
{ name: 'enabledModules', type: 'string', predicate: 'we://enabled_modules', required: false },
],
relations: [{ name: 'location', kind: 'HasOne', predicate: 'we://location' }],
},
Expand Down Expand Up @@ -2139,6 +2142,9 @@ export const contextData: ContextData = {
],
},
signalTypesBySlug: { type: 'object' },
enabledModules: { type: 'array' },
moduleSettings: { type: 'array', properties: ['id', 'name', 'description', 'icon', 'enabled'] },
moduleLaunchers: { type: 'array', properties: ['id', 'icon', 'label', 'active'] },
},
actions: [
'createPost',
Expand All @@ -2148,6 +2154,8 @@ export const contextData: ContextData = {
'createSignalType',
'upsertSignal',
'navigateToSpace',
'setModuleEnabled',
'launchModule',
],
},
{
Expand Down
Loading
Loading