define attribute contentHash, value string; attribute createdAt, value datetime; attribute stableName, value string; attribute name, value string; attribute code, value string; attribute npmVersion, value string; attribute npmPackageName, value string; attribute key, value string; attribute defaultImport, value string; attribute namedImport, value string; attribute stringDirective, value string; attribute sideEffectImport, value string; attribute routeConfigExport, value string; attribute intent, value string; attribute id, value string; attribute status, value string @values("active", "completed", "failed", "paused"); attribute startedAt, value datetime; attribute completedAt, value datetime; attribute description, value string; attribute totalTokensUsed, value integer; attribute turnNumber, value integer; attribute turnStartedAt, value datetime; attribute turnCompletedAt, value datetime; attribute turnStatus, value string @values("pending", "processing", "completed", "failed"); attribute providerId, value string; attribute providerName, value string; attribute modelId, value string; attribute modelName, value string; attribute contextWindow, value integer; attribute maxOutputTokens, value integer; attribute callStartedAt, value datetime; attribute callCompletedAt, value datetime; attribute callDuration, value integer; attribute inputTokens, value integer; attribute outputTokens, value integer; attribute totalTokens, value integer; attribute finishReason, value string @values("stop", "length", "content-filter", "tool-calls", "error", "other"); attribute requestId, value string; attribute responseId, value string; attribute errorMessage, value string; attribute retryCount, value integer; attribute messageId, value string; attribute messageRole, value string @values("system", "user", "assistant"); attribute messageTimestamp, value datetime; attribute messageOrder, value integer; attribute messageDirection, value string @values("input", "output"); attribute partOrder, value integer; attribute textContent, value string; attribute reasoningText, value string; attribute reasoningProviderMetadata, value string; attribute imageData, value string; attribute imageUrl, value string; attribute imageMediaType, value string; attribute fileData, value string; attribute fileUrl, value string; attribute fileName, value string; attribute fileMediaType, value string; attribute toolCallId, value string; attribute toolName, value string; attribute toolArgs, value string; attribute toolResultId, value string; attribute toolResultName, value string; attribute toolResultData, value string; attribute isError, value boolean; attribute sourceId, value string; attribute sourceUrl, value string; attribute sourceTitle, value string; attribute sourceProviderMetadata, value string; attribute dataType, value string; attribute dataContent, value string; attribute sessionId, value string; attribute streamStartedAt, value datetime; attribute streamEndedAt, value datetime; attribute totalChunks, value integer; entity Versionable @abstract, owns contentHash @key, owns createdAt @card(1..1), plays NamespaceHasVersionable:versionable @card(0..), plays ToolCallExecutesVersionable:executable @card(0..), plays ToolResultReferencesVersionable:referenced @card(0..), plays VersionableHasParentVersionable:parent @card(0..), plays VersionableHasParentVersionable:versionable @card(0..1); entity Symbol @abstract, sub Versionable, owns code @card(1..1), plays SymbolDependsOnEnvVar:symbol @card(0..), plays SymbolDependsOnPackage:symbol @card(0..); entity TSSymbol @abstract, sub Symbol, plays TSFileHasSymbol:symbol @card(0..), plays TSSymbolDependsOnTSSymbol:dependsOn @card(0..), plays TSSymbolDependsOnTSSymbol:symbol @card(0..); entity TSXSymbol @abstract, sub Symbol, plays TSSymbolDependsOnTSSymbol:dependsOn @card(0..), plays TSSymbolDependsOnTSSymbol:symbol @card(0..), plays TSXFileHasSymbol:symbol @card(0..); entity LogicFunction, sub TSSymbol; entity UIFunction, sub TSXSymbol; entity Type, sub TSSymbol; entity Variable, sub TSSymbol; entity Class, sub TSSymbol; entity JSONSymbol, sub Symbol, plays JSONFileHasSymbol:symbol @card(0..); entity PostCSSSymbol, sub Symbol, plays PostCSSFileHasSymbol:symbol @card(0..); entity Package, sub Versionable, owns npmPackageName @card(1..1), owns npmVersion @card(1..1), plays SymbolDependsOnPackage:dependsOn @card(0..); entity envVar, sub Versionable, owns key @card(1..1), plays SymbolDependsOnEnvVar:dependsOn @card(0..); entity App @abstract, sub Versionable, plays AppHasFolder:app @card(0..); entity NextJS_App, sub App; entity Folder, sub Versionable, owns name @card(1..1), plays AppHasFolder:folder @card(0..), plays FolderHas:folder @card(0..), plays FolderHas:to @card(0..); entity File, sub Versionable, plays FolderHas:to @card(0..); entity TSFile, sub File, plays TSFileHasSymbol:file @card(0..1); entity TSXFile, sub File, plays TSXFileHasSymbol:file @card(0..1); entity JSONFile, sub File, plays JSONFileHasSymbol:file @card(0..1); entity PostCSSFile, sub File, plays PostCSSFileHasSymbol:file @card(0..1); entity NextJS_PageRoute, sub TSXFile, owns routeConfigExport @card(0..), owns sideEffectImport @card(0..), owns stringDirective @card(0..); entity NextJS_LayoutRoute, sub TSXFile, owns routeConfigExport @card(0..), owns sideEffectImport @card(0..), owns stringDirective @card(0..); entity NextJS_APIRoute, sub TSFile, owns routeConfigExport @card(0..), owns sideEffectImport @card(0..), owns stringDirective @card(0..); entity Branch, owns stableName @key, plays BranchHasCommit:branch @card(0..); entity Commit, owns contentHash @key, owns intent, plays BranchHasCommit:commit @card(0..), plays CommitHasNamespace:commit @card(0..), plays CommitHasParentCommit:commit @card(0..), plays CommitHasParentCommit:parent @card(0..); entity Namespace, owns contentHash @key, owns stableName, plays CommitHasNamespace:namespace @card(0..), plays NamespaceHasNamespace:namespace @card(0..), plays NamespaceHasNamespace:parent @card(0..), plays NamespaceHasVersionable:namespace @card(0..); entity Trajectory, sub Versionable, owns completedAt @card(0..1), owns description @card(0..1), owns name @card(0..1), owns startedAt @card(1..1), owns status @card(1..1), owns totalTokensUsed @card(0..1), plays TrajectoryHasTurn:trajectory @card(0..); entity Turn, sub Versionable, owns turnCompletedAt @card(0..1), owns turnNumber @card(1..1), owns turnStartedAt @card(1..1), owns turnStatus @card(1..1), plays TrajectoryHasTurn:turn @card(0..1), plays TurnMakesLLMCall:turn @card(0..); entity LLMProvider, sub Versionable, owns providerId @key, owns providerName @card(1..1), plays ProviderOffersModel:provider @card(0..); entity LLMModel, sub Versionable, owns contextWindow @card(0..1), owns maxOutputTokens @card(0..1), owns modelId @key, owns modelName @card(1..1), plays LLMCallUsesModel:model @card(0..), plays ProviderOffersModel:model @card(0..); entity LLMCall, sub Versionable, owns callCompletedAt @card(0..1), owns callDuration @card(0..1), owns callStartedAt @card(1..1), owns errorMessage @card(0..1), owns finishReason @card(0..1), owns id @key, owns inputTokens @card(0..1), owns outputTokens @card(0..1), owns requestId @card(0..1), owns responseId @card(0..1), owns retryCount @card(0..1), owns totalTokens @card(0..1), plays LLMCallHasMessage:llmCall @card(0..), plays LLMCallHasStreamingSession:llmCall @card(0..), plays LLMCallUsesModel:llmCall @card(0..), plays TurnMakesLLMCall:llmCall @card(0..1); entity Message @abstract, sub Versionable, owns messageId @key, owns messageRole @card(1..1), owns messageTimestamp @card(1..1), plays LLMCallHasMessage:message @card(0..), plays MessageHasPart:message @card(0..); entity SystemMessage, sub Message; entity UserMessage, sub Message; entity AssistantMessage, sub Message; entity Part @abstract, sub Versionable, owns partOrder @card(1..1), plays MessageHasPart:part @card(0..); entity TextPart, sub Part, owns textContent @card(1..1); entity ReasoningPart, sub Part, owns reasoningProviderMetadata @card(0..1), owns reasoningText @card(1..1); entity ImagePart, sub Part, owns imageData @card(0..1), owns imageMediaType @card(0..1), owns imageUrl @card(0..1); entity FilePart, sub Part, owns fileData @card(0..1), owns fileMediaType @card(1..1), owns fileName @card(0..1), owns fileUrl @card(0..1); entity ToolCallPart, sub Part, owns toolArgs @card(1..1), owns toolCallId @card(1..1), owns toolName @card(1..1), plays ToolCallExecutesVersionable:toolCall @card(0..); entity ToolResultPart, sub Part, owns isError @card(0..1), owns toolResultData @card(1..1), owns toolResultId @card(1..1), owns toolResultName @card(1..1), plays ToolResultReferencesVersionable:toolResult @card(0..); entity SourcePart, sub Part, owns sourceId @card(1..1), owns sourceProviderMetadata @card(0..1), owns sourceTitle @card(0..1), owns sourceUrl @card(0..1); entity DataPart, sub Part, owns dataContent @card(1..1), owns dataType @card(1..1); entity StepStartPart, sub Part; entity StreamingSession, sub Versionable, owns sessionId @card(1..1), owns streamEndedAt @card(0..1), owns streamStartedAt @card(1..1), owns totalChunks @card(0..1), plays LLMCallHasStreamingSession:streamingSession @card(0..1); relation VersionableDependsOn @abstract, relates versionable @abstract @card(1..1), relates versionableDependsOn @abstract @card(1..1); relation SymbolDependsOnSymbol @abstract, sub VersionableDependsOn, relates anyDependsOn as versionableDependsOn @abstract @card(1..1), relates anySymbol as versionable @abstract @card(1..1); relation TSSymbolDependsOnTSSymbol, sub SymbolDependsOnSymbol, relates dependsOn as anyDependsOn, relates symbol as anySymbol; relation SymbolDependsOnPackage, sub VersionableDependsOn, relates dependsOn as versionableDependsOn @card(1..1), relates symbol as versionable @card(1..1), owns defaultImport @card(0..1), owns namedImport @card(0..); relation SymbolDependsOnEnvVar, sub VersionableDependsOn, relates dependsOn as versionableDependsOn @card(1..1), relates symbol as versionable @card(1..1); relation FileHasSymbol @abstract, sub VersionableDependsOn, relates anyFile as versionable @abstract @card(1..1), relates anySymbol as versionableDependsOn @abstract @card(1..1); relation TSFileHasSymbol, sub FileHasSymbol, relates file as anyFile, relates symbol as anySymbol; relation TSXFileHasSymbol, sub FileHasSymbol, relates file as anyFile, relates symbol as anySymbol; relation JSONFileHasSymbol, sub FileHasSymbol, relates file as anyFile, relates symbol as anySymbol; relation PostCSSFileHasSymbol, sub FileHasSymbol, relates file as anyFile, relates symbol as anySymbol; relation AppHasFolder, sub VersionableDependsOn, relates app as versionable @card(1..1), relates folder as versionableDependsOn @card(1..1); relation FolderHas, sub VersionableDependsOn, relates folder as versionable @card(1..1), relates to as versionableDependsOn @card(1..1); relation BranchHasCommit, relates branch @card(1..1), relates commit @card(1..1), owns createdAt @card(1..1); relation CommitHasParentCommit, relates commit @card(1..1), relates parent @card(1..1); relation CommitHasNamespace, relates commit @card(1..1), relates namespace @card(1..1); relation NamespaceHasVersionable, relates namespace @card(1..1), relates versionable @card(1..1), owns stableName @card(1..1); relation NamespaceHasNamespace, relates namespace @card(1..1), relates parent @card(1..1); relation VersionableHasParentVersionable, relates parent @card(1..1), relates versionable @card(1..1), owns intent @card(0..1); relation TrajectoryHasTurn, sub VersionableDependsOn, relates trajectory as versionable @card(1..1), relates turn as versionableDependsOn @card(1..1); relation ProviderOffersModel, sub VersionableDependsOn, relates model as versionableDependsOn @card(1..1), relates provider as versionable @card(1..1); relation TurnMakesLLMCall, sub VersionableDependsOn, relates llmCall as versionableDependsOn @card(1..1), relates turn as versionable @card(1..1); relation LLMCallUsesModel, sub VersionableDependsOn, relates llmCall as versionable @card(1..1), relates model as versionableDependsOn @card(1..1); relation LLMCallHasMessage, sub VersionableDependsOn, relates llmCall as versionable @card(1..1), relates message as versionableDependsOn @card(1..1), owns messageDirection @card(1..1), owns messageOrder @card(1..1); relation MessageHasPart sub VersionableDependsOn, relates message as versionable @card(1..1), relates part as versionableDependsOn @card(1..1); relation ToolCallExecutesVersionable, sub VersionableDependsOn, relates executable as versionableDependsOn @card(1..1), relates toolCall as versionable @card(1..1); relation ToolResultReferencesVersionable, sub VersionableDependsOn, relates referenced as versionableDependsOn @card(1..1), relates toolResult as versionable @card(1..1); relation LLMCallHasStreamingSession, sub VersionableDependsOn, relates llmCall as versionable @card(1..1), relates streamingSession as versionableDependsOn @card(1..1);