diff --git a/apps/memoro/apps/server/package.json b/apps/memoro/apps/server/package.json
index a809712e0..1a0b197eb 100644
--- a/apps/memoro/apps/server/package.json
+++ b/apps/memoro/apps/server/package.json
@@ -8,6 +8,7 @@
"build": "bun build src/index.ts --outdir dist --target bun"
},
"dependencies": {
+ "@mana/notify-client": "workspace:*",
"@mana/shared-hono": "workspace:*",
"@supabase/supabase-js": "^2.49.5",
"hono": "^4.7.0",
diff --git a/apps/memoro/package.json b/apps/memoro/package.json
index f3acf3403..64e56e816 100644
--- a/apps/memoro/package.json
+++ b/apps/memoro/package.json
@@ -4,10 +4,8 @@
"private": true,
"description": "Memoro - AI-powered voice recording & memo management",
"scripts": {
- "dev": "pnpm run --filter=@memoro/* --parallel dev",
"dev:server": "cd apps/server && bun run --watch src/index.ts",
"dev:audio-server": "cd apps/audio-server && bun run --watch src/index.ts",
- "dev:web": "pnpm --filter @memoro/web dev",
"dev:mobile": "pnpm --filter @memoro/mobile start",
"dev:landing": "pnpm --filter @memoro/landing dev"
},
diff --git a/games/voxelava/apps/web/src/lib/components/auth/Register.svelte b/games/voxelava/apps/web/src/lib/components/auth/Register.svelte
deleted file mode 100644
index 0c73cf115..000000000
--- a/games/voxelava/apps/web/src/lib/components/auth/Register.svelte
+++ /dev/null
@@ -1,268 +0,0 @@
-
-
-
-
-
diff --git a/games/voxelava/apps/web/src/lib/components/auth/UserProfile.svelte b/games/voxelava/apps/web/src/lib/components/auth/UserProfile.svelte
deleted file mode 100644
index 2074f3d4e..000000000
--- a/games/voxelava/apps/web/src/lib/components/auth/UserProfile.svelte
+++ /dev/null
@@ -1,517 +0,0 @@
-
-
-
-
Dein Profil
-
- {#if errorMessage}
-
- {errorMessage}
-
- {/if}
-
- {#if isLoading}
-
Daten werden geladen...
- {:else if user}
-
-
- E-Mail:
- {user.email}
-
-
-
-
-
-
-
-
- {#if showPasswordChange}
-
- {/if}
-
-
-
-
Deine Levels
-
- {#if userLevels.length === 0}
-
Du hast noch keine Levels erstellt.
- {:else}
-
- {#each userLevels as level}
-
-
-
{level.name}
-
{level.description || 'Keine Beschreibung'}
-
-
- 👁️
- {level.playCount}
-
-
- ❤️
- {level.likesCount}
-
-
- 🏷️
- {level.difficulty || 'Normal'}
-
-
-
-
-
-
-
-
-
-
-
-
- {/each}
-
- {/if}
-
- {:else}
-
- Du bist nicht angemeldet. Bitte melde dich an, um dein Profil zu sehen.
-
- {/if}
-
-
-
diff --git a/games/voxelava/apps/web/src/lib/types/level.types.ts b/games/voxelava/apps/web/src/lib/types/level.types.ts
deleted file mode 100644
index 0d9c01994..000000000
--- a/games/voxelava/apps/web/src/lib/types/level.types.ts
+++ /dev/null
@@ -1,83 +0,0 @@
-/**
- * Repräsentiert einen einzelnen Block im Voxel-Spiel
- */
-export interface Block {
- /** X-Koordinate des Blocks */
- x: number;
- /** Y-Koordinate des Blocks */
- y: number;
- /** Z-Koordinate des Blocks */
- z: number;
- /** Typ des Blocks (z.B. 'grass', 'stone', 'lava') */
- type: string;
- /** Gibt an, ob dieser Block ein Spawn-Punkt ist */
- isSpawnPoint?: boolean;
- /** Gibt an, ob dieser Block ein Ziel ist */
- isGoal?: boolean;
-}
-
-/**
- * Repräsentiert die Größe der Spielwelt
- */
-export interface WorldSize {
- /** Breite der Welt in Blöcken */
- width: number;
- /** Höhe der Welt in Blöcken */
- height: number;
- /** Tiefe der Welt in Blöcken */
- depth: number;
-}
-
-/**
- * Repräsentiert die Position des Spawn-Punkts
- */
-export interface SpawnPoint {
- /** X-Koordinate des Spawn-Punkts */
- x: number;
- /** Y-Koordinate des Spawn-Punkts */
- y: number;
- /** Z-Koordinate des Spawn-Punkts */
- z: number;
-}
-
-/**
- * Repräsentiert die Metadaten eines Levels (ohne Blockdaten)
- */
-export interface LevelMetadata {
- /** Eindeutige ID des Levels */
- id: string;
- /** Name des Levels */
- name: string;
- /** Beschreibung des Levels */
- description: string;
- /** ID des Benutzers, der das Level erstellt hat */
- userId: string;
- /** Zeitpunkt der Erstellung des Levels */
- createdAt: string;
- /** Zeitpunkt der letzten Aktualisierung des Levels */
- updatedAt: string;
- /** Gibt an, ob das Level öffentlich ist */
- isPublic?: boolean;
- /** Anzahl der Aufrufe des Levels */
- playCount: number;
- /** Anzahl der Likes des Levels */
- likesCount: number;
- /** Schwierigkeitsgrad des Levels */
- difficulty?: string;
- /** Tags zur Kategorisierung des Levels */
- tags?: string[];
- /** URL zum Vorschaubild des Levels */
- thumbnailUrl?: string;
-}
-
-/**
- * Repräsentiert ein vollständiges Level mit allen Daten
- */
-export interface Level extends LevelMetadata {
- /** Liste aller Blöcke im Level */
- blocks: Block[];
- /** Position des Spawn-Punkts */
- spawnPoint: SpawnPoint;
- /** Größe der Spielwelt */
- worldSize: WorldSize;
-}
diff --git a/games/worldream/apps/web/src/lib/components/AiGenerator.svelte b/games/worldream/apps/web/src/lib/components/AiGenerator.svelte
deleted file mode 100644
index 6df6c950c..000000000
--- a/games/worldream/apps/web/src/lib/components/AiGenerator.svelte
+++ /dev/null
@@ -1,200 +0,0 @@
-
-
-
-
-
- {#if isOpen}
-
-
-
-
-
-
-
-
-
-
-
- {kindLabels[kind]} mit KI generieren
-
-
-
- Beschreibe, was du erstellen möchtest. Die KI generiert dann alle Details für
- dich.
-
-
-
-
-
-
- {#if error}
-
- {/if}
-
-
-
- {#if context}
-
- {#if context.world}
-
Welt: {context.world}
- {/if}
- {#if context.existingCharacters?.length}
-
Verfügbare Charaktere: {context.existingCharacters.slice(0, 3).join(', ')}
- {/if}
- {#if context.existingPlaces?.length}
-
Verfügbare Orte: {context.existingPlaces.slice(0, 3).join(', ')}
- {/if}
-
- {/if}
-
-
-
-
-
-
-
-
-
- {/if}
-
diff --git a/games/worldream/apps/web/src/lib/components/AiImageGenerator.svelte b/games/worldream/apps/web/src/lib/components/AiImageGenerator.svelte
deleted file mode 100644
index 8fc6a2c8a..000000000
--- a/games/worldream/apps/web/src/lib/components/AiImageGenerator.svelte
+++ /dev/null
@@ -1,403 +0,0 @@
-
-
-
-
-
Bild generieren
- {#if !generatedImageUrl}
-
- {/if}
-
-
- {#if showOptions && !generatedImageUrl}
-
-
-
-
-
-
-
- Das Bild wird basierend auf dem Titel und der Beschreibung generiert.
-
-
- {/if}
-
-
- {#if appearance && !generatedImageUrl}
-
-
-
Deutsche Beschreibung:
-
{appearance}
-
-
- {#if !imagePrompt}
-
- {:else}
-
-
-
- Englischer Bild-Prompt:
-
-
- {imagePrompt}
-
-
- {/if}
-
- {/if}
-
- {#if generatedImageUrl}
-
-

-
-
- {:else}
-
- {/if}
-
- {#if error}
-
- {/if}
-
- {#if imagePrompt}
-
- Verwendeter Prompt
-
- {imagePrompt}
-
-
- {/if}
-
diff --git a/games/worldream/apps/web/src/lib/components/GlobalAiAuthorBar.svelte b/games/worldream/apps/web/src/lib/components/GlobalAiAuthorBar.svelte
deleted file mode 100644
index 4f5390323..000000000
--- a/games/worldream/apps/web/src/lib/components/GlobalAiAuthorBar.svelte
+++ /dev/null
@@ -1,607 +0,0 @@
-
-
-
-
- {#if success}
-
-
-
- {#if success.includes('🔄')}
-
- {:else}
-
- {/if}
-
-
{success}
-
-
- {/if}
-
- {#if error}
-
- {/if}
-
-
-
-{#if aiState.currentNode && aiState.isOwner}
-
-{/if}
-
-
-{#if aiState.currentNode && aiState.isOwner}
-
-{/if}
-
-
diff --git a/games/worldream/apps/web/src/lib/components/ImageGallery.svelte b/games/worldream/apps/web/src/lib/components/ImageGallery.svelte
deleted file mode 100644
index 4a5899751..000000000
--- a/games/worldream/apps/web/src/lib/components/ImageGallery.svelte
+++ /dev/null
@@ -1,222 +0,0 @@
-
-
-{#if images.length > 0}
-
- {#if primaryImage}
-
-
-
-
-
- {/if}
-
-
- {#if galleryImages.length > 0}
-
- {#each galleryImages as image}
-
-
-
- {#if editable}
-
-
-
-
- {/if}
-
- {/each}
-
- {/if}
-{:else}
- Noch keine Bilder vorhanden
-{/if}
-
-
-{#if showLightbox && selectedImage}
-
-
-

e.stopPropagation()}
- />
-
-
-
- {#if selectedImage.prompt}
-
-
{selectedImage.prompt}
-
- {/if}
-
-
-{/if}
diff --git a/games/worldream/apps/web/src/lib/components/ImageUploadModal.svelte b/games/worldream/apps/web/src/lib/components/ImageUploadModal.svelte
deleted file mode 100644
index dd4bdc652..000000000
--- a/games/worldream/apps/web/src/lib/components/ImageUploadModal.svelte
+++ /dev/null
@@ -1,319 +0,0 @@
-
-
-{#if show}
-
-
e.stopPropagation()}
- >
-
-
-
Bilder hochladen
-
-
-
-
-
-
-
- Bilder hier ablegen oder
-
-
-
- JPG, PNG, WebP oder GIF • Max. 10MB pro Bild
-
-
-
-
-
- {#if previews.length > 0}
-
-
- Ausgewählte Bilder ({previews.length})
-
-
- {#each previews as preview, index}
-
-

-
- {#if index === 0}
-
- Hauptbild
-
- {/if}
-
- {/each}
-
-
- {/if}
-
-
- {#if uploading}
-
-
- Hochladen...
- {Math.round(uploadProgress)}%
-
-
-
- {/if}
-
-
-
-
-
-
-
-
-{/if}
diff --git a/games/worldream/apps/web/src/lib/components/ImageUploader.svelte b/games/worldream/apps/web/src/lib/components/ImageUploader.svelte
deleted file mode 100644
index 2a2df535b..000000000
--- a/games/worldream/apps/web/src/lib/components/ImageUploader.svelte
+++ /dev/null
@@ -1,141 +0,0 @@
-
-
-
- {#if !showGenerator}
-
- {:else}
-
-
-
Neues Bild generieren
-
-
-
- {#if error}
-
- {/if}
-
-
-
- {#if imageUrl}
-
-
-
-
- {/if}
-
- {/if}
-
diff --git a/games/worldream/apps/web/src/lib/components/NodeDetail.svelte b/games/worldream/apps/web/src/lib/components/NodeDetail.svelte
deleted file mode 100644
index 023b2cf45..000000000
--- a/games/worldream/apps/web/src/lib/components/NodeDetail.svelte
+++ /dev/null
@@ -1,852 +0,0 @@
-
-
-{#if !isSideBySide && (node.kind === 'world' || node.kind === 'place') && !loadingImages && (images.length > 0 || node.image_url)}
-
-
- {#if images.length > 0 && images[0]?.image_url}
-
-
-

-
- {:else if node.image_url}
-
-
-

console.log('🖼️ Fallback image loaded:', node.image_url)}
- onerror={() => console.error('🚨 Fallback image failed:', node.image_url)}
- />
-
- {/if}
-
-{/if}
-
-
- {#if isSideBySide}
-
-
-
-
-
-
- {#if !loadingImages && (images.length > 0 || node.image_url)}
- {#if images.length > 0}
-
- {:else if node.image_url}
-
-

console.log('🖼️ Fallback image loaded:', node.image_url)}
- onerror={() => console.error('🚨 Fallback image failed:', node.image_url)}
- />
- {/if}
- {/if}
-
-
-
-
-
{node.title}
-
-
-
- {#if isOwner}
-
-
- {/if}
-
-
- {#if node.summary}
-
{node.summary}
- {/if}
-
- {#if showLeftMetadata}
-
-
- {node.visibility}
-
- {#if node.world_slug}
-
- 🌍 {node.world_slug}
-
- {/if}
- {#if node.tags && node.tags.length > 0}
- {#each node.tags as tag}
-
- {tag}
-
- {/each}
- {/if}
-
- {/if}
-
-
-
-
-
-
-
- {#if node.kind !== 'story'}
-
-
-
-
- {#if node.generation_prompt}
-
- {/if}
- {#if node.custom_schema && node.custom_schema.fields.length > 0}
-
- {/if}
-
- {#if isOwner}
-
-
-
- {#if showDropdown}
-
- {/if}
-
- {/if}
-
- {/if}
-
-
-
- {#if node.kind !== 'story' && activeTab === 'memory'}
-
-
{
- node.memory = updatedMemory;
- }}
- />
- {:else if node.kind !== 'story' && activeTab === 'prompt' && node.generation_prompt}
-
-
- {:else}
-
-
- {#each contentFields as field}
- {#if node.content?.[field.key]}
-
-
- {field.label}
-
-
- {#if field.key === 'lore' && node.kind === 'story'}
-
- {:else if field.key.includes('text') || field.key === 'references'}
- {@html parseReferences(node.content[field.key])}
- {:else}
-
{node.content[field.key]}
- {/if}
-
-
- {/if}
- {/each}
-
-
-
- {#if node.kind === 'character' && linkedObjects.length > 0}
-
-
- 📒 Inventar-Objekte
-
-
-
- {/if}
- {/if}
-
-
-
- {:else}
-
-
-
- {#if node.kind === 'story' && !loadingImages && (images.length > 0 || node.image_url)}
-
- {#if images.length > 0}
-
- {:else if node.image_url}
-
-
-

console.log('🖼️ Fallback image loaded:', node.image_url)}
- onerror={() => console.error('🚨 Fallback image failed:', node.image_url)}
- />
-
- {/if}
-
- {/if}
-
-
-
-
{node.title}
- {#if node.summary}
-
{node.summary}
- {/if}
-
-
- {node.visibility}
-
- {#if node.world_slug}
-
- 🌍 {node.world_slug}
-
- {/if}
- {#if node.tags && node.tags.length > 0}
- {#each node.tags as tag}
-
- {tag}
-
- {/each}
- {/if}
-
-
-
-
- {#if node.kind !== 'story'}
-
-
-
-
- {#if node.generation_prompt}
-
- {/if}
-
- {#if isOwner}
-
-
-
- {#if showDropdown}
-
- {/if}
-
- {/if}
-
- {/if}
-
-
-
- {#if node.kind !== 'story' && activeTab === 'memory'}
-
-
{
- node.memory = updatedMemory;
- }}
- />
- {:else if node.kind !== 'story' && activeTab === 'prompt' && node.generation_prompt}
-
-
- {:else if node.kind !== 'story' && activeTab === 'custom'}
-
-
- {:else}
-
-
- {#each contentFields as field}
- {#if node.content?.[field.key]}
-
-
- {field.label}
-
-
- {#if field.key === 'lore' && node.kind === 'story'}
-
- {:else if field.key.includes('text') || field.key === 'references'}
- {@html parseReferences(node.content[field.key])}
- {:else}
-
{node.content[field.key]}
- {/if}
-
-
- {/if}
- {/each}
-
- {/if}
-
-
- {/if}
-
-
- {#if backPath}
-
- {:else}
-
-
- {/if}
-
-
-
-{#if showUploadModal}
- (showUploadModal = false)}
- onUploadComplete={loadImages}
- />
-{/if}
diff --git a/games/worldream/apps/web/src/lib/components/NodeEditForm.svelte b/games/worldream/apps/web/src/lib/components/NodeEditForm.svelte
deleted file mode 100644
index c524138d7..000000000
--- a/games/worldream/apps/web/src/lib/components/NodeEditForm.svelte
+++ /dev/null
@@ -1,389 +0,0 @@
-
-
-
-
-
{config.title} bearbeiten
-
- Bearbeite die Details für "{node.title}"
-
-
-
- {#if error}
-
- {/if}
-
-
-
diff --git a/games/worldream/apps/web/src/lib/components/customFields/CustomDataForm.svelte b/games/worldream/apps/web/src/lib/components/customFields/CustomDataForm.svelte
deleted file mode 100644
index ff7f4a5a8..000000000
--- a/games/worldream/apps/web/src/lib/components/customFields/CustomDataForm.svelte
+++ /dev/null
@@ -1,520 +0,0 @@
-
-
-
-
-
diff --git a/games/worldream/apps/web/src/lib/components/customFields/CustomFieldsDisplay.svelte b/games/worldream/apps/web/src/lib/components/customFields/CustomFieldsDisplay.svelte
deleted file mode 100644
index 0555cf496..000000000
--- a/games/worldream/apps/web/src/lib/components/customFields/CustomFieldsDisplay.svelte
+++ /dev/null
@@ -1,224 +0,0 @@
-
-
-{#if schema && schema.fields.length > 0}
- {#if !hasData}
-
- Keine benutzerdefinierten Daten vorhanden
-
- {:else}
-
- {#each fieldsByCategory() as [category, fields]}
-
- {#if category !== '_uncategorized'}
-
- {category}
-
- {/if}
-
-
- {#each fields as field}
- {#if !isEmpty(data[field.key])}
-
-
- {field.label}
-
-
- {#if field.type === 'range'}
-
-
-
-
- {formatValue(field, data[field.key])}
-
-
- {:else if field.type === 'text' && field.config.multiline}
-
-
- {@html parseReferences(data[field.key])}
-
- {:else if field.type === 'json'}
-
-
- {formatValue(field, data[field.key])}
-
- {:else if field.type === 'boolean'}
-
-
- {formatValue(field, data[field.key])}
-
- {:else if field.type === 'multiselect' || field.type === 'list'}
-
-
- {#each Array.isArray(data[field.key]) ? data[field.key] : [] as item}
-
- {field.type === 'multiselect'
- ? field.config.choices?.find((c) => c.value === item)?.label || item
- : item}
-
- {/each}
-
- {:else}
-
-
- {@html parseReferences(formatValue(field, data[field.key]))}
-
- {/if}
-
-
- {/if}
- {/each}
-
-
- {/each}
-
- {/if}
-{:else}
-
- Keine benutzerdefinierten Felder definiert
-
-{/if}
-
-
diff --git a/games/worldream/apps/web/src/lib/components/forms/NodeForm.svelte b/games/worldream/apps/web/src/lib/components/forms/NodeForm.svelte
deleted file mode 100644
index cc29dd9a8..000000000
--- a/games/worldream/apps/web/src/lib/components/forms/NodeForm.svelte
+++ /dev/null
@@ -1,833 +0,0 @@
-
-
-
-
-
- {mode === 'create' ? `Neuer ${config.title}` : `${config.title} bearbeiten`}
-
-
- {#if mode === 'create'}
- {#if worldTitle}
- Erstelle einen neuen {config.title.toLowerCase()} in
- {worldTitle}
- {:else}
- Erstelle einen neuen {config.title.toLowerCase()}
- {/if}
- {:else}
- Bearbeite die Details für "{initialData.title}"
- {/if}
-
-
-
- {#if error}
-
- {/if}
-
-
-
diff --git a/games/worldream/apps/web/src/lib/types/content.ts b/games/worldream/apps/web/src/lib/types/content.ts
deleted file mode 100644
index 8d0df42de..000000000
--- a/games/worldream/apps/web/src/lib/types/content.ts
+++ /dev/null
@@ -1,210 +0,0 @@
-export type NodeKind = 'world' | 'character' | 'object' | 'place' | 'story';
-export type VisibilityLevel = 'private' | 'shared' | 'public';
-export type StoryEntryType = 'narration' | 'dialog' | 'note';
-
-export interface GenerationContext {
- userPrompt: string;
- systemPrompt: string;
- worldContext?: string;
- selectedCharacters?: Array<{
- name: string;
- slug: string;
- summary?: string;
- appearance?: string;
- voice_style?: string;
- motivations?: string;
- capabilities?: string;
- }>;
- model: string;
- timestamp: string;
-}
-
-export interface ContentNode {
- id: string;
- kind: NodeKind;
- slug: string;
- title: string;
- summary?: string;
- owner_id?: string;
- visibility: VisibilityLevel;
- tags: string[];
- world_slug?: string;
- content: ContentData;
- memory?: CharacterMemory;
- skills?: CharacterSkills;
- custom_schema?: any; // Will be CustomFieldSchema from customFields.ts
- custom_data?: Record; // CustomFieldData
- schema_version?: number;
- generation_prompt?: string;
- generation_model?: string;
- generation_date?: string;
- generation_context?: GenerationContext;
- image_url?: string;
- created_at: string;
- updated_at: string;
-}
-
-export interface ContentData {
- appearance?: string;
- image_prompt?: string;
- lore?: string;
- voice_style?: string;
- capabilities?: string;
- constraints?: string;
- motivations?: string;
- secrets?: string;
- relationships_text?: string;
- inventory_text?: string;
- timeline_text?: string;
- glossary_text?: string;
- canon_facts_text?: string;
- state_text?: string;
- prompt_guidelines?: string;
- references?: string;
- _links?: Record;
- _aliases?: string[];
- _i18n?: Record;
- // Index signature für dynamische Content-Felder
- [key: string]: string | Record | string[] | Record | undefined;
-}
-
-export interface StoryEntry {
- id: string;
- story_slug: string;
- position: number;
- type: StoryEntryType;
- speaker_slug?: string;
- body: string;
- created_by?: string;
- created_at: string;
-}
-
-export interface PromptTemplate {
- id: string;
- owner_id?: string;
- world_slug?: string;
- kind: NodeKind;
- title: string;
- prompt_template: string;
- description?: string;
- tags?: string[];
- usage_count: number;
- is_public: boolean;
- created_at: string;
- updated_at: string;
-}
-
-export interface PromptHistory {
- id: string;
- user_id: string;
- node_id: string;
- prompt: string;
- response?: any;
- model?: string;
- created_at: string;
-}
-
-// Memory System Types
-export interface ShortTermMemory {
- id: string;
- timestamp: string;
- content: string;
- location?: string;
- involved?: string[];
- tags?: string[];
- importance: number;
- decay_at: string;
-}
-
-export interface MediumTermMemory {
- id: string;
- timestamp: string;
- content: string;
- original_details?: string;
- context?: string;
- location?: string;
- involved?: string[];
- tags?: string[];
- importance: number;
- decay_at: string;
- linked_memories?: string[];
-}
-
-export interface LongTermMemory {
- id: string;
- timestamp: string;
- content: string;
- emotional_weight: number;
- category: 'trauma' | 'triumph' | 'relationship' | 'skill' | 'secret' | 'manual';
- triggers?: string[];
- effects?: string;
- involved?: string[];
- immutable: boolean;
-}
-
-export interface MemoryTraits {
- memory_quality: 'excellent' | 'good' | 'average' | 'poor';
- trauma_filter?: boolean;
- selective_memory?: string[];
- memory_conditions?: {
- drunk?: 'partial_blackout' | 'full_blackout' | 'fuzzy';
- stressed?: 'detail_loss' | 'time_gaps';
- happy?: 'enhanced_positive' | 'forget_negative';
- };
-}
-
-export interface CharacterMemory {
- short_term_memory: ShortTermMemory[];
- medium_term_memory: MediumTermMemory[];
- long_term_memory: LongTermMemory[];
- memory_traits: MemoryTraits;
- last_processed?: string;
-}
-
-// Skills System Types
-export interface Skill {
- name: string;
- level: number;
- level_text?: string;
- subskills?: Record;
- learned_from?: string;
- learned_at?: string;
- training_years?: number;
- last_used?: string;
- conditions?: Record;
-}
-
-export interface LearningSkill {
- name: string;
- progress: number;
- teacher?: string;
- started: string;
- blocked_by?: string;
- next_milestone?: string;
-}
-
-export interface SkillCondition {
- trigger: string;
- effect: string;
-}
-
-export interface CharacterSkills {
- primary: Skill[];
- learning: LearningSkill[];
- conditions: Record;
-}
-
-// Memory Event for story integration
-export interface MemoryEvent {
- id: string;
- node_id: string;
- story_id?: string;
- event_timestamp: string;
- event_type: 'observed' | 'experienced' | 'told' | 'dreamed' | 'remembered';
- raw_event: string;
- processed_memory?: any;
- memory_tier?: 'short' | 'medium' | 'long';
- importance?: number;
- created_at: string;
- updated_at?: string;
-}
diff --git a/games/worldream/apps/web/src/routes/worlds/[world]/characters/[slug]/edit/+page.svelte b/games/worldream/apps/web/src/routes/worlds/[world]/characters/[slug]/edit/+page.svelte
deleted file mode 100644
index 6bcba68b2..000000000
--- a/games/worldream/apps/web/src/routes/worlds/[world]/characters/[slug]/edit/+page.svelte
+++ /dev/null
@@ -1,98 +0,0 @@
-
-
-
- {node ? `${node.title} bearbeiten - Worldream` : 'Charakter bearbeiten - Worldream'}
-
-
-{#if loading}
-
-{:else if error}
-
-{:else if node}
-
-{/if}
diff --git a/package.json b/package.json
index 828ec6243..6228b67c0 100644
--- a/package.json
+++ b/package.json
@@ -87,11 +87,10 @@
"dev:todo:app": "concurrently -n api,web -c yellow,cyan \"pnpm dev:api\" \"pnpm dev:todo:web\"",
"dev:todo:full": "./scripts/setup-databases.sh auth && concurrently -n auth,sync,api,web -c blue,magenta,yellow,cyan \"pnpm dev:auth\" \"pnpm dev:sync\" \"pnpm dev:api\" \"pnpm dev:todo:web\"",
"dev:todo:local": "concurrently -n sync,api,web -c magenta,yellow,cyan \"pnpm dev:sync\" \"pnpm dev:api\" \"pnpm dev:todo:web\"",
- "dev:memoro:web": "pnpm --filter @memoro/web dev",
"dev:memoro:server": "cd apps/memoro/apps/server && bun run --watch src/index.ts",
"dev:memoro:audio-server": "cd apps/memoro/apps/audio-server && bun run --watch src/index.ts",
- "dev:memoro:app": "concurrently -n server,audio,web -c yellow,green,cyan \"pnpm dev:memoro:server\" \"pnpm dev:memoro:audio-server\" \"pnpm dev:memoro:web\"",
- "dev:memoro:full": "concurrently -n auth,server,audio,web -c blue,yellow,green,cyan \"pnpm dev:auth\" \"pnpm dev:memoro:server\" \"pnpm dev:memoro:audio-server\" \"pnpm dev:memoro:web\"",
+ "dev:memoro:app": "concurrently -n server,audio -c yellow,green \"pnpm dev:memoro:server\" \"pnpm dev:memoro:audio-server\"",
+ "dev:memoro:full": "concurrently -n auth,server,audio -c blue,yellow,green \"pnpm dev:auth\" \"pnpm dev:memoro:server\" \"pnpm dev:memoro:audio-server\"",
"dev:uload:web": "pnpm --filter @uload/web dev",
"dev:uload:server": "cd apps/uload/apps/server && bun run --watch src/index.ts",
"dev:uload:landing": "pnpm --filter @uload/landing dev",
@@ -144,8 +143,6 @@
"dev:figgos:web": "pnpm --filter @figgos/web dev",
"dev:figgos:ios": "pnpm --filter @figgos/mobile ios",
"dev:figgos:android": "pnpm --filter @figgos/mobile android",
- "worldream:dev": "turbo run dev --filter=worldream...",
- "dev:worldream:web": "pnpm --filter @worldream/web dev",
"context:dev": "turbo run dev --filter=context...",
"dev:context:mobile": "pnpm --filter @context/mobile dev",
"dev:context:web": "pnpm --filter @context/web dev",