@semiont/core 0.3.3 → 0.3.5

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.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/branded-types.ts","../src/creation-methods.ts","../src/identifiers.ts","../src/events.ts","../src/event-utils.ts","../src/event-bus.ts","../src/operators/burst-buffer.ts","../src/annotation-utils.ts","../src/id-generation.ts","../src/annotation-assembly.ts","../src/type-guards.ts","../src/errors.ts","../src/did-utils.ts","../src/config/configuration-error.ts","../src/config/config.schema.json","../src/config/config-validator.ts","../src/config/environment-loader.ts","../src/config/environment-validator.ts","../src/config/platform-types.ts","../src/index.ts"],"names":["resourceUri","baseUrl","annotationUri","isResourceEvent","resourceId","userId"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Branded string types for compile-time type safety\n *\n * These types are zero-cost at runtime but prevent mixing\n * different string types at compile time.\n */\n\nimport type { components } from './types';\n\n// ============================================================================\n// OPENAPI-GENERATED TYPES (use directly from spec)\n// ============================================================================\n\nexport type Motivation = components['schemas']['Motivation'];\nexport type ContentFormat = components['schemas']['ContentFormat'];\n\n// ============================================================================\n// AUTHENTICATION & TOKENS\n// ============================================================================\n\nexport type Email = string & { readonly __brand: 'Email' };\nexport type AuthCode = string & { readonly __brand: 'AuthCode' };\nexport type GoogleCredential = string & { readonly __brand: 'GoogleCredential' };\nexport type AccessToken = string & { readonly __brand: 'AccessToken' };\nexport type RefreshToken = string & { readonly __brand: 'RefreshToken' };\nexport type MCPToken = string & { readonly __brand: 'MCPToken' };\nexport type CloneToken = string & { readonly __brand: 'CloneToken' };\n\n// ============================================================================\n// SYSTEM IDENTIFIERS\n// ============================================================================\n\nexport type JobId = string & { readonly __brand: 'JobId' };\nexport type UserDID = string & { readonly __brand: 'UserDID' };\nexport type EntityType = string & { readonly __brand: 'EntityType' };\nexport type SearchQuery = string & { readonly __brand: 'SearchQuery' };\nexport type BaseUrl = string & { readonly __brand: 'BaseUrl' };\n\n// ============================================================================\n// HELPER FUNCTIONS (minimal validation, just branding)\n// ============================================================================\n\nexport function email(value: string): Email { return value as Email; }\nexport function authCode(value: string): AuthCode { return value as AuthCode; }\nexport function googleCredential(value: string): GoogleCredential { return value as GoogleCredential; }\nexport function accessToken(value: string): AccessToken { return value as AccessToken; }\nexport function refreshToken(value: string): RefreshToken { return value as RefreshToken; }\nexport function mcpToken(value: string): MCPToken { return value as MCPToken; }\nexport function cloneToken(value: string): CloneToken { return value as CloneToken; }\nexport function jobId(value: string): JobId { return value as JobId; }\nexport function userDID(value: string): UserDID { return value as UserDID; }\nexport function entityType(value: string): EntityType { return value as EntityType; }\nexport function searchQuery(value: string): SearchQuery { return value as SearchQuery; }\nexport function baseUrl(value: string): BaseUrl { return value as BaseUrl; }\n\n// Motivation and ContentFormat use OpenAPI enums - no helpers needed\n// Use the enum values directly from the OpenAPI spec\n\n// ============================================================================\n// HTTP URI TYPES\n// ============================================================================\n\n// Branded type definitions for HTTP URIs returned by the API\nexport type ResourceUri = string & { readonly __brand: 'ResourceUri' };\n\n// W3C flat format for content negotiation: http://localhost:4000/annotations/{id}\nexport type AnnotationUri = string & { readonly __brand: 'AnnotationUri' };\n\n// Nested format for CRUD operations: http://localhost:4000/resources/{resourceId}/annotations/{annotationId}\nexport type ResourceAnnotationUri = string & { readonly __brand: 'ResourceAnnotationUri' };\n\n// Factory functions with runtime validation\nexport function resourceUri(uri: string): ResourceUri {\n if (!uri.startsWith('http://') && !uri.startsWith('https://')) {\n throw new TypeError(`Expected ResourceUri, got: ${uri}`);\n }\n return uri as ResourceUri;\n}\n\nexport function annotationUri(uri: string): AnnotationUri {\n if (!uri.startsWith('http://') && !uri.startsWith('https://')) {\n throw new TypeError(`Expected AnnotationUri, got: ${uri}`);\n }\n return uri as AnnotationUri;\n}\n\nexport function resourceAnnotationUri(uri: string): ResourceAnnotationUri {\n if (!uri.startsWith('http://') && !uri.startsWith('https://')) {\n throw new TypeError(`Expected ResourceAnnotationUri, got: ${uri}`);\n }\n // Additional validation: must contain /resources/ and /annotations/\n if (!uri.includes('/resources/') || !uri.includes('/annotations/')) {\n throw new TypeError(`Expected nested ResourceAnnotationUri format, got: ${uri}`);\n }\n return uri as ResourceAnnotationUri;\n}\n","/**\n * Resource creation methods - How resources are created in the system\n */\n\n/**\n * Enumeration of all possible resource creation methods\n */\nexport const CREATION_METHODS = {\n API: 'api',\n UPLOAD: 'upload',\n UI: 'ui',\n REFERENCE: 'reference',\n CLONE: 'clone',\n GENERATED: 'generated',\n} as const;\n\n/**\n * Type for resource creation methods\n */\nexport type CreationMethod = typeof CREATION_METHODS[keyof typeof CREATION_METHODS];","/**\n * Branded identifier types for compile-time type safety.\n *\n * These types prevent mixing up resource IDs, annotation IDs, and user IDs\n * at compile time while having zero runtime overhead.\n *\n * URI types (ResourceUri, AnnotationUri) are in @semiont/api-client\n * since they deal with HTTP URIs returned by the API.\n */\n\n// Branded type definitions for IDs only\nexport type ResourceId = string & { readonly __brand: 'ResourceId' };\nexport type AnnotationId = string & { readonly __brand: 'AnnotationId' };\nexport type UserId = string & { readonly __brand: 'UserId' };\n\n// Type guards with runtime validation\nexport function isResourceId(value: string): value is ResourceId {\n return !value.includes('/');\n}\n\nexport function isAnnotationId(value: string): value is AnnotationId {\n return !value.includes('/');\n}\n\n// Factory functions with runtime validation\nexport function resourceId(id: string): ResourceId {\n if (id.includes('/')) {\n throw new TypeError(`Expected ResourceId, got URI: ${id}`);\n }\n return id as ResourceId;\n}\n\nexport function annotationId(id: string): AnnotationId {\n if (id.includes('/')) {\n throw new TypeError(`Expected AnnotationId, got URI: ${id}`);\n }\n return id as AnnotationId;\n}\n\nexport function userId(id: string): UserId {\n return id as UserId;\n}\n","/**\n * Resource Event Types\n *\n * Event-sourced architecture for resource state management\n * Events are stored in an append-only log (JSONL format)\n *\n * Federation-ready design:\n * - resourceId uses content hashes (doc-sha256:...)\n * - userId uses DID format (did:web:org.com:users:alice)\n * - prevEventHash creates tamper-evident chains\n * - Optional signatures for cross-org verification\n */\n\nimport type { CreationMethod } from './creation-methods';\nimport type { components } from './types';\nimport type { AnnotationUri, JobId } from './branded-types';\nimport type { ResourceId, AnnotationId, UserId } from './identifiers';\n\n// Import OpenAPI types\ntype Annotation = components['schemas']['Annotation'];\ntype ContentFormat = components['schemas']['ContentFormat'];\ntype Motivation = components['schemas']['Motivation'];\n\nexport interface BaseEvent {\n id: string; // Unique event ID (UUID)\n timestamp: string; // ISO 8601 timestamp (for humans, NOT for ordering)\n resourceId?: ResourceId; // Optional - present for resource-scoped events, absent for system events\n // Use isSystemEvent() / isResourceScopedEvent() type guards for routing\n userId: UserId; // DID format: did:web:org.com:users:alice (federation-ready)\n version: number; // Event schema version\n}\n\n// Resource lifecycle events\nexport interface ResourceCreatedEvent extends BaseEvent {\n type: 'resource.created';\n payload: {\n name: string;\n format: ContentFormat; // MIME type (validated enum)\n contentChecksum: string; // SHA-256 of content (should match resourceId)\n contentByteSize?: number; // Size of content in bytes\n creationMethod: CreationMethod; // How the resource was created\n entityTypes?: string[];\n\n // First-class fields (promoted from metadata)\n language?: string; // Language/locale code (e.g., 'en', 'es', 'fr')\n isDraft?: boolean; // Draft status for generated resources\n generatedFrom?: string; // Annotation/Reference ID that triggered generation\n generationPrompt?: string; // Prompt used for AI generation (events-only, not on Resource)\n };\n}\n\nexport interface ResourceClonedEvent extends BaseEvent {\n type: 'resource.cloned';\n payload: {\n name: string;\n format: ContentFormat; // MIME type (validated enum)\n contentChecksum: string; // SHA-256 of new content\n contentByteSize?: number; // Size of content in bytes\n parentResourceId: string; // Content hash of parent resource\n creationMethod: CreationMethod; // How the resource was created\n entityTypes?: string[];\n\n // First-class fields (promoted from metadata)\n language?: string; // Language/locale code (e.g., 'en', 'es', 'fr')\n };\n}\n\nexport interface ResourceArchivedEvent extends BaseEvent {\n type: 'resource.archived';\n payload: {\n reason?: string;\n };\n}\n\nexport interface ResourceUnarchivedEvent extends BaseEvent {\n type: 'resource.unarchived';\n payload: Record<string, never>; // Empty payload\n}\n\n// Representation events (multi-format support)\nexport interface RepresentationAddedEvent extends BaseEvent {\n type: 'representation.added';\n resourceId: ResourceId; // Required - resource-scoped event\n payload: {\n representation: {\n '@id': string; // Unique ID (content hash)\n mediaType: string; // MIME type (e.g., 'text/markdown', 'application/pdf')\n byteSize: number; // Size in bytes\n checksum: string; // Content hash (SHA-256)\n created: string; // ISO 8601 timestamp\n rel?: 'original' | 'thumbnail' | 'preview' | 'optimized' | 'derived' | 'other';\n storageUri?: string; // Where bytes are stored (optional)\n filename?: string; // Original filename (optional)\n language?: string; // IETF BCP 47 language tag (optional, for translations)\n width?: number; // Pixels (images/video)\n height?: number; // Pixels (images/video)\n duration?: number; // Seconds (audio/video)\n };\n };\n}\n\nexport interface RepresentationRemovedEvent extends BaseEvent {\n type: 'representation.removed';\n resourceId: ResourceId; // Required - resource-scoped event\n payload: {\n checksum: string; // Which representation to remove\n };\n}\n\n// Unified annotation events\n// Single principle: An annotation is an annotation. The motivation field tells you what kind it is.\nexport interface AnnotationAddedEvent extends BaseEvent {\n type: 'annotation.added';\n payload: {\n annotation: Annotation;\n };\n}\n\nexport interface AnnotationRemovedEvent extends BaseEvent {\n type: 'annotation.removed';\n payload: {\n annotationId: AnnotationId; // Branded type for compile-time safety\n };\n}\n\n// Body operation types for fine-grained annotation body modifications\nexport type BodyItem =\n | { type: 'TextualBody'; value: string; purpose?: Motivation; format?: string; language?: string }\n | { type: 'SpecificResource'; source: string; purpose?: Motivation };\n\nexport type BodyOperation =\n | { op: 'add'; item: BodyItem }\n | { op: 'remove'; item: BodyItem }\n | { op: 'replace'; oldItem: BodyItem; newItem: BodyItem };\n\nexport interface AnnotationBodyUpdatedEvent extends BaseEvent {\n type: 'annotation.body.updated';\n payload: {\n annotationId: AnnotationId; // Branded type for compile-time safety\n operations: BodyOperation[];\n };\n}\n\n// Job progress events (resource-level)\n// Emitted by background workers for real-time progress updates\nexport interface JobStartedEvent extends BaseEvent {\n type: 'job.started';\n resourceId: ResourceId; // Required - job is scoped to a resource\n payload: {\n jobId: JobId;\n jobType: 'reference-annotation' | 'generation' | 'highlight-annotation' | 'assessment-annotation' | 'comment-annotation' | 'tag-annotation';\n totalSteps?: number; // Optional - total number of steps if known\n };\n}\n\nexport interface JobProgressEvent extends BaseEvent {\n type: 'job.progress';\n resourceId: ResourceId; // Required - job is scoped to a resource\n payload: {\n jobId: JobId;\n jobType: 'reference-annotation' | 'generation' | 'highlight-annotation' | 'assessment-annotation' | 'comment-annotation' | 'tag-annotation';\n percentage: number; // 0-100\n currentStep?: string; // Human-readable current step (e.g., \"Scanning for Person\")\n processedSteps?: number; // Number of steps completed\n totalSteps?: number; // Total number of steps\n foundCount?: number; // For detection: number of entities found so far\n message?: string; // Optional status message\n progress?: any; // For new job types: full progress object\n };\n}\n\nexport interface JobCompletedEvent extends BaseEvent {\n type: 'job.completed';\n resourceId: ResourceId; // Required - job is scoped to a resource\n payload: {\n jobId: JobId;\n jobType: 'reference-annotation' | 'generation' | 'highlight-annotation' | 'assessment-annotation' | 'comment-annotation' | 'tag-annotation';\n totalSteps?: number; // Total steps completed\n foundCount?: number; // For detection: total entities found\n resultResourceId?: ResourceId; // For generation: ID of generated resource (branded type)\n annotationUri?: AnnotationUri; // For generation: URI of annotation that triggered generation\n message?: string; // Optional completion message\n result?: any; // For new job types: full result object\n };\n}\n\nexport interface JobFailedEvent extends BaseEvent {\n type: 'job.failed';\n resourceId: ResourceId; // Required - job is scoped to a resource\n payload: {\n jobId: JobId;\n jobType: 'reference-annotation' | 'generation' | 'highlight-annotation' | 'assessment-annotation' | 'comment-annotation' | 'tag-annotation';\n error: string; // Error message\n details?: string; // Optional detailed error information\n };\n}\n\n// Entity tag events (resource-level)\nexport interface EntityTagAddedEvent extends BaseEvent {\n type: 'entitytag.added';\n resourceId: ResourceId; // Required - resource-scoped event\n payload: {\n entityType: string;\n };\n}\n\nexport interface EntityTagRemovedEvent extends BaseEvent {\n type: 'entitytag.removed';\n resourceId: ResourceId; // Required - resource-scoped event\n payload: {\n entityType: string;\n };\n}\n\n// Entity type events (global collection)\nexport interface EntityTypeAddedEvent extends BaseEvent {\n type: 'entitytype.added';\n resourceId?: undefined; // System-level event - no resource scope\n payload: {\n entityType: string; // The entity type being added to global collection\n };\n}\n\n// Union type of all events\nexport type ResourceEvent =\n | ResourceCreatedEvent\n | ResourceClonedEvent\n | ResourceArchivedEvent\n | ResourceUnarchivedEvent\n | RepresentationAddedEvent // Multi-format support\n | RepresentationRemovedEvent // Multi-format support\n | AnnotationAddedEvent\n | AnnotationRemovedEvent\n | AnnotationBodyUpdatedEvent\n | JobStartedEvent // Job progress\n | JobProgressEvent // Job progress\n | JobCompletedEvent // Job progress\n | JobFailedEvent // Job progress\n | EntityTagAddedEvent // Resource-level\n | EntityTagRemovedEvent // Resource-level\n | EntityTypeAddedEvent; // Global collection\n\n// Extract just the event type strings from the union\nexport type ResourceEventType = ResourceEvent['type'];\n\n// System-level events (no resource scope)\nexport type SystemEvent = EntityTypeAddedEvent;\n\n// Resource-scoped events (require resourceId)\nexport type ResourceScopedEvent = Exclude<ResourceEvent, SystemEvent>;\n\n// Type guards\nexport function isResourceEvent(event: any): event is ResourceEvent {\n return event &&\n typeof event.id === 'string' &&\n typeof event.timestamp === 'string' &&\n (event.resourceId === undefined || typeof event.resourceId === 'string') && // resourceId now optional\n typeof event.type === 'string' &&\n event.type.includes('.');\n}\n\n/**\n * Type guard: Check if event is system-level (no resourceId)\n * System events affect global state, not individual resources\n */\nexport function isSystemEvent(event: ResourceEvent): event is SystemEvent {\n return event.type === 'entitytype.added';\n}\n\n/**\n * Type guard: Check if event is resource-scoped (has resourceId)\n * Resource events affect a specific resource's state\n */\nexport function isResourceScopedEvent(event: ResourceEvent): event is ResourceScopedEvent {\n return !isSystemEvent(event);\n}\n\nexport function getEventType<T extends ResourceEvent>(\n event: ResourceEvent\n): T['type'] {\n return event.type as T['type'];\n}\n\n// Event metadata for querying and indexing\nexport interface EventMetadata {\n sequenceNumber: number; // Position in the event log (source of truth for ordering)\n streamPosition: number; // Byte position in JSONL file\n timestamp: string; // When stored (for humans, not ordering)\n prevEventHash?: string; // SHA-256 of previous event (chain integrity, null for first event)\n checksum?: string; // SHA-256 of this event for integrity\n}\n\n// Optional signature for federation\nexport interface EventSignature {\n algorithm: 'ed25519'; // Signature algorithm\n publicKey: string; // User's public key (base64)\n signature: string; // Event signature (base64)\n keyId?: string; // Key identifier for rotation\n}\n\n// Event with metadata (as stored)\nexport interface StoredEvent<T extends ResourceEvent = ResourceEvent> {\n event: T;\n metadata: EventMetadata;\n signature?: EventSignature; // Optional, for federation (unused in MVP)\n}\n\n// Query filters for event retrieval\nexport interface EventQuery {\n resourceId?: ResourceId;\n userId?: string;\n eventTypes?: ResourceEvent['type'][];\n fromTimestamp?: string;\n toTimestamp?: string;\n fromSequence?: number;\n limit?: number;\n}\n\n// Annotation collections for a resource (view storage projection)\n// Annotations are NOT part of the resource - they reference the resource\nexport interface ResourceAnnotations {\n resourceId: ResourceId; // Which resource these annotations belong to (branded type)\n annotations: Annotation[]; // All annotations (highlights, references, assessments, etc.)\n version: number; // Event count for this resource's annotation stream\n updatedAt: string; // Last annotation event timestamp\n}","/**\n * Event Type Guards and Extraction Utilities\n *\n * Domain logic for working with resource events.\n * No React dependencies - safe to use in any JavaScript environment.\n */\n\nimport type { StoredEvent } from './events';\nimport type { AnnotationUri } from './branded-types';\n\n// =============================================================================\n// EVENT TYPE GUARDS AND EXTRACTION\n// =============================================================================\n\n/**\n * Extract annotation ID from event payload\n * Returns null if event is not annotation-related\n *\n * For annotation.added: extracts full URI from payload.annotation.id\n * For annotation.removed/body.updated: constructs full URI from payload.annotationId (UUID) + resourceId\n */\nexport function getAnnotationUriFromEvent(event: StoredEvent): AnnotationUri | null {\n const eventData = event.event;\n\n if (eventData.type === 'annotation.added') {\n // annotation.added has the full annotation object with id as full URI\n return eventData.payload.annotation.id as AnnotationUri || null;\n }\n\n if (eventData.type === 'annotation.removed' || eventData.type === 'annotation.body.updated') {\n // These events have annotationId (UUID only), need to construct full URI\n // Extract base URL from resourceId (format: http://host/resources/id)\n if (eventData.payload.annotationId && eventData.resourceId) {\n try {\n const resourceUri = eventData.resourceId;\n // Extract base URL by removing the /resources/{id} part\n const baseUrl = resourceUri.substring(0, resourceUri.lastIndexOf('/resources/'));\n return `${baseUrl}/annotations/${eventData.payload.annotationId}` as AnnotationUri;\n } catch (e) {\n return null;\n }\n }\n }\n\n return null;\n}\n\n/**\n * Check if an event is related to a specific annotation\n */\nexport function isEventRelatedToAnnotation(event: StoredEvent, annotationUri: AnnotationUri): boolean {\n const eventAnnotationUri = getAnnotationUriFromEvent(event);\n return eventAnnotationUri === annotationUri;\n}\n\n/**\n * Type guard to check if event is a resource event\n */\nexport function isResourceEvent(event: any): event is StoredEvent {\n return event &&\n typeof event.event === 'object' &&\n typeof event.event.id === 'string' &&\n typeof event.event.timestamp === 'string' &&\n typeof event.event.resourceId === 'string' &&\n typeof event.event.type === 'string' &&\n typeof event.metadata === 'object' &&\n typeof event.metadata.sequenceNumber === 'number';\n}\n","/**\n * RxJS-based Event Bus\n *\n * Framework-agnostic event bus providing direct access to typed RxJS Subjects.\n *\n * Can be used in Node.js, browser, workers, CLI - anywhere RxJS runs.\n */\n\nimport { Subject } from 'rxjs';\nimport type { EventMap } from './event-map';\n\n/**\n * RxJS-based event bus\n *\n * Provides direct access to RxJS Subjects for each event type.\n * Use standard RxJS patterns for emitting and subscribing.\n *\n * @example\n * ```typescript\n * const eventBus = new EventBus();\n *\n * // Emit events\n * eventBus.get('beckon:hover').next({ annotationId: 'ann-1' });\n *\n * // Subscribe to events\n * const subscription = eventBus.get('beckon:hover').subscribe(({ annotationId }) => {\n * console.log('Hover:', annotationId);\n * });\n *\n * // Use RxJS operators\n * import { debounceTime } from 'rxjs/operators';\n * eventBus.get('beckon:hover')\n * .pipe(debounceTime(100))\n * .subscribe(handleHover);\n *\n * // Cleanup\n * subscription.unsubscribe();\n * eventBus.destroy();\n * ```\n */\nexport class EventBus {\n private subjects: Map<keyof EventMap, Subject<any>>;\n private isDestroyed: boolean;\n\n constructor() {\n this.subjects = new Map();\n this.isDestroyed = false;\n }\n\n /**\n * Get the RxJS Subject for an event\n *\n * Returns a typed Subject that can be used with all RxJS operators.\n * Subjects are created lazily on first access.\n *\n * @param eventName - The event name\n * @returns The RxJS Subject for this event\n *\n * @example\n * ```typescript\n * // Emit\n * eventBus.get('beckon:hover').next({ annotationId: 'ann-1' });\n *\n * // Subscribe\n * const sub = eventBus.get('beckon:hover').subscribe(handleHover);\n *\n * // With operators\n * eventBus.get('beckon:hover')\n * .pipe(debounceTime(100), distinctUntilChanged())\n * .subscribe(handleHover);\n * ```\n */\n get<K extends keyof EventMap>(eventName: K): Subject<EventMap[K]> {\n if (this.isDestroyed) {\n throw new Error(`Cannot access event '${String(eventName)}' on destroyed bus`);\n }\n\n if (!this.subjects.has(eventName)) {\n this.subjects.set(eventName, new Subject<EventMap[K]>());\n }\n return this.subjects.get(eventName)!;\n }\n\n /**\n * Destroy the event bus and complete all subjects\n *\n * After calling destroy(), no new events can be emitted or subscribed to.\n * All active subscriptions will be completed.\n */\n destroy(): void {\n if (this.isDestroyed) {\n return;\n }\n\n for (const subject of this.subjects.values()) {\n subject.complete();\n }\n\n this.subjects.clear();\n this.isDestroyed = true;\n }\n\n /**\n * Check if the event bus has been destroyed\n */\n get destroyed(): boolean {\n return this.isDestroyed;\n }\n\n /**\n * Create a resource-scoped event bus\n *\n * Events emitted or subscribed through the scoped bus are isolated to that resource.\n * Internally, events are namespaced but the API remains identical to the parent bus.\n *\n * @param resourceId - Resource identifier to scope events to\n * @returns A scoped event bus for this resource\n *\n * @example\n * ```typescript\n * const eventBus = new EventBus();\n * const resource1 = eventBus.scope('resource-1');\n * const resource2 = eventBus.scope('resource-2');\n *\n * // These are isolated - only resource1 subscribers will fire\n * resource1.get('detection:progress').next({ status: 'started' });\n * ```\n */\n scope(resourceId: string): ScopedEventBus {\n return new ScopedEventBus(this, resourceId);\n }\n}\n\n/**\n * Resource-scoped event bus\n *\n * Provides isolated event streams per resource while maintaining the same API\n * as the parent EventBus. Events are internally namespaced by resourceId.\n */\nexport class ScopedEventBus {\n constructor(\n private parent: EventBus,\n private scopePrefix: string\n ) {}\n\n /**\n * Get the RxJS Subject for a scoped event\n *\n * Returns the same type as the parent bus, but events are isolated to this scope.\n * Internally uses namespaced keys but preserves type safety.\n *\n * @param event - The event name\n * @returns The RxJS Subject for this scoped event\n */\n get<E extends keyof EventMap>(event: E): Subject<EventMap[E]> {\n // Internally namespace the event key, but preserve return type\n const scopedKey = `${this.scopePrefix}:${event as string}`;\n\n // Access parent's subjects map directly (needs cast for private access)\n const parentSubjects = (this.parent as any).subjects as Map<string, Subject<any>>;\n\n if (!parentSubjects.has(scopedKey)) {\n parentSubjects.set(scopedKey, new Subject<EventMap[E]>());\n }\n return parentSubjects.get(scopedKey)!;\n }\n\n /**\n * Create a nested scope\n *\n * Allows hierarchical scoping like `resource-1:subsystem-a`\n *\n * @param subScope - Additional scope level\n * @returns A nested scoped event bus\n */\n scope(subScope: string): ScopedEventBus {\n return new ScopedEventBus(this.parent, `${this.scopePrefix}:${subScope}`);\n }\n}\n","/**\n * Adaptive burst buffer RxJS operator.\n *\n * Passes the first event through immediately (zero latency for interactive use).\n * If more events arrive within the burst window, switches to accumulate mode\n * and flushes batches. Returns to passthrough mode after an idle period.\n *\n * Emits individual items (T) in passthrough mode and arrays (T[]) in batch mode.\n * Consumers distinguish via Array.isArray().\n *\n * Threshold tuning:\n * burstWindowMs — How long to wait for more events before flushing a batch.\n * 50ms is a good default: longer than event-loop jitter (~1-5ms)\n * but short enough to feel responsive.\n * maxBatchSize — Force-flush at this size to bound memory. 500 is safe for\n * Neo4j UNWIND queries. Increase if graph writes are cheap.\n * idleTimeoutMs — How long after the last flush before returning to passthrough.\n * 200ms is a good default. Must be >= burstWindowMs.\n *\n * See: BATCH-GRAPH-CONSUMER-RX.md for design rationale.\n * See: packages/graph/docs/ARCHITECTURE.md for graph consumer context.\n */\n\nimport { Observable, OperatorFunction } from 'rxjs';\n\nexport interface BurstBufferOptions {\n /**\n * Time window (ms) to detect burst activity after an event.\n * If another event arrives within this window, it is buffered.\n * The buffer flushes when no new event arrives for this duration (debounce).\n *\n * Recommended: 50ms.\n */\n burstWindowMs: number;\n\n /**\n * Maximum events to accumulate before forcing a flush.\n * Prevents unbounded memory growth during sustained bursts.\n *\n * Recommended: 500.\n */\n maxBatchSize: number;\n\n /**\n * Time (ms) of silence after the last flush before returning to passthrough mode.\n * The next event after this timeout emits immediately (leading edge).\n * Must be >= burstWindowMs.\n *\n * Recommended: 200ms.\n */\n idleTimeoutMs: number;\n}\n\n/**\n * Adaptive burst buffer operator.\n *\n * State machine:\n * PASSTHROUGH → event arrives → emit immediately, transition to ACCUMULATING\n * ACCUMULATING → event arrives → buffer it, reset burst timer\n * ACCUMULATING → burst timer fires (no new events for burstWindowMs) → flush buffer as T[]\n * ACCUMULATING → buffer reaches maxBatchSize → flush buffer as T[]\n * After flush → idle timer starts\n * Idle timer fires (no new events for idleTimeoutMs) → transition to PASSTHROUGH\n */\nexport function burstBuffer<T>(\n options: BurstBufferOptions\n): OperatorFunction<T, T | T[]> {\n const { burstWindowMs, maxBatchSize, idleTimeoutMs } = options;\n\n return (source: Observable<T>) =>\n new Observable<T | T[]>((subscriber) => {\n let mode: 'passthrough' | 'accumulating' = 'passthrough';\n let buffer: T[] = [];\n let burstTimer: ReturnType<typeof setTimeout> | null = null;\n let idleTimer: ReturnType<typeof setTimeout> | null = null;\n\n function clearBurstTimer() {\n if (burstTimer !== null) {\n clearTimeout(burstTimer);\n burstTimer = null;\n }\n }\n\n function clearIdleTimer() {\n if (idleTimer !== null) {\n clearTimeout(idleTimer);\n idleTimer = null;\n }\n }\n\n function flush() {\n if (buffer.length === 0) return;\n const batch = buffer;\n buffer = [];\n subscriber.next(batch);\n }\n\n function startIdleTimer() {\n clearIdleTimer();\n idleTimer = setTimeout(() => {\n idleTimer = null;\n mode = 'passthrough';\n }, idleTimeoutMs);\n }\n\n const subscription = source.subscribe({\n next(value: T) {\n clearIdleTimer();\n\n if (mode === 'passthrough') {\n // Leading edge: emit immediately\n subscriber.next(value);\n // Transition to accumulating — next event within burstWindowMs gets buffered\n mode = 'accumulating';\n // Start a burst timer: if nothing else arrives, start idle countdown\n burstTimer = setTimeout(() => {\n burstTimer = null;\n flush(); // flush anything accumulated (normally empty at this point)\n startIdleTimer();\n }, burstWindowMs);\n return;\n }\n\n // mode === 'accumulating'\n buffer.push(value);\n\n // Reset the burst window timer (debounce pattern)\n clearBurstTimer();\n\n if (buffer.length >= maxBatchSize) {\n // Force flush at max batch size\n flush();\n startIdleTimer();\n } else {\n // Debounce: flush after burstWindowMs of silence\n burstTimer = setTimeout(() => {\n burstTimer = null;\n flush();\n startIdleTimer();\n }, burstWindowMs);\n }\n },\n\n error(err) {\n clearBurstTimer();\n clearIdleTimer();\n flush();\n subscriber.error(err);\n },\n\n complete() {\n clearBurstTimer();\n clearIdleTimer();\n flush();\n subscriber.complete();\n },\n });\n\n // Teardown: clean up timers and unsubscribe from source\n return () => {\n clearBurstTimer();\n clearIdleTimer();\n subscription.unsubscribe();\n };\n });\n}\n","/**\n * Backend-specific annotation utility functions\n */\n\nimport type { components } from './types';\nimport type { BodyItem } from './events';\n\ntype Annotation = components['schemas']['Annotation'];\n\n/**\n * Find a body item in an array\n * Returns the index of the first matching item, or -1 if not found\n */\nexport function findBodyItem(body: Annotation['body'], targetItem: BodyItem): number {\n if (!Array.isArray(body)) {\n return -1;\n }\n\n for (let i = 0; i < body.length; i++) {\n const item = body[i];\n\n // Check if this is a valid body item that can be matched\n if (\n typeof item === 'object' &&\n item !== null &&\n 'type' in item &&\n 'purpose' in item\n ) {\n const itemType = (item as { type: unknown }).type;\n const itemPurpose = (item as { purpose: unknown }).purpose;\n\n // Type and purpose must match\n if (itemType !== targetItem.type || itemPurpose !== targetItem.purpose) {\n continue;\n }\n\n // For TextualBody, match by value\n if (targetItem.type === 'TextualBody' && 'value' in item) {\n const itemValue = (item as { value: unknown }).value;\n if (itemValue === targetItem.value) {\n return i;\n }\n }\n\n // For SpecificResource, match by source\n if (targetItem.type === 'SpecificResource' && 'source' in item) {\n const itemSource = (item as { source: unknown }).source;\n if (itemSource === targetItem.source) {\n return i;\n }\n }\n }\n }\n\n return -1;\n}\n","/**\n * ID generation utilities\n */\n\nimport { randomBytes } from 'crypto';\n\n/**\n * Generate a UUID v4-like ID (without dashes)\n */\nexport function generateUuid(): string {\n return randomBytes(16).toString('hex');\n}\n","/**\n * Annotation Assembly\n *\n * Pure functions for building W3C Annotations and applying body operations.\n * No EventBus, no persistence — just data transformation.\n */\n\nimport type { components } from './types';\nimport type { Selector } from './event-map';\nimport { generateUuid } from './id-generation';\n\ntype Agent = components['schemas']['Agent'];\ntype Annotation = components['schemas']['Annotation'];\ntype AnnotationBody = components['schemas']['AnnotationBody'];\ntype CreateAnnotationRequest = components['schemas']['CreateAnnotationRequest'];\ntype UpdateAnnotationBodyRequest = components['schemas']['UpdateAnnotationBodyRequest'];\ntype TextPositionSelector = components['schemas']['TextPositionSelector'];\ntype SvgSelector = components['schemas']['SvgSelector'];\ntype FragmentSelector = components['schemas']['FragmentSelector'];\n\nexport interface AssembledAnnotation {\n annotation: Annotation;\n bodyArray: AnnotationBody[];\n}\n\n// =============================================================================\n// Selector utilities used by assembleAnnotation\n// =============================================================================\n\n/**\n * Get TextPositionSelector from a selector (single or array)\n */\nexport function getTextPositionSelector(selector: Selector | Selector[] | undefined): TextPositionSelector | null {\n if (!selector) return null;\n const selectors = Array.isArray(selector) ? selector : [selector];\n const found = selectors.find(s => s.type === 'TextPositionSelector');\n if (!found) return null;\n return found.type === 'TextPositionSelector' ? found : null;\n}\n\n/**\n * Get SvgSelector from a selector (single or array)\n */\nexport function getSvgSelector(selector: Selector | Selector[] | undefined): SvgSelector | null {\n if (!selector) return null;\n const selectors = Array.isArray(selector) ? selector : [selector];\n const found = selectors.find(s => s.type === 'SvgSelector');\n if (!found) return null;\n return found.type === 'SvgSelector' ? found : null;\n}\n\n/**\n * Get FragmentSelector from a selector (single or array)\n */\nexport function getFragmentSelector(selector: Selector | Selector[] | undefined): FragmentSelector | null {\n if (!selector) return null;\n const selectors = Array.isArray(selector) ? selector : [selector];\n const found = selectors.find(s => s.type === 'FragmentSelector');\n if (!found) return null;\n return found.type === 'FragmentSelector' ? found : null;\n}\n\n/**\n * Validate SVG markup for W3C compliance\n *\n * @returns null if valid, error message if invalid\n */\nexport function validateSvgMarkup(svg: string): string | null {\n if (!svg.includes('xmlns=\"http://www.w3.org/2000/svg\"')) {\n return 'SVG must include xmlns=\"http://www.w3.org/2000/svg\" attribute';\n }\n\n if (!svg.includes('<svg') || !svg.includes('</svg>')) {\n return 'SVG must have opening and closing tags';\n }\n\n const shapeElements = ['rect', 'circle', 'ellipse', 'polygon', 'polyline', 'path', 'line'];\n const hasShape = shapeElements.some(shape =>\n svg.includes(`<${shape}`) || svg.includes(`<${shape} `)\n );\n\n if (!hasShape) {\n return 'SVG must contain at least one shape element (rect, circle, ellipse, polygon, polyline, path, or line)';\n }\n\n return null;\n}\n\n// =============================================================================\n// Annotation assembly\n// =============================================================================\n\n/**\n * Build a complete W3C Annotation from a CreateAnnotationRequest.\n *\n * Generates a bare annotation ID (no URL prefix). URIs are constructed\n * at the API boundary when returning responses to clients.\n *\n * Throws on invalid input (missing selector, missing motivation, invalid SVG).\n */\nexport function assembleAnnotation(\n request: CreateAnnotationRequest,\n creator: Agent,\n): AssembledAnnotation {\n const newAnnotationId = generateUuid();\n\n // Validate selector: must have TextPositionSelector, SvgSelector, or FragmentSelector\n const posSelector = getTextPositionSelector(request.target.selector);\n const svgSelector = getSvgSelector(request.target.selector);\n const fragmentSelector = getFragmentSelector(request.target.selector);\n\n if (!posSelector && !svgSelector && !fragmentSelector) {\n throw new Error('Either TextPositionSelector, SvgSelector, or FragmentSelector is required for creating annotations');\n }\n\n // Validate SVG markup if SvgSelector is provided\n if (svgSelector) {\n const svgError = validateSvgMarkup(svgSelector.value);\n if (svgError) {\n throw new Error(`Invalid SVG markup: ${svgError}`);\n }\n }\n\n if (!request.motivation) {\n throw new Error('motivation is required');\n }\n\n const now = new Date().toISOString();\n const annotation: Annotation = {\n '@context': 'http://www.w3.org/ns/anno.jsonld' as const,\n 'type': 'Annotation' as const,\n id: newAnnotationId,\n motivation: request.motivation,\n target: request.target,\n body: request.body as Annotation['body'],\n creator,\n created: now,\n modified: now,\n };\n\n const bodyArray = (Array.isArray(request.body) ? request.body : request.body ? [request.body] : []) as AnnotationBody[];\n\n return { annotation, bodyArray };\n}\n\n/**\n * Apply body operations (add/remove/replace) to an annotation's body array.\n * Returns a new array — does not mutate the input.\n */\nexport function applyBodyOperations(\n body: Annotation['body'],\n operations: UpdateAnnotationBodyRequest['operations'],\n): AnnotationBody[] {\n const bodyArray = Array.isArray(body) ? [...body] : [];\n\n for (const op of operations) {\n if (op.op === 'add') {\n const exists = bodyArray.some(item =>\n JSON.stringify(item) === JSON.stringify(op.item)\n );\n if (!exists) {\n bodyArray.push(op.item);\n }\n } else if (op.op === 'remove') {\n const index = bodyArray.findIndex(item =>\n JSON.stringify(item) === JSON.stringify(op.item)\n );\n if (index !== -1) {\n bodyArray.splice(index, 1);\n }\n } else if (op.op === 'replace') {\n const index = bodyArray.findIndex(item =>\n JSON.stringify(item) === JSON.stringify(op.oldItem)\n );\n if (index !== -1) {\n bodyArray[index] = op.newItem;\n }\n }\n }\n\n return bodyArray;\n}\n","/**\n * Common type guard utilities\n */\n\n/**\n * Check if value is a string\n */\nexport function isString(value: unknown): value is string {\n return typeof value === 'string';\n}\n\n/**\n * Check if value is a number (not NaN)\n */\nexport function isNumber(value: unknown): value is number {\n return typeof value === 'number' && !isNaN(value);\n}\n\n/**\n * Check if value is an object (not null, not array)\n */\nexport function isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n/**\n * Check if value is an array\n */\nexport function isArray(value: unknown): value is unknown[] {\n return Array.isArray(value);\n}\n\n/**\n * Check if value is a boolean\n */\nexport function isBoolean(value: unknown): value is boolean {\n return typeof value === 'boolean';\n}\n\n/**\n * Check if value is a function\n */\nexport function isFunction(value: unknown): value is Function {\n return typeof value === 'function';\n}\n\n/**\n * Check if value is null\n */\nexport function isNull(value: unknown): value is null {\n return value === null;\n}\n\n/**\n * Check if value is undefined\n */\nexport function isUndefined(value: unknown): value is undefined {\n return value === undefined;\n}\n\n/**\n * Check if value is null or undefined\n */\nexport function isNullish(value: unknown): value is null | undefined {\n return value === null || value === undefined;\n}\n\n/**\n * Check if value is defined (not null or undefined)\n */\nexport function isDefined<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined;\n}","/**\n * Common error classes\n */\n\n/**\n * Base error class for Semiont applications\n */\nexport class SemiontError extends Error {\n constructor(\n message: string,\n public code: string,\n public details?: Record<string, any>\n ) {\n super(message);\n this.name = 'SemiontError';\n Error.captureStackTrace(this, this.constructor);\n }\n}\n\n/**\n * Error thrown when validation fails\n */\nexport class ValidationError extends SemiontError {\n constructor(message: string, details?: Record<string, any>) {\n super(message, 'VALIDATION_ERROR', details);\n this.name = 'ValidationError';\n }\n}\n\n/**\n * Error thrown by scripts\n */\nexport class ScriptError extends SemiontError {\n constructor(message: string, code: string = 'SCRIPT_ERROR', details?: Record<string, any>) {\n super(message, code, details);\n this.name = 'ScriptError';\n }\n}\n\n/**\n * Error thrown when a resource is not found\n */\nexport class NotFoundError extends SemiontError {\n constructor(resource: string, id?: string) {\n const message = id ? `${resource} with id '${id}' not found` : `${resource} not found`;\n super(message, 'NOT_FOUND', { resource, id });\n this.name = 'NotFoundError';\n }\n}\n\n/**\n * Error thrown when user is not authorized\n */\nexport class UnauthorizedError extends SemiontError {\n constructor(message: string = 'Unauthorized', details?: Record<string, any>) {\n super(message, 'UNAUTHORIZED', details);\n this.name = 'UnauthorizedError';\n }\n}\n\n/**\n * Error thrown when operation would conflict with existing data\n */\nexport class ConflictError extends SemiontError {\n constructor(message: string, details?: Record<string, any>) {\n super(message, 'CONFLICT', details);\n this.name = 'ConflictError';\n }\n}\n\n/**\n * API Error class for handling HTTP errors\n * Used by API clients to represent failed HTTP requests\n */\nexport class APIError extends Error {\n constructor(\n public status: number,\n public data: any,\n message?: string\n ) {\n super(message || `API Error: ${status}`);\n this.name = 'APIError';\n Error.captureStackTrace(this, this.constructor);\n }\n}","/**\n * DID (Decentralized Identifier) and W3C Agent utilities\n *\n * Provides utilities for working with DID:WEB identifiers and converting\n * between user representations and W3C Web Annotation Agent objects.\n */\n\nimport type { components } from './types';\n\ntype Agent = components['schemas']['Agent'];\n\n/**\n * Convert a user object to a DID:WEB identifier\n *\n * Format: did:web:domain.com:users:userId\n * Example: did:web:example.com:users:abc123\n *\n * This is used for W3C Web Annotation compliance and federation readiness.\n *\n * @param user - User object with id and domain\n * @returns DID:WEB identifier string\n */\nexport function userToDid(user: { id: string; domain: string }): string {\n return `did:web:${user.domain}:users:${user.id}`;\n}\n\n/**\n * Convert a user object to a W3C Agent object with DID:WEB identifier\n *\n * Creates a full Agent object for W3C Web Annotation compliance.\n * Includes DID:WEB identifier, type, and name.\n *\n * @param user - User object with id, domain, name, and email\n * @returns W3C Agent object\n */\nexport function userToAgent(user: {\n id: string;\n domain: string;\n name: string | null;\n email: string;\n}): Agent {\n return {\n type: 'Person' as const,\n id: userToDid(user),\n name: user.name || user.email,\n };\n}\n\n/**\n * Convert a DID string to a minimal W3C Agent object\n *\n * Used when reconstructing annotations from events where only the DID is available.\n * Creates a minimal Agent with just the required fields (id, type).\n * Name is derived from the DID for display purposes.\n *\n * @param did - DID:WEB identifier string\n * @returns Minimal W3C Agent object\n */\nexport function didToAgent(did: string): Agent {\n // Extract user ID from DID format: did:web:domain.com:users:userId\n const parts = did.split(':');\n const userId = parts[parts.length - 1] || 'unknown';\n\n return {\n type: 'Person' as const,\n id: did,\n name: userId, // Use user ID as name since we don't have full user data\n };\n}\n","/**\n * Configuration Error Class\n * \n * Custom error class for configuration validation and loading errors.\n * Provides structured error information with helpful suggestions.\n */\n\nexport class ConfigurationError extends Error {\n public override readonly cause?: Error;\n\n constructor(\n message: string,\n public environment?: string,\n public suggestion?: string,\n cause?: Error\n ) {\n super(message);\n this.name = 'ConfigurationError';\n this.cause = cause;\n }\n \n /**\n * Format the error nicely for CLI output\n */\n override toString(): string {\n let output = `❌ ${this.message}`;\n if (this.environment) {\n output += `\\n Environment: ${this.environment}`;\n }\n if (this.suggestion) {\n output += `\\n 💡 Suggestion: ${this.suggestion}`;\n }\n return output;\n }\n}","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$id\": \"https://semiont.org/schemas/config.json\",\n \"definitions\": {\n \"PlatformType\": {\n \"type\": \"string\",\n \"enum\": [\n \"posix\",\n \"container\",\n \"aws\",\n \"external\"\n ]\n },\n \"ServicePlatformConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": {\n \"$ref\": \"#/definitions/PlatformType\"\n }\n },\n \"required\": [\n \"type\"\n ]\n },\n \"ResourceRequirements\": {\n \"type\": \"object\",\n \"properties\": {\n \"cpu\": {\n \"type\": \"string\"\n },\n \"memory\": {\n \"type\": \"string\"\n },\n \"gpu\": {\n \"type\": \"integer\"\n },\n \"gpus\": {\n \"type\": \"integer\"\n },\n \"replicas\": {\n \"type\": \"integer\"\n },\n \"ephemeralStorage\": {\n \"type\": \"string\"\n },\n \"memoryReservation\": {\n \"type\": \"string\"\n }\n },\n \"additionalProperties\": false\n },\n \"SecurityRequirements\": {\n \"type\": \"object\",\n \"properties\": {\n \"readOnlyRootFilesystem\": {\n \"type\": \"boolean\"\n },\n \"runAsNonRoot\": {\n \"type\": \"boolean\"\n },\n \"runAsUser\": {\n \"type\": \"integer\"\n },\n \"runAsGroup\": {\n \"type\": \"integer\"\n },\n \"capabilities\": {\n \"oneOf\": [\n {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"add\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"drop\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n }\n }\n ]\n },\n \"privileged\": {\n \"type\": \"boolean\"\n },\n \"allowPrivilegeEscalation\": {\n \"type\": \"boolean\"\n }\n },\n \"additionalProperties\": false\n },\n \"BuildRequirements\": {\n \"type\": \"object\",\n \"properties\": {\n \"dockerfile\": {\n \"type\": \"string\"\n },\n \"buildContext\": {\n \"type\": \"string\"\n },\n \"buildArgs\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"buildTarget\": {\n \"type\": \"string\"\n },\n \"prebuilt\": {\n \"type\": \"boolean\"\n },\n \"noCache\": {\n \"type\": \"boolean\"\n }\n },\n \"additionalProperties\": false\n },\n \"BackendServiceConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"platform\": {\n \"$ref\": \"#/definitions/ServicePlatformConfig\"\n },\n \"devMode\": {\n \"type\": \"boolean\"\n },\n \"command\": {\n \"type\": \"string\"\n },\n \"port\": {\n \"type\": \"integer\"\n },\n \"publicURL\": {\n \"type\": \"string\"\n },\n \"corsOrigin\": {\n \"type\": \"string\"\n },\n \"image\": {\n \"type\": \"string\"\n },\n \"cpu\": {\n \"type\": \"string\"\n },\n \"memory\": {\n \"type\": \"string\"\n },\n \"semiontRepo\": {\n \"type\": \"string\"\n },\n \"databaseUrl\": {\n \"type\": \"string\"\n },\n \"projectRoot\": {\n \"type\": \"string\"\n },\n \"timeout\": {\n \"type\": \"integer\"\n },\n \"wait\": {\n \"type\": \"integer\"\n },\n \"logsEndpoint\": {\n \"type\": \"string\"\n },\n \"tag\": {\n \"type\": \"string\"\n },\n \"resources\": {\n \"$ref\": \"#/definitions/ResourceRequirements\"\n },\n \"security\": {\n \"$ref\": \"#/definitions/SecurityRequirements\"\n },\n \"build\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\"\n },\n {\n \"$ref\": \"#/definitions/BuildRequirements\"\n }\n ]\n },\n \"dockerfile\": {\n \"type\": \"string\"\n },\n \"buildContext\": {\n \"type\": \"string\"\n },\n \"buildArgs\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"buildTarget\": {\n \"type\": \"string\"\n },\n \"prebuilt\": {\n \"type\": \"boolean\"\n },\n \"noCache\": {\n \"type\": \"boolean\"\n },\n \"secrets\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"labels\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"annotations\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"dependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"externalDependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"oneOf\": [\n {\n \"type\": \"string\"\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\n },\n \"url\": {\n \"type\": \"string\"\n },\n \"required\": {\n \"type\": \"boolean\"\n },\n \"healthCheck\": {\n \"type\": \"string\"\n }\n }\n }\n ]\n }\n },\n \"redisUrl\": {\n \"type\": \"string\"\n },\n \"environment\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"env\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\n \"platform\",\n \"port\",\n \"publicURL\",\n \"corsOrigin\"\n ],\n \"additionalProperties\": false\n },\n \"FrontendServiceConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"platform\": {\n \"$ref\": \"#/definitions/ServicePlatformConfig\"\n },\n \"devMode\": {\n \"type\": \"boolean\"\n },\n \"command\": {\n \"type\": \"string\"\n },\n \"port\": {\n \"type\": \"integer\"\n },\n \"siteName\": {\n \"type\": \"string\"\n },\n \"image\": {\n \"type\": \"string\"\n },\n \"semiontRepo\": {\n \"type\": \"string\"\n },\n \"projectRoot\": {\n \"type\": \"string\"\n },\n \"databaseUrl\": {\n \"type\": \"string\"\n },\n \"timeout\": {\n \"type\": \"integer\"\n },\n \"wait\": {\n \"type\": \"integer\"\n },\n \"logsEndpoint\": {\n \"type\": \"string\"\n },\n \"tag\": {\n \"type\": \"string\"\n },\n \"resources\": {\n \"$ref\": \"#/definitions/ResourceRequirements\"\n },\n \"security\": {\n \"$ref\": \"#/definitions/SecurityRequirements\"\n },\n \"build\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\"\n },\n {\n \"$ref\": \"#/definitions/BuildRequirements\"\n }\n ]\n },\n \"dockerfile\": {\n \"type\": \"string\"\n },\n \"buildContext\": {\n \"type\": \"string\"\n },\n \"buildArgs\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"buildTarget\": {\n \"type\": \"string\"\n },\n \"prebuilt\": {\n \"type\": \"boolean\"\n },\n \"noCache\": {\n \"type\": \"boolean\"\n },\n \"secrets\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"labels\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"annotations\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"dependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"externalDependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"oneOf\": [\n {\n \"type\": \"string\"\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\n },\n \"url\": {\n \"type\": \"string\"\n },\n \"required\": {\n \"type\": \"boolean\"\n },\n \"healthCheck\": {\n \"type\": \"string\"\n }\n }\n }\n ]\n }\n },\n \"environment\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"env\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"publicURL\": {\n \"type\": \"string\"\n },\n \"allowedOrigins\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\n \"platform\",\n \"port\",\n \"siteName\"\n ],\n \"additionalProperties\": false\n },\n \"ProxyServiceConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"platform\": {\n \"$ref\": \"#/definitions/ServicePlatformConfig\"\n },\n \"type\": {\n \"type\": \"string\",\n \"enum\": [\"envoy\", \"nginx\", \"haproxy\"],\n \"default\": \"envoy\"\n },\n \"port\": {\n \"type\": \"integer\",\n \"default\": 8080\n },\n \"adminPort\": {\n \"type\": \"integer\",\n \"default\": 9901\n },\n \"backendPort\": {\n \"type\": \"integer\",\n \"default\": 4000\n },\n \"frontendPort\": {\n \"type\": \"integer\",\n \"default\": 3000\n },\n \"image\": {\n \"type\": \"string\",\n \"default\": \"envoyproxy/envoy:v1.28-latest\"\n },\n \"configPath\": {\n \"type\": \"string\"\n },\n \"timeout\": {\n \"type\": \"integer\"\n },\n \"wait\": {\n \"type\": \"integer\"\n },\n \"logsEndpoint\": {\n \"type\": \"string\"\n },\n \"tag\": {\n \"type\": \"string\"\n },\n \"resources\": {\n \"$ref\": \"#/definitions/ResourceRequirements\"\n },\n \"security\": {\n \"$ref\": \"#/definitions/SecurityRequirements\"\n },\n \"environment\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"env\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\n \"platform\",\n \"type\",\n \"port\"\n ],\n \"additionalProperties\": false\n },\n \"DatabaseServiceConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"platform\": {\n \"$ref\": \"#/definitions/ServicePlatformConfig\"\n },\n \"type\": {\n \"type\": \"string\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"host\": {\n \"type\": \"string\"\n },\n \"port\": {\n \"type\": \"integer\"\n },\n \"environment\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"env\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"description\": {\n \"type\": \"string\"\n },\n \"command\": {\n \"type\": \"string\"\n },\n \"image\": {\n \"type\": \"string\"\n },\n \"user\": {\n \"type\": \"string\"\n },\n \"username\": {\n \"type\": \"string\"\n },\n \"password\": {\n \"type\": \"string\"\n },\n \"database\": {\n \"type\": \"string\"\n },\n \"storageSize\": {\n \"type\": \"string\"\n },\n \"timeout\": {\n \"type\": \"integer\"\n },\n \"wait\": {\n \"type\": \"integer\"\n },\n \"logsEndpoint\": {\n \"type\": \"string\"\n },\n \"tag\": {\n \"type\": \"string\"\n },\n \"resources\": {\n \"$ref\": \"#/definitions/ResourceRequirements\"\n },\n \"security\": {\n \"$ref\": \"#/definitions/SecurityRequirements\"\n },\n \"build\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\"\n },\n {\n \"$ref\": \"#/definitions/BuildRequirements\"\n }\n ]\n },\n \"dockerfile\": {\n \"type\": \"string\"\n },\n \"buildContext\": {\n \"type\": \"string\"\n },\n \"buildArgs\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"buildTarget\": {\n \"type\": \"string\"\n },\n \"prebuilt\": {\n \"type\": \"boolean\"\n },\n \"noCache\": {\n \"type\": \"boolean\"\n },\n \"secrets\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"labels\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"annotations\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"dependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"externalDependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"oneOf\": [\n {\n \"type\": \"string\"\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\n },\n \"url\": {\n \"type\": \"string\"\n },\n \"required\": {\n \"type\": \"boolean\"\n },\n \"healthCheck\": {\n \"type\": \"string\"\n }\n }\n }\n ]\n }\n }\n },\n \"required\": [\n \"platform\",\n \"type\",\n \"host\",\n \"port\"\n ],\n \"additionalProperties\": false\n },\n \"GraphDatabaseType\": {\n \"type\": \"string\",\n \"enum\": [\n \"neo4j\",\n \"janusgraph\",\n \"neptune\",\n \"memory\"\n ]\n },\n \"GraphServiceConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"platform\": {\n \"$ref\": \"#/definitions/ServicePlatformConfig\"\n },\n \"type\": {\n \"$ref\": \"#/definitions/GraphDatabaseType\"\n },\n \"name\": {\n \"type\": \"string\"\n },\n \"uri\": {\n \"type\": \"string\"\n },\n \"url\": {\n \"type\": \"string\"\n },\n \"username\": {\n \"type\": \"string\"\n },\n \"password\": {\n \"type\": \"string\"\n },\n \"database\": {\n \"type\": \"string\"\n },\n \"host\": {\n \"type\": \"string\"\n },\n \"port\": {\n \"type\": \"integer\"\n },\n \"storage\": {\n \"type\": \"string\"\n },\n \"index\": {\n \"type\": \"string\"\n },\n \"endpoint\": {\n \"type\": \"string\"\n },\n \"region\": {\n \"type\": \"string\"\n },\n \"command\": {\n \"type\": \"string\"\n },\n \"image\": {\n \"type\": \"string\"\n },\n \"janusgraphVersion\": {\n \"type\": \"string\"\n },\n \"javaOptions\": {\n \"type\": \"string\"\n },\n \"heapSize\": {\n \"type\": \"string\"\n },\n \"pageCacheSize\": {\n \"type\": \"string\"\n },\n \"noAuth\": {\n \"type\": \"boolean\"\n },\n \"dataPath\": {\n \"type\": \"string\"\n },\n \"timeout\": {\n \"type\": \"integer\"\n },\n \"wait\": {\n \"type\": \"integer\"\n },\n \"logsEndpoint\": {\n \"type\": \"string\"\n },\n \"tag\": {\n \"type\": \"string\"\n },\n \"resources\": {\n \"$ref\": \"#/definitions/ResourceRequirements\"\n },\n \"security\": {\n \"$ref\": \"#/definitions/SecurityRequirements\"\n },\n \"build\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\"\n },\n {\n \"$ref\": \"#/definitions/BuildRequirements\"\n }\n ]\n },\n \"dockerfile\": {\n \"type\": \"string\"\n },\n \"buildContext\": {\n \"type\": \"string\"\n },\n \"buildArgs\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"buildTarget\": {\n \"type\": \"string\"\n },\n \"prebuilt\": {\n \"type\": \"boolean\"\n },\n \"noCache\": {\n \"type\": \"boolean\"\n },\n \"secrets\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"labels\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"annotations\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"dependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"externalDependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"oneOf\": [\n {\n \"type\": \"string\"\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\n },\n \"url\": {\n \"type\": \"string\"\n },\n \"required\": {\n \"type\": \"boolean\"\n },\n \"healthCheck\": {\n \"type\": \"string\"\n }\n }\n }\n ]\n }\n },\n \"environment\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"env\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\n \"platform\",\n \"type\"\n ],\n \"allOf\": [\n {\n \"if\": {\n \"properties\": {\n \"type\": {\n \"const\": \"neo4j\"\n }\n }\n },\n \"then\": {\n \"required\": [\n \"uri\",\n \"username\",\n \"password\",\n \"database\"\n ]\n }\n }\n ],\n \"additionalProperties\": false\n },\n \"FilesystemServiceConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"platform\": {\n \"$ref\": \"#/definitions/ServicePlatformConfig\"\n },\n \"path\": {\n \"type\": \"string\"\n },\n \"description\": {\n \"type\": \"string\"\n },\n \"command\": {\n \"type\": \"string\"\n },\n \"image\": {\n \"type\": \"string\"\n },\n \"port\": {\n \"type\": \"integer\"\n },\n \"timeout\": {\n \"type\": \"integer\"\n },\n \"wait\": {\n \"type\": \"integer\"\n },\n \"logsEndpoint\": {\n \"type\": \"string\"\n },\n \"tag\": {\n \"type\": \"string\"\n },\n \"resources\": {\n \"$ref\": \"#/definitions/ResourceRequirements\"\n },\n \"security\": {\n \"$ref\": \"#/definitions/SecurityRequirements\"\n },\n \"build\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\"\n },\n {\n \"$ref\": \"#/definitions/BuildRequirements\"\n }\n ]\n },\n \"dockerfile\": {\n \"type\": \"string\"\n },\n \"buildContext\": {\n \"type\": \"string\"\n },\n \"buildArgs\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"buildTarget\": {\n \"type\": \"string\"\n },\n \"prebuilt\": {\n \"type\": \"boolean\"\n },\n \"noCache\": {\n \"type\": \"boolean\"\n },\n \"secrets\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"labels\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"annotations\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"dependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"externalDependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"oneOf\": [\n {\n \"type\": \"string\"\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\n },\n \"url\": {\n \"type\": \"string\"\n },\n \"required\": {\n \"type\": \"boolean\"\n },\n \"healthCheck\": {\n \"type\": \"string\"\n }\n }\n }\n ]\n }\n },\n \"environment\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"env\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\n \"platform\",\n \"path\"\n ],\n \"additionalProperties\": false\n },\n \"InferenceServiceConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"platform\": {\n \"$ref\": \"#/definitions/ServicePlatformConfig\"\n },\n \"type\": {\n \"type\": \"string\"\n },\n \"model\": {\n \"type\": \"string\"\n },\n \"maxTokens\": {\n \"type\": \"integer\"\n },\n \"endpoint\": {\n \"type\": \"string\"\n },\n \"baseURL\": {\n \"type\": \"string\"\n },\n \"apiKey\": {\n \"type\": \"string\"\n },\n \"command\": {\n \"type\": \"string\"\n },\n \"image\": {\n \"type\": \"string\"\n },\n \"port\": {\n \"type\": \"integer\"\n },\n \"organization\": {\n \"type\": \"string\"\n },\n \"timeout\": {\n \"type\": \"integer\"\n },\n \"wait\": {\n \"type\": \"integer\"\n },\n \"logsEndpoint\": {\n \"type\": \"string\"\n },\n \"tag\": {\n \"type\": \"string\"\n },\n \"resources\": {\n \"$ref\": \"#/definitions/ResourceRequirements\"\n },\n \"security\": {\n \"$ref\": \"#/definitions/SecurityRequirements\"\n },\n \"build\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\"\n },\n {\n \"$ref\": \"#/definitions/BuildRequirements\"\n }\n ]\n },\n \"dockerfile\": {\n \"type\": \"string\"\n },\n \"buildContext\": {\n \"type\": \"string\"\n },\n \"buildArgs\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"buildTarget\": {\n \"type\": \"string\"\n },\n \"prebuilt\": {\n \"type\": \"boolean\"\n },\n \"noCache\": {\n \"type\": \"boolean\"\n },\n \"secrets\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"labels\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"annotations\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"dependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"externalDependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"oneOf\": [\n {\n \"type\": \"string\"\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\n },\n \"url\": {\n \"type\": \"string\"\n },\n \"required\": {\n \"type\": \"boolean\"\n },\n \"healthCheck\": {\n \"type\": \"string\"\n }\n }\n }\n ]\n }\n },\n \"environment\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"env\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\n \"platform\",\n \"type\",\n \"apiKey\"\n ],\n \"additionalProperties\": false\n },\n \"McpServiceConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"platform\": {\n \"$ref\": \"#/definitions/ServicePlatformConfig\"\n },\n \"command\": {\n \"type\": \"string\"\n },\n \"image\": {\n \"type\": \"string\"\n },\n \"port\": {\n \"type\": \"integer\"\n },\n \"dependsOn\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"timeout\": {\n \"type\": \"integer\"\n },\n \"wait\": {\n \"type\": \"integer\"\n },\n \"logsEndpoint\": {\n \"type\": \"string\"\n },\n \"tag\": {\n \"type\": \"string\"\n },\n \"resources\": {\n \"$ref\": \"#/definitions/ResourceRequirements\"\n },\n \"security\": {\n \"$ref\": \"#/definitions/SecurityRequirements\"\n },\n \"build\": {\n \"oneOf\": [\n {\n \"type\": \"boolean\"\n },\n {\n \"$ref\": \"#/definitions/BuildRequirements\"\n }\n ]\n },\n \"dockerfile\": {\n \"type\": \"string\"\n },\n \"buildContext\": {\n \"type\": \"string\"\n },\n \"buildArgs\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"buildTarget\": {\n \"type\": \"string\"\n },\n \"prebuilt\": {\n \"type\": \"boolean\"\n },\n \"noCache\": {\n \"type\": \"boolean\"\n },\n \"secrets\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"labels\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"annotations\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"dependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"externalDependencies\": {\n \"type\": \"array\",\n \"items\": {\n \"oneOf\": [\n {\n \"type\": \"string\"\n },\n {\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\n \"type\": \"string\"\n },\n \"url\": {\n \"type\": \"string\"\n },\n \"required\": {\n \"type\": \"boolean\"\n },\n \"healthCheck\": {\n \"type\": \"string\"\n }\n }\n }\n ]\n }\n },\n \"environment\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n },\n \"env\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\n \"platform\"\n ],\n \"additionalProperties\": false\n },\n \"ServicesConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"backend\": {\n \"$ref\": \"#/definitions/BackendServiceConfig\"\n },\n \"frontend\": {\n \"$ref\": \"#/definitions/FrontendServiceConfig\"\n },\n \"database\": {\n \"$ref\": \"#/definitions/DatabaseServiceConfig\"\n },\n \"graph\": {\n \"$ref\": \"#/definitions/GraphServiceConfig\"\n },\n \"filesystem\": {\n \"$ref\": \"#/definitions/FilesystemServiceConfig\"\n },\n \"inference\": {\n \"$ref\": \"#/definitions/InferenceServiceConfig\"\n },\n \"mcp\": {\n \"$ref\": \"#/definitions/McpServiceConfig\"\n },\n \"proxy\": {\n \"$ref\": \"#/definitions/ProxyServiceConfig\"\n }\n },\n \"additionalProperties\": true\n },\n \"SiteConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"siteName\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Display name for the site\"\n },\n \"domain\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Primary domain for the site\"\n },\n \"adminEmail\": {\n \"type\": \"string\",\n \"format\": \"email\",\n \"description\": \"Administrator email address\"\n },\n \"supportEmail\": {\n \"type\": \"string\",\n \"format\": \"email\",\n \"description\": \"Support email address (optional)\"\n },\n \"oauthAllowedDomains\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n },\n \"minItems\": 1,\n \"description\": \"Email domains allowed for OAuth authentication\"\n }\n },\n \"required\": [\n \"domain\"\n ],\n \"additionalProperties\": false\n },\n \"AppConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"features\": {\n \"type\": \"object\",\n \"properties\": {\n \"enableAnalytics\": {\n \"type\": \"boolean\"\n },\n \"enableMaintenanceMode\": {\n \"type\": \"boolean\"\n },\n \"enableDebugLogging\": {\n \"type\": \"boolean\"\n }\n },\n \"additionalProperties\": false\n },\n \"security\": {\n \"type\": \"object\",\n \"properties\": {\n \"sessionTimeout\": {\n \"type\": \"integer\",\n \"minimum\": 60,\n \"description\": \"Session timeout in seconds\"\n },\n \"maxLoginAttempts\": {\n \"type\": \"integer\",\n \"minimum\": 1,\n \"description\": \"Maximum failed login attempts before lockout\"\n },\n \"corsAllowedOrigins\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"enableLocalAuth\": {\n \"type\": \"boolean\",\n \"description\": \"Enable local username/password authentication\"\n },\n \"jwtSecret\": {\n \"type\": \"string\",\n \"minLength\": 32,\n \"description\": \"JWT signing secret (base64 encoded, 32+ bytes)\"\n }\n },\n \"additionalProperties\": false\n },\n \"performance\": {\n \"type\": \"object\",\n \"properties\": {\n \"enableCaching\": {\n \"type\": \"boolean\"\n },\n \"cacheTimeout\": {\n \"type\": \"integer\",\n \"minimum\": 0,\n \"description\": \"Cache timeout in seconds\"\n },\n \"maxRequestSize\": {\n \"type\": \"string\",\n \"pattern\": \"^[0-9]+(kb|mb|gb)$\",\n \"description\": \"Maximum request size (e.g., '10mb')\"\n }\n },\n \"additionalProperties\": false\n }\n },\n \"additionalProperties\": false\n },\n \"EnvironmentConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"_comment\": {\n \"type\": \"string\",\n \"description\": \"Optional comment for documentation\"\n },\n \"_metadata\": {\n \"type\": \"object\",\n \"properties\": {\n \"environment\": {\n \"type\": \"string\"\n },\n \"projectRoot\": {\n \"type\": \"string\"\n }\n },\n \"required\": [\n \"environment\",\n \"projectRoot\"\n ]\n },\n \"name\": {\n \"type\": \"string\",\n \"description\": \"Environment name\"\n },\n \"platform\": {\n \"type\": \"object\",\n \"properties\": {\n \"default\": {\n \"$ref\": \"#/definitions/PlatformType\"\n }\n }\n },\n \"services\": {\n \"$ref\": \"#/definitions/ServicesConfig\"\n },\n \"site\": {\n \"$ref\": \"#/definitions/SiteConfig\"\n },\n \"app\": {\n \"$ref\": \"#/definitions/AppConfig\"\n },\n \"env\": {\n \"type\": \"object\",\n \"properties\": {\n \"NODE_ENV\": {\n \"type\": \"string\",\n \"enum\": [\n \"development\",\n \"production\",\n \"test\"\n ]\n }\n },\n \"additionalProperties\": true\n },\n \"logLevel\": {\n \"type\": \"string\",\n \"enum\": [\n \"error\",\n \"warn\",\n \"info\",\n \"http\",\n \"debug\"\n ],\n \"description\": \"Logging verbosity level\"\n },\n \"deployment\": {\n \"type\": \"object\",\n \"properties\": {\n \"imageTagStrategy\": {\n \"type\": \"string\",\n \"enum\": [\n \"mutable\",\n \"immutable\",\n \"git-hash\"\n ]\n }\n }\n }\n },\n \"required\": [\n \"services\"\n ],\n \"additionalProperties\": false\n },\n \"SemiontConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"version\": {\n \"type\": \"string\",\n \"pattern\": \"^[0-9]+\\\\.[0-9]+\\\\.[0-9]+$\",\n \"description\": \"Config file version (semver)\"\n },\n \"project\": {\n \"type\": \"string\",\n \"minLength\": 1,\n \"description\": \"Project name\"\n },\n \"site\": {\n \"$ref\": \"#/definitions/SiteConfig\"\n },\n \"app\": {\n \"$ref\": \"#/definitions/AppConfig\"\n },\n \"services\": {\n \"$ref\": \"#/definitions/ServicesConfig\"\n }\n },\n \"required\": [\n \"version\",\n \"project\",\n \"site\"\n ],\n \"additionalProperties\": false\n }\n }\n}\n","/**\n * Config Schema Validator\n *\n * Validates configuration data against JSON Schema using Ajv (JSON Schema validator).\n * Provides runtime validation for semiont.json and environment config files.\n */\n\nimport Ajv, { type ErrorObject } from 'ajv';\nimport addFormats from 'ajv-formats';\nimport configSchema from './config.schema.json' with { type: 'json' };\n\n// Initialize Ajv with config-compatible settings\nconst ajv = new Ajv({\n allErrors: true, // Return all errors, not just the first one\n coerceTypes: true, // Coerce types (e.g., \"123\" -> 123)\n removeAdditional: false, // Don't remove additional properties\n useDefaults: true, // Apply default values from schema\n strict: false\n});\n\n// Add format validators (email, uri, date-time, etc.)\naddFormats(ajv);\n\n// Load schema\najv.addSchema(configSchema, 'config');\n\nexport interface ValidationResult {\n valid: boolean;\n errors: ErrorObject[] | null;\n errorMessage?: string;\n}\n\n/**\n * Validate semiont.json config\n */\nexport function validateSemiontConfig(data: unknown): ValidationResult {\n const validate = ajv.getSchema('config#/definitions/SemiontConfig');\n if (!validate) {\n throw new Error('SemiontConfig schema not found');\n }\n\n const valid = validate(data);\n\n if (!valid) {\n return {\n valid: false,\n errors: validate.errors || null,\n errorMessage: formatErrors(validate.errors || [])\n };\n }\n\n return { valid: true, errors: null };\n}\n\n/**\n * Validate environment config (environments/*.json)\n */\nexport function validateEnvironmentConfig(data: unknown): ValidationResult {\n const validate = ajv.getSchema('config#/definitions/EnvironmentConfig');\n if (!validate) {\n throw new Error('EnvironmentConfig schema not found');\n }\n\n const valid = validate(data);\n\n if (!valid) {\n return {\n valid: false,\n errors: validate.errors || null,\n errorMessage: formatErrors(validate.errors || [])\n };\n }\n\n return { valid: true, errors: null };\n}\n\n/**\n * Validate site config\n */\nexport function validateSiteConfig(data: unknown): ValidationResult {\n const validate = ajv.getSchema('config#/definitions/SiteConfig');\n if (!validate) {\n throw new Error('SiteConfig schema not found');\n }\n\n const valid = validate(data);\n\n if (!valid) {\n return {\n valid: false,\n errors: validate.errors || null,\n errorMessage: formatErrors(validate.errors || [])\n };\n }\n\n return { valid: true, errors: null };\n}\n\n/**\n * Format validation errors into human-readable message\n */\nexport function formatErrors(errors: ErrorObject[]): string {\n if (errors.length === 0) return 'Validation failed';\n\n const messages = errors.map(err => {\n const path = err.instancePath || 'root';\n const message = err.message || 'validation error';\n\n if (err.keyword === 'required' && 'missingProperty' in err.params) {\n return `Missing required property: ${err.params.missingProperty}`;\n }\n\n if (err.keyword === 'type' && 'type' in err.params) {\n return `${path}: ${message} (expected ${err.params.type})`;\n }\n\n if (err.keyword === 'enum' && 'allowedValues' in err.params) {\n return `${path}: must be one of [${(err.params.allowedValues as string[]).join(', ')}]`;\n }\n\n if (err.keyword === 'format') {\n return `${path}: invalid format (${message})`;\n }\n\n if (err.keyword === 'minLength' || err.keyword === 'minItems') {\n return `${path}: ${message}`;\n }\n\n return `${path}: ${message}`;\n });\n\n return messages.join('; ');\n}\n","/**\n * Environment Loader Module\n *\n * Responsible for parsing and merging environment configurations.\n * Pure functions only - callers handle filesystem I/O.\n */\n\nimport { ConfigurationError } from './configuration-error';\nimport { PlatformType } from './platform-types';\nimport { isObject } from '../index';\nimport { validateEnvironmentConfig } from './config-validator';\nimport type {\n EnvironmentConfig,\n SiteConfig,\n AppConfig,\n SemiontConfig,\n ServicesConfig,\n BackendServiceConfig,\n FrontendServiceConfig,\n DatabaseServiceConfig,\n GraphServiceConfig,\n FilesystemServiceConfig,\n InferenceServiceConfig,\n ServicePlatformConfig\n} from './config.types';\n\n/**\n * Re-export generated types from JSON Schema\n * These types are automatically generated from config.schema.json\n */\nexport type {\n EnvironmentConfig,\n SiteConfig,\n AppConfig,\n SemiontConfig,\n PlatformType,\n ServicesConfig,\n BackendServiceConfig,\n FrontendServiceConfig,\n DatabaseServiceConfig,\n GraphServiceConfig,\n FilesystemServiceConfig,\n InferenceServiceConfig,\n ServicePlatformConfig\n};\n\n/**\n * Generic service configuration\n * Platform-specific fields should be accessed through platform-specific interfaces\n */\nexport interface ServiceConfig {\n platform?: {\n type: PlatformType;\n };\n // Generic fields that apply across platforms\n port?: number;\n name?: string;\n // Platform-specific fields are loosely typed here\n // Platforms should validate and type these properly\n [key: string]: any;\n}\n\nexport interface AWSConfig {\n region: string;\n accountId: string;\n certificateArn?: string;\n hostedZoneId?: string;\n rootDomain?: string;\n stacks?: {\n data?: string;\n app?: string;\n };\n database?: {\n name?: string;\n instanceClass?: string;\n allocatedStorage?: number;\n backupRetentionDays?: number;\n multiAZ?: boolean;\n };\n ecs?: {\n desiredCount?: number;\n minCapacity?: number;\n maxCapacity?: number;\n };\n monitoring?: {\n enableDetailedMonitoring?: boolean;\n logRetentionDays?: number;\n };\n}\n\n/**\n * Deep merge utility for configuration objects\n * Pure function - no side effects\n */\nexport function deepMerge(target: any, ...sources: any[]): any {\n if (!sources.length) return target;\n const source = sources.shift();\n\n if (isObject(target) && isObject(source)) {\n for (const key in source) {\n if (isObject(source[key])) {\n if (!target[key]) Object.assign(target, { [key]: {} });\n deepMerge(target[key], source[key]);\n } else {\n Object.assign(target, { [key]: source[key] });\n }\n }\n }\n\n return deepMerge(target, ...sources);\n}\n\n\n/**\n * Recursively resolve environment variable placeholders in configuration\n * Replaces ${VAR_NAME} with the value from the provided env object\n * Pure function - accepts env as parameter instead of using process.env\n *\n * @param obj - Configuration object to process\n * @param env - Environment variables object\n * @returns Configuration with resolved environment variables\n */\nexport function resolveEnvVars(obj: any, env: Record<string, string | undefined>): any {\n if (typeof obj === 'string') {\n // Replace ${VAR_NAME} with actual environment variable value\n return obj.replace(/\\$\\{([^}]+)\\}/g, (match, varName) => {\n return env[varName] || match;\n });\n }\n\n if (Array.isArray(obj)) {\n return obj.map(item => resolveEnvVars(item, env));\n }\n\n if (obj && typeof obj === 'object') {\n const resolved: any = {};\n for (const key in obj) {\n resolved[key] = resolveEnvVars(obj[key], env);\n }\n return resolved;\n }\n\n return obj;\n}\n\n/**\n * Parse and merge configuration files\n * Pure function - accepts file contents as strings instead of reading from filesystem\n *\n * @param baseContent - Contents of semiont.json (null if file doesn't exist)\n * @param envContent - Contents of environment-specific JSON file\n * @param env - Environment variables object\n * @param environment - Environment name\n * @param projectRoot - Project root path (for metadata only)\n * @returns Merged and validated environment configuration\n * @throws ConfigurationError if parsing or validation fails\n */\nexport function parseAndMergeConfigs(\n baseContent: string | null,\n envContent: string,\n env: Record<string, string | undefined>,\n environment: string,\n projectRoot: string\n): EnvironmentConfig {\n try {\n // Parse base config\n let baseConfig: any = {};\n if (baseContent) {\n baseConfig = JSON.parse(baseContent);\n }\n\n // Parse environment config\n const envConfig = JSON.parse(envContent);\n\n // Merge configurations: base defaults -> environment config\n const merged = deepMerge(\n {},\n { site: baseConfig.site }, // Site config from semiont.json\n baseConfig.defaults || {}, // Default config from semiont.json\n envConfig // Environment-specific overrides\n );\n\n // Resolve environment variables in the merged configuration\n const resolved = resolveEnvVars(merged, env);\n\n // Ensure services exists (even if empty)\n if (!resolved.services) {\n resolved.services = {};\n }\n\n // Validate NODE_ENV if specified\n if (resolved.env?.NODE_ENV) {\n const validNodeEnv = ['development', 'production', 'test'];\n if (!validNodeEnv.includes(resolved.env.NODE_ENV)) {\n throw new ConfigurationError(\n `Invalid NODE_ENV value: ${resolved.env.NODE_ENV}`,\n environment,\n `NODE_ENV must be one of: ${validNodeEnv.join(', ')}`\n );\n }\n }\n\n // Add metadata about where this config came from\n const configWithMetadata = {\n ...resolved,\n _metadata: {\n environment,\n projectRoot\n }\n };\n\n // Validate with AJV\n const validationResult = validateEnvironmentConfig(configWithMetadata);\n\n if (!validationResult.valid) {\n throw new ConfigurationError(\n `Invalid environment configuration: ${validationResult.errorMessage}`,\n environment,\n `Fix the validation errors in your environments/${environment}.json file`\n );\n }\n\n return configWithMetadata as EnvironmentConfig;\n } catch (error) {\n if (error instanceof ConfigurationError) {\n throw error; // Re-throw our custom errors\n }\n\n if (error instanceof SyntaxError && error.message.includes('JSON')) {\n throw new ConfigurationError(\n `Invalid JSON syntax in configuration file`,\n environment,\n `Check for missing commas, quotes, or brackets. Use a JSON validator to verify syntax.`\n );\n }\n\n const message = error instanceof Error ? error.message : String(error);\n throw new ConfigurationError(\n `Failed to parse environment configuration: ${message}`,\n environment,\n `Check the configuration files are valid JSON`\n );\n }\n}\n\n/**\n * Get NODE_ENV value from environment config\n *\n * @param config - Environment configuration\n * @returns NODE_ENV value (defaults to 'development' if not specified)\n */\nexport function getNodeEnvForEnvironment(config: EnvironmentConfig): 'development' | 'production' | 'test' {\n const nodeEnv = config.env?.NODE_ENV;\n\n // Default to 'development' if not specified\n return nodeEnv || 'development';\n}\n\n/**\n * List environment names from filenames\n * Pure function - accepts array of filenames instead of reading from filesystem\n *\n * @param files - Array of filenames from environments directory\n * @returns Sorted array of environment names\n */\nexport function listEnvironmentNames(files: string[]): string[] {\n return files\n .filter(file => file.endsWith('.json'))\n .map(file => {\n // Extract filename from path (handle directory separators)\n const lastSlash = Math.max(file.lastIndexOf('/'), file.lastIndexOf('\\\\'));\n const filename = lastSlash >= 0 ? file.substring(lastSlash + 1) : file;\n // Remove '.json' suffix\n return filename.slice(0, -5);\n })\n .sort();\n}\n\n/**\n * Type guard to check if config has AWS settings\n * \n * @param config - Environment configuration\n * @returns True if AWS configuration is present\n */\nexport function hasAWSConfig(config: EnvironmentConfig): config is EnvironmentConfig & { aws: AWSConfig } {\n return !!(config as any).aws && !!(config as any).aws.region;\n}\n\n/**\n * Display configuration for debugging\n *\n * @param config - Configuration to display\n */\nexport function displayConfiguration(config: EnvironmentConfig): void {\n console.log('Environment Configuration:');\n console.log(JSON.stringify(config, null, 2));\n}\n\n/**\n * File reader abstraction for platform-agnostic config loading\n * Implementations provide platform-specific file I/O (Node.js, Deno, Bun, etc.)\n */\nexport type ConfigFileReader = {\n /** Read file if it exists, return null otherwise */\n readIfExists: (path: string) => string | null;\n /** Read file, throw error if it doesn't exist */\n readRequired: (path: string) => string;\n};\n\n/**\n * Create a config loader with a specific file reader implementation\n * Higher-order function that returns a platform-specific config loader\n *\n * @param reader - Platform-specific file reader implementation\n * @returns Function to load environment config from filesystem\n *\n * @example\n * ```typescript\n * import * as fs from 'fs';\n * import { createConfigLoader } from '@semiont/core';\n *\n * const nodeReader = {\n * readIfExists: (path) => fs.existsSync(path) ? fs.readFileSync(path, 'utf-8') : null,\n * readRequired: (path) => {\n * if (!fs.existsSync(path)) throw new Error(`File not found: ${path}`);\n * return fs.readFileSync(path, 'utf-8');\n * },\n * };\n *\n * const loadConfig = createConfigLoader(nodeReader);\n * const config = loadConfig('/project/root', 'production');\n * ```\n */\nexport function createConfigLoader(reader: ConfigFileReader) {\n return (projectRoot: string, environment: string): EnvironmentConfig => {\n // Read base semiont.json (optional)\n const baseContent = reader.readIfExists(`${projectRoot}/semiont.json`);\n\n // Read environment-specific config (required)\n const envContent = reader.readRequired(`${projectRoot}/environments/${environment}.json`);\n\n // Use pure function to parse and merge\n return parseAndMergeConfigs(baseContent, envContent, process.env, environment, projectRoot);\n };\n}\n\n","/**\n * Environment validation utilities\n *\n * Pure functions - accept available environments as parameter instead of reading from filesystem\n */\n\nexport type Environment = string; // Allow any environment name\n\n/**\n * Type guard to check if a string is a valid Environment\n * @param value - The environment string to check\n * @param availableEnvironments - List of valid environment names\n */\nexport function isValidEnvironment(value: string | undefined, availableEnvironments: string[]): value is Environment {\n if (!value) return false;\n return availableEnvironments.includes(value);\n}\n\n/**\n * Parse environment string to Environment type\n * @param value - The environment string to parse\n * @param availableEnvironments - List of valid environment names\n * @returns Valid Environment type\n * @throws Error if environment is invalid or not provided\n */\nexport function parseEnvironment(value: string | undefined, availableEnvironments: string[]): Environment {\n if (!value) {\n throw new Error('Environment is required');\n }\n if (!isValidEnvironment(value, availableEnvironments)) {\n throw new Error(`Invalid environment: ${value}. Available environments: ${availableEnvironments.join(', ')}`);\n }\n return value;\n}\n\n/**\n * Validate and return environment or throw error\n * @param value - The environment string to validate\n * @param availableEnvironments - List of valid environment names\n * @throws Error if environment is invalid\n */\nexport function validateEnvironment(value: string | undefined, availableEnvironments: string[]): Environment {\n if (!value) {\n throw new Error('Environment is required');\n }\n if (!isValidEnvironment(value, availableEnvironments)) {\n throw new Error(`Invalid environment: ${value}. Available environments: ${availableEnvironments.join(', ')}`);\n }\n return value;\n}","/**\n * Platform Types Module\n *\n * Re-exports PlatformType from schema-generated types.\n * Platforms represent WHERE services run (infrastructure targets).\n */\n\nimport { PlatformType as SchemaPlatformType } from './config.types';\n\n/**\n * Platform type literals from JSON Schema\n * These represent the infrastructure targets where services can be deployed\n */\nexport type PlatformType = SchemaPlatformType;\n\n/**\n * Type guard to check if a string is a valid platform type\n *\n * @param value - Value to check\n * @returns True if value is a valid PlatformType\n */\nexport function isValidPlatformType(value: string): value is PlatformType {\n return ['aws', 'container', 'posix', 'external'].includes(value);\n}\n\n/**\n * Get all valid platform types\n *\n * @returns Array of all platform types\n */\nexport function getAllPlatformTypes(): PlatformType[] {\n return ['aws', 'container', 'posix', 'external'];\n}","/**\n * @semiont/core\n *\n * Core domain logic and utilities for the Semiont semantic knowledge platform.\n * OpenAPI types are generated here and exported for use across the monorepo.\n */\n\n// OpenAPI-generated types (source of truth for API schemas)\nexport type { components, paths, operations } from './types';\n\n// Branded types (compile-time type safety)\nexport type {\n // OpenAPI types\n Motivation,\n ContentFormat,\n // Authentication & tokens\n Email,\n AuthCode,\n GoogleCredential,\n AccessToken,\n RefreshToken,\n MCPToken,\n CloneToken,\n // System identifiers\n JobId,\n UserDID,\n EntityType,\n SearchQuery,\n BaseUrl,\n // HTTP URI types\n ResourceUri,\n AnnotationUri,\n ResourceAnnotationUri,\n} from './branded-types';\nexport {\n // Helper functions\n email,\n authCode,\n googleCredential,\n accessToken,\n refreshToken,\n mcpToken,\n cloneToken,\n jobId,\n userDID,\n entityType,\n searchQuery,\n baseUrl,\n // URI factory functions\n resourceUri,\n annotationUri,\n resourceAnnotationUri,\n} from './branded-types';\n\n// Creation methods\nexport { CREATION_METHODS } from './creation-methods';\nexport type { CreationMethod } from './creation-methods';\n\n// Identifier types (only IDs - URIs are in @semiont/api-client)\nexport type { ResourceId, AnnotationId, UserId } from './identifiers';\nexport {\n resourceId,\n annotationId,\n userId,\n isResourceId,\n isAnnotationId,\n} from './identifiers';\n\n// Graph types\nexport type {\n GraphConnection,\n GraphPath,\n EntityTypeStats,\n} from './graph';\n\n// Event types\nexport type {\n BaseEvent,\n ResourceEvent,\n ResourceEventType,\n SystemEvent,\n ResourceScopedEvent,\n ResourceCreatedEvent,\n ResourceClonedEvent,\n ResourceArchivedEvent,\n ResourceUnarchivedEvent,\n RepresentationAddedEvent,\n RepresentationRemovedEvent,\n AnnotationAddedEvent,\n AnnotationRemovedEvent,\n AnnotationBodyUpdatedEvent,\n JobStartedEvent,\n JobProgressEvent,\n JobCompletedEvent,\n JobFailedEvent,\n BodyOperation,\n BodyItem,\n EntityTagAddedEvent,\n EntityTagRemovedEvent,\n EventMetadata,\n EventSignature,\n StoredEvent,\n EventQuery,\n ResourceAnnotations,\n} from './events';\nexport {\n isResourceEvent,\n isSystemEvent,\n isResourceScopedEvent,\n getEventType,\n} from './events';\n\n// Event utilities\nexport {\n getAnnotationUriFromEvent,\n isEventRelatedToAnnotation,\n isResourceEvent as isStoredEvent,\n} from './event-utils';\n\n// Event bus (RxJS-based, framework-agnostic)\nexport { EventBus, ScopedEventBus } from './event-bus';\n\n// RxJS operators\nexport { burstBuffer, type BurstBufferOptions } from './operators/burst-buffer';\n\n// Logger interface (framework-agnostic)\nexport type { Logger } from './logger';\n\n// Event protocol (application-level events for event bus)\nexport type {\n EventMap,\n EventName,\n SelectionData,\n MarkProgress,\n YieldProgress,\n Selector,\n GatheredContext,\n} from './event-map';\n\n// Backend-specific annotation utilities\nexport { findBodyItem } from './annotation-utils';\n\n// Annotation assembly (pure functions for building W3C Annotations)\nexport {\n assembleAnnotation,\n applyBodyOperations,\n getTextPositionSelector,\n getSvgSelector,\n getFragmentSelector,\n validateSvgMarkup,\n} from './annotation-assembly';\nexport type { AssembledAnnotation } from './annotation-assembly';\n\n// Resource types\nexport type { UpdateResourceInput, ResourceFilter } from './resource-types';\n\n// Annotation types\nexport type { AnnotationCategory, CreateAnnotationInternal } from './annotation-types';\n\n// Auth types\nexport type { GoogleAuthRequest } from './auth-types';\n\n// ID generation\nexport { generateUuid } from './id-generation';\n\n// Utility functions\nexport * from './type-guards';\nexport * from './errors';\nexport * from './did-utils';\n\n// Configuration - Pure functions only (no filesystem dependencies)\n// Callers should read config files themselves and pass contents to parseAndMergeConfigs\n// Or use createConfigLoader with a platform-specific file reader\nexport {\n deepMerge,\n resolveEnvVars,\n parseAndMergeConfigs,\n createConfigLoader,\n listEnvironmentNames,\n getNodeEnvForEnvironment,\n hasAWSConfig,\n displayConfiguration,\n // Types\n type EnvironmentConfig,\n type ServiceConfig,\n type AWSConfig,\n type SiteConfig,\n type AppConfig,\n type ConfigFileReader,\n} from './config/environment-loader';\n\nexport {\n parseEnvironment,\n validateEnvironment,\n type Environment,\n} from './config/environment-validator';\nexport {\n formatErrors,\n validateSemiontConfig,\n validateEnvironmentConfig,\n validateSiteConfig,\n type ValidationResult,\n} from './config/config-validator';\nexport { ConfigurationError } from './config/configuration-error';\nexport type { ProxyServiceConfig } from './config/config.types';\nexport {\n type PlatformType,\n isValidPlatformType,\n getAllPlatformTypes,\n} from './config/platform-types';\n\n// Schema-generated configuration types\nexport type {\n BackendServiceConfig,\n FrontendServiceConfig,\n DatabaseServiceConfig,\n GraphServiceConfig,\n FilesystemServiceConfig,\n InferenceServiceConfig,\n McpServiceConfig,\n ServicesConfig,\n SemiontConfig,\n GraphDatabaseType,\n ServicePlatformConfig\n} from './config/config.types';\n\n// Version information\nexport const CORE_TYPES_VERSION = '0.1.0';\nexport const SDK_VERSION = '0.1.0';\n"]}
1
+ {"version":3,"sources":["../src/branded-types.ts","../src/creation-methods.ts","../src/identifiers.ts","../src/events.ts","../src/event-utils.ts","../src/event-bus.ts","../src/operators/burst-buffer.ts","../src/annotation-utils.ts","../src/id-generation.ts","../src/annotation-assembly.ts","../src/type-guards.ts","../src/errors.ts","../src/did-utils.ts","../src/config/toml-loader.ts","../src/config/environment-validator.ts","../src/config/configuration-error.ts","../src/config/platform-types.ts","../src/index.ts"],"names":["resourceUri","baseUrl","annotationUri","isResourceEvent","resourceId","userId","parseToml"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Branded string types for compile-time type safety\n *\n * These types are zero-cost at runtime but prevent mixing\n * different string types at compile time.\n */\n\nimport type { components } from './types';\n\n// ============================================================================\n// OPENAPI-GENERATED TYPES (use directly from spec)\n// ============================================================================\n\nexport type Motivation = components['schemas']['Motivation'];\nexport type ContentFormat = components['schemas']['ContentFormat'];\n\n// ============================================================================\n// AUTHENTICATION & TOKENS\n// ============================================================================\n\nexport type Email = string & { readonly __brand: 'Email' };\nexport type AuthCode = string & { readonly __brand: 'AuthCode' };\nexport type GoogleCredential = string & { readonly __brand: 'GoogleCredential' };\nexport type AccessToken = string & { readonly __brand: 'AccessToken' };\nexport type RefreshToken = string & { readonly __brand: 'RefreshToken' };\nexport type MCPToken = string & { readonly __brand: 'MCPToken' };\nexport type CloneToken = string & { readonly __brand: 'CloneToken' };\n\n// ============================================================================\n// SYSTEM IDENTIFIERS\n// ============================================================================\n\nexport type JobId = string & { readonly __brand: 'JobId' };\nexport type UserDID = string & { readonly __brand: 'UserDID' };\nexport type EntityType = string & { readonly __brand: 'EntityType' };\nexport type SearchQuery = string & { readonly __brand: 'SearchQuery' };\nexport type BaseUrl = string & { readonly __brand: 'BaseUrl' };\n\n// ============================================================================\n// HELPER FUNCTIONS (minimal validation, just branding)\n// ============================================================================\n\nexport function email(value: string): Email { return value as Email; }\nexport function authCode(value: string): AuthCode { return value as AuthCode; }\nexport function googleCredential(value: string): GoogleCredential { return value as GoogleCredential; }\nexport function accessToken(value: string): AccessToken { return value as AccessToken; }\nexport function refreshToken(value: string): RefreshToken { return value as RefreshToken; }\nexport function mcpToken(value: string): MCPToken { return value as MCPToken; }\nexport function cloneToken(value: string): CloneToken { return value as CloneToken; }\nexport function jobId(value: string): JobId { return value as JobId; }\nexport function userDID(value: string): UserDID { return value as UserDID; }\nexport function entityType(value: string): EntityType { return value as EntityType; }\nexport function searchQuery(value: string): SearchQuery { return value as SearchQuery; }\nexport function baseUrl(value: string): BaseUrl { return value as BaseUrl; }\n\n// Motivation and ContentFormat use OpenAPI enums - no helpers needed\n// Use the enum values directly from the OpenAPI spec\n\n// ============================================================================\n// HTTP URI TYPES\n// ============================================================================\n\n// Branded type definitions for HTTP URIs returned by the API\nexport type ResourceUri = string & { readonly __brand: 'ResourceUri' };\n\n// W3C flat format for content negotiation: http://localhost:4000/annotations/{id}\nexport type AnnotationUri = string & { readonly __brand: 'AnnotationUri' };\n\n// Nested format for CRUD operations: http://localhost:4000/resources/{resourceId}/annotations/{annotationId}\nexport type ResourceAnnotationUri = string & { readonly __brand: 'ResourceAnnotationUri' };\n\n// Factory functions with runtime validation\nexport function resourceUri(uri: string): ResourceUri {\n if (!uri.startsWith('http://') && !uri.startsWith('https://')) {\n throw new TypeError(`Expected ResourceUri, got: ${uri}`);\n }\n return uri as ResourceUri;\n}\n\nexport function annotationUri(uri: string): AnnotationUri {\n if (!uri.startsWith('http://') && !uri.startsWith('https://')) {\n throw new TypeError(`Expected AnnotationUri, got: ${uri}`);\n }\n return uri as AnnotationUri;\n}\n\nexport function resourceAnnotationUri(uri: string): ResourceAnnotationUri {\n if (!uri.startsWith('http://') && !uri.startsWith('https://')) {\n throw new TypeError(`Expected ResourceAnnotationUri, got: ${uri}`);\n }\n // Additional validation: must contain /resources/ and /annotations/\n if (!uri.includes('/resources/') || !uri.includes('/annotations/')) {\n throw new TypeError(`Expected nested ResourceAnnotationUri format, got: ${uri}`);\n }\n return uri as ResourceAnnotationUri;\n}\n","/**\n * Resource creation methods - How resources are created in the system\n */\n\n/**\n * Enumeration of all possible resource creation methods\n */\nexport const CREATION_METHODS = {\n API: 'api',\n UPLOAD: 'upload',\n UI: 'ui',\n REFERENCE: 'reference',\n CLONE: 'clone',\n GENERATED: 'generated',\n} as const;\n\n/**\n * Type for resource creation methods\n */\nexport type CreationMethod = typeof CREATION_METHODS[keyof typeof CREATION_METHODS];","/**\n * Branded identifier types for compile-time type safety.\n *\n * These types prevent mixing up resource IDs, annotation IDs, and user IDs\n * at compile time while having zero runtime overhead.\n *\n * URI types (ResourceUri, AnnotationUri) are in @semiont/api-client\n * since they deal with HTTP URIs returned by the API.\n */\n\n// Branded type definitions for IDs only\nexport type ResourceId = string & { readonly __brand: 'ResourceId' };\nexport type AnnotationId = string & { readonly __brand: 'AnnotationId' };\nexport type UserId = string & { readonly __brand: 'UserId' };\n\n// Type guards with runtime validation\nexport function isResourceId(value: string): value is ResourceId {\n return !value.includes('/');\n}\n\nexport function isAnnotationId(value: string): value is AnnotationId {\n return !value.includes('/');\n}\n\n// Factory functions with runtime validation\nexport function resourceId(id: string): ResourceId {\n if (id.includes('/')) {\n throw new TypeError(`Expected ResourceId, got URI: ${id}`);\n }\n return id as ResourceId;\n}\n\nexport function annotationId(id: string): AnnotationId {\n if (id.includes('/')) {\n throw new TypeError(`Expected AnnotationId, got URI: ${id}`);\n }\n return id as AnnotationId;\n}\n\nexport function userId(id: string): UserId {\n return id as UserId;\n}\n","/**\n * Resource Event Types\n *\n * Event-sourced architecture for resource state management\n * Events are stored in an append-only log (JSONL format)\n *\n * Federation-ready design:\n * - resourceId uses content hashes (doc-sha256:...)\n * - userId uses DID format (did:web:org.com:users:alice)\n * - prevEventHash creates tamper-evident chains\n * - Optional signatures for cross-org verification\n */\n\nimport type { CreationMethod } from './creation-methods';\nimport type { components } from './types';\nimport type { AnnotationUri, JobId } from './branded-types';\nimport type { ResourceId, AnnotationId, UserId } from './identifiers';\n\n// Import OpenAPI types\ntype Annotation = components['schemas']['Annotation'];\ntype ContentFormat = components['schemas']['ContentFormat'];\ntype Motivation = components['schemas']['Motivation'];\n\nexport interface BaseEvent {\n id: string; // Unique event ID (UUID)\n timestamp: string; // ISO 8601 timestamp (for humans, NOT for ordering)\n resourceId?: ResourceId; // Optional - present for resource-scoped events, absent for system events\n // Use isSystemEvent() / isResourceScopedEvent() type guards for routing\n userId: UserId; // DID format: did:web:org.com:users:alice (federation-ready)\n version: number; // Event schema version\n}\n\n// Resource lifecycle events\nexport interface ResourceCreatedEvent extends BaseEvent {\n type: 'resource.created';\n payload: {\n name: string;\n format: ContentFormat; // MIME type (validated enum)\n contentChecksum: string; // SHA-256 of content (should match resourceId)\n contentByteSize?: number; // Size of content in bytes\n creationMethod: CreationMethod; // How the resource was created\n entityTypes?: string[];\n\n // First-class fields (promoted from metadata)\n language?: string; // Language/locale code (e.g., 'en', 'es', 'fr')\n isDraft?: boolean; // Draft status for generated resources\n generatedFrom?: string; // Annotation/Reference ID that triggered generation\n generationPrompt?: string; // Prompt used for AI generation (events-only, not on Resource)\n };\n}\n\nexport interface ResourceClonedEvent extends BaseEvent {\n type: 'resource.cloned';\n payload: {\n name: string;\n format: ContentFormat; // MIME type (validated enum)\n contentChecksum: string; // SHA-256 of new content\n contentByteSize?: number; // Size of content in bytes\n parentResourceId: string; // Content hash of parent resource\n creationMethod: CreationMethod; // How the resource was created\n entityTypes?: string[];\n\n // First-class fields (promoted from metadata)\n language?: string; // Language/locale code (e.g., 'en', 'es', 'fr')\n };\n}\n\nexport interface ResourceArchivedEvent extends BaseEvent {\n type: 'resource.archived';\n payload: {\n reason?: string;\n };\n}\n\nexport interface ResourceUnarchivedEvent extends BaseEvent {\n type: 'resource.unarchived';\n payload: Record<string, never>; // Empty payload\n}\n\n// Representation events (multi-format support)\nexport interface RepresentationAddedEvent extends BaseEvent {\n type: 'representation.added';\n resourceId: ResourceId; // Required - resource-scoped event\n payload: {\n representation: {\n '@id': string; // Unique ID (content hash)\n mediaType: string; // MIME type (e.g., 'text/markdown', 'application/pdf')\n byteSize: number; // Size in bytes\n checksum: string; // Content hash (SHA-256)\n created: string; // ISO 8601 timestamp\n rel?: 'original' | 'thumbnail' | 'preview' | 'optimized' | 'derived' | 'other';\n storageUri?: string; // Where bytes are stored (optional)\n filename?: string; // Original filename (optional)\n language?: string; // IETF BCP 47 language tag (optional, for translations)\n width?: number; // Pixels (images/video)\n height?: number; // Pixels (images/video)\n duration?: number; // Seconds (audio/video)\n };\n };\n}\n\nexport interface RepresentationRemovedEvent extends BaseEvent {\n type: 'representation.removed';\n resourceId: ResourceId; // Required - resource-scoped event\n payload: {\n checksum: string; // Which representation to remove\n };\n}\n\n// Unified annotation events\n// Single principle: An annotation is an annotation. The motivation field tells you what kind it is.\nexport interface AnnotationAddedEvent extends BaseEvent {\n type: 'annotation.added';\n payload: {\n annotation: Annotation;\n };\n}\n\nexport interface AnnotationRemovedEvent extends BaseEvent {\n type: 'annotation.removed';\n payload: {\n annotationId: AnnotationId; // Branded type for compile-time safety\n };\n}\n\n// Body operation types for fine-grained annotation body modifications\nexport type BodyItem =\n | { type: 'TextualBody'; value: string; purpose?: Motivation; format?: string; language?: string }\n | { type: 'SpecificResource'; source: string; purpose?: Motivation };\n\nexport type BodyOperation =\n | { op: 'add'; item: BodyItem }\n | { op: 'remove'; item: BodyItem }\n | { op: 'replace'; oldItem: BodyItem; newItem: BodyItem };\n\nexport interface AnnotationBodyUpdatedEvent extends BaseEvent {\n type: 'annotation.body.updated';\n payload: {\n annotationId: AnnotationId; // Branded type for compile-time safety\n operations: BodyOperation[];\n };\n}\n\n// Job progress events (resource-level)\n// Emitted by background workers for real-time progress updates\nexport interface JobStartedEvent extends BaseEvent {\n type: 'job.started';\n resourceId: ResourceId; // Required - job is scoped to a resource\n payload: {\n jobId: JobId;\n jobType: 'reference-annotation' | 'generation' | 'highlight-annotation' | 'assessment-annotation' | 'comment-annotation' | 'tag-annotation';\n totalSteps?: number; // Optional - total number of steps if known\n };\n}\n\nexport interface JobProgressEvent extends BaseEvent {\n type: 'job.progress';\n resourceId: ResourceId; // Required - job is scoped to a resource\n payload: {\n jobId: JobId;\n jobType: 'reference-annotation' | 'generation' | 'highlight-annotation' | 'assessment-annotation' | 'comment-annotation' | 'tag-annotation';\n percentage: number; // 0-100\n currentStep?: string; // Human-readable current step (e.g., \"Scanning for Person\")\n processedSteps?: number; // Number of steps completed\n totalSteps?: number; // Total number of steps\n foundCount?: number; // For detection: number of entities found so far\n message?: string; // Optional status message\n progress?: any; // For new job types: full progress object\n };\n}\n\nexport interface JobCompletedEvent extends BaseEvent {\n type: 'job.completed';\n resourceId: ResourceId; // Required - job is scoped to a resource\n payload: {\n jobId: JobId;\n jobType: 'reference-annotation' | 'generation' | 'highlight-annotation' | 'assessment-annotation' | 'comment-annotation' | 'tag-annotation';\n totalSteps?: number; // Total steps completed\n foundCount?: number; // For detection: total entities found\n resultResourceId?: ResourceId; // For generation: ID of generated resource (branded type)\n annotationUri?: AnnotationUri; // For generation: URI of annotation that triggered generation\n message?: string; // Optional completion message\n result?: any; // For new job types: full result object\n };\n}\n\nexport interface JobFailedEvent extends BaseEvent {\n type: 'job.failed';\n resourceId: ResourceId; // Required - job is scoped to a resource\n payload: {\n jobId: JobId;\n jobType: 'reference-annotation' | 'generation' | 'highlight-annotation' | 'assessment-annotation' | 'comment-annotation' | 'tag-annotation';\n error: string; // Error message\n details?: string; // Optional detailed error information\n };\n}\n\n// Entity tag events (resource-level)\nexport interface EntityTagAddedEvent extends BaseEvent {\n type: 'entitytag.added';\n resourceId: ResourceId; // Required - resource-scoped event\n payload: {\n entityType: string;\n };\n}\n\nexport interface EntityTagRemovedEvent extends BaseEvent {\n type: 'entitytag.removed';\n resourceId: ResourceId; // Required - resource-scoped event\n payload: {\n entityType: string;\n };\n}\n\n// Entity type events (global collection)\nexport interface EntityTypeAddedEvent extends BaseEvent {\n type: 'entitytype.added';\n resourceId?: undefined; // System-level event - no resource scope\n payload: {\n entityType: string; // The entity type being added to global collection\n };\n}\n\n// Union type of all events\nexport type ResourceEvent =\n | ResourceCreatedEvent\n | ResourceClonedEvent\n | ResourceArchivedEvent\n | ResourceUnarchivedEvent\n | RepresentationAddedEvent // Multi-format support\n | RepresentationRemovedEvent // Multi-format support\n | AnnotationAddedEvent\n | AnnotationRemovedEvent\n | AnnotationBodyUpdatedEvent\n | JobStartedEvent // Job progress\n | JobProgressEvent // Job progress\n | JobCompletedEvent // Job progress\n | JobFailedEvent // Job progress\n | EntityTagAddedEvent // Resource-level\n | EntityTagRemovedEvent // Resource-level\n | EntityTypeAddedEvent; // Global collection\n\n// Extract just the event type strings from the union\nexport type ResourceEventType = ResourceEvent['type'];\n\n// System-level events (no resource scope)\nexport type SystemEvent = EntityTypeAddedEvent;\n\n// Resource-scoped events (require resourceId)\nexport type ResourceScopedEvent = Exclude<ResourceEvent, SystemEvent>;\n\n// Type guards\nexport function isResourceEvent(event: any): event is ResourceEvent {\n return event &&\n typeof event.id === 'string' &&\n typeof event.timestamp === 'string' &&\n (event.resourceId === undefined || typeof event.resourceId === 'string') && // resourceId now optional\n typeof event.type === 'string' &&\n event.type.includes('.');\n}\n\n/**\n * Type guard: Check if event is system-level (no resourceId)\n * System events affect global state, not individual resources\n */\nexport function isSystemEvent(event: ResourceEvent): event is SystemEvent {\n return event.type === 'entitytype.added';\n}\n\n/**\n * Type guard: Check if event is resource-scoped (has resourceId)\n * Resource events affect a specific resource's state\n */\nexport function isResourceScopedEvent(event: ResourceEvent): event is ResourceScopedEvent {\n return !isSystemEvent(event);\n}\n\nexport function getEventType<T extends ResourceEvent>(\n event: ResourceEvent\n): T['type'] {\n return event.type as T['type'];\n}\n\n// Event metadata for querying and indexing\nexport interface EventMetadata {\n sequenceNumber: number; // Position in the event log (source of truth for ordering)\n streamPosition: number; // Byte position in JSONL file\n timestamp: string; // When stored (for humans, not ordering)\n prevEventHash?: string; // SHA-256 of previous event (chain integrity, null for first event)\n checksum?: string; // SHA-256 of this event for integrity\n}\n\n// Optional signature for federation\nexport interface EventSignature {\n algorithm: 'ed25519'; // Signature algorithm\n publicKey: string; // User's public key (base64)\n signature: string; // Event signature (base64)\n keyId?: string; // Key identifier for rotation\n}\n\n// Event with metadata (as stored)\nexport interface StoredEvent<T extends ResourceEvent = ResourceEvent> {\n event: T;\n metadata: EventMetadata;\n signature?: EventSignature; // Optional, for federation (unused in MVP)\n}\n\n// Query filters for event retrieval\nexport interface EventQuery {\n resourceId?: ResourceId;\n userId?: string;\n eventTypes?: ResourceEvent['type'][];\n fromTimestamp?: string;\n toTimestamp?: string;\n fromSequence?: number;\n limit?: number;\n}\n\n// Annotation collections for a resource (view storage projection)\n// Annotations are NOT part of the resource - they reference the resource\nexport interface ResourceAnnotations {\n resourceId: ResourceId; // Which resource these annotations belong to (branded type)\n annotations: Annotation[]; // All annotations (highlights, references, assessments, etc.)\n version: number; // Event count for this resource's annotation stream\n updatedAt: string; // Last annotation event timestamp\n}","/**\n * Event Type Guards and Extraction Utilities\n *\n * Domain logic for working with resource events.\n * No React dependencies - safe to use in any JavaScript environment.\n */\n\nimport type { StoredEvent } from './events';\nimport type { AnnotationUri } from './branded-types';\n\n// =============================================================================\n// EVENT TYPE GUARDS AND EXTRACTION\n// =============================================================================\n\n/**\n * Extract annotation ID from event payload\n * Returns null if event is not annotation-related\n *\n * For annotation.added: extracts full URI from payload.annotation.id\n * For annotation.removed/body.updated: constructs full URI from payload.annotationId (UUID) + resourceId\n */\nexport function getAnnotationUriFromEvent(event: StoredEvent): AnnotationUri | null {\n const eventData = event.event;\n\n if (eventData.type === 'annotation.added') {\n // annotation.added has the full annotation object with id as full URI\n return eventData.payload.annotation.id as AnnotationUri || null;\n }\n\n if (eventData.type === 'annotation.removed' || eventData.type === 'annotation.body.updated') {\n // These events have annotationId (UUID only), need to construct full URI\n // Extract base URL from resourceId (format: http://host/resources/id)\n if (eventData.payload.annotationId && eventData.resourceId) {\n try {\n const resourceUri = eventData.resourceId;\n // Extract base URL by removing the /resources/{id} part\n const baseUrl = resourceUri.substring(0, resourceUri.lastIndexOf('/resources/'));\n return `${baseUrl}/annotations/${eventData.payload.annotationId}` as AnnotationUri;\n } catch (e) {\n return null;\n }\n }\n }\n\n return null;\n}\n\n/**\n * Check if an event is related to a specific annotation\n */\nexport function isEventRelatedToAnnotation(event: StoredEvent, annotationUri: AnnotationUri): boolean {\n const eventAnnotationUri = getAnnotationUriFromEvent(event);\n return eventAnnotationUri === annotationUri;\n}\n\n/**\n * Type guard to check if event is a resource event\n */\nexport function isResourceEvent(event: any): event is StoredEvent {\n return event &&\n typeof event.event === 'object' &&\n typeof event.event.id === 'string' &&\n typeof event.event.timestamp === 'string' &&\n typeof event.event.resourceId === 'string' &&\n typeof event.event.type === 'string' &&\n typeof event.metadata === 'object' &&\n typeof event.metadata.sequenceNumber === 'number';\n}\n","/**\n * RxJS-based Event Bus\n *\n * Framework-agnostic event bus providing direct access to typed RxJS Subjects.\n *\n * Can be used in Node.js, browser, workers, CLI - anywhere RxJS runs.\n */\n\nimport { Subject } from 'rxjs';\nimport type { EventMap } from './event-map';\n\n/**\n * RxJS-based event bus\n *\n * Provides direct access to RxJS Subjects for each event type.\n * Use standard RxJS patterns for emitting and subscribing.\n *\n * @example\n * ```typescript\n * const eventBus = new EventBus();\n *\n * // Emit events\n * eventBus.get('beckon:hover').next({ annotationId: 'ann-1' });\n *\n * // Subscribe to events\n * const subscription = eventBus.get('beckon:hover').subscribe(({ annotationId }) => {\n * console.log('Hover:', annotationId);\n * });\n *\n * // Use RxJS operators\n * import { debounceTime } from 'rxjs/operators';\n * eventBus.get('beckon:hover')\n * .pipe(debounceTime(100))\n * .subscribe(handleHover);\n *\n * // Cleanup\n * subscription.unsubscribe();\n * eventBus.destroy();\n * ```\n */\nexport class EventBus {\n private subjects: Map<keyof EventMap, Subject<any>>;\n private isDestroyed: boolean;\n\n constructor() {\n this.subjects = new Map();\n this.isDestroyed = false;\n }\n\n /**\n * Get the RxJS Subject for an event\n *\n * Returns a typed Subject that can be used with all RxJS operators.\n * Subjects are created lazily on first access.\n *\n * @param eventName - The event name\n * @returns The RxJS Subject for this event\n *\n * @example\n * ```typescript\n * // Emit\n * eventBus.get('beckon:hover').next({ annotationId: 'ann-1' });\n *\n * // Subscribe\n * const sub = eventBus.get('beckon:hover').subscribe(handleHover);\n *\n * // With operators\n * eventBus.get('beckon:hover')\n * .pipe(debounceTime(100), distinctUntilChanged())\n * .subscribe(handleHover);\n * ```\n */\n get<K extends keyof EventMap>(eventName: K): Subject<EventMap[K]> {\n if (this.isDestroyed) {\n throw new Error(`Cannot access event '${String(eventName)}' on destroyed bus`);\n }\n\n if (!this.subjects.has(eventName)) {\n this.subjects.set(eventName, new Subject<EventMap[K]>());\n }\n return this.subjects.get(eventName)!;\n }\n\n /**\n * Destroy the event bus and complete all subjects\n *\n * After calling destroy(), no new events can be emitted or subscribed to.\n * All active subscriptions will be completed.\n */\n destroy(): void {\n if (this.isDestroyed) {\n return;\n }\n\n for (const subject of this.subjects.values()) {\n subject.complete();\n }\n\n this.subjects.clear();\n this.isDestroyed = true;\n }\n\n /**\n * Check if the event bus has been destroyed\n */\n get destroyed(): boolean {\n return this.isDestroyed;\n }\n\n /**\n * Create a resource-scoped event bus\n *\n * Events emitted or subscribed through the scoped bus are isolated to that resource.\n * Internally, events are namespaced but the API remains identical to the parent bus.\n *\n * @param resourceId - Resource identifier to scope events to\n * @returns A scoped event bus for this resource\n *\n * @example\n * ```typescript\n * const eventBus = new EventBus();\n * const resource1 = eventBus.scope('resource-1');\n * const resource2 = eventBus.scope('resource-2');\n *\n * // These are isolated - only resource1 subscribers will fire\n * resource1.get('detection:progress').next({ status: 'started' });\n * ```\n */\n scope(resourceId: string): ScopedEventBus {\n return new ScopedEventBus(this, resourceId);\n }\n}\n\n/**\n * Resource-scoped event bus\n *\n * Provides isolated event streams per resource while maintaining the same API\n * as the parent EventBus. Events are internally namespaced by resourceId.\n */\nexport class ScopedEventBus {\n constructor(\n private parent: EventBus,\n private scopePrefix: string\n ) {}\n\n /**\n * Get the RxJS Subject for a scoped event\n *\n * Returns the same type as the parent bus, but events are isolated to this scope.\n * Internally uses namespaced keys but preserves type safety.\n *\n * @param event - The event name\n * @returns The RxJS Subject for this scoped event\n */\n get<E extends keyof EventMap>(event: E): Subject<EventMap[E]> {\n // Internally namespace the event key, but preserve return type\n const scopedKey = `${this.scopePrefix}:${event as string}`;\n\n // Access parent's subjects map directly (needs cast for private access)\n const parentSubjects = (this.parent as any).subjects as Map<string, Subject<any>>;\n\n if (!parentSubjects.has(scopedKey)) {\n parentSubjects.set(scopedKey, new Subject<EventMap[E]>());\n }\n return parentSubjects.get(scopedKey)!;\n }\n\n /**\n * Create a nested scope\n *\n * Allows hierarchical scoping like `resource-1:subsystem-a`\n *\n * @param subScope - Additional scope level\n * @returns A nested scoped event bus\n */\n scope(subScope: string): ScopedEventBus {\n return new ScopedEventBus(this.parent, `${this.scopePrefix}:${subScope}`);\n }\n}\n","/**\n * Adaptive burst buffer RxJS operator.\n *\n * Passes the first event through immediately (zero latency for interactive use).\n * If more events arrive within the burst window, switches to accumulate mode\n * and flushes batches. Returns to passthrough mode after an idle period.\n *\n * Emits individual items (T) in passthrough mode and arrays (T[]) in batch mode.\n * Consumers distinguish via Array.isArray().\n *\n * Threshold tuning:\n * burstWindowMs — How long to wait for more events before flushing a batch.\n * 50ms is a good default: longer than event-loop jitter (~1-5ms)\n * but short enough to feel responsive.\n * maxBatchSize — Force-flush at this size to bound memory. 500 is safe for\n * Neo4j UNWIND queries. Increase if graph writes are cheap.\n * idleTimeoutMs — How long after the last flush before returning to passthrough.\n * 200ms is a good default. Must be >= burstWindowMs.\n *\n * See: BATCH-GRAPH-CONSUMER-RX.md for design rationale.\n * See: packages/graph/docs/ARCHITECTURE.md for graph consumer context.\n */\n\nimport { Observable, OperatorFunction } from 'rxjs';\n\nexport interface BurstBufferOptions {\n /**\n * Time window (ms) to detect burst activity after an event.\n * If another event arrives within this window, it is buffered.\n * The buffer flushes when no new event arrives for this duration (debounce).\n *\n * Recommended: 50ms.\n */\n burstWindowMs: number;\n\n /**\n * Maximum events to accumulate before forcing a flush.\n * Prevents unbounded memory growth during sustained bursts.\n *\n * Recommended: 500.\n */\n maxBatchSize: number;\n\n /**\n * Time (ms) of silence after the last flush before returning to passthrough mode.\n * The next event after this timeout emits immediately (leading edge).\n * Must be >= burstWindowMs.\n *\n * Recommended: 200ms.\n */\n idleTimeoutMs: number;\n}\n\n/**\n * Adaptive burst buffer operator.\n *\n * State machine:\n * PASSTHROUGH → event arrives → emit immediately, transition to ACCUMULATING\n * ACCUMULATING → event arrives → buffer it, reset burst timer\n * ACCUMULATING → burst timer fires (no new events for burstWindowMs) → flush buffer as T[]\n * ACCUMULATING → buffer reaches maxBatchSize → flush buffer as T[]\n * After flush → idle timer starts\n * Idle timer fires (no new events for idleTimeoutMs) → transition to PASSTHROUGH\n */\nexport function burstBuffer<T>(\n options: BurstBufferOptions\n): OperatorFunction<T, T | T[]> {\n const { burstWindowMs, maxBatchSize, idleTimeoutMs } = options;\n\n return (source: Observable<T>) =>\n new Observable<T | T[]>((subscriber) => {\n let mode: 'passthrough' | 'accumulating' = 'passthrough';\n let buffer: T[] = [];\n let burstTimer: ReturnType<typeof setTimeout> | null = null;\n let idleTimer: ReturnType<typeof setTimeout> | null = null;\n\n function clearBurstTimer() {\n if (burstTimer !== null) {\n clearTimeout(burstTimer);\n burstTimer = null;\n }\n }\n\n function clearIdleTimer() {\n if (idleTimer !== null) {\n clearTimeout(idleTimer);\n idleTimer = null;\n }\n }\n\n function flush() {\n if (buffer.length === 0) return;\n const batch = buffer;\n buffer = [];\n subscriber.next(batch);\n }\n\n function startIdleTimer() {\n clearIdleTimer();\n idleTimer = setTimeout(() => {\n idleTimer = null;\n mode = 'passthrough';\n }, idleTimeoutMs);\n }\n\n const subscription = source.subscribe({\n next(value: T) {\n clearIdleTimer();\n\n if (mode === 'passthrough') {\n // Leading edge: emit immediately\n subscriber.next(value);\n // Transition to accumulating — next event within burstWindowMs gets buffered\n mode = 'accumulating';\n // Start a burst timer: if nothing else arrives, start idle countdown\n burstTimer = setTimeout(() => {\n burstTimer = null;\n flush(); // flush anything accumulated (normally empty at this point)\n startIdleTimer();\n }, burstWindowMs);\n return;\n }\n\n // mode === 'accumulating'\n buffer.push(value);\n\n // Reset the burst window timer (debounce pattern)\n clearBurstTimer();\n\n if (buffer.length >= maxBatchSize) {\n // Force flush at max batch size\n flush();\n startIdleTimer();\n } else {\n // Debounce: flush after burstWindowMs of silence\n burstTimer = setTimeout(() => {\n burstTimer = null;\n flush();\n startIdleTimer();\n }, burstWindowMs);\n }\n },\n\n error(err) {\n clearBurstTimer();\n clearIdleTimer();\n flush();\n subscriber.error(err);\n },\n\n complete() {\n clearBurstTimer();\n clearIdleTimer();\n flush();\n subscriber.complete();\n },\n });\n\n // Teardown: clean up timers and unsubscribe from source\n return () => {\n clearBurstTimer();\n clearIdleTimer();\n subscription.unsubscribe();\n };\n });\n}\n","/**\n * Backend-specific annotation utility functions\n */\n\nimport type { components } from './types';\nimport type { BodyItem } from './events';\n\ntype Annotation = components['schemas']['Annotation'];\n\n/**\n * Find a body item in an array\n * Returns the index of the first matching item, or -1 if not found\n */\nexport function findBodyItem(body: Annotation['body'], targetItem: BodyItem): number {\n if (!Array.isArray(body)) {\n return -1;\n }\n\n for (let i = 0; i < body.length; i++) {\n const item = body[i];\n\n // Check if this is a valid body item that can be matched\n if (\n typeof item === 'object' &&\n item !== null &&\n 'type' in item &&\n 'purpose' in item\n ) {\n const itemType = (item as { type: unknown }).type;\n const itemPurpose = (item as { purpose: unknown }).purpose;\n\n // Type and purpose must match\n if (itemType !== targetItem.type || itemPurpose !== targetItem.purpose) {\n continue;\n }\n\n // For TextualBody, match by value\n if (targetItem.type === 'TextualBody' && 'value' in item) {\n const itemValue = (item as { value: unknown }).value;\n if (itemValue === targetItem.value) {\n return i;\n }\n }\n\n // For SpecificResource, match by source\n if (targetItem.type === 'SpecificResource' && 'source' in item) {\n const itemSource = (item as { source: unknown }).source;\n if (itemSource === targetItem.source) {\n return i;\n }\n }\n }\n }\n\n return -1;\n}\n","/**\n * ID generation utilities\n */\n\nimport { randomBytes } from 'crypto';\n\n/**\n * Generate a UUID v4-like ID (without dashes)\n */\nexport function generateUuid(): string {\n return randomBytes(16).toString('hex');\n}\n","/**\n * Annotation Assembly\n *\n * Pure functions for building W3C Annotations and applying body operations.\n * No EventBus, no persistence — just data transformation.\n */\n\nimport type { components } from './types';\nimport type { Selector } from './event-map';\nimport { generateUuid } from './id-generation';\n\ntype Agent = components['schemas']['Agent'];\ntype Annotation = components['schemas']['Annotation'];\ntype AnnotationBody = components['schemas']['AnnotationBody'];\ntype CreateAnnotationRequest = components['schemas']['CreateAnnotationRequest'];\ntype UpdateAnnotationBodyRequest = components['schemas']['UpdateAnnotationBodyRequest'];\ntype TextPositionSelector = components['schemas']['TextPositionSelector'];\ntype SvgSelector = components['schemas']['SvgSelector'];\ntype FragmentSelector = components['schemas']['FragmentSelector'];\n\nexport interface AssembledAnnotation {\n annotation: Annotation;\n bodyArray: AnnotationBody[];\n}\n\n// =============================================================================\n// Selector utilities used by assembleAnnotation\n// =============================================================================\n\n/**\n * Get TextPositionSelector from a selector (single or array)\n */\nexport function getTextPositionSelector(selector: Selector | Selector[] | undefined): TextPositionSelector | null {\n if (!selector) return null;\n const selectors = Array.isArray(selector) ? selector : [selector];\n const found = selectors.find(s => s.type === 'TextPositionSelector');\n if (!found) return null;\n return found.type === 'TextPositionSelector' ? found : null;\n}\n\n/**\n * Get SvgSelector from a selector (single or array)\n */\nexport function getSvgSelector(selector: Selector | Selector[] | undefined): SvgSelector | null {\n if (!selector) return null;\n const selectors = Array.isArray(selector) ? selector : [selector];\n const found = selectors.find(s => s.type === 'SvgSelector');\n if (!found) return null;\n return found.type === 'SvgSelector' ? found : null;\n}\n\n/**\n * Get FragmentSelector from a selector (single or array)\n */\nexport function getFragmentSelector(selector: Selector | Selector[] | undefined): FragmentSelector | null {\n if (!selector) return null;\n const selectors = Array.isArray(selector) ? selector : [selector];\n const found = selectors.find(s => s.type === 'FragmentSelector');\n if (!found) return null;\n return found.type === 'FragmentSelector' ? found : null;\n}\n\n/**\n * Validate SVG markup for W3C compliance\n *\n * @returns null if valid, error message if invalid\n */\nexport function validateSvgMarkup(svg: string): string | null {\n if (!svg.includes('xmlns=\"http://www.w3.org/2000/svg\"')) {\n return 'SVG must include xmlns=\"http://www.w3.org/2000/svg\" attribute';\n }\n\n if (!svg.includes('<svg') || !svg.includes('</svg>')) {\n return 'SVG must have opening and closing tags';\n }\n\n const shapeElements = ['rect', 'circle', 'ellipse', 'polygon', 'polyline', 'path', 'line'];\n const hasShape = shapeElements.some(shape =>\n svg.includes(`<${shape}`) || svg.includes(`<${shape} `)\n );\n\n if (!hasShape) {\n return 'SVG must contain at least one shape element (rect, circle, ellipse, polygon, polyline, path, or line)';\n }\n\n return null;\n}\n\n// =============================================================================\n// Annotation assembly\n// =============================================================================\n\n/**\n * Build a complete W3C Annotation from a CreateAnnotationRequest.\n *\n * Generates a bare annotation ID (no URL prefix). URIs are constructed\n * at the API boundary when returning responses to clients.\n *\n * Throws on invalid input (missing selector, missing motivation, invalid SVG).\n */\nexport function assembleAnnotation(\n request: CreateAnnotationRequest,\n creator: Agent,\n): AssembledAnnotation {\n const newAnnotationId = generateUuid();\n\n // Validate selector: must have TextPositionSelector, SvgSelector, or FragmentSelector\n const posSelector = getTextPositionSelector(request.target.selector);\n const svgSelector = getSvgSelector(request.target.selector);\n const fragmentSelector = getFragmentSelector(request.target.selector);\n\n if (!posSelector && !svgSelector && !fragmentSelector) {\n throw new Error('Either TextPositionSelector, SvgSelector, or FragmentSelector is required for creating annotations');\n }\n\n // Validate SVG markup if SvgSelector is provided\n if (svgSelector) {\n const svgError = validateSvgMarkup(svgSelector.value);\n if (svgError) {\n throw new Error(`Invalid SVG markup: ${svgError}`);\n }\n }\n\n if (!request.motivation) {\n throw new Error('motivation is required');\n }\n\n const now = new Date().toISOString();\n const annotation: Annotation = {\n '@context': 'http://www.w3.org/ns/anno.jsonld' as const,\n 'type': 'Annotation' as const,\n id: newAnnotationId,\n motivation: request.motivation,\n target: request.target,\n body: request.body as Annotation['body'],\n creator,\n created: now,\n modified: now,\n };\n\n const bodyArray = (Array.isArray(request.body) ? request.body : request.body ? [request.body] : []) as AnnotationBody[];\n\n return { annotation, bodyArray };\n}\n\n/**\n * Apply body operations (add/remove/replace) to an annotation's body array.\n * Returns a new array — does not mutate the input.\n */\nexport function applyBodyOperations(\n body: Annotation['body'],\n operations: UpdateAnnotationBodyRequest['operations'],\n): AnnotationBody[] {\n const bodyArray = Array.isArray(body) ? [...body] : [];\n\n for (const op of operations) {\n if (op.op === 'add') {\n const exists = bodyArray.some(item =>\n JSON.stringify(item) === JSON.stringify(op.item)\n );\n if (!exists) {\n bodyArray.push(op.item);\n }\n } else if (op.op === 'remove') {\n const index = bodyArray.findIndex(item =>\n JSON.stringify(item) === JSON.stringify(op.item)\n );\n if (index !== -1) {\n bodyArray.splice(index, 1);\n }\n } else if (op.op === 'replace') {\n const index = bodyArray.findIndex(item =>\n JSON.stringify(item) === JSON.stringify(op.oldItem)\n );\n if (index !== -1) {\n bodyArray[index] = op.newItem;\n }\n }\n }\n\n return bodyArray;\n}\n","/**\n * Common type guard utilities\n */\n\n/**\n * Check if value is a string\n */\nexport function isString(value: unknown): value is string {\n return typeof value === 'string';\n}\n\n/**\n * Check if value is a number (not NaN)\n */\nexport function isNumber(value: unknown): value is number {\n return typeof value === 'number' && !isNaN(value);\n}\n\n/**\n * Check if value is an object (not null, not array)\n */\nexport function isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n/**\n * Check if value is an array\n */\nexport function isArray(value: unknown): value is unknown[] {\n return Array.isArray(value);\n}\n\n/**\n * Check if value is a boolean\n */\nexport function isBoolean(value: unknown): value is boolean {\n return typeof value === 'boolean';\n}\n\n/**\n * Check if value is a function\n */\nexport function isFunction(value: unknown): value is Function {\n return typeof value === 'function';\n}\n\n/**\n * Check if value is null\n */\nexport function isNull(value: unknown): value is null {\n return value === null;\n}\n\n/**\n * Check if value is undefined\n */\nexport function isUndefined(value: unknown): value is undefined {\n return value === undefined;\n}\n\n/**\n * Check if value is null or undefined\n */\nexport function isNullish(value: unknown): value is null | undefined {\n return value === null || value === undefined;\n}\n\n/**\n * Check if value is defined (not null or undefined)\n */\nexport function isDefined<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined;\n}","/**\n * Common error classes\n */\n\n/**\n * Base error class for Semiont applications\n */\nexport class SemiontError extends Error {\n constructor(\n message: string,\n public code: string,\n public details?: Record<string, any>\n ) {\n super(message);\n this.name = 'SemiontError';\n Error.captureStackTrace(this, this.constructor);\n }\n}\n\n/**\n * Error thrown when validation fails\n */\nexport class ValidationError extends SemiontError {\n constructor(message: string, details?: Record<string, any>) {\n super(message, 'VALIDATION_ERROR', details);\n this.name = 'ValidationError';\n }\n}\n\n/**\n * Error thrown by scripts\n */\nexport class ScriptError extends SemiontError {\n constructor(message: string, code: string = 'SCRIPT_ERROR', details?: Record<string, any>) {\n super(message, code, details);\n this.name = 'ScriptError';\n }\n}\n\n/**\n * Error thrown when a resource is not found\n */\nexport class NotFoundError extends SemiontError {\n constructor(resource: string, id?: string) {\n const message = id ? `${resource} with id '${id}' not found` : `${resource} not found`;\n super(message, 'NOT_FOUND', { resource, id });\n this.name = 'NotFoundError';\n }\n}\n\n/**\n * Error thrown when user is not authorized\n */\nexport class UnauthorizedError extends SemiontError {\n constructor(message: string = 'Unauthorized', details?: Record<string, any>) {\n super(message, 'UNAUTHORIZED', details);\n this.name = 'UnauthorizedError';\n }\n}\n\n/**\n * Error thrown when operation would conflict with existing data\n */\nexport class ConflictError extends SemiontError {\n constructor(message: string, details?: Record<string, any>) {\n super(message, 'CONFLICT', details);\n this.name = 'ConflictError';\n }\n}\n\n/**\n * API Error class for handling HTTP errors\n * Used by API clients to represent failed HTTP requests\n */\nexport class APIError extends Error {\n constructor(\n public status: number,\n public data: any,\n message?: string\n ) {\n super(message || `API Error: ${status}`);\n this.name = 'APIError';\n Error.captureStackTrace(this, this.constructor);\n }\n}","/**\n * DID (Decentralized Identifier) and W3C Agent utilities\n *\n * Provides utilities for working with DID:WEB identifiers and converting\n * between user representations and W3C Web Annotation Agent objects.\n */\n\nimport type { components } from './types';\n\ntype Agent = components['schemas']['Agent'];\n\n/**\n * Convert a user object to a DID:WEB identifier\n *\n * Format: did:web:domain.com:users:userId\n * Example: did:web:example.com:users:abc123\n *\n * This is used for W3C Web Annotation compliance and federation readiness.\n *\n * @param user - User object with id and domain\n * @returns DID:WEB identifier string\n */\nexport function userToDid(user: { id: string; domain: string }): string {\n return `did:web:${user.domain}:users:${user.id}`;\n}\n\n/**\n * Convert a user object to a W3C Agent object with DID:WEB identifier\n *\n * Creates a full Agent object for W3C Web Annotation compliance.\n * Includes DID:WEB identifier, type, and name.\n *\n * @param user - User object with id, domain, name, and email\n * @returns W3C Agent object\n */\nexport function userToAgent(user: {\n id: string;\n domain: string;\n name: string | null;\n email: string;\n}): Agent {\n return {\n type: 'Person' as const,\n id: userToDid(user),\n name: user.name || user.email,\n };\n}\n\n/**\n * Convert a DID string to a minimal W3C Agent object\n *\n * Used when reconstructing annotations from events where only the DID is available.\n * Creates a minimal Agent with just the required fields (id, type).\n * Name is derived from the DID for display purposes.\n *\n * @param did - DID:WEB identifier string\n * @returns Minimal W3C Agent object\n */\nexport function didToAgent(did: string): Agent {\n // Extract user ID from DID format: did:web:domain.com:users:userId\n const parts = did.split(':');\n const userId = parts[parts.length - 1] || 'unknown';\n\n return {\n type: 'Person' as const,\n id: did,\n name: userId, // Use user ID as name since we don't have full user data\n };\n}\n","/**\n * TOML Config Loader\n *\n * Reads ~/.semiontconfig (TOML) and .semiont/config (TOML) and produces\n * an EnvironmentConfig for the requested environment.\n *\n * File format: see TOML-XDG-CONFIG.md\n *\n * Loading sequence:\n * 1. Read .semiont/config → projectName, site, environments.<env>.* (project base)\n * 2. Read ~/.semiontconfig → defaults, environments.<env>.* (user overrides)\n * 3. Deep-merge: project base ← user overrides (user wins on conflicts)\n * Any environment name is valid (local, staging, production, custom, ...)\n * 4. Resolve ${VAR} references from process.env\n * 5. Apply inheritance: workers.<name> → workers.default → error\n * 6. Map to EnvironmentConfig shape\n */\n\nimport { parse as parseToml } from 'smol-toml';\nimport type { EnvironmentConfig, OllamaProviderConfig, AnthropicProviderConfig } from './config.types';\nimport type { PlatformType } from './config.types';\n\n/**\n * Deep merge two plain objects. Arrays and primitives in `override` replace those in `base`.\n * Nested objects are merged recursively. `override` takes precedence on conflicts.\n */\nfunction deepMerge<T extends Record<string, unknown>>(base: T, override: Partial<T>): T {\n const result = { ...base } as Record<string, unknown>;\n for (const key of Object.keys(override)) {\n const b = base[key];\n const o = override[key];\n if (o !== undefined && o !== null && typeof o === 'object' && !Array.isArray(o) &&\n b !== undefined && b !== null && typeof b === 'object' && !Array.isArray(b)) {\n result[key] = deepMerge(b as Record<string, unknown>, o as Record<string, unknown>);\n } else if (o !== undefined) {\n result[key] = o;\n }\n }\n return result as T;\n}\n\nfunction resolveEnvVars(obj: unknown, env: Record<string, string | undefined>): unknown {\n if (typeof obj === 'string') {\n return obj.replace(/\\$\\{([^}]+)\\}/g, (match, varName) => {\n if (env[varName] === undefined) {\n throw new Error(`Environment variable ${varName} is not set (referenced in config as ${match})`);\n }\n return env[varName] as string;\n });\n }\n if (Array.isArray(obj)) {\n return obj.map(item => resolveEnvVars(item, env));\n }\n if (obj !== null && typeof obj === 'object') {\n const resolved: Record<string, unknown> = {};\n for (const key in obj as Record<string, unknown>) {\n resolved[key] = resolveEnvVars((obj as Record<string, unknown>)[key], env);\n }\n return resolved;\n }\n return obj;\n}\n\n// ── Inference config types (mirrored from packages/make-meaning/src/config.ts) ─\n// Kept here to avoid a circular dependency: core cannot import make-meaning.\n\nexport interface InferenceConfig {\n type: 'anthropic' | 'ollama';\n model: string;\n maxTokens?: number;\n apiKey?: string;\n endpoint?: string;\n baseURL?: string;\n}\n\nexport interface ActorInferenceConfig {\n gatherer?: InferenceConfig;\n matcher?: InferenceConfig;\n}\n\nexport interface WorkerInferenceConfig {\n default?: InferenceConfig;\n 'reference-annotation'?: InferenceConfig;\n 'highlight-annotation'?: InferenceConfig;\n 'assessment-annotation'?: InferenceConfig;\n 'comment-annotation'?: InferenceConfig;\n 'tag-annotation'?: InferenceConfig;\n 'generation'?: InferenceConfig;\n}\n\n// ── Types for ~/.semiontconfig ────────────────────────────────────────────────\n\ninterface SemiontConfigFile {\n user?: {\n name?: string;\n email?: string;\n };\n defaults?: {\n environment?: string;\n platform?: string;\n };\n environments?: Record<string, EnvironmentSection>;\n}\n\ninterface GraphSection {\n platform?: string;\n type?: string;\n name?: string;\n uri?: string;\n username?: string;\n password?: string;\n database?: string;\n [key: string]: unknown;\n}\n\ninterface InferenceFlatSection {\n type?: 'anthropic' | 'ollama';\n platform?: string;\n model?: string;\n maxTokens?: number;\n apiKey?: string;\n endpoint?: string;\n baseURL?: string;\n}\n\ninterface EnvironmentSection {\n backend?: {\n platform?: string;\n port?: number;\n publicURL?: string;\n frontendURL?: string;\n corsOrigin?: string;\n };\n frontend?: {\n platform?: string;\n port?: number;\n publicURL?: string;\n };\n proxy?: {\n platform?: string;\n port?: number;\n adminPort?: number;\n publicURL?: string;\n };\n site?: {\n domain?: string;\n siteName?: string;\n adminEmail?: string;\n oauthAllowedDomains?: string[];\n enableLocalAuth?: boolean;\n };\n database?: {\n platform?: string;\n image?: string;\n host?: string;\n port?: number;\n name?: string;\n user?: string;\n password?: string;\n };\n graph?: GraphSection;\n inference?: InferenceFlatSection;\n 'make-meaning'?: {\n graph?: Record<string, unknown>;\n actors?: {\n gatherer?: { inference?: InferenceConfig };\n matcher?: { inference?: InferenceConfig };\n };\n default?: { inference?: InferenceConfig };\n };\n workers?: Record<string, { inference?: InferenceConfig }>;\n actors?: Record<string, { inference?: InferenceConfig }>;\n logLevel?: 'error' | 'warn' | 'info' | 'http' | 'debug';\n}\n\n// ── File reader abstraction (same pattern as createConfigLoader) ──────────────\n\nexport type TomlFileReader = {\n readIfExists: (path: string) => string | null;\n};\n\nfunction requirePlatform(value: string | undefined, serviceName: string): PlatformType {\n if (!value) {\n throw new Error(`platform is required for service '${serviceName}' — add 'platform = \"posix\"|\"container\"|\"external\"' to its config section`);\n }\n return value as PlatformType;\n}\n\n// ── Main loader function ──────────────────────────────────────────────────────\n\n/**\n * Parse ~/.semiontconfig and .semiont/config and return EnvironmentConfig.\n *\n * @param projectRoot - Path to the project root (contains .semiont/config)\n * @param environment - Environment name (e.g. 'local', 'production')\n * @param globalConfigPath - Path to ~/.semiontconfig (caller resolves ~ expansion)\n * @param reader - File reader abstraction\n * @param env - Environment variables for ${VAR} resolution\n */\nexport function loadTomlConfig(\n projectRoot: string,\n environment: string,\n globalConfigPath: string,\n reader: TomlFileReader,\n env: Record<string, string | undefined>\n): EnvironmentConfig {\n // 1. Read project config from .semiont/config\n const projectConfigContent = reader.readIfExists(`${projectRoot}/.semiont/config`);\n let projectName = 'semiont-project';\n let projectSite: EnvironmentSection['site'] | undefined;\n let projectEnvSection: EnvironmentSection = {};\n if (projectConfigContent) {\n const projectConfig = parseToml(projectConfigContent) as {\n project?: { name?: string };\n site?: EnvironmentSection['site'];\n environments?: Record<string, EnvironmentSection>;\n };\n projectName = projectConfig.project?.name ?? projectName;\n projectSite = projectConfig.site;\n projectEnvSection = projectConfig.environments?.[environment] ?? {};\n }\n\n // 2. Read global config (optional — missing config yields empty environments)\n const globalContent = reader.readIfExists(globalConfigPath);\n const raw = globalContent ? (parseToml(globalContent) as SemiontConfigFile) : ({} as SemiontConfigFile);\n\n // 3. Deep-merge: project base + user overrides (user wins on conflicts)\n const userEnvSection: EnvironmentSection = raw.environments?.[environment] ?? {};\n const envSection: EnvironmentSection = deepMerge(\n projectEnvSection as Record<string, unknown>,\n userEnvSection as Record<string, unknown>\n ) as EnvironmentSection;\n\n // 4. Resolve ${VAR} references\n const resolved = resolveEnvVars(envSection, env) as EnvironmentSection;\n\n // 5. Build make-meaning actor/worker inference config with inheritance\n // The flat [inference] section provides defaults (apiKey, maxTokens, endpoint/baseURL).\n // Actor/worker sections only need to specify type and model; missing fields fall back\n // to the flat inference section.\n const flatInference = resolved.inference;\n const makeMeaningSection = resolved['make-meaning'];\n const workersSection = resolved.workers ?? {};\n const actorsSection = resolved.actors ?? {};\n const defaultWorkerInference = workersSection['default']?.inference;\n const defaultMakeMeaningInference = makeMeaningSection?.default?.inference;\n\n function mergeWithFlatInference(specific: InferenceConfig): InferenceConfig {\n if (!flatInference) return specific;\n return {\n apiKey: flatInference.apiKey,\n maxTokens: flatInference.maxTokens,\n endpoint: flatInference.endpoint,\n baseURL: flatInference.baseURL,\n ...specific,\n };\n }\n\n function resolveActorInference(fromMakeMeaning?: InferenceConfig, fromActors?: InferenceConfig): InferenceConfig | undefined {\n const base = fromMakeMeaning ?? fromActors ?? defaultMakeMeaningInference;\n if (!base) return undefined;\n return mergeWithFlatInference(base);\n }\n\n const actors: ActorInferenceConfig = {};\n const gathererInference = resolveActorInference(\n makeMeaningSection?.actors?.gatherer?.inference,\n actorsSection['gatherer']?.inference\n );\n if (gathererInference) actors.gatherer = gathererInference;\n\n const matcherInference = resolveActorInference(\n makeMeaningSection?.actors?.matcher?.inference,\n actorsSection['matcher']?.inference\n );\n if (matcherInference) actors.matcher = matcherInference;\n\n const workers: WorkerInferenceConfig = {};\n const workerTypes = ['reference-annotation', 'highlight-annotation', 'assessment-annotation', 'comment-annotation', 'tag-annotation', 'generation'] as const;\n if (defaultWorkerInference) {\n workers.default = mergeWithFlatInference(defaultWorkerInference);\n }\n for (const wt of workerTypes) {\n const specific = workersSection[wt]?.inference;\n if (specific) {\n (workers as Record<string, InferenceConfig>)[wt] = mergeWithFlatInference(specific);\n }\n }\n\n // 6. Map to EnvironmentConfig\n const backend = resolved.backend;\n const site = resolved.site ?? projectSite;\n const inferenceSection = resolved.inference;\n\n // Build inference providers config\n // Supports flat format: [environments.local.inference] with type = \"anthropic\"|\"ollama\"\n let inferenceProviders: EnvironmentConfig['inference'] | undefined;\n if (inferenceSection) {\n inferenceProviders = {};\n if (inferenceSection.type === 'anthropic') {\n inferenceProviders.anthropic = {\n platform: requirePlatform(inferenceSection.platform, 'inference'),\n endpoint: inferenceSection.endpoint ?? 'https://api.anthropic.com',\n apiKey: inferenceSection.apiKey ?? '',\n } as AnthropicProviderConfig;\n } else if (inferenceSection.type === 'ollama') {\n inferenceProviders.ollama = {\n platform: { type: requirePlatform(inferenceSection.platform, 'inference') },\n baseURL: inferenceSection.baseURL,\n port: inferenceSection.baseURL ? undefined : 11434,\n } as OllamaProviderConfig;\n }\n }\n\n // Build top-level workers/actors maps for EnvironmentConfig\n const topLevelWorkers: EnvironmentConfig['workers'] = {};\n for (const [name, w] of Object.entries(workersSection)) {\n if (w.inference) {\n topLevelWorkers[name] = { inference: { type: w.inference.type, model: w.inference.model } };\n }\n }\n const topLevelActors: EnvironmentConfig['actors'] = {};\n for (const [name, a] of Object.entries(actorsSection)) {\n if (a.inference) {\n topLevelActors[name] = { inference: { type: a.inference.type, model: a.inference.model } };\n }\n }\n // Also include make-meaning actors\n if (makeMeaningSection?.actors?.gatherer?.inference) {\n topLevelActors['gatherer'] = { inference: { type: makeMeaningSection.actors.gatherer.inference.type, model: makeMeaningSection.actors.gatherer.inference.model } };\n }\n if (makeMeaningSection?.actors?.matcher?.inference) {\n topLevelActors['matcher'] = { inference: { type: makeMeaningSection.actors.matcher.inference.type, model: makeMeaningSection.actors.matcher.inference.model } };\n }\n\n const frontend = resolved.frontend;\n const proxy = resolved.proxy;\n\n const config: EnvironmentConfig = {\n services: {\n backend: backend ? {\n platform: { type: requirePlatform(backend.platform, 'backend') },\n port: backend.port ?? 4000,\n publicURL: backend.publicURL ?? `http://localhost:${backend.port ?? 4000}`,\n corsOrigin: backend.corsOrigin ?? backend.frontendURL ?? 'http://localhost:3000',\n } : undefined,\n frontend: frontend ? {\n platform: { type: requirePlatform(frontend.platform, 'frontend') },\n port: frontend.port ?? 3000,\n siteName: site?.siteName ?? 'Semiont',\n publicURL: frontend.publicURL,\n } : undefined,\n proxy: proxy ? {\n platform: { type: requirePlatform(proxy.platform, 'proxy') },\n type: 'envoy',\n port: proxy.port ?? 8080,\n adminPort: proxy.adminPort ?? 9901,\n backendPort: backend?.port ?? 4000,\n frontendPort: frontend?.port ?? 3000,\n } : undefined,\n graph: resolved.graph ? {\n ...resolved.graph,\n platform: { type: requirePlatform(resolved.graph.platform as string | undefined, 'graph') },\n type: (resolved.graph.type ?? 'neo4j') as import('./config.types').GraphDatabaseType,\n } as EnvironmentConfig['services']['graph'] : (makeMeaningSection?.graph as EnvironmentConfig['services']['graph']),\n database: resolved.database ? {\n platform: { type: requirePlatform(resolved.database.platform, 'database') },\n type: 'postgres',\n image: resolved.database.image,\n host: resolved.database.host ?? 'localhost',\n port: resolved.database.port ?? 5432,\n name: resolved.database.name,\n user: resolved.database.user,\n password: resolved.database.password,\n } as EnvironmentConfig['services']['database'] : undefined,\n },\n ...(inferenceProviders ? { inference: inferenceProviders } : {}),\n ...(Object.keys(topLevelWorkers).length > 0 ? { workers: topLevelWorkers } : {}),\n ...(Object.keys(topLevelActors).length > 0 ? { actors: topLevelActors } : {}),\n site: site ? {\n domain: site.domain ?? 'localhost',\n siteName: site.siteName,\n adminEmail: site.adminEmail,\n oauthAllowedDomains: site.oauthAllowedDomains as [string, ...string[]] | undefined,\n } : undefined,\n logLevel: resolved.logLevel,\n _metadata: {\n environment,\n projectRoot,\n projectName,\n ...(Object.keys(actors).length > 0 ? { actors } : {}),\n ...(Object.keys(workers).length > 0 ? { workers } : {}),\n },\n };\n\n return config;\n}\n\n/**\n * Create a TOML config loader backed by a file reader.\n * Drop-in replacement for createConfigLoader that reads TOML instead of JSON.\n * The caller must resolve globalConfigPath (e.g. expand '~' using process.env.HOME).\n */\nexport function createTomlConfigLoader(\n reader: TomlFileReader,\n globalConfigPath: string,\n env: Record<string, string | undefined>\n) {\n return (projectRoot: string, environment: string): EnvironmentConfig => {\n return loadTomlConfig(projectRoot, environment, globalConfigPath, reader, env);\n };\n}\n","/**\n * Environment validation utilities\n *\n * Pure functions - accept available environments as parameter instead of reading from filesystem\n */\n\nexport type Environment = string; // Allow any environment name\n\n/**\n * Type guard to check if a string is a valid Environment\n * @param value - The environment string to check\n * @param availableEnvironments - List of valid environment names\n */\nexport function isValidEnvironment(value: string | undefined, availableEnvironments: string[]): value is Environment {\n if (!value) return false;\n return availableEnvironments.includes(value);\n}\n\n/**\n * Parse environment string to Environment type\n * @param value - The environment string to parse\n * @param availableEnvironments - List of valid environment names\n * @returns Valid Environment type\n * @throws Error if environment is invalid or not provided\n */\nexport function parseEnvironment(value: string | undefined, availableEnvironments: string[]): Environment {\n if (!value) {\n throw new Error('Environment is required');\n }\n if (!isValidEnvironment(value, availableEnvironments)) {\n throw new Error(`Invalid environment: ${value}. Available environments: ${availableEnvironments.join(', ')}`);\n }\n return value;\n}\n\n/**\n * Validate and return environment or throw error\n * @param value - The environment string to validate\n * @param availableEnvironments - List of valid environment names\n * @throws Error if environment is invalid\n */\nexport function validateEnvironment(value: string | undefined, availableEnvironments: string[]): Environment {\n if (!value) {\n throw new Error('Environment is required');\n }\n if (!isValidEnvironment(value, availableEnvironments)) {\n throw new Error(`Invalid environment: ${value}. Available environments: ${availableEnvironments.join(', ')}`);\n }\n return value;\n}","/**\n * Configuration Error Class\n * \n * Custom error class for configuration validation and loading errors.\n * Provides structured error information with helpful suggestions.\n */\n\nexport class ConfigurationError extends Error {\n public override readonly cause?: Error;\n\n constructor(\n message: string,\n public environment?: string,\n public suggestion?: string,\n cause?: Error\n ) {\n super(message);\n this.name = 'ConfigurationError';\n this.cause = cause;\n }\n \n /**\n * Format the error nicely for CLI output\n */\n override toString(): string {\n let output = `❌ ${this.message}`;\n if (this.environment) {\n output += `\\n Environment: ${this.environment}`;\n }\n if (this.suggestion) {\n output += `\\n 💡 Suggestion: ${this.suggestion}`;\n }\n return output;\n }\n}","/**\n * Platform Types Module\n *\n * Re-exports PlatformType from schema-generated types.\n * Platforms represent WHERE services run (infrastructure targets).\n */\n\nimport { PlatformType as SchemaPlatformType } from './config.types';\n\n/**\n * Platform type literals from JSON Schema\n * These represent the infrastructure targets where services can be deployed\n */\nexport type PlatformType = SchemaPlatformType;\n\n/**\n * Type guard to check if a string is a valid platform type\n *\n * @param value - Value to check\n * @returns True if value is a valid PlatformType\n */\nexport function isValidPlatformType(value: string): value is PlatformType {\n return ['aws', 'container', 'posix', 'external'].includes(value);\n}\n\n/**\n * Get all valid platform types\n *\n * @returns Array of all platform types\n */\nexport function getAllPlatformTypes(): PlatformType[] {\n return ['aws', 'container', 'posix', 'external'];\n}","/**\n * @semiont/core\n *\n * Core domain logic and utilities for the Semiont semantic knowledge platform.\n * OpenAPI types are generated here and exported for use across the monorepo.\n */\n\n// OpenAPI-generated types (source of truth for API schemas)\nexport type { components, paths, operations } from './types';\n\n// Branded types (compile-time type safety)\nexport type {\n // OpenAPI types\n Motivation,\n ContentFormat,\n // Authentication & tokens\n Email,\n AuthCode,\n GoogleCredential,\n AccessToken,\n RefreshToken,\n MCPToken,\n CloneToken,\n // System identifiers\n JobId,\n UserDID,\n EntityType,\n SearchQuery,\n BaseUrl,\n // HTTP URI types\n ResourceUri,\n AnnotationUri,\n ResourceAnnotationUri,\n} from './branded-types';\nexport {\n // Helper functions\n email,\n authCode,\n googleCredential,\n accessToken,\n refreshToken,\n mcpToken,\n cloneToken,\n jobId,\n userDID,\n entityType,\n searchQuery,\n baseUrl,\n // URI factory functions\n resourceUri,\n annotationUri,\n resourceAnnotationUri,\n} from './branded-types';\n\n// Creation methods\nexport { CREATION_METHODS } from './creation-methods';\nexport type { CreationMethod } from './creation-methods';\n\n// Identifier types (only IDs - URIs are in @semiont/api-client)\nexport type { ResourceId, AnnotationId, UserId } from './identifiers';\nexport {\n resourceId,\n annotationId,\n userId,\n isResourceId,\n isAnnotationId,\n} from './identifiers';\n\n// Graph types\nexport type {\n GraphConnection,\n GraphPath,\n EntityTypeStats,\n} from './graph';\n\n// Event types\nexport type {\n BaseEvent,\n ResourceEvent,\n ResourceEventType,\n SystemEvent,\n ResourceScopedEvent,\n ResourceCreatedEvent,\n ResourceClonedEvent,\n ResourceArchivedEvent,\n ResourceUnarchivedEvent,\n RepresentationAddedEvent,\n RepresentationRemovedEvent,\n AnnotationAddedEvent,\n AnnotationRemovedEvent,\n AnnotationBodyUpdatedEvent,\n JobStartedEvent,\n JobProgressEvent,\n JobCompletedEvent,\n JobFailedEvent,\n BodyOperation,\n BodyItem,\n EntityTagAddedEvent,\n EntityTagRemovedEvent,\n EventMetadata,\n EventSignature,\n StoredEvent,\n EventQuery,\n ResourceAnnotations,\n} from './events';\nexport {\n isResourceEvent,\n isSystemEvent,\n isResourceScopedEvent,\n getEventType,\n} from './events';\n\n// Event utilities\nexport {\n getAnnotationUriFromEvent,\n isEventRelatedToAnnotation,\n isResourceEvent as isStoredEvent,\n} from './event-utils';\n\n// Event bus (RxJS-based, framework-agnostic)\nexport { EventBus, ScopedEventBus } from './event-bus';\n\n// RxJS operators\nexport { burstBuffer, type BurstBufferOptions } from './operators/burst-buffer';\n\n// Logger interface (framework-agnostic)\nexport type { Logger } from './logger';\n\n// Event protocol (application-level events for event bus)\nexport type {\n EventMap,\n EventName,\n SelectionData,\n MarkProgress,\n YieldProgress,\n Selector,\n GatheredContext,\n} from './event-map';\n\n// Backend-specific annotation utilities\nexport { findBodyItem } from './annotation-utils';\n\n// Annotation assembly (pure functions for building W3C Annotations)\nexport {\n assembleAnnotation,\n applyBodyOperations,\n getTextPositionSelector,\n getSvgSelector,\n getFragmentSelector,\n validateSvgMarkup,\n} from './annotation-assembly';\nexport type { AssembledAnnotation } from './annotation-assembly';\n\n// Resource types\nexport type { UpdateResourceInput, ResourceFilter } from './resource-types';\n\n// Annotation types\nexport type { AnnotationCategory, CreateAnnotationInternal } from './annotation-types';\n\n// Auth types\nexport type { GoogleAuthRequest } from './auth-types';\n\n// ID generation\nexport { generateUuid } from './id-generation';\n\n// Utility functions\nexport * from './type-guards';\nexport * from './errors';\nexport * from './did-utils';\n\n// Configuration types\nexport type {\n EnvironmentConfig,\n SiteConfig,\n AppConfig,\n} from './config/config.types';\n\nexport {\n loadTomlConfig,\n createTomlConfigLoader,\n type TomlFileReader,\n type InferenceConfig as TomlInferenceConfig,\n type ActorInferenceConfig as TomlActorInferenceConfig,\n type WorkerInferenceConfig as TomlWorkerInferenceConfig,\n} from './config/toml-loader';\n\nexport {\n parseEnvironment,\n validateEnvironment,\n type Environment,\n} from './config/environment-validator';\nexport { ConfigurationError } from './config/configuration-error';\nexport type { ProxyServiceConfig } from './config/config.types';\nexport {\n type PlatformType,\n isValidPlatformType,\n getAllPlatformTypes,\n} from './config/platform-types';\n\n// Schema-generated configuration types\nexport type {\n BackendServiceConfig,\n FrontendServiceConfig,\n DatabaseServiceConfig,\n GraphServiceConfig,\n OllamaProviderConfig,\n AnthropicProviderConfig,\n InferenceProvidersConfig,\n McpServiceConfig,\n ServicesConfig,\n SemiontConfig,\n GraphDatabaseType,\n ServicePlatformConfig\n} from './config/config.types';\n\n// Version information\nexport const CORE_TYPES_VERSION = '0.1.0';\nexport const SDK_VERSION = '0.1.0';\n"]}