2025-08-26 12:32:21 -07:00
|
|
|
/**
|
|
|
|
|
* Graph Types - Standardized Noun and Verb Type System
|
|
|
|
|
*
|
|
|
|
|
* This module defines a comprehensive, standardized set of noun and verb types
|
|
|
|
|
* that can be used to model any kind of graph, semantic network, or data model.
|
|
|
|
|
*
|
|
|
|
|
* ## Purpose and Design Philosophy
|
|
|
|
|
*
|
|
|
|
|
* The type system is designed to be:
|
|
|
|
|
* - **Universal**: Capable of representing any domain or use case
|
|
|
|
|
* - **Hierarchical**: Organized into logical categories for easy navigation
|
|
|
|
|
* - **Extensible**: Additional metadata can be attached to any entity or relationship
|
|
|
|
|
* - **Semantic**: Types carry meaning that can be used for reasoning and inference
|
|
|
|
|
*
|
|
|
|
|
* ## Noun Types (Entities)
|
|
|
|
|
*
|
|
|
|
|
* Noun types represent entities in the graph and are organized into categories:
|
|
|
|
|
*
|
|
|
|
|
* ### Core Entity Types
|
|
|
|
|
* - **Person**: Human entities and individuals
|
|
|
|
|
* - **Organization**: Formal organizations, companies, institutions
|
|
|
|
|
* - **Location**: Geographic locations, places, addresses
|
|
|
|
|
* - **Thing**: Physical objects and tangible items
|
|
|
|
|
* - **Concept**: Abstract ideas, concepts, and intangible entities
|
|
|
|
|
* - **Event**: Occurrences with time and place dimensions
|
|
|
|
|
*
|
|
|
|
|
* ### Digital/Content Types
|
|
|
|
|
* - **Document**: Text-based files and documents
|
|
|
|
|
* - **Media**: Non-text media files (images, videos, audio)
|
|
|
|
|
* - **File**: Generic digital files
|
|
|
|
|
* - **Message**: Communication content
|
|
|
|
|
* - **Content**: Generic content that doesn't fit other categories
|
|
|
|
|
*
|
|
|
|
|
* ### Collection Types
|
|
|
|
|
* - **Collection**: Generic groupings of items
|
|
|
|
|
* - **Dataset**: Structured collections of data
|
|
|
|
|
*
|
|
|
|
|
* ### Business/Application Types
|
|
|
|
|
* - **Product**: Commercial products and offerings
|
|
|
|
|
* - **Service**: Services and offerings
|
|
|
|
|
* - **User**: User accounts and profiles
|
|
|
|
|
* - **Task**: Actions, todos, and workflow items
|
|
|
|
|
* - **Project**: Organized initiatives with goals and timelines
|
|
|
|
|
*
|
|
|
|
|
* ### Descriptive Types
|
|
|
|
|
* - **Process**: Workflows, procedures, and sequences
|
|
|
|
|
* - **State**: States, conditions, or statuses
|
|
|
|
|
* - **Role**: Roles, positions, or responsibilities
|
|
|
|
|
* - **Topic**: Subjects or themes
|
|
|
|
|
* - **Language**: Languages or linguistic entities
|
|
|
|
|
* - **Currency**: Currencies and monetary units
|
|
|
|
|
* - **Measurement**: Measurements, metrics, or quantities
|
|
|
|
|
*
|
|
|
|
|
* ## Verb Types (Relationships)
|
|
|
|
|
*
|
|
|
|
|
* Verb types represent relationships between entities and are organized into categories:
|
|
|
|
|
*
|
|
|
|
|
* ### Core Relationship Types
|
|
|
|
|
* - **RelatedTo**: Generic relationship (default fallback)
|
|
|
|
|
* - **Contains**: Containment relationship
|
|
|
|
|
* - **PartOf**: Part-whole relationship
|
|
|
|
|
* - **LocatedAt**: Spatial relationship
|
|
|
|
|
* - **References**: Reference or citation relationship
|
|
|
|
|
*
|
|
|
|
|
* ### Temporal/Causal Types
|
|
|
|
|
* - **Precedes/Succeeds**: Temporal sequence relationships
|
|
|
|
|
* - **Causes**: Causal relationships
|
|
|
|
|
* - **DependsOn**: Dependency relationships
|
|
|
|
|
* - **Requires**: Necessity relationships
|
|
|
|
|
*
|
|
|
|
|
* ### Creation/Transformation Types
|
|
|
|
|
* - **Creates**: Creation relationships
|
|
|
|
|
* - **Transforms**: Transformation relationships
|
|
|
|
|
* - **Becomes**: State change relationships
|
|
|
|
|
* - **Modifies**: Modification relationships
|
|
|
|
|
* - **Consumes**: Consumption relationships
|
|
|
|
|
*
|
|
|
|
|
* ### Ownership/Attribution Types
|
|
|
|
|
* - **Owns**: Ownership relationships
|
|
|
|
|
* - **AttributedTo**: Attribution or authorship
|
|
|
|
|
* - **CreatedBy**: Creation attribution
|
|
|
|
|
* - **BelongsTo**: Belonging relationships
|
|
|
|
|
*
|
|
|
|
|
* ### Social/Organizational Types
|
|
|
|
|
* - **MemberOf**: Membership or affiliation
|
|
|
|
|
* - **WorksWith**: Professional relationships
|
|
|
|
|
* - **FriendOf**: Friendship relationships
|
|
|
|
|
* - **Follows**: Following relationships
|
|
|
|
|
* - **Likes**: Liking relationships
|
|
|
|
|
* - **ReportsTo**: Reporting relationships
|
|
|
|
|
* - **Supervises**: Supervisory relationships
|
|
|
|
|
* - **Mentors**: Mentorship relationships
|
|
|
|
|
* - **Communicates**: Communication relationships
|
|
|
|
|
*
|
|
|
|
|
* ### Descriptive/Functional Types
|
|
|
|
|
* - **Describes**: Descriptive relationships
|
|
|
|
|
* - **Defines**: Definition relationships
|
|
|
|
|
* - **Categorizes**: Categorization relationships
|
|
|
|
|
* - **Measures**: Measurement relationships
|
|
|
|
|
* - **Evaluates**: Evaluation or assessment relationships
|
|
|
|
|
* - **Uses**: Utilization relationships
|
|
|
|
|
* - **Implements**: Implementation relationships
|
|
|
|
|
* - **Extends**: Extension relationships
|
|
|
|
|
*
|
|
|
|
|
* ## Usage with Additional Metadata
|
|
|
|
|
*
|
|
|
|
|
* While the type system provides a standardized vocabulary, additional metadata
|
|
|
|
|
* can be attached to any entity or relationship to capture domain-specific
|
|
|
|
|
* information:
|
|
|
|
|
*
|
|
|
|
|
* ```typescript
|
|
|
|
|
* const person: GraphNoun = {
|
|
|
|
|
* id: 'person-123',
|
|
|
|
|
* noun: NounType.Person,
|
|
|
|
|
* data: {
|
|
|
|
|
* name: 'John Doe',
|
|
|
|
|
* age: 30,
|
|
|
|
|
* profession: 'Engineer'
|
|
|
|
|
* }
|
|
|
|
|
* }
|
|
|
|
|
*
|
|
|
|
|
* const worksFor: GraphVerb = {
|
|
|
|
|
* id: 'verb-456',
|
|
|
|
|
* source: 'person-123',
|
|
|
|
|
* target: 'org-789',
|
|
|
|
|
* verb: VerbType.MemberOf,
|
|
|
|
|
* data: {
|
|
|
|
|
* role: 'Senior Engineer',
|
|
|
|
|
* startDate: '2020-01-01',
|
|
|
|
|
* department: 'Engineering'
|
|
|
|
|
* }
|
|
|
|
|
* }
|
|
|
|
|
* ```
|
|
|
|
|
*
|
|
|
|
|
* ## Modeling Different Graph Types
|
|
|
|
|
*
|
|
|
|
|
* This type system can model various graph structures:
|
|
|
|
|
*
|
|
|
|
|
* ### Knowledge Graphs
|
|
|
|
|
* Use Person, Organization, Location, Concept entities with semantic relationships
|
|
|
|
|
* like AttributedTo, LocatedAt, RelatedTo
|
|
|
|
|
*
|
|
|
|
|
* ### Social Networks
|
|
|
|
|
* Use Person, User entities with social relationships like FriendOf, Follows,
|
|
|
|
|
* WorksWith, Communicates
|
|
|
|
|
*
|
|
|
|
|
* ### Content Networks
|
|
|
|
|
* Use Document, Media, Content entities with relationships like References,
|
|
|
|
|
* CreatedBy, Contains, Categorizes
|
|
|
|
|
*
|
|
|
|
|
* ### Business Process Models
|
|
|
|
|
* Use Task, Process, Role entities with relationships like Precedes, Requires,
|
|
|
|
|
* DependsOn, Transforms
|
|
|
|
|
*
|
|
|
|
|
* ### Organizational Charts
|
|
|
|
|
* Use Person, Role, Organization entities with relationships like ReportsTo,
|
|
|
|
|
* Supervises, MemberOf
|
|
|
|
|
*
|
|
|
|
|
* The flexibility of this system allows it to represent any domain while
|
|
|
|
|
* maintaining semantic consistency and enabling powerful graph operations
|
|
|
|
|
* and reasoning capabilities.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
// Common metadata types
|
|
|
|
|
/**
|
|
|
|
|
* Represents a high-precision timestamp with seconds and nanoseconds
|
|
|
|
|
* Used for tracking creation and update times of graph elements
|
|
|
|
|
*/
|
|
|
|
|
interface Timestamp {
|
|
|
|
|
seconds: number
|
|
|
|
|
nanoseconds: number
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Metadata about the creator/source of a graph noun
|
|
|
|
|
* Tracks which augmentation and model created the element
|
|
|
|
|
*/
|
|
|
|
|
interface CreatorMetadata {
|
|
|
|
|
augmentation: string // Name of the augmentation that created this element
|
|
|
|
|
version: string // Version of the augmentation
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Base interface for nodes (nouns) in the graph
|
|
|
|
|
* Represents entities like people, places, things, etc.
|
|
|
|
|
*/
|
|
|
|
|
export interface GraphNoun {
|
|
|
|
|
id: string // Unique identifier for the noun
|
|
|
|
|
createdBy: CreatorMetadata // Information about what created this noun
|
|
|
|
|
noun: NounType // Type classification of the noun
|
|
|
|
|
createdAt: Timestamp // When the noun was created
|
|
|
|
|
updatedAt: Timestamp // When the noun was last updated
|
|
|
|
|
label?: string // Optional descriptive label
|
|
|
|
|
data?: Record<string, any> // Additional flexible data storage
|
|
|
|
|
embeddedVerbs?: EmbeddedGraphVerb[] // Optional embedded relationships
|
|
|
|
|
embedding?: number[] // Vector representation of the noun
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Base interface for verbs in the graph
|
|
|
|
|
* Represents relationships between nouns
|
|
|
|
|
*/
|
|
|
|
|
export interface GraphVerb {
|
|
|
|
|
id: string // Unique identifier for the verb
|
|
|
|
|
source: string // ID of the source noun
|
|
|
|
|
target: string // ID of the target noun
|
|
|
|
|
label?: string // Optional descriptive label
|
|
|
|
|
verb: VerbType // Type of relationship
|
|
|
|
|
createdAt: Timestamp // When the verb was created
|
|
|
|
|
updatedAt: Timestamp // When the verb was last updated
|
|
|
|
|
createdBy: CreatorMetadata // Information about what created this verb
|
|
|
|
|
data?: Record<string, any> // Additional flexible data storage
|
|
|
|
|
embedding?: number[] // Vector representation of the relationship
|
|
|
|
|
confidence?: number // Confidence score (0-1)
|
|
|
|
|
weight?: number // Strength/importance of the relationship
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Version of GraphVerb for embedded relationships
|
|
|
|
|
* Used when the source is implicit from the parent document
|
|
|
|
|
*/
|
|
|
|
|
export type EmbeddedGraphVerb = Omit<GraphVerb, 'source'>
|
|
|
|
|
|
|
|
|
|
// Proper Noun interfaces - extend GraphNoun with specific noun types
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Represents a person entity in the graph
|
|
|
|
|
*/
|
|
|
|
|
export interface Person extends GraphNoun {
|
|
|
|
|
noun: typeof NounType.Person
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Represents a physical location in the graph
|
|
|
|
|
*/
|
|
|
|
|
export interface Location extends GraphNoun {
|
|
|
|
|
noun: typeof NounType.Location
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Represents a physical or virtual object in the graph
|
|
|
|
|
*/
|
|
|
|
|
export interface Thing extends GraphNoun {
|
|
|
|
|
noun: typeof NounType.Thing
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Represents an event or occurrence in the graph
|
|
|
|
|
*/
|
|
|
|
|
export interface Event extends GraphNoun {
|
|
|
|
|
noun: typeof NounType.Event
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Represents an abstract concept or idea in the graph
|
|
|
|
|
*/
|
|
|
|
|
export interface Concept extends GraphNoun {
|
|
|
|
|
noun: typeof NounType.Concept
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export interface Collection extends GraphNoun {
|
|
|
|
|
noun: typeof NounType.Collection
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export interface Organization extends GraphNoun {
|
|
|
|
|
noun: typeof NounType.Organization
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export interface Document extends GraphNoun {
|
|
|
|
|
noun: typeof NounType.Document
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export interface Media extends GraphNoun {
|
|
|
|
|
noun: typeof NounType.Media
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export interface File extends GraphNoun {
|
|
|
|
|
noun: typeof NounType.File
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export interface Message extends GraphNoun {
|
|
|
|
|
noun: typeof NounType.Message
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export interface Dataset extends GraphNoun {
|
|
|
|
|
noun: typeof NounType.Dataset
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export interface Product extends GraphNoun {
|
|
|
|
|
noun: typeof NounType.Product
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export interface Service extends GraphNoun {
|
|
|
|
|
noun: typeof NounType.Service
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export interface User extends GraphNoun {
|
|
|
|
|
noun: typeof NounType.User
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export interface Task extends GraphNoun {
|
|
|
|
|
noun: typeof NounType.Task
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export interface Project extends GraphNoun {
|
|
|
|
|
noun: typeof NounType.Project
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export interface Process extends GraphNoun {
|
|
|
|
|
noun: typeof NounType.Process
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export interface State extends GraphNoun {
|
|
|
|
|
noun: typeof NounType.State
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export interface Role extends GraphNoun {
|
|
|
|
|
noun: typeof NounType.Role
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export interface Topic extends GraphNoun {
|
|
|
|
|
noun: typeof NounType.Topic
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export interface Language extends GraphNoun {
|
|
|
|
|
noun: typeof NounType.Language
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export interface Currency extends GraphNoun {
|
|
|
|
|
noun: typeof NounType.Currency
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export interface Measurement extends GraphNoun {
|
|
|
|
|
noun: typeof NounType.Measurement
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Represents content (text, media, etc.) in the graph
|
|
|
|
|
*/
|
|
|
|
|
export interface Content extends GraphNoun {
|
|
|
|
|
noun: typeof NounType.Content
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Represents a scientific hypothesis or theory in the graph
|
|
|
|
|
*/
|
|
|
|
|
export interface Hypothesis extends GraphNoun {
|
|
|
|
|
noun: typeof NounType.Hypothesis
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Represents an experiment, study, or research trial in the graph
|
|
|
|
|
*/
|
|
|
|
|
export interface Experiment extends GraphNoun {
|
|
|
|
|
noun: typeof NounType.Experiment
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Represents a legal contract or agreement in the graph
|
|
|
|
|
*/
|
|
|
|
|
export interface Contract extends GraphNoun {
|
|
|
|
|
noun: typeof NounType.Contract
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Represents a regulation, law, or compliance requirement in the graph
|
|
|
|
|
*/
|
|
|
|
|
export interface Regulation extends GraphNoun {
|
|
|
|
|
noun: typeof NounType.Regulation
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Represents an interface, API, or protocol specification in the graph
|
|
|
|
|
*/
|
|
|
|
|
export interface Interface extends GraphNoun {
|
|
|
|
|
noun: typeof NounType.Interface
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Represents a computational or infrastructure resource in the graph
|
|
|
|
|
*/
|
|
|
|
|
export interface Resource extends GraphNoun {
|
|
|
|
|
noun: typeof NounType.Resource
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Defines valid noun types for graph entities
|
|
|
|
|
* Used for categorizing different types of nodes
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
export const NounType = {
|
|
|
|
|
// Core Entity Types
|
|
|
|
|
Person: 'person', // Human entities
|
|
|
|
|
Organization: 'organization', // Formal organizations (companies, institutions, etc.)
|
|
|
|
|
Location: 'location', // Geographic locations (merges previous Place and Location)
|
2025-09-11 16:23:32 -07:00
|
|
|
Thing: 'thing', // Physical objects (generic items/entities should use this)
|
2025-08-26 12:32:21 -07:00
|
|
|
Concept: 'concept', // Abstract ideas, concepts, and intangible entities
|
|
|
|
|
Event: 'event', // Occurrences with time and place
|
|
|
|
|
|
|
|
|
|
// Digital/Content Types
|
|
|
|
|
Document: 'document', // Text-based files and documents (reports, articles, etc.)
|
|
|
|
|
Media: 'media', // Non-text media files (images, videos, audio)
|
|
|
|
|
File: 'file', // Generic digital files (merges aspects of Digital with file-specific focus)
|
|
|
|
|
Message: 'message', // Communication content (emails, chat messages, posts)
|
|
|
|
|
Content: 'content', // Generic content that doesn't fit other categories
|
|
|
|
|
|
|
|
|
|
// Collection Types
|
|
|
|
|
Collection: 'collection', // Generic grouping of items (merges Group, List, and Category)
|
|
|
|
|
Dataset: 'dataset', // Structured collections of data
|
|
|
|
|
|
2025-09-11 16:23:32 -07:00
|
|
|
// Business/Application Types
|
2025-08-26 12:32:21 -07:00
|
|
|
Product: 'product', // Commercial products and offerings
|
|
|
|
|
Service: 'service', // Services and offerings
|
|
|
|
|
User: 'user', // User accounts and profiles
|
|
|
|
|
Task: 'task', // Actions, todos, and workflow items
|
|
|
|
|
Project: 'project', // Organized initiatives with goals and timelines
|
|
|
|
|
|
|
|
|
|
// Descriptive Types
|
|
|
|
|
Process: 'process', // Workflows, procedures, and sequences
|
|
|
|
|
State: 'state', // States, conditions, or statuses
|
|
|
|
|
Role: 'role', // Roles, positions, or responsibilities
|
|
|
|
|
Topic: 'topic', // Subjects or themes
|
|
|
|
|
Language: 'language', // Languages or linguistic entities
|
|
|
|
|
Currency: 'currency', // Currencies and monetary units
|
|
|
|
|
Measurement: 'measurement', // Measurements, metrics, or quantities
|
|
|
|
|
|
|
|
|
|
// Scientific/Research Types (100% Coverage)
|
|
|
|
|
Hypothesis: 'hypothesis', // Scientific theories, research hypotheses, propositions
|
|
|
|
|
Experiment: 'experiment', // Controlled studies, trials, tests, research methodologies
|
|
|
|
|
|
|
|
|
|
// Legal/Regulatory Types (100% Coverage)
|
|
|
|
|
Contract: 'contract', // Legal agreements, terms, policies, binding documents
|
|
|
|
|
Regulation: 'regulation', // Laws, rules, compliance requirements, standards
|
|
|
|
|
|
|
|
|
|
// Technical Infrastructure Types (100% Coverage)
|
|
|
|
|
Interface: 'interface', // APIs, protocols, contracts, specifications, endpoints
|
|
|
|
|
Resource: 'resource' // Compute resources, bandwidth, storage, infrastructure assets
|
|
|
|
|
} as const
|
|
|
|
|
export type NounType = (typeof NounType)[keyof typeof NounType]
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Defines valid verb types for relationships
|
|
|
|
|
* Used for categorizing different types of connections
|
|
|
|
|
*/
|
|
|
|
|
export const VerbType = {
|
|
|
|
|
// Core Relationship Types
|
|
|
|
|
RelatedTo: 'relatedTo', // Generic relationship (default fallback)
|
|
|
|
|
Contains: 'contains', // Containment relationship (parent contains child)
|
|
|
|
|
PartOf: 'partOf', // Part-whole relationship (child is part of parent)
|
|
|
|
|
LocatedAt: 'locatedAt', // Spatial relationship
|
|
|
|
|
References: 'references', // Reference or citation relationship
|
|
|
|
|
|
|
|
|
|
// Temporal/Causal Types
|
|
|
|
|
Precedes: 'precedes', // Temporal sequence (comes before)
|
|
|
|
|
Succeeds: 'succeeds', // Temporal sequence (comes after)
|
|
|
|
|
Causes: 'causes', // Causal relationship (merges Influences and Causes)
|
|
|
|
|
DependsOn: 'dependsOn', // Dependency relationship
|
|
|
|
|
Requires: 'requires', // Necessity relationship (new)
|
|
|
|
|
|
|
|
|
|
// Creation/Transformation Types
|
|
|
|
|
Creates: 'creates', // Creation relationship (merges Created and Produces)
|
|
|
|
|
Transforms: 'transforms', // Transformation relationship
|
|
|
|
|
Becomes: 'becomes', // State change relationship
|
|
|
|
|
Modifies: 'modifies', // Modification relationship
|
|
|
|
|
Consumes: 'consumes', // Consumption relationship
|
|
|
|
|
|
|
|
|
|
// Ownership/Attribution Types
|
|
|
|
|
Owns: 'owns', // Ownership relationship (merges Controls and Owns)
|
|
|
|
|
AttributedTo: 'attributedTo', // Attribution or authorship
|
|
|
|
|
CreatedBy: 'createdBy', // Creation attribution (new, distinct from Creates)
|
|
|
|
|
BelongsTo: 'belongsTo', // Belonging relationship (new)
|
|
|
|
|
|
|
|
|
|
// Social/Organizational Types
|
|
|
|
|
MemberOf: 'memberOf', // Membership or affiliation
|
|
|
|
|
WorksWith: 'worksWith', // Professional relationship
|
|
|
|
|
FriendOf: 'friendOf', // Friendship relationship
|
|
|
|
|
Follows: 'follows', // Following relationship
|
|
|
|
|
Likes: 'likes', // Liking relationship
|
|
|
|
|
ReportsTo: 'reportsTo', // Reporting relationship
|
|
|
|
|
Supervises: 'supervises', // Supervisory relationship
|
|
|
|
|
Mentors: 'mentors', // Mentorship relationship
|
|
|
|
|
Communicates: 'communicates', // Communication relationship (merges Communicates and Collaborates)
|
|
|
|
|
|
|
|
|
|
// Descriptive/Functional Types
|
|
|
|
|
Describes: 'describes', // Descriptive relationship
|
|
|
|
|
Defines: 'defines', // Definition relationship
|
|
|
|
|
Categorizes: 'categorizes', // Categorization relationship
|
|
|
|
|
Measures: 'measures', // Measurement relationship
|
|
|
|
|
Evaluates: 'evaluates', // Evaluation or assessment relationship
|
|
|
|
|
Uses: 'uses', // Utilization relationship (new)
|
|
|
|
|
Implements: 'implements', // Implementation relationship
|
|
|
|
|
Extends: 'extends', // Extension relationship (enhancement, building upon)
|
|
|
|
|
|
|
|
|
|
// Enhanced Relationships (100% Coverage)
|
|
|
|
|
Inherits: 'inherits', // True inheritance relationship (class inheritance, legacy)
|
|
|
|
|
Conflicts: 'conflicts', // Contradictions, incompatibilities, opposing forces
|
|
|
|
|
Synchronizes: 'synchronizes', // Coordination, timing, synchronized operations
|
|
|
|
|
Competes: 'competes' // Competition, rivalry, competing relationships
|
|
|
|
|
} as const
|
|
|
|
|
export type VerbType = (typeof VerbType)[keyof typeof VerbType]
|
2025-10-15 12:26:25 -07:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Noun type enum for O(1) lookups and type safety
|
|
|
|
|
* Maps each noun type to a unique index (0-30)
|
|
|
|
|
* Used for fixed-size array operations and bitmap indices
|
|
|
|
|
*/
|
|
|
|
|
export enum NounTypeEnum {
|
|
|
|
|
person = 0,
|
|
|
|
|
organization = 1,
|
|
|
|
|
location = 2,
|
|
|
|
|
thing = 3,
|
|
|
|
|
concept = 4,
|
|
|
|
|
event = 5,
|
|
|
|
|
document = 6,
|
|
|
|
|
media = 7,
|
|
|
|
|
file = 8,
|
|
|
|
|
message = 9,
|
|
|
|
|
content = 10,
|
|
|
|
|
collection = 11,
|
|
|
|
|
dataset = 12,
|
|
|
|
|
product = 13,
|
|
|
|
|
service = 14,
|
|
|
|
|
user = 15,
|
|
|
|
|
task = 16,
|
|
|
|
|
project = 17,
|
|
|
|
|
process = 18,
|
|
|
|
|
state = 19,
|
|
|
|
|
role = 20,
|
|
|
|
|
topic = 21,
|
|
|
|
|
language = 22,
|
|
|
|
|
currency = 23,
|
|
|
|
|
measurement = 24,
|
|
|
|
|
hypothesis = 25,
|
|
|
|
|
experiment = 26,
|
|
|
|
|
contract = 27,
|
|
|
|
|
regulation = 28,
|
|
|
|
|
interface = 29,
|
|
|
|
|
resource = 30
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Verb type enum for O(1) lookups and type safety
|
|
|
|
|
* Maps each verb type to a unique index (0-39)
|
|
|
|
|
* Used for fixed-size array operations and bitmap indices
|
|
|
|
|
*/
|
|
|
|
|
export enum VerbTypeEnum {
|
|
|
|
|
relatedTo = 0,
|
|
|
|
|
contains = 1,
|
|
|
|
|
partOf = 2,
|
|
|
|
|
locatedAt = 3,
|
|
|
|
|
references = 4,
|
|
|
|
|
precedes = 5,
|
|
|
|
|
succeeds = 6,
|
|
|
|
|
causes = 7,
|
|
|
|
|
dependsOn = 8,
|
|
|
|
|
requires = 9,
|
|
|
|
|
creates = 10,
|
|
|
|
|
transforms = 11,
|
|
|
|
|
becomes = 12,
|
|
|
|
|
modifies = 13,
|
|
|
|
|
consumes = 14,
|
|
|
|
|
owns = 15,
|
|
|
|
|
attributedTo = 16,
|
|
|
|
|
createdBy = 17,
|
|
|
|
|
belongsTo = 18,
|
|
|
|
|
memberOf = 19,
|
|
|
|
|
worksWith = 20,
|
|
|
|
|
friendOf = 21,
|
|
|
|
|
follows = 22,
|
|
|
|
|
likes = 23,
|
|
|
|
|
reportsTo = 24,
|
|
|
|
|
supervises = 25,
|
|
|
|
|
mentors = 26,
|
|
|
|
|
communicates = 27,
|
|
|
|
|
describes = 28,
|
|
|
|
|
defines = 29,
|
|
|
|
|
categorizes = 30,
|
|
|
|
|
measures = 31,
|
|
|
|
|
evaluates = 32,
|
|
|
|
|
uses = 33,
|
|
|
|
|
implements = 34,
|
|
|
|
|
extends = 35,
|
|
|
|
|
inherits = 36,
|
|
|
|
|
conflicts = 37,
|
|
|
|
|
synchronizes = 38,
|
|
|
|
|
competes = 39
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Total number of noun types (for array allocations)
|
|
|
|
|
*/
|
|
|
|
|
export const NOUN_TYPE_COUNT = 31
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Total number of verb types (for array allocations)
|
|
|
|
|
*/
|
|
|
|
|
export const VERB_TYPE_COUNT = 40
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Type utilities for O(1) conversions between string types and numeric indices
|
|
|
|
|
* Enables efficient fixed-size array operations and bitmap indexing
|
|
|
|
|
*/
|
|
|
|
|
export const TypeUtils = {
|
|
|
|
|
/**
|
|
|
|
|
* Get numeric index for a noun type
|
|
|
|
|
* @param type - NounType string (e.g., 'person')
|
|
|
|
|
* @returns Numeric index (0-30)
|
|
|
|
|
*/
|
|
|
|
|
getNounIndex: (type: NounType): number => {
|
|
|
|
|
return NounTypeEnum[type as keyof typeof NounTypeEnum]
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Get numeric index for a verb type
|
|
|
|
|
* @param type - VerbType string (e.g., 'relatedTo')
|
|
|
|
|
* @returns Numeric index (0-39)
|
|
|
|
|
*/
|
|
|
|
|
getVerbIndex: (type: VerbType): number => {
|
|
|
|
|
return VerbTypeEnum[type as keyof typeof VerbTypeEnum]
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Get noun type string from numeric index
|
|
|
|
|
* @param index - Numeric index (0-30)
|
|
|
|
|
* @returns NounType string or 'thing' as default
|
|
|
|
|
*/
|
|
|
|
|
getNounFromIndex: (index: number): NounType => {
|
|
|
|
|
const entry = Object.entries(NounTypeEnum).find(([_, idx]) => idx === index)
|
|
|
|
|
return entry ? (entry[0] as NounType) : NounType.Thing
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Get verb type string from numeric index
|
|
|
|
|
* @param index - Numeric index (0-39)
|
|
|
|
|
* @returns VerbType string or 'relatedTo' as default
|
|
|
|
|
*/
|
|
|
|
|
getVerbFromIndex: (index: number): VerbType => {
|
|
|
|
|
const entry = Object.entries(VerbTypeEnum).find(([_, idx]) => idx === index)
|
|
|
|
|
return entry ? (entry[0] as VerbType) : VerbType.RelatedTo
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Type-specific metadata for optimization hints
|
|
|
|
|
* Provides per-type configuration for bloom filters, chunking, and indexing
|
|
|
|
|
*/
|
|
|
|
|
export const TypeMetadata: Record<
|
|
|
|
|
NounType,
|
|
|
|
|
{
|
|
|
|
|
expectedFields: number // Average number of metadata fields for this type
|
|
|
|
|
bloomBits: number // Bloom filter size in bits (128 or 256)
|
|
|
|
|
avgChunkSize: number // Average entities per index chunk
|
|
|
|
|
}
|
|
|
|
|
> = {
|
|
|
|
|
person: { expectedFields: 10, bloomBits: 256, avgChunkSize: 100 },
|
|
|
|
|
organization: { expectedFields: 12, bloomBits: 256, avgChunkSize: 80 },
|
|
|
|
|
document: { expectedFields: 8, bloomBits: 256, avgChunkSize: 100 },
|
|
|
|
|
event: { expectedFields: 6, bloomBits: 128, avgChunkSize: 50 },
|
|
|
|
|
location: { expectedFields: 7, bloomBits: 128, avgChunkSize: 60 },
|
|
|
|
|
thing: { expectedFields: 5, bloomBits: 128, avgChunkSize: 50 },
|
|
|
|
|
concept: { expectedFields: 4, bloomBits: 128, avgChunkSize: 40 },
|
|
|
|
|
media: { expectedFields: 6, bloomBits: 128, avgChunkSize: 50 },
|
|
|
|
|
file: { expectedFields: 5, bloomBits: 128, avgChunkSize: 50 },
|
|
|
|
|
message: { expectedFields: 7, bloomBits: 128, avgChunkSize: 60 },
|
|
|
|
|
content: { expectedFields: 5, bloomBits: 128, avgChunkSize: 50 },
|
|
|
|
|
collection: { expectedFields: 4, bloomBits: 128, avgChunkSize: 40 },
|
|
|
|
|
dataset: { expectedFields: 6, bloomBits: 128, avgChunkSize: 50 },
|
|
|
|
|
product: { expectedFields: 8, bloomBits: 256, avgChunkSize: 70 },
|
|
|
|
|
service: { expectedFields: 7, bloomBits: 128, avgChunkSize: 60 },
|
|
|
|
|
user: { expectedFields: 9, bloomBits: 256, avgChunkSize: 80 },
|
|
|
|
|
task: { expectedFields: 6, bloomBits: 128, avgChunkSize: 50 },
|
|
|
|
|
project: { expectedFields: 8, bloomBits: 256, avgChunkSize: 70 },
|
|
|
|
|
process: { expectedFields: 5, bloomBits: 128, avgChunkSize: 50 },
|
|
|
|
|
state: { expectedFields: 3, bloomBits: 128, avgChunkSize: 30 },
|
|
|
|
|
role: { expectedFields: 4, bloomBits: 128, avgChunkSize: 40 },
|
|
|
|
|
topic: { expectedFields: 4, bloomBits: 128, avgChunkSize: 40 },
|
|
|
|
|
language: { expectedFields: 3, bloomBits: 128, avgChunkSize: 30 },
|
|
|
|
|
currency: { expectedFields: 3, bloomBits: 128, avgChunkSize: 30 },
|
|
|
|
|
measurement: { expectedFields: 4, bloomBits: 128, avgChunkSize: 40 },
|
|
|
|
|
hypothesis: { expectedFields: 6, bloomBits: 128, avgChunkSize: 50 },
|
|
|
|
|
experiment: { expectedFields: 7, bloomBits: 128, avgChunkSize: 60 },
|
|
|
|
|
contract: { expectedFields: 8, bloomBits: 256, avgChunkSize: 70 },
|
|
|
|
|
regulation: { expectedFields: 6, bloomBits: 128, avgChunkSize: 50 },
|
|
|
|
|
interface: { expectedFields: 5, bloomBits: 128, avgChunkSize: 50 },
|
|
|
|
|
resource: { expectedFields: 5, bloomBits: 128, avgChunkSize: 50 }
|
|
|
|
|
}
|